%global appLoc serverName;
%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')
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') 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;
if vartype(dsid,i)='C' then header=cats(varnm,':$char',varlen(dsid,i),'.');
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.');
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);
%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+PGh0bWw+PGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1ldGEgbmFtZT0iZGVzY3Jp'@;
put 'cHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgaXRlbXByb3A9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZp'@;
put 'ZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8vZGVtby5kYXRh'@;
put 'Y29udHJvbGxlci5pbyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9u'@;
put 'IiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQi'@;
put 'IGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iL1NBU0pvYkV4ZWN1'@;
put 'dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2Zhdmljb24uaWNvIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3N0eWxlcy4xYzcyMGM1NDY5ZTRmMmQ0'@;
put 'LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIg'@;
put 'U0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNlci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1'@;
put 'cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3Rh'@;
put 'Z2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAgICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxib2R5IGNsYXNzPSJtLTAiPjxzYXNqcyBzZXJ2ZXJ1cmw9'@;
put 'IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTVklZQSIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91'@;
put 'cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI+CiAgPC9zYXNqcz4KCiAgCiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSIvU0FT'@;
put 'Sm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9ydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3Bv'@;
put 'bHlmaWxscy44N2RiYmQzZmFhYmVkNTEzLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9zY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPSIiPjwvc2NyaXB0Pjxz'@;
put 'Y3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9tYWluLjNkYTZlODRjNjc4ODBhOTQuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+CgoKICAgIDwhLS0gCiAgICAgIFRvIHByZXZlbnQgcmVkaXJlY3RzIC8gcHJlc2VydmUgdGhl'@;
put 'IFVSTCB3aGVuIHN0cmVhbWluZyAKICAgICAgSFRNTCBmcm9tIFZpeWEsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgX2RlYnVnPTIgcGFyYW1ldGVyCiAgICAgIHdoaWNoIHdpbGwgc2VydmUgdGhlIGNvbnRlbnQgaW4gYW4gaWZyYW1lLiAgVGhlIGZvbGxvd2luZyAKICAgICAgY29kZSB3aWxs'@;
put 'IHRoZW4gbW9kaWZ5IHRoZSBwYXJlbnQgaWZyYW1lIHRvIHNlcnZlIHRoZSBjb250ZW50CiAgICAgIGluIGZ1bGwgc2NyZWVuLgogICAgLS0+CiAgICA8c2NyaXB0PgogICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpewogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlPSJoZWlnaHQ6'@;
put 'MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIjsKICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKQogICAgICB3aW5k'@;
put 'b3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIp'@;
put 'CiAgICAgIHdpbmRvdy5mb2N1cygpCiAgICB9CiAgICA8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_alerts set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',alert_event=''*ALL*''';
put ',alert_lib=''*ALL*''';
put ',alert_ds=''*ALL*''';
put ',alert_user="&sysuserid";';
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_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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_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());';
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=##BITEMP_&base_dsn;';
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 bitemp5a_lkp (keep=&md5_col);';
put 'set 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=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_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());';
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=##BITEMP_&base_dsn;';
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 bitemp5a_lkp (keep=&md5_col);';
put 'set 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=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_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());';
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=##BITEMP_&base_dsn;';
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 bitemp5a_lkp (keep=&md5_col);';
put 'set 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=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"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_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 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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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)';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 ',a.reviewed_on_dttm';
put ',a.reviewed_by_nm as approver';
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 'order by a.submitted_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.submits;';
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)';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 $500 fref fref2 $8 file_or_folder $6 filename $80';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_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());';
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=##BITEMP_&base_dsn;';
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 bitemp5a_lkp (keep=&md5_col);';
put 'set 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=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"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_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_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 '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=E8601DT26.6';
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 WARNING: 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 '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 WARNING: authcheck=&authcheck prev_upload_check=&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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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'' 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''';
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 ' 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_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'' 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''';
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 '/* send to the client */';
put '%webout(OPEN)';
put '%webout(OBJ,approvers)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dqdata)';
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,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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 $500 fref fref2 $8 file_or_folder $6 filename $80';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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)';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '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 $500 fref fref2 $8 file_or_folder $6 filename $80';
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 '/* 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'' 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 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
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 '/* make sure that the variables we are importing, actually';
put 'exist on the target table */';
put '/** edit - extra variables are now simply ignored';
put '%local very_bad_vars;';
put 'select name into: very_bad_vars separated by '' ''';
put 'from vars_csv1';
put 'where name not in (select name from vars)';
put 'and name ne "_____DELETE__THIS__RECORD_____";';
put '%if %length(&very_bad_vars) > 0 %then %do;';
put '%let msg=%str(WARNING: The following vars are not defined in %trim(';
put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '**/';
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 &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 warning */';
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=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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '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 $500 fref fref2 $8 file_or_folder $6 filename $80';
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 '/* 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'' 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 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
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 '/* make sure that the variables we are importing, actually';
put 'exist on the target table */';
put '/** edit - extra variables are now simply ignored';
put '%local very_bad_vars;';
put 'select name into: very_bad_vars separated by '' ''';
put 'from vars_csv1';
put 'where name not in (select name from vars)';
put 'and name ne "_____DELETE__THIS__RECORD_____";';
put '%if %length(&very_bad_vars) > 0 %then %do;';
put '%let msg=%str(WARNING: The following vars are not defined in %trim(';
put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '**/';
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 &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 warning */';
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 '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'') 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 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',varlen(dsid,i),''.'');';
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 '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 '%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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_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 dc_assignlib.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=;';
put 'data _null_;';
put 'set SASControlTable;';
put 'call symputx(''table'',table);';
put 'run;';
put '%dc_assignlib(WRITE,%scan(&table,1,.))';
put '%let max_ver_dttm=0;';
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 'data jsParams;';
put 'set approve1;';
put 'LIB_ENGINE="%mf_getEngine(&base_lib)";';
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)';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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=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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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_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());';
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=##BITEMP_&base_dsn;';
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 bitemp5a_lkp (keep=&md5_col);';
put 'set 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=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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'' 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''';
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 ' 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_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 '/* 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 '%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,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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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)';
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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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 '%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 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug';
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 '%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 '%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 '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=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+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KICAgIDx0aXRsZT5EYXRhIENvbnRyb2xsZXI8L3RpdGxlPgogICAgPCEtLSA8YmFzZSBocmVmPSIvIj4gLS0+CgogICAgPCEtLSBtZXRhIHRhZ3MgLS0+CiAgICA8bWV0YSBuYW1lPSJk'@;
put 'ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVy'@;
put 'ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8v'@;
put 'ZGVtby5kYXRhY29udHJvbGxlci5pbyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGF0YSBDb250cm9sbGVyIGZvciBTQVPCriIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9n'@;
put 'OmRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciLz4KCiAgICA8bWV0YSBu'@;
put 'YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhy'@;
put 'ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjFjNzIwYzU0NjllNGYyZDQuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0'@;
put 'aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv'@;
put 'Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh'@;
put 'Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4'@;
put 'dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1'@;
put 'ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv'@;
put 'biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy44N2RiYmQzZmFhYmVkNTEz'@;
put 'LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLjNkYTZlODRjNjc4ODBhOTQuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.3da6e84c67880a94.js;
filename filecode temp lrecl=11452564;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1sxNzldLHs3NDA5MjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbihMZSl7dmFyIEY9e307ZnVuY3Rpb24gYWUoeCl7aWYoRlt4XSlyZXR1cm4g'@;
put 'Rlt4XS5leHBvcnRzO3ZhciBtPUZbeF09e2k6eCxsOiExLGV4cG9ydHM6e319O3JldHVybiBMZVt4XS5jYWxsKG0uZXhwb3J0cyxtLG0uZXhwb3J0cyxhZSksbS5sPSEwLG0uZXhwb3J0c31yZXR1cm4gYWUubT1MZSxhZS5jPUYsYWUuZD1mdW5jdGlvbih4LG0sbGUpe2FlLm8oeCxtKXx8T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHgsbSx7ZW51bWVyYWJsZTohMCxnZXQ6bGV9KX0sYWUucj1mdW5jdGlvbih4KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxhZS50PWZ1bmN0aW9uKHgsbSl7aWYoMSZtJiYoeD1hZSh4KSksOCZtfHw0Jm0mJiJvYmplY3QiPT10eXBlb2YgeCYmeCYmeC5fX2VzTW9kdWxlKXJldHVybiB4O3ZhciBsZT1PYmplY3QuY3JlYXRlKG51'@;
put 'bGwpO2lmKGFlLnIobGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eH0pLDImbSYmInN0cmluZyIhPXR5cGVvZiB4KWZvcih2YXIgTSBpbiB4KWFlLmQobGUsTSxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0uYmluZChudWxsLE0pKTty'@;
put 'ZXR1cm4gbGV9LGFlLm49ZnVuY3Rpb24oeCl7dmFyIG09eCYmeC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4geH07cmV0dXJuIGFlLmQobSwiYSIsbSksbX0sYWUubz1mdW5jdGlvbih4LG0pe3JldHVybiBPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwoeCxtKX0sYWUucD0iIixhZShhZS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5k'@;
put 'ICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHg9YWUoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLG09e30sbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5zaW5nbGVJbnN0YW5jZXx8'@;
put 'KE0uc2luZ2xlSW5zdGFuY2U9bmV3IE0pLE0uc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksTS5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKE8pe2lmKDA9PT1PLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMg'@;
put 'bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KE8pKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LE0ucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBl'@;
put 'TmFtZT1mdW5jdGlvbihPKXtyZXR1cm4gTy50b0xvd2VyQ2FzZSgpfSxNLnByb3RvdHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oTyxSKXt2YXIgej1SLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmKE89dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoTyksbVtPXSYmZGVsZXRlIG1b'@;
put 'T10sbVtPXT16LHguU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFuZ2VzKE8seikpfSxNLnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihPLFIseil7Zm9yKHZhciBLPTAsTD16O0s8TC5sZW5ndGg7SysrKXt2YXIgaz1MW0tdO3RoaXMudmFsaWRhdGVOYW1l'@;
put 'KGspJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxrLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT1tSXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihPKXtpZigib2JqZWN0IiE9dHlwZW9mIE8pdGhyb3cgbmV3IEVycm9yKCdUaGUg'@;
put 'YXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIFIgaW4gTylPLmhhc093blByb3BlcnR5KFIpJiZ0aGlzLnNl'@;
put 'dEljb25UZW1wbGF0ZShSLE9bUl0pfSxNLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oTyl7cmV0dXJuISFtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKE8pe2lmKCFPKXJldHVybiBtO2lmKCJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMgbWV0aG9kLiIpO3JldHVybiBtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oTyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXRocm93IG5ldyBFcnJv'@;
put 'cignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBSIGluIE8paWYoTy5oYXNPd25Qcm9wZXJ0'@;
put 'eShSKSl7aWYoIW0uaGFzT3duUHJvcGVydHkoUikpdGhyb3cgbmV3IEVycm9yKCdBbiBpY29uICInK1IrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKG0sUixP'@;
put 'W1JdKX19LE19KCk7Ri5DbGFyaXR5SWNvbnNBcGk9bGV9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2pl'@;
put 'Y3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihMZSxGLGFlKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLG09YWUoCi8q'@;
put 'ISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLGxlPTAsTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7TS5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBP'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gUigpe3ZhciB6PU8uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB6LmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK2xlLGxlKyssen0ib2JqZWN0Ij09dHlwZW9mIFJlZmxl'@;
put 'Y3QmJihPPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLEYuQ2xhcml0eUljb25FbGVtZW50PVIsUi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChSLnByb3RvdHlw'@;
put 'ZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpSfX0pKS5jb25zdHJ1Y3Rvcj1SLFIucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciB6PU0uY2xvbmVOb2Rl'@;
put 'KCExKTt6LmlkPXRoaXMuY2xySWNvblVuaXFJZCx6LnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKHopfSxSLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oeil7IU51bWJlcih6KXx8TnVtYmVyKHopPDA/KHRoaXMuc3R5bGUud2lk'@;
put 'dGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD16KyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9eisicHgiKX0sUi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKHope3JldHVybiB6LnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LFIu'@;
put 'cHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgi'@;
put 'c2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPUssdGhpcy5fc2V0SWNvblNpemUoSykpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgTD10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hh'@;
put 'cGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhMLGZ1bmN0aW9uKGope3ouX2luamVjdFRlbXBsYXRlKGopfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUwsIXguQ2xhcml0eUljb25z'@;
put 'QXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgaz14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihrPT09dGhpcy5jdXJyZW50'@;
put 'U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1rfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgRT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1FJiYodGhpcy5jdXJyZW50VGl0bGVB'@;
put 'dHRyVmFsPUUpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbih6LEssTCl7dmFyIGs9dGhpcztpZigic2l6ZSI9PT16JiZ0aGlzLl9zZXRJY29uU2l6ZShM'@;
put 'KSwic2hhcGUiPT09eil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEwpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oRSl7ay5faW5qZWN0VGVtcGxhdGUoRSl9KSksIXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwp'@;
put 'KXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT16JiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUws'@;
put 'IXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxS'@;
put 'LnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksTD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO3o/eiYmei5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmTC5zZXRBdHRy'@;
put 'aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseisiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpMLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxSLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeil7eiYmeiE9PXRoaXMuY3VycmVudFNo'@;
put 'YXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXopLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0s'@;
put 'Ui5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRz'@;
put 'IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8q'@;
put 'ISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKExlLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbT1hZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksbGU9YWUoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9p'@;
put 'Y29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksTT14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtGLkNsYXJpdHlJY29ucz1NLE0uYWRkKGxlLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRv'@;
put 'dy5DbGFyaXR5SWNvbnM9TSksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5kZWZpbmUoImNsci1pY29uIixtLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKExlLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db3JlU2hhcGVzPUYuQ2xyU2hhcGVBcnJvdz1GLkNs'@;
put 'clNoYXBlU3RlcEZvcndhcmQyPUYuQ2xyU2hhcGVFeWVIaWRlPUYuQ2xyU2hhcGVFeWU9Ri5DbHJTaGFwZUV2ZW50PUYuQ2xyU2hhcGVDYWxlbmRhcj1GLkNsclNoYXBlQW5nbGVEb3VibGU9Ri5DbHJTaGFwZVZpZXdDb2x1bW5zPUYuQ2xyU2hhcGVTZWFyY2g9Ri5DbHJTaGFwZVZtQnVnPUYu'@;
put 'Q2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPUYuQ2xyU2hhcGVGaWx0ZXJHcmlkPUYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPUYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Ri5DbHJTaGFwZUNsb3VkPUYuQ2xyU2hhcGVJbWFnZT1GLkNsclNoYXBlQmVsbD1GLkNsclNoYXBlRm9sZGVy'@;
put 'T3Blbj1GLkNsclNoYXBlRm9sZGVyPUYuQ2xyU2hhcGVBbmdsZT1GLkNsclNoYXBlVXNlcj1GLkNsclNoYXBlQmFycz1GLkNsclNoYXBlSGVscEluZm89Ri5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1GLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1GLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPUYu'@;
put 'Q2xyU2hhcGVJbmZvU3RhbmRhcmQ9Ri5DbHJTaGFwZUluZm9DaXJjbGU9Ri5DbHJTaGFwZUNoZWNrQ2lyY2xlPUYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1GLkNsclNoYXBlVGltZXM9Ri5DbHJTaGFwZUNoZWNrPUYuQ2xyU2hhcGVD'@;
put 'b2c9Ri5DbHJTaGFwZUhvbWU9Ri5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2'@;
put 'Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVVbmtub3duU3RhdHVzPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4'@;
put 'PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0'@;
put 'LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4yOSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAs'@;
put 'MCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLEYuQ2xyU2hhcGVIb21lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAs'@;
put 'MC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNW'@;
put 'MzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0'@;
put 'LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwzMywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5Ljgz'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxGLkNsclNoYXBlQ29nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3'@;
put 'czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0xLjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRj'@;
put 'LTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwx'@;
put 'NS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4x'@;
put 'aDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwx'@;
put 'NS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0x'@;
put 'LjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmww'@;
put 'LjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43'@;
put 'LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3Mt'@;
put 'My4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjItNS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0xLjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwx'@;
put 'LjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEu'@;
put 'OC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAu'@;
put 'MkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIuNWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z'@;
put 'LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs'@;
put 'MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy'@;
put 'LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt'@;
put 'MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu'@;
put 'Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUt'@;
put 'MS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRj'@;
put 'MCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMt'@;
put 'MC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMu'@;
put 'NywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAu'@;
put 'My0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4yLTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAu'@;
put 'NSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcs'@;
put 'MTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcuNDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5'@;
put 'LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEs'@;
put 'MCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0'@;
put 'bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYz'@;
put 'LDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42'@;
put 'MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3'@;
put 'bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDEx'@;
put 'LjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcy'@;
put 'bC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUuNTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFh'@;
put 'LjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQz'@;
put 'LjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2Eu'@;
put 'NjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAs'@;
put 'MCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy'@;
put 'dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwxLDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLEYuQ2xyU2hhcGVUaW1lcz0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEu'@;
put 'MywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0i'@;
put 'MS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0'@;
put 'LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSwwLDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIvPicpLEYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'ZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUi'@;
put 'IGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40'@;
put 'OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41WiIvPicpLEYuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwx'@;
put 'LDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmExLjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksRi5DbHJTaGFwZUluZm9DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJo'@;
put 'MXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCww'@;
put 'LDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwy'@;
put 'LDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLEYuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx'@;
put 'NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEt'@;
put 'MiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLEYuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWEx'@;
put 'LjQsMS40LDAsMSwxLDIsMloiLz4nKSxGLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4n'@;
put 'KSxGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'ZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0'@;
put 'LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIu'@;
put 'ODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2'@;
put 'NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAz'@;
put 'Mi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQx'@;
put 'OSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2'@;
put 'MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+JyksRi5DbHJTaGFwZUhlbHBJbmZvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40'@;
put 'MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4zMi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41'@;
put 'OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCwwLDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4z'@;
put 'LDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVBMi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwxLjg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42'@;
put 'NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEsMSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAu'@;
put 'NzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYt'@;
put 'LjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIu'@;
put 'NDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAsMCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEs'@;
put 'MCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVVc2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEt'@;
put 'NSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5'@;
put 'YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3'@;
put 'YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgs'@;
put 'MTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs'@;
put 'MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4x'@;
put 'NiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYx'@;
put 'LDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEs'@;
put 'MjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x'@;
put 'NFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41'@;
put 'LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs'@;
put 'NywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41'@;
put 'MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPicpLEYuQ2xyU2hhcGVGb2xkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy'@;
put 'LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIu'@;
put 'NjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x'@;
put 'MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks'@;
put 'NUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMu'@;
put 'MjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+'@;
put 'JyksRi5DbHJTaGFwZUZvbGRlck9wZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx'@;
put 'LDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCww'@;
put 'LDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAs'@;
put 'MCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45'@;
put 'bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwx'@;
put 'LDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40Mkwx'@;
put 'NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIu'@;
put 'NTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1'@;
put 'LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40'@;
put 'SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwx'@;
put 'OSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCww'@;
put 'LDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcx'@;
put 'LDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy'@;
put 'LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmVsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3Ljgz'@;
put 'QTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYz'@;
put 'LDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0'@;
put 'LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBk'@;
put 'PSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0'@;
put 'LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSww'@;
put 'LDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwx'@;
put 'LTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWEx'@;
put 'Mi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40'@;
put 'LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEs'@;
put 'MjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3'@;
put 'LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVJbWFnZT0oMCxt'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwxLDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywzLDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUt'@;
put 'OC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCww'@;
put 'LDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgz'@;
put 'MmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwx'@;
put 'LjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy'@;
put 'LjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSww'@;
put 'TDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4x'@;
put 'OSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUsMjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIz'@;
put 'LjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYu'@;
put 'MzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgs'@;
put 'N2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2'@;
put 'LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4'@;
put 'YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTks'@;
put 'MCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu'@;
put 'MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5'@;
put 'LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMs'@;
put 'MTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9'@;
put 'IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5'@;
put 'bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCww'@;
put 'LDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjha'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSww'@;
put 'LDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLEYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww'@;
put 'LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCww'@;
put 'LDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0'@;
put 'LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVs'@;
put 'My45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlVm1CdWc9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQuODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIy'@;
put 'LDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEu'@;
put 'MTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAs'@;
put 'MC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAsMCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0'@;
put 'LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdoLS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEu'@;
put 'MTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAsMS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEu'@;
put 'NzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksRi5DbHJTaGFwZVNlYXJjaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAu'@;
put 'OTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywxMywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1'@;
put 'LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksRi5DbHJTaGFwZVZpZXdDb2x1bW5zPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIs'@;
put 'MiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nKSxGLkNsclNoYXBlQW5nbGVEb3VibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksRi5DbHJTaGFwZUNhbGVuZGFyPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
put 'NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5'@;
put 'PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5'@;
put 'PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBk'@;
put 'PSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy'@;
put 'OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1i'@;
put 'YWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTki'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMu'@;
put 'NjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQi'@;
put 'IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBw'@;
put 'b2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0z'@;
put 'Mi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCww'@;
put 'LDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2'@;
put 'VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41'@;
put 'LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2'@;
put 'SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUEx'@;
put 'Ljc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFdmVudD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywy'@;
put 'M2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5'@;
put 'QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGEx'@;
put 'LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAs'@;
put 'MCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEs'@;
put 'MzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0i'@;
put 'TTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu'@;
put 'NEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEy'@;
put 'LjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZa'@;
put 'TTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo'@;
put 'LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4'@;
put 'LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUV5ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y'@;
put 'My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44'@;
put 'LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4'@;
put 'LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwxLDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42Miwx'@;
put 'Ny41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjks'@;
put 'OC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0i'@;
put 'Ni44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVFeWVIaWRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43'@;
put 'OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40Miwx'@;
put 'LjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYy'@;
put 'LDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4'@;
put 'LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5'@;
put 'LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSww'@;
put 'LDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0ExLjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQXJyb3c9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiLz4nKSxGLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6Ri5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9tZTpGLkNsclNoYXBlSG9tZSxjb2c6Ri5DbHJTaGFwZUNvZyxjaGVjazpGLkNsclNoYXBlQ2hlY2ssdGltZXM6Ri5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlv'@;
put 'bi10cmlhbmdsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOkYuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOkYuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJp'@;
put 'bmZvLXN0YW5kYXJkIjpGLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOkYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRh'@;
put 'cmQsImhlbHAtaW5mbyI6Ri5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6Ri5DbHJTaGFwZUJhcnMsdXNlcjpGLkNsclNoYXBlVXNlcixhbmdsZTpGLkNsclNoYXBlQW5nbGUsZm9sZGVyOkYuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpGLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOkYuQ2xy'@;
put 'U2hhcGVCZWxsLGltYWdlOkYuQ2xyU2hhcGVJbWFnZSxjbG91ZDpGLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwiOkYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQi'@;
put 'OkYuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOkYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1idWciOkYuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6Ri5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpGLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRv'@;
put 'dWJsZSI6Ri5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOkYuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpGLkNsclNoYXBlRXZlbnQsZXllOkYuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpGLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOkYuQ2xyU2hhcGVTdGVwRm9yd2FyZDIs'@;
put 'YXJyb3c6Ri5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJob3VzZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCx4LmRlc2Ny'@;
put 'aXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzdWNjZXNzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNsb3NlIiwo'@;
put 'MCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIndhcm5pbmciLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEYuQ29yZVNoYXBlcywiZXJyb3IiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImluZm8iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVz'@;
put 'WyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibWVudSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImF2YXRhciIsKDAseC5kZXNjcmlwdG9yQ29u'@;
put 'ZmlnKShGLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNhcmV0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAseC5k'@;
put 'ZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibm90aWZpY2F0aW9uIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBl'@;
put 'cywiY29sbGFwc2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'Ki8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlv'@;
put 'biB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihMZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPUYuY2hh'@;
put 'bmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsRi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe3RoaXMuY2FsbGJhY2tzPUYuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImluc3RhbmNl'@;
put 'Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uc2luZ2xlSW5zdGFuY2V8fChtLnNpbmdsZUluc3RhbmNlPW5ldyBtKSxtLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG0ucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRo'@;
put 'aXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW2xlXT8tMT09PXRoaXMuY2FsbGJhY2tzW2xlXS5pbmRleE9mKE0pJiZ0aGlzLmNhbGxiYWNrc1tsZV0ucHVzaChNKTp0aGlzLmNhbGxiYWNrc1tsZV09W01dLGZ1bmN0aW9uKCl7dmFyIFI9Ty5jYWxsYmFja3NbbGVdLmluZGV4T2YoTSk7Ty5jYWxs'@;
put 'YmFja3NbbGVdLnNwbGljZShSLDEpLDA9PT1PLmNhbGxiYWNrc1tsZV0ubGVuZ3RoJiZkZWxldGUgTy5jYWxsYmFja3NbbGVdfX0sbS5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24obGUsTSl7dGhpcy5jYWxsYmFja3NbbGVdJiZ0aGlzLmNhbGxiYWNrc1tsZV0ubWFwKGZ1bmN0aW9u'@;
put 'KE8pe08oTSl9KX0sbX0oKTtGLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj14fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg'@;
put 'ICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmNsckljb25TVkc9dm9pZCAwO0YuY2xySWNvblNWRz1mdW5jdGlvbiBNKE8pe3ZhciBSPSIiO3JldHVybiBPLmluZGV4T2YoIi0t'@;
put 'YmFkZ2VkIik+LTEmJihSKz0iY2FuLWJhZGdlICIpLE8uaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihSKz0iY2FuLWFsZXJ0ICIpLE8uaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKFIrPSJoYXMtc29saWQgIiksKFI/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytSKyciIHZpZXdC'@;
put 'b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6'@;
put 'JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh'@;
put 'YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStPKyI8L3N2Zz4ifX19KX0sMzQyMDk6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rpb24oTGUpe3ZhciBGPXt9O2Z1bmN0aW9uIGFlKHgpe2lmKEZbeF0pcmV0dXJuIEZbeF0uZXhwb3J0czt2YXIgbT1GW3hdPXtpOngsbDohMSxleHBvcnRz'@;
put 'Ont9fTtyZXR1cm4gTGVbeF0uY2FsbChtLmV4cG9ydHMsbSxtLmV4cG9ydHMsYWUpLG0ubD0hMCxtLmV4cG9ydHN9cmV0dXJuIGFlLm09TGUsYWUuYz1GLGFlLmQ9ZnVuY3Rpb24oeCxtLGxlKXthZS5vKHgsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmxlfSl9LGFlLnI9ZnVuY3Rpb24oeCl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KX0sYWUudD1mdW5jdGlvbih4LG0pe2lmKDEmbSYmKHg9YWUoeCkpLDgmbXx8NCZtJiYib2JqZWN0Ij09dHlwZW9mIHgmJngmJnguX19lc01vZHVsZSlyZXR1cm4geDt2YXIgbGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhZS5yKGxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUs'@;
put 'ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnh9KSwyJm0mJiJzdHJpbmciIT10eXBlb2YgeClmb3IodmFyIE0gaW4geClhZS5kKGxlLE0sZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119LmJpbmQobnVsbCxNKSk7cmV0dXJuIGxlfSxhZS5uPWZ1bmN0aW9uKHgpe3ZhciBtPXgmJnguX19l'@;
put 'c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB4LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHh9O3JldHVybiBhZS5kKG0sImEiLG0pLG19LGFlLm89ZnVuY3Rpb24oeCxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsbSl9LGFlLnA9IiIsYWUoYWUu'@;
put 'cz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg'@;
put 'ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihM'@;
put 'ZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQWxsU2hhcGVzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz'@;
put 'IiksbT1hZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxNPWFlKAov'@;
put 'KiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLE89YWUoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLFI9YWUoCi8qISAuL3Nv'@;
put 'Y2lhbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIiksej1hZSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLEs9YWUoCi8qISAuL3RleHQt'@;
put 'ZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksTD1hZSgKLyohIC4vdHJhdmVsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiKSxrPVtsZS5Db3JlU2hhcGVzLG0uQ29t'@;
put 'bWVyY2VTaGFwZXMsTS5Fc3NlbnRpYWxTaGFwZXMsTy5NZWRpYVNoYXBlcyxSLlNvY2lhbFNoYXBlcyx6LlRlY2hub2xvZ3lTaGFwZXMsTC5UcmF2ZWxTaGFwZXMseC5DaGFydFNoYXBlcyxLLlRleHRFZGl0U2hhcGVzXSxFPXt9O0YuQWxsU2hhcGVzPUU7Zm9yKHZhciBqPTAsVj1rO2o8Vi5s'@;
put 'ZW5ndGg7aisrKXt2YXIgQj1WW2pdO2Zvcih2YXIgWSBpbiBCKUIuaGFzT3duUHJvcGVydHkoWSkmJihFW1ldPUJbWV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChFKX0sIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoq'@;
put 'KiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNoYXJ0U2hhcGVzPUYuQ2xyU2hhcGVCZWxsQ3VydmU9Ri5DbHJTaGFwZVRpY2tDaGFydD1GLkNsclNoYXBlU2NhdHRlclBsb3Q9Ri5DbHJTaGFwZVBpZUNoYXJ0PUYuQ2xyU2hhcGVMaW5lQ2hhcnQ9Ri5DbHJTaGFwZUhlYXRNYXA9Ri5DbHJTaGFwZUdy'@;
put 'aWRDaGFydD1GLkNsclNoYXBlQ3VydmVDaGFydD1GLkNsclNoYXBlQ2xvdWRDaGFydD1GLkNsclNoYXBlQnViYmxlQ2hhcnQ9Ri5DbHJTaGFwZUJveFBsb3Q9Ri5DbHJTaGFwZUJhckNoYXJ0PUYuQ2xyU2hhcGVBeGlzQ2hhcnQ9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hh'@;
put 'cGVBeGlzQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMz'@;
put 'LjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3'@;
put 'LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1'@;
put 'IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0'@;
put 'LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4y'@;
put 'MiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBM'@;
put 'IDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAw'@;
put 'NyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkg'@;
put 'MTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1'@;
put 'IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu'@;
put 'MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMx'@;
put 'IDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg'@;
put 'TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBj'@;
put 'bHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2'@;
put 'IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43'@;
put 'OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4'@;
put 'LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwg'@;
put 'MzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLEYu'@;
put 'Q2xyU2hhcGVCYXJDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpN'@;
put 'NCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8'@;
put 'cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2'@;
put 'IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9'@;
put 'Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcg'@;
put 'MTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM'@;
put 'IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy'@;
put 'IDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYg'@;
put 'MjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUg'@;
put 'MjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2'@;
put 'IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBM'@;
put 'IDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAy'@;
put 'NiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAy'@;
put 'MyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy'@;
put 'Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu'@;
put 'ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3'@;
put 'LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYg'@;
put 'TCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIu'@;
put 'OTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQg'@;
put 'TCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxGLkNsclNoYXBlQm94UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1'@;
put 'SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40'@;
put 'IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5'@;
put 'IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIwLjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMw'@;
put 'LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0'@;
put 'IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEgMTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIg'@;
put 'MjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYg'@;
put 'TCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEz'@;
put 'LjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5c'@;
put 'biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYz'@;
put 'MyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBDIDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAx'@;
put 'MiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEg'@;
put 'MTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwg'@;
put 'NCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQg'@;
put 'MTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMg'@;
put 'MTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAy'@;
put 'MS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0'@;
put 'LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBD'@;
put 'IDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAx'@;
put 'NCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwgMjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xy'@;
put 'LWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAz'@;
put 'NS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1'@;
put 'IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4z'@;
put 'NDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3'@;
put 'LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBD'@;
put 'IDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAx'@;
put 'My40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUg'@;
put 'MjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMg'@;
put 'MTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0'@;
put 'IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2'@;
put 'LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAy'@;
put 'OSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy'@;
put 'Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2'@;
put 'LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBa'@;
put 'IE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1'@;
put 'NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAy'@;
put 'MS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMw'@;
put 'LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEu'@;
put 'NzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3'@;
put 'IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAx'@;
put 'OCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBM'@;
put 'IDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4z'@;
put 'NDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAx'@;
put 'MSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDEx'@;
put 'LjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIz'@;
put 'IEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5'@;
put 'LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4'@;
put 'NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAy'@;
put 'MS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAx'@;
put 'OS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMg'@;
put 'MTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1'@;
put 'NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy'@;
put 'Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku'@;
put 'MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0'@;
put 'QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAx'@;
put 'NS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1'@;
put 'OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjgg'@;
put 'MjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEw'@;
put 'NSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEu'@;
put 'ODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1'@;
put 'IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41'@;
put 'NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQg'@;
put 'MzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMx'@;
put 'NCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAy'@;
put 'NC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1'@;
put 'IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iNyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu'@;
put 'ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIz'@;
put 'Ljk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAy'@;
put 'MiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44'@;
put 'OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1'@;
put 'LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42'@;
put 'MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3'@;
put 'LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUg'@;
put 'MjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40'@;
put 'IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQg'@;
put 'MTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQg'@;
put 'WiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAy'@;
put 'Ljg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkg'@;
put 'QyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42'@;
put 'NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45Mjgg'@;
put 'MjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5'@;
put 'LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1'@;
put 'IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w'@;
put 'YXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2'@;
put 'LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1'@;
put 'LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAx'@;
put 'NC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAu'@;
put 'OTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45'@;
put 'NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAy'@;
put 'Mi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcu'@;
put 'ODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1'@;
put 'LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDEx'@;
put 'LjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5'@;
put 'NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0Ljgx'@;
put 'NyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0'@;
put 'IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2'@;
put 'IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2'@;
put 'IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4y'@;
put 'IDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAy'@;
put 'OS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4y'@;
put 'MDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUg'@;
put 'MjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0'@;
put 'OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAy'@;
put 'IDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5'@;
put 'NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTku'@;
put 'ODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0'@;
put 'NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUuMzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMz'@;
put 'LjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4n'@;
put 'KSxGLkNsclNoYXBlR3JpZENoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwx'@;
put 'NSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoi'@;
put 'Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4g'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUg'@;
put 'QyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD'@;
put 'IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwg'@;
put 'MTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1'@;
put 'LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIg'@;
put 'ZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBk'@;
put 'PSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4w'@;
put 'MzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUg'@;
put 'MTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4z'@;
put 'NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3'@;
put 'IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkg'@;
put 'MjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw'@;
put 'NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIy'@;
put 'LjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8'@;
put 'Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg'@;
put 'ZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2'@;
put 'LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAxMy40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1'@;
put 'IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz'@;
put 'MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2'@;
put 'IiByPSI1Ii8+JyksRi5DbHJTaGFwZUhlYXRNYXA9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMx'@;
put 'IDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYg'@;
put 'MjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAy'@;
put 'NiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4z'@;
put 'MzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAy'@;
put 'NiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAx'@;
put 'Ny4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBMIDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcg'@;
put 'TCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIw'@;
put 'LjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2'@;
put 'OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQg'@;
put 'NyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAy'@;
put 'NiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAz'@;
put 'NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwg'@;
put 'MjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkg'@;
put 'TCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAx'@;
put 'NCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAg'@;
put 'TCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3'@;
put 'IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3'@;
put 'IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx'@;
put 'MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx'@;
put 'LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBa'@;
put 'IE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMw'@;
put 'LjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIg'@;
put 'NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTku'@;
put 'MDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMy'@;
put 'IDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMx'@;
put 'IEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAy'@;
put 'MS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAu'@;
put 'MzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIz'@;
put 'MyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9w'@;
put 'YXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMy'@;
put 'IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwg'@;
put 'MjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5'@;
put 'IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUg'@;
put 'MTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUu'@;
put 'NDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4yOCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEu'@;
put 'OTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZVBpZUNoYXJ0PSgwLG0uY2xySWNvblNWRyko'@;
put 'J1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQg'@;
put 'NyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMu'@;
put 'NDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIz'@;
put 'LjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42'@;
put 'IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg'@;
put 'MzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBD'@;
put 'IDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM'@;
put 'IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy'@;
put 'IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBM'@;
put 'IDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQg'@;
put 'MjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4x'@;
put 'OTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMg'@;
put 'MzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAz'@;
put 'Mi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4'@;
put 'IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAy'@;
put 'OSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBN'@;
put 'IDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAx'@;
put 'IDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYuOTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2'@;
put 'IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1'@;
put 'NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAy'@;
put 'IDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBM'@;
put 'IDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2'@;
put 'OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVTY2F0dGVy'@;
put 'UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMx'@;
put 'IDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjEx'@;
put 'MSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5'@;
put 'MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBD'@;
put 'IDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9'@;
put 'Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg'@;
put 'MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD'@;
put 'IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAy'@;
put 'Ny41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41'@;
put 'ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45'@;
put 'MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMx'@;
put 'IDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45'@;
put 'NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAu'@;
put 'OTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAx'@;
put 'NC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44'@;
put 'MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4'@;
put 'LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg'@;
put 'MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42Mzcg'@;
put 'MjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4z'@;
put 'NzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAy'@;
put 'Mi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu'@;
put 'NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z'@;
put 'NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1'@;
put 'LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYg'@;
put 'MTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEz'@;
put 'OSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3'@;
put 'NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAy'@;
put 'NC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIg'@;
put 'MjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUg'@;
put 'MjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUu'@;
put 'NDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4'@;
put 'MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy'@;
put 'Ljg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu'@;
put 'OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx'@;
put 'My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5'@;
put 'IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42'@;
put 'MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw'@;
put 'Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w'@;
put 'ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg'@;
put 'MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu'@;
put 'NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5'@;
put 'MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0g'@;
put 'OS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42'@;
put 'NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4w'@;
put 'NjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAx'@;
put 'OS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYz'@;
put 'NiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQu'@;
put 'ODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQu'@;
put 'MDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAy'@;
put 'Ny45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41'@;
put 'OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMu'@;
put 'MDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAx'@;
put 'Ny42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu'@;
put 'OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx'@;
put 'My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5'@;
put 'IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42'@;
put 'MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw'@;
put 'Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w'@;
put 'ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg'@;
put 'MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu'@;
put 'NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5'@;
put 'MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44'@;
put 'NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1'@;
put 'IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxG'@;
put 'LkNsclNoYXBlVGlja0NoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIg'@;
put 'MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAy'@;
put 'NSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40'@;
put 'NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz'@;
put 'MSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMg'@;
put 'MjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg'@;
put 'MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg'@;
put 'WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIw'@;
put 'IDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0'@;
put 'IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDgg'@;
put 'QyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAy'@;
put 'MyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBM'@;
put 'IDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBM'@;
put 'IDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQg'@;
put 'MTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUg'@;
put 'TCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMg'@;
put 'MjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEw'@;
put 'IDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQg'@;
put 'MTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4w'@;
put 'MDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxGLkNsclNoYXBlQmVsbEN1cnZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAs'@;
put 'MSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxG'@;
put 'LkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6Ri5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpGLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6Ri5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6Ri5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpG'@;
put 'LkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6Ri5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6Ri5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpGLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOkYuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6'@;
put 'Ri5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6Ri5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpGLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6Ri5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAs'@;
put 'eC5kZXNjcmlwdG9yQ29uZmlnKShGLkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAq'@;
put 'KiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKExlLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db21tZXJjZVNoYXBlcz1GLkNsclNoYXBlRmFjdG9yeT1GLkNsclNoYXBlRW1wbG95ZWU9Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Ri5DbHJTaGFwZVJ1YmxlPUYuQ2xyU2hhcGVQZXNvPUYuQ2xyU2hhcGVDb2luQmFnPUYuQ2xyU2hhcGVCaXRj'@;
put 'b2luPUYuQ2xyU2hhcGVZZW49Ri5DbHJTaGFwZVdvbj1GLkNsclNoYXBlUnVwZWU9Ri5DbHJTaGFwZVBvdW5kPUYuQ2xyU2hhcGVFQ2hlY2s9Ri5DbHJTaGFwZURvbGxhckJpbGw9Ri5DbHJTaGFwZUJhbms9Ri5DbHJTaGFwZUNyZWRpdENhcmQ9Ri5DbHJTaGFwZURvbGxhcj1GLkNsclNoYXBl'@;
put 'RXVybz1GLkNsclNoYXBlU3RvcmU9Ri5DbHJTaGFwZVdhbGxldD1GLkNsclNoYXBlU2hvcHBpbmdDYXJ0PUYuQ2xyU2hhcGVQaWdneUJhbms9Ri5DbHJTaGFwZVNob3BwaW5nQmFnPUYuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3It'@;
put 'Y29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlQ2Fs'@;
put 'Y3VsYXRvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAx'@;
put 'NCAyNCAxNCAyNCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAy'@;
put 'MiAyMiAyMiAyMiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAy'@;
put 'MCAyNiAxOCAyNiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYy'@;
put 'NmgyWm0wLTZIMTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJI'@;
put 'NFYzMi4wOUExLjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJh'@;
put 'Nyw3LDAsMSwwLTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxMloiLz4nKSxGLkNsclNoYXBlUGlnZ3lCYW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4'@;
put 'LDEwLjExLDEwLjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2Ex'@;
put 'Ljc3LDEuNzcsMCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44'@;
put 'MSwwLDAsMSwuMTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wu'@;
put 'MTcuMzhBMjMsMjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjky'@;
put 'LTEuMzljLS4xNy0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEu'@;
put 'MzcsMTEuMzcsMCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0x'@;
put 'LjQ1LTIuMzZsLS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhj'@;
put 'LjU0LTUuMTksNi4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQs'@;
put 'Ni40OSw2LjQ5LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEu'@;
put 'OS45LDAsMCwwLS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4x'@;
put 'NS0xLjU1LDEuMzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAs'@;
put 'MCwzLDQuNzksMSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAs'@;
put 'Ljc3LjQxaDMuMTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQs'@;
put 'MCwwLDAsMy4xOCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1'@;
put 'Ljg1Ljg1LDAsMSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVM'@;
put 'OS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUu'@;
put 'MzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40'@;
put 'OSA1IDEyLjE0IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42'@;
put 'MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEs'@;
put 'MCwwLDAsMS0uNzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx'@;
put 'My4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2'@;
put 'LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNB'@;
put 'Mi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUi'@;
put 'IGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSww'@;
put 'LDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYt'@;
put 'MWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxj'@;
put 'aXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDku'@;
put 'OTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEz'@;
put 'LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1p'@;
put 'LWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVXYWxsZXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5'@;
put 'LjU4YTEsMSwwLDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAs'@;
put 'MSw1LDI3LjkzVjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIg'@;
put 'Y3k9IjIwIiByPSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIu'@;
put 'OTQsMi45NCwwLDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44Nywz'@;
put 'Ljg3LDAsMCwxLDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLEYuQ2xyU2hhcGVTdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCww'@;
put 'LDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCww'@;
put 'LDEsMjcuODIsMTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAs'@;
put 'MSw2LDE4LjEzYTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgs'@;
put 'MzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIs'@;
put 'NEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs'@;
put 'NC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEy'@;
put 'LDEuNDhMMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxGLkNsclNoYXBlRXVybz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMxLjQ4LDI4LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0x'@;
put 'LjdBMTQsMTQsMCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcx'@;
put 'LS4wNS0xLjA3czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAs'@;
put 'MCwyaDkuODJhMSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLEYuQ2xyU2hhcGVEb2xsYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEt'@;
put 'Ni44MywyLjI5LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44'@;
put 'Mi0uMTksNi4wNy0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcy'@;
put 'LDIuMTQtMi4zMiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAg'@;
put 'ICAgICAgICAgIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44'@;
put 'Myw5LjExLDkuMTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0Ljks'@;
put 'MkExLjI1LDEuMjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxGLkNsclNo'@;
put 'YXBlQ3JlZGl0Q2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBz'@;
put 'dHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJhbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIu'@;
put 'OTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1'@;
put 'SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM'@;
put 'MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42'@;
put 'M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUx'@;
put 'LDAsMCwxLDIwLDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44'@;
put 'NmgzLjIxbDMuOS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIu'@;
put 'NSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFI'@;
put 'MTEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEu'@;
put 'MTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3'@;
put 'SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAs'@;
put 'MCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44'@;
put 'NmEuOC44LDAsMCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwy'@;
put 'N0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCww'@;
put 'LDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0z'@;
put 'Ljg2YS44LjgsMCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJh'@;
put 'MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcs'@;
put 'NS44NywwLDAsMCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUs'@;
put 'NC43LTUuNTUsNC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs'@;
put 'Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYu'@;
put 'Myw3LjE1UzIxLjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIgY3g9IjE4IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLEYuQ2xyU2hhcGVFQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0'@;
put 'LDhIMTIuOTNhOC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0z'@;
put 'LjQ2LTNoNy41M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYu'@;
put 'MjUsOC4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAs'@;
put 'MCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0'@;
put 'djBBNiw2LDAsMCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEu'@;
put 'MTEsMS4yLDEuMiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLEYuQ2xyU2hhcGVQb3VuZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwx'@;
put 'LjQ4LTEuMzVBNy4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUu'@;
put 'ODUsNS44NSwwLDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEs'@;
put 'MTUsMjUuNDJIMjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksRi5DbHJTaGFwZVJ1cGVlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4'@;
put 'YTEsMSwwLDAsMCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMy'@;
put 'YTEsMSwwLDEsMCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDAsMTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEz'@;
put 'LjU5LDMuNTksMCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFa'@;
put 'Ii8+JyksRi5DbHJTaGFwZVdvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgs'@;
put 'MTRIMjEuMzFMMTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYs'@;
put 'MjBoNS4zOGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44'@;
put 'NSwxOGwuNS0yaDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEg'@;
put 'MTYgMjEuNDQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBI'@;
put 'N2ExLDEsMCwwLDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwx'@;
put 'LDIuNDIuNjRsLTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVZZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1'@;
put 'YTEsMSwwLDEsMC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYy'@;
put 'My44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEs'@;
put 'MCwwLDEsMCwySDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUu'@;
put 'OTUtOS40OWExLjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLEYuQ2xyU2hhcGVCaXRjb2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEs'@;
put 'MCwwLDAtMSwxVjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIu'@;
put 'MzZBMy41MSwzLjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVh'@;
put 'Mi4yNCwyLjI0LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs'@;
put 'MTgsMlptOC4zMSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2Ex'@;
put 'LDEsMCwwLDEsMiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUNvaW5CYWc9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAs'@;
put 'MCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywz'@;
put 'MmgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMz'@;
put 'LDIwLjMzLDAsMCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYx'@;
put 'LjY5LTcuNTgsMi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEu'@;
put 'NDUsMCwwLDEsMS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMu'@;
put 'NzgsMTguNjMsMTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4z'@;
put 'MkwyNS43MiwzLjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2'@;
put 'QTIxLjc0LDIxLjc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4w'@;
put 'OCwxMi4yLDMuMDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCww'@;
put 'LDEsMjQuODksMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIC8+PHBhdGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJo'@;
put 'N2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlUGVzbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTlo'@;
put 'Mi45M2EuOC44LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODkt'@;
put 'NS4ySDMxYS44LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4'@;
put 'LDE5LjdoNS4xOWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2'@;
put 'YS45LjksMCwxLDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2'@;
put 'LjgsNi44LDAsMCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVJ1YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4'@;
put 'LjIzLDAsMCwwLTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'Ni40Myw2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIw'@;
put 'LjU2SDExLjI1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp'@;
put 'LEYuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTgu'@;
put 'NDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0'@;
put 'LDMuNzQsMCwwLDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhh'@;
put 'MTguOTIsMTguOTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAs'@;
put 'MCwxLTFWMjNBMSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEu'@;
put 'NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4'@;
put 'LDcuMjgsMCwwLDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUu'@;
put 'OTF2Mi45YTEsMSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02'@;
put 'LjExLDMuMTUsMy4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'OCIvPlxuICA8cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCww'@;
put 'LDEtLjEsMS4yLDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwx'@;
put 'Ni40NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCww'@;
put 'LTguNCwyLjA1LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCww'@;
put 'LDEsMUgzMi44MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxGLkNsclNoYXBlRW1w'@;
put 'bG95ZWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIvPlxuICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMu'@;
put 'NTgsMCwwLDEsNS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAs'@;
put 'MzMuMTcsMjEuNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIy'@;
put 'OCIgd2lkdGg9IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJW'@;
put 'MTguNDJBMzIuMTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNs'@;
put 'clNoYXBlRmFjdG9yeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAs'@;
put 'MCw0LDMuNzNWMTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEu'@;
put 'NTYuODNMMzIsMTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0i'@;
put 'NiIgeT0iMjEuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAs'@;
put 'MSwxSDMzYTEsMSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6Ri5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOkYuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6Ri5DbHJTaGFwZVNob3BwaW5nQmFnLCJz'@;
put 'aG9wcGluZy1jYXJ0IjpGLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpGLkNsclNoYXBlV2FsbGV0LHN0b3JlOkYuQ2xyU2hhcGVTdG9yZSxldXJvOkYuQ2xyU2hhcGVFdXJvLGRvbGxhcjpGLkNsclNoYXBlRG9sbGFyLHBlc286Ri5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpGLkNs'@;
put 'clNoYXBlQ3JlZGl0Q2FyZCxiYW5rOkYuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6Ri5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOkYuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6Ri5DbHJTaGFwZVBvdW5kLHJ1cGVlOkYuQ2xyU2hhcGVSdXBlZSx3b246Ri5DbHJTaGFwZVdvbix5ZW46'@;
put 'Ri5DbHJTaGFwZVllbixiaXRjb2luOkYuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOkYuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOkYuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6Ri5DbHJTaGFwZUVtcGxveWVlLGZhY3Rv'@;
put 'cnk6Ri5DbHJTaGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc'@;
put 'CiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg'@;
put 'Zm91bmQgKi9mdW5jdGlvbihMZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ29yZVNoYXBlcz1GLkNsclNoYXBlQXJyb3c9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1GLkNsclNoYXBlRXllSGlkZT1GLkNsclNo'@;
put 'YXBlRXllPUYuQ2xyU2hhcGVFdmVudD1GLkNsclNoYXBlQ2FsZW5kYXI9Ri5DbHJTaGFwZUFuZ2xlRG91YmxlPUYuQ2xyU2hhcGVWaWV3Q29sdW1ucz1GLkNsclNoYXBlU2VhcmNoPUYuQ2xyU2hhcGVWbUJ1Zz1GLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1GLkNsclNoYXBlRmlsdGVyR3Jp'@;
put 'ZD1GLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1GLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPUYuQ2xyU2hhcGVDbG91ZD1GLkNsclNoYXBlSW1hZ2U9Ri5DbHJTaGFwZUJlbGw9Ri5DbHJTaGFwZUZvbGRlck9wZW49Ri5DbHJTaGFwZUZvbGRlcj1GLkNsclNoYXBlQW5nbGU9Ri5DbHJT'@;
put 'aGFwZVVzZXI9Ri5DbHJTaGFwZUJhcnM9Ri5DbHJTaGFwZUhlbHBJbmZvPUYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1GLkNsclNoYXBlSW5mb1N0YW5kYXJkPUYuQ2xyU2hhcGVJbmZvQ2lyY2xlPUYu'@;
put 'Q2xyU2hhcGVDaGVja0NpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Ri5DbHJTaGFwZVRpbWVzPUYuQ2xyU2hhcGVDaGVjaz1GLkNsclNoYXBlQ29nPUYuQ2xyU2hhcGVIb21lPUYuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZv'@;
put 'aWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4z'@;
put 'Miw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywx'@;
put 'M1oiLz4nKSxGLkNsclNoYXBlSG9tZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEs'@;
put 'MzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIs'@;
put 'MiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwx'@;
put 'LDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJW'@;
put 'MTkuNzZaIi8+JyksRi5DbHJTaGFwZUNvZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0x'@;
put 'OC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEu'@;
put 'NWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z'@;
put 'LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs'@;
put 'MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy'@;
put 'LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwy'@;
put 'OC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41'@;
put 'LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwx'@;
put 'LjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwx'@;
put 'OGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44'@;
put 'LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0w'@;
put 'LjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4x'@;
put 'LTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUs'@;
put 'MS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3'@;
put 'LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIu'@;
put 'NCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0w'@;
put 'LjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4x'@;
put 'bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0w'@;
put 'LjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMu'@;
put 'MiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUu'@;
put 'MkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIu'@;
put 'NmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMs'@;
put 'MS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEs'@;
put 'Nyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAu'@;
put 'NC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42'@;
put 'NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDEx'@;
put 'LjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywx'@;
put 'YTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAs'@;
put 'MCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40'@;
put 'My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i'@;
put 'YWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQz'@;
put 'bC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCww'@;
put 'LDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNo'@;
put 'My4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0x'@;
put 'YS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40'@;
put 'SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCww'@;
put 'LTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDEx'@;
put 'LjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQz'@;
put 'bDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYu'@;
put 'MzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxGLkNsclNoYXBlVGltZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEu'@;
put 'NDFaIi8+JyksRi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2'@;
put 'QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEs'@;
put 'MCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3'@;
put 'LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0x'@;
put 'LjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAs'@;
put 'MCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEu'@;
put 'MywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEu'@;
put 'NzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxGLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCww'@;
put 'LDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwz'@;
put 'LjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQs'@;
put 'MCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLEYuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMi'@;
put 'IGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEs'@;
put 'MSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxGLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIg'@;
put 'Y3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEu'@;
put 'NCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksRi5DbHJTaGFwZUVycm9yU3RhbmRh'@;
put 'cmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQs'@;
put 'MTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs'@;
put 'MCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksRi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwx'@;
put 'LDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2'@;
put 'MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1'@;
put 'LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEu'@;
put 'MjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3'@;
put 'NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBD'@;
put 'MzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwy'@;
put 'LjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEs'@;
put 'My42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwx'@;
put 'LDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLEYuQ2xyU2hhcGVIZWxwSW5mbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEt'@;
put 'LjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0x'@;
put 'LjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4z'@;
put 'LDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0'@;
put 'LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4'@;
put 'LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0x'@;
put 'Miw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4y'@;
put 'NWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZUJhcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0'@;
put 'LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxGLkNsclNoYXBlVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pN'@;
put 'MjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0'@;
put 'VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCww'@;
put 'LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'Mi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUy'@;
put 'YTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAs'@;
put 'MCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt'@;
put 'NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcs'@;
put 'NywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUFuZ2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2'@;
put 'TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxGLkNsclNoYXBlRm9sZGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiww'@;
put 'LDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEt'@;
put 'MS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk'@;
put 'PSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlh'@;
put 'MiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgx'@;
put 'Ni40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk'@;
put 'PSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcy'@;
put 'LDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCww'@;
put 'LDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMu'@;
put 'NzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43'@;
put 'MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks'@;
put 'NUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5'@;
put 'LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW'@;
put 'MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYu'@;
put 'NDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQs'@;
put 'MS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAs'@;
put 'MCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy'@;
put 'LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0y'@;
put 'LjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs'@;
put 'NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUJlbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0x'@;
put 'LjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45Mywx'@;
put 'LDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAs'@;
put 'MSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAs'@;
put 'MCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgs'@;
put 'MzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYz'@;
put 'LDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUu'@;
put 'MTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAs'@;
put 'MCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwx'@;
put 'LDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgx'@;
put 'LDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN'@;
put 'MzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0z'@;
put 'LjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlSW1hZ2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2'@;
put 'VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCww'@;
put 'LDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAs'@;
put 'MCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSww'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMy'@;
put 'YTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywz'@;
put 'LDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEs'@;
put 'MS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksRi5DbHJTaGFwZUNsb3VkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwy'@;
put 'OSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywy'@;
put 'OCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3'@;
put 'LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDkt'@;
put 'MS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMx'@;
put 'LDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0'@;
put 'LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwz'@;
put 'NSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42'@;
put 'NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4y'@;
put 'OSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCww'@;
put 'LDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRWxsaXBz'@;
put 'aXNIb3Jpem9udGFsPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIx'@;
put 'OCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEi'@;
put 'IHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+'@;
put 'JyksRi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAs'@;
put 'MC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4x'@;
put 'Mi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5'@;
put 'LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCww'@;
put 'LDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksRi5DbHJTaGFwZVZtQnVnPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRp'@;
put 'b246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1'@;
put 'LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4x'@;
put 'NSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45Mywz'@;
put 'LjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUs'@;
put 'MTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4y'@;
put 'NywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIg'@;
put 'ZmlsbD0iI2ZmZmZmZiIvPicpLEYuQ2xyU2hhcGVTZWFyY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4w'@;
put 'NW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAs'@;
put 'MSwwLDM1LDMzLjI5WiIvPicpLEYuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDIt'@;
put 'MlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksRi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43'@;
put 'MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWEx'@;
put 'LDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLEYuQ2xyU2hhcGVDYWxlbmRhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1'@;
put 'LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIy'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEw'@;
put 'YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwx'@;
put 'LDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1'@;
put 'LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIx'@;
put 'OSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJl'@;
put 'Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwy'@;
put 'LDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9Ijgi'@;
put 'IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4y'@;
put 'LDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI'@;
put 'OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwx'@;
put 'LDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDks'@;
put 'M1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgt'@;
put 'NEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRo'@;
put 'MlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMu'@;
put 'NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJa'@;
put 'bTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRXZlbnQ9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs'@;
put 'MCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs'@;
put 'MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEs'@;
put 'MjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJW'@;
put 'MzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEs'@;
put 'MSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAs'@;
put 'LjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYg'@;
put 'MTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW'@;
put 'MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwx'@;
put 'LTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcu'@;
put 'OCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiww'@;
put 'LDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x'@;
put 'VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwt'@;
put 'OS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAs'@;
put 'MCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMs'@;
put 'MTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41'@;
put 'QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMu'@;
put 'NVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVFeWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4'@;
put 'bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQy'@;
put 'LDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0'@;
put 'Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywy'@;
put 'LDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjgu'@;
put 'NTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi'@;
put 'Lz4nKSxGLkNsclNoYXBlRXllSGlkZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2'@;
put 'LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCww'@;
put 'LDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1'@;
put 'bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgu'@;
put 'MzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5'@;
put 'LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTku'@;
put 'OTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIz'@;
put 'LDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2Ex'@;
put 'Ny4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcu'@;
put 'MTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43'@;
put 'VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFycm93PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDgu'@;
put 'MzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksRi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0'@;
put 'dXMiOkYuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Ri5DbHJTaGFwZUhvbWUsY29nOkYuQ2xyU2hhcGVDb2csY2hlY2s6Ri5DbHJTaGFwZUNoZWNrLHRpbWVzOkYuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJl'@;
put 'eGNsYW1hdGlvbi1jaXJjbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpGLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpGLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Ri5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vz'@;
put 'cy1zdGFuZGFyZCI6Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOkYuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOkYuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOkYuQ2xy'@;
put 'U2hhcGVCYXJzLHVzZXI6Ri5DbHJTaGFwZVVzZXIsYW5nbGU6Ri5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpGLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Ri5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpGLkNsclNoYXBlQmVsbCxpbWFnZTpGLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Ri5DbHJT'@;
put 'aGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpGLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Ri5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpGLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpG'@;
put 'LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpGLkNsclNoYXBlVm1CdWcsc2VhcmNoOkYuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Ri5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOkYuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpGLkNsclNo'@;
put 'YXBlQ2FsZW5kYXIsZXZlbnQ6Ri5DbHJTaGFwZUV2ZW50LGV5ZTpGLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Ri5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpGLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OkYuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEYuQ29yZVNoYXBlcywiaG91c2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEYuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMudGltZXMpKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImVycm9yIiwoMCx4LmRlc2NyaXB0b3JD'@;
put 'b25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJpbmZvIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNv'@;
put 'cmVTaGFwZXMsIm1lbnUiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoRi5Db3JlU2hhcGVzLCJjYXJldCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNo'@;
put 'YXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKExl'@;
put 'LEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbHJTaGFwZUxvZ291dD1GLkNsclNoYXBlTG9naW49Ri5DbHJTaGFwZUhlbHA9Ri5DbHJTaGFwZUNvcHk9Ri5DbHJTaGFwZUNoaWxkQXJyb3c9Ri5DbHJTaGFwZUNp'@;
put 'cmNsZUFycm93PUYuQ2xyU2hhcGVBbGFybUNsb2NrPUYuQ2xyU2hhcGVDbG9jaz1GLkNsclNoYXBlSGlzdG9yeT1GLkNsclNoYXBlVGFncz1GLkNsclNoYXBlVGFnPUYuQ2xyU2hhcGVUcmFzaD1GLkNsclNoYXBlVGltZXNDaXJjbGU9Ri5DbHJTaGFwZUJhbj1GLkNsclNoYXBlUGx1c0NpcmNs'@;
put 'ZT1GLkNsclNoYXBlTWludXNDaXJjbGU9Ri5DbHJTaGFwZU1pbnVzPUYuQ2xyU2hhcGVQbHVzPUYuQ2xyU2hhcGVGaWxlPUYuQ2xyU2hhcGVQaW49Ri5DbHJTaGFwZUZpbHRlcj1GLkNsclNoYXBlUG9wT3V0PUYuQ2xyU2hhcGVVc2Vycz1GLkNsclNoYXBlVW5sb2NrPUYuQ2xyU2hhcGVMb2Nr'@;
put 'PUYuQ2xyU2hhcGVVcGxvYWQ9Ri5DbHJTaGFwZURvd25sb2FkPUYuQ2xyU2hhcGVMaWdodGJ1bGI9Ri5DbHJTaGFwZVZpZXdDYXJkcz1GLkNsclNoYXBlVmlld0xpc3Q9Ri5DbHJTaGFwZVN5bmM9Ri5DbHJTaGFwZVJlZnJlc2g9Ri5DbHJTaGFwZU5vdGU9Ri5DbHJTaGFwZVBlbmNpbD1GLkNs'@;
put 'clNoYXBlVGhlcm1vbWV0ZXI9Ri5DbHJTaGFwZUJ1Zz1GLkNsclNoYXBlU2Npc3NvcnM9Ri5DbHJTaGFwZUFzdGVyaXNrPUYuQ2xyU2hhcGVCb29rPUYuQ2xyU2hhcGVPYmplY3RzPUYuQ2xyU2hhcGVSZXNpemU9Ri5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz1GLkNsclNoYXBlQ3Vyc29ySGFu'@;
put 'ZD1GLkNsclNoYXBlQ3Vyc29yQXJyb3c9Ri5DbHJTaGFwZUdyaWRWaWV3PUYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj1GLkNsclNoYXBlTmV3PUYuQ2xyU2hhcGVBbGFybU9mZj1GLkNsclNoYXBlUGluYm9hcmQ9Ri5DbHJTaGFwZUFkZFRleHQ9dm9pZCAwLEYuQ2xyU2hhcGVDbG9uZT1G'@;
put 'LkNsclNoYXBlQ3Vyc29yTW92ZT1GLkNsclNoYXBlV2FuZD1GLkNsclNoYXBlU3VuPUYuQ2xyU2hhcGVNb29uPUYuQ2xyU2hhcGVGaWx0ZXIyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlPUYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQ9Ri5DbHJTaGFwZUNvbG9yUGlja2VyPUYuQ2xyU2hhcGVCcmll'@;
put 'ZmNhc2U9Ri5DbHJTaGFwZUV4cGFuZENhcmQ9Ri5DbHJTaGFwZUNvbGxhcHNlQ2FyZD1GLkNsclNoYXBlU29ydEJ5PUYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Mj1GLkNsclNoYXBlQWNjZXNzaWJpbGl0eTE9Ri5DbHJTaGFwZVNocmluaz1GLkNsclNoYXBlUGFwZXJjbGlwPUYuQ2xyU2hhcGVG'@;
put 'aWxlR3JvdXA9Ri5DbHJTaGFwZVJlcGVhdD1GLkNsclNoYXBlSWRCYWRnZT1GLkNsclNoYXBlQmFsYW5jZT1GLkNsclNoYXBlT3JnYW5pemF0aW9uPUYuQ2xyU2hhcGVOb0FjY2Vzcz1GLkNsclNoYXBlSG91cmdsYXNzPUYuQ2xyU2hhcGVGbGFtZT1GLkNsclNoYXBlVGFyZ2V0PUYuQ2xyU2hh'@;
put 'cGVCdWxsc2V5ZT1GLkNsclNoYXBlV3JlbmNoPUYuQ2xyU2hhcGVCb2x0PUYuQ2xyU2hhcGVMaWJyYXJ5PUYuQ2xyU2hhcGVLZXk9Ri5DbHJTaGFwZVpvb21PdXQ9Ri5DbHJTaGFwZVpvb21Jbj1GLkNsclNoYXBlV2luZG93UmVzdG9yZT1GLkNsclNoYXBlV2luZG93TWluPUYuQ2xyU2hhcGVX'@;
put 'aW5kb3dNYXg9Ri5DbHJTaGFwZVdpbmRvd0Nsb3NlPUYuQ2xyU2hhcGVUb29scz1GLkNsclNoYXBlU3dpdGNoPUYuQ2xyU2hhcGVUd29XYXlBcnJvd3M9Ri5DbHJTaGFwZUZpbGVTZXR0aW5ncz1GLkNsclNoYXBlU2Nyb2xsPUYuQ2xyU2hhcGVVbmRvPUYuQ2xyU2hhcGVSZWRvPUYuQ2xyU2hh'@;
put 'cGVMaXN0PUYuQ2xyU2hhcGVGaXJld2FsbD1GLkNsclNoYXBlQ2xpcGJvYXJkPUYuQ2xyU2hhcGVTbGlkZXI9Ri5DbHJTaGFwZVdvcmxkPUYuQ2xyU2hhcGVQcmludGVyPXZvaWQgMCxGLkVzc2VudGlhbFNoYXBlcz1GLkNsclNoYXBlQ29sb3JQYWxldHRlPUYuQ2xyU2hhcGVGaXJzdEFpZD1G'@;
put 'LkNsclNoYXBlQmV0YT1GLkNsclNoYXBlRG90Q2lyY2xlPUYuQ2xyU2hhcGVDaXJjbGU9Ri5DbHJTaGFwZUNyb3NzaGFpcnM9Ri5DbHJTaGFwZVZvbHVtZT1GLkNsclNoYXBlVGFibGU9Ri5DbHJTaGFwZVNub3dmbGFrZT1GLkNsclNoYXBlRnVlbD1GLkNsclNoYXBlRm9ybT1GLkNsclNoYXBl'@;
put 'RmlzaD1GLkNsclNoYXBlVHJlZT1GLkNsclNoYXBlUmVjeWNsZT1GLkNsclNoYXBlRmlsdGVyT2ZmPUYuQ2xyU2hhcGVGaWxlWmlwPUYuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj1GLkNsclNoYXBlQ3Vyc29ySGFuZEdyYWI9Ri5DbHJTaGFwZVRyZWVWaWV3PUYuQ2xyU2hhcGVQb3J0cmFpdD1G'@;
put 'LkNsclNoYXBlUGFzdGU9Ri5DbHJTaGFwZUxhbmRzY2FwZT1GLkNsclNoYXBlRXJhc2VyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPUYuQ2xyU2hhcGVEZXRhaWxzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsZT1hZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO0YuQ2xyU2hhcGVBZGRUZXh0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYz'@;
put 'LjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxGLkNsclNoYXBlUGluYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMz'@;
put 'LjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUx'@;
put 'LDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjlj'@;
put 'Ljc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAs'@;
put 'MCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTIt'@;
put 'Ljg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLEYuQ2xyU2hh'@;
put 'cGVBbGFybU9mZj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40'@;
put 'NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45'@;
put 'MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIu'@;
put 'NzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0'@;
put 'LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEu'@;
put 'NDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1'@;
put 'LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wx'@;
put 'NywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43'@;
put 'Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQu'@;
put 'MTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLEYuQ2xyU2hhcGVOZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkz'@;
put 'LDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIu'@;
put 'ODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41'@;
put 'MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41'@;
put 'IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41'@;
put 'MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMu'@;
put 'MzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEu'@;
put 'MzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLEYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44Miww'@;
put 'LTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4z'@;
put 'NC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEs'@;
put 'MSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLEYuQ2xyU2hhcGVHcmlkVmlldz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAs'@;
put 'MCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIs'@;
put 'MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0y'@;
put 'VjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIs'@;
put 'MCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIi'@;
put 'IGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JBcnJvdz0o'@;
put 'MCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcs'@;
put 'OC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2'@;
put 'YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwy'@;
put 'LjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JIYW5k'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMu'@;
put 'NCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3'@;
put 'LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQu'@;
put 'MTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1'@;
put 'LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1'@;
put 'VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0u'@;
put 'NDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkz'@;
put 'LDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksRi5DbHJTaGFwZUN1'@;
put 'cnNvckhhbmRDbGljaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTEx'@;
put 'LjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywx'@;
put 'LjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYs'@;
put 'MTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUu'@;
put 'MkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4z'@;
put 'LTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYz'@;
put 'bDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAg'@;
put 'ICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksRi5DbHJTaGFwZVJlc2l6ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksRi5DbHJTaGFwZU9iamVjdHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0w'@;
put 'LDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEs'@;
put 'MSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwx'@;
put 'djRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxGLkNs'@;
put 'clNoYXBlQm9vaz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlh'@;
put 'MSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5'@;
put 'Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjks'@;
put 'OFoiLz4nKSxGLkNsclNoYXBlQXN0ZXJpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00'@;
put 'LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMs'@;
put 'MCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcy'@;
put 'TDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwy'@;
put 'MC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQs'@;
put 'MS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksRi5DbHJTaGFwZVNjaXNzb3JzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwx'@;
put 'Ljc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2'@;
put 'LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYs'@;
put 'MCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0z'@;
put 'LjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksRi5DbHJTaGFwZUJ1Zz0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIy'@;
put 'LjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40'@;
put 'Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJh'@;
put 'MSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMu'@;
put 'NjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4x'@;
put 'Ny0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMs'@;
put 'My4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAs'@;
put 'Mkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0'@;
put 'bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgs'@;
put 'MS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwx'@;
put 'LjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDku'@;
put 'MDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLEYuQ2xyU2hhcGVU'@;
put 'aGVybW9tZXRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4z'@;
put 'Ni00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxGLkNsclNoYXBlUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwy'@;
put 'OCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wx'@;
put 'Ljc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUs'@;
put 'Mi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcy'@;
put 'LDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLEYuQ2xyU2hhcGVOb3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAs'@;
put 'MCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2'@;
put 'LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIs'@;
put 'MiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVSZWZyZXNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAs'@;
put 'MSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLEYuQ2xyU2hhcGVTeW5jPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAs'@;
put 'MiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45'@;
put 'NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwx'@;
put 'LDAsMCwwLDMwLjA2LDFaIi8+JyksRi5DbHJTaGFwZVZpZXdMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIx'@;
put 'NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCww'@;
put 'LDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLEYuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9'@;
put 'Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwx'@;
put 'N0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRh'@;
put 'MiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIs'@;
put 'MiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLEYuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgs'@;
put 'MTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEt'@;
put 'MS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4x'@;
put 'OSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSww'@;
put 'LDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEz'@;
put 'LTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1'@;
put 'LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44Ljgs'@;
put 'MCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAs'@;
put 'MCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSww'@;
put 'LDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywz'@;
put 'LjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEz'@;
put 'bC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44Ljgs'@;
put 'MCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlRG93bmxvYWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI'@;
put 'MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDgu'@;
put 'ODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2'@;
put 'YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJTaGFwZVVwbG9hZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44'@;
put 'MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEz'@;
put 'LjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9'@;
put 'Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEs'@;
put 'MjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwx'@;
put 'NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVMb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIs'@;
put 'MCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMy'@;
put 'YTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksRi5DbHJTaGFwZVVubG9jaz0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIs'@;
put 'MCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgy'@;
put 'MFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxGLkNsclNoYXBlVXNlcnM9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcu'@;
put 'M3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVo'@;
put 'MnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIu'@;
put 'MiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4y'@;
put 'LDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4'@;
put 'aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMw'@;
put 'LTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0x'@;
put 'LjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44'@;
put 'LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0w'@;
put 'LjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4w'@;
put 'OSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'MywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2'@;
put 'Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUu'@;
put 'Mjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAs'@;
put 'MSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMu'@;
put 'NjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEs'@;
put 'NC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42'@;
put 'NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi'@;
put 'IGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcs'@;
put 'Mi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4y'@;
put 'OHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwx'@;
put 'LDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCww'@;
put 'LDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJN'@;
put 'MjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42'@;
put 'Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAu'@;
put 'M0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2'@;
put 'LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCww'@;
put 'LDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0'@;
put 'ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcs'@;
put 'OWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y'@;
put 'MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2'@;
put 'LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjgu'@;
put 'NTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4w'@;
put 'OSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wy'@;
put 'NS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSww'@;
put 'LDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUG9wT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNI'@;
put 'NWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjku'@;
put 'NTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxGLkNsclNoYXBlRmlsdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEs'@;
put 'MSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSww'@;
put 'LDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAs'@;
put 'MCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTku'@;
put 'MTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBpbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5'@;
put 'QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4y'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwx'@;
put 'LjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksRi5DbHJTaGFwZUZpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUu'@;
put 'OTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUu'@;
put 'NFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww'@;
put 'LDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEu'@;
put 'ODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1'@;
put 'LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJo'@;
put 'MTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLEYuQ2xyU2hhcGVQbHVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxGLkNsclNo'@;
put 'YXBlTWludXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41'@;
put 'LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdI'@;
put 'OS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCww'@;
put 'LDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTgu'@;
put 'NDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicp'@;
put 'LEYuQ2xyU2hhcGVCYW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1'@;
put 'LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLEYuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4w'@;
put 'OCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLEYuQ2xyU2hhcGVUcmFzaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'ZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEz'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAu'@;
put 'NzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxGLkNsclNoYXBlVGFnPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCww'@;
put 'LDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIi'@;
put 'IHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEs'@;
put 'MS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTku'@;
put 'OUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwy'@;
put 'LDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0'@;
put 'LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwx'@;
put 'NC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVUYWdzPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEEx'@;
put 'LjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5'@;
put 'LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMx'@;
put 'LjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1i'@;
put 'YWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRI'@;
put 'MjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5'@;
put 'LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMs'@;
put 'MS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMu'@;
put 'NjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEw'@;
put 'LDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4'@;
put 'LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42Nywx'@;
put 'MS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2Ex'@;
put 'LjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjcz'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEy'@;
put 'LjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEs'@;
put 'MSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI'@;
put 'MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksRi5DbHJTaGFwZUhpc3Rvcnk9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksRi5DbHJTaGFwZUNsb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCww'@;
put 'LDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCww'@;
put 'LDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEy'@;
put 'LjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4x'@;
put 'OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwz'@;
put 'LjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww'@;
put 'LDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2'@;
put 'LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwy'@;
put 'OS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwy'@;
put 'NC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwx'@;
put 'Ni4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEu'@;
put 'NjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTls'@;
put 'MS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4'@;
put 'LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTks'@;
put 'MTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAs'@;
put 'MCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjks'@;
put 'MTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEs'@;
put 'MSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4'@;
put 'LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3'@;
put 'LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2'@;
put 'YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1'@;
put 'LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMy'@;
put 'LDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUu'@;
put 'MjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIs'@;
put 'MEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFw'@;
put 'ZUNoaWxkQXJyb3c9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEs'@;
put 'MSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvcHk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYy'@;
put 'NEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41'@;
put 'QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYs'@;
put 'MCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0i'@;
put 'MjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlSGVscD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMw'@;
put 'QTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45'@;
put 'MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjlo'@;
put 'LjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgi'@;
put 'IGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4z'@;
put 'Mi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAs'@;
put 'MCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9'@;
put 'IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40'@;
put 'NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEu'@;
put 'NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x'@;
put 'LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs'@;
put 'Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwx'@;
put 'LDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0x'@;
put 'LjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwx'@;
put 'OS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTG9naW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt'@;
put 'MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4'@;
put 'LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQx'@;
put 'LTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVMb2dvdXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0y'@;
put 'LTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIy'@;
put 'SDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAs'@;
put 'MCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4'@;
put 'LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlUHJpbnRlcj0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAt'@;
put 'MlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQg'@;
put 'MzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4x'@;
put 'My0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjci'@;
put 'IHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1Yx'@;
put 'M0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIy'@;
put 'LjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZW'@;
put 'MTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwx'@;
put 'OS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0x'@;
put 'SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i'@;
put 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVXb3JsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRo'@;
put 'My42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEu'@;
put 'ODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4z'@;
put 'N0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcu'@;
put 'OSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5'@;
put 'LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFh'@;
put 'Ny40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQu'@;
put 'NzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAs'@;
put 'MCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTku'@;
put 'MzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4z'@;
put 'NmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1'@;
put 'VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVj'@;
put 'LS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIs'@;
put 'MCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRj'@;
put 'LjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4'@;
put 'LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2'@;
put 'LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYs'@;
put 'MjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjku'@;
put 'NTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjky'@;
put 'LDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4'@;
put 'YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44'@;
put 'Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcu'@;
put 'NDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVTbGlkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43'@;
put 'OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCww'@;
put 'LDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIs'@;
put 'MCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMu'@;
put 'MjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMu'@;
put 'MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMx'@;
put 'QTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIu'@;
put 'MzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEx'@;
put 'IiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIy'@;
put 'NiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCww'@;
put 'VjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNyww'@;
put 'LDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5'@;
put 'VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEu'@;
put 'MzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4z'@;
put 'MVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCww'@;
put 'LDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZUZpcmV3YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMy'@;
put 'djYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEy'@;
put 'LDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhI'@;
put 'MjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45'@;
put 'VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi'@;
put 'IHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy'@;
put 'LDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhI'@;
put 'MTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRI'@;
put 'NFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdW'@;
put 'MTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9'@;
put 'IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwz'@;
put 'MEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0i'@;
put 'OSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx'@;
put 'MSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5'@;
put 'LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy'@;
put 'LDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0x'@;
put 'MywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZI'@;
put 'MTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVSZWRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVVbmRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40'@;
put 'Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVTY3JvbGw9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs'@;
put 'NC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYt'@;
put 'Mi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww'@;
put 'djQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAs'@;
put 'Ni41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4'@;
put 'YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2'@;
put 'LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMu'@;
put 'MTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwx'@;
put 'NS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41'@;
put 'LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMu'@;
put 'NUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu'@;
put 'MTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGEx'@;
put 'LjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0'@;
put 'LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiww'@;
put 'LDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQy'@;
put 'LTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIx'@;
put 'LDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMu'@;
put 'MDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTIt'@;
put 'MSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQu'@;
put 'MDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZW'@;
put 'NUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCww'@;
put 'LS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCww'@;
put 'LS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44Mywx'@;
put 'LjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmEx'@;
put 'LjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCww'@;
put 'LDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEt'@;
put 'MS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4y'@;
put 'Myw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2'@;
put 'LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4x'@;
put 'NSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3'@;
put 'LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCww'@;
put 'LDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0x'@;
put 'LjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2'@;
put 'LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4'@;
put 'bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEs'@;
put 'MSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAs'@;
put 'NC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgy'@;
put 'NnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCww'@;
put 'LDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0u'@;
put 'MjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJh'@;
put 'LjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVW'@;
put 'MjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu'@;
put 'NTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3'@;
put 'LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCww'@;
put 'LC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2'@;
put 'bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwz'@;
put 'My41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1'@;
put 'LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJh'@;
put 'LjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3'@;
put 'LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu'@;
put 'MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNyww'@;
put 'LDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksRi5DbHJTaGFwZVR3b1dheUFycm93'@;
put 'cz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMu'@;
put 'MjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5'@;
put 'LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4y'@;
put 'MSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVUb29scz0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYy'@;
put 'OGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgx'@;
put 'NmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4Ljky'@;
put 'LDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCww'@;
put 'LDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4'@;
put 'LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4n'@;
put 'KSxGLkNsclNoYXBlV2luZG93TWF4PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVdpbmRvd01pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxGLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIC8+JyksRi5DbHJTaGFwZVpvb21Jbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PicpLEYuQ2xyU2hhcGVab29tT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlS2V5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMi'@;
put 'IHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcu'@;
put 'NDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4'@;
put 'LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykg'@;
put 'cm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwy'@;
put 'OC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03'@;
put 'LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy'@;
put 'dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEg'@;
put 'MTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4w'@;
put 'NywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywz'@;
put 'LDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUs'@;
put 'NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUu'@;
put 'NjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjgu'@;
put 'MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAs'@;
put 'MC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCww'@;
put 'LDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu'@;
put 'MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwz'@;
put 'LjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFM'@;
put 'MTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlTGlicmFyeT0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBh'@;
put 'MSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJT'@;
put 'aGFwZUJvbHQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGEx'@;
put 'LDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1'@;
put 'aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVXcmVuY2g9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCww'@;
put 'LDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4'@;
put 'LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJv'@;
put 'dGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSww'@;
put 'LDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUJ1bGxzZXllPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwy'@;
put 'LjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgs'@;
put 'NC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42'@;
put 'LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjks'@;
put 'NC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQu'@;
put 'MDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlVGFy'@;
put 'Z2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcs'@;
put 'MCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVGbGFtZT0o'@;
put 'MCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMs'@;
put 'MjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4y'@;
put 'MSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0'@;
put 'LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44'@;
put 'Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgy'@;
put 'Mi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43Nyww'@;
put 'LS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxG'@;
put 'LkNsclNoYXBlSG91cmdsYXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAs'@;
put 'MjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJI'@;
put 'N2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0u'@;
put 'NjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5'@;
put 'LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4z'@;
put 'Niw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAs'@;
put 'MCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEs'@;
put 'MCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMTho'@;
put 'MGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEu'@;
put 'MjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0'@;
put 'LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42'@;
put 'Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBh'@;
put 'Ni4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwx'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4w'@;
put 'NywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1'@;
put 'TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2'@;
put 'LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQu'@;
put 'NTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'YWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcs'@;
put 'NEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkx'@;
put 'LTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwx'@;
put 'MS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZU5vQWNjZXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0'@;
put 'LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3'@;
put 'LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4y'@;
put 'NSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYu'@;
put 'ODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZU9yZ2Fu'@;
put 'aXphdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4'@;
put 'LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIx'@;
put 'Ljg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0'@;
put 'IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZUJhbGFuY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEu'@;
put 'Ni44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCww'@;
put 'LDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTgu'@;
put 'MTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLEYuQ2xyU2hhcGVJZEJhZGdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAs'@;
put 'MCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiww'@;
put 'LDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAs'@;
put 'MCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y'@;
put 'Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4'@;
put 'LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'OCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYu'@;
put 'ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2Ex'@;
put 'LjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJW'@;
put 'MzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEw'@;
put 'LjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4y'@;
put 'MyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAs'@;
put 'MCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAs'@;
put 'MCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi'@;
put 'IGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwx'@;
put 'MC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41'@;
put 'QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZVJlcGVhdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4y'@;
put 'OCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02'@;
put 'LjFsLTIsMi4xMloiLz4nKSxGLkNsclNoYXBlRmlsZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFW'@;
put 'MzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg'@;
put 'ZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4Vjdh'@;
put 'MSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLEYuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMyww'@;
put 'LDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYs'@;
put 'MzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUt'@;
put 'LjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEs'@;
put 'MjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLEYuQ2xyU2hhcGVTaHJpbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z'@;
put 'MiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEs'@;
put 'MCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksRi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43'@;
put 'LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4x'@;
put 'Miw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42'@;
put 'MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgs'@;
put 'MS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4y'@;
put 'OSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwx'@;
put 'MS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43'@;
put 'Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWEx'@;
put 'LDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcu'@;
put 'OTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCww'@;
put 'LC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVNvcnRCeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAt'@;
put 'Mmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEs'@;
put 'MSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAt'@;
put 'MS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAs'@;
put 'MC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9'@;
put 'IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4z'@;
put 'N2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjds'@;
put 'NC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEs'@;
put 'MSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcu'@;
put 'NzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcu'@;
put 'MzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43'@;
put 'OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQnJpZWZjYXNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQs'@;
put 'Ni43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYx'@;
put 'OEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43'@;
put 'YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEs'@;
put 'LjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1'@;
put 'LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4w'@;
put 'NywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBh'@;
put 'dGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42'@;
put 'LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAs'@;
put 'MCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwx'@;
put 'Ni43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQu'@;
put 'MDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcu'@;
put 'MzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0'@;
put 'aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43'@;
put 'MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgy'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUg'@;
put 'Y3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9'@;
put 'IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVGaWx0ZXIyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2Ex'@;
put 'LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZU1vb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQu'@;
put 'OTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwx'@;
put 'LDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIu'@;
put 'MDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+Jyks'@;
put 'Ri5DbHJTaGFwZVN1bj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0x'@;
put 'OCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5'@;
put 'LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwx'@;
put 'LDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQx'@;
put 'YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAs'@;
put 'MC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAu'@;
put 'MDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45'@;
put 'MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2'@;
put 'LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYu'@;
put 'NDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwy'@;
put 'Ni4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTks'@;
put 'OC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLEYuQ2xyU2hhcGVXYW5kPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwy'@;
put 'LjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMt'@;
put 'NS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywx'@;
put 'LjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41'@;
put 'MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAs'@;
put 'MCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wx'@;
put 'LjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksRi5DbHJTaGFwZUN1cnNvck1vdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUu'@;
put 'ODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFM'@;
put 'MTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz4nKSxGLkNsclNoYXBlQ2xvbmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIx'@;
put 'IDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCww'@;
put 'LDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwz'@;
put 'MCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRGV0YWlscz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCww'@;
put 'LDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwx'@;
put 'LDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBj'@;
put 'eD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVFcmFzZXI9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0'@;
put 'bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBs'@;
put 'Ny4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCww'@;
put 'LDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgs'@;
put 'MTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlTGFuZHNjYXBlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wt'@;
put 'MS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0x'@;
put 'LjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs'@;
put 'MCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0u'@;
put 'MzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBhc3RlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJh'@;
put 'MiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0i'@;
put 'MiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQb3J0cmFpdD0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgt'@;
put 'MS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0y'@;
put 'VjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1'@;
put 'LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlVHJlZVZpZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAs'@;
put 'MS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2Ex'@;
put 'LDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJI'@;
put 'NFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEs'@;
put 'MCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAs'@;
put 'MC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2'@;
put 'LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01'@;
put 'LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwx'@;
put 'LDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJj'@;
put 'LjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4y'@;
put 'OC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMu'@;
put 'MTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwu'@;
put 'NDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZh'@;
put 'MS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVGaWxlWmlw'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMw'@;
put 'LDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0x'@;
put 'My40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5'@;
put 'YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQs'@;
put 'MSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45'@;
put 'LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAu'@;
put 'NCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2'@;
put 'MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJI'@;
put 'MzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIu'@;
put 'MSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVSZWN5Y2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAu'@;
put 'NS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42'@;
put 'LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0'@;
put 'XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43'@;
put 'LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAu'@;
put 'My0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAs'@;
put 'MC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4x'@;
put 'Yy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4y'@;
put 'LDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEu'@;
put 'OCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEt'@;
put 'MC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45'@;
put 'LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwt'@;
put 'Ni4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRj'@;
put 'LTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIy'@;
put 'LjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlVHJlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0x'@;
put 'MywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40'@;
put 'LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQu'@;
put 'OSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcu'@;
put 'NywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wz'@;
put 'LjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk'@;
put 'PSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlzaD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xl'@;
put 'IGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43'@;
put 'NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZj'@;
put 'LTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBh'@;
put 'MjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkEx'@;
put 'LDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVGb3JtPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwx'@;
put 'LDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCww'@;
put 'LDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFh'@;
put 'MSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMz'@;
put 'LjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCww'@;
put 'LDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlRnVl'@;
put 'bD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcu'@;
put 'ODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUs'@;
put 'My41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCww'@;
put 'LDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEs'@;
put 'MSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVTbm93Zmxha2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSww'@;
put 'LDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAu'@;
put 'ODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEs'@;
put 'MSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwy'@;
put 'LjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQu'@;
put 'OCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAs'@;
put 'MCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4y'@;
put 'NiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxw'@;
put 'YXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxGLkNsclNo'@;
put 'YXBlVGFibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAs'@;
put 'MCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45'@;
put 'NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCww'@;
put 'LDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxGLkNsclNoYXBlQ3Jv'@;
put 'c3NoYWlycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwx'@;
put 'LDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs'@;
put 'MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJT'@;
put 'aGFwZURvdENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCww'@;
put 'LDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVCZXRhPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYx'@;
put 'LDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1'@;
put 'Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4z'@;
put 'OC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcu'@;
put 'MDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgx'@;
put 'OVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwx'@;
put 'Ny41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0w'@;
put 'LjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40'@;
put 'LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjkt'@;
put 'MC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4y'@;
put 'aC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC00Ii8+XG4nKSxGLkNsclNoYXBlRmlyc3RBaWQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy'@;
put 'LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgx'@;
put 'Ni43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCww'@;
put 'LDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQu'@;
put 'NWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41'@;
put 'aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxGLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSww'@;
put 'LDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEu'@;
put 'MUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAt'@;
put 'NC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgt'@;
put 'LjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYs'@;
put 'NCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4z'@;
put 'OS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5'@;
put 'LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAs'@;
put 'MCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYs'@;
put 'MS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwx'@;
put 'NS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgs'@;
put 'MSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43'@;
put 'OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwx'@;
put 'LC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwx'@;
put 'LjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEs'@;
put 'MCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAs'@;
put 'MCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQu'@;
put 'MUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIz'@;
put 'LDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwy'@;
put 'LjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4'@;
put 'LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEt'@;
put 'Mi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIs'@;
put 'My4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOkYuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYi'@;
put 'OkYuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpGLkNsclNoYXBlUGluYm9hcmQsbmV3OkYuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Ri5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOkYuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpGLkNs'@;
put 'clNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpGLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOkYuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOkYuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Ri5D'@;
put 'bHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Ri5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Ri5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpGLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Ri5DbHJTaGFwZU9iamVjdHMsYm9vazpGLkNsclNoYXBlQm9vayxhc3Rlcmlz'@;
put 'azpGLkNsclNoYXBlQXN0ZXJpc2ssYnVnOkYuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Ri5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOkYuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Ri5DbHJTaGFwZVBlbmNpbCxub3RlOkYuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Ri5DbHJTaGFwZVJl'@;
put 'ZnJlc2gsc3luYzpGLkNsclNoYXBlU3luYywidmlldy1saXN0IjpGLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOkYuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Ri5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpGLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOkYuQ2xy'@;
put 'U2hhcGVEb3dubG9hZCx1cGxvYWQ6Ri5DbHJTaGFwZVVwbG9hZCxsb2NrOkYuQ2xyU2hhcGVMb2NrLHVubG9jazpGLkNsclNoYXBlVW5sb2NrLHVzZXJzOkYuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Ri5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Ri5DbHJTaGFwZUZpbHRlcixwaW46Ri5DbHJT'@;
put 'aGFwZVBpbixmaWxlOkYuQ2xyU2hhcGVGaWxlLHBsdXM6Ri5DbHJTaGFwZVBsdXMsbWludXM6Ri5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOkYuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOkYuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpGLkNsclNoYXBlQmFuLCJ0aW1l'@;
put 'cy1jaXJjbGUiOkYuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpGLkNsclNoYXBlVHJhc2gsY2lyY2xlOkYuQ2xyU2hhcGVDaXJjbGUsdGFnOkYuQ2xyU2hhcGVUYWcsdGFnczpGLkNsclNoYXBlVGFncyxoaXN0b3J5OkYuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOkYuQ2xyU2hhcGVDbG9jaywi'@;
put 'YWxhcm0tY2xvY2siOkYuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OmxlLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6Ri5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6Ri5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpGLkNsclNoYXBlQ29weSxoZWxwOkYuQ2xyU2hhcGVI'@;
put 'ZWxwLGxvZ2luOkYuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6Ri5DbHJTaGFwZUxvZ291dCxwcmludGVyOkYuQ2xyU2hhcGVQcmludGVyLHdvcmxkOkYuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6Ri5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6Ri5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpGLkNs'@;
put 'clNoYXBlRmlyZXdhbGwsbGlzdDpGLkNsclNoYXBlTGlzdCxyZWRvOkYuQ2xyU2hhcGVSZWRvLHVuZG86Ri5DbHJTaGFwZVVuZG8sc2Nyb2xsOkYuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOkYuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpGLkNsclNoYXBl'@;
put 'VHdvV2F5QXJyb3dzLHN3aXRjaDpGLkNsclNoYXBlU3dpdGNoLHRvb2xzOkYuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpGLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOkYuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOkYuQ2xyU2hhcGVXaW5kb3dNaW4sIndp'@;
put 'bmRvdy1yZXN0b3JlIjpGLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6Ri5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOkYuQ2xyU2hhcGVab29tT3V0LGtleTpGLkNsclNoYXBlS2V5LGxpYnJhcnk6Ri5DbHJTaGFwZUxpYnJhcnksYm9sdDpGLkNsclNoYXBlQm9sdCx3cmVuY2g6'@;
put 'Ri5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpGLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OkYuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6Ri5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpGLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOkYuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246'@;
put 'Ri5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOkYuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6Ri5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OkYuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOkYuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOkYuQ2xyU2hhcGVQYXBlcmNsaXAs'@;
put 'c2hyaW5rOkYuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6Ri5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOkYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6Ri5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6Ri5DbHJTaGFwZUNv'@;
put 'bGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOkYuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpGLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOkYuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOkYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRl'@;
put 'ci0yIjpGLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOkYuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246Ri5DbHJTaGFwZU1vb24sc3VuOkYuQ2xyU2hhcGVTdW4sd2FuZDpGLkNsclNoYXBlV2FuZCxjbG9uZTpGLkNsclNoYXBlQ2xvbmUsZGV0YWlsczpGLkNsclNoYXBlRGV0YWlscywi'@;
put 'ZHJhZy1oYW5kbGUtY29ybmVyIjpGLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6Ri5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6Ri5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpGLkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6Ri5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6Ri5D'@;
put 'bHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOkYuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpGLkNsclNoYXBlUmVjeWNsZSx0cmVlOkYuQ2xyU2hhcGVUcmVlLGZpc2g6Ri5DbHJTaGFwZUZpc2gsZm9ybTpGLkNsclNoYXBlRm9ybSxmdWVsOkYuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpG'@;
put 'LkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOkYuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6Ri5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6Ri5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOkYuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6Ri5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUi'@;
put 'OkYuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsIm5v'@;
put 'dGUtZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50'@;
put 'aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAs'@;
put 'eC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcp'@;
put 'KEYuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50'@;
put 'aWFsU2hhcGVzLCJhbGVydCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlh'@;
put 'bFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMs'@;
put 'ImF0dGFjaG1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5zaHJp'@;
put 'bmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYm'@;
put 'd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg'@;
put 'ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlv'@;
put 'bihMZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuTWVkaWFTaGFwZXM9Ri5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPUYuQ2xyU2hhcGVNaWNyb3Bob25lPUYuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Ri5DbHJTaGFw'@;
put 'ZVJlcGxheU9uZT1GLkNsclNoYXBlUmVwbGF5QWxsPUYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Ri5DbHJTaGFwZU11c2ljTm90ZT1GLkNsclNoYXBlRmlsbVN0cmlwPUYuQ2xyU2hhcGVIZWFkcGhvbmVzPUYuQ2xyU2hhcGVWb2x1bWVNdXRlPUYuQ2xyU2hhcGVWb2x1bWVVcD1GLkNsclNoYXBl'@;
put 'Vm9sdW1lRG93bj1GLkNsclNoYXBlU2h1ZmZsZT1GLkNsclNoYXBlVmlkZW9DYW1lcmE9Ri5DbHJTaGFwZUNhbWVyYT1GLkNsclNoYXBlRmFzdEZvcndhcmQ9Ri5DbHJTaGFwZVJld2luZD1GLkNsclNoYXBlUG93ZXI9Ri5DbHJTaGFwZVN0b3A9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkPUYuQ2xy'@;
put 'U2hhcGVQYXVzZT1GLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlUGxheT0oMCx4LmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcsMi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAs'@;
put 'MCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4w'@;
put 'NywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxGLkNsclNoYXBlUGF1c2U9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIu'@;
put 'MDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksRi5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLHguY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcsNC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3'@;
put 'VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEsMzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpN'@;
put 'MjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIsMCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41'@;
put 'MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksRi5DbHJTaGFwZVN0b3A9KDAseC5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIsMCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVQb3dlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4'@;
put 'LDM0LjE1YTE1LDE1LDAsMCwxLTcuNTItMjgsMSwxLDAsMCwxLDEsMS43MywxMywxMywwLDEsMCwxMywwLDEsMSwwLDEsMSwxLTEuNzMsMTUsMTUsMCwwLDEtNy41MiwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMCwxLTFWNGExLDEsMCwwLDAtMiwwVjIwQTEsMSwwLDAsMCwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCIgZD0iTTMyLjUxLDE1LjRIMzAuNDRhMTMsMTMsMCwxLDEtMTktNy41LDEsMSwwLDAsMC0xLTEuNzNBMTUsMTUsMCwxLDAsMzMsMTkuMTUsMTQuOSwxNC45LDAsMCwwLDMyLjUxLDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWwtLjMxLDBBMTMsMTMsMCwxLDEsMTEuNDgsNy45YTEsMSwwLDAsMC0xLTEuNzMsMTUsMTUsMCwxLDAsMjEuMzEsNy4xQTcuNDksNy40OSwwLDAsMSwzMCwxMy41'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLjA2LDE3LjY4YTEuMjgsMS4yOCwwLDAsMS0xLjI5LTEuMjhWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRBMS4yOCwxLjI4LDAsMCwxLDE4LjA2LDE5LjY4Wk0x'@;
put 'OCwyNy43OUE5Ljg4LDkuODgsMCwwLDEsMTIuMTcsOS44NWExLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjQsMS40LDAs'@;
put 'MCwxLDEuOTQtLjI5QTkuODgsOS44OCwwLDAsMSwxOCwyNy43OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtNkE5LjcsOS43LDAsMCwxLDI4LDE3Ljg5YTEw'@;
put 'LDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDgsNy4wOCwwLDAsMC0uNDUtMi40OUgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTR2NC40YTEuMjksMS4yOSwwLDAs'@;
put 'MS0yLjU4LDBWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwdi43MWwzLjc2LTYuNTFBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMy41Ny0uOUE5LjgzLDkuODMsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywx'@;
put 'LjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjM4LDEuMzgsMCwwLDEsMS41Mi0uNDksNy40NSw3LjQ1LDAsMCwxLS4zLTYuODMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5'@;
put 'LjkzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi43Nyw4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNGExLjI5LDEuMjksMCwwLDEtMi41OCwwWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUmV3aW5kPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAs'@;
put 'MSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4y'@;
put 'MkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgsMTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'IGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwyMCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCww'@;
put 'LDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMloiLz4nKSxGLkNsclNoYXBlRmFzdEZvcndhcmQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUuMjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0'@;
put 'LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4y'@;
put 'Ni0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGEx'@;
put 'Ljk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwz'@;
put 'LjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksRi5DbHJTaGFwZUNhbWVyYT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCww'@;
put 'LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcs'@;
put 'MTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCww'@;
put 'LDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwy'@;
put 'LDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42'@;
put 'Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4y'@;
put 'Mi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlVmlkZW9DYW1lcmE9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcs'@;
put 'MCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAsMS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3'@;
put 'LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0'@;
put 'LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+JyksRi5DbHJTaGFwZVNodWZmbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSwwLDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwx'@;
put 'LDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLEYuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1'@;
put 'LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwz'@;
put 'MmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYzMGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwz'@;
put 'MFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSww'@;
put 'LDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSww'@;
put 'LDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxGLkNsclNoYXBlVm9sdW1lVXA9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y'@;
put 'My40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEt'@;
put 'MS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk'@;
put 'PSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAsMCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxG'@;
put 'LkNsclNoYXBlVm9sdW1lTXV0ZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMuNjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCww'@;
put 'LDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwxLjc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSww'@;
put 'LDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwx'@;
put 'LjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4x'@;
put 'Nyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBk'@;
put 'PSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEu'@;
put 'NDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4y'@;
put 'MSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0'@;
put 'TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4'@;
put 'LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAs'@;
put 'MTcuNTRaIi8+JyksRi5DbHJTaGFwZUhlYWRwaG9uZXM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMz'@;
put 'VjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQu'@;
put 'MjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUsMCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwxMCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3'@;
put 'LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksRi5DbHJTaGFwZUZpbG1TdHJpcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCwwLTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZM'@;
put 'MjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5'@;
put 'SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwxLjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicp'@;
put 'LEYuQ2xyU2hhcGVNdXNpY05vdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1'@;
put 'Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00'@;
put 'LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlD'@;
put 'MjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2MtLjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1'@;
put 'LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjky'@;
put 'LTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMzLTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5'@;
put 'LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTExLjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSww'@;
put 'LDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLEYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMu'@;
put 'ODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNB'@;
put 'MywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3'@;
put 'LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSww'@;
put 'LDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwx'@;
put 'LDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwz'@;
put 'MC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlUmVwbGF5QWxsPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40Niwx'@;
put 'LjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAsMCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEu'@;
put 'NzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVJlcGxheU9uZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTks'@;
put 'MjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEu'@;
put 'NDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCx4'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEy'@;
put 'SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4x'@;
put 'NWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgyLDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIs'@;
put 'MGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwxLS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIs'@;
put 'MTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4y'@;
put 'OFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlTWljcm9waG9uZT0o'@;
put 'MCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4y'@;
put 'LTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMw'@;
put 'LjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywz'@;
put 'LjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSww'@;
put 'LjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCx4LmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAu'@;
put 'NC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjktNi41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEw'@;
put 'LTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4z'@;
put 'LDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUs'@;
put 'MjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEtNi45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40'@;
put 'LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5NZWRpYVNoYXBlcz17cGxheTpGLkNsclNoYXBlUGxheSxwYXVzZTpGLkNsclNoYXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6Ri5DbHJTaGFwZVN0b3AscG93ZXI6'@;
put 'Ri5DbHJTaGFwZVBvd2VyLHJld2luZDpGLkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOkYuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6Ri5DbHJTaGFwZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpGLkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpGLkNsclNoYXBlU2h1ZmZsZSwi'@;
put 'dm9sdW1lLXVwIjpGLkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpGLkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOkYuQ2xyU2hhcGVWb2x1bWVNdXRlLGhlYWRwaG9uZXM6Ri5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOkYuQ2xyU2hhcGVGaWxtU3RyaXAs'@;
put 'Im11c2ljLW5vdGUiOkYuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOkYuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOkYuQ2xyU2hhcGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOkYuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOkYuQ2xyU2hhcGVW'@;
put 'aWRlb0dhbGxlcnksbWljcm9waG9uZTpGLkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpGLkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z'@;
put 'LmFkZChGLk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKExlLEYsYWUpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Tb2NpYWxTaGFwZXM9Ri5DbHJTaGFwZUhhc2h0YWc9Ri5DbHJTaGFwZUNyb3duPUYuQ2xyU2hhcGVUaHVtYnNEb3duPUYuQ2xyU2hhcGVUaHVtYnNVcD1GLkNsclNoYXBlU2FkRmFjZT1GLkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2U9Ri5DbHJTaGFwZUhhcHB5RmFjZT1GLkNsclNoYXBlUGljdHVyZT1GLkNsclNoYXBlQ2hhdEJ1YmJsZT1GLkNsclNoYXBlVGFsa0J1YmJsZXM9Ri5DbHJTaGFwZUhlYXJ0QnJva2VuPUYuQ2xyU2hhcGVIZWFydD1GLkNsclNoYXBlSW5ib3g9Ri5DbHJTaGFwZUZs'@;
put 'YWc9Ri5DbHJTaGFwZVRhc2tzPUYuQ2xyU2hhcGVFbnZlbG9wZT1GLkNsclNoYXBlQm9va21hcms9Ri5DbHJTaGFwZUhhbGZTdGFyPUYuQ2xyU2hhcGVTdGFyPUYuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9q'@;
put 'ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtGLkNsclNoYXBlU2hhcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQs'@;
put 'MTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMs'@;
put 'MywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0y'@;
put 'Ny41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1'@;
put 'LDAsMSwwLDUtNVoiLz4nKSxGLkNsclNoYXBlU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwt'@;
put 'Ny40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNh'@;
put 'LjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCww'@;
put 'LDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEu'@;
put 'NDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt'@;
put 'LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs'@;
put 'MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLEYuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAs'@;
put 'MC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMx'@;
put 'LjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwy'@;
put 'LjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0u'@;
put 'MTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcs'@;
put 'MGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIs'@;
put 'Mi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEs'@;
put 'LjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksRi5DbHJTaGFwZUJvb2ttYXJrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wx'@;
put 'OCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiww'@;
put 'LDAsMCwyNiwyWiIvPicpLEYuQ2xyU2hhcGVFbnZlbG9wZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIs'@;
put 'MiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEy'@;
put 'LDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0uODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEs'@;
put 'MzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCww'@;
put 'LDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAuMDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4y'@;
put 'Ny03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcu'@;
put 'NDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5'@;
put 'bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMw'@;
put 'LjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiww'@;
put 'LDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJT'@;
put 'aGFwZVRhc2tzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1'@;
put 'QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43Miwx'@;
put 'OWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAs'@;
put 'MCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAs'@;
put 'MTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEs'@;
put 'MSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5'@;
put 'VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIs'@;
put 'Ny41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAs'@;
put 'MCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEEx'@;
put 'LjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwz'@;
put 'LjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4x'@;
put 'Mi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTgu'@;
put 'MDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMs'@;
put 'Ny41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3'@;
put 'LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlRmxhZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4x'@;
put 'MSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUs'@;
put 'MCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiww'@;
put 'LDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLEYuQ2xyU2hhcGVJbmJveD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwx'@;
put 'OCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYu'@;
put 'NUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQx'@;
put 'TDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAs'@;
put 'Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIZWFydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40'@;
put 'OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0'@;
put 'LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00'@;
put 'Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5'@;
put 'Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEs'@;
put 'MTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlSGVhcnRCcm9rZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44'@;
put 'NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODks'@;
put 'Ni4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSww'@;
put 'LDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45'@;
put 'LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcu'@;
put 'NjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSww'@;
put 'LDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwx'@;
put 'LDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEz'@;
put 'VjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlW'@;
put 'N0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3'@;
put 'LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0x'@;
put 'LTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i'@;
put 'YWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYs'@;
put 'MCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVs'@;
put 'NC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0i'@;
put 'NiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0'@;
put 'LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAt'@;
put 'LjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEs'@;
put 'MCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwxMi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwx'@;
put 'LDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2'@;
put 'LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwy'@;
put 'MC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwu'@;
put 'ODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAsMCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwx'@;
put 'LDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0xMGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwxLDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgs'@;
put 'MTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAs'@;
put 'MSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVQaWN0dXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEy'@;
put 'LDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywx'@;
put 'MSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2'@;
put 'LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAt'@;
put 'MywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4z'@;
put 'OCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwz'@;
put 'MiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45'@;
put 'bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYu'@;
put 'MDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIYXBweUZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywy'@;
put 'OC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwx'@;
put 'NS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1'@;
put 'LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv'@;
put 'PicpLEYuQ2xyU2hhcGVTYWRGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4x'@;
put 'NiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0'@;
put 'LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFwZVRodW1ic1VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZh'@;
put 'Mi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIu'@;
put 'MzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYz'@;
put 'LDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwx'@;
put 'LDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+'@;
put 'JyksRi5DbHJTaGFwZVRodW1ic0Rvd249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42'@;
put 'OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEs'@;
put 'MSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43Niwx'@;
put 'MC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ3Jvd249KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUs'@;
put 'MjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIuMUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3'@;
put 'LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAs'@;
put 'MS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAtLjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40'@;
put 'NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1'@;
put 'LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCwwLDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0'@;
put 'aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUEx'@;
put 'LjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42'@;
put 'LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIuNiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2'@;
put 'LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCwwLDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUy'@;
put 'LDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgxLDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEs'@;
put 'MSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAsMC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAs'@;
put 'MSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLEYuQ2xyU2hhcGVIYXNodGFnPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDku'@;
put 'MTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMu'@;
put 'MzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAs'@;
put 'MCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJI'@;
put 'OS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLTho'@;
put 'NmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLEYuU29jaWFsU2hhcGVzPXtjcm93bjpGLkNsclNoYXBlQ3Jvd24sc2hhcmU6Ri5DbHJT'@;
put 'aGFwZVNoYXJlLHN0YXI6Ri5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6Ri5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOkYuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpGLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6bGUuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpsZS5DbHJTaGFwZUV2'@;
put 'ZW50LHRhc2tzOkYuQ2xyU2hhcGVUYXNrcyxmbGFnOkYuQ2xyU2hhcGVGbGFnLGluYm94OkYuQ2xyU2hhcGVJbmJveCxoYXNodGFnOkYuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OkYuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpGLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxl'@;
put 'cyI6Ri5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Ri5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpGLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Ri5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpGLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNl'@;
put 'IjpGLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpGLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpGLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lh'@;
put 'bFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAseC5kZXNjcmlw'@;
put 'dG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMv'@;
put 'dGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAg'@;
put 'ICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsclNoYXBlVk1XQXBwPUYuQ2xyU2hhcGVWTT1GLkNsclNoYXBlUm91dGVyPUYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPUYuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9Ri5DbHJTaGFwZU5ldHdvcmtHbG9iZT1GLkNsclNoYXBlVGFibGV0PUYuQ2xyU2hh'@;
put 'cGVNb2JpbGU9Ri5DbHJTaGFwZUJhdHRlcnk9Ri5DbHJTaGFwZUFwcGxpY2F0aW9uPUYuQ2xyU2hhcGVDb2RlPUYuQ2xyU2hhcGVUZXJtaW5hbD1GLkNsclNoYXBlRGlzcGxheT1GLkNsclNoYXBlQ29tcHV0ZXI9Ri5DbHJTaGFwZUZsb3BweT1GLkNsclNoYXBlUGx1Z2luPUYuQ2xyU2hhcGVE'@;
put 'b3dubG9hZENsb3VkPUYuQ2xyU2hhcGVVcGxvYWRDbG91ZD1GLkNsclNoYXBlRXhwb3J0PUYuQ2xyU2hhcGVJbXBvcnQ9Ri5DbHJTaGFwZVNoaWVsZFg9Ri5DbHJTaGFwZVNoaWVsZD1GLkNsclNoYXBlU2hpZWxkQ2hlY2s9Ri5DbHJTaGFwZVJlc291cmNlUG9vbD1GLkNsclNoYXBlRGF0YUNs'@;
put 'dXN0ZXI9Ri5DbHJTaGFwZU1lbW9yeT1GLkNsclNoYXBlQ1BVPUYuQ2xyU2hhcGVCdWlsZGluZz1GLkNsclNoYXBlQXBwbGljYXRpb25zPUYuQ2xyU2hhcGVDbHVzdGVyPUYuQ2xyU2hhcGVTdG9yYWdlPUYuQ2xyU2hhcGVIb3N0PUYuQ2xyU2hhcGVEYXNoYm9hcmQ9Ri5DbHJTaGFwZU1vdXNl'@;
put 'PUYuQ2xyU2hhcGVLZXlib2FyZD1GLkNsclNoYXBlRGV2aWNlcz1GLkNsclNoYXBlQmFja3VwPUYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlPUYuQ2xyU2hhcGVIYXJkRGlzaz1GLkNsclNoYXBlUmFja1NlcnZlcj1GLkNsclNoYXBlV2lmaT1GLkNsclNoYXBlQnVuZGxlPUYuQ2xyU2hhcGVCbG9j'@;
put 'a3NHcm91cD1GLkNsclNoYXBlQmxvY2s9Ri5DbHJTaGFwZUxheWVycz1GLkNsclNoYXBlVW5pbnN0YWxsPUYuQ2xyU2hhcGVJbnN0YWxsPUYuQ2xyU2hhcGVOb1dpZmk9Ri5DbHJTaGFwZVBob25lSGFuZHNldD1GLkNsclNoYXBlUnVsZXJQZW5jaWw9dm9pZCAwLEYuVGVjaG5vbG9neVNoYXBl'@;
put 'cz1GLkNsclNoYXBlRmlsZVNoYXJlMj1GLkNsclNoYXBlQ2lDZD1GLkNsclNoYXBlQW5pbWF0aW9uPUYuQ2xyU2hhcGVUYXBlRHJpdmU9Ri5DbHJTaGFwZU1lZGlhQ2hhbmdlcj1GLkNsckNvbnRyb2xMdW49Ri5DbHJTaGFwZVBvZD1GLkNsclNoYXBlTm9kZT1GLkNsclNoYXBlTmFtZXNwYWNl'@;
put 'PUYuQ2xyU2hhcGVOb2Rlcz1GLkNsclNoYXBlTm9kZUdyb3VwPUYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj1GLkNsclNoYXBlSG9zdEdyb3VwPUYuQ2xyU2hhcGVTcXVpZD1GLkNsclNoYXBlQ2FwYWNpdG9yPUYuQ2xyU2hhcGVSZXNpc3Rvcj1GLkNsclNoYXBlSW5kdWN0b3I9Ri5DbHJTaGFw'@;
put 'ZVJhZGFyPUYuQ2xyU2hhcGVVc2I9Ri5DbHJTaGFwZVFyQ29kZT1GLkNsclNoYXBlRmlsZVNoYXJlPUYuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9Ri5DbHJTaGFwZUNvbnRhaW5lcj1GLkNsclNoYXBlQ2REdmQ9Ri5DbHJTaGFwZUJhckNvZGU9Ri5DbHJTaGFwZUF0b209Ri5DbHJTaGFwZUFz'@;
put 'c2lnblVzZXI9Ri5DbHJTaGFwZVByb2Nlc3NPblZNPUYuQ2xyU2hhcGVCbHVldG9vdGhPZmY9Ri5DbHJTaGFwZUJsdWV0b290aD1GLkNsclNoYXBlU1NEPUYuQ2xyU2hhcGVOVk1lPUYuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz1GLkNsclNoYXBlSGFyZERyaXZlPUYuQ2xyU2hhcGVBZG1pbmlz'@;
put 'dHJhdG9yPUYuQ2xyU2hhcGVGbGFzaz1GLkNsclNoYXBlSGVsaXg9Ri5DbHJTaGFwZURlcGxveT1GLkNsclNoYXBlQ2xvdWRUcmFmZmljPUYuQ2xyU2hhcGVDbG91ZFNjYWxlPUYuQ2xyU2hhcGVDbG91ZE5ldHdvcms9Ri5DbHJTaGFwZVVubGluaz1GLkNsclNoYXBlTGluaz1GLkNsclNoYXBl'@;
put 'RGlzY29ubmVjdD1GLkNsclNoYXBlQ29ubmVjdD1GLkNsclNoYXBlVW5hcmNoaXZlPUYuQ2xyU2hhcGVBcmNoaXZlPUYuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ri5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29u'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQxIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEuMjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdhMiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAs'@;
put 'MjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAs'@;
put 'MCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4'@;
put 'LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxGLkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43'@;
put 'Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4x'@;
put 'MSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4xMmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43'@;
put 'MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMsMi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCww'@;
put 'LDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwy'@;
put 'MC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEtMy42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4'@;
put 'LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUsMCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxGLkNsclNoYXBlTm9XaWZpPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuNDJhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMjQuNDJabTAsNmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwxOCwzMC40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuMjEsMjEuODVhMSwxLDAsMCwwLS4yMy0xLjQsMTMuNTYsMTMuNTYsMCwwLDAtNS0yLjIzbDMuODcsMy44N0ExLDEsMCwwLDAsMjYuMjEsMjEuODVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDEwLjcyYTIwLjg4LDIwLjg4LDAsMCwwLTQuMTYuNDNsMS43NCwxLjc0YTE5LDE5LDAsMCwxLDIuNDItLjE3QTE4Ljc2LDE4Ljc2LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAs'@;
put 'MTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMzLjU1LDguMkEyOC4xMSwyOC4xMSwwLDAsMCw4LjExLDUuMzZMOS42OSw2LjkzQTI2LDI2LDAsMCwxLDMyLjQ1LDkuODdhMSwxLDAsMCwwLDEu'@;
put 'MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xLjg0LDQuNzUsNC4yNyw3LjE4Yy0uNjIuMzQtMS4yMy43LTEuODMsMS4xQTEsMSwwLDEsMCwzLjU2LDkuOTRDNC4yNiw5LjQ3LDUsOSw1Ljc0LDguNjVs'@;
put 'My44NywzLjg3QTIwLjU5LDIwLjU5LDAsMCwwLDYuMjMsMTQuNCwxLDEsMCwwLDAsNy4zNiwxNmExOC44MiwxOC44MiwwLDAsMSwzLjc3LTJsNC4xNiw0LjE2QTEzLjUxLDEzLjUxLDAsMCwwLDEwLDIwLjU1YTEsMSwwLDAsMCwxLjE4LDEuNjFBMTEuNTIsMTEuNTIsMCwwLDEsMTcsMjBsMTAu'@;
put 'OCwxMC44LDEuNDEtMS40MS0yNi0yNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjkuNTQiIHI9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTIiIGQ9Ik0yOS4xOCwxNy43MWwuMTEtLjE3YTEuNTEsMS41MSwwLDAsMC0uNDctMi4xQTIwLjU3LDIwLjU3LDAsMCwwLDE4LDEyLjM3Yy0uNTYsMC0xLjExLDAtMS42NS4wN2wzLjIxLDMuMjFhMTcuNDEsMTcuNDEsMCwwLDEsNy42LDIuNTJBMS40OSwxLjQ5LDAsMCwwLDI5LjE4LDE3'@;
put 'LjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjc2LDkuMzhBMjcuOSwyNy45LDAsMCwwLDEwLjE4LDYuMjdMMTIuODEsOC45QTI0LjY4LDI0LjY4LDAsMCwxLDMxLjEsMTIuMTJhMS40OSwxLjQ5LDAsMCwwLDIt'@;
put 'LjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMyw0Ljc1bDMuMSwzLjFBMjcuMjgsMjcuMjgsMCwwLDAsMy4xOCw5LjQyYTEuNTEsMS41MSwwLDAsMC0u'@;
put 'NDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY5LDI0LjY5LDAsMCwxLDMuNjctMS45bDMuMTQsMy4xNGEyMC42MywyMC42MywwLDAsMC00LjUzLDIuMDksMS41MSwxLjUxLDAsMCwwLS40NiwyLjFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NkExNy40NiwxNy40'@;
put 'NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLEYuQ2xy'@;
put 'U2hhcGVJbnN0YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBh'@;
put 'MiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3'@;
put 'LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk'@;
put 'IiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEs'@;
put 'MCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAs'@;
put 'MCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiLz5cbicpLEYuQ2xyU2hhcGVVbmluc3RhbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43'@;
put 'LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCww'@;
put 'LDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUu'@;
put 'MjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEz'@;
put 'LjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywyNS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTgu'@;
put 'NjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMx'@;
put 'LDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLEYuQ2xyU2hh'@;
put 'cGVMYXllcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWEx'@;
put 'LDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAs'@;
put 'MCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSww'@;
put 'LDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUs'@;
put 'MS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxGLkNsclNoYXBlQmxvY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
put 'LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTBBMSwxLDAsMCwwLDMxLjQyLDkuMDlaTTE4LDUuMSwyOC42MSwxMCwxOCwxNC45LDcuMzksMTBaTTYsMTEuNTZsMTEsNS4wOHYxNC44TDYsMjYuMzZaTTE5LDMxLjQ0VjE2LjY0bDExLTUuMDh2MTQuOFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjUzVjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDIuNTctMS4xOWEzLjY3LDMuNjcsMCwwLDEtMi4xMS0xLjIyTDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsMy4wOCwxLjQyLDEtMS43NEwx'@;
put 'OC40MiwzLjA5YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjE1LjUzWk0xNywzMS40NCw2LDI2LjM2VjExLjU2bDExLDUuMDhaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxLjI2bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkySDMzLjdhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkyTDI5LjA4LDEuMjZBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDI2Ljg3LDEuMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3'@;
put 'LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx'@;
put 'LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMt'@;
put 'NmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsMTQuOSw3LjM5LDEwLDE4LDUuMSwyOC42MSwxMFpNMzAsMjYu'@;
put 'MzYsMTksMzEuNDRWMTYuNjRsMTEtNS4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuMzh2MTFMMTksMzEuNDRWMTYuNjRsMi43OS0xLjI5YTMuNjgsMy42OCwwLDAsMS0yLjI1LTEuMTZMMTgsMTQuOSw3'@;
put 'LjM5LDEwLDE4LDUuMWwzLDEuMzksMS0xLjc1TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTIsMjEuMTMsMTFhMS4yNywxLjI3LDAsMCwwLDEuMSwxLjkxSDMzLjY4QTEuMjcsMS4yNywwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjEyQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEt'@;
put 'Mi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0'@;
put 'LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0z'@;
put 'LjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBs'@;
put 'Ny41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yLjgxLjkxTDI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1Wk0xOC4xLDQuMDhsNS4xMSwyLjM1TDE4LjEsOC43OCwxMyw2LjQzWk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIy'@;
put 'LDUuNDksMTkuNjdabTYuNSwxMS40OS02LjUsMy02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhaTTExLjYsMTUuNTdoMFY4bDYuMDgsMi44YTEsMSwwLDAsMCwuODQsMEwyNC42LDh2Ny41OGgwbC02LjUsM1pNMzIuMTEsMjguODFsLTYuNSwzLTYuNTEtM1Yy'@;
put 'MS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3aC0ydjBsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCww'@;
put 'bC4yNC0uMTFhNC4xNyw0LjE3LDAsMCwxLC4yOS0uNjVsMS4zMy0yLjMxLTIuMjgsMUwxMyw2LjQzbDUuMS0yLjM1LDMuNDcsMS42LDEtMS43M0wxOC41LDIuMDhhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTgu'@;
put 'OTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEw'@;
put 'LjYsMjIsNS40OSwxOS42N1ptMCwxNC40OS02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTE1LTE0LjQ4LDUuMTEsMi4zNUwyNS42MSwyMiwyMC41LDE5LjY3Wm0wLDE0LjQ5LTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRs'@;
put 'Ni4wOC0yLjgsMCw3LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4x'@;
put 'LTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWMTIuN2E3LjU4'@;
put 'LDcuNTgsMCwwLDEtMi0xLjUxdjQuMzlsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDIzLDguNzJhNy4wNSw3LjA1LDAsMCwxLS40Ny0ybC00LjQ3LDJMMTMsNi40M2w1LjEtMi4zNSw0LjQ0LDJzMC0uMDYsMC0uMDlhNy41NSw3LjU1LDAsMCwxLC4yNy0ybC00LjMt'@;
put 'MmExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0z'@;
put 'LjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4x'@;
put 'MSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4'@;
put 'PSIzMC4wMyIgY3k9IjYuMDMiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1'@;
put 'YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41'@;
put 'LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1LDUuMTEsMi4zNVptLTEtNi40NC02LjQ0LDNWMTAuODdhMSwxLDAsMCwwLC4zNS0uMDhMMjQuNiw4djcuNThaTTE4LjEsNC4wOGw1LjExLDIu'@;
put 'MzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzaDBWMjQuMTFoMEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhabTE1LDAtNi40NiwzVjI0LjExQTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N3YwaC0ydjBsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOGwuMTQtLjA2QTMuMjMsMy4yMywwLDAsMSwxOSwxMGwxLjI4LTIuMjItMi4xNCwxTDEz'@;
put 'LDYuNDNsNS4xLTIuMzUsMy4zOSwxLjU2LDEtMS43My00LTEuODNhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4'@;
put 'LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yOCwuOTEsNS4xMS0yLjM2LDUuMTEsMi4zNUwxMC42LDIyWk0xMC42LDMxLjhWMjQuMTFBMS4wOCwxLjA4LDAsMCwwLDExLDI0bDYu'@;
put 'MDgtMi44LDAsNy42Wm05LjktMTIuMTMsNS4xMS0yLjM1LDUuMTEsMi4zNUwyNS42MSwyMlpNMjUuNjQsMzEuOFYyNC4xMUEuODkuODksMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuPHBhdGggZD0iTTI2Ljg5LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjcsMTNIMzMuNzJhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjEsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODksMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi42OWE3LjY2LDcuNjYsMCwwLDEtMi0xLjQ3djQuMzRsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOEwyMyw4LjczYTcuNjUsNy42NSwwLDAs'@;
put 'MS0uNDgtMmwtNC40MiwyTDEzLDYuNDNsNS4xLTIuMzUsNC4zOCwyVjZhNy41NSw3LjU1LDAsMCwxLC4yNy0yTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwu'@;
put 'NTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYs'@;
put 'MzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQnVuZGxlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwu'@;
put 'ODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4y'@;
put 'Wk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEs'@;
put 'MSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEy'@;
put 'LjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksRi5DbHJTaGFwZVdpZmk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSww'@;
put 'LDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4y'@;
put 'MywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwyMC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAt'@;
put 'LjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3'@;
put 'QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41'@;
put 'MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40OVoiLz5cbicpLEYuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YWxlcnRlZCIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjY0LDExQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTB2MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYyMUg0VjE1SDIwLjU4QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41Nkg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEy'@;
put 'LDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x'@;
put 'MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTAiIHk9IjE3IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIx'@;
put 'NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0xMCwxMUgyNHYtLjUxQTcuNDgsNy40OCwwLDAsMSwyMy4xMyw5SDEwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi42OC0uNUg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlh'@;
put 'MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjZINFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i'@;
put 'YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTAiIHk9IjkiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9'@;
put 'IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDdIMzJ2Nkg0Wm0wLDhIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNiIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEwVjdIMjAuNzFsMS43My0zSDRBMiwyLDAsMCwwLDIsNnY2SDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5Wk04LDlINlY3SDhaIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMnY4SDM0VjE1LjM4Wk04LDE5SDZWMTdIOFptMTYsMEgxMFYxN0gyNFoiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMiwxNHY4SDM0VjE0Wm02LDVINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2djZIMjUuNTFBNy41Miw3LjUyLDAsMCwxLDIzLjEzLDlaTTgs'@;
put 'OUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDIySDM0VjE0SDJabTgtNUgyNHYySDEwWk02LDE3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2djZIMzRWNkEyLDIsMCwwLDAsMzIs'@;
put 'NFpNOCw5SDZWN0g4Wk0yNCw5SDEwVjdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4n'@;
put 'KSxGLkNsclNoYXBlSGFyZERpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0zNCwyMS4wOGwtMS40LTUuNjhIMzAuNTFsMS40OSw2VjI5SDRWMjEuNDRMNy4wNiw5aDEyLjVsMS4xNS0ySDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFB'@;
put 'MSwxLDAsMCwwLDM0LDIxLjA4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz'@;
put 'My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjAiIHdp'@;
put 'ZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzQsMjEuMDgsMzIsMTMuMjFhNy40OSw3LjQ5LDAsMCwxLTIsLjI5bDIsNy45NFYyOUg0VjIxLjQ0TDcuMDYsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4wNkEyLDIsMCwwLDAsNS4x'@;
put 'Myw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwyMS4wOCwzMC44Niw4LjQzQTIsMiwwLDAsMCwyOC45NCw3SDcuMDZBMiwyLDAsMCwwLDUu'@;
put 'MTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4Wk00LDI5VjIxLjQ0TDcuMDYsOUgyOC45M0wzMiwyMS40NFYyOVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIxQTcuNDcsNy40NywwLDAsMSwyMi41Nyw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjg2'@;
put 'LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMiwyMnY3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt'@;
put 'MlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksRi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMxLjU4LDE1LjRIMjkuNDZjMSwyLjg1LDIuMzEsNi4zNywyLjU0LDcuMDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjks'@;
put 'MS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xMiwzNCwyMiwzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i'@;
put 'YWRnZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVh'@;
put 'MSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2Vk'@;
put 'IiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2Mmg3Ljk1QzMwLDE2Ljk0LDMxLjcyLDIxLjY1LDMyLDIyLjQ4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIMTVWMTJINy4wN2ExLjkyLDEuOTIs'@;
put 'MCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMSwzNCwyMiwzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEzLDkuOTIsMTcs'@;
put 'NlYxOWExLDEsMCwxLDAsMiwwVjZsNCwzLjk1QTEsMSwwLDEsMCwyNC4zOCw4LjVMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLjg0LDEzLjM3'@;
put 'QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEu'@;
put 'NzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyMi4yM0EzLjYyLDMuNjIsMCwwLDEsMjEsMTUuMTZW'@;
put 'MThhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43OSwyMS40OSwzMy4yOCwyMC4wNywzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsNCwzLjk1YTEsMSwwLDAsMCwuNzEuMjlsLjExLDBhNy40Niw3LjQ2LDAsMCwxLTEuMjUtMy41MkwxOCwyLjE2LDExLjYxLDguNUExLDEs'@;
put 'MCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2NmEzLDMs'@;
put 'MCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc3LDIxLjQzLDMzLjE1LDE5LjcsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy'@;
put 'NFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45'@;
put 'LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTQsMTkuNjksMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSww'@;
put 'LDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLEYuQ2xyU2hhcGVCYWNrdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOCwxOS44NGw0LjQ3LTQuNDRoLS4yM2EzLjY3LDMuNjcsMCwwLDEtMi0uNjFMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIy'@;
put 'LjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1'@;
put 'LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9'@;
put 'IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uMjQsMS4zaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBI'@;
put 'NFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3'@;
put 'LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIlxu'@;
put 'ICAgICAgICAgICAgICAgIGQ9Ik0zMC44NCwxMy4zN0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS4xNCwyaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAs'@;
put 'MS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw0SDI2VjI2aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNS0uNTEtLjY1LTEuOTMtMi4zNS02LjZIMjUuM2wtNS44OSw1Ljg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'NC0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjQsMy42NCwwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEu'@;
put 'NDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42'@;
put 'OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNy0uNTctLjc5LTIuMy0zLjA2LTguNTVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNSw3LjQ2LDcuNDYsMCwwLDEtMy4z'@;
put 'NS0uOCwzLDMsMCwwLDEtLjg2LDIuMjFsLTYuMzgsNi4zNVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTkuNDEsMjEuMjZsLS43NC43NEgzMy45M2MtLjE3LS41Ny0uNzktMi4zMS0zLjA5LTguNjNBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDI2LjU1YTMsMywwLDAsMS0uNzYsMi45MloiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbicpLEYuQ2xyU2hhcGVEZXZpY2VzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAs'@;
put 'MCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCww'@;
put 'LDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxGLkNsclNoYXBlS2V5Ym9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMThINFYxMEgzMloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI3IiB5'@;
put 'PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjExIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE1IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjE5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjI3IiB5'@;
put 'PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxOSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjMi'@;
put 'IHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI3IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiB4PSIyNyIgeT0iMjIiIHdpZHRoPSIxLjk0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgeD0iNyIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi'@;
put 'Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTEuMTMiIHk9IjIyIiB3aWR0aD0iMTMuNzUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNMTksMTNoMnYySDE5Wm0wLDRoMnYySDE5Wm0tNC00aDJ2MkgxNVptMCw0aDJ2MkgxNVptLTQtNGgydjJIMTFaTTksMjRIN1YyMkg5Wm0wLTVIN1Yx'@;
put 'N0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksRi5DbHJTaGFwZU1vdXNlPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEwLDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4'@;
put 'LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMsMTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksRi5D'@;
put 'bHJTaGFwZURhc2hib2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01LjkxLDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTExLjM0LDI1LjVINi42NmExNC40MywxNC40MywwLDAsMS0z'@;
put 'LjExLTcuODRIN3YtMkgzLjU1QTE0LjQxLDE0LjQxLDAsMCwxLDcsMTEuMjlsMi40NSwyLjQ1LDEuNDEtMS40MUw4LjQzLDkuODdBMTQuNDEsMTQuNDEsMCwwLDEsMTcsNi4yOXYzLjVoMlY2LjNhMTQuNDcsMTQuNDcsMCwwLDEsMTMuNCwxMy42MUgyOC45MnYyaDMuNTNBMTQuNDMsMTQuNDMs'@;
put 'MCwwLDEsMjkuMzQsMjkuNzVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTUuODUsMTguNjlhMywzLDAsMSwwLDQuODMuODVsNS45Mi01LjgxLTEuNDEtMS40MS01LjkxLDUu'@;
put 'ODFBMywzLDAsMCwwLDE1Ljg1LDE4LjY5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjU4LDEzYTcuNDUsNy40NSwwLDAsMS0yLjA2LjQ0LDE0LjQsMTQuNCwwLDAsMSwx'@;
put 'LjkzLDYuNDNIMjguOTJ2MmgzLjUzYTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEsNy44NEg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAs'@;
put 'MSwxNyw2LjI5djMuNWgyVjYuM0ExNC40MSwxNC40MSwwLDAsMSwyMi41OCw3YTcuNTIsNy41MiwwLDAsMS0uMDgtMSw3LjUyLDcuNTIsMCwwLDEsLjA5LTEuMDlBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNloi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTguNiw5LjQ4LTUuOTIsNS44MWEzLDMsMCwxLDEtMS40MS0xLjQybDUuOTEtNS44MVptLTIzLDYuMTdIN3Yy'@;
put 'SDMuNTZjMC0uMzktLjA1LS43Ny0uMDUtMS4xN1MzLjUzLDIwLjE4LDMuNTUsMTkuOVptNC44OC0xMCwyLjQ2LDIuNDZMOS40NywxMy43NCw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N1pNMTksOS43OUgxN1Y2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1Wk0zMi40'@;
put 'OSwyMC43NGMwLC4zOSwwLC43OS0uMDUsMS4xN0gyOC45MnYtMmgzLjUzQzMyLjQ3LDIwLjE4LDMyLjQ5LDIwLjQ2LDMyLjQ5LDIwLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJN'@;
put 'MzIuNTgsMTNhNy40Niw3LjQ2LDAsMCwxLTEwLTguMTJBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNlpNMTcsNi4yOWMuMzIsMCwuNjMsMCwxLDBzLjcsMCwxLC4wNXYzLjVIMTdaTTcsMjEuOTFIMy41NmMwLS4z'@;
put 'OS0uMDUtLjc3LS4wNS0xLjE3czAtLjU2LDAtLjgzSDdabTIuNTEtOC4xNkw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N2wyLjQ2LDIuNDZabTEwLjYyLDkuMTlhMywzLDAsMSwxLS44Mi00LjgxbDUuOTEtNS44MSwxLjQxLDEuNDEtNS45Miw1LjgxQTMsMywwLDAsMSwyMC4w'@;
put 'OSwyMi45M1ptMTIuMzUtMUgyOC45MnYtMmgzLjUzYzAsLjI4LDAsLjU1LDAsLjgzUzMyLjQ3LDIxLjUyLDMyLjQ0LDIxLjkxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVIb3N0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAs'@;
put 'MCwxOCwyNC4zWm0wLDMuNmExLjEzLDEuMTMsMCwxLDEsMS4xMy0xLjEyQTEuMTMsMS4xMywwLDAsMSwxOCwyNy45WiIvPjxyZWN0IHg9IjEzLjUiIHk9IjIwLjciIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjY1LDMuNkgxMC4zNUExLjM1LDEuMzUsMCwwLDAsOSw0Ljk1VjMyLjRIMjdWNC45NUExLjM1LDEuMzUsMCwwLDAsMjUuNjUsMy42Wm0tLjQ1LDI3SDEwLjhWNS40SDI1LjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjEyLjYiIHk9IjcuMiIgd2lkdGg9IjEwLjgiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi42IiB5PSIxMC44IiB3aWR0'@;
put 'aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41'@;
put 'LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk'@;
put 'IiBwb2ludHM9IjIxLjMsNiAxMiw2IDEyLDcuNiAyMC40LDcuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTIsMTEuNmg2LjZjMC0wLjYsMC4yLTEuMSwwLjQtMS42aC03'@;
put 'VjExLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yNiwxNS40VjMySDEwVjRoMTIuNWwxLjEtMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTUuNEgyNnoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4y'@;
put 'aDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJz'@;
put 'MC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIxMyIgeT0iMjEiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yNCwxMC41Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNUgxMnYxLjZoMTJWMTAuNXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xMiw2djEuNmgxMC43Yy0wLjEtMC41LTAuMi0xLjEtMC4yLTEuNkgxMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC01LS1iYWRnZWQiIGQ9Ik0yNiwxMi4zVjMySDEwVjRoMTIuOGMwLjItMC43LDAuNS0xLjQsMC45LTJIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjJDMjcuMywxMywyNi42LDEyLjcsMjYsMTIuM3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi41LDJoLTE3QzguNywy'@;
put 'LDgsMi43LDgsMy41VjM0aDIwVjMuNUMyOCwyLjcsMjcuMywyLDI2LjUsMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnogTTI0LDExLjZIMTJWMTBo'@;
put 'MTJWMTEuNnogTTI0LDcuNkgxMlY2aDEyVjcuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjNjLTIsMC0zLjctMS42LTMuNy0zLjdIMTJWMTBoNi45YzAtMC4xLDAuMS0wLjIsMC4xLTAuMmwxLjItMi4ySDEyVjZoOS4ybDIuMy00aC0xNEM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS4zSDIy'@;
put 'LjJ6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6IE0yMywyMi42SDEzVjIxaDEwVjIyLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxbC01Ljcs'@;
put 'OS45Yy0wLjMsMC42LTAuMSwxLjQsMC41LDEuN2MwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmgxMS40YzAuNywwLDEuMy0wLjYsMS4zLTEuM2MwLTAuMi0wLjEtMC40LTAuMi0wLjZMMjkuMSwxYy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuNywyNywwLjgsMjYuOSwxeiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjQsMTAuM3YxLjJIMTJWMTBoMTEuOGMtMC41LTAuNy0wLjgtMS41LTEtMi40SDEyVjZoMTAuNWMwLDAsMC0wLjEsMC0wLjFjMC0xLjQsMC40LTIuNywx'@;
put 'LjEtMy45SDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxMy4xQzI2LjQsMTIuNiwyNSwxMS43LDI0LDEwLjN6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6TTIzLDIyLjZIMTNWMjFoMTBW'@;
put 'MjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVTdG9yYWdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMs'@;
put 'Ni42OWgwYy0uMTgtMy40MS05LjQ3LTQuMzMtMTUtNC4zM1MzLDMuMjksMyw2Ljc4VjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1Y2Ljc4czAsMCwwLDBTMzMsNi43LDMzLDYuNjlabS0yLDcuNTZjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwz'@;
put 'Ny40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzIsNDMuMzIsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMiw0My4zMiwwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40'@;
put 'OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjNy43NywwLDEyLjQ2LDEuNTMsMTMsMi4zNy0uNTIuODctNS4yMSwyLjM5LTEzLDIuMzlBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUz'@;
put 'LDQzLjUzLDAsMCwwLDExLDEuMjdjNCwwLDkuOTMtLjQ4LDEzLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOS41MSw5LjA5LDE4LDkuMTFBMzcuNiwzNy42LDAsMCwx'@;
put 'LDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdoLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjguODMs'@;
put 'MTUuNEEzOC4zNywzOC4zNywwLDAsMSwxOCwxNi43LDM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMyw0My4zMywwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1'@;
put 'YTQzLjMzLDQzLjMzLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmMxLjUsMCwyLjg5LjA2LDQuMTUuMTZsMS4xLTEuOWMtMS44Ni0uMTgtMy43LS4y'@;
put 'Ni01LjI1LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzdi0xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl'@;
put 'cnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjcsNTQuODIsNTQuODIsMCwwLDAsNi4yLS4zNiw3LjUsNy41LDAsMCwxLTEuMTMtMS44OGMtMS41LjE1LTMuMi4yNC01'@;
put 'LjA3LjI0QTM3LjYsMzcuNiwwLDAsMSw3LDcuNzZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDN2LjgyYy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUs'@;
put 'MzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0u'@;
put 'NDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNywwLDMuMjUuMDgsNC42NC4yYTcuNDQsNy40NCwwLDAsMSwuNjctMS45NGMtMS44OC0uMTgtMy43NS0uMjYtNS4zMS0uMjYtNS41NywwLTE1'@;
put 'LC45My0xNSw0LjQzVjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NFY4LjU5Yy0uNDMs'@;
put 'Mi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFDMjYsMTAuNTMsMzIuNTIsOC43OSwzMyw2LjYxaDBDMzIuOCwzLjIsMjMuNTIsMi4yOCwxOCwyLjI4UzMsMy4yMSwzLDYuNzFWMjkuMjljMCwzLjQ5LDkuNDMs'@;
put 'NC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQt'@;
put 'MTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE3LjkxLDIw'@;
put 'LjI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yYTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxYzYuOSwwLDEyLjctMS4yNywxNC41MS0zSDIyLjIzYTMuNjcsMy42NywwLDAsMS0zLjU1LTIuNzVoLS43N0EzOS40LDM5LjQsMCwwLDEsNi4yNSwxMVY5YTM5LjQsMzkuNCwwLDAsMCwx'@;
put 'MS42NiwxLjUxaC44MkEzLjY0LDMuNjQsMCwwLDEsMTksOS43NWw0LjE3LTcuMjJjLTEuODUtLjE4LTMuNjgtLjI1LTUuMjEtLjI1LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYs'@;
put 'MjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0QzMyLjU3LDE4LjUzLDI2LDIwLjI4LDE3LjkxLDIwLjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NHYtMS42YTcuNDcsNy40NywwLDAsMS03LjM4LS44'@;
put 'LDQ4LjMsNDguMywwLDAsMS03LjcxLjU5QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTEsNTEsNTEsMCwwLDAsNi0uMzQsNy40Niw3LjQ2LDAsMCwxLS41OS03LjY1Yy0xLjg3LS4xOC0zLjczLS4yNi01LjI4LS4yNi01LjU3LDAtMTUsLjkzLTE1'@;
put 'LDQuNDNWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4w'@;
put 'OVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksRi5DbHJTaGFwZUNsdXN0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+PGVs'@;
put 'bGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEEx'@;
put 'LjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMjQsMzBIMTJWNkgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxMEg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdWMzJIOC41VjMwSDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPjxl'@;
put 'bGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5bC4zOS0uNjhIMTMuNXYxLjZoNS4xN0Ez'@;
put 'LjY1LDMuNjUsMCwwLDEsMTksOS44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMzBIMTJWNmg5LjI5bDEuMTUtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYz'@;
put 'MkgyNlYxNS40SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAzMCAyNy41IDMwIDI3LjUgMzIgMzMgMzIgMzMgMTUuNCAzMSAxNS40IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMs'@;
put 'OS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI0LDEwLjQ5VjMwSDEyVjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzBIMjcuNXYySDMzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zNiw4SDI3LjVWMzJIMzNWOS42N0ExLjY1LDEuNjUsMCwwLDAs'@;
put 'MzEuMzYsOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgy'@;
put 'M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuNSIgeT0iMTUuNCIgd2lkdGg9IjUuNSIgaGVpZ2h0PSIxNi42IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZhMy42'@;
put 'OCwzLjY4LDAsMCwxLS4zMS0zSDEzVjloNi41NmwyLjg5LTVIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaTTE4LDI3Ljc5QTEuNzksMS43OSwwLDEsMSwxOS44MSwyNiwxLjgsMS44LDAsMCwxLDE4LDI3Ljc5'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAs'@;
put 'MCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy40'@;
put 'OSw3LjQ5LDAsMCwxLDIyLjUsNlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi41LS40NFYzMkgzM1YxMi44N0E3LjQ3LDcuNDcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQg'@;
put 'MTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDQgMzAgOCAyNiA4IDI2IDEwIDMyIDEwIDMyIDQgMzAgNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0'@;
put 'IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUgMzAgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cG9s'@;
put 'eWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkg'@;
put 'MzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIv'@;
put 'PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgOCAxNSA4'@;
put 'IDE1IDEwIDIxIDEwIDIxIDQgMTkgNCAxOSA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMTkgMTUgMTkgMTUgMjEgMjEgMjEgMjEgMTUgMTkgMTUgMTkgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDMwIDE1IDMwIDE1'@;
put 'IDMyIDIxIDMyIDIxIDI2IDE5IDI2IDE5IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCA4IDQgOCA0IDEwIDEwIDEwIDEwIDQgOCA0IDggOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i'@;
put 'OCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAx'@;
put 'NSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTUgMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFs'@;
put 'ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv'@;
put 'biBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDhIMTV2Mmg0TDE5LDkuODksMjEsNi41'@;
put 'VjRIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43'@;
put 'OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWln'@;
put 'aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0'@;
put 'IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9'@;
put 'IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMTBoNEwxOSw5Ljg5LDIxLDYuNVY0SDE1WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iNCIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUJ1aWxkaW5nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44'@;
put 'OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0gyMlY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxOS44OCwzWk0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVj'@;
put 'dCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i'@;
put 'YWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2'@;
put 'IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4'@;
put 'LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzVjMxSDIz'@;
put 'djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9'@;
put 'IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCww'@;
put 'LDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJWOC4yNGwyLTMuNDFBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjE1LjM4YTMuNjgsMy42OCwwLDAsMS0yLS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMxIDIzIDMxIDIzIDMzIDMzIDMzIDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4'@;
put 'LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw4SDIyVjMzSDMzVjEwQTIsMiwwLDAsMCwzMSw4Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBI'@;
put 'MjhWMjNoMlptMC01SDI4VjE4aDJabTAtNUgyOFYxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWNS4xMkEyLjEyLDIuMTIs'@;
put 'MCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgy'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWMTQuNjRhMy42NywzLjY3LDAsMCwxLTEtNC43NmwxLTEuNjVWNS4xMkEyLjEyLDIu'@;
put 'MTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVW'@;
put 'OGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRsLS4yMywwVjMzSDMzVjE1LjRaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm00LDVIMjhWMjNoMlptMC01SDI4'@;
put 'VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx'@;
put 'TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0'@;
put 'LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0w'@;
put 'LTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTVIMjhWMTMuMjJBNy41LDcuNSwwLDAsMSwyMi43OCw4SDIyVjMz'@;
put 'SDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjN2Mmg4VjMxSDIzdjJIMzNWMTBBMiwyLDAsMCww'@;
put 'LDMxLDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2'@;
put 'VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIvPlxuICAg'@;
put 'ICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIy'@;
put 'MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIwIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDUFU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43'@;
put 'NS0uNzVWMTEuMzNoLTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwxOC4xNWEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWOC4xQTIuMSwyLjEsMCwwLDAs'@;
put 'MjcuOSw2SDI2LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAs'@;
put 'MS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMw'@;
put 'LDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNFpNMjgsMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjcuOWEuMS4xLDAsMCwxLC4xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjA2LDI0LjU3SDIzLjgzYS43NS43NSwwLDAsMCwuNzUtLjc1VjExLjMzaC0xLjVWMjMuMDdoLTExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI4VjI3LjlhLjEuMSwwLDAsMS0uMS4xSDguMWEuMS4xLDAsMCwxLS4xLS4xVjguMUEuMS4xLDAsMCwxLDguMSw4SDIyLjc4YTcuNDksNy40OSww'@;
put 'LDAsMS0uMjgtMkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSww'@;
put 'LDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwx'@;
put 'LDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhoMTJsMS4x'@;
put 'NS0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZI'@;
put 'NlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEu'@;
put 'NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTUuNGgtMS41djcuNjdoLTExWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYx'@;
put 'NS40SDI1djguNDFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjE1LjRoLS43N0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4x'@;
put 'VjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMw'@;
put 'aDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ2LDcuNDYsMCwwLDEtNS0xLjkyVjIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgxLjQyQTcu'@;
put 'NDYsNy40NiwwLDAsMSwyMi41LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhh'@;
put 'LjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIu'@;
put 'MmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40'@;
put 'VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIu'@;
put 'MSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40'@;
put 'Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZU1lbW9yeT0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjI0IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw3SDRBMiwyLDAsMCwwLDIsOXY0SDRWOUgzMnY0aDJWOUEyLDIsMCwwLDAsMzIsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTksMTMuNTZBMy42NiwzLjY2LDAsMCwxLDE4LjU3LDEySDE2djhoNFYxNC42NEEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMjQiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjQuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMTkuNTZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOXY0'@;
put 'SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0'@;
put 'PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyQTcuNDYsNy40NiwwLDAsMSwyNS41MSwx'@;
put 'MkgyNHY4aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMjMuMTNhNy40NSw3LjQ1LDAsMCwxLS41NS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzQsMTNWOWEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN0gzMlYxM1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFptOCwwSDI0VjEyaDRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTUuMDdIMjhWMjBIMjRWMTUuMDdIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjMxVjIwSDE2VjEyaDIuNjFBMy42OCwzLjY4LDAsMCwxLDE5LDkuNTVMMjAu'@;
put 'NTIsN0g0QTIsMiwwLDAsMCwyLDl2NEg0djRIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1SDE5VjI5SDMyYTIsMiwwLDAsMCwyLTJWMTdaTTEyLDIwSDhWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNi44NS44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNi44QTEuMjgsMS4yOCwwLDAsMCwyNi44NS44WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjEzLjIyYTcuMzMsNy4zMywwLDAsMS00LDBWMjBIMjRWMTJoMS41MWE3LjQ4LDcuNDgsMCwwLDEtMi45NC01SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJI'@;
put 'MTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcu'@;
put 'OTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMzIsNy4yNywzMiw3LjkxVjE4LjI0YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQu'@;
put 'MDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUy'@;
put 'LTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'OCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDks'@;
put 'MTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2'@;
put 'LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDE4LjI0VjcuOTFjMC0uNjUsMi4wOS0xLjg0LDUuNS0xLjg0UzE1LDcuMjcsMTUsNy45MVY5LjdhMTguNzUsMTguNzUsMCwwLDEsMi0uMlY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0'@;
put 'Ljc3LDIxLjY3LDcuOSwyMlYyMEM1LjQ2LDE5LjY4LDQsMTguNzgsNCwxOC4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuNjUsMTguNTJjLS44NSwxLTMuNDIsMi02LjY1'@;
put 'LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEy'@;
put 'Ljc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOGwuNzUsMGEzLjY5LDMuNjksMCwwLDEtLjA4LTJsLS42NiwwYy00LjkzLDAtOC42NSwxLjg4LTgu'@;
put 'NjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuNGgtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0x'@;
put 'Ljc1LjYzLTMsMS42OC0zLDMuMTJWOS41bC4yNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjIuODRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJj'@;
put 'My4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI'@;
put 'MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUu'@;
put 'NDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIs'@;
put 'NC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVptNi42NSw3LjY3Yy0uODUsMS0zLjQyLDItNi42NSwyQTE0LjQ5LDE0LjQ5LDAsMCwxLDE0LDIwdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYs'@;
put 'MTIuNzYsMCwwLDAsNi42NS0xLjU2djMuMTJjLS44NSwxLTMuNDIsMi02LjY1LDJhMTQuNDksMTQuNDksMCwwLDEtNC0uNTN2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2Mi4yOWMwLC45NS0yLjY1LDIuMzgtNi42NSwyLjM4cy02LjY1'@;
put 'LTEuNDMtNi42NS0yLjM4VjE1LjIzYzAtLjk1LDIuNjUtMi4zOCw2LjY1LTIuMzhzNi42NSwxLjQzLDYuNjUsMi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDcuOTFjMC0u'@;
put 'MzMuNTUtLjgsMS41NC0xLjE4LDAtLjI0LDAtLjQ4LDAtLjczYTcuNTIsNy41MiwwLDAsMSwuMTQtMS40MUMyMC41NSw1LjE5LDE5LDYuMywxOSw3LjkxVjkuNWExOC43NSwxOC43NSwwLDAsMSwyLC4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2NWMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1di01LjlBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTI2LjUsNC4wOEMyMi43Nyw0LjA4LDE5LDUuNCwxOSw3LjkxVjkuNDhjNS4zLjI2LDksMi42LDksNS43NnY2LjdsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAs'@;
put 'MCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEu'@;
put 'MTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQt'@;
put 'Ny41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjM5LTIuN2wtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43'@;
put 'NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1'@;
put 'LTEuMTEsOC42My0zLjExVjE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDQuOGMtMS43NS42My0zLDEuNjgtMywzLjEy'@;
put 'VjkuNDhsLjI3LDBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOHY2LjUzbC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDkuNDhWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIs'@;
put 'Ny45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJMOCwyMS45M3YtNi43QzgsMTIuMDgsMTEuNyw5Ljc0LDE3LDkuNDhaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1'@;
put 'Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4y'@;
put 'MSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwx'@;
put 'MC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTQtMS40QzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS40OGExNS4zMywxNS4zMywwLDAs'@;
put 'MSw1LDFBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI3LjM1LDEzYTQsNCwwLDAsMSwuNywyLjIzdjYu'@;
put 'N2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxMi4zM0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNDlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljk5IiBy'@;
put 'PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUmVzb3VyY2VQb29sPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwx'@;
put 'LC4yMiwxLjZIMTcuNDlMOC4zLDI4LjA3QTE0LDE0LDAsMCwxLDIyLjA5LDQuNjJsMS0xLjc2QTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAs'@;
put 'MCwwLDE4LDJaTTQsMThhMTQsMTQsMCwwLDEsMjcuOTUtMUgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsNCwxOFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yLDEzLjRhMTMuOTEsMTMuOTEsMCwwLDEsLjc1LDMuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuNjEsNC44YTcuNDMsNy40MywwLDAsMSwuNTgtMS45MiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDku'@;
put 'OTNBNy40Myw3LjQzLDAsMCwxLDMxLjIsMTMuNFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguNTcsMzAuOUExNiwxNiwwLDAsMCwzMy45NSwxOUgx'@;
put 'OC40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN0ExNiwxNiwwLDEsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN2ExNS45MSwxNS45MSwwLDAsMC0uODQtNC4xOCw3'@;
put 'LjQ5LDcuNDksMCwwLDEtOS45Mi05Ljk0QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE2LDE2LDAsMCwwLS4xOC0xLjYxSDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDQuMDYtN0ExNiwxNiwwLDAsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGRDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYu'@;
put 'NjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUu'@;
put 'MDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQs'@;
put 'NDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwxLDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4x'@;
put 'OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz'@;
put 'LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCww'@;
put 'LDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43'@;
put 'OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQs'@;
put 'MCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44'@;
put 'MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjR2LjUzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3'@;
put 'LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTNjMSwuNjQsMi4yLDEuMjcsMy40MywxLjg5bDEtMS43NGE0MS4xLDQxLjEsMCwwLDEtMy44OS0yLjE4TDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0'@;
put 'Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41djIuNDNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4'@;
put 'LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0Ni4xOSw0Ni4xOSwwLDAsMCw0LjUxLDIuNDJjMC0uMSwwLS4xOSwwLS4yOWE3LjQ5LDcuNDksMCwwLDEsLjIzLTEuODMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0'@;
put 'My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMu'@;
put 'NjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40Myw0'@;
put 'YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs'@;
put 'MTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww'@;
put 'LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40Nyww'@;
put 'LDAsMS03LjI3LTkuMzMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMu'@;
put 'MTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZVNoaWVsZFg9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUs'@;
put 'MCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1'@;
put 'VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMw'@;
put 'LDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEu'@;
put 'NDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43'@;
put 'OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4x'@;
put 'MmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwxLjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQu'@;
put 'NTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUltcG9ydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42'@;
put 'MVY2SDI4VjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaTTE2LDEySDEwdi0uMzJMMTUuNyw2SDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4y'@;
put 'OGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQs'@;
put 'MjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI4LDE1LjRWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42'@;
put 'MVY2aDMuNjhsMS4xNS0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFs'@;
put 'ZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjE1aDJabTAtMS45MkwxNS43LDZIMTZ2NkgxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42'@;
put 'OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxNC44'@;
put 'N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhh'@;
put 'MSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVFeHBvcnQ9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDI0djguMzhoMlY2YTIsMiwwLDAsMC0yLTJIMTAuODdMNCwxMC44N1YzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJINlptMC0xLjkyTDExLjY5LDZIMTJ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNmg3LjY4bDEuMTUtMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQx'@;
put 'TDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMTIuMzRh'@;
put 'Ny41Myw3LjUzLDAsMCwxLTItMS44NXYzLjg5aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMC44N0w0'@;
put 'LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAs'@;
put 'MCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEu'@;
put 'NDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMxLjE2LDIx'@;
put 'SDI2djJoNS4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzUsMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjE1LjRIMjIuMjNB'@;
put 'My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjEyLjM0QTcuNDYsNy40NiwwLDAsMSwyMi43OCw0SDEwLjg3TDQsMTAuODZWMzBh'@;
put 'MiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVXBsb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEs'@;
put 'MC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMs'@;
put 'OC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4y'@;
put 'OCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUu'@;
put 'NCw4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4'@;
put 'LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDIxdjJoNS4zOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUt'@;
put 'NSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCw0LjU0LTE0LjU2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwx'@;
put 'MC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42Niw3LjY2LDAsMCwxLDMuNiwxOC4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyks'@;
put 'Ri5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwx'@;
put 'LDAtMkE3LjY1LDcuNjUsMCwwLDEsMTEsMTAuNzRsLjY3LDAsLjIzLS42M2E4LjQzLDguNDMsMCwwLDEsOC01LjQsOC4yNiw4LjI2LDAsMCwxLDguNDUsOCw3Ljc1LDcuNzUsMCwwLDEsMCwuOGwtLjA4LjcyLjY1LjNBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4y'@;
put 'OGE4LDgsMCwwLDAsMy45My0xNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdB'@;
put 'MSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSww'@;
put 'LDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg3'@;
put 'LDQuNjlhOC44MSw4LjgxLDAsMCwxLDIsLjI1bDEtMS44YTEwLjgsMTAuOCwwLDAsMC0zLjA3LS40NSwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTgu'@;
put 'NDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSww'@;
put 'LDJoMS4yOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42'@;
put 'OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww'@;
put 'LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCw0LjU0LTE0LjYxWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg'@;
put 'ICAgICAnKSxGLkNsclNoYXBlUGx1Z2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAs'@;
put 'MCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2Wm0yLjQxLDdBMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYy'@;
put 'NUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoOFYxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEs'@;
put 'MzIuMjIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyN1YxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjMsMywzLDAsMCwxLDMwLDI0'@;
put 'SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoLjY2TDIxLDYuNTlBNS4xMiw1LjEyLDAsMCwwLDE2LjUx'@;
put 'LDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4x'@;
put 'NSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEs'@;
put 'MTZIMjlWMTMuNDNhNy40NSw3LjQ1LDAsMCwxLTItLjU1VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNo'@;
put 'OVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g0LjA2YTcuNDQsNy40NCwwLDAsMS0uNTEtMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEz'@;
put 'LjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWOC44M2EyLDIsMCwwLDAtMi0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1'@;
put 'LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgy'@;
put 'OXYtLjZIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwy'@;
put 'M0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy41LDcuNSwwLDAsMS02LjQ1LTYuNTlIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4x'@;
put 'MywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFw'@;
put 'ZUZsb3BweT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMwSDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2'@;
put 'NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJIMTJWNkgyNi41MUwzMCw5LjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAs'@;
put 'MCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0xLjY4bC0uNDMtLjNIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwz'@;
put 'MCwxMy41Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMmg3LjM1YTMuNTQsMy41NCwwLDAsMS0uNzctMkgxMlY2aDku'@;
put 'MjlsMS4xNS0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjUsMzBIMTFWMjJIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSww'@;
put 'LDAsMSwyNiwyMS41Wk0yNCwxNEgxMmEyLDIsMCwwLDEtMi0yVjZoMnY2SDI2QTIsMiwwLDAsMSwyNCwxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDYsNy40NiwwLDAsMS00LTEuMThBMiwyLDAs'@;
put 'MCwxLDI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjUuNTRhNy40NSw3LjQ1LDAsMCwxLTIuNzYtOEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUs'@;
put 'MCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZoNi41OEEzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMi40NSw0SDZB'@;
put 'MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAsMSwyNiwyMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ29tcHV0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDgg'@;
put 'MjIuODggOS42IDIyLjg4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsN0gzMFYyM2gyVjYuNUExLjUsMS41LDAsMCwwLDMwLjUsNUg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2'@;
put 'LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4z'@;
put 'NGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjYsMjIuODhWMTAuNmg5LjE0QTMuNjQsMy42NCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIOFYyMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDIwLjcxbDEuMTUtMkg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjMwIiB5PSIxNS40IiB3aWR0aD0iMiIgaGVpZ2h0PSI3LjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww'@;
put 'LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0'@;
put 'LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4wNy0xSDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZW'@;
put 'N0gyMi41N0E3LjUyLDcuNTIsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYyM2gyVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUg4VjIyLjg4SDkuNlYxMC42SDI0LjA4QTcuNDksNy40OSwwLDAsMSwyMy4xMyw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjlWMjRoM1Y3LjU3QTEuNTQsMS41NCwwLDAsMCwzMC41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMy44MSwyNmMtLjM1LjktLjk0LDEuNS0xLjYxLDEuNUgxMy43NGMtLjY4LDAtMS4yNi0uNi0xLjYxLTEuNUgxdjEuNzVBMi40NSwyLjQ1LDAsMCwwLDMuNiwzMEgzMi40QTIuNDUsMi40NSwwLDAsMCwzNSwyNy43NVYyNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI5IiB5PSIxNS40IiB3aWR0aD0iMyIgaGVpZ2h0PSI4LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik03LDEwSDE5TDE5LDkuODksMjEuMjksNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDIzLjY2QTcuNDYsNy40NiwwLDAsMSwyMi41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJhNy4xNCw3LjE0LDAsMCwxLTMsLjJWMjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEaXNwbGF5PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwx'@;
put 'LjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzIsMjVINFY1SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw'@;
put 'b2x5Z29uIHBvaW50cz0iNy43IDguNzYgMjguMTMgOC43NiAyOS45NCA3LjE2IDYuMSA3LjE2IDYuMSAyMyA3LjcgMjMgNy43IDguNzYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwz'@;
put 'LjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCww'@;
put 'LDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4x'@;
put 'NywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyNUg0VjVIMjEuODdMMjMsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTUu'@;
put 'MzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgMjMgNy43IDguNzYgMTkuNyA4Ljc2IDIwLjYyIDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUy'@;
put 'VjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwy'@;
put 'NiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuMSwyM0g3LjdWOC43NkgyM2E3LjQ0LDcuNDQsMCwwLDEtLjQzLTEuNkg2LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyNUg0VjVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCww'@;
put 'LDAsMzQsMjUuNVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwx'@;
put 'LDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwz'@;
put 'LjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzEsMjEuODNINVY3SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAs'@;
put 'MS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy'@;
put 'dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMXY2LjQzSDVWN0gyMC43MUwyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx'@;
put 'LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwx'@;
put 'My40M3Y4LjQxSDVWN0gyMi41N2E3LjI5LDcuMjksMCwwLDEsLjU1LTRIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDQsNy40NCwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYu'@;
put 'Q2xyU2hhcGVUZXJtaW5hbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDE1'@;
put 'LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCAxMy43OSAxOC44IDcgMjEuOTEgNyAy'@;
put 'NC4xMSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOUg0VjEwLjhIMTguNjhBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwx'@;
put 'LjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNs'@;
put 'ci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjIzIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQu'@;
put 'MTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMjlI'@;
put 'NFYxMC44SDI0LjI0YTcuNTEsNy41MSwwLDAsMS0xLTEuNkg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwx'@;
put 'My4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNi44LDE1LjgxVjEzLjE3bDEwLDQuNTl2Mi4wOGwtMTAsNC41OVYyMS43OGw2LjUx'@;
put 'LTNaTTIzLjQsMjUuNEgxN1YyM2g2LjRaTTQsOS4yVjdIMzJWOS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bC40LS42OUg0VjdIMjAuNzFs'@;
put 'MS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE2LjgsMTkuODNsLTEwLDQuNTlWMjEuNzhsNi41MS0zLTYuNTEtM1YxMy4xN2wxMCw0LjU5Wm02LjYsNS41N0gxN1YyM2g2LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi43OC00LjNINFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0u'@;
put 'MDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYu'@;
put 'Niw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0x'@;
put 'LjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwz'@;
put 'LjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsOS44M2EuOS45LDAsMCwwLTEuMDkuNjZMMTUu'@;
put 'NDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhsMy40NC0xMy44MUEuOS45LDAsMCwwLDE5Ljk0LDkuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwx'@;
put 'Mi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTYsMTEuNjIsMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhMMTkuNzMsMTQuNGEzLjU5LDMuNTksMCwwLDEtMS4xNi0yLjc5WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTItMS4zOEgyNC42NGwzLjI0LDIuMjEtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww'@;
put 'LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCww'@;
put 'LDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjIxLDE2Ljc4bC02LjUzLTQuNDVBMSwxLDAsMSwwLDIyLjU1LDE0bDUuMzIsMy42My01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45'@;
put 'LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMw'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAn'@;
put 'KSxGLkNsclNoYXBlQmF0dGVyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4xMiw0SDIzVjMuNThBMS41OCwxLjU4LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44'@;
put 'OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWNS44OEExLjg4LDEuODgsMCwwLDAsMjUuMTIsNFpNMjUsMzJIMTFWNmg0VjRoNlY2aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRWMzJIMTFWNmg0VjRoNlY2aC4yOGwxLjY0LTIuODVBMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMu'@;
put 'NThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0x'@;
put 'LjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDEx'@;
put 'LjU4VjMySDExVjZoNFY0aDZWNkgyMi41QTcuNDcsNy40NywwLDAsMSwyMywzLjM4LDEuNTcsMS41NywwLDAsMCwyMS40MiwySDE0LjU4QTEuNTgsMS41OCwwLDAsMCwxMywzLjU4VjRIMTAuODhBMS44OCwxLjg4LDAsMCwwLDksNS44OFYzMi4xMkExLjg4LDEuODgsMCwwLDAsMTAuODgsMzRI'@;
put 'MjUuMTJBMS44OCwxLjg4LDAsMCwwLDI3LDMyLjEyVjEyLjg3QTcuNSw3LjUsMCwwLDEsMjUsMTEuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNFYyLjYyQS42LjYsMCww'@;
put 'LDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NHYtMjhBMS4wOSwxLjA5LDAsMCwwLDI2LDRaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEy'@;
put 'LjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42NiwzLjY2LDAsMCwxLDIwLjU1LDE1bDIuNzYsNC43OUwxNi45LDE4LjdsMy4zNiw2LjczYTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmwuMDkuMTVBMy42NiwzLjY2'@;
put 'LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjJWMi42MkEuNi42LDAsMCwwLDIxLjQyLDJIMTQuNThhLjYuNiwwLDAsMC0uNTguNjJWNEgxMEExLjA5LDEuMDksMCwwLDAsOSw1LjA3djI4QTEsMSwwLDAsMCwxMCwzNEgyNmExLDEsMCwwLDAsMS0uOTRWMTIuODdB'@;
put 'Ny41LDcuNSwwLDAsMSwyMi41LDZaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVNb2JpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVpt'@;
put 'MCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjhoMlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgJyksRi5DbHJTaGFwZVRhYmxldD0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEy'@;
put 'LDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'MCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFw'@;
put 'ZU5ldHdvcmtHbG9iZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJh'@;
put 'MTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWm0wLDJhMTIsMTIsMCwwLDEsOC40NCwzLjQ4YzAsLjMzLDAsLjY2LDAsMUExOC41MSwxOC41MSwwLDAsMCwxNCw4LjUzYTIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBj'@;
put 'LS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS45MiwxMS45MiwwLDAsMSwxNy43NSw0Wm0tMyw1Ljg3QTE3LDE3LDAsMCwxLDI1LjkyLDEwYTE2LjksMTYuOSwwLDAsMS0zLjExLDcsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42'@;
put 'M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3Wm0tNC0zLjZjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2'@;
put 'LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4y'@;
put 'Ny44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQz'@;
put 'LDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4Wm02LjUxLTguOWEyLjMzLDIuMzMsMCwwLDAtLjMzLTEuMTksMTguNCwxOC40LDAsMCwwLDMuMzktNy4zN3EuNzUuMzUsMS40'@;
put 'OC43OGExMiwxMiwwLDAsMSwuNDIsOC4yQTE2LDE2LDAsMCwxLDI0LjI3LDE5LjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRoLTJjMCwuMiwwLC40LDAsLjYxYTEyLDEyLDAsMCwxLS41MywzLjUyLDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4z'@;
put 'MywwLDAsMC0uMzMtMS4xOSwxOC44NywxOC44NywwLDAsMCwxLjYyLTIuNTJIMjMuODNhMTcuMjksMTcuMjksMCwwLDEtMSwxLjU0LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43'@;
put 'N0ExNy4wOCwxNy4wOCwwLDAsMSwxOS41Niw5bC44Ny0xLjUxYTE4LjU5LDE4LjU5LDAsMCwwLTYuMzksMSwyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuODgsMTEuODgsMCwwLDEsMjIsNC43OUwy'@;
put 'MywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFptLTIxLTkuMTNjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCww'@;
put 'LTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODks'@;
put 'Mi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45'@;
put 'MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCww'@;
put 'LDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTVsLS41MSwwYTExLjkxLDExLjkxLDAsMCwxLS4yNSw2LDE2LDE2LDAs'@;
put 'MCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC41OSwxOC41OSwwLDAsMCwyLjc4LTUuMTgsNy40OSw3LjQ5LDAsMCwxLTEuMzEtLjgyLDE3LDE3LDAsMCwxLTIuNjEsNSwyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQu'@;
put 'OTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzcsMTcsMTcsMCwwLDEsOC41My0uNjIsNy40Myw3LjQzLDAsMCwxLS41Ni0xLjU5QTE4LjU2LDE4LjU2LDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0u'@;
put 'MTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDIyLjU3LDVhNy40NSw3LjQ1LDAsMCwxLC41My0yQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00Wk0xMC43Niw2LjI3YzAsLjIxLjA2LjQzLjEuNjQuMDkuNDQu'@;
put 'MjEuODcuMzMsMS4zYTIuMjgsMi4yOCwwLDAsMC0xLjEsMi4yNUExOC4zMiwxOC4zMiwwLDAsMCw1LjksMTQuMjIsMTIsMTIsMCwwLDEsMTAuNzYsNi4yN1ptMCwxNS43MUEyLjM0LDIuMzQsMCwwLDAsOS4yLDIzLjc0bC0uNjQsMEExMS45NCwxMS45NCwwLDAsMSw1LjgsMTYuOTJsLjExLS4x'@;
put 'OWExNi45LDE2LjksMCwwLDEsNC44MS00Ljg5LDIuMzEsMi4zMSwwLDAsMCwyLjI4LjYzLDE3LjUzLDE3LjUzLDAsMCwwLDUuMzUsNS42NWMuNDEuMjcuODMuNTIsMS4yNS43NkEyLjMyLDIuMzIsMCwwLDAsMTkuNzgsMjBhMTYuOTQsMTYuOTQsMCwwLDEtNi4yLDMuMTFBMi4zNCwyLjM0LDAs'@;
put 'MCwwLDEwLjc2LDIyWm03LDZhMTEuOTIsMTEuOTIsMCwwLDEtNS44MS0xLjUxbC4yOC0uMDZhMi4zNCwyLjM0LDAsMCwwLDEuNTctMS43OSwxOC40MywxOC40MywwLDAsMCw3LTMuNSwyLjI5LDIuMjksMCwwLDAsMy0uNjIsMTcuNDEsMTcuNDEsMCwwLDAsNC4zMi41NmwuNTMsMEExMiwxMiww'@;
put 'LDAsMSwxNy43NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNi45LDE2LjksMCwwLDAsMy4xMS03QTE3LDE3LDAsMCwwLDE0LjcyLDkuODdaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWk0yOC4xLDIxLjA5YTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjks'@;
put 'Mi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIs'@;
put 'Mi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43'@;
put 'NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCww'@;
put 'LDEsMTQsOC41M2ExOC41MSwxOC41MSwwLDAsMSwxMi4xMS0uMDdjMC0uMzIsMC0uNjUsMC0xaDBhMTIsMTIsMCwwLDEsMi42MiwzLjg1aDBxLS43My0uNDMtMS40OC0uNzhhMTguNCwxOC40LDAsMCwxLTMuMzksNy4zNywyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwu'@;
put 'NDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRIMjUuNTZhMTguODcsMTguODcsMCwwLDEtMS42MiwyLjUyLDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAs'@;
put 'MS0uNjEsMS41M0gyOC4xYTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMz'@;
put 'LDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01'@;
put 'LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41'@;
put 'OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41OSwxOC41OSwwLDAsMSw2LjM5LTFMMjMsM0ExNCwxNCwwLDAsMCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBBMTQsMTQsMCwwLDAsMzEuNzYsMTZDMzEuNzYsMTUu'@;
put 'OCwzMS43NCwxNS42LDMxLjczLDE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI2LDExLjY0YTE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4y'@;
put 'OCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE3LjI5LDE3LjI5LDAsMCwwLDEtMS41NGgtMS42QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlhMTcuMDgsMTcuMDgsMCwwLDAtNC44NC44OCwyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx'@;
put 'LjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNSwxMy4zNWE3LjU0LDcuNTQsMCwwLDEtMS41LjE1LDcuNDYsNy40NiwwLDAsMS0zLjI4LS43NiwxOC41OSwxOC41OSwwLDAsMS0yLjc4LDUuMTgsMi4zMywyLjMzLDAsMCwx'@;
put 'LC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4w'@;
put 'NmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdh'@;
put 'Mi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMyww'@;
put 'LS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU2LDE4LjU2LDAsMCwxLDguNjUtLjg3LDcuNDUsNy40NSwwLDAsMSwuNDEtNC41OUExNCwxNCwwLDAs'@;
put 'MCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBhMTQsMTQsMCwxLDAsMjcuNjgtNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzIsOS44N2EyLjI1LDIuMjUsMCwwLDEt'@;
put 'LjQ3LDEuNzcsMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcsMTcsMCwwLDAsMi42MS01LDcuNTIsNy41MiwwLDAsMS0yLjE2LTIuNjdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xy'@;
put 'U2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwxLjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIu'@;
put 'NjIsMi4yOCwyLjI4LDAsMCwwLTQuMjguNjNsLS40NSwwaDBhMTEuOTMsMTEuOTMsMCwwLDEtMi44OC03LjI3LDE3Ljc5LDE3Ljc5LDAsMCwxLDUtNC43MiwyLjIzLDIuMjMsMCwwLDAsMi4yOS41NiwxOC41MiwxOC41MiwwLDAsMCw0LjQ3LDUsMi43NCwyLjc0LDAsMCwxLC4yMS0uMjRsLjk1'@;
put 'LS45MWExNi45LDE2LjksMCwwLDEtNC4zNS00Ljc5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNGwuMTksMGgxLjU2YTE5LDE5LDAsMCwwLC45MS0yLjcyYy40My4xOS44'@;
put 'NC40MSwxLjI2LjY0YTExLjk0LDExLjk0LDAsMCwxLDEsNC4wOWwwLDBBMi43NywyLjc3LDAsMCwxLDMwLDE2YTIuNzMsMi43MywwLDAsMSwuNjguMUExNCwxNCwwLDEsMCwxNi4wOCwzMWEyLjcyLDIuNzIsMCwwLDEsMC0yQTExLjkzLDExLjkzLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1'@;
put 'YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAs'@;
put 'MCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI1LDIxLjE5QTMuODQsMy44NCwwLDEsMCwyOC44OCwyNSwzLjg3LDMuODcsMCwwLDAsMjUsMjEuMTlabTAsNi4wOEEyLjI0LDIuMjQsMCwxLDEsMjcuMjgsMjUsMi4yNiwyLjI2LDAsMCwxLDI1LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMTcsMjQuMTRhMS4xNCwxLjE0LDAsMCwwLS43LTEuMWwtMS41Ni0uNDZxLS4xMS0uMzItLjI2LS42M2wuNzItMS4zM2ExLjE0LDEuMTQsMCwwLDAtLjIxLTEuMzRsLTEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAtMS4zNC0uMmwtMS4zNC43'@;
put 'MWE3LjI4LDcuMjgsMCwwLDAtLjY3LS4yOEwyNywxNi43MWExLjE0LDEuMTQsMCwwLDAtMS4wOC0uNzZIMjRhMS4xNCwxLjE0LDAsMCwwLTEuMDguOGwtLjQ0LDEuNDNhNy4zMiw3LjMyLDAsMCwwLS42OC4yOGwtMS4zMi0uN2ExLjE0LDEuMTQsMCwwLDAtMS4zMy4xOWwtMS4zNywxLjMxYTEu'@;
put 'MTQsMS4xNCwwLDAsMC0uMjEsMS4zNWwuNywxLjI4cS0uMTYuMzItLjI4LjY1TDE2LjU4LDIzYTEuMTMsMS4xMywwLDAsMC0uODEsMS4wOXYxLjg3QTEuMTQsMS4xNCwwLDAsMCwxNi41OSwyN2wxLjQ3LjQ0cS4xMi4zMi4yOC42NGwtLjcyLDEuMzVhMS4xNCwxLjE0LDAsMCwwLC4yLDEuMzVs'@;
put 'MS4zNCwxLjMyYTEuMTQsMS4xNCwwLDAsMCwxLjM0LjJsMS4zNy0uNzJxLjMxLjE0LjYzLjI2bC40NCwxLjQ3YTEuMTQsMS4xNCwwLDAsMCwxLjA5LjhoMS45QTEuMTQsMS4xNCwwLDAsMCwyNywzMy4zMWwuNDQtMS40N2MuMjEtLjA3LjQyLS4xNi42Mi0uMjVsMS4zOC43M2ExLjE0LDEuMTQs'@;
put 'MCwwLDAsMS4zMy0uMmwxLjM0LTEuMzJhMS4xNCwxLjE0LDAsMCwwLC4yMS0xLjM1bC0uNzMtMS4zNHEuMTQtLjMuMjUtLjZsMS41LS40NEExLjEzLDEuMTMsMCwwLDAsMzQuMTcsMjZabS0xLjYsMS41LTIsLjU4LS4xMi40MkE1LjU1LDUuNTUsMCwwLDEsMzAsMjcuNzNsLS4yMS4zOCwxLDEu'@;
put 'NzktLjg2Ljg0LTEuODItMS0uMzcuMmE1Ljc4LDUuNzgsMCwwLDEtMS4xMi40NmwtLjQyLjEyLS41OSwySDI0LjM4bC0uNTktMS45NS0uNDItLjEyQTUuODYsNS44NiwwLDAsMSwyMi4yNCwzMGwtLjM3LS4yLTEuODEsMS0uODYtLjg1LDEtMS44Mi0uMjItLjM4YTUuNiw1LjYsMCwwLDEtLjQ5'@;
put 'LTEuMTNsLS4xMy0uNDEtMS45NS0uNThWMjQuNDJsMS45NC0uNTguMTItLjQxYTUuNTMsNS41MywwLDAsMSwuNDktMS4xNGwuMjItLjM5LTEtMS43My44Ny0uODQsMS43Ny45NC4zOC0uMjFhNS44LDUuOCwwLDAsMSwxLjE3LS40OWwuNDEtLjEyLjU5LTEuOTFoMS4yM2wuNTgsMS45LjQxLjEy'@;
put 'YTUuNzksNS43OSwwLDAsMSwxLjE2LjQ4bC4zOC4yMSwxLjgtLjk1Ljg2Ljg1LTEsMS43Ny4yMS4zOGE1LjUzLDUuNTMsMCwwLDEsLjQ3LDEuMTNsLjEyLjQyLDEuOTMuNTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0zNCwyMy42MywzMiwyM2E3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjksMTcuODZhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMWE3LDcsMCwwLDAtMS40My0uNjFsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4z'@;
put 'Ny4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxTDIwLDE3LjhhLjM3LjM3LDAsMCwwLS40NC4wN0wxOCwxOS4zMWEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LDcsMCwwLDAsMTguMzUsMjNsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCww'@;
put 'LDAsLjI2LjM1bDIsLjYxQTcsNywwLDAsMCwxOSwyOC4zN2wtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NGwxLjQ1LDEuNDVhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu'@;
put 'MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhBNyw3LDAsMCwwLDMxLjk1LDI3bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjI0QS4zNy4zNywwLDAsMCwzNCwy'@;
put 'My42M1ptLTguODMsNC43MkEzLjMzLDMuMzMsMCwxLDEsMjguNTMsMjUsMy4zMywzLjMzLDAsMCwxLDI1LjE5LDI4LjM0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44NSwyNy40NGEyLjI5LDIuMjksMCwwLDAs'@;
put 'MS43NC0xLjY4LDE5LjcxLDE5LjcxLDAsMCwwLDEuODktLjZWMjMuOTVhMiwyLDAsMCwxLC4wOS0uNTUsMTcuNDIsMTcuNDIsMCwwLDEtMi4xNy43OCwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEs'@;
put 'NS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNjUsNS4wOSwxLjkzLDEuOTMsMCwwLDEsLjIzLS4zMmwuODktLjg3YTE2Ljg5LDE2Ljg5LDAsMCwxLTQuNDktNC44OSwyLjI3LDIuMjcsMCwwLDAsLjM1LTEuMmMwLS4wNywwLS4xNCwwLS4yMkExNy42'@;
put 'OSwxNy42OSwwLDAsMSwyNSwxMWExNy40OSwxNy40OSwwLDAsMS0xLjE1LDMuMzUsMS45NCwxLjk0LDAsMCwxLC4zMS0uMDVoMS40NWExOS4wNiwxOS4wNiwwLDAsMCwuOS0yLjdjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTMsMTEuOTMsMCwwLDEsMSw0LjYzbDEtLjUxYTIsMiwwLDAsMSwu'@;
put 'OTItLjIzaC4wOEExNCwxNCwwLDEsMCwxNi40NCwzMWExLjk0LDEuOTQsMCwwLDEsLjEyLTEuNDZsLjI4LS41M2gtLjA3QTExLjkxLDExLjkxLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCww'@;
put 'LDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwx'@;
put 'OS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43'@;
put 'OCw4LjQxQTIsMiwwLDAsMCwyOC44Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1pNMzIsMjdINFYxOS4wNkw3LjEzLDlIMjgu'@;
put 'ODdMMzIsMTkuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVj'@;
put 'dCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9'@;
put 'IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMywxNS40SDMwLjg2TDMyLDE5LjA2'@;
put 'VjI3SDRWMTkuMDZMNy4xMyw5SDE5LjU2bDEuMTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu'@;
put 'MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyLjEyIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i'@;
put 'YWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIi'@;
put 'IHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40N2wtMS42NS01LjMyYTcuNDksNy40OSwwLDAsMS0yLC4zM0wzMiwxOS4wNlYyN0g0VjE5LjA2TDcuMTMsOWgxNmE3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCww'@;
put 'LS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5'@;
put 'PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAs'@;
put 'NS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW'@;
put 'MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMTNBMiwyLDAs'@;
put 'MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW'@;
put 'MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi4yNiwxMy4xNUE3LjQ5LDcuNDksMCwwLDEsMjIuNTcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNmEyLDIsMCwwLDAtLjA5LS41OVpNOC45MiwyNUg3'@;
put 'LjEyVjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMEgyMi4xVjIyaDEuOFptNSwwSDI3LjFWMjJoMS44Wk0zMSwxOS40SDVWMThIMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUm91dGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwx'@;
put 'NC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zOCwxNS40SDI4LjU0TDMwLjE1LDE3SDIyLjQ2YTEsMSwwLDEsMCwwLDJoNy42OWwtMi43MSwyLjY5YTEsMSwwLDAsMCwxLjQxLDEuNDJMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2wxLjE1LTEuMTYtLjEtLjE1QTMuNjgsMy42OCwwLDAsMSwxOSwxMFYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40'@;
put 'MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTQuODdsNS4xMS01LjE0'@;
put 'YTEsMSwwLDEsMC0xLjQyLTEuNDFMMTksMTFWMy4zM2ExLDEsMCwwLDAtMiwwVjExTDE0LjMxLDguMzJhMSwxLDAsMSwwLTEuNDIsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMTgsMS42N2ExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwxLjY3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1'@;
put 'LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEw'@;
put 'LjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44'@;
put 'LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44'@;
put 'MiwxNS4zOUgyOC42OEwzMSwxNy42N2wtNC4xOSw0LjA5YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMS41LTEuNDdIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTMtMS41MUwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDEsMSwxNSw5'@;
put 'LjkybDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2NC40OUEzLjY1LDMuNjUsMCwwLDEsMTksOS44OWw0LjIyLTcuMzFBMTYsMTYsMCwxLDAsMzQsMTcuNjcsMTYsMTYsMCwwLDAsMzMuODIsMTUuMzlabS0yMy41LDYuMzVhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQu'@;
put 'MDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUs'@;
put 'MjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy'@;
put 'MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4yMiwxMi43NkE3LjQ5LDcuNDksMCwwLDEsMjMuMzIsMi42YTE2LDE2LDAsMSwwLDkuOSwxMC4xN1pNMTMuODYsOS45MmEuOC44LDAsMCwxLDEuMTMsMGwyLjIxLDIuMTlWNS45M2EuOC44LDAsMCwxLDEuNiwwdjYuMThMMjEs'@;
put 'OS45MmEuOC44LDAsMSwxLDEuMTMsMS4xNEwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDAsMSwxMy44Niw5LjkyWk0xMC4zMiwyMS43NGEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAs'@;
put 'MS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAs'@;
put 'MCwxLDIyLjE0LDI1LjQxWm00LjY3LTMuNjZhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0yLjItMi4xNGEuOC44LDAsMSwxLDEuMTItMS4xNEwzMSwxNy42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVWTT0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBkPSJNMTEsNUgyNVY4aDJWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTBIMTd2Mmg4djZoMlYxMmgz'@;
put 'VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjEuODdMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djYuODVoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjE1LjQiIHdpZHRoPSIxLjk5IiBoZWlnaHQ9IjIuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNFYyNkgy'@;
put 'MlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMTB2MmgxLjU3QTMuNjcsMy42NywwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVoMFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40'@;
put 'OSwwLDAsMSwzMCwxMy41Wk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMmg4djZoMlYxMi44N0E3'@;
put 'LjUyLDcuNTIsMCwwLDEsMjMuNjYsMTBIMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDI3VjVhMiwyLDAsMCwwLTItMkgxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxNy4xOWEyLDIsMCwwLDAtMiwydjEuNEgyMEEzLjYsMy42LDAsMCwxLDIzLjYsMTd2OEgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAs'@;
put 'MCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyQTIsMiwwLDAsMCwzMCwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42aDIuNzJMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4xOSwxMGEyLDIs'@;
put 'MCwwLDAtMiwydjEuNEgxOUEzLjY4LDMuNjgsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjIxLDE1LjRBMy41NSwzLjU1LDAsMCwxLDIzLjYsMTd2OEgyMlYx'@;
put 'N2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDIyLjlBNy40NSw3LjQ1LDAsMCwxLDIz'@;
put 'LjEzLDNIMTFBMiwyLDAsMCwwLDksNXY4LjRoNC41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OSw3LjQ5LDAsMCwxLDIzLjY2LDEwSDE3LjE5YTIsMiwwLDAsMC0y'@;
put 'LDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIs'@;
put 'MiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVk1XQXBwPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIg'@;
put 'MjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMCA0IDIwIDggMjIgOCAyMiA2IDMwIDYgMzAgMTQgMjggMTQgMjggMTYgMzIgMTYgMzIgNCAyMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIx'@;
put 'MSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02'@;
put 'IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI4IDIyIDMwIDIyIDMwIDMwIDIyIDMwIDIyIDI4IDIwIDI4IDIwIDMyIDMyIDMyIDMyIDIwIDI4IDIwIDI4IDIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl'@;
put 'cnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRo'@;
put 'PSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmwwLS4xVjE3aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRl'@;
put 'ZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjIuNDUgNCAyMCA0IDIwIDggMjAuMTQgOCAyMi40NSA0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIx'@;
put 'NS40IiB3aWR0aD0iNCIgaGVpZ2h0PSIwLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u'@;
put 'IHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50'@;
put 'cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0'@;
put 'IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDZoLjVhNy40OSw3LjQ5'@;
put 'LDAsMCwxLC4yOC0ySDIwVjhoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjE0SDI4djJoNFYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxMS41OGE3LjUzLDcuNTMsMCwwLDEtLjU4LS41OEgxOXY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ2VydGlmaWNh'@;
put 'dGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAsOC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2'@;
put 'IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQt'@;
put 'MTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0i'@;
put 'MS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYs'@;
put 'Ni4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIN3YxLjZIMTkuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjEuMTZhOC40MSw4'@;
put 'LjQxLDAsMCwxLDIsMS44MXYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTls'@;
put 'LjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9Ijci'@;
put 'IHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIxNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAu'@;
put 'NjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2My4zNGE4LjQxLDgu'@;
put 'NDEsMCwwLDEsMiwxLjgxdi02QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI4VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y'@;
put 'SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0TDIwLjQxLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDMwSDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMzJhMiwyLDAsMCwxLDIsMlYxOC4zN2E4LjM0'@;
put 'LDguMzQsMCwwLDAtMTMuNDksOS43OWwtLjkzLDEuMTRaTTcsMTJ2MS42SDI0VjEyWm0wLDUuNkgxOFYxNkg3Wm0wLDdIMTdWMjNIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNTlhNi4zNyw2LjM3'@;
put 'LDAsMSwwLTEwLjc3LDQuNTlsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdBNi4zNCw2LjM0LDAsMCwwLDMzLjgzLDIzLjU5Wm0tMTAuNzQsMGE0LjM3LDQuMzcsMCwxLDEsNC4zNyw0LjMxQTQuMzUs'@;
put 'NC4zNSwwLDAsMSwyMy4xLDIzLjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2'@;
put 'LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjkuMjVhOC4zNiw4LjM2LDAsMCwxLDQuNzUsM3YtM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTkuMDcsMTMuNkg3VjEySDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRBOC4zNCw4LjM0LDAsMCwxLDI1LjY2LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAs'@;
put 'MCwxLDE5LjA3LDEzLjZaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww'@;
put 'LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjcuNDYsMTcuMjNhNi4zNiw2LjM2LDAsMCwwLTQuNCwxMWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN2E2LjM2LDYuMzYsMCwwLDAtNC40LTExWm0wLDEwLjY4YTQuMzEsNC4z'@;
put 'MSwwLDEsMSw0LjM3LTQuMzFBNC4zNSw0LjM1LDAsMCwxLDI3LjQ2LDI3LjkxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg0QTIsMiww'@;
put 'LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMzQsMTguMzd2LTZBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThabTYtNEg3VjEySDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJT'@;
put 'aGFwZUFyY2hpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAt'@;
put 'LjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEz'@;
put 'LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIwLjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y'@;
put 'VjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwx'@;
put 'LS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEu'@;
put 'NSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEs'@;
put 'MSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVW5hcmNoaXZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs'@;
put 'Mi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEsMSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42'@;
put 'VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMs'@;
put 'MywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwwLDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUs'@;
put 'MCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEs'@;
put 'MSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNvbm5lY3Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYu'@;
put 'MjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0'@;
put 'LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiww'@;
put 'LDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRGlzY29ubmVjdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYuMjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZI'@;
put 'MTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgx'@;
put 'OXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIwaDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4yMyw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAs'@;
put 'Ni4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTGluaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwx'@;
put 'LDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4xNS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2'@;
put 'LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMu'@;
put 'NjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0x'@;
put 'LjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVVbmxpbms9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSww'@;
put 'LTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4yMmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwy'@;
put 'MWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCxtLmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAsMCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40'@;
put 'NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEzLjg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYu'@;
put 'Q2xyU2hhcGVDbG91ZFNjYWxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAs'@;
put 'MTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0uODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcuMTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTgu'@;
put 'NC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUzWk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAs'@;
put 'MCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxGLkNs'@;
put 'clNoYXBlQ2xvdWRUcmFmZmljPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAsMCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYs'@;
put 'MjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCwwLDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTgu'@;
put 'NDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUs'@;
put 'MjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEZXBsb3k9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCwwLC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pN'@;
put 'MTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAs'@;
put 'MCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwx'@;
put 'LDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIZWxpeD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODgsMTMuMDdhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDEsMSwxLDEuNTJMOS4zNywxMi45MkEuOS45LDAsMCwxLDguODgsMTMuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEzLjI1LDE1LjExYS45LjksMCwwLDEtLjQ5LTEuNjZMMTgsMTAuMDhhLjkuOSwwLDEsMSwxLDEuNTJMMTMuNzQsMTVBLjkuOSwwLDAsMSwxMy4yNSwxNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTkuNzIsMzAuMjNhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDAsMSwxLDEuNTJMMjAuMiwzMC4wOUEuOS45LDAsMCwxLDE5LjcyLDMwLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOC45MiwyNS45NGEuOS45LDAsMCwxLS40OS0xLjY2bDUuMjUtMy4zN2EuOS45LDAsMSwxLDEsMS41MUwxOS40LDI1LjhBLjg5Ljg5LDAsMCwxLDE4LjkyLDI1Ljk0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMS41Niw1LjY5YTMuNTksMy41OSwwLDAsMSwuMTUsMy41M0wxOC44MywxNWgyLjI1bDIuNDMtNC44N2E1LjYxLDUuNjEsMCwwLDAtNS04LjE0SDEzLjI2bC0xLDJoNi4yMkEzLjYxLDMuNjEsMCwwLDEsMjEuNTYsNS42OVoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuOTEsMjAuNzhBNS41Myw1LjUzLDAsMCwwLDI3LjY2LDE3SDkuMzFhMy41NCwzLjU0LDAsMCwxLTMuNTYtMy42NywzLjYxLDMuNjEsMCwwLDEsLjQyLTEuNTRsNC4yNi04LjQ5YTEsMSww'@;
put 'LDEsMC0xLjc5LS45TDQuNCwxMC44NEE1LjY3LDUuNjcsMCwwLDAsNCwxNS4yMiw1LjUzLDUuNTMsMCwwLDAsOS4yOCwxOWg3LjZsLTMuNDQsNi44N2E1LjY0LDUuNjQsMCwwLDAsMS41LDYuOTJBNS4zOCw1LjM4LDAsMCwwLDE4LjQxLDM0aDUuMjVsMS0ySDE4LjQzYTMuNTgsMy41OCwwLDAs'@;
put 'MS0zLjIyLTUuMjFMMTkuMTEsMTloOC41NGEzLjQyLDMuNDIsMCwwLDEsMi4xNS43MSwzLjU3LDMuNTcsMCwwLDEsMSw0LjQzbC00LjEyLDguMjJhMSwxLDAsMSwwLDEuNzkuOWw0LjA2LTguMUE1LjY3LDUuNjcsMCwwLDAsMzIuOTEsMjAuNzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTkuNjNBNS41NSw1LjU1LDAsMCwwLDI3LjQyLDE3SDEwLjA2YTQuMzYsNC4zNiwwLDAsMS0zLjY3LTIsNC4wNyw0LjA3LDAsMCwxLS4xOS00LjEzbDMuNjItNywxLjQyLDEuNjMtMi43NCw1LjMsOC44NC01LjY2'@;
put 'YS45MS45MSwwLDAsMSwxLDEuNTNMNy44NCwxMy4zOGEyLjEzLDIuMTMsMCwwLDAsLjI0LjUyLDIuMjgsMi4yOCwwLDAsMCwxLjY1LDFMMTguMTEsOS41YS45MS45MSwwLDAsMSwxLDEuNTJMMTMsMTQuOTRIMjAuOGwyLjQxLTQuODJhNS42LDUuNiwwLDAsMC01LTguMTJIOWExLDEsMCwwLDAt'@;
put 'LjkuNTZMMy44OCwxMC44OWE1LjYsNS42LDAsMCwwLDUsOC4xMmg3LjY1bC0zLjQzLDYuODdhNS42LDUuNiwwLDAsMCw1LDguMTJoOS4yOGExLDEsMCwwLDAsLjkzLS42NWw0LjE0LTguMjRBNS41OCw1LjU4LDAsMCwwLDMyLjE2LDE5LjYzWk0xNy43NSwyNS41N0EuOTEuOTEsMCwwLDEsMTgs'@;
put 'MjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRmxhc2s9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4yOSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMu'@;
put 'NDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMxLTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1'@;
put 'LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAsMCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAs'@;
put 'MCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUuNDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYuNzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2'@;
put 'QTQuNzYsNC43NiwwLDAsMCwxNC42OCwzLjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40MiwzMS42OEEyLjE0LDIuMTQsMCwwLDEsMTUuOCwzMEg0VjI0LjIyYTE0LjgxLDE0LjgxLDAsMCwxLDExLjA5'@;
put 'LTQuNjhsLjcyLDBhMi4yLDIuMiwwLDAsMSwuNjItMS44NWwuMTItLjExYy0uNDcsMC0xLS4wNi0xLjQ2LS4wNkExNi40NywxNi40NywwLDAsMCwyLjIsMjMuMjZhMSwxLDAsMCwwLS4yLjZWMzBhMiwyLDAsMCwwLDIsMkgxNi43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODcsMTYuMjlhLjM3LjM3LDAsMCwxLC4xNSwwLC40Mi40MiwwLDAsMC0uMTUsMFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwy'@;
put 'My4zMmwtMi0uNjFhNy4yMSw3LjIxLDAsMCwwLS41OC0xLjQxbDEtMS44NkEuMzguMzgsMCwwLDAsMzIsMTlsLTEuNDUtMS40NWEuMzYuMzYsMCwwLDAtLjQ0LS4wN2wtMS44NCwxYTcuMTUsNy4xNSwwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM2LjM2LDAsMCwwLS4zNi0uMjRIMjMuODJhLjM2'@;
put 'LjM2LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNmwtMS44Mi0xYS4zNS4zNSwwLDAsMC0uNDMuMDdMMTcuNjksMTlhLjM4LjM4LDAsMCwwLS4wNi40NGwxLDEuODJBNi43Nyw2Ljc3LDAsMCwwLDE4LDIyLjY5bC0yLC42YS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNUEuMzUu'@;
put 'MzUsMCwwLDAsMTYsMjZsMiwuNjFhNyw3LDAsMCwwLC42LDEuNDFsLTEsMS45MWEuMzYuMzYsMCwwLDAsLjA2LjQzbDEuNDUsMS40NWEuMzguMzgsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA5LDcuMDksMCwwLDAsMS40LjU3bC42LDJhLjM4LjM4LDAsMCwwLC4zNS4yNmgyLjA1YS4zNy4zNyww'@;
put 'LDAsMCwuMzUtLjI2bC42MS0yLjA1YTYuOTIsNi45MiwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM2LjM2LDAsMCwwLC40My0uMDdMMzIsMzAuNEEuMzUuMzUsMCwwLDAsMzIsMzBsLTEtMS44OGE3LDcsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM2LjM2LDAsMCwwLC4yNi0uMzVWMjMuNjdBLjM2'@;
put 'LjM2LDAsMCwwLDMzLjY4LDIzLjMyWk0yNC44NSwyOGEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjMzQTMuMzQsMy4zNCwwLDAsMSwyNC44NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTQuNjciIGN5'@;
put 'PSI4LjMiIHI9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuNDQsMzEuODJhMi4xNSwyLjE1LDAsMCwxLS4zOC0yLjU1bC41My0xLTEuMDktLjMzQTIuMTQsMi4xNCwwLDAsMSwxNCwyNS44NFYyMy43OWEyLjE2'@;
put 'LDIuMTYsMCwwLDEsMS41My0yLjA3bDEuMDktLjMzLS41Mi0xYTIuMTcsMi4xNywwLDAsMSwuMzUtMi41MiwxOC45MiwxOC45MiwwLDAsMC0yLjMyLS4xNkExNS41OCwxNS41OCwwLDAsMCwyLDIzLjA3djcuNzVhMSwxLDAsMCwwLDEsMUgxNi40NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNywyMy40NmwtMi0uNmE2LjczLDYuNzMsMCwwLDAtLjU4LTEuNDJsMS0xLjg2YS4zNS4zNSwwLDAsMC0uMDctLjQzbC0xLjQ1LTEuNDZhLjM4LjM4LDAsMCwwLS40My0uMDdsLTEuODUsMWE3Ljc0LDcuNzQsMCww'@;
put 'LDAtMS40My0uNmwtLjYxLTJhLjM4LjM4LDAsMCwwLS4zNi0uMjVIMjMuODRhLjM4LjM4LDAsMCwwLS4zNS4yNmwtLjYsMmE2Ljg1LDYuODUsMCwwLDAtMS40NS42MWwtMS44MS0xYS4zOC4zOCwwLDAsMC0uNDQuMDZsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LjI0'@;
put 'LDcuMjQsMCwwLDAsMTgsMjIuODNsLTIsLjYxYS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNWEuMzYuMzYsMCwwLDAsLjI2LjM1bDIsLjYxYTcuMjksNy4yOSwwLDAsMCwuNiwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LjE2LDMyYS4zOC4zOCwwLDAsMCwuNDQuMDZsMS44Ny0x'@;
put 'YTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMi4wNWEuMzguMzgsMCwwLDAsLjM2LjI2aDIuMDVhLjM4LjM4LDAsMCwwLC4zNS0uMjZsLjYtMi4wNWE2LjY4LDYuNjgsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zOC4zOCwwLDAsMCwuNDQtLjA2TDMyLDMwLjU1YS4zOC4zOCwwLDAsMCwuMDYt'@;
put 'LjQ0bC0xLTEuODhhNi45Miw2LjkyLDAsMCwwLC41Ny0xLjM4bDItLjYxYS4zOS4zOSwwLDAsMCwuMjctLjM1VjIzLjgyQS40LjQsMCwwLDAsMzMuNywyMy40NlptLTguODMsNC43MmEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjM0QTMuMzQsMy4zNCwwLDAsMSwyNC44NywyOC4xOFoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIYXJkRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y'@;
put 'Wk0zMiwyOEg0VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44OCwxOC4wOGEzLjU5'@;
put 'LDMuNTksMCwxLDAsMy41OS0zLjU5LDMuODQsMy44NCwwLDAsMC0uOTEuMTNMMTUsMTYuMTZhMi4wOCwyLjA4LDAsMCwxLC41LS4wNywyLDIsMCwxLDEtMiwyLDEuNjQsMS42NCwwLDAsMSwuMDgtLjVMMTIsMTcuMTZBMy41MywzLjUzLDAsMCwwLDExLjg4LDE4LjA4WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNDcsMjUuNzNhNy42Niw3LjY2LDAsMCwxLTcuNjUtNy42NSw3LjU1LDcuNTUsMCwwLDEsLjI3LTJMNi41NCwxNS43YTkuMjQsOS4yNCwwLDAsMCwxNy44LDQuOTVIMjIuNjZBNy42NCw3'@;
put 'LjY0LDAsMCwxLDE1LjQ3LDI1LjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjIsMTcuODNhLjguOCwwLDAsMC0uOC0uOEgyNC42NmE5LjI2LDkuMjYsMCwwLDAtOS4xOS04LjIsOS4zNiw5LjM2LDAs'@;
put 'MCwwLTIuMzguMzJsLjQyLDEuNTRhNy44Niw3Ljg2LDAsMCwxLDItLjI2QTcuNjYsNy42NiwwLDAsMSwyMywxN0gyMC45MmEuOC44LDAsMCwwLDAsMS42aDYuNUEuOC44LDAsMCwwLDI4LjIyLDE3LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEyLDE3LjE2bDEuNTQuNDJhMS42NCwxLjY0LDAsMCwwLS4wOC41LDIsMiwwLDEsMCwyLTIsMi4wOCwyLjA4LDAsMCwwLS41'@;
put 'LjA3bC0uNDEtMS41NGEzLjg0LDMuODQsMCwwLDEsLjkxLS4xMywzLjU5LDMuNTksMCwxLDEtMy41OSwzLjU5QTMuNTMsMy41MywwLDAsMSwxMiwxNy4xNlpNNS4zMSw4QTEuMjUsMS4yNSwwLDEsMSw0LjA2LDkuMjUsMS4yNSwxLjI1LDAsMCwxLDUuMzEsOFptMCwyMC4wNmExLjI1LDEuMjUs'@;
put 'MCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSw1LjMxLDI4LjA2Wm0xMC4xNi0uNzNBOS4yMiw5LjIyLDAsMCwxLDYuNTQsMTUuN2wxLjU1LjQxYTcuNTUsNy41NSwwLDAsMC0uMjcsMiw3LjY0LDcuNjQsMCwwLDAsMTQuODQsMi41N2gxLjY4QTkuMjUsOS4yNSwwLDAsMSwxNS40Nywy'@;
put 'Ny4zM1ptMTItOC43aC02LjVhLjguOCwwLDAsMSwwLTEuNkgyM2E3LjY2LDcuNjYsMCwwLDAtNy41Ny02LjYsNy44Niw3Ljg2LDAsMCwwLTIsLjI2bC0uNDItMS41NGE5LjM2LDkuMzYsMCwwLDEsMi4zOC0uMzJBOS4yNiw5LjI2LDAsMCwxLDI0LjY2LDE3aDIuNzZhLjguOCwwLDAsMSwwLDEu'@;
put 'NlptMy4zOSw5LjQzYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDI4LjA2Wm0wLTE3LjU2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDEwLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRIMy43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRW'@;
put 'NkgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2'@;
put 'SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMkgxMS43NEExLjc0LDEuNzQsMCwwLDAsMTAsMTMuNzRWMjguMjZBMS43NCwxLjc0LDAsMCwwLDExLjc0LDMwSDMyLjI2QTEuNzQsMS43'@;
put 'NCwwLDAsMCwzNCwyOC4yNlYxMy43NEExLjc0LDEuNzQsMCwwLDAsMzIuMjYsMTJaTTMyLDI4SDEyVjE0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMjMuNjhhMi42NCwyLjY0LDAsMSwwLTIu'@;
put 'Ny0yLjYzQTIuNjcsMi42NywwLDAsMCwxOS45NCwyMy42OFptMC0zLjg3YTEuMjQsMS4yNCwwLDEsMS0xLjI5LDEuMjRBMS4yNywxLjI3LDAsMCwxLDE5Ljk0LDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTkuOTQsMTYuMjJhNC45Myw0LjkzLDAsMCwxLDQuOTUsNC4zNUgyMy43MVYyMmg0LjQxYS43LjcsMCwwLDAsMC0xLjRIMjYuMzFhNi4zMyw2LjMzLDAsMCwwLTYuMzctNS43NSw2LjU4LDYuNTgsMCwwLDAtMS40OC4xN2wuMzUsMS4zN0E0LjczLDQuNzMsMCwwLDEsMTkuOTQsMTYuMjJa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyNy4yN2E2LjQyLDYuNDIsMCwwLDAsNS42Ny0zLjM1SDIzLjkzYTUsNSwwLDAsMS00LDEuOTUsNC45MSw0LjkxLDAsMCwxLTUtNC44Miw1LjE2LDUuMTYs'@;
put 'MCwwLDEsLjA4LS43OUwxMy42MywyMGE3LDcsMCwwLDAtLjA5LDFBNi4zMiw2LjMyLDAsMCwwLDE5Ljk0LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQu'@;
put 'MjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCw5Ljc0QTEuNzQsMS43NCwwLDAsMCwyOC4y'@;
put 'Niw4SDcuNzRBMS43NCwxLjc0LDAsMCwwLDYsOS43NFYyNC4yNkExLjc0LDEuNzQsMCwwLDAsNy43NCwyNkg4VjEwSDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MiwyMi42QTEuNTUsMS41NSwwLDEsMCwx'@;
put 'OCwyMS4wNSwxLjYsMS42LDAsMCwwLDE5LjYyLDIyLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEu'@;
put 'NzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMTkuNjIsMTcuNzRhMy4zMSwzLjMxLDAsMSwxLTMuMzgsMy4zMUEzLjM1LDMuMzUsMCwwLDEsMTkuNjIsMTcuNzRabTAsMTEuMTNhNy45NCw3Ljk0LDAsMCwxLTgtNy44'@;
put 'Miw3LjgzLDcuODMsMCwwLDEsLjExLTEuMjlsMS43NS4zYTUuMzYsNS4zNiwwLDAsMC0uMTEsMSw2LjE4LDYuMTgsMCwwLDAsNi4yOCw2LjA2LDYuMzUsNi4zNSwwLDAsMCw1LTIuNDZoMi4xQTguMDYsOC4wNiwwLDAsMSwxOS42MiwyOC44N1pNMjkuODksMjIuMkgyNC4zNlYyMC40NGgxLjQ4'@;
put 'QTYuMTksNi4xOSwwLDAsMCwxOS42MiwxNWE2LjQ4LDYuNDgsMCwwLDAtMS40MS4xNmwtLjQ1LTEuN2E4LjE2LDguMTYsMCwwLDEsMS44Ni0uMjIsOCw4LDAsMCwxLDgsNy4yMWgyLjI2YS44OC44OCwwLDAsMSwwLDEuNzZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00'@;
put 'IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTlZNZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2'@;
put 'IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3'@;
put 'LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhI'@;
put 'MTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAg'@;
put 'ICAgICcpLEYuQ2xyU2hhcGVTU0Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDE4LjYyYzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJzLS41MywxLjA5LTEuNTUsMS4wOWE0LDQsMCwwLDEt'@;
put 'Mi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MnMtMS4xNS0yLjA1LTIuODctMi40NGMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDEwLDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMUE0LjU4'@;
put 'LDQuNTgsMCwwLDAsMTAsMTMuNjljLTEuNzQsMC0zLDEuMDUtMywyLjQ5UzguMjYsMTguMjIsMTAsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44MywyMC45M2E0LDQsMCwwLDEtMi43MS0xLjEx'@;
put 'bC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MlMxOS43MywxNy42NSwxOCwxNy4yNmMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDE3LjQ4LDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMWE0LjU2LDQuNTYs'@;
put 'MCwwLDAtMy4xMi0xLjE1Yy0xLjczLDAtMywxLjA1LTMsMi40OXMxLjE5LDIsMi44OSwyLjQ0YzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJTMTguODUsMjAuOTMsMTcuODMsMjAuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yOS45LDE4YzAtMi40MS0xLjkyLTQuMTItNC42NC00LjEyaC0yLjl2OC4yNGgyLjlDMjgsMjIuMDgsMjkuOSwyMC4zNywyOS45LDE4Wm0tNi0yLjc2aDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC04IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk01LjIxLDhBMS4yNSwxLjI1LDAsMSwxLDQsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4yMSw4Wm0w'@;
put 'LDIwYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMjEsMjhabTUuMDYtNS43OGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIu'@;
put 'ODktLjg5LTIuODktMi40NHMxLjIyLTIuNDksMy0yLjQ5YTQuNTgsNC41OCwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFBMy42OCwzLjY4LDAsMCwwLDEwLDE1YTEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRT'@;
put 'MTIuMjQsMjIuMjIsMTAuMjcsMjIuMjJabTcuNTEsMGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIzLTIuNDksMy0yLjQ5'@;
put 'YTQuNTYsNC41NiwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFhMy42OCwzLjY4LDAsMCwwLTIuMzctMSwxLjI1LDEuMjUsMCwwLDAtMS4zOSwxLjA4YzAsLjY3LjYxLjkxLDEuOTIsMS4yMSwxLjcyLjM5LDIuODcuOTQsMi44NywyLjQ0UzE5Ljc1LDIyLjIyLDE3Ljc4LDIyLjIyWm00LjU4LS4x'@;
put 'NFYxMy44NGgyLjljMi43MiwwLDQuNjQsMS43MSw0LjY0LDQuMTJTMjgsMjIuMDgsMjUuMjYsMjIuMDhaTTMwLjY5LDI4YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjY5LDI4Wm0wLTE3LjVhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUs'@;
put 'MCwwLDEsMzAuNjksMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMTUuMmgxLjU2YTIuNzcsMi43NywwLDEsMSwwLDUuNTNIMjMuODZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQmx1ZXRvb3RoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwtNS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4'@;
put 'LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCww'@;
put 'LDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEsNi4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0'@;
put 'aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZMMjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42'@;
put 'LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUuMTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUu'@;
put 'MTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAs'@;
put 'MCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5'@;
put 'LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2'@;
put 'LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAsMCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1'@;
put 'LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVByb2Nlc3NPblZNPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCww'@;
put 'LDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4wOSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0'@;
put 'TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAs'@;
put 'MCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMzLjc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwx'@;
put 'LDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41'@;
put 'OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkxLDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIyLDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIgLz4nKSxGLkNsclNoYXBlQXNzaWduVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAsMTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgs'@;
put 'NC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEsMTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwx'@;
put 'Ny43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJI'@;
put 'MzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTguNjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmEx'@;
put 'LDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTguNTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45'@;
put 'NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMyYTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCwwLDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQXRvbT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAs'@;
put 'MSwxOCwyMC40OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNC4yMywxMS43MWEzOS4xNCwzOS4xNCwwLDAsMC00LjU3LTMuOTIsMjIuODYsMjIuODYsMCwwLDEsMy40OC0xLjcyYy4zMi0uMTIuNjItLjIxLjkyLS4zYTIuMjgsMi4y'@;
put 'OCwwLDAsMCwzLjgxLS40NiwzLjMxLDMuMzEsMCwwLDEsMS45Mi44NGMxLjE5LDEuMTksMS4yMiwzLjU5LjEsNi41OC40OS42NS45NCwxLjMxLDEuMzUsMiwuMTctLjQuMzUtLjc5LjQ5LTEuMTgsMS40Ny0zLjg1LDEuMjgtNy0uNTMtOC43OGE1LjI5LDUuMjksMCwwLDAtMy4zMy0xLjQ0LDIu'@;
put 'MjksMi4yOSwwLDAsMC00LjMxLjU0Yy0uMzcuMTEtLjc0LjIyLTEuMTMuMzdhMjUuNzksMjUuNzksMCwwLDAtNC41NywyLjM1QTI2LjIxLDI2LjIxLDAsMCwwLDEzLjI4LDQuMmMtMy44NS0xLjQ2LTctMS4yOC04Ljc3LjUzQzIuODUsNi40LDIuNTgsOS4xNywzLjY4LDEyLjU5YTIuMjgsMi4y'@;
put 'OCwwLDAsMCwxLjU5LDMuNjdjLjMyLjYxLjY3LDEuMjIsMS4wNiwxLjgyQTI1LjU0LDI1LjU0LDAsMCwwLDQsMjIuNjZjLTEuNDcsMy44NC0xLjI4LDcsLjUzLDguNzdhNS42Myw1LjYzLDAsMCwwLDQuMTIsMS41MSwxMy4zNCwxMy4zNCwwLDAsMCw0LjY1LTEsMjYuMjEsMjYuMjEsMCwwLDAs'@;
put 'NC41OC0yLjM1QTI1Ljc5LDI1Ljc5LDAsMCwwLDIyLjQzLDMyYTE0LjE2LDE0LjE2LDAsMCwwLDMuNjUuOUEyLjMsMi4zLDAsMCwwLDMwLjQ2LDMyYTQuNTUsNC41NSwwLDAsMCwuNzQtLjU3YzEuODEtMS44MSwyLTQuOTMuNTMtOC43N0EzMi42OCwzMi42OCwwLDAsMCwyNC4yMywxMS43MVpN'@;
put 'MTIuNTcsMzAuMDljLTMsMS4xNS01LjQ1LDEuMTMtNi42NS0uMDhzLTEuMjMtMy42Mi0uMDctNi42NGEyMi43NywyMi43NywwLDAsMSwxLjcxLTMuNDgsNDAuMTksNDAuMTksMCwwLDAsMy45Miw0LjU2Yy40My40My44Ny44NSwxLjMxLDEuMjVxLjktLjQ2LDEuODMtMS4wNWMtLjU4LS41Mi0x'@;
put 'LjE2LTEtMS43Mi0xLjYxYTM0LDM0LDAsMCwxLTUuNzQtNy40N0EyLjI5LDIuMjksMCwwLDAsNS41LDExLjY5aDBjLS43NS0yLjUtLjYyLTQuNDkuNDMtNS41NGEzLjcyLDMuNzIsMCwwLDEsMi43Mi0uOTIsMTEuNCwxMS40LDAsMCwxLDMuOTMuODQsMjIuODYsMjIuODYsMCwwLDEsMy40OCwx'@;
put 'LjcyLDM5LjE0LDM5LjE0LDAsMCwwLTQuNTcsMy45MmMtLjQ0LjQ0LS44Ny45LTEuMjksMS4zNmEyMC4yNywyMC4yNywwLDAsMCwxLDEuODVjLjU0LS42MSwxLjA5LTEuMjEsMS42OC0xLjhhMzYuMzMsMzYuMzMsMCwwLDEsNS00LjE3LDM2Ljg4LDM2Ljg4LDAsMCwxLDQuOTUsNC4xNywzNi4y'@;
put 'NiwzNi4yNiwwLDAsMSw0LjE3LDUsMzcsMzcsMCwwLDEtNC4xNyw1QTMwLjY4LDMwLjY4LDAsMCwxLDEyLjU3LDMwLjA5Wk0yOS43OSwzMGwtLjE2LjEzYTIuMjcsMi4yNywwLDAsMC0zLjUuNzIsMTIuNTcsMTIuNTcsMCwwLDEtMy0uNzcsMjIsMjIsMCwwLDEtMy40OC0xLjcyLDM5LjE0LDM5'@;
put 'LjE0LDAsMCwwLDQuNTctMy45MiwzOC4yNiwzOC4yNiwwLDAsMCwzLjkyLTQuNTYsMjIuODgsMjIuODgsMCwwLDEsMS43MiwzLjQ4QzMxLDI2LjM5LDMxLDI4LjgxLDI5Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LjIz'@;
put 'LDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1'@;
put 'Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVB'@;
put 'MjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40'@;
put 'NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCww'@;
put 'LDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAs'@;
put 'MCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIu'@;
put 'NS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCww'@;
put 'LDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5'@;
put 'Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMu'@;
put 'NDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE3Ljk5IiBjeT0iMTguMDciIHI9IjMuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIuNjYgMy4xMSkgcm90YXRlKC05LjIyKSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFyQ29kZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs'@;
put 'MCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxGLkNsclNoYXBlQ2REdmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYs'@;
put 'MCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcu'@;
put 'ODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEw'@;
put 'LjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4'@;
put 'LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEsMCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywx'@;
put 'OFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDkuNjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43'@;
put 'NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkExMy43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbnRhaW5lcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN'@;
put 'MTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44Ljgs'@;
put 'MCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCww'@;
put 'LDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSww'@;
put 'LDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcs'@;
put 'MzAuOTQsMzAuOTQsMCwwLDEtNy4yMi0xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjhWOC4xOWMuMzQtLjc2LDQuMzEtMi4xMSwxMS0yLjExczEwLjY3LDEuMzUsMTEsMnYuM2MtLjgyLjc5LTQuNTgsMi4wNS0xMS4xMSwyLjA1'@;
put 'QTMzLjQ4LDMzLjQ4LDAsMCwxLDgsOS40NHYxLjQ0YTM1LjYsMzUuNiwwLDAsMCw4Ljg5LDFjNC4yOSwwLDguOC0uNTgsMTEuMTEtMS44MnY1LjA3YTUuMyw1LjMsMCwwLDEtMS44MS44OEgzMFY4LjEyYzAtMy4xOS04LjE3LTQtMTMtNHMtMTMsLjg1LTEzLDRWMjhDNCwzMC42Myw5LjM5LDMx'@;
put 'LjY4LDE0LDMyVjMwQzkuMTMsMjkuNjYsNi4yOCwyOC42Miw2LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgsMjQuMjhhMzEuMywzMS4zLDAsMCwwLDYsLjg5di0xLjRhMjguOTMsMjguOTMsMCwwLDEtNi0uOTNaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yMSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwwLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDIxLDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsMjEu'@;
put 'ODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40'@;
put 'LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwz'@;
put 'MlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LDIxLjgyYS43LjcsMCwwLDAtLjcuN1YzMGEuNy43LDAsMSwwLDEuNCwwVjIyLjUyQS43LjcsMCwwLDAsMjUsMjEuODJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAt'@;
put 'LjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxNkgyOFY4LjEyYzAtMS42OC01LjM4LTMtMTItM1M0LDYuNDQsNCw4LjEyVjI4YzAsMS41LDQuMzMs'@;
put 'Mi43NSwxMCwzVjI1LjIyYTI5LjE3LDI5LjE3LDAsMCwxLTgtMS4yOVYyMi40NGwuMjQuMUEyNi42MywyNi42MywwLDAsMCwxNCwyMy44MlYyMGE0LDQsMCwwLDEsLjI5LTEuNDdBMjkuMTksMjkuMTksMCwwLDEsNiwxNy4yM1YxNS43NWwuMjQuMDlhMjksMjksMCwwLDAsOSwxLjMyaDBBNCw0'@;
put 'LDAsMCwxLDE4LDE2Wk02LDEwLjU0VjkuMDVsLjI0LjA5QTMwLjEyLDMwLjEyLDAsMCwwLDE2LDEwLjQ3LDI4LjMzLDI4LjMzLDAsMCwwLDI2LDkuMDV2MS41YTMyLjUzLDMyLjUzLDAsMCwxLTEwLDEuMzJBMzIuNDQsMzIuNDQsMCwwLDEsNiwxMC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUZpbGVTaGFyZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFB'@;
put 'MiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAs'@;
put 'MCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIu'@;
put 'MDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAs'@;
put 'MCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDds'@;
put 'NS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVRckNvZGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwx'@;
put 'MEg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDMwLjRBMS42LDEuNiwwLDAsMCw1LjYsMzJIMTJWMjRINFpNNiwyNmg0djRINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo'@;
put 'IGQ9Ik0yNCwzMmg2LjRBMS42LDEuNiwwLDAsMCwzMiwzMC40VjI0SDI0Wm0yLTZoNHY0SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQsNEgyNHY4aDhWNS42QTEuNiwxLjYsMCwwLDAsMzAuNCw0Wk0zMCwxMEgyNlY2aDRa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwIDEwIDIwIDggMTYgOCAxNiAxMiAxOCAxMiAxOCAxMCAyMCAxMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTIiIHk9'@;
put 'IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwb2x5Z29u'@;
put 'IHBvaW50cz0iMjAgNiAyMCA4IDIyIDggMjIgNCAxNCA0IDE0IDggMTYgOCAxNiA2IDIwIDYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxyZWN0IHg9IjQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtOSIgLz48cG9seWdvbiBwb2ludHM9IjEyIDE2IDEyIDE4IDEwIDE4IDEwIDE0IDggMTQgOCAxOCA2IDE4IDYgMjAgNCAyMCA0IDIyIDggMjIgOCAyMCAxMCAyMCAxMCAyMiAxMiAyMiAxMiAyMCAxNCAyMCAxNCAxNiAxMiAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEwIiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTYgMjIgMTYgMjIgMTggMjQgMTggMjQgMTYgMjYgMTYgMjYgMTQgMjIgMTQgMjIgMTAgMjAgMTAgMjAgMTIgMTggMTIgMTggMTQgMjAgMTQgMjAgMTYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xMSIgLz48cG9seWdvbiBwb2ludHM9IjE4IDMwIDE0IDMwIDE0IDMyIDIyIDMyIDIyIDMwIDIwIDMwIDIwIDI4IDE4IDI4IDE4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMiAyMCAyMiAxOCAyMCAx'@;
put 'OCAyMCAxNiAxOCAxNiAxOCAxOCAxNiAxOCAxNiAyMCAxOCAyMCAxOCAyMiAyMCAyMiAyMCAyMCAyMiAyMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiAvPjxyZWN0IHg9IjMwIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiAvPjxyZWN0IHg9IjIyIiB5PSIyMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiAvPjxwb2x5Z29uIHBvaW50cz0iMzAgMTQgMjggMTQgMjggMTYgMjYgMTYgMjYgMTgg'@;
put 'MjggMTggMjggMjAgMzAgMjAgMzAgMTggMzIgMTggMzIgMTYgMzAgMTYgMzAgMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgLz48cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xNyIgLz48cG9seWdvbiBwb2ludHM9IjE0IDI4IDE2IDI4IDE2IDI2IDE4IDI2IDE4IDI0IDE2IDI0IDE2IDIwIDE0IDIwIDE0IDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTgiIC8+JyksRi5DbHJTaGFwZVVzYj0oMCxtLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSwwLDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUt'@;
put 'Mi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0u'@;
put 'MzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYx'@;
put 'LjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhhMS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42'@;
put 'MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgyNnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCww'@;
put 'LDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUsNi42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44'@;
put 'OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTItMy4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgLz4nKSxGLkNsclNoYXBlUmFkYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40'@;
put 'XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAuNC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQt'@;
put 'My0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0yLTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTkuOCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEw'@;
put 'LjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYsMi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41'@;
put 'LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlSW5kdWN0'@;
put 'b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAtMy43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDkt'@;
put 'My02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEs'@;
put 'MTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMs'@;
put 'MCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4zNC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAs'@;
put 'MSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43'@;
put 'MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEu'@;
put 'NzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlUmVzaXN0b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEz'@;
put 'LjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAsMCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01'@;
put 'LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgwYTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCww'@;
put 'LDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVDYXBhY2l0b3I9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCww'@;
put 'LDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVNxdWlkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiww'@;
put 'djNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0xLjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgx'@;
put 'LDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBk'@;
put 'PSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwy'@;
put 'Mi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4'@;
put 'bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwx'@;
put 'LDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUhvc3RHcm91cD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEy'@;
put 'YTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIx'@;
put 'MC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0yVjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4wOCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEww'@;
put 'LDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwzMCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00'@;
put 'LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwyNC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwyMC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'IiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4wOCwyMCBaIiAvPicpLEYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRB'@;
put 'MywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2'@;
put 'N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVOb2RlR3JvdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdM'@;
put 'MjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZsNS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQs'@;
put 'MSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYsMi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40'@;
put 'LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTls'@;
put 'NC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUxLjg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdM'@;
put 'NCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2'@;
put 'OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwy'@;
put 'OC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5'@;
put 'bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVOYW1lc3BhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJs'@;
put 'LTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjcz'@;
put 'TDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEy'@;
put 'YTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLEYuQ2xyU2hhcGVQb2Q9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpNMTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQs'@;
put 'MCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwxNi40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgs'@;
put 'MjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5'@;
put 'LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksRi5DbHJDb250cm9sTHVuPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEy'@;
put 'NS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4czkuMS0uNDUs'@;
put 'MTItMS44OHY1LjExYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlY4aDBzMCwwLDAtLjA3YzAtMy4zNS04LjgtNC4yNS0xNC00LjI1UzQsNC41'@;
put 'OCw0LDcuOTN2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWk0xOCw1LjY4YzcuMTUsMCwxMS41MywxLjQ0LDEyLDIuMjUtLjQ2LjgxLTQuODQsMi4yNS0xMiwyLjI1UzYuMzEsOC42OSw2LDhDNi4zMSw3LjE4LDEwLjcx'@;
put 'LDUuNjgsMTgsNS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRs'@;
put 'LTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0xOCwxNy41NEEzNC44'@;
put 'MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjEzLjIyYTcuMzIsNy4zMiwwLDAsMS0yLC4yOHYxLjkxQzI5LjA5LDE2LjIzLDI1LDE3LjU0LDE4LDE3LjU0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhhNDcuNjYsNDcuNjYsMCwwLDAsNy4wOS0uNTIsNy40NSw3LjQ1LDAsMCwxLTEuNTEtMS44LDQ3LjQsNDcuNCwwLDAsMS01'@;
put 'LjU4LjMyQzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjY2LDAsMy4xNi4wOCw0LjUxLjIxYTcuNTYsNy41NiwwLDAsMSwuMjktMmMtMS43LS4xNy0zLjM4LS4yNC00LjgtLjI0LTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0'@;
put 'LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTgsMjQuNTlhMjUuNSwyNS41LDAsMCwwLDIuNzUuNTlsMS4yMS0xLjQxYTI0LjEzLDI0LjEzLDAsMCwxLTQtLjgzWiIvPjxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40'@;
put 'MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5c'@;
put 'biAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgs'@;
put 'MTIsMS44OGguNTlhMy41OSwzLjU5LDAsMCwxLC4zMi0ySDE4QzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjIyLDAsMi4zNS4wNSwzLjQxLjEybDEuMS0xLjkxYy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMiwwLTE0LC45LTE0LDQuMjV2'@;
put 'MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTgsMTYuMzNWMThhNDAuODYsNDAu'@;
put 'ODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTUuNEgzMGMtLjkxLjgyLTUsMi4xMy0xMiwyLjEzQTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl'@;
put 'ZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzIuMDks'@;
put 'MjFIMzJWMTcuMzJjLTEuOSwyLjkzLTEwLjQ2LDMuMy0xNCwzLjNBNDIuNDMsNDIuNDMsMCwwLDEsOCwxOS41NlYxNy44OEE0MC41OSw0MC41OSwwLDAsMCwxOCwxOWM1LDAsMTMuMi0uODIsMTQtMy44MlYxMC43MmMtMi4yMSwzLjM2LTEwLjQ5LDMuNDYtMTQsMy40NkE0Mi4xMiw0Mi4xMiww'@;
put 'LDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRjNSwwLDEzLjI4LS44MywxNC0zLjg4VjcuODNoMGMtLjE5LTMuMjctOC44NC00LjE1LTE0LTQuMTVTNC4yMSw0LjU2LDQsNy44M0g0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3'@;
put 'YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45'@;
put 'MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgydi0yYTcuMzQsNy4z'@;
put 'NCwwLDAsMS00LjEyLDAsMzkuNDcsMzkuNDcsMCwwLDEtOS44OCwxQTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNCw0Ny43Niw0Ny43NiwwLDAsMCw3LjA5LS41MkE3LjQ1LDcuNDUsMCwwLDEsMjIuOCwzLjkyYy0xLjctLjE3LTMuMzgtLjI0'@;
put 'LTQuOC0uMjQtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4y'@;
put 'NCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+'@;
put 'XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4'@;
put 'LDE5YzQuODUsMCwxMi44LS43OSwxMy45MS0zLjYySDIyLjIzYTMuNjgsMy42OCwwLDAsMS0yLjczLTEuMjNIMThBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0aC41OWEzLjYxLDMuNjEsMCwwLDEsLjQ2LTIuMjlsMy40Ni02Yy0xLjYtLjE1'@;
put 'LTMuMTctLjIxLTQuNTEtLjIxLTUuMTQsMC0xMy43OS44OC0xNCw0LjE1SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwz'@;
put 'LjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs'@;
put 'MCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk02LDMwVjZIMzBWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz48cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMjcuMjIsMTBIMjB2NGEuOC44LDAsMSwwLDEuNTksMFYxMS42aDUuNjNh'@;
put 'LjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVj'@;
put 'dCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9'@;
put 'IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4'@;
put 'LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4'@;
put 'LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMCwxNGEuOC44LDAsMSwwLDEuNTksMFYxMS42SDI1QTcuNzQsNy43NCwwLDAsMSwyMy42NiwxMEgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgPHBh'@;
put 'dGggZD0iTTMwLDEzLjVoMFYzMEg2VjZIMjIuNVY2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3'@;
put 'LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'Mi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTQiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC02LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9Ijgu'@;
put 'MTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjYiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDZWNkgyMS4yN2wxLjE4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwy'@;
put 'LTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFM'@;
put 'MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAs'@;
put 'MiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4Ljgx'@;
put 'VjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWm0wLTZIMjBWMTBoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNC0xLjE2VjE0'@;
put 'SDIwVjEwaDMuNjZBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmE3LjM3LDcuMzcsMCwwLDEsLjI4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB'@;
put 'Ny4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRo'@;
put 'IGQ9Ik0yMi4yMywxNS40YTMuNjgsMy42OCwwLDAsMS0zLjE4LTUuNTFMMjIuNDUsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0xNywyOEg4'@;
put 'LjgxVjI2SDE3Wm0wLTRIOC44MVYyMkgxN1ptMC00SDguODFWMThIMTdabTAtNEg4LjgxVjE0SDE3Wm0wLTRIOC44MVYxMEgxN1pNMjIsMjRIMjBWMjJoMlptMC00SDIwVjE4aDJabTQsNEgyNFYyMmgyWm0wLTRIMjRWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLEYuQ2xyU2hhcGVUYXBlRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEzLjMzLDEzLjM1YTQuNTIsNC41MiwwLDEsMCw0LjUzLDQuNTJBNC41Myw0LjUzLDAsMCwwLDEzLjMzLDEzLjM1'@;
put 'Wm0wLDcuNDRhMi45MiwyLjkyLDAsMSwxLDIuOTMtMi45MkEyLjkyLDIuOTIsMCwwLDEsMTMuMzMsMjAuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNjIsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTIsNC41MkE0LjUz'@;
put 'LDQuNTMsMCwwLDAsMjMuNjIsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45Mi0yLjkyQTIuOTIsMi45MiwwLDAsMSwyMy42MiwyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik02LDExVjIzLjU1SDhWMTJIMjku'@;
put 'MzRWMTBIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG5cbiAgPHBhdGggZD0iTTguODEsMTcuODdhNC41Myw0LjUzLDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsOC44MSwxNy44N1ptNy40NSwwQTIuOTMsMi45'@;
put 'MywwLDEsMSwxMy4zMywxNSwyLjkzLDIuOTMsMCwwLDEsMTYuMjYsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE5LjEsMTcuODdhNC41Miw0LjUyLDAsMSwwLDQuNTItNC41MkE0LjUzLDQu'@;
put 'NTMsMCwwLDAsMTkuMSwxNy44N1ptNy40NCwwQTIuOTIsMi45MiwwLDEsMSwyMy42MiwxNSwyLjkyLDIuOTIsMCwwLDEsMjYuNTQsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLDEzLjIy'@;
put 'VjI4SDRWOEgyMi43OGE3LjM3LDcuMzcsMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjY1LDcuNjUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyNS41MWE3LjY2LDcuNjYsMCwwLDEtMS44NS0ySDdBMSwxLDAsMCwwLDYsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx'@;
put 'LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik03LDEwYTEsMSwwLDAsMC0xLDFW'@;
put 'MjMuNTVIOFYxMkgxOC41N0EzLjcsMy43LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMjhINFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhW'@;
put 'MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTIyLjA5LDE1LjM5YTMuNjUsMy42NSwwLDAsMS0xLjgtLjU1LDQuNTEsNC41MSww'@;
put 'LDEsMCw3LjExLjU2SDI1LjE3YTIuOTIsMi45MiwwLDEsMS0zLjA4LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywx'@;
put 'M0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMy'@;
put 'LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMCwyNEg2VjEySDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1'@;
put 'LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIzLjc5LDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDIzLjc5LDIzWm0wLTdhMiwyLDAs'@;
put 'MSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cbiAgPHBhdGggZD0iTTEyLjIxLDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDEyLjIxLDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTIuMjEsMTZa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxMy41VjI0SDZWMTJIMjUuNTFhNy40OSw3LjQ5LDAsMCwxLTMtNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDksNy40'@;
put 'OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHIt'@;
put 'aS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik03LjIsMThhNSw1LDAsMSwwLDUtNUE1LDUsMCwwLDAsNy4yLDE4Wm03LDBhMiwyLDAsMSwxLTItMkEyLDIsMCwwLDEsMTQuMjIsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4g'@;
put 'IDxwYXRoIGQ9Ik0xOC43OCwxOGE1LDUsMCwxLDAsOS4yNy0yLjZIMjIuMjNhMy43MSwzLjcxLDAsMCwxLTIuMTctLjcxQTUsNSwwLDAsMCwxOC43OCwxOFptNS0yYTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMFYyNEg2VjEySDE4LjU3YTMuNjUsMy42NSwwLDAsMSwuNDgtMi4xMUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlQW5pbWF0aW9uPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwx'@;
put 'LTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQuMjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAs'@;
put 'MTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYsMjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2'@;
put 'LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCwwLDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAs'@;
put 'MCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgsMkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksRi5DbHJTaGFwZUNpQ2Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUsNy40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45'@;
put 'MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUu'@;
put 'OTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCwwLDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCww'@;
put 'LTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4zMywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAs'@;
put 'MCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCwwLC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAt'@;
put 'LjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40'@;
put 'MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSwwLDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5'@;
put 'LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxGLkNsclNoYXBlRmlsZVNoYXJlMj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODks'@;
put 'MS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwzMFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQsMi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVs'@;
put 'LjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAs'@;
put 'MS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIu'@;
put 'MDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZWNS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxG'@;
put 'LlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOkYuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6Ri5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6Ri5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOkYuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpGLkNsclNo'@;
put 'YXBlVW5pbnN0YWxsLGxheWVyczpGLkNsclNoYXBlTGF5ZXJzLGJsb2NrOkYuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpGLkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOkYuQ2xyU2hhcGVCdW5kbGUsd2lmaTpGLkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOkYuQ2xyU2hhcGVS'@;
put 'YWNrU2VydmVyLCJoYXJkLWRpc2siOkYuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOkYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpGLkNsclNoYXBlQmFja3VwLGRldmljZXM6Ri5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6Ri5DbHJTaGFwZUtleWJvYXJkLG1vdXNl'@;
put 'OkYuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6Ri5DbHJTaGFwZURhc2hib2FyZCxob3N0OkYuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6Ri5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpGLkNsclNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6Ri5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpG'@;
put 'LkNsclNoYXBlQnVpbGRpbmcsY3B1OkYuQ2xyU2hhcGVDUFUsbWVtb3J5OkYuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6Ri5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJjZS1wb29sIjpGLkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpGLkNsclNoYXBlU2hpZWxkLCJzaGll'@;
put 'bGQtY2hlY2siOkYuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOkYuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpGLkNsclNoYXBlSW1wb3J0LGV4cG9ydDpGLkNsclNoYXBlRXhwb3J0LCJ1cGxvYWQtY2xvdWQiOkYuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOkYu'@;
put 'Q2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpGLkNsclNoYXBlUGx1Z2luLGZsb3BweTpGLkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOkYuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5OkYuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOkYuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOkYuQ2xyU2hh'@;
put 'cGVDb2RlLGFwcGxpY2F0aW9uOkYuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OkYuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpGLkNsclNoYXBlTW9iaWxlLHRhYmxldDpGLkNsclNoYXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpGLkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNl'@;
put 'dHRpbmdzIjpGLkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6Ri5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOkYuQ2xyU2hhcGVSb3V0ZXIsdm06Ri5DbHJTaGFwZVZNLCJ2bXctYXBwIjpGLkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOkYuQ2xyU2hhcGVD'@;
put 'ZXJ0aWZpY2F0ZSxhcmNoaXZlOkYuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpGLkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6Ri5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpGLkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOkYuQ2xyU2hhcGVMaW5rLHVubGluazpGLkNsclNoYXBlVW5s'@;
put 'aW5rLCJjbG91ZC1uZXR3b3JrIjpGLkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6Ri5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOkYuQ2xyU2hhcGVDbG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpGLkNsckNvbnRyb2xMdW4sZGVwbG95OkYuQ2xyU2hhcGVE'@;
put 'ZXBsb3ksaGVsaXg6Ri5DbHJTaGFwZUhlbGl4LGZsYXNrOkYuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOkYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpGLkNsclNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpGLkNsclNoYXBlSGFyZERyaXZlRGlza3Ms'@;
put 'bnZtZTpGLkNsclNoYXBlTlZNZSxzc2Q6Ri5DbHJTaGFwZVNTRCxibHVldG9vdGg6Ri5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6Ri5DbHJTaGFwZUJsdWV0b290aE9mZiwicHJvY2Vzcy1vbi12bSI6Ri5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6Ri5DbHJT'@;
put 'aGFwZUFzc2lnblVzZXIsYXRvbTpGLkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOkYuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOkYuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6Ri5DbHJTaGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6Ri5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwi'@;
put 'ZmlsZS1zaGFyZSI6Ri5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6Ri5DbHJTaGFwZVFyQ29kZSx1c2I6Ri5DbHJTaGFwZVVzYixyYWRhcjpGLkNsclNoYXBlUmFkYXIsY2FwYWNpdG9yOkYuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6Ri5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOkYuQ2xy'@;
put 'U2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpGLkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOkYuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6Ri5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpGLkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOkYuQ2xyU2hh'@;
put 'cGVOb2RlcyxuYW1lc3BhY2U6Ri5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOkYuQ2xyU2hhcGVOb2RlLHBvZDpGLkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpGLkNsclNoYXBlTWVkaWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpGLkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpGLkNsclNo'@;
put 'YXBlQW5pbWF0aW9uLCJjaS1jZCI6Ri5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6Ri5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInNlcnZlciIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXMu'@;
put 'aG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLnRlcm1pbmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25l'@;
put 'IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCx4LmRl'@;
put 'c2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCx4LmRlc2NyaXB0'@;
put 'b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50'@;
put 'cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihMZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuVGV4dEVkaXRTaGFwZXM9Ri5DbHJTaGFwZVN1cGVyc2NyaXB0PUYuQ2xyU2hhcGVTdWJzY3JpcHQ9Ri5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Ri5DbHJTaGFwZUluZGVudD1GLkNsclNoYXBlT3V0ZGVudD1GLkNsclNoYXBlSGlnaGxpZ2h0'@;
put 'ZXI9Ri5DbHJTaGFwZVRleHRDb2xvcj1GLkNsclNoYXBlTGFuZ3VhZ2U9Ri5DbHJTaGFwZUFsaWduVG9wPUYuQ2xyU2hhcGVBbGlnbk1pZGRsZT1GLkNsclNoYXBlQWxpZ25Cb3R0b209Ri5DbHJTaGFwZVVuZGVybGluZT1GLkNsclNoYXBlVGV4dD1GLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9'@;
put 'Ri5DbHJTaGFwZUJsb2NrUXVvdGU9Ri5DbHJTaGFwZVBhaW50Um9sbGVyPUYuQ2xyU2hhcGVOdW1iZXJMaXN0PUYuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PUYuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1GLkNsclNoYXBlSXRhbGljPUYuQ2xyU2hhcGVBbGlnblJpZ2h0PUYuQ2xyU2hhcGVBbGlnbkxl'@;
put 'ZnQ9Ri5DbHJTaGFwZUFsaWduQ2VudGVyPUYuQ2xyU2hhcGVGb250U2l6ZT1GLkNsclNoYXBlQ2hlY2tib3hMaXN0PUYuQ2xyU2hhcGVDZW50ZXJUZXh0PUYuQ2xyU2hhcGVCdWxsZXRMaXN0PUYuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2Vu'@;
put 'ZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVCb2xkPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4z'@;
put 'MS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEuODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEz'@;
put 'LjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLHguY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1'@;
put 'LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlh'@;
put 'MSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlQ2VudGVyVGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgs'@;
put 'OEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh'@;
put 'dGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4x'@;
put 'LDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlRm9udFNpemU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhB'@;
put 'MS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIxLDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBl'@;
put 'QWxpZ25DZW50ZXI9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSww'@;
put 'LDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQWxpZ25MZWZ0'@;
put 'PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFW'@;
put 'MjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCwwLTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUFsaWduUmlnaHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgy'@;
put 'OFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVJdGFsaWM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgy'@;
put 'LjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5D'@;
put 'bHJTaGFwZUp1c3RpZnlUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUs'@;
put 'MTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IC8+JyksRi5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYy'@;
put 'LjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwyMS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZU51bWJlckxpc3Q9KDAseC5jbHJJY29u'@;
put 'U1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQu'@;
put 'ODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgzLDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUs'@;
put 'MCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdjMC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwx'@;
put 'Ljc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEtMS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwy'@;
put 'LjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMx'@;
put 'LDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0uNywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMu'@;
put 'MywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0iNCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCww'@;
put 'LDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJsb2NrUXVvdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwx'@;
put 'LjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVh'@;
put 'NC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZI'@;
put 'MTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCwwLDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN'@;
put 'Ni43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEu'@;
put 'NDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4w'@;
put 'OCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2'@;
put 'LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwxLjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQs'@;
put 'MS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYxOUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODkt'@;
put 'NC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlVW5kZXJsaW5lPSgwLHguY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcxcy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41'@;
put 'MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCwwLDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFsaWduQm90dG9tPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2'@;
put 'SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWxpZ25NaWRkbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAs'@;
put 'MCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVBbGlnblRvcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAsMCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwx'@;
put 'LTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUxhbmd1YWdlPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQs'@;
put 'MS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEu'@;
put 'NywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjksMTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEuMi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0x'@;
put 'LDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAs'@;
put 'MTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwt'@;
put 'MC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45'@;
put 'LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVRleHRDb2xvcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEu'@;
put 'NDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAs'@;
put 'MC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0uMjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0'@;
put 'YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMsMy42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAu'@;
put 'MzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1'@;
put 'LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIg'@;
put 'd2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksRi5DbHJTaGFwZU91dGRlbnQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5'@;
put 'aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4z'@;
put 'TDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxGLkNsclNoYXBlSW5kZW50PSgwLHguY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2Ex'@;
put 'LDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksRi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEsMCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwyLjc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00'@;
put 'LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDksMTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4y'@;
put 'NywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwx'@;
put 'LjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4zOSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAs'@;
put 'MC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMy'@;
put 'LDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAsMCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIu'@;
put 'OC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEt'@;
put 'MS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAs'@;
put 'OS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVTdWJz'@;
put 'Y3JpcHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45'@;
put 'TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCwwLS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMu'@;
put 'MzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40MywzLjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwx'@;
put 'LTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwx'@;
put 'LS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQzLDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUx'@;
put 'LDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAs'@;
put 'MCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4yOSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgx'@;
put 'YTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQsMCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxGLlRleHRFZGl0U2hhcGVzPXtib2xkOkYuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6Ri5DbHJTaGFwZUJ1bGxldExpc3QsImNoZWNrYm94LWxpc3QiOkYuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpGLkNs'@;
put 'clNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpGLkNsclNoYXBlRm9udFNpemUsaXRhbGljOkYuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6Ri5DbHJTaGFwZUp1c3RpZnlUZXh0LCJjZW50ZXItdGV4dCI6Ri5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6Ri5D'@;
put 'bHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpGLkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2NrLXF1b3RlIjpGLkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OkYuQ2xyU2hhcGVUZXh0LHVuZGVybGlu'@;
put 'ZTpGLkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOkYuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6Ri5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOkYuQ2xyU2hhcGVBbGlnbkJvdHRvbSwi'@;
put 'YWxpZ24tbWlkZGxlIjpGLkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6Ri5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOkYuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6Ri5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpGLkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5k'@;
put 'ZW50OkYuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpGLkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOkYuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpGLkNsclNoYXBlU3Vic2NyaXB0LHN1cGVyc2NyaXB0OkYuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwi'@;
put 'dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLlRyYXZlbFNoYXBlcz1GLkNsclNoYXBlT25Ib2xpZGF5PUYuQ2xyU2hhcGVU'@;
put 'cmFpbGVyPUYuQ2xyU2hhcGVGZXJyeT1GLkNsclNoYXBlQ2FyYXZhbj1GLkNsclNoYXBlQ2FtcGVydmFuPUYuQ2xyU2hhcGVCb2F0PUYuQ2xyU2hhcGVCaWN5Y2xlPUYuQ2xyU2hhcGVNYXBNYXJrZXI9Ri5DbHJTaGFwZUNvbXBhc3M9Ri5DbHJTaGFwZU1hcD1GLkNsclNoYXBlQ2FyPUYuQ2xy'@;
put 'U2hhcGVBaXJwbGFuZT1GLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJh'@;
put 'dG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVUcnVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCww'@;
put 'LTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgyOHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSww'@;
put 'LDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcs'@;
put 'MGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwx'@;
put 'LDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQuNDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4z'@;
put 'OCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxGLkNsclNoYXBlQWlycGxhbmU9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCwwLDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEu'@;
put 'NDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4zOS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45'@;
put 'NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTguNSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0z'@;
put 'LjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAsMCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEuNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNhLjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDEx'@;
put 'LjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIsNi4zNloiLz4nKSxGLkNsclNoYXBlQ2FyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEs'@;
put 'MjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAsMCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwz'@;
put 'MiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUtMUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEs'@;
put 'NS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0'@;
put 'LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVh'@;
put 'Ljg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUu'@;
put 'NzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAt'@;
put 'LjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZWMTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4x'@;
put 'NSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksRi5DbHJTaGFwZU1hcD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i'@;
put 'TTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJMMTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBs'@;
put 'MTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4'@;
put 'LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIx'@;
put 'LjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMwLjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYy'@;
put 'OGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAtNkgyM1YxNmgyWiIvPicpLEYuQ2xyU2hhcGVDb21wYXNzPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdWMTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwx'@;
put 'LDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0'@;
put 'LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwuMDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2'@;
put 'TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMzLjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43'@;
put 'MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYx'@;
put 'LDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45'@;
put 'LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEuNCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4x'@;
put 'N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDksMCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5'@;
put 'LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUs'@;
put 'MTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43'@;
put 'OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5'@;
put 'OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40'@;
put 'OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwu'@;
put 'NzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9'@;
put 'IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmljeWNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUtNi4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwy'@;
put 'OS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEs'@;
put 'MTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEt'@;
put 'Ljg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwxLTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEs'@;
put 'MSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlIMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUs'@;
put 'MTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xuXHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4y'@;
put 'LTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYtMC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45'@;
put 'aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAu'@;
put 'MiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVCb2F0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEu'@;
put 'MSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywy'@;
put 'LjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwx'@;
put 'LjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMzMS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNy0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIw'@;
put 'aC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjksMTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDEx'@;
put 'LjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMw'@;
put 'LjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQsMTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEuMWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMt'@;
put 'MC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMuNSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEu'@;
put 'MWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJjMS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjct'@;
put 'MC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJj'@;
put 'MC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDIt'@;
put 'MmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQ2FtcGVydmFuPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4'@;
put 'LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41'@;
put 'LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEuNXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMs'@;
put 'MS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwx'@;
put 'aC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYy'@;
put 'MHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUsMzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAu'@;
put 'MUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41'@;
put 'LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xuXHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40'@;
put 'LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAx'@;
put 'Ni45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNhcmF2YW49KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwx'@;
put 'LjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywy'@;
put 'LDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRc'@;
put 'dGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEt'@;
put 'MS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSww'@;
put 'LjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlRmVycnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAsMCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0x'@;
put 'LjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcsMiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwy'@;
put 'Nyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIs'@;
put 'MC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNo'@;
put 'MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAtMywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2'@;
put 'NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgxOHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMs'@;
put 'MC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYsNC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4z'@;
put 'LDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAuMmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRc'@;
put 'blx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4yeiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJW'@;
put 'MTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVUcmFpbGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5'@;
put 'LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAs'@;
put 'MS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgyMlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjEx'@;
put 'aDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4y'@;
put 'LDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgs'@;
put 'MTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMy'@;
put 'LjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwxMS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAsMC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43'@;
put 'OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYs'@;
put 'Ni41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4z'@;
put 'OWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo'@;
put 'IGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwzMCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwx'@;
put 'OCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEuNDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4'@;
put 'bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNsMi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksRi5UcmF2ZWxTaGFwZXM9e3RydWNrOkYuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpGLkNsclNoYXBlQWlycGxhbmUsY2FyOkYuQ2xyU2hhcGVDYXIsbWFwOkYuQ2xyU2hhcGVNYXAsY29tcGFzczpGLkNsclNoYXBlQ29tcGFzcywibWFwLW1h'@;
put 'cmtlciI6Ri5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOkYuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6Ri5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOkYuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpGLkNsclNoYXBlQ2FyYXZhbixmZXJyeTpGLkNsclNoYXBlRmVycnksdHJhaWxlcjpGLkNsclNo'@;
put 'YXBlVHJhaWxlciwib24taG9saWRheSI6Ri5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRy'@;
put 'YXZlbFNoYXBlcywiYXV0byIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5UcmF2ZWxTaGFwZXMpfSwiLi9w'@;
put 'cm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3Jp'@;
put 'cHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTGUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3By'@;
put 'b2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFn'@;
put 'LWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihMZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuY2xySWNvblNWRz12b2lkIDA7Ri5jbHJJY29uU1ZHPWZ1bmN0aW9uIE0oTyl7dmFyIFI9IiI7cmV0dXJuIE8uaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKFIrPSJjYW4tYmFkZ2UgIiksTy5pbmRleE9mKCItLWFsZXJ0'@;
put 'ZWQiKT4tMSYmKFIrPSJjYW4tYWxlcnQgIiksTy5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoUis9Imhhcy1zb2xpZCAiKSwoUj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK1IrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0'@;
put 'IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVB'@;
put 'c3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK08rIjwvc3ZnPiJ9fX0pfSw2OTc2MDoo'@;
put 'YXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPXt9O0YucihhZSksRi5kKGFlLHthcnJheUF2ZzooKT0+T0VlLGFycmF5RWFjaDooKT0+RG4sYXJyYXlGaWx0ZXI6KCk9Pl8xLGFycmF5RmxhdHRlbjooKT0+SmVlLGFycmF5TWFwOigpPT5jcyxhcnJheU1heDooKT0+SUVlLGFycmF5TWlu'@;
put 'OigpPT5SRWUsYXJyYXlSZWR1Y2U6KCk9PkFsLGFycmF5U3VtOigpPT5YZWUsYXJyYXlVbmlxdWU6KCk9PnJOLGV4dGVuZEFycmF5OigpPT5uTixnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmlOLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5QRWUsZ2V0VW5pb25PZkFycmF5czooKT0+'@;
put 'RkVlLHBpdm90OigpPT5LYixzdHJpbmdUb0FycmF5OigpPT5vTix0bzJkQXJyYXk6KCk9PktlZX0pO3ZhciB4PXt9O0Yucih4KSxGLmQoeCx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5pdGUsaXNEZWZpbmVkOigpPT5LaSxpc0VtcHR5OigpPT5nYyxpc1JlZ0V4cDooKT0+UWVlLGlzVW5kZWZp'@;
put 'bmVkOigpPT5JYSxzdHJpbmdpZnk6KCk9Pl9sfSk7dmFyIG09e307Ri5yKG0pLEYuZChtLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5CRWUsaXNQZXJjZW50VmFsdWU6KCk9PmxOLHJhbmRvbVN0cmluZzooKT0+YU4sc2FuaXRpemU6KCk9PnJrLHN0cmlwVGFnczooKT0+dU4sc3Vic3RpdHV0ZToo'@;
put 'KT0+Y04sdG9VcHBlckNhc2VGaXJzdDooKT0+YnV9KTt2YXIgbGU9e307Ri5yKGxlKSxGLmQobGUse0hUTUxfQ0hBUkFDVEVSUzooKT0+Y3RlLGFkZENsYXNzOigpPT5waSxhZGRFdmVudDooKT0+VUVlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+Zk4sY2xvc2VzdDooKT0+TnAsY2xvc2VzdERv'@;
put 'd246KCk9PnR5LGVtcHR5OigpPT5nMixmYXN0SW5uZXJIVE1MOigpPT5nZyxmYXN0SW5uZXJUZXh0OigpPT5qcCxnZXRDYXJldFBvc2l0aW9uOigpPT5oTixnZXRDb21wdXRlZFN0eWxlOigpPT56cCxnZXRDc3NUcmFuc2Zvcm06KCk9PldFZSxnZXRGcmFtZUVsZW1lbnQ6KCk9PnN0ZSxnZXRQ'@;
put 'YXJlbnQ6KCk9Pm90ZSxnZXRQYXJlbnRXaW5kb3c6KCk9PmV5LGdldFNjcm9sbExlZnQ6KCk9PmlrLGdldFNjcm9sbFRvcDooKT0+bnksZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ6KCk9PnJ5LGdldFNjcm9sbGJhcldpZHRoOigpPT5JYyxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+dXRlLGdl'@;
put 'dFNlbGVjdGlvblRleHQ6KCk9PmR0ZSxnZXRTdHlsZTooKT0+bjcsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PnZnLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9Pm1nLGdldFdpbmRvd1Njcm9sbFRvcDooKT0+dDcsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PmpFZSxoYXNDbGFzczooKT0+'@;
put 'Qm8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+ZnRlLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5odGUsaW5kZXg6KCk9PmF0ZSxpbm5lckhlaWdodDooKT0+amYsaW5uZXJXaWR0aDooKT0+aXksaXNDaGlsZE9mOigpPT5WcCxpc0RldGFjaGVkOigpPT5nTixpc0lucHV0OigpPT5heSxp'@;
put 'c091dHNpZGVJbnB1dDooKT0+c2ssaXNWaXNpYmxlOigpPT5lNyxtYXRjaGVzQ1NTUnVsZXM6KCk9PnpFZSxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9Pmd0ZSxvZmZzZXQ6KCk9PktsLG91dGVySGVpZ2h0OigpPT5hbCxvdXRlcldpZHRoOigpPT53YSxvdmVybGF5Q29udGFpbnNF'@;
put 'bGVtZW50OigpPT5CcCxyZW1vdmVDbGFzczooKT0+V28scmVtb3ZlRXZlbnQ6KCk9PlpFZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmROLHJlc2V0Q3NzVHJhbnNmb3JtOigpPT5zeSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5wdGUsc2V0Q2FyZXRQb3NpdGlvbjooKT0+b3ksc2V0T3Zlcmxh'@;
put 'eVBvc2l0aW9uOigpPT5va30pO3ZhciBNPXt9O0YucihNKSxGLmQoTSx7Y3Vycnk6KCk9PnZ0ZSxjdXJyeVJpZ2h0OigpPT5xRWUsZGVib3VuY2U6KCk9Pm1OLGZhc3RDYWxsOigpPT5hayxpc0Z1bmN0aW9uOigpPT5SYSxwYXJ0aWFsOigpPT52TixwaXBlOigpPT4kRWUsdGhyb3R0bGU6KCk9'@;
put 'Pm10ZSx0aHJvdHRsZUFmdGVySGl0czooKT0+R0VlfSk7dmFyIE89e307Ri5yKE8pLEYuZChPLHtjbG9uZTooKT0+V3UsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5fZyxkZWVwQ2xvbmU6KCk9Pnl1LGRlZXBFeHRlbmQ6KCk9Pmx5LGRlZXBPYmplY3RTaXplOigpPT51ayxkZWZpbmVH'@;
put 'ZXR0ZXI6KCk9PmZoLGR1Y2tTY2hlbWE6KCk9PnI3LGV4dGVuZDooKT0+WGwsZ2V0UHJvcGVydHk6KCk9Pl90ZSxoYXNPd25Qcm9wZXJ0eTooKT0+YmwsaW5oZXJpdDooKT0+emYsaXNPYmplY3Q6KCk9PnVzLGlzT2JqZWN0RXF1YWw6KCk9PmxrLG1peGluOigpPT5UYSxvYmplY3RFYWNoOigp'@;
put 'PT5kcyxzZXRQcm9wZXJ0eTooKT0+Y2t9KTt2YXIgUj17fTtGLnIoUiksRi5kKFIse2lzQ2hyb21lOigpPT5fTixpc0Nocm9tZVdlYktpdDooKT0+d3RlLGlzRWRnZTooKT0+U3RlLGlzRWRnZVdlYktpdDooKT0+WEVlLGlzRmlyZWZveDooKT0+ZGssaXNGaXJlZm94V2ViS2l0OigpPT5DdGUs'@;
put 'aXNJT1M6KCk9PmJOLGlzSXBhZE9TOigpPT55Tixpc0xpbnV4T1M6KCk9PkpFZSxpc01hY09TOigpPT5oayxpc01vYmlsZUJyb3dzZXI6KCk9Pm0yLGlzU2FmYXJpOigpPT5LRWUsaXNXaW5kb3dzT1M6KCk9PndOLHNldEJyb3dzZXJNZXRhOigpPT5idGUsc2V0UGxhdGZvcm1NZXRhOigpPT55'@;
put 'dGV9KTt2YXIgej17fTtGLnIoeiksRi5kKHose0tFWV9DT0RFUzooKT0+Y28saXNDdHJsS2V5OigpPT5la2UsaXNDdHJsTWV0YUtleTooKT0+eHRlLGlzRnVuY3Rpb25LZXk6KCk9PkNOLGlzS2V5OigpPT5vNyxpc1ByaW50YWJsZUNoYXI6KCk9Pk10ZX0pO3ZhciBLPXt9O0YucihLKSxGLmQo'@;
put 'Syx7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PmJnLGlzTGVmdENsaWNrOigpPT5mayxpc1JpZ2h0Q2xpY2s6KCk9PlVwLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+djJ9KTt2YXIgTD17fTtGLnIoTCksRi5kKEwse19kYXRhVG9IVE1MOigpPT5ETixodG1sVG9Hcmlk'@;
put 'U2V0dGluZ3M6KCk9Pkl0ZSxpbnN0YW5jZVRvSFRNTDooKT0+VE59KTt2YXIgaz17fTtGLnIoayksRi5kKGsse2lzTnVtZXJpYzooKT0+R3UsaXNOdW1lcmljTGlrZTooKT0+UnRlLHJhbmdlRWFjaDooKT0+dm8scmFuZ2VFYWNoUmV2ZXJzZTooKT0+dmssdmFsdWVBY2NvcmRpbmdQZXJjZW50'@;
put 'OigpPT5MTn0pO3ZhciBFPXt9O0YucihFKSxGLmQoRSx7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PmR5LGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+VnRlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PkhOLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+eWt9KTt2YXIgaj17fTtGLnIoaiksRi5k'@;
put 'KGose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5sVixjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+dlRlLGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+Z1RlLGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+bVRlLGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+YVYsaXNBcnJh'@;
put 'eU9mQXJyYXlzOigpPT5nbmUsaXNBcnJheU9mT2JqZWN0czooKT0+bW5lLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PnBUZSxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5Na30pO3ZhciBWPXt9O0YucihWKSxGLmQoVix7Q09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5W'@;
put 'LENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+elYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+cVYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+WlYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PldWLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PllWLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdWLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PktWLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RVixDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVCLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkpWLENPTlRFWFRNRU5VX0lURU1TX0JP'@;
put 'UkRFUlNfVE9QOigpPT5YVixDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PkFWLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PlRWLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+SVYsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NP'@;
put 'TFVNTl9HUk9VUF9IRUFERVJTOigpPT5MVixDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PkRWLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+UlYsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5WVixDT05URVhUTUVOVV9JVEVNU19GUkVF'@;
put 'WkVfQ09MVU1OOigpPT5PVixDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+aUIsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PnNCLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT53VixDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PkNWLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5GVixDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJCLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+bkIsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9'@;
put 'Pl9WLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+a1YsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmpWLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PkVWLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT50QixDT05URVhUTUVOVV9J'@;
put 'VEVNU19SRU1PVkVfQ09MVU1OOigpPT5NVixDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlYsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+U1YsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5iVixDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6'@;
put 'KCk9PnlWLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5vQixDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+YUIsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+eFYsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5QVixDT05URVhUTUVOVV9JVEVN'@;
put 'U19VTk1FUkdFX0NFTExTOigpPT5IVixDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5rbmUsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+UkIsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5MQixGSUxURVJTX0JVVFRPTlNfT0s6KCk9PklCLEZJTFRFUlNfQlVUVE9OU19QTEFD'@;
put 'RUhPTERFUl9TRUFSQ0g6KCk9Pk9CLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PkZCLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+UEIsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PkRCLEZJTFRFUlNfQ09ORElUSU9OU19B'@;
put 'RlRFUjooKT0+Q0IsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+U0IsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5oQixGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+eUIsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT56VGUsRklMVEVSU19DT05E'@;
put 'SVRJT05TX0NPTlRBSU5TOigpPT5wQixGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PmxCLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmZCLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dUIsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+bUIsRklM'@;
put 'VEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+dkIsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+X0IsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+YkIsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+eWwsRklM'@;
put 'VEVSU19DT05ESVRJT05TX05PTkU6KCk9PklrLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+d0IsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5nQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5jQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VR'@;
put 'VUFMOigpPT5kQixGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1CLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+eEIsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+RUIsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PmtCLEZJTFRFUlNfRElW'@;
put 'U19GSUxURVJfQllfVkFMVUU6KCk9PkFCLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5UQixGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+UmssRklMVEVSU19OQU1FU1BBQ0U6KCk9PiR1LEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5Pa30pO3ZhciBCPXt9O2Z1'@;
put 'bmN0aW9uIFkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gWChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90'@;
put 'b3R5cGUuY29uc3RydWN0b3I9YSxhfUYucihCKSxGLmQoQix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9PmhyZX0pO2NvbnN0IFU9WChjPT5mdW5jdGlvbihhKXtjKHRoaXMpLHRoaXMubWVzc2FnZT1hP2Ake2EubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxu'@;
put 'JHthLm1hcCgoZCxoKT0+YCR7aCsxfSkgJHtkLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1hfSk7ZnVuY3Rpb24gcShjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNl'@;
put 'KGEsMSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtj'@;
put 'b25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihZKGQpKXRyeXtk'@;
put 'KCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgVT9mLmVycm9yczpbZl19Y29uc3R7X2ZpbmFsaXplcnM6aH09dGhpcztpZihoKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGNvbnN0IGYgb2YgaCl0cnl7c2UoZil9Y2F0Y2goXyl7bD1sPz9bXSxfIGluc3RhbmNlb2YgVT9sPVsuLi5sLC4u'@;
put 'Ll8uZXJyb3JzXTpsLnB1c2goXyl9fWlmKGwpdGhyb3cgbmV3IFUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZClzZShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBlZSl7aWYobC5jbG9zZWR8fGwuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47bC5fYWRkUGFy'@;
put 'ZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09PWx8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMo'@;
put 'bCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7YT09PWw/dGhpcy5fcGFyZW50YWdlPW51'@;
put 'bGw6QXJyYXkuaXNBcnJheShhKSYmcShhLGwpfXJlbW92ZShsKXtjb25zdHtfZmluYWxpemVyczphfT10aGlzO2EmJnEoYSxsKSxsIGluc3RhbmNlb2YgZWUmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19ZWUuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgZWU7cmV0dXJuIGMuY2xvc2VkPSEwLGN9'@;
put 'KSgpO2NvbnN0IHRlPWVlLkVNUFRZO2Z1bmN0aW9uIG9lKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZWV8fGMmJiJjbG9zZWQiaW4gYyYmWShjLnJlbW92ZSkmJlkoYy5hZGQpJiZZKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHNlKGMpe1koYyk/YygpOmMudW5zdWJzY3JpYmUoKX1jb25zdCBo'@;
put 'ZT17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1ZT17c2V0VGltZW91dChjLGwsLi4uYSl7Y29u'@;
put 'c3R7ZGVsZWdhdGU6ZH09dWU7cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXVlO3JldHVybihsPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkoYyl9LGRl'@;
put 'bGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gY2UoYyl7dWUuc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09aGU7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gRygpe31jb25zdCBiPU4oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIE4oYyxsLGEpe3JldHVy'@;
put 'bntraW5kOmMsdmFsdWU6bCxlcnJvcjphfX1sZXQgZz1udWxsO2Z1bmN0aW9uIEMoYyl7aWYoaGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hZztpZihsJiYoZz17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRo'@;
put 'cm93bjphLGVycm9yOmR9PWc7aWYoZz1udWxsLGEpdGhyb3cgZH19ZWxzZSBjKCl9Y2xhc3MgdiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLG9lKGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlv'@;
put 'bj1JZX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IG5lKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3hlKGZ1bmN0aW9uIEgoYyl7cmV0dXJuIE4oIk4iLGMsdm9pZCAwKX0obCksdGhpcyk6dGhpcy5fbmV4dChsKX1lcnJvcihsKXt0aGlzLmlzU3RvcHBlZD94ZShmdW5j'@;
put 'dGlvbiBEKGMpe3JldHVybiBOKCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD94ZShiLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgp'@;
put 'e3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KGwpe3RoaXMuZGVzdGluYXRpb24ubmV4dChsKX1fZXJyb3IobCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IobCl9ZmluYWxseXt0aGlzLnVu'@;
put 'c3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIHcoYyxsKXtyZXR1cm4gcC5jYWxsKGMsbCl9Y2xhc3MgSntjb25z'@;
put 'dHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7ZGUoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5'@;
put 'e2EuZXJyb3IobCl9Y2F0Y2goZCl7ZGUoZCl9ZWxzZSBkZShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtkZShhKX19fWNsYXNzIG5lIGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCl7'@;
put 'bGV0IGg7aWYoc3VwZXIoKSxZKGwpfHwhbCloPXtuZXh0Omw/P3ZvaWQgMCxlcnJvcjphPz92b2lkIDAsY29tcGxldGU6ZD8/dm9pZCAwfTtlbHNle2xldCBmO3RoaXMmJmhlLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8oZj1PYmplY3QuY3JlYXRlKGwpLGYudW5zdWJzY3JpYmU9KCk9PnRo'@;
put 'aXMudW5zdWJzY3JpYmUoKSxoPXtuZXh0OmwubmV4dCYmdyhsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmdyhsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJncobC5jb21wbGV0ZSxmKX0pOmg9bH10aGlzLmRlc3RpbmF0aW9uPW5ldyBKKGgpfX1mdW5jdGlvbiBkZShjKXtoZS51c2VE'@;
put 'ZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFMoYyl7aGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZyYmKGcuZXJyb3JUaHJvd249ITAsZy5lcnJvcj1jKX0oYyk6Y2UoYyl9ZnVuY3Rpb24geGUoYyxsKXtjb25zdHtvblN0b3BwZWRO'@;
put 'b3RpZmljYXRpb246YX09aGU7YSYmdWUuc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCBJZT17Y2xvc2VkOiEwLG5leHQ6RyxlcnJvcjpmdW5jdGlvbiBmZShjKXt0aHJvdyBjfSxjb21wbGV0ZTpHfSxGZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8'@;
put 'IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gT2UoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gV2UoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9PZToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBLZT0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBsdChjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHZ8fGZ1bmN0aW9u'@;
put 'IFFlKGMpe3JldHVybiBjJiZZKGMubmV4dCkmJlkoYy5lcnJvcikmJlkoYy5jb21wbGV0ZSl9KGMpJiZvZShjKX0oYSk/YTpuZXcgbmUoYSxkLGgpO3JldHVybiBDKCgpPT57Y29uc3R7b3BlcmF0b3I6Xyxzb3VyY2U6VH09dGhpcztmLmFkZChfP18uY2FsbChmLFQpOlQ/dGhpcy5fc3Vic2Ny'@;
put 'aWJlKGYpOnRoaXMuX3RyeVN1YnNjcmliZShmKSl9KSxmfV90cnlTdWJzY3JpYmUoYSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoYSl9Y2F0Y2goZCl7YS5lcnJvcihkKX19Zm9yRWFjaChhLGQpe3JldHVybiBuZXcoZD1ZZShkKSkoKGgsZik9Pntjb25zdCBfPW5ldyBuZSh7bmV4dDpU'@;
put 'PT57dHJ5e2EoVCl9Y2F0Y2goVyl7ZihXKSxfLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpmLGNvbXBsZXRlOmh9KTt0aGlzLnN1YnNjcmliZShfKX0pfV9zdWJzY3JpYmUoYSl7dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuc3Vic2NyaWJl'@;
put 'KGEpfVtGZV0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmEpe3JldHVybiBXZShhKSh0aGlzKX10b1Byb21pc2UoYSl7cmV0dXJuIG5ldyhhPVllKGEpKSgoZCxoKT0+e2xldCBmO3RoaXMuc3Vic2NyaWJlKF89PmY9XyxfPT5oKF8pLCgpPT5kKGYpKX0pfX1yZXR1cm4gYy5jcmVhdGU9bD0+bmV3'@;
put 'IGMobCksY30pKCk7ZnVuY3Rpb24gWWUoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1jPz9oZS5Qcm9taXNlKSYmdm9pZCAwIT09bD9sOlByb21pc2V9Y29uc3QgUGU9WChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNz'@;
put 'YWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBiZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgS2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMu'@;
put 'aGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgQWUodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgUGV9bmV4dChhKXtDKCgpPT57aWYodGhpcy5fdGhyb3dJ'@;
put 'ZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe0MoKCk9'@;
put 'PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9YTtjb25zdHtvYnNlcnZlcnM6ZH09dGhpcztmb3IoO2QubGVuZ3RoOylkLnNoaWZ0KCkuZXJyb3IoYSl9fSl9Y29tcGxldGUo'@;
put 'KXtDKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlz'@;
put 'LmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhp'@;
put 'cy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0'@;
put 'e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/dGU6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgZWUoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxxKGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVz'@;
put 'ZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3QgYT1uZXcgS2U7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcg'@;
put 'QWUobCxhKSxjfSkoKTtjbGFzcyBBZSBleHRlbmRzIGJle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5zb3VyY2U9YX1uZXh0KGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6'@;
put 'YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9'@;
put 'PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwobCl9X3N1YnNjcmliZShsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lk'@;
put 'IDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6dGV9fWNsYXNzIFRlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl92YWx1ZT1sfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3Jp'@;
put 'YmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9yOmEsX3ZhbHVlOmR9PXRoaXM7aWYobCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQo'@;
put 'dGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIHFlKGMpe3JldHVybiBZKGM/LmxpZnQpfWZ1bmN0aW9uIFhlKGMpe3JldHVybiBsPT57aWYocWUobCkpcmV0dXJuIGwubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSx0aGlzKX1jYXRjaChkKXt0aGlzLmVycm9yKGQpfX0pO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIFVlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBodChjLGwsYSxkLGgpfWNsYXNzIGh0IGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCksdGhpcy5vbkZp'@;
put 'bmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT1fLHRoaXMuX25leHQ9YT9mdW5jdGlvbihUKXt0cnl7YShUKX1jYXRjaChXKXtsLmVycm9yKFcpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihUKXt0cnl7aChUKX1jYXRjaChXKXtsLmVycm9yKFcpfWZpbmFsbHl7'@;
put 'dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKFQpe2wuZXJyb3IoVCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5z'@;
put 'aG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBNZShjLGwpe3Jl'@;
put 'dHVybiBYZSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoVWUoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1mdW5jdGlvbiBNdChjLGwsYSxkKXt2YXIgXyxoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny'@;
put 'aXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBUPWMubGVuZ3RoLTE7VD49MDtULS0pKF89Y1tUXSkmJihmPShoPDM/XyhmKTpo'@;
put 'PjM/XyhsLGEsZik6XyhsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIF90KGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgX3Q/KHRoaXMudj1jLHRoaXMpOm5ldyBfdChjKX1mdW5jdGlvbiBydChjKXtpZighU3ltYm9sLmFz'@;
put 'eW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gZnQoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSlyZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsr'@;
put 'XSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgibmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNbZl0mJmZ1bmN0aW9uKF8pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihULFcpeyFmdW5jdGlvbiBoKGYsXyxULFcpe1Byb21pc2UucmVzb2x2ZShXKS50aGVuKGZ1bmN0aW9uKGllKXtmKHt2YWx1ZTppZSxk'@;
put 'b25lOlR9KX0sXyl9KFQsVywoXz1jW2ZdKF8pKS5kb25lLF8udmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7Y29uc3QgUm49Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVu'@;
put 'Y3Rpb24gJHQoYyl7cmV0dXJuIFkoYz8udGhlbil9ZnVuY3Rpb24gRm4oYyl7cmV0dXJuIFkoY1tGZV0pfWZ1bmN0aW9uIG5pKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmWShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBsbihjKXtyZXR1cm4gbmV3IFR5cGVF'@;
put 'cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg'@;
put 'QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHFyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZ2koYyl7cmV0dXJuIFko'@;
put 'Yz8uW3FyXSl9ZnVuY3Rpb24geHIoYyl7cmV0dXJuIGZ1bmN0aW9uIE50KGMsbCxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107'@;
put 'cmV0dXJuIGg9e30sXygibmV4dCIpLF8oInRocm93IiksXygicmV0dXJuIiksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBfKEVlKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKFplKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o'@;
put 'aXQsZXQpe2YucHVzaChbRWUsWmUsaXQsZXRdKT4xfHxUKEVlLFplKX0pfSl9ZnVuY3Rpb24gVChFZSxaZSl7dHJ5eyFmdW5jdGlvbiBXKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKGllLHBlKTp3ZShmWzBdWzJdLEVlKX0oZFtF'@;
put 'ZV0oWmUpKX1jYXRjaChpdCl7d2UoZlswXVszXSxpdCl9fWZ1bmN0aW9uIGllKEVlKXtUKCJuZXh0IixFZSl9ZnVuY3Rpb24gcGUoRWUpe1QoInRocm93IixFZSl9ZnVuY3Rpb24gd2UoRWUsWmUpe0VlKFplKSxmLnNoaWZ0KCksZi5sZW5ndGgmJlQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMs'@;
put 'YXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgX3QoYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIF90KHZvaWQgMCk7eWllbGQgeWllbGQgX3QoZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9j'@;
put 'aygpfX0pfWZ1bmN0aW9uIFVpKGMpe3JldHVybiBZKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gS3IoYyl7aWYoYyBpbnN0YW5jZW9mIEtlKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKEZuKGMpKXJldHVybiBmdW5jdGlvbiBubyhjKXtyZXR1cm4gbmV3IEtlKGw9Pntjb25zdCBhPWNbRmVdKCk7'@;
put 'aWYoWShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIEhyKGMpe3Jl'@;
put 'dHVybiBuZXcgS2UobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gcWkoYyl7cmV0dXJuIG5ldyBLZShsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChh'@;
put 'KSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsY2UpfSl9KGMpO2lmKG5pKGMpKXJldHVybiBhbyhjKTtpZihnaShjKSlyZXR1cm4gZnVuY3Rpb24gSmkoYyl7cmV0dXJuIG5ldyBLZShsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0'@;
put 'dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihVaShjKSlyZXR1cm4gZnVuY3Rpb24gcm8oYyl7cmV0dXJuIGFvKHhyKGMpKX0oYyl9dGhyb3cgbG4oYyl9ZnVuY3Rpb24gYW8oYyl7cmV0dXJuIG5ldyBLZShsPT57KGZ1bmN0aW9uIGlvKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IFduKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsXyl7ZnVuY3Rpb24gVChwZSl7dHJ5e2llKGQubmV4dChwZSkpfWNhdGNoKHdlKXtfKHdlKX19ZnVuY3Rpb24gVyhwZSl7dHJ5e2llKGQudGhyb3cocGUpKX1jYXRjaCh3ZSl7Xyh3ZSl9fWZ1bmN0aW9u'@;
put 'IGllKHBlKXtwZS5kb25lP2YocGUudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24oXyl7XyhmKX0pfShwZS52YWx1ZSkudGhlbihULFcpfWllKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1ydChjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2goXyl7aD17ZXJyb3I6X319ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEp'@;
put 'KX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gR2koYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxk'@;
put 'KSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiB5cihjLGwsYT0xLzApe3JldHVybiBZKGwpP3lyKChkLGgpPT5NZSgoZixfKT0+bChkLGYsaCxfKSkoS3IoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksWGUoKGQs'@;
put 'aCk9PmZ1bmN0aW9uIGhvKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1bXTtsZXQgaWU9MCxwZT0wLHdlPSExO2NvbnN0IEVlPSgpPT57d2UmJiFXLmxlbmd0aCYmIWllJiZsLmNvbXBsZXRlKCl9LFplPWV0PT5pZTxkP2l0KGV0KTpXLnB1c2goZXQpLGl0PWV0PT57ZiYmbC5uZXh0KGV0KSxp'@;
put 'ZSsrO2xldCB5dD0hMTtLcihhKGV0LHBlKyspKS5zdWJzY3JpYmUoVWUobCxFdD0+e2g/LihFdCksZj9aZShFdCk6bC5uZXh0KEV0KX0sKCk9Pnt5dD0hMH0sdm9pZCAwLCgpPT57aWYoeXQpdHJ5e2ZvcihpZS0tO1cubGVuZ3RoJiZpZTxkOyl7Y29uc3QgRXQ9Vy5zaGlmdCgpO18/R2kobCxf'@;
put 'LCgpPT5pdChFdCkpOml0KEV0KX1FZSgpfWNhdGNoKEV0KXtsLmVycm9yKEV0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZShVZShsLFplLCgpPT57d2U9ITAsRWUoKX0pKSwoKT0+e1Q/LigpfX0oZCxoLGMsYSkpKX1mdW5jdGlvbiBQaShjPTEvMCl7cmV0dXJuIHlyKE9lLGMpfWNvbnN0IElv'@;
put 'PW5ldyBLZShjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIFJjKGMpe3JldHVybiBjJiZZKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIHVsKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIE9jKGMpe3JldHVybiBZKHVsKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBOMChjKXtyZXR1'@;
put 'cm4gUmModWwoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGsyKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PnthLnN1YnNjcmliZShVZShkLGg9PkdpKGQsYywoKT0+ZC5uZXh0KGgpLGwpLCgpPT5HaShkLGMsKCk9PmQuY29tcGxldGUoKSxsKSxoPT5HaShkLGMsKCk9PmQuZXJyb3IoaCks'@;
put 'bCkpKX0pfWZ1bmN0aW9uIGUwKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiBBMihjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEtl'@;
put 'KGE9PntHaShhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7R2koYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIGVhKGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24g'@;
put 'UGgoYyxsKXtpZihudWxsIT1jKXtpZihGbihjKSlyZXR1cm4gZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVs'@;
put 'ZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gZnMoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYo'@;
put 'bmkoYykpcmV0dXJuIEEyKGMsbCk7aWYoZ2koYykpcmV0dXJuIGZ1bmN0aW9uIFNyKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ7cmV0dXJuIEdpKGEsbCwoKT0+e2Q9Y1txcl0oKSxHaShhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2go'@;
put 'Xyl7cmV0dXJuIHZvaWQgYS5lcnJvcihfKX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PlkoZD8ucmV0dXJuKSYmZC5yZXR1cm4oKX0pfShjLGwpO2lmKFVpKGMpKXJldHVybiBmdW5jdGlvbiBhMyhjLGwpe3JldHVybiBBMih4cihjKSxsKX0oYyxsKX10aHJvdyBsbihj'@;
put 'KX0oYyxsKTpLcihjKX1mdW5jdGlvbiBpcyguLi5jKXtjb25zdCBsPU4wKGMpLGE9ZnVuY3Rpb24gczMoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHVsKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP0tyKGRbMF0pOlBpKGEpKGVhKGQs'@;
put 'bCkpOklvfWZ1bmN0aW9uIFdpKC4uLmMpe3JldHVybiBlYShjLE4wKGMpKX1mdW5jdGlvbiAkYShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBiZSkscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVy'@;
put 'biBmPT57bGV0IF8sVCxXLGllPTAscGU9ITEsd2U9ITE7Y29uc3QgRWU9KCk9PntUPy51bnN1YnNjcmliZSgpLFQ9dm9pZCAwfSxaZT0oKT0+e0VlKCksXz1XPXZvaWQgMCxwZT13ZT0hMX0saXQ9KCk9Pntjb25zdCBldD1fO1plKCksZXQ/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBYZSgoZXQs'@;
put 'eXQpPT57aWUrKywhd2UmJiFwZSYmRWUoKTtjb25zdCBFdD1XPVc/P2woKTt5dC5hZGQoKCk9PntpZS0tLDA9PT1pZSYmIXdlJiYhcGUmJihUPXQwKGl0LGgpKX0pLEV0LnN1YnNjcmliZSh5dCksIV8mJmllPjAmJihfPW5ldyBuZSh7bmV4dDpTdD0+RXQubmV4dChTdCksZXJyb3I6U3Q9Pnt3'@;
put 'ZT0hMCxFZSgpLFQ9dDAoWmUsYSxTdCksRXQuZXJyb3IoU3QpfSxjb21wbGV0ZTooKT0+e3BlPSEwLEVlKCksVD10MChaZSxkKSxFdC5jb21wbGV0ZSgpfX0pLEtyKGV0KS5zdWJzY3JpYmUoXykpfSkoZil9fWZ1bmN0aW9uIHQwKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygp'@;
put 'O2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgbmUoe25leHQ6KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBLcihsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gU2EoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD1udWxsLGY9MCxfPSExO2NvbnN0IFQ9KCk9'@;
put 'Pl8mJiFoJiZkLmNvbXBsZXRlKCk7YS5zdWJzY3JpYmUoVWUoZCxXPT57aD8udW5zdWJzY3JpYmUoKTtsZXQgaWU9MDtjb25zdCBwZT1mKys7S3IoYyhXLHBlKSkuc3Vic2NyaWJlKGg9VWUoZCx3ZT0+ZC5uZXh0KGw/bChXLHdlLHBlLGllKyspOndlKSwoKT0+e2g9bnVsbCxUKCl9KSl9LCgp'@;
put 'PT57Xz0hMCxUKCl9KSl9KX1mdW5jdGlvbiBFdShjLGwpe3JldHVybiBjPT09bH1mdW5jdGlvbiBBcyhjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09QXMpcmV0dXJuIGw7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1m'@;
put 'dW5jdGlvbiBuMChjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIHFhKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitj'@;
put 'Lm1hcChxYSkuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1cm5gJHtjLm5hbWV9YDtjb25zdCBsPWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7'@;
put 'Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiBfYyhjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6bDpudWxsPT1sfHwiIj09PWw/YzpjKyIgIitsfWNvbnN0IEhoPUFzKHtfX2ZvcndhcmRfcmVmX186'@;
put 'QXN9KTtmdW5jdGlvbiBMcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189THMsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBxYSh0aGlzKCkpfSxjfWZ1bmN0aW9uIGJvKGMpe3JldHVybiByMChjKT9jKCk6Y31mdW5jdGlvbiByMChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'YyYmYy5oYXNPd25Qcm9wZXJ0eShIaCkmJmMuX19mb3J3YXJkX3JlZl9fPT09THN9ZnVuY3Rpb24gVDIoYyl7cmV0dXJuIGMmJiEhYy5cdTAyNzVwcm92aWRlcnN9Y29uc3QgbDM9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiO2NsYXNzIEFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0'@;
put 'b3IobCxhKXtzdXBlcihmdW5jdGlvbiBiYyhjLGwpe3JldHVybmBORzAke01hdGguYWJzKGMpfSR7bD8iOiAiK2w6IiJ9YH0obCxhKSksdGhpcy5jb2RlPWx9fWZ1bmN0aW9uIGtvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIFFp'@;
put 'KGMsbCl7dGhyb3cgbmV3IEFyKC0yMDEsITEpfWZ1bmN0aW9uIHByKGMsbCl7bnVsbD09YyYmZnVuY3Rpb24gSG8oYyxsLGEsZCl7dGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7Y31gKyhudWxsPT1kPyIiOmAgW0V4cGVjdGVkPT4gJHthfSAke2R9ICR7bH0gPD1BY3R1YWxd'@;
put 'YCkpfShsLGMsbnVsbCwiIT0iKX1mdW5jdGlvbiBocihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIG1pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtd'@;
put 'LGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24geGQoYyl7cmV0dXJuIEIwKGMsYzMpfHxCMChjLE5zKX1mdW5jdGlvbiBCMChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVsbH1mdW5jdGlvbiBubShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoamgp'@;
put 'fHxjLmhhc093blByb3BlcnR5KEs3KSk/Y1tqaF06bnVsbH1jb25zdCBjMz1Bcyh7XHUwMjc1cHJvdjpBc30pLGpoPUFzKHtcdTAyNzVpbmo6QXN9KSxOcz1Bcyh7bmdJbmplY3RhYmxlRGVmOkFzfSksSzc9QXMoe25nSW5qZWN0b3JEZWY6QXN9KTt2YXIgbnM9ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KG5zfHx7fSk7bGV0IGg0O2Z1bmN0aW9uIGRpKGMpe2NvbnN0IGw9aDQ7cmV0'@;
put 'dXJuIGg0PWMsbH1mdW5jdGlvbiBXcyhjLGwsYSl7Y29uc3QgZD14ZChjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6YSZucy5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIFFpKHFhKGMp'@;
put 'KX1jb25zdCBPaT0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNl'@;
put 'b2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksczA9e30sazE9Il9fTkdfRElfRkxBR19fIixrdT0ibmdUZW1wVG9rZW5QYXRoIixyYz0vXG4vZ20sb209Il9fc291cmNlIjtsZXQga2Q7ZnVuY3Rpb24gQTEoYyl7Y29uc3QgbD1rZDtyZXR1cm4ga2Q9YyxsfWZ1bmN0aW9uIFg3KGMsbD1u'@;
put 'cy5EZWZhdWx0KXtpZih2b2lkIDA9PT1rZCl0aHJvdyBuZXcgQXIoLTIwMywhMSk7cmV0dXJuIG51bGw9PT1rZD9XcyhjLHZvaWQgMCxsKTprZC5nZXQoYyxsJm5zLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfWZ1bmN0aW9uIGFyKGMsbD1ucy5EZWZhdWx0KXtyZXR1cm4oZnVuY3Rpb24gc3Mo'@;
put 'KXtyZXR1cm4gaDR9KCl8fFg3KShibyhjKSxsKX1mdW5jdGlvbiBGaShjLGw9bnMuRGVmYXVsdCl7cmV0dXJuIGFyKGMsYTAobCkpfWZ1bmN0aW9uIGEwKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOjB8KGMub3B0aW9uYWwmJjgpfChjLmhvc3QmJjEpfChj'@;
put 'LnNlbGYmJjIpfChjLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBLYyhjKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWJvKGNbYV0pO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDA9PT1kLmxlbmd0aCl0aHJvdyBuZXcgQXIoOTAwLCExKTtsZXQgaCxmPW5z'@;
put 'LkRlZmF1bHQ7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZFtfXSxXPXNtKFQpOyJudW1iZXIiPT10eXBlb2YgVz8tMT09PVc/aD1ULnRva2VuOmZ8PVc6aD1UfWwucHVzaChhcihoLGYpKX1lbHNlIGwucHVzaChhcihkKSl9cmV0dXJuIGx9ZnVuY3Rpb24gemgoYyxsKXty'@;
put 'ZXR1cm4gY1trMV09bCxjLnByb3RvdHlwZVtrMV09bCxjfWZ1bmN0aW9uIHNtKGMpe3JldHVybiBjW2sxXX1mdW5jdGlvbiBkdShjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX12YXIgVDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5PblB1c2g9MF09Ik9uUHVzaCIsY1tjLkRlZmF1'@;
put 'bHQ9MV09IkRlZmF1bHQiLGN9KFQxfHx7fSksUGM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLGNbYy5Ob25lPTJdPSJOb25lIixjW2MuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLGN9KFBjfHx7fSk7Y29uc3QgWGM9e30sU3M9W10sVGQ9QXMoe1x1MDI3'@;
put 'NWNtcDpBc30pLFVoPUFzKHtcdTAyNzVkaXI6QXN9KSxKYz1Bcyh7XHUwMjc1cGlwZTpBc30pLEQxPUFzKHtcdTAyNzVtb2Q6QXN9KSxsMD1Bcyh7XHUwMjc1ZmFjOkFzfSksWmg9QXMoe19fTkdfRUxFTUVOVF9JRF9fOkFzfSksbWE9QXMoe19fTkdfRU5WX0lEX186QXN9KTtmdW5jdGlvbiBG'@;
put 'YyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4g'@;
put 'aH1hPWgrMX19ZnVuY3Rpb24gRGQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLF89YVtkKytdLFQ9YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsXyxULGYp'@;
put 'fWVsc2V7Y29uc3QgZj1oLF89YVsrK2RdO2Y0KGYpP2Muc2V0UHJvcGVydHkobCxmLF8pOmMuc2V0QXR0cmlidXRlKGwsZixfKSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIFIyKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGY0KGMpe3JldHVybiA2ND09PWMuY2hhckNv'@;
put 'ZGVBdCgwKX1mdW5jdGlvbiBZaChjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9'@;
put 'aDowPT09YXx8cDQoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gcDQoYyxsLGEsZCxoKXtsZXQgZj0wLF89Yy5sZW5ndGg7aWYoLTE9PT1sKV89LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZisrXTtpZigibnVtYmVy'@;
put 'Ij09dHlwZW9mIFQpe2lmKFQ9PT1sKXtfPS0xO2JyZWFrfWlmKFQ+bCl7Xz1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBUKWJyZWFrO2lmKFQ9PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisx'@;
put 'XT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PV8mJihjLnNwbGljZShfLDAsbCksZj1fKzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5z'@;
put 'cGxpY2UoZisrLDAsaCl9Y29uc3QgZzQ9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBKNyhjLGwsYSl7bGV0IGQ9MCxoPSEwO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZCsrXTtpZigic3RyaW5nIj09dHlwZW9mIGYmJmgpe2NvbnN0IF89Y1tkKytdO2lmKGEmJiJjbGFzcyI9PT1mJiYtMSE9'@;
put 'PUZjKF8udG9Mb3dlckNhc2UoKSxsLDApKXJldHVybiEwfWVsc2V7aWYoMT09PWYpe2Zvcig7ZDxjLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihmPWNbZCsrXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWwpcmV0dXJuITA7cmV0dXJuITF9Im51bWJlciI9PXR5cGVvZiBmJiYoaD0hMSl9fXJl'@;
put 'dHVybiExfWZ1bmN0aW9uIHUzKGMpe3JldHVybiA0PT09Yy50eXBlJiZjLnZhbHVlIT09ZzR9ZnVuY3Rpb24gTWEoYyxsLGEpe3JldHVybiBsPT09KDQhPT1jLnR5cGV8fGE/Yy52YWx1ZTpnNCl9ZnVuY3Rpb24gYzAoYyxsLGEpe2xldCBkPTQ7Y29uc3QgaD1jLmF0dHJzfHxbXSxmPWZ1bmN0'@;
put 'aW9uIFE3KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKFIyKGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk7bGV0IF89ITE7Zm9yKGxldCBUPTA7VDxsLmxlbmd0aDtUKyspe2NvbnN0IFc9bFtUXTtpZigibnVtYmVyIiE9dHlwZW9mIFcpe2lmKCFfKWlmKDQmZCl7'@;
put 'aWYoZD0yfDEmZCwiIiE9PVcmJiFNYShjLFcsYSl8fCIiPT09VyYmMT09PWwubGVuZ3RoKXtpZihIYyhkKSlyZXR1cm4hMTtfPSEwfX1lbHNle2NvbnN0IGllPTgmZD9XOmxbKytUXTtpZig4JmQmJm51bGwhPT1jLmF0dHJzKXtpZighSjcoYy5hdHRycyxpZSxhKSl7aWYoSGMoZCkpcmV0dXJu'@;
put 'ITE7Xz0hMH1jb250aW51ZX1jb25zdCB3ZT1kMyg4JmQ/ImNsYXNzIjpXLGgsdTMoYyksYSk7aWYoLTE9PT13ZSl7aWYoSGMoZCkpcmV0dXJuITE7Xz0hMDtjb250aW51ZX1pZigiIiE9PWllKXtsZXQgRWU7RWU9d2U+Zj8iIjpoW3dlKzFdLnRvTG93ZXJDYXNlKCk7Y29uc3QgWmU9OCZkP0Vl'@;
put 'Om51bGw7aWYoWmUmJi0xIT09RmMoWmUsaWUsMCl8fDImZCYmaWUhPT1FZSl7aWYoSGMoZCkpcmV0dXJuITE7Xz0hMH19fX1lbHNle2lmKCFfJiYhSGMoZCkmJiFIYyhXKSlyZXR1cm4hMTtpZihfJiZIYyhXKSljb250aW51ZTtfPSExLGQ9V3wxJmR9fXJldHVybiBIYyhkKXx8X31mdW5jdGlv'@;
put 'biBIYyhjKXtyZXR1cm4gMD09KDEmYyl9ZnVuY3Rpb24gZDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3QgXz1sW2hdO2lmKF89PT1jKXJldHVybiBoO2lmKDM9PT1ffHw2PT09XylmPSEwO2Vs'@;
put 'c2V7aWYoMT09PV98fDI9PT1fKXtsZXQgVD1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIFQ7KVQ9bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT1fKWJyZWFrO2lmKDA9PT1fKXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gZTkoYyxsKXtsZXQgYT1j'@;
put 'LmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBtNChjLGwsYT0hMSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0'@;
put 'aDtkKyspaWYoYzAoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHY0KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKGNbaF0hPT1kW2hd'@;
put 'KWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGRsKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBhbShjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCBfPWNbYV07aWYoInN0cmluZyI9'@;
put 'PXR5cGVvZiBfKWlmKDImZCl7Y29uc3QgVD1jWysrYV07aCs9IlsiK18rKFQubGVuZ3RoPjA/Jz0iJytUKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIitfOjQmZCYmKGgrPSIgIitfKTtlbHNlIiIhPT1oJiYhSGMoXykmJihsKz1kbChmLGgpLGg9IiIpLGQ9XyxmPWZ8fCFIYyhkKTthKyt9'@;
put 'cmV0dXJuIiIhPT1oJiYobCs9ZGwoZixoKSksbH1mdW5jdGlvbiB3cihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3Rv'@;
put 'cnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09VDEuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3Rvcjpu'@;
put 'dWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fFBjLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8U3MsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O2NtKGEpO2NvbnN0'@;
put 'IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1mMyhkLCExKSxhLnBpcGVEZWZzPWYzKGQsITApLGEuaWQ9ZnVuY3Rpb24gcjkoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLGMu'@;
put 'Y29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYy50eXBlLnByb3RvdHlw'@;
put 'ZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKTw8MDtyZXR1cm4gbCs9MjE0NzQ4MzY0OCwiYyIrbH0oYSksYX0pfWZ1bmN0aW9uIHk0KGMpe3JldHVybiBRbyhjKXx8'@;
put 'S2EoYyl9ZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGwhPT1jfWZ1bmN0aW9uIHZpKGMpe3JldHVybiBkdSgoKT0+KHt0eXBlOmMudHlwZSxib290c3RyYXA6Yy5ib290c3RyYXB8fFNzLGRlY2xhcmF0aW9uczpjLmRlY2xhcmF0aW9uc3x8U3MsaW1wb3J0czpjLmltcG9ydHN8fFNzLGV4cG9y'@;
put 'dHM6Yy5leHBvcnRzfHxTcyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLGlkOmMuaWR8fG51bGx9KSl9ZnVuY3Rpb24gaDMoYyxsKXtpZihudWxsPT1jKXJldHVybiBYYztjb25zdCBhPXt9O2Zvcihjb25zdCBkIGluIGMpaWYoYy5oYXNPd25Q'@;
put 'cm9wZXJ0eShkKSl7bGV0IGg9Y1tkXSxmPWg7QXJyYXkuaXNBcnJheShoKSYmKGY9aFsxXSxoPWhbMF0pLGFbaF09ZCxsJiYobFtoXT1mKX1yZXR1cm4gYX1mdW5jdGlvbiBDcihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpO3JldHVybiBjbShsKSxsfSl9ZnVuY3Rpb24gTmEoYyl7'@;
put 'cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFFvKGMpe3JldHVybiBjW1RkXXx8'@;
put 'bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tVaF18fG51bGx9ZnVuY3Rpb24gT2woYyl7cmV0dXJuIGNbSmNdfHxudWxsfWZ1bmN0aW9uIE5jKGMsbCl7Y29uc3QgYT1jW0QxXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke3FhKGMpfSBkb2VzIG5vdCBo'@;
put 'YXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEM0KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhv'@;
put 'c3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fFhjLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGws'@;
put 'c3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8U3Msdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURl'@;
put 'ZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpoMyhjLmlucHV0cyxsKSxvdXRwdXRzOmgzKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGNtKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZjMoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/T2w6'@;
put 'eTQ7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihsbSl9Y29uc3QgSGk9MCxCaT0xLERvPTIsdWE9MyxYYT00LEwxPTUsem89NixUdT03LFZhPTgsSWQ9OSxJMT0xMCxWbz0xMSxHaD0xMixTND0xMyxQbD0xNCxKYT0xNSxPMj0xNixQ'@;
put 'Mj0xNyxodT0xOCwkaD0xOSxSMT0yMCxPMT0yMSx1MD0yMixwMz0yMyxnMz0yNCxwcz0yNSxNND0xLHVtPTIsZDA9NyxIMj05LGljPTExO2Z1bmN0aW9uIFNjKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbTTRdfWZ1bmN0aW9uIG9jKGMpe3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KGMpJiYhMD09PWNbTTRdfWZ1bmN0aW9uIE9kKGMpe3JldHVybiAwIT0oNCZjLmZsYWdzKX1mdW5jdGlvbiBQMShjKXtyZXR1cm4gYy5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gcWgoYyl7cmV0dXJuIDE9PSgxJmMuZmxhZ3MpfWZ1bmN0aW9uIFFjKGMpe3JldHVy'@;
put 'biEhYy50ZW1wbGF0ZX1mdW5jdGlvbiB4NChjKXtyZXR1cm4gMCE9KDUxMiZjW0RvXSl9ZnVuY3Rpb24gSDEoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShsMCk/Y1tsMF06bnVsbH1sZXQgSGQ9T2kuV2Vha1JlZj8/Y2xhc3MgajB7Y29uc3RydWN0b3IobCl7dGhpcy5yZWY9bH1kZXJl'@;
put 'Zigpe3JldHVybiB0aGlzLnJlZn19LG1tPTAsRHU9bnVsbCxtMz0hMTtmdW5jdGlvbiBmbChjKXtjb25zdCBsPUR1O3JldHVybiBEdT1jLGx9Y2xhc3MgdjN7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1tKyssdGhpcy5yZWY9ZnVuY3Rpb24gTjIoYyl7cmV0dXJuIG5ldyBIZChjKX0odGhpcyks'@;
put 'dGhpcy5wcm9kdWNlcnM9bmV3IE1hcCx0aGlzLmNvbnN1bWVycz1uZXcgTWFwLHRoaXMudHJhY2tpbmdWZXJzaW9uPTAsdGhpcy52YWx1ZVZlcnNpb249MH1jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKXtmb3IoY29uc3RbbCxhXW9mIHRoaXMucHJvZHVjZXJzKXtjb25zdCBkPWEu'@;
put 'cHJvZHVjZXJOb2RlLmRlcmVmKCk7aWYobnVsbCE9ZCYmYS5hdFRyYWNraW5nVmVyc2lvbj09PXRoaXMudHJhY2tpbmdWZXJzaW9uKXtpZihkLnByb2R1Y2VyUG9sbFN0YXR1cyhhLnNlZW5WYWx1ZVZlcnNpb24pKXJldHVybiEwfWVsc2UgdGhpcy5wcm9kdWNlcnMuZGVsZXRlKGwpLGQ/LmNv'@;
put 'bnN1bWVycy5kZWxldGUodGhpcy5pZCl9cmV0dXJuITF9cHJvZHVjZXJNYXlIYXZlQ2hhbmdlZCgpe2NvbnN0IGw9bTM7bTM9ITA7dHJ5e2Zvcihjb25zdFthLGRdb2YgdGhpcy5jb25zdW1lcnMpe2NvbnN0IGg9ZC5jb25zdW1lck5vZGUuZGVyZWYoKTtudWxsIT1oJiZoLnRyYWNraW5nVmVy'@;
put 'c2lvbj09PWQuYXRUcmFja2luZ1ZlcnNpb24/aC5vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCk6KHRoaXMuY29uc3VtZXJzLmRlbGV0ZShhKSxoPy5wcm9kdWNlcnMuZGVsZXRlKHRoaXMuaWQpKX19ZmluYWxseXttMz1sfX1wcm9kdWNlckFjY2Vzc2VkKCl7aWYobTMpdGhy'@;
put 'b3cgbmV3IEVycm9yKCIiKTtpZihudWxsPT09RHUpcmV0dXJuO2xldCBsPUR1LnByb2R1Y2Vycy5nZXQodGhpcy5pZCk7dm9pZCAwPT09bD8obD17Y29uc3VtZXJOb2RlOkR1LnJlZixwcm9kdWNlck5vZGU6dGhpcy5yZWYsc2VlblZhbHVlVmVyc2lvbjp0aGlzLnZhbHVlVmVyc2lvbixhdFRy'@;
put 'YWNraW5nVmVyc2lvbjpEdS50cmFja2luZ1ZlcnNpb259LER1LnByb2R1Y2Vycy5zZXQodGhpcy5pZCxsKSx0aGlzLmNvbnN1bWVycy5zZXQoRHUuaWQsbCkpOihsLnNlZW5WYWx1ZVZlcnNpb249dGhpcy52YWx1ZVZlcnNpb24sbC5hdFRyYWNraW5nVmVyc2lvbj1EdS50cmFja2luZ1ZlcnNp'@;
put 'b24pfWdldCBoYXNQcm9kdWNlcnMoKXtyZXR1cm4gdGhpcy5wcm9kdWNlcnMuc2l6ZT4wfWdldCBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCl7cmV0dXJuITEhPT1EdT8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31wcm9kdWNlclBvbGxTdGF0dXMobCl7cmV0dXJuIHRoaXMudmFsdWVWZXJz'@;
put 'aW9uIT09bHx8KHRoaXMub25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpLHRoaXMudmFsdWVWZXJzaW9uIT09bCl9fWxldCBJdT1udWxsO2Z1bmN0aW9uIEtoKGMpe2NvbnN0IGw9ZmwobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtmbChsKX19Y29uc3QgVTA9KCk9Pnt9O2NsYXNz'@;
put 'IF9tIGV4dGVuZHMgdjN7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy53YXRjaD1sLHRoaXMuc2NoZWR1bGU9YSx0aGlzLmRpcnR5PSExLHRoaXMuY2xlYW51cEZuPVUwLHRoaXMucmVnaXN0ZXJPbkNsZWFudXA9aD0+e3RoaXMuY2xlYW51cEZuPWh9LHRoaXMuY29uc3VtZXJBbGxv'@;
put 'd1NpZ25hbFdyaXRlcz1kfW5vdGlmeSgpe3RoaXMuZGlydHl8fHRoaXMuc2NoZWR1bGUodGhpcyksdGhpcy5kaXJ0eT0hMH1vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCl7dGhpcy5ub3RpZnkoKX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fXJ1bigpe2lmKHRo'@;
put 'aXMuZGlydHk9ITEsMCE9PXRoaXMudHJhY2tpbmdWZXJzaW9uJiYhdGhpcy5jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKSlyZXR1cm47Y29uc3QgbD1mbCh0aGlzKTt0aGlzLnRyYWNraW5nVmVyc2lvbisrO3RyeXt0aGlzLmNsZWFudXBGbigpLHRoaXMuY2xlYW51cEZuPVUwLHRo'@;
put 'aXMud2F0Y2godGhpcy5yZWdpc3Rlck9uQ2xlYW51cCl9ZmluYWxseXtmbChsKX19Y2xlYW51cCgpe3RoaXMuY2xlYW51cEZuKCl9fWNsYXNzIG05e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnByZXZpb3VzVmFsdWU9bCx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RDaGFuZ2U9ZH1p'@;
put 'c0ZpcnN0Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIHZhKCl7cmV0dXJuIFQ0fWZ1bmN0aW9uIFQ0KGMpe3JldHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD1fOSksdjl9ZnVuY3Rpb24gdjkoKXtjb25zdCBjPWJtKHRoaXMp'@;
put 'LGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PVhjKWMucHJldmlvdXM9bDtlbHNlIGZvcihsZXQgZCBpbiBsKWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiBfOShjLGwsYSxkKXtjb25zdCBoPXRoaXMuZGVj'@;
put 'bGFyZWRJbnB1dHNbYV0sZj1ibShjKXx8ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gY1tIbF09bH0oYyx7cHJldmlvdXM6WGMsY3VycmVudDpudWxsfSksXz1mLmN1cnJlbnR8fChmLmN1cnJlbnQ9e30pLFQ9Zi5wcmV2aW91cyxXPVRbaF07X1toXT1uZXcgbTkoVyYmVy5jdXJyZW50VmFsdWUs'@;
put 'bCxUPT09WGMpLGNbZF09bH12YS5uZ0luaGVyaXQ9ITA7Y29uc3QgSGw9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIGJtKGMpe3JldHVybiBjW0hsXXx8bnVsbH1jb25zdCBoMD1mdW5jdGlvbihjLGwsYSl7fTtmdW5jdGlvbiBfYShjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9'@;
put 'Y1tIaV07cmV0dXJuIGN9ZnVuY3Rpb24gWTAoYyxsKXtyZXR1cm4gX2EobFtjXSl9ZnVuY3Rpb24gTmwoYyxsKXtyZXR1cm4gX2EobFtjLmluZGV4XSl9ZnVuY3Rpb24ga2UoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gbXQoYyxs'@;
put 'KXtjb25zdCBhPWxbY107cmV0dXJuIFNjKGEpP2E6YVtIaV19ZnVuY3Rpb24gRHIoYyxsKXtyZXR1cm4gbnVsbD09bD9udWxsOmNbbF19ZnVuY3Rpb24geW8oYyl7Y1tQMl09MH1mdW5jdGlvbiBlcyhjKXsxMDI0JmNbRG9dfHwoY1tEb118PTEwMjQsc2MoYywxKSl9ZnVuY3Rpb24genMoYyl7'@;
put 'MTAyNCZjW0RvXSYmKGNbRG9dJj0tMTAyNSxzYyhjLC0xKSl9ZnVuY3Rpb24gc2MoYyxsKXtsZXQgYT1jW3VhXTtpZihudWxsPT09YSlyZXR1cm47YVtMMV0rPWw7bGV0IGQ9YTtmb3IoYT1hW3VhXTtudWxsIT09YSYmKDE9PT1sJiYxPT09ZFtMMV18fC0xPT09bCYmMD09PWRbTDFdKTspYVtM'@;
put 'MV0rPWwsZD1hLGE9YVt1YV19Y29uc3QgUG89e2xGcmFtZTpadyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBQdygpe3JldHVybiBQby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdzMoKXtyZXR1cm4gbnVsbCE9PVBvLnNr'@;
put 'aXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUG8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIFRzKCl7cmV0dXJuIFBvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBCdChjKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbVmFdfWZ1bmN0aW9uIGp0KGMpe3Jl'@;
put 'dHVybiBQby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBNYygpe2xldCBjPUZ3KCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gRncoKXtyZXR1cm4gUG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBOMShj'@;
put 'LGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIGI5KCl7cmV0dXJuIFBvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBDbSgpe1BvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBWYygpe2NvbnN0IGM9UG8ubEZyYW1lO2xldCBs'@;
put 'PWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIE5kKCl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gQzMoKXtyZXR1cm4gUG8ubEZyYW1lLmJpbmRp'@;
put 'bmdJbmRleCsrfWZ1bmN0aW9uIFYxKGMpe2NvbnN0IGw9UG8ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4K2MsYX1mdW5jdGlvbiBLVChjLGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJ'@;
put 'bmRleD1jLFNtKGwpfWZ1bmN0aW9uIFNtKGMpe1BvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiB3OShjKXtjb25zdCBsPVBvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBCdygpe3JldHVybiBQby5s'@;
put 'RnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gQzkoYyl7UG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gancoYyl7Y29uc3QgbD1jW0JpXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2Nbem9dOm51bGx9ZnVuY3Rpb24gencoYyxs'@;
put 'LGEpe2lmKGEmbnMuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJm5zLkhvc3R8fChoPWp3KGYpLG51bGw9PT1ofHwoZj1mW1BsXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9UG8ubEZyYW1lPVV3'@;
put 'KCk7cmV0dXJuIGQuY3VycmVudFROb2RlPWwsZC5sVmlldz1jLCEwfWZ1bmN0aW9uIFM5KGMpe2NvbnN0IGw9VXcoKSxhPWNbQmldO1BvLmxGcmFtZT1sLGwuY3VycmVudFROb2RlPWEuZmlyc3RDaGlsZCxsLmxWaWV3PWMsbC50Vmlldz1hLGwuY29udGV4dExWaWV3PWMsbC5iaW5kaW5nSW5k'@;
put 'ZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxsLmluSTE4bj0hMX1mdW5jdGlvbiBVdygpe2NvbnN0IGM9UG8ubEZyYW1lLGw9bnVsbD09PWM/bnVsbDpjLmNoaWxkO3JldHVybiBudWxsPT09bD9adyhjKTpsfWZ1bmN0aW9uIFp3KGMpe2NvbnN0IGw9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50'@;
put 'OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxj'@;
put 'dXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpjLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWMmJihjLmNoaWxkPWwpLGx9ZnVuY3Rpb24gWXcoKXtjb25zdCBjPVBvLmxGcmFtZTtyZXR1cm4gUG8ubEZyYW1lPWMucGFyZW50LGMuY3VycmVudFROb2RlPW51bGwsYy5sVmll'@;
put 'dz1udWxsLGN9Y29uc3QgV3c9WXc7ZnVuY3Rpb24gTW0oKXtjb25zdCBjPVl3KCk7Yy5pc1BhcmVudD0hMCxjLnRWaWV3PW51bGwsYy5zZWxlY3RlZEluZGV4PS0xLGMuY29udGV4dExWaWV3PW51bGwsYy5lbGVtZW50RGVwdGhDb3VudD0wLGMuY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLGMu'@;
put 'Y3VycmVudE5hbWVzcGFjZT1udWxsLGMuYmluZGluZ1Jvb3RJbmRleD0tMSxjLmJpbmRpbmdJbmRleD0tMSxjLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gUG8ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gWGgoYyl7UG8ubEZyYW1lLnNlbGVjdGVkSW5k'@;
put 'ZXg9Y31mdW5jdGlvbiBRYSgpe2NvbnN0IGM9UG8ubEZyYW1lO3JldHVybiBrZShjLnRWaWV3LGMuc2VsZWN0ZWRJbmRleCl9bGV0ICR3PSEwO2Z1bmN0aW9uIHhtKCl7cmV0dXJuICR3fWZ1bmN0aW9uIFZkKGMpeyR3PWN9ZnVuY3Rpb24gRW0oYyxsKXtmb3IobGV0IGE9bC5kaXJlY3RpdmVT'@;
put 'dGFydCxkPWwuZGlyZWN0aXZlRW5kO2E8ZDthKyspe2NvbnN0IGY9Yy5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6XyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6VCxuZ0FmdGVyVmlld0luaXQ6VyxuZ0FmdGVyVmlld0NoZWNrZWQ6aWUsbmdPbkRlc3Ryb3k6cGV9'@;
put 'PWY7XyYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsXyksVCYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsVCksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLFQpKSxXJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxXKSxpZSYmKChjLnZpZXdIb29rcz8/'@;
put 'PVtdKS5wdXNoKGEsaWUpLChjLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxpZSkpLG51bGwhPXBlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLHBlKX19ZnVuY3Rpb24ga20oYyxsLGEpe3F3KGMsbCwzLGEpfWZ1bmN0aW9uIEFtKGMsbCxhLGQpeygzJmNbRG9dKT09PWEmJnF3'@;
put 'KGMsbCxhLGQpfWZ1bmN0aW9uIE05KGMsbCl7bGV0IGE9Y1tEb107KDMmYSk9PT1sJiYoYSY9ODE5MSxhKz0xLGNbRG9dPWEpfWZ1bmN0aW9uIHF3KGMsbCxhLGQpe2NvbnN0IGY9ZD8/LTEsXz1sLmxlbmd0aC0xO2xldCBUPTA7Zm9yKGxldCBXPXZvaWQgMCE9PWQ/NjU1MzUmY1tQMl06MDtX'@;
put 'PF87VysrKWlmKCJudW1iZXIiPT10eXBlb2YgbFtXKzFdKXtpZihUPWxbV10sbnVsbCE9ZCYmVD49ZClicmVha31lbHNlIGxbV108MCYmKGNbUDJdKz02NTUzNiksKFQ8Znx8LTE9PWYpJiYoaUQoYyxhLGwsVyksY1tQMl09KDQyOTQ5MDE3NjAmY1tQMl0pK1crMiksVysrfWZ1bmN0aW9uIEt3'@;
put 'KGMsbCl7aDAoNCxjLGwpO2NvbnN0IGE9ZmwobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5hbGx5e2ZsKGEpLGgwKDUsYyxsKX19ZnVuY3Rpb24gaUQoYyxsLGEsZCl7Y29uc3QgaD1hW2RdPDAsZj1hW2QrMV0sVD1jW2g/LWFbZF06YVtkXV07aD9jW0RvXT4+MTM8Y1tQMl0+PjE2JiYoMyZjW0Rv'@;
put 'XSk9PT1sJiYoY1tEb10rPTgxOTIsS3coVCxmKSk6S3coVCxmKX1jb25zdCBTMz0tMTtjbGFzcyBSNHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9u'@;
put 'IFh3KGMpe3JldHVybiBjIT09UzN9ZnVuY3Rpb24gQjIoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gTTMoYyxsKXtsZXQgYT1mdW5jdGlvbiBFOShjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW1BsXSxhLS07cmV0dXJuIGR9bGV0IE80PSEwO2Z1bmN0aW9uIEIxKGMp'@;
put 'e2NvbnN0IGw9TzQ7cmV0dXJuIE80PWMsbH1jb25zdCBUbT0yNTUsSnc9NTtsZXQgRG09MDtjb25zdCBqMT17fTtmdW5jdGlvbiBMbShjLGwpe2NvbnN0IGE9UXcoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0JpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRl'@;
put 'eD1sLmxlbmd0aCxKaChkLmRhdGEsYyksSmgobCxudWxsKSxKaChkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1BOShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFh3KGgpKXtjb25zdCBfPUIyKGgpLFQ9TTMoaCxsKSxXPVRbQmldLmRhdGE7Zm9yKGxldCBpZT0wO2llPDg7aWUrKylsW2Yr'@;
put 'aWVdPVRbXytpZV18V1tfK2llXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBKaChjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gUXcoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmlu'@;
put 'amVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gQTkoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9'@;
put 'bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zQyhoKSxudWxsPT09ZClyZXR1cm4gUzM7aWYoYSsrLGg9aFtQbF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gUzN9ZnVuY3Rpb24gVDkoYyxsLGEpeyFmdW5jdGlvbiBrOShjLGwsYSl7bGV0'@;
put 'IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoWmgpJiYoZD1hW1poXSksbnVsbD09ZCYmKGQ9YVtaaF09RG0rKyk7Y29uc3QgaD1kJlRtO2wuZGF0YVtjKyhoPj5KdyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZUMoYyxsLGEpe2lm'@;
put 'KGEmbnMuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7UWkoKX1mdW5jdGlvbiB0QyhjLGwsYSxkKXtpZihhJm5zLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKG5zLlNlbGZ8bnMuSG9zdCkpKXtjb25zdCBoPWNbSWRdLGY9ZGkodm9pZCAwKTt0cnl7cmV0dXJuIGg/'@;
put 'aC5nZXQobCxkLGEmbnMuT3B0aW9uYWwpOldzKGwsZCxhJm5zLk9wdGlvbmFsKX1maW5hbGx5e2RpKGYpfX1yZXR1cm4gZUMoZCwwLGEpfWZ1bmN0aW9uIG5DKGMsbCxhLGQ9bnMuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW0RvXSYmIShkJm5zLlNlbGYpKXtjb25zdCBfPWZ1'@;
put 'bmN0aW9uIGREKGMsbCxhLGQsaCl7bGV0IGY9YyxfPWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PV8mJjIwNDgmX1tEb10mJiEoNTEyJl9bRG9dKTspe2NvbnN0IFQ9ckMoZixfLGEsZHxucy5TZWxmLGoxKTtpZihUIT09ajEpcmV0dXJuIFQ7bGV0IFc9Zi5wYXJlbnQ7aWYoIVcpe2NvbnN0IGll'@;
put 'PV9bUjFdO2lmKGllKXtjb25zdCBwZT1pZS5nZXQoYSxqMSxkKTtpZihwZSE9PWoxKXJldHVybiBwZX1XPXNDKF8pLF89X1tQbF19Zj1XfXJldHVybiBofShjLGwsYSxkLGoxKTtpZihfIT09ajEpcmV0dXJuIF99Y29uc3QgZj1yQyhjLGwsYSxkLGoxKTtpZihmIT09ajEpcmV0dXJuIGZ9cmV0'@;
put 'dXJuIHRDKGwsYSxkLGgpfWZ1bmN0aW9uIHJDKGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBjRChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoWmgpP2NbWmhdOnZvaWQgMDtyZXR1cm4ibnVtYmVy'@;
put 'Ij09dHlwZW9mIGw/bD49MD9sJlRtOnVEOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighencobCxjLGQpKXJldHVybiBkJm5zLkhvc3Q/ZUMoaCwwLGQpOnRDKGwsYSxkLGgpO3RyeXtjb25zdCBfPWYoZCk7aWYobnVsbCE9X3x8ZCZucy5PcHRpb25hbClyZXR1cm4gXztRaSgp'@;
put 'fWZpbmFsbHl7V3coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCBfPW51bGwsVD1RdyhjLGwpLFc9UzMsaWU9ZCZucy5Ib3N0P2xbSmFdW3pvXTpudWxsO2ZvcigoLTE9PT1UfHxkJm5zLlNraXBTZWxmKSYmKFc9LTE9PT1UP0E5KGMsbCk6bFtUKzhdLFchPT1TMyYmb0MoZCwh'@;
put 'MSk/KF89bFtCaV0sVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTEpOy0xIT09VDspe2NvbnN0IHBlPWxbQmldO2lmKGlDKGYsVCxwZS5kYXRhKSl7Y29uc3Qgd2U9bEQoVCxsLGEsXyxkLGllKTtpZih3ZSE9PWoxKXJldHVybiB3ZX1XPWxbVCs4XSxXIT09UzMmJm9DKGQsbFtCaV0uZGF0YVtUKzhd'@;
put 'PT09aWUpJiZpQyhmLFQsbCk/KF89cGUsVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTF9fXJldHVybiBofWZ1bmN0aW9uIGxEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWxbQmldLFQ9Xy5kYXRhW2MrOF0scGU9SW0oVCxfLGEsbnVsbD09ZD9QMShUKSYmTzQ6ZCE9XyYmMCE9KDMmVC50eXBlKSxoJm5z'@;
put 'Lkhvc3QmJmY9PT1UKTtyZXR1cm4gbnVsbCE9PXBlP1FoKGwsXyxwZSxUKTpqMX1mdW5jdGlvbiBJbShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5wcm92aWRlckluZGV4ZXMsXz1sLmRhdGEsVD0xMDQ4NTc1JmYsVz1jLmRpcmVjdGl2ZVN0YXJ0LHBlPWY+PjIwLEVlPWg/VCtwZTpjLmRpcmVjdGl2'@;
put 'ZUVuZDtmb3IobGV0IFplPWQ/VDpUK3BlO1plPEVlO1plKyspe2NvbnN0IGl0PV9bWmVdO2lmKFplPFcmJmE9PT1pdHx8WmU+PVcmJml0LnR5cGU9PT1hKXJldHVybiBaZX1pZihoKXtjb25zdCBaZT1fW1ddO2lmKFplJiZRYyhaZSkmJlplLnR5cGU9PT1hKXJldHVybiBXfXJldHVybiBudWxs'@;
put 'fWZ1bmN0aW9uIFFoKGMsbCxhLGQpe2xldCBoPWNbYV07Y29uc3QgZj1sLmRhdGE7aWYoZnVuY3Rpb24gb0QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBSNH0oaCkpe2NvbnN0IF89aDtfLnJlc29sdmluZyYmZnVuY3Rpb24gbzAoYyxsKXtjb25zdCBhPWw/YC4gRGVwZW5kZW5jeSBwYXRoOiAk'@;
put 'e2wuam9pbigiID4gIil9ID4gJHtjfWA6IiI7dGhyb3cgbmV3IEFyKC0yMDAsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7Y30ke2F9YCl9KGZ1bmN0aW9uIENzKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFtZXx8Yy50b1N0cmluZygpOiJvYmpl'@;
put 'Y3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6a28oYyl9KGZbYV0pKTtjb25zdCBUPUIxKF8uY2FuU2VlVmlld1Byb3ZpZGVycyk7Xy5yZXNvbHZpbmc9ITA7Y29uc3QgVz1fLmluamVjdEltcGw/'@;
put 'ZGkoXy5pbmplY3RJbXBsKTpudWxsO3p3KGMsZCxucy5EZWZhdWx0KTt0cnl7aD1jW2FdPV8uZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiByRChjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpo'@;
put 'LG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IF89VDQobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsXyksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxfKX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigo'@;
put 'YS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVcmJmRpKFcpLEIxKFQpLF8ucmVzb2x2aW5nPSExLFd3KCl9fXJldHVybiBofWZ1bmN0aW9uIGlDKGMsbCxhKXtyZXR1'@;
put 'cm4hIShhW2wrKGM+Pkp3KV0mMTw8Yyl9ZnVuY3Rpb24gb0MoYyxsKXtyZXR1cm4hKGMmbnMuU2VsZnx8YyZucy5Ib3N0JiZsKX1jbGFzcyB4M3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVybiBuQyh0aGlzLl90Tm9kZSx0aGlz'@;
put 'Ll9sVmlldyxsLGEwKGQpLGEpfX1mdW5jdGlvbiB1RCgpe3JldHVybiBuZXcgeDMoTWMoKSxYcigpKX1mdW5jdGlvbiB4YShjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtsMF18fEcwKGwpLGQ9T2JqZWN0LnByb3RvdHlwZTtsZXQgaD1PYmpl'@;
put 'Y3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbbDBdfHxHMChoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9KX1mdW5jdGlvbiBHMChjKXtyZXR1'@;
put 'cm4gcjAoYyk/KCk9Pntjb25zdCBsPUcwKGJvKGMpKTtyZXR1cm4gbCYmbCgpfTpIMShjKX1mdW5jdGlvbiBzQyhjKXtjb25zdCBsPWNbQmldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3pvXTpudWxsfWZ1bmN0aW9uIFA0KGMpe3JldHVybiBmdW5jdGlvbiBE'@;
put 'OShjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYoUjIoZikpYnJlYWs7aWYoMD09PWYp'@;
put 'aCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0oTWMoKSxjKX1jb25zdCBrMz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIFQz'@;
put 'KGMsbCxhKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIFJtKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaCly'@;
put 'ZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3QgXz1uZXcgaCguLi5mKTtyZXR1cm4gVC5hbm5vdGF0aW9uPV8sVDtmdW5jdGlvbiBUKFcsaWUscGUpe2NvbnN0IHdlPVcuaGFzT3duUHJvcGVydHkoazMpP1dbazNdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLGszLHt2YWx1ZTpbXX0p'@;
put 'W2szXTtmb3IoO3dlLmxlbmd0aDw9cGU7KXdlLnB1c2gobnVsbCk7cmV0dXJuKHdlW3BlXT13ZVtwZV18fFtdKS5wdXNoKF8pLFd9fXJldHVybiBhJiYoaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0'@;
put 'aW9uQ2xzPWgsaH0pfWNvbnN0IE9tPUZ1bmN0aW9uO2Z1bmN0aW9uIEY0KGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/RjQoYSxsKTpsKGEpKX1mdW5jdGlvbiAkMChjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBQbShjLGwp'@;
put 'e3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBCZChjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxjO2QrKylhLnB1c2gobCk7cmV0dXJuIGF9ZnVuY3Rpb24geGMoYyxsLGEpe2xldCBkPWpkKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRd'@;
put 'PWE6KGQ9fmQsZnVuY3Rpb24gbUQoYyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1ts'@;
put 'KzFdPWR9fShjLGQsbCxhKSksZH1mdW5jdGlvbiB0ZihjLGwpe2NvbnN0IGE9amQoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gamQoYyxsKXtyZXR1cm4gZnVuY3Rpb24gdkQoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyho'@;
put 'LWQ+PjEpLF89Y1tmPDxhXTtpZihsPT09XylyZXR1cm4gZjw8YTtfPmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCB6Mj16aChUMygiT3B0aW9uYWwiKSw4KSxnMD16aChUMygiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBZbShjKXtyZXR1cm4gMTI4PT0oMTI4JmMuZmxh'@;
put 'Z3MpfXZhciBZMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShZMnx8e30pO2NvbnN0IGtEPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csQUQ9Lyg8fD4pLyxXbT0iXHUyMDBiJDFcdTIwMGIi'@;
put 'O2NvbnN0IEg5PW5ldyBNYXA7bGV0IE45PTA7Y29uc3QgQjk9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIEJjKGMsbCl7U2MobCk/KGNbQjldPWxbJGhdLGZ1bmN0aW9uIGo0KGMpe0g5LnNldChjWyRoXSxjKX0obCkpOmNbQjldPWx9bGV0IGo5O2Z1bmN0aW9uIHo5KGMsbCl7cmV0dXJuIGo5'@;
put 'KGMsbCl9ZnVuY3Rpb24gWjQoYyl7Y29uc3QgbD1jW3VhXTtyZXR1cm4gb2MobCk/bFt1YV06bH1mdW5jdGlvbiBDQyhjKXtyZXR1cm4gR20oY1tHaF0pfWZ1bmN0aW9uIFNDKGMpe3JldHVybiBHbShjW1hhXSl9ZnVuY3Rpb24gR20oYyl7Zm9yKDtudWxsIT09YyYmIW9jKGMpOyljPWNbWGFd'@;
put 'O3JldHVybiBjfWZ1bmN0aW9uIHJmKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsXz0hMTtvYyhkKT9mPWQ6U2MoZCkmJihfPSEwLGQ9ZFtIaV0pO2NvbnN0IFQ9X2EoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/RzIobCxhLFQpOlkxKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZu'@;
put 'dWxsIT09YT9ZMShsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB0NihjLGwsYSl7Y29uc3QgZD1IMyhjLGwpO2QmJmZ1bmN0aW9uIE91KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULF8pOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYm'@;
put 'JmZ1bmN0aW9uIElDKGMsbCxhLGQsaCl7Y29uc3QgZj1hW2QwXTtmIT09X2EoYSkmJnJmKGwsYyxkLGYsaCk7Zm9yKGxldCBUPWljO1Q8YS5sZW5ndGg7VCsrKXtjb25zdCBXPWFbVF07RzQoV1tCaV0sVyxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIFU5KGMsbCl7cmV0dXJuIGMu'@;
put 'Y3JlYXRlQ29tbWVudChmdW5jdGlvbiBCNChjKXtyZXR1cm4gYy5yZXBsYWNlKGtELGw9PmwucmVwbGFjZShBRCxXbSkpfShsKSl9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiB4QyhjLGwpe2NvbnN0IGE9Y1tIMl0sZD1hLmluZGV4T2Yo'@;
put 'bCk7enMobCksYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBzZihjLGwpe2lmKGMubGVuZ3RoPD1pYylyZXR1cm47Y29uc3QgYT1pYytsLGQ9Y1thXTtpZihkKXtjb25zdCBoPWRbTzJdO251bGwhPT1oJiZoIT09YyYmeEMoaCxkKSxsPjAmJihjW2EtMV1bWGFdPWRbWGFdKTtjb25zdCBmPVBtKGMs'@;
put 'aWMrbCk7IWZ1bmN0aW9uIEJEKGMsbCl7RzQoYyxsLGxbVm9dLDIsbnVsbCxudWxsKSxsW0hpXT1udWxsLGxbem9dPW51bGx9KGRbQmldLGQpO2NvbnN0IF89ZltodV07bnVsbCE9PV8mJl8uZGV0YWNoVmlldyhmW0JpXSksZFt1YV09bnVsbCxkW1hhXT1udWxsLGRbRG9dJj0tMTI5fXJldHVy'@;
put 'biBkfWZ1bmN0aW9uIEttKGMsbCl7aWYoISgyNTYmbFtEb10pKXtjb25zdCBhPWxbVm9dO2xbcDNdPy5kZXN0cm95KCksbFtnM10/LmRlc3Ryb3koKSxhLmRlc3Ryb3lOb2RlJiZHNChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gVUQoYyl7bGV0IGw9Y1tHaF07aWYoIWwpcmV0dXJuIFht'@;
put 'KGNbQmldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoU2MobCkpYT1sW0doXTtlbHNle2NvbnN0IGQ9bFtpY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbWGFdJiZsIT09YzspU2MobCkmJlhtKGxbQmldLGwpLGw9bFt1YV07bnVsbD09PWwmJihsPWMpLFNjKGwpJiZYbShsW0JpXSxs'@;
put 'KSxhPWwmJmxbWGFdfWw9YX19KGwpfX1mdW5jdGlvbiBYbShjLGwpe2lmKCEoMjU2JmxbRG9dKSl7bFtEb10mPS0xMjksbFtEb118PTI1NixmdW5jdGlvbiBrQyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2Qr'@;
put 'PTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBSNCkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKz0yKXtjb25zdCBUPWhbZltfXV0sVz1mW18rMV07aDAoNCxULFcpO3RyeXtXLmNhbGwoVCl9ZmluYWxseXto'@;
put 'MCg1LFQsVyl9fWVsc2V7aDAoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtoMCg1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIEVDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1R1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIGFbZl0pe2NvbnN0IF89YVtmKzNdO18+PTA/ZFtfXSgpOmRbLV9dLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtUdV09bnVsbCk7Y29uc3QgaD1sW08xXTtpZihudWxsIT09aCl7bFtPMV09bnVsbDtmb3IobGV0IGY9MDtm'@;
put 'PGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtCaV0udHlwZSYmbFtWb10uZGVzdHJveSgpO2NvbnN0IGE9bFtPMl07aWYobnVsbCE9PWEmJm9jKGxbdWFdKSl7YSE9PWxbdWFdJiZ4QyhhLGwpO2NvbnN0IGQ9bFtodV07bnVsbCE9PWQmJmQuZGV0YWNoVmlldyhjKX0hZnVu'@;
put 'Y3Rpb24gVEQoYyl7SDkuZGVsZXRlKGNbJGhdKX0obCl9fWZ1bmN0aW9uIEYzKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWTQoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtIaV07e2NvbnN0e2NvbXBv'@;
put 'bmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PVBjLk5vbmV8fGY9PT1QYy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gTmwoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWTEoYyxs'@;
put 'LGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBHMihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WTEoYyxsLGEsZCxoKTpHMihjLGwsYSl9ZnVuY3Rpb24gSDMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwp'@;
put 'fWZ1bmN0aW9uIFcxKGMsbCxhKXtyZXR1cm4gVEMoYyxsLGEpfWxldCBRbSwkNCxHOSxuNixUQz1mdW5jdGlvbiBBQyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9ObChjLGEpOm51bGx9O2Z1bmN0aW9uIGU2KGMsbCxhLGQpe2NvbnN0IGg9RjMoYyxkLGwpLGY9bFtWb10sVD1XMShkLnBhcmVu'@;
put 'dHx8bFt6b10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBXPTA7VzxhLmxlbmd0aDtXKyspSm0oZixoLGFbV10sVCwhMSk7ZWxzZSBKbShmLGgsYSxULCExKTt2b2lkIDAhPT1RbSYmUW0oZixkLGwsYSxoKX1mdW5jdGlvbiBXNChjLGwpe2lmKG51bGwhPT1s'@;
put 'KXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIE5sKGwsYyk7aWYoNCZhKXJldHVybiBZOSgtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gVzQoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBvYyhoKT9ZOSgtMSxoKTpf'@;
put 'YShoKX19aWYoMzImYSlyZXR1cm4gejkobCxjKSgpfHxfYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1EQyhjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06VzQoWjQoY1tKYV0pLGQpOlc0KGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gREMoYyxsKXtyZXR1'@;
put 'cm4gbnVsbCE9PWw/Y1tKYV1bem9dLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFk5KGMsbCl7Y29uc3QgYT1pYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtCaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gVzQoZCxoKX1yZXR1cm4g'@;
put 'bFtkMF19ZnVuY3Rpb24gVzkoYyxsLGEsZCxoLGYsXyl7Zm9yKDtudWxsIT1hOyl7Y29uc3QgVD1kW2EuaW5kZXhdLFc9YS50eXBlO2lmKF8mJjA9PT1sJiYoVCYmQmMoX2EoVCksZCksYS5mbGFnc3w9MiksMzIhPSgzMiZhLmZsYWdzKSlpZig4JlcpVzkoYyxsLGEuY2hpbGQsZCxoLGYsITEp'@;
put 'LHJmKGwsYyxoLFQsZik7ZWxzZSBpZigzMiZXKXtjb25zdCBpZT16OShhLGQpO2xldCBwZTtmb3IoO3BlPWllKCk7KXJmKGwsYyxoLHBlLGYpO3JmKGwsYyxoLFQsZil9ZWxzZSAxNiZXP1dEKGMsbCxkLGEsaCxmKTpyZihsLGMsaCxULGYpO2E9Xz9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19'@;
put 'ZnVuY3Rpb24gRzQoYyxsLGEsZCxoLGYpe1c5KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1bmN0aW9uIFdEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWFbSmFdLFc9X1t6b10ucHJvamVjdGlvbltkLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoVykpZm9yKGxldCBpZT0wO2llPFcu'@;
put 'bGVuZ3RoO2llKyspcmYobCxjLGgsV1tpZV0sZik7ZWxzZXtsZXQgaWU9Vztjb25zdCBwZT1fW3VhXTtZbShkKSYmKGllLmZsYWdzfD0xMjgpLFc5KGMsbCxpZSxwZSxoLGYsITApfX1mdW5jdGlvbiBSQyhjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRB'@;
put 'dHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIE9DKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmRGQoYyxsLGQpLG51bGwhPT1oJiZSQyhjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIEdEKGMsbCxhKXtjLnNldEF0dHJpYnV0'@;
put 'ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1mdW5jdGlvbiBOMyhjKXtyZXR1cm4gZnVuY3Rpb24gcTQoKXtpZih2b2lkIDA9PT0kNCYmKCQ0PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7JDQ9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+Yyxj'@;
put 'cmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gJDR9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gSzQoKXtpZih2b2lkIDAhPT1HOSlyZXR1cm4gRzk7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3'@;
put 'IEFyKDIxMCwhMSl9ZnVuY3Rpb24gJDkoKXtpZih2b2lkIDA9PT1uNiYmKG42PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7bjY9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNy'@;
put 'ZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBuNn1mdW5jdGlvbiBIQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiBWQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIEJDe2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hh'@;
put 'bmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7bDN9KWB9fWZ1bmN0aW9uICQy'@;
put 'KGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkM/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24gWDQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHRMKGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkMmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVs'@;
put 'bCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7bDN9KWApfXJldHVybiBhPT09bH1jbGFzcyBxOXtjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0'@;
put 'RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25zdCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE4zKGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlz'@;
put 'LmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNhdGNoe3JldHVybiBudWxsfX19Y2xhc3MgSzl7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVm'@;
put 'YXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9TjMobCks'@;
put 'YX19Y29uc3Qgbkw9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gWDkoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaChuTCk/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBHMShjKXtjb25zdCBsPXt9O2Zvcihjb25z'@;
put 'dCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIEJhKC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBaZD1HMSgiYXJlYSxicixjb2ws'@;
put 'aHIsaW1nLHdiciIpLEo5PUcxKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksUTk9RzEoInJwLHJ0IiksZXY9QmEoWmQsQmEoSjksRzEoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRp'@;
put 'YWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEJhKFE5LEcxKCJhLGFiYnIsYWNyb255bSxhdWRpbyxi'@;
put 'LGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8i'@;
put 'KSksQmEoUTksSjkpKSx0dj1HMSgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksekM9QmEodHYsRzEoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNl'@;
put 'bGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtp'@;
put 'bmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5'@;
put 'LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLEcxKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50'@;
put 'LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1n'@;
put 'cmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1v'@;
put 'cmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dz'@;
put 'cGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxpTD1HMSgic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3Mgb0x7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0'@;
put 'aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwO2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RF'@;
put 'P3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZClhPWEuZmlyc3RDaGlsZDtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBoPXRoaXMuY2hlY2tD'@;
put 'bG9iYmVyZWRFbGVtZW50KGEsYS5uZXh0U2libGluZyk7aWYoaCl7YT1oO2JyZWFrfWE9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoYSxhLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX1zdGFydEVsZW1lbnQobCl7Y29uc3QgYT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNl'@;
put 'KCk7aWYoIWV2Lmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhaUwuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto'@;
put 'Kyspe2NvbnN0IGY9ZC5pdGVtKGgpLF89Zi5uYW1lLFQ9Xy50b0xvd2VyQ2FzZSgpO2lmKCF6Qy5oYXNPd25Qcm9wZXJ0eShUKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IFc9Zi52YWx1ZTt0dltUXSYmKFc9WDkoVykpLHRoaXMuYnVmLnB1c2goIiAiLF8sJz0i'@;
put 'JyxVQyhXKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtldi5oYXNPd25Qcm9wZXJ0eShhKSYmIVpkLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5w'@;
put 'dXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChVQyhsKSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KGwsYSl7aWYoYSYmKGwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5E'@;
put 'T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtsLm91dGVySFRNTH1gKTtyZXR1cm4gYX19Y29uc3Qgc0w9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAt'@;
put 'XHVERkZGXS9nLGFMPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBVQyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShzTCxmdW5jdGlvbihsKXtyZXR1cm4iJiMiKygxMDI0KihsLmNoYXJDb2RlQXQoMCktNTUyOTYpKyhsLmNoYXJDb2RlQXQoMSktNTYzMjApKzY1'@;
put 'NTM2KSsiOyJ9KS5yZXBsYWNlKGFMLGZ1bmN0aW9uKGwpe3JldHVybiImIyIrbC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWxldCByNjtmdW5jdGlvbiBudihjKXtyZXR1cm4iY29udGVudCJpbiBjJiZmdW5jdGlvbiBjTChj'@;
put 'KXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09Yy5ub2RlTmFtZX0oYyk/Yy5jb250ZW50Om51bGx9dmFyIFYzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkhUTUw9MV09IkhUTUwiLGNbYy5TVFlMRT0yXT0iU1RZ'@;
put 'TEUiLGNbYy5TQ1JJUFQ9M109IlNDUklQVCIsY1tjLlVSTD00XT0iVVJMIixjW2MuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGN9KFYzfHx7fSk7ZnVuY3Rpb24gcTIoYyl7Y29uc3QgbD1KNCgpO3JldHVybiBsP0hDKGwuc2FuaXRpemUoVjMuSFRNTCxjKXx8IiIpOlg0KGMsIkhU'@;
put 'TUwiKT9IQygkMihjKSk6ZnVuY3Rpb24gbEwoYyxsKXtsZXQgYT1udWxsO3RyeXtyNj1yNnx8ZnVuY3Rpb24gYWYoYyl7Y29uc3QgbD1uZXcgSzkoYyk7cmV0dXJuIGZ1bmN0aW9uIGpDKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoTjMoIiIp'@;
put 'LCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3IHE5KGwpOmx9KGMpO2xldCBkPWw/U3RyaW5nKGwpOiIiO2E9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKTtsZXQgaD01LGY9ZDtkb3tpZigwPT09aCl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJl'@;
put 'Y2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aC0tLGQ9ZixmPWEuaW5uZXJIVE1MLGE9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKX13aGlsZShkIT09Zik7cmV0dXJuIE4zKChuZXcgb0wpLnNhbml0aXplQ2hpbGRyZW4obnYoYSl8fGEpKX1maW5hbGx5e2lmKGEpe2NvbnN0IGQ9bnYo'@;
put 'YSl8fGE7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX19fShLNCgpLGtvKGMpKX1mdW5jdGlvbiBydihjKXtjb25zdCBsPUo0KCk7cmV0dXJuIGw/bC5zYW5pdGl6ZShWMy5VUkwsYyl8fCIiOlg0KGMsIlVSTCIpPyQyKGMpOlg5KGtvKGMpKX1mdW5jdGlv'@;
put 'biBaQyhjKXtjb25zdCBsPUo0KCk7aWYobClyZXR1cm4gVkMobC5zYW5pdGl6ZShWMy5SRVNPVVJDRV9VUkwsYyl8fCIiKTtpZihYNChjLCJSZXNvdXJjZVVSTCIpKXJldHVybiBWQygkMihjKSk7dGhyb3cgbmV3IEFyKDkwNCwhMSl9ZnVuY3Rpb24gSjQoKXtjb25zdCBjPVhyKCk7cmV0dXJu'@;
put 'IGMmJmNbSTFdLnNhbml0aXplcn1jbGFzcyBTaXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1hOnZv'@;
put 'aWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9'@;
put 'YH19Y29uc3QgUTQ9bmV3IFNpKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLFdDPW5ldyBTaSgiSU5KRUNUT1IiLC0xKSxHQz1uZXcgU2koIklOSkVDVE9SX0RFRl9UWVBFUyIpO2NsYXNzICRDe2dldChsLGE9czApe2lmKGE9PT1zMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3Rv'@;
put 'ckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxYShsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gZ0woLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpxQygwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gcUMo'@;
put 'YywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtyZXR1cm4gRjQobCxmPT57Y29uc3QgXz1mO292KF8sYSxbXSxkKSYmKGh8fD1bXSxoLnB1c2goXykpfSksdm9pZCAwIT09aCYmS0MoaCxhKSxhfWZ1bmN0aW9uIEtDKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2Nv'@;
put 'bnN0e3Byb3ZpZGVyczpofT1jW2FdO3N2KGgsZj0+e2wucHVzaChmKX0pfX1mdW5jdGlvbiBvdihjLGwsYSxkKXtpZighKGM9Ym8oYykpKXJldHVybiExO2xldCBoPW51bGwsZj1ubShjKTtjb25zdCBfPSFmJiZRbyhjKTtpZihmfHxfKXtpZihfJiYhXy5zdGFuZGFsb25lKXJldHVybiExO2g9'@;
put 'Y31lbHNle2NvbnN0IFc9Yy5uZ01vZHVsZTtpZihmPW5tKFcpLCFmKXJldHVybiExO2g9V31jb25zdCBUPWQuaGFzKGgpO2lmKF8pe2lmKFQpcmV0dXJuITE7aWYoZC5hZGQoaCksXy5kZXBlbmRlbmNpZXMpe2NvbnN0IFc9ImZ1bmN0aW9uIj09dHlwZW9mIF8uZGVwZW5kZW5jaWVzP18uZGVw'@;
put 'ZW5kZW5jaWVzKCk6Xy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGllIG9mIFcpb3YoaWUsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFUKXtsZXQgaWU7ZC5hZGQoaCk7dHJ5e0Y0KGYuaW1wb3J0cyxwZT0+e292KHBlLGwsYSxkKSYmKGllfHw9W10s'@;
put 'aWUucHVzaChwZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09aWUmJktDKGllLGwpfWlmKCFUKXtjb25zdCBpZT1IMShoKXx8KCgpPT5uZXcgaCk7bC5wdXNoKHtwcm92aWRlOmgsdXNlRmFjdG9yeTppZSxkZXBzOlNzfSx7cHJvdmlkZTpHQyx1c2VWYWx1ZTpoLG11bHRpOiEwfSx7cHJvdmlkZTpR'@;
put 'NCx1c2VWYWx1ZTooKT0+YXIoaCksbXVsdGk6ITB9KX1jb25zdCBXPWYucHJvdmlkZXJzO251bGw9PVd8fFR8fHN2KFcscGU9PntsLnB1c2gocGUpfSl9fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gc3YoYyxsKXtmb3IobGV0IGEgb2YgYylUMihhKSYmKGE9'@;
put 'YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/c3YoYSxsKTpsKGEpfWNvbnN0IG1MPUFzKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpBc30pO2Z1bmN0aW9uIGF2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZtTCBpbiBjfWZ1bmN0aW9uIGxmKGMp'@;
put 'e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IHQ1PW5ldyBTaSgiU2V0IEluamVjdG9yIHNjb3BlLiIpLG82PXt9LHZMPXt9O2xldCBsdjtmdW5jdGlvbiBzNigpe3JldHVybiB2b2lkIDA9PT1sdiYmKGx2PW5ldyAkQyksbHZ9Y2xhc3MgcTB7fWNsYXNzIGN2IGV4dGVuZHMgcTB7'@;
put 'Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhp'@;
put 'cy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLGR2KGwsXz0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoXykpLHRoaXMucmVjb3Jkcy5zZXQoV0MsQjModm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxMCxCMyh2b2lkIDAsdGhp'@;
put 'cykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldCh0NSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoR0MubXVsdGksU3MsbnMuU2VsZikpfWRlc3Ryb3koKXt0'@;
put 'aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylhLm5nT25EZXN0cm95KCk7Y29uc3QgbD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3Qg'@;
put 'YSBvZiBsKWEoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhv'@;
put 'b2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9QTEodGhpcyksZD1kaSh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7QTEoYSksZGkoZCl9fWdldChsLGE9czAsZD1ucy5E'@;
put 'ZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkobWEpKXJldHVybiBsW21hXSh0aGlzKTtkPWEwKGQpO2NvbnN0IGg9QTEodGhpcyksZj1kaSh2b2lkIDApO3RyeXtpZighKGQmbnMuU2tpcFNlbGYpKXtsZXQgVD10aGlzLnJlY29yZHMuZ2V0KGwp'@;
put 'O2lmKHZvaWQgMD09PVQpe2NvbnN0IFc9ZnVuY3Rpb24gQ0woYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIFNpfShsKSYmeGQobCk7VD1XJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFcpP0IzKHV2KGwpLG82KTpudWxs'@;
put 'LHRoaXMucmVjb3Jkcy5zZXQobCxUKX1pZihudWxsIT1UKXJldHVybiB0aGlzLmh5ZHJhdGUobCxUKX1yZXR1cm4oZCZucy5TZWxmP3M2KCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZucy5PcHRpb25hbCYmYT09PXMwP251bGw6YSl9Y2F0Y2goXyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09'@;
put 'PV8ubmFtZSl7aWYoKF9ba3VdPV9ba3VdfHxbXSkudW5zaGlmdChxYShsKSksaCl0aHJvdyBfO3JldHVybiBmdW5jdGlvbiBBdShjLGwsYSxkKXtjb25zdCBoPWNba3VdO3Rocm93IGxbb21dJiZoLnVuc2hpZnQobFtvbV0pLGMubWVzc2FnZT1mdW5jdGlvbiBBZChjLGwsYSxkPW51bGwpe2M9'@;
put 'YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPXFhKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChxYSkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IF8gaW4g'@;
put 'bClpZihsLmhhc093blByb3BlcnR5KF8pKXtsZXQgVD1sW19dO2YucHVzaChfKyI6IisoInN0cmluZyI9PXR5cGVvZiBUP0pTT04uc3RyaW5naWZ5KFQpOnFhKFQpKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNl'@;
put 'KHJjLCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW2t1XT1udWxsLGN9KF8sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgX31maW5hbGx5e2RpKGYpLEExKGgpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25z'@;
put 'dCBsPUExKHRoaXMpLGE9ZGkodm9pZCAwKTt0cnl7Y29uc3QgZD10aGlzLmdldChRNC5tdWx0aSxTcyxucy5TZWxmKTtmb3IoY29uc3QgaCBvZiBkKWgoKX1maW5hbGx5e0ExKGwpLGRpKGEpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r'@;
put 'ZXlzKCkpbC5wdXNoKHFhKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPWxmKGw9Ym8obCkpP2w6Ym8obCYmbC5w'@;
put 'cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIGJMKGMpe3JldHVybiBhdihjKT9CMyh2b2lkIDAsYy51c2VWYWx1ZSk6QjMoUUMoYyksbzYpfShsKTtpZihsZihsKXx8ITAhPT1sLm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoYSk7ZWxzZXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUIz'@;
put 'KHZvaWQgMCxvNiwhMCksaC5mYWN0b3J5PSgpPT5LYyhoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtyZXR1cm4gYS52YWx1ZT09PW82JiYoYS52YWx1ZT12TCxhLnZhbHVlPWEuZmFj'@;
put 'dG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHdMKGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRk'@;
put 'KGEudmFsdWUpLGEudmFsdWV9aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPWJvKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZU'@;
put 'eXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiB1dihjKXtjb25zdCBsPXhkKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Okgx'@;
put 'KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBTaSl0aHJvdyBuZXcgQXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIF9MKGMpe2NvbnN0IGw9Yy5sZW5ndGg7aWYobD4wKXRocm93IEJkKGwsIj8iKSxuZXcgQXIoMjA0LCEx'@;
put 'KTtjb25zdCBhPWZ1bmN0aW9uIEhzKGMpe3JldHVybiBjJiYoY1tjM118fGNbTnNdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgQXIoMjA0LCExKX1mdW5jdGlvbiBRQyhjLGwsYSl7bGV0IGQ7aWYobGYoYykpe2Nv'@;
put 'bnN0IGg9Ym8oYyk7cmV0dXJuIEgxKGgpfHx1dihoKX1pZihhdihjKSlkPSgpPT5ibyhjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIEpDKGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uS2MoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVu'@;
put 'Y3Rpb24gWEMoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5hcihibyhjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPWJvKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24geUwoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBIMSho'@;
put 'KXx8dXYoaCk7ZD0oKT0+bmV3IGgoLi4uS2MoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQjMoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gZHYoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/ZHYo'@;
put 'YSxsKTphJiZUMihhKT9kdihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWNvbnN0IGE2PW5ldyBTaSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TTH0pLFNMPSJuZyIsZVM9bmV3IFNpKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLEdzPW5ldyBTaSgiUGxhdGZvcm0g'@;
put 'SUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksdFM9bmV3IFNpKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksbDY9bmV3IFNpKCJDU1Agbm9uY2UiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5LNCgpLmJvZHk/LnF1ZXJ5U2VsZWN0b3IoIltu'@;
put 'Z0NzcE5vbmNlXSIpPy5nZXRBdHRyaWJ1dGUoIm5nQ3NwTm9uY2UiKXx8bnVsbH0pO2xldCByUz0oYyxsKT0+bnVsbDtmdW5jdGlvbiBvUyhjLGwpe3JldHVybiByUyhjLGwpfWNsYXNzIGxTe31jbGFzcyBjU3t9Y2xhc3MgWjN7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgZnVu'@;
put 'Y3Rpb24geXYoYyl7Y29uc3QgbD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cWEoYyl9LmApO3JldHVybiBsLm5nQ29tcG9uZW50PWMsbH0obCl9fWxldCBLMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OVUxMPW5ldyBaMyxjfSkoKTtmdW5jdGlvbiB3digpe3Jl'@;
put 'dHVybiBZZChNYygpLFhyKCkpfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIG5ldyBOaShObChjLGwpKX1sZXQgTmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX19cmV0dXJuIGMuX19OR19FTEVNRU5UX0lEX189d3YsY30pKCk7ZnVuY3Rpb24gZGYo'@;
put 'Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jbGFzcyBZM3t9bGV0IEZvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbiBndSgpe2NvbnN0IGM9'@;
put 'WHIoKSxhPW10KE1jKCkuaW5kZXgsYyk7cmV0dXJuKFNjKGEpP2E6YylbVm9dfSgpLGN9KSgpLHA2PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLGN9KSgpO2NsYXNzIHM1e2NvbnN0cnVj'@;
put 'dG9yKGwpe3RoaXMuZnVsbD1sLHRoaXMubWFqb3I9bC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9bC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9bC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgQUw9bmV3IHM1KCIxNi4xLjciKSxDdj17fTtmdW5jdGlvbiBhNShjKXtm'@;
put 'b3IoO2M7KXtjW0RvXXw9NjQ7Y29uc3QgbD1aNChjKTtpZih4NChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWZ1bmN0aW9uIFN2KGMpe3JldHVybiBjLm5nT3JpZ2luYWxFcnJvcn1jbGFzcyBoZntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJv'@;
put 'cihsKXtjb25zdCBhPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKGwpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKSxhJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsYSl9X2ZpbmRPcmlnaW5hbEVycm9yKGwpe2xldCBhPWwmJlN2KGwpO2Zvcig7YSYmU3YoYSk7'@;
put 'KWE9U3YoYSk7cmV0dXJuIGF8fG51bGx9fWNvbnN0IHh2PW5ldyBTaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBtNihjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZmKGMpe3JldHVybiBjLm93bmVyRG9jdW1l'@;
put 'bnR9ZnVuY3Rpb24gRXYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5ib2R5fWZ1bmN0aW9uIFdkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9Y2xhc3MgdjYgZXh0ZW5kcyB2M3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25zdW1lckFs'@;
put 'bG93U2lnbmFsV3JpdGVzPSExLHRoaXMuX2xWaWV3PW51bGx9c2V0IGxWaWV3KGwpe3RoaXMuX2xWaWV3PWx9b25Db25zdW1lckRlcGVuZGVuY3lNYXlIYXZlQ2hhbmdlZCgpe2E1KHRoaXMuX2xWaWV3KX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fWdldCBoYXNSZWFkQVNpZ25h'@;
put 'bCgpe3JldHVybiB0aGlzLmhhc1Byb2R1Y2Vyc31ydW5JbkNvbnRleHQobCxhLGQpe2NvbnN0IGg9ZmwodGhpcyk7dGhpcy50cmFja2luZ1ZlcnNpb24rKzt0cnl7bChhLGQpfWZpbmFsbHl7ZmwoaCl9fWRlc3Ryb3koKXt0aGlzLnRyYWNraW5nVmVyc2lvbisrfX1sZXQgXzY9bnVsbDtmdW5j'@;
put 'dGlvbiBtUygpe3JldHVybiBfNj8/PW5ldyB2NixfNn1mdW5jdGlvbiB2UyhjLGwpe3JldHVybiBjW2xdPz9tUygpfWZ1bmN0aW9uIF9TKGMsbCl7Y29uc3QgYT1tUygpO2EuaGFzUmVhZEFTaWduYWwmJihjW2xdPV82LGEubFZpZXc9YyxfNj1uZXcgdjYpfWNvbnN0IFpvPXt9O2Z1bmN0aW9u'@;
put 'IENlKGMpe2t2KFRzKCksWHIoKSxldSgpK2MsITEpfWZ1bmN0aW9uIGt2KGMsbCxhLGQpe2lmKCFkKWlmKDM9PSgzJmxbRG9dKSl7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYma20obCxmLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkFt'@;
put 'KGwsZiwwLGEpfVhoKGEpfWZ1bmN0aW9uIEF2KGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPVR2KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gVHYoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxTcyxn'@;
put 'TChjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6cWEoYykpLG5ldyBjdihmLGx8fHM2KCksZHx8bnVsbCxoKX1sZXQgRWE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgY3JlYXRlKGEsZCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gQXYoe25hbWU6IiJ9LGQsYSwi'@;
put 'Iik7e2NvbnN0IGg9YS5uYW1lPz8iIjtyZXR1cm4gQXYoe25hbWU6aH0sYS5wYXJlbnQsYS5wcm92aWRlcnMsaCl9fX1yZXR1cm4gYy5USFJPV19JRl9OT1RfRk9VTkQ9czAsYy5OVUxMPW5ldyAkQyxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5Oigp'@;
put 'PT5hcihXQyl9KSxjLl9fTkdfRUxFTUVOVF9JRF9fPS0xLGN9KSgpO2Z1bmN0aW9uIHR0KGMsbD1ucy5EZWZhdWx0KXtjb25zdCBhPVhyKCk7cmV0dXJuIG51bGw9PT1hP2FyKGMsbCk6bkMoTWMoKSxhLGJvKGMpLGwpfWZ1bmN0aW9uIGI2KGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlKXtjb25z'@;
put 'dCB3ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB3ZVtIaV09aCx3ZVtEb109MTQwfGQsKG51bGwhPT1pZXx8YyYmMjA0OCZjW0RvXSkmJih3ZVtEb118PTIwNDgpLHlvKHdlKSx3ZVt1YV09d2VbUGxdPWMsd2VbVmFdPWEsd2VbSTFdPV98fGMmJmNbSTFdLHdlW1ZvXT1UfHxjJiZjW1Zv'@;
put 'XSx3ZVtJZF09V3x8YyYmY1tJZF18fG51bGwsd2Vbem9dPWYsd2VbJGhdPWZ1bmN0aW9uIFcyKCl7cmV0dXJuIE45Kyt9KCksd2VbdTBdPXBlLHdlW1IxXT1pZSx3ZVtKYV09Mj09bC50eXBlP2NbSmFdOndlLHdlfWZ1bmN0aW9uIEczKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51'@;
put 'bGw9PT1mKWY9ZnVuY3Rpb24gRHYoYyxsLGEsZCxoKXtjb25zdCBmPUZ3KCksXz1iOSgpLFc9Yy5kYXRhW2xdPWZ1bmN0aW9uIHc2KGMsbCxhLGQsaCxmKXtsZXQgXz1sP2wuaW5qZWN0b3JJbmRleDotMSxUPTA7cmV0dXJuIHczKCkmJihUfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRC'@;
put 'ZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6XyxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpULHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgs'@;
put 'YXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6bCxwcm9qZWN0'@;
put 'aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsXz9m'@;
put 'OmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPVcpLG51bGwhPT1mJiYoXz9udWxsPT1mLmNoaWxkJiZudWxsIT09Vy5wYXJlbnQmJihmLmNoaWxkPVcpOm51bGw9PT1mLm5leHQmJihmLm5leHQ9VyxXLnByZXY9ZikpLFd9KGMs'@;
put 'bCxhLGQsaCksZnVuY3Rpb24gcVQoKXtyZXR1cm4gUG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCBfPWZ1bmN0aW9uIEk0KCl7Y29uc3QgYz1Qby5sRnJhbWUsbD1jLmN1cnJlbnRU'@;
put 'Tm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09Xz8tMTpfLmluamVjdG9ySW5kZXh9cmV0dXJuIE4xKGYsITApLGZ9ZnVuY3Rpb24gbDUoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9'@;
put 'MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIEVTKGMsbCxhLGQsaCl7Y29uc3QgZj12UyhsLHAzKSxfPWV1KCksVD0yJmQ7dHJ5e2lmKFhoKC0xKSxUJiZsLmxlbmd0aD5wcyYma3YoYyxsLHBzLCExKSxo'@;
put 'MChUPzI6MCxoKSxUKWYucnVuSW5Db250ZXh0KGEsZCxoKTtlbHNle2NvbnN0IGllPWZsKG51bGwpO3RyeXthKGQsaCl9ZmluYWxseXtmbChpZSl9fX1maW5hbGx5e1QmJm51bGw9PT1sW3AzXSYmX1MobCxwMyksWGgoXyksaDAoVD8zOjEsaCl9fWZ1bmN0aW9uIEx2KGMsbCxhKXtpZihPZChs'@;
put 'KSl7Y29uc3QgZD1mbChudWxsKTt0cnl7Y29uc3QgZj1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IF89bC5kaXJlY3RpdmVTdGFydDtfPGY7XysrKXtjb25zdCBUPWMuZGF0YVtfXTtULmNvbnRlbnRRdWVyaWVzJiZULmNvbnRlbnRRdWVyaWVzKDEsYVtfXSxfKX19ZmluYWxseXtmbChkKX19fWZ1'@;
put 'bmN0aW9uIEl2KGMsbCxhKXtQdygpJiYoZnVuY3Rpb24gWUwoYyxsLGEsZCl7Y29uc3QgaD1hLmRpcmVjdGl2ZVN0YXJ0LGY9YS5kaXJlY3RpdmVFbmQ7UDEoYSkmJmZ1bmN0aW9uIEpMKGMsbCxhKXtjb25zdCBkPU5sKGwsYyksaD1rUyhhKTtsZXQgXz0xNjthLnNpZ25hbHM/Xz00MDk2OmEu'@;
put 'b25QdXNoJiYoXz02NCk7Y29uc3QgVD1TNihjLGI2KGMsaCxudWxsLF8sZCxsLG51bGwsY1tJMV0ucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGQsYSksbnVsbCxudWxsLG51bGwpKTtjW2wuaW5kZXhdPVR9KGwsYSxjLmRhdGFbaCthLmNvbXBvbmVudE9mZnNldF0pLGMuZmlyc3RD'@;
put 'cmVhdGVQYXNzfHxMbShhLGwpLEJjKGQsbCk7Y29uc3QgXz1hLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBUPWg7VDxmO1QrKyl7Y29uc3QgVz1jLmRhdGFbVF0saWU9UWgobCxjLFQsYSk7QmMoaWUsbCksbnVsbCE9PV8mJlFMKDAsVC1oLGllLFcsMCxfKSxRYyhXKSYmKG10KGEuaW5kZXgsbClb'@;
put 'VmFdPVFoKGwsYyxULGEpKX19KGMsbCxhLE5sKGEsbCkpLDY0PT0oNjQmYS5mbGFncykmJlJTKGMsbCxhKSl9ZnVuY3Rpb24geTYoYyxsLGE9Tmwpe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtj'@;
put 'b25zdCBfPWRbZisxXSxUPS0xPT09Xz9hKGwsYyk6Y1tfXTtjW2grK109VH19fWZ1bmN0aW9uIGtTKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PSQzKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGly'@;
put 'ZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uICQzKGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlKXtjb25zdCB3ZT1wcytkLEVlPXdlK2gsWmU9ZnVuY3Rpb24gQVMoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8'@;
put 'bDtkKyspYS5wdXNoKGQ8Yz9udWxsOlpvKTtyZXR1cm4gYX0od2UsRWUpLGl0PSJmdW5jdGlvbiI9PXR5cGVvZiBpZT9pZSgpOmllO3JldHVybiBaZVtCaV09e3R5cGU6YyxibHVlcHJpbnQ6WmUsdGVtcGxhdGU6YSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OlQsZGVjbFROb2RlOmwsZGF0YTpa'@;
put 'ZS5zbGljZSgpLmZpbGwobnVsbCx3ZSksYmluZGluZ1N0YXJ0SW5kZXg6d2UsZXhwYW5kb1N0YXJ0SW5kZXg6RWUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVl'@;
put 'cmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50'@;
put 'UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZj9mKCk6ZixwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIF8/XygpOl8sZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Vyxjb25zdHM6aXQsaW5jb21wbGV0ZUZpcnN0'@;
put 'UGFzczohMSxzc3JJZDpwZX19bGV0IFJ2PWM9Pm51bGw7ZnVuY3Rpb24gcGYoYyxsLGEsZCl7Zm9yKGxldCBoIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShoKSl7YT1udWxsPT09YT97fTphO2NvbnN0IGY9Y1toXTtudWxsPT09ZD9DNihhLGwsaCxmKTpkLmhhc093blByb3BlcnR5KGgpJiZD'@;
put 'NihhLGwsZFtoXSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBDNihjLGwsYSxkKXtjLmhhc093blByb3BlcnR5KGEpP2NbYV0ucHVzaChsLGQpOmNbYV09W2wsZF19ZnVuY3Rpb24gUHUoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBXPU5sKGwsYSk7bGV0IHBlLGllPWwuaW5wdXRzOyFUJiZudWxsIT1p'@;
put 'ZSYmKHBlPWllW2RdKT8oTnYoYyxhLHBlLGQsaCksUDEobCkmJmZ1bmN0aW9uIGpMKGMsbCl7Y29uc3QgYT1tdChsLGMpOzE2JmFbRG9dfHwoYVtEb118PTY0KX0oYSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIElTKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJm'@;
put 'b3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1jPyJyZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPV8/XyhoLGwudmFsdWV8fCIiLGQpOmgs'@;
put 'Zi5zZXRQcm9wZXJ0eShXLGQsaCkpfWZ1bmN0aW9uIE92KGMsbCxhLGQpe2lmKFB3KCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVsbDp7IiI6LTF9LGY9ZnVuY3Rpb24gR0woYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtm'@;
put 'PGEubGVuZ3RoO2YrKyl7Y29uc3QgXz1hW2ZdO2lmKG00KGwsXy5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxRYyhfKSlpZihudWxsIT09Xy5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2NvbnN0IFQ9W107aD1ofHxuZXcgTWFwLF8uZmluZEhvc3REaXJlY3RpdmVEZWZzKF8sVCxoKSxkLnVu'@;
put 'c2hpZnQoLi4uVCxfKSxQdihjLGwsVC5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KF8pLFB2KGMsbCwwKTtlbHNlIGg9aHx8bmV3IE1hcCxfLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8uKF8sZCxoKSxkLnB1c2goXyl9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IF8sVDtudWxs'@;
put 'PT09Zj9fPVQ9bnVsbDpbXyxUXT1mLG51bGwhPT1fJiZjNShjLGwsYSxfLGgsVCksaCYmZnVuY3Rpb24gJEwoYyxsLGEpe2lmKGwpe2NvbnN0IGQ9Yy5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBu'@;
put 'ZXcgQXIoLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9WWgoYS5tZXJnZWRBdHRycyxhLmF0dHJzKX1mdW5jdGlvbiBjNShjLGwsYSxkLGgsZil7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspVDkoTG0oYSxsKSxjLGRbaWVdLnR5cGUpOyFmdW5j'@;
put 'dGlvbiBLTChjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspe2NvbnN0IHBlPWRbaWVdO3BlLnByb3Zp'@;
put 'ZGVyc1Jlc29sdmVyJiZwZS5wcm92aWRlcnNSZXNvbHZlcihwZSl9bGV0IF89ITEsVD0hMSxXPWw1KGMsbCxkLmxlbmd0aCxudWxsKTtmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrKyl7Y29uc3QgcGU9ZFtpZV07YS5tZXJnZWRBdHRycz1ZaChhLm1lcmdlZEF0dHJzLHBlLmhvc3RBdHRy'@;
put 'cyksWEwoYyxhLGwsVyxwZSkscUwoVyxwZSxoKSxudWxsIT09cGUuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PXBlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PXBlLmhvc3RBdHRyc3x8MCE9PXBlLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCB3ZT1wZS50eXBlLnBy'@;
put 'b3RvdHlwZTshXyYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ09uSW5pdHx8d2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxfPSEwKSwhVCYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10p'@;
put 'LnB1c2goYS5pbmRleCksVD0hMCksVysrfSFmdW5jdGlvbiBCTChjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSxfPWwuYXR0cnMsVD1bXTtsZXQgVz1udWxsLGllPW51bGw7Zm9yKGxldCBwZT1sLmRpcmVjdGl2ZVN0YXJ0O3BlPGg7cGUrKyl7Y29uc3Qgd2U9ZltwZV0s'@;
put 'RWU9YT9hLmdldCh3ZSk6bnVsbCxpdD1FZT9FZS5vdXRwdXRzOm51bGw7Vz1wZih3ZS5pbnB1dHMscGUsVyxFZT9FZS5pbnB1dHM6bnVsbCksaWU9cGYod2Uub3V0cHV0cyxwZSxpZSxpdCk7Y29uc3QgZXQ9bnVsbD09PVd8fG51bGw9PT1ffHx1MyhsKT9udWxsOmVJKFcscGUsXyk7VC5wdXNo'@;
put 'KGV0KX1udWxsIT09VyYmKFcuaGFzT3duUHJvcGVydHkoImNsYXNzIikmJihsLmZsYWdzfD04KSxXLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYobC5mbGFnc3w9MTYpKSxsLmluaXRpYWxJbnB1dHM9VCxsLmlucHV0cz1XLGwub3V0cHV0cz1pZX0oYyxhLGYpfWZ1bmN0aW9uIFJTKGMsbCxh'@;
put 'KXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsXz1mdW5jdGlvbiBWdygpe3JldHVybiBQby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtYaChmKTtmb3IobGV0IFQ9ZDtUPGg7VCsrKXtjb25zdCBXPWMuZGF0YVtUXSxpZT1s'@;
put 'W1RdO1NtKFQpLChudWxsIT09Vy5ob3N0QmluZGluZ3N8fDAhPT1XLmhvc3RWYXJzfHxudWxsIT09Vy5ob3N0QXR0cnMpJiZXTChXLGllKX19ZmluYWxseXtYaCgtMSksU20oXyl9fWZ1bmN0aW9uIFdMKGMsbCl7bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1'@;
put 'bmN0aW9uIFB2KGMsbCxhKXtsLmNvbXBvbmVudE9mZnNldD1hLChjLmNvbXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiBxTChjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7'@;
put 'UWMobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gWEwoYyxsLGEsZCxoKXtjLmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1IMShoLnR5cGUpKSxfPW5ldyBSNChmLFFjKGgpLHR0KTtjLmJsdWVwcmludFtkXT1fLGFbZF09XyxmdW5jdGlvbiBVTChjLGwsYSxkLGgpe2Nv'@;
put 'bnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IF89Yy5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PV8mJihfPWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBUPX5sLmluZGV4OyhmdW5jdGlvbiBaTChjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxd'@;
put 'O2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkoXykhPVQmJl8ucHVzaChUKSxfLnB1c2goYSxkLGYpfX0oYyxsLGQsbDUoYyxhLGguaG9zdFZhcnMsWm8pLGgpfWZ1bmN0aW9uICQxKGMsbCxhLGQsaCxmKXtjb25zdCBfPU5sKGMsbCk7IWZ1bmN0aW9uIEZ2'@;
put 'KGMsbCxhLGQsaCxmLF8pe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3QgVD1udWxsPT1fP2tvKGYpOl8oZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsVCxhKX19KGxbVm9dLF8sZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBRTChjLGwsYSxkLGgs'@;
put 'Zil7Y29uc3QgXz1mW2xdO2lmKG51bGwhPT1fKWZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7KU9TKGQsYSxfW1QrK10sX1tUKytdLF9bVCsrXSl9ZnVuY3Rpb24gT1MoYyxsLGEsZCxoKXtjb25zdCBmPWZsKG51bGwpO3RyeXtjb25zdCBfPWMuaW5wdXRUcmFuc2Zvcm1zO251bGwhPT1fJiZfLmhh'@;
put 'c093blByb3BlcnR5KGQpJiYoaD1fW2RdLmNhbGwobCxoKSksbnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGgsYSxkKTpsW2RdPWh9ZmluYWxseXtmbChmKX19ZnVuY3Rpb24gZUkoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigw'@;
put 'IT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3QgXz1jW2ZdO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MilpZihfW1RdPT09bCl7ZC5wdXNoKGYsX1tUKzFdLGFbaCsxXSk7YnJl'@;
put 'YWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiBQUyhjLGwsYSxkKXtyZXR1cm5bYywhMCwhMSxsLG51bGwsMCxkLGEsbnVsbCxudWxsLG51bGxdfWZ1bmN0aW9uIEZTKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKWZvcihsZXQg'@;
put 'ZD0wO2Q8YS5sZW5ndGg7ZCs9Mil7Y29uc3QgZj1hW2QrMV07aWYoLTEhPT1mKXtjb25zdCBfPWMuZGF0YVtmXTtDOShhW2RdKSxfLmNvbnRlbnRRdWVyaWVzKDIsbFtmXSxmKX19fWZ1bmN0aW9uIFM2KGMsbCl7cmV0dXJuIGNbR2hdP2NbUzRdW1hhXT1sOmNbR2hdPWwsY1tTNF09bCxsfWZ1'@;
put 'bmN0aW9uIEh2KGMsbCxhKXtDOSgwKTtjb25zdCBkPWZsKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtmbChkKX19ZnVuY3Rpb24gSFMoYyl7cmV0dXJuIGNbVHVdfHwoY1tUdV09W10pfWZ1bmN0aW9uIE5TKGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFZT'@;
put 'KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFFjKGMpKSYmKGE9ZnVuY3Rpb24gTDQoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW000XSlyZXR1cm4gYztjPWNbSGldfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtWb119ZnVuY3Rpb24gQlMoYyxs'@;
put 'KXtjb25zdCBhPWNbSWRdLGQ9YT9hLmdldChoZixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9ZnVuY3Rpb24gTnYoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3QgXz1hW2YrK10sVD1hW2YrK107T1MoYy5kYXRhW19dLGxbX10sZCxULGgpfX1mdW5jdGlv'@;
put 'biBHZChjLGwsYSl7Y29uc3QgZD1ZMChsLGMpOyFmdW5jdGlvbiBNQyhjLGwsYSl7Yy5zZXRWYWx1ZShsLGEpfShjW1ZvXSxkLGEpfWZ1bmN0aW9uIHRJKGMsbCl7Y29uc3QgYT1tdChsLGMpLGQ9YVtCaV07IWZ1bmN0aW9uIG5JKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVlcHJp'@;
put 'bnQubGVuZ3RoO2ErKylsLnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVtIaV07bnVsbCE9PWgmJm51bGw9PT1hW3UwXSYmKGFbdTBdPW9TKGgsYVtJZF0pKSxWdihkLGEsYVtWYV0pfWZ1bmN0aW9uIFZ2KGMsbCxhKXtTOShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVyeTtu'@;
put 'dWxsIT09ZCYmSHYoMSxkLGEpO2NvbnN0IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmRVMoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZGUyhjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJkh2KDIsYy52'@;
put 'aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIGpTKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspdEkoYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxj'@;
put 'LmZpcnN0Q3JlYXRlUGFzcz0hMSksZH1maW5hbGx5e2xbRG9dJj0tNSxNbSgpfX1sZXQgelM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxsPW5ldyBTZXQsdGhpcy5xdWV1ZT1uZXcgTWFwfWNyZWF0ZShhLGQsaCl7Y29uc3QgZj10eXBlb2YgWm9uZT4idSI/bnVsbDpab25l'@;
put 'LmN1cnJlbnQsXz1uZXcgX20oYSxpZT0+e3RoaXMuYWxsLmhhcyhpZSkmJnRoaXMucXVldWUuc2V0KGllLGYpfSxoKTtsZXQgVDt0aGlzLmFsbC5hZGQoXyksXy5ub3RpZnkoKTtjb25zdCBXPSgpPT57Xy5jbGVhbnVwKCksVD8uKCksdGhpcy5hbGwuZGVsZXRlKF8pLHRoaXMucXVldWUuZGVs'@;
put 'ZXRlKF8pfTtyZXR1cm4gVD1kPy5vbkRlc3Ryb3koVykse2Rlc3Ryb3k6V319Zmx1c2goKXtpZigwIT09dGhpcy5xdWV1ZS5zaXplKWZvcihjb25zdFthLGRdb2YgdGhpcy5xdWV1ZSl0aGlzLnF1ZXVlLmRlbGV0ZShhKSxkP2QucnVuKCgpPT5hLnJ1bigpKTphLnJ1bigpfWdldCBpc1F1ZXVl'@;
put 'RW1wdHkoKXtyZXR1cm4gMD09PXRoaXMucXVldWUuc2l6ZX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pLGN9KSgpO2Z1bmN0aW9uIE02KGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3Nl'@;
put 'czpudWxsLGY9MDtpZihudWxsIT09bClmb3IobGV0IF89MDtfPGwubGVuZ3RoO18rKyl7Y29uc3QgVD1sW19dOyJudW1iZXIiPT10eXBlb2YgVD9mPVQ6MT09Zj9oPV9jKGgsVCk6Mj09ZiYmKGQ9X2MoZCxUKyI6ICIrbFsrK19dKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRI'@;
put 'b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHU1KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtpZihudWxsIT09ZiYmZC5wdXNoKF9hKGYpKSxvYyhmKSl7Zm9yKGxldCBUPWljO1Q8Zi5sZW5ndGg7VCsr'@;
put 'KXtjb25zdCBXPWZbVF0saWU9V1tCaV0uZmlyc3RDaGlsZDtudWxsIT09aWUmJnU1KFdbQmldLFcsaWUsZCl9ZltkMF0hPT1mW0hpXSYmZC5wdXNoKGZbZDBdKX1jb25zdCBfPWEudHlwZTtpZig4Jl8pdTUoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZfKXtjb25zdCBUPXo5KGEsbCk7bGV0'@;
put 'IFc7Zm9yKDtXPVQoKTspZC5wdXNoKFcpfWVsc2UgaWYoMTYmXyl7Y29uc3QgVD1EQyhsLGEpO2lmKEFycmF5LmlzQXJyYXkoVCkpZC5wdXNoKC4uLlQpO2Vsc2V7Y29uc3QgVz1aNChsW0phXSk7dTUoV1tCaV0sVyxULGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJu'@;
put 'IGR9ZnVuY3Rpb24geDYoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0kxXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbiYmaC5iZWdpbigpO3RyeXtVUyhjLGwsYy50ZW1wbGF0ZSxhKX1jYXRjaChfKXt0aHJvdyBkJiZCUyhsLF8pLF99ZmluYWxseXtoLmVuZCYmaC5lbmQoKSxsW0kxXS5lZmZlY3RN'@;
put 'YW5hZ2VyPy5mbHVzaCgpfX1mdW5jdGlvbiBVUyhjLGwsYSxkKXtjb25zdCBoPWxbRG9dO2lmKDI1NiE9KDI1NiZoKSl7bFtJMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKSxTOShsKTt0cnl7eW8obCksZnVuY3Rpb24gTncoYyl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i'@;
put 'aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJkVTKGMsbCxhLDIsZCk7Y29uc3QgXz0zPT0oMyZoKTtpZihfKXtjb25zdCBpZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUsbnVsbCl9ZWxzZXtjb25zdCBpZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWllJiZBbShs'@;
put 'LGllLDAsbnVsbCksTTkobCwwKX1pZihmdW5jdGlvbiBhSShjKXtmb3IobGV0IGw9Q0MoYyk7bnVsbCE9PWw7bD1TQyhsKSl7aWYoIWxbdW1dKWNvbnRpbnVlO2NvbnN0IGE9bFtIMl07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2VzKGFbZF0pfX19KGwpLFpTKGwsMiksbnVsbCE9PWMu'@;
put 'Y29udGVudFF1ZXJpZXMmJkZTKGMsbCksXyl7Y29uc3QgaWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDEpLE05KGwsMSl9IWZ1bmN0aW9uIHhTKGMsbCl7Y29uc3QgYT1jLmhv'@;
put 'c3RCaW5kaW5nT3BDb2RlcztpZihudWxsPT09YSlyZXR1cm47Y29uc3QgZD12UyhsLGczKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZihmPDApWGgofmYpO2Vsc2V7Y29uc3QgXz1mLFQ9YVsrK2hdLFc9YVsrK2hdO0tUKFQsXyksZC5ydW5JbkNvbnRl'@;
put 'eHQoVywyLGxbX10pfX19ZmluYWxseXtudWxsPT09bFtnM10mJl9TKGwsZzMpLFhoKC0xKX19KGMsbCk7Y29uc3QgVD1jLmNvbXBvbmVudHM7bnVsbCE9PVQmJldTKGwsVCwwKTtjb25zdCBXPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1XJiZIdigyLFcsZCksXyl7Y29uc3QgaWU9Yy52aWV3Q2hl'@;
put 'Y2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy52aWV3SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDIpLE05KGwsMil9ITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW0RvXSY9LTczLHpzKGwpfWZpbmFsbHl7TW0oKX19fWZ1'@;
put 'bmN0aW9uIFpTKGMsbCl7Zm9yKGxldCBhPUNDKGMpO251bGwhPT1hO2E9U0MoYSkpZm9yKGxldCBkPWljO2Q8YS5sZW5ndGg7ZCsrKVlTKGFbZF0sbCl9ZnVuY3Rpb24gbEkoYyxsLGEpe1lTKG10KGwsYyksYSl9ZnVuY3Rpb24gWVMoYyxsKXtpZighZnVuY3Rpb24gR3QoYyl7cmV0dXJuIDEy'@;
put 'OD09KDEyOCZjW0RvXSl9KGMpKXJldHVybjtjb25zdCBhPWNbQmldO2lmKDgwJmNbRG9dJiYwPT09bHx8MTAyNCZjW0RvXXx8Mj09PWwpVVMoYSxjLGEudGVtcGxhdGUsY1tWYV0pO2Vsc2UgaWYoY1tMMV0+MCl7WlMoYywxKTtjb25zdCBoPWNbQmldLmNvbXBvbmVudHM7bnVsbCE9PWgmJldT'@;
put 'KGMsaCwxKX19ZnVuY3Rpb24gV1MoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxJKGMsbFtkXSxhKX1jbGFzcyBkNXtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbQmldO3JldHVybiB1NShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbVmFdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W1ZhXT1s'@;
put 'fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMjU2PT0oMjU2JnRoaXMuX2xWaWV3W0RvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3'@;
put 'W3VhXTtpZihvYyhsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHNmKGwsZCksUG0oYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9S20odGhpcy5fbFZpZXdbQmldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7IWZ1bmN0aW9uIGYw'@;
put 'KGMsbCl7aWYoMjU2PT0oMjU2JmNbRG9dKSl0aHJvdyBuZXcgQXIoOTExLCExKTtudWxsPT09Y1tPMV0mJihjW08xXT1bXSksY1tPMV0ucHVzaChsKX0odGhpcy5fbFZpZXcsbCl9bWFya0ZvckNoZWNrKCl7YTUodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNo'@;
put 'KCl7dGhpcy5fbFZpZXdbRG9dJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbRG9dfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3g2KHRoaXMuX2xWaWV3W0JpXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lm'@;
put 'KHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgQXIoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZnVuY3Rpb24gekQoYyxsKXtHNChjLGwsbFtWb10sMixudWxsLG51bGwpfSh0aGlzLl9sVmlld1tCaV0s'@;
put 'dGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBBcig5MDIsITEpO3RoaXMuX2FwcFJlZj1sfX1jbGFzcyBjSSBleHRlbmRzIGQ1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuX3ZpZXc9bH1kZXRlY3RD'@;
put 'aGFuZ2VzKCl7Y29uc3QgbD10aGlzLl92aWV3O3g2KGxbQmldLGwsbFtWYV0sITEpfWNoZWNrTm9DaGFuZ2VzKCl7fWdldCBjb250ZXh0KCl7cmV0dXJuIG51bGx9fWNsYXNzIEdTIGV4dGVuZHMgSzB7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBv'@;
put 'bmVudEZhY3RvcnkobCl7Y29uc3QgYT1RbyhsKTtyZXR1cm4gbmV3IGg1KGEsdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uICRTKGMpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShhKSYmbC5wdXNoKHtwcm9wTmFtZTpjW2FdLHRlbXBsYXRlTmFtZTphfSk7cmV0'@;
put 'dXJuIGx9Y2xhc3MgZEl7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1hMChkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsQ3YsZCk7cmV0dXJuIGghPT1Ddnx8YT09PUN2P2g6dGhpcy5wYXJlbnRJbmplY3Rv'@;
put 'ci5nZXQobCxhLGQpfX1jbGFzcyBoNSBleHRlbmRzIGNTe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD0kUyhsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUp'@;
put 'JiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gJFModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50'@;
put 'VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiB0OShjKXtyZXR1cm4gYy5tYXAoYW0pLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRv'@;
put 'TW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7bGV0IGY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIHEwP2g6aD8uaW5qZWN0b3I7ZiYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKGY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9u'@;
put 'ZUluamVjdG9yKGYpfHxmKTtjb25zdCBfPWY/bmV3IGRJKGwsZik6bCxUPV8uZ2V0KFkzLG51bGwpO2lmKG51bGw9PT1UKXRocm93IG5ldyBBcig0MDcsITEpO2NvbnN0IHBlPXtyZW5kZXJlckZhY3Rvcnk6VCxzYW5pdGl6ZXI6Xy5nZXQocDYsbnVsbCksZWZmZWN0TWFuYWdlcjpfLmdldCh6'@;
put 'UyxudWxsKX0sd2U9VC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxFZT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLFplPWQ/ZnVuY3Rpb24gVFMoYyxsLGEsZCl7Y29uc3QgZj1kLmdldCh4diwhMSl8fGE9PT1QYy5TaGFkb3dEb20sXz1j'@;
put 'LnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIE5MKGMpe1J2KGMpfShfKSxffSh3ZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sXyk6cW0od2UsRWUsZnVuY3Rpb24gdUkoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJz'@;
put 'dmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEVlKSkseXQ9dGhpcy5jb21wb25lbnREZWYuc2lnbmFscz80NjA4OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD81NzY6NTI4LEV0PSQzKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksU3Q9YjYobnVsbCxF'@;
put 'dCxudWxsLHl0LG51bGwsbnVsbCxwZSx3ZSxfLG51bGwsbnVsbCk7bGV0IEp0LG5uO1M5KFN0KTt0cnl7Y29uc3Qgdm49dGhpcy5jb21wb25lbnREZWY7bGV0IE5uLGNyPW51bGw7dm4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyhObj1bXSxjcj1uZXcgTWFwLHZuLmZpbmRIb3N0RGlyZWN0aXZl'@;
put 'RGVmcyh2bixObixjciksTm4ucHVzaCh2bikpOk5uPVt2bl07Y29uc3QgTHI9ZnVuY3Rpb24gcVMoYyxsKXtjb25zdCBhPWNbQmldLGQ9cHM7cmV0dXJuIGNbZF09bCxHMyhhLGQsMiwiI2hvc3QiLG51bGwpfShTdCxaZSksRWk9ZnVuY3Rpb24gZkkoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1o'@;
put 'W0JpXTshZnVuY3Rpb24gcEkoYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPVloKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoTTYobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmT0MoZCxhLGwpKX0oZCxjLGwsXyk7'@;
put 'bGV0IFc9bnVsbDtudWxsIT09bCYmKFc9b1MobCxoW0lkXSkpO2NvbnN0IGllPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHBlPTE2O2Euc2lnbmFscz9wZT00MDk2OmEub25QdXNoJiYocGU9NjQpO2NvbnN0IHdlPWI2KGgsa1MoYSksbnVsbCxwZSxoW2MuaW5k'@;
put 'ZXhdLGMsZixpZSxudWxsLG51bGwsVyk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZQdihULGMsZC5sZW5ndGgtMSksUzYoaCx3ZSksaFtjLmluZGV4XT13ZX0oTHIsWmUsdm4sTm4sU3QscGUsd2UpO25uPWtlKEV0LHBzKSxaZSYmZnVuY3Rpb24gbUkoYyxsLGEsZCl7aWYoZClEZChjLGEs'@;
put 'WyJuZy12ZXJzaW9uIixBTC5mdWxsXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gXzQoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w'@;
put 'dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIUhjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJkRkKGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZSQyhjLGEsZi5qb2luKCIgIikpfX0od2Usdm4sWmUsZCks'@;
put 'dm9pZCAwIT09YSYmZnVuY3Rpb24gdkkoYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KG5uLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLEp0'@;
put 'PWZ1bmN0aW9uIGdJKGMsbCxhLGQsaCxmKXtjb25zdCBfPU1jKCksVD1oW0JpXSxXPU5sKF8saCk7YzUoVCxoLF8sYSxudWxsLGQpO2ZvcihsZXQgcGU9MDtwZTxhLmxlbmd0aDtwZSsrKUJjKFFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K3BlLF8pLGgpO1JTKFQsaCxfKSxXJiZCYyhXLGgpO2Nv'@;
put 'bnN0IGllPVFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K18uY29tcG9uZW50T2Zmc2V0LF8pO2lmKGNbVmFdPWhbVmFdPWllLG51bGwhPT1mKWZvcihjb25zdCBwZSBvZiBmKXBlKGllLGwpO3JldHVybiBMdihULF8sYyksaWV9KEVpLHZuLE5uLGNyLFN0LFtfSV0pLFZ2KEV0LFN0LG51bGwpfWZp'@;
put 'bmFsbHl7TW0oKX1yZXR1cm4gbmV3IGhJKHRoaXMuY29tcG9uZW50VHlwZSxKdCxZZChubixTdCksU3Qsbm4pfX1jbGFzcyBoSSBleHRlbmRzIGxTe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhpcy5fdE5vZGU9Zix0'@;
put 'aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBjSShoKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5vZGUuaW5wdXRzO2xldCBoO2lmKG51'@;
put 'bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29uc3QgZj10aGlzLl9yb290TFZpZXc7'@;
put 'TnYoZltCaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGE1KG10KHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyB4Myh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRl'@;
put 'c3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIF9JKCl7Y29uc3QgYz1NYygpO0VtKFhyKClbQmldLGMpfWZ1bmN0aW9uIGVvKGMpe2xldCBsPWZ1bmN0aW9uIEtTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5'@;
put 'cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoUWMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0aHJvdyBuZXcgQXIoOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVz'@;
put 'aChoKTtjb25zdCBfPWM7Xy5pbnB1dHM9RTYoYy5pbnB1dHMpLF8uaW5wdXRUcmFuc2Zvcm1zPUU2KGMuaW5wdXRUcmFuc2Zvcm1zKSxfLmRlY2xhcmVkSW5wdXRzPUU2KGMuZGVjbGFyZWRJbnB1dHMpLF8ub3V0cHV0cz1FNihjLm91dHB1dHMpO2NvbnN0IFQ9aC5ob3N0QmluZGluZ3M7VCYm'@;
put 'd0koYyxUKTtjb25zdCBXPWgudmlld1F1ZXJ5LGllPWguY29udGVudFF1ZXJpZXM7aWYoVyYmYkkoYyxXKSxpZSYmeUkoYyxpZSksbjAoYy5pbnB1dHMsaC5pbnB1dHMpLG4wKGMuZGVjbGFyZWRJbnB1dHMsaC5kZWNsYXJlZElucHV0cyksbjAoYy5vdXRwdXRzLGgub3V0cHV0cyksbnVsbCE9'@;
put 'PWguaW5wdXRUcmFuc2Zvcm1zJiYobnVsbD09PV8uaW5wdXRUcmFuc2Zvcm1zJiYoXy5pbnB1dFRyYW5zZm9ybXM9e30pLG4wKF8uaW5wdXRUcmFuc2Zvcm1zLGguaW5wdXRUcmFuc2Zvcm1zKSksUWMoaCkmJmguZGF0YS5hbmltYXRpb24pe2NvbnN0IHBlPWMuZGF0YTtwZS5hbmltYXRpb249'@;
put 'KHBlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChoLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZj1oLmZlYXR1cmVzO2lmKGYpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXTtUJiZULm5nSW5oZXJpdCYmVChjKSxUPT09ZW8mJihhPSExKX19bD1PYmplY3QuZ2V0UHJvdG90'@;
put 'eXBlT2YobCl9IWZ1bmN0aW9uIEJ2KGMpe2xldCBsPTAsYT1udWxsO2ZvcihsZXQgZD1jLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWNbZF07aC5ob3N0VmFycz1sKz1oLmhvc3RWYXJzLGguaG9zdEF0dHJzPVloKGguaG9zdEF0dHJzLGE9WWgoYSxoLmhvc3RBdHRycykpfX0oZCl9ZnVu'@;
put 'Y3Rpb24gRTYoYyl7cmV0dXJuIGM9PT1YYz97fTpjPT09U3M/W106Y31mdW5jdGlvbiBiSShjLGwpe2NvbnN0IGE9Yy52aWV3UXVlcnk7Yy52aWV3UXVlcnk9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24geUkoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXM7Yy5jb250'@;
put 'ZW50UXVlcmllcz1hPyhkLGgsZik9PntsKGQsaCxmKSxhKGQsaCxmKX06bH1mdW5jdGlvbiB3SShjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ3M7Yy5ob3N0QmluZGluZ3M9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24gZU0oYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9'@;
put 'e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFsyXSYmKGFbZF09aFsyXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1mdW5jdGlvbiBrNihjKXtyZXR1cm4hIUE2KGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShj'@;
put 'IGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEE2KGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIGpjKGMsbCxh'@;
put 'KXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIGdmKGMsbCxhLGQpe2NvbnN0IGg9amMoYyxsLGEpO3JldHVybiBqYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBUNihjLGwsYSxkLGgpe2NvbnN0IGY9Z2YoYyxsLGEsZCk7cmV0dXJuIGpjKGMsbCsyLGgpfHxm'@;
put 'fWZ1bmN0aW9uIG0wKGMsbCxhLGQsaCxmKXtjb25zdCBfPWdmKGMsbCxhLGQpO3JldHVybiBnZihjLGwrMixoLGYpfHxffWZ1bmN0aW9uIFRyKGMsbCxhLGQpe2NvbnN0IGg9WHIoKTtyZXR1cm4gamMoaCxDMygpLGwpJiYoVHMoKSwkMShRYSgpLGgsYyxsLGEsZCkpLFRyfWZ1bmN0aW9uIEsz'@;
put 'KGMsbCxhLGQpe3JldHVybiBqYyhjLEMzKCksYSk/bCtrbyhhKStkOlpvfWZ1bmN0aW9uIEplKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1YcigpLGllPVRzKCkscGU9Yytwcyx3ZT1pZS5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gV0koYyxsLGEsZCxoLGYsXyxULFcpe2NvbnN0IGllPWwu'@;
put 'Y29uc3RzLHBlPUczKGwsYyw0LF98fG51bGwsRHIoaWUsVCkpO092KGwsYSxwZSxEcihpZSxXKSksRW0obCxwZSk7Y29uc3Qgd2U9cGUudFZpZXc9JDMoMixwZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLGllLG51bGwpO3JldHVybiBu'@;
put 'dWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscGUpLHdlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocGUpKSxwZX0ocGUsaWUsVyxsLGEsZCxoLGYsXyk6aWUuZGF0YVtwZV07TjEod2UsITEpO2NvbnN0IEVlPUt2KGllLFcsd2UsYyk7eG0oKSYmZTYoaWUs'@;
put 'VyxFZSx3ZSksQmMoRWUsVyksUzYoVyxXW3BlXT1QUyhFZSxXLEVlLHdlKSkscWgod2UpJiZJdihpZSxXLHdlKSxudWxsIT1fJiZ5NihXLHdlLFQpfWxldCBLdj1mdW5jdGlvbiBYdihjLGwsYSxkKXtyZXR1cm4gVmQoITApLGxbVm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiAkaShj'@;
put 'KXtyZXR1cm4gJGUoZnVuY3Rpb24gJFQoKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlld30oKSxwcytjKX1mdW5jdGlvbiBSZShjLGwsYSl7Y29uc3QgZD1YcigpO3JldHVybiBqYyhkLEMzKCksbCkmJlB1KFRzKCksUWEoKSxkLGMsbCxkW1ZvXSxhLCExKSxSZX1mdW5jdGlvbiBKdihj'@;
put 'LGwsYSxkLGgpe2NvbnN0IF89aD8iY2xhc3MiOiJzdHlsZSI7TnYoYyxhLGwuaW5wdXRzW19dLF8sZCl9ZnVuY3Rpb24gbWUoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPXBzK2MsVD1oW1ZvXSxXPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIHVNKGMsbCxhLGQsaCxmKXtjb25z'@;
put 'dCBfPWwuY29uc3RzLFc9RzMobCxjLDIsZCxEcihfLGgpKTtyZXR1cm4gT3YobCxhLFcsRHIoXyxmKSksbnVsbCE9PVcuYXR0cnMmJk02KFcsVy5hdHRycywhMSksbnVsbCE9PVcubWVyZ2VkQXR0cnMmJk02KFcsVy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVz'@;
put 'LmVsZW1lbnRTdGFydChsLFcpLFd9KF8sZixoLGwsYSxkKTpmLmRhdGFbX10saWU9ZE0oZixoLFcsVCxsLGMpO2hbX109aWU7Y29uc3QgcGU9cWgoVyk7cmV0dXJuIE4xKFcsITApLE9DKFQsaWUsVyksMzIhPSgzMiZXLmZsYWdzKSYmeG0oKSYmZTYoZixoLGllLFcpLDA9PT1mdW5jdGlvbiBC'@;
put 'VCgpe3JldHVybiBQby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCkmJkJjKGllLGgpLGZ1bmN0aW9uIGpUKCl7UG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCkscGUmJihJdihmLGgsVyksTHYoZixXLGgpKSxudWxsIT09ZCYmeTYoaCxXKSxtZX1mdW5jdGlvbiB5ZSgpe2xldCBj'@;
put 'PU1jKCk7YjkoKT9DbSgpOihjPWMucGFyZW50LE4xKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIFVUKGMpe3JldHVybiBQby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBHVCgpe1BvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiB6'@;
put 'VCgpe1BvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9VHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFbShhLGMpLE9kKGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHNEKGMpe3JldHVy'@;
put 'biAwIT0oOCZjLmZsYWdzKX0obCkmJkp2KGEsbCxYcigpLGwuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1sLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBhRChjKXtyZXR1cm4gMCE9KDE2JmMuZmxhZ3MpfShsKSYmSnYoYSxsLFhyKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSks'@;
put 'eWV9ZnVuY3Rpb24gcXQoYyxsLGEsZCl7cmV0dXJuIG1lKGMsbCxhLGQpLHllKCkscXR9bGV0IGRNPShjLGwsYSxkLGgsZik9PihWZCghMCkscW0oZCxoLGZ1bmN0aW9uIEd3KCl7cmV0dXJuIFBvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gVnIoYyxsLGEpe2NvbnN0'@;
put 'IGQ9WHIoKSxoPVRzKCksZj1jK3BzLF89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUXYoYyxsLGEsZCxoKXtjb25zdCBmPWwuY29uc3RzLF89RHIoZixkKSxUPUczKGwsYyw4LCJuZy1jb250YWluZXIiLF8pO3JldHVybiBudWxsIT09XyYmTTYoVCxfLCEwKSxPdihsLGEsVCxEcihmLGgp'@;
put 'KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsVCksVH0oZixoLGQsbCxhKTpoLmRhdGFbZl07TjEoXywhMCk7Y29uc3QgVD1mTShoLGQsXyxjKTtyZXR1cm4gZFtmXT1ULHhtKCkmJmU2KGgsZCxULF8pLEJjKFQsZCkscWgoXykmJihJdihoLGQsXyksTHYoaCxf'@;
put 'LGQpKSxudWxsIT1hJiZ5NihkLF8pLFZyfWZ1bmN0aW9uIHpyKCl7bGV0IGM9TWMoKTtjb25zdCBsPVRzKCk7cmV0dXJuIGI5KCk/Q20oKTooYz1jLnBhcmVudCxOMShjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihFbShsLGMpLE9kKGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksenJ9'@;
put 'ZnVuY3Rpb24gamEoYyxsLGEpe3JldHVybiBWcihjLGwsYSksenIoKSxqYX1sZXQgZk09KGMsbCxhLGQpPT4oVmQoITApLFU5KGxbVm9dLCIiKSk7ZnVuY3Rpb24gVm4oKXtyZXR1cm4gWHIoKX1mdW5jdGlvbiB2NShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVu'@;
put 'Y3Rpb24gcE0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9ZnVuY3Rpb24geHQoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPU1jKCk7cmV0dXJuIGdNKGYsaCxoW1ZvXSxfLGMsbCxkKSx4dH1mdW5jdGlvbiBlXyhjLGwpe2NvbnN0IGE9TWMoKSxk'@;
put 'PVhyKCksaD1UcygpO3JldHVybiBnTShoLGQsVlModzkoaC5kYXRhKSxhLGQpLGEsYyxsKSxlX31mdW5jdGlvbiBnTShjLGwsYSxkLGgsZixfKXtjb25zdCBUPXFoKGQpLGllPWMuZmlyc3RDcmVhdGVQYXNzJiZOUyhjKSxwZT1sW1ZhXSx3ZT1IUyhsKTtsZXQgRWU9ITA7aWYoMyZkLnR5cGV8'@;
put 'fF8pe2NvbnN0IGV0PU5sKGQsbCkseXQ9Xz9fKGV0KTpldCxFdD13ZS5sZW5ndGgsU3Q9Xz9ubj0+XyhfYShubltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIV8mJlQmJihKdD1mdW5jdGlvbiBYSShjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihs'@;
put 'ZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCBfPWhbZl07aWYoXz09PWEmJmhbZisxXT09PWQpe2NvbnN0IFQ9bFtUdV0sVz1oW2YrMl07cmV0dXJuIFQubGVuZ3RoPlc/VFtXXTpudWxsfSJzdHJpbmciPT10eXBlb2YgXyYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4'@;
put 'KSksbnVsbCE9PUp0KShKdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8SnQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsSnQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixFZT0hMTtlbHNle2Y9dk0oZCxsLHBlLGYsITEpO2NvbnN0IG5uPWEubGlzdGVuKHl0LGgsZik7d2UucHVzaChmLG5uKSxpZSYm'@;
put 'aWUucHVzaChoLFN0LEV0LEV0KzEpfX1lbHNlIGY9dk0oZCxsLHBlLGYsITEpO2NvbnN0IFplPWQub3V0cHV0cztsZXQgaXQ7aWYoRWUmJm51bGwhPT1aZSYmKGl0PVplW2hdKSl7Y29uc3QgZXQ9aXQubGVuZ3RoO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldDt5dCs9Mil7Y29uc3Qgdm49bFtp'@;
put 'dFt5dF1dW2l0W3l0KzFdXS5zdWJzY3JpYmUoZiksTm49d2UubGVuZ3RoO3dlLnB1c2goZix2biksaWUmJmllLnB1c2goaCxkLmluZGV4LE5uLC0oTm4rMSkpfX19ZnVuY3Rpb24gbU0oYyxsLGEsZCl7dHJ5e3JldHVybiBoMCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGgpe3JldHVybiBCUyhj'@;
put 'LGgpLCExfWZpbmFsbHl7aDAoNyxsLGEpfX1mdW5jdGlvbiB2TShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKF8pe2lmKF89PT1GdW5jdGlvbilyZXR1cm4gZDthNShjLmNvbXBvbmVudE9mZnNldD4tMT9tdChjLmluZGV4LGwpOmwpO2xldCBXPW1NKGwsYSxkLF8pLGllPWYuX19uZ05l'@;
put 'eHRMaXN0ZW5lckZuX187Zm9yKDtpZTspVz1tTShsLGEsaWUsXykmJlcsaWU9aWUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09VyYmXy5wcmV2ZW50RGVmYXVsdCgpLFd9fWZ1bmN0aW9uIFZlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIFhUKGMpe3JldHVybihQby5sRnJhbWUu'@;
put 'Y29udGV4dExWaWV3PWZ1bmN0aW9uIEpUKGMsbCl7Zm9yKDtjPjA7KWw9bFtQbF0sYy0tO3JldHVybiBsfShjLFBvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtWYV19KGMpfWZ1bmN0aW9uIEpJKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIFdoKGMpe2NvbnN0IGw9Yy5hdHRycztp'@;
put 'ZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9tNChjLGYsITApOnY0KGQsZikpcmV0dXJuIGh9'@;
put 'ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gQWkoYyl7Y29uc3QgbD1YcigpW0phXVt6b107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249QmQoYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IF89'@;
put 'Yz9KSShmLGMpOjA7bnVsbCE9PV8mJihoW19dP2hbX10ucHJvamVjdGlvbk5leHQ9ZjpkW19dPWYsaFtfXT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIGtyKGMsbD0wLGEpe2NvbnN0IGQ9WHIoKSxoPVRzKCksZj1HMyhoLHBzK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9u'@;
put 'JiYoZi5wcm9qZWN0aW9uPWwpLENtKCksKCFkW3UwXXx8dzMoKSkmJjMyIT0oMzImZi5mbGFncykmJmZ1bmN0aW9uIFlEKGMsbCxhKXtXRChsW1ZvXSwwLGwsYSxGMyhjLGEsbCksVzEoYS5wYXJlbnR8fGxbem9dLGEsbCkpfShoLGQsZil9ZnVuY3Rpb24gRWMoYyxsLGEpe3JldHVybiBYMihj'@;
put 'LCIiLGwsIiIsYSksRWN9ZnVuY3Rpb24gWDIoYyxsLGEsZCxoKXtjb25zdCBmPVhyKCksXz1LMyhmLGwsYSxkKTtyZXR1cm4gXyE9PVpvJiZQdShUcygpLFFhKCksZixjLF8sZltWb10saCwhMSksWDJ9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBYMChjKXty'@;
put 'ZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gdF8oYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBKMChjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIG5fKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8PDJ9ZnVuY3Rpb24gcl8oYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBNTShjLGwsYSxkLGgp'@;
put 'e2NvbnN0IGY9Y1thKzFdLF89bnVsbD09PWw7bGV0IFQ9ZD9YMChmKTpKMChmKSxXPSExO2Zvcig7MCE9PVQmJighMT09PVd8fF8pOyl7Y29uc3QgcGU9Y1tUKzFdO25SKGNbVF0sbCkmJihXPSEwLGNbVCsxXT1kP3JfKHBlKTp0XyhwZSkpLFQ9ZD9YMChwZSk6SjAocGUpfVcmJihjW2ErMV09'@;
put 'ZD90XyhmKTpyXyhmKSl9ZnVuY3Rpb24gblIoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZqZChjLGwpPj0wfWNvbnN0IEJsPXt0ZXh0RW5kOjAsa2V5'@;
put 'OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiB4TShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoQmwua2V5LEJsLmtleUVuZCl9ZnVuY3Rpb24gRU0oYyxsKXtjb25zdCBhPUJsLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPUJsLmtleUVuZD1mdW5jdGlvbiBzUihjLGws'@;
put 'YSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLEJsLmtleT1sLGEpLHZmKGMsbCxhKSl9ZnVuY3Rpb24gdmYoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gSHUoYyxsLGEpe3JldHVybiB2MChj'@;
put 'LGwsYSwhMSksSHV9ZnVuY3Rpb24gZHIoYyxsKXtyZXR1cm4gdjAoYyxsLG51bGwsITApLGRyfWZ1bmN0aW9uIEsxKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGlSKGMpe3JldHVybiBmdW5jdGlvbiBGdShjKXtCbC5rZXk9MCxCbC5rZXlFbmQ9MCxCbC52YWx1ZT0wLEJsLnZhbHVlRW5kPTAs'@;
put 'QmwudGV4dEVuZD1jLmxlbmd0aH0oYyksRU0oYyx2ZihjLDAsQmwudGV4dEVuZCkpfShsKTthPj0wO2E9RU0obCxhKSl4YyhjLHhNKGwpLCEwKX1mdW5jdGlvbiB2MChjLGwsYSxkKXtjb25zdCBoPVhyKCksZj1UcygpLF89VjEoMik7Zi5maXJzdFVwZGF0ZVBhc3MmJlgxKGYsYyxfLGQpLGwh'@;
put 'PT1abyYmamMoaCxfLGwpJiZjXyhmLGYuZGF0YVtldSgpXSxoLGhbVm9dLGMsaFtfKzFdPWZ1bmN0aW9uIElNKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9cWEoJDIoYykpKSksY30obCxhKSxkLF8p'@;
put 'fWZ1bmN0aW9uIERNKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gWDEoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2V1KCldLF89RE0oYyxhKTt1XyhmLGQpJiZudWxsPT09bCYmIV8mJihsPSExKSxsPWZ1bmN0'@;
put 'aW9uIGxSKGMsbCxhLGQpe2NvbnN0IGg9dzkoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9eTUoYT1sXyhudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1u'@;
put 'dWxsKTtlbHNle2NvbnN0IF89bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PV98fGNbX10hPT1oKWlmKGE9bF8oaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IFc9ZnVuY3Rpb24gY1IoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1K'@;
put 'MChkKSlyZXR1cm4gY1tYMChkKV19KGMsbCxkKTt2b2lkIDAhPT1XJiZBcnJheS5pc0FycmF5KFcpJiYoVz1sXyhudWxsLGMsbCxXWzFdLGQpLFc9eTUoVyxsLmF0dHJzLGQpLGZ1bmN0aW9uIHVSKGMsbCxhLGQpe2NbWDAoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0o'@;
put 'YyxsLGQsVykpfWVsc2UgZj1mdW5jdGlvbiBkUihjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD15NShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiB5NShkLGwuYXR0cnMsYSl9KGMsbCxkKX1y'@;
put 'ZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIGVSKGMsbCxhLGQsaCxmKXtsZXQgXz1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsVD1YMChfKSxXPUowKF8pO2NbZF09YTtsZXQg'@;
put 'cGUsaWU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8ocGU9YVsxXSwobnVsbD09PXBlfHxqZChhLHBlKT4wKSYmKGllPSEwKSk6cGU9YSxoKWlmKDAhPT1XKXtjb25zdCBFZT1YMChjW1QrMV0pO2NbZCsxXT1iNShFZSxUKSwwIT09RWUmJihjW0VlKzFdPW5fKGNbRWUrMV0sZCkpLGNbVCsxXT1m'@;
put 'dW5jdGlvbiBDaShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tUKzFdLGQpfWVsc2UgY1tkKzFdPWI1KFQsMCksMCE9PVQmJihjW1QrMV09bl8oY1tUKzFdLGQpKSxUPWQ7ZWxzZSBjW2QrMV09YjUoVywwKSwwPT09VD9UPWQ6Y1tXKzFdPW5fKGNbVysxXSxkKSxXPWQ7aWUmJihjW2Qr'@;
put 'MV09dF8oY1tkKzFdKSksTU0oYyxwZSxkLCEwKSxNTShjLHBlLGQsITEpLGZ1bmN0aW9uIHRSKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZqZChmLGwpPj0wJiYoYVtkKzFdPXJfKGFb'@;
put 'ZCsxXSkpfShsLHBlLGMsZCxmKSxfPWI1KFQsVyksZj9sLmNsYXNzQmluZGluZ3M9XzpsLnN0eWxlQmluZGluZ3M9X30oaCxmLGwsYSxfLGQpfX1mdW5jdGlvbiBsXyhjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3QgXz1hLmRpcmVjdGl2ZUVuZDtsZXQgVD1hLmRpcmVjdGl2ZVN0eWxpbmdM'@;
put 'YXN0O2ZvcigtMT09PVQ/VD1hLmRpcmVjdGl2ZVN0YXJ0OlQrKztUPF8mJihmPWxbVF0sZD15NShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspVCsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9VCksZH1mdW5jdGlvbiB5NShjLGwsYSl7Y29uc3QgZD1hPzE6Mjts'@;
put 'ZXQgaD0tMTtpZihudWxsIT09bClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3QgXz1sW2ZdOyJudW1iZXIiPT10eXBlb2YgXz9oPV86aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSkseGMoYyxfLCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZv'@;
put 'aWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9uIGNfKGMsbCxhLGQsaCxmLF8sVCl7aWYoISgzJmwudHlwZSkpcmV0dXJuO2NvbnN0IFc9Yy5kYXRhLGllPVdbVCsxXSxwZT1mdW5jdGlvbiBRSShjKXtyZXR1cm4gMT09KDEmYyl9KGllKT9lbChXLGwsYSxoLEowKGllKSxfKTp2b2lkIDA7SjEocGUp'@;
put 'fHwoSjEoZil8fGZ1bmN0aW9uIFNNKGMpe3JldHVybiAyPT0oMiZjKX0oaWUpJiYoZj1lbChXLG51bGwsYSxoLFQsXykpLGZ1bmN0aW9uIElaKGMsbCxhLGQsaCl7aWYobCloP2MuYWRkQ2xhc3MoYSxkKTpjLnJlbW92ZUNsYXNzKGEsZCk7ZWxzZXtsZXQgZj0tMT09PWQuaW5kZXhPZigiLSIp'@;
put 'P3ZvaWQgMDpZMi5EYXNoQ2FzZTtudWxsPT1oP2MucmVtb3ZlU3R5bGUoYSxkLGYpOigic3RyaW5nIj09dHlwZW9mIGgmJmguZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGg9aC5zbGljZSgwLC0xMCksZnw9WTIuSW1wb3J0YW50KSxjLnNldFN0eWxlKGEsZCxoLGYpKX19KGQsXyxZMChldSgp'@;
put 'LGEpLGgsZikpfWZ1bmN0aW9uIGVsKGMsbCxhLGQsaCxmKXtjb25zdCBfPW51bGw9PT1sO2xldCBUO2Zvcig7aD4wOyl7Y29uc3QgVz1jW2hdLGllPUFycmF5LmlzQXJyYXkoVykscGU9aWU/V1sxXTpXLHdlPW51bGw9PT1wZTtsZXQgRWU9YVtoKzFdO0VlPT09Wm8mJihFZT13ZT9Tczp2b2lk'@;
put 'IDApO2xldCBaZT13ZT90ZihFZSxkKTpwZT09PWQ/RWU6dm9pZCAwO2lmKGllJiYhSjEoWmUpJiYoWmU9dGYoVyxkKSksSjEoWmUpJiYoVD1aZSxfKSlyZXR1cm4gVDtjb25zdCBpdD1jW2grMV07aD1fP1gwKGl0KTpKMChpdCl9aWYobnVsbCE9PWwpe2xldCBXPWY/bC5yZXNpZHVhbENsYXNz'@;
put 'ZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1XJiYoVD10ZihXLGQpKX1yZXR1cm4gVH1mdW5jdGlvbiBKMShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1XyhjLGwpe3JldHVybiAwIT0oYy5mbGFncyYobD84OjE2KSl9ZnVuY3Rpb24gTmUoYyxsPSIiKXtjb25zdCBhPVhyKCksZD1U'@;
put 'cygpLGg9YytwcyxmPWQuZmlyc3RDcmVhdGVQYXNzP0czKGQsaCwxLGwsbnVsbCk6ZC5kYXRhW2hdLF89ZF8oZCxhLGYsbCxjKTthW2hdPV8seG0oKSYmZTYoZCxhLF8sZiksTjEoZiwhMSl9bGV0IGRfPShjLGwsYSxkLGgpPT4oVmQoITApLGZ1bmN0aW9uICRtKGMsbCl7cmV0dXJuIGMuY3Jl'@;
put 'YXRlVGV4dChsKX0obFtWb10sZCkpO2Z1bmN0aW9uIG9yKGMpe3JldHVybiBncigiIixjLCIiKSxvcn1mdW5jdGlvbiBncihjLGwsYSl7Y29uc3QgZD1YcigpLGg9SzMoZCxjLGwsYSk7cmV0dXJuIGghPT1abyYmR2QoZCxldSgpLGgpLGdyfWZ1bmN0aW9uIHpjKGMsbCxhLGQsaCl7Y29uc3Qg'@;
put 'Zj1YcigpLF89ZnVuY3Rpb24gWDMoYyxsLGEsZCxoLGYpe2NvbnN0IFQ9Z2YoYyxOZCgpLGEsaCk7cmV0dXJuIFYxKDIpLFQ/bCtrbyhhKStkK2tvKGgpK2Y6Wm99KGYsYyxsLGEsZCxoKTtyZXR1cm4gXyE9PVpvJiZHZChmLGV1KCksXyksemN9ZnVuY3Rpb24gYjAoYyxsLGEsZCxoLGYsXyl7'@;
put 'Y29uc3QgVD1YcigpLFc9ZnVuY3Rpb24gSjMoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBpZT1UNihjLE5kKCksYSxoLF8pO3JldHVybiBWMSgzKSxpZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUOlpvfShULGMsbCxhLGQsaCxmLF8pO3JldHVybiBXIT09Wm8mJkdkKFQsZXUoKSxXKSxiMH1m'@;
put 'dW5jdGlvbiB3NShjLGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9WHIoKSxwZT1mdW5jdGlvbiBRMyhjLGwsYSxkLGgsZixfLFQsVyxpZSl7Y29uc3Qgd2U9bTAoYyxOZCgpLGEsaCxfLFcpO3JldHVybiBWMSg0KSx3ZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUK2tvKFcpK2llOlpvfShp'@;
put 'ZSxjLGwsYSxkLGgsZixfLFQsVyk7cmV0dXJuIHBlIT09Wm8mJkdkKGllLGV1KCkscGUpLHc1fWZ1bmN0aW9uIEZNKGMsbCxhKXshZnVuY3Rpb24gXzAoYyxsLGEsZCl7Y29uc3QgaD1UcygpLGY9VjEoMik7aC5maXJzdFVwZGF0ZVBhc3MmJlgxKGgsbnVsbCxmLGQpO2NvbnN0IF89WHIoKTtp'@;
put 'ZihhIT09Wm8mJmpjKF8sZixhKSl7Y29uc3QgVD1oLmRhdGFbZXUoKV07aWYodV8oVCxkKSYmIURNKGgsZikpe2xldCBXPWQ/VC5jbGFzc2VzV2l0aG91dEhvc3Q6VC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09VyYmKGE9X2MoVyxhfHwiIikpLEp2KGgsVCxfLGEsZCl9ZWxzZSFmdW5jdGlv'@;
put 'biBhYyhjLGwsYSxkLGgsZixfLFQpe2g9PT1abyYmKGg9U3MpO2xldCBXPTAsaWU9MCxwZT0wPGgubGVuZ3RoP2hbMF06bnVsbCx3ZT0wPGYubGVuZ3RoP2ZbMF06bnVsbDtmb3IoO251bGwhPT1wZXx8bnVsbCE9PXdlOyl7Y29uc3QgRWU9VzxoLmxlbmd0aD9oW1crMV06dm9pZCAwLFplPWll'@;
put 'PGYubGVuZ3RoP2ZbaWUrMV06dm9pZCAwO2xldCBldCxpdD1udWxsO3BlPT09d2U/KFcrPTIsaWUrPTIsRWUhPT1aZSYmKGl0PXdlLGV0PVplKSk6bnVsbD09PXdlfHxudWxsIT09cGUmJnBlPHdlPyhXKz0yLGl0PXBlKTooaWUrPTIsaXQ9d2UsZXQ9WmUpLG51bGwhPT1pdCYmY18oYyxsLGEs'@;
put 'ZCxpdCxldCxfLFQpLHBlPVc8aC5sZW5ndGg/aFtXXTpudWxsLHdlPWllPGYubGVuZ3RoP2ZbaWVdOm51bGx9fShoLFQsXyxfW1ZvXSxfW2YrMV0sX1tmKzFdPWZ1bmN0aW9uIGhSKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIFNzO2NvbnN0IGQ9W10saD0kMihhKTtpZihBcnJh'@;
put 'eS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1'@;
put 'cm4gZH0oYyxsLGEpLGQsZil9fSh4YyxLMSxLMyhYcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gdDEoYyxsLGEpe2NvbnN0IGQ9WHIoKTtyZXR1cm4gamMoZCxDMygpLGwpJiZQdShUcygpLFFhKCksZCxjLGwsZFtWb10sYSwhMCksdDF9ZnVuY3Rpb24gUzUoYyxsLGEpe2NvbnN0IGQ9WHIoKTtp'@;
put 'ZihqYyhkLEMzKCksbCkpe2NvbnN0IGY9VHMoKSxfPVFhKCk7UHUoZixfLGQsYyxsLFZTKHc5KGYuZGF0YSksXyxkKSxhLCEwKX1yZXR1cm4gUzV9Y29uc3QgYmY9dm9pZCAwO3ZhciBINj1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGJmXSxbWyJBTSIsIlBNIl0sYmYsYmZdLFtbIlMi'@;
put 'LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwi'@;
put 'VGgiLCJGciIsIlNhIl1dLGJmLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnki'@;
put 'LCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxiZixbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2Qv'@;
put 'eXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGJmLCJ7MX0gJ2F0JyB7MH0iLGJmXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc'@;
put 'eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIHpNKGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3Ry'@;
put 'aW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV07bGV0ICRkPXt9O2Z1bmN0aW9uIGpsKGMpe2NvbnN0IGw9ZnVuY3Rpb24gRVIoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9X18o'@;
put 'bCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPV9fKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIEg2O3Rocm93IG5ldyBBcig3MDEsITEpfWZ1bmN0aW9uIF9fKGMpe3JldHVybiBjIGluICRkfHwoJGRbY109T2kubmcmJk9pLm5nLmNvbW1vbiYm'@;
put 'T2kubmcuY29tbW9uLmxvY2FsZXMmJk9pLm5nLmNvbW1vbi5sb2NhbGVzW2NdKSwkZFtjXX12YXIgcW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0'@;
put 'YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0i'@;
put 'TW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRp'@;
put 'bWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tj'@;
put 'LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0i'@;
put 'UGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30ocW98fHt9KTtjb25zdCBpcD0iZW4tVVMiO2xldCByZT1pcDtmdW5jdGlvbiBacihjLGwsYSxkLGgpe2lmKGM9Ym8oYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKylacihjW2Zd'@;
put 'LGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1UcygpLF89WHIoKTtsZXQgVD1sZihjKT9jOmJvKGMucHJvdmlkZSksVz1RQyhjKTtjb25zdCBpZT1NYygpLHBlPTEwNDg1NzUmaWUucHJvdmlkZXJJbmRleGVzLHdlPWllLmRpcmVjdGl2ZVN0YXJ0LEVlPWllLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYo'@;
put 'bGYoYyl8fCFjLm11bHRpKXtjb25zdCBaZT1uZXcgUjQoVyxoLHR0KSxpdD1jaShULGwsaD9wZTpwZStFZSx3ZSk7LTE9PT1pdD8oVDkoTG0oaWUsXyksZixUKSxJcihmLGMsbC5sZW5ndGgpLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5w'@;
put 'cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChaZSksXy5wdXNoKFplKSk6KGFbaXRdPVplLF9baXRdPVplKX1lbHNle2NvbnN0IFplPWNpKFQsbCxwZStFZSx3ZSksaXQ9Y2koVCxsLHBlLHBlK0VlKSx5dD1pdD49MCYmYVtpdF07aWYoaCYmIXl0fHwhaCYmIShaZT49MCYmYVtaZV0p'@;
put 'KXtUOShMbShpZSxfKSxmLFQpO2NvbnN0IEV0PWZ1bmN0aW9uIFVvKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUjQoYyxhLHR0KTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxNaShmLGgsZCYmIWEpLGZ9KGg/cG86Q28sYS5sZW5ndGgsaCxkLFcp'@;
put 'OyFoJiZ5dCYmKGFbaXRdLnByb3ZpZGVyRmFjdG9yeT1FdCksSXIoZixjLGwubGVuZ3RoLDApLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChFdCksXy5wdXNoKEV0KX1lbHNlIEly'@;
put 'KGYsYyxaZT4tMT9aZTppdCxNaShhW2g/aXQ6WmVdLFcsIWgmJmQpKTshaCYmZCYmeXQmJmFbaXRdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gSXIoYyxsLGEsZCl7Y29uc3QgaD1sZihsKSxmPWZ1bmN0aW9uIGU1KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7'@;
put 'Y29uc3QgVz0oZj9ibyhsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoVyl7Y29uc3QgaWU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHBlPWllLmluZGV4T2YoYSk7LTE9PT1wZT9pZS5wdXNoKGEsW2QsV10p'@;
put 'OmllW3BlKzFdLnB1c2goZCxXKX1lbHNlIGllLnB1c2goYSxXKX19fWZ1bmN0aW9uIE1pKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBjaShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJl'@;
put 'dHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIENvKGMsbCxhLGQpe3JldHVybiBWaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBwbyhjLGwsYSxkKXtjb25zdCBoPXRoaXMubXVsdGk7bGV0IGY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IF89dGhpcy5wcm92aWRlckZhY3RvcnkuY29t'@;
put 'cG9uZW50UHJvdmlkZXJzLFQ9UWgoYSxhW0JpXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxkKTtmPVQuc2xpY2UoMCxfKSxWaShoLGYpO2ZvcihsZXQgVz1fO1c8VC5sZW5ndGg7VysrKWYucHVzaChUW1ddKX1lbHNlIGY9W10sVmkoaCxmKTtyZXR1cm4gZn1mdW5jdGlvbiBWaShjLGwp'@;
put 'e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiB0aShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gYnIoYyxsLGEpe2NvbnN0IGQ9VHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFz'@;
put 'cyl7Y29uc3QgaD1RYyhjKTtacihhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSxacihsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWNsYXNzIFVse31jbGFzcyBjY3t9Y2xhc3Mgd2YgZXh0ZW5kcyBVbHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlz'@;
put 'Ll9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgR1ModGhpcyk7Y29uc3QgaD1OYyhsKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVdkKGguYm9vdHN0cmFwKSx0aGlzLl9y'@;
put 'M0luamVjdG9yPVR2KGwsYSxbe3Byb3ZpZGU6VWwsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6SzAsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmRdLHFhKGwpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0'@;
put 'b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGwpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3IzSW5qZWN0b3I7IWwuZGVzdHJveWVkJiZsLmRlc3Ryb3koKSx0aGlzLmRlc3Ry'@;
put 'b3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShsKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChsKX19Y2xhc3MgcWQgZXh0ZW5kcyBjY3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1sfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHdm'@;
put 'KHRoaXMubW9kdWxlVHlwZSxsLFtdKX19Y2xhc3MgUTEgZXh0ZW5kcyBVbHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBHUyh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgY3YoWy4uLmwucHJvdmlkZXJzLHtwcm92'@;
put 'aWRlOlVsLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOkswLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fHM2KCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRp'@;
put 'YWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGwpfX1mdW5jdGlvbiBBUihjLGwsYT1udWxsKXtyZXR1cm4gbmV3IFExKHtwcm92aWRlcnM6'@;
put 'YyxwYXJlbnQ6bCxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCBFbGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs'@;
put 'b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXFDKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/QVIoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51'@;
put 'bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz'@;
put 'LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGMoYXIocTApKX0pLGN9KSgpO2Z1bmN0aW9uIGdZKGMpe2MuZ2V0U3RhbmRhbG9uZUluamVjdG9yPWw9PmwuZ2V0'@;
put 'KEVsZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYyl9ZnVuY3Rpb24gJHMoYyxsLGEpe2NvbnN0IGQ9VmMoKStjLGg9WHIoKTtyZXR1cm4gaFtkXT09PVpvP3ExKGgsZCxhP2wuY2FsbChhKTpsKCkpOmZ1bmN0aW9uIGY1KGMsbCl7cmV0dXJuIGNbbF19KGgsZCl9ZnVuY3Rpb24g'@;
put 'SjIoYyxsLGEsZCl7cmV0dXJuIENZKFhyKCksVmMoKSxjLGwsYSxkKX1mdW5jdGlvbiBRMihjLGwsYSxkLGgpe3JldHVybiBTWShYcigpLFZjKCksYyxsLGEsZCxoKX1mdW5jdGlvbiB5XyhjLGwsYSxkLGgsZil7cmV0dXJuIE1ZKFhyKCksVmMoKSxjLGwsYSxkLGgsZil9ZnVuY3Rpb24gV00o'@;
put 'YyxsLGEsZCxoLGYsXyl7cmV0dXJuIGZ1bmN0aW9uIHhZKGMsbCxhLGQsaCxmLF8sVCxXKXtjb25zdCBpZT1sK2E7cmV0dXJuIG0wKGMsaWUsaCxmLF8sVCk/cTEoYyxpZSs0LFc/ZC5jYWxsKFcsaCxmLF8sVCk6ZChoLGYsXyxUKSk6d18oYyxpZSs0KX0oWHIoKSxWYygpLGMsbCxhLGQsaCxm'@;
put 'LF8pfWZ1bmN0aW9uIHdfKGMsbCl7Y29uc3QgYT1jW2xdO3JldHVybiBhPT09Wm8/dm9pZCAwOmF9ZnVuY3Rpb24gQ1koYyxsLGEsZCxoLGYpe2NvbnN0IF89bCthO3JldHVybiBqYyhjLF8saCk/cTEoYyxfKzEsZj9kLmNhbGwoZixoKTpkKGgpKTp3XyhjLF8rMSl9ZnVuY3Rpb24gU1koYyxs'@;
put 'LGEsZCxoLGYsXyl7Y29uc3QgVD1sK2E7cmV0dXJuIGdmKGMsVCxoLGYpP3ExKGMsVCsyLF8/ZC5jYWxsKF8saCxmKTpkKGgsZikpOndfKGMsVCsyKX1mdW5jdGlvbiBNWShjLGwsYSxkLGgsZixfLFQpe2NvbnN0IFc9bCthO3JldHVybiBUNihjLFcsaCxmLF8pP3ExKGMsVyszLFQ/ZC5jYWxs'@;
put 'KFQsaCxmLF8pOmQoaCxmLF8pKTp3XyhjLFcrMyl9ZnVuY3Rpb24gYmEoYyxsKXtjb25zdCBhPVRzKCk7bGV0IGQ7Y29uc3QgaD1jK3BzO2EuZmlyc3RDcmVhdGVQYXNzPyhkPWZ1bmN0aW9uIEJsZShjLGwpe2lmKGwpZm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pe2NvbnN0IGQ9bFth'@;
put 'XTtpZihjPT09ZC5uYW1lKXJldHVybiBkfX0obCxhLnBpcGVSZWdpc3RyeSksYS5kYXRhW2hdPWQsZC5vbkRlc3Ryb3kmJihhLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGgsZC5vbkRlc3Ryb3kpKTpkPWEuZGF0YVtoXTtjb25zdCBmPWQuZmFjdG9yeXx8KGQuZmFjdG9yeT1IMShkLnR5cGUp'@;
put 'KSxfPWRpKHR0KTt0cnl7Y29uc3QgVD1CMSghMSksVz1mKCk7cmV0dXJuIEIxKFQpLGZ1bmN0aW9uIEdJKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9KGEsWHIoKSxoLFcpLFd9ZmluYWxseXtkaShfKX19ZnVu'@;
put 'Y3Rpb24gWmwoYyxsLGEpe2NvbnN0IGQ9YytwcyxoPVhyKCksZj0kZShoLGQpO3JldHVybiBDXyhoLGQpP0NZKGgsVmMoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gTTUoYyxsLGEsZCl7Y29uc3QgaD1jK3BzLGY9WHIoKSxfPSRlKGYsaCk7cmV0dXJuIENf'@;
put 'KGYsaCk/U1koZixWYygpLGwsXy50cmFuc2Zvcm0sYSxkLF8pOl8udHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gRFIoYyxsLGEsZCxoKXtjb25zdCBmPWMrcHMsXz1YcigpLFQ9JGUoXyxmKTtyZXR1cm4gQ18oXyxmKT9NWShfLFZjKCksbCxULnRyYW5zZm9ybSxhLGQsaCxUKTpULnRyYW5zZm9y'@;
put 'bShhLGQsaCl9ZnVuY3Rpb24gQ18oYyxsKXtyZXR1cm4gY1tCaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIExSKGMpe3JldHVybiBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgRXI9Y2xhc3MgVWxlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLl9f'@;
put 'aXNBc3luYz1sfWVtaXQobCl7c3VwZXIubmV4dChsKX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLF89ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2NvbnN0IFc9bDtoPVcubmV4dD8uYmluZChXKSxmPVcuZXJyb3I/LmJpbmQoVyksXz1XLmNvbXBsZXRlPy5i'@;
put 'aW5kKFcpfXRoaXMuX19pc0FzeW5jJiYoZj1MUihmKSxoJiYoaD1MUihoKSksXyYmKF89TFIoXykpKTtjb25zdCBUPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxldGU6X30pO3JldHVybiBsIGluc3RhbmNlb2YgZWUmJmwuYWRkKFQpLFR9fTtmdW5jdGlvbiBabGUoKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZWh7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEVyKX1jb25zdHJ1Y3RvcihsPSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGly'@;
put 'dHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBhPWVoLnByb3RvdHlwZTthW1N5bWJvbC5pdGVyYXRvcl18fChhW1N5bWJv'@;
put 'bC5pdGVyYXRvcl09WmxlKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1'@;
put 'Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXty'@;
put 'ZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7Y29uc3QgZD10aGlzO2QuZGlydHk9ITE7Y29uc3QgaD1mdW5jdGlvbiBwMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9u'@;
put 'IHoxKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KGQuX3Jlc3VsdHMsaCxhKSkmJihkLl9yZXN1bHRz'@;
put 'PWgsZC5sZW5ndGg9aC5sZW5ndGgsZC5sYXN0PWhbdGhpcy5sZW5ndGgtMV0sZC5maXJzdD1oWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt0aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVt'@;
put 'aXQodGhpcyl9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwfWRlc3Ryb3koKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX19bGV0IHphPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPUdsZSxjfSkoKTtjb25zdCBZbGU9'@;
put 'emEsV2xlPWNsYXNzIGV4dGVuZHMgWWxle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29u'@;
put 'dGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxudWxsKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxkKXtjb25zdCBfPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmll'@;
put 'dyxUPWI2KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsXyxsLDQwOTYmdGhpcy5fZGVjbGFyYXRpb25MVmlld1tEb10/NDA5NjoxNixudWxsLF8uZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLGF8fG51bGwsZHx8bnVsbCk7VFtPMl09dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJh'@;
put 'dGlvblRDb250YWluZXIuaW5kZXhdO2NvbnN0IGllPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbaHVdO3JldHVybiBudWxsIT09aWUmJihUW2h1XT1pZS5jcmVhdGVFbWJlZGRlZFZpZXcoXykpLFZ2KF8sVCxsKSxuZXcgZDUoVCl9fTtmdW5jdGlvbiBHbGUoKXtyZXR1cm4gR00oTWMoKSxYcigp'@;
put 'KX1mdW5jdGlvbiBHTShjLGwpe3JldHVybiA0JmMudHlwZT9uZXcgV2xlKGwsYyxZZChjLGwpKTpudWxsfWxldCBhcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5fX05HX0VMRU1FTlRfSURfXz1lY2UsY30pKCk7ZnVuY3Rpb24gZWNlKCl7cmV0dXJuIElZKE1jKCksWHIoKSl9Y29uc3QgdGNl'@;
put 'PWFzLERZPWNsYXNzIGV4dGVuZHMgdGNle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBZZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1n'@;
put 'ZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IHgzKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9QTkodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoWHcobCkpe2NvbnN0IGE9TTMobCx0aGlzLl9ob3N0TFZpZXcp'@;
put 'LGQ9QjIobCk7cmV0dXJuIG5ldyB4MyhhW0JpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyB4MyhudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPUxZKHRoaXMuX2xDb250YWlu'@;
put 'ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLWljfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj'@;
put 'dG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoVCxoLGZhbHNlKSxUfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IF89bCYmIWZ1bmN0aW9uIGVmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBjfShsKTtsZXQgVDtpZihfKVQ9YTtlbHNle2NvbnN0IGV0PWF8fHt9O1Q9ZXQuaW5kZXgsZD1ldC5pbmplY3RvcixoPWV0LnByb2plY3RhYmxlTm9kZXMsZj1ldC5lbnZpcm9ubWVudEluamVjdG9yfHxldC5uZ01vZHVsZVJlZn1jb25zdCBXPV8/bDpuZXcgaDUoUW8obCkpLGllPWR8fHRo'@;
put 'aXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PVcubmdNb2R1bGUpe2NvbnN0IHl0PShfP2llOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxMCxudWxsKTt5dCYmKGY9eXQpfVFvKFcuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IFplPVcuY3JlYXRlKGllLGgsbnVsbCxmKTtyZXR1cm4g'@;
put 'dGhpcy5pbnNlcnRJbXBsKFplLmhvc3RWaWV3LFQsZmFsc2UpLFplfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCExKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3LGY9aFtCaV07aWYoZnVuY3Rpb24gVW4oYyl7cmV0dXJuIG9jKGNbdWFdKX0oaCkp'@;
put 'e2NvbnN0IFc9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09Vyl0aGlzLmRldGFjaChXKTtlbHNle2NvbnN0IGllPWhbdWFdLHBlPW5ldyBEWShpZSxpZVt6b10saWVbdWFdKTtwZS5kZXRhY2gocGUuaW5kZXhPZihsKSl9fWNvbnN0IF89dGhpcy5fYWRqdXN0SW5kZXgoYSksVD10aGlzLl9sQ29u'@;
put 'dGFpbmVyO2lmKGZ1bmN0aW9uIGRhKGMsbCxhLGQpe2NvbnN0IGg9aWMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtYYV09bCksZDxmLWljPyhsW1hhXT1hW2hdLCQwKGEsaWMrZCxsKSk6KGEucHVzaChsKSxsW1hhXT1udWxsKSxsW3VhXT1hO2NvbnN0IF89bFtPMl07bnVsbCE9PV8mJmEh'@;
put 'PT1fJiZmdW5jdGlvbiBMWihjLGwpe2NvbnN0IGE9Y1tIMl07bFtKYV0hPT1sW3VhXVt1YV1bSmFdJiYoY1t1bV09ITApLG51bGw9PT1hP2NbSDJdPVtsXTphLnB1c2gobCl9KF8sbCk7Y29uc3QgVD1sW2h1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMpLGxbRG9dfD0xMjh9KGYsaCxULF8p'@;
put 'LCFkKXtjb25zdCBXPVk5KF8sVCksaWU9aFtWb10scGU9SDMoaWUsVFtkMF0pO251bGwhPT1wZSYmZnVuY3Rpb24gakQoYyxsLGEsZCxoLGYpe2RbSGldPWgsZFt6b109bCxHNChjLGQsYSwxLGgsZil9KGYsVFt6b10saWUsaCxwZSxXKX1yZXR1cm4gbC5hdHRhY2hUb1ZpZXdDb250YWluZXJS'@;
put 'ZWYoKSwkMChSUihUKSxfLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT1MWSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGws'@;
put 'LTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtkJiYoUG0oUlIodGhpcy5fbENvbnRhaW5lciksYSksS20oZFtCaV0sZCkpfWRldGFjaChsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtyZXR1cm4gZCYmbnVsbCE9UG0oUlIodGhp'@;
put 'cy5fbENvbnRhaW5lciksYSk/bmV3IGQ1KGQpOm51bGx9X2FkanVzdEluZGV4KGwsYT0wKXtyZXR1cm4gbD8/dGhpcy5sZW5ndGgrYX19O2Z1bmN0aW9uIExZKGMpe3JldHVybiBjWzhdfWZ1bmN0aW9uIFJSKGMpe3JldHVybiBjWzhdfHwoY1s4XT1bXSl9ZnVuY3Rpb24gSVkoYyxsKXtsZXQg'@;
put 'YTtjb25zdCBkPWxbYy5pbmRleF07cmV0dXJuIG9jKGQpP2E9ZDooYT1QUyhkLGwsbnVsbCxjKSxsW2MuaW5kZXhdPWEsUzYobCxhKSksUlkoYSxsLGMsZCksbmV3IERZKGEsYyxsKX1sZXQgUlk9ZnVuY3Rpb24gT1koYyxsLGEsZCl7aWYoY1tkMF0pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/'@;
put 'X2EoZCk6ZnVuY3Rpb24gbmNlKGMsbCl7Y29uc3QgYT1jW1ZvXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1ObChsLGMpO3JldHVybiBZMShhLEgzKGEsaCksZCxmdW5jdGlvbiBaRChjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbZDBdPWh9O2NsYXNz'@;
put 'IE9Se2NvbnN0cnVjdG9yKGwpe3RoaXMucXVlcnlMaXN0PWwsdGhpcy5tYXRjaGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE9SKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0LnNldERpcnR5KCl9fWNsYXNzIFBSe2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVl'@;
put 'cmllcz1sfWNyZWF0ZUVtYmVkZGVkVmlldyhsKXtjb25zdCBhPWwucXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1udWxsIT09bC5jb250ZW50UXVlcmllcz9sLmNvbnRlbnRRdWVyaWVzWzBdOmEubGVuZ3RoLGg9W107Zm9yKGxldCBmPTA7ZjxkO2YrKyl7Y29uc3QgXz1hLmdldEJ5SW5k'@;
put 'ZXgoZik7aC5wdXNoKHRoaXMucXVlcmllc1tfLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgUFIoaCl9cmV0dXJuIG51bGx9aW5zZXJ0VmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRldGFjaFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJp'@;
put 'ZXNXaXRoTWF0Y2hlcyhsKX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKW51bGwhPT1WWShsLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBQWXtjb25zdHJ1Y3RvcihsLGEsZD1udWxs'@;
put 'KXt0aGlzLnByZWRpY2F0ZT1sLHRoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZH19Y2xhc3MgRlJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9ZWxlbWVudFN0YXJ0KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0uZWxlbWVu'@;
put 'dFN0YXJ0KGwsYSl9ZWxlbWVudEVuZChsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKXRoaXMucXVlcmllc1thXS5lbGVtZW50RW5kKGwpfWVtYmVkZGVkVFZpZXcobCl7bGV0IGE9bnVsbDtmb3IobGV0IGQ9MDtkPHRoaXMubGVuZ3RoO2QrKyl7Y29uc3QgaD1udWxs'@;
put 'IT09YT9hLmxlbmd0aDowLGY9dGhpcy5nZXRCeUluZGV4KGQpLmVtYmVkZGVkVFZpZXcobCxoKTtmJiYoZi5pbmRleEluRGVjbGFyYXRpb25WaWV3PWQsbnVsbCE9PWE/YS5wdXNoKGYpOmE9W2ZdKX1yZXR1cm4gbnVsbCE9PWE/bmV3IEZSKGEpOm51bGx9dGVtcGxhdGUobCxhKXtmb3IobGV0'@;
put 'IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS50ZW1wbGF0ZShsLGEpfWdldEJ5SW5kZXgobCl7cmV0dXJuIHRoaXMucXVlcmllc1tsXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sobCl7dGhpcy5xdWVyaWVzLnB1c2go'@;
put 'bCl9fWNsYXNzIEhSe2NvbnN0cnVjdG9yKGwsYT0tMSl7dGhpcy5tZXRhZGF0YT1sLHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0'@;
put 'aW9uTm9kZUluZGV4PWF9ZWxlbWVudFN0YXJ0KGwsYSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGEpJiZ0aGlzLm1hdGNoVE5vZGUobCxhKX1lbGVtZW50RW5kKGwpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09bC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1w'@;
put 'bGF0ZShsLGEpe3RoaXMuZWxlbWVudFN0YXJ0KGwsYSl9ZW1iZWRkZWRUVmlldyhsLGEpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUobCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtbC5pbmRleCxhKSxuZXcgSFIodGhpcy5tZXRhZGF0YSkpOm51bGx9'@;
put 'aXNBcHBseWluZ1RvTm9kZShsKXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylk'@;
put 'PWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7'@;
put 'aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLG9jZShhLGYpKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsSW0oYSxsLGYsITEsITEpKX1lbHNlIGQ9PT16YT80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24o'@;
put 'bCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsSW0oYSxsLGQsITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Tml8fGg9PT1hc3x8aD09'@;
put 'PXphJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1JbShhLGwsaCwhMSwhMSk7bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRj'@;
put 'aGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBvY2UoYyxsKXtjb25zdCBhPWMubG9jYWxOYW1lcztpZihudWxsIT09YSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpaWYoYVtkXT09PWwpcmV0dXJuIGFbZCsxXTtyZXR1cm4gbnVsbH1m'@;
put 'dW5jdGlvbiBhY2UoYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIHNjZShjLGwpe3JldHVybiAxMSZjLnR5cGU/WWQoYyxsKTo0JmMudHlwZT9HTShjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIGxjZShjLGwsYSl7cmV0dXJuIGE9PT1OaT9ZZChsLGMpOmE9PT16YT9HTShs'@;
put 'LGMpOmE9PT1hcz9JWShsLGMpOnZvaWQgMH0oYyxsLGQpOlFoKGMsY1tCaV0sYSxsKX1mdW5jdGlvbiBGWShjLGwsYSxkKXtjb25zdCBoPWxbaHVdLnF1ZXJpZXNbZF07aWYobnVsbD09PWgubWF0Y2hlcyl7Y29uc3QgZj1jLmRhdGEsXz1hLm1hdGNoZXMsVD1bXTtmb3IobGV0IFc9MDtXPF8u'@;
put 'bGVuZ3RoO1crPTIpe2NvbnN0IGllPV9bV107VC5wdXNoKGllPDA/bnVsbDphY2UobCxmW2llXSxfW1crMV0sYS5tZXRhZGF0YS5yZWFkKSl9aC5tYXRjaGVzPVR9cmV0dXJuIGgubWF0Y2hlc31mdW5jdGlvbiBOUihjLGwsYSxkKXtjb25zdCBoPWMucXVlcmllcy5nZXRCeUluZGV4KGEpLGY9'@;
put 'aC5tYXRjaGVzO2lmKG51bGwhPT1mKXtjb25zdCBfPUZZKGMsbCxoLGEpO2ZvcihsZXQgVD0wO1Q8Zi5sZW5ndGg7VCs9Mil7Y29uc3QgVz1mW1RdO2lmKFc+MClkLnB1c2goX1tULzJdKTtlbHNle2NvbnN0IGllPWZbVCsxXSxwZT1sWy1XXTtmb3IobGV0IHdlPWljO3dlPHBlLmxlbmd0aDt3'@;
put 'ZSsrKXtjb25zdCBFZT1wZVt3ZV07RWVbTzJdPT09RWVbdWFdJiZOUihFZVtCaV0sRWUsaWUsZCl9aWYobnVsbCE9PXBlW0gyXSl7Y29uc3Qgd2U9cGVbSDJdO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdO05SKFplW0JpXSxaZSxpZSxkKX19fX19cmV0'@;
put 'dXJuIGR9ZnVuY3Rpb24gYWkoYyl7Y29uc3QgbD1YcigpLGE9VHMoKSxkPUJ3KCk7QzkoZCsxKTtjb25zdCBoPVZZKGEsZCk7aWYoYy5kaXJ0eSYmZnVuY3Rpb24gSXQoYyl7cmV0dXJuIDQ9PSg0JmNbRG9dKX0obCk9PT0oMj09KDImaC5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09aC5t'@;
put 'YXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1oLmNyb3NzZXNOZ1RlbXBsYXRlP05SKGEsbCxkLFtdKTpGWShhLGwsaCxkKTtjLnJlc2V0KGYsZGYpLGMubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUm8oYyxsLGEpe2NvbnN0IGQ9VHMoKTtkLmZp'@;
put 'cnN0Q3JlYXRlUGFzcyYmKE5ZKGQsbmV3IFBZKGMsbCxhKSwtMSksMj09KDImbCkmJihkLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksSFkoZCxYcigpLGwpfWZ1bmN0aW9uIExvKGMsbCxhLGQpe2NvbnN0IGg9VHMoKTtpZihoLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgZj1NYygpO05ZKGgsbmV3'@;
put 'IFBZKGwsYSxkKSxmLmluZGV4KSxmdW5jdGlvbiB1Y2UoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLDI9PSgyJmEpJiYo'@;
put 'aC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9SFkoaCxYcigpLGEpfWZ1bmN0aW9uIGxpKCl7cmV0dXJuIGZ1bmN0aW9uIGNjZShjLGwpe3JldHVybiBjW2h1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oWHIoKSxCdygpKX1mdW5jdGlvbiBIWShjLGwsYSl7Y29uc3QgZD1uZXcgZWgoND09KDQm'@;
put 'YSkpOyhmdW5jdGlvbiBWTChjLGwsYSxkKXtjb25zdCBoPUhTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmTlMoYykucHVzaChkLGgubGVuZ3RoLTEpfSkoYyxsLGQsZC5kZXN0cm95KSxudWxsPT09bFtodV0mJihsW2h1XT1uZXcgUFIpLGxbaHVdLnF1ZXJpZXMucHVzaChuZXcg'@;
put 'T1IoZCkpfWZ1bmN0aW9uIE5ZKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBGUiksYy5xdWVyaWVzLnRyYWNrKG5ldyBIUihsLGEpKX1mdW5jdGlvbiBWWShjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBrYyhjLGwpe3JldHVybiBH'@;
put 'TShjLGwpfWNvbnN0IFpSPW5ldyBTaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgWVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29s'@;
put 'dmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1GaShaUix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZih2NShm'@;
put 'KSlhLnB1c2goZik7ZWxzZSBpZihwTShmKSl7Y29uc3QgXz1uZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOld9KX0pO2EucHVzaChfKX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigo'@;
put 'KT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLG5XPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCk7Y29uc3QgS2Q9bmV3IFNpKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkZpKEtkLG5zLk9wdGlvbmFsfG5zLlNraXBTZWxmKXx8ZnVuY3Rpb24gTGNlKCl7cmV0dXJu'@;
put 'IHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxpcH0oKX0pO2xldCBxTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy50YXNrSWQ9MCx0aGlzLnBlbmRpbmdUYXNrcz1uZXcgU2V0LHRoaXMuaGFzUGVuZGluZ1Rhc2tzPW5ldyBUZSghMSl9YWRkKCl7dGhp'@;
put 'cy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLmhhc1BlbmRpbmdU'@;
put 'YXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIE9jZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IHJXPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJu'@;
put 'IG5ldyBxZChhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9V2QoTmMoYSku'@;
put 'ZGVjbGFyYXRpb25zKS5yZWR1Y2UoKF8sVCk9Pntjb25zdCBXPVFvKFQpO3JldHVybiBXJiZfLnB1c2gobmV3IGg1KFcpKSxffSxbXSk7cmV0dXJuIG5ldyBPY2UoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5j'@;
put 'b21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBzVyguLi5jKXt9Y2xhc3MgTm97Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOmw9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjphPSExLHNob3VsZENvYWxlc2NlUnVu'@;
put 'Q2hhbmdlRGV0ZWN0aW9uOmQ9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEVyKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyKCExKSx0aGlz'@;
put 'Lm9uU3RhYmxlPW5ldyBFcighMSksdGhpcy5vbkVycm9yPW5ldyBFcighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBBcig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBoPXRoaXM7aC5fbmVzdGluZz0wLGguX291dGVyPWguX2lubmVyPVpvbmUuY3VycmVudCxa'@;
put 'b25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGwmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVj'@;
put 'KSksaC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFkJiZhLGguc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249ZCxoLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxoLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbiBIY2UoKXtjb25z'@;
put 'dCBjPSJmdW5jdGlvbiI9PXR5cGVvZiBPaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9T2lbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9T2lbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwm'@;
put 'JmEpe2NvbnN0IGQ9bFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2Vs'@;
put 'QW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIEJjZShjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIFZjZShjKXtjLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwoYy5sYXN0UmVx'@;
put 'dWVzdEFuaW1hdGlvbkZyYW1lSWQ9Yy5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChPaSwoKT0+e2MuZmFrZVRvcEV2ZW50VGFza3x8KGMuZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57Yy5sYXN0UmVx'@;
put 'dWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsR1IoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxXUihjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLGMuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLEdSKGMpKX0oYyl9O2MuX2lubmVyPWMu'@;
put 'X2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooYSxkLGgsZixfLFQpPT57dHJ5e3JldHVybiBhVyhjKSxhLmludm9rZVRhc2soaCxmLF8sVCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0'@;
put 'ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxsVyhjKX19LG9uSW52b2tlOihhLGQsaCxmLF8sVCxXKT0+e3RyeXtyZXR1cm4gYVcoYyksYS5pbnZva2UoaCxmLF8sVCxXKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVz'@;
put 'Y2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxsVyhjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhhc1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssR1IoYyksV1IoYykpOiJtYWNyb1Rhc2siPT1m'@;
put 'LmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJa'@;
put 'b25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighTm8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEFyKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5n'@;
put 'dWxhclpvbmUoKXtpZihOby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgQXIoOTA5LCExKX1ydW4obCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcixfPWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2'@;
put 'ZW50OiAiK2gsbCxOY2Usc1csc1cpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKF8sYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayhfKX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9v'@;
put 'dXRlci5ydW4obCl9fWNvbnN0IE5jZT17fTtmdW5jdGlvbiBXUihjKXtpZigwPT1jLl9uZXN0aW5nJiYhYy5oYXNQZW5kaW5nTWljcm90YXNrcyYmIWMuaXNTdGFibGUpdHJ5e2MuX25lc3RpbmcrKyxjLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKGMuX25lc3Rpbmct'@;
put 'LSwhYy5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e2MuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBHUihjKXtjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tz'@;
put 'fHwoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gYVcoYyl7Yy5fbmVzdGluZysrLGMuaXNTdGFibGUmJihjLmlzU3RhYmxl'@;
put 'PSExLGMub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBsVyhjKXtjLl9uZXN0aW5nLS0sV1IoYyl9Y2xhc3MgamNle2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhp'@;
put 'cy5vblVuc3RhYmxlPW5ldyBFcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyLHRoaXMub25TdGFibGU9bmV3IEVyLHRoaXMub25FcnJvcj1uZXcgRXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0'@;
put 'c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fWNvbnN0IGNXPW5ldyBTaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTp1V30pO2Z1bmN0aW9uIHVXKCl7Y29uc3QgYz1GaShObyk7bGV0IGw9ITA7cmV0dXJuIGlzKG5l'@;
put 'dyBLZShoPT57bD1jLmlzU3RhYmxlJiYhYy5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dChsKSxoLmNvbXBsZXRlKCl9KX0pLG5ldyBLZShoPT57bGV0IGY7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+'@;
put 'e2Y9Yy5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PnshbCYmIWMuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYobD0hMCxoLm5leHQoITApKX0pfSl9KTtjb25zdCBfPWMu'@;
put 'b25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnRJbkFuZ3VsYXJab25lKCksbCYmKGw9ITEsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dCghMSl9KSl9KTtyZXR1cm4oKT0+e2YudW5zdWJzY3JpYmUoKSxfLnVuc3Vic2NyaWJlKCl9fSkucGlwZSgkYSgpKSl9Y29uc3Qg'@;
put 'ZFc9bmV3IFNpKCIiKSxLTT1uZXcgU2koIiIpO2xldCBLUiwkUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhp'@;
put 'cy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEtSfHwoZnVuY3Rpb24gemNlKGMpe0tSPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1'@;
put 'Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57Tm8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHko'@;
put 'KX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5f'@;
put 'cGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10'@;
put 'aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2Fs'@;
put 'bGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IodGhpcy5fZGlkV29yayl9dGhpcy5fZGlkV29yaz0hMX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihkPT4hZC51cGRh'@;
put 'dGVDYnx8IWQudXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLCExKSksdGhpcy5fZGlkV29yaz0hMH19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3Vy'@;
put 'Y2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYmKGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKF89Pl8u'@;
put 'dGltZW91dElkIT09ZiksYSh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZihoJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRo'@;
put 'cm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0'@;
put 'aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o'@;
put 'YSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihxUiksYXIoS00pKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGQpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoYSxkKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o'@;
put 'YSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygp'@;
put 'e3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGEsZD0hMCl7cmV0dXJuIEtSPy5maW5kVGVzdGFi'@;
put 'aWxpdHlJblRyZWUodGhpcyxhLGQpPz9udWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCksc3A9bnVsbDtjb25z'@;
put 'dCBoVz1uZXcgU2koIkFsbG93TXVsdGlwbGVUb2tlbiIpLFhSPW5ldyBTaSgiUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzIiksSlI9bmV3IFNpKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2NsYXNzIHBXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uYW1lPWwsdGhpcy50b2tlbj1hfX1mdW5jdGlv'@;
put 'biBtVyhjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFNpKGQpO3JldHVybihmPVtdKT0+e2xldCBfPVFSKCk7aWYoIV98fF8uaW5qZWN0b3IuZ2V0KGhXLCExKSl7Y29uc3QgVD1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoVCk6ZnVuY3Rp'@;
put 'b24gWWNlKGMpe2lmKHNwJiYhc3AuZ2V0KGhXLCExKSl0aHJvdyBuZXcgQXIoNDAwLCExKTsoZnVuY3Rpb24gZlcoKXshZnVuY3Rpb24gZjkoYyl7SXU9Y30oKCk9Pnt0aHJvdyBuZXcgQXIoNjAwLCExKX0pfSkoKSxzcD1jO2NvbnN0IGw9Yy5nZXQoX1cpOyhmdW5jdGlvbiBnVyhjKXtjLmdl'@;
put 'dChlUyxudWxsKT8uZm9yRWFjaChhPT5hKCkpfSkoYyl9KGZ1bmN0aW9uIHZXKGM9W10sbCl7cmV0dXJuIEVhLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6dDUsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6WFIsdXNlVmFsdWU6bmV3IFNldChbKCk9PnNwPW51bGxd'@;
put 'KX0sLi4uY119KX0oVCxkKSl9cmV0dXJuIGZ1bmN0aW9uIEdjZShjKXtjb25zdCBsPVFSKCk7aWYoIWwpdGhyb3cgbmV3IEFyKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFFSKCl7cmV0dXJuIHNwPy5nZXQoX1cpPz9udWxsfWxldCBfVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiAkY2UoYz0iem9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9u'@;
put 'ZXcgamNlOiJ6b25lLmpzIj09PWM/bmV3IE5vKGwpOmN9KGQ/Lm5nWm9uZSxmdW5jdGlvbiBiVyhjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVu'@;
put 'Q2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gYl8oYyxsLGEp'@;
put 'e3JldHVybiBuZXcgd2YoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBNVyhjKXtyZXR1cm5be3Byb3ZpZGU6Tm8sdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpRNCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShLY2Use29wdGlvbmFsOiEwfSk7'@;
put 'cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6U1csdXNlRmFjdG9yeTpxY2V9LHtwcm92aWRlOmNXLHVzZUZhY3Rvcnk6dVd9XX0oKCk9PmgpKSxfPWYuaW5qZWN0b3IuZ2V0KGhmLG51bGwpO3JldHVybiBoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgVD1oLm9uRXJy'@;
put 'b3Iuc3Vic2NyaWJlKHtuZXh0Olc9PntfLmhhbmRsZUVycm9yKFcpfX0pO2Yub25EZXN0cm95KCgpPT57WE0odGhpcy5fbW9kdWxlcyxmKSxULnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uIHlXKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIHY1KGQpP2QuY2F0Y2goaD0+e3Rocm93'@;
put 'IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fShfLGgsKCk9Pntjb25zdCBUPWYuaW5qZWN0b3IuZ2V0KFlSKTtyZXR1cm4gVC5ydW5Jbml0aWFs'@;
put 'aXplcnMoKSxULmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBnZShjKXtwcihjLCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiBjJiYocmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoS2Qs'@;
put 'aXApfHxpcCksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPXdXKHt9LGQpO3JldHVybiBmdW5jdGlvbiBVY2UoYyxsLGEpe2NvbnN0IGQ9bmV3IHFkKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZCl9KDAsMCxhKS50'@;
put 'aGVuKGY9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShmLGgpKX1fbW9kdWxlRG9Cb290c3RyYXAoYSl7Y29uc3QgZD1hLmluamVjdG9yLmdldCh4NSk7aWYoYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MClhLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goaD0+ZC5ib290'@;
put 'c3RyYXAoaCkpO2Vsc2V7aWYoIWEuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgQXIoLTQwMywhMSk7YS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGQpfXRoaXMuX21vZHVsZXMucHVzaChhKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdldCBp'@;
put 'bmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZD0+ZCgp'@;
put 'KTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChYUixudWxsKTthJiYoYS5mb3JFYWNoKGQ9PmQoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGN9KSgpO2Z1bmN0aW9uIHdXKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2Uod1csYyk6ey4uLmMsLi4ubH19'@;
put 'bGV0IHg1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFu'@;
put 'ZGxlcj1GaShTVyksdGhpcy56b25lSXNTdGFibGU9RmkoY1cpLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9RmkocU0pLmhhc1BlbmRpbmdUYXNrcy5waXBlKFNhKGE9PmE/V2koITEpOnRoaXMuem9uZUlzU3RhYmxlKSxmdW5jdGlvbiBG'@;
put 'aChjLGw9T2Upe3JldHVybiBjPWM/P0V1LFhlKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShVZShkLF89Pntjb25zdCBUPWwoXyk7KGZ8fCFjKGgsVCkpJiYoZj0hMSxoPVQsZC5uZXh0KF8pKX0pKX0pfSgpLCRhKCkpLHRoaXMuX2luamVjdG9yPUZpKHEwKX1nZXQgZGVzdHJveWVk'@;
put 'KCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgY1M7aWYoIXRoaXMuX2luamVjdG9yLmdldChZUikuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBMZChjKXtjb25zdCBs'@;
put 'PVFvKGMpfHxLYShjKXx8T2woYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBBcig0MDUsITEpO2xldCBfO189aD9hOnRoaXMuX2luamVjdG9yLmdldChLMCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKF8uY29tcG9u'@;
put 'ZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBaY2UoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfShfKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KFVsKSxpZT1fLmNyZWF0ZShFYS5OVUxMLFtdLGR8fF8uc2VsZWN0b3IsVCkscGU9aWUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx3ZT1p'@;
put 'ZS5pbmplY3Rvci5nZXQoZFcsbnVsbCk7cmV0dXJuIHdlPy5yZWdpc3RlckFwcGxpY2F0aW9uKHBlKSxpZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoaWUuaG9zdFZpZXcpLFhNKHRoaXMuY29tcG9uZW50cyxpZSksd2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihwZSl9KSx0aGlz'@;
put 'Ll9sb2FkQ29tcG9uZW50KGllKSxpZX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEFyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlzLl92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJy'@;
put 'b3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTtYTSh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21B'@;
put 'cHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoSlIsW10pO2QucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGQuZm9y'@;
put 'RWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5YTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0'@;
put 'aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBYTShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNl'@;
put 'KGEsMSl9Y29uc3QgU1c9bmV3IFNpKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5GaShoZikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7ZnVuY3Rpb24gcWNlKCl7Y29uc3QgYz1GaShObyksbD1GaShoZik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwu'@;
put 'aGFuZGxlRXJyb3IoYSkpfWxldCBLY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuem9uZT1GaShObyksdGhpcy5hcHBsaWNhdGlvblJlZj1GaSh4NSl9aW5pdGlhbGl6ZSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb258fCh0aGlzLl9vbk1pY3JvdGFza0Vt'@;
put 'cHR5U3Vic2NyaXB0aW9uPXRoaXMuem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/'@;
put 'LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2xldCBVYT0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5fX05HX0VMRU1FTlRfSURfXz1KY2UsY30pKCk7ZnVuY3Rpb24gSmNlKGMpe3JldHVybiBmdW5jdGlvbiBRY2UoYyxsLGEpe2lmKFAxKGMpJiYhYSl7Y29uc3QgZD1tdChjLmluZGV4LGwpO3JldHVybiBuZXcgZDUoZCxkKX1yZXR1cm4gNDcmYy50eXBlP25ldyBkNShsW0phXSxsKTpudWxs'@;
put 'fShNYygpLFhyKCksMTY9PSgxNiZjKSl9Y2xhc3MgQVd7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIGs2KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IG91ZShsKX19Y29uc3QgaXVlPShjLGwpPT5sO2NsYXNzIG91ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMu'@;
put 'X2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5f'@;
put 'bW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8'@;
put 'aXVlfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IF89IWR8fGEm'@;
put 'JmEuY3VycmVudEluZGV4PERXKGQsaCxmKT9hOmQsVD1EVyhfLGgsZiksVz1fLmN1cnJlbnRJbmRleDtpZihfPT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT1fLnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IGllPVQtaCxwZT1X'@;
put 'LWg7aWYoaWUhPXBlKXtmb3IobGV0IEVlPTA7RWU8aWU7RWUrKyl7Y29uc3QgWmU9RWU8Zi5sZW5ndGg/ZltFZV06ZltFZV09MCxpdD1aZStFZTtwZTw9aXQmJml0PGllJiYoZltFZV09WmUrMSl9ZltfLnByZXZpb3VzSW5kZXhdPXBlLWllfX1UIT09VyYmbChfLFQsVyl9fWZvckVhY2hQcmV2'@;
put 'aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNo'@;
put 'TW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVu'@;
put 'dGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIWs2KGwpKXRocm93IG5ldyBBcig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwp'@;
put 'P3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLF8sYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylmPWxbVF0sXz10aGlzLl90'@;
put 'cmFja0J5Rm4oVCxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLF8pPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsXyxUKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLF8s'@;
put 'VCksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIEFJKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTsp'@;
put 'bChkLnZhbHVlKX19KGwsVD0+e189dGhpcy5fdHJhY2tCeUZuKGgsVCksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCxfKT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxULF8saCkpLE9iamVjdC5pcyhhLml0ZW0sVCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEs'@;
put 'VCkpOihhPXRoaXMuX21pc21hdGNoKGEsVCxfLGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9u'@;
put 'c0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251'@;
put 'bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWls'@;
put 'PW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5f'@;
put 'aWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5r'@;
put 'ZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRz'@;
put 'P251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgc3VlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlv'@;
put 'bihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50'@;
put 'SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJl'@;
put 'Y29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMu'@;
put 'X2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5n'@;
put 'ZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVh'@;
put 'ZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9p'@;
put 'bnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMu'@;
put 'X2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9p'@;
put 'dEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBUVyksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5f'@;
put 'dW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1sLl9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRU'@;
put 'YWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3Zh'@;
put 'bHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IFRXKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNU'@;
put 'YWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVu'@;
put 'dGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9'@;
put 'bCxsfX1jbGFzcyBzdWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0'@;
put 'aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgYXVl'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10'@;
put 'aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0'@;
put 'dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgVFd7Y29uc3RydWN0'@;
put 'b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgYXVlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEp'@;
put 'Om51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24g'@;
put 'RFcoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIExXe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxBNihs'@;
put 'KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGx1ZX19Y2xhc3MgbHVle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGws'@;
put 'dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNI'@;
put 'ZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3By'@;
put 'ZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlz'@;
put 'Ll9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8'@;
put 'fEE2KGwpKSl0aHJvdyBuZXcgQXIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2Zv'@;
put 'ckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBl'@;
put 'bmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShk'@;
put 'LmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1u'@;
put 'dWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQm'@;
put 'JihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9'@;
put 'YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsXz1oLl9uZXh0'@;
put 'O3JldHVybiBmJiYoZi5fbmV4dD1fKSxfJiYoXy5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgY3VlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQo'@;
put 'KXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7'@;
put 'bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1u'@;
put 'dWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJy'@;
put 'ZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRk'@;
put 'aXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wg'@;
put 'aW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgY3Vle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlv'@;
put 'dXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gSVcoKXtyZXR1cm4gbmV3IHo2KFtuZXcgQVddKX1sZXQgejY9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rv'@;
put 'cnk6ZD0+Yy5jcmVhdGUoYSxkfHxJVygpKSxkZXBzOltbYyxuZXcgZzAsbmV3IHoyXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IEFyKDkwMSwhMSl9fXJldHVybiBjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpJV30pLGN9KSgpO2Z1bmN0aW9uIFJXKCl7cmV0dXJuIG5ldyBNXyhbbmV3IExXXSl9bGV0IE1fPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3JlYXRlKGEsZCl7aWYo'@;
put 'ZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgpO2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8UlcoKSksZGVwczpbW2MsbmV3IGcwLG5ldyB6Ml1dfX1maW5kKGEpe2Nv'@;
put 'bnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBBcig5MDEsITEpfX1yZXR1cm4gYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6Uld9KSxjfSkoKTtjb25zdCBodWU9bVcobnVs'@;
put 'bCwiY29yZSIsW10pO2xldCBmdWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKHg1KSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCk7ZnVuY3Rp'@;
put 'b24gVTYoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYz9jOm51bGwhPWMmJiJmYWxzZSIhPT1jfWxldCBzTz1udWxsO2Z1bmN0aW9uIGFwKCl7cmV0dXJuIHNPfWNsYXNzIHh1ZXt9Y29uc3QgSXM9bmV3IFNpKCJEb2N1bWVudFRva2VuIik7bGV0IGFPPSgoKT0+e2NsYXNzIGN7aGlzdG9y'@;
put 'eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShrdWUpfSxwcm92aWRlZEluOiJw'@;
put 'bGF0Zm9ybSJ9KSxjfSkoKTtjb25zdCBFdWU9bmV3IFNpKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO2xldCBrdWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFPe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9RmkoSXMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlz'@;
put 'Ll9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBhcCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVu'@;
put 'dExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJo'@;
put 'YXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxo'@;
put 'KX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxjfSkoKTtmdW5jdGlvbiBsTyhjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3Ro'@;
put 'KXJldHVybiBjO2xldCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gQlcoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMu'@;
put 'bGVuZ3RoO3JldHVybiBjLnNsaWNlKDAsYS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gQ2YoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgazU9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50'@;
put 'ZWQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEZpKHpXKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBqVz1uZXcgU2koImFwcEJhc2VI'@;
put 'cmVmIik7bGV0IHpXPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhy'@;
put 'ZWZGcm9tRE9NKCk/P0ZpKElzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVz'@;
put 'aCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gbE8odGhpcy5fYmFzZUhyZWYsYSl9'@;
put 'cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrQ2YodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qg'@;
put 'Xz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsXyl9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IF89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtDZihmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBs'@;
put 'YWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3Ro'@;
put 'aXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihqVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksQXVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09u'@;
put 'RGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5f'@;
put 'cGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7bGV0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1kJiYoZD0iIyIpLGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6'@;
put 'ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1sTyh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZv'@;
put 'cm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLF8pfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRo'@;
put 'bmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2Nh'@;
put 'dGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihqVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0'@;
put 'b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9zdWJqZWN0PW5ldyBFcix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1hO2Nv'@;
put 'bnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIEx1ZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4gY30o'@;
put 'QlcoVVcoZCkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9u'@;
put 'Py51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1'@;
put 'cnJlbnRQYXRoRXF1YWxUbyhhLGQ9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStDZihkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBEdWUoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25z'@;
put 'dCBhPWwuc3Vic3RyaW5nKGMubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgsVVcoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlzLl9sb2Nh'@;
put 'dGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfXJl'@;
put 'cGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2NhdGlvblN0'@;
put 'cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2goYSksdGhp'@;
put 'cy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9ufHwodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRl'@;
put 'eE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3Rp'@;
put 'ZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9fXJldHVybiBjLm5vcm1h'@;
put 'bGl6ZVF1ZXJ5UGFyYW1zPUNmLGMuam9pbldpdGhTbGFzaD1sTyxjLnN0cmlwVHJhaWxpbmdTbGFzaD1CVyxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGs1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uIFR1ZSgpe3JldHVybiBuZXcgSmQoYXIoazUpKX0oKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBVVyhjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIEFjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQi'@;
put 'LGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShBY3x8e30pLG5hPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShu'@;
put 'YXx8e30pLHkwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oeTB8fHt9KTtmdW5jdGlvbiBjTyhjLGwsYSl7Y29uc3QgZD1qbChjKSxmPXRkKFtkW3Fv'@;
put 'LkRheXNGb3JtYXRdLGRbcW8uRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdGQoZixhKX1mdW5jdGlvbiB1TyhjLGwsYSl7Y29uc3QgZD1qbChjKSxmPXRkKFtkW3FvLk1vbnRoc0Zvcm1hdF0sZFtxby5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHRkKGYsYSl9ZnVuY3Rpb24gdGQo'@;
put 'YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIEpXKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQobCk7Zm9yKGNvbnN0'@;
put 'IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29uc3QgeU89L1xzKy8sUVc9'@;
put 'W107bGV0IGRjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5faXRlcmFibGVEaWZmZXJzPWEsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWQsdGhpcy5fbmdFbD1oLHRoaXMuX3JlbmRlcmVyPWYsdGhpcy5pbml0aWFsQ2xhc3Nlcz1RVyx0aGlzLnN0YXRlTWFwPW5ldyBN'@;
put 'YXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRyaW0oKS5zcGxpdCh5Tyk6UVd9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoeU8pOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhp'@;
put 'cy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29u'@;
put 'c3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5l'@;
put 'bmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90'@;
put 'b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYm'@;
put 'YS5zcGxpdCh5TykuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpKHR0KHo2KSx0dChNXyksdHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZToh'@;
put 'MH0pLGN9KSgpO2NsYXNzIG0wZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10'@;
put 'aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgeHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnko'@;
put 'YSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdG'@;
put 'b3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZl'@;
put 'ciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdl'@;
put 'cyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsXyk9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IG0wZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09'@;
put 'PV8/dm9pZCAwOl8pO2Vsc2UgaWYobnVsbD09XylkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgVD1kLmdldChmKTtkLm1vdmUoVCxfKSx0RyhULGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgVD1kLmdldChoKS5j'@;
put 'b250ZXh0O1QuaW5kZXg9aCxULmNvdW50PWYsVC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e3RHKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dCh6YSksdHQoejYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJu'@;
put 'Z0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksY30pKCk7ZnVuY3Rpb24gdEcoYyxsKXtjLmNvbnRleHQuJGltcGxpY2l0PWwuaXRlbX1sZXQgWmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250YWlu'@;
put 'ZXI9YSx0aGlzLl9jb250ZXh0PW5ldyB2MGUsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEpe3Ro'@;
put 'aXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7bkcoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQg'@;
put 'bmdJZkVsc2UoYSl7bkcoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0Nv'@;
put 'bnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5f'@;
put 'ZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVS'@;
put 'ZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoemEpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'IiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpO2NsYXNzIHYwZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9u'@;
put 'IG5HKGMsbCl7aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtxYShsKX0nLmApfWNsYXNzIHdPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1sLHRoaXMu'@;
put 'X3RlbXBsYXRlUmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVy'@;
put 'UmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgbmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0aGlzLl9kZWZhdWx0'@;
put 'VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2Fk'@;
put 'ZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNo'@;
put 'ZWR8fGQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0'@;
put 'Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRl'@;
put 'KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHRoPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgd08oYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KHphKSx0dChuZCw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNl'@;
put 'In0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLGlHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5f'@;
put 'bmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2Vz'@;
put 'KGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSxfPS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOlkyLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsXyk6dGhp'@;
put 'cy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsXyl9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNoQWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5'@;
put 'LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KE1fKSx0dChGbykpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxyZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl92aWV3UmVmPW51bGws'@;
put 'dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoYSl7aWYoYS5uZ1RlbXBsYXRlT3V0bGV0fHxhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7Y29u'@;
put 'c3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtjb25zdHtuZ1RlbXBsYXRlT3V0bGV0OmgsbmdUZW1wbGF0ZU91dGxldENvbnRleHQ6ZixuZ1RlbXBsYXRl'@;
put 'T3V0bGV0SW5qZWN0b3I6X309dGhpczt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KGgsZixfP3tpbmplY3RvcjpffTp2b2lkIDApfWVsc2UgdGhpcy5fdmlld1JlZj1udWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmYS5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5uZ1Rl'@;
put 'bXBsYXRlT3V0bGV0Q29udGV4dCYmKHRoaXMuX3ZpZXdSZWYuY29udGV4dD10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyB5MGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIEtoKCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe0toKCgpPT5sLnVuc3Vic2Ny'@;
put 'aWJlKCkpfX1jbGFzcyB3MGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhlbihhLGQ9Pnt0aHJvdyBkfSl9ZGlzcG9zZShsKXt9fWNvbnN0IEMwZT1uZXcgdzBlLFMwZT1uZXcgeTBlO2xldCB1eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xhdGVzdFZh'@;
put 'bHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtyZXR1cm4g'@;
put 'dGhpcy5fb2JqP2EhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShhKSk6dGhpcy5fbGF0ZXN0VmFsdWU6KGEmJnRoaXMuX3N1YnNjcmliZShhKSx0aGlzLl9sYXRlc3RWYWx1ZSl9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlz'@;
put 'Ll9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKSl9X3NlbGVjdFN0cmF0ZWd5KGEpe2lmKHY1KGEpKXJldHVybiBDMGU7aWYocE0oYSkpcmV0dXJuIFMw'@;
put 'ZTt0aHJvdyBmdW5jdGlvbiBlMihjLGwpe3JldHVybiBuZXcgQXIoMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVs'@;
put 'bH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSwxNikpfSxjLlx1MDI3NXBpcGU9TmEo'@;
put 'e25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCksb0c9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1cGlwZT1OYSh7bmFtZToianNvbiIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLGN9KSgpLGR4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49c0d9dHJhbnNmb3JtKGEsZD1zRyl7'@;
put 'aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47'@;
put 'cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxoLmZvckVhY2hJdGVtKF89Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIFAwZShjLGwpe3JldHVybntrZXk6Yyx2YWx1ZTpsfX0oXy5rZXksXy5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJih0aGlzLmtleVZhbHVlcy5zb3J0KGQp'@;
put 'LHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFsdWVzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChNXywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCk7'@;
put 'ZnVuY3Rpb24gc0coYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1cm4gMTtpZih2b2lkIDA9PT1kKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1kKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'YSYmInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2NvbnN0IGg9U3RyaW5n'@;
put 'KGEpLGY9U3RyaW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IG9vPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0'@;
put 'IGFHPSJicm93c2VyIjtmdW5jdGlvbiBScyhjKXtyZXR1cm4gYz09PWFHfWZ1bmN0aW9uIGxHKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgejBlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3'@;
put 'IFUwZShhcihJcyksd2luZG93KX0pLGN9KSgpO2NsYXNzIFUwZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9s'@;
put 'bFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxU'@;
put 'byhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGE9ZnVuY3Rpb24gWjBlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2Rl'@;
put 'O2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IF89Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYoXylyZXR1cm4gX31oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRo'@;
put 'aXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGE9dGhpcy53aW5kb3cuaGlzdG9yeTthJiZhLnNjcm9sbFJlc3RvcmF0aW9uJiYoYS5zY3JvbGxSZXN0'@;
put 'b3JhdGlvbj1sKX19c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxU'@;
put 'byhkLWZbMF0saC1mWzFdKX1zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKXt0cnl7aWYoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSlyZXR1cm4hMTtjb25zdCBsPWNHKHRoaXMud2luZG93Lmhpc3RvcnkpfHxjRyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy53aW5kb3cuaGlzdG9yeSkp'@;
put 'O3JldHVybiEoIWx8fCFsLndyaXRhYmxlJiYhbC5zZXQpfWNhdGNoe3JldHVybiExfX1zdXBwb3J0c1Njcm9sbGluZygpe3RyeXtyZXR1cm4hIXRoaXMud2luZG93JiYhIXRoaXMud2luZG93LnNjcm9sbFRvJiYicGFnZVhPZmZzZXQiaW4gdGhpcy53aW5kb3d9Y2F0Y2h7cmV0dXJuITF9fX1m'@;
put 'dW5jdGlvbiBjRyhjKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLCJzY3JvbGxSZXN0b3JhdGlvbiIpfWNsYXNzIHVHe31jbGFzcyBmMWUgZXh0ZW5kcyB4dWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9'@;
put 'ITB9fWNsYXNzIEVPIGV4dGVuZHMgZjFle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBNdWUoYyl7c098fChzTz1jKX0obmV3IEVPKX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9'@;
put 'fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwp'@;
put 'fWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5F'@;
put 'TEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VI'@;
put 'cmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gcDFlKCl7cmV0dXJuIFRfPVRffHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksVF8/VF8uZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIGcxZShjKXtweD1weHx8ZG9jdW1lbnQuY3Jl'@;
put 'YXRlRWxlbWVudCgiYSIpLHB4LnNldEF0dHJpYnV0ZSgiaHJlZiIsYyk7Y29uc3QgbD1weC5wYXRobmFtZTtyZXR1cm4iLyI9PT1sLmNoYXJBdCgwKT9sOmAvJHtsfWB9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtUXz1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9y'@;
put 'LnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIEpXKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IHB4LFRfPW51bGwsdjFlPSgoKT0+e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBrTz1uZXcgU2koIkV2ZW50TWFuYWdlclBsdWdpbnMiKTtsZXQgZ0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVU'@;
put 'b1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl9Z2V0Wm9u'@;
put 'ZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBBcig1MTAxLCExKTtyZXR1cm4g'@;
put 'dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa08pLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgbUd7Y29u'@;
put 'c3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IEFPPSJuZy1hcHAtaWQiO2xldCB2Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGY9e30pe3RoaXMuZG9jPWEsdGhpcy5hcHBJZD1kLHRoaXMubm9uY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnN0eWxlUmVmPW5ldyBN'@;
put 'YXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnN0eWxlTm9kZXNJbkRPTT10aGlzLmNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1sRyhmKSx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09'@;
put 'PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJlbW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMu'@;
put 'c3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRk'@;
put 'KGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9y'@;
put 'KGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1vdmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRl'@;
put 'cmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske0FPfT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFjaChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50'@;
put 'ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdlfXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltd'@;
put 'fSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShBTyksZjt7Y29uc3QgXz10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZfLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLF8udGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJl8uc2V0QXR0cmlidXRlKEFPLHRoaXMuYXBwSWQpLF99fWFkZFN0eWxlVG9Ib3N0KGEsZCl7Y29uc3QgaD10aGlz'@;
put 'LmdldFN0eWxlRWxlbWVudChhLGQpO2EuYXBwZW5kQ2hpbGQoaCk7Y29uc3QgZj10aGlzLnN0eWxlUmVmLF89Zi5nZXQoZCk/LmVsZW1lbnRzO18/Xy5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVz'@;
put 'O2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoSXMpLGFyKGE2KSxhcihsNiw4KSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp'@;
put 'O2NvbnN0IFRPPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxu'@;
put 'czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LERPPS8lQ09NUCUvZyx3MWU9bmV3IFNpKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5j'@;
put 'dGlvbiBiRyhjLGwpe3JldHVybiBsLm1hcChhPT5hLnJlcGxhY2UoRE8sYykpfWxldCBMTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWU9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5y'@;
put 'ZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9Xyx0aGlzLnBsYXRmb3JtSWQ9VCx0aGlzLm5nWm9uZT1XLHRoaXMubm9uY2U9aWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWxHKFQpLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5l'@;
put 'dyBJTyhhLF8sVyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PVBjLlNoYWRvd0RvbSYmKGQ9ey4uLmQsZW5jYXBzdWxh'@;
put 'dGlvbjpQYy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB3Rz9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBSTyYmaC5hcHBseVN0eWxlcygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9'@;
put 'dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCBfPXRoaXMuZG9jLFQ9dGhpcy5uZ1pvbmUsVz10aGlzLmV2ZW50TWFuYWdlcixpZT10aGlzLnNoYXJlZFN0eWxlc0hvc3QscGU9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LHdlPXRoaXMu'@;
put 'cGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIFBjLkVtdWxhdGVkOmY9bmV3IHdHKFcsaWUsZCx0aGlzLmFwcElkLHBlLF8sVCx3ZSk7YnJlYWs7Y2FzZSBQYy5TaGFkb3dEb206cmV0dXJuIG5ldyB4MWUoVyxpZSxhLGQsXyxULHRoaXMubm9uY2Usd2UpO2Rl'@;
put 'ZmF1bHQ6Zj1uZXcgUk8oVyxpZSxkLHBlLF8sVCx3ZSl9aC5zZXQoZC5pZCxmKX1yZXR1cm4gZn1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihnRyksYXIodkcpLGFy'@;
put 'KGE2KSxhcih3MWUpLGFyKElzKSxhcihHcyksYXIoTm8pLGFyKGw2KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgSU97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmda'@;
put 'b25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhUT1thXXx8YSxsKTp0aGlzLmRv'@;
put 'Yy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoeUcobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxk'@;
put 'KGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKHlHKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGlsZChsLGEpe2wmJmwucmVtb3ZlQ2hpbGQoYSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlT'@;
put 'ZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBBcigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBhcmVudE5vZGUobCl7cmV0dXJuIGwucGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7'@;
put 'aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9VE9baF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQpfWVsc2UgbC5zZXRBdHRyaWJ1dGUoYSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9VE9bZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5T'@;
put 'KGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5hZGQoYSl9cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoWTIuRGFzaENh'@;
put 'c2V8WTIuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJlkyLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5zdHlsZVthXT1kfXJlbW92ZVN0eWxlKGwsYSxkKXtkJlkyLkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9w'@;
put 'ZXJ0eShsLGEsZCl7bFthXT1kfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFy'@;
put 'Z2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJl'@;
put 'dHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24geUcoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNz'@;
put 'IHgxZSBleHRlbmRzIElPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7c3VwZXIobCxmLF8sVyksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0'@;
put 'LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBpZT1iRyhoLmlkLGguc3R5bGVzKTtmb3IoY29uc3QgcGUgb2YgaWUpe2NvbnN0IHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7VCYmd2Uuc2V0QXR0cmlidXRlKCJub25jZSIsVCksd2UudGV4dENvbnRlbnQ9cGUsdGhp'@;
put 'cy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHdlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNl'@;
put 'cnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRo'@;
put 'aXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBSTyBleHRlbmRzIElPe2NvbnN0cnVjdG9yKGwsYSxkLGgs'@;
put 'ZixfLFQsVyl7c3VwZXIobCxmLF8sVCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9Vz9iRyhXLGQuc3R5bGVzKTpkLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMo'@;
put 'dGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyB3RyBleHRlbmRzIFJPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9aCsi'@;
put 'LSIrZC5pZDtzdXBlcihsLGEsZCxmLF8sVCxXLGllKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIEMxZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoRE8sYyl9KGllKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIFMxZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJl'@;
put 'cGxhY2UoRE8sYyl9KGllKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0'@;
put 'ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCBFMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG1He2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwo'@;
put 'KT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKElzKSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgQ0c9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sazFlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNj'@;
put 'OiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxBMWU9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtl'@;
put 'eSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgVDFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBtR3tjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxo'@;
put 'KXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksXz1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmFwKCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50'@;
put 'TmFtZSxfKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBv'@;
put 'cCgpKTtsZXQgXz0iIixUPWQuaW5kZXhPZigiY29kZSIpO2lmKFQ+LTEmJihkLnNwbGljZShULDEpLF89ImNvZGUuIiksQ0cuZm9yRWFjaChpZT0+e2NvbnN0IHBlPWQuaW5kZXhPZihpZSk7cGU+LTEmJihkLnNwbGljZShwZSwxKSxfKz1pZSsiLiIpfSksXys9ZiwwIT1kLmxlbmd0aHx8MD09'@;
put 'PWYubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IFc9e307cmV0dXJuIFcuZG9tRXZlbnROYW1lPWgsVy5mdWxsS2V5PV8sV31zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9azFlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYo'@;
put 'aD1hLmNvZGUsZj0iY29kZS4iKSwhKG51bGw9PWh8fCFoKSYmKGg9aC50b0xvd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSxDRy5mb3JFYWNoKF89PntfIT09aCYmKDAsQTFlW19dKShhKSYmKGYrPV8rIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVu'@;
put 'dENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkmJmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShhcihJcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IE1HPVt7cHJvdmlkZTpHcyx1c2VWYWx1ZTphR30se3Byb3ZpZGU6ZVMsdXNlVmFsdWU6ZnVuY3Rpb24gRDFlKCl7RU8ubWFrZUN1cnJlbnQo'@;
put 'KX0sbXVsdGk6ITB9LHtwcm92aWRlOklzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSTFlKCl7cmV0dXJuIGZ1bmN0aW9uIEZDKGMpe0c5PWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLFIxZT1tVyhodWUsImJyb3dzZXIiLE1HKSxPMWU9bmV3IFNpKCIiKSx4Rz1be3Byb3ZpZGU6S00s'@;
put 'dXNlQ2xhc3M6Y2xhc3MgbTFle2FkZFRvV2luZG93KGwpe09pLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBBcig1MTAzLCExKTtyZXR1cm4gZn0sT2kuZ2V0QWxsQW5ndWxh'@;
put 'clRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxsVGVzdGFiaWxpdGllcygpLE9pLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksT2kuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChPaS5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksT2kuZnJhbWV3b3Jr'@;
put 'U3RhYmlsaXplcnMucHVzaChkPT57Y29uc3QgaD1PaS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoLF89ITE7Y29uc3QgVD1mdW5jdGlvbihXKXtfPV98fFcsZi0tLDA9PWYmJmQoXyl9O2guZm9yRWFjaChXPT57Vy53aGVuU3RhYmxlKFQpfSl9KX1maW5kVGVz'@;
put 'dGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVybiBudWxsPT1hP251bGw6bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/YXAoKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRF'@;
put 'bGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOmRXLHVzZUNsYXNzOiRSLGRlcHM6W05vLHFSLEtNXX0se3Byb3ZpZGU6JFIsdXNlQ2xhc3M6JFIsZGVwczpbTm8scVIsS01dfV0sRUc9W3twcm92aWRlOnQ1LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6aGYsdXNlRmFjdG9y'@;
put 'eTpmdW5jdGlvbiBMMWUoKXtyZXR1cm4gbmV3IGhmfSxkZXBzOltdfSx7cHJvdmlkZTprTyx1c2VDbGFzczpFMWUsbXVsdGk6ITAsZGVwczpbSXMsTm8sR3NdfSx7cHJvdmlkZTprTyx1c2VDbGFzczpUMWUsbXVsdGk6ITAsZGVwczpbSXNdfSxMTyx2RyxnRyx7cHJvdmlkZTpZMyx1c2VFeGlz'@;
put 'dGluZzpMT30se3Byb3ZpZGU6dUcsdXNlQ2xhc3M6djFlLGRlcHM6W119LFtdXTtsZXQga0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6YTYsdXNlVmFsdWU6'@;
put 'YS5hcHBJZH1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTzFlLDEyKSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOlsuLi5FRywuLi54R10saW1wb3J0czpbb28sZnVlXX0pLGN9KSgpLEFH'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jPWF9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGEpe3RoaXMuX2RvYy50aXRsZT1hfHwiIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoSXMp'@;
put 'KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hP25ldyBhOmZ1bmN0aW9uIEYxZSgpe3JldHVybiBuZXcgQUcoYXIoSXMpKX0oKSxkfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3R5cGVvZiB3aW5kb3c8InUiJiZ3'@;
put 'aW5kb3c7Rig3NDA5MiksRigzNDIwOSk7Y29uc3QgUE89e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEduPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3Rh'@;
put 'cnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxlOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19'@;
put 'LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixs'@;
put 'aWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFyeUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJy'@;
put 'ZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAs'@;
put 'c2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJj'@;
put 'aDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4i'@;
put 'LCJOT1QgSU4iLCJORSJdfX07dmFyIEtvPUYoMTY2NzYpLElHPUYubihLbyk7ZnVuY3Rpb24gUkcoYyxsLGEsZCxoLGYsXyl7dHJ5e3ZhciBUPWNbZl0oXyksVz1ULnZhbHVlfWNhdGNoKGllKXtyZXR1cm4gdm9pZCBhKGllKX1ULmRvbmU/bChXKTpQcm9taXNlLnJlc29sdmUoVykudGhlbihk'@;
put 'LGgpfWZ1bmN0aW9uIGZpKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIF8oVyl7UkcoZixkLGgsXyxULCJuZXh0IixXKX1mdW5jdGlvbiBUKFcpe1JH'@;
put 'KGYsZCxoLF8sVCwidGhyb3ciLFcpfV8odm9pZCAwKX0pfX1mdW5jdGlvbiBGTyhjKXtyZXR1cm4hIWMmJihjIGluc3RhbmNlb2YgS2V8fFkoYy5saWZ0KSYmWShjLnN1YnNjcmliZSkpfWNvbnN0e2lzQXJyYXk6ajFlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6ejFlLHByb3RvdHlwZTpVMWUs'@;
put 'a2V5czpaMWV9PU9iamVjdDtmdW5jdGlvbiBPRyhjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihqMWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIFkxZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZ6MWUoYyk9PT1VMWV9KGwpKXtj'@;
put 'b25zdCBhPVoxZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpXMWV9PUFycmF5O2Z1bmN0aW9uIEhPKGMpe3JldHVybiBNZShsPT5mdW5jdGlvbiBHMWUoYyxsKXtyZXR1cm4gVzFlKGwpP2MoLi4u'@;
put 'bCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gUEcoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gWTYoLi4uYyl7Y29uc3QgbD1OMChjKSxhPU9jKGMpLHthcmdzOmQsa2V5czpofT1PRyhjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGVhKFtd'@;
put 'LGwpO2NvbnN0IGY9bmV3IEtlKGZ1bmN0aW9uICQxZShjLGwsYT1PZSl7cmV0dXJuIGQ9PntGRyhsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IF89aCxUPWg7Zm9yKGxldCBXPTA7VzxoO1crKylGRyhsLCgpPT57Y29uc3QgaWU9ZWEoY1tXXSxsKTtsZXQgcGU9'@;
put 'ITE7aWUuc3Vic2NyaWJlKFVlKGQsd2U9PntmW1ddPXdlLHBlfHwocGU9ITAsVC0tKSxUfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLV98fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/Xz0+UEcoaCxfKTpPZSkpO3JldHVybiBhP2YucGlwZShITyhhKSk6Zn1mdW5jdGlv'@;
put 'biBGRyhjLGwsYSl7Yz9HaShhLGMsbCk6bCgpfWNvbnN0IGd4PVgoYz0+ZnVuY3Rpb24oKXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBteCguLi5jKXtyZXR1cm4gZnVuY3Rpb24gcTFlKCl7'@;
put 'cmV0dXJuIFBpKDEpfSgpKGVhKGMsTjAoYykpKX1mdW5jdGlvbiBIRyhjKXtyZXR1cm4gbmV3IEtlKGw9PntLcihjKCkpLnN1YnNjcmliZShsKX0pfWZ1bmN0aW9uIERfKGMsbCl7Y29uc3QgYT1ZKGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBLZShsP2g9Pmwuc2No'@;
put 'ZWR1bGUoZCwwLGgpOmQpfWZ1bmN0aW9uIE5PKCl7cmV0dXJuIFhlKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9VWUobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9'@;
put 'bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgTkcgZXh0ZW5kcyBLZXtjb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLHFlKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJq'@;
put 'ZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0'@;
put 'e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBlZTtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgp'@;
put 'O2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShVZShhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVs'@;
put 'bCxsPWVlLkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBOTygpKHRoaXMpfX1mdW5jdGlvbiBpZChjKXtyZXR1cm4gYzw9MD8oKT0+SW86WGUoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKFVlKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRlKCkp'@;
put 'fSkpfSl9ZnVuY3Rpb24gY3AoLi4uYyl7Y29uc3QgbD1OMChjKTtyZXR1cm4gWGUoKGEsZCk9PnsobD9teChjLGEsbCk6bXgoYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gTGEoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKFVlKGQsZj0+Yy5jYWxsKGws'@;
put 'ZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIHZ4KGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBWRyhjPUsxZSl7cmV0dXJuIFhl'@;
put 'KChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoVWUoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIEsxZSgpe3JldHVybiBuZXcgZ3h9ZnVuY3Rpb24gdXAoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7'@;
put 'cmV0dXJuIGQ9PmQucGlwZShjP0xhKChoLGYpPT5jKGgsZixkKSk6T2UsaWQoMSksYT92eChsKTpWRygoKT0+bmV3IGd4KSl9ZnVuY3Rpb24gVzYoYyxsKXtyZXR1cm4gWShsKT95cihjLGwsMSk6eXIoYywxKX1mdW5jdGlvbiBVYyhjLGwsYSl7Y29uc3QgZD1ZKGMpfHxsfHxhP3tuZXh0OmMs'@;
put 'ZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1hlKChoLGYpPT57dmFyIF87bnVsbD09PShfPWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09X3x8Xy5jYWxsKGQpO2xldCBUPSEwO2guc3Vic2NyaWJlKFVlKGYsVz0+e3ZhciBpZTtudWxsPT09KGllPWQubmV4dCl8fHZvaWQgMD09PWllfHxp'@;
put 'ZS5jYWxsKGQsVyksZi5uZXh0KFcpfSwoKT0+e3ZhciBXO1Q9ITEsbnVsbD09PShXPWQuY29tcGxldGUpfHx2b2lkIDA9PT1XfHxXLmNhbGwoZCksZi5jb21wbGV0ZSgpfSxXPT57dmFyIGllO1Q9ITEsbnVsbD09PShpZT1kLmVycm9yKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCxXKSxmLmVy'@;
put 'cm9yKFcpfSwoKT0+e3ZhciBXLGllO1QmJihudWxsPT09KFc9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PVd8fFcuY2FsbChkKSksbnVsbD09PShpZT1kLmZpbmFsaXplKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCl9KSl9KTpPZX1mdW5jdGlvbiBBNShjKXtyZXR1cm4gWGUoKGwsYSk9Pnts'@;
put 'ZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKFVlKGEsdm9pZCAwLHZvaWQgMCxfPT57Zj1LcihjKF8sQTUoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEp'@;
put 'KX0pfWZ1bmN0aW9uIFZPKGMpe3JldHVybiBjPD0wPygpPT5JbzpYZSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAs'@;
put 'KCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBMXyhjKXtyZXR1cm4gWGUoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1jb25zdCBscz0icHJpbWFyeSIsSV89U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgZWRle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFy'@;
put 'YW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9'@;
put 'Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gRzYoYyl7cmV0dXJuIG5ldyBlZGUoYyl9'@;
put 'ZnVuY3Rpb24gdGRlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7Zjxk'@;
put 'Lmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXSxUPWNbZl07aWYoXy5zdGFydHNXaXRoKCI6IikpaFtfLnN1YnN0cmluZygxKV09VDtlbHNlIGlmKF8hPT1ULnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIHJo'@;
put 'KGMsbCl7Y29uc3QgYT1jP09iamVjdC5rZXlzKGMpOnZvaWQgMCxkPWw/T2JqZWN0LmtleXMobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhakcoY1toXSxsW2hdKSlyZXR1'@;
put 'cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBqRyhjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkobCkpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1bLi4uY10uc29ydCgpLGQ9Wy4uLmxdLnNvcnQoKTtyZXR1cm4gYS5ldmVyeSgoaCxmKT0+ZFtm'@;
put 'XT09PWgpfXJldHVybiBjPT09bH1mdW5jdGlvbiB6RyhjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZHAoYyl7cmV0dXJuIEZPKGMpP2M6djUoYyk/ZWEoUHJvbWlzZS5yZXNvbHZlKGMpKTpXaShjKX1jb25zdCByZGU9e2V4YWN0OmZ1bmN0aW9uIFlH'@;
put 'KGMsbCxhKXtpZighVDUoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IV94KGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFZ'@;
put 'RyhjLmNoaWxkcmVuW2RdLGwuY2hpbGRyZW5bZF0sYSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDpXR30sVUc9e2V4YWN0OmZ1bmN0aW9uIGlkZShjLGwpe3JldHVybiByaChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gb2RlKGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2Jq'@;
put 'ZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5qRyhjW2FdLGxbYV0pKX0saWdub3JlZDooKT0+ITB9O2Z1bmN0aW9uIFpHKGMsbCxhKXtyZXR1cm4gcmRlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZVR1thLnF1ZXJ5UGFyYW1zXShj'@;
put 'LnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gV0coYyxsLGEpe3JldHVybiBHRyhjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBHRyhjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0'@;
put 'aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIVQ1KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IV94KGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7aWYoIVQ1KGMuc2VnbWVudHMsYSl8fCFfeChjLnNlZ21lbnRz'@;
put 'LGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8IVdHKGMuY2hpbGRyZW5baF0sbC5jaGlsZHJlbltoXSxkKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaD1hLnNsaWNlKDAsYy5zZWdtZW50cy5sZW5ndGgpLGY9YS5zbGljZShjLnNl'@;
put 'Z21lbnRzLmxlbmd0aCk7cmV0dXJuISEoVDUoYy5zZWdtZW50cyxoKSYmX3goYy5zZWdtZW50cyxoLGQpJiZjLmNoaWxkcmVuW2xzXSkmJkdHKGMuY2hpbGRyZW5bbHNdLGwsZixkKX19ZnVuY3Rpb24gX3goYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5VR1thXShjW2hdLnBhcmFtZXRl'@;
put 'cnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgJDZ7Y29uc3RydWN0b3IobD1uZXcgeWEoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0'@;
put 'aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIGxkZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIHlhe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMuY2hpbGRyZW49YSx0aGlzLnBh'@;
put 'cmVudD1udWxsLE9iamVjdC52YWx1ZXMoYSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9T'@;
put 'dHJpbmcoKXtyZXR1cm4gYngodGhpcyl9fWNsYXNzIFJfe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9RzYodGhpcy5wYXJhbWV0ZXJz'@;
put 'KSksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIEtHKHRoaXMpfX1mdW5jdGlvbiBUNShjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBPXz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJPfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIEJPe3BhcnNlKGwpe2NvbnN0IGE9bmV3IGJkZShsKTtyZXR1cm4g'@;
put 'bmV3ICQ2KGEucGFyc2VSb290U2VnbWVudCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7UF8obC5yb290LCEwKX1gLGQ9ZnVuY3Rpb24gZGRlKGMpe2NvbnN0IGw9T2JqZWN0LmtleXMoYykubWFwKGE9Pntjb25zdCBk'@;
put 'PWNbYV07cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoaD0+YCR7eXgoYSl9PSR7eXgoaCl9YCkuam9pbigiJiIpOmAke3l4KGEpfT0ke3l4KGQpfWB9KS5maWx0ZXIoYT0+ISFhKTtyZXR1cm4gbC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpO3JldHVy'@;
put 'bmAke2F9JHtkfSR7InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBjZGUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIn1gfX1jb25zdCBsZGU9bmV3IEJPO2Z1bmN0aW9uIGJ4KGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5LRyhsKSku'@;
put 'am9pbigiLyIpfWZ1bmN0aW9uIFBfKGMsbCl7aWYoIWMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYngoYyk7aWYobCl7Y29uc3QgYT1jLmNoaWxkcmVuW2xzXT9QXyhjLmNoaWxkcmVuW2xzXSwhMSk6IiIsZD1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gs'@;
put 'Zl0pPT57aCE9PWxzJiZkLnB1c2goYCR7aH06JHtQXyhmLCExKX1gKX0pLGQubGVuZ3RoPjA/YCR7YX0oJHtkLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBhZGUoYyxsKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0p'@;
put 'PT57ZD09PWxzJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2QhPT1scyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxhfShjLChkLGgpPT5oPT09bHM/W1BfKGMuY2hpbGRyZW5bbHNdLCExKV06W2Ake2h9OiR7UF8o'@;
put 'ZCwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMoYy5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1jLmNoaWxkcmVuW2xzXT9gJHtieChjKX0vJHthWzBdfWA6YCR7YngoYyl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gJEcoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChj'@;
put 'KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24geXgoYyl7cmV0dXJuICRHKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIGpPKGMpe3JldHVybiAkRyhjKS5yZXBs'@;
put 'YWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiB3eChjKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfWZ1bmN0aW9uIHFHKGMpe3JldHVybiB3eChjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBLRyhj'@;
put 'KXtyZXR1cm5gJHtqTyhjLnBhdGgpfSR7ZnVuY3Rpb24gdWRlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+YDske2pPKGwpfT0ke2pPKGNbbF0pfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgaGRlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHpPKGMpe2NvbnN0'@;
put 'IGw9Yy5tYXRjaChoZGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgZmRlPS9eW15cLygpPzs9I10rLyxnZGU9L15bXj0/JiNdKy8sdmRlPS9eW14mI10rLztjbGFzcyBiZGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1'@;
put 'cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgeWEoW10se30pOm5ldyB5YShbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygp'@;
put 'e2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2Rl'@;
put 'VVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJz'@;
put 'ZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNX'@;
put 'aXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW2xz'@;
put 'XT1uZXcgeWEobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXpPKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgQXIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgUl8od3gobCksdGhpcy5wYXJzZU1h'@;
put 'dHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIHBkZShjKXtjb25zdCBsPWMubWF0Y2goZmRlKTty'@;
put 'ZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPXpPKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFt3eChhKV09d3go'@;
put 'ZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gbWRlKGMpe2NvbnN0IGw9Yy5tYXRjaChnZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9'@;
put 'Iikpe2NvbnN0IF89ZnVuY3Rpb24gX2RlKGMpe2NvbnN0IGw9Yy5tYXRjaCh2ZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtfJiYoZD1fLHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD1xRyhhKSxmPXFHKGQpO2lmKGwuaGFzT3duUHJvcGVydHkoaCkpe2xldCBfPWxbaF07'@;
put 'QXJyYXkuaXNBcnJheShfKXx8KF89W19dLGxbaF09XyksXy5wdXNoKGYpfWVsc2UgbFtoXT1mfXBhcnNlUGFyZW5zKGwpe2NvbnN0IGE9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IGQ9'@;
put 'ek8odGhpcy5yZW1haW5pbmcpLGg9dGhpcy5yZW1haW5pbmdbZC5sZW5ndGhdO2lmKCIvIiE9PWgmJiIpIiE9PWgmJiI7IiE9PWgpdGhyb3cgbmV3IEFyKDQwMTAsITEpO2xldCBmO2QuaW5kZXhPZigiOiIpPi0xPyhmPWQuc2xpY2UoMCxkLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGYp'@;
put 'LHRoaXMuY2FwdHVyZSgiOiIpKTpsJiYoZj1scyk7Y29uc3QgXz10aGlzLnBhcnNlQ2hpbGRyZW4oKTthW2ZdPTE9PT1PYmplY3Qua2V5cyhfKS5sZW5ndGg/X1tsc106bmV3IHlhKFtdLF8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBhfXBlZWtTdGFydHNXaXRoKGwpe3Jl'@;
put 'dHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKGwpfWNvbnN1bWVPcHRpb25hbChsKXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgobCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcobC5sZW5ndGgpLCEwKX1jYXB0dXJlKGwpe2lmKCF0aGlzLmNvbnN1'@;
put 'bWVPcHRpb25hbChsKSl0aHJvdyBuZXcgQXIoNDAxMSwhMSl9fWZ1bmN0aW9uIFhHKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB5YShbXSx7W2xzXTpjfSk6Y31mdW5jdGlvbiBKRyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGMuY2hpbGRyZW4p'@;
put 'KXtjb25zdCBmPUpHKGMuY2hpbGRyZW5bZF0pO2lmKGQ9PT1scyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W18sVF1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW19dPVQ7ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxk'@;
put 'cmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24geWRlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bbHNdKXtjb25zdCBsPWMuY2hpbGRyZW5bbHNdO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0'@;
put 'dXJuIGN9KG5ldyB5YShjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBENShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mICQ2fWZ1bmN0aW9uIFFHKGMpe2xldCBsO2NvbnN0IGg9WEcoZnVuY3Rpb24gYShmKXtjb25zdCBfPXt9O2Zvcihjb25zdCBXIG9mIGYuY2hpbGRyZW4pe2NvbnN0IGllPWEoVyk7'@;
put 'X1tXLm91dGxldF09aWV9Y29uc3QgVD1uZXcgeWEoZi51cmwsXyk7cmV0dXJuIGY9PT1jJiYobD1UKSxUfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBlJChjLGwsYSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiBVTyho'@;
put 'LGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gQ2RlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3RoJiYiLyI9PT1jWzBdKXJldHVybiBuZXcgbiQoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLF8pPT57aWYoIm9iamVjdCI9PXR5cGVv'@;
put 'ZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IFQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW1csaWVdKT0+e1RbV109InN0cmluZyI9PXR5cGVvZiBpZT9pZS5zcGxpdCgiLyIpOmllfSksWy4uLmgse291dGxldHM6VH1dfWlmKGYuc2VnbWVu'@;
put 'dFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT1fPyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoVCxXKT0+ezA9PVcmJiIuIj09PVR8fCgwPT1XJiYiIj09PVQ/YT0hMDoiLi4iPT09VD9sKys6IiIhPVQmJmgucHVzaChU'@;
put 'KSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgbiQoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBVTyhoLGgsbmV3IHlhKFtdLHt9KSxhLGQpO2NvbnN0IF89ZnVuY3Rpb24gU2RlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBTeChsLCEwLDApO2lmKCFh'@;
put 'KXJldHVybiBuZXcgU3gobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFN4KGEsITAsMCk7Y29uc3QgZD1DeChjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIE1kZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFy'@;
put 'ZW50LCFkKXRocm93IG5ldyBBcig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgU3goZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxUPV8ucHJvY2Vzc0NoaWxkcmVuP0hfKF8uc2VnbWVudEdyb3Vw'@;
put 'LF8uaW5kZXgsZi5jb21tYW5kcyk6ciQoXy5zZWdtZW50R3JvdXAsXy5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4gVU8oaCxfLnNlZ21lbnRHcm91cCxULGEsZCl9ZnVuY3Rpb24gQ3goYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50'@;
put 'UGF0aH1mdW5jdGlvbiBGXyhjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiBVTyhjLGwsYSxkLGgpe2xldCBfLGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW1csaWVdKT0+e2ZbV109QXJyYXkuaXNBcnJheShpZSk/aWUu'@;
put 'bWFwKHBlPT5gJHtwZX1gKTpgJHtpZX1gfSksXz1jPT09bD9hOnQkKGMsbCxhKTtjb25zdCBUPVhHKEpHKF8pKTtyZXR1cm4gbmV3ICQ2KFQsZixoKX1mdW5jdGlvbiB0JChjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0p'@;
put 'PT57ZFtoXT1mPT09bD9hOnQkKGYsbCxhKX0pLG5ldyB5YShjLnNlZ21lbnRzLGQpfWNsYXNzIG4ke2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZDeChkWzBdKSl0'@;
put 'aHJvdyBuZXcgQXIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoRl8pO2lmKGgmJmghPT16RyhkKSl0aHJvdyBuZXcgQXIoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNz'@;
put 'IFN4e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiByJChjLGwsYSl7aWYoY3x8KGM9bmV3IHlhKFtdLHt9KSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0'@;
put 'dXJuIEhfKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIEVkZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IF89Yy5zZWdt'@;
put 'ZW50c1toXSxUPWFbZF07aWYoRl8oVCkpYnJlYWs7Y29uc3QgVz1gJHtUfWAsaWU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09VylicmVhaztpZihXJiZpZSYmIm9iamVjdCI9PXR5cGVvZiBpZSYmdm9pZCAwPT09aWUub3V0bGV0cyl7aWYoIW8kKFcsaWUsXykp'@;
put 'cmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFvJChXLHt9LF8pKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5s'@;
put 'ZW5ndGgpe2NvbnN0IGY9bmV3IHlhKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW2xzXT1uZXcgeWEoYy5zZWdtZW50cy5zbGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksSF8oZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5n'@;
put 'dGg/bmV3IHlhKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/Wk8oYyxsLGEpOmQubWF0Y2g/SF8oYywwLGgpOlpPKGMsbCxhKX1mdW5jdGlvbiBIXyhjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgeWEoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVu'@;
put 'Y3Rpb24geGRlKGMpe3JldHVybiBGXyhjWzBdKT9jWzBdLm91dGxldHM6e1tsc106Y319KGEpLGg9e307aWYoIWRbbHNdJiZjLmNoaWxkcmVuW2xzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bbHNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1IXyhjLmNoaWxk'@;
put 'cmVuW2xzXSxsLGEpO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57InN0cmluZyI9PXR5cGVvZiBfJiYoXz1bX10pLG51bGwhPT1fJiYoaFtmXT1yJChjLmNoaWxkcmVuW2ZdLGwsXykpfSksT2Jq'@;
put 'ZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2YsX10pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09Xyl9KSxuZXcgeWEoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gWk8oYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7'@;
put 'Y29uc3QgZj1hW2hdO2lmKEZfKGYpKXtjb25zdCBXPWtkZShmLm91dGxldHMpO3JldHVybiBuZXcgeWEoZCxXKX1pZigwPT09aCYmQ3goYVswXSkpe2QucHVzaChuZXcgUl8oYy5zZWdtZW50c1tsXS5wYXRoLGkkKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IF89Rl8oZik/Zi5vdXRsZXRz'@;
put 'W2xzXTpgJHtmfWAsVD1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7XyYmVCYmQ3goVCk/KGQucHVzaChuZXcgUl8oXyxpJChUKSkpLGgrPTIpOihkLnB1c2gobmV3IFJfKF8se30pKSxoKyspfXJldHVybiBuZXcgeWEoZCx7fSl9ZnVuY3Rpb24ga2RlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9i'@;
put 'amVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxbYV09Wk8obmV3IHlhKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gaSQoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgo'@;
put 'W2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBvJChjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmcmgobCxhLnBhcmFtZXRlcnMpfWNvbnN0IE5fPSJpbXBlcmF0aXZlIjtjbGFzcyBpaHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLnVybD1hfX1jbGFzcyBZTyBleHRlbmRz'@;
put 'IGloe2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy50eXBlPTAsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJs'@;
put 'OiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGhwIGV4dGVuZHMgaWh7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT0xfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhp'@;
put 'cy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX1jbGFzcyBNeCBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9Mn10b1N0cmluZygpe3JldHVy'@;
put 'bmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgVl8gZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPTE2fX1jbGFzcyBXTyBleHRlbmRz'@;
put 'IGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPTN9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9'@;
put 'KWB9fWNsYXNzIEFkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9NH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6ICck'@;
put 'e3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIFRkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRo'@;
put 'aXMuc3RhdGU9aCx0aGlzLnR5cGU9N310b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9'@;
put 'fWNsYXNzIERkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9OH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDog'@;
put 'JHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xhc3MgTGRlIGV4dGVuZHMgaWh7'@;
put 'Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT01fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0'@;
put 'czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBJZGUgZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPTZ9dG9TdHJp'@;
put 'bmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBSZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0'@;
put 'ZT1sLHRoaXMudHlwZT05fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBPZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT0xMH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xv'@;
put 'YWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIFBkZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTExfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRo'@;
put 'aXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBGZGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT0xMn10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYm'@;
put 'dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEhkZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTEzfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0'@;
put 'aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgTmRle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9MTR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlz'@;
put 'LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgcyR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9MTV9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhp'@;
put 'cy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBWZGV7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLmluamVjdG9yPW51'@;
put 'bGwsdGhpcy5jaGlsZHJlbj1uZXcgQl8sdGhpcy5hdHRhY2hSZWY9bnVsbH19bGV0IEJfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9b25DaGlsZE91dGxldENyZWF0ZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gu'@;
put 'b3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxldD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7'@;
put 'cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBkPXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4gZHx8KGQ9bmV3IFZkZSx0aGlzLmNvbnRleHRzLnNldChhLGQpKSxkfWdl'@;
put 'dENvbnRleHQoYSl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGEpfHxudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSko'@;
put 'KTtjbGFzcyBhJHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9yb290PWx9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQobCl7Y29uc3QgYT10aGlzLnBhdGhGcm9tUm9vdChsKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4obCl7Y29u'@;
put 'c3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRyZW4ubWFwKGQ9PmQudmFsdWUpOltdfWZpcnN0Q2hpbGQobCl7Y29uc3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhs'@;
put 'KXtjb25zdCBhPSRPKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVuZ3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoaD0+aC52YWx1ZSkuZmlsdGVyKGg9PmghPT1sKX1wYXRoRnJvbVJvb3QobCl7cmV0dXJuICRPKGwsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5j'@;
put 'dGlvbiBHTyhjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybiBsO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9R08oYyxhKTtpZihkKXJldHVybiBkfXJldHVybiBudWxsfWZ1bmN0aW9uICRPKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuW2xdO2Zvcihjb25zdCBhIG9mIGwu'@;
put 'Y2hpbGRyZW4pe2NvbnN0IGQ9JE8oYyxhKTtpZihkLmxlbmd0aClyZXR1cm4gZC51bnNoaWZ0KGwpLGR9cmV0dXJuW119Y2xhc3MgeGZ7Y29uc3RydWN0b3IobCxhKXt0aGlzLnZhbHVlPWwsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0p'@;
put 'YH19ZnVuY3Rpb24gcTYoYyl7Y29uc3QgbD17fTtyZXR1cm4gYyYmYy5jaGlsZHJlbi5mb3JFYWNoKGE9PmxbYS52YWx1ZS5vdXRsZXRdPWEpLGx9Y2xhc3MgbCQgZXh0ZW5kcyBhJHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxxTyh0aGlzLGwpfXRvU3RyaW5n'@;
put 'KCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gYyQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIEJkZShjLGwpe2NvbnN0IF89bmV3IHh4KFtdLHt9LHt9LCIiLHt9LGxzLGwsbnVsbCx7fSk7cmV0dXJuIG5ldyBkJCgiIixuZXcgeGYoXyxbXSkpfSgwLGwpLGQ9bmV3'@;
put 'IFRlKFtuZXcgUl8oIiIse30pXSksaD1uZXcgVGUoe30pLGY9bmV3IFRlKHt9KSxfPW5ldyBUZSh7fSksVD1uZXcgVGUoIiIpLFc9bmV3IEdsKGQsaCxfLFQsZixscyxsLGEucm9vdCk7cmV0dXJuIFcuc25hcHNob3Q9YS5yb290LG5ldyBsJChuZXcgeGYoVyxbXSksYSl9Y2xhc3MgR2x7Y29u'@;
put 'c3RydWN0b3IobCxhLGQsaCxmLF8sVCxXKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PV8sdGhpcy5jb21wb25lbnQ9VCx0'@;
put 'aGlzLl9mdXR1cmVTbmFwc2hvdD1XLHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShNZShpZT0+aWVbSV9dKSk/P1dpKHZvaWQgMCksdGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWZ9Z2V0IHJvdXRl'@;
put 'Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4g'@;
put 'dGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFw'@;
put 'KCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShNZShsPT5HNihsKSkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1'@;
put 'ZXJ5UGFyYW1zLnBpcGUoTWUobD0+RzYobCkpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIHUkKGMsbD0iZW1wdHlP'@;
put 'bmx5Iil7Y29uc3QgYT1jLnBhdGhGcm9tUm9vdDtsZXQgZD0wO2lmKCJhbHdheXMiIT09bClmb3IoZD1hLmxlbmd0aC0xO2Q+PTE7KXtjb25zdCBoPWFbZF0sZj1hW2QtMV07aWYoaC5yb3V0ZUNvbmZpZyYmIiI9PT1oLnJvdXRlQ29uZmlnLnBhdGgpZC0tO2Vsc2V7aWYoZi5jb21wb25lbnQp'@;
put 'YnJlYWs7ZC0tfX1yZXR1cm4gZnVuY3Rpb24gamRlKGMpe3JldHVybiBjLnJlZHVjZSgobCxhKT0+KHtwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmEucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYS5kYXRhfSxyZXNvbHZlOnsuLi5hLmRhdGEsLi4ubC5yZXNvbHZlLC4uLmEucm91dGVDb25m'@;
put 'aWc/LmRhdGEsLi4uYS5fcmVzb2x2ZWREYXRhfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KGEuc2xpY2UoZCkpfWNsYXNzIHh4e2dldCB0aXRsZSgpe3JldHVybiB0aGlzLmRhdGE/LltJX119Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnVybD1sLHRo'@;
put 'aXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD1fLHRoaXMuY29tcG9uZW50PVQsdGhpcy5yb3V0ZUNvbmZpZz1XLHRoaXMuX3Jlc29sdmU9aWV9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9v'@;
put 'dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlz'@;
put 'KX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1HNih0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFt'@;
put 'TWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlKHVybDonJHt0aGlzLnVybC5tYXAoZD0+ZC50b1N0cmluZygpKS5qb2luKCIv'@;
put 'Iil9JywgcGF0aDonJHt0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIn0nKWB9fWNsYXNzIGQkIGV4dGVuZHMgYSR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLHFPKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gaCQodGhpcy5fcm9vdCl9fWZ1'@;
put 'bmN0aW9uIHFPKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+cU8oYyxhKSl9ZnVuY3Rpb24gaCQoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGgkKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7'@;
put 'Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBLTyhjKXtpZihjLnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEscmgobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFy'@;
put 'YW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxyaChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiBuZGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVy'@;
put 'biExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFyaChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxyaChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBz'@;
put 'aG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBYTyhjLGwpe2NvbnN0IGE9cmgoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBzZGUoYyxsKXtyZXR1cm4gVDUoYyxsKSYmYy5ldmVyeSgoYSxkKT0+cmgo'@;
put 'YS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxYTyhjLnBhcmVudCxsLnBhcmVudCkpfWxldCBmcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9'@;
put 'bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1scyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBFcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEVyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBFcix0aGlzLmRldGFjaEV2ZW50cz1uZXcgRXIsdGhpcy5wYXJlbnRDb250'@;
put 'ZXh0cz1GaShCXyksdGhpcy5sb2NhdGlvbj1GaShhcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1GaShVYSksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPUZpKHEwKSx0aGlzLmlucHV0QmluZGVyPUZpKEV4LHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1'@;
put 'dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRl'@;
put 'eHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0'@;
put 'aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250'@;
put 'ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRl'@;
put 'ZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2'@;
put 'YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBu'@;
put 'ZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhy'@;
put 'b3cgbmV3IEFyKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxk'@;
put 'KXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3Rh'@;
put 'bmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0'@;
put 'aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sXz1hLnNuYXBzaG90LmNvbXBvbmVudCxUPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0'@;
put 'KHRoaXMubmFtZSkuY2hpbGRyZW4sVz1uZXcgemRlKGEsVCxoLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudChfLHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpXLGVudmlyb25tZW50SW5qZWN0b3I6ZD8/dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSksdGhpcy5j'@;
put 'aGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0'@;
put 'dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdmFdfSksY30pKCk7Y2xhc3MgemRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhp'@;
put 'cy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUdsP3RoaXMucm91dGU6bD09PUJfP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgRXg9bmV3IFNpKCIiKTtsZXQgZiQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1'@;
put 'YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFT'@;
put 'dWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTYoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlw'@;
put 'ZShTYSgoW2YsXyxUXSxXKT0+KFQ9ey4uLmYsLi4uXywuLi5UfSwwPT09Vz9XaShUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29t'@;
put 'cG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IF89ZnVuY3Rpb24gU3VlKGMpe2NvbnN0IGw9UW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgaDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9y'@;
put 'fSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRh'@;
put 'bG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKF8pZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIF8uaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0'@;
put 'aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Y30pLGN9KSgpO2Z1bmN0aW9uIGpfKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBaZGUoYyxsLGEpe3JldHVybiBsLmNoaWxk'@;
put 'cmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gal8oYyxkLGgpO3JldHVybiBqXyhjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHhmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNo'@;
put 'KGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IF89Zi5yb3V0ZTtyZXR1cm4gXy52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSxfLmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKFQ9PmpfKGMsVCkpLF99fWNvbnN0IGQ9ZnVuY3Rpb24g'@;
put 'WWRlKGMpe3JldHVybiBuZXcgR2wobmV3IFRlKGMudXJsKSxuZXcgVGUoYy5wYXJhbXMpLG5ldyBUZShjLnF1ZXJ5UGFyYW1zKSxuZXcgVGUoYy5mcmFnbWVudCksbmV3IFRlKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+al8o'@;
put 'YyxmKSk7cmV0dXJuIG5ldyB4ZihkLGgpfX1jb25zdCBKTz0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uIHAkKGMsbCl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6ZH09RDUobCk/e3JlZGlyZWN0VG86bCxuYXZpZ2F0aW9uQmVoYXZp'@;
put 'b3JPcHRpb25zOnZvaWQgMH06bCxoPWckKCExLDAsbCk7cmV0dXJuIGgudXJsPWEsaC5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPWQsaH1mdW5jdGlvbiBnJChjLGwsYSl7Y29uc3QgZD1uZXcgRXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogIisoY3x8IiIpKTtyZXR1cm4gZFtK'@;
put 'T109ITAsZC5jYW5jZWxsYXRpb25Db2RlPWwsYSYmKGQudXJsPWEpLGR9ZnVuY3Rpb24gbSQoYyl7cmV0dXJuIHYkKGMpJiZENShjLnVybCl9ZnVuY3Rpb24gdiQoYyl7cmV0dXJuIGMmJmNbSk9dfWxldCBfJD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2dZXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxk'@;
put 'ZXBlbmRlbmNpZXM6W2ZwXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBRTyhjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFFPKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4uLmN9O3JldHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8'@;
put 'fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09bHMmJihhLmNvbXBvbmVudD1fJCksYX1mdW5jdGlvbiB0MihjKXtyZXR1cm4gYy5vdXRsZXR8fGxzfWZ1bmN0aW9uIHpfKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4g'@;
put 'Yy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2luamVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1'@;
put 'cm4gbnVsbH1jbGFzcyBKZGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1sLHRoaXMuZnV0dXJlU3RhdGU9YSx0aGlzLmN1cnJTdGF0ZT1kLHRoaXMuZm9yd2FyZEV2ZW50PWgsdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPWZ9YWN0aXZhdGUobCl7Y29u'@;
put 'c3QgYT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LGQ9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCksS08odGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpfWRl'@;
put 'YWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1xNihhKTtsLmNoaWxkcmVuLmZvckVhY2goZj0+e2NvbnN0IF89Zi52YWx1ZS5vdXRsZXQ7dGhpcy5kZWFjdGl2YXRlUm91dGVzKGYsaFtfXSxkKSxkZWxldGUgaFtfXX0pLE9iamVjdC52YWx1ZXMoaCkuZm9yRWFjaChmPT57dGhp'@;
put 'cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmLGQpfSl9ZGVhY3RpdmF0ZVJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYoaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IF89ZC5nZXRDb250ZXh0KGgub3V0bGV0KTtfJiZ0aGlzLmRlYWN0'@;
put 'aXZhdGVDaGlsZFJvdXRlcyhsLGEsXy5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBmJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGEsZCl9ZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obCxhKXtsLnZhbHVlLmNv'@;
put 'bXBvbmVudCYmdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKGwudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpfWRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGws'@;
put 'YSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9ZCYmbC52YWx1ZS5jb21wb25lbnQ/ZC5jaGlsZHJlbjphLGY9cTYobCk7Zm9yKGNvbnN0IF8gb2YgT2JqZWN0LmtleXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmW19dLGgpO2lmKGQmJmQu'@;
put 'b3V0bGV0KXtjb25zdCBfPWQub3V0bGV0LmRldGFjaCgpLFQ9ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOl8scm91dGU6bCxjb250ZXh0czpUfSl9fWRlYWN0aXZhdGVS'@;
put 'b3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXE2KGwpO2Zvcihjb25zdCBfIG9mIE9iamVjdC5rZXlzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4o'@;
put 'ZltfXSxoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXE2KGEpO2wuY2hpbGRyZW4uZm9y'@;
put 'RWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBOZGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBGZGUobC52YWx1ZS5zbmFwc2hvdCkpfWFj'@;
put 'dGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihLTyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxfLmNoaWxkcmVuKX1l'@;
put 'bHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBUPXRoaXMucm91'@;
put 'dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksXy5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoVC5jb250ZXh0cyksXy5hdHRhY2hSZWY9VC5jb21wb25lbnRSZWYsXy5yb3V0ZT1ULnJv'@;
put 'dXRlLnZhbHVlLF8ub3V0bGV0JiZfLm91dGxldC5hdHRhY2goVC5jb21wb25lbnRSZWYsVC5yb3V0ZS52YWx1ZSksS08oVC5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxfLmNoaWxkcmVuKX1lbHNle2NvbnN0IFQ9el8oaC5zbmFwc2hvdCk7Xy5hdHRhY2hS'@;
put 'ZWY9bnVsbCxfLnJvdXRlPWgsXy5pbmplY3Rvcj1ULF8ub3V0bGV0JiZfLm91dGxldC5hY3RpdmF0ZVdpdGgoaCxfLmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLF8uY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNs'@;
put 'YXNzIGIke2NvbnN0cnVjdG9yKGwpe3RoaXMucGF0aD1sLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIGt4e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIFFkZShjLGwsYSl7Y29uc3QgZD1jLl9y'@;
put 'b290O3JldHVybiBVXyhkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBLNihjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgY3x8ZnVuY3Rpb24gcTcoYyl7cmV0dXJuIG51bGwhPT14ZChjKX0oYyk/'@;
put 'bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIFVfKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9cTYobCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFjaChfPT57KGZ1bmN0aW9uIHQyZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVD'@;
put 'aGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsXz1sP2wudmFsdWU6bnVsbCxUPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKF8mJmYucm91dGVDb25maWc9PT1fLnJvdXRlQ29uZmlnKXtjb25zdCBXPWZ1bmN0aW9uIG4yZShjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hVDUoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFUNShjLnVybCxsLnVybCl8fCFyaChjLnF1'@;
put 'ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFYTyhjLGwpfHwhcmgoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFYTyhjLGwpfX0oXyxmLGYucm91dGVD'@;
put 'b25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtXP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgYiQoZCkpOihmLmRhdGE9Xy5kYXRhLGYuX3Jlc29sdmVkRGF0YT1fLl9yZXNvbHZlZERhdGEpLFVfKGMsbCxmLmNvbXBvbmVudD9UP1QuY2hpbGRyZW46bnVsbDphLGQsaCksVyYmVCYm'@;
put 'VC5vdXRsZXQmJlQub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3goVC5vdXRsZXQuY29tcG9uZW50LF8pKX1lbHNlIF8mJlpfKGwsVCxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGIkKGQpKSxVXyhjLG51bGwsZi5jb21wb25lbnQ/'@;
put 'VD9ULmNoaWxkcmVuOm51bGw6YSxkLGgpfSkoXyxmW18udmFsdWUub3V0bGV0XSxhLGQuY29uY2F0KFtfLnZhbHVlXSksaCksZGVsZXRlIGZbXy52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW18sVF0pPT5aXyhULGEuZ2V0Q29udGV4dChfKSxoKSksaH1mdW5j'@;
put 'dGlvbiBaXyhjLGwsYSl7Y29uc3QgZD1xNihjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57Wl8oXyxoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3go'@;
put 'aC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gWV8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24geSQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBneHx8IkVtcHR5RXJy'@;
put 'b3IiPT09Yz8ubmFtZX1jb25zdCBBeD1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBYNigpe3JldHVybiBTYShjPT5ZNihjLm1hcChsPT5sLnBpcGUoaWQoMSksY3AoQXgpKSkpLnBpcGUoTWUobD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09QXgpcmV0dXJu'@;
put 'IEF4O2lmKCExPT09YXx8YSBpbnN0YW5jZW9mICQ2KXJldHVybiBhfXJldHVybiEwfSksTGEobD0+bCE9PUF4KSxpZCgxKSkpfWZ1bmN0aW9uIHckKGMpe3JldHVybiBmdW5jdGlvbiBqZSguLi5jKXtyZXR1cm4gV2UoYyl9KFVjKGw9PntpZihENShsKSl0aHJvdyBwJCgwLGwpfSksTWUobD0+'@;
put 'ITA9PT1sKSl9Y2xhc3MgVHh7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgQyR7Y29uc3RydWN0b3IobCl7dGhpcy51cmxUcmVlPWx9fWZ1bmN0aW9uIEo2KGMpe3JldHVybiBEXyhuZXcgVHgoYykpfWZ1bmN0aW9uIFMkKGMpe3JldHVybiBEXyhuZXcg'@;
put 'QyQoYykpfWNsYXNzIEMyZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IEFyKDQwMDIsITEpfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1k'@;
put 'LmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBXaShkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bbHNdKXJldHVybiBEXyhuZXcgQXIoNGUzLCExKSk7aD1oLmNoaWxkcmVuW2xzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGws'@;
put 'YSxkKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpfWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1'@;
put 'cm4gbmV3ICQ2KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9Pntp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBUPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtUXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTts'@;
put 'ZXQgXz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW1QsV10pPT57X1tUXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLFcsZCxoKX0pLG5ldyB5YShmLF8pfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRz'@;
put 'V2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgQXIoNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7'@;
put 'bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBlUD17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25h'@;
put 'bFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIFMyZShjLGwsYSxkLGgpe2NvbnN0IGY9dFAoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gV2RlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1BUihjLnByb3ZpZGVycyxsLGBS'@;
put 'b3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIGIyZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9XaShoLm1hcChfPT57Y29uc3QgVD1LNihfLGMpO3JldHVybiBkcChmdW5jdGlvbiBsMmUoYyl7cmV0dXJu'@;
put 'IGMmJllfKGMuY2FuTWF0Y2gpfShUKT9ULmNhbk1hdGNoKGwsYSk6Yy5ydW5JbkNvbnRleHQoKCk9PlQobCxhKSkpfSkpLnBpcGUoWDYoKSx3JCgpKTpXaSghMCl9KGQsbCxhKS5waXBlKE1lKF89PiEwPT09Xz9mOnsuLi5lUH0pKSk6V2koZil9ZnVuY3Rpb24gdFAoYyxsLGEpe2lmKCIiPT09'@;
put 'bC5wYXRoKXJldHVybiJmdWxsIj09PWwucGF0aE1hdGNoJiYoYy5oYXNDaGlsZHJlbigpfHxhLmxlbmd0aD4wKT97Li4uZVB9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9'@;
put 'fTtjb25zdCBoPShsLm1hdGNoZXJ8fHRkZSkoYSxjLGwpO2lmKCFoKXJldHVybnsuLi5lUH07Y29uc3QgZj17fTtPYmplY3QuZW50cmllcyhoLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtULFddKT0+e2ZbVF09Vy5wYXRofSk7Y29uc3QgXz1oLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5mLC4u'@;
put 'LmguY29uc3VtZWRbaC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306ZjtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmguY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShoLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczpfLHBvc2l0aW9uYWxQYXJh'@;
put 'bVNlZ21lbnRzOmgucG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gTSQoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIEUyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkmJnQyKGQpIT09bHMpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEobCx4MmUoZCxu'@;
put 'ZXcgeWEoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIGsyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxNMmUoYywwLGEsZCxjLmNoaWxkcmVu'@;
put 'KSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBNMmUoYyxsLGEsZCxoKXtjb25zdCBmPXt9O2Zvcihjb25zdCBfIG9mIGQpaWYoRHgoYyxhLF8pJiYhaFt0MihfKV0pe2NvbnN0'@;
put 'IFQ9bmV3IHlhKFtdLHt9KTtmW3QyKF8pXT1UfXJldHVybnsuLi5oLC4uLmZ9fWZ1bmN0aW9uIHgyZShjLGwpe2NvbnN0IGE9e307YVtsc109bDtmb3IoY29uc3QgZCBvZiBjKWlmKCIiPT09ZC5wYXRoJiZ0MihkKSE9PWxzKXtjb25zdCBoPW5ldyB5YShbXSx7fSk7YVt0MihkKV09aH1yZXR1'@;
put 'cm4gYX1mdW5jdGlvbiBEeChjLGwsYSl7cmV0dXJuKCEoYy5oYXNDaGlsZHJlbigpfHxsLmxlbmd0aD4wKXx8ImZ1bGwiIT09YS5wYXRoTWF0Y2gpJiYiIj09PWEucGF0aH1jbGFzcyBMMmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9h'@;
put 'ZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PV8sdGhpcy51cmxTZXJpYWxpemVyPVQsdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyBDMmUo'@;
put 'dGhpcy51cmxTZXJpYWxpemVyLHRoaXMudXJsVHJlZSl9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgQXIoNDAwMiwhMSl9cmVjb2duaXplKCl7Y29uc3QgbD1NJCh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLnByb2Nlc3NT'@;
put 'ZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyxsLGxzKS5waXBlKEE1KGE9PntpZihhIGluc3RhbmNlb2YgQyQpcmV0dXJuIHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEsdGhpcy51cmxUcmVlPWEudXJsVHJlZSx0aGlzLm1hdGNoKGEudXJsVHJlZSk7dGhyb3cgYSBpbnN0YW5j'@;
put 'ZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGEpOmF9KSxNZShhPT57Y29uc3QgZD1uZXcgeHgoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGxzLHRoaXMucm9vdENvbXBvbmVu'@;
put 'dFR5cGUsbnVsbCx7fSksaD1uZXcgeGYoZCxhKSxmPW5ldyBkJCgiIixoKSxfPWZ1bmN0aW9uIHdkZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIGUkKFFHKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gXy5x'@;
put 'dWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfKSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QpLHtzdGF0ZTpmLHRyZWU6X319KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRH'@;
put 'cm91cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGwucm9vdCxscykucGlwZShBNShkPT57dGhyb3cgZCBpbnN0YW5jZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGQpOmR9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEobCl7Y29uc3QgYT1sLnZhbHVlLGQ9dSQoYSx0aGlzLnBhcmFtc0luaGVy'@;
put 'aXRhbmNlU3RyYXRlZ3kpO2EucGFyYW1zPU9iamVjdC5mcmVlemUoZC5wYXJhbXMpLGEuZGF0YT1PYmplY3QuZnJlZXplKGQuZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGg9PnRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoaCkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCl7cmV0dXJu'@;
put 'IDA9PT1kLnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkKTp0aGlzLnByb2Nlc3NTZWdtZW50KGwsYSxkLGQuc2VnbWVudHMsaCwhMCl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIE9iamVj'@;
put 'dC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PWY/aC51bnNoaWZ0KGYpOmgucHVzaChmKTtyZXR1cm4gZWEoaCkucGlwZShXNihmPT57Y29uc3QgXz1kLmNoaWxkcmVuW2ZdLFQ9ZnVuY3Rpb24gS2RlKGMsbCl7Y29uc3QgYT1jLmZpbHRlcihkPT50MihkKT09PWwpO3JldHVybiBhLnB1'@;
put 'c2goLi4uYy5maWx0ZXIoZD0+dDIoZCkhPT1sKSksYX0oYSxmKTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsVCxfLGYpfSksZnVuY3Rpb24gSjFlKGMsbCl7cmV0dXJuIFhlKGZ1bmN0aW9uIFgxZShjLGwsYSxkLGgpe3JldHVybihmLF8pPT57bGV0IFQ9YSxXPWwsaWU9MDtm'@;
put 'LnN1YnNjcmliZShVZShfLHBlPT57Y29uc3Qgd2U9aWUrKztXPVQ/YyhXLHBlLHdlKTooVD0hMCxwZSksZCYmXy5uZXh0KFcpfSxoJiYoKCk9PntUJiZfLm5leHQoVyksXy5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChmLF8pPT4oZi5wdXNoKC4uLl8p'@;
put 'LGYpKSx2eChudWxsKSxmdW5jdGlvbiBRMWUoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP0xhKChoLGYpPT5jKGgsZixkKSk6T2UsVk8oMSksYT92eChsKTpWRygoKT0+bmV3IGd4KSl9KCkseXIoZj0+e2lmKG51bGw9PT1mKXJldHVybiBKNihk'@;
put 'KTtjb25zdCBfPXgkKGYpO3JldHVybiBmdW5jdGlvbiBJMmUoYyl7Yy5zb3J0KChsLGEpPT5sLnZhbHVlLm91dGxldD09PWxzPy0xOmEudmFsdWUub3V0bGV0PT09bHM/MTpsLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGEudmFsdWUub3V0bGV0KSl9KF8pLFdpKF8pfSkpfXByb2Nlc3NT'@;
put 'ZWdtZW50KGwsYSxkLGgsZixfKXtyZXR1cm4gZWEoYSkucGlwZShXNihUPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKFQuX2luamVjdG9yPz9sLGEsVCxkLGgsZixfKS5waXBlKEE1KFc9PntpZihXIGluc3RhbmNlb2YgVHgpcmV0dXJuIFdpKG51bGwpO3Rocm93IFd9KSkpLHVw'@;
put 'KFQ9PiEhVCksQTUoVD0+e2lmKHkkKFQpKXJldHVybiBmdW5jdGlvbiBUMmUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgmJiFjLmNoaWxkcmVuW2FdfShkLGgsZik/V2koW10pOko2KGQpO3Rocm93IFR9KSl9cHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLF8sVCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIEEyZShjLGwsYSxkKXtyZXR1cm4hISh0MihjKT09PWR8fGQhPT1scyYmRHgobCxhLGMpKSYmKCIqKiI9PT1jLnBhdGh8fHRQKGwsYyxhKS5tYXRjaGVkKX0oZCxoLGYsXyk/dm9pZCAwPT09ZC5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGws'@;
put 'aCxkLGYsXyxUKTpUJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxmLF8pOko2KGgpOko2KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZixfKXtyZXR1cm4iKioi'@;
put 'PT09aC5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGQsaCxfKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl9ZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdh'@;
put 'aW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoKXtjb25zdCBmPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLGQucmVkaXJlY3RUbyx7fSk7cmV0dXJuIGQucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/UyQoZik6dGhpcy5hcHBseVJlZGlyZWN0cy5s'@;
put 'aW5lcmFsaXplU2VnbWVudHMoZCxmKS5waXBlKHlyKF89Pntjb25zdCBUPW5ldyB5YShfLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudChsLGEsVCxfLGgsITEpfSkpfWV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl7Y29uc3R7'@;
put 'bWF0Y2hlZDpULGNvbnN1bWVkU2VnbWVudHM6VyxyZW1haW5pbmdTZWdtZW50czppZSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpwZX09dFAoYSxoLGYpO2lmKCFUKXJldHVybiBKNihhKTtjb25zdCB3ZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhXLGgucmVk'@;
put 'aXJlY3RUbyxwZSk7cmV0dXJuIGgucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/UyQod2UpOnRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsd2UpLnBpcGUoeXIoRWU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsRWUuY29uY2F0KGllKSxfLCExKSkpfW1hdGNo'@;
put 'U2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsXyl7bGV0IFQ7aWYoIioqIj09PWQucGF0aCl7Y29uc3QgVz1oLmxlbmd0aD4wP3pHKGgpLnBhcmFtZXRlcnM6e307VD1XaSh7c25hcHNob3Q6bmV3IHh4KGgsVyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9'@;
put 'KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsRSQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLGskKGQpKSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdfSksYS5jaGlsZHJlbj17fX1lbHNlIFQ9UzJlKGEsZCxoLGwpLnBpcGUo'@;
put 'TWUoKHttYXRjaGVkOlcsY29uc3VtZWRTZWdtZW50czppZSxyZW1haW5pbmdTZWdtZW50czpwZSxwYXJhbWV0ZXJzOndlfSk9Plc/e3NuYXBzaG90Om5ldyB4eChpZSx3ZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQs'@;
put 'RSQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLGskKGQpKSxjb25zdW1lZFNlZ21lbnRzOmllLHJlbWFpbmluZ1NlZ21lbnRzOnBlfTpudWxsKSk7cmV0dXJuIFQucGlwZShTYShXPT5udWxsPT09Vz9KNihhKTp0aGlzLmdldENoaWxkQ29uZmlnKGw9'@;
put 'ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKFNhKCh7cm91dGVzOmllfSk9Pntjb25zdCBwZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7c25hcHNob3Q6d2UsY29uc3VtZWRTZWdtZW50czpFZSxyZW1haW5pbmdTZWdtZW50czpaZX09Vyx7c2VnbWVudEdyb3VwOml0LHNsaWNlZFNlZ21lbnRzOmV0'@;
put 'fT1NJChhLEVlLFplLGllKTtpZigwPT09ZXQubGVuZ3RoJiZpdC5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihwZSxpZSxpdCkucGlwZShNZShFdD0+bnVsbD09PUV0P251bGw6W25ldyB4Zih3ZSxFdCldKSk7aWYoMD09PWllLmxlbmd0aCYmMD09PWV0Lmxlbmd0'@;
put 'aClyZXR1cm4gV2koW25ldyB4Zih3ZSxbXSldKTtjb25zdCB5dD10MihkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQocGUsaWUsaXQsZXQseXQ/bHM6ZiwhMCkucGlwZShNZShFdD0+W25ldyB4Zih3ZSxFdCldKSl9KSkpKX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEu'@;
put 'Y2hpbGRyZW4/V2koe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/V2koe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiBfMmUoYyxsLGEsZCl7Y29u'@;
put 'c3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9XaSghMCk6V2koaC5tYXAoXz0+e2NvbnN0IFQ9SzYoXyxjKTtyZXR1cm4gZHAoZnVuY3Rpb24gaTJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkxvYWQpfShUKT9ULmNhbkxvYWQobCxhKTpjLnJ1bkluQ29udGV4'@;
put 'dCgoKT0+VChsLGEpKSl9KSkucGlwZShYNigpLHckKCkpfShsLGEsZCkucGlwZSh5cihoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoVWMoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0'@;
put 'aW9uIHcyZShjKXtyZXR1cm4gRF8oZyQoITEsMykpfSgpKSk6V2koe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIFIyZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9uIHgkKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0'@;
put 'O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFSMmUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNoKC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTps'@;
put 'LnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD14JChkLmNoaWxkcmVuKTtsLnB1c2gobmV3IHhmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIEUkKGMpe3JldHVybiBjLmRhdGF8fHt9fWZ1bmN0aW9uIGskKGMpe3JldHVybiBjLnJl'@;
put 'c29sdmV8fHt9fWZ1bmN0aW9uIFAyZShjLGwpe3JldHVybiB5cihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gV2koYSk7bGV0IGY9MDtyZXR1cm4gZWEoaCkucGlwZShXNihfPT5mdW5jdGlvbiBG'@;
put 'MmUoYyxsLGEsZCl7Y29uc3QgaD1jLnJvdXRlQ29uZmlnLGY9Yy5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aD8udGl0bGUmJiFBJChoKSYmKGZbSV9dPWgudGl0bGUpLGZ1bmN0aW9uIEgyZShjLGwsYSxkKXtjb25zdCBoPWZ1bmN0aW9uIE4yZShjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMo'@;
put 'YyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19KGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gV2koe30pO2NvbnN0IGY9e307cmV0dXJuIGVhKGgpLnBpcGUoeXIoXz0+ZnVuY3Rpb24gVjJlKGMsbCxhLGQpe2NvbnN0IGg9el8obCk/P2QsZj1LNihjLGgpO3JldHVybiBk'@;
put 'cChmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6aC5ydW5JbkNvbnRleHQoKCk9PmYobCxhKSkpfShjW19dLGwsYSxkKS5waXBlKHVwKCksVWMoVD0+e2ZbX109VH0pKSksVk8oMSksZnVuY3Rpb24gQkcoYyl7cmV0dXJuIE1lKCgpPT5jKX0oZiksQTUoXz0+eSQoXyk/SW86RF8oXykpKX0oZixj'@;
put 'LGwsZCkucGlwZShNZShfPT4oYy5fcmVzb2x2ZWREYXRhPV8sYy5kYXRhPXUkKGMsYSkucmVzb2x2ZSxoJiZBJChoKSYmKGMuZGF0YVtJX109aC50aXRsZSksbnVsbCkpKX0oXy5yb3V0ZSxkLGMsbCkpLFVjKCgpPT5mKyspLFZPKDEpLHlyKF89PmY9PT1oLmxlbmd0aD9XaShhKTpJbykpfSl9'@;
put 'ZnVuY3Rpb24gQSQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1mdW5jdGlvbiBuUChjKXtyZXR1cm4gU2EobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9lYShhKS5waXBlKE1lKCgpPT5sKSk6V2kobCl9KX1jb25zdCBRNj1uZXcgU2koIlJPVVRF'@;
put 'UyIpO2xldCByUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9RmkoclcpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2Fk'@;
put 'ZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIFdpKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1kcChh'@;
put 'LmxvYWRDb21wb25lbnQoKSkucGlwZShNZShUJCksVWMoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxMXygoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgTkcoZCwo'@;
put 'KT0+bmV3IGJlKS5waXBlKE5PKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMp'@;
put 'cmV0dXJuIFdpKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMoZC5sb2FkQ2hp'@;
put 'bGRyZW4pLnBpcGUoTWUoVD0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZCk7bGV0IFcsaWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/aWU9VDooVz1ULmNyZWF0ZShhKS5pbmplY3RvcixpZT1XLmdldChRNixbXSxucy5TZWxmfG5zLk9wdGlvbmFs'@;
put 'KS5mbGF0KCkpLHtyb3V0ZXM6aWUubWFwKFFPKSxpbmplY3RvcjpXfX0pLExfKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLF89bmV3IE5HKGYsKCk9Pm5ldyBiZSkucGlwZShOTygpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsXyksX31sb2FkTW9k'@;
put 'dWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiBkcChhKCkpLnBpcGUoTWUoVCQpLHlyKGQ9PmQgaW5zdGFuY2VvZiBjY3x8QXJyYXkuaXNBcnJheShkKT9XaShkKTplYSh0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhkKSkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGZ1bmN0aW9uIEIyZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZGVm'@;
put 'YXVsdCJpbiBjfShjKT9jLmRlZmF1bHQ6Y31sZXQgTHg9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5sYXN0U3VjY2Vzc2Z1'@;
put 'bE5hdmlnYXRpb249bnVsbCx0aGlzLmV2ZW50cz1uZXcgYmUsdGhpcy5jb25maWdMb2FkZXI9RmkoclApLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1GaShxMCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLnJvb3RDb250ZXh0cz1GaShCXyksdGhpcy5pbnB1dEJpbmRpbmdFbmFi'@;
put 'bGVkPW51bGwhPT1GaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5XaSh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2'@;
put 'ZW50cy5uZXh0KG5ldyBPZGUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgUmRlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3Qg'@;
put 'ZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgVGUoe2lkOjAsY3VycmVudFVybFRyZWU6YS5jdXJyZW50'@;
put 'VXJsVHJlZSxjdXJyZW50UmF3VXJsOmEuY3VycmVudFVybFRyZWUsZXh0cmFjdGVkVXJsOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUpLHVybEFmdGVyUmVkaXJlY3RzOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUp'@;
put 'LHJhd1VybDphLmN1cnJlbnRVcmxUcmVlLGV4dHJhczp7fSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwscHJvbWlzZTpQcm9taXNlLnJlc29sdmUoITApLHNvdXJjZTpOXyxyZXN0b3JlZFN0YXRlOm51bGwsY3VycmVudFNuYXBzaG90OmEucm91dGVyU3RhdGUuc25hcHNob3QsdGFyZ2V0U25h'@;
put 'cHNob3Q6bnVsbCxjdXJyZW50Um91dGVyU3RhdGU6YS5yb3V0ZXJTdGF0ZSx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGx9KSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoTGEo'@;
put 'ZD0+MCE9PWQuaWQpLE1lKGQ9Pih7Li4uZCxleHRyYWN0ZWRVcmw6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZC5yYXdVcmwpfSkpLFNhKGQ9PntsZXQgaD0hMSxmPSExO3JldHVybiBXaShkKS5waXBlKFVjKF89Pnt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpfLmlkLGluaXRp'@;
put 'YWxVcmw6Xy5yYXdVcmwsZXh0cmFjdGVkVXJsOl8uZXh0cmFjdGVkVXJsLHRyaWdnZXI6Xy5zb3VyY2UsZXh0cmFzOl8uZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlv'@;
put 'dXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9fSksU2EoXz0+e2NvbnN0IFQ9YS5icm93c2VyVXJsVHJlZS50b1N0cmluZygpLFc9IWEubmF2aWdhdGVkfHxfLmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09VHx8VCE9PWEuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTtpZighVyYmInJlbG9hZCIh'@;
put 'PT0oXy5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgcGU9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFZfKF8uaWQsYS5zZXJpYWxpemVVcmwoZC5yYXdVcmwpLHBlLDApKSxhLnJhd1VybFRyZWU9Xy5yYXdVcmwsXy5yZXNv'@;
put 'bHZlKG51bGwpLElvfWlmKGEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKF8ucmF3VXJsKSlyZXR1cm4gRCQoXy5zb3VyY2UpJiYoYS5icm93c2VyVXJsVHJlZT1fLmV4dHJhY3RlZFVybCksV2koXykucGlwZShTYShwZT0+e2NvbnN0IHdlPXRoaXMudHJhbnNpdGlvbnM/'@;
put 'LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFlPKHBlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUocGUuZXh0cmFjdGVkVXJsKSxwZS5zb3VyY2UscGUucmVzdG9yZWRTdGF0ZSkpLHdlIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKT9JbzpQcm9t'@;
put 'aXNlLnJlc29sdmUocGUpfSksZnVuY3Rpb24gTzJlKGMsbCxhLGQsaCxmKXtyZXR1cm4geXIoXz0+ZnVuY3Rpb24gRDJlKGMsbCxhLGQsaCxmLF89ImVtcHR5T25seSIpe3JldHVybiBuZXcgTDJlKGMsbCxhLGQsaCxfLGYpLnJlY29nbml6ZSgpfShjLGwsYSxkLF8uZXh0cmFjdGVkVXJsLGgs'@;
put 'ZikucGlwZShNZSgoe3N0YXRlOlQsdHJlZTpXfSk9Pih7Li4uXyx0YXJnZXRTbmFwc2hvdDpULHVybEFmdGVyUmVkaXJlY3RzOld9KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcsdGhpcy51cmxT'@;
put 'ZXJpYWxpemVyLGEucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksVWMocGU9PntpZihkLnRhcmdldFNuYXBzaG90PXBlLnRhcmdldFNuYXBzaG90LGQudXJsQWZ0ZXJSZWRpcmVjdHM9cGUudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50'@;
put 'TmF2aWdhdGlvbixmaW5hbFVybDpwZS51cmxBZnRlclJlZGlyZWN0c30sImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3kpe2lmKCFwZS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBFZT1hLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UocGUudXJsQWZ0ZXJSZWRpcmVjdHMs'@;
put 'cGUucmF3VXJsKTthLnNldEJyb3dzZXJVcmwoRWUscGUpfWEuYnJvd3NlclVybFRyZWU9cGUudXJsQWZ0ZXJSZWRpcmVjdHN9Y29uc3Qgd2U9bmV3IEFkZShwZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHBlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlh'@;
put 'bGl6ZShwZS51cmxBZnRlclJlZGlyZWN0cykscGUudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQod2UpfSkpO2lmKFcmJmEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGEucmF3VXJsVHJlZSkpe2NvbnN0e2lkOnBlLGV4dHJhY3RlZFVybDp3ZSxzb3VyY2U6'@;
put 'RWUscmVzdG9yZWRTdGF0ZTpaZSxleHRyYXM6aXR9PV8sZXQ9bmV3IFlPKHBlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUod2UpLEVlLFplKTt0aGlzLmV2ZW50cy5uZXh0KGV0KTtjb25zdCB5dD1jJCgwLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiBXaShk'@;
put 'PXsuLi5fLHRhcmdldFNuYXBzaG90Onl0LHVybEFmdGVyUmVkaXJlY3RzOndlLGV4dHJhczp7Li4uaXQsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSl9e2NvbnN0IHBlPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBWXyhfLmlkLGEuc2VyaWFsaXplVXJsKGQu'@;
put 'ZXh0cmFjdGVkVXJsKSxwZSwxKSksYS5yYXdVcmxUcmVlPV8ucmF3VXJsLF8ucmVzb2x2ZShudWxsKSxJb319KSxVYyhfPT57Y29uc3QgVD1uZXcgVGRlKF8uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6'@;
put 'ZShfLnVybEFmdGVyUmVkaXJlY3RzKSxfLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KFQpfSksTWUoXz0+ZD17Li4uXyxndWFyZHM6UWRlKF8udGFyZ2V0U25hcHNob3QsXy5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMpfSksZnVuY3Rpb24gdTJlKGMsbCl7cmV0'@;
put 'dXJuIHlyKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOl99fT1hO3JldHVybiAwPT09Xy5sZW5ndGgmJjA9PT1mLmxlbmd0aD9XaSh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9'@;
put 'KTpmdW5jdGlvbiBkMmUoYyxsLGEsZCl7cmV0dXJuIGVhKGMpLnBpcGUoeXIoaD0+ZnVuY3Rpb24gdjJlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBmJiYwIT09Zi5sZW5ndGg/V2koZi5tYXAoVD0+'@;
put 'e2NvbnN0IFc9el8obCk/P2gsaWU9SzYoVCxXKTtyZXR1cm4gZHAoZnVuY3Rpb24gYTJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkRlYWN0aXZhdGUpfShpZSk/aWUuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpXLnJ1bkluQ29udGV4dCgoKT0+aWUoYyxsLGEsZCkpKS5waXBlKHVwKCkpfSkpLnBp'@;
put 'cGUoWDYoKSk6V2koITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksdXAoaD0+ITAhPT1oLCEwKSl9KF8sZCxoLGMpLnBpcGUoeXIoVD0+VCYmZnVuY3Rpb24gcjJlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KFQpP2Z1bmN0aW9uIGgyZShjLGwsYSxkKXtyZXR1cm4gZWEo'@;
put 'bCkucGlwZShXNihoPT5teChmdW5jdGlvbiBwMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IFBkZShjKSksV2koITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBmMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IEhkZShjKSksV2koITApfShoLnJvdXRlLGQp'@;
put 'LGZ1bmN0aW9uIG0yZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoXz0+ZnVuY3Rpb24gZTJlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4g'@;
put 'bCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KF8pKS5maWx0ZXIoXz0+bnVsbCE9PV8pLm1hcChfPT5IRygoKT0+V2koXy5ndWFyZHMubWFwKFc9Pntjb25zdCBpZT16XyhfLm5vZGUpPz9hLHBlPUs2KFcsaWUpO3JldHVybiBkcChmdW5jdGlvbiBzMmUoYyl7cmV0dXJu'@;
put 'IGMmJllfKGMuY2FuQWN0aXZhdGVDaGlsZCl9KHBlKT9wZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6aWUucnVuSW5Db250ZXh0KCgpPT5wZShkLGMpKSkucGlwZSh1cCgpKX0pKS5waXBlKFg2KCkpKSk7cmV0dXJuIFdpKGYpLnBpcGUoWDYoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9uIGcyZShj'@;
put 'LGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBXaSghMCk7Y29uc3QgaD1kLm1hcChmPT5IRygoKT0+e2NvbnN0IF89el8obCk/P2EsVD1LNihmLF8pO3JldHVybiBkcChmdW5jdGlvbiBv'@;
put 'MmUoYyl7cmV0dXJuIGMmJllfKGMuY2FuQWN0aXZhdGUpfShUKT9ULmNhbkFjdGl2YXRlKGwsYyk6Xy5ydW5JbkNvbnRleHQoKCk9PlQobCxjKSkpLnBpcGUodXAoKSl9KSk7cmV0dXJuIFdpKGgpLnBpcGUoWDYoKSl9KGMsaC5yb3V0ZSxhKSkpLHVwKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs'@;
put 'KTpXaShUKSksTWUoVD0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpUfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXz0+dGhpcy5ldmVudHMubmV4dChfKSksVWMoXz0+e2lmKGQuZ3VhcmRzUmVzdWx0PV8uZ3VhcmRzUmVzdWx0LEQ1KF8uZ3VhcmRzUmVzdWx0KSl0aHJvdyBwJCgwLF8u'@;
put 'Z3VhcmRzUmVzdWx0KTtjb25zdCBUPW5ldyBEZGUoXy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8udXJsQWZ0ZXJSZWRpcmVjdHMpLF8udGFyZ2V0U25hcHNob3QsISFfLmd1YXJkc1Jlc3VsdCk7'@;
put 'dGhpcy5ldmVudHMubmV4dChUKX0pLExhKF89PiEhXy5ndWFyZHNSZXN1bHR8fChhLnJlc3RvcmVIaXN0b3J5KF8pLHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oXywiIiwzKSwhMSkpLG5QKF89PntpZihfLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIFdp'@;
put 'KF8pLnBpcGUoVWMoVD0+e2NvbnN0IFc9bmV3IExkZShULmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC51cmxBZnRlclJlZGlyZWN0cyksVC50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4'@;
put 'dChXKX0pLFNhKFQ9PntsZXQgVz0hMTtyZXR1cm4gV2koVCkucGlwZShQMmUoYS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciksVWMoe25leHQ6KCk9Plc9ITAsY29tcGxldGU6KCk9PntXfHwoYS5yZXN0b3JlSGlzdG9yeShUKSx0aGlzLmNhbmNl'@;
put 'bE5hdmlnYXRpb25UcmFuc2l0aW9uKFQsIiIsMikpfX0pKX0pLFVjKFQ9Pntjb25zdCBXPW5ldyBJZGUoVC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQudXJsQWZ0ZXJSZWRpcmVjdHMpLFQudGFy'@;
put 'Z2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoVyl9KSl9KSxuUChfPT57Y29uc3QgVD1XPT57Y29uc3QgaWU9W107Vy5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCYmIVcucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmaWUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29t'@;
put 'cG9uZW50KFcucm91dGVDb25maWcpLnBpcGUoVWMocGU9PntXLmNvbXBvbmVudD1wZX0pLE1lKCgpPT57fSkpKTtmb3IoY29uc3QgcGUgb2YgVy5jaGlsZHJlbilpZS5wdXNoKC4uLlQocGUpKTtyZXR1cm4gaWV9O3JldHVybiBZNihUKF8udGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUodngo'@;
put 'KSxpZCgxKSl9KSxuUCgoKT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksTWUoXz0+e2NvbnN0IFQ9ZnVuY3Rpb24gVWRlKGMsbCxhKXtjb25zdCBkPWpfKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IGwkKGQsbCl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LF8udGFy'@;
put 'Z2V0U25hcHNob3QsXy5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiBkPXsuLi5fLHRhcmdldFJvdXRlclN0YXRlOlR9fSksVWMoXz0+e2EuY3VycmVudFVybFRyZWU9Xy51cmxBZnRlclJlZGlyZWN0cyxhLnJhd1VybFRyZWU9YS51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKF8udXJsQWZ0'@;
put 'ZXJSZWRpcmVjdHMsXy5yYXdVcmwpLGEucm91dGVyU3RhdGU9Xy50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09YS51cmxVcGRhdGVTdHJhdGVneSYmKF8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8YS5zZXRCcm93c2VyVXJsKGEucmF3VXJsVHJlZSxfKSxhLmJyb3dzZXJVcmxU'@;
put 'cmVlPV8udXJsQWZ0ZXJSZWRpcmVjdHMpfSksKChjLGwsYSxkKT0+TWUoaD0+KG5ldyBKZGUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkpKSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxfPT50aGlz'@;
put 'LmV2ZW50cy5uZXh0KF8pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksaWQoMSksVWMoe25leHQ6Xz0+e2g9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbixhLm5hdmlnYXRlZD0hMCx0aGlzLmV2ZW50cy5uZXh0KG5ldyBocChfLmlkLHRo'@;
put 'aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5jdXJyZW50VXJsVHJlZSkpKSxhLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKF8udGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLF8ucmVzb2x2ZSghMCl9'@;
put 'LGNvbXBsZXRlOigpPT57aD0hMH19KSxMXygoKT0+e2h8fGZ8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZCwiIiwxKSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5pZD09PWQuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwpfSksQTUoXz0+e2lmKGY9ITAsdiQoXykp'@;
put 'e20kKF8pfHwoYS5uYXZpZ2F0ZWQ9ITAsYS5yZXN0b3JlSGlzdG9yeShkLCEwKSk7Y29uc3QgVD1uZXcgTXgoZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSxfLm1lc3NhZ2UsXy5jYW5jZWxsYXRpb25Db2RlKTtpZih0aGlzLmV2ZW50cy5uZXh0KFQp'@;
put 'LG0kKF8pKXtjb25zdCBXPWEudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShfLnVybCxhLnJhd1VybFRyZWUpLGllPXtza2lwTG9jYXRpb25DaGFuZ2U6ZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6ImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3l8fEQkKGQuc291'@;
put 'cmNlKX07YS5zY2hlZHVsZU5hdmlnYXRpb24oVyxOXyxudWxsLGllLHtyZXNvbHZlOmQucmVzb2x2ZSxyZWplY3Q6ZC5yZWplY3QscHJvbWlzZTpkLnByb21pc2V9KX1lbHNlIGQucmVzb2x2ZSghMSl9ZWxzZXthLnJlc3RvcmVIaXN0b3J5KGQsITApO2NvbnN0IFQ9bmV3IFdPKGQuaWQsdGhp'@;
put 'cy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShkLmV4dHJhY3RlZFVybCksXyxkLnRhcmdldFNuYXBzaG90Pz92b2lkIDApO3RoaXMuZXZlbnRzLm5leHQoVCk7dHJ5e2QucmVzb2x2ZShhLmVycm9ySGFuZGxlcihfKSl9Y2F0Y2goVyl7ZC5yZWplY3QoVyl9fXJldHVybiBJb30pKX0pKX1jYW5j'@;
put 'ZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgTXgoYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gRCQoYyl7cmV0dXJuIGMhPT1OX31sZXQgTCQ9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5y'@;
put 'b290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PWxzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtJX119fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShqMmUpfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLGoyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTCR7Y29uc3RydWN0b3IoYSl7'@;
put 'c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoQUcpKX0sYy5cdTAyNzVw'@;
put 'cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx6MmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEZpKFoyZSl9LHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y2xhc3MgVTJle3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShs'@;
put 'LGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IFoyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVTJle31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgSXg9bmV3IFNpKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IFkyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gRmkoVzJlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxXMmU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEw'@;
put 'fWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFy'@;
put 'IFdfPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2MuRkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KFdffHx7fSk7ZnVuY3Rpb24gSSQoYyxsKXtjLmV2ZW50cy5waXBlKExhKGE9PmEgaW5zdGFuY2Vv'@;
put 'ZiBocHx8YSBpbnN0YW5jZW9mIE14fHxhIGluc3RhbmNlb2YgV098fGEgaW5zdGFuY2VvZiBWXyksTWUoYT0+YSBpbnN0YW5jZW9mIGhwfHxhIGluc3RhbmNlb2YgVl8/V18uQ09NUExFVEU6YSBpbnN0YW5jZW9mIE14JiYoMD09PWEuY29kZXx8MT09PWEuY29kZSk/V18uUkVESVJFQ1RJTkc6'@;
put 'V18uRkFJTEVEKSxMYShhPT5hIT09V18uUkVESVJFQ1RJTkcpLGlkKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1mdW5jdGlvbiBHMmUoYyl7dGhyb3cgY31mdW5jdGlvbiAkMmUoYyxsLGEpe3JldHVybiBsLnBhcnNlKCIvIil9Y29uc3QgcTJlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJp'@;
put 'Z25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LEsyZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBEcz0oKCk9PntjbGFzcyBje2dldCBuYXZp'@;
put 'Z2F0aW9uSWQoKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubmF2aWdhdGlvbklkfWdldCBicm93c2VyUGFnZUlkKCl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbilyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpPy5cdTAy'@;
put 'NzVyb3V0ZXJQYWdlSWR9Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHN9Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2VkPSExLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMuY29uc29sZT1GaShuVyksdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEs'@;
put 'dGhpcy5vcHRpb25zPUZpKEl4LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRpbmdUYXNrcz1GaShxTSksdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8RzJlLHRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5tYWxmb3JtZWRV'@;
put 'cmlFcnJvckhhbmRsZXJ8fCQyZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PUZpKFkyZSksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9RmkoejJlKSx0aGlzLnRpdGxlU3RyYXRlZ3k9RmkoTCQpLHRoaXMub25TYW1l'@;
put 'VXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRo'@;
put 'aXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLmNvbmZpZz1GaShRNix7b3B0aW9uYWw6ITB9KT8uZmxh'@;
put 'dCgpPz9bXSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1GaShMeCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLmxvY2F0aW9uPUZpKEpkKSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFGaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLmlzTmdab25lRW5hYmxl'@;
put 'ZD1GaShObylpbnN0YW5jZW9mIE5vJiZOby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyAkNix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmJyb3dzZXJVcmxUcmVlPXRoaXMuY3Vy'@;
put 'cmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZT1jJCgwLG51bGwpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFn'@;
put 'ZUlkPz8wfSxhPT57dGhpcy5jb25zb2xlLndhcm4oYFVuaGFuZGxlZCBOYXZpZ2F0aW9uIEVycm9yOiAke2F9YCl9KX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9u'@;
put 'ZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7aWYodGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwhdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbil7Y29uc3QgYT10aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7dGhpcy5uYXZpZ2F0'@;
put 'ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksTl8sYSl9fXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGE9Pntjb25z'@;
put 'dCBkPSJwb3BzdGF0ZSI9PT1hLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSI7InBvcHN0YXRlIj09PWQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYS51cmwsZCxhLnN0YXRlKX0sMCl9KSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQs'@;
put 'aCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sXz1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IFc9ey4uLmh9O2RlbGV0ZSBXLm5hdmlnYXRpb25JZCxkZWxldGUgVy5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKFcpLmxlbmd0aCYmKGYuc3RhdGU9Vyl9Y29u'@;
put 'c3QgVD10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKFQsZCxfLGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv'@;
put 'bnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoUU8pLHRoaXMubmF2aWdhdGVkPSEx'@;
put 'LHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2Ny'@;
put 'aWJlKCksdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITB9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdtZW50Ol8scXVlcnlQYXJhbXNIYW5kbGluZzpULHByZXNlcnZlRnJhZ21lbnQ6V309'@;
put 'ZCxpZT1XP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6XztsZXQgd2UscGU9bnVsbDtzd2l0Y2goVCl7Y2FzZSJtZXJnZSI6cGU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6cGU9dGhpcy5jdXJyZW50VXJsVHJlZS5x'@;
put 'dWVyeVBhcmFtczticmVhaztkZWZhdWx0OnBlPWZ8fG51bGx9bnVsbCE9PXBlJiYocGU9dGhpcy5yZW1vdmVFbXB0eVByb3BzKHBlKSk7dHJ5e3dlPVFHKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCFh'@;
put 'WzBdLnN0YXJ0c1dpdGgoIi8iKSkmJihhPVtdKSx3ZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIGUkKHdlLGEscGUsaWU/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25zdCBoPUQ1KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRo'@;
put 'aXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsTl8sbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBYMmUoYyl7Zm9yKGxldCBsPTA7'@;
put 'bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgQXIoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwo'@;
put 'YSl7bGV0IGQ7dHJ5e2Q9dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoKGgpe2Q9dGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIoaCx0aGlzLnVybFNlcmlhbGl6ZXIsYSl9cmV0dXJuIGR9aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4ucTJlfTohMT09PWQ/'@;
put 'ey4uLksyZX06ZCxENShhKSlyZXR1cm4gWkcodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gWkcodGhpcy5jdXJyZW50VXJsVHJlZSxmLGgpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpLnJlZHVjZSgoZCxo'@;
put 'KT0+e2NvbnN0IGY9YVtoXTtyZXR1cm4gbnVsbCE9ZiYmKGRbaF09ZiksZH0se30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLF8pe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IFQsVyxpZTtfPyhUPV8ucmVzb2x2ZSxXPV8ucmVqZWN0LGllPV8u'@;
put 'cHJvbWlzZSk6aWU9bmV3IFByb21pc2UoKHdlLEVlKT0+e1Q9d2UsVz1FZX0pO2NvbnN0IHBlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBJJCh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShwZSkpfSksdGhpcy5uYXZpZ2F0aW9u'@;
put 'VHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOlQscmVqZWN0'@;
put 'OlcscHJvbWlzZTppZSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLGllLmNhdGNoKHdlPT5Qcm9taXNlLnJlamVjdCh3ZSkpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2Vy'@;
put 'aWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3QgXz17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQp'@;
put 'fTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLF8pfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCwodGhpcy5icm93c2VyUGFnZUlkPz8wKSsxKX07dGhpcy5sb2NhdGlvbi5nbyhoLCIiLGYpfX1yZXN0b3Jl'@;
put 'SGlzdG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLSh0aGlzLmJyb3dzZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZCk7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28o'@;
put 'Zik6dGhpcy5jdXJyZW50VXJsVHJlZT09PXRoaXMuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMuYnJvd3NlclVybFRyZWU9YS5jdXJyZW50VXJsVHJlZSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNl'@;
put 'InJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT1hLmN1cnJlbnRSb3V0ZXJTdGF0ZSx0aGlzLmN1cnJl'@;
put 'bnRVcmxUcmVlPWEuY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEucmF3VXJsKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVy'@;
put 'bFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIsdGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShhLGQpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNh'@;
put 'bmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/e25hdmlnYXRpb25JZDphLFx1MDI3NXJvdXRlclBhZ2VJZDpkfTp7bmF2aWdhdGlvbklkOmF9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxCdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9ZCx0aGlzLnRhYkluZGV4QXR0cmlidXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9Xyx0aGlzLmxv'@;
put 'Y2F0aW9uU3RyYXRlZ3k9VCx0aGlzLmhyZWY9bnVsbCx0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5vbkNoYW5nZXM9bmV3IGJlLHRoaXMucHJlc2VydmVGcmFnbWVudD0hMSx0aGlzLnNraXBMb2NhdGlvbkNoYW5nZT0hMSx0aGlzLnJlcGxhY2VVcmw9ITE7Y29uc3QgVz1fLm5hdGl2ZUVsZW1l'@;
put 'bnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5jaG9yRWxlbWVudD0iYSI9PT1XfHwiYXJlYSI9PT1XLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShpZT0+e2llIGluc3RhbmNlb2YgaHAmJnRoaXMudXBkYXRlSHJlZigp'@;
put 'fSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09u'@;
put 'Q2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25O'@;
put 'YXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZixfKXtyZXR1cm4hIShudWxsPT09dGhpcy51cmxUcmVlfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxmfHxffHwi'@;
put 'c3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUse3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxz'@;
put 'dGF0ZTp0aGlzLnN0YXRlfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXt0aGlzLmhyZWY9bnVsbCE9PXRoaXMudXJsVHJlZSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRp'@;
put 'b25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKTpudWxsO2NvbnN0IGE9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFlDKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gcEwoYyxsKXtyZXR1cm4ic3JjIj09PWwm'@;
put 'JigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFzZSI9PT1jfHwibGluayI9PT1jKT9aQzpydn0obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRv'@;
put 'TG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGEpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3Zl'@;
put 'QXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRl'@;
put 'LHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoR2wpLFA0KCJ0YWJpbmRleCIpLHR0KEZvKSx0dChOaSksdHQoazUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYuYnV0dG9uLGYuY3RybEtleSxmLnNoaWZ0S2V5LGYuYWx0S2V5LGYubWV0YUtleSl9KSwyJmEmJlRyKCJ0YXJnZXQiLGQudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6'@;
put 'InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbInByZXNlcnZlRnJhZ21lbnQiLCJwcmVzZXJ2ZUZyYWdt'@;
put 'ZW50IixVNl0sc2tpcExvY2F0aW9uQ2hhbmdlOlsic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixVNl0scmVwbGFjZVVybDpbInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixVNl0scm91dGVyTGluazoicm91dGVyTGluayJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6'@;
put 'W2VNLHZhXX0pLGN9KSgpLEdfPSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9Xyx0aGlz'@;
put 'LmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEVyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhw'@;
put 'JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7V2kodGhpcy5saW5rcy5jaGFuZ2VzLFdpKG51bGwpKS5waXBlKFBpKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExp'@;
put 'bmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1'@;
put 'YnNjcmlwdGlvbj1lYShhKS5waXBlKFBpKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNw'@;
put 'bGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1'@;
put 'YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNr'@;
put 'KCksdGhpcy5jbGFzc2VzLmZvckVhY2goZD0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3Vy'@;
put 'cmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50'@;
put 'Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBKMmUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtB'@;
put 'Y3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT4hIWgudXJsVHJlZSYmYS5pc0FjdGl2ZShoLnVybFRyZWUsZCl9aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhp'@;
put 'cy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KE5pKSx0dChGbyksdHQoVWEpLHR0KEJ1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Iiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLEJ1LDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQubGlua3M9Zil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0'@;
put 'aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxzdGFu'@;
put 'ZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBSJHt9bGV0IFEyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmluamVjdG9yPWgsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9Zix0aGlzLmxvYWRlcj1ffXNldFVwUHJl'@;
put 'bG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKExhKGE9PmEgaW5zdGFuY2VvZiBocCksVzYoKCk9PnRoaXMucHJlbG9hZCgpKSkuc3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rv'@;
put 'cix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRlcyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYu'@;
put 'X2luamVjdG9yPUFSKGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3QgXz1mLl9pbmplY3Rvcj8/YSxUPWYuX2xvYWRlZEluamVjdG9yPz9fOyhmLmxvYWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQm'@;
put 'JiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKF8sZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKFQsZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIGVhKGgpLnBpcGUoUGko'@;
put 'KSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6V2kobnVsbCk7Y29uc3QgZj1oLnBpcGUo'@;
put 'eXIoXz0+bnVsbD09PV8/V2kodm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPV8ucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPV8uaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVzKF8uaW5qZWN0b3I/P2EsXy5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21w'@;
put 'b25lbnQ/ZWEoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoUGkoKSk6Zn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihEcyksYXIoclcpLGFyKHEwKSxhcihSJCksYXIoclApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBpUD1uZXcgU2koIiIpO2xldCBPJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll'@;
put 'd3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz1fLHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LF8uc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj1fLnNjcm9sbFBvc2l0aW9uUmVz'@;
put 'dG9yYXRpb258fCJkaXNhYmxlZCIsXy5hbmNob3JTY3JvbGxpbmc9Xy5hbmNob3JTY3JvbGxpbmd8fCJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3Jv'@;
put 'bGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4g'@;
put 'dGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWU8/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVz'@;
put 'dG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgaHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZy'@;
put 'YWdtZW50KSk6YSBpbnN0YW5jZW9mIFZfJiYwPT09YS5jb2RlJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xs'@;
put 'RXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIHMkJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0'@;
put 'aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/'@;
put 'dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2'@;
put 'ZW50KGEsZCl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBzJChhLCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5zdG9yZVt0aGlzLnJlc3Rv'@;
put 'cmVkSWRdOm51bGwsZCkpfSl9LDApfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpeyFmdW5j'@;
put 'dGlvbiBNUygpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfSgpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIEVmKGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gRiQoKXtj'@;
put 'b25zdCBjPUZpKEVhKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQoeDUpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoRHMpLGg9Yy5nZXQoSCQpOzE9PT1jLmdldChvUCkmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChOJCxudWxsLG5zLk9wdGlvbmFs'@;
put 'KT8uc2V0VXBQcmVsb2FkaW5nKCksYy5nZXQoaVAsbnVsbCxucy5PcHRpb25hbCk/LmluaXQoKSxkLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksaC5jbG9zZWR8fChoLm5leHQoKSxoLmNvbXBsZXRlKCksaC51bnN1YnNjcmliZSgpKX19Y29uc3QgSCQ9bmV3'@;
put 'IFNpKCIiLHtmYWN0b3J5OigpPT5uZXcgYmV9KSxvUD1uZXcgU2koIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxOJD1uZXcgU2koIiIpO2Z1bmN0aW9uIHJoZShjKXtyZXR1cm4gRWYoMCxbe3Byb3ZpZGU6TiQsdXNlRXhpc3Rpbmc6UTJlfSx7cHJvdmlkZTpSJCx1c2VF'@;
put 'eGlzdGluZzpjfV0pfWNvbnN0IFYkPW5ldyBTaSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxvaGU9W0pkLHtwcm92aWRlOk9fLHVzZUNsYXNzOkJPfSxEcyxCXyx7cHJvdmlkZTpHbCx1c2VGYWN0b3J5OmZ1bmN0aW9uIFAkKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0Rz'@;
put 'XX0sclAsW11dO2Z1bmN0aW9uIHNoZSgpe3JldHVybiBuZXcgcFcoIlJvdXRlciIsRHMpfWxldCBoYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbb2hlLFtdLHtwcm92aWRlOlE2LG11bHRpOiEw'@;
put 'LHVzZVZhbHVlOmF9LHtwcm92aWRlOlYkLHVzZUZhY3Rvcnk6dWhlLGRlcHM6W1tEcyxuZXcgejIsbmV3IGcwXV19LHtwcm92aWRlOkl4LHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOms1LHVzZUNsYXNzOkF1ZX06e3Byb3ZpZGU6azUsdXNlQ2xhc3M6eld9LHtwcm92aWRl'@;
put 'OmlQLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUZpKHowZSksbD1GaShObyksYT1GaShJeCksZD1GaShMeCksaD1GaShPXyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IE8kKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/'@;
put 'cmhlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10se3Byb3ZpZGU6cFcsbXVsdGk6ITAsdXNlRmFjdG9yeTpzaGV9LGQ/LmluaXRpYWxOYXZpZ2F0aW9uP2RoZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/RWYoOCxbZiQse3Byb3ZpZGU6RXgsdXNlRXhp'@;
put 'c3Rpbmc6ZiR9XSkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpCJCx1c2VGYWN0b3J5OkYkfSx7cHJvdmlkZTpKUixtdWx0aTohMCx1c2VFeGlzdGluZzpCJH1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6UTYsbXVsdGk6'@;
put 'ITAsdXNlVmFsdWU6YX1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoViQsOCkpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2Z1bmN0aW9uIHVoZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rp'@;
put 'b24gZGhlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigzLFt7cHJvdmlkZTpaUixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShEcyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOm9Q'@;
put 'LHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigyLFt7cHJvdmlkZTpvUCx1c2VWYWx1ZTowfSx7cHJvdmlkZTpaUixtdWx0aTohMCxkZXBzOltFYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldChF'@;
put 'dWUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KERzKSxmPWwuZ2V0KEgkKTtJJChoLCgpPT57ZCghMCl9KSxsLmdldChMeCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/V2kodm9pZCAw'@;
put 'KTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgQiQ9bmV3IFNpKCIiKTt2YXIgaiQ9RigzNjA3MiksZmhlPUYoNjYzMDQpO2NvbnN0IHNQPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19h'@;
put 'bGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDoh'@;
put 'MCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIG4xPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9y'@;
put 'b3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0'@;
put 'YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQi'@;
put 'LGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30objF8fHt9KSxyMT1GKDU2MzIxKSx6JD1GLm4ocjEpLFpjPUYoNzY3NzEpO2xldCBlOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdz'@;
put 'KGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxhUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hhbmdlPW5ldyBiZX1zZXQgdXNlcihhKXt0aGlzLl91c2VyPWEsdGhpcy51c2VyQ2hhbmdlLm5leHQoYSl9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5f'@;
put 'dXNlcn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbFA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBiZX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdmw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFsZXJ0c1NlcnZpY2U9YSx0aGlzLm9uU2lkZWJhclRv'@;
put 'Z2dsZT1uZXcgRXIsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBFcix0aGlzLm9uU2hvd0Fib3J0TW9kYWw9bmV3IEVyLHRoaXMub25SZXF1ZXN0c01vZGFsT3Blbj1uZXcgRXIsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgRXIsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMu'@;
put 'c2lkZWJhckNsb3NlTGltaXQ9MTI4MH1zaG93RGVtb0xpbWl0TW9kYWwoYSl7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KGEpfXNob3dJbmZvTW9kYWwoYT0iSW5mbyIsZCl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6YSxtZXNzYWdlOmQsc2FzU2Vydmlj'@;
put 'ZToiIixkZXRhaWxzOm51bGx9KX1zaG93QWJvcnRNb2RhbChhLGQsaCxmPXZvaWQgMCl7aHx8KGg9bnVsbCk7bGV0IF89e3Nhc1NlcnZpY2U6YSxtZXNzYWdlOmQsZGV0YWlsczpofTtmJiYoXy5tb2RhbFRpdGxlPWYpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KF8pfW9wZW5SZXF1ZXN0'@;
put 'c01vZGFsKCl7dGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihhLGQpe2xldCBoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihkLmVycm9yKXtsZXQgZjtoPWQuZXJyb3IubWVzc2FnZSxkLmVycm9yLmRldGFpbHMmJmQuZXJyb3IuZGV0'@;
put 'YWlscy5sb2cmJihmPWQuZXJyb3IuZGV0YWlscy5sb2cpLCghaHx8aC50cmltKCkubGVuZ3RoPDEpJiYoaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwoYSxoLHtMT0c6Zn0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fib3J0TW9kYWwo'@;
put 'YSxoKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigpe3RoaXMub25T'@;
put 'aWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChhKXtsZXQgZDsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/ZD1uZXcgRXZlbnQoYSk6KGQ9ZG9jdW1lbnQuY3JlYXRlRXZl'@;
put 'bnQoIkV2ZW50IiksZC5pbml0RXZlbnQoYSwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihsUCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92'@;
put 'aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJ4e31jbGFzcyBPeHt9Y2xhc3Mgb2h7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFk'@;
put 'ZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNlKCksXz1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRo'@;
put 'aXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJzLmdldChmKS5wdXNoKF8pOnRoaXMuaGVhZGVycy5zZXQoZixbX10pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhl'@;
put 'YWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlz'@;
put 'LmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9Mb3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3JldHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5'@;
put 'LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQo'@;
put 'bCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMu'@;
put 'bm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIG9oP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxh'@;
put 'enlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRo'@;
put 'aXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9ybWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyBvaDtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2Ygb2g/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVw'@;
put 'ZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQu'@;
put 'bGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTtoLnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZh'@;
put 'bHVlO2lmKGYpe2xldCBfPXRoaXMuaGVhZGVycy5nZXQoYSk7aWYoIV8pcmV0dXJuO189Xy5maWx0ZXIoVD0+LTE9PT1mLmluZGV4T2YoVCkpLDA9PT1fLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5z'@;
put 'ZXQoYSxfKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhp'@;
put 'cy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFk'@;
put 'ZXJzLmdldChhKSkpfX1jbGFzcyBwaGV7ZW5jb2RlS2V5KGwpe3JldHVybiBVJChsKX1lbmNvZGVWYWx1ZShsKXtyZXR1cm4gVSQobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19'@;
put 'Y29uc3QgbWhlPS8lKFxkW2EtZjAtOV0pL2dpLHZoZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gVSQoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKG1oZSwobCxhKT0+'@;
put 'dmhlW2FdPz9sKX1mdW5jdGlvbiBQeChjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgcHB7Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgcGhlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2Jq'@;
put 'ZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIGdoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZv'@;
put 'ckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW18sVF09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2UoZisxKSldLFc9YS5nZXQoXyl8fFtdO1cucHVzaChUKSxhLnNldChfLFcpfSksYX0obC5m'@;
put 'cm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoUHgpOltQeChkKV07dGhpcy5t'@;
put 'YXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhp'@;
put 'cy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVj'@;
put 'dC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIu'@;
put 'ZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IHBwKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0p'@;
put 'O3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5p'@;
put 'bml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAu'@;
put 'Z2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChQeChsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8'@;
put 'W107Y29uc3QgaD1kLmluZGV4T2YoUHgobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyBfaGV7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVy'@;
put 'biB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gWiQoYyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlv'@;
put 'biBZJChjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBXJChjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNsYXNzICRfe2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEs'@;
put 'dGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIGJoZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpj'@;
put 'YXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlz'@;
put 'LndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFy'@;
put 'YW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG9oKSx0aGlzLmNvbnRleHR8fCh0aGlzLmNvbnRleHQ9bmV3IF9oZSksdGhpcy5wYXJhbXMpe2NvbnN0IF89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09Xy5sZW5ndGgpdGhp'@;
put 'cy51cmxXaXRoUGFyYW1zPWE7ZWxzZXtjb25zdCBUPWEuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1hKygtMT09PVQ/Ij8iOlQ8YS5sZW5ndGgtMT8iJiI6IiIpK199fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHBwLHRoaXMudXJsV2l0aFBhcmFtcz1hfXNlcmlhbGl6ZUJvZHkoKXty'@;
put 'ZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlokKHRoaXMuYm9keSl8fFkkKHRoaXMuYm9keSl8fFckKHRoaXMuYm9keSl8fGZ1bmN0aW9uIHloZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8'@;
put 'fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBwcD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/'@;
put 'SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxXJCh0aGlzLmJvZHkpP251bGw6WSQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpaJCh0aGlzLmJvZHkp'@;
put 'P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHBwPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2Yg'@;
put 'dGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUobD17fSl7Y29uc3QgYT1sLm1ldGhvZHx8dGhpcy5tZXRob2QsZD1sLnVybHx8dGhpcy51cmwsaD1sLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsZj12b2lk'@;
put 'IDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxfPXZvaWQgMCE9PWwud2l0aENyZWRlbnRpYWxzP2wud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLFQ9dm9pZCAwIT09bC5yZXBvcnRQcm9ncmVzcz9sLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0'@;
put 'IFc9bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsaWU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IHBlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihXPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh3ZSxFZSk9PndlLnNl'@;
put 'dChFZSxsLnNldEhlYWRlcnNbRWVdKSxXKSksbC5zZXRQYXJhbXMmJihpZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh3ZSxFZSk9PndlLnNldChFZSxsLnNldFBhcmFtc1tFZV0pLGllKSksbmV3ICRfKGEsZCxmLHtwYXJhbXM6aWUsaGVhZGVyczpXLGNvbnRleHQ6cGUscmVw'@;
put 'b3J0UHJvZ3Jlc3M6VCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6X30pfX12YXIgdDg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TZW50PTBdPSJTZW50IixjW2MuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNl'@;
put 'SGVhZGVyIixjW2MuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsY1tjLlVzZXI9NV09IlVzZXIiLGN9KHQ4fHx7fSk7Y2xhc3MgY1B7Y29uc3RydWN0b3IobCxhPTIwMCxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRl'@;
put 'cnN8fG5ldyBvaCx0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIHVQIGV4dGVuZHMg'@;
put 'Y1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcgdVAoe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0'@;
put 'YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIG44IGV4dGVuZHMgY1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/'@;
put 'bC5ib2R5Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBuOCh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0'@;
put 'Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBHJCBleHRlbmRzIGNQe2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEs'@;
put 'dGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wu'@;
put 'c3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19ZnVuY3Rpb24gZFAoYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVz'@;
put 'czpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHN9fWxldCBoUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5z'@;
put 'dGFuY2VvZiAkXylmPWE7ZWxzZXtsZXQgVyxpZTtXPWguaGVhZGVycyBpbnN0YW5jZW9mIG9oP2guaGVhZGVyczpuZXcgb2goaC5oZWFkZXJzKSxoLnBhcmFtcyYmKGllPWgucGFyYW1zIGluc3RhbmNlb2YgcHA/aC5wYXJhbXM6bmV3IHBwKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3'@;
put 'ICRfKGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6Vyxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6aWUscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRo'@;
put 'Q3JlZGVudGlhbHN9KX1jb25zdCBfPVdpKGYpLnBpcGUoVzYoVz0+dGhpcy5oYW5kbGVyLmhhbmRsZShXKSkpO2lmKGEgaW5zdGFuY2VvZiAkX3x8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIF87Y29uc3QgVD1fLnBpcGUoTGEoVz0+VyBpbnN0YW5jZW9mIG44KSk7c3dpdGNoKGgub2Jz'@;
put 'ZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIFQucGlwZShNZShXPT57aWYobnVsbCE9PVcuYm9keSYmIShXLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBp'@;
put 'cyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIFcuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBULnBpcGUoTWUoVz0+e2lmKG51bGwhPT1XLmJvZHkmJiEoVy5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVy'@;
put 'biBXLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gVC5waXBlKE1lKFc9PntpZihudWxsIT09Vy5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIFcuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gVy5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIFQu'@;
put 'cGlwZShNZShXPT5XLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUi'@;
put 'LGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHBwKS5hcHBlbmQoZCwiSlNP'@;
put 'TlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLGRQKGgsZCkpfXBvc3QoYSxk'@;
put 'LGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsZFAoaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsZFAoaCxkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJ4KSl9LGMuXHUwMjc1cHJv'@;
put 'dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gSyQoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBDaGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IE1oZT1uZXcgU2koIiIpLHFfPW5ldyBT'@;
put 'aSgiIiksWCQ9bmV3IFNpKCIiKTtmdW5jdGlvbiB4aGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShGaShNaGUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodChDaGUsSyQpKTtjb25zdCBkPUZpKHFNKSxoPWQuYWRkKCk7cmV0dXJuIGMobCxhKS5waXBl'@;
put 'KExfKCgpPT5kLnJlbW92ZShoKSkpfX1sZXQgSiQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPUZpKHFNKX1oYW5kbGUoYSl7aWYo'@;
put 'bnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChxXyksLi4udGhpcy5pbmplY3Rvci5nZXQoWCQsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgoZixfKT0+ZnVuY3Rpb24gU2hlKGMsbCxhKXtyZXR1cm4oZCxo'@;
put 'KT0+YS5ydW5JbkNvbnRleHQoKCk9PmwoZCxmPT5jKGYsaCkpKX0oZixfLHRoaXMuaW5qZWN0b3IpLEskKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShMXygoKT0+dGhpcy5wZW5kaW5n'@;
put 'VGFza3MucmVtb3ZlKGQpKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE94KSxhcihxMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFRoZT0vXlwpXF1cfScsP1xuLztsZXQg'@;
put 'ZXE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZhY3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBBcigtMjgwMCwhMSk7Y29uc3QgZD10aGlzLnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/ZWEoZC5cdTAyNzVs'@;
put 'b2FkSW1wbCgpKTpXaShudWxsKSkucGlwZShTYSgoKT0+bmV3IEtlKGY9Pntjb25zdCBfPWQuYnVpbGQoKTtpZihfLm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYmKF8ud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgoZXQseXQp'@;
put 'PT5fLnNldFJlcXVlc3RIZWFkZXIoZXQseXQuam9pbigiLCIpKSksYS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fF8uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25z'@;
put 'dCBldD1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWV0JiZfLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZXQpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBldD1hLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO18ucmVzcG9uc2VUeXBlPSJqc29uIiE9PWV0'@;
put 'P2V0OiJ0ZXh0In1jb25zdCBUPWEuc2VyaWFsaXplQm9keSgpO2xldCBXPW51bGw7Y29uc3QgaWU9KCk9PntpZihudWxsIT09VylyZXR1cm4gVztjb25zdCBldD1fLnN0YXR1c1RleHR8fCJPSyIseXQ9bmV3IG9oKF8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLEV0PWZ1bmN0aW9uIERoZShj'@;
put 'KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShfKXx8YS51cmw7cmV0dXJu'@;
put 'IFc9bmV3IHVQKHtoZWFkZXJzOnl0LHN0YXR1czpfLnN0YXR1cyxzdGF0dXNUZXh0OmV0LHVybDpFdH0pLFd9LHBlPSgpPT57bGV0e2hlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6RXQsdXJsOlN0fT1pZSgpLEp0PW51bGw7MjA0IT09eXQmJihKdD10eXBlb2YgXy5yZXNwb25zZT4i'@;
put 'dSI/Xy5yZXNwb25zZVRleHQ6Xy5yZXNwb25zZSksMD09PXl0JiYoeXQ9SnQ/MjAwOjApO2xldCBubj15dD49MjAwJiZ5dDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgSnQpe2NvbnN0IHZuPUp0O0p0PUp0LnJlcGxhY2UoVGhlLCIiKTt0cnl7SnQ9'@;
put 'IiIhPT1KdD9KU09OLnBhcnNlKEp0KTpudWxsfWNhdGNoKE5uKXtKdD12bixubiYmKG5uPSExLEp0PXtlcnJvcjpObix0ZXh0Okp0fSl9fW5uPyhmLm5leHQobmV3IG44KHtib2R5Okp0LGhlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6RXQsdXJsOlN0fHx2b2lkIDB9KSksZi5jb21w'@;
put 'bGV0ZSgpKTpmLmVycm9yKG5ldyBHJCh7ZXJyb3I6SnQsaGVhZGVyczpldCxzdGF0dXM6eXQsc3RhdHVzVGV4dDpFdCx1cmw6U3R8fHZvaWQgMH0pKX0sd2U9ZXQ9Pntjb25zdHt1cmw6eXR9PWllKCksRXQ9bmV3IEckKHtlcnJvcjpldCxzdGF0dXM6Xy5zdGF0dXN8fDAsc3RhdHVzVGV4dDpf'@;
put 'LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6eXR8fHZvaWQgMH0pO2YuZXJyb3IoRXQpfTtsZXQgRWU9ITE7Y29uc3QgWmU9ZXQ9PntFZXx8KGYubmV4dChpZSgpKSxFZT0hMCk7bGV0IHl0PXt0eXBlOnQ4LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmV0LmxvYWRlZH07ZXQubGVu'@;
put 'Z3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmXy5yZXNwb25zZVRleHQmJih5dC5wYXJ0aWFsVGV4dD1fLnJlc3BvbnNlVGV4dCksZi5uZXh0KHl0KX0saXQ9ZXQ9PntsZXQgeXQ9e3R5cGU6dDguVXBsb2FkUHJvZ3Jlc3MsbG9hZGVk'@;
put 'OmV0LmxvYWRlZH07ZXQubGVuZ3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSxmLm5leHQoeXQpfTtyZXR1cm4gXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwZSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsd2UpLF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2Up'@;
put 'LF8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHdlKSxhLnJlcG9ydFByb2dyZXNzJiYoXy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWmUpLG51bGwhPT1UJiZfLnVwbG9hZCYmXy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGl0KSksXy5zZW5kKFQpLGYubmV4dCh7'@;
put 'dHlwZTp0OC5TZW50fSksKCk9PntfLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix3ZSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsd2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIscGUpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2UpLGEucmVwb3J0'@;
put 'UHJvZ3Jlc3MmJihfLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZSksbnVsbCE9PVQmJl8udXBsb2FkJiZfLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsaXQpKSxfLnJlYWR5U3RhdGUhPT1fLkRPTkUmJl8uYWJvcnQoKX19KSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcih1RykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZQPW5ldyBTaSgiWFNSRl9FTkFCTEVEIiksdHE9bmV3IFNpKCJYU1JGX0NPT0tJRV9OQU1FIix7cHJvdmlk'@;
put 'ZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlhTUkYtVE9LRU4ifSksbnE9bmV3IFNpKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KTtjbGFzcyBycXt9bGV0IFJoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'KXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25z'@;
put 'dCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1KVyhhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihJcyksYXIoR3MpLGFyKHRxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gT2hlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFG'@;
put 'aShmUCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9RmkocnEpLmdldFRva2VuKCksaD1GaShucSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRl'@;
put 'cnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMi'@;
put 'LGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09'@;
put 'IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oZ3B8fHt9KTtmdW5jdGlvbiBMNShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIFBoZSguLi5jKXtjb25zdCBsPVtoUCxlcSxKJCx7cHJvdmlkZTpSeCx1c2VF'@;
put 'eGlzdGluZzpKJH0se3Byb3ZpZGU6T3gsdXNlRXhpc3Rpbmc6ZXF9LHtwcm92aWRlOnFfLHVzZVZhbHVlOk9oZSxtdWx0aTohMH0se3Byb3ZpZGU6ZlAsdXNlVmFsdWU6ITB9LHtwcm92aWRlOnJxLHVzZUNsYXNzOlJoZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJv'@;
put 'dmlkZXJzKTtyZXR1cm4gZnVuY3Rpb24gaXYoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX0obCl9Y29uc3QgaXE9bmV3IFNpKCJMRUdBQ1lfSU5URVJDRVBUT1JfRk4iKTtsZXQgSGhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbUGhlKEw1KGdwLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6aXEsdXNlRmFjdG9yeTp4aGV9LHtwcm92aWRlOnFfLHVzZUV4aXN0aW5nOmlxLG11bHRpOiEwfV0pKV19KSxjfSko'@;
put 'KSxvcT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3Rv'@;
put 'cmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1n'@;
put 'ZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJs'@;
put 'fS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4g'@;
put 'bmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBUPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChUKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2Yg'@;
put 'YS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'LHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb2E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMubG9nZ2VyU2Vy'@;
put 'dmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBFcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyh6JCgpKSx0aGlzLmFwcExv'@;
put 'Y0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBUZSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IFRlKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygp'@;
put 'LHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyh6JCgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgWmMuRC5TYXNWaXlhOnRo'@;
put 'aXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBaYy5ELlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIFpjLkQuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGly'@;
put 'ZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5z'@;
put 'aG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJv'@;
put 'bWlzZSgoXyxUKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihXPT57aWYoITE9PT1XLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxUKCExKSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmVy5N'@;
put 'Rl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpXLk1GX0dFVFVTRVJ9KSxXLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoVy5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNp'@;
put 'dGVJZCgpLmluY2x1ZGVzKFcuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KFcuU1lTU0lURSkpKSw0MDQ9PT1XLnN0YXR1cyYmVCh7TUVTU0FHRTpXLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSksdHlwZW9mIFcuc2FzanNBYm9ydDwidSIpe2Nv'@;
put 'bnN0IGllPVcscGU9aWUuc2FzanNBYm9ydFswXS5NU0csd2U9aWUuc2FzanNBYm9ydFswXS5NQUM7aWYocGUuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2Fk'@;
put 'ZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBUKHtlcnJvcjpwZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIikscGUse1NZU1dBUk5JTkdU'@;
put 'RVhUOmllLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDppZS5TWVNFUlJPUlRFWFQsTUFDOndlfSksVCh7ZXJyb3I6cGV9KX1fKFcpfSxXPT57aWYoY29uc29sZS5lcnJvcihXKSxXLmVycm9yKXtsZXQgcGUsaWU9Vy5lcnJvci5tZXNzYWdlO1cuZXJyb3IuZGV0YWlscyYmVy5lcnJvci5k'@;
put 'ZXRhaWxzLmxvZyYmKHBlPVcuZXJyb3IuZGV0YWlscy5sb2cpLCghaWV8fGllLnRyaW0oKS5sZW5ndGg8MSkmJihpZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLGllLHtM'@;
put 'T0c6cGV9LCJSZXF1ZXN0IGVycm9yIiksVCh7ZXJyb3I6aWV9KX1UKFcpfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0'@;
put 'U2VydmVyVHlwZSgpPT09WmMuRC5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKF89PihfLmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOl8udXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5n'@;
put 'JiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIV8uaXNMb2dnZWRJbiksXy5pc0xvZ2dlZEluKSxfPT4oY29uc29sZS5lcnJvcihfKSxoLnNob3VsZExvZ2luLm5l'@;
put 'eHQoITApLCExKSkuY2F0Y2goXz0+KDQwMz09PV8mJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVf'@;
put 'aWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJD'@;
put 'b250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRl'@;
put 'ci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJyb3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKF89PnshMT09'@;
put 'PV8mJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVw'@;
put 'RGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgsZil7'@;
put 'YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGZpKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihfPT57XyYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKF8pKX0pLmNhdGNoKF89PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJ'@;
put 'bnRlcnZhbCksZihfKX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2Uo'@;
put 'KGQsaCk9Pntjb25zdCBfPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShfKS5zdWJzY3JpYmUoVD0+e1QuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITAp'@;
put 'fSxUPT57VC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj0hMTtmPXR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiP3lpZWxk'@;
put 'IGQuYXBwTG9jQ2hlY2soYSk6eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSksZiYmZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1maShm'@;
put 'dW5jdGlvbiooZixfKXtsZXQgVyxUPSExO3RyeXtXPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChpZSl7IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1pZS5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoITEpKTpUPSEw'@;
put 'fWlmKFQpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2YoITApfSk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKGYsXyl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBfPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRo'@;
put 'PSR7YX1gKS50aGVuKFQ9Pig0MDQ9PT1ULnN0YXR1cyYmKF89ITApLFQudGV4dCgpKSkudGhlbihUPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoVCkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKF8pcmV0dXJuIGNvbnNvbGUu'@;
put 'd2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBXPW51bGw7dHJ5e1c9SlNPTi5w'@;
put 'YXJzZShUKX1jYXRjaHt9aWYoVyYmVy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Vy5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERh'@;
put 'dGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goVD0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhp'@;
put 'cy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1'@;
put 'ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0'@;
put 'dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBaYy5ELlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2Fz'@;
put 'ZSBaYy5ELlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBaYy5ELlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGU4KSxhcihhUCksYXIodmwpLGFyKG9xKSxhcih3MCksYXIoRHMpKX0sYy5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx3MD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5k'@;
put 'ZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2Yg'@;
put 'T2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KG9hKTt0aGlzLnNhc2pzQ29u'@;
put 'ZmlnPWEuZ2V0U2FzanNDb25maWcoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3Qgc3E9ZnVu'@;
put 'Y3Rpb24gWWhlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxIeD1mdW5jdGlvbiBXaGUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihzcShjW2FdWzBdLGwpKXJldHVybiBhO3JldHVybi0xfTt2YXIgJGhlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gcjgo'@;
put 'Yyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19cjgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIFVoZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LHI4LnByb3RvdHlw'@;
put 'ZS5kZWxldGU9ZnVuY3Rpb24gcWhlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiEoYTwwfHwoYT09bC5sZW5ndGgtMT9sLnBvcCgpOiRoZS5jYWxsKGwsYSwxKSwtLXRoaXMuc2l6ZSwwKSl9LHI4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gWGhlKGMpe3ZhciBsPXRo'@;
put 'aXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiBhPDA/dm9pZCAwOmxbYV1bMV19LHI4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUWhlKGMpe3JldHVybiBIeCh0aGlzLl9fZGF0YV9fLGMpPi0xfSxyOC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIHRmZShjLGwpe3ZhciBhPXRoaXMuX19kYXRh'@;
put 'X18sZD1IeChhLGMpO3JldHVybiBkPDA/KCsrdGhpcy5zaXplLGEucHVzaChbYyxsXSkpOmFbZF1bMV09bCx0aGlzfTtjb25zdCBOeD1yOCxhcT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGhmZT0ib2JqZWN0Ij09'@;
put 'dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHNoPWFxfHxoZmV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbXA9c2guU3ltYm9sO3ZhciBscT1PYmplY3QucHJvdG90eXBlLGdmZT1scS5oYXNPd25Qcm9wZXJ0eSxtZmU9bHEudG9TdHJpbmcs'@;
put 'S189bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciB5ZmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgY3E9bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0IGk4PWZ1bmN0aW9uIHhmZShjKXtyZXR1cm4gbnVsbD09Yz92b2lkIDA9PT1jPyJbb2JqZWN0IFVuZGVmaW5lZF0i'@;
put 'OiJbb2JqZWN0IE51bGxdIjpjcSYmY3EgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIHZmZShjKXt2YXIgbD1nZmUuY2FsbChjLEtfKSxhPWNbS19dO3RyeXtjW0tfXT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPW1mZS5jYWxsKGMpO3JldHVybiBkJiYobD9jW0tfXT1hOmRlbGV0ZSBjW0tf'@;
put 'XSksaH0oYyk6ZnVuY3Rpb24gd2ZlKGMpe3JldHVybiB5ZmUuY2FsbChjKX0oYyl9LFhfPWZ1bmN0aW9uIEVmZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sdXE9ZnVuY3Rpb24gTGZlKGMpe2lmKCFYXyhjKSlyZXR1cm4h'@;
put 'MTt2YXIgbD1pOChjKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IFByb3h5XSI9PWx9O3ZhciBjLElmZT1zaFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sZHE9'@;
put 'KGM9L1teLl0rJC8uZXhlYyhJZmUmJklmZS5rZXlzJiZJZmUua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2M6IiI7dmFyIEZmZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgSTU9ZnVuY3Rpb24gSGZlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gRmZl'@;
put 'LmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgVmZlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFpmZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2NvbnN0IFdmZT1mdW5jdGlvbiBZZmUoYyl7cmV0dXJuISghWF8oYyl8fGZ1'@;
put 'bmN0aW9uIFJmZShjKXtyZXR1cm4hIWRxJiZkcSBpbiBjfShjKSkmJih1cShjKT9aZmU6VmZlKS50ZXN0KEk1KGMpKX0sUjU9ZnVuY3Rpb24gcWZlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gR2ZlKGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gV2ZlKGEpP2E6dm9pZCAwfSxKXz1SNShz'@;
put 'aCwiTWFwIiksUV89UjUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgaTNlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGwzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG84KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlz'@;
put 'LmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fW84LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBKZmUoKXt0aGlzLl9fZGF0YV9fPVFfP1FfKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxvOC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGUzZShjKXt2YXIg'@;
put 'bD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sbzgucHJvdG90eXBlLmdldD1mdW5jdGlvbiBvM2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztpZihRXyl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmlu'@;
put 'ZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiBpM2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSxvOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGMzZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBRXz92b2lkIDAhPT1sW2NdOmwzZS5jYWxsKGwsYyl9LG84LnByb3RvdHlwZS5zZXQ9ZnVu'@;
put 'Y3Rpb24gaDNlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1RXyYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6bCx0aGlzfTtjb25zdCBocT1vOCxWeD1mdW5jdGlvbiBfM2UoYyxsKXt2YXIgYT1j'@;
put 'Ll9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBtM2UoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuInN0cmluZyI9PWx8fCJudW1iZXIiPT1sfHwic3ltYm9sIj09bHx8ImJvb2xlYW4iPT1sPyJfX3Byb3RvX18iIT09YzpudWxsPT09Y30obCk/YVsic3RyaW5nIj09dHlwZW9mIGw/InN0cmluZyI6'@;
put 'Imhhc2giXTphLm1hcH07ZnVuY3Rpb24gczgoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19czgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHAzZSgpe3RoaXMuc2l6ZT0wLHRo'@;
put 'aXMuX19kYXRhX189e2hhc2g6bmV3IGhxLG1hcDpuZXcoSl98fE54KSxzdHJpbmc6bmV3IGhxfX0sczgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBiM2UoYyl7dmFyIGw9VngodGhpcyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sczgucHJvdG90eXBlLmdldD1m'@;
put 'dW5jdGlvbiB3M2UoYyl7cmV0dXJuIFZ4KHRoaXMsYykuZ2V0KGMpfSxzOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFMzZShjKXtyZXR1cm4gVngodGhpcyxjKS5oYXMoYyl9LHM4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24geDNlKGMsbCl7dmFyIGE9VngodGhpcyxjKSxkPWEuc2l6ZTtyZXR1'@;
put 'cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgZ1A9czg7ZnVuY3Rpb24gYTgoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgTngoYyk7dGhpcy5zaXplPWwuc2l6ZX1hOC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gcmZlKCl7dGhpcy5fX2RhdGFf'@;
put 'Xz1uZXcgTngsdGhpcy5zaXplPTB9LGE4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gb2ZlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6ZSxhfSxhOC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGFmZShjKXtyZXR1cm4gdGhpcy5f'@;
put 'X2RhdGFfXy5nZXQoYyl9LGE4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gY2ZlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sYTgucHJvdG90eXBlLnNldD1mdW5jdGlvbiBBM2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBOeCl7dmFyIGQ9YS5fX2Rh'@;
put 'dGFfXztpZighSl98fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGdQKGQpfXJldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgRDNlPWE4O3ZhciBSM2U9ZnVuY3Rp'@;
put 'b24oKXt0cnl7dmFyIGM9UjUoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgZnE9UjNlLHBxPWZ1bmN0aW9uIE8zZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJmZxP2ZxKGMsbCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6'@;
put 'ITAsdmFsdWU6YSx3cml0YWJsZTohMH0pOmNbbF09YX07dmFyIEYzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IGdxPWZ1bmN0aW9uIEgzZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIUYzZS5jYWxsKGMsbCl8fCFzcShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZw'@;
put 'cShjLGwsYSl9LEJ4PWZ1bmN0aW9uIE4zZShjLGwsYSxkKXt2YXIgaD0hYTthfHwoYT17fSk7Zm9yKHZhciBmPS0xLF89bC5sZW5ndGg7KytmPF87KXt2YXIgVD1sW2ZdLFc9ZD9kKGFbVF0sY1tUXSxULGEsYyk6dm9pZCAwO3ZvaWQgMD09PVcmJihXPWNbVF0pLGg/cHEoYSxULFcpOmdxKGEs'@;
put 'VCxXKX1yZXR1cm4gYX0sbDg9ZnVuY3Rpb24gajNlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LG1xPWZ1bmN0aW9uIFUzZShjKXtyZXR1cm4gbDgoYykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1pOChjKX07dmFyIHZxPU9iamVjdC5wcm90b3R5cGUsWjNlPXZxLmhh'@;
put 'c093blByb3BlcnR5LFkzZT12cS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxXM2U9bXEoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9tcTpmdW5jdGlvbihjKXtyZXR1cm4gbDgoYykmJlozZS5jYWxsKGMsImNhbGxlZSIpJiYhWTNlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IEczZT1X'@;
put 'M2UsYzg9QXJyYXkuaXNBcnJheTt2YXIgX3E9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxicT1fcSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLHlxPWJxJiZicS5l'@;
put 'eHBvcnRzPT09X3E/c2guQnVmZmVyOnZvaWQgMDtjb25zdCB3cT0oeXE/eXEuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24gcTNlKCl7cmV0dXJuITF9O3ZhciB0cGU9L14oPzowfFsxLTldXGQqKSQvO2NvbnN0IHJwZT1mdW5jdGlvbiBucGUoYyxsKXt2YXIgYT10eXBlb2YgYztyZXR1cm4h'@;
put 'IShsPWw/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PWF8fCJzeW1ib2wiIT1hJiZ0cGUudGVzdChjKSkmJmM+LTEmJmMlMT09MCYmYzxsfSxDcT1mdW5jdGlvbiBvcGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9'@;
put 'O3ZhciBubD17fTtubFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09bmxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW5sWyJbb2JqZWN0IEludDhBcnJheV0iXT1ubFsiW29iamVjdCBJbnQxNkFycmF5XSJdPW5sWyJbb2JqZWN0IEludDMyQXJyYXldIl09bmxbIltvYmplY3QgVWludDhBcnJh'@;
put 'eV0iXT1ubFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxubFsiW29iamVjdCBBcmd1bWVudHNdIl09bmxbIltvYmplY3QgQXJyYXldIl09bmxbIltvYmplY3QgQXJyYXlCdWZmZXJd'@;
put 'Il09bmxbIltvYmplY3QgQm9vbGVhbl0iXT1ubFsiW29iamVjdCBEYXRhVmlld10iXT1ubFsiW29iamVjdCBEYXRlXSJdPW5sWyJbb2JqZWN0IEVycm9yXSJdPW5sWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW5sWyJbb2JqZWN0IE1hcF0iXT1ubFsiW29iamVjdCBOdW1iZXJdIl09bmxbIltvYmpl'@;
put 'Y3QgT2JqZWN0XSJdPW5sWyJbb2JqZWN0IFJlZ0V4cF0iXT1ubFsiW29iamVjdCBTZXRdIl09bmxbIltvYmplY3QgU3RyaW5nXSJdPW5sWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgbVA9ZnVuY3Rpb24gSXBlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBT'@;
put 'cT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGViPVNxJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsdlA9ZWImJmViLmV4cG9ydHM9PT1TcSYmYXEucHJvY2Vzcztj'@;
put 'b25zdCB1OD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZWImJmViLnJlcXVpcmUmJmViLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8dlAmJnZQLmJpbmRpbmcmJnZQLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBNcT11OCYmdTguaXNUeXBlZEFycmF5O2NvbnN0IEZwZT1NcT9tUChNcSk6'@;
put 'ZnVuY3Rpb24gRHBlKGMpe3JldHVybiBsOChjKSYmQ3EoYy5sZW5ndGgpJiYhIW5sW2k4KGMpXX07dmFyIE5wZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHhxPWZ1bmN0aW9uIFZwZShjLGwpe3ZhciBhPWM4KGMpLGQ9IWEmJkczZShjKSxoPSFhJiYhZCYmd3EoYyks'@;
put 'Zj0hYSYmIWQmJiFoJiZGcGUoYyksXz1hfHxkfHxofHxmLFQ9Xz9mdW5jdGlvbiBWM2UoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLFc9VC5sZW5ndGg7Zm9yKHZhciBpZSBpbiBjKShsfHxOcGUuY2Fs'@;
put 'bChjLGllKSkmJighX3x8ISgibGVuZ3RoIj09aWV8fGgmJigib2Zmc2V0Ij09aWV8fCJwYXJlbnQiPT1pZSl8fGYmJigiYnVmZmVyIj09aWV8fCJieXRlTGVuZ3RoIj09aWV8fCJieXRlT2Zmc2V0Ij09aWUpfHxycGUoaWUsVykpKSYmVC5wdXNoKGllKTtyZXR1cm4gVH07dmFyIEJwZT1PYmpl'@;
put 'Y3QucHJvdG90eXBlO2NvbnN0IF9QPWZ1bmN0aW9uIGpwZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8QnBlKX0sRXE9ZnVuY3Rpb24genBlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwo'@;
put 'YSkpfX0sWnBlPUVxKE9iamVjdC5rZXlzLE9iamVjdCk7dmFyIFdwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IGtxPWZ1bmN0aW9uIHFwZShjKXtyZXR1cm4gbnVsbCE9YyYmQ3EoYy5sZW5ndGgpJiYhdXEoYyl9LGJQPWZ1bmN0aW9uIEtwZShjKXtyZXR1cm4ga3Eo'@;
put 'Yyk/eHEoYyk6ZnVuY3Rpb24gR3BlKGMpe2lmKCFfUChjKSlyZXR1cm4gWnBlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykpV3BlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIG40ZT1PYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5O2NvbnN0IGk0ZT1mdW5jdGlvbiByNGUoYyl7aWYoIVhfKGMpKXJldHVybiBmdW5jdGlvbiBRcGUoYyl7dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9X1AoYyksYT1bXTtmb3IodmFyIGQg'@;
put 'aW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IW40ZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LHlQPWZ1bmN0aW9uIG80ZShjKXtyZXR1cm4ga3EoYyk/eHEoYywhMCk6aTRlKGMpfTt2YXIgQXE9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5u'@;
put 'b2RlVHlwZSYmZXhwb3J0cyxUcT1BcSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLERxPVRxJiZUcS5leHBvcnRzPT09QXE/c2guQnVmZmVyOnZvaWQgMCxMcT1EcT9EcS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgSXE9ZnVuY3Rp'@;
put 'b24gZzRlKCl7cmV0dXJuW119O3ZhciB2NGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxScT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLF80ZT1ScT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gZjRlKGMsbCl7'@;
put 'Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIF89Y1thXTtsKF8sYSxjKSYmKGZbaCsrXT1fKX1yZXR1cm4gZn0oUnEoYyksZnVuY3Rpb24obCl7cmV0dXJuIHY0ZS5jYWxsKGMsbCl9KSl9OklxO2NvbnN0IHdQPV80ZSxPcT1mdW5jdGlvbiB3'@;
put 'NGUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTtyZXR1cm4gY30sUHE9RXEoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIE00ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIg'@;
put 'bD1bXTtjOylPcShsLHdQKGMpKSxjPVBxKGMpO3JldHVybiBsfTpJcTtjb25zdCBGcT1NNGUsSHE9ZnVuY3Rpb24gazRlKGMsbCxhKXt2YXIgZD1sKGMpO3JldHVybiBjOChjKT9kOk9xKGQsYShjKSl9LFQ0ZT1mdW5jdGlvbiBBNGUoYyl7cmV0dXJuIEhxKGMsYlAsd1ApfSxMNGU9ZnVuY3Rp'@;
put 'b24gRDRlKGMpe3JldHVybiBIcShjLHlQLEZxKX0sQ1A9UjUoc2gsIkRhdGFWaWV3IiksU1A9UjUoc2gsIlByb21pc2UiKSxNUD1SNShzaCwiU2V0IikseFA9UjUoc2gsIldlYWtNYXAiKTt2YXIgTnE9IltvYmplY3QgTWFwXSIsVnE9IltvYmplY3QgUHJvbWlzZV0iLEJxPSJbb2JqZWN0IFNl'@;
put 'dF0iLGpxPSJbb2JqZWN0IFdlYWtNYXBdIix6cT0iW29iamVjdCBEYXRhVmlld10iLEg0ZT1JNShDUCksTjRlPUk1KEpfKSxWNGU9STUoU1ApLEI0ZT1JNShNUCksajRlPUk1KHhQKSxPNT1pODsoQ1AmJk81KG5ldyBDUChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9enF8fEpfJiZPNShuZXcgSl8p'@;
put 'IT1OcXx8U1AmJk81KFNQLnJlc29sdmUoKSkhPVZxfHxNUCYmTzUobmV3IE1QKSE9QnF8fHhQJiZPNShuZXcgeFApIT1qcSkmJihPNT1mdW5jdGlvbihjKXt2YXIgbD1pOChjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9JNShhKToiIjtpZihkKXN3'@;
put 'aXRjaChkKXtjYXNlIEg0ZTpyZXR1cm4genE7Y2FzZSBONGU6cmV0dXJuIE5xO2Nhc2UgVjRlOnJldHVybiBWcTtjYXNlIEI0ZTpyZXR1cm4gQnE7Y2FzZSBqNGU6cmV0dXJuIGpxfXJldHVybiBsfSk7Y29uc3QgRVA9TzU7dmFyIFU0ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'O2NvbnN0IFVxPXNoLlVpbnQ4QXJyYXksa1A9ZnVuY3Rpb24gRzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBVcShsKS5zZXQobmV3IFVxKGMpKSxsfTt2YXIgSzRlPS9cdyokLzt2YXIgWnE9bXA/bXAucHJvdG90eXBlOnZvaWQgMCxZcT1a'@;
put 'cT9acS52YWx1ZU9mOnZvaWQgMDtjb25zdCBTNWU9ZnVuY3Rpb24gQzVlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4ga1AoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJl'@;
put 'dHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uICQ0ZShjLGwpe3ZhciBhPWw/a1AoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVj'@;
put 'dCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50'@;
put 'OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiB0NWUoYyxsKXt2YXIgYT1sP2tQKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQs'@;
put 'Yy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24g'@;
put 'WDRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuc291cmNlLEs0ZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBRNGUoYyl7cmV0dXJuIFlxP09iamVjdChZcS5jYWxsKGMpKTp7'@;
put 'fX0oYyl9fTt2YXIgV3E9T2JqZWN0LmNyZWF0ZSxNNWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighWF8obCkpcmV0dXJue307aWYoV3EpcmV0dXJuIFdxKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQg'@;
put 'MCxhfX0oKTtjb25zdCB4NWU9TTVlO3ZhciBHcT11OCYmdTguaXNNYXA7Y29uc3QgSTVlPUdxP21QKEdxKTpmdW5jdGlvbiBUNWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBNYXBdIj09RVAoYyl9O3ZhciAkcT11OCYmdTguaXNTZXQ7Y29uc3QgSDVlPSRxP21QKCRxKTpmdW5jdGlvbiBP'@;
put 'NWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBTZXRdIj09RVAoYyl9O3ZhciBxcT0iW29iamVjdCBBcmd1bWVudHNdIixLcT0iW29iamVjdCBGdW5jdGlvbl0iLFhxPSJbb2JqZWN0IE9iamVjdF0iLFlhPXt9O1lhW3FxXT1ZYVsiW29iamVjdCBBcnJheV0iXT1ZYVsiW29iamVjdCBBcnJh'@;
put 'eUJ1ZmZlcl0iXT1ZYVsiW29iamVjdCBEYXRhVmlld10iXT1ZYVsiW29iamVjdCBCb29sZWFuXSJdPVlhWyJbb2JqZWN0IERhdGVdIl09WWFbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQ4QXJyYXldIl09WWFbIltv'@;
put 'YmplY3QgSW50MTZBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IE1hcF0iXT1ZYVsiW29iamVjdCBOdW1iZXJdIl09WWFbWHFdPVlhWyJbb2JqZWN0IFJlZ0V4cF0iXT1ZYVsiW29iamVjdCBTZXRdIl09WWFbIltvYmplY3QgU3RyaW5nXSJdPVlhWyJbb2Jq'@;
put 'ZWN0IFN5bWJvbF0iXT1ZYVsiW29iamVjdCBVaW50OEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLFlhWyJbb2JqZWN0IEVycm9yXSJdPVlhW0txXT1ZYVsiW29i'@;
put 'amVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IHVnZT1mdW5jdGlvbiBqeChjLGwsYSxkLGgsZil7dmFyIF8sVD0xJmwsVz0yJmwsaWU9NCZsO2lmKGEmJihfPWg/YShjLGQsaCxmKTphKGMpKSx2b2lkIDAhPT1fKXJldHVybiBfO2lmKCFYXyhjKSlyZXR1cm4gYzt2YXIgcGU9YzgoYyk7aWYocGUp'@;
put 'e2lmKF89ZnVuY3Rpb24gWjRlKGMpe3ZhciBsPWMubGVuZ3RoLGE9bmV3IGMuY29uc3RydWN0b3IobCk7cmV0dXJuIGwmJiJzdHJpbmciPT10eXBlb2YgY1swXSYmVTRlLmNhbGwoYywiaW5kZXgiKSYmKGEuaW5kZXg9Yy5pbmRleCxhLmlucHV0PWMuaW5wdXQpLGF9KGMpLCFUKXJldHVybiBm'@;
put 'dW5jdGlvbiBkNGUoYyxsKXt2YXIgYT0tMSxkPWMubGVuZ3RoO2ZvcihsfHwobD1BcnJheShkKSk7KythPGQ7KWxbYV09Y1thXTtyZXR1cm4gbH0oYyxfKX1lbHNle3ZhciB3ZT1FUChjKSxFZT13ZT09S3F8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXdlO2lmKHdxKGMpKXJldHVy'@;
put 'biBmdW5jdGlvbiBjNGUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1McT9McShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsVCk7aWYod2U9PVhxfHx3ZT09cXF8fEVlJiYhaCl7aWYoXz1XfHxFZT97fTpmdW5jdGlvbiBF'@;
put 'NWUoYyl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGMuY29uc3RydWN0b3J8fF9QKGMpP3t9Ong1ZShQcShjKSl9KGMpLCFUKXJldHVybiBXP2Z1bmN0aW9uIHg0ZShjLGwpe3JldHVybiBCeChjLEZxKGMpLGwpfShjLGZ1bmN0aW9uIHM0ZShjLGwpe3JldHVybiBjJiZCeChsLHlQKGwpLGMp'@;
put 'fShfLGMpKTpmdW5jdGlvbiBiNGUoYyxsKXtyZXR1cm4gQngoYyx3UChjKSxsKX0oYyxmdW5jdGlvbiBYcGUoYyxsKXtyZXR1cm4gYyYmQngobCxiUChsKSxjKX0oXyxjKSl9ZWxzZXtpZighWWFbd2VdKXJldHVybiBoP2M6e307Xz1TNWUoYyx3ZSxUKX19Znx8KGY9bmV3IEQzZSk7dmFyIFpl'@;
put 'PWYuZ2V0KGMpO2lmKFplKXJldHVybiBaZTtmLnNldChjLF8pLEg1ZShjKT9jLmZvckVhY2goZnVuY3Rpb24oeXQpe18uYWRkKGp4KHl0LGwsYSx5dCxjLGYpKX0pOkk1ZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHl0LEV0KXtfLnNldChFdCxqeCh5dCxsLGEsRXQsYyxmKSl9KTt2YXIgZXQ9'@;
put 'cGU/dm9pZCAwOihpZT9XP0w0ZTpUNGU6Vz95UDpiUCkoYyk7cmV0dXJuIGZ1bmN0aW9uIEwzZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30oZXR8fGMsZnVuY3Rpb24oeXQsRXQpe2V0JiYoeXQ9Y1tFdD15dF0pLGdx'@;
put 'KF8sRXQsangoeXQsbCxhLEV0LGMsZikpfSksX30seng9ZnVuY3Rpb24gZmdlKGMpe3JldHVybiB1Z2UoYyw1KX07dmFyIHBnZT1GKDkyODczKTtsZXQgVGM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwLHRo'@;
put 'aXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/'@;
put 'YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IFc9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2Ui'@;
put 'ZGF5cyI6e2xldCBpZT1XLzg2NGU1O3JldHVybiBpZT1NYXRoLmFicyhpZSksaWU9TWF0aC5mbG9vcihpZSksaWV9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gVy8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBh'@;
put 'cnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBUPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gVCs9NjAqbmV3IERhdGUoVCkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoVCl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXts'@;
put 'ZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSxfPWQuc3BsaXQoIi4iKVsxXSxUPWYrIkFsbCI7YVtmXSYmKGFbVF18fChhW1RdPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbVF0pLGgubGVuZ3RoPjAmJihh'@;
put 'W2ZdPWFbZl0uZmlsdGVyKF8/Vz0+V1tfXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6Vz0+Vy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57Zlto'@;
put 'XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3Bs'@;
put 'YXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2gr'@;
put 'KylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9y'@;
put 'RWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRl'@;
put 'IGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29u'@;
put 'dmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0'@;
put 'aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgXyBvZiBkKWRlbGV0ZSBmW19dO3JldHVybiBwZ2UoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0'@;
put 'IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2Fz'@;
put 'ZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiB6eChhKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksQzA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5sb2dn'@;
put 'ZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlz'@;
put 'Ll9saWNlbmNlU3RhdGU9c1AsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2lu'@;
put 'X2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0'@;
put 'aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6S28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVf'@;
put 'aWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgVGUobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgVGUoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgVGUoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBUZSghMSksdGhpcy5s'@;
put 'aWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgVGUobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBUZSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgVGUobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IFRlKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IFRlKHRoaXMuX2xp'@;
put 'Y2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKFc9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgaWU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3Nt'@;
put 'YXRjaCZtaXNzbWF0Y2hJZD0ke1d9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChpZSksdGhpcy5kZWFjdGl2YXRlQXBwKGllKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj'@;
put 'ZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz'@;
put 'KGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3QgXz0nRXJyb3IgZ2V0dGluZyAi'@;
put 'R2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29sZS5lcnJvcihfKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShf'@;
put 'KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2Vu'@;
put 'dCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tF'@;
put 'WT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXt5'@;
put 'aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihULGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIF8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXtjb25zdCBXPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAk'@;
put 'e1R9YDtjb25zb2xlLmVycm9yKFcpO2NvbnN0IGllPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKFcpfSZmb3JjZT10cnVlYDtoLmxpY2VuY2VQcm9ibGVtLm5leHQoaWUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoaWUpLHNldFRpbWVvdXQoKCk9PmguYXBw'@;
put 'bGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihUKXtyZXR1cm4gXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQp'@;
put 'fSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCBfPXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5'@;
put 'OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO198fChfPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQoXyksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJz'@;
put 'QWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpULGRheXNUb0V4cGlyeTpXfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJ'@;
put 'bj1XLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChXKSxXPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoVCxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxk'@;
put 'JiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1'@;
put 'cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZh'@;
put 'bHVlKGRbbjEudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnN0YWdlX3Jvd3NfYWxsb3dl'@;
put 'ZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0'@;
put 'OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5saW5l'@;
put 'YWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW24xLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtuMS5lZGl0UmVj'@;
put 'b3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50'@;
put 'KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1maShmdW5jdGlvbiooXyxUKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlw'@;
put 'dG8uc3VidGxlKXRyeXtsZXQgRWU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO18oSlNPTi5wYXJzZShFZSkpfWNhdGNoKEVlKXtUKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitFZSl9bGV0IGllLFc9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVm'@;
put 'ZmVyKGEpLmNhdGNoKEVlPT57VChFZSl9KTtjb25zdCBwZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2goRWU9PntUKEVlKX0pO2lmKCFwZSlyZXR1cm4gdm9pZCBUKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHdlO2llPXBlO3RyeXt3ZT15aWVsZCB3aW5kb3cu'@;
put 'Y3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixpZSx7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goRWUpe1QoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrRWUpfWlmKHdlKWlmKFcpdHJ5e3dpbmRvdy5jcnlwdG8u'@;
put 'c3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LHdlLFcpLnRoZW4oRWU9PntsZXQgWmU9KG5ldyBmaGUuVGV4dERlY29kZXIpLmRlY29kZShFZSk7dHJ5e18oSlNPTi5wYXJzZShaZSkpfWNhdGNoKGl0KXtUKCJFcnJvciBwYXJzaW5nIGxpY2Vu'@;
put 'c2Uga2V5IGRhdGEuICIraXQpfX0sRWU9PntUKEVlKX0pfWNhdGNoKEVlKXtUKEVlKX1lbHNlIFQoIkxpY2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIFQoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbihfLFQpe3JldHVybiBmLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT1zUCx0aGlz'@;
put 'LmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtj'@;
put 'b25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPUtvKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksXz1wYXJzZUludChkLnNwbGl0KCIs'@;
put 'IilbMV0pO3JldHVybiBLbyhmKS5pc1NhbWUoS28oKSwiZGF5Iik/Xz49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLF8rMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGlu'@;
put 'ZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9uKihoLGYpe2goaiQuSihhKSl9KTtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoaiQuYyhhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRM'@;
put 'aWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxmKXtsZXQgXz0hMSxUPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYm'@;
put 'KF89ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKFQ9ITApLF8mJlQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgp'@;
put 'PT57Y29uc3QgVz0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChXKSx0aGlzLl9saWNlbmNlU3RhdGU9c1AsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCks'@;
put 'Znx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChXKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1LbyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1LbygpLnN0YXJ0T2YoImRheSIpLGY9ZC5kaWZmKGgsImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6'@;
put 'ZCxkYXlzVG9FeHBpcnk6Zn19aGFuZGxlRXhwaXJ5KGEsZCxoLGYpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBfPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhp'@;
put 'cy5saWNlbmNlUHJvYmxlbS5uZXh0KF8pLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXyl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9s'@;
put 'aWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZH1oYW5k'@;
put 'bGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxoKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihkLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJD'@;
put 'YXBhY2l0eS5uZXh0KCEwKSk6ZC5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1kLklTUkVHSVNURVJFRClyZXR1cm4gZC5SRUdJU1RFUkNPVU5UPGEudXNlcnNfYWxsb3dl'@;
put 'ZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv'@;
put 'bGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVk'@;
put 'Lm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcih3MCksYXIoZTgpLGFyKHZsKSxhcihvYSksYXIoVGMpLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi'@;
put 'fSksY30pKCksVXg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zeXNzaXRlPW5ldyBUZShu'@;
put 'dWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhwJiYiL2RlcGxveSI9PT1ULnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pfXNhc1NlcnZp'@;
put 'Y2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0'@;
put 'dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEp'@;
put 'LHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVu'@;
put 'Y3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLlNZU1NJVEVdKTtsZXQgXz1bXTtpZigoIWYuZ2xvYnZhcnN8fGYuZ2xvYnZhcnMmJiFmLmdsb2J2YXJzWzBdKSYmXy5wdXNoKCJHbG9idmFycyIpLGYuc2FzZGF0YXNldHN8fF8ucHVzaCgiU2FzZGF0YXNldHMiKSxmLnNhc2xpYnN8fF8ucHVz'@;
put 'aCgiU2FzbGlicyIpLGYueGxtYXBzfHxfLnB1c2goIlhMTWFwcyIpLF8ubGVuZ3RoPjApcmV0dXJuIGQ9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke18uam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5s'@;
put 'aWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLlNZU1NJVEUsU1lTU0NQTDpmLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpmLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5TWVNWTE9ORyxNRU1TSVpFOmYuTUVNU0la'@;
put 'RSxTWVNQUk9DRVNTTU9ERTpmLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuU1lTSE9TVE5BTUUsU1lTSE9TVElORk9MT05HOmYuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuU1lTRU5DT0RJTkcsQVVUT0VYRUM6Zi5BVVRPRVhFQyxJU0FETUlOOmYuZ2xvYnZhcnNbMF0uSVNB'@;
put 'RE1JTixEQ19BRE1JTl9HUk9VUDpmLmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQfTtsZXQgaWUscGUsVD1mLnNhc2RhdGFzZXRzLFc9e307Zm9yKGxldCBpdCBvZiBUKVdbaXQuTElCUkVGXXx8KFdbaXQuTElCUkVGXT1bXSksV1tpdC5MSUJSRUZdLnB1c2goaXQuRFNOKTtsZXQgd2U9SlNP'@;
put 'Ti5wYXJzZShKU09OLnN0cmluZ2lmeShXKSksRWU9W107Zm9yKGxldCBpdCBvZiBPYmplY3Qua2V5cyh3ZSkpRWUucHVzaCh7TElCUkFSWVJFRjppdCx0YWJsZXM6d2VbaXRdfSk7bGV0IFplPUVlO2llPVcscGU9T2JqZWN0LmtleXMoVyksdm9pZCAwIT09aWUmJihHbi5lZGl0b3IubGlic0Fu'@;
put 'ZFRhYmxlcz1pZSksR24ueGxtYXBzPWYueGxtYXBzLm1hcChpdD0+KHtpZDppdFswXSxkZXNjcmlwdGlvbjppdFsxXSx0YXJnZXREUzppdFsyXX0pKSxHbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9WmUsR24uZWRpdG9yLmxpYnJhcmllcz1wZSxHbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxH'@;
put 'bi5kY0xpYj1mLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGEubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbihmKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFs'@;
put 'KCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRl'@;
put 'ZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51'@;
put 'cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8YykoYXIoQzApLGFyKHZsKSxhcihvYSksYXIodzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgZ2dle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVu'@;
put 'c3Vic2NyaWJlKCl7Y29uc3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19ZnVuY3Rpb24gdnAoYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv'@;
put 'cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBrZihjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHZwKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGQ4KGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50'@;
put 'cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIHZwKGEpP2w6a2YoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIHZwKGEpJiZ2cChkKT9sOnZwKGEpP2tmKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTp2cChkKT9rZihmdW5jdGlvbiho'@;
put 'KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19Y29uc3QgWng9ZDgoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBZeChjLGwpe3Jl'@;
put 'dHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgSnE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBRcT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09SnEuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVy'@;
put 'biJbb2JqZWN0IEFyZ3VtZW50c10iPT09SnEuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIFl4KCJjYWxsZWUiLGwpfX0oKSxiZ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3Rv'@;
put 'dHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBlSyhjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgQ2dlPWtmKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFz'@;
put 'eS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpu'@;
put 'dWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOmJnZShsKT9bXTplSyhsKT8iIjpmdW5jdGlvbiB5'@;
put 'Z2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OlFxKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiB3Z2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp'@;
put 'O3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQzMkFy'@;
put 'cmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1sfShsKT9sLmNv'@;
put 'bnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IFNnZT1DZ2U7ZnVuY3Rpb24gdEsoYyl7Zm9yKHZhciBhLGw9W107IShhPWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gbksoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7'@;
put 'aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgVFA9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24geGdlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgRWdlPSF7dG9TdHJpbmc6bnVs'@;
put 'bH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIikscks9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxpSz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLGtnZT1mdW5jdGlvbihsLGEpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBvSz1rZigiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0'@;
put 'LmtleXN8fGlLP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107dmFyIGEsZCxoPVtdLGY9aUsmJlFxKGwpO2ZvcihhIGluIGwpWXgoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoRWdlKWZvcihkPXJLLmxlbmd0aC0xO2Q+PTA7KVl4KGE9'@;
put 'cktbZF0sbCkmJiFrZ2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3JldHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSksc0s9a2YoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmlu'@;
put 'ZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIGFLKGMsbCxhLGQpe3ZhciBoPXRLKGMpO2Z1bmN0aW9uIF8oVCxXKXtyZXR1cm4gRFAoVCxXLGEuc2xpY2UoKSxkLnNsaWNlKCkpfXJldHVybiFuSyhmdW5jdGlvbihULFcpe3JldHVy'@;
put 'biFuSyhfLFcsVCl9LHRLKGwpLGgpfWZ1bmN0aW9uIERQKGMsbCxhLGQpe2lmKFRQKGMsbCkpcmV0dXJuITA7dmFyIGg9c0soYyk7aWYoaCE9PXNLKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQv'@;
put 'ZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0'@;
put 'Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gTWdlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9'@;
put 'PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFUUChjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjpp'@;
put 'ZighVFAoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5p'@;
put 'Z25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0x'@;
put 'fXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmYUsoYy5lbnRyaWVzKCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmYUsoYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29u'@;
put 'Y2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWlu'@;
put 'dDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7'@;
put 'ZGVmYXVsdDpyZXR1cm4hMX12YXIgXz1vSyhjKTtpZihfLmxlbmd0aCE9PW9LKGwpLmxlbmd0aClyZXR1cm4hMTt2YXIgVD1hLmNvbmNhdChbY10pLFc9ZC5jb25jYXQoW2xdKTtmb3IoZj1fLmxlbmd0aC0xO2Y+PTA7KXt2YXIgaWU9X1tmXTtpZighWXgoaWUsbCl8fCFEUChsW2llXSxjW2ll'@;
put 'XSxULFcpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3QgTGdlPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIERQKGwsYSxbXSxbXSl9KSxsSz1rZihmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmTGdlKGwsU2dlKGwpKX0pO2Z1bmN0aW9uIHRiKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0'@;
put 'aW9uIF9wKGMpe3JldHVybiB0YihjKXx8bEsoYyl9ZnVuY3Rpb24gTFAoYyl7cmV0dXJuIFp4KFN0cmluZyxjKX1mdW5jdGlvbiBXeChjKXtyZXR1cm4gWngoT2JqZWN0LGMpfWZ1bmN0aW9uIHVLKGMpe3JldHVybiBaeChNYXAsYyl9ZnVuY3Rpb24gZEsoYyxsKXtyZXR1cm4gYyE9PWx9ZnVu'@;
put 'Y3Rpb24gaEsoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBmSyhjKXtjb25zdCBsPW5ldyBNYXA7Zm9yKGNvbnN0W2EsZF1vZiBjKXVLKGQpP2wuc2V0KGEsZksoZCkpOmwuc2V0KGEsZCk7cmV0dXJuIGx9ZnVuY3Rpb24gTmdlKGMp'@;
put 'e3N3aXRjaCghMCl7Y2FzZSB1SyhjKTpyZXR1cm4gZksoYyk7Y2FzZSBXeChjKSYmIUFycmF5LmlzQXJyYXkoYyk6cmV0dXJuIFA1KHt9LGMpO2RlZmF1bHQ6cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpfX1mdW5jdGlvbiBQNSguLi5jKXtjb25zdCBsPXt9O3JldHVybiBj'@;
put 'Lm1hcChhPT5XeChhKT97Li4uYX06e30pLmZvckVhY2goYT0+e09iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e2NvbnN0IGg9YVtkXTtsW2RdPUFycmF5LmlzQXJyYXkoaCk/QXJyYXkuZnJvbShoKTpXeChoKT9QNShsW2RdfHx7fSxoKTpofSl9KSxsfWZ1bmN0aW9uIGdLKGM9d2luZG93KXty'@;
put 'ZXR1cm4hdGIoYyl9bGV0IEd4LG1LLElQLFJQO2Z1bmN0aW9uIHZLKGM9ITApe2lmKCFjfHwhR3gpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO0d4PWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJu'@;
put 'IEd4fWZ1bmN0aW9uIFVnZShjPSEwKXtyZXR1cm4gYyYmR3h8fChtSz13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLG1LfWZ1bmN0aW9uIF9LKGM9ITApe3JldHVybiBjJiZJUHx8KElQPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lv'@;
put 'bjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksSVB9ZnVuY3Rpb24gYksoYz0hMCl7aWYoIWN8fCFSUCl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7'@;
put 'Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9UlA9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIFJQfWZ1bmN0aW9uIEY1KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVu'@;
put 'Y3Rpb24gQ0soYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBLZ2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1q'@;
put 'cyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9RjUoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5z'@;
put 'ZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07ZnVuY3Rpb24geEsoYyxsKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXty'@;
put 'ZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07'@;
put 'Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLF8sVCxXKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDk6cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGEsZCxoLGYsXyxULFcsaWUscGUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSxwZSx3ZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3Qg'@;
put 'YXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIEVLKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9YyxfPTA7XzxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3Ro'@;
put 'Oyl7dmFyIFQ7XzxsLmxlbmd0aCYmKCF2cChsW19dKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/VD1sW19dOihUPWFyZ3VtZW50c1toXSxoKz0xKSxkW19dPVQsdnAoVCl8fChmLT0xKSxfKz0xfXJldHVybiBmPD0wP2EuYXBwbHkodGhpcyxkKTp4SyhmLEVLKGMsZCxhKSl9fWNvbnN0IGtLPWQ4'@;
put 'KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIDE9PT1sP2tmKGEpOnhLKGwsRUsobCxbXSxhKSl9KSxKZ2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuIGw8PDA9PT1sfSxlbWU9ZDgoZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiBlSyhhKT9hLmNo'@;
put 'YXJBdChkKTphW2RdfSksbm1lPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgXyxoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPUpnZShfPWRbZl0pP2VtZShfLGgpOmhbX10sZis9MX1yZXR1cm4gaH0pfSksaW1lPWQ4KGZ1'@;
put 'bmN0aW9uKGwsYSl7cmV0dXJuIG5tZShbbF0sYSlbMF19KSxzbWU9a0soMiwoYyxsKT0+dm9pZCAwIT09aW1lKGMsbCkpLEFLPXNtZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7Y2xhc3MgSDV7c3RhdGljIGxvZyguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLmxv'@;
put 'ZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe0ZQKCkmJlBQKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIFBQKCl7cmV0dXJuIUFLKFsiamFzbWluZSJdKX1mdW5jdGlvbiBGUCgpe3JldHVy'@;
put 'biF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gVEsoKXtnSygpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOktnZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRl'@;
put 'Ontmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpESyxsb2dEZXRhaWxzOmxtZX0s'@;
put 'ZnVuY3Rpb24oKXtjb25zdCBjPSI2LjQuNiI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJz'@;
put 'aW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJkg1Lndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVk'@;
put 'LiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRvdy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVb'@;
put 'bF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSksITB9fSkpKX1mdW5jdGlvbiBESygpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25t'@;
put 'ZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246dksoITEpLGFuZ3VsYXJKU1ZlcnNpb246VWdlKCExKSxyZWFjdFZlcnNpb246X0soITEpLHZ1ZVZlcnNpb246'@;
put 'YksoITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVn'@;
put 'aXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIGxtZSgpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShESygpLG51bGwsMikpfWNvbnN0IEhQPW5ldyBjbGFzcyBtZ2V7Y29uc3RydWN0b3IoKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IGdnZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2Jz'@;
put 'ZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07SFAubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+SFAuZW1pdChjLmRldGFpbCkpO2NsYXNzICRse3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gVEsoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0'@;
put 'aWMgZ2V0VmFsdWUobCl7cmV0dXJuICRsLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpeyRsLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0g1LmxvZyhKU09OLnN0cmluZ2lmeSgkbC5zdGF0ZSxudWxsLDIpKX19JGwuc3RhdGVVcGRhdGVzPUhQLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29u'@;
put 'c3QgY21lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i'@;
put 'Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBWc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246Y21lWzFdLC4uLiRsLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpeyRsLnN0YXRlLmljb25S'@;
put 'ZWdpc3RyeT17Li4uJGwuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVZzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlZzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChb'@;
put 'ZCxoXSk9PmgubWFwKGY9PltmLFZzLnJlZ2lzdHJ5W2RdXSkpOyRsLnN0YXRlLmljb25SZWdpc3RyeT17Li4uJGwuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX1jb25zdCBoOD1b'@;
put 'ImFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLG8xPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGlu'@;
put 'ZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx'@;
put 'LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPjxjaXJjbGUgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40'@;
put 'OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nfV0sczE9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw'@;
put 'LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPjxwYXRoIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwx'@;
put 'OCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPid9XSxMSz1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIzMS4xIiBjeT0i'@;
put 'MTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+'@;
put 'PGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XSxuYj1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgs'@;
put 'OS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSx1bWU9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42'@;
put 'NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+PHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDMyLjI1LDZaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz48cmVjdCB4PSIx'@;
put 'MyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSww'@;
put 'LDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCww'@;
put 'LDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4x'@;
put 'NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYz'@;
put 'MC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQs'@;
put 'MFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42'@;
put 'Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs'@;
put 'MTBaIi8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIs'@;
put 'MCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCww'@;
put 'LDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgs'@;
put 'MCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPid9XSxkbWU9WyJjYWxlbmRh'@;
put 'ciIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2'@;
put 'WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9IjEzIiB5PSI2IiB3'@;
put 'aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1'@;
put 'LjM4WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9s'@;
put 'eWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cmVjdCB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE5IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAs'@;
put 'MCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu'@;
put 'NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJa'@;
put 'bTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCww'@;
put 'LDAsMjYsMTBaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwz'@;
put 'Ljc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01'@;
put 'SDI2VjE5aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0'@;
put 'aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1'@;
put 'LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVI'@;
put 'MjZWMTRoMloiLz4nfV0saG1lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0'@;
put 'LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiLz48cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0u'@;
put 'NDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiLz48cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwx'@;
put 'OGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAs'@;
put 'MSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIvPjxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCww'@;
put 'LDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhs'@;
put 'NC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42'@;
put 'LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPid9XSxmbWU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEw'@;
put 'UzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIs'@;
put 'MzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiLz48cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx'@;
put 'LDE4LjA5LDIyLjg5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0x'@;
put 'Ny44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiLz4nfV0s'@;
put 'cG1lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iNC45IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPid9XSxnbWU9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAs'@;
put 'MCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nfV0sbW1lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjgu'@;
put 'OTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIi8+J31dLElLPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDku'@;
put 'NzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSx2bWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2'@;
put 'LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywx'@;
put 'LjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sUks9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFa'@;
put 'Ii8+PHBhdGggZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+J31dLF9tZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRo'@;
put 'IGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFh'@;
put 'MS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40'@;
put 'MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+J31dLGJtZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw'@;
put 'LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+Jyxzb2xpZDon'@;
put 'PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAs'@;
put 'MCwuMTUtLjM1VjExWiIvPid9XSxPSz1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz48cGF0aCBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+'@;
put 'PHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIs'@;
put 'MiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPid9XSx5bWU9WyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRo'@;
put 'IGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+PGNpcmNsZSBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+PHBhdGggZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCww'@;
put 'LDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAs'@;
put 'MSwyOC41NSwyNy40OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYu'@;
put 'ODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+J31dLHdtZT1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwz'@;
put 'NFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiLz4nfV0sQ21lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwxMWE3LDcsMCwx'@;
put 'LDEtNyw3LDcsNywwLDAsMSw3LTciLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz4nfV0sUEs9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0'@;
put 'LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44'@;
put 'LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxTbWU9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwx'@;
put 'OCwzMloiLz48cGF0aCBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYs'@;
put 'MCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+J31dO2NsYXNzIHhtZSBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShs'@;
put 'LGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0ICR4PXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09JHg7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtk'@;
put 'ZWxlZ2F0ZTpsfT0keDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgTlAgZXh0ZW5kcyB4bWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5n'@;
put 'PSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9'@;
put 'ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gJHguc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9'@;
put 'cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJiR4LmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBh'@;
put 'IGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51'@;
put 'bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZigh'@;
put 'dGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxxKGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGws'@;
put 'bnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgVlA9e25vdzooKT0+KFZQLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHJie2NvbnN0cnVjdG9yKGwsYT1yYi5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1s'@;
put 'LHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1yYi5ub3c9VlAubm93O2NsYXNzIEJQIGV4dGVuZHMgcmJ7Y29uc3RydWN0b3IobCxhPXJiLm5vdyl7c3VwZXIobCxhKSx0aGlzLmFj'@;
put 'dGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9'@;
put 'YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCBpYj1uZXcgQlAoTlApLEVtZT1pYjtmdW5jdGlvbiBmOChjLGw9aWIpe3JldHVybiBYZSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLF89bnVs'@;
put 'bDtjb25zdCBUPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBpZT1mO2Y9bnVsbCxkLm5leHQoaWUpfX07ZnVuY3Rpb24gVygpe2NvbnN0IGllPV8rYyxwZT1sLm5vdygpO2lmKHBlPGllKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9pZCAwLGllLXBlKSx2b2lkIGQu'@;
put 'YWRkKGgpO1QoKX1hLnN1YnNjcmliZShVZShkLGllPT57Zj1pZSxfPWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShXLGMpLGQuYWRkKGgpKX0sKCk9PntUKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWZ1bmN0aW9uIGFoKGMpe3JldHVybiBYZSgobCxhKT0+e0ty'@;
put 'KGMpLnN1YnNjcmliZShVZShhLCgpPT5hLmNvbXBsZXRlKCksRykpLCFhLmNsb3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1mdW5jdGlvbiBqUChjPTAsbCxhPUVtZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihSYyhsKT9hPWw6ZD1sKSxuZXcgS2UoaD0+e2xldCBmPWZ1bmN0aW9uIEFtZShj'@;
put 'KXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IF89MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KF8rKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRl'@;
put 'KCkpfSxmKX0pfWNvbnN0IERtZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxMbWU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLEltZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbjIoYyxsLGEsZCl7aWYoWShhKSYmKGQ9YSxhPXZvaWQgMCksZCly'@;
put 'ZXR1cm4gbjIoYyxsLGEpLnBpcGUoSE8oZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gUG1lKGMpe3JldHVybiBZKGMuYWRkRXZlbnRMaXN0ZW5lcikmJlkoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/TG1lLm1hcChfPT5UPT5jW19dKGwsVCxhKSk6ZnVuY3Rpb24gUm1lKGMpe3JldHVybiBZ'@;
put 'KGMuYWRkTGlzdGVuZXIpJiZZKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9EbWUubWFwKEhLKGMsbCkpOmZ1bmN0aW9uIE9tZShjKXtyZXR1cm4gWShjLm9uKSYmWShjLm9mZil9KGMpP0ltZS5tYXAoSEsoYyxsKSk6W107aWYoIWgmJlJuKGMpKXJldHVybiB5cihfPT5uMihfLGwsYSkpKEtyKGMp'@;
put 'KTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgS2UoXz0+e2NvbnN0IFQ9KC4uLlcpPT5fLm5leHQoMTxXLmxlbmd0aD9XOldbMF0pO3JldHVybiBoKFQpLCgpPT5mKFQpfSl9ZnVuY3Rpb24gSEsoYyxsKXtyZXR1cm4gYT0+ZD0+'@;
put 'Y1thXShsLGQpfWNsYXNzIHF4IGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1WUCl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGlt'@;
put 'ZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxf'@;
put 'dGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTpffT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK18pKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7'@;
put 'Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IF89MDtfPGYubGVuZ3RoJiYhbC5jbG9zZWQ7Xys9ZD8xOjIpbC5uZXh0KGZbX10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXpl'@;
put 'ZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiks'@;
put 'IWgpe2NvbnN0IF89YS5ub3coKTtsZXQgVD0wO2ZvcihsZXQgVz0xO1c8ZC5sZW5ndGgmJmRbV108PV87Vys9MilUPVc7VCYmZC5zcGxpY2UoMCxUKzEpfX19Y2xhc3MgTkt7fWNsYXNzIEZtZXt9Y29uc3QgQWY9IioiO2Z1bmN0aW9uIGExKGMsbCl7cmV0dXJue3R5cGU6NyxuYW1lOmMsZGVm'@;
put 'aW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBydShjLGw9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIFZLKGMsbD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOmMsb3B0aW9uczpsfX1mdW5jdGlvbiBfcyhjKXtyZXR1cm57dHlwZTo2LHN0'@;
put 'eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBLeChjLGwsYSl7cmV0dXJue3R5cGU6MCxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiBIbWUoYyl7cmV0dXJue3R5cGU6NSxzdGVwczpjfX1mdW5jdGlvbiBmYyhjLGwsYT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6Yyxh'@;
put 'bmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIG9ie2NvbnN0cnVjdG9yKGw9MCxhPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9'@;
put 'W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRo'@;
put 'aXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlz'@;
put 'Ll9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFz'@;
put 'aygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9Zmlu'@;
put 'aXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVz'@;
put 'dHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlv'@;
put 'bj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5f'@;
put 'b25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIEJLe2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29u'@;
put 'RGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXll'@;
put 'cnMuZm9yRWFjaChfPT57Xy5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSxfLm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSxfLm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5w'@;
put 'bGF5ZXJzLnJlZHVjZSgoXyxUKT0+TWF0aC5tYXgoXyxULnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVy'@;
put 'cy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRv'@;
put 'bmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBs'@;
put 'YXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChs'@;
put 'PT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMu'@;
put 'Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlz'@;
put 'LnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50'@;
put 'b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25z'@;
put 'dCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IGpLPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdl'@;
put 'PWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShh'@;
put 'KXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjfSksY30pKCks'@;
put 'TjU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGpLe31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsZmVhdHVyZXM6W2VvXX0pLGN9KSgpO2NvbnN0'@;
put 'IGxoPW5ldyBTaSgiTmdWYWx1ZUFjY2Vzc29yIiksVm1lPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOkxzKCgpPT5TMCksbXVsdGk6ITB9O2xldCBTMD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5w'@;
put 'dXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DaGFuZ2UoZi50YXJnZXQu'@;
put 'Y2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW1ZtZV0pLGVvXX0pLGN9KSgpO2NvbnN0IEJtZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpMcygoKT0+V2EpLG11bHRpOiEwfSx6bWU9bmV3IFNpKCJDb21wb3NpdGlvbkV2'@;
put 'ZW50TW9kZSIpO2xldCBXYT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgakt7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9k'@;
put 'ZT0hZnVuY3Rpb24gam1lKCl7Y29uc3QgYz1hcCgpP2FwKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXso'@;
put 'IXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMu'@;
put 'X2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRm8pLHR0KE5pKSx0dCh6bWUsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9s'@;
put 'TmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMs'@;
put 'InR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5faGFuZGxlSW5wdXQoZi50YXJnZXQudmFsdWUp'@;
put 'fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihmKXtyZXR1cm4gZC5fY29tcG9zaXRpb25FbmQoZi50YXJn'@;
put 'ZXQudmFsdWUpfSl9LGZlYXR1cmVzOlt0aShbQm1lXSksZW9dfSksY30pKCk7Y29uc3QgaXU9bmV3IFNpKCJOZ1ZhbGlkYXRvcnMiKSx5cD1uZXcgU2koIk5nQXN5bmNWYWxpZGF0b3JzIik7ZnVuY3Rpb24gWEsoYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gSksoYyl7cmV0dXJuIHY1KGMp'@;
put 'P2VhKGMpOmN9ZnVuY3Rpb24gUUsoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBlWChjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiB0WChj'@;
put 'KXtyZXR1cm4gYy5tYXAobD0+ZnVuY3Rpb24gWm1lKGMpe3JldHVybiFjLnZhbGlkYXRlfShsKT9sOmE9PmwudmFsaWRhdGUoYSkpfWZ1bmN0aW9uIFVQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIG5YKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoWEspO3JldHVy'@;
put 'biAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBRSyhlWChhLGwpKX19KHRYKGMpKTpudWxsfWZ1bmN0aW9uIFpQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIHJYKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoWEspO3JldHVybiAwPT1sLmxlbmd0'@;
put 'aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBObWUoLi4uYyl7Y29uc3QgbD1PYyhjKSx7YXJnczphLGtleXM6ZH09T0coYyksaD1uZXcgS2UoZj0+e2NvbnN0e2xlbmd0aDpffT1hO2lmKCFfKXJldHVybiB2b2lkIGYuY29tcGxldGUoKTtjb25zdCBUPW5ldyBBcnJheShfKTts'@;
put 'ZXQgVz1fLGllPV87Zm9yKGxldCBwZT0wO3BlPF87cGUrKyl7bGV0IHdlPSExO0tyKGFbcGVdKS5zdWJzY3JpYmUoVWUoZixFZT0+e3dlfHwod2U9ITAsaWUtLSksVFtwZV09RWV9LCgpPT5XLS0sdm9pZCAwLCgpPT57KCFXfHwhd2UpJiYoaWV8fGYubmV4dChkP1BHKGQsVCk6VCksZi5jb21w'@;
put 'bGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoSE8obCkpOmh9KGVYKGEsbCkubWFwKEpLKSkucGlwZShNZShRSykpfX0odFgoYykpOm51bGx9ZnVuY3Rpb24gaVgoYyxsKXtyZXR1cm4gbnVsbD09PWM/W2xdOkFycmF5LmlzQXJyYXkoYyk/Wy4uLmMsbF06W2MsbF19ZnVuY3Rpb24gWVAo'@;
put 'Yyl7cmV0dXJuIGM/QXJyYXkuaXNBcnJheShjKT9jOltjXTpbXX1mdW5jdGlvbiBKeChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2MuaW5jbHVkZXMobCk6Yz09PWx9ZnVuY3Rpb24gYVgoYyxsKXtjb25zdCBhPVlQKGwpO3JldHVybiBZUChjKS5mb3JFYWNoKGg9PntKeChhLGgpfHxh'@;
put 'LnB1c2goaCl9KSxhfWZ1bmN0aW9uIGxYKGMsbCl7cmV0dXJuIFlQKGwpLmZpbHRlcihhPT4hSngoYyxhKSl9Y2xhc3MgY1h7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119'@;
put 'Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxp'@;
put 'ZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRo'@;
put 'aXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hl'@;
put 'ZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1VUCh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3Jz'@;
put 'KGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49WlAodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRh'@;
put 'dG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2gobCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNo'@;
put 'KGw9PmwoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KGw9dm9pZCAwKXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChsKX1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IobCxhKX1nZXRFcnJvcihsLGEp'@;
put 'e3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKGwsYSk6bnVsbH19Y2xhc3MganUgZXh0ZW5kcyBjWHtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIHp1IGV4dGVuZHMgY1h7Y29uc3RydWN0b3IoKXtz'@;
put 'dXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyB1WHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdl'@;
put 'dCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRo'@;
put 'aXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBCcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdVh7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHp1LDIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNoZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlz'@;
put 'VG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbZW9dfSksY30pKCksd3A9KCgpPT57'@;
put 'Y2xhc3MgYyBleHRlbmRzIHVYe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChqdSwxMCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi'@;
put 'LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNo'@;
put 'ZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRp'@;
put 'bmcpKCJuZy1zdWJtaXR0ZWQiLGQuaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y29uc3Qgc2I9IlZBTElEIixlRT0iSU5WQUxJRCIscDg9IlBFTkRJTkciLGFiPSJESVNBQkxFRCI7ZnVuY3Rpb24gJFAoYyl7cmV0dXJuKHRFKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1m'@;
put 'dW5jdGlvbiBxUChjLGwpe3JldHVybih0RShsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiB0RShjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBwWHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3BlbmRpbmdE'@;
put 'aXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2Fi'@;
put 'bGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29t'@;
put 'cG9zZWRWYWxpZGF0b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49bH1nZXQgcGFy'@;
put 'ZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1zYn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWVFfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1wOH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5z'@;
put 'dGF0dXM9PT1hYn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PWFifWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRh'@;
put 'dGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMu'@;
put 'c2V0VmFsaWRhdG9ycyhhWChsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYVgobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhsWChsLHRo'@;
put 'aXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMobFgobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFzQXN5bmNWYWxpZGF0'@;
put 'b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSEw'@;
put 'LHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRv'@;
put 'dWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQo'@;
put 'bCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFj'@;
put 'aENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXA4LCExIT09bC5lbWl0RXZlbnQmJnRoaXMuc3Rh'@;
put 'dHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9YWIsdGhpcy5l'@;
put 'cnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0'@;
put 'aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlz'@;
put 'LnN0YXR1cz1zYix0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJp'@;
put 'c3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0'@;
put 'aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhpcy5fc2V0SW5pdGlh'@;
put 'bFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1z'@;
put 'Ynx8dGhpcy5zdGF0dXM9PT1wOCkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQm'@;
put 'JiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0'@;
put 'eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/YWI6c2J9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpu'@;
put 'dWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1wOCx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1KSyh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz'@;
put 'Y3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRo'@;
put 'aXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQo'@;
put 'bCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJu'@;
put 'IGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1'@;
put 'cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgRXIsdGhp'@;
put 'cy5zdGF0dXNDaGFuZ2VzPW5ldyBFcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9hYjp0aGlzLmVycm9ycz9lRTp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhwOCk/cDg6'@;
put 'dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGVFKT9lRTpzYn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9h'@;
put 'bnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBk'@;
put 'YXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7'@;
put 'dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe3RFKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQu'@;
put 'ZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rp'@;
put 'b24gJG1lKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VQKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRB'@;
put 'c3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uIHFtZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9aUChjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBuRSBleHRlbmRzIHBYe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkUChhKSxxUChkLGEpKSx0aGlzLmNv'@;
put 'bnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVy'@;
put 'Q29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxh'@;
put 'LGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9s'@;
put 'c1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30p'@;
put 'e3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpk'@;
put 'LmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gZlgoYyxsLGEpe2MuX2ZvckVhY2hD'@;
put 'aGlsZCgoZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IEFyKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIGhYKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0'@;
put 'aHJvdyBuZXcgQXIoMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgQXIoMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9'@;
put 'cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlk'@;
put 'aXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobFtoXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFs'@;
put 'dWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3lu'@;
put 'Y1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChk'@;
put 'LGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVl'@;
put 'KCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+'@;
put 'KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBP'@;
put 'YmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5'@;
put 'KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgVjU9bmV3IFNpKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmxifSksbGI9ImFsd2F5cyI7ZnVuY3Rpb24gY2IoYyxsLGE9bGIpe0tQKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRl'@;
put 'VmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gSm1lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMu'@;
put 'X3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmZ1goYyxsKX0pfShjLGwpLGZ1bmN0aW9uIGU2ZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRlKGQp'@;
put 'fTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBRbWUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1'@;
put 'ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZnWChjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBYbWUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1'@;
put 'ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gb0UoYyxsKXtjLmZvckVhY2goYT0+e2EucmVn'@;
put 'aXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIG9YKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKGlYKGEs'@;
put 'bC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBzWChjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhpWChkLGwu'@;
put 'YXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtvRShsLl9yYXdWYWxpZGF0b3JzLGgpLG9FKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBn'@;
put 'WChjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgpLGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBvNmU9e3By'@;
put 'b3ZpZGU6anUsdXNlRXhpc3Rpbmc6THMoKCk9PnIyKX0sdWI9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgcjI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLnN1Ym1pdHRlZD0h'@;
put 'MSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRXIsdGhpcy5mb3JtPW5ldyBuRSh7fSxVUChhKSxaUChkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250'@;
put 'cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXt1Yi50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWQucmVnaXN0'@;
put 'ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLGNiKGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJu'@;
put 'IHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXt1Yi50'@;
put 'aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgbkUoe30pOyhmdW5jdGlvbiBtWChjLGwpe0tQKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVt'@;
put 'b3ZlRm9ybUdyb3VwKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7dWIudGhlbigo'@;
put 'KT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gdlgoYyxsKXtjLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksbC5mb3JFYWNo'@;
put 'KGE9Pntjb25zdCBkPWEuY29udHJvbDsic3VibWl0Ij09PWQudXBkYXRlT24mJmQuX3BlbmRpbmdDaGFuZ2UmJihhLnZpZXdUb01vZGVsVXBkYXRlKGQuX3BlbmRpbmdWYWx1ZSksZC5fcGVuZGluZ0NoYW5nZT0hMSl9KX0odGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJt'@;
put 'aXQuZW1pdChhKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9'@;
put 'dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGEpe3JldHVybiBhLnBvcCgpLGEubGVuZ3RoP3RoaXMuZm9ybS5nZXQoYSk6dGhpcy5mb3JtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKSh0dChpdSwxMCksdHQoeXAsMTApLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5k'@;
put 'aW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInN1Ym1pdCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TdWJtaXQoZil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25SZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6'@;
put 'e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3RpKFtvNmVdKSxlb119KSxjfSkoKTtmdW5jdGlvbiBfWChjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gYlgoYyl7cmV0dXJuIm9iamVjdCI9PXR5'@;
put 'cGVvZiBjJiZudWxsIT09YyYmMj09PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmInZhbHVlImluIGMmJiJkaXNhYmxlZCJpbiBjfWNvbnN0IGVGPWNsYXNzIGV4dGVuZHMgcFh7Y29uc3RydWN0b3IobD1udWxsLGEsZCl7c3VwZXIoJFAoYSkscVAoZCxhKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVs'@;
put 'bCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2'@;
put 'ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLHRFKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9YlgobCk/bC52YWx1ZTpsKX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhp'@;
put 'cy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxh'@;
put 'PXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5k'@;
put 'aW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXtf'@;
put 'WCh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXtfWCh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVu'@;
put 'ZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRW'@;
put 'YWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUobCl7YlgobCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxm'@;
put 'OiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGw2ZT17cHJvdmlkZTp6dSx1c2VFeGlzdGluZzpMcygoKT0+T3MpfSx3WD0oKCk9PlByb21pc2UucmVzb2x2ZSgpKSgpO2xl'@;
put 'dCBPcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenV7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9Xyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPVQsdGhpcy5jb250cm9sPW5ldyBlRix0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFt'@;
put 'ZT0iIix0aGlzLnVwZGF0ZT1uZXcgRXIsdGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIFFQKGMsbCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJh'@;
put 'eS5pc0FycmF5KGwpLGwuZm9yRWFjaChmPT57Zi5jb25zdHJ1Y3Rvcj09PVdhP2E9ZjpmdW5jdGlvbiByNmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PU41fShmKT9kPWY6aD1mfSksaHx8ZHx8YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtp'@;
put 'Zih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUu'@;
put 'cmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBhdGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIEpQKGMsbCl7aWYoIWMuaGFzT3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7'@;
put 'Y29uc3QgYT1jLm1vZGVsO3JldHVybiEhYS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3Rp'@;
put 'dmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGly'@;
put 'ZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFs'@;
put 'b25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtjYih0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRW'@;
put 'YWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25z'@;
put 'Lm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXt3WC50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5t'@;
put 'YXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmVTYoZCk7d1gudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRp'@;
put 'c2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiByRShjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGp1LDkpLHR0KGl1LDEwKSx0dCh5cCwxMCksdHQobGgsMTApLHR0KFVhLDgpLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNv'@;
put 'bnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7'@;
put 'dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3RpKFtsNmVdKSxlbyx2YV19KSxjfSkoKSxDcD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSksY30pKCk7Y29uc3QgYzZlPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOkxzKCgpPT5hRSksbXVsdGk6ITB9O2xldCBhRT0o'@;
put 'KCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57YSgiIj09ZD9udWxsOnBhcnNlRmxvYXQoZCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIs'@;
put 'ImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNoYW5nZShmLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW2M2ZV0pLGVvXX0pLGN9KSgpO2NvbnN0IHU2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpMcygoKT0+bEUpLG11bHRpOiEwfTtsZXQgQ1g9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksZDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW2EsZF0pfXJlbW92ZShh'@;
put 'KXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChkPT57dGhpcy5faXNTYW1l'@;
put 'R3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOkNYfSksY30pKCksbEU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVn'@;
put 'aXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9RmkoVjUse29wdGlvbmFsOiEwfSk/P2xifW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rv'@;
put 'ci5nZXQoenUpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0'@;
put 'eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVk'@;
put 'fHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tO'@;
put 'YW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KGQ2ZSksdHQoRWEpKX0sYy5cdTAyNzVkaXI9'@;
put 'Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2'@;
put 'YWx1ZSJ9LGZlYXR1cmVzOlt0aShbdTZlXSksZW9dfSksY30pKCk7Y29uc3QgbkY9bmV3IFNpKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLF82ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpMcygoKT0+TTApLG11bHRpOiEwfTtmdW5jdGlvbiBrWChjLGwpe3JldHVybiBudWxs'@;
put 'PT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgTTA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0'@;
put 'aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1rWCh0aGlzLl9nZXRPcHRpb25JZChhKSxhKTt0aGlzLnNldFByb3BlcnR5KCJ2'@;
put 'YWx1ZSIsaCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGQpLGEodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQo'@;
put 'YSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIGI2ZShjKXtyZXR1cm4gYy5zcGxp'@;
put 'dCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVk'@;
put 'aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVh'@;
put 'dHVyZXM6W3RpKFtfNmVdKSxlb119KSxjfSkoKSxsMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24o'@;
put 'KSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2'@;
put 'YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50'@;
put 'LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpKHR0KE5pKSx0dChGbyksdHQoTTAsOSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLGN9KSgpO2NvbnN0IHk2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpM'@;
put 'cygoKT0+ZGIpLG11bHRpOiEwfTtmdW5jdGlvbiBBWChjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgZGI9KCgp'@;
put 'PT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9'@;
put 'd3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZixfKT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZihfLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5f'@;
put 'c2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCBfPWY7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKysp'@;
put 'e2NvbnN0IGllPXRoaXMuX2dldE9wdGlvblZhbHVlKF9bVF0udmFsdWUpO2gucHVzaChpZSl9fWVsc2V7Y29uc3QgXz1kLm9wdGlvbnM7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2NvbnN0IFc9X1tUXTtpZihXLnNlbGVjdGVkKXtjb25zdCBpZT10aGlzLl9nZXRPcHRpb25WYWx1ZShX'@;
put 'LnZhbHVlKTtoLnB1c2goaWUpfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRo'@;
put 'aXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gdzZlKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEp'@;
put 'O3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVkaXI9Q3Io'@;
put 'e3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3RpKFt5NmVdKSxl'@;
put 'b119KSxjfSkoKSxjMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVl'@;
put 'KGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKEFYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhp'@;
put 'cy5fc2V0RWxlbWVudFZhbHVlKEFYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQu'@;
put 'bmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRl'@;
put 'bGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChkYiw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksY30pKCksTlg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWlu'@;
put 'aj1taSh7aW1wb3J0czpbQ1hdfSksY30pKCkscWw9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltOWF19KSxjfSkoKSxMNmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92'@;
put 'aWRlOm5GLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltOWF19KSxjfSkoKTtmdW5jdGlvbiBJNmUoYyxsKXt0aGlzLnY9Yyx0aGlzLms9bH1mdW5jdGlvbiBkRShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoZixfKXt0cnl7dmFyIFQ9Y1tmXShfKSxXPVQudmFsdWUsaWU9VyBp'@;
put 'bnN0YW5jZW9mIEk2ZTtQcm9taXNlLnJlc29sdmUoaWU/Vy52OlcpLnRoZW4oZnVuY3Rpb24ocGUpe2lmKGllKXt2YXIgd2U9InJldHVybiI9PT1mPyJyZXR1cm4iOiJuZXh0IjtpZighVy5rfHxwZS5kb25lKXJldHVybiBkKHdlLHBlKTtwZT1jW3dlXShwZSkudmFsdWV9aChULmRvbmU/InJl'@;
put 'dHVybiI6Im5vcm1hbCIscGUpfSxmdW5jdGlvbihwZSl7ZCgidGhyb3ciLHBlKX0pfWNhdGNoKHBlKXtoKCJ0aHJvdyIscGUpfX1mdW5jdGlvbiBoKGYsXyl7c3dpdGNoKGYpe2Nhc2UicmV0dXJuIjpsLnJlc29sdmUoe3ZhbHVlOl8sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOmwucmVq'@;
put 'ZWN0KF8pO2JyZWFrO2RlZmF1bHQ6bC5yZXNvbHZlKHt2YWx1ZTpfLGRvbmU6ITF9KX0obD1sLm5leHQpP2QobC5rZXksbC5hcmcpOmE9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZixfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVCxXKXt2YXIgaWU9e2tleTpmLGFyZzpfLHJl'@;
put 'c29sdmU6VCxyZWplY3Q6VyxuZXh0Om51bGx9O2E/YT1hLm5leHQ9aWU6KGw9YT1pZSxkKGYsXykpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBjLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9ZEUucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0'@;
put 'ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZEUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsYyl9LGRFLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0'@;
put 'aHJvdyIsYyl9LGRFLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixjKX07Y2xhc3MgaEV7c3RhdGljIGdldFRyYXBFbGVtZW50cygpe3JldHVyblsuLi4kbC5zdGF0ZS5mb2N1c1RyYXBJdGVtc119c3RhdGljIHNldFRyYXBFbGVtZW50'@;
put 'cyhsKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKTtudWxsIT09YSYmZnVuY3Rpb24gc0YoYywuLi5sKXtjJiZsLmZvckVhY2goKFthLGRdKT0+eyExPT09ZHx8bnVsbD09PWQ/Yy5yZW1vdmVBdHRyaWJ1dGUoYSk6Yy5zZXRBdHRyaWJ1dGUoYSxkKyIiKX0pfShhLFsi'@;
put 'Y2RzLWZvY3VzLXRyYXAiLCEhbC5sZW5ndGgmJiIiXSksJGwuc3RhdGUuZm9jdXNUcmFwSXRlbXM9Wy4uLmxdfXN0YXRpYyByZW1vdmVUcmFwRWxlbWVudChsKXt0aGlzLmdldFRyYXBFbGVtZW50cygpLmxlbmd0aDwxfHx0aGlzLnNldFRyYXBFbGVtZW50cyhbLi4udGhpcy5nZXRUcmFwRWxl'@;
put 'bWVudHMoKS5maWx0ZXIoYT0+YS5mb2N1c1RyYXBJZCE9PWwuZm9jdXNUcmFwSWQpXSl9c3RhdGljIHNldEN1cnJlbnQobCl7bD8uZm9jdXNUcmFwSWQmJnRoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpLmZpbHRlcihhPT5hLmZvY3VzVHJhcElkIT09bC5m'@;
put 'b2N1c1RyYXBJZCksbF0pfXN0YXRpYyBhY3RpdmF0ZVByZXZpb3VzQ3VycmVudCgpe3RoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpXS5zbGljZSgwLC0xKSl9c3RhdGljIGdldEN1cnJlbnQoKXtyZXR1cm4gZnVuY3Rpb24gUjZlKGMpe3JldHVybiBjLmxl'@;
put 'bmd0aD9jW2MubGVuZ3RoLTFdOnZvaWQgMH0odGhpcy5nZXRUcmFwRWxlbWVudHMoKSl8fG51bGx9fWNvbnN0IFo2ZT1rSygzLChjLGwsYSk9PnshZnVuY3Rpb24gYW1lKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8'@;
put 'fGZ1bmN0aW9uIFpnZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxsKSxUSygpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09'@;
put 'YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6SDUud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBCWChjLGwpe2dLKCkmJkFLKFsiY3VzdG9t'@;
put 'RWxlbWVudHMiXSkmJlo2ZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX1sZXQgalg9ITE7ZnVuY3Rpb24gWTZlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighalgpe2pYPSEw'@;
put 'O2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WTZlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw'@;
put 'fSl9bGV0IHpYPSExLFVYPSExO2Z1bmN0aW9uIFpYKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0s'@;
put 'c2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9elh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChaWChFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSx6WD0hMCks'@;
put 'VVh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KFVYPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1'@;
put 'cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwi'@;
put 'LCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dT'@;
put 'cGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2goYz0+WlgoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgZkU9d2luZG93LGFG'@;
put 'PWZFLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1mRS5TaGFkeUNTU3x8ZkUuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLGxGPVN5bWJvbCgpLFlYPW5ldyBX'@;
put 'ZWFrTWFwO2NsYXNzIFdYe2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09bEYpdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhp'@;
put 'cy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoYUYmJnZvaWQgMD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPVlYLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVw'@;
put 'bGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZZWC5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBjRj0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsoXz0+e2lmKCEwPT09Xy5fJGNz'@;
put 'c1Jlc3VsdCQpcmV0dXJuIF8uY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIF8pcmV0dXJuIF87dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK18rIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mg'@;
put 'bm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgV1goYSxjLGxGKX0sR1g9YUY/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25z'@;
put 'dCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVybihjPT5uZXcgV1goInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsbEYpKShhKX0pKGMpOmM7dmFyIHVGO2NvbnN0IHBFPXdpbmRvdywkWD1wRS50cnVzdGVkVHlwZXMsJDZlPSRYPyRYLmVtcHR5U2NyaXB0OiIiLHFY'@;
put 'PXBFLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxkRj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz8kNmU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9t'@;
put 'QXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1y'@;
put 'ZXR1cm4gYX19LEtYPShjLGwpPT5sIT09YyYmKGw9PWx8fGM9PWMpLGhGPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmRGLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpLWH0sZkY9ImZpbmFsaXplZCI7Y2xhc3MgZzggZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigp'@;
put 'e3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMudSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lk'@;
put 'IDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09'@;
put 'aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPWhGKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlz'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1z'@;
put 'dGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0'@;
put 'UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8aEZ9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShmRikpcmV0dXJuITE7dGhpc1tmRl09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYo'@;
put 'bC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnBy'@;
put 'b3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXpl'@;
put 'U3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChHWChoKSl9ZWxzZSB2b2lkIDAh'@;
put 'PT1sJiZhLnB1c2goR1gobCkpO3JldHVybiBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9sLnRvTG93ZXJDYXNlKCk6dm9pZCAwfXUoKXt2YXIgbDt0aGlzLl8k'@;
put 'RV89bmV3IFByb21pc2UoYT0+dGhpcy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRy'@;
put 'b2xsZXIobCl7dmFyIGEsZDsobnVsbCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVsbD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2Fs'@;
put 'bChsKSl9cmVtb3ZlQ29udHJvbGxlcihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlz'@;
put 'Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3QpJiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25z'@;
put 'dHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuKChjLGwpPT57YUY/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9yRWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpLGg9ZkUubGl0Tm9uY2U7dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBs'@;
put 'O3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1h'@;
put 'Lmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShk'@;
put 'PWEuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1oRil7dmFyIGg7Y29uc3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAh'@;
put 'PT1mJiYhMD09PWQucmVmbGVjdCl7Y29uc3QgXz0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOmRGKS50b0F0dHJpYnV0ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09Xz90aGlzLnJlbW92'@;
put 'ZUF0dHJpYnV0ZShmKTp0aGlzLnNldEF0dHJpYnV0ZShmLF8pLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1mJiZ0aGlzLl8kRWwhPT1mKXtjb25zdCBfPWguZ2V0UHJvcGVydHlPcHRp'@;
put 'b25zKGYpLFQ9ImZ1bmN0aW9uIj09dHlwZW9mIF8uY29udmVydGVyP3tmcm9tQXR0cmlidXRlOl8uY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPV8uY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5mcm9tQXR0cmlidXRlKT9fLmNvbnZlcnRlcjpkRjt0aGlzLl8kRWw9Zix0'@;
put 'aGlzW2ZdPVQuZnJvbUF0dHJpYnV0ZShhLF8udHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fEtYKSh0aGlzW2xdLGEp'@;
put 'Pyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYo'@;
put 'dGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVjdChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVs'@;
put 'bCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2NoZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRlUGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVh'@;
put 'Y2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3Zh'@;
put 'ciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVrKCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShs'@;
put 'KXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhp'@;
put 'cy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0'@;
put 'aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShsKXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVDPXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRh'@;
put 'dGVkKGwpe319dmFyIHBGO2c4W2ZGXT0hMCxnOC5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwLGc4LmVsZW1lbnRTdHlsZXM9W10sZzguc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSxxWD8uKHtSZWFjdGl2ZUVsZW1lbnQ6Zzh9KSwobnVsbCE9PSh1Rj1wRS5yZWFjdGl2ZUVsZW1l'@;
put 'bnRWZXJzaW9ucykmJnZvaWQgMCE9PXVGP3VGOnBFLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMiIpO2NvbnN0IGdFPXdpbmRvdyxtOD1nRS50cnVzdGVkVHlwZXMsWFg9bTg/bTguY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6Yz0+Y30pOnZvaWQg'@;
put 'MCxtRT0iJGxpdCQiLFRmPWBsaXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsZ0Y9Ij8iK1RmLHE2ZT1gPCR7Z0Z9PmAsajU9ZG9jdW1lbnQsaGI9KCk9Pmo1LmNyZWF0ZUNvbW1lbnQoIiIpLGZiPWM9Pm51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBjLEpYPUFycmF5LmlzQXJyYXksbUY9IlsgXHRcblxmXHJdIixwYj0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxlSj0vLS0+L2csdEo9Lz4vZyx6NT1SZWdFeHAoYD58JHttRn0oPzooW15cXHMiJz49L10rKSgke21GfSo9JHtt'@;
put 'Rn0qKD86W14gXHRcblxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSxuSj0vJy9nLHJKPS8iL2csaUo9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLG9KPWM9PihsLC4uLmEpPT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSx2Rj1vSigxKSxLNmU9'@;
put 'b0ooMiksdjg9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksRGM9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxzSj1uZXcgV2Vha01hcCxVNT1qNS5jcmVhdGVUcmVlV2Fsa2VyKGo1LDEyOSxudWxsLCExKTtmdW5jdGlvbiBhSihjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNP'@;
put 'd25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1YWD9YWC5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgZ2J7Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFy'@;
put 'dHM9W107bGV0IGY9MCxfPTA7Y29uc3QgVD1sLmxlbmd0aC0xLFc9dGhpcy5wYXJ0cyxbaWUscGVdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxzdmc+IjoiIixfPXBiO2ZvcihsZXQgVD0wO1Q8YTtUKyspe2NvbnN0IFc9Y1tUXTtsZXQgaWUscGUs'@;
put 'd2U9LTEsRWU9MDtmb3IoO0VlPFcubGVuZ3RoJiYoXy5sYXN0SW5kZXg9RWUscGU9Xy5leGVjKFcpLG51bGwhPT1wZSk7KUVlPV8ubGFzdEluZGV4LF89PT1wYj8iIS0tIj09PXBlWzFdP189ZUo6dm9pZCAwIT09cGVbMV0/Xz10Sjp2b2lkIDAhPT1wZVsyXT8oaUoudGVzdChwZVsyXSkmJiho'@;
put 'PVJlZ0V4cCgiPC8iK3BlWzJdLCJnIikpLF89ejUpOnZvaWQgMCE9PXBlWzNdJiYoXz16NSk6Xz09PXo1PyI+Ij09PXBlWzBdPyhfPWg/P3BiLHdlPS0xKTp2b2lkIDA9PT1wZVsxXT93ZT0tMjood2U9Xy5sYXN0SW5kZXgtcGVbMl0ubGVuZ3RoLGllPXBlWzFdLF89dm9pZCAwPT09cGVbM10/'@;
put 'ejU6JyInPT09cGVbM10/cko6bkopOl89PT1ySnx8Xz09PW5KP189ejU6Xz09PWVKfHxfPT09dEo/Xz1wYjooXz16NSxoPXZvaWQgMCk7Y29uc3QgWmU9Xz09PXo1JiZjW1QrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9Xz09PXBiP1crcTZlOndlPj0wPyhkLnB1c2goaWUpLFcuc2xp'@;
put 'Y2UoMCx3ZSkrbUUrVy5zbGljZSh3ZSkrVGYrWmUpOlcrVGYrKC0yPT09d2U/KGQucHVzaCh2b2lkIDApLFQpOlplKX1yZXR1cm5bYUooYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9Z2IuY3JlYXRlRWxlbWVudChpZSxkKSxVNS5j'@;
put 'dXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IHdlPXRoaXMuZWwuY29udGVudCxFZT13ZS5maXJzdENoaWxkO0VlLnJlbW92ZSgpLHdlLmFwcGVuZCguLi5FZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD1VNS5uZXh0Tm9kZSgpKSYmVy5sZW5ndGg8VDspe2lmKDE9'@;
put 'PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3Qgd2U9W107Zm9yKGNvbnN0IEVlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihFZS5lbmRzV2l0aChtRSl8fEVlLnN0YXJ0c1dpdGgoVGYpKXtjb25zdCBaZT1wZVtfKytdO2lmKHdlLnB1c2goRWUpLHZvaWQgMCE9'@;
put 'PVplKXtjb25zdCBpdD1oLmdldEF0dHJpYnV0ZShaZS50b0xvd2VyQ2FzZSgpK21FKS5zcGxpdChUZiksZXQ9LyhbLj9AXSk/KC4qKS8uZXhlYyhaZSk7Vy5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOmV0WzJdLHN0cmluZ3M6aXQsY3RvcjoiLiI9PT1ldFsxXT91SjoiPyI9PT1ldFsxXT9k'@;
put 'SjoiQCI9PT1ldFsxXT9oSjptYn0pfWVsc2UgVy5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCBFZSBvZiB3ZSloLnJlbW92ZUF0dHJpYnV0ZShFZSl9aWYoaUoudGVzdChoLnRhZ05hbWUpKXtjb25zdCB3ZT1oLnRleHRDb250ZW50LnNwbGl0KFRmKSxFZT13ZS5sZW5ndGgtMTtp'@;
put 'ZihFZT4wKXtoLnRleHRDb250ZW50PW04P204LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgWmU9MDtaZTxFZTtaZSsrKWguYXBwZW5kKHdlW1plXSxoYigpKSxVNS5uZXh0Tm9kZSgpLFcucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKHdlW0VlXSxoYigpKX19fWVsc2UgaWYoOD09'@;
put 'PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09Z0YpVy5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IHdlPS0xO2Zvcig7LTEhPT0od2U9aC5kYXRhLmluZGV4T2YoVGYsd2UrMSkpOylXLnB1c2goe3R5cGU6NyxpbmRleDpmfSksd2UrPVRmLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0'@;
put 'ZUVsZW1lbnQobCxhKXtjb25zdCBkPWo1LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gWjUoYyxsLGE9YyxkKXt2YXIgaCxmLF8sVDtpZihsPT09djgpcmV0dXJuIGw7bGV0IFc9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8'@;
put 'dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgaWU9ZmIobCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBXPy5jb25zdHJ1Y3RvciE9PWllJiYobnVsbD09PShmPVc/Ll8kQU8pfHx2b2lkIDA9PT1mfHxmLmNhbGwoVywhMSksdm9pZCAwPT09aWU/Vz12b2lkIDA6'@;
put 'KFc9bmV3IGllKGMpLFcuXyRBVChjLGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0oXz0oVD1hKS5fJENvKSYmdm9pZCAwIT09Xz9fOlQuXyRDbz1bXSlbZF09VzphLl8kQ2w9Vyksdm9pZCAwIT09VyYmKGw9WjUoYyxXLl8kQVMoYyxsLnZhbHVlcyksVyxkKSksbH1jbGFzcyBjSntjb25zdHJ1'@;
put 'Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2Nv'@;
put 'bnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOmo1KS5pbXBvcnROb2RlKGQsITApO1U1LmN1cnJlbnROb2RlPWY7bGV0IF89VTUubmV4dE5vZGUoKSxUPTAsVz0wLGllPWhbMF07Zm9yKDt2b2lkIDAhPT1pZTsp'@;
put 'e2lmKFQ9PT1pZS5pbmRleCl7bGV0IHBlOzI9PT1pZS50eXBlP3BlPW5ldyBfOChfLF8ubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09aWUudHlwZT9wZT1uZXcgaWUuY3RvcihfLGllLm5hbWUsaWUuc3RyaW5ncyx0aGlzLGwpOjY9PT1pZS50eXBlJiYocGU9bmV3IGZKKF8sdGhpcyxsKSksdGhp'@;
put 'cy5fJEFWLnB1c2gocGUpLGllPWhbKytXXX1UIT09aWU/LmluZGV4JiYoXz1VNS5uZXh0Tm9kZSgpLFQrKyl9cmV0dXJuIFU1LmN1cnJlbnROb2RlPWo1LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8k'@;
put 'QUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIF84e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1EYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1k'@;
put 'LHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6'@;
put 'dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQg'@;
put 'ZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7bD1aNSh0aGlzLGwsYSksZmIobCk/bD09PURjfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PURjJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9RGMpOmwhPT10aGlzLl8kQUgmJmwhPT12OCYmdGhpcy5fKGwpOnZv'@;
put 'aWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PkpYKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5v'@;
put 'ZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PURjJiZmYih0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKGo1LmNyZWF0ZVRl'@;
put 'eHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPWdiLmNyZWF0ZUVsZW1lbnQoYUooaC5oLGguaFswXSksdGhpcy5vcHRpb25z'@;
put 'KSksaCk7aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09Zil0aGlzLl8kQUgudihkKTtlbHNle2NvbnN0IF89bmV3IGNKKGYsdGhpcyksVD1fLnUodGhpcy5vcHRpb25zKTtfLnYoZCksdGhpcy4kKFQpLHRoaXMuXyRBSD1ffX1fJEFDKGwpe2xl'@;
put 'dCBhPXNKLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZzSi5zZXQobC5zdHJpbmdzLGE9bmV3IGdiKGwpKSxhfVQobCl7SlgodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwp'@;
put 'aD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBfOCh0aGlzLmsoaGIoKSksdGhpcy5rKGhiKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRo'@;
put 'aXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIg'@;
put 'YTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1EYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMu'@;
put 'ZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPURjfWdldCB0YWdO'@;
put 'YW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgXz0hMTtpZih2b2lkIDA9PT1mKWw9WjUodGhpcyxsLGEsMCksXz0hZmIobCl8fGwhPT10aGlz'@;
put 'Ll8kQUgmJmwhPT12OCxfJiYodGhpcy5fJEFIPWwpO2Vsc2V7Y29uc3QgVD1sO2xldCBXLGllO2ZvcihsPWZbMF0sVz0wO1c8Zi5sZW5ndGgtMTtXKyspaWU9WjUodGhpcyxUW2QrV10sYSxXKSxpZT09PXY4JiYoaWU9dGhpcy5fJEFIW1ddKSxffHwoXz0hZmIoaWUpfHxpZSE9PXRoaXMuXyRB'@;
put 'SFtXXSksaWU9PT1EYz9sPURjOmwhPT1EYyYmKGwrPShpZT8/IiIpK2ZbVysxXSksdGhpcy5fJEFIW1ddPWllfV8mJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09RGM/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5u'@;
put 'YW1lLGw/PyIiKX19Y2xhc3MgdUogZXh0ZW5kcyBtYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09RGM/dm9pZCAwOmx9fWNvbnN0IFg2ZT1tOD9tOC5lbXB0eVNjcmlwdDoiIjtjbGFzcyBkSiBl'@;
put 'eHRlbmRzIG1ie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGwpe2wmJmwhPT1EYz90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxYNmUpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgaEogZXh0'@;
put 'ZW5kcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPVo1KHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOkRjKT09PXY4KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9'@;
put 'PT1EYyYmaCE9PURjfHxsLmNhcHR1cmUhPT1oLmNhcHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLF89bCE9PURjJiYoaD09PURjfHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSxfJiZ0aGlzLmVsZW1l'@;
put 'bnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3Zv'@;
put 'aWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgZkp7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25z'@;
put 'PWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtaNSh0aGlzLGwpfX1jb25zdCBwSj1nRS5saXRIdG1sUG9seWZpbGxTdXBwb3J0O3BKPy4oZ2IsXzgpLChudWxsIT09KHBGPWdFLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PXBGP3BGOmdFLmxpdEh0bWxWZXJz'@;
put 'aW9ucz1bXSkucHVzaCgiMi43LjUiKTtjb25zdCBnSj0oYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgXz1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09Xyl7Y29uc3QgVD1udWxsIT09KGg9YT8ucmVuZGVyQmVm'@;
put 'b3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPV89bmV3IF84KGwuaW5zZXJ0QmVmb3JlKGhiKCksVCksVCx2b2lkIDAsYT8/e30pfXJldHVybiBfLl8kQUkoYyksX307dmFyIF9GLGJGO2NsYXNzIGI4IGV4dGVuZHMgZzh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu'@;
put 'dHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbCxhO2NvbnN0IGQ9c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybiBudWxsIT09KGw9KGE9dGhpcy5yZW5kZXJPcHRpb25zKS5yZW5kZXJCZWZvcmUp'@;
put 'JiZ2b2lkIDAhPT1sfHwoYS5yZW5kZXJCZWZvcmU9ZC5maXJzdENoaWxkKSxkfXVwZGF0ZShsKXtjb25zdCBhPXRoaXMucmVuZGVyKCk7dGhpcy5oYXNVcGRhdGVkfHwodGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkPXRoaXMuaXNDb25uZWN0ZWQpLHN1cGVyLnVwZGF0ZShsKSx0aGlz'@;
put 'Ll8kRG89Z0ooYSx0aGlzLnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRD'@;
put 'YWxsYmFjaygpe3ZhciBsO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gdjh9fWI4LmZpbmFsaXplZD0hMCxiOC5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oX0Y9'@;
put 'Z2xvYmFsVGhpcy5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT1fRnx8X0YuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50OmI4fSk7Y29uc3QgbUo9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O21KPy4oe0xpdEVsZW1lbnQ6Yjh9KSwobnVsbCE9PShi'@;
put 'Rj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PWJGP2JGOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMiIpO2NvbnN0IHZKPWNGYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlv'@;
put 'dXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNk'@;
put 'cy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxh'@;
put 'eW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWlt'@;
put 'cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1b'@;
put 'Y2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2Vu'@;
put 'dGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0'@;
put 'cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1s'@;
put 'YXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXth'@;
put 'bGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0'@;
put 'OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2Fs'@;
put 'aWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXth'@;
put 'bGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2Zs'@;
put 'ZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2Fs'@;
put 'aWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxd'@;
put 'PltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt'@;
put 'bGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1j'@;
put 'b250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0'@;
put 'byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdo'@;
put 'dCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpz'@;
put 'dHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRj'@;
put 'aH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p'@;
put 'dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy'@;
put 'fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmlu'@;
put 'c2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9'@;
put 'ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dh'@;
put 'cDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFk'@;
put 'ZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60Nikh'@;
put 'aW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRp'@;
put 'bmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBt'@;
put 'ZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpv'@;
put 'bnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgt'@;
put 'Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4t'@;
put 'Ym90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRl'@;
put 'cn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6'@;
put 'YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRv'@;
put 'bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6'@;
put 'cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl'@;
put 'ZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6'@;
put 'OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRp'@;
put 'YSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJn'@;
put 'aW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1j'@;
put 'ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9'@;
put 'ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz'@;
put 'LWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs'@;
put 'b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBv'@;
put 'cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21h'@;
put 'cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZl'@;
put 'cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhv'@;
put 'cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs'@;
put 'XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWlt'@;
put 'cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNl'@;
put 'bGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0p'@;
put 'e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6'@;
put 'ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0p'@;
put 'e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmln'@;
put 'aHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJv'@;
put 'dHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDox'@;
put 'MjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNl'@;
put 'bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDph'@;
put 'dXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb'@;
put 'Y2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv'@;
put 'bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRl'@;
put 'ciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIi'@;
put 'XSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9y'@;
put 'dGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49'@;
put 'Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNk'@;
put 'cy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkw'@;
put 'MCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5s'@;
put 'aW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigt'@;
put 'LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10'@;
put 'eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNw'@;
put 'bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0t'@;
put 'Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rp'@;
put 'c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2Vt'@;
put 'KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x'@;
put 'NDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwx'@;
put 'LjE2NjY3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2Vp'@;
put 'Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo'@;
put 'dCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0'@;
put 'aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5'@;
put 'LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LXN1YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS4yNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7'@;
put 'ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEu'@;
put 'MjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt'@;
put 'aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u'@;
put 'LWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1i'@;
put 'b2R5LWZvbnQtc2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZywtLjAxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5'@;
put 'cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln'@;
put 'aHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDow'@;
put 'O21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt'@;
put 'aGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2Nv'@;
put 'bnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv'@;
put 'Z3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuMjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz'@;
put 'LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5'@;
put 'OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWln'@;
put 'aHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnld'@;
put 'OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u'@;
put 'ZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt'@;
put 'dHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwj'@;
put 'MDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29s'@;
put 'b3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xv'@;
put 'ci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1m'@;
put 'YW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRl'@;
put 'bjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9y'@;
put 'dGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzou'@;
put 'MDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtj'@;
put 'ZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtj'@;
put 'b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJv'@;
put 'dHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp'@;
put 'ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jl'@;
put 'e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10'@;
put 'ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt'@;
put 'YXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJp'@;
put 'dDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpu'@;
put 'b25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNw'@;
put 'bGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29s'@;
put 'b3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1'@;
put 'cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1l'@;
put 'dmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6'@;
put 'OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2li'@;
put 'bGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9j'@;
put 'dXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIHlGKGMpe3JldHVy'@;
put 'bmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgbjhlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXks'@;
put 'Yyl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMp'@;
put 'KX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LHI4ZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlvbiBfSihjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9yOGUoYyxsLGEpOm44ZShjLGwpfWZ1bmN0aW9uIGJKKGMs'@;
put 'bCl7c3dpdGNoKGwmJmwudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVjdDohMSwuLi5sfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hfHxudWxsfSwuLi5sfTtjYXNlIE51bWJl'@;
put 'cjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksLi4ubH07Y2FzZSBCb29sZWFuOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpGNShjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmE/IiI6bnVsbCxmcm9tQXR0cmlidXRlOmE9PmZ1bmN0aW9uIFU2ZShjKXtyZXR1cm4g'@;
put 'bnVsbCE9YyYmIiIrYyE9ImZhbHNlIn0oYSl9LC4uLmx9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVjdDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6YT0+bmV3IERhdGUoYSl9LC4uLmx9O2RlZmF1bHQ6cmV0dXJuey4uLmx9fX1mdW5jdGlvbiBrbChjKXtyZXR1cm4obCxhKT0+KGM/LnJl'@;
put 'cXVpcmVkJiZmdW5jdGlvbiBpOGUoYyxsLGEpe2NvbnN0IGQ9Yy5maXJzdFVwZGF0ZWQ7Yy5maXJzdFVwZGF0ZWQ9ZnVuY3Rpb24oaCl7aWYoYSYmYS5yZXF1aXJlZCYmX3AodGhpc1tsXSkpe2NvbnN0IGY9YS5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKF89Indhcm5pbmciLFQsVyl7Y29u'@;
put 'c3QgaWU9Vy50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke0NLKF8pfTogJHtUfSBpcyByZXF1aXJlZCB0byB1c2UgJHtpZX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyh2SygpP2BBbmd1bGFyOiA8JHtpZX0gWyR7VH1dPSIuLi4i'@;
put 'PjwvJHtpZX0+XG5gOiIiKSsoYksoKT9gVnVlOiA8JHtpZX0gOiR7VH09Ii4uLiI+PC8ke2llfT5cbmA6IiIpKyhfSygpP2BSZWFjdDogPCR7ZnVuY3Rpb24gV2dlKGMpe3JldHVybiBDSyhmdW5jdGlvbiBZZ2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQo'@;
put 'MCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oaWUpfSAke3BlPVQscGUuc3RhcnRzV2l0aCgiYXJpYSIpP0Y1KHBlKTpwZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtpZX0gJHtGNShUKX09Ii4uLiI+PC8ke2llfT5cbkphdmFT'@;
put 'Y3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7aWV9JykuJHtUfSA9ICcuLi4nO1xuXG5gO3ZhciBwZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7SDUud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgp'@;
put 'fX0obCxhLGMpLF9KKGJKKGEsYykpKGwsYSkpfWZ1bmN0aW9uIHlKKGMpe3JldHVybihsLGEpPT57Y29uc3QgZD1iSihhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitGNShh'@;
put 'KSkpLF9KKGQpKGwsYSl9fXZhciBjaCxhOGU9Y0ZgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcs'@;
put 'Y2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3Ip'@;
put 'O2NvbG9yOnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lk'@;
put 'dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0'@;
put 'aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZh'@;
put 'cigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dp'@;
put 'ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6'@;
put 'dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13'@;
put 'aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNl'@;
put 'LDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2Rz'@;
put 'LWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz'@;
put 'ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp'@;
put 'KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2Rz'@;
put 'LWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAy'@;
put 'MjAwKSl9Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z'@;
put 'dGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYx'@;
put 'NjkpKX06aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4'@;
put 'MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9'@;
put 'Omhvc3QoW2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDAp'@;
put 'KSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxp'@;
put 'YXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04'@;
put 'MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5'@;
put 'YWQpKX06aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2Ut'@;
put 'Y29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1i'@;
put 'YWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct'@;
put 'ZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFs'@;
put 'aWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5B'@;
put 'bmRPdXQgMS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1p'@;
put 'bnRlcm5hbC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2Z1bmN0aW9uIGQ4ZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBsOGUoYyl7c3dpdGNoKCEwKXtjYXNlIF9wKGMpOnJldHVybiBjaC5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiB3Sihj'@;
put 'KXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gY2guVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gY0soYyl7cmV0dXJuIExQKGMpJiYhbEsoYy50cmltKCkpJiYrYz09K2N9KGMpOnJldHVybiBjaC5WYWxp'@;
put 'ZE51bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gY2guQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gYzhlKGMpe3JldHVybiBfcChjKT8iIjpmdW5jdGlvbiBHZ2UoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYhPT1sKTpkLm1hcChmPT5mPT09'@;
put 'bD9hOmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIGNoLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT15RihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBlOGUoYywuLi5sKXtsLmZvckVhY2goKFthLGRdKT0+e2Muc3R5bGVbYV09'@;
put 'ZH0pfShjLC4uLmZ1bmN0aW9uIHU4ZShjLGwpe3JldHVybiF0YihjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsiaGVpZ2h0IixsXSxbIm1pbi13'@;
put 'aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgY2guVmFsaWRTaXplU3RyaW5nOmNhc2UgY2guTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIHQ4ZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3aWR0aCIsImhlaWdodCIsIm1p'@;
put 'bi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gd0YoYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0hZnVuY3Rpb24oYyl7Yy5CYWRTaXplVmFsdWU9ImJhZC12'@;
put 'YWx1ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwifShjaHx8KGNoPXt9KSk7Y2xhc3MgbzIgZXh0ZW5kcyBiOHtjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW3ZKLGE4ZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShsKXtpZihmdW5jdGlvbiBQZ2UoYyxs'@;
put 'KXtyZXR1cm4hX3AoYykmJmRLKGMsbCl9KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gT2dlKGMs'@;
put 'bCl7cmV0dXJuIGZ1bmN0aW9uIFJnZShjKXtyZXR1cm4gWngoU3RyaW5nLGMpfHx0YihjKX0oYykmJmRLKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsZDhlKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19dXBkYXRlZChs'@;
put 'KXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPXlGKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7eUYoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0eWxlLmhlaWdo'@;
put 'dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPSRsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+'@;
put 'eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJlZzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gTFAoVnMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP3ZGYDxzcGFuIC5pbm5lckhUTUw9IiR7VnMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpLNmVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9u'@;
put 'IGY4ZShjKXtjb25zdCBsPVZzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9Wcy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiF3RihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdl'@;
put 'ZD8/YSksd0YoYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gaDhlKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZ3RihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAw'@;
put 'MDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94'@;
put 'PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fU10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsInNp'@;
put 'emUiLG51bGwpLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sbzIucHJvdG90eXBlLCJzb2xpZCIsdm9p'@;
put 'ZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLE10KFtrbCh7dHlwZTpCb29sZWFufSldLG8yLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCks'@;
put 'TXQoW3lKKHt0eXBlOk51bWJlcn0pXSxvMi5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLE10KFtmdW5jdGlvbiBzOGUoYyxsKXtyZXR1cm4oKHtmaW5pc2hlcjpjLGRlc2NyaXB0b3I6bH0pPT4oYSxkKT0+e3ZhciBoO2lmKHZvaWQgMD09PWQpe2NvbnN0IGY9bnVsbCE9PShoPWEu'@;
put 'b3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1oP2g6YS5rZXksXz1udWxsIT1sP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6ZixkZXNjcmlwdG9yOmwoYS5rZXkpfTp7Li4uYSxrZXk6Zn07cmV0dXJuIG51bGwhPWMmJihfLmZpbmlzaGVyPWZ1bmN0aW9uKFQpe2MoVCxm'@;
put 'KX0pLF99e2NvbnN0IGY9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLGwoZCkpLGM/LihmLGQpfX0pKHtkZXNjcmlwdG9yOmE9Pntjb25zdCBkPXtnZXQoKXt2YXIgaCxmO3JldHVybiBudWxsIT09KGY9bnVsbD09PShoPXRoaXMucmVuZGVyUm9v'@;
put 'dCl8fHZvaWQgMD09PWg/dm9pZCAwOmgucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PWY/ZjpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYobCl7Y29uc3QgaD0ic3ltYm9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2QuZ2V0PWZ1bmN0aW9uKCl7dmFyIGYs'@;
put 'XztyZXR1cm4gdm9pZCAwPT09dGhpc1toXSYmKHRoaXNbaF09bnVsbCE9PShfPW51bGw9PT0oZj10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1fP186bnVsbCksdGhpc1toXX19cmV0dXJuIGR9fSl9KCJzdmciKV0sbzIu'@;
put 'cHJvdG90eXBlLCJzdmciLHZvaWQgMCksQlgoImNkcy1pY29uIixvMik7Y2xhc3MgZzhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt2YXIgbD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt5aWVsZCBs'@;
put 'Lmhvc3QudXBkYXRlQ29tcGxldGUsbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGE9PmwuZW11bGF0ZUFjdGl2ZShhKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYT0+bC5lbXVsYXRlQWN0aXZlKGEpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5'@;
put 'dXAiLCgpPT5sLmVtdWxhdGVJbmFjdGl2ZSgpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PmwuZW11bGF0ZUluYWN0aXZlKCkpLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+bC5lbXVsYXRlSW5hY3RpdmUoKSl9KSgpfWVtdWxhdGVBY3RpdmUobCl7'@;
put 'dGhpcy5ob3N0LmRpc2FibGVkfHx0aGlzLmhvc3Q/LnNldEF0dHJpYnV0ZSgiY2RzLWFjdGl2ZSIsIiIpLCJTcGFjZSI9PT1sLmNvZGUmJmwudGFyZ2V0PT09dGhpcy5ob3N0JiZsLnByZXZlbnREZWZhdWx0KCl9ZW11bGF0ZUluYWN0aXZlKCl7dGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgi'@;
put 'Y2RzLWFjdGl2ZSIpfX1jbGFzcyB2OGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpeyh0aGlzLmhvc3QuaGFzQXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil8fHRoaXMuaG9zdC5hcmlhQ29udHJvbHMpJiYo'@;
put 'dGhpcy5ob3N0LmFyaWFIYXNQb3B1cD0idHJ1ZSIsdGhpcy5ob3N0LmFyaWFFeHBhbmRlZD0iZmFsc2UiKX19Y2xhc3MgYjhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9PXRoaXMuaG9zdC5kaXNh'@;
put 'YmxlZCYmKHRoaXMuaG9zdC5hcmlhRGlzYWJsZWQ9dGhpcy5ob3N0LmRpc2FibGVkKSx0aGlzLmhvc3QucmVhZG9ubHkmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPW51bGwpfX1jbGFzcyB3OGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhp'@;
put 'cyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QucHJlc3NlZCYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD10aGlzLmhvc3QucHJlc3NlZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFQcmVzc2VkPW51bGwpfX1jbGFzcyBTOGV7Y29uc3Ry'@;
put 'dWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpe3RoaXMuaG9zdC50YWJJbmRleD0wfWhvc3RVcGRhdGVkKCl7dGhpcy5ob3N0LnJvbGU9dGhpcy5ob3N0LnJlYWRvbmx5P251bGw6ImJ1dHRvbiIsdGhpcy5ob3N0LnRhYklu'@;
put 'ZGV4PXRoaXMuaG9zdC5kaXNhYmxlZD8tMTowLHRoaXMuaG9zdC5yZWFkb25seSYmdGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX19Y2xhc3MgeDhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWdldCBjdXJyZW50'@;
put 'QW5jaG9yKCl7cmV0dXJuIkEiPT09dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU/dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ6bnVsbH1ob3N0Q29ubmVjdGVkKCl7dGhpcy5zZXRBbmNob3IoKX1ob3N0VXBkYXRlZCgpe3RoaXMuc2V0QW5jaG9yKCl9c2V0QW5jaG9yKCl7dGhpcy5j'@;
put 'dXJyZW50QW5jaG9yJiZ0aGlzLmN1cnJlbnRBbmNob3IhPT10aGlzLnByZXZpb3VzQW5jaG9yJiYodGhpcy5wcmV2aW91c0FuY2hvcj10aGlzLmN1cnJlbnRBbmNob3IsdGhpcy5ob3N0LnJlYWRvbmx5PSEwLHRoaXMuY3VycmVudEFuY2hvci5zdHlsZS5saW5lSGVpZ2h0PSIwIix0aGlzLmN1'@;
put 'cnJlbnRBbmNob3Iuc3R5bGUudGV4dERlY29yYXRpb249Im5vbmUiKX19Y29uc3QgQ0Y9Yz0+Yz8/RGM7ZnVuY3Rpb24gQ0ooYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCl9Y29uc3QgU0Y9bmV3IE1hcChbWyJhcnJvdy1sZWZ0IiwiQXJyb3dMZWZ0Il0sWyJhcnJv'@;
put 'dy1yaWdodCIsIkFycm93UmlnaHQiXSxbImFycm93LXVwIiwiQXJyb3dVcCJdLFsiYXJyb3ctZG93biIsIkFycm93RG93biJdLFsidGFiIiwiVGFiIl0sWyJlbnRlciIsIkVudGVyIl0sWyJlc2NhcGUiLCJFc2NhcGUiXSxbInNwYWNlIiwiICJdLFsiaG9tZSIsIkhvbWUiXSxbImVuZCIsIkVu'@;
put 'ZCJdXSk7Y2xhc3Mgazhle3N0YXRpYyBnZXQga2V5Y29kZXMoKXtyZXR1cm4gTmdlKFNGKX1zdGF0aWMgYWRkKGwsYSl7U0Yuc2V0KGwsYSl9c3RhdGljIGhhcyhsKXtyZXR1cm4gU0YuaGFzKGwpfXN0YXRpYyBnZXRDb2RlKGwsYT10aGlzLmtleWNvZGVzKXtyZXR1cm4gZnVuY3Rpb24gQThl'@;
put 'KGMsbCl7cmV0dXJuIGwuZ2V0KGMpfHwiIn0obCxhKX19ZnVuY3Rpb24gTUYoYyxsKXtyZXR1cm4gazhlLmdldENvZGUobCk9PT1jLmtleX12YXIgdWg7IWZ1bmN0aW9uKGMpe2MuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5BcnJvd0xlZnQ9IkFycm93TGVm'@;
put 'dCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkVuZD0iRW5kIixjLkhvbWU9IkhvbWUiLGMuUGFnZVVwPSJQYWdlVXAiLGMuUGFnZURvd249IlBhZ2VEb3duIn0odWh8fCh1aD17fSkpO2NsYXNzIFA4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLnRyaWdnZXJOYXRpdmVC'@;
put 'dXR0b25CZWhhdmlvckhhbmRsZXI9dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IuYmluZCh0aGlzKSx0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyPXRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuaG9zdC5hZGRD'@;
put 'b250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7dGhpcy5zZXRCdXR0b25UeXBlKCksdGhpcy5zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl9c2V0QnV0dG9uVHlwZSgpeyF0aGlzLmhvc3QudHlwZSYmdGhpcy5ob3N0LmNsb3Nlc3QoImZvcm0iKSYmKHRoaXMuaG9zdC50eXBlPSJzdWJt'@;
put 'aXQiKX1zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl7dGhpcy5ob3N0LnJlYWRvbmx5fHx0aGlzLmhvc3QuZGlzYWJsZWQ/KHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3JIYW5kbGVyKSx0aGlzLmhvc3QucmVt'@;
put 'b3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvckhhbmRsZXIpKToodGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5hZGRFdmVudExp'@;
put 'c3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9ySGFuZGxlcikpfWVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3IobCl7IWZ1bmN0aW9uIFQ4ZShjLGwsYSl7Yy5maWx0ZXIoZD0+TUYobCxkKSkubGVuZ3RoPjAmJmEoKX0oWyJlbnRlciIsInNwYWNlIl0s'@;
put 'bCwoKT0+eyJzdWJtaXQiPT09dGhpcy5ob3N0LnR5cGU/dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCk6dGhpcy5ob3N0LmNsaWNrKCksQ0oobCl9KX10cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCl7aWYodGhpcy5ob3N0LmRpc2FibGVkKUNKKGwpO2Vsc2UgaWYoIWwu'@;
put 'ZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgYT1mdW5jdGlvbiBSOGUoYyxsLGEpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5hcHBlbmRDaGlsZChkKSxnSihjLGwse3JlbmRlckJlZm9yZTpkLC4uLmF9KTtjb25zdCBoPWQucHJldmlvdXNTaWJsaW5nO3JldHVybiBk'@;
put 'LnJlbW92ZSgpLGh9KHZGYDxidXR0b24gYXJpYS1oaWRkZW49InRydWUiIHJvbGU9InByZXNlbnRhdGlvbiIgP2Rpc2FibGVkPSIke3RoaXMuaG9zdC5kaXNhYmxlZH0iIHRhYmluZGV4PSItMSIgc3R5bGU9ImRpc3BsYXk6bm9uZSFpbXBvcnRhbnQiIHZhbHVlPSIke0NGKHRoaXMuaG9zdC52'@;
put 'YWx1ZSl9IiBuYW1lPSIke0NGKHRoaXMuaG9zdC5uYW1lKX0iIHR5cGU9IiR7Q0YodGhpcy5ob3N0LnR5cGUpfSI+PC9idXR0b24+YCx0aGlzLmhvc3QpO2E/LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIix7cmVsYXRlZFRhcmdldDp0aGlzLmhvc3QsY29tcG9zZWQ6ITB9'@;
put 'KSksYT8ucmVtb3ZlKCl9fX1jbGFzcyBIOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QuZXhwYW5kZWQmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPXRoaXMuaG9zdC5leHBhbmRl'@;
put 'ZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFFeHBhbmRlZD1udWxsKX19bGV0IHMyPWNsYXNzIGV4dGVuZHMgYjh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVy'@;
put 'biB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgbD10aGlzLl9kaXNhYmxlZDt0aGlzLl9kaXNhYmxlZD1jLHRoaXMucmVxdWVzdFVwZGF0ZSgiZGlzYWJsZWQiLGwpfX07TXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJwcmVzc2VkIix2b2lkIDApLE10'@;
put 'KFtrbCh7dHlwZTpCb29sZWFufSldLHMyLnByb3RvdHlwZSwiZXhwYW5kZWQiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJyZWFkb25seSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSxNdChb'@;
put 'a2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJkaXNhYmxlZCIsbnVsbCksTXQoW2tsKHt0eXBl'@;
put 'OlN0cmluZ30pXSxzMi5wcm90b3R5cGUsInBvcHVwIix2b2lkIDApLHMyPU10KFtmdW5jdGlvbiBwOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgZzhlKGwpKX0oKSxmdW5jdGlvbiBDOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgUzhlKGwpKX0o'@;
put 'KSxmdW5jdGlvbiB5OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgdzhlKGwpKX0oKSxmdW5jdGlvbiBGOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgSDhlKGwpKX0oKSxmdW5jdGlvbiBfOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihs'@;
put 'PT5uZXcgYjhlKGwpKX0oKSxmdW5jdGlvbiBtOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgdjhlKGwpKX0oKSxmdW5jdGlvbiBPOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgUDhlKGwpKX0oKSxmdW5jdGlvbiBNOGUoKXtyZXR1cm4gYz0+Yy5h'@;
put 'ZGRJbml0aWFsaXplcihsPT5uZXcgeDhlKGwpKX0oKV0sczIpO2NvbnN0IHZFPXthY3Rpb25zOntzb3J0OiJTb3J0IixleHBhbmQ6IkV4cGFuZCIsY2xvc2U6IkNsb3NlIixyZXNpemU6IlJlc2l6ZSIsZmlsdGVyOiJGaWx0ZXIifSxhbGVydDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3Nl'@;
put 'Iixsb2FkaW5nOiJMb2FkaW5nIixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIn0sZHJvcGRvd246e29wZW46Ik9wZW4ifSxmaWxlOnticm93c2U6ImJyb3dzZSIsZmlsZXM6ImZpbGVzIixyZW1vdmVGaWxlOiJyZW1vdmUgZmls'@;
put 'ZSJ9LG1vZGFsOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgbW9kYWwiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIG1vZGFsIGNvbnRlbnQiLGNvbnRlbnRCb3g6IlNjcm9sbGFibGUgbW9kYWwgYm9keSIsY29udGVudEVuZDoiRW5kIG9mIG1vZGFsIGNvbnRlbnQifSxuYXZpZ2F0'@;
put 'aW9uOntuYXZpZ2F0aW9uRWxlbWVudDoibmF2aWdhdGlvbiIsbmF2aWdhdGlvbkxhYmVsOiJuYXZpZ2F0aW9uIG1lbnUiLG5hdmlnYXRpb25BYnJpZGdlZFRleHQ6IlZpZXcgYWJyaWRnZWQgbWVudSIsbmF2aWdhdGlvblVuYWJyaWRnZWRUZXh0OiJWaWV3IHVuYWJyaWRnZWQgbWVudSJ9LG92'@;
put 'ZXJsYXk6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBkaWFsb2ciLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIGRpYWxvZyBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgZGlhbG9nIGNvbnRlbnQifSxwb3B1cDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIHBvcHVwIixj'@;
put 'b250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBwb3B1cCBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgcG9wdXAgY29udGVudCJ9LHBhc3N3b3JkOntzaG93QnV0dG9uQXJpYUxhYmVsOiJTaG93IHBhc3N3b3JkIixoaWRlQnV0dG9uQXJpYUxhYmVsOiJIaWRlIHBhc3N3b3JkIn0scHJvZ3Jl'@;
put 'c3M6e2xvYWRpbmc6IkxvYWRpbmciLGxvb3Bpbmc6IkxvYWRpbmcifSx0cmVldmlldzp7bG9hZGluZzoiTG9hZGluZyJ9LGdyaWQ6e3Jlc2l6ZUNvbHVtbjoiUmVzaXplIENvbHVtbiIsY2xvc2VEZXRhaWxzOiJDbG9zZSBEZXRhaWxzIixub0RhdGE6Ik5vIFJlc3VsdHMgRm91bmQiLHJvd0Rl'@;
put 'dGFpbFN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIscm93RGV0YWlsRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLGZvb3RlckVuZDoiRW5kIG9mIGdyaWQgcm93cyIsYWN0aW9uOiJBY3Rpb24iLGRyb3BUYXJnZXQ6IkRyb3AgSXRlbSIscGFnaW5hdGlvbjp7bGFiZWw6ImdyaWQgcGFnaW5h'@;
put 'dGlvbiIsZmlyc3RQYWdlOiJnbyB0byBmaXJzdCBwYWdlIixwcmV2aW91c1BhZ2U6ImdvIHRvIHByZXZpb3VzIHBhZ2UiLG5leHRQYWdlOiJnbyB0byBuZXh0IHBhZ2UiLGxhc3RQYWdlOiJnbyB0byBsYXN0IHBhZ2UiLHBhZ2VTaXplOiJyb3dzIHBlciBwYWdlIixwYWdlOiJwYWdlIn19fTtj'@;
put 'bGFzcyBZNXtzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKCRsLnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYoJGwuc3RhdGUuaTE4blJlZ2lzdHJ5PVA1KHZFLCRsLnN0YXRlLmkxOG5SZWdpc3RyeSkpLFA1KHZFLCRsLnN0YXRlLmkxOG5SZWdpc3RyeSl9c3Rh'@;
put 'dGljIGZpbmRLZXkobCl7Y29uc3QgYT1ZNS5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmhLKGFbZF0sbCkpfXN0YXRpYyBnZXQobCl7cmV0dXJuIGwmJlk1LmtleXNbbF18fHt9fXN0YXRpYyByZXNldCgpeyRsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh7fSx2RSl9c3RhdGlj'@;
put 'IGh5ZHJhdGUobCxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBxZ2UoYyxsLGEpe3JldHVybiBjLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGQ9PmZ1bmN0aW9uIEhnZShjLGwsYT1gXCR7JHtjfX1gKXtyZXR1cm4gYy5zcGxpdCgiLiIpLnJlZHVjZSgoZCxoKT0+e3RyeXtjb25zdCBmPWRb'@;
put 'aF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1mOmNhc2UhMT09PWY6Y2FzZSIiPT09ZjpjYXNlIDA9PT1mOnJldHVybiBmO2RlZmF1bHQ6cmV0dXJuIGZ8fGF9fWNhdGNoe3JldHVybiBhfX0sbCl9KGQuc3Vic3RyKDIsZC5sZW5ndGgtMykudHJpbSgpLGwsYSkpfShKU09OLnN0cmluZ2lmeShs'@;
put 'KSxhKSl9c3RhdGljIGxvY2FsaXplKGwpeyRsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh2RSwkbC5zdGF0ZS5pMThuUmVnaXN0cnksbCl9fXZhciBqOGU9Y0ZgOmhvc3R7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS13aWR0aDp2YXIoLS1pY29uLXdpZHRoKTstLWhlaWdodDp2YXIoLS1pY29uLXdpZHRoKTstLWN1cnNvcjpw'@;
put 'b2ludGVyOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwLCAjMmQ0MDQ4KSk7LS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zLCBjYWxjKDEz'@;
put 'ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tcGFkZGluZzowOy0tb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUsIEhpZ2hsaWdodCBzb2xpZCAycHgpOy0tb3V0bGluZS1vZmZz'@;
put 'ZXQ6Y2FsYyh2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LCAxcHgpICogLTEpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3V0bGluZTowIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dKXtwb2ludGVyLWV2ZW50'@;
put 'czppbml0aWFsO2N1cnNvcjp2YXIoLS1jdXJzb3IpIWltcG9ydGFudH06aG9zdChbc3RhdHVzPWFjdGl2ZV0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9OjpzbG90dGVkKFtzaGFwZT1jbG9z'@;
put 'ZV0pLDo6c2xvdHRlZChbc2hhcGU9aW5mby1jaXJjbGVdKSw6OnNsb3R0ZWQoW3NoYXBlPXRpbWVzXSksOmhvc3QoW3NoYXBlPWNsb3NlXSksOmhvc3QoW3NoYXBlPWluZm8tY2lyY2xlXSl7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04LCBjYWxjKDE4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSl9Omhvc3QoOmhvdmVyKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh'@;
put 'Y3Rpb24tY29sb3ItaG92ZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDAsICMxYjJiMzIpKX06aG9zdCg6YWN0aXZlKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y'@;
put 'LWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSkgLnByaXZhdGUtaG9zdHt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpLyAyKSl9Omhvc3Qo'@;
put 'W2Rpc2FibGVkXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDAsICNhZWI4YmMpKX0ucHJpdmF0ZS1ob3N0ey0taWNvbi1jb2xvcjp2YXIoLS1jb2xvcik7YmFj'@;
put 'a2dyb3VuZDp2YXIoLS1iYWNrZ3JvdW5kKTtwYWRkaW5nOnZhcigtLXBhZGRpbmcpO2NvbG9yOnZhcigtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOnZhcigt'@;
put 'LXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLWhlaWdodCl9OjpzbG90dGVkKGNkcy1pY29uKSxjZHMtaWNvbnt3aWR0aDp2YXIoLS1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0taWNvbi1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmV9OjpzbG90dGVkKGNkcy1pY29uOm5vdChbc3RhdHVzXSkp'@;
put 'LGNkcy1pY29uey0tY29sb3I6dmFyKC0taWNvbi1jb2xvcil9Omhvc3QoW2Rpc2FibGVkXTphY3RpdmUpe3BvaW50ZXItZXZlbnRzOm5vbmUhaW1wb3J0YW50fS5wcml2YXRlLWhvc3Q6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKC0xKnZhcigtLXdpZHRo'@;
put 'KSAtIDEpO3RvcDpjYWxjKC0xKnZhcigtLWhlaWdodCkgLSAxKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldCxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVj'@;
put 'dC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW2Rpc2FibGVkXSkgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZTowIWltcG9ydGFudH06aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVy'@;
put 'e291dGxpbmU6dmFyKC0tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tb3V0bGluZS1vZmZzZXQpfUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApezpob3N0KDpmb2N1cykgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz'@;
put 'LXJpbmctY29sb3J9fWA7Y2xhc3MgVzUgZXh0ZW5kcyBzMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pMThuPVk1LmtleXMuYWN0aW9ucyx0aGlzLmNkc0J1dHRvbkFjdGlvbj0hMH1yZW5kZXIoKXtyZXR1cm4gdkZgPGRpdiBjbGFzcz0icHJpdmF0ZS1ob3N0Ij48'@;
put 'c2xvdD48Y2RzLWljb24gLnNoYXBlPSIke3RoaXMuc2hhcGU/dGhpcy5zaGFwZToiZWxsaXBzaXMtdmVydGljYWwifSIgLnNpemU9IiR7dGhpcy5pY29uU2l6ZX0iID9zb2xpZD0iJHt0aGlzLnByZXNzZWR8fHRoaXMuZXhwYW5kZWR9IiBpbm5lci1vZmZzZXQ9IiR7MX0iPjwvY2RzLWljb24+'@;
put 'PC9zbG90PjwvZGl2PmB9dXBkYXRlZChsKXtzdXBlci51cGRhdGVkKGwpLHRoaXMuYXJpYUxhYmVsfHx0aGlzLnJlYWRvbmx5fHxINS53YXJuKCJBIGFyaWEtbGFiZWwgaXMgcmVxdWlyZWQgZm9yIGludGVyYWN0aXZlIGNkcy1idXR0b24tYWN0aW9uIHR5cGUiLHRoaXMpLGwuaGFzKCJyZWFk'@;
put 'b25seSIpJiYodGhpcy5hcmlhSGlkZGVuPXRoaXMucmVhZG9ubHkmJiF0aGlzLmhhc0F0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpPyJ0cnVlIjpudWxsKX19VzUuc3R5bGVzPVt2SixqOGVdLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sVzUucHJvdG90eXBlLCJzaGFwZSIsdm9pZCAwKSxNdChba2wo'@;
put 'e3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sVzUucHJvdG90eXBlLCJhY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxXNS5wcm90b3R5cGUsImljb25TaXplIix2b2lkIDApLE10KFtmdW5jdGlvbiBOOGUoKXtyZXR1cm4oYyxsKT0+e2NvbnN0IGE9Yy5jb25uZWN0ZWRD'@;
put 'YWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPSRsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVzdFVwZGF0ZShsKX0pLGEmJmEuYXBwbHko'@;
put 'dGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9UDUoWTUua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5fX2kxOG58fHt9KTtyZXR1cm4gWTUuaHlk'@;
put 'cmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3QgXz1mdW5jdGlvbiBWOGUoYyxsKXtpZihfcChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoX3AoZCkpYT17fTtlbHNlIHRyeXthPUpTT04u'@;
put 'cGFyc2UoZCl9Y2F0Y2h7SDUud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBCOGUoYyxsLGEsZCl7cmV0dXJuIF9wKGMpP2hLKGEsZCk/e3VwZGF0ZTohMX06e3Vw'@;
put 'ZGF0ZTohMCx2YWx1ZXM6YX06Yz09PWw/e3VwZGF0ZTohMSx2YWx1ZXM6e319Ont1cGRhdGU6ITAsa2V5OmMsdmFsdWVzOnt9fX0oWTUuZmluZEtleShfKXx8IiIsdGhpcy5fX2kxOG5LZXksXyx0aGlzLl9faTE4bik7dm9pZCAwIT09VC5rZXkmJih0aGlzLl9faTE4bktleT1ULmtleSsiIiks'@;
put 'dm9pZCAwIT09VC52YWx1ZXMmJih0aGlzLl9faTE4bj17Li4uVC52YWx1ZXN9KSwhMD09PVQudXBkYXRlJiZ0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnJlcXVlc3RVcGRhdGUobCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdm9pZCAwIT09bD9mdW5jdGlvbihm'@;
put 'LF8sVCl7Y29uc3QgVz1PYmplY3QuZGVmaW5lUHJvcGVydHkoXyxULGYpO3JldHVybiBrbCh7dHlwZTpPYmplY3QsYXR0cmlidXRlOiJjZHMtaTE4biJ9KShXLFQpfShoLGMsbCk6ZnVuY3Rpb24oZixfKXtjb25zdCBUPXtraW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6'@;
put 'Xy5rZXksZGVzY3JpcHRvcjpmfTtyZXR1cm4ga2woe3R5cGU6T2JqZWN0fSkoVCl9KGgsYyl9fSgpXSxXNS5wcm90b3R5cGUsImkxOG4iLHZvaWQgMCksTXQoW3lKKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxXNS5wcm90b3R5cGUs'@;
put 'ImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBNSiBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMu'@;
put 'YXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19TXQoW2tsKHt0eXBlOlN0cmluZ30pXSxNSi5wcm90b3R5cGUsInNoYXBlIix2b2lkIDApLEJYKCJjZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixNSiksVnMuYWRkSWNvbnMoSUspLFZzLmFkZEFsaWFzZXMoWyJ0aW1l'@;
put 'cyIsWyJjbG9zZSJdXSk7Y29uc3QgRW89WyIqIl07ZnVuY3Rpb24gVThlKGMsbCl7aWYoMSZjJiYoVnIoMCksTmUoMSksenIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFo4ZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'ImRpdiIsMTQpLEplKDEsVThlLDIsMSwibmctY29udGFpbmVyIiwwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWQuQWNjb3JkaW9uU3RhdHVzLkVycm9yKX19ZnVuY3Rpb24gWThlKGMsbCl7aWYoMSZjJiYoVnIo'@;
put 'MCksTmUoMSksenIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFc4ZShjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5'@;
put 'cy5zdWNjZXNzKX19ZnVuY3Rpb24gRzhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkseHQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRv'@;
put 'bmUoaCkpfSksbWUoMSwiZGl2IiwxNiksa3IoMiwyKSx5ZSgpKCl9MiZjJiZSZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiAkOGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxKZSgxLFo4ZSwyLDEsImRpdiIsMSksbWUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImJ1dHRv'@;
put 'biIsNCw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlUGFuZWwoKSl9KSxiYSg2LCJhc3luYyIpLG1lKDcsInNwYW4iLDYpLEplKDgsWThlLDIsMSwibmctY29udGFpbmVyIiwwKSxKZSg5LFc4ZSwyLDEsIm5nLWNvbnRhaW5lciIsMCkseWUoKSxt'@;
put 'ZSgxMCwic3BhbiIsNykscXQoMTEsImNkcy1pY29uIiw4KSgxMiwic3BhbiIsOSkoMTMsImNkcy1pY29uIiwxMCkoMTQsImNkcy1pY29uIiwxMSkseWUoKSxrcigxNSksa3IoMTYsMSkseWUoKSgpLG1lKDE3LCJkaXYiLDEyKSxKZSgxOCxHOGUsMywxLCJkaXYiLDEzKSx5ZSgpKCksenIoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO2xldCBoO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cyE9PWQuQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKSksQ2UoMiksZHIoImNsci1hY2NvcmRpb24t'@;
put 'aGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShoPVpsKDYsMTYsZC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDpoLmxlbmd0aCl8fGQuYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxSZSgiaWQiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlk'@;
put 'KSkoImRpc2FibGVkIixkLmlzQWNjb3JkaW9uJiZhLmRpc2FibGVkKSxUcigiYXJpYS1kaXNhYmxlZCIsIWQuaXNBY2NvcmRpb24mJmEuZGlzYWJsZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldEFjY29yZGlvbkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSgiYXJpYS1leHBhbmRlZCIsYS5vcGVu'@;
put 'KSxDZSg0KSxSZSgibmdJZiIsYS5zdGF0dXM9PT1kLkFjY29yZGlvblN0YXR1cy5FcnJvciksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09ZC5BY2NvcmRpb25TdGF0dXMuQ29tcGxldGUpLENlKDgpLFJlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixkLmdldEFjY29yZGlv'@;
put 'bkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSxUcigiYXJpYS1oaWRkZW4iLCFhLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlkKSksQ2UoMSksUmUoIm5nSWYiLGEub3Blbil9fWNvbnN0IHhKPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxl'@;
put 'Il0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLEVKPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1k'@;
put 'ZXNjcmlwdGlvbiIsIioiXSxtN2U9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gdjdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLHF0KDEsInNwYW4iLDIpLHllKCkpLDImYyYmKENlKDEpLFJlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gXzdlKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PVZuKCk7bWUoMCwic3BhbiIpKDEsInNwYW4iLDMpLHh0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiQHZh'@;
put 'bGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gYjdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLGtyKDEpLHllKCkpLDImYyYmUmUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIHk3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1jb25zdCB3N2U9W1tbIiIsImNsckNoZWNrYm94'@;
put 'IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLEM3ZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIFM3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1mdW5jdGlvbiBNN2UoYyxsKXsxJmMmJmtyKDAsMixbIipuZ0lmIiwic2hvd0hl'@;
put 'bHBlciJdKX1mdW5jdGlvbiB4N2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBFN2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBrN2UoYyxsKXsxJmMmJmtyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gQTdlKGMsbCl7'@;
put 'MSZjJiZrcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBUN2U9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1j'@;
put 'b250cm9sLXN1Y2Nlc3MiXV1dLEQ3ZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sTDdlPVsiY2xyS2V5Rm9jdXMiLCIiXTtmdW5j'@;
put 'dGlvbiBGN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gSDdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gTjdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gVjdlKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxw'@;
put 'ZXIiXSl9ZnVuY3Rpb24gQjdlKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGo3ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgejdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyJjbHIt'@;
put 'Y29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sVTdlPVsibGFiZWwiLCJbY2xySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rp'@;
put 'b24gWjdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiYXJpYS1sYWJlbCIsYS5kYXkpLENlKDEpLGdyKCIgIixhLm5hcnJvdywiICIpfX1mdW5jdGlvbiBZN2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNykscXQo'@;
put 'MSwiY2xyLWRheSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gVzdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDUpLEplKDEsWTdlLDIsMSwidGQiLDYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtD'@;
put 'ZSgxKSxSZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIEc3ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuY2hhbmdlTW9udGgoZikpfSksTmUoMSkseWUoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKTtkcigiaXMtc2VsZWN0ZWQiLGQ9PT1oLmNhbGVuZGFyTW9udGhJbmRleCksVHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiAkN2UoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jaGFuZ2VZZWFyKGYpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtkcigiaXMtc2Vs'@;
put 'ZWN0ZWQiLGE9PT1kLmNhbGVuZGFyWWVhciksVHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBxN2UoYyxsKXsxJmMmJnF0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIEs3ZShjLGwpezEmYyYmcXQoMCwiY2xyLXllYXJw'@;
put 'aWNrZXIiKX1mdW5jdGlvbiBYN2UoYyxsKXsxJmMmJnF0KDAsImNsci1kYXlwaWNrZXIiKX1jb25zdCBKN2U9WyJhY3Rpb25CdXR0b24iXTtmdW5jdGlvbiBRN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gZTllKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiw4LDkpLHF0KDIs'@;
put 'ImNkcy1pY29uIiwxMCkseWUoKSksMiZjJiZSZSgiZGlzYWJsZWQiLFZlKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gdDllKGMsbCl7MSZjJiZxdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDExKX1mdW5jdGlvbiBuOWUoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29u'@;
put 'IiwxMil9ZnVuY3Rpb24gcjllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIGk5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIG85ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlv'@;
put 'biBzOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IGE5ZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0s'@;
put 'bDllPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBjOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9Y29uc3QgdTllPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJl'@;
put 'bCJdXV0sZDllPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gaDllKGMsbCl7MSZjJiZxdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGY5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIHA5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDUp'@;
put 'fWZ1bmN0aW9uIGc5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIG05ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiB2OWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IF85ZT1bW1si'@;
put 'bGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGI5ZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJj'@;
put 'bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiB5OWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gdzllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gQzllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gUzllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gTTllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIHg5ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg'@;
put 'RTllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGs5ZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJj'@;
put 'bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBBOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gVDllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gRDllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu'@;
put 'Y3Rpb24gTDllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSTllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFI5ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg'@;
put 'TzllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sUDllPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVy'@;
put 'IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sRjllPVsiYW5jaG9yIl07ZnVuY3Rpb24gSDllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNikscXQoMywiY2RzLWljb24iLDcpLHllKCkoKSxrcig0KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoKTtSZSgiaWQiLGEucG9wb3ZlcklkKSxUcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLENlKDMpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBOOWU9WyJp'@;
put 'bnB1dF9sb3ciXSxWOWU9WyJpbnB1dCJdLEI5ZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIGo5ZShjLGwpezEmYyYma3IoMCl9Y29uc3QgejllPVsicmVzaXplVHJhY2tlciJdLFU5ZT1bImNvbHVtbkhhbmRsZSJdO2Z1bmN0aW9uIFo5ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWTll'@;
put 'KGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmVHIoImRpcmVjdGlvbiIsVmUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gVzllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkuc29ydCgpKX0pLEplKDEsWjllLDEsMCwibmctY29udGFpbmVyIiw4KSxKZSgyLFk5ZSwxLDEsImNkcy1pY29uIiw5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9JGkoNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLENlKDEpLFJlKCJuZ0lmIixhLnNvcnREaXJl'@;
put 'Y3Rpb24pfX1mdW5jdGlvbiBHOWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uICQ5ZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJNYXhQbGFj'@;
put 'ZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1'@;
put 'bmN0aW9uIHE5ZShjLGwpezEmYyYma3IoMCwxKX1mdW5jdGlvbiBLOWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIFg5ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxKZSgxLEs5ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtWZSgpO2NvbnN0IGE9JGkoNik7Q2Uo'@;
put 'MSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiBKOWUoYyxsKXsxJmMmJnF0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9Y29uc3QgUTllPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1d'@;
put 'LCIqIl0sZXZlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiB0dmUoYyxsKXsxJmMmJnF0KDAsImRpdiIsNCl9ZnVuY3Rpb24gbnZlKGMsbCl7MSZjJiZrcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdy'@;
put 'aWQiXSl9ZnVuY3Rpb24gcnZlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiYnV0dG9uIiwxKSxxdCgyLCJjZHMtaWNvbiIsMikseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxUcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBpdmU9WyJjZWxs'@;
put 'UG9ydGFsIl07ZnVuY3Rpb24gb3ZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBzdmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBhdmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGx2ZT1bImRldGFpbEJ1dHRvbiJdLGN2ZT1bInN0aWNreUNlbGxzIl0sdXZlPVsic2Nyb2xsYWJsZUNlbGxzIl0sZHZl'@;
put 'PVsiY2FsY3VsYXRlZENlbGxzIl07ZnVuY3Rpb24gaHZlKGMsbCl7fWZ1bmN0aW9uIGZ2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksSmUoMSxodmUsMCwwLCJuZy10ZW1wbGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLGQ9JGkoNik7'@;
put 'UmUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksQ2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBwdmUoYyxsKXt9ZnVuY3Rpb24gZ3ZlKGMsbCl7MSZjJiZKZSgwLHB2ZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmMmJihWZSgyKSxS'@;
put 'ZSgibmdUZW1wbGF0ZU91dGxldCIsJGkoNikpKX1mdW5jdGlvbiBtdmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24o'@;
put 'aCl7QnQoYSk7Y29uc3QgZj1WZSgpO3JldHVybiBqdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxKZSgxLGZ2ZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMSksSmUoMixndmUsMSwxLG51bGwsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gdnZlKGMsbCl7fWZ1bmN0aW9uIF92ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksSmUoMSx2dmUsMCwwLCJuZy10ZW1w'@;
put 'bGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCksZD0kaSg2KTtSZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIGJ2ZShjLGwpe31mdW5jdGlvbiB5dmUoYyxsKXsxJmMmJkpl'@;
put 'KDAsYnZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKCksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLCRpKDYpKSl9ZnVuY3Rpb24gd3ZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBrSj1mdW5jdGlvbihjKXtyZXR1cm57ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9fTtmdW5jdGlv'@;
put 'biBDdmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE5KSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwyMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS50b2dnbGUoaCkpfSkseWUoKSxtZSgzLCJs'@;
put 'YWJlbCIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLG1lKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoNyxrSiwhYS5jbHJEZ1NlbGVjdGFi'@;
put 'bGUpKSxDZSgyKSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxUcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxDZSgxKSxSZSgiZm9yIixhLmNoZWNrYm94SWQp'@;
put 'LENlKDIpLG9yKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIFN2ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTkpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDIzKSx4dCgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWgpfSkseWUoKSxtZSgzLCJsYWJlbCIsMjQpKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoMTAsa0os'@;
put 'IWEuY2xyRGdTZWxlY3RhYmxlKSksQ2UoMiksUmUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmds'@;
put 'ZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLENlKDEpLFJlKCJmb3IiLGEucmFkaW9JZCksQ2UoMiksb3IoYS5jbHJEZ1Jvd0FyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdz'@;
put 'LmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gTXZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNSksa3IoMSwyKSx5ZSgpKX1mdW5jdGlvbiB4dmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl'@;
put 'KDQpLnRvZ2dsZUV4cGFuZCgpKX0pLHF0KDEsImNkcy1pY29uIiwzMCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7VHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5j'@;
put 'bHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kYWJsZUlkKSxDZSgxKSxUcigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTph'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiBFdmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItc3Bpbm5lciIsMzEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24ga3ZlKGMs'@;
put 'bCl7aWYoMSZjJiYoVnIoMCksSmUoMSx4dmUsMiw1LCJidXR0b24iLDI3KSxKZSgyLEV2ZSwyLDEsImNsci1zcGlubmVyIiwyOCksenIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp'@;
put 'bmcpfX1mdW5jdGlvbiBBdmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI2KSxKZSgxLGt2ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gVHZlKGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMikoMSwiYnV0dG9uIiwzMywzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMiksZj1WZSgyKTtyZXR1cm4ganQoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSkscXQoMywiY2RzLWljb24iLDM1KSx5'@;
put 'ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGRyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFRyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0Rl'@;
put 'dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc09wZW4pKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLENlKDIpLFRyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRp'@;
put 'dGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIER2ZShjLGwpe31mdW5jdGlvbiBMdmUoYyxsKXsxJmMmJkplKDAsRHZlLDAsMCwibmctdGVtcGxhdGUiLDgp'@;
put 'LDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWZ1bmN0aW9uIEl2ZShjLGwpe31mdW5jdGlvbiBSdmUoYyxsKXsxJmMmJkplKDAsSXZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWNvbnN0IE92'@;
put 'ZT1mdW5jdGlvbihjKXtyZXR1cm57ImlzLXJlcGxhY2VkIjpjfX07ZnVuY3Rpb24gUHZlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSxWcigyLG51bGwsMTEpLEplKDQsQ3ZlLDYsOSwiZGl2IiwxMiksSmUoNSxTdmUsNiwxMiwiZGl2IiwxMiksSmUoNixNdmUsMiww'@;
put 'LCJkaXYiLDEzKSxKZSg3LEF2ZSwyLDEsImRpdiIsMTQpLEplKDgsVHZlLDQsNywiZGl2IiwxNSksenIoKSx5ZSgpLG1lKDksImRpdiIsMTYpKDEwLCJkaXYiLDE3KSxrcigxMSwxKSxqYSgxMixudWxsLDE4KSx5ZSgpLEplKDE0LEx2ZSwxLDEsbnVsbCwyKSxKZSgxNSxSdmUsMSwxLG51bGws'@;
put 'MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFJlKCJpZCIsYS5pZCksQ2UoNCksUmUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9U'@;
put 'WVBFLk11bHRpKSxDZSgxKSxSZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxDZSgxKSxSZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLENlKDEpLFJlKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFi'@;
put 'bGUuaGFzRXhwYW5kYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoMTEsT3ZlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxDZSg1KSxSZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLENl'@;
put 'KDEpLFJlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpfX1jb25zdCBGdmU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxsIl1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLEh2ZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNl'@;
put 'bGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0sTnZlPVsiZGF0YWdyaWRUYWJsZSJdLFZ2ZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sQnZlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxqdmU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSx6dmU9WyJkaXNwbGF5ZWRSb3dz'@;
put 'Il0sVXZlPVsiY2FsY3VsYXRpb25Sb3dzIl07ZnVuY3Rpb24gWnZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyNCkseHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKTtyZXR1cm4gZi5hbGxTZWxlY3RlZD0hZi5hbGxTZWxlY3Rl'@;
put 'ZCxqdChoLnByZXZlbnREZWZhdWx0KCkpfSksbWUoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYWxsU2VsZWN0ZWQ9aCl9KSx5ZSgpLG1lKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjgpLE5lKDUp'@;
put 'LHllKCkoKSgpLHF0KDYsImRpdiIsMjkpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoImlkIixhLnNlbGVjdEFsbElkKSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksQ2UoMSksUmUoImZv'@;
put 'ciIsYS5zZWxlY3RBbGxJZCksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWXZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZVNlbGVjdGlv'@;
put 'bkFyaWFMYWJlbCl9ZnVuY3Rpb24gV3ZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMSkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfWZ1bmN0aW9uIEd2ZShjLGwpezEmYyYmKG1lKDAsImRpdiIs'@;
put 'MzIpLHF0KDEsImRpdiIsMjkpLHllKCkpLDImYyYmVHIoImFyaWEtbGFiZWwiLFZlKCkuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9ZnVuY3Rpb24gJHZlKGMsbCl7MSZjJiZxdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiBxdmUoYyxsKXsxJmMmJihtZSgwLCJkaXYi'@;
put 'LDMzKSgxLCJjbHItc3Bpbm5lciIsMzQpLE5lKDIsIkxvYWRpbmciKSx5ZSgpKCkpfWNvbnN0IEt2ZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRh'@;
put 'aWwiXV1dLFh2ZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdLFF2ZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gZV9lKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiaDIiKSxO'@;
put 'ZSgyKSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyl9fWZ1bmN0aW9uIHRfZShjLGwpe31mdW5jdGlvbiBuX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13'@;
put 'cmFwcGVyIikoMiwiaW5wdXQiLDE0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKF8sIWgpKX0pLHllKCksbWUoMywibGFiZWwiKSxKZSg0LHRfZSwwLDAsIm5nLXRlbXBsYXRl'@;
put 'IiwxNSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksUmUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxl'@;
put 'VGVtcGxhdGVSZWYpfX1mdW5jdGlvbiByX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDE2KSx4dCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmFsbENvbHVtbnNTZWxlY3RlZCgp'@;
put 'KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKX19ZnVuY3Rpb24gaV9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpKDIsImRpdiIsNCw1KSxOZSg0KSx5ZSgpLEpl'@;
put 'KDUsZV9lLDMsMSwibmctY29udGFpbmVyIiw2KSxrcig2KSxtZSg3LCJidXR0b24iLDcpLHF0KDgsImNkcy1pY29uIiw4KSxtZSg5LCJzcGFuIiw5KSxOZSgxMCkseWUoKSgpKCksbWUoMTEsInVsIiwxMCksSmUoMTIsbl9lLDUsMywibGkiLDExKSx5ZSgpLG1lKDEzLCJkaXYiLDEyKSxrcigx'@;
put 'NCwxKSxKZSgxNSxyX2UsMiwxLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJpZCIsYS5wb3BvdmVySWQpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiks'@;
put 'Q2UoNCksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuY3VzdG9tVG9nZ2xlVGl0bGUpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksQ2UoMSksVHIoInRpdGxlIixhLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5jbG9zZSksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbiksQ2UoMyksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZUJ1dHRvbil9'@;
put 'fWNvbnN0IG9fZT1bW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dXSxzX2U9WyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSIsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdO2Z1bmN0aW9uIGNfZShjLGwpe2lm'@;
put 'KDEmYyYmKFZyKDApLG1lKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLHF0KDMsImlucHV0IiwzKSxtZSg0LCJsYWJlbCIpLE5lKDUpLHllKCksbWUoNiwic3BhbiIsNCksTmUoNykseWUoKSgpKCksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNSksb3IoYS5zZWxl'@;
put 'Y3Rpb24uY3VycmVudC5sZW5ndGgpLENlKDIpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIHVfZShjLGwpezEmYyYmcXQoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiBkX2UoYyxsKXtpZigxJmMmJihWcigwKSxrcigxLDEpLEplKDIs'@;
put 'dV9lLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLG1lKDMsImRpdiIsNSksa3IoNCwyKSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyYmIWEudG9nZ2xlKX19Y29uc3QgaF9lPVtbWyJjbHItZGctcGFnaW5hdGlv'@;
put 'biJdXSxbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSwiKiJdLGZfZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLCIqIl07ZnVuY3Rpb24gcF9lKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w'@;
put 'bGljaXQ7UmUoIm5nVmFsdWUiLGEpLENlKDEpLG9yKGEpfX1jb25zdCBnX2U9WyJjdXJyZW50UGFnZUlucHV0Il07ZnVuY3Rpb24gbV9lKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0KSxrcigxLDEpLHllKCkpfWZ1bmN0aW9uIHZfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImlu'@;
put 'cHV0IiwxNywxOCkseHQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pLHllKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPVZlKDMpO1JlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gX19lKGMsbCl7aWYoMSZjJiYobWUoMCwi'@;
put 'c3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxvcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIGJfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNSkoMSwiYnV0dG9uIiw2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKDIpLnBhZ2UuY3VycmVudD0xKX0pLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkscXQoNCwiY2RzLWljb24iLDgpLHllKCksbWUoNSwiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5w'@;
put 'YWdlLmN1cnJlbnQtMSl9KSxtZSg2LCJzcGFuIiw3KSxOZSg3KSx5ZSgpLHF0KDgsImNkcy1pY29uIiwxMCkseWUoKSxKZSg5LHZfZSwyLDMsImlucHV0IiwxMSksSmUoMTAsX19lLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTIsa2MpLE5lKDEyLCIgXHhhMC9ceGEwIiksbWUoMTMsInNwYW4i'@;
put 'KSxOZSgxNCkseWUoKSxtZSgxNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGp0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksbWUoMTYsInNwYW4iLDcpLE5lKDE3KSx5ZSgpLHF0KDE4LCJjZHMtaWNvbiIs'@;
put 'MTQpLHllKCksbWUoMTksImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxtZSgyMCwic3BhbiIsNyksTmUoMjEpLHllKCkscXQoMjIsImNkcy1pY29uIiwxNikseWUoKSgp'@;
put 'fWlmKDImYyl7Y29uc3QgYT0kaSgxMSksZD1WZSgyKTtDZSgxKSxSZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxDZSgyKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLENlKDIp'@;
put 'LFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksQ2UoMiksUmUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFn'@;
put 'ZUlucHV0KSgibmdJZkVsc2UiLGEpLENlKDQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxDZSgxKSxvcihkLnBhZ2UubGFzdCksQ2UoMSksUmUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLFRyKCJhcmlhLWxhYmVsIixk'@;
put 'LmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksQ2UoMiksb3IoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLENlKDIpLFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2Up'@;
put 'LENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24geV9lKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxtX2UsMiwwLCJkaXYiLDEpLG1lKDIsImRpdiIsMiksa3IoMykseWUoKSxKZSg0LGJfZSwyMywxNiwiZGl2IiwzKSx6cigpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLENlKDMpLFJlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24gd19lKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiZGl2IiwxOSksTmUoMikseWUoKSxtZSgzLCJkaXYiLDUpKDQsImJ1'@;
put 'dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxtZSg1LCJzcGFuIiw3KSxOZSg2KSx5ZSgpLHF0KDcsImNkcy1pY29uIiwxMCkseWUoKSxtZSg4LCJzcGFuIiksTmUoOSks'@;
put 'eWUoKSxtZSgxMCwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxtZSgxMSwic3BhbiIsNyksTmUoMTIpLHllKCkscXQoMTMsImNkcy1pY29uIiwxNCkseWUoKSgp'@;
put 'LHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksYjAoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxDZSgyKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIs'@;
put 'YS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDMpLG9yKGEucGFnZS5jdXJyZW50KSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksVHIoImFyaWEtbGFi'@;
put 'ZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IENfZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLFNfZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gTV9lKGMsbCl7MSZj'@;
put 'JiZxdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZUcigiZGlyZWN0aW9uIixWZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiB4X2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z'@;
put 'dGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24gRV9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSxrcigxLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0h1KCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLFRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFi'@;
put 'ZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBrX2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxBX2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl0sVF9lPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0s'@;
put 'RF9lPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBOX2UoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIFZfZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsTl9lLDEsMCwibmctY29udGFpbmVyIiwyKSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKTtDZSgx'@;
put 'KSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIEJfZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsVl9lLDIsMiwibmctY29udGFpbmVy'@;
put 'IiwxKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3Qgal9lPVsiY29udGVudENvbnRhaW5lciJdO2Z1bmN0aW9uIHpfZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxxdCgxLCJjZHMtaWNv'@;
put 'biIsMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksVHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gVV9lKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMSkscXQoMSwic3BhbiIsMTIpLHllKCkpfWZ1bmN0aW9u'@;
put 'IFpfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCkseHQoImNoYW5nZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSko'@;
put 'ImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSx5ZSgpLHF0KDIsImxhYmVsIiwxNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxYMigiaWQiLCIiLGEubm9kZUlkLCItY2hlY2siKSxSZSgiY2hlY2tlZCIsYS5fbW9kZWwu'@;
put 'c2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksQ2UoMSksWDIoImZvciIsIiIsYS5ub2RlSWQsIi1jaGVjayIpfX1mdW5jdGlvbiBZX2UoYyxsKXsxJmMmJiht'@;
put 'ZSgwLCJzcGFuIiksTmUoMSwiIHNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gV19lKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiB1bnNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gR19lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNiksSmUoMSxZX2UsMiwwLCJzcGFuIiwxNyks'@;
put 'SmUoMixXX2UsMiwwLCJzcGFuIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuYXJpYVNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuYXJpYVNlbGVjdGVkKX19Y29uc3QgJF9lPVsiKiIsW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFu'@;
put 'ZGVkIiwiIl1dXSxxX2U9WyIqIiwiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSJdO2Z1bmN0aW9uIEtfZShjLGwpezEmYyYmcXQoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZSZSgiY2hpbGRyZW4iLFZlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290'@;
put 'KX1mdW5jdGlvbiBYX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2UoKSl9KSxxdCgxLCJjZHMtaWNvbiIsNSkseWUoKX0yJmMmJlRyKCJhcmlhLWxhYmVsIixWZSgyKS5j'@;
put 'bHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24gSl9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGtyKDIpLHllKCksSmUoMyxYX2UsMiwxLCJidXR0b24iLDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJhbGVydC1oaWRkZW4iLGEuaGlkZGVuKSgi'@;
put 'YWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxSZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxDZSgzKSxSZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIFFfZShjLGwpezEmYyYmcXQoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMSksMiZjJiZS'@;
put 'ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLFZlKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IGViZT1bW1siY2xyLWFsZXJ0Il1dXSx0YmU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiBpYmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IG9iZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5j'@;
put 'dGlvbiBzYmUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiwxKSxrcigxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiYWN0aXZlIixhLmFjdGl2ZSksUmUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxUcigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFM'@;
put 'YWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IGFiZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl07ZnVuY3Rpb24gbGJlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwibGkiLDQpLGphKDIsNSkseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGlj'@;
put 'aXQ7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBjYmUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGxiZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUo'@;
put 'KTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIHViZShjLGwpezEmYyYmamEoMCw1KSwyJmMmJlJlKCJuZ1RlbXBsYXRlT3V0bGV0IixWZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rp'@;
put 'b24gZGJlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSx1YmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gaGJlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMikseHQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLGZmKSgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp'@;
put 'LFZlKCk7Y29uc3QgZj0kaSg0KTtyZXR1cm4ganQoVmUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxmZikoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLEplKDEsZGJlLDIsMSwibmctY29udGFpbmVyIiwx'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIGZiZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIsNikoMiwibGkiLDcpKDMsImJ1dHRvbiIsOCw5KSx4dCgibW91c2Vk'@;
put 'b3duIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xl'@;
put 'T3ZlcmZsb3dPbkNsaWNrKCkpfSkscXQoNSwiY2RzLWljb24iLDEwKSx5ZSgpKCksSmUoNixoYmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxDZSgy'@;
put 'KSxkcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksVHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUp'@;
put 'LENlKDIpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksQ2UoMSksUmUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gcGJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxxdCgxLCJjZHMtaWNvbiIsNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxUcigiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmNv'@;
put 'bW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksQ2UoMSksVHIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVmdCIpKCJ0aXRsZSIsYS5jb2xsYXBzZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kOmEuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlKX19'@;
put 'ZnVuY3Rpb24gZ2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29sbGFwc2VkPSExKX0pLHllKCl9MiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jb21tb25TdHJpbmdzLmtleXMu'@;
put 'dmVydGljYWxOYXZUb2dnbGUpfWNvbnN0IF9iZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLGJiZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0seWJlPVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24gd2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiYnV0dG9uIiwxMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZSgpKX0pLHF0KDEsImNkcy1pY29uIiwxMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7VHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEu'@;
put 'Y29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gQ2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLHh0KCJAZmFkZURvd24uZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmFkZURvbmUoaCkpfSksbWUoMiwi'@;
put 'ZGl2IiwzKSxOZSgzKSx5ZSgpLG1lKDQsImRpdiIsNCksa3IoNSksbWUoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksa3IoOSwxKSx5ZSgpLEplKDEwLHdiZSwyLDEsImJ1dHRvbiIsOCkseWUoKSxtZSgxMSwiZGl2Iiw5KSxrcigxMiwyKSx5ZSgpLGtyKDEzLDMpLHllKCkoKSxt'@;
put 'ZSgxNCwiZGl2IiwzKSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnN0YXRpY0JhY2tkcm9wfHxoLmNsb3NlKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGRyKCJt'@;
put 'b2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLFJlKCJAZmFkZURvd24iLGEuc2tpcEFuaW1hdGlvbiksVHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5KSxD'@;
put 'ZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoNSksRWMoImlkIixhLm1vZGFsSWQpLENlKDIpLFJlKCJuZ0lmIixhLmNsb3NhYmxlKSxDZSg1KSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpLENlKDEpLFJlKCJAZmFkZSIs'@;
put 'dm9pZCAwKX19Y29uc3QgU2JlPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sTWJlPVsiLm1vZGFsLW5hdiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFs'@;
put 'LWZvb3RlciJdO2xldCBrYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV19KSxjfSkoKSxxcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV19KSxjfSkoKSxzYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIHZie312YXIgVXU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNV'@;
put 'Q0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KFV1fHx7fSk7bGV0IFp1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1VdS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRl'@;
put 'fXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9VXUuTE9BRElORzphfHwoYT1VdS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0'@;
put 'cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9VXUuREVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmIsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGlu'@;
put 'Z1N0YXRlOlsiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfX0pLGN9KSgpLFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgYmV9Z2V0IGxvYWRp'@;
put 'bmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0'@;
put 'aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7'@;
put 'dGhpcy5sb2FkaW5nPWE9PT1VdS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSwkYmU9MDtmdW5jdGlvbiBMYygpe3JldHVybiJjbHItaWQt'@;
put 'IiskYmUrK31sZXQgQUo9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9u'@;
put 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShEZnx8e30pO2NvbnN0IGEyPSIwLjJzIGVhc2UtaW4tb3V0Iixx'@;
put 'YmU9W2ExKCJza2lwSW5pdGlhbFJlbmRlciIsW2ZjKCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtmYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSldKV0seEY9KGExKCJza2lwSW5pdGlhbFJlbmRlciIsW2Zj'@;
put 'KCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtmYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSksZmMoIiogPT4gdm9pZCIsW19zKHtkaXNwbGF5OiJibG9jayJ9KSxydShhMixfcyh7aGVpZ2h0OjAsZGlzcGxh'@;
put 'eToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQ'@;
put 'cmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1'@;
put 'bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJD'@;
put 'dXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVu'@;
put 'dEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9z'@;
put 'dENsb3NlOiJTaWducG9zdCBDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVy'@;
put 'IixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoiVG9nZ2xlIHtDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRG'@;
put 'aWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGFsZXJ0Q2xv'@;
put 'c2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yg'@;
put 'e0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZToiVG9nZ2xlIGRhdGVwaWNrZXIiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFu'@;
put 'Z2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToi'@;
put 'UHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJf'@;
put 'TU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQu'@;
put 'IixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiTmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6Ik5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9z'@;
put 'ZToiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdkdyb3VwVG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiBncm91cCIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3Rh'@;
put 'cnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9w'@;
put 'dGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3Blbjoi'@;
put 'U2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVS'@;
put 'b3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhp'@;
put 'cyBidXR0b24iLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IlN0ZXAgbmF2aWdhdGlvbiIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQiLHNl'@;
put 'bGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyJ9KTtsZXQgRXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9eEZ9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50aGlzLl9zdHJpbmdzLC4uLmF9fXBh'@;
put 'cnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTtsZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKF89PntmPWYucmVwbGFjZShgeyR7X319YCxkW19dKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciBfYj1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0IixjLk11bHRpPSJtdWx0aSIsY30oX2J8fHt9KTtsZXQgWGJlPTA7Y2xhc3MgSmJle2NvbnN0cnVjdG9y'@;
put 'KGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1EZi5JbmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhpcy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyBUSntj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9X2IuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PVhiZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7'@;
put 'dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IEpiZShsLHRoaXMuYWNjb3JkaW9uQ291bnQp'@;
put 'LHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PV9iLkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2Fi'@;
put 'bGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQo'@;
put 'ZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgYmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyBUSix0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBUZSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBh'@;
put 'bmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKE1lKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCks'@;
put 'dGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRl'@;
put 'ZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksX0U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5hY2NvcmRp'@;
put 'b25TZXJ2aWNlPWQsdGhpcy5pZkV4cGFuZFNlcnZpY2U9aCx0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBFcix0aGlzLkFjY29yZGlvblN0YXR1cz1EZix0aGlzLmlzQWNjb3JkaW9uPSEwLHRoaXMuX2lkPUxjKCl9Z2V0IGlkKCl7'@;
put 'cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoVWMoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2Uu'@;
put 'YWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0'@;
put 'aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2Fi'@;
put 'bGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dn'@;
put 'bGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8i'@;
put 'Y2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9ZW1pdFBhbmVsQ2hhbmdl'@;
put 'KGEpe2Eub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKSh0dChFcyksdHQoYmIpLHR0KFl1KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmTG8oaCxBSiw0KSwyJmEpe2xldCBmO2FpKGY9bGko'@;
put 'KSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCl9LGlucHV0czp7ZGlzYWJsZWQ6WyJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxw'@;
put 'YW5lbE9wZW46WyJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdGkoW1l1XSksdmFdLG5nQ29udGVudFNlbGVjdG9yczpFSixkZWNsczoyLHZhcnM6Myxj'@;
put 'b25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIs'@;
put 'MywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNj'@;
put 'b3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3ItaWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWlj'@;
put 'b24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9u'@;
put 'LWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoeEopLEplKDAsJDhlLDE5LDE4LCJuZy1jb250YWluZXIiLDApLGJhKDEsImFzeW5jIikpLDImYSYmUmUoIm5nSWYiLFpsKDEsMSxkLnBhbmVsKSl9LGRl'@;
put 'cGVuZGVuY2llczpbWmksZGMscXMsdXhdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246cWJlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLERKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVy'@;
put 'Vmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2'@;
put 'aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9fYi5NdWx0aTpfYi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShjcCh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRl'@;
put 'UGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmIpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLF9FLDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbImNsckFj'@;
put 'Y29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOlt0aShbYmJdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp'@;
put 'b246MH0pLGN9KSgpLExKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLElKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1hY2NvcmRpb24tdGl0bGUi'@;
put 'LCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRp'@;
put 'c2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IGJlfWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUu'@;
put 'bmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLHc4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9'@;
put 'Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoeTgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLEVGPSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOltlb119KSxjfSko'@;
put 'KSxSSj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdl'@;
put 'dCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSx0dChFRiw4KSx0dChZdSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBh'@;
put 'bmVsIl1dLGZlYXR1cmVzOltlb119KSxjfSkoKSxPSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoaDgsbzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpLHJ5ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsT0pdLE9K'@;
put 'XX0pLGN9KSgpO3ZhciB3bz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIi'@;
put 'LGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjfSh3b3x8e30pLEc1PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJv'@;
put 'd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShHNXx8e30pO2Z1bmN0aW9uIGwyKGMpe3JldHVybiBjPT09d28uQXJyb3dVcHx8Yz09PUc1LkFycm93VXA/d28uQXJyb3dVcDpjPT09d28uQXJyb3dEb3dufHxjPT09'@;
put 'RzUuQXJyb3dEb3duP3dvLkFycm93RG93bjpjPT09d28uQXJyb3dSaWdodHx8Yz09PUc1LkFycm93UmlnaHQ/d28uQXJyb3dSaWdodDpjPT09d28uQXJyb3dMZWZ0fHxjPT09RzUuQXJyb3dMZWZ0P3dvLkFycm93TGVmdDpjPT09d28uU3BhY2V8fGM9PT1HNS5TcGFjZT93by5TcGFjZTpjPT09'@;
put 'd28uRXNjYXBlfHxjPT09RzUuRXNjYXBlP3dvLkVzY2FwZTpjfWZ1bmN0aW9uIFRGKGMpe2NvbnN0IGw9bDIoYy5rZXkpOyhsPT09d28uQXJyb3dVcHx8bD09PXdvLkFycm93RG93bnx8bD09PXdvLkFycm93TGVmdHx8bD09PXdvLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0'@;
put 'IEtzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IGJlLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgYmUsdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IGJlfWdldCBvcGVuQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5DaGFu'@;
put 'Z2UuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3Ro'@;
put 'aXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUo'@;
put 'KX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1RGKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGln'@;
put 'bmVkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLExmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9'@;
put 'YSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/'@;
put 'KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj1uMih0aGlzLmRv'@;
put 'Y3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoTGEodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5v'@;
put 'cGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigp'@;
put 'e3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2Vy'@;
put 'dmljZS5vcGVuPSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxk'@;
put 'ZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhp'@;
put 'cy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50'@;
put 'LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50'@;
put 'LmxvY2FsTmFtZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlj'@;
put 'a0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoS3MpLGFyKElzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCks'@;
put 'd2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KExmKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3Bv'@;
put 'dmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEhKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNl'@;
put 'PWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgRXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKExhKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9'@;
put 'KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxl'@;
put 'bWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSks'@;
put 'dHQoTGYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVD'@;
put 'bGljayhmKX0pLDImYSYmZHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgdnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJ'@;
put 'Wk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfSh2dXx8e30pLFBzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KFBzfHx7fSksQ2I9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09'@;
put 'IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oQ2J8fHt9KTtjb25zdCBTcD1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxJZj0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8'@;
put 'YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gQzgoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gdTEoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9TkooYyxsLGEpLGgtPWEuaGVpZ2h0O2JyZWFrO2Nh'@;
put 'c2UgMTpkKz1OSihjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9VkooYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPVZKKGMsbCxhKX1yZXR1cm57eE9mZnNldDpkLHlPZmZzZXQ6aH19ZnVuY3Rpb24gTkooYyxsLGEpe2xldCBkPTA7c3dpdGNo'@;
put 'KGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIFBzLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgUHMuU1RBUlQ6YnJlYWs7Y2FzZSBQcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2Ug'@;
put 'UHMuRU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gVkooYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBQcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVu'@;
put 'dCl7Y2FzZSBQcy5TVEFSVDpicmVhaztjYXNlIFBzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgUHMuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBTOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9'@;
put 'ZCx0aGlzLl9zaG91bGRSZWFsaWduPW5ldyBiZSx0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCFScyh0aGlzLnBsYXRmb3JtSWQpKXJldHVy'@;
put 'bnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9dTEodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZD1mdW5jdGlvbiBveWUoYyxsKXtjb25zdCBhPVtdLGRfYm90dG9tPWMueU9mZnNldCtsLmhlaWdodCxkX2xl'@;
put 'ZnQ9Yy54T2Zmc2V0LGRfcmlnaHQ9Yy54T2Zmc2V0K2wud2lkdGg7cmV0dXJuIGMueU9mZnNldD49MHx8YS5wdXNoKENiLlRPUCksZF9sZWZ0Pj0wfHxhLnB1c2goQ2IuTEVGVCksZF9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI'@;
put 'ZWlnaHQpfHxhLnB1c2goQ2IuQk9UVE9NKSxkX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaChDYi5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxoPWQu'@;
put 'cmVkdWNlKChmLF8pPT5mK18sMCk7cmV0dXJuIDE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09dnUuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaCk6MT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5IT1JJWk9OVEFMP3Ro'@;
put 'aXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5I'@;
put 'T1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhoKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKFNwKHRoaXMucG9z'@;
put 'aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz11MSh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlz'@;
put 'LmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9dTEoSWYodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29y'@;
put 'ZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9QzgoU3AsSWYsITApO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv'@;
put 'b3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPUM4KFNwLElmLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2Ug'@;
put 'Mjp7Y29uc3QgZD1DOChTcCxJZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9QzgoU3AsSWYsITEpO3RoaXMuY29udGVudE9m'@;
put 'ZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRz'@;
put 'PXUxKFNwKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz11MShJZih0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy'@;
put 'ZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9dTEoSWYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dp'@;
put 'dGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9QzgoU3AsSWYsITEpO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2Fz'@;
put 'ZSAyOmNhc2UgMTp7Y29uc3QgZD1DOChTcCxJZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKShhcihMZiksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRo'@;
put 'aXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1fLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPVQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPVcsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhp'@;
put 'cy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEVyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2Uo'@;
put 'YSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0'@;
put 'aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgp'@;
put 'OnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRl'@;
put 'bnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIil9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh'@;
put 'PT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVu'@;
put 'ZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVt'@;
put 'b3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9k'@;
put 'eSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9k'@;
put 'ZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3KX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv'@;
put 'blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl'@;
put 'ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KElzKSx0dChhcyksdHQoemEpLHR0KEZvKSx0'@;
put 'dChTOCksdHQoTGYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250'@;
put 'ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxNYj0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBFcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChLcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZkcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSx4Yj0oKCk9PntjbGFzcyBje31y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbXV19KSxjfSkoKTt2YXIgZDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVG'@;
put 'VD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KGQxfHx7fSk7bGV0IEViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJy'@;
put 'ZW50PWF9bGlzdGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoZDEuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEs'@;
put 'ImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShkMS5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoZDEuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2go'@;
put 'dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShkMS5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihhLGQ9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZCksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhh'@;
put 'KSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4h'@;
put 'dGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGQ9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBoPXRoaXMuY3VycmVudFth'@;
put 'XTtoJiYoRk8oaCk/aDpXaShoKSkuc3Vic2NyaWJlKF89PntfJiYodGhpcy5tb3ZlVG8oXyksZD0hMCl9KX1yZXR1cm4gZH1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9'@;
put 'ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7'@;
put 'Y29uc3Qgeko9e3Byb3ZpZGU6RWIsdXNlRmFjdG9yeTpmdW5jdGlvbiBzeWUoYyxsKXtyZXR1cm4gY3x8bmV3IEViKGwpfSxkZXBzOltbbmV3IHoyLG5ldyBnMCxFYl0sRm9dfTt2YXIgb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0i'@;
put 'QUZURVIiLGN9KG9kfHx7fSk7Y2xhc3MgeDB7fXgwWyJ0b3AtcmlnaHQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx4MFsidG9wLWxlZnQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMu'@;
put 'U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbImJvdHRvbS1yaWdodCJdPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQUZURVIsYW5jaG9yOlBzLkVORCxjb250ZW50OlBzLkVORH0seDBbImJvdHRvbS1sZWZ0Il09e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMu'@;
put 'U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbInJpZ2h0LXRvcCJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMuQ0VOVEVSLGNvbnRlbnQ6UHMuRU5EfSx4MFsicmlnaHQtYm90dG9tIl09e2F4aXM6dnUuSE9SSVpPTlRBTCxzaWRlOm9kLkFGVEVSLGFuY2hv'@;
put 'cjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx4MFsibGVmdC10b3AiXT17YXhpczp2dS5IT1JJWk9OVEFMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5DRU5URVIsY29udGVudDpQcy5FTkR9LHgwWyJsZWZ0LWJvdHRvbSJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5CRUZPUkUs'@;
put 'YW5jaG9yOlBzLlNUQVJULGNvbnRlbnQ6UHMuU1RBUlR9O2NsYXNzIExGe3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1hKX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgt'@;
put 'MSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxldCBoMT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7YS5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXpl'@;
put 'cm8iKTtjb25zdCBkPXRoaXMuY2xpZW50UmVjdChhKS53aWR0aDtyZXR1cm4gYS5jbGFzc0xpc3QucmVtb3ZlKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkfXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0'@;
put 'dXJuIGEuc2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6'@;
put 'cGFyc2VJbnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChkLmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRo'@;
put 'KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu'@;
put 'ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uRG9uZSgpe3RoaXMudXBkYXRlU3RhcnRIZWlnaHQoKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxl'@;
put 'bWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KGgxKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmZV8oIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hbmltYXRpb25Eb25lKCl9KSwyJmEmJlM1KCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dl'@;
put 'cjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOlt0aShbaDFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9jaztvdmVy'@;
put 'ZmxvdzpoaWRkZW59Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZXhwYW5kQW5pbWF0aW9uIixbZmMoInRydWUgPD0+IGZhbHNlIixbX3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksSUY9'@;
put 'KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxheWU9MDtjb25zdCB4OD1uZXcgU2koIklGX0FDVElWRV9JRCIp'@;
put 'LGN5ZT17cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGx5ZSgpe3JldHVybisrYXllfX07bGV0ICQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBiZX1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250'@;
put 'YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgRXIoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudENoYW5nZS5zdWJzY3JpYmUoXz0+e3RoaXMuY2hl'@;
put 'Y2tBbmRVcGRhdGVWaWV3KF8pfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp'@;
put 'b24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEpe2NvbnN0IGQ9YT09PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZl'@;
put 'JiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dCh4OCksdHQoemEpLHR0KGFzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlsiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksYzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlzLnVwZGF0ZVZpZXcoZiksdGhp'@;
put 'cy5vcGVuQ2hhbmdlLmVtaXQoZil9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1zZXQgb3BlbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/'@;
put 'dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEtzKSx0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSxVSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy50ZW1w'@;
put 'bGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmV4cGFuZD1fLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEVyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChfLmV4'@;
put 'cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmQuZXhwYW5kZWQpfSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2Yg'@;
put 'YSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNo'@;
put 'KGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRl'@;
put 'bXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykodHQoemEsOCksdHQoYXMpLHR0KE5pKSx0dChGbyksdHQoWXUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlsiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19'@;
put 'LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxzZD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtp'@;
put 'bXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIFJme2NvbnN0cnVjdG9yKGwpe3RoaXMuZHJhZ1Bvc2l0aW9uPWwuZHJhZ1Bvc2l0aW9uLHRoaXMuZ3JvdXA9bC5ncm91cCx0aGlzLmRyYWdEYXRhVHJhbnNmZXI9bC5kcmFnRGF0YVRyYW5zZmVyLHRoaXMuZHJvcFBvaW50UG9zaXRpb249bC5k'@;
put 'cm9wUG9pbnRQb3NpdGlvbn19dmFyIEUwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRFJBR19TVEFSVD0wXT0iRFJBR19TVEFSVCIsY1tjLkRSQUdfTU9WRT0xXT0iRFJBR19NT1ZFIixjW2MuRFJBR19FTkQ9Ml09IkRSQUdfRU5EIixjW2MuRFJBR19FTlRFUj0zXT0iRFJBR19FTlRFUiIsY1tj'@;
put 'LkRSQUdfTEVBVkU9NF09IkRSQUdfTEVBVkUiLGNbYy5EUk9QPTVdPSJEUk9QIixjfShFMHx8e30pO2xldCBaSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kcmFnU3RhcnQ9bmV3IGJlLHRoaXMuZHJhZ01vdmU9bmV3IGJlLHRoaXMuZHJhZ0VuZD1uZXcgYmUsdGhpcy5kcm9w'@;
put 'PW5ldyBiZX1nZXQgZHJhZ1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdNb3ZlZCgpe3JldHVybiB0aGlzLmRyYWdNb3ZlLmFzT2JzZXJ2YWJsZSgpfWdldCBkcmFnRW5kZWQoKXtyZXR1cm4gdGhpcy5kcmFnRW5kLmFzT2JzZXJ2YWJsZSgp'@;
put 'fWdldCBkcm9wcGVkKCl7cmV0dXJuIHRoaXMuZHJvcC5hc09ic2VydmFibGUoKX1icm9hZGNhc3QoYSl7c3dpdGNoKGEudHlwZSl7Y2FzZSBFMC5EUkFHX1NUQVJUOnRoaXMuZHJhZ1N0YXJ0Lm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUkFHX01PVkU6dGhpcy5kcmFnTW92ZS5uZXh0KGEpO2Jy'@;
put 'ZWFrO2Nhc2UgRTAuRFJBR19FTkQ6dGhpcy5kcmFnRW5kLm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUk9QOnRoaXMuZHJvcC5uZXh0KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksa2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5ldmVudEJ1cz1oLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRo'@;
put 'aXMuZHJhZ1N0YXJ0PW5ldyBiZSx0aGlzLmRyYWdNb3ZlPW5ldyBiZSx0aGlzLmRyYWdFbmQ9bmV3IGJlLHRoaXMubGlzdGVuZXJzPVtdfWdldCBkcmFnU3RhcnRlZCgpe3JldHVybiB0aGlzLmRyYWdTdGFydC5hc09ic2VydmFibGUoKX1nZXQgZHJhZ01vdmVkKCl7cmV0dXJuIHRoaXMuZHJh'@;
put 'Z01vdmUuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdFbmRlZCgpe3JldHVybiB0aGlzLmRyYWdFbmQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9ufWF0dGFjaERyYWdMaXN0ZW5lcnMoYSl7dGhpcy5kcmFnZ2FibGVFbD1h'@;
put 'LHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIpKSx0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMuY3VzdG9tRHJhZ0V2ZW50KHRoaXMuZHJhZ2dhYmxlRWwsInRvdWNoc3RhcnQi'@;
put 'LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpKX1kZXRhY2hEcmFnTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnMmJnRoaXMubGlzdGVuZXJzLm1hcChhPT5hKCkpLHRoaXMubmVzdGVkTGlzdGVuZXJzJiZ0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoYT0+YSgpKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0'@;
put 'Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKX1nZXROYXRpdmVFdmVudE9iamVjdChhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsImNoYW5nZWRUb3VjaGVzIik/YS5jaGFuZ2VkVG91Y2hlc1swXTph'@;
put 'fWN1c3RvbURyYWdFdmVudChhLGQsaCxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4oYSxkLF89Pnt0aGlzLmluaXRpYWxQb3NpdGlvbj17cGFnZVg6dGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChfKS5wYWdlWCxwYWdlWTp0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KF8pLnBhZ2VZ'@;
put 'fSx0aGlzLm5lc3RlZExpc3RlbmVycz1bXSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmVzdGVkTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2VsZWN0c3RhcnQiLFQ9PntULnByZXZlbnREZWZhdWx0KCksVC5zdG9wSW1t'@;
put 'ZWRpYXRlUHJvcGFnYXRpb24oKX0pKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoaCksdGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0'@;
put 'ZW5lcigpLHRoaXMuaGFzRHJhZ1N0YXJ0ZWQ9ITAsdGhpcy5icm9hZGNhc3QoXyxFMC5EUkFHX1NUQVJUKSx0aGlzLm5lc3RlZExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsaCxUPT57VC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmhhc0Ry'@;
put 'YWdTdGFydGVkJiZ0aGlzLmJyb2FkY2FzdChULEUwLkRSQUdfTU9WRSl9KSl9LHRoaXMuZHJhZ1N0YXJ0RGVsYXkpfSksdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGYsVD0+e3RoaXMuaGFzRHJhZ1N0YXJ0ZWQmJih0aGlzLmhhc0Ry'@;
put 'YWdTdGFydGVkPSExLHRoaXMuYnJvYWRjYXN0KFQsRTAuRFJBR19FTkQpKSxjbGVhclRpbWVvdXQodGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQpLHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChXPT5XKCkpLHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNr'@;
put 'RHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpfSkpfSl9Y2hlY2tEcmFnU3RhcnRCb3VuZGFyeShhKXt0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGEsZD0+e2NvbnN0IGg9TWF0aC5hYnModGhpcy5nZXROYXRpdmVF'@;
put 'dmVudE9iamVjdChkKS5wYWdlWC10aGlzLmluaXRpYWxQb3NpdGlvbi5wYWdlWCksZj1NYXRoLmFicyh0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KGQpLnBhZ2VZLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZKTsoaD4xfHxmPjEpJiYoY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1N0YXJ0RGVs'@;
put 'YXlUaW1lb3V0KSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKSl9KX1icm9hZGNhc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2VuZXJhdGVEcmFnRXZlbnQoYSxkKTtzd2l0Y2goaC50eXBlKXtjYXNlIEUwLkRS'@;
put 'QUdfU1RBUlQ6dGhpcy5kcmFnU3RhcnQubmV4dChoKTticmVhaztjYXNlIEUwLkRSQUdfTU9WRTp0aGlzLmRyYWdNb3ZlLm5leHQoaCk7YnJlYWs7Y2FzZSBFMC5EUkFHX0VORDp0aGlzLmRyYWdFbmQubmV4dChoKX1oLmdob3N0RWxlbWVudD10aGlzLmdob3N0RWxlbWVudCxoLmRyb3BQb2lu'@;
put 'dFBvc2l0aW9uPXRoaXMuZHJvcFBvaW50UG9zaXRpb24sdGhpcy5ldmVudEJ1cy5icm9hZGNhc3QoaCl9Z2VuZXJhdGVEcmFnRXZlbnQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoYSk7cmV0dXJue3R5cGU6ZCxkcmFnUG9zaXRpb246e3BhZ2VYOmgucGFnZVgscGFn'@;
put 'ZVk6aC5wYWdlWSxtb3ZlWDpoLnBhZ2VYLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYLG1vdmVZOmgucGFnZVktdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVl9LGdyb3VwOnRoaXMuZ3JvdXAsZHJhZ0RhdGFUcmFuc2Zlcjp0aGlzLmRyYWdEYXRhVHJhbnNmZXIsZ2hvc3RFbGVtZW50OnRo'@;
put 'aXMuZ2hvc3RFbGVtZW50fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKEZvKSxhcihaSikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFJGPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSl7dGhpcy5kb21BZGFwdGVyPWF9Z2V0IGhhc0RyYWdnYWJsZVN0YXRlKCl7cmV0dXJuISF0aGlzLnNuYXBzaG90RHJhZ0V2ZW50JiYhIXRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdldCBjbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdl'@;
put 'dCBkcmFnRXZlbnQoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdERyYWdFdmVudH1jYXB0dXJlKGEsZCl7dGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QoYSksdGhpcy5zbmFwc2hvdERyYWdFdmVudD1kfWRpc2NhcmQoKXtkZWxldGUgdGhpcy5kcmFn'@;
put 'Z2FibGVFbENsaWVudFJlY3QsZGVsZXRlIHRoaXMuc25hcHNob3REcmFnRXZlbnR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGgxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWUo9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe2lmKHRoaXMuZWw9YSx0aGlzLmRyYWdFdmVudExpc3RlbmVyPWQsdGhpcy5kcmFnZ2FibGVTbmFwc2hvdD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLm5nWm9uZT1fLHRoaXMubGVhdmVBbmltQ29uZmlnPXt2YWx1ZTowLHBhcmFtczp7'@;
put 'dG9wOiIwcHgiLGxlZnQ6IjBweCJ9fSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmRyYWdnYWJsZVNuYXBzaG90KXRocm93IG5ldyBFcnJvcigiVGhlIGNsci1kcmFnZ2FibGUtZ2hvc3QgY29tcG9uZW50IGNhbiBvbmx5IGJlIHVzZWQgaW5z'@;
put 'aWRlIG9mIGEgY2xyRHJhZ2dhYmxlIGRpcmVjdGl2ZS4iKTt0aGlzLmRyYWdnYWJsZUdob3N0RWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcmFnZ2FibGVHaG9zdEVsLCJkcmFnZ2FibGUtZ2hvc3QiKSx0aGlzLmRyYWdFdmVudExpc3RlbmVy'@;
put 'Lmdob3N0RWxlbWVudD10aGlzLmRyYWdnYWJsZUdob3N0RWwsdGhpcy5zZXREZWZhdWx0R2hvc3RTaXplKHRoaXMuZHJhZ2dhYmxlR2hvc3RFbCk7Y29uc3QgVD17dG9wOnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFn'@;
put 'RXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VZLXRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC50b3A6MCxsZWZ0OnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFnRXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VYLXRo'@;
put 'aXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC5sZWZ0OjB9O2xldCBXPSExO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShpZT0+e1d8fCh0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRl'@;
put 'P3RoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QudG9wfXB4YCxgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QubGVmdH1weGApOnRoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRy'@;
put 'YWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCxgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCksVz0hMCk7Y29uc3QgcGU9dGhpcy5maW5kVG9wTGVmdFBvc2l0aW9uKGllLmRyYWdQb3NpdGlvbixUKTt0aGlzLnNldFBvc2l0aW9uU3R5bGUodGhp'@;
put 'cy5kcmFnZ2FibGVHaG9zdEVsLHBlLnBhZ2VYLHBlLnBhZ2VZKSx0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyb3BQb2ludFBvc2l0aW9uPXRoaXMuZmluZERyb3BQb2ludFBvc2l0aW9uKHBlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz'@;
put 'Y3JpYmUoKSl9c2V0RGVmYXVsdEdob3N0U2l6ZShhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlJiZ0aGlzLnNldFNpemVTdHlsZShhLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aCx0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJl'@;
put 'Y3QuaGVpZ2h0KX1hbmltYXRlVG9PbkxlYXZlKGEsZCl7dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5sZWF2ZUFuaW1Db25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6YSxsZWZ0OmR9fX0pfWZpbmRUb3BMZWZ0UG9zaXRpb24oYSxkKXtyZXR1cm57cGFnZVg6YS5wYWdlWC1kLmxlZnQscGFn'@;
put 'ZVk6YS5wYWdlWS1kLnRvcH19ZmluZERyb3BQb2ludFBvc2l0aW9uKGEpe3JldHVybiB0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlP3twYWdlWDphLnBhZ2VYK3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aC8yLHBhZ2VZOmEucGFnZVkrdGhp'@;
put 'cy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmhlaWdodC8yfTphfXNldFNpemVTdHlsZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ3aWR0aCIsYCR7ZH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwiaGVpZ2h0IixgJHtofXB4YCl9c2V0UG9zaXRpb25TdHls'@;
put 'ZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IixgJHtkfXB4YCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLGAke2h9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsInZpc2liaWxpdHkiLCJ2aXNpYmxlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChrYiw4KSx0dChSRiw4KSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyYWdnYWJsZS1naG9zdCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm'@;
put 'YSYmUzUoIkBsZWF2ZUFuaW1hdGlvbiIsZC5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImxlYXZl'@;
put 'QW5pbWF0aW9uIixbZmMoIjpsZWF2ZSIsW19zKHtsZWZ0OiIqIix0b3A6IioifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGN9KSgpLFdKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe2lmKHRoaXMu'@;
put 'dGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXI9aCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmNvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoZSAqY2xySWZEcmFnZ2VkIGRpcmVjdGl2ZSBjYW4g'@;
put 'b25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsckRyYWdnYWJsZSBkaXJlY3RpdmUuIik7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50'@;
put 'ZW1wbGF0ZSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5jb250YWluZXIuY2xlYXIoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp'@;
put 'YmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0dChhcywxMiksdHQoa2IsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkRyYWdnZWQiLCIiXV19KSxjfSkoKSxPRj0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lcj1hLHRoaXMucmVuZGVyZXI9ZH1nZXQgZGVmYXVsdEhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRIYW5kbGVFbH1zZXQgZGVmYXVsdEhhbmRsZUVsKGEpe3RoaXMuX2RlZmF1bHRIYW5kbGVFbD1hLHRoaXMuX2N1'@;
put 'c3RvbUhhbmRsZUVsfHx0aGlzLm1ha2VFbGVtZW50SGFuZGxlKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCl9Z2V0IGN1c3RvbUhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2N1c3RvbUhhbmRsZUVsfXJlZ2lzdGVyQ3VzdG9tSGFuZGxlKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJh'@;
put 'Z0xpc3RlbmVycygpLHRoaXMuX2N1c3RvbUhhbmRsZUVsPWEsdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9jdXN0b21IYW5kbGVFbCl9dW5yZWdpc3RlckN1c3RvbUhhbmRsZSgpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpLHRoaXMucmVuZGVyZXIu'@;
put 'cmVtb3ZlQ2xhc3ModGhpcy5fY3VzdG9tSGFuZGxlRWwsImRyYWctaGFuZGxlIiksZGVsZXRlIHRoaXMuX2N1c3RvbUhhbmRsZUVsLHRoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpfW1ha2VFbGVtZW50SGFuZGxlKGEp'@;
put 'e3RoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5fZGVmYXVsdEhhbmRsZUVsIT09YSYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kZWZhdWx0SGFuZGxlRWwsImRyYWctaGFuZGxlIiksdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5hdHRhY2hEcmFnTGlzdGVuZXJzKGEpLHRoaXMu'@;
put 'cmVuZGVyZXIuYWRkQ2xhc3MoYSwiZHJhZy1oYW5kbGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa2IpLGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksR0o9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnJlbmRlcmVyPWF9ZW50ZXIoKXt0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksImluLWRyYWciKX1leGl0KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCJpbi1kcmFnIil9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksJEo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmVsPWEsdGhpcy5kcmFnRXZl'@;
put 'bnRMaXN0ZW5lcj1kLHRoaXMuZHJhZ0hhbmRsZVJlZ2lzdHJhcj1oLHRoaXMudmlld0NvbnRhaW5lclJlZj1mLHRoaXMuY2ZyPV8sdGhpcy5pbmplY3Rvcj1ULHRoaXMuZHJhZ2dhYmxlU25hcHNob3Q9Vyx0aGlzLmdsb2JhbERyYWdNb2RlPWllLHRoaXMuZHJhZ1N0YXJ0RW1pdHRlcj1uZXcg'@;
put 'RXIsdGhpcy5kcmFnTW92ZUVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ0VuZEVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ09uPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRyYWdnYWJsZUVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEZhY3Rvcnk9dGhpcy5jZnIu'@;
put 'cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoWUopfXNldCBkYXRhVHJhbnNmZXIoYSl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRGF0YVRyYW5zZmVyPWF9c2V0IGdyb3VwKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZ3JvdXA9YX1zZXQgZHJhZ1N0YXJ0RGVsYXkoYSl7Im51bWJlciI9'@;
put 'PXR5cGVvZiBhP3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0RGVsYXk9YToic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydERlbGF5PXBhcnNlSW50KGEsMTApfHwwKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRyYWdIYW5kbGVS'@;
put 'ZWdpc3RyYXIuZGVmYXVsdEhhbmRsZUVsPXRoaXMuZHJhZ2dhYmxlRWwsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuZ2xvYmFsRHJhZ01vZGUuZW50ZXIoKSx0aGlzLmRyYWdPbj0hMCx0aGlzLmN1'@;
put 'c3RvbUdob3N0fHx0aGlzLmNyZWF0ZURlZmF1bHRHaG9zdChhKSx0aGlzLmRyYWdTdGFydEVtaXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShhPT57dGhpcy5kcmFnTW92ZUVt'@;
put 'aXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ0VuZGVkLnN1YnNjcmliZShhPT57dGhpcy5nbG9iYWxEcmFnTW9kZS5leGl0KCksdGhpcy5kcmFnT249ITEsdGhpcy5jdXN0b21HaG9zdHx8dGhpcy5kZXN0'@;
put 'cm95RGVmYXVsdEdob3N0KCksdGhpcy5kcmFnRW5kRW1pdHRlci5lbWl0KG5ldyBSZihhKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpfWNy'@;
put 'ZWF0ZURlZmF1bHRHaG9zdChhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNhcHR1cmUodGhpcy5kcmFnZ2FibGVFbCxhKSx0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50RmFjdG9yeSwwLHRoaXMuaW5qZWN0b3IsW1t0aGlzLmRyYWdnYWJsZUVs'@;
put 'LmNsb25lTm9kZSghMCldXSl9ZGVzdHJveURlZmF1bHRHaG9zdCgpe3RoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuZGlzY2FyZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoa2Ip'@;
put 'LHR0KE9GKSx0dChhcyksdHQoSzApLHR0KEVhKSx0dChSRiksdHQoR0opKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsV0osNSksMiZhKXtsZXQgZjth'@;
put 'aShmPWxpKCkpJiYoZC5jdXN0b21HaG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZHJhZ2dhYmxlIiwhMCkoImJlaW5nLWRyYWdnZWQiLGQuZHJhZ09uKX0saW5wdXRzOntkYXRhVHJhbnNmZXI6WyJjbHJEcmFnZ2FibGUiLCJk'@;
put 'YXRhVHJhbnNmZXIiXSxncm91cDpbImNsckdyb3VwIiwiZ3JvdXAiXSxkcmFnU3RhcnREZWxheTpbImNsckRyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXX0sb3V0cHV0czp7ZHJhZ1N0YXJ0RW1pdHRlcjoiY2xyRHJhZ1N0YXJ0IixkcmFnTW92ZUVtaXR0ZXI6ImNsckRyYWdNb3Zl'@;
put 'IixkcmFnRW5kRW1pdHRlcjoiY2xyRHJhZ0VuZCJ9LGZlYXR1cmVzOlt0aShba2IsT0YsUkYsR0osaDFdKV19KSxjfSkoKSxxSj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu'@;
put 'XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NvbnN0IEtKPW5ldyBTaSgiRk9DVVNfT05fVklFV19JTklUIiksZHllPXtwcm92aWRlOktKLHVzZVZhbHVlOiEwfTtsZXQgUEY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5lbD1hLHRoaXMu'@;
put 'cGxhdGZvcm1JZD1kLHRoaXMuZm9jdXNPblZpZXdJbml0PWgsdGhpcy5yZW5kZXJlcj1fLHRoaXMuZGlyZWN0Rm9jdXM9ITAsdGhpcy5kZXN0cm95JD1uZXcgYmUsdGhpcy5faXNFbmFibGVkPXRoaXMuZm9jdXNPblZpZXdJbml0LHRoaXMuZG9jdW1lbnQ9ZixULnJ1bk91dHNpZGVBbmd1bGFy'@;
put 'KCgpPT5uMihhLm5hdGl2ZUVsZW1lbnQsImZvY3Vzb3V0IikucGlwZShhaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5kaXJlY3RGb2N1c3x8KHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSx0aGlzLnJl'@;
put 'bmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwib3V0bGluZSIsbnVsbCkpfSkpfXNldCBpc0VuYWJsZWQoYSl7dGhpcy5mb2N1c09uVmlld0luaXQmJiJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLl9pc0VuYWJsZWQ9YSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5mb2N1'@;
put 'cygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLl9pc0VuYWJsZWQmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZWwubmF0'@;
put 'aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZGlyZWN0Rm9jdXM9ITEsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5y'@;
put 'ZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIm91dGxpbmUiLCJub25lIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEdzKSx0dChLSiksdHQoSXMp'@;
put 'LHR0KEZvKSx0dChObykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb2N1c09uVmlld0luaXQiLCIiXV0saW5wdXRzOntpc0VuYWJsZWQ6WyJjbHJGb2N1c09uVmlld0luaXQiLCJpc0VuYWJsZWQiXX19KSxjfSkoKSxxNT0oKCk9PntjbGFzcyBje31yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W2R5ZV0saW1wb3J0czpbW29vXV19KSxjfSkoKSxoeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3By'@;
put 'ZXZpb3VzRm9jdXNUcmFwcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9YX1nZXQgbmJGb2N1c1RyYXBwZXJzKCl7cmV0dXJuIHRoaXMu'@;
put 'X3ByZXZpb3VzRm9jdXNUcmFwcy5sZW5ndGh9YWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKXt0aGlzLl9jdXJyZW50PXRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksTXA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuZWw9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5mb2N1c1RyYXBzVHJhY2tlcj1oLHRoaXMucmVuZGVyZXI9Zix0aGlz'@;
put 'LnBsYXRmb3JtSWQ9Xyx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkPSExLHRoaXMuX2NvbmZpZz17c3RyaWN0OiEwfSx0aGlzLmRvY3VtZW50PXRoaXMuaW5qZWN0b3IuZ2V0KElzKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmN1cnJlbnQ9dGhpc31zZXQgY29uZmlnKGEpe3RoaXMuX2NvbmZpZz1P'@;
put 'YmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywiIj09PWE/e306YSl9Z2V0IHBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzKCl7cmV0dXJuWy4uLnRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZl06bm90KFt0YWJpbmRleD0iLTEiXSksIGJ1dHRvbjpub3QoW2Rpc2Fi'@;
put 'bGVkXSk6bm90KFt0YWJpbmRleD0iLTEiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Ii0xIl0pLCBb'@;
put 'Y29udGVudGVkaXRhYmxlPSJ0cnVlIl06bm90KFt0YWJpbmRleD0iLTEiXSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD0iLTEiXSkgJyldfW5nT25Jbml0KCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi'@;
put 'dGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQ9dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMucGFyZW50RWxlbWVudD10aGlz'@;
put 'LmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCksdGhpcy5hZGRSZWJvdW5kRWxzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZVJlYm91bmRFbHMoKSx0aGlzLnNldFByZXZpb3VzRm9jdXMoKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmFjdGl2YXRlUHJldmlvdXNUcmFwcGVyKCl9'@;
put 'b25Gb2N1c0luKGEpe2NvbnN0IGQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMuZm9jdXNUcmFwc1RyYWNrZXIuY3VycmVudCE9PXRoaXN8fCFScyh0aGlzLnBsYXRmb3JtSWQpfHx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8KGEudGFyZ2V0PT09dGhp'@;
put 'cy50b3BSZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0xhc3RGb2N1c2FibGUoKSx0aGlzLmZvY3VzVHJhcEVsSWZPdXRzaWRlKCkpOmEudGFyZ2V0PT09dGhpcy5ib3R0b21SZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhp'@;
put 'cy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCksdGhpcy5mb2N1c1RyYXBFbElmT3V0c2lkZSgpKTp0aGlzLl9jb25maWcuc3RyaWN0P3RoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMubG9jYWxGb2N1c0VzY2FwZWQ9ITApfXNldFByZXZpb3VzRm9jdXMoKXt0aGlzLnByZXZpb3VzQWN0'@;
put 'aXZlRWxlbWVudCYmdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMucHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCl9Y3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKXtjb25zdCBhPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiB0aGlz'@;
put 'LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsIjAiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxhfWFkZFJlYm91bmRFbHMoKXtpZihScyh0aGlzLnBsYXRmb3JtSWQpKXt0aGlzLnRvcFJlYm91bmRFbD10aGlzLmNyZWF0'@;
put 'ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCksdGhpcy5ib3R0b21SZWJvdW5kRWw9dGhpcy5jcmVhdGVGb2N1c2FibGVPZmZTY3JlZW5FbCgpO2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50RWxlbWVudCx0aGlzLnRvcFJlYm91'@;
put 'bmRFbCxhKSxhLm5leHRTaWJsaW5nP3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCxhLm5leHRTaWJsaW5nKTp0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCl9fXJlbW92'@;
put 'ZVJlYm91bmRFbHMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRvcFJlYm91bmRFbCYmdGhpcy5ib3R0b21SZWJvdW5kRWwmJih0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy50b3BSZWJvdW5kRWwpLHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJv'@;
put 'dHRvbVJlYm91bmRFbCksZGVsZXRlIHRoaXMudG9wUmVib3VuZEVsLGRlbGV0ZSB0aGlzLmJvdHRvbVJlYm91bmRFbCl9Zm9jdXNGaXJzdEZvY3VzYWJsZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGgmJih0aGlzLmZpcnN0Rm9jdXNhYmxlRWw9'@;
put 'dGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1thXSksIXRoaXMuZmlyc3RGb2N1c2FibGVFbCk7YSsrKTt9Zm9jdXNMYXN0Rm9jdXNhYmxlKCl7Zm9yKGxldCBhPXRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHMubGVuZ3RoLTE7YT49MCYmKHRoaXMubGFz'@;
put 'dEZvY3VzYWJsZUVsPXRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNbYV0pLCF0aGlzLmxhc3RGb2N1c2FibGVFbCk7YS0tKTt9Zm9jdXNUcmFwRWxJZk91dHNpZGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxl'@;
put 'bWVudCl8fHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpfWZvY3VzRWxlbWVudChhKXtyZXR1cm4gYSYmYS5mb2N1cyYmKGEuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YSk/YTpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChOaSksdHQoRWEpLHR0KGh5ZSksdHQoRm8pLHR0KEdzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvY3VzVHJhcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJmb2N1c2luIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v'@;
put 'bkZvY3VzSW4oZil9LDAsZmYpfSxpbnB1dHM6e2NvbmZpZzpbImNsckZvY3VzVHJhcCIsImNvbmZpZyJdfX0pLGN9KSgpLHlFPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5c'@;
put 'dTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvb11dfSksY30pKCkscHllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90ZXh0Q29udGVudENoYW5nZT1uZXcgYmV9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50fXNldCB0ZXh0Q29udGVudChhKXt0aGlz'@;
put 'Ll90ZXh0Q29udGVudD1hLHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IHRleHRDb250ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxneWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7'@;
put 'aW1wb3J0czpbW29vXV19KSxjfSkoKSx2eWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHhiXV19KSxjfSkoKSxkaD0o'@;
put 'KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVV1LHRoaXMuc3RhdGU9VXUuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMu'@;
put 'c3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBVdS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0'@;
put 'aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBVdS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgVXUuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNl'@;
put 'IFV1LkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFV1LkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkaXNhYmxl'@;
put 'ZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTp2Yix1c2VFeGlzdGluZzpjfV0pXSxhdHRyczptN2UsbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmKEFpKCksVnIoMCwwKSxKZSgxLHY3ZSwyLDEsInNwYW4iLDEpLEplKDIsXzdlLDIsMSwic3BhbiIsMSksSmUoMyxiN2UsMiwxLCJzcGFuIiwxKSx6cigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGQuc3RhdGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUu'@;
put 'TE9BRElORyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltuZCx0aF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImRl'@;
put 'ZmF1bHRCdXR0b24iLFtmYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksZmMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjB9KV0pXSksYTEoInNwaW5uZXIiLFtmYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1'@;
put 'KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksZmMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pLGExKCJ2YWxpZGF0ZWQiLFtmYygiOmVudGVyIixbcnUoIjYwMG1zIixIbWUoW19zKHt0cmFu'@;
put 'c2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksX3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksX3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEp'@;
put 'IixvZmZzZXQ6MX0pXSkpXSksZmMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxieWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSx5eWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKExLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbYnllLHZ5ZV19KSxjfSkoKSx3eWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIm5nLWNvbXBvbmVudCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksd0U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZp'@;
put 'KHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksQ3llPTAsYWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrQ3llLHRoaXMuX2lkQ2hhbmdlPW5ldyBUZSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lk'@;
put 'fXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0'@;
put 'b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTeWU9MCxLNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK1N5ZSx0aGlzLl9pZENoYW5nZT1uZXcgVGUodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9p'@;
put 'ZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IEZGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7'@;
put 'cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51'@;
put 'bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLE15ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMu'@;
put 'Y29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1lcnJvciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksZHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbZW9dLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIRj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT'@;
put 'ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1d'@;
put 'LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxkcigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWko'@;
put 'KSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGswPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgYmUsdGhpcy5faGVscGVycz1uZXcgYmV9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2xDaGFuZ2VzLmFz'@;
put 'T2JzZXJ2YWJsZSgpfWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfXNldEhlbHBlcnMoYSl7dGhpcy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgQTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5WQUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30o'@;
put 'QTB8fHt9KTtsZXQgbGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3RhdHVzQ2hhbmdlcz1uZXcgVGUoQTAuTk9ORSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xT'@;
put 'ZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShkPT57ZCYmKHRoaXMuY29udHJvbD1kLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZSgpfSkpKX0pKX1nZXQgc3RhdHVz'@;
put 'Q2hhbmdlcygpe3JldHVybiB0aGlzLl9zdGF0dXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7aWYodGhpcy5jb250cm9sKXtjb25zdCBhPUEwW3Ro'@;
put 'aXMuY29udHJvbC5zdGF0dXNdO3RoaXMuX3N0YXR1c0NoYW5nZXMubmV4dChbIlZBTElEIiwiSU5WQUxJRCJdLmluY2x1ZGVzKGEpP2E6QTAuTk9ORSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihrMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBYNT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShYNXx8e30pO2xldCBPZj0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD1YNS5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKFg1KS5tYXAoYT0+WDVbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1'@;
put 'LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09WDUuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlz'@;
put 'VmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxTaXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCksVXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPV8sdGhpcy5lbmFibGVH'@;
put 'cmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7KHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNl'@;
put 'KSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRo'@;
put 'aXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29s'@;
put 'LW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuZm9yQXR0cj1hKSl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhZCw4KSx0dChPZiw4KSx0dChrMCw4'@;
put 'KSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJmb3IiLGQuZm9yQXR0cil9LGlucHV0czp7Zm9yQXR0cjpbImZvciIsImZvckF0dHIiXX19KSxj'@;
put 'fSkoKSx4eWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZGe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxk'@;
put 'cigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QTAuTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEEwLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEEw'@;
put 'LklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNl'@;
put 'cnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJj'@;
put 'bHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoT2YsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEE4PSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLl9keW5hbWljPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMucHVzaCh0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShfPT57dGhpcy5zdGF0ZT1fLHRoaXMudXBkYXRlSGVscGVycygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hh'@;
put 'bmdlcy5zdWJzY3JpYmUoXz0+e3RoaXMuY29udHJvbD1ffSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQmJighIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudCYmKCF0aGlzLnRvdWNoZWR8fHRoaXMuc3RhdGU9PT1BMC5OT05FKXx8IXRo'@;
put 'aXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QTAuSU5WQUxJRCl9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRCYm'@;
put 'ISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5JTlZBTElEJiYhIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hl'@;
put 'ZH1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3Mo'@;
put 'IXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BMC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVy'@;
put 'dGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQs'@;
put 'c2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGxkKSx0dChPZiw4KSx0dChjZCksdHQoazApKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoTG8oaCxVcyw1KSxMbyhoLHh5ZSw1KSxMbyhoLE15ZSw1KSxMbyhoLEhGLDUpKSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLGFpKGY9bGkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmly'@;
put 'c3QpLGFpKGY9bGkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBDRXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3Is'@;
put 'IXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoSzApLGY9dGhpcy5pbmplY3Rvci5nZXQoTmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkod3llKSk7Y29uc3QgXz1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5'@;
put 'KGwpLFQ9W107VFtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBXPWEuY3JlYXRlQ29tcG9uZW50KF8sdm9pZCAwLHZvaWQgMCxUKTthLnJlbW92ZSgwKSxXLmluc3RhbmNlLl9keW5hbWljPSEwLHRoaXMuaW5qZWN0b3I9Vy5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0'@;
put 'b3IuZ2V0KGwsYSl9fWxldCBORj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgYmV9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFQ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMudmNyPWEsdGhpcy53cmFwcGVy'@;
put 'VHlwZT1kLHRoaXMubmdDb250cm9sPWYsdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbmRlcmVyPV8sdGhpcy5lbD1UO3RyeXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQoazApLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGxkKSx0aGlzLmNv'@;
put 'bnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoY2QpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KE5GKX1jYXRjaHt9dGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuaW5pdENvbnRyb2xDbGFzcyhfLFQubmF0aXZlRWxlbWVudCksdGhpcy5tYXJr'@;
put 'Q29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5tYXJrQXNUb3VjaGVkKCl9KSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoVz0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KFcpfSkpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNl'@;
put 'cnZpY2UuaWQ9YSl9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgQ0UodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGFkKTt0cnl7dGhpcy5jb250YWluZXJJ'@;
put 'ZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KEs1KX1jYXRjaHt9dGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2Vy'@;
put 'dmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZp'@;
put 'Y2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNo'@;
put 'ZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRB'@;
put 'dHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtsZXQgZD0iaGVscGVyIjty'@;
put 'ZXR1cm4gYS5zaG93SW52YWxpZD9kPSJlcnJvciI6YS5zaG93VmFsaWQmJihkPSJzdWNjZXNzIiksdGhpcy5jb250YWluZXJJZFNlcnZpY2U/dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWQuY29uY2F0KCItIixkKTp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/dGhpcy5jb250cm9sSWRTZXJ2aWNl'@;
put 'LmlkLmNvbmNhdCgiLSIsZCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KE9tKSx0dChFYSksdHQoenUpLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1'@;
put 'bmN0aW9uKGEsZCl7MSZhJiZ4dCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ0MSgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksSko9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2Vydmlj'@;
put 'ZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJr'@;
put 'Q29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChPZiksdHQoTkYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLFVzLDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwy'@;
put 'JmEmJmRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbImNsckxhYmVsU2l6ZSIsImxhYmVs'@;
put 'U2l6ZSJdfSxmZWF0dXJlczpbdGkoW09mLE5GXSldfSksY30pKCksWWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhXV19KSxjfSkoKTtjb25zdCBWRj1uZXcgU2koIklTX1RPR0dMRSIpLFR5ZT17cHJvdmlkZTpWRix1c2VGYWN0b3J5OmZ1bmN0aW9uIEF5ZSgpe3JldHVybiBuZXcgVGUoITEpfX07bGV0IFQwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5fZHluYW1pYz0hMSx0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gt'@;
put 'd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsVXMsNyksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7'@;
put 'MiZhJiZkcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdGkoW2FkLFR5ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QzdlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSh3N2UpLGtyKDApLGtyKDEsMSksSmUoMix5N2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEMD0oKCk9PntjbGFzcyBjIGV4'@;
put 'dGVuZHMgVDh7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKGEsVDAsZCxoLGYsXyksdGhpcy50b2dnbGU9VH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihWRixudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUm'@;
put 'JmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSksUDQoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2ti'@;
put 'b3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbZW9dfSksY30pKCksRDg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRo'@;
put 'aXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9'@;
put 'bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNk'@;
put 'KSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmTG8oaCxEMCw1KSwyJmEpe2xldCBm'@;
put 'O2FpKGY9bGkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9u'@;
put 'dWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdGkoW2xkLGswLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpEN2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5n'@;
put 'SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1'@;
put 'ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh'@;
put 'cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoVDdl'@;
put 'KSxrcigwKSxKZSgxLFM3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxKZSg1LE03ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDYseDdlLDEsMCwiY2RzLWljb24iLDMpLEplKDcsRTdlLDEsMCwiY2RzLWljb24iLDQpLEplKDgsazdlLDEsMCwi'@;
put 'bmctY29udGVudCIsMCksSmUoOSxBN2UsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xh'@;
put 'c3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRl'@;
put 'bmNpZXM6W1ppLFVzLGRjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLFljLHdFXSxZY119KSxjfSkoKTtmdW5jdGlvbiB1ZChjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHUyPSgoKT0+e2NsYXNzIGN7'@;
put 'Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9dWQoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMu'@;
put 'X2ludmVyc2U9dWQoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXVkKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVt'@;
put 'PXVkKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtYnVz'@;
put 'eSIsITApLGRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRz'@;
put 'OntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3Io'@;
put 'MCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxBYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO3ZhciB4'@;
put 'cD1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSh4cHx8e30pO2xldCBRSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlk'@;
put 'PWR9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKSh0dChOaSksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksY30pKCksTDg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj14cC5W'@;
put 'RVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBFcix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMu'@;
put 'Y2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1l'@;
put 'bnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNh'@;
put 'YmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVu'@;
put 'dEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90'@;
put 'aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PXdvLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09d28uRW5kJiZ0aGlz'@;
put 'Lm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxURihhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1'@;
put 'cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVt'@;
put 'cy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMu'@;
put 'Zm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJ'@;
put 'dGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPWwyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgeHAuVkVSVElDQUw6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd247Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBk'@;
put 'PT09d28uQXJyb3dSaWdodDtjYXNlIHhwLkJPVEg6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd258fGQ9PT13by5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB4cC5WRVJUSUNB'@;
put 'TDpyZXR1cm4gZD09PXdvLkFycm93VXA7Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBkPT09d28uQXJyb3dMZWZ0O2Nhc2UgeHAuQk9USDpyZXR1cm4gZD09PXdvLkFycm93VXB8fGQ9PT13by5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0'@;
put 'aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2Vz'@;
put 'LnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1'@;
put 'ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmTG8oaCxRSiw1KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXli'@;
put 'b2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246WyJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxm'@;
put 'b2N1c2FibGVJdGVtczpbImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6TDdlLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFp'@;
put 'KCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCRj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'O2NvbnN0IEk4PW5ldyBTaSgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2NsYXNzIEx5ZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwp'@;
put 'fWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0'@;
put 'cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hb'@;
put 'bF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10'@;
put 'aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBJeWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVu'@;
put 'c2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlz'@;
put 'Lm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBTRXt9ZnVuY3Rpb24gZVEoYyl7cmV0dXJuW2Mse3Byb3ZpZGU6U0UsdXNlRXhpc3Rpbmc6Y31dfWNsYXNzIFJ5ZSBleHRlbmRzIEl5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50'@;
put 'cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBUZShudWxsKX1nZXQgZm9jdXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1s'@;
put 'ZXQgT3llPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgVGUoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IHF4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0'@;
put 'Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1'@;
put 'dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgTHllfXNl'@;
put 'bGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVj'@;
put 'dGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMu'@;
put 'c2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNl'@;
put 'bGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2VRKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0'@;
put 'Zm9ybUlkPWYsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgUnllLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQg'@;
put 'dHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElu'@;
put 'cHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5w'@;
put 'dXQoKXt0aGlzLnRleHRJbnB1dCYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhp'@;
put 'cy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVj'@;
put 'dGlvbk1vZGVsLm1vZGVsO2NvbnN0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7'@;
put 'dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJ'@;
put 'bmRleChoPT5oLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PWQxLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT1kMS5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNl'@;
put 'dWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShp'@;
put 'ZCgxKSkuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPWwyKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIHdvLkVudGVyOnRoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5w'@;
put 'c2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSksZD0hMCk7YnJlYWs7Y2FzZSB3by5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2Ugd28uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0'@;
put 'aGlzLm9wZW5BbmRNb3ZlVG8oZDEuVVApLGQ9ITA7YnJlYWs7Y2FzZSB3by5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKGQxLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PXdvLlRhYiYmKCF0aGlzLnNlbGVjdGlv'@;
put 'blNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxhLmtleSE9PXdvLkJhY2tzcGFjZSkmJmEua2V5IT09d28uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3Ro'@;
put 'Iil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5n'@;
put 'KGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7UnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRo'@;
put 'aXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0'@;
put 'aGlzLnRleHRJbnB1dC5jb250YWlucyhkKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoS3MpLGFyKE95ZSksYXIoR3MpKX0sYy5cdTAy'@;
put 'NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IFB5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsbmIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28scWwsc2EsQkYsWWMsc2QseGIsQWJdLFljLHNkXX0pLGN9KSgpLGpGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBOHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJj'@;
put 'bHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt0aShbbGQsazAsYWQsY2RdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOlU3ZSxkZWNsczoxMCx2YXJzOjcsY29u'@;
put 'c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk'@;
put 'ZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJk'@;
put 'YW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoQWkoejdlKSxrcigwKSxKZSgxLEY3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksa3IoNCwxKSxKZSg1LEg3ZSwxLDAsImNkcy1pY29uIiwzKSxKZSg2LE43ZSwxLDAsImNkcy1pY29uIiw0KSx5ZSgpLEplKDcsVjdlLDEsMCwibmctY29udGVudCIsMCksSmUo'@;
put 'OCxCN2UsMSwwLCJuZy1jb250ZW50IiwwKSxKZSg5LGo3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLFJlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxDZSgzKSxSZSgibmdJZiIsZC5zaG93'@;
put 'SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbWmksVXMsZGMscXNdLGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEsakYsZCxoLGYsXyksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0'@;
put 'KHp1LDEwKSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLHRR'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxxbCxzYSxZY10sWWNd'@;
put 'fSksY30pKCksekY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IFRlKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZ5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sdFEsc2FdXX0pLGN9KSgpO2NvbnN0IE55ZT0vZCsuK20rLit5Ky9pLFZ5ZT0vbSsuK2QrLit5Ky9pLEJ5ZT0vZCt8bSt8eSsvaSxqeWU9L1xk'@;
put 'Ky9nLHp5ZT0vTW9iaS9pLFV5ZT0vXHUyMDBmL2csVUY9IllZWVkiLE1FPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixVRl19LFdGPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkREIixVRl19LFp5ZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0'@;
put 'OltVRiwiTU0iLCJERCJdfTtmdW5jdGlvbiByUShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgcXlle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSxfPSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhj'@;
put 'bHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPV99Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgcDF7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlz'@;
put 'LmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2Nv'@;
put 'bnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgcDEoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHAxKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21w'@;
put 'YXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6'@;
put 'YCR7bH1gfX1jbGFzcyBLeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5mb2N1c2FibGVEYXk9ZCx0aGlzLnRvZGF5PWgsdGhpcy5maXJzdERheU9mV2Vlaz1mLHRoaXMuZXhjbHVkZWREYXRlcz1fLHRoaXMuY3Vyck1v'@;
put 'bnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRG'@;
put 'b2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmll'@;
put 'dyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSxfPVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9u'@;
put 'dGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKF89dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFy'@;
put 'VmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsXyksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29t'@;
put 'cGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSxfPWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuIShfPj1oJiZfPD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3IHF5ZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRl'@;
put 'ZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gV3llKGMs'@;
put 'bCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFy'@;
put 'LmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCBfPTA7Xzw2O18rKylmW19dPWguc2xpY2UoNypfLDcqKF8rMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2Vs'@;
put 'ZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdGhpcy5zZWxlY3RlZERheS5kYXRlLTFdLmlzU2VsZWN0ZWQ9ITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhp'@;
put 'cy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVG'@;
put 'bGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhp'@;
put 'cy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IHAxKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vy'@;
put 'ck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfX1sZXQgVGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3Jl'@;
put 'dHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhp'@;
put 'cy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygp'@;
put 'fWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWNPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKSxoPWNPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuTmFycm93KS5zbGljZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IF89'@;
put 'MDtfPDc7XysrKWEucHVzaCh7ZGF5OmRbX10sbmFycm93OmhbX119KTtpZihmPjApe2NvbnN0IF89YS5zcGxpY2UoMCxmKTthLnB1c2goLi4uXyl9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlh'@;
put 'dGVkPXVPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXVPKHRoaXMubG9jYWxlLEFjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXpl'@;
put 'Rmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBGdWUoYyl7cmV0dXJuIGpsKGMpW3FvLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiB4Xyhj'@;
put 'LGwpe3JldHVybiB0ZChqbChjKVtxby5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUseTAuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihLZCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
put 'LGN9KSgpO2NsYXNzIGQye2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVu'@;
put 'ZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBkMih0aGlzLnllYXItMSwxMSk6bmV3IGQyKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3Jl'@;
put 'dHVybiAxMT09PXRoaXMubW9udGg/bmV3IGQyKHRoaXMueWVhcisxLDApOm5ldyBkMih0aGlzLnllYXIsdGhpcy5tb250aCsxKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPXJRKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5t'@;
put 'YXAoKGEsZCk9Pm5ldyBwMSh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgYmUsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJD'@;
put 'aGFuZ2U9bmV3IGJlLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgYmUsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgYmV9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1n'@;
put 'ZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2Fs'@;
put 'ZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEpe3RoaXMu'@;
put 'c2VsZWN0ZWREYXk9YSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBkMih0'@;
put 'aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IGQyKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEp'@;
put 'KX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGQyKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1t'@;
put 'b3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlz'@;
put 'LnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShh'@;
put 'KSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZv'@;
put 'Y3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hh'@;
put 'bmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgcDEodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1'@;
put 'bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE84PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pv'@;
put 'bmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRl'@;
put 'eD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gUnModGhp'@;
put 'cy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodXAoKSxMYSgoKT0+UnModGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0'@;
put 'aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IHAxKDAsMCwxKSxtYXhEYXRlOm5ldyBwMSg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PU1FLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5j'@;
put 'bGRyTG9jYWxlRGF0ZUZvcm1hdD10aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0'@;
put 'dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcChfPT5wYXJzZUludChfLDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKGQsaC0x'@;
put 'LGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKF89PnBhcnNlSW50KF8sMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoZCxoLTEsZil9ZWxz'@;
put 'ZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoOTk5OSwxMSwzMSl9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0'@;
put 'cmluZygpOiIwIitkLF89aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/Zit0aGlzLmRlbGltaXRlcnNbMF0rXyt0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PVdGP18r'@;
put 'dGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK18rdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWEpcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgZD1hLm1hdGNoKGp5ZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdFtoLGYsX109ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoXyxmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1h'@;
put 'dD09PVdGP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKF8saCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShoLGYsXyl9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2Fs'@;
put 'ZURpc3BsYXlGb3JtYXQ9TnllLnRlc3QoYSk/TUU6VnllLnRlc3QoYSk/V0Y6WnllLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNl'@;
put 'KFV5ZSwiIikuc3BsaXQoQnllKTtkJiY0PT09ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+'@;
put 'LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgpe3JldHVybiBoPjAmJmg8PXJRKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLF89K2QtMSxUPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aChfKXx8IXRoaXMuaXNWYWxpZERhdGUoZixfLFQpKXJldHVybiBudWxsO2Nv'@;
put 'bnN0IFc9ZnVuY3Rpb24gR3llKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDAp'@;
put 'LGR9KGYpO3JldHVybi0xIT09Vz9uZXcgRGF0ZShXLF8sVCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoVGIpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxEYj0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgYmUsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IGJlfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rp'@;
put 'cnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdG9nZ2xlU2VydmljZT1k'@;
put 'LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mfWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/'@;
put 'dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9b25E'@;
put 'YXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpLHRo'@;
put 'aXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoUGYpLHR0KEtzKSx0dChEYiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5'@;
put 'cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6WyJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdG'@;
put 'b2N1cygpfSksTmUoMSkseWUoKSksMiZhJiYoZHIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1Nl'@;
put 'bGVjdGVkKSxUcigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLENlKDEp'@;
put 'LGdyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPV8sdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9'@;
put 'Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZv'@;
put 'Y3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChsMihhLmtleSkpe2Nhc2Ugd28uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIHdvLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OmEu'@;
put 'cHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2Ugd28uQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1pbml0'@;
put 'aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNj'@;
put 'cmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IEt5ZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5mb2N1c2VkRGF5'@;
put 'LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYiksdHQoUGYpLHR0KE84KSx0dChQOCks'@;
put 'dHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6'@;
put 'W1sxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLCJyb2xlIiwiaGVhZGluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImNhbGVuZGFyLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9m'@;
put 'Il0sWyJyb2xlIiwiaGVhZGluZyIsMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJihtZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLEplKDIsWjdlLDIsMiwidGgiLDIpLHllKCksSmUoMyxXN2UsMiwxLCJ0ciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2FsZW5kYXJW'@;
put 'aWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9LGRlcGVuZGVuY2llczpbaVEseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHhFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSx0aGlzLl9kb2N1bWVudCYmKHRo'@;
put 'aXMuX2lzVXNlckFnZW50TW9iaWxlPXp5ZS50ZXN0KGEuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRo'@;
put 'PDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihJcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEY4PSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLnBvc2l0aW9uPXgwWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3Vy'@;
put 'cmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNo'@;
put 'YW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksc1E9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9ZCx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWYsdGhpcy5fZWxSZWY9Xyx0aGlzLl9mb2N1c2Vk'@;
put 'TW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlz'@;
put 'cGxheWVkQ2FsZW5kYXIubW9udGh9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWwyKGEua2V5KTtkPT09d28uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5k'@;
put 'ZXg+MD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVs'@;
put 'dCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8Nj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250'@;
put 'aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4KzYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD41JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRN'@;
put 'b250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4LTYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2Vy'@;
put 'U2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEY4KSx0dChUYiksdHQoUGYpLHR0KE84KSx0dChOaSkp'@;
put 'fSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJmRyKCJtb250aHBp'@;
put 'Y2tlciIsITApfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRo'@;
put 'IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmSmUoMCxHN2UsMiw0LCJidXR0b24iLDApLDImYSYmUmUoIm5nRm9yT2YiLGQubW9udGhOYW1lcyl9LGRlcGVuZGVuY2llczpbeHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIExie2NvbnN0cnVjdG9yKGwp'@;
put 'e3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgTGIodGhpcy55'@;
put 'ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgTGIodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBMYigobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZ'@;
put 'ZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGxRPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnllYXJSYW5nZU1v'@;
put 'ZGVsPW5ldyBMYih0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO2Q9PT13by5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpOmQ9PT13by5BcnJvd0Rv'@;
put 'd24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09d28uQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoNSkpOmQ9PT13by5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5p'@;
put 'bmNyZW1lbnRGb2N1c1llYXJCeSgtNSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1wcmV2aW91c0RlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhp'@;
put 'cy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJl'@;
put 'bnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRhYkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5n'@;
put 'ZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZ'@;
put 'ZWFyPT09YT8wOi0xfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9k'@;
put 'ZWwubmV4dERlY2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQZiksdHQo'@;
put 'RjgpLHR0KE84KSx0dChOaSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURv'@;
put 'd24oZil9KSwyJmEmJmRyKCJ5ZWFycGlja2VyIiwhMCl9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJs'@;
put 'ZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb'@;
put 'InR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJidXR0b24iLDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSkscXQoMiwi'@;
put 'Y2RzLWljb24iLDIpLHllKCksbWUoMywiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSkscXQoNCwiY2RzLWljb24iLDMpLHllKCksbWUoNSwiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2Fk'@;
put 'ZSgpfSkscXQoNiwiY2RzLWljb24iLDQpLHllKCkoKSxtZSg3LCJkaXYiLDUpLEplKDgsJDdlLDIsNCwiYnV0dG9uIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlKSxDZSgxKSxUcigidGl0'@;
put 'bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr'@;
put 'ZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDEpLFRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDIpLFJlKCJuZ0Zvck9mIixkLnll'@;
put 'YXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W3FzLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxjUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1k'@;
put 'LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9N'@;
put 'T05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0'@;
put 'cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4g'@;
put 'dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5n'@;
put 'ZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5h'@;
put 'dmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGOCksdHQoUGYpLHR0KFRiKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2Vy'@;
put 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'MSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUo'@;
put 'MCwiZGl2IiwwKSxOZSgxKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksTmUoNSkseWUoKSxtZSg2LCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxxdCgxMCwiY2RzLWljb24iLDcpLHllKCksbWUoMTEsImJ1dHRvbiIsNikseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSkscXQoMTIsImNkcy1pY29uIiw4KSx5ZSgpLG1lKDEzLCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLHF0KDE0LCJjZHMtaWNvbiIsOSkseWUoKSgpKCkscXQo'@;
put 'MTUsImNsci1jYWxlbmRhciIpLG1lKDE2LCJkaXYiLDApLE5lKDE3KSx5ZSgpKSwyJmEmJihDZSgxKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoMyksVHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9udGhBdHRyU3Ry'@;
put 'aW5nKSxDZSgxKSxncigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksQ2UoMSksZ3IoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksQ2UoMiksVHIoImFyaWEtbGFiZWwiLGQuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRN'@;
put 'b250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu'@;
put 'a2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxDZSgzKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltvUSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9u'@;
put 'U3RyaW5ncz1hLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWR9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5'@;
put 'Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChGOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12'@;
put 'aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxk'@;
put 'cigiZGF0ZXBpY2tlciIsITApKX0sZmVhdHVyZXM6W3RpKFtPOF0pXSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoSmUoMCxxN2UsMSwwLCJjbHItbW9udGhwaWNrZXIiLDApLEplKDEsSzdlLDEsMCwiY2xyLXllYXJwaWNr'@;
put 'ZXIiLDApLEplKDIsWDdlLDEsMCwiY2xyLWRheXBpY2tlciIsMCkpLDImYSYmKFJlKCJuZ0lmIixkLmlzTW9udGhWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc1llYXJWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc0RheVZpZXcpKX0sZGVwZW5kZW5jaWVzOltzUSxsUSxjUSxaaV0sZW5jYXBz'@;
put 'dWxhdGlvbjoyfSksY30pKCksSWI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUscGUsd2UsRWUsWmUsaXQpe3N1cGVyKGl0LEVlLHdlLFplKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlv'@;
put 'blNlcnZpY2U9aCx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1mLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1fLHRoaXMuZGF0ZUlPU2VydmljZT1ULHRoaXMuY29tbW9uU3RyaW5ncz1XLHRoaXMuZm9jdXNTZXJ2aWNlPWllLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPXBlLHRo'@;
put 'aXMuY29udHJvbENsYXNzU2VydmljZT13ZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPVplLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWl0LHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c1NlcnZpY2UuZm9jdXND'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKGV0PT57dGhpcy5mb2N1cz1ldH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfSkpfXNldCBjbHJQb3Np'@;
put 'dGlvbihhKXthJiZ4MFthXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPXgwW2FdKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQg'@;
put 'b3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNh'@;
put 'YmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMu'@;
put 'aW5pdGlhbGl6ZUNhbGVuZGFyKCk6dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJ'@;
put 'T1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpkfSl8fHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1'@;
put 'cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShjcCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkpLnN1YnNjcmliZShhPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IGQ9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChh'@;
put 'KSxoPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwiYXJpYS1sYWJlbCIsZCksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwidGl0bGUiLGQpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25T'@;
put 'ZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoS3MpLHR0KFBmKSx0dCh4RSksdHQoRGIpLHR0KFA4KSx0dChFcyksdHQoekYpLHR0KEY4KSx0dChjZCksdHQoT2YsOCksdHQoazApLHR0'@;
put 'KGxkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEo3ZSw1KSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJz'@;
put 'OjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1'@;
put 'dHM6e2NsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiJ9LGZlYXR1cmVzOlt0aShbYWQsS3MsTGYsUzgsVGIsY2QsekYsazAsUDgsUGYseEUsRGIsRjgsbGRdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOmw5ZSxkZWNsczoxMyx2YXJzOjE0LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQtZ3Jv'@;
put 'dXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjbHJGb2N1c1RyYXAiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xs'@;
put 'VG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj'@;
put 'bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsiYWN0aW9uQnV0dG9uIiwi'@;
put 'Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2xyRm9jdXNUcmFwIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl'@;
put 'Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaShhOWUpLGtyKDApLEplKDEsUTdlLDEsMCwibGFiZWwiLDApLG1lKDIsImRpdiIsMSkoMywiZGl2Iiwy'@;
put 'KSg0LCJkaXYiLDMpLGtyKDUsMSksSmUoNixlOWUsMywxLCJidXR0b24iLDQpLEplKDcsdDllLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw1KSx5ZSgpLEplKDgsbjllLDEsMCwiY2RzLWljb24iLDYpLEplKDkscjllLDEsMCwiY2RzLWljb24iLDcpLHllKCksSmUoMTAsaTll'@;
put 'LDEsMCwibmctY29udGVudCIsMCksSmUoMTEsbzllLDEsMCwibmctY29udGVudCIsMCksSmUoMTIsczllLDEsMCwibmctY29udGVudCIsMCkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNz'@;
put 'KCkpLENlKDIpLGRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLENlKDIpLFJlKCJuZ0lmIixkLmlzRW5hYmxlZCksQ2UoMSksUmUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lk'@;
put 'ZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5z'@;
put 'aG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbdVEsWmksVXMsZGMsd2IsTWIscXMsU2IsTXBdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGll'@;
put 'LHBlLHdlLEVlLFplLGl0KXtzdXBlcihhLEliLGQsXyxmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPV8sdGhpcy5jb250YWluZXI9VCx0aGlzLmRhdGVJT1NlcnZpY2U9Vyx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pZSx0aGlzLmRhdGVwaWNrZXJFbmFi'@;
put 'bGVkU2VydmljZT1wZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9d2UsdGhpcy5wbGF0Zm9ybUlkPUVlLHRoaXMuZm9jdXNTZXJ2aWNlPVplLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1pdCx0aGlzLmRhdGVDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmluZGV4PTF9c2V0IGRhdGUo'@;
put 'YSl7dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUodGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXNldCBtaW4oYSl7dGhpcy5k'@;
put 'YXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZDpudWxsfXNl'@;
put 'dCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZCh1ZChhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9T'@;
put 'ZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIFJzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNv'@;
put 'bnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0'@;
put 'eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9u'@;
put 'KCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBp'@;
put 'Zih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsX109YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCtfKSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1'@;
put 'cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5m'@;
put 'b2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoUDgpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJG'@;
put 'cm9tQ29udGFpbmVyKFBmKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih4RSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERiKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMo'@;
put 'KXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11'@;
put 'cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7ZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj'@;
put 'ZS5zZWxlY3RlZERheT1oP25ldyBwMShoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpKTpudWxsKSx0aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmlu'@;
put 'ZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNr'@;
put 'ZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5'@;
put 'KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1Nl'@;
put 'cnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uICR5ZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYm'@;
put 'Yy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYo'@;
put 'dGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiBXaSh0aGlzLmRhdGVwaWNrZXJIYXNG'@;
put 'b3JtQ29udHJvbCgpKS5waXBlKExhKGE9PmEpLFNhKCgpPT50aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzKSxMYSgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVE'@;
put 'YXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpfWxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRl'@;
put 'RGF0ZShhLnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoTGEoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJv'@;
put 'bC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKExhKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNv'@;
put 'bnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShMYShhPT4hIWEpKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5m'@;
put 'b2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0KE5pKSx0dChGbyksdHQoenUsMTApLHR0KEliLDgpLHR0KFA4LDgpLHR0KFBmLDgpLHR0KHhFLDgpLHR0KERiLDgp'@;
put 'LHR0KEdzKSx0dCh6Riw4KSx0dChPOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0Rm9jdXNTdGF0'@;
put 'ZXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblZhbHVlQ2hhbmdlKGYudGFyZ2V0KX0pLDImYSYmKHQxKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoInBsYWNlaG9sZGVyIixkLnBs'@;
put 'YWNlaG9sZGVyVGV4dCkoInR5cGUiLGQuaW5wdXRUeXBlKSxkcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGF0ZTpbImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4IixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntk'@;
put 'YXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFtPOF0pLGVvXX0pLGN9KSgpLHFGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlP'@;
put 'U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8dGhpcy5kYXRl'@;
put 'SU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSlyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0Rh'@;
put 'dGUoKSlyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQOCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTppdSx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLEp5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsdW1lLGRtZSl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyx3RSxzZCx4YixzYSx5RSxZY11dfSksY30pKCk7bmV3IFNpKHZvaWQgMCk7bGV0IHR3ZT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoaG1lLGZtZSxvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxxbCxzYSxZY10sWWNdfSksY30pKCks'@;
put 'S0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLFVzLDcpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezImYSYmZHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOlt0aShbYWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOmQ5ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkodTllKSxrcigwKSxrcigxLDEp'@;
put 'LEplKDIsYzllLDEsMCwibGFiZWwiLDApKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltaaSxVc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxL'@;
put 'RixkLGgsZixfKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KEVhKSx0dCh6dSwxMCksdHQoRm8pLHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltl'@;
put 'b119KSxjfSkoKSxud2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3Rh'@;
put 'dGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo'@;
put 'KX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoT2YsOCksdHQoY2QpLHR0KGswKSx0dChsZCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsWEYsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm'@;
put 'KFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxp'@;
put 'bmUifSxmZWF0dXJlczpbdGkoW2swLGxkLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpiOWUsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNs'@;
put 'YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi'@;
put 'c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoXzllKSxrcigwKSxKZSgxLGg5ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxKZSg1LGY5'@;
put 'ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDYscDllLDEsMCwiY2RzLWljb24iLDMpLEplKDcsZzllLDEsMCwiY2RzLWljb24iLDQpLEplKDgsbTllLDEsMCwibmctY29udGVudCIsMCksSmUoOSx2OWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwh'@;
put 'ZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLGRjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxyd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFljLHdFLHNhXSxZY119KSxjfSkoKSxpd2U9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFljLHdFLHNhXSxZY119KSxjfSkoKSxIOD0oKCk9'@;
put 'PntjbGFzcyBjIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11'@;
put 'bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShhPT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgZGIsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJD'@;
put 'bGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNkKSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9'@;
put 'd3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmTG8oaCxkYiw1KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3RpKFtsZCxrMCxhZCxj'@;
put 'ZF0pLGVvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6azllLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs'@;
put 'aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKEU5ZSksa3IoMCksSmUoMSx5OWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksSmUoNSx3OWUsMSwwLCJjZHMtaWNvbiIsMyksSmUoNixDOWUsMSwwLCJjZHMtaWNvbiIs'@;
put 'NCkseWUoKSxKZSg3LFM5ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDgsTTllLDEsMCwibmctY29udGVudCIsMCksSmUoOSx4OWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIs'@;
put 'ZC5jb250cm9sQ2xhc3MoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dIZWxwZXIpLENlKDEpLFJlKCJuZ0lmIixkLnNo'@;
put 'b3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltaaSxVcyxkYyxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxIOCxkLGgsZixfKSx0'@;
put 'aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6'@;
put 'Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltlb119KSxjfSkoKSxvd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHFsLHNhLFljXSxZY119KSxjfSkoKSxkUT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQTh7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5j'@;
put 'dGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1mb3JtLWNvbnRyb2wi'@;
put 'LCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdGkoW2xkLGswLGFkLGNkXSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpQOWUsZGVjbHM6MTAsdmFy'@;
put 'czo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi'@;
put 'LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi'@;
put 'c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKEFpKE85ZSksa3IoMCksSmUoMSxBOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksSmUoNSxUOWUsMSwwLCJjZHMtaWNvbiIsMyksSmUoNixEOWUsMSwwLCJjZHMtaWNvbiIsNCkseWUoKSxKZSg3LEw5ZSwxLDAsIm5nLWNvbnRl'@;
put 'bnQiLDApLEplKDgsSTllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxSOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5n'@;
put 'SWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLGRjLHFz'@;
put 'XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzd2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxkUSxkLGgsZixfKSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFz'@;
put 'KSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl'@;
put 'czpbZW9dfSksY30pKCksYXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6'@;
put 'W1tvbyxxbCxzYSxZY10sWWNdfSksY30pKCksaFE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxZYyxEeWUsUHllLEp5ZSx0'@;
put 'USx0d2UscndlLG93ZSxhd2UsaXdlLEZ5ZV19KSxjfSkoKSxmUT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'LGx3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIEVFe31sZXQgUmI9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBiZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRo'@;
put 'aXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURl'@;
put 'Ym91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IGJlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29u'@;
put 'c3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8'@;
put 'KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8'@;
put 'MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2Vp'@;
put 'bCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBj'@;
put 'dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9u'@;
put 'ZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVy'@;
put 'biB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMu'@;
put 'Y3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgYmUsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxs'@;
put 'KWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBrRShhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1'@;
put 'YnNjcmliZSgpO2NvbnN0IF89dGhpcy5fYWxsLmZpbmRJbmRleChUPT5ULmZpbHRlcj09PWEpO18+PTAmJnRoaXMuX2FsbC5zcGxpY2UoXywxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChm'@;
put 'KSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRF'@;
put 'bWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoYXIoRXApLGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3Mga0V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgQUU9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9m'@;
put 'IGtFP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLE9iPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBRXtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRU'@;
put 'b2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPV8sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9TGMoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5B'@;
put 'RlRFUixhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKFQ9Pnt0aGlzLm9wZW49VCx0aGlzLmFyaWFFeHBhbmRlZD1UfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29w'@;
put 'ZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9'@;
put 'c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09u'@;
put 'RGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQt'@;
put 'Y29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8'@;
put 'fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChFcyksdHQoS3MpLHR0KEdzKSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihh'@;
put 'LGQpe2lmKDEmYSYmUm8oRjllLDUsTmkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w'@;
put 'ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6RUUsdXNlRXhpc3Rpbmc6Y31dKSxlbyx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii'@;
put 'LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ'@;
put 'b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs'@;
put 'MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwi'@;
put 'YnV0dG9uIiwwLDEpLHF0KDIsImNkcy1pY29uIiwyKSx5ZSgpLEplKDMsSDllLDUsMywiZGl2IiwzKSksMiZhJiYoZHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLFRyKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFM'@;
put 'YWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLENlKDIpLFRyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLENlKDEp'@;
put 'LFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVz'@;
put 'Olt3YixNYixxcyxTYixNcCxISl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgSkZ7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7'@;
put 'bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgVEV7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9'@;
put 'bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigi'@;
put 'bnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBKNXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgYmUsdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxl'@;
put 'KCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93'@;
put 'LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwp'@;
put 'e2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURT97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3cs'@;
put 'aGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5j'@;
put 'ZW9mIEo1JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIFRFP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURSYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBwUT0oKCk9Pntj'@;
put 'bGFzcyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9Xyx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBFcix0aGlz'@;
put 'Lm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5maWx0ZXIubG93fHxhWzFdIT09dGhp'@;
put 'cy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1'@;
put 'ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2Yga0U/YTpuZXcgSjUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdl'@;
put 'dCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1p'@;
put 'blZhbHVlfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhpcy5maWx0'@;
put 'ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlz'@;
put 'LmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIu'@;
put 'aGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhp'@;
put 'cy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs'@;
put 'YXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2Ny'@;
put 'aWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpLHR0KGgxKSx0dChFcyksdHQoS3MpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhOOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksYWkoaD1saSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbImNsckZpbHRlck1pblBs'@;
put 'YWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSx2YWx1ZTpbImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOlsiY2xyRGdOdW1lcmljRmlsdGVyIiwi'@;
put 'Y3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjYsdmFyczo4LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xy'@;
put 'RGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'XSxbImlucHV0X2xvdyIsIiJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2VyIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIl0sWyJpbnB1dF9oaWdoIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRnLWZpbHRlciIsMCkseHQoImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbj1mfSksbWUoMSwiaW5wdXQiLDEsMiks'@;
put 'eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvdz1mfSkseWUoKSxxdCgzLCJzcGFuIiwzKSxtZSg0LCJpbnB1dCIsNCw1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGlnaD1mfSkseWUoKSgpKSwyJmEmJihSZSgiY2xyRGdGaWx0ZXIi'@;
put 'LGQucmVnaXN0ZXJlZCkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5sb3cpKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxDZSgzKSxSZSgibmdNb2RlbCIsZC5o'@;
put 'aWdoKSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksVHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W09iLGFFLFdhLEJzLE9zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBERXtjb25zdHJ1Y3RvcihsLGE9ITEp'@;
put 'e3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEpGKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6'@;
put 'KCIiK2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIFE1e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBiZSx0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlz'@;
put 'Ll9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIERFP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1'@;
put 'ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0'@;
put 'KGwpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBRNSYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBERT90aGlzLmZp'@;
put 'bHRlckZuIGluc3RhbmNlb2YgREUmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgUUY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEFFe2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSksdGhpcy5kb21B'@;
put 'ZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT1fLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRl'@;
put 'cihhIGluc3RhbmNlb2Yga0U/YTpuZXcgUTUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7'@;
put 'dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgp'@;
put 'e3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEu'@;
put 'dW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChoMSksdHQoRXMpLHR0KEtzKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3'@;
put 'UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhWOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksYWkoaD1saSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbImNsckZpbHRlclBs'@;
put 'YWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxjdXN0b21TdHJpbmdGaWx0ZXI6WyJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVD'@;
put 'aGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjMsdmFyczo1LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0'@;
put 'ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbENoYW5nZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItZGctZmlsdGVyIiwwKSx4dCgiY2xyRGdGaWx0ZXJP'@;
put 'cGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuPWZ9KSxtZSgxLCJpbnB1dCIsMSwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmFsdWU9Zn0pLHllKCkoKSksMiZhJiYoUmUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpKCJjbHJEZ0ZpbHRl'@;
put 'ck9wZW4iLGQub3BlbiksQ2UoMSksUmUoIm5nTW9kZWwiLGQudmFsdWUpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbT2IsV2EsQnMsT3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp'@;
put 'LGtwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQi'@;
put 'XV0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLFY4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsr'@;
put 'fXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCOD0oKCk9PntjbGFzcyBjIGV4dGVuZHMg'@;
put 'dzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlv'@;
put 'bnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KFY4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0'@;
put 'dXJlczpbZW9dfSksY30pKCksaDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgVGUodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5h'@;
put 'YmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9Y2xvc2UoKXt0aGlzLnRvZ2ds'@;
put 'ZVN0YXRlPSExLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5idXR0b24mJih0aGlzLmJ1dHRvbi5mb2N1cygpLHRoaXMuYnV0dG9uPW51bGwpfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRl'@;
put 'Lm5leHQodGhpcy50b2dnbGVTdGF0ZSl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4'@;
put 'cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihoMikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3OHtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGct'@;
put 'cm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KGo4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y2xhc3MgTEV7Y29uc3RydWN0b3IobCl7'@;
put 'dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNl'@;
put 'KCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgTDA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5V'@;
put 'TlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfShMMHx8e30pO2xldCBlSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1w'@;
put 'bGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3Jh'@;
put 'cHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhCOWUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFs'@;
put 'IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxKZSgwLGo5ZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsa2MpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSUU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5f'@;
put 'cmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IGJlfWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlz'@;
put 'LnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNl'@;
put 'ci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlz'@;
put 'Ll9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlz'@;
put 'LnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIGYyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FM'@;
put 'Q1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIsY30oZjJ8fHt9KTtsZXQgZWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0'@;
put 'ZXA9bmV3IGJlLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKExhKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5f'@;
put 'cmVuZGVyU3RlcC5uZXh0KGYyLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0'@;
put 'KGYyLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChmMi5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQg'@;
put 'bWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNp'@;
put 'emUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6'@;
put 'ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKGgxKSxhcihlZykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhY30pLGN9KSgpLG5IPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXtScyh0aGlzLnBs'@;
put 'YXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0'@;
put 'fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG1RPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3Ro'@;
put 'aXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZz1fLHRoaXMuZG9jdW1lbnQ9VCx0aGlzLmNvbHVtblNlcGFyYXRvcklkPUxjKCksdGhpcy5yZXNpemVTdGFydGVkT25L'@;
put 'ZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50'@;
put 'fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMu'@;
put 'Y29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAi'@;
put 'LGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZp'@;
put 'Y2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5j'@;
put 'b2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIu'@;
put 'c2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tl'@;
put 'ckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNr'@;
put 'ZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNz'@;
put 'KHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/dGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6'@;
put 'ZWRCeS0xMik6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMil9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRL'@;
put 'ZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0'@;
put 'aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1u'@;
put 'UmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRy'@;
put 'YWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIGwyKGEua2V5KT09PXdvLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gbDIoYS5rZXkpPT09d28uQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8YykodHQodEgpLHR0KEZvKSx0dChObyksdHQobkgpLHR0KEVzKSx0dChJcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyh6'@;
put 'OWUsNSksUm8oVTllLDUpKSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksYWkoaD1saSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkYXRhZ3Jp'@;
put 'ZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJd'@;
put 'LFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImJ1dHRvbiIsMCwxKSx4dCgiY2xyRHJhZ1N0YXJ0Iixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLnNob3dUcmFja2VyKCl9KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm1vdmVUcmFja2VyKGYuZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUcmFja2VyKCl9KSx5ZSgpLG1lKDIs'@;
put 'InNwYW4iLDIpLE5lKDMpLHllKCkscXQoNCwiZGl2IiwzLDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGQuY29sdW1uU2VwYXJhdG9ySWQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVz'@;
put 'Y3JpcHRpb25JZCksQ2UoMiksVHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6WyRKXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx0Zz0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihkKSx0aGlzLl9zb3J0PWEsdGhpcy52Y3I9aCx0aGlzLmRldGFpbFNlcnZpY2U9Zix0aGlzLmNoYW5nZURldGVjdG9yUmVmPV8sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEVyLHRoaXMuZmlsdGVyVmFsdWVDaGFu'@;
put 'Z2U9bmV3IEVyLHRoaXMuc29ydGVkQ2hhbmdlPW5ldyBFcix0aGlzLnNob3dTZXBhcmF0b3I9ITAsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9TDAuVU5TT1JURUQsdGhpcy5fc29ydGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1b'@;
put 'XSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShh'@;
put 'KXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLl9maWVsZD1hLHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgTEUoYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3Nv'@;
put 'cnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IExFKGEpOmE/dGhpcy5fc29ydEJ5PWE6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IExFKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0'@;
put 'aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEpc3dpdGNoKGEpe2RlZmF1bHQ6Y2FzZSBMMC5VTlNPUlRFRDp0aGlzLl9zb3J0LmNsZWFyKCk7YnJlYWs7Y2FzZSBMMC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztj'@;
put 'YXNlIEwwLkRFU0M6dGhpcy5zb3J0KCEwKX19Z2V0IHNvcnRlZCgpe3JldHVybiB0aGlzLl9zb3J0ZWR9c2V0IHNvcnRlZChhKXshYSYmdGhpcy5zb3J0ZWQ/KHRoaXMuX3NvcnRlZD0hMSx0aGlzLl9zb3J0LmNsZWFyKCkpOmEmJiF0aGlzLnNvcnRlZCYmdGhpcy5zb3J0KCl9c2V0IHVwZGF0'@;
put 'ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgUTU/KCghYXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1JiYoKCFh'@;
put 'fHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYoYVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0'@;
put 'IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZpbHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7ZGVmYXVsdDpjYXNlIEwwLlVOU09SVEVE'@;
put 'OnJldHVybiJub25lIjtjYXNlIEwwLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEwwLkRFU0M6cmV0dXJuImRlc2NlbmRpbmcifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0'@;
put 'YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlz'@;
put 'LmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGVILHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IENFKGVILHRoaXMudmNyKX1u'@;
put 'Z09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5z'@;
put 'ZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBE'@;
put 'ZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlz'@;
put 'Ll9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9MMC5ERVNDOkwwLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PUwwLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0SWNvbj10aGlzLl9zb3J0T3JkZXI9PT1MMC5ERVNDPyJhcnJv'@;
put 'dyBkb3duIjoiYXJyb3ciLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0ZWQ9ITAsdGhpcy5zb3J0ZWRDaGFuZ2UuZW1pdCghMCkpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNo'@;
put 'YW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFyYXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09TDAuVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1MMC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMu'@;
put 'X3NvcnRPcmRlciksdGhpcy5zb3J0SWNvbj1udWxsLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCksdGhpcy5zb3J0ZWQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRlZD0hMSx0aGlzLnNvcnRlZENoYW5nZS5lbWl0KCExKSl9KX1zZXR1cERlZmF1bHRGaWx0ZXIo'@;
put 'YSxkKXsibnVtYmVyIj09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IEo1KG5ldyBURShhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IFE1KG5ldyBERShhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9dGhpcy5p'@;
put 'bml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSUUpLHR0KEZmKSx0dChhcyksdHQoaDIpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmTG8oaCxFRSw1KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLGRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1Bs'@;
put 'YWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZp'@;
put 'bHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlsiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSxz'@;
put 'b3J0ZWQ6WyJjbHJEZ1NvcnRlZCIsInNvcnRlZCJdLHVwZGF0ZUZpbHRlclZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVy'@;
put 'VmFsdWVDaGFuZ2UiLHNvcnRlZENoYW5nZToiY2xyRGdTb3J0ZWRDaGFuZ2UifSxmZWF0dXJlczpbdGkoW1M4LExmLEtzXSksZW8sdmFdLG5nQ29udGVudFNlbGVjdG9yczpldmUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbMSwiZGF0YWdyaWQtY29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0'@;
put 'YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVy'@;
put 'TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNvbHVtblRpdGxlIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIs'@;
put 'NCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJd'@;
put 'LFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9s'@;
put 'ZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKFE5ZSksbWUoMCwi'@;
put 'ZGl2IiwwKSxKZSgxLFc5ZSwzLDIsImJ1dHRvbiIsMSksa3IoMiksSmUoMyxHOWUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMiksSmUoNCwkOWUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDMpLEplKDUscTllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNCxrYyksSmUoNyxYOWUs'@;
put 'MiwxLCJzcGFuIiw1KSxKZSg4LEo5ZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5zb3J0YWJsZSksQ2UoMiksUmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksQ2UoMyksUmUoIm5nSWYiLCFkLnNvcnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbUUYscFEsbVEsWmkscmQscXNdLGVuY2Fwc3VsYXRp'@;
put 'b246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEFwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5f'@;
put 'Y2hhbmdlPW5ldyBiZSx0aGlzLl9hbGxDaGFuZ2VzPW5ldyBiZSx0aGlzLml0ZXJhdG9yVHJhY2tCeT0oZixfKT0+X31nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFu'@;
put 'Z2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdl'@;
put 'dCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYm'@;
put 'dGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRl'@;
put 'bXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlz'@;
put 'Ll9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWNhblRyYWNrQnkoKXtyZXR1cm4hIXRoaXMuZGF0YWdyaWRUcmFja0J5fHxBcnJheS5pc0FycmF5KHRoaXMuYWxsKX10cmFja0J5KGEsZCl7aWYodGhpcy5kYXRhZ3JpZFRyYWNrQnkpcmV0'@;
put 'dXJuIHRoaXMuZGF0YWdyaWRUcmFja0J5KGEpO2lmKEFycmF5LmlzQXJyYXkodGhpcy5hbGwpKXJldHVybiBkPWQ/P3RoaXMuYWxsLmluZGV4T2YoYSksdGhpcy5pdGVyYXRvclRyYWNrQnkoZCxhKTt0aHJvdyBuZXcgRXJyb3IoImltcHJvcGVyIGNhbGwgdG8gSXRlbXMjdHJhY2tCeSIpfWVt'@;
put 'aXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmls'@;
put 'dGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVk'@;
put 'fHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9w'@;
put 'YWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZmKSxhcihJRSksYXIoRXApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxVOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRp'@;
put 'ZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy52Y3I9Zix0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgeHModGhpcy52Y3IsdGhpcy50ZW1wbGF0ZSx0aGlzLmRpZmZlcnMpLHRoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZShfPT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9Xyx0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMuaXRlcmF0b3JU'@;
put 'cmFja0J5PWEsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRl'@;
put 'KHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vi'@;
put 'c2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoejYpLHR0KEFwKSx0dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlu'@;
put 'cHV0czp7cmF3SXRlbXM6WyJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxySD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEo'@;
put 'dGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbInJvbGUiLCJy'@;
put 'b3ciLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRl'@;
put 'ci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSxKZSgxLHR2ZSwxLDAsImRpdiIsMSksbWUoMiwic3BhbiIsMiksSmUoMyxudmUsMSwwLCJuZy1jb250ZW50IiwzKSx5ZSgpKCkpLDImYSYmKGRyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0'@;
put 'eURhdGFncmlkKSxDZSgxKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxDZSgyKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbWmldLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlIPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmln'@;
put 'Z2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko'@;
put 'KSxvSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0SWRT'@;
put 'ZXJ2aWNlPWYsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1fLHRoaXMucGxhdGZvcm1JZD1XLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PVR9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNp'@;
put 'Z25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKSx0aGlzLmFkZERlZmF1bHRBcmlhTGFiZWwodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25T'@;
put 'aWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWFkZERlZmF1bHRBcmlhTGFiZWwoYSl7YS5oYXNBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LnNpZ25wb3N0VG9nZ2xlKX1mb2N1c09uQ2xvc2UoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KE5pKSx0dChFcyksdHQob0gpLHR0KGlIKSx0dChJcyksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRy'@;
put 'czpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5k'@;
put 'ZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxkcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLHNIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEp'@;
put 'e3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQs'@;
put 'aCl7aWYoMSZhJiZMbyhoLFJFLDUpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3RpKFtLcyxpSCx7cHJvdmlkZTpJ'@;
put 'OCx1c2VFeGlzdGluZzpOaX0sb0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1s'@;
put 'aW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxKZSgwLHJ2ZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksa3IoMSkpLDImYSYmUmUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1ppLFJFLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5j'@;
put 'ZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhpdmUsNSks'@;
put 'MiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksSmUoMCxvdmUsMSwwLCJuZy10'@;
put 'ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGFILHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgp'@;
put 'e3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBDRShhSCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVz'@;
put 'OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsc0gsNCksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF0YWdyaWQtY2Vs'@;
put 'bCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHZRPTAs'@;
put 'UGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFl1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBUZSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgYmUsdlErKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIr'@;
put 'dlF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3Jl'@;
put 'dHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09VXUuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5u'@;
put 'ZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBaOD1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oWjh8fHt9KSxhYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oYWF8fHt9'@;
put 'KTtsZXQgbEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oc3ZlLDUpLDImYSl7bGV0IGg7YWkoaD1saSgp'@;
put 'KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksSmUoMCxhdmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHV3ZT0wLFk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9ZCx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0h'@;
put 'MSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBiZSx0aGlzLl9zZWxlY3Rpb25UeXBlPWFhLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVj'@;
put 'dGlvbiIrdXdlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIGFhLk5vbmU6YnJlYWs7Y2FzZSBhYS5TaW5nbGU6e2xldCBfLFQ9ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9u'@;
put 'UmVmJiZ0aGlzLl9pdGVtcy5jYW5UcmFja0J5KCkmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgcGU9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKTt0aGlzLnByZXZT'@;
put 'aW5nbGVTZWxlY3Rpb25SZWY9PT1wZSYmKF89VyxUPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihwZSk+LTEmJmYucHVzaChwZSl9KSx0aGlzLl9pdGVtcy5zbWFydCYmIV8mJihUPSEwKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudFNpbmdsZT1fKX0sMCk7YnJlYWt9Y2Fz'@;
put 'ZSBhYS5NdWx0aTp7bGV0IF89dGhpcy5jdXJyZW50LnNsaWNlKCksVD0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpJiYodGhpcy5wcmV2U2VsZWN0aW9u'@;
put 'UmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChXPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoVykpfSkpLGguZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBwZT10aGlzLl9pdGVtcy50cmFja0J5KFcsaWUpO3RoaXMubG9ja2VkUmVmcy5pbmRleE9m'@;
put 'KHBlKT4tMSYmZi5wdXNoKHBlKX0pLF8ubGVuZ3RoPjAmJihoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgcGU9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKSx3ZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YocGUpO3dlPi0xJiYoX1t3ZV09VyxUPSEwKX0pLHRoaXMuX2l0ZW1zLnNt'@;
put 'YXJ0JiYoXz1fLmZpbHRlcihXPT5oLmluZGV4T2YoVyk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT1fLmxlbmd0aCYmKFQ9ITApKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudD1fKX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZjgoMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0'@;
put 'aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PWFhLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVu'@;
put 'dFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLHRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10'@;
put 'aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlw'@;
put 'ZT09PWFhLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlz'@;
put 'LmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZSl7Y2FzZSBhYS5Ob25lOmNhc2UgYWEuU2luZ2xlOmJyZWFrO2Nhc2UgYWEuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTXVsdGl8fCF0'@;
put 'aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEu'@;
put 'bGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tl'@;
put 'ZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuTm9uZXx8dGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZT09PWFhLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9p'@;
put 'dGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLl9pdGVtcy5jYW5U'@;
put 'cmFja0J5KCkmJnRoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEpKX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxl'@;
put 'Y3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZD10aGlzLnByZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEpO3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGg9PmghPT1kWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTm9u'@;
put 'ZSYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlz'@;
put 'LmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihBcCksYXIoRmYpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu'@;
put 'X3ZpZXc9bmV3IFRlKFo4LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChaOC5DQUxDVUxBVEUpKSksdGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhmMi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFo4LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3Ro'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGVnKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdUg9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVl'@;
put 'cnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxPRT0wLG5nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxwZSx3ZSxFZSxaZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlz'@;
put 'LnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT1fLHRoaXMuZGlzcGxheU1vZGU9VCx0aGlzLnZjcj1XLHRoaXMucmVuZGVyZXI9aWUsdGhpcy5lbD1wZSx0aGlzLmNvbW1vblN0cmluZ3M9d2UsdGhpcy5p'@;
put 'dGVtcz1FZSx0aGlzLmRvY3VtZW50PVplLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPWFhLHRo'@;
put 'aXMuaXRlbUNoYW5nZXM9bmV3IHF4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd0FyaWFMYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxPRSsrLHRo'@;
put 'aXMuaWQ9ImNsci1kZy1yb3ciK09FLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrT0UsdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitPRSx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChZNih0aGlzLmV4cGFuZC5yZXBs'@;
put 'YWNlLHRoaXMuZXhwYW5kLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbaXQsZXRdKT0+e2l0JiZldD8odGhpcy5yZXBsYWNlZD0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSEx'@;
put 'LHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xy'@;
put 'RGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZh'@;
put 'bHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YWEuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEp'@;
put 'e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9u'@;
put 'LnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/'@;
put 'dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlz'@;
put 'Ll9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd0FyaWFMYWJlbCgpe3JldHVybiB0aGlzLl9yb3dBcmlhTGFiZWw/dGhpcy5fcm93QXJp'@;
put 'YUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dBcmlhTGFiZWwoYSl7dGhpcy5fcm93QXJpYUxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChsSCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMu'@;
put 'd3JhcHBlZEluamVjdG9yPW5ldyBDRShsSCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxs'@;
put 'cy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRo'@;
put 'aXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PVo4LkNBTENVTEFURT8odGhp'@;
put 'cy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95'@;
put 'ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJs'@;
put 'ZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVj'@;
put 'dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50'@;
put 'YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7'@;
put 'aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNo'@;
put 'aWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhp'@;
put 'cy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFk4KSx0dChWOCksdHQoajgpLHR0KFBiKSx0dChoMiksdHQoY0gpLHR0'@;
put 'KGFzKSx0dChGbyksdHQoTmkpLHR0KEVzKSx0dChBcCksdHQoSXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLFRwLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYm'@;
put 'KGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKGJFLDUpLFJvKGx2ZSw1KSxSbyhjdmUsNSxhcyksUm8odXZlLDUsYXMpLFJvKGR2ZSw1LGFzKSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksYWkoaD1s'@;
put 'aSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLGFpKGg9bGkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLGFpKGg9bGkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJy'@;
put 'b2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLW93bnMiLGQuaWQpLGRyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntpdGVtOlsiY2xyRGdJdGVtIiwi'@;
put 'aXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJE'@;
put 'Z0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dBcmlhTGFiZWw6ImNsckRnUm93QXJpYUxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9'@;
put 'LGZlYXR1cmVzOlt0aShbUGIse3Byb3ZpZGU6WXUsdXNlRXhpc3Rpbmc6UGJ9LHtwcm92aWRlOnZiLHVzZUV4aXN0aW5nOlBifV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6SHZlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNl'@;
put 'ZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwi'@;
put 'Y2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInN0aWNreUNlbGxzIiwiIl0s'@;
put 'WyJjbGFzcyIsImRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQt'@;
put 'Y2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJl'@;
put 'dCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSIsMywibmdDbGFzcyJdLFsxLCJkYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwx'@;
put 'LCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIiwzLCJuZ0NsYXNzIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250'@;
put 'cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiLCJjbGljayJdLFsxLCJjbHItc3Itb25seSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLDMsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZXhwYW5k'@;
put 'YWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInR5cGUi'@;
put 'LCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1m'@;
put 'aXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRh'@;
put 'dGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoRnZlKSxKZSgwLG12ZSwzLDIsImRpdiIsMCksSmUoMSxfdmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEpLEplKDIseXZlLDEsMSxudWxsLDIpLEplKDMsd3ZlLDEsMCwi'@;
put 'bmctdGVtcGxhdGUiLG51bGwsMyxrYyksSmUoNSxQdmUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDQsa2MpLGphKDcsbnVsbCw1KSksMiZhJiYoUmUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLENlKDEpLFJlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9u'@;
put 'TW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W2JFLFQwLEtGLHUyLFppLHJkLHVILGRjLFMwLEQwLEJzLE9zLFVzLGxFLFdhLFhGLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgSTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY30oSTB8fHt9KTtjb25zdCBfUT1PYmplY3Qua2V5cyhJMCkubWFwKGM9PkkwW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50'@;
put 'KGMsMTApKTtsZXQgSGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlz'@;
put 'LmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hl'@;
put 'Lmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1tkXS5uZXh0KHsuLi5hLGNoYW5nZXM6X1F9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0'@;
put 'ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1'@;
put 'ZmFjfSksY30pKCksYlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKE1lKCgpPT50aGlzLnN0YXRlKSl9'@;
put 'Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9y'@;
put 'JiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgTEU/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRo'@;
put 'aXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihGZiksYXIoSUUpLGFyKEVwKSxhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kk'@;
put 'PW5ldyBiZSx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6Iltyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlcikiLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50'@;
put 'KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5x'@;
put 'dWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5r'@;
put 'ZXlHcmlkQ2VsbHMpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntuMih0aGlzLmdyaWQsIm1vdXNlZG93'@;
put 'biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29u'@;
put 'ZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQpfX0pLG4yKHRoaXMuZ3JpZCwia2V5ZG93biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fCJB'@;
put 'cnJvd0xlZnQiIT09YS5jb2RlJiYiQXJyb3dSaWdodCIhPT1hLmNvZGUpJiYoIkFycm93VXAiPT09YS5jb2RlfHwiQXJyb3dEb3duIj09PWEuY29kZXx8IkFycm93TGVmdCI9PT1hLmNvZGV8fCJBcnJvd1JpZ2h0Ij09PWEuY29kZXx8IkVuZCI9PT1hLmNvZGV8fCJIb21lIj09PWEuY29kZXx8'@;
put 'IlBhZ2VVcCI9PT1hLmNvZGV8fCJQYWdlRG93biI9PT1hLmNvZGUpKXtjb25zdHt4OmQseTpofT10aGlzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhKSxmPXRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93c1toXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykp'@;
put 'W2RdOm51bGw7ZiYmdGhpcy5zZXRBY3RpdmVDZWxsKGYpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMuaG9zdD1hLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdy'@;
put 'aWQoKXt0aGlzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmNlbGxzP3RoaXMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9c2V0QWN0aXZlQ2VsbChhKXtjb25zdCBkPXRoaXMuY2VsbHM/QXJyYXku'@;
put 'ZnJvbSh0aGlzLmNlbGxzKS5maW5kKF89PiIwIj09PV8uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2QmJmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpO2NvbnN0IGg9ZnVuY3Rpb24gZHdlKGMpe2NvbnN0IGw9WyJh'@;
put 'W2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCIqW3RhYmluZGV4XSIsIipb'@;
put 'Y29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKX0oYSk7KCJjb2x1bW5oZWFkZXIiIT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmaFswXT9oWzBdOmEp'@;
put 'LmZvY3VzKCl9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGEpe2xldCBkPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKFplPT4iMCI9PT1aZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7IlRhYiI9PT1hLmNvZGUmJihkPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQp'@;
put 'O2NvbnN0IGg9dGhpcy5yb3dzJiZkP0FycmF5LmZyb20odGhpcy5yb3dzKS5maW5kKFplPT5aZS5jb250YWlucyhkKSk6bnVsbCxmPXRoaXMucm93cz90aGlzLnJvd3MubGVuZ3RoLTE6MCxfPXRoaXMuY2VsbHM/dGhpcy5jZWxscy5sZW5ndGgvdGhpcy5yb3dzLmxlbmd0aC0xOjA7bGV0IFQ9'@;
put 'aCYmZD9BcnJheS5mcm9tKGgucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGQpOjAsVz1oJiZkJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoaCk6MDtjb25zdCBpZT10aGlzLmhvc3QuZGlyLHBlPSJydGwiPT09aWU/'@;
put 'IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiLHdlPSJydGwiPT09aWU/IkFycm93TGVmdCI6IkFycm93UmlnaHQiLEVlPU1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MDtyZXR1'@;
put 'cm4iQXJyb3dVcCI9PT1hLmNvZGUmJjAhPT1XP1ctPTE6IkFycm93RG93biI9PT1hLmNvZGUmJlc8Zj9XKz0xOmEuY29kZT09PXBlJiYwIT09VD9ULT0xOmEuY29kZT09PXdlJiZUPF8/VCs9MToiRW5kIj09PWEuY29kZT8oVD1fLGEuY3RybEtleSYmKFc9ZikpOiJIb21lIj09PWEuY29kZT8o'@;
put 'VD0wLGEuY3RybEtleSYmKFc9MCkpOiJQYWdlVXAiPT09YS5jb2RlP1c9Vy1FZT4wP1ctRWU6MDoiUGFnZURvd24iPT09YS5jb2RlJiYoVz1XK0VlPGY/VytFZTpmKSx7eDpULHk6V319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSl9LGMu'@;
put 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVzg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlLEVlLFplLGl0LGV0LHl0LEV0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFi'@;
put 'bGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9Xyx0aGlzLnN0YXRlUHJvdmlkZXI9VCx0aGlzLmRpc3BsYXlNb2RlPVcsdGhpcy5yZW5kZXJlcj1pZSx0aGlzLmRldGFpbFNlcnZpY2U9cGUsdGhpcy5kb2N1bWVudD13ZSx0aGlzLmVsPUVlLHRoaXMucGFn'@;
put 'ZT1aZSx0aGlzLmNvbW1vblN0cmluZ3M9aXQsdGhpcy5jb2x1bW5zU2VydmljZT1ldCx0aGlzLmtleU5hdmlnYXRpb249eXQsdGhpcy56b25lPUV0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxh'@;
put 'YmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVB'@;
put 'cmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEVyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMucmVmcmVzaD1uZXcgRXIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9YWEsdGhpcy5fc3Vi'@;
put 'c2NyaXB0aW9ucz1bXTtjb25zdCBTdD1MYygpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrU3QsdGhpcy5kZXRhaWxTZXJ2aWNlLmlkPVN0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRp'@;
put 'bmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hP2FhLk11bHRpOmFhLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hYS5TaW5nbGUs'@;
put 'YT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1z'@;
put 'ZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy5kYXRhZ3JpZFRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxT'@;
put 'ZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoU2EoZD0+aXMoV2koZC5t'@;
put 'YXAoaD0+aC5pdGVtKSksWTYoZC5tYXAoaD0+aC5pdGVtQ2hhbmdlcykpLnBpcGUoZjgoMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJl'@;
put 'KCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93'@;
put 'cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGQ9dGhpcy5pdGVtcy5jYW5UcmFja0J5KCk/dGhpcy5yb3dzLmZpbmQoaD0+dGhpcy5pdGVtcy50cmFja0J5KGguaXRlbSk9PT10aGlzLml0ZW1zLnRy'@;
put 'YWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk6dm9pZCAwO2Q/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZC5pdGVtLGQuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmln'@;
put 'YXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJl'@;
put 'c2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYm'@;
put 'dGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygp'@;
put 'fSksWTYodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zKS5zdWJzY3JpYmUoKCk9PnRoaXMua2V5TmF2aWdhdGlvbj8ucmVzZXRLZXlHcmlkKCkpLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5n'@;
put 'dGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhp'@;
put 'cy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1aOC5ESVNQTEFZPyh0aGlzLnJlbmRl'@;
put 'cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMu'@;
put 'X2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5z'@;
put 'Lmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChuMih0aGlzLmRvY3VtZW50LmJvZHks'@;
put 'ImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxuMih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNz'@;
put 'ZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlZyksdHQoQXApLHR0KGo4KSx0dChZOCksdHQoVjgpLHR0KGJRKSx0dChjSCksdHQoRm8pLHR0KGgyKSx0dChJcyksdHQoTmkpLHR0KEVwKSx0dChFcyksdHQoSGYpLHR0KHlRKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKExvKGgsVTgsNSksTG8oaCxySCw1KSxMbyhoLHRnLDQpLExvKGgsbmcsNCkpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksYWkoZj1saSgp'@;
put 'KSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksYWkoZj1saSgpKSYmKGQuY29sdW1ucz1mKSxhaShmPWxpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oTnZlLDUsTmkpLFJvKFZ2ZSw1LGFzKSxSbyhCdmUsNSxhcyksUm8oanZlLDUsYXMpLFJv'@;
put 'KHp2ZSw1LGFzKSxSbyhVdmUsNSxhcykpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCks'@;
put 'YWkoaD1saSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsyJmEmJmRyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xl'@;
put 'QWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGlu'@;
put 'ZzpbImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOlsiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVj'@;
put 'dGlvbiIscm93U2VsZWN0aW9uTW9kZTpbImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3Rl'@;
put 'ZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCJ9LGZlYXR1cmVzOlt0aShbWTgsSUUsRmYsRXAsQXAsZWcsVjgsajgsUmIsaDIsYlEsbkgsSGYsY0gseVFdKV0sbmdDb250ZW50U2VsZWN0b3JzOlh2ZSxkZWNsczozMix2YXJzOjcsY29u'@;
put 'c3RzOltbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWyJkYXRhZ3JpZCIsIiJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlk'@;
put 'LXRhYmxlIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ct'@;
put 'c3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQt'@;
put 'Y29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUi'@;
put 'LCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxbImRp'@;
put 'c3BsYXllZFJvd3MiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwi'@;
put 'Il0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIs'@;
put 'ImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywiaWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbInJvbGUi'@;
put 'LCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1'@;
put 'bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdLFsiY2xyTWVkaXVtIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYoQWkoS3ZlKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsImRpdiIsMSkoMywiZGl2IiwyLDMpKDUsImRpdiIsNCkoNiwiZGl2Iiw1LDYpKDgsImRpdiIsNykoOSwiZGl2Iiw4KSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksSmUoMTIsWnZlLDcsNSwiZGl2IiwxMSksSmUoMTMsWXZlLDIs'@;
put 'MSwiZGl2IiwxMiksSmUoMTQsV3ZlLDIsMSwiZGl2IiwxMyksSmUoMTUsR3ZlLDIsMSwiZGl2IiwxNCkseWUoKSxtZSgxNiwiZGl2IiwxNSksamEoMTcsbnVsbCwxNikseWUoKSgpKCkoKSxqYSgxOSxudWxsLDE3KSxrcigyMSwxKSxKZSgyMiwkdmUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIi'@;
put 'LDE4KSx5ZSgpKCkoKSxrcigyMywyKSxKZSgyNCxxdmUsMywwLCJkaXYiLDE5KSx5ZSgpLGtyKDI1LDMpLHllKCksbWUoMjYsImRpdiIsMjApKDI3LCJkaXYiLDIxKSxqYSgyOCxudWxsLDIyKSx5ZSgpLGphKDMwLG51bGwsMjMpLHllKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWhpZGRlbiIs'@;
put 'ISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxDZSg5KSxSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLENlKDEpLFJlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5n'@;
put 'bGUpLENlKDEpLFJlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLENlKDcpLFJlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks'@;
put 'Q2UoMiksUmUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3JILHUyLFppLHVILFMwLEJzLE9zLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLmFsbFNlbGVjdGVkPW5l'@;
put 'dyBFcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RB'@;
put 'bGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0kwLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhp'@;
put 'cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSGYpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dn'@;
put 'bGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJk'@;
put 'aXNhYmxlZCIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLGtyKDEpLHllKCkpLDImYSYmUmUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2li'@;
put 'bGUpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx3UT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IENRPWM9PmM7bGV0IGhIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1z'@;
put 'ZXQgdHJhY2tCeShhKXthIT09Q1EmJnRoaXMuX2l0ZW1zJiYodGhpcy5faXRlbXMuaXRlcmF0b3JUcmFja0J5PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBcCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs'@;
put 'Im5nRm9yVHJhY2tCeSIsIiJdXSxpbnB1dHM6e3RyYWNrQnk6WyJuZ0ZvclRyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3Zlcklk'@;
put 'PUxjKCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj1DUSx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0'@;
put 'YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2Vydmlj'@;
put 'ZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9'@;
put 'PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0'@;
put 'ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0kwLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0'@;
put 'aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChIZiksdHQoS3MpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVt'@;
put 'bi10b2dnbGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKExvKGgsd1EsNSksTG8oaCxkSCw1KSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5jdXN0b21Ub2dnbGVUaXRsZT1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC5jdXN0b21Ub2dnbGVCdXR0b249Zi5m'@;
put 'aXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFF2ZSw1LE5pKSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29sdW1uLXN3'@;
put 'aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbdGkoW0xmLFM4LEtzXSldLG5nQ29udGVudFNlbGVjdG9yczpzX2UsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIs'@;
put 'IiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50Iiwi'@;
put 'Y2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNo'@;
put 'LWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9z'@;
put 'ZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3Rl'@;
put 'ciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpm'@;
put 'dW5jdGlvbihhLGQpezEmYSYmKEFpKG9fZSksbWUoMCwiYnV0dG9uIiwwKSxOZSgxKSx5ZSgpLEplKDIsaV9lLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihUcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVu'@;
put 'U3RhdGUpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLENlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVD'@;
put 'bGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1QwLGRILHdiLE1iLFNiLE1wLFppLEhKLHFzLHhzLGhILFMwLEQwLEJzLE9zLFVzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxNUT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3Vu'@;
put 'dC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGo4LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLFBFPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1hYX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1Nl'@;
put 'cnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCksdHQoaDIpLHR0KEhmKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsZkgsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC50b2dnbGU9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRT'@;
put 'ZWxlY3RvcnM6Zl9lLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwi'@;
put 'ZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoaF9lKSxKZSgwLGNfZSw4LDIsIm5nLWNvbnRhaW5lciIsMCksSmUoMSxkX2UsNSwxLCJuZy1jb250YWluZXIiLDAp'@;
put 'LGtyKDIpKSwyJmEmJihSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W1Qw'@;
put 'LGZILFppLEQwLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBwSD1uZXcgU2koIkNPTFVNTl9TVEFURSIpLF93ZT17cHJvdmlkZTpwSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHZ3ZSgpe3JldHVybiBuZXcgVGUoe2NoYW5nZXM6W119KX19O2xldCBnSD0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9TGMoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6WyJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6'@;
put 'ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJpZCIsIm5nTW9kZWwiLCJu'@;
put 'Z01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLnBhZ2Uuc2l6ZT1mfSksSmUoMyxwX2UsMiwyLCJvcHRpb24iLDIpLHllKCkoKSksMiZhJiYoQ2UoMiksZHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUmUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLENlKDEpLFJlKCJuZ0Zvck9m'@;
put 'IixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W00wLEJzLE9zLHhzLGwxLGMxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZp'@;
put 'Y2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5wYWdlLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1z'@;
put 'KCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBh'@;
put 'JiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0'@;
put 'ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2Uu'@;
put 'Y3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVu'@;
put 'dENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMu'@;
put 'cGFnZS5uZXh0KCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5u'@;
put 'YXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFcCksdHQoRXMpLHR0KGgyKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1d'@;
put 'LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsZ0gsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKGdfZSw1KSwyJmEpe2xldCBoO2FpKGg9'@;
put 'bGkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJk'@;
put 'aXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlsiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlsiY2xyRGdQ'@;
put 'YWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpTX2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFn'@;
put 'aW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsx'@;
put 'LCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0'@;
put 'eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsicmVhZE9ubHkiLCIiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIs'@;
put 'MywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsi'@;
put 'dHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0'@;
put 'aW9uKGEsZCl7MSZhJiYoQWkoQ19lKSxKZSgwLHlfZSw1LDIsIm5nLWNvbnRhaW5lciIsMCksSmUoMSx3X2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMCkpLDImYSYmKFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksQ2UoMSksUmUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09w'@;
put 'ZW4pKX0sZGVwZW5kZW5jaWVzOltaaSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgRzg9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixIRT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IHJnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlz'@;
put 'LnJlbmRlcmVyPWQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9c2V0IGNvbHVtblN0YXRlKGEpe3RoaXMuc3RhdGVTdWJzY3Jp'@;
put 'cHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJ1bkFsbENoYW5nZXM9X1EsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT50aGlzLnN0YXRlQ2hhbmdlcyhkKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFj'@;
put 'aChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5B'@;
put 'bGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBJMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgSTAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJl'@;
put 'bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRp'@;
put 'dmVFbGVtZW50LEc4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRl'@;
put 'cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxIRSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoRm8pLHR0KGVnKSl9LGMu'@;
put 'XHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksaWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5kb21BZGFwdGVyPWYsdGhp'@;
put 'cy5jb2x1bW5SZXNpemVyU2VydmljZT1fLHRoaXMuY29sdW1uc1NlcnZpY2U9VCx0aGlzLmNvbHVtblN0YXRlPVcsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBFcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVy5zdWJzY3JpYmUoaWU9PnRoaXMuc3RhdGVDaGFuZ2VzKGllKSkpfW5nT25EZXN0cm95'@;
put 'KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0'@;
put 'YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXN0YXRlQ2hhbmdlcyhhKXthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBJMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2Jy'@;
put 'ZWFrO2Nhc2UgSTAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRoU2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCks'@;
put 'dGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVy'@;
put 'UmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQp'@;
put 'KSxkfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJw'@;
put 'eCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEc4KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpOnRoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEhFKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChlZyksdHQoaDEpLHR0KHRIKSx0dChIZiksdHQocEgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOlt0aShbdEgsX3dlXSldfSksY30pKCksQ3dlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXty'@;
put 'ZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0'@;
put 'aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENvbHVtblN0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q29sdW1uU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q29sdW1uU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmKGEu'@;
put 'Y29sdW1uU3RhdGU9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChIZikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93'@;
put 'LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLHJnLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IFN3ZT1jPT5ScyhjKT9uZXcgaDE6bmV3IEN3ZTtsZXQgJDg9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmVsPV8sdGhpcy5yZW5kZXJlcj1ULHRoaXMuZGV0YWlsU2VydmljZT1XLHRoaXMudGFibGVTaXplU2VydmljZT1pZSx0'@;
put 'aGlzLmNvbHVtbnNTZXJ2aWNlPXBlLHRoaXMubmdab25lPXdlLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'b3JnYW5pemVyLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucGFnZS5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hl'@;
put 'aWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShFZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKEVlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'aXRlbXMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlz'@;
put 'LnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXpl'@;
put 'Q29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5z'@;
put 'dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZCxo'@;
put 'KT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLHtjaGFuZ2VzOltJMC5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChh'@;
put 'LGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMucm93cy5mb3JFYWNoKGE9PmEuc2V0Q29sdW1uU3RhdGUoKSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRT'@;
put 'ZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5k'@;
put 'ZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSsicHgiKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRT'@;
put 'ZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aDtsZXQgZD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IF89e2NoYW5nZXM6W0kwLldJRFRIXSwuLi5oLmdldENvbHVtbldpZHRoU3RhdGUoKX07Xy5zdHJpY3RXaWR0aHx8'@;
put 'KGQ9ITEpLGE9PT1mKzEmJmQmJihfLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZixfKX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITEsIXRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiZ0aGlzLml0'@;
put 'ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZWcpLHR0KEFwKSx0dChFcCksdHQoaDEpLHR0KE5pKSx0dChG'@;
put 'byksdHQoaDIpLHR0KG5IKSx0dChIZiksdHQoTm8pKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihMbyhoLGlnLDQpLExvKGgsb2csNSkpLDImYSl7bGV0IGY7YWkoZj1s'@;
put 'aSgpKSYmKGQuaGVhZGVycz1mKSxhaShmPWxpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpoMSx1c2VGYWN0b3J5OlN3ZSxkZXBzOltHc119XSldfSksY30pKCksTXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhwbWUsZ21lLG5iLG1t'@;
put 'ZSxJSyx2bWUsUkssX21lLGJtZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxoUSxxbCxJRixzZCxsd2UsZlEscUosQWIseGIsQkYseUUscTVd'@;
put 'XX0pLGN9KSgpLHhRPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLG1IPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVk'@;
put 'SWQ9ImNsci1zdGFjay1sYWJlbC0iK0xjKCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1s'@;
put 'YWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyfSksY30pKCksRVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZm9j'@;
put 'dXNlZD0hMSx0aGlzLnVuaXF1ZUlkPUxjKCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhp'@;
put 'cy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhw'@;
put 'YW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5h'@;
put 'cmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgo'@;
put 'KXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4'@;
put 'cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3Rh'@;
put 'Y2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYywxMiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJkxvKGgsbUgsNSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsImhlYWRpbmciKSgiYXJp'@;
put 'YS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLGRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24t'@;
put 'Zm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxh'@;
put 'cmlhU2V0c2l6ZTpbImNsclN0YWNrVmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0'@;
put 'czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6QV9lLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3Bh'@;
put 'Y2UiLCJmb2N1cyIsImJsdXIiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2st'@;
put 'Y2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihBaShrX2UpLG1lKDAsImRpdiIsMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LnRvZ2dsZUV4cGFuZCgpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxKZSgxLE1fZSwx'@;
put 'LDEsImNkcy1pY29uIiwxKSxKZSgyLHhfZSwyLDEsInNwYW4iLDIpLG1lKDMsImRpdiIsMyksa3IoNCkseWUoKSxtZSg1LCJkaXYiLDQpLGtyKDYsMSkseWUoKSgpLG1lKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksSmUoOCxFX2UsMiw0LCJkaXYiLDYpLHllKCkpLDImYSYmKFJl'@;
put 'KCJpZCIsZC51bmlxdWVJZCksVHIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRhYmxlKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLENlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W2JFLFppLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9'@;
put 'Il19KSxjfSkoKSxxOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyBFcighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0'@;
put 'aGlzLl9lZGl0TW9kZX1zZXQgZWRpdGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj'@;
put 'Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RF9lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihBaShUX2UpLGtyKDApLG1lKDEsImRpdiIsMCksa3IoMiwxKSx5ZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksa3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxxbCxzYSxmUV1dfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlz'@;
put 'LmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBiZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgQVE9e3Byb3ZpZGU6c2csdXNl'@;
put 'RmFjdG9yeTpmdW5jdGlvbiBBd2UoYyl7cmV0dXJuIGN8fG5ldyBzZ30sZGVwczpbW25ldyB6MixuZXcgZzAsc2ddXX07bGV0IFRRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNj'@;
put 'cmlwdGlvbj10aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNo'@;
put 'b3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5t'@;
put 'b2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQoWXUsOCkpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFy'@;
put 'czoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmSmUoMCxCX2UsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5n'@;
put 'SWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1ppLHhzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgcGM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRF'@;
put 'Uk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30ocGN8fHt9KTtjbGFzcyBEUXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IFRlKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBUZShwYy5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhpcy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk'@;
put 'JiZsIT09cGMuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9Pmguc2V0U2VsZWN0ZWQobCwhMSwhMCkpLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihs'@;
put 'KXt0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1wYy5TRUxFQ1RFRD9wYy5VTlNFTEVDVEVEOnBjLlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7'@;
put 'bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3Qg'@;
put 'ZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlIHBjLklOREVURVJNSU5BVEU6cmV0dXJuIHBjLklOREVURVJNSU5BVEU7Y2FzZSBwYy5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIHBjLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwp'@;
put 'cmV0dXJuIHBjLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9wYy5VTlNFTEVDVEVEOnBjLlNFTEVDVEVEOnBjLlVOU0VMRUNURUR9fWNsYXNzIE5FIGV4dGVuZHMgRFF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9'@;
put 'aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVz'@;
put 'dHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5G'@;
put 'ZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBUd2UoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP0ZPKGwpPyh0aGlzLmxv'@;
put 'YWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9'@;
put 'Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3Jl'@;
put 'dHVybiBsLm1hcChhPT5uZXcgTkUoYSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IExRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNo'@;
put 'YW5nZXMoKXtsZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IE5FKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBORSh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1'@;
put 'cmVzU2VydmljZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygp'@;
put 'fSkpLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoemEpLHR0KHNnKSx0dChVYSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlsi'@;
put 'Y2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlsiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbdmFdfSksY30pKCksdkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgYmUs'@;
put 'dGhpcy5fZm9jdXNDaGFuZ2U9bmV3IGJlfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5f'@;
put 'Zm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVu'@;
put 'dCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVB'@;
put 'Ym92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3Rh'@;
put 'cnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2Nv'@;
put 'bnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4g'@;
put 'aDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2Rl'@;
put 'TW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVu'@;
put 'dDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5v'@;
put 'ZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNX'@;
put 'aXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IF89aC5pbmRleE9mKGQpKzE7XzxoLmxlbmd0aDtfKyspe2NvbnN0IFc9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW19dKTtpZihXKXJldHVybiBXfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dp'@;
put 'dGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQp'@;
put 'e3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVT'@;
put 'dGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgRHdlIGV4dGVuZHMgRFF7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxk'@;
put 'KHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJl'@;
put 'bi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBEcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFj'@;
put 'dGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksZzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZvclR5cGVBaGVhZFByb3ZpZGVyPWgsdGhpcy5mZWF0dXJlc1NlcnZp'@;
put 'Y2U9Zix0aGlzLmV4cGFuZFNlcnZpY2U9Xyx0aGlzLmNvbW1vblN0cmluZ3M9VCx0aGlzLmZvY3VzTWFuYWdlcj1XLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBFcix0aGlzLlNUQVRFUz1wYyx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRo'@;
put 'aXMubm9kZUlkPUxjKCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhp'@;
put 'cy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uP2llLnZpZXc/aWUudmlldy5jb250ZXh0LmNsck1vZGVsOmllLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgRHdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlz'@;
put 'Ll9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPXBjLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/cGMuU0VMRUNURUQ6cGMuVU5TRUxF'@;
put 'Q1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFu'@;
put 'ZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PXBjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k'@;
put 'ZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVu'@;
put 'Z3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoTGEoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdl'@;
put 'LmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu'@;
put 'Zm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGY4KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb3JUeXBlQWhlYWRQcm92aWRlciYmKHRoaXMuX21vZGVsLnRleHRDb250ZW50PXRoaXMuZm9yVHlwZUFo'@;
put 'ZWFkUHJvdmlkZXIudGV4dENvbnRlbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGY4KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVh'@;
put 'ZEtleUJ1ZmZlcj0iIn0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxl'@;
put 'OiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7UnMo'@;
put 'dGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5m'@;
put 'b2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goVEYoYSksbDIoYS5rZXkpKXtjYXNlIHdvLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2Ugd28uQXJyb3dE'@;
put 'b3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIHdvLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7'@;
put 'Y2FzZSB3by5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdvLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdv'@;
put 'LkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2Ugd28uU3BhY2U6Y2FzZSB3by5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50'@;
put 'ZXh0Q29udGVudCYmZnVuY3Rpb24gaXllKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2'@;
put 'ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRl'@;
put 'eCIsYSl9Y2hlY2tUYWJJbmRleChhKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmlzRXhwYW5kYWJs'@;
put 'ZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFu'@;
put 'YWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1'@;
put 'c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChHcyksdHQoYywxMiksdHQocHllLDEwKSx0dChzZyksdHQoWXUpLHR0KEVzKSx0dCh2SCksdHQoRWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLERwLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oal9lLDcsTmkpLDImYSl7'@;
put 'bGV0IGg7YWkoaD1saSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJd'@;
put 'LHNlbGVjdGVkOlsiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt0'@;
put 'aShbQVEsWXUse3Byb3ZpZGU6dmIsdXNlRXhpc3Rpbmc6WXV9XSldLG5nQ29udGVudFNlbGVjdG9yczpxX2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlk'@;
put 'b3duIiwiZm9jdXMiXSxbImNvbnRlbnRDb250YWluZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRy'@;
put 'ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2Vkb3duIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0'@;
put 'LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiXSxbInNoYXBlIiwiYW5nbGUiLDEs'@;
put 'ImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVu'@;
put 'IiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsImZvY3VzIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwi'@;
put 'bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCRfZSksbWUoMCwiZGl2IiwwLDEpLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigp'@;
put 'fSksSmUoMix6X2UsMiwxLCJidXR0b24iLDIpLEplKDMsVV9lLDIsMCwiZGl2IiwzKSxKZSg0LFpfZSwzLDQsImRpdiIsNCksbWUoNSwiZGl2Iiw1KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzVHJlZU5vZGUoKX0pLGtyKDYpLEplKDcsR19lLDMsMiwiZGl2Iiw2'@;
put 'KSx5ZSgpKCksbWUoOCwiZGl2Iiw3KSxrcig5LDEpLGtyKDEwLDIpLHF0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx5ZSgpKSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxl'@;
put 'Y3RlZCksQ2UoMiksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZmVh'@;
put 'dHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLENlKDMpLFJlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxkLmFyaWFTZWxlY3RlZCksQ2UoMSksUmUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQi'@;
put 'KSxUcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLENlKDMpLFJlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbVFEsWmkscXNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2ExKCJ0'@;
put 'b2dnbGVDaGlsZHJlbkFuaW0iLFtmYygiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbX3Moe2hlaWdodDowfSkscnUoMjAwLF9zKHtoZWlnaHQ6IioifSkpXSksZmMoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW19zKHtoZWlnaHQ6IioifSkscnUoMjAwLF9zKHtoZWlnaHQ6MH0pKV0pLEt4KCJl'@;
put 'eHBhbmRlZCIsX3Moe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxLeCgiY29sbGFwc2VkIixfcyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCksZGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQse25hdGl2ZUVsZW1lbnQ6aH0sZixfKXt0aGlzLmZlYXR1cmVzU2Vy'@;
put 'dmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBUPV8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKGgsImZvY3VzaW4iKS5zdWJzY3JpYmUoVz0+e1cudGFyZ2V0PT09aCYmKHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5mb2N1c0Zp'@;
put 'cnN0VmlzaWJsZU5vZGUoKSxmLnJlbW92ZUF0dHJpYnV0ZShoLCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChUKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjB9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Um9vdE5vZGVz'@;
put 'KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4h'@;
put 'YS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQodkgpLHR0KE5pKSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp'@;
put 'b24oYSxkLGgpe2lmKDEmYSYmTG8oaCxnMSw0KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsInRyZWUiKSgiYXJpYS1t'@;
put 'dWx0aXNlbGVjdGFibGUiLGQuaXNNdWx0aVNlbGVjdGFibGUpfSxpbnB1dHM6e2xhenk6WyJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbdGkoW0FRLHZIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsz'@;
put 'LCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCksSmUoMSxLX2UsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W1RR'@;
put 'LFppXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxSd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKGg4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1t'@;
put 'aSh7aW1wb3J0czpbW29vLHNhLElGXV19KSxjfSkoKSxPd2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbTXdlLGt3ZSxSd2VdfSks'@;
put 'Y30pKCk7ZnVuY3Rpb24gSVEoYyxsLGEpe3JldHVybiBLZS5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBfSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yZW5k'@;
put 'ZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9Xyx0aGlzLmlkPUxjKCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXI9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0'@;
put 'aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksdGhpcy5wYXJlbnR8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5w'@;
put 'dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2Uu'@;
put 'bGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZShkMS5MRUZUKSxkLnN0b3BQcm9wYWdhdGlv'@;
put 'bigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxp'@;
put 'c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hpbGRyZW4ucGlwZShpZCgxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaChfPT5fLmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJlJz'@;
put 'KHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0'@;
put 'aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+'@;
put 'e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P2QxLlJJR0hUOmQxLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlz'@;
put 'LnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlciYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcj1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo'@;
put 'KCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7UnModGhp'@;
put 'cy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHF4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKE1lKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFu'@;
put 'ZEdldENoaWxkcmVuKCkucGlwZShNZShhPT5hWzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTWUoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtMRi5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJkxGLmxpbmtQYXJlbnQoYSx0aGlzLmNs'@;
put 'b3NlQW5kR2V0VGhpcygpLGQxLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gSVEodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBJUShXaSh0aGlzKSwoKT0+'@;
put 'dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoYywxMiksYXIoS3MpLGFyKEViKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9'@;
put 'KSgpO2NvbnN0IFB3ZT1lUShfSCk7bGV0IEZiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBiZX1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBId2U9e3Byb3ZpZGU6RmIsdXNlRmFjdG9yeTpmdW5jdGlvbiBGd2UoYyl7cmV0dXJuIGN8fG5ldyBG'@;
put 'Yn0sZGVwczpbW25ldyB6MixuZXcgZzAsRmJdXX07bGV0IE5mPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmNkcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY2hhbmdlcy5zdWJzY3JpYmUoXz0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49XykpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChjLDEyKSx0dChLcyksdHQoVWEpLHR0KEZiKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs'@;
put 'ci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xv'@;
put 'c2FibGUiXX0sZmVhdHVyZXM6W3RpKFtId2Use3Byb3ZpZGU6STgsdXNlRXhpc3Rpbmc6Tml9LHpKLEtzLFB3ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks'@;
put 'Y30pKCk7Y29uc3QgTndlPVt7cHJvdmlkZTpTRSx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9TGMoKSx0aGlzLmRpc2FibGVkPSExLGQuc2V0QXR0cmlidXRlKGEubmF0'@;
put 'aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIw'@;
put 'IiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJl'@;
put 'ci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKEZvKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IEs4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0'@;
put 'aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aCx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNh'@;
put 'YmxlZD0hIWF8fCIiPT09YX1nZXQgZGlzYWJsZWREZXByZWNhdGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWREZXByZWNhdGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YSx0aGlzLnNldEJ5RGVwcmVjYXRlZERp'@;
put 'c2FibGVkPSEwfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVD'@;
put 'bG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFn'@;
put 'YXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoTmYpLHR0KEZiKSx0dChTRSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5v'@;
put 'bkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihUcigicm9sZSIsIm1lbnVpdGVtIiko'@;
put 'ImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCYmZC5zZXRCeURlcHJlY2F0ZWREaXNhYmxlZD8iIjpudWxsKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLGRyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7'@;
put 'ZGlzYWJsZWQ6WyJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZGlzYWJsZWREZXByZWNhdGVkOlsiZGlzYWJsZWQiLCJkaXNhYmxlZERlcHJlY2F0ZWQiXSxkcm9wZG93bkl0ZW1JZDpbImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3RpKFtOd2VdKV19KSxjfSkoKTt2YXIgR3I9'@;
put 'ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRd'@;
put 'PSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0i'@;
put 'TEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oR3J8fHt9KTtjb25zdCBSUT0iYWJzb2x1dGUiO2NsYXNzIGp3ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxM'@;
put 'aXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249UlEsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9y'@;
put 'KGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6Xz0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksXyYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IFQ9bC5nZXRCb3VuZGluZ0NsaWVudFJl'@;
put 'Y3QoKSxXPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgaWU9VC5sZWZ0LVcubGVmdCtoLHBlPVQudG9wLVcudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgR3IuTEVGVF9UT1A6Y2FzZSBHci5UT1BfTEVGVDpicmVhaztjYXNlIEdyLlRPUF9DRU5URVI6aWUrPVQud2lkdGgv'@;
put 'MjticmVhaztjYXNlIEdyLlRPUF9SSUdIVDpjYXNlIEdyLlJJR0hUX1RPUDppZSs9VC53aWR0aDticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6cGUrPVQuaGVpZ2h0O2JyZWFrO2Nhc2UgR3IuQk9UVE9NX0NFTlRFUjpwZSs9VC5oZWlnaHQsaWUrPVQud2lk'@;
put 'dGgvMjticmVhaztjYXNlIEdyLkJPVFRPTV9SSUdIVDpjYXNlIEdyLlJJR0hUX0JPVFRPTTpwZSs9VC5oZWlnaHQsaWUrPVQud2lkdGg7YnJlYWs7Y2FzZSBHci5MRUZUX0NFTlRFUjpwZSs9VC5oZWlnaHQvMjticmVhaztjYXNlIEdyLlJJR0hUX0NFTlRFUjpwZSs9VC5oZWlnaHQvMixpZSs9'@;
put 'VC53aWR0aH1zd2l0Y2goZCl7Y2FzZSBHci5MRUZUX1RPUDpjYXNlIEdyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgR3IuVE9QX0NFTlRFUjppZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuVE9QX1JJR0hUOmNhc2UgR3IuUklHSFRfVE9QOmllLT1XLndpZHRoO2JyZWFrO2Nhc2UgR3IuTEVGVF9C'@;
put 'T1RUT006Y2FzZSBHci5CT1RUT01fTEVGVDpwZS09Vy5oZWlnaHQ7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOnBlLT1XLmhlaWdodCxpZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuQk9UVE9NX1JJR0hUOmNhc2UgR3IuUklHSFRfQk9UVE9NOnBlLT1XLmhlaWdodCxpZS09Vy53aWR0'@;
put 'aDticmVhaztjYXNlIEdyLkxFRlRfQ0VOVEVSOnBlLT1XLmhlaWdodC8yO2JyZWFrO2Nhc2UgR3IuUklHSFRfQ0VOVEVSOnBlLT1XLmhlaWdodC8yLGllLT1XLndpZHRofWNvbnN0IHdlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxFZT1wYXJzZUludCh3ZS5tYXJnaW5MZWZ0LDEw'@;
put 'KSxaZT1wYXJzZUludCh3ZS5tYXJnaW5SaWdodCwxMCksaXQ9cGFyc2VJbnQod2UubWFyZ2luVG9wLDEwKSxldD1wYXJzZUludCh3ZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEdyLkxFRlRfVE9QOmNhc2UgR3IuVE9QX0xFRlQ6Y2FzZSBHci5UT1BfUklHSFQ6Y2FzZSBHci5S'@;
put 'SUdIVF9UT1A6KGQ9PT1Hci5CT1RUT01fUklHSFR8fGQ9PT1Hci5SSUdIVF9CT1RUT00pJiYocGUtPWV0LGllLT1aZSksKGQ9PT1Hci5CT1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKHBlLT1pdCxpZSs9RWUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihw'@;
put 'ZSs9aXQsaWUrPUVlKSwoZD09PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihwZSs9aXQsaWUtPVplKTticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Y2FzZSBHci5CT1RUT01fUklHSFQ6Y2FzZSBHci5SSUdIVF9CT1RUT006KGQ9PT1Hci5C'@;
put 'T1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKHBlLT1ldCxpZSs9RWUpLChkPT09R3IuQk9UVE9NX1JJR0hUfHxkPT09R3IuUklHSFRfQk9UVE9NKSYmKHBlLT1ldCxpZS09WmUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihwZSs9aXQsaWUrPUVlKSwoZD09'@;
put 'PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihwZSs9aXQsaWUtPVplKTticmVhaztjYXNlIEdyLlRPUF9DRU5URVI6cGUtPWV0LGllKz1FZSxpZS09WmU7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOnBlKz1pdCxpZSs9RWUsaWUtPVplO2JyZWFrO2Nhc2UgR3IuTEVGVF9D'@;
put 'RU5URVI6cGUrPWl0LHBlLT1ldCxpZS09WmU7YnJlYWs7Y2FzZSBHci5SSUdIVF9DRU5URVI6cGUrPWl0LHBlLT1ldCxpZSs9RWV9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGllKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91'@;
put 'bmQocGUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0'@;
put 'aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHxhPT09UlF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBiZTtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1'@;
put 'bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92'@;
put 'ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3Jv'@;
put 'bGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8'@;
put 'ImF1dG8iPT09YS5vdmVyZmxvd1l9fWxldCBiSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVT'@;
put 'Q0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoTmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChLcyks'@;
put 'dGhpcy5yZW5kZXJlcj1hLmdldChGbyksdGhpcy5uZ1pvbmU9YS5nZXQoTm8pLHRoaXMucmVmPWEuZ2V0KFVhKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBqd2UodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5h'@;
put 'bmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfWdldCBpc09mZlNjcmVlbigpe3JldHVybiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNl'@;
put 'LmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRl'@;
put 'c3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zl'@;
put 'ckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVu'@;
put 'KCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmbDIoYS5rZXkpPT09d28uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9j'@;
put 'dW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50'@;
put 'JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYm'@;
put 'ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KE5p'@;
put 'LDQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImlzLW9mZi1zY3JlZW4iLGQuaXNPZmZTY3JlZW4pfX0pLGN9KSgpLGFnPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtp'@;
put 'ZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUdyLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUCk6KHRo'@;
put 'aXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRz'@;
put 'aWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUdyLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5h'@;
put 'bmNob3JQb2ludD1Hci5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxl'@;
put 'ZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1Hci5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1A7YnJlYWs7Y2Fz'@;
put 'ZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2Jy'@;
put 'ZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMu'@;
put 'aXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVz'@;
put 'ZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFYSksdHQoSTgsOCksdHQoYywxMiksdHQoX0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJp'@;
put 'ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmTG8oaCxTRSw0KSwyJmEpe2xldCBmO2FpKGY9bGkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsIm1lbnUiKSxkcigiZHJvcGRvd24tbWVudSIsITApKX0saW5w'@;
put 'dXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W2VvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbGc9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRo'@;
put 'aXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmYpLHR0KEtzKSx0dChOaSksdHQoX0gpKX0s'@;
put 'Yy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJu'@;
put 'IGQub25Ecm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYmKFRyKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksZHIoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9n'@;
put 'Z2xlKSgiZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9fSksY30pKCkseUg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1'@;
put 'MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxzZCxzYV19KSxjfSkoKTtjb25zdCB6d2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiXTtsZXQgd0g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hh'@;
put 'cGU9ImluZm8tY2lyY2xlIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7endlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFs'@;
put 'ZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0'@;
put 'aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFz'@;
put 'czoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0i'@;
put 'ZXhjbGFtYXRpb24tY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0iY2hlY2stY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRo'@;
put 'aXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgYmV9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhp'@;
put 'cy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5h'@;
put 'bGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0'@;
put 'aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEs'@;
put 'dGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhp'@;
put 'cy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdl'@;
put 'Lm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJl'@;
put 'bnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9j'@;
put 'dXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlz'@;
put 'LmNvbW1vblN0cmluZ3M9Zix0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5n'@;
put 'ZWQ9bmV3IEVyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfXNldCBhbGVydEljb25TaGFw'@;
put 'ZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJv'@;
put 'bVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlz'@;
put 'Lm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhp'@;
put 'cy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1p'@;
put 'dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHdIKSx0dChVYSksdHQoVkUsOCksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbImNsckFsZXJ0U2l6'@;
put 'ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlsiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixhbGVydFR5cGU6'@;
put 'WyJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlsiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVh'@;
put 'dHVyZXM6W3RpKFt3SF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1oaWRkZW4iLCJhbGVydC1zbSIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFz'@;
put 'cyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoQWkoKSxKZSgwLEpfZSw0LDgsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1ppLGRjLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxGUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQod0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJjZHMtaWNvbiIsMSkseWUo'@;
put 'KSxrcigyKSksMiZhJiYoQ2UoMSksVHIoInNoYXBlIixkLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsZC5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxOYj0oKCk9PntjbGFzcyBj'@;
put 'e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksSFE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNl'@;
put 'cnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0'@;
put 'IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2Vy'@;
put 'dmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VS'@;
put 'UkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3Jl'@;
put 'dHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZp'@;
put 'Y2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hh'@;
put 'bmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3RpdmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5t'@;
put 'dWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RC'@;
put 'aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OlsiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRl'@;
put 'eCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwi'@;
put 'YWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFu'@;
put 'Z2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLHF0KDMsImNkcy1pY29uIiwzKSx5ZSgpKCks'@;
put 'bWUoNCwiZGl2Iiw0KSxOZSg1KSx5ZSgpLG1lKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxxdCg4LCJjZHMtaWNvbiIsNikseWUoKSgpKCkpLDImYSYmKENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxl'@;
put 'cnRBcmlhTGFiZWwpLENlKDMpLHpjKCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKSxOUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9'@;
put 'W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7'@;
put 'cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3Vy'@;
put 'cmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2'@;
put 'aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJy'@;
put 'ZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11'@;
put 'bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVkUpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7'@;
put 'aWYoMSZhJiZMbyhoLEhiLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSko'@;
put 'ImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4Olsi'@;
put 'Y2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh'@;
put 'bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbVkVdKV0sbmdDb250ZW50U2VsZWN0b3JzOnRiZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKGViZSksSmUoMCxRX2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxrcigxKSksMiZhJiZSZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltIUSxaaV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksVlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKHMxLE9LLG8xLHltZSxuYil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSks'@;
put 'Yy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksVXdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1ZR'@;
put 'XX0pLGN9KSgpLFhzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLk5BVl9MRVZFTF8xPTEsYy5OQVZfTEVWRUxfMj0yLGMuTkFWX0NMT1NFX0FMTD0iTkFWX0NMT1NFX0FMTCIsYy5OQVZfT1BFTj0iTkFWX09QRU4iLGMuTkFWX0NMT1NFPSJOQVZfQ0xPU0UiLGMuTkFWX1RPR0dMRT0iTkFWX1RP'@;
put 'R0dMRSIsYy5OQVZfQ0xBU1NfSEFNQlVSR0VSX01FTlU9Im9wZW4taGFtYnVyZ2VyLW1lbnUiLGMuTkFWX0NMQVNTX09WRVJGTE9XX01FTlU9Im9wZW4tb3ZlcmZsb3ctbWVudSIsYy5OQVZfQ0xBU1NfVFJJR0dFUl8xPSJoZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIiLGMuTkFWX0NMQVNTX1RS'@;
put 'SUdHRVJfMj0iaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIiLGMuTkFWX0NMQVNTX0xFVkVMXzE9ImNsci1uYXYtbGV2ZWwtMSIsYy5OQVZfQ0xBU1NfTEVWRUxfMj0iY2xyLW5hdi1sZXZlbC0yIixjfSkoKTtjbGFzcyBCUXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2NvbnRyb2xDb2RlPWwsdGhp'@;
put 'cy5fbmF2TGV2ZWw9YX1nZXQgY29udHJvbENvZGUoKXtyZXR1cm4gdGhpcy5fY29udHJvbENvZGV9Z2V0IG5hdkxldmVsKCl7cmV0dXJuIHRoaXMuX25hdkxldmVsfX1sZXQgQkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVzcG9uc2l2ZU5hdkxpc3Q9W10sdGhpcy5yZWdp'@;
put 'c3Rlck5hdlN1YmplY3Q9bmV3IHF4LHRoaXMuY29udHJvbE5hdlN1YmplY3Q9bmV3IGJlLHRoaXMuY2xvc2VBbGxOYXZzKCl9Z2V0IHJlZ2lzdGVyZWROYXZzKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWdldCBuYXZDb250cm9sKCl7cmV0dXJuIHRo'@;
put 'aXMuY29udHJvbE5hdlN1YmplY3QuYXNPYnNlcnZhYmxlKCl9cmVnaXN0ZXJOYXYoYSl7IWF8fHRoaXMuaXNOYXZSZWdpc3RlcmVkKGEpfHwodGhpcy5yZXNwb25zaXZlTmF2TGlzdC5wdXNoKGEpLHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0Lm5leHQodGhpcy5yZXNwb25zaXZlTmF2TGlzdCkp'@;
put 'fWlzTmF2UmVnaXN0ZXJlZChhKXtyZXR1cm4gdGhpcy5yZXNwb25zaXZlTmF2TGlzdC5pbmRleE9mKGEpPi0xJiYoY29uc29sZS5lcnJvcigiTXVsdGlwbGUgY2xyLW5hdi1sZXZlbCAiK2ErIiBhdHRyaWJ1dGVzIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgZXhpc3Rz'@;
put 'IiksITApfXVucmVnaXN0ZXJOYXYoYSl7Y29uc3QgZD10aGlzLnJlc3BvbnNpdmVOYXZMaXN0LmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMucmVzcG9uc2l2ZU5hdkxpc3Quc3BsaWNlKGQsMSksdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0KSl9c2Vu'@;
put 'ZENvbnRyb2xNZXNzYWdlKGEsZCl7Y29uc3QgaD1uZXcgQlEoYSxkKTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoaCl9Y2xvc2VBbGxOYXZzKCl7Y29uc3QgYT1uZXcgQlEoWHMuTkFWX0NMT1NFX0FMTCwtOTk5KTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoYSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFp3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpO2Z1bmN0aW9uIHpRKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAi'@;
put 'KSxsLmNsYXNzTGlzdC5hZGQoIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxsfWNsYXNzIEp3ZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5hY3RpdmU9ITEsUnMoZCkmJih0aGlzLl9kb2N1bWVudD1hLmdldChJcykpLGguZm9jdXNUcmFwSWR8fChoLmZv'@;
put 'Y3VzVHJhcElkPWZ1bmN0aW9uIEZnZShjPSJfIil7cmV0dXJuYCR7Y30ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9KCkpLHRoaXMuZm9jdXNUcmFwRWxlbWVudD1ofWVuYWJsZUZvY3VzVHJhcCgpe2NvbnN0IGw9dGhpcy5mb2N1c1RyYXBFbGVtZW50LGE9bC5x'@;
put 'dWVyeVNlbGVjdG9yKCJbY2RzLWZpcnN0LWZvY3VzXSIpLGQ9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihoRS5nZXRDdXJyZW50KCk9PT1sKXRocm93IG5ldyBFcnJvcigiRm9jdXMgdHJhcCBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoaXMgaW5zdGFuY2UuIik7dGhpcy5maXJz'@;
put 'dEZvY3VzRWxlbWVudD1hfHx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsZnVuY3Rpb24gS3dlKGMsbCl7aWYobCYmIWwudG9wUmVib3VuZEVsZW1lbnQmJiFsLmJvdHRvbVJlYm91bmRFbGVtZW50KXtsLnRvcFJlYm91bmRFbGVtZW50PXpRKGMpLGwuYm90dG9tUmVib3VuZEVsZW1lbnQ9elEoYyk7'@;
put 'Y29uc3QgYT1sLnBhcmVudEVsZW1lbnQsZD1sLm5leHRTaWJsaW5nO2EmJihhLmluc2VydEJlZm9yZShsLnRvcFJlYm91bmRFbGVtZW50LGwpLGQ/YS5pbnNlcnRCZWZvcmUobC5ib3R0b21SZWJvdW5kRWxlbWVudCxkKTphLmFwcGVuZENoaWxkKGwuYm90dG9tUmVib3VuZEVsZW1lbnQpKX19'@;
put 'KHRoaXMuX2RvY3VtZW50LGwpLGZ1bmN0aW9uIEg2ZShjKXtzd2l0Y2goYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaW5wdXQiOnJldHVybiJoaWRkZW4iIT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpJiYhYy5oYXNBdHRyaWJ1dGUo'@;
put 'InJlYWRvbmx5Iik7Y2FzZSJidXR0b24iOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIik7Y2FzZSJpZnJhbWUiOmNhc2UiZW1iZWQiOmNhc2Uib2JqZWN0IjpyZXR1cm4hMDtjYXNlImEiOmNhc2UiYXJlYSI6cmV0dXJuIGMuaGFz'@;
put 'QXR0cmlidXRlKCJocmVmIik7Y2FzZSJhdWRpbyI6Y2FzZSJ2aWRlbyI6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJjb250cm9scyIpO2RlZmF1bHQ6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHwidHJ1ZSI9PT1jLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fCJi'@;
put 'dXR0b24iPT09Yy5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfX0obCl8fGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZCYmZnVuY3Rpb24gQjZlKGMpe3JldHVybiEhYyYmYyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fShkKSYmKHRoaXMu'@;
put 'cHJldmlvdXNGb2N1cz1kKSxoRS5zZXRDdXJyZW50KGwpO2NvbnN0IGg9c2V0VGltZW91dCgoKT0+e3RoaXMuZmlyc3RGb2N1c0VsZW1lbnQuZm9jdXMoKSxjbGVhclRpbWVvdXQoaCl9LDEwKTt0aGlzLm9uRm9jdXNJbkV2ZW50PXRoaXMub25Gb2N1c0luLmJpbmQodGhpcyksdGhpcy51bmxp'@;
put 'c3Rlbj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLl9kb2N1bWVudCwiZm9jdXNpbiIsdGhpcy5vbkZvY3VzSW5FdmVudCksdGhpcy5hY3RpdmU9ITB9cmVtb3ZlRm9jdXNUcmFwKCl7dGhpcy51bmxpc3RlbiYmdGhpcy51bmxpc3RlbigpLGZ1bmN0aW9uIFh3ZShjKXtpZihjKXtjb25zdCBs'@;
put 'PWMucGFyZW50RWxlbWVudDtpZihsKXtjb25zdCBhPWMudG9wUmVib3VuZEVsZW1lbnQsZD1jLmJvdHRvbVJlYm91bmRFbGVtZW50O2EmJmwucmVtb3ZlQ2hpbGQoYSksZCYmbC5yZW1vdmVDaGlsZChkKX1kZWxldGUgYy50b3BSZWJvdW5kRWxlbWVudCxkZWxldGUgYy5ib3R0b21SZWJvdW5k'@;
put 'RWxlbWVudH19KHRoaXMuZm9jdXNUcmFwRWxlbWVudCksdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5mb2N1c1RyYXBFbGVtZW50LCJ0YWJpbmRleCIpLGhFLmFjdGl2YXRlUHJldmlvdXNDdXJyZW50KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5wcmV2aW91c0ZvY3VzJiZ0aGlz'@;
put 'LnByZXZpb3VzRm9jdXMuZm9jdXMoKX1vbkZvY3VzSW4obCl7IWZ1bmN0aW9uICR3ZShjLGwsYSl7Y29uc3QgZD1oRS5nZXRDdXJyZW50KCk9PT1sLGg9ZnVuY3Rpb24gcXdlKGMsbCl7cmV0dXJuIGM9PT1sLnRvcFJlYm91bmRFbGVtZW50fHxjPT09bC5ib3R0b21SZWJvdW5kRWxlbWVudHx8'@;
put 'IShsLmNvbnRhaW5zKGMpfHxudWxsIT09bCYmbC5jb250YWlucyhjKSl9KGMsbCk7ZCYmaD8oYT1hfHxsKS5mb2N1cygpOmMuZm9jdXMoKX0obC5jb21wb3NlZFBhdGgoKVswXSx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsdGhpcy5maXJzdEZvY3VzRWxlbWVudCl9fWxldCBVUT0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgSndle2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoZixfLGEsaC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlPWQsdGhpcy5lbGVtZW50UmVmPWgsdGhpcy5faXNPcGVuPSExLFJzKGEpJiYodGhpcy5fZG9jdW1lbnQ9Xy5nZXQoSXMpKSx0'@;
put 'aGlzLl9zdWJzY3JpcHRpb249ZC5uYXZDb250cm9sLnBpcGUoTGEoVD0+VC5uYXZMZXZlbD09PXRoaXMubGV2ZWwpLExhKCh7Y29udHJvbENvZGU6VH0pPT5UPT09WHMuTkFWX09QRU4mJiF0aGlzLmlzT3Blbnx8VD09PVhzLk5BVl9DTE9TRSYmdGhpcy5pc09wZW4pKS5zdWJzY3JpYmUoKHtj'@;
put 'b250cm9sQ29kZTpUfSk9PntUIT09WHMuTkFWX09QRU4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSksdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChkLm5hdkNvbnRyb2wucGlwZShMYSgoe2NvbnRyb2xDb2RlOlR9KT0+VD09PVhzLk5BVl9DTE9TRV9BTEwpKS5zdWJzY3JpYmUoKCk9PnRoaXMu'@;
put 'Y2xvc2UoKSkpfWdldCBsZXZlbCgpe3JldHVybiB0aGlzLl9sZXZlbH1nZXQgcmVzcG9uc2l2ZU5hdkNvZGVzKCl7cmV0dXJuIFhzfWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVufW5nT25Jbml0KCl7dGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8KHRoaXMuY2xvc2VCdXR0b25B'@;
put 'cmlhTGFiZWw9dGhpcy5fbGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMT94Ri5yZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6eEYucmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2UpLHRoaXMubGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMXx8dGhpcy5sZXZlbD09PVhzLk5BVl9MRVZFTF8yPyh0aGlzLnJlc3Bv'@;
put 'bnNpdmVOYXZTZXJ2aWNlLnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuYWRkTmF2Q2xhc3ModGhpcy5sZXZlbCkpOmNvbnNvbGUuZXJyb3IoIk5hdiBMZXZlbCBjYW4gb25seSBiZSAxIG9yIDIiKX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPSgoYyxsKT0+e2NvbnN0IGE9dGhpcy5f'@;
put 'ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2RzLWludGVybmFsLWNsb3NlLWJ1dHRvbiIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiaWNvbi1zaXplIiwiMzIiKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbCksYS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGEuc2V0'@;
put 'QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIiksYS5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsInRydWUiKSxhLmNsYXNzTmFtZT0iY2xyLW5hdi1jbG9zZSIsYX0pKDAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbCk7dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLHRoaXMuY2xvc2UuYmlu'@;
put 'ZCh0aGlzKSksdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKSx0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPDk5MiYmdGhpcy5jbG9zZSgpfW5nT25E'@;
put 'ZXN0cm95KCl7dGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS51bnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uUmVzaXplKGEpe2EudGFyZ2V0LmlubmVyV2lkdGg8OTkyJiZ0aGlzLmlzT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5zaG93'@;
put 'TmF2aWdhdGlvbigpfW9uTW91c2VDbGljayhhKXtsZXQgZD1hO2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Zm9yKDtkOyl7aWYoZD09PWgpcmV0dXJuO2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJuYXYtbGluayIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdp'@;
put 'ZHRoPDk5MilyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7ZD1kLnBhcmVudE5vZGV9fWFkZE5hdkNsYXNzKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2E9PT1Ycy5OQVZfTEVWRUxfMT9kLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMSk6YT09PVhz'@;
put 'Lk5BVl9MRVZFTF8yJiZkLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMil9b3Blbigpe3RoaXMuX2lzT3Blbj0hMCx0aGlzLnNob3dOYXZpZ2F0aW9uKCksdGhpcy5lbmFibGVGb2N1c1RyYXAoKSx0aGlzLnNob3dDbG9zZUJ1dHRvbigpLHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2Uuc2VuZENv'@;
put 'bnRyb2xNZXNzYWdlKFhzLk5BVl9PUEVOLHRoaXMubGV2ZWwpfWNsb3NlKCl7dGhpcy5faXNPcGVuPSExLHRoaXMuaGlkZU5hdmlnYXRpb24oKSx0aGlzLnJlbW92ZUZvY3VzVHJhcCgpLHRoaXMuaGlkZUNsb3NlQnV0dG9uKCksdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJv'@;
put 'bE1lc3NhZ2UoWHMuTkFWX0NMT1NFLHRoaXMubGV2ZWwpfWhpZGVOYXZpZ2F0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxl'@;
put 'bWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iLCJ0cnVlIil9c2hvd05hdmlnYXRpb24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRl'@;
put 'KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iKX1oaWRlQ2xvc2VCdXR0b24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo'@;
put 'dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNsci1uYXYtY2xvc2UiKSwiaGlkZGVuIiwidHJ1ZSIpfXNob3dDbG9zZUJ1dHRvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0'@;
put 'b3IoIi5jbHItbmF2LWNsb3NlIiksImFyaWEtaGlkZGVuIiwiZmFsc2UiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuY2xyLW5hdi1jbG9zZSIpLCJoaWRkZW4iKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR3MpLHR0KEJFKSx0dChOaSksdHQoRm8pLHR0KEVhKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsci1uYXYtbGV2ZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVz'@;
put 'aXplIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNikoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlQ2xpY2soZi50YXJnZXQpfSl9LGlucHV0czp7X2xldmVsOlsiY2xyLW5hdi1sZXZlbCIsIl9sZXZlbCJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlsi'@;
put 'Y2xvc2VBcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZW9dfSksY30pKCksZUNlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksWlE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHphLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLEplKDAsaWJlLDEsMCwibmct'@;
put 'dGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHRDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9'@;
put 'KSgpLExwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJd'@;
put 'XSxmZWF0dXJlczpbZW9dfSksY30pKCksY2c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRh'@;
put 'YnMiKTtzdXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoTHAsOCksdHQoeDgp'@;
put 'LHR0KCQ1KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7dmFyIHVnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVS'@;
put 'VElDQUw9InZlcnRpY2FsIixjfSh1Z3x8e30pO2xldCBWYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9dWcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVy'@;
put 'biB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT11Zy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJl'@;
put 'bi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbkNlPTAsSXA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10'@;
put 'YWItY29udGVudC0iK25DZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRh'@;
put 'Ykxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3'@;
put 'Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1'@;
put 'MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhvYmUsNyksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsi'@;
put 'aWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKEFpKCksSmUoMCxzYmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHJDZT0wO2NvbnN0IENIPW5ldyBTaSgiVEFCU19JRCIpLG9DZT17cHJvdmlkZTpDSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGlDZSgpe3JldHVybiJj'@;
put 'bHItdGFicy0iK3JDZSsrfX07bGV0IHNDZT0wLFJwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMuY2ZyPWYsdGhpcy52aWV3Q29udGFpbmVyUmVmPV8sdGhpcy50YWJzU2Vydmlj'@;
put 'ZT1ULHRoaXMudGFic0lkPVcsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrc0NlKyspO2NvbnN0IGllPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFpRKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJl'@;
put 'Zi5jcmVhdGVDb21wb25lbnQoaWUsdm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PXVnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93'@;
put 'KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250'@;
put 'ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOaSksdHQoSzApLHR0KGFzKSx0dChWYiksdHQoQ0gpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFi'@;
put 'IiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJih0MSgiaWQiLGQudGFiTGlua0lkKSxUcigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJv'@;
put 'bHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxkcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOlsi'@;
put 'aWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlsiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksT3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgu'@;
put 'cmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihMbyhoLFJwLDcpLExvKGgsSXAsNykpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQu'@;
put 'dGFiTGluaz1mLmZpcnN0KSxhaShmPWxpKCkpJiYoZC50YWJDb250ZW50PWYuZmlyc3QpfX0sZmVhdHVyZXM6W3RpKFtjeWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigwKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLFNIPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEs'@;
put 'dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyh1ZykubWFwKGQ9PnVnW2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2Vy'@;
put 'dmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVU'@;
put 'YWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdl'@;
put 'dCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09dWcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9'@;
put 'Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0'@;
put 'ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBd'@;
put 'LmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2Vydmlj'@;
put 'ZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlv'@;
put 'biYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlv'@;
put 'bi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25G'@;
put 'b2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFi'@;
put 'UG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxk'@;
put 'KXthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWxpc3RlbkZvclRhYkxp'@;
put 'bmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoY3AodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9dGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspLHRoaXMudGFiTGlua0VsZW1lbnRzPXRo'@;
put 'aXMuX3RhYkxpbmtEaXJlY3RpdmVzLm1hcChhPT5hLmVsLm5hdGl2ZUVsZW1lbnQpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dChLcyksdHQoVmIpLHR0KENIKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZMbyhoLE9wLDQpLDImYSl7bGV0IGY7YWkoZj1saSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKEw4LDcpLFJvKFNILDUsTmkpLFJvKGFi'@;
put 'ZSw3LGFzKSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxhaShoPWxpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLGFpKGg9bGkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6'@;
put 'ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbdGkoWyQ1LEtzLFZiLG9DZV0pXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sicm9sZSIsInRhYmxpc3QiLCJj'@;
put 'bHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNscktleUZvY3VzIiwiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5h'@;
put 'di1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs'@;
put 'ImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIiwic3RhdHVzIiwidG9nZ2xlU2VydmljZS5vcGVuID8g'@;
put 'J2luZm8nIDogbnVsbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm'@;
put 'JihtZSgwLCJ1bCIsMCkseHQoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oZil9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoZil9KSxKZSgxLGNiZSwyLDEs'@;
put 'Im5nLWNvbnRhaW5lciIsMSksSmUoMixmYmUsNywxMCwibmctY29udGFpbmVyIiwyKSx5ZSgpLGphKDMsbnVsbCwzKSksMiZhJiYoUmUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLENlKDEpLFJlKCJuZ0lm'@;
put 'IixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W0w4LFNILHhzLFppLHJkLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKExLKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNkLHNhLHRDZSxCRl0sc2RdfSksY30pKCksTUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJl'@;
put 'Z2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCkseEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IGJlLHRoaXMu'@;
put 'X2NvbGxhcHNlZENoYW5nZWQ9bmV3IGJlLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVy'@;
put 'biB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2'@;
put 'aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNp'@;
put 'YmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxZUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2Vydmlj'@;
put 'ZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IEVyKCEwKSx0aGlzLl9zdWI9dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZShfPT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KF8pfSl9Z2V0IGNvbGxhcHNpYmxl'@;
put 'KCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2'@;
put 'U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQo'@;
put 'KXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpudWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVIKSx0dCh4SCksdHQoTUgpLHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0'@;
put 'QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2VkKSgiaGFzLW5hdi1ncm91cHMiLGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOntjb2xsYXBzaWJsZTpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUi'@;
put 'LCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbRUgseEgsTUhdKV0sbmdDb250ZW50U2Vs'@;
put 'ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCJdLFsiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi'@;
put 'dGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEs'@;
put 'Im5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxKZSgwLHBiZSwyLDYsImJ1dHRvbiIsMCksbWUoMSwiZGl2IiwxKSxrcigyKSxKZSgzLGdiZSwxLDEsImJ1dHRvbiIsMikseWUoKSksMiZhJiYoUmUoIm5nSWYiLGQuY29sbGFwc2libGUpLENl'@;
put 'KDMpLFJlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBiZX1nZXQgZXhwYW5kQ2hhbmdlKCl7'@;
put 'cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1'@;
put 'MDI3NWZhY30pLGN9KSgpLFdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGJlLGgmJm4yKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKGFoKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNo'@;
put 'ZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoVWEpLHR0KGtILDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGlj'@;
put 'YWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczpfYmUsbmdDb250ZW50U2VsZWN0b3JzOnliZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKGJiZSksa3IoMCksbWUoMSwic3Bh'@;
put 'biIsMCksa3IoMiwxKSx5ZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZENlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCxSSyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlw'@;
put 'ZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxzZCxxNV0sc2Qsc2EscTVdfSksY30pKCksaENlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp'@;
put 'bmo9bWkoe2ltcG9ydHM6W1p3ZSxlQ2UsYUNlLGRDZV19KSxjfSkoKSxHUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Ny'@;
put 'b2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KShhcihJcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbElkPUxjKCksdGhp'@;
put 'cy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0iZmFsc2UiLHRo'@;
put 'aXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBFcighMSksdGhpcy5sYWJlbGxlZEJ5PXRoaXMubW9kYWxJZH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlP3RoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2Vydmlj'@;
put 'ZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCkpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9v'@;
put 'cGVuPSExLHRoaXMuZm9jdXNUcmFwLnNldFByZXZpb3VzRm9jdXMoKSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiZ0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR1EpLHR0KEVzKSl9'@;
put 'LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKE1wLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuZm9jdXNUcmFwPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0sMCxFdiksMiZhJiZkcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46WyJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOlsiY2xyTW9kYWxDbG9zYWJsZSIsImNs'@;
put 'b3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlsiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlsiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0Jh'@;
put 'Y2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlsiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl0sc3RvcENsb3NlOlsiY2xyTW9kYWxQcmV2'@;
put 'ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlsiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt0aShb'@;
put 'XSxbR1FdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOk1iZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0'@;
put 'cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBw'@;
put 'ZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xv'@;
put 'c2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKFNiZSksSmUoMCxDYmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W1ppLE1wLFBGLHFzXSxzdHlsZXM6WyJb'@;
put 'X25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZmFkZURvd24iLFtmYygiKiA9PiBmYWxzZSIsW19zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSks'@;
put 'cnUoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGZjKCJmYWxzZSA9PiAqIixbcnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxhMSgiZmFkZSIsW2ZjKCJ2b2lkID0+ICoiLFtfcyh7b3BhY2l0eTowfSkscnUoIjAu'@;
put 'MnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5Oi44NX0pKV0pLGZjKCIqID0+IHZvaWQiLFtydSgiMC4ycyBlYXNlLWluLW91dCIsX3Moe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhv'@;
put 'c3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3Qu'@;
put 'bmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVs'@;
put 'ZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9'@;
put 'YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRh'@;
put 'YmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KE5vKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLCRRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhu'@;
put 'Yil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5RSxxNV0sc2EscTVdfSksY30pKCk7Y29uc3QgZkNlPXsidG9wLWxlZnQiOnthbmNob3JQb2lu'@;
put 'dDpHci5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9w'@;
put 'LXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6R3IuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6R3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5MRUZUX0JPVFRPTSxvZmZzZXRZOjIs'@;
put 'b2Zmc2V0WDoxNH0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuTEVGVF9DRU5URVIsb2Zmc2V0WTo2LG9mZnNldFg6MTR9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Okdy'@;
put 'LkxFRlRfVE9QLG9mZnNldFk6LTEsb2Zmc2V0WDoxNH0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9MRUZULG9mZnNldFk6OSxvZmZzZXRYOi0xfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9D'@;
put 'RU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9DRU5URVIsb2Zmc2V0WTo5LG9mZnNldFg6MTJ9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9SSUdIVCxvZmZzZXRZOjksb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNo'@;
put 'b3JQb2ludDpHci5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNH0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6R3IuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLlJJR0hUX0NFTlRFUixvZmZzZXRZOjQsb2Zmc2V0WDotMTR9'@;
put 'LCJsZWZ0LXRvcCI6e2FuY2hvclBvaW50OkdyLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE0fSxkZWZhdWx0OnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkxFRlRfQ0VOVEVSLG9mZnNldFk6'@;
put 'NixvZmZzZXRYOjE0fX0scENlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1p'@;
put 'ZGRsZSIsImxlZnQtdG9wIl07bGV0IHFRPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9Zix0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPV8s'@;
put 'dGhpcy5wbGF0Zm9ybUlkPVQsdGhpcy5zaWducG9zdENvbnRlbnRJZD1MYygpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRo'@;
put 'aXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9V31nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVt'@;
put 'b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJnBDZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3Qg'@;
put 'ZD1mQ2VbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9z'@;
put 'ZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3Vz'@;
put 'TWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KEk4LDgpLHR0KEVzKSx0dChvSCksdHQoaUgpLHR0KEdzKSx0dChJcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt'@;
put 'c2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKHQxKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksZHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7cG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19'@;
put 'LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJzaWducG9zdC1hY3Rp'@;
put 'b24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJkaXYiLDEpLG1lKDIsImRpdiIsMikoMywiYnV0dG9uIiwz'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLHF0KDQsImNkcy1pY29uIiw0KSx5ZSgpKCksbWUoNSwiZGl2Iiw1KSxrcig2KSx5ZSgpKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJp'@;
put 'YS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxnQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25z'@;
put 'KG5iLE9LKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHE1XSxzZF19KSxjfSkoKSxBSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWN9KSxjfSkoKSxUSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl'@;
put 'cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo'@;
put 'KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'YXIoS3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt0aShbS3Mse3Byb3ZpZGU6STgsdXNlRXhpc3Rpbmc6Tml9LEFILFRIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKEFpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCB2Q2U9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sX0NlPVsieHMiLCJzbSIsIm1k'@;
put 'IiwibGciXTtsZXQgemI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJIe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRTZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50'@;
put 'IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPUxjKCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlv'@;
put 'bigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPXZDZS5pbmNsdWRlcyhhKT9hOiJyaWdodCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3'@;
put 'Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuVE9QX0NFTlRFUix0aGlzLnBv'@;
put 'cG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUdyLkJPVFRP'@;
put 'TV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1Hci5MRUZUX0NF'@;
put 'TlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gbUNlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhp'@;
put 'cy5fc2l6ZSxoPV9DZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRp'@;
put 'b249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Mo'@;
put 'e29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKSh0dChFYSksdHQoSTgsOCksdHQoQUgpLHR0KFRIKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZWVudGVyIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJih0MSgiaWQiLGQuaWQpLFRyKCJyb2xlIiwidG9vbHRpcCIpLEh1KCJvcGFjaXR5IiwxKSxkcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxp'@;
put 'bnB1dHM6e2lkOiJpZCIscG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoQWkoKSxrcigw'@;
put 'KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1kLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0'@;
put 'aGlzLnRvb2x0aXBJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRp'@;
put 'cCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KEFIKSx0dChUSCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhv'@;
put 'c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVy'@;
put 'KCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKFRyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxkcigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLGJDZT0oKCk9Pntj'@;
put 'bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dLHNkLHNhXX0pLGN9KSgpLHlDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOlt5SCxnQ2UsYkNlXX0pLGN9KSgpLHdDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpLFNDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMod21lLENtZSxQSyxTbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsQWJdLHNhLEFiXX0pLGN9KSgpLEFDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoUEspfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sJFEsVlFdXX0pLGN9KSgpLF91PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3'@;
put 'NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1V3ZSxPd2Usc2EsJFEsSUYsc2QseUUscTUsZ3llLHl5ZSxoUSxoQ2UseUNlLEFDZSxxSixyeWUsQWIsd0NlLHhiLFNDZV19KSxjfSkoKTtmdW5jdGlvbiBUQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMCksTmUo'@;
put 'MSwibG9hZGluZyIpLHllKCkpfWZ1bmN0aW9uIERDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDExKSxOZSgxLCJsb2FkZWQiKSx5ZSgpKX1mdW5jdGlvbiBMQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMiksTmUoMSwiZmFpbGVkIikseWUoKSl9ZnVuY3Rpb24gSUNlKGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwicCIpKDEsImNvZGUiKSxOZSgyKSx5ZSgpLE5lKDMsIiBceGEwICIpLEplKDQsVENlLDIsMCwic3BhbiIsNyksSmUoNSxEQ2UsMiwwLCJzcGFuIiw4KSxKZSg2LExDZSwyLDAsInNwYW4iLDkpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnByb2dy'@;
put 'YW0pLENlKDIpLFJlKCJuZ0lmIixhLnJ1bm5pbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24gUkNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXNpZ25wb3N0LWNv'@;
put 'bnRlbnQiLDUpLEplKDEsSUNlLDcsNCwicCIsNikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IE9DZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2Fk'@;
put 'aW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt'@;
put 'cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2Ui'@;
put 'XSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4i'@;
put 'XSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxxdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLEplKDUsUkNlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLHllKCkoKSksMiZhJiYoQ2Uo'@;
put 'MiksSHUoImRpc3BsYXkiLGQubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLENlKDEpLEh1KCJkaXNwbGF5IiwhZC5sb2FkaW5nJiZkLnJlcXVlc3RzLmxlbmd0aD4wJiZkLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxDZSgxKSxIdSgiZGlzcGxh'@;
put 'eSIsIWQubG9hZGluZyYmZC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWQucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxjMixzSCxxUSxSRV0sc3R5bGVzOlsiLmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICAuc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dmVydGljYWwtYWxpZ246bWlkZGxlfS5sb2Fk'@;
put 'aW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2ln'@;
put 'bnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBv'@;
put 'c3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25n'@;
put 'Y29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0l'@;
put 'Q09NUCVde21hcmdpbi1sZWZ0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5ydW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv'@;
put 'cjojZTliZjA0fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYwYjUxNX0ubG9h'@;
put 'ZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmZhaWxbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjOTIxMDB9Il19KSxjfSkoKSxQQ2U9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgZWUsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5p'@;
put 'dCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVy'@;
put 'eVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8'@;
put 'KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29y'@;
put 'ZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KSh0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NB'@;
put 'U0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIsImFsdCIsIiIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEs'@;
put 'ImxvZ2luLWdyb3VwIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFz'@;
put 'c3dvcmQiLCJwbGFjZWhvbGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0'@;
put 'ZW0iXSxbMSwiYWxlcnQtdGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEp'@;
put 'LHF0KDIsImltZyIsMiksbWUoMywiZm9ybSIsMykseHQoIm5nU3VibWl0IixmdW5jdGlvbigpe3JldHVybiBkLnN1Ym1pdCgpfSksbWUoNCwibGFiZWwiLDQpKDUsImgzIiw1KSxOZSg2LCJXZWxjb21lIHRvIikseWUoKSxOZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLG1lKDgsImg1Iiw2KSxO'@;
put 'ZSg5LCJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIikseWUoKSgpLG1lKDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRhdGEudXNlcj1mfSkseWUoKSxtZSgxMiwiaW5wdXQiLDkpLHh0KCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhLnBhc3M9Zn0pLHllKCksbWUoMTMsImNsci1hbGVydCIsMTApLHh0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYWxlcnRDbG9zZWQ9Zn0pLG1lKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLE5lKDE2KSx5'@;
put 'ZSgpKCkoKSxtZSgxNywiYnV0dG9uIiwxMyksTmUoMTgsIiBMb2cgaW4gIikseWUoKSgpKCkoKSxxdCgxOSwiZGl2IiwxNCkseWUoKSksMiZhJiYoZHIoImFjdGl2ZSIsZC5pc0FjdGl2ZSksQ2UoMTEpLFJlKCJuZ01vZGVsIixkLmRhdGEudXNlciksQ2UoMSksUmUoIm5nTW9kZWwiLGQuZGF0'@;
put 'YS5wYXNzKSxDZSgxKSxSZSgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIikoImNsckFsZXJ0Q2xvc2VkIixkLmFsZXJ0Q2xvc2VkKSxDZSgzKSxvcihkLmVycm9yTXNnKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsZC5sb2FkaW5nKSgiZGlzYWJsZWQiLGQubG9hZGluZykpfSxkZXBlbmRl'@;
put 'bmNpZXM6W0NwLFdhLEJzLHdwLE9zLHIyLEhiLE5iLFp1LGRoLFVzLGYxXSxzdHlsZXM6WyIuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBo'@;
put 'Mltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVd'@;
put 'e2JvcmRlci1jb2xvcjp3aGVhdCFpbXBvcnRhbnR9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7'@;
put 'cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOmF1dG99LmxvZ2luLXNpZGViYXItd3Jh'@;
put 'cHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0'@;
put 'MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0l'@;
put 'Q09NUCVde3otaW5kZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9n'@;
put 'aW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MzZweH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWxjb21lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfS5sb2dpbi1zaWRl'@;
put 'YmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVdID4gKltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjZw'@;
put 'eCAwIDE4cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xl'@;
put 'ZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6cmdiYSgzMywzMywzMywuNSk7ei1pbmRleDoxMDB9ICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLCAgIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdy'@;
put 'b3VwIC51c2VybmFtZSwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0gIC5sb2dpbi1zaWRlYmFyLXdy'@;
put 'YXBwZXIgLmxvZ2luLWdyb3VwIGJ1dHRvbnttYXgtd2lkdGg6bm9uZX0ubG9naW4tbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjIwMHB4fSJdfSksY30pKCk7ZnVuY3Rpb24gRkNlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLHF0KDEsImltZyIsMTkpLHllKCkpLDImYyl7'@;
put 'Y29uc3QgYT1WZSgpO0NlKDEpLEVjKCJzcmMiLGEuZ2V0UGljdHVyZVVybCgpLHJ2KX19ZnVuY3Rpb24gSENlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJoaWRkZW4iLDA9PT1hLmZhaWxlZFJlcXMubGVuZ3RoKSxDZSgx'@;
put 'KSxvcihhLmZhaWxlZFJlcXMubGVuZ3RoKX19ZnVuY3Rpb24gTkNlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMjEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJoaWRkZW4iLDA9PT1hLmRlYnVnTG9ncy5sZW5ndGgpLENlKDEpLG9yKGEuZGVidWdMb2dzLmxlbmd0aCl9'@;
put 'fWZ1bmN0aW9uIFZDZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIyKX1mdW5jdGlvbiBCQ2UoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJhIiwzMykoMiwic3BhbiIsMzQpLE5lKDMsIkRvY3VtZW50YXRpb24iKSx5ZSgpKCksenIoKSl9ZnVuY3Rpb24gakNlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSgxLCJkaXYiLDI0LDI1KSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj0kaSgyKTtyZXR1cm4ganQoVmUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxt'@;
put 'ZSg0LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5zYXNqc0NvbmZpZy5kZWJ1Zz1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9u'@;
put 'RGVidWdNb2RlQ2hhbmdlKCkpfSkseWUoKSxtZSg2LCJsYWJlbCIpLE5lKDcsIkRlYnVnIE1vZGUiKSx5ZSgpKCkoKSgpLG1lKDgsImEiLDI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxtZSg5LCJzcGFuIiksTmUo'@;
put 'MTAsIlNBUyBSZXF1ZXN0cyIpLHllKCkoKSxKZSgxMSxCQ2UsNCwwLCJuZy1jb250YWluZXIiLDIpLHF0KDEyLCJkaXYiLDE1KSxtZSgxMywiYSIsMjkpKDE0LCJzcGFuIiksTmUoMTUsIlN5c3RlbSIpLHllKCkoKSxtZSgxNiwiYSIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'IEJ0KGEpLGp0KFZlKCkubG9nb3V0KGgpKX0pLG1lKDE3LCJzcGFuIiksTmUoMTgsIkxvZyBPdXQiKSx5ZSgpLHF0KDE5LCJjbHItaWNvbiIsMzEpLHllKCksbWUoMjAsImRpdiIsMzIpKDIxLCJzcGFuIiksTmUoMjIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDUpLFJlKCJu'@;
put 'Z01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxDZSg2KSxSZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxDZSgxMSksZ3IoInYiLGEuY29tbWl0VmVyLCIiKX19Y29uc3QgekNlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQgVUNlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgZWUsdGhpcy51c2VyU3ViPW5ldyBlZSx0aGlzLmFwcExv'@;
put 'Z3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIifW5nT25Jbml0KCl7dGhp'@;
put 'cy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ni43LjAiLnJlcGxhY2UoInYiLCIiKSsiLmc5NjA2NmM2In1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlz'@;
put 'LmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKGEpe3RoaXMuc2FzanNDb25maWcmJnRoaXMuc2FzU2VydmljZS5zZXREZWJ1Z1N0YXRlKHRoaXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhhLGQpe2Euc3RvcFByb3BhZ2F0aW9u'@;
put 'KCksc2V0VGltZW91dCgoKT0+e2QuY2xpY2soKX0sMzAwKX1sb2dvdXQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RyeXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9Y2F0Y2goZCl7Y29uc29sZS5lcnJvcihkKX19Z2V0UGljdHVyZVVybCgpe3JldHVybmAke3RoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzLyR7dGhpcy51c2VyTmFtZX0vYXZhdGFyL2NvbnRlbnRgfWdldCBpc0RlcGxveVBhZ2UoKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykodHQoYVApLHR0KG9hKSx0dCh2bCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXItbmF2LWRyb3Bkb3duIl1dLGRlY2xzOjMyLHZhcnM6MTAsY29uc3RzOltbMSwiYXBwLW5hdi1kcm9wZG93biIsImQtbWQtYmxvY2siXSxbImNsckRyb3Bk'@;
put 'b3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9yLXdoaXRlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNh'@;
put 'cmV0IGRvd24iLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiY29udGVudC1jb250YWluZXIiLCJoLWF1dG8iXSxbMSwic2lkZW5hdiIsImQtYmxvY2siLCJkLW1kLW5vbmUiLDMsImNsci1uYXYtbGV2ZWwiXSxbMSwic2lkZW5hdi1j'@;
put 'b250ZW50Il0sWyJocmVmIiwiLi4uIiwxLCJuYXYtbGluayIsImFjdGl2ZSJdLFsxLCJ0b2dnbGUtc3dpdGNoIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbImZvciIsImRlYnVn'@;
put 'LXRvZ2dsZTIiLDEsImRlYnVnLXRvZ2dsZS1sYWJlbCIsImNvbG9yLWRhcmstZ3JheSJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsMSwibmF2LWxpbmsiLCJkLWJsb2NrIl0sWzEsInNlcGFyYXRvciJdLFsicm91dGVyTGluayIs'@;
put 'Ii9zeXN0ZW0iLDEsIm5hdi1saW5rIiwiZC1ibG9jayJdLFsic2hhcGUiLCJsb2dvdXQiXSxbImhyZWYiLCIuLi4iLDEsIm5hdi1saW5rIiwiZC1ibG9jayIsMywiY2xpY2siXSxbImFsdCIsIiIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEs'@;
put 'ImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsiZHJvcGRvd25JdGVtRGVidWciLCIiXSxbMSwidG9nZ2xlLXN3aXRjaCIs'@;
put 'MywiY2xpY2siXSxbImlkIiwiZGVidWctdG9nZ2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwiL3N5c3RlbSIs'@;
put 'ImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29u'@;
put 'dHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRyb3Bkb3duIiwwKSgxLCJidXR0b24iLDEpKDIsInNwYW4iKSxOZSgzKSx5ZSgpLEplKDQsRkNlLDIsMSwic3BhbiIsMiks'@;
put 'SmUoNSxIQ2UsMiwzLCJzcGFuIiwzKSxKZSg2LE5DZSwyLDMsInNwYW4iLDQpLEplKDcsVkNlLDEsMCwiY2xyLWljb24iLDUpLHllKCksSmUoOCxqQ2UsMjMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDYpLHllKCksbWUoOSwiZGl2Iiw3KSgxMCwibmF2Iiw4KSgxMSwic2VjdGlvbiIsOSkoMTIs'@;
put 'ImEiLDEwKSxOZSgxMykseWUoKSxtZSgxNCwiZGl2IikoMTUsImZvcm0iKSgxNiwiZGl2IiwxMSkoMTcsImlucHV0IiwxMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNhc2pzQ29uZmlnLmRlYnVnPWZ9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZC5vbkRlYnVnTW9kZUNoYW5nZSgpfSkseWUoKSxtZSgxOCwibGFiZWwiLDEzKSxOZSgxOSwiRGVidWcgTW9kZSIpLHllKCkoKSgpKCksbWUoMjAsImEiLDE0KSgyMSwic3BhbiIpLE5lKDIyLCJEb2N1bWVudGF0aW9uIikseWUoKSgpLHF0KDIzLCJkaXYiLDE1KSxtZSgyNCwiYSIsMTYp'@;
put 'KDI1LCJzcGFuIiksTmUoMjYsIlN5c3RlbSIpLHllKCkscXQoMjcsImNsci1pY29uIiwxNykseWUoKSxtZSgyOCwiYSIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQubG9nb3V0KGYpfSksbWUoMjksInNwYW4iKSxOZSgzMCwiTG9nIE91dCIpLHllKCkscXQoMzEsImNsci1p'@;
put 'Y29uIiwxNykseWUoKSgpKCkoKSksMiZhJiYoQ2UoMyksb3IoZC51c2VyTmFtZSksQ2UoMSksUmUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWQudXNlck5hbWUmJmQuaXNWaXlhKSxDZSgxKSxSZSgibmdJZiIsIWQuc2FzanNDb25maWcuZGVidWcpLENlKDEpLFJlKCJuZ0lmIixkLnNhc2pz'@;
put 'Q29uZmlnLmRlYnVnKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNWaXlhKSxDZSgzKSxSZSgiY2xyLW5hdi1sZXZlbCIsMiksQ2UoMyksZ3IoIiAiLGQudXNlck5hbWUsIiAiKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5zYXNqc0NvbmZpZy5kZWJ1ZykoIm5nTW9kZWxPcHRpb25zIiwkcyg5LHpDZSkp'@;
put 'KX0sZGVwZW5kZW5jaWVzOltaaSxDcCxTMCxCcyx3cCxPcyxyMixCdSxrYSxjMixVcyxEMCxEOCxUMCxVUSxOZixhZyxsZyxLOF0sc3R5bGVzOlsnLmNvcHlSaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVdICAgc3Bh'@;
put 'bltfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjE1cHg7'@;
put 'bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEw'@;
put 'cHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYmFkZ2UuaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZXBhcmF0'@;
put 'b3JbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVu'@;
put 'dVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmRyb3Bkb3duLXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTZ9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1l'@;
put 'bnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTVweDtyaWdodDoyNnB4O21hcmdpbi1yaWdodDowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3du'@;
put 'LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYXBwLW5hdi1kcm9w'@;
put 'ZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWxvZ291dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MjBweDt0b3A6'@;
put 'MTVweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAw'@;
put 'JX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hlaWdodDox'@;
put 'MDAlO3BhZGRpbmc6MTBweCAyMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXR7aW5zZXQ6MDt3aWR0aDoxMDAlO2hl'@;
put 'aWdodDoxMDAlO2N1cnNvcjpwb2ludGVyfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10b2dnbGUtd3JhcHBlciBpbnB1'@;
put 'dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcnt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5kZWJ1Zy10b2dnbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDo0MnB4fUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnNpZGVuYXYtY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBhLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX0ubmF2LWxpbmsuZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtw'@;
put 'b3NpdGlvbjphYnNvbHV0ZX0uYXZhdGFyLWltZ1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0nXX0pLGN9KSgpO2Z1bmN0aW9uIFpDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNs'@;
put 'ci1hbGVydCIsMikseHQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmNsb3NlZD1oKX0pKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25BbGVydENsb3NlKCkpfSksbWUo'@;
put 'MSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxOZSgzKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLENlKDMpLGdyKCIgIixhLm1lc3NhZ2Us'@;
put 'IiAiKX19ZnVuY3Rpb24gWUNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWFsZXJ0cyIpLEplKDEsWkNlLDQsNCwiY2xyLWFsZXJ0IiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgV0NlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBlZX1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMu'@;
put 'cHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKHR0KGxQKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENs'@;
put 'b3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmSmUoMCxZQ2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmEmJlJlKCJuZ0lmIixkLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbeHMsWmksSGIsTlEsTmJdLHN0eWxlczpbImNsci1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxq'@;
put 'RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPSIifW5nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0'@;
put 'czp7Y2xhc3NlczoiY2xhc3NlcyJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYSIsMCksTmUoMSwi'@;
put 'c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHllKCkpLDImYSYmKGRyKCJ1bnNldCIsIiIhPT1kLmNsYXNzZXMpLFJlKCJuZ0NsYXNzIixkLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOltkY10sc3R5bGVzOlsiLnVuc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp1bnNldH0iXX0pLGN9'@;
put 'KSgpLFliPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IEVyLHRoaXMuZmlsZURyYWdnZWRPdmVyPW5ldyBFcn1vbkRyYWdPdmVyKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29u'@;
put 'dGFpbnNGaWxlcyhhKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9b25EcmFnTGVhdmUoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoYSl7YS5wcmV2'@;
put 'ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2QubGVuZ3RoPjAmJnRoaXMuZmlsZURyb3BwZWQuZW1pdChkKX1jb250YWluc0ZpbGVzKGEpe2lmKGEmJmEuZGF0YVRyYW5zZmVyJiZhLmRhdGFUcmFu'@;
put 'c2Zlci50eXBlcylmb3IobGV0IGQ9MDtkPGEuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtkKyspaWYoIkZpbGVzIj09YS5kYXRhVHJhbnNmZXIudHlwZXNbZF0pcmV0dXJuITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBEcmFnTmRyb3AiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcmFnb3ZlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EcmFnT3ZlcihmKX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLm9uRHJhZ0xlYXZlKGYpfSkoImRyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uZHJvcChmKX0pLDImYSYmZHIoImZpbGVvdmVyIixkLmZpbGVPdmVyKX0sb3V0cHV0czp7ZmlsZURyb3BwZWQ6ImZpbGVEcm9wcGVkIixmaWxlRHJhZ2dlZE92ZXI6ImZpbGVEcmFnZ2VkT3ZlciJ9'@;
put 'fSksY30pKCk7ZnVuY3Rpb24gR0NlKGMsbCl7MSZjJiYobWUoMCwicCIsNiksTmUoMSwiTm8gcmVxdWVzdHMgbWFkZSIpLHllKCkpfWZ1bmN0aW9uICRDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTMpLHllKCkpfWZ1bmN0aW9uIHFDZShjLGwpezEmYyYmKG1l'@;
put 'KDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTQpLHllKCkpfWZ1bmN0aW9uIEtDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgzKS5pbmRleDtyZXR1'@;
put 'cm4ganQoVmUoMikuZ29Ub0xvZ0xpbmUoZiwicmVxdWVzdF8iK18sImVycm9yIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxncigiICIsYSwiICIpfX1jb25zdCBkZWU9ZnVuY3Rpb24oKXtyZXR1cm5bXX07ZnVu'@;
put 'Y3Rpb24gWENlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHF0KDEsImNsci1pY29uIiwxOSksTmUoMiksSmUoMyxLQ2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxncigiIEVycm9ycyAoIixh'@;
put 'LmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHwkcygyLGRlZSkpfX1mdW5jdGlvbiBKQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQo'@;
put 'YSkuJGltcGxpY2l0LF89VmUoMykuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLmdvVG9Mb2dMaW5lKGYsInJlcXVlc3RfIitfLCJ3YXJuaW5nIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxncigiICIsYSwiICIpfX1m'@;
put 'dW5jdGlvbiBRQ2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiwxOCkscXQoMSwiY2xyLWljb24iLDIzKSxOZSgyKSxKZSgzLEpDZSwzLDEsImNsci10cmVlLW5vZGUiLDIwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDIpLGdyKCIgV2FybmluZ3Mg'@;
put 'KCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nV2FybmluZ3N8fCRzKDIsZGVlKSl9fWZ1bmN0aW9uIGVTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93bmxvYWRMb2coaC5sb2dGaWxlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gdFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxKZSgyLFhDZSw0LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDE1KSxKZSgzLFFDZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSx5ZSgpLHF0KDQsImRpdiIsMTYpLEplKDUsZVNlLDIsMCwiYnV0dG9uIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ0lmIixhLmxvZ0Vycm9ycyksQ2Uo'@;
put 'MSksUmUoIm5nSWYiLGEubG9nV2FybmluZ3MpLENlKDEpLFJlKCJpbm5lckhUTUwiLGEubG9nRmlsZSxxMiksQ2UoMSksUmUoIm5nSWYiLChudWxsPT1hLmxvZ0ZpbGU/bnVsbDphLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gblNlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiYnV0dG9uIiwyNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaC5zb3VyY2VDb2RlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gclNlKGMsbCl7aWYo'@;
put 'MSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyNSksTmUoMikseWUoKSxKZSgzLG5TZSwyLDAsImJ1dHRvbiIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLnNvdXJjZUNvZGUpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5zb3Vy'@;
put 'Y2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIGlTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93'@;
put 'bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIG9TZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLE5lKDIpLHllKCksSmUoMyxpU2UsMiwwLCJidXR0b24iLDE3KSx5'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksZ3IoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHNTZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9Zi5rZXkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZHIo'@;
put 'InNlbGVjdGVkIixWZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxDZSgxKSxncigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gYVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxKZSgxLHNTZSwyLDMsImRpdiIsMzApLGJhKDIsImtleXZhbHVl'@;
put 'IikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsWmwoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBsU2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwzNSkoMSwic3Ryb25nIiksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMykuJGlt'@;
put 'cGxpY2l0O0NlKDIpLGdyKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gY1NlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9u'@;
put 'IHVTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGRbYS5rZXldLCIgIil9fWZ1bmN0aW9uIGRTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiksSmUoMSx1U2UsMiwxLCJ0'@;
put 'ZCIsMzcpLGJhKDIsImtleXZhbHVlIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsWmwoMiwxLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIGhTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRh'@;
put 'YmxlIiwzNikoMSwidGhlYWQiKSgyLCJ0ciIpLEplKDMsY1NlLDIsMSwidGgiLDM3KSxiYSg0LCJrZXl2YWx1ZSIpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLEplKDYsZFNlLDMsMywidHIiLDM3KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKS4kaW1wbGljaXQ7Q2UoMyksUmUoIm5nRm9yT2Yi'@;
put 'LFpsKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLENlKDMpLFJlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93cyl9fWZ1bmN0aW9uIGZTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpLEpl'@;
put 'KDEsbFNlLDMsMSwicCIsMzIpLG1lKDIsImRpdiIsMzMpLEplKDMsaFNlLDcsNCwidGFibGUiLDM0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1'@;
put 'bmN0aW9uIHBTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI2KSgyLCJidXR0b24iLDI3KSxOZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLHF0KDQsImNsci1pY29uIiwyOCkseWUoKSxKZSg1LGFTZSwzLDMsImNsci1kcm9wZG93'@;
put 'bi1tZW51IiwyOSkseWUoKSxKZSg2LGZTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykudGFibGVzQWN0aXZlPWgpfSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoImNsckNs'@;
put 'b3NlTWVudU9uSXRlbUNsaWNrIiwhMCksQ2UoNSksUmUoImNscklmQWN0aXZlIixhLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIGdTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1zdGFjay1ibG9jayIsOCkoMSwiY2xyLXN0YWNrLWxhYmVsIiksTmUoMiksbWUoMywic3Bh'@;
put 'biIsOSksSmUoNCwkQ2UsMiwwLCJzcGFuIiw1KSxKZSg1LHFDZSwyLDAsInNwYW4iLDUpLHllKCkoKSxtZSg2LCJjbHItc3RhY2stY29udGVudCIpLE5lKDcpLHllKCksbWUoOCwiY2xyLXN0YWNrLWJsb2NrIiwxMCkoOSwiY2xyLXN0YWNrLWNvbnRlbnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwi'@;
put 'Y2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxOZSgxMywiU0FTIExvZyIpLHllKCksSmUoMTQsdFNlLDYsNCwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5zYXNMb2dBY3RpdmU9aCl9KSx5ZSgpLG1lKDE1'@;
put 'LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLE5lKDE3LCJTQVMgU291cmNlIENvZGUiKSx5ZSgpLEplKDE4LHJTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc2FzU291cmNlQ29kZUFjdGl2'@;
put 'ZT1oKX0pLHllKCksbWUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksTmUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLHllKCksSmUoMjIsb1NlLDQsMiwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgy'@;
put 'KS5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpfSkseWUoKSxKZSgyMyxwU2UsNywyLCJjbHItdGFiIiw1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKTtSZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSgi'@;
put 'Y2xyU3RhY2tWaWV3U2V0c2l6ZSIsMykoImNsclN0YWNrVmlld1Bvc2luc2V0IiwzKSxDZSgyKSxncigiICIsYS5zZXJ2aWNlTGluaywiICIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIs'@;
put 'KG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxDZSgyKSxvcihhLnBhcnNlZFRpbWVzdGFtcCksQ2UoNyksUmUoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksQ2UoNCksUmUoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLENlKDQp'@;
put 'LFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxDZSgxKSxSZSgibmdJZiIsYS5TQVNXT1JLKX19ZnVuY3Rpb24gbVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXN0YWNrLXZpZXciKSxKZSgxLGdTZSwyNCwxMiwiY2xyLXN0YWNrLWJsb2NrIiw3KSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5zYXNqc1JlcXVlc3RzKX19bGV0IHZTZT0oKCk9PntjbGFzcyBje2dldCBvcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfXNldCBvcGVuZWQoYSl7dGhpcy5fb3BlbmVkPWEsYSYmdGhpcy5tb2RhbE9wZW5lZCgpLHRoaXMu'@;
put 'bG9nZ2VyU2VydmljZS5sb2codGhpcy5zYXNqc1JlcXVlc3RzKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBFcix0aGlzLnNh'@;
put 'c0xvZ0FjdGl2ZT0hMCx0aGlzLnNhc1NvdXJjZUNvZGVBY3RpdmU9ITEsdGhpcy5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPSExLHRoaXMudGFibGVzQWN0aXZlPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zYXNqc1JlcXVlc3RzPVtd'@;
put 'fW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0'@;
put 'VGltZXN0YW1wKGEpe3JldHVybiBLbyhhKS5mb3JtYXQoKT9LbyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBLbyhhKS5mb3JtYXQoKT9gICgke0tvKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFu'@;
put 'Z2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VF'@;
put 'cnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtsZXQgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9y'@;
put 'QWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKSxfPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtmb3IobGV0IFQgb2YgZilULnRleHRDb250ZW50LmluY2x1ZGVzKGEpJiYoXy5zY3JvbGxUb3A9VC5vZmZzZXRUb3AtXy5vZmZz'@;
put 'ZXRUb3AsVC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiM2MWEyMjAyYiIsc2V0VGltZW91dCgoKT0+e1Quc3R5bGU9IiJ9LDNlMykpfXBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoIWF8fCFhLmxvZ0ZpbGV8fCJzdHJpbmciIT10'@;
put 'eXBlb2YgYS5sb2dGaWxlfHx2b2lkIDAhPT1hLmxvZ0Vycm9yc3x8dm9pZCAwIT09YS5sb2dXYXJuaW5ncylyZXR1cm47bGV0IGg9W10sZj1bXSxfPWEubG9nRmlsZS5zcGxpdCgiXG4iKTtmb3IobGV0IFQ9MDtUPF8ubGVuZ3RoO1QrKyl7aWYoLzwuKj5FUlJPUi9nbS50ZXN0KF9bVF0pKXts'@;
put 'ZXQgVz1fW1RdLnN1YnN0cmluZyhfW1RdLmluZGV4T2YoIkUiKSxfW1RdLmxlbmd0aC0xKTtoLnB1c2goVyl9ZWxzZS9eRVJST1IvZ20udGVzdChfW1RdKSYmKGgucHVzaChfW1RdKSxfW1RdPSI8Zm9udD4iK19bVF0rIjwvZm9udD4iKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdChfW1RdKSl7'@;
put 'bGV0IFc9X1tUXS5zdWJzdHJpbmcoX1tUXS5pbmRleE9mKCJXIiksX1tUXS5sZW5ndGgtMSk7Zi5wdXNoKFcpfWVsc2UvXldBUk5JTkcvZ20udGVzdChfW1RdKSYmKGYucHVzaChfW1RdKSxfW1RdPSI8Zm9udD4iK19bVF0rIjwvZm9udD4iKX1kLmxvZ2dlclNlcnZpY2UubG9nKGYpLGEubG9n'@;
put 'RmlsZT1fLmpvaW4oIlxuIiksYS5sb2dFcnJvcnM9aCxhLmxvZ1dhcm5pbmdzPWZ9KSgpfWRvd25sb2FkTG9nKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGxvZ0ZpbGUtJHtkfWAsYSl9ZG93bmxvYWRTb3VyY2VD'@;
put 'b2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHNvdXJjZUNvZGUtJHtkfWAsYSl9ZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNl'@;
put 'LmRvd25sb2FkVGV4dEZpbGUoYGdlbmVyYXRlZENvZGUtJHtkfWAsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dCh3MCksdHQoVGMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJlcXVlc3RzLW1v'@;
put 'ZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNo'@;
put 'YW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIsImNsclN0YWNrVmlld0xldmVsIiwiY2xy'@;
put 'U3RhY2tWaWV3U2V0c2l6ZSIsImNsclN0YWNrVmlld1Bvc2luc2V0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsImNsclN0YWNrVmlld1NldHNpemUiLCJjbHJTdGFja1ZpZXdQb3NpbnNldCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJj'@;
put 'bHJUYWJMaW5rIiwiIl0sWzMsImNscklmQWN0aXZlIiwiY2xySWZBY3RpdmVDaGFuZ2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNs'@;
put 'YXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9u'@;
put 'LXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4i'@;
put 'LCJidG4tbGluayIsMywiY2xpY2siXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmstdGFibGVzLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwi'@;
put 'Y2xySWZPcGVuIl0sWyJjbGFzcyIsImRyb3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0x'@;
put 'MCIsNCwibmdJZiJdLFsxLCJtaW4taC01MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEsIm10LTEwIl0sWzEsInRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiww'@;
put 'KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5tb2RhbE9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxtZSgzLCJwIiwyKSxOZSg0KSx5ZSgpKCksbWUoNSwiZGl2IiwzKSxKZSg2LEdDZSwyLDAsInAiLDQp'@;
put 'LEplKDcsbVNlLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLHllKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuZWQpLENlKDQpLGdyKCJBcHAgTG9jYXRpb246ICIsZC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09ZC5zYXNqc1JlcXVlc3Rz'@;
put 'P251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksQ2UoMSksUmUoIm5nSWYiLGQub3BlbmVkJiYobnVsbD09ZC5zYXNqc1JlcXVlc3RzP251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHE4LEVRLG1ILHhRLGRkLGcxLERwLGthLG91LHN1'@;
put 'LEU4LGMyLElwLE9wLGRnLFJwLExwLGNnLE5mLGFnLGxnLEs4LGR4XSxzdHlsZXM6WyIucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9ICAucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4'@;
put 'IDEwcHggNXB4fSAgLndvcmstdGFibGVzLWRyb3Bkb3duIGJ1dHRvbntjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstY29sb3IsICM4YzhjOGMpIWltcG9ydGFudH0gIC5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFz'@;
put 'ay1pbWFnZTpub25lIWltcG9ydGFudH0gIC5jb250ZW50IGNsci1pY29ue21hcmdpbi1ib3R0b206NXB4fSAgLmNvbnRlbnQgcHJle3dvcmQtYnJlYWs6YnJlYWstYWxsO3doaXRlLXNwYWNlOnByZS13cmFwO21heC1oZWlnaHQ6aW5pdGlhbDtvdmVyZmxvdzp2aXNpYmxlO2JvcmRlcjowfSAg'@;
put 'LmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0gIC5lcnItbGlua3MgLmNsci10cmVlbm9kZS1j'@;
put 'aGlsZHJlbnttYXgtaGVpZ2h0OjU1cHg7b3ZlcmZsb3c6YXV0b30uZHJvcGRvd24taXRlbS5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJn'@;
put 'aW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5uby1yZXFzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9w'@;
put 'OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKTtwYWRkaW5nLXRvcDo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KSxjfSkoKTtjbGFzcyBfU2V7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBoZWV9fWNs'@;
put 'YXNzIGhlZXt9ZnVuY3Rpb24gYlNlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsOCksTmUoMSwiIFNBUyBTZXJ2aWNlOiAiKSxtZSgyLCJzdHJvbmciKSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24geVNlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksTmUoMywiU1lTV0FSTklOR1RFWFQ6IikseWUoKSxOZSg0KSx5ZSgpLG1lKDUsInAiKSg2LCJzdHJvbmciKSxOZSg3LCJTWVNFUlJPUlRFWFQ6IikseWUoKSxOZSg4KSx5ZSgpLG1lKDksInAiKSgxMCwic3Ryb25nIiks'@;
put 'TmUoMTEsIk1BQzoiKSx5ZSgpLE5lKDEyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLGdyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksQ2UoNCksZ3IoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksQ2UoNCksZ3IoIiAiLGEuZGF0YS5k'@;
put 'ZXRhaWxzLk1BQywiIil9fWZ1bmN0aW9uIHdTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksTmUoMSwiIE9wZW4gY29uZmlndXJhdG9yICIp'@;
put 'LHllKCl9fWZ1bmN0aW9uIENTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLE5lKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLHllKCl9'@;
put 'fWZ1bmN0aW9uIFNTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5kb3dubG9hZExvZygpKX0pLE5lKDEsIiBEb3dubG9hZCBsb2cgIikseWUoKX19ZnVuY3Rpb24gTVNlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNsb3NlQWJvcnRNb2RhbCgpKX0pLE5lKDEsIiBDbG9zZSAiKSx5ZSgpfX1mdW5jdGlvbiB4U2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt'@;
put 'ZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucmVsb2FkKCkpfSksTmUoMSwiIFJlbG9hZCAiKSx5ZSgpfX1sZXQgRVNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5l'@;
put 'dmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcgRXIsdGhpcy5kYXRhPW5ldyBfU2UsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxl'@;
put 'OiJBYm9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGwsbWVzc2FnZToiIixkZXRhaWxzOm5ldyBoZWV9fW5nT25Jbml0KCl7bGV0IGE9ey4uLnRoaXMuZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9YX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGEpe2NvbnN0IGQ9dGhpcy5z'@;
put 'YXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGE/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZkLnNlcnZlclR5cGU9PT1aYy5ELlNhczl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5l'@;
put 'dmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5jbG9zZUFib3J0TW9kYWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNl'@;
put 'fS1MT0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJFcnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFRjKSx0dCh2bCksdHQob2EpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7'@;
put 'b25Db25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9k'@;
put 'YWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiXSxbMSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5tb2RhbEVuYWJsZWQ9Zn0pLG1lKDEsImgzIiwxKSxOZSgyKSxKZSgzLGJTZSw0LDEsInAiLDIpLHllKCksbWUoNCwiZGl2IiwzKSxxdCg1LCJkaXYiLDQpLEplKDYseVNl'@;
put 'LDEzLDMsImRpdiIsNSkseWUoKSxtZSg3LCJkaXYiLDYpLEplKDgsd1NlLDIsMCwiYnV0dG9uIiw3KSxKZSg5LENTZSwyLDAsImJ1dHRvbiIsNyksSmUoMTAsU1NlLDIsMCwiYnV0dG9uIiw3KSxKZSgxMSxNU2UsMiwwLCJidXR0b24iLDcpLEplKDEyLHhTZSwyLDAsImJ1dHRvbiIsNykseWUo'@;
put 'KSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLm1vZGFsRW5hYmxlZCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFkLmZvcmNlUmVsb2FkKSxDZSgyKSxncigiICIsZC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsZC5kYXRhLnNhc1Nl'@;
put 'cnZpY2UmJmQuZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxDZSgyKSxSZSgiaW5uZXJIVE1MIixkLmRhdGEubWVzc2FnZSxxMiksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1kLmRhdGEuZGV0YWlscyksQ2UoMiksUmUoIm5nSWYiLGQuc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihkLmRhdGEuc2Fz'@;
put 'U2VydmljZSkpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09ZC5kYXRhLmRldGFpbHMpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09ZC5kYXRhLmRldGFpbHM/bnVsbDpkLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09ZC5kYXRhLmRldGFpbHN8fG51bGw9PWQuZGF0YS5kZXRhaWxzLkxPRz9udWxs'@;
put 'OmQuZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIsIWQuZm9yY2VSZWxvYWQpLENlKDEpLFJlKCJuZ0lmIixkLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbWmksb3Usc3UsWWJdLHN0eWxlczpbIi5jbHItYWJvcnQtbW9kYWxbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgICAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWx7ei1pbmRleDoyMDUwfS5tb2RhbC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnNhc1NlcnZp'@;
put 'Y2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7d29yZC13cmFwOmJyZWFrLXdv'@;
put 'cmR9Il19KSxjfSkoKTtmdW5jdGlvbiBrU2UoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVw'@;
put 'Z3JhZGUgY29udGFjdCAiKSxxdCg3LCJjb250YWN0LWxpbmsiLDI1KSx5ZSgpKCkoKSxtZSg4LCJhIiwyNiksTmUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSx6cigpKX1mdW5jdGlvbiBBU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJk'@;
put 'aXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLHllKCkoKSgpLG1lKDcsImEiLDI3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSksTmUoOCwiTW9yZSBkZXRhaWxzIikseWUoKSx6cigpfX1mdW5jdGlvbiBUU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE5KSxKZSgxLGtTZSwx'@;
put 'MCwwLCJuZy1jb250YWluZXIiLDEpLEplKDIsQVNlLDksMCwibmctY29udGFpbmVyIiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0u'@;
put 'dmFsdWUpfX1mdW5jdGlvbiBEU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwyNiksTmUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSl9ZnVuY3Rpb24gTFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xy'@;
put 'LWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYpLHF0KDcsImNvbnRhY3QtbGluayIsMjUpLE5lKDgpLHllKCkoKSgpLEplKDksRFNlLDIsMCwiYSIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg2KSx6YygiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4g'@;
put 'IixhLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLENlKDIpLGdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lz'@;
put 'c2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIElTZShjLGwpezEmYyYmKG1lKDAsImEiLDI2KSxOZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSx5ZSgpKX1mdW5jdGlvbiBSU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi'@;
put 'LDI4KSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4g'@;
put 'UGxlYXNlIGNvbnRhY3QgIikscXQoNywiY29udGFjdC1saW5rIiwyNSksTmUoOCkseWUoKSgpKCksSmUoOSxJU2UsMiwwLCJhIiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLGdyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Ig'@;
put 'c2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIE9TZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsVFNlLDMsMiwiZGl2IiwxNyksSmUoMixMU2UsMTAs'@;
put 'NCwiZGl2IiwxOCksSmUoMyxSU2UsMTAsMiwiZGl2IiwxOCksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxhLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLENlKDEpLFJlKCJuZ0lmIixhLmxp'@;
put 'Y2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxDZSgxKSxSZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBQU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkudG9nZ2xlU2lkZWJhcigpKX0pLHF0KDEsImNsci1pY29uIiwzMSkseWUoKX19Y29uc3QgRlNlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvIl19O2Z1bmN0aW9uIEhTZShjLGwpezEmYyYmKG1lKDAsImEiLDMyKSxxdCgxLCJpbWciLDMzKSgyLCJpbWciLDM0KSx5ZSgpKSwyJmMmJlJlKCJy'@;
put 'b3V0ZXJMaW5rIiwkcygxLEZTZSkpfWZ1bmN0aW9uIE5TZShjLGwpezEmYyYmKG1lKDAsImEiKSxxdCgxLCJzcGFuIiwzNSkseWUoKSl9Y29uc3QgZmVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldyJdfSxwZWU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9ob21lIl19LExIPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuWyIvcmV2aWV3L3N1Ym1pdHRlZCJdfTtmdW5jdGlvbiBWU2UoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDMpKDEsImEiLDQ0KSxOZSgyLCJWSUVXIikseWUoKSxtZSgzLCJhIiw0NCksTmUoNCwiTE9BRCIpLHllKCksbWUoNSwiYSIsNDQpLE5lKDYsIlJFVklFVyIp'@;
put 'LHllKCkoKSksMiZjJiYoQ2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDMsZmVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDQscGVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDUsTEgpKSl9ZnVuY3Rpb24gQlNlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiZGl2IiwzNikoMiwi'@;
put 'Y2xyLWRyb3Bkb3duIikoMywiYnV0dG9uIiwzNyksTmUoNCwiIE1lbnUgIikseWUoKSxKZSg1LFZTZSw3LDYsImNsci1kcm9wZG93bi1tZW51IiwzOCkseWUoKSgpLG1lKDYsImRpdiIsMzkpKDcsImEiLDQwKSxOZSg4LCJWSUVXIikseWUoKSxtZSg5LCJhIiw0MSksTmUoMTAsIkxPQUQiKSx5'@;
put 'ZSgpLG1lKDExLCJhIiw0MiksTmUoMTIsIlJFVklFVyIpLHllKCkoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg3KSxSZSgicm91dGVyTGluayIsJHMoNyxmZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXRvciIpfHxhLnJvdXRlci51cmwuaW5j'@;
put 'bHVkZXMoImVkaXQtcmVjb3JkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaG9tZSIpKSxSZSgicm91dGVyTGluayIsJHMoOCxwZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUi'@;
put 'KXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLFJlKCJyb3V0ZXJMaW5rIiwkcyg5LExIKSl9fWNvbnN0IGpTZT1mdW5jdGlvbigpe3JldHVyblsiL3Jldmlldy9hcHByb3ZlIl19LHpTZT1mdW5jdGlvbigpe3JldHVyblsiL3Jldmlldy9oaXN0b3J5Il19O2Z1bmN0aW9uIFVT'@;
put 'ZShjLGwpe2lmKDEmYyYmKG1lKDAsIm5hdiIsNDUpKDEsInVsIiw0NikoMiwibGkiLDQ3KSgzLCJhIiw0MCksTmUoNCwiU1VCTUlUIikseWUoKSgpLG1lKDUsImxpIiw0NykoNiwiYSIsNDApLE5lKDcsIkFQUFJPVkUiKSx5ZSgpKCksbWUoOCwibGkiLDQ3KSg5LCJhIiw0MCksTmUoMTAsIkhJ'@;
put 'U1RPUlkiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgicm91dGVyTGluayIsJHMoNSxMSCkpLENlKDMpLGRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpKSxSZSgicm91dGVyTGluayIsJHMoNixqU2UpKSxDZSgzKSxSZSgicm91dGVy'@;
put 'TGluayIsJHMoNyx6U2UpKX19ZnVuY3Rpb24gWlNlKGMsbCl7MSZjJiZxdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gWVNlKGMsbCl7MSZjJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9ZnVuY3Rpb24gV1NlKGMsbCl7MSZjJiZxdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gR1NlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLWluZm8tbW9kYWwiLDQ4KSx4dCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jbG9zZUFib3J0TW9kYWwoZi5pZCkpfSkseWUoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9bC4kaW1wbGljaXQsZD1WZSgpO1JlKCJkYXRhIixhKSgiZm9yY2VSZWxvYWQiLCFkLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ZC5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiAkU2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDUyKSxxdCgxLCJkaXYiLDUzKSgyLCJkaXYiLDU0KSgz'@;
put 'LCJkaXYiLDU1KSx5ZSgpKX1mdW5jdGlvbiBxU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ5KSxxdCgxLCJpbWciLDUwKSxKZSgyLCRTZSw0LDAsImRpdiIsNTEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixudWxsPT09YS5hcHBBY3RpdmUpfX1sZXQgS1Nl'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxwZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249Xyx0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMuYXBwU3RvcmVT'@;
put 'ZXJ2aWNlPVcsdGhpcy5jZHI9aWUsdGhpcy5lbGVtZW50UmVmPXBlLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRoaXMuc2FzanNBYm9ydHM9W10sdGhpcy5lZGl0b3JBY3RpdmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNl'@;
put 'U2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlUHJvYmxlbSx0aGlzLmFwcE92ZXJDYXBhY2l0eT0hMSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3Ry'@;
put 'YXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0'@;
put 'YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTAuMiIsIkFwcCB2ZXJzaW9uIjoidjYuNy4wIi5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6S28ocGFyc2VJbnQo'@;
put 'IjE3MTE5NzA2MzIzMjgiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjcuMCIucmVwbGFjZSgidiIsIiIpKyIuZzk2MDY2YzYiLGguZXZlbnRzLnN1YnNjcmliZSh3'@;
put 'ZT0+e2lmKHRoaXMucm91dGVVcmw9dGhpcy5yb3V0ZXIudXJsLHR5cGVvZiB0aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NCl7bGV0IEVlPXRoaXMucm91dGVVcmwuc3BsaXQoIi8iKVsxXTsiZWRpdG9yIj09PUVlPyh0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFj'@;
put 'dGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOiJob21lIj09PUVlPyh0aGlzLmVyclRvcD0hMSx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOih0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMSksR24ucm9vdFBhcmFtPUVlfXR5cGVvZiB0'@;
put 'aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NiYmKHRoaXMuYXBwcm92ZUFjdGl2ZT0hIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoImFwcHJvdmVEZXQiKXx8ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJ0b2FwcHJvdmUiKSl9KSx0aGlzLnN1YnNjcmliZVRvU2hvd0Fi'@;
put 'b3J0TW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpLHRoaXMuc3Vic2NyaWJlVG9BcHBBY3RpdmUoKSx0aGlzLnN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKSx3aW5kb3cuZnJhbWVFbGVtZW50JiYod2luZG93LmZy'@;
put 'YW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZSIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgi'@;
put 'ZnJhbWVib3JkZXIiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2lud2lkdGgiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjcm9sbGlu'@;
put 'ZyIsImF1dG8iKSx3aW5kb3cuZm9jdXMoKSl9cGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2FzanMiKTtpZighYSlyZXR1cm4gdGhpcy5saWNlbmNlU2VydmljZS5kZWFjdGl2YXRlQXBwKCksdm9pZCBzZXRUaW1lb3V0KCgpPT57dGhp'@;
put 'cy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiUGxlYXNlIG1ha2Ugc3VyZSAnU0FTSlMnIHRhZyB3aXRoIGNvbmZpZyBhdHRyaWJ1dGVzIGlzIGFkZGVkIHRvIGluZGV4Lmh0bWwiLG51bGwsIlNBU2pzIENvbmZpZyBub3QgZm91bmQiKX0pO2NvbnN0IGQ9Zj0+YS5nZXRBdHRy'@;
put 'aWJ1dGUoZil8fHZvaWQgMCxoPXtzZXJ2ZXJVcmw6ZCgic2VydmVyVXJsIil8fCIiLGFwcExvYzpkKCJhcHBMb2MiKXx8IiIsc2VydmVyVHlwZTpkKCJzZXJ2ZXJUeXBlIiksbG9naW5NZWNoYW5pc206ZCgibG9naW5NZWNoYW5pc20iKXx8IiIsYWRtaW5Hcm91cDpkKCJhZG1pbkdyb3VwIil8'@;
put 'fCIiLGRjUGF0aDpkKCJkY1BhdGgiKXx8IiIsZGVidWc6InRydWUiPT09ZCgiZGVidWciKXx8ITEsdXNlQ29tcHV0ZUFwaTp0aGlzLnBhcnNlQ29tcHV0ZUFwaShkKCJ1c2VDb21wdXRlQXBpIikpLGNvbnRleHROYW1lOmQoImNvbnRleHROYW1lIil8fCIiLGhvdExpY2VuY2VLZXk6ZCgiaG90'@;
put 'TGljZW5jZUtleSIpfHwiIn07dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1oLHRoaXMuYXBwU3RvcmVTZXJ2aWNlLnNldERjQWRhcHRlclNldHRpbmdzKGgpLHRoaXMuYXBwU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfWxpY2VuY2VQcm9ibGVtRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0'@;
put 'ZUJ5VXJsKGEpfXBhcnNlQ29tcHV0ZUFwaShhKXtyZXR1cm4gdm9pZCAwPT09YXx8InVuZGVmaW5lZCI9PT1hfHwibnVsbCI9PT1hP251bGw6InRydWUiPT09YXx8ITF9c3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uRGVtb0xpbWl0TW9kYWxTaG93LnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITAsZmVhdHVyZU5hbWU6YX19KX1zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIuc3Vic2NyaWJlKGE9Pnt0aGlzLmZyZWVUaWVyQmFubmVyPWF9KSx0aGlzLmxp'@;
put 'Y2VuY2VTZXJ2aWNlLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLnN1YnNjcmliZShhPT57YSYmYTw9MTQmJih0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9YSl9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwT3ZlckNhcGFjaXR5LnN1YnNjcmliZShhPT57dGhpcy5hcHBPdmVyQ2FwYWNpdHk9YX0p'@;
put 'fXN1YnNjcmliZVRvQXBwQWN0aXZlKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwQWN0aXZlPWF9KX1zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaG93QWJvcnRNb2RhbC5zdWJzY3JpYmUo'@;
put 'YT0+e2EuaWQ9dGhpcy5zYXNqc0Fib3J0cy5sZW5ndGgrMSx0aGlzLnNhc2pzQWJvcnRzLnB1c2goYSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSl9c3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57'@;
put 'dGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMH0pfXN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uUmVxdWVzdHNNb2RhbE9wZW4uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlcXVlc3RzTW9kYWw9ITB9KX1jbG9zZUFib3J0TW9kYWwoYSl7bGV0IGQ9dGhpcy5zYXNq'@;
put 'c0Fib3J0cy5maW5kSW5kZXgoaD0+aC5pZD09PWEpO3RoaXMuc2FzanNBYm9ydHMuc3BsaWNlKGQsMSl9dG9nZ2xlU2lkZWJhcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZVNpZGViYXIoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfW9wZW5M'@;
put 'aWNlbmNpbmdQYWdlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVXgpLHR0KEMwKSx0dChEcyksdHQoR2wpLHR0KEpkKSx0dCh2bCksdHQoZTgpLHR0KFVh'@;
put 'KSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sZGVjbHM6MjksdmFyczoxNyxjb25zdHM6W1sxLCJtYWluLWNvbnRhaW5lciJdLFs0LCJuZ0lmIl0sWzEsImFwcC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImN1cnNvci1w'@;
put 'b2ludGVyIHNlbGVjdC1ub25lIG1sLTEwIGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJsb2dvIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaHJlZiIsIiMiLCJjbGFz'@;
put 'cyIsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsIm5hdi10ZXh0Il0sWzEsImRyb3Bkb3duIl0sWyJjbGFzcyIsInN1Ym5hdiIsNCwibmdJZiJdLFszLCJvcGVuZWQiLCJvcGVuZWRDaGFuZ2UiXSxbMywiZGF0YSIsImZvcmNlUmVs'@;
put 'b2FkIiwib25Db25maXJtTW9kYWxDbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEs'@;
put 'Im1vZGFsLXRpdGxlIl0sWyJzaXplIiwiMjAiLCJzaGFwZSIsImxvY2siXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJhcHAtbG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtd2FybmluZyIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xl'@;
put 'IiwiYWxlcnQiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LWRhbmdlciIsImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDQsIm5nSWYiXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBw'@;
put 'LWxldmVsIiwiYWxlcnQtd2FybmluZyJdLFsxLCJhbGVydC1pdGVtcyJdLFsxLCJhbGVydC1pdGVtIiwic3RhdGljIl0sWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwxLCJtdC0yIl0sWzEsImFsZXJ0LXRleHQiXSxbImNsYXNzZXMiLCJjb2xv'@;
put 'ci13aGl0ZSJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJ1cGRhdGUta2V5Il0sWzEsInVwZGF0ZS1rZXkiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImlkIiwiZGVtby1iYW5uZXIiLCJyb2xlIiwiYWxlcnQiLDEsImFsZXJ0IiwiYWxlcnQtYXBwLWxldmVs'@;
put 'IiwiYWxlcnQtZGFuZ2VyIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLCJjbGFzcyIsInVwZGF0ZS1rZXkiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImN1cnNvci1wb2ludGVyIiwic2VsZWN0LW5vbmUiLCJtbC0xMCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbInNpemUiLCIyNCIsInNoYXBlIiwidHJlZS12aWV3Il0sWyJocmVmIiwiIyIsMSwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9h'@;
put 'cHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYy1sb2dvLnN2ZyIsMSwid2l0aG91dC10ZXh0IiwiZC1ibG9jayIsImQtbWQtbm9uZSJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RhdGFjb250cm9sbGVyLnN2ZyIs'@;
put 'MSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsInRvZ2dsZSBzZXR0aW5n'@;
put 'cyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCJuYXYtbGluayIsIm5h'@;
put 'di10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93'@;
put 'bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJs'@;
put 'aWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRyb2xsZXIuc3ZnIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1w'@;
put 'bGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksSmUoMSxPU2UsNCwzLCJuZy1jb250YWluZXIiLDEpLG1lKDIsImhlYWRlciIsMiksSmUoMyxQU2UsMiwwLCJkaXYiLDMpLG1lKDQsImRpdiIsNCksSmUoNSxIU2UsMywyLCJhIiw1KSxKZSg2LE5TZSwyLDAsImEiLDEpLHll'@;
put 'KCksSmUoNyxCU2UsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksbWUoOCwiZGl2Iiw2KSg5LCJkaXYiLDcpLHF0KDEwLCJhcHAtbG9hZGluZy1pbmRpY2F0b3IiKSx5ZSgpLG1lKDExLCJkaXYiLDgpLHF0KDEyLCJhcHAtdXNlci1uYXYtZHJvcGRvd24iKSx5ZSgpKCkoKSxKZSgxMyxVU2UsMTEs'@;
put 'OCwibmF2Iiw5KSxKZSgxNCxaU2UsMSwwLCJhcHAtYWxlcnRzIiwxKSxtZSgxNSwiYXBwLXJlcXVlc3RzLW1vZGFsIiwxMCkseHQoIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVxdWVzdHNNb2RhbD1mfSkseWUoKSxKZSgxNixZU2UsMSwwLCJyb3V0ZXItb3V0bGV0Iiwx'@;
put 'KSxxdCgxNywiYXBwLWxvZ2luIiksSmUoMTgsV1NlLDEsMCwiYXBwLWFsZXJ0cyIsMSksSmUoMTksR1NlLDEsMiwiYXBwLWluZm8tbW9kYWwiLDExKSxtZSgyMCwiY2xyLW1vZGFsIiwxMikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGVtb0xpbWl0Tm90'@;
put 'aWNlLm9wZW49Zn0pLG1lKDIxLCJoMyIsMTMpLE5lKDIyKSxxdCgyMywiY2xyLWljb24iLDE0KSx5ZSgpLG1lKDI0LCJkaXYiLDE1KSxOZSgyNSwiIENvbnRhY3QgIikscXQoMjYsImNvbnRhY3QtbGluayIpLE5lKDI3KSx5ZSgpKCkoKSxKZSgyOCxxU2UsMywxLCJkaXYiLDE2KSksMiZhJiYo'@;
put 'Q2UoMSksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxDZSgyKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldyIpfHxkLmlzTWFpblJvdXRlKCJob21lIikmJiFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxDZSgyKSxSZSgibmdJ'@;
put 'ZiIsIWQucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLENlKDEpLFJlKCJuZ0lmIixkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxDZSgxKSxSZSgibmdJZiIsIWQucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFkLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vu'@;
put 'c2luZyIpKSxDZSg2KSxSZSgibmdJZiIsZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8ZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGQucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxDZSgxKSxSZSgibmdJZiIsIWQuZXJyVG9wKSxDZSgxKSxSZSgi'@;
put 'b3BlbmVkIixkLnJlcXVlc3RzTW9kYWwpLENlKDEpLFJlKCJuZ0lmIixkLnN0YXJ0dXBEYXRhTG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsZC5lcnJUb3ApLENlKDEpLFJlKCJuZ0Zvck9mIixkLnNhc2pzQWJvcnRzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmRlbW9MaW1pdE5vdGljZS5v'@;
put 'cGVuKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLENlKDIpLGdyKCIgTG9ja2VkIEZlYXR1cmUgKCIsZC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksQ2UoNSksZ3IoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixkLnN5c3NpdGUudmFsdWUsIikg'@;
put 'dG8gYWN0aXZhdGUhICIpLENlKDEpLFJlKCJuZ0lmIiwhZC5zdGFydHVwRGF0YUxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGZwLEJ1LEdfLE9DZSxQQ2UsVUNlLFdDZSxqRSxOYixrYSxvdSxzdSxjMixOZixhZyxsZyxLOCxZYix2U2UsRVNlXSxzdHlsZXM6WyJhcHAtcmVxdWVzdHMt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MTAwMDB9aGVhZGVyLmFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2ZmZn0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0aG91dC10ZXh0W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4fS5sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZy53aXRoLXRleHRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIxMHB4fS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7YmFja2dyb3Vu'@;
put 'ZDp0cmFuc3BhcmVudDtib3JkZXI6MDttYXJnaW4tbGVmdDoxMHB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO2hl'@;
put 'aWdodDoxMDB2aCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O3otaW5kZXg6MTA1O2JhY2tncm91bmQ6cmdiYSgzMywzMywzMywuNSl9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV17Zmxl'@;
put 'eC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4'@;
put 'cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtbm90aWNlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5tYWlsdG9bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM4ZGM1M2V9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC51cGRhdGUta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7'@;
put 'cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xNDkwMTk2MDc4KX0uYWxlcnQtaWNvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5uYXYtdGV4dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjIwcHh9LnNpZGVi'@;
put 'YXItdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctbGVmdDoxMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBv'@;
put 'aW50ZXI7d2lkdGg6MzBweDtoZWlnaHQ6MzBweH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlci1hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246dW5zZXR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO29wYWNpdHk6Ljk7bGluZS1oZWlnaHQ6MS40NXJlbX1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVdOmhvdmVye2JveC1zaGFkb3c6aW5zZXQgMCAtM3B4IDAgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlLWlufWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdj'@;
put 'b250ZW50LSVDT01QJV06aG92ZXJ7Y29sb3I6I2ZhZmFmYTtvcGFjaXR5OjF9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojNjE3MTdEO29wYWNpdHk6MTti'@;
put 'b3gtc2hhZG93Omluc2V0IDAgLTNweCB0cmFuc3BhcmVudH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWl0ZW1bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxcmVtfS5ub3RmW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNr'@;
put 'Z3JvdW5kOiMxNmE1N2E7Y29sb3I6I2ZmZmNmYztmb250LXNpemU6MTJweH0uYnRuLmJ0bi1zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzYyYTQyMDtiYWNrZ3JvdW5kLWNvbG9yOiMxNmE1N2EhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmJ0bi5idG4tc3VjY2Vzc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmFkZDM5O2NvbG9yOiNmZmZ9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVD'@;
put 'T01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV17bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW0gMXJlbSAxcmVtfS5j'@;
put 'b250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDowIWltcG9ydGFudH0ubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDojNDk1QTY3O2NvbG9yOiNmZmZ9QG1lZGlhIHNjcmVl'@;
put 'biBhbmQgKG1heC13aWR0aDogNzY4cHgpey5uYXZCYXJSZXNwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YmFja2dyb3VuZDojNDk1QTY3O2NvbG9yOiNmZmZ9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z'@;
put 'dWItbmF2LmNsci1uYXYtbGV2ZWwtMVtfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtb'@;
put 'X25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn0uY2FyZC1ibG9j'@;
put 'a1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH0ubWFpbi1jb250YWluZXJbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MHJlbX19ICAuaHRJbnZhbGlke2JhY2tncm91bmQ6YmxhY2shaW1wb3J0YW50fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsgIGgye2ZvbnQtc2l6'@;
put 'ZTouN3JlbSFpbXBvcnRhbnR9ICBoM3tmb250LXNpemU6LjdyZW19fSAgLm5hdi1saW5re3BhZGRpbmc6MHJlbSAxcmVtfSAgLmJ0bi1wcmltYXJ5IC5idG4sICAgLmJ0bi5idG4tcHJpbWFyeXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Y29sb3I6I2Zm'@;
put 'Zn0gIC5idG57Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtib3JkZXI6MXB4IHNvbGlkO21pbi13aWR0aDozcmVtO21heC13aWR0aDoxNXJlbTt3aGl0ZS1zcGFjZTpub3dy'@;
put 'YXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxLjVyZW07bGV0dGVyLXNwYWNpbmc6LjEyZW07Zm9udC1zaXplOi41cmVtO2Zv'@;
put 'bnQtd2VpZ2h0OjUwMDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuYnRuLmJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6'@;
put 'dHJhbnNwYXJlbnQ7Y29sb3I6IzMxNDM1MX0gIC5idG4uYnRuLW91dGxpbmU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3O2NvbG9yOiNmZmZ9ICAuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWVhNzFm'@;
put 'O2NvbG9yOiNmZmY3Zjc7Ym9yZGVyLWNvbG9yOiM5YTk2OTZ9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLmlucHV0cyB0ZXh0YXJlYXtmb250LXNpemU6MTNwdDtib3JkZXI6MnB4IHNvbGlkICM0ODU5Njc7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym94'@;
put 'LXNoYWRvdzpub25lO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjAgMCAwIDE0cHg7cGFkZGluZzo3cHQ7d2lkdGg6MjkwcHh9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4'@;
put 'O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMjBweDt3aWR0aDozNTBweH0gIC5oYW5kc29udGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1y'@;
put 'YWRpdXM6M3B4fSAgLmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9ICAuaHRfY2xvbmVfbGVmdCB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9ICAuaHRfY2xvbmVfdG9wIHRoe2JvcmRlci10b3A6MXB4IHNv'@;
put 'bGlkICNjY2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9ICAuaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIHRoe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30gIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNmM2YzZjM7Ym9yZGVyOjFweCBzb2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKDJuKT50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBz'@;
put 'b2xpZCByZ2IoMTk3LDE5NywxOTcpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYigyMzYsMjM1LDIzNSl9ICAud3RCb3JkZXJ7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3IWltcG9ydGFudH0gIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7cGFk'@;
put 'ZGluZzowIWltcG9ydGFudDttYXJnaW46MDtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjZDZkM2QzfSAgLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I0Y1RjZGRn0gIC5jYXJke2JveC1zaGFkb3c6MCAuMTI1cmVtICNkN2Q3ZDc7Ym9yZGVyLXJhZGl1czowcmVtO2JvcmRlcjoxcHgg'@;
put 'c29saWQgdHJhbnNwYXJlbnR9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTtiYWNrZ3JvdW5k'@;
put 'LWNvbG9yOiNmZmY7Y29sb3I6IzU2NTY1NjttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3QsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlk'@;
put 'LWZvb3R7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVtO2xpbmUtaGVpZ2h0OmNhbGMoMS41cmVtIC0gM3B4KTtmb250LXNpemU6LjQ1ODMzcmVtO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO2JvcmRl'@;
put 'ci1yYWRpdXM6MH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkLWZvb3Rlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNXB4O3RvcDoycHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhl'@;
put 'YWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21hcmdpbi10b3A6LjA4'@;
put 'MzMzM3JlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JhY2tncm91bmQ6I2Y1ZjZmZjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVt'@;
put 'O2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9ICAudGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNTY1'@;
put 'NjU2O21hcmdpbjowO21hcmdpbi10b3A6MXJlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfSAgLnRhYmxlIHRoe2ZvbnQtc2l6ZTouNDU4MzNyZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2JhY2tncm91bmQtY29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjpib3R0'@;
put 'b207Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9ICAubW9kYWwtaGVhZGVye2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbToxcmVtfSAgLm1haW4tY29udGFpbmVyIC5jb250'@;
put 'ZW50LWNvbnRhaW5lcnttaW4taGVpZ2h0OjBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLWxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmxvYWRpbmctbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9Il19KSxjfSkoKTtmdW5jdGlvbiBnZWUo'@;
put 'Yyl7cmV0dXJuIG5ldyBBcigzZTMsITEpfWZ1bmN0aW9uIEZwKGMpe3N3aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgb2I7Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBCSyhjKX19ZnVuY3Rpb24gbWVlKGMsbCxhPW5ldyBNYXAsZD1uZXcgTWFwKXtjb25z'@;
put 'dCBoPVtdLGY9W107bGV0IF89LTEsVD1udWxsO2lmKGwuZm9yRWFjaChXPT57Y29uc3QgaWU9Vy5nZXQoIm9mZnNldCIpLHBlPWllPT1fLHdlPXBlJiZUfHxuZXcgTWFwO1cuZm9yRWFjaCgoRWUsWmUpPT57bGV0IGl0PVplLGV0PUVlO2lmKCJvZmZzZXQiIT09WmUpc3dpdGNoKGl0PWMubm9y'@;
put 'bWFsaXplUHJvcGVydHlOYW1lKGl0LGgpLGV0KXtjYXNlIiEiOmV0PWEuZ2V0KFplKTticmVhaztjYXNlIEFmOmV0PWQuZ2V0KFplKTticmVhaztkZWZhdWx0OmV0PWMubm9ybWFsaXplU3R5bGVWYWx1ZShaZSxpdCxldCxoKX13ZS5zZXQoaXQsZXQpfSkscGV8fGYucHVzaCh3ZSksVD13ZSxf'@;
put 'PWllfSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gYk1lKGMpe3JldHVybiBuZXcgQXIoMzUwMiwhMSl9KCk7cmV0dXJuIGZ9ZnVuY3Rpb24gSUgoYyxsLGEsZCl7c3dpdGNoKGwpe2Nhc2Uic3RhcnQiOmMub25TdGFydCgoKT0+ZChhJiZSSChhLCJzdGFydCIsYykpKTticmVhaztjYXNlImRv'@;
put 'bmUiOmMub25Eb25lKCgpPT5kKGEmJlJIKGEsImRvbmUiLGMpKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpjLm9uRGVzdHJveSgoKT0+ZChhJiZSSChhLCJkZXN0cm95IixjKSkpfX1mdW5jdGlvbiBSSChjLGwsYSl7Y29uc3QgZj1PSChjLmVsZW1lbnQsYy50cmlnZ2VyTmFtZSxjLmZyb21TdGF0'@;
put 'ZSxjLnRvU3RhdGUsbHx8Yy5waGFzZU5hbWUsYS50b3RhbFRpbWU/P2MudG90YWxUaW1lLCEhYS5kaXNhYmxlZCksXz1jLl9kYXRhO3JldHVybiBudWxsIT1fJiYoZi5fZGF0YT1fKSxmfWZ1bmN0aW9uIE9IKGMsbCxhLGQsaD0iIixmPTAsXyl7cmV0dXJue2VsZW1lbnQ6Yyx0cmlnZ2VyTmFt'@;
put 'ZTpsLGZyb21TdGF0ZTphLHRvU3RhdGU6ZCxwaGFzZU5hbWU6aCx0b3RhbFRpbWU6ZixkaXNhYmxlZDohIV99fWZ1bmN0aW9uIG0xKGMsbCxhKXtsZXQgZD1jLmdldChsKTtyZXR1cm4gZHx8Yy5zZXQobCxkPWEpLGR9ZnVuY3Rpb24gdmVlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCI6Iik7cmV0'@;
put 'dXJuW2Muc3Vic3RyaW5nKDEsbCksYy5zbGljZShsKzEpXX1jb25zdCBMTWU9KCgpPT50eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpO2Z1bmN0aW9uIFBIKGMpe2NvbnN0IGw9Yy5wYXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1M'@;
put 'TWU/bnVsbDpsfWxldCBoZz1udWxsLF9lZT0hMTtmdW5jdGlvbiBiZWUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPVBIKGwpfXJldHVybiExfWZ1bmN0aW9uIHllZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9'@;
put 'Yy5xdWVyeVNlbGVjdG9yKGwpO3JldHVybiBkP1tkXTpbXX1sZXQgd2VlPSgoKT0+e2NsYXNzIGN7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGEpe3JldHVybiBmdW5jdGlvbiBSTWUoYyl7aGd8fChoZz1mdW5jdGlvbiBPTWUoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5i'@;
put 'b2R5Om51bGx9KCl8fHt9LF9lZT0hIWhnLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBoZy5zdHlsZSk7bGV0IGw9ITA7cmV0dXJuIGhnLnN0eWxlJiYhZnVuY3Rpb24gSU1lKGMpe3JldHVybiJlYmtpdCI9PWMuc3Vic3RyaW5nKDEsNil9KGMpJiYobD1jIGluIGhnLnN0eWxlLCFsJiZf'@;
put 'ZWUmJihsPSJXZWJraXQiK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKWluIGhnLnN0eWxlKSksbH0oYSl9bWF0Y2hlc0VsZW1lbnQoYSxkKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoYSxkKXtyZXR1cm4gYmVlKGEsZCl9Z2V0UGFyZW50RWxlbWVudChhKXtyZXR1cm4g'@;
put 'UEgoYSl9cXVlcnkoYSxkLGgpe3JldHVybiB5ZWUoYSxkLGgpfWNvbXB1dGVTdHlsZShhLGQsaCl7cmV0dXJuIGh8fCIifWFuaW1hdGUoYSxkLGgsZixfLFQ9W10sVyl7cmV0dXJuIG5ldyBvYihoLGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGSD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OT09QPW5ldyB3ZWUsY30pKCk7Y29uc3QgUE1lPTFlMyxISD0ibmctZW50ZXIiLHpFPSJuZy1sZWF2ZSIsVUU9Im5nLXRyaWdnZXIiLFpFPSIubmct'@;
put 'dHJpZ2dlciIsU2VlPSJuZy1hbmltYXRpbmciLE5IPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBCZihjKXtpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgbD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFsfHxsLmxlbmd0aDwyPzA6VkgocGFyc2VGbG9h'@;
put 'dChsWzFdKSxsWzJdKX1mdW5jdGlvbiBWSChjLGwpe3JldHVybiJzIj09PWw/YypQTWU6Y31mdW5jdGlvbiBZRShjLGwsYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/YzpmdW5jdGlvbiBITWUoYyxsLGEpe2xldCBoLGY9MCxfPSIiO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'Yyl7Y29uc3QgVD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09VClyZXR1cm4gbC5wdXNoKGdlZSgpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07aD1WSChw'@;
put 'YXJzZUZsb2F0KFRbMV0pLFRbMl0pO2NvbnN0IFc9VFszXTtudWxsIT1XJiYoZj1WSChwYXJzZUZsb2F0KFcpLFRbNF0pKTtjb25zdCBpZT1UWzVdO2llJiYoXz1pZSl9ZWxzZSBoPWM7aWYoIWEpe2xldCBUPSExLFc9bC5sZW5ndGg7aDwwJiYobC5wdXNoKGZ1bmN0aW9uIFhTZSgpe3JldHVy'@;
put 'biBuZXcgQXIoMzEwMCwhMSl9KCkpLFQ9ITApLGY8MCYmKGwucHVzaChmdW5jdGlvbiBKU2UoKXtyZXR1cm4gbmV3IEFyKDMxMDEsITEpfSgpKSxUPSEwKSxUJiZsLnNwbGljZShXLDAsZ2VlKCkpfXJldHVybntkdXJhdGlvbjpoLGRlbGF5OmYsZWFzaW5nOl99fShjLGwsYSl9ZnVuY3Rpb24g'@;
put 'V2IoYyxsPXt9KXtyZXR1cm4gT2JqZWN0LmtleXMoYykuZm9yRWFjaChhPT57bFthXT1jW2FdfSksbH1mdW5jdGlvbiBNZWUoYyl7Y29uc3QgbD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGE9PntsLnNldChhLGNbYV0pfSksbH1mdW5jdGlvbiBIcChjLGw9bmV3IE1h'@;
put 'cCxhKXtpZihhKWZvcihsZXRbZCxoXW9mIGEpbC5zZXQoZCxoKTtmb3IobGV0W2QsaF1vZiBjKWwuc2V0KGQsaCk7cmV0dXJuIGx9ZnVuY3Rpb24gaGgoYyxsLGEpe2wuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9akgoaCk7YSYmIWEuaGFzKGgpJiZhLnNldChoLGMuc3R5bGVbZl0pLGMuc3R5'@;
put 'bGVbZl09ZH0pfWZ1bmN0aW9uIGZnKGMsbCl7bC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1qSChkKTtjLnN0eWxlW2hdPSIifSl9ZnVuY3Rpb24gR2IoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/MT09Yy5sZW5ndGg/Y1swXTpWSyhjKTpjfWNvbnN0IEJIPW5ldyBSZWdFeHAoInt7XFxz'@;
put 'KiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIEVlZShjKXtsZXQgbD1bXTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1CSC5leGVjKGMpOylsLnB1c2goYVsxXSk7QkgubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gJGIoYyxsLGEpe2NvbnN0IGQ9Yy50b1N0cmlu'@;
put 'ZygpLGg9ZC5yZXBsYWNlKEJILChmLF8pPT57bGV0IFQ9bFtfXTtyZXR1cm4gbnVsbD09VCYmKGEucHVzaChmdW5jdGlvbiBlTWUoYyl7cmV0dXJuIG5ldyBBcigzMDAzLCExKX0oKSksVD0iIiksVC50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWZ1bmN0aW9uIFdFKGMpe2NvbnN0IGw9'@;
put 'W107bGV0IGE9Yy5uZXh0KCk7Zm9yKDshYS5kb25lOylsLnB1c2goYS52YWx1ZSksYT1jLm5leHQoKTtyZXR1cm4gbH1jb25zdCBCTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIGpIKGMpe3JldHVybiBjLnJlcGxhY2UoQk1lLCguLi5sKT0+bFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlv'@;
put 'biB2MShjLGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSA3OnJldHVybiBjLnZpc2l0VHJpZ2dlcihsLGEpO2Nhc2UgMDpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSAxOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgMjpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7'@;
put 'Y2FzZSAzOnJldHVybiBjLnZpc2l0R3JvdXAobCxhKTtjYXNlIDQ6cmV0dXJuIGMudmlzaXRBbmltYXRlKGwsYSk7Y2FzZSA1OnJldHVybiBjLnZpc2l0S2V5ZnJhbWVzKGwsYSk7Y2FzZSA2OnJldHVybiBjLnZpc2l0U3R5bGUobCxhKTtjYXNlIDg6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2Uo'@;
put 'bCxhKTtjYXNlIDk6cmV0dXJuIGMudmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIDEwOnJldHVybiBjLnZpc2l0QW5pbWF0ZVJlZihsLGEpO2Nhc2UgMTE6cmV0dXJuIGMudmlzaXRRdWVyeShsLGEpO2Nhc2UgMTI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBm'@;
put 'dW5jdGlvbiB0TWUoYyl7cmV0dXJuIG5ldyBBcigzMDA0LCExKX0oKX19ZnVuY3Rpb24ga2VlKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IEdFPSIqIjtmdW5jdGlvbiBVTWUoYyxsKXtjb25zdCBhPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9j'@;
put 'LnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT5mdW5jdGlvbiBaTWUoYyxsLGEpe2lmKCI6Ij09Y1swXSl7Y29uc3QgVz1mdW5jdGlvbiBZTWUoYyxsKXtzd2l0Y2goYyl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNl'@;
put 'IjppbmNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPnBhcnNlRmxvYXQoYSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKTxwYXJzZUZsb2F0KGEpO2RlZmF1bHQ6cmV0dXJuIGwucHVzaChmdW5jdGlvbiBnTWUoYyl7cmV0dXJuIG5ldyBBcigz'@;
put 'MDE2LCExKX0oKSksIiogPT4gKiJ9fShjLGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXKXJldHVybiB2b2lkIGwucHVzaChXKTtjPVd9Y29uc3QgZD1jLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1kfHxkLmxlbmd0aDw0KXJldHVy'@;
put 'biBhLnB1c2goZnVuY3Rpb24gcE1lKGMpe3JldHVybiBuZXcgQXIoMzAxNSwhMSl9KCkpLGw7Y29uc3QgaD1kWzFdLGY9ZFsyXSxfPWRbM107bC5wdXNoKEFlZShoLF8pKTsiPCI9PWZbMF0mJiEoaD09R0UmJl89PUdFKSYmbC5wdXNoKEFlZShfLGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX1j'@;
put 'b25zdCAkRT1uZXcgU2V0KFsidHJ1ZSIsIjEiXSkscUU9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBBZWUoYyxsKXtjb25zdCBhPSRFLmhhcyhjKXx8cUUuaGFzKGMpLGQ9JEUuaGFzKGwpfHxxRS5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgXz1jPT1HRXx8Yz09aCxUPWw9PUdF'@;
put 'fHxsPT1mO3JldHVybiFfJiZhJiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYoXz1oPyRFLmhhcyhjKTpxRS5oYXMoYykpLCFUJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoVD1mPyRFLmhhcyhsKTpxRS5oYXMobCkpLF8mJlR9fWNvbnN0IFdNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImci'@;
put 'KTtmdW5jdGlvbiB6SChjLGwsYSxkKXtyZXR1cm4gbmV3IEdNZShjKS5idWlsZChsLGEsZCl9Y2xhc3MgR01le2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBLTWUoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3Rh'@;
put 'dGUoaCksdjEodGhpcyxHYihsKSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNpdFRy'@;
put 'aWdnZXIobCxhKXtsZXQgZD1hLnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLF89W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIHJNZSgpe3JldHVybiBuZXcgQXIoMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMuZm9y'@;
put 'RWFjaChUPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSwwPT1ULnR5cGUpe2NvbnN0IFc9VCxpZT1XLm5hbWU7aWUudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2gocGU9PntXLm5hbWU9cGUsZi5wdXNoKHRoaXMudmlzaXRTdGF0ZShXLGEpKX0p'@;
put 'LFcubmFtZT1pZX1lbHNlIGlmKDE9PVQudHlwZSl7Y29uc3QgVz10aGlzLnZpc2l0VHJhbnNpdGlvbihULGEpO2QrPVcucXVlcnlDb3VudCxoKz1XLmRlcENvdW50LF8ucHVzaChXKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gaU1lKCl7cmV0dXJuIG5ldyBBcigzMDA3LCExKX0oKSl9'@;
put 'KSx7dHlwZTo3LG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOl8scXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJhbXN8'@;
put 'fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCxfPWh8fHt9O2Quc3R5bGVzLmZvckVhY2goVD0+e1QgaW5zdGFuY2VvZiBNYXAmJlQuZm9yRWFjaChXPT57RWVlKFcpLmZvckVhY2goaWU9PntfLmhhc093blByb3BlcnR5KGllKXx8Zi5hZGQoaWUpfSl9'@;
put 'KX0pLGYuc2l6ZSYmKFdFKGYudmFsdWVzKCkpLGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gb01lKGMsbCl7cmV0dXJuIG5ldyBBcigzMDA4LCExKX0oKSkpfXJldHVybnt0eXBlOjAsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFtczpofTpudWxsfX12aXNpdFRyYW5zaXRpb24o'@;
put 'bCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50PTA7Y29uc3QgZD12MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOlVNZShsLmV4cHIsYS5lcnJvcnMpLGFuaW1hdGlvbjpkLHF1ZXJ5Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291'@;
put 'bnQsb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6MixzdGVwczpsLnN0ZXBzLm1hcChkPT52MSh0aGlzLGQsYSkpLG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2Nv'@;
put 'bnN0IGY9bC5zdGVwcy5tYXAoXz0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBUPXYxKHRoaXMsXyxhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRpbWUpLFR9KTtyZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOjMsc3RlcHM6ZixvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0'@;
put 'QW5pbWF0ZShsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gSk1lKGMsbCl7aWYoYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gYztpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIFVIKFlFKGMsbCkuZHVyYXRpb24sMCwiIik7Y29uc3QgYT1jO2lmKGEuc3BsaXQoL1xzKy8pLnNv'@;
put 'bWUoZj0+InsiPT1mLmNoYXJBdCgwKSYmInsiPT1mLmNoYXJBdCgxKSkpe2NvbnN0IGY9VUgoMCwwLCIiKTtyZXR1cm4gZi5keW5hbWljPSEwLGYuc3RyVmFsdWU9YSxmfWNvbnN0IGg9WUUoYSxsKTtyZXR1cm4gVUgoaC5kdXJhdGlvbixoLmRlbGF5LGguZWFzaW5nKX0obC50aW1pbmdzLGEu'@;
put 'ZXJyb3JzKTthLmN1cnJlbnRBbmltYXRlVGltaW5ncz1kO2xldCBoLGY9bC5zdHlsZXM/bC5zdHlsZXM6X3Moe30pO2lmKDU9PWYudHlwZSloPXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCBfPWwuc3R5bGVzLFQ9ITE7aWYoIV8pe1Q9ITA7Y29uc3QgaWU9e307ZC5lYXNpbmcm'@;
put 'JihpZS5lYXNpbmc9ZC5lYXNpbmcpLF89X3MoaWUpfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBXPXRoaXMudmlzaXRTdHlsZShfLGEpO1cuaXNFbXB0eVN0ZXA9VCxoPVd9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdz'@;
put 'OmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFzdChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMp'@;
put 'P2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBUIG9mIGgpInN0cmluZyI9PXR5cGVvZiBUP1Q9PT1BZj9kLnB1c2goVCk6YS5lcnJvcnMucHVzaChuZXcgQXIoMzAwMiwhMSkpOmQucHVzaChNZWUoVCkpO2xldCBmPSExLF89bnVsbDtyZXR1cm4gZC5mb3JFYWNoKFQ9PntpZihUIGluc3Rh'@;
put 'bmNlb2YgTWFwJiYoVC5oYXMoImVhc2luZyIpJiYoXz1ULmdldCgiZWFzaW5nIiksVC5kZWxldGUoImVhc2luZyIpKSwhZikpZm9yKGxldCBXIG9mIFQudmFsdWVzKCkpaWYoVy50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6NixzdHlsZXM6ZCxlYXNp'@;
put 'bmc6XyxvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5k'@;
put 'dXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKF89Pnsic3RyaW5nIiE9dHlwZW9mIF8mJl8uZm9yRWFjaCgoVCxXKT0+e2NvbnN0IGllPWEuY29sbGVjdGVkU3R5bGVzLmdldChhLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxwZT1pZS5nZXQoVyk7bGV0IHdlPSEwO3BlJiYoZiE9aCYm'@;
put 'Zj49cGUuc3RhcnRUaW1lJiZoPD1wZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBhTWUoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IEFyKDMwMTAsITEpfSgpKSx3ZT0hMSksZj1wZS5zdGFydFRpbWUpLHdlJiZpZS5zZXQoVyx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRp'@;
put 'b25zJiZmdW5jdGlvbiBWTWUoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9RWVlKGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBRU2UoYyl7cmV0dXJuIG5ldyBBcigzMDAxLCExKX0oKSl9KX0oVCxhLm9wdGlvbnMs'@;
put 'YS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gbE1lKCl7cmV0dXJuIG5ldyBBcigzMDExLCExKX0oKSks'@;
put 'ZDtsZXQgZj0wO2NvbnN0IF89W107bGV0IFQ9ITEsVz0hMSxpZT0wO2NvbnN0IHBlPWwuc3RlcHMubWFwKEV0PT57Y29uc3QgU3Q9dGhpcy5fbWFrZVN0eWxlQXN0KEV0LGEpO2xldCBKdD1udWxsIT1TdC5vZmZzZXQ/U3Qub2Zmc2V0OmZ1bmN0aW9uIFhNZShjKXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0FycmF5KGMpKWMuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9mZnNldCIpfX0pO2Vs'@;
put 'c2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtjb25zdCBhPWM7bD1wYXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShTdC5zdHlsZXMpLG5uPTA7cmV0dXJuIG51bGwhPUp0JiYoZisrLG5uPVN0Lm9mZnNldD1KdCks'@;
put 'Vz1XfHxubjwwfHxubj4xLFQ9VHx8bm48aWUsaWU9bm4sXy5wdXNoKG5uKSxTdH0pO1cmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gY01lKCl7cmV0dXJuIG5ldyBBcigzMDEyLCExKX0oKSksVCYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiB1TWUoKXtyZXR1cm4gbmV3IEFyKDMyMDAsITEpfSgp'@;
put 'KTtjb25zdCB3ZT1sLnN0ZXBzLmxlbmd0aDtsZXQgRWU9MDtmPjAmJmY8d2U/YS5lcnJvcnMucHVzaChmdW5jdGlvbiBkTWUoKXtyZXR1cm4gbmV3IEFyKDMyMDIsITEpfSgpKTowPT1mJiYoRWU9MS8od2UtMSkpO2NvbnN0IFplPXdlLTEsaXQ9YS5jdXJyZW50VGltZSxldD1hLmN1cnJlbnRB'@;
put 'bmltYXRlVGltaW5ncyx5dD1ldC5kdXJhdGlvbjtyZXR1cm4gcGUuZm9yRWFjaCgoRXQsU3QpPT57Y29uc3QgSnQ9RWU+MD9TdD09WmU/MTpFZSpTdDpfW1N0XSxubj1KdCp5dDthLmN1cnJlbnRUaW1lPWl0K2V0LmRlbGF5K25uLGV0LmR1cmF0aW9uPW5uLHRoaXMuX3ZhbGlkYXRlU3R5bGVB'@;
put 'c3QoRXQsYSksRXQub2Zmc2V0PUp0LGQuc3R5bGVzLnB1c2goRXQpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOnYxKHRoaXMsR2IobC5hbmltYXRpb24pLGEpLG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtyZXR1'@;
put 'cm4gYS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxh'@;
put 'KXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZixfXT1mdW5jdGlvbiAkTWUoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyovKS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBs'@;
put 'JiYoYz1jLnJlcGxhY2UoV01lLCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLFpFKS5yZXBsYWNlKC9AXHcrL2csYT0+WkUrIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxOSCksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsi'@;
put 'ICIrZjpmLG0xKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgVD12MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQse3R5cGU6MTEsc2VsZWN0b3I6'@;
put 'ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjpfLGFuaW1hdGlvbjpULG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNo'@;
put 'KGZ1bmN0aW9uIGhNZSgpe3JldHVybiBuZXcgQXIoMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06WUUobC50aW1pbmdzLGEuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246djEodGhpcyxH'@;
put 'YihsLmFuaW1hdGlvbiksYSksdGltaW5nczpkLG9wdGlvbnM6bnVsbH19fWNsYXNzIEtNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVycm9ycz1sLHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVs'@;
put 'bCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5k'@;
put 'PW5ldyBTZXR9fWZ1bmN0aW9uIHBnKGMpe3JldHVybiBjPyhjPVdiKGMpKS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiBxTWUoYyl7cmV0dXJuIGM/V2IoYyk6bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybntkdXJhdGlvbjpjLGRlbGF5OmwsZWFz'@;
put 'aW5nOmF9fWZ1bmN0aW9uIFpIKGMsbCxhLGQsaCxmLF89bnVsbCxUPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1lOmgrZixlYXNpbmc6XyxzdWJUaW1lbGlu'@;
put 'ZTpUfX1jbGFzcyBLRXtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1'@;
put 'cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCB0eGU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLHJ4ZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gWUgoYyxsLGEsZCxoLGY9bmV3IE1hcCxfPW5ldyBNYXAsVCxXLGllPVtdKXty'@;
put 'ZXR1cm4obmV3IGl4ZSkuYnVpbGRLZXlmcmFtZXMoYyxsLGEsZCxoLGYsXyxULFcsaWUpfWNsYXNzIGl4ZXtidWlsZEtleWZyYW1lcyhsLGEsZCxoLGYsXyxULFcsaWUscGU9W10pe2llPWllfHxuZXcgS0U7Y29uc3Qgd2U9bmV3IFdIKGwsYSxpZSxoLGYscGUsW10pO3dlLm9wdGlvbnM9Vztj'@;
put 'b25zdCBFZT1XLmRlbGF5P0JmKFcuZGVsYXkpOjA7d2UuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoRWUpLHdlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW19dLG51bGwsd2UuZXJyb3JzLFcpLHYxKHRoaXMsZCx3ZSk7Y29uc3QgWmU9d2UudGltZWxpbmVzLmZpbHRlcihpdD0+'@;
put 'aXQuY29udGFpbnNBbmltYXRpb24oKSk7aWYoWmUubGVuZ3RoJiZULnNpemUpe2xldCBpdDtmb3IobGV0IGV0PVplLmxlbmd0aC0xO2V0Pj0wO2V0LS0pe2NvbnN0IHl0PVplW2V0XTtpZih5dC5lbGVtZW50PT09YSl7aXQ9eXQ7YnJlYWt9fWl0JiYhaXQuYWxsb3dPbmx5VGltZWxpbmVTdHls'@;
put 'ZXMoKSYmaXQuc2V0U3R5bGVzKFtUXSxudWxsLHdlLmVycm9ycyxXKX1yZXR1cm4gWmUubGVuZ3RoP1plLm1hcChpdD0+aXQuYnVpbGRLZXlmcmFtZXMoKSk6W1pIKGEsW10sW10sW10sMCxFZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJhbnNp'@;
put 'dGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLF89dGhpcy5fdmlzaXRT'@;
put 'dWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9XyYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoXyl9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1RpbWVs'@;
put 'aW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUp'@;
put 'LGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IF89Im51bWJlciI9PXR5cGVvZiBmP2Y6QmYoJGIoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5leHRT'@;
put 'dGVwKF8pfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBfPW51bGwhPWQuZHVyYXRpb24/QmYoZC5kdXJhdGlvbik6bnVsbCxUPW51bGwhPWQuZGVsYXk/QmYoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PV8m'@;
put 'JmwuZm9yRWFjaChXPT57Y29uc3QgaWU9YS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoVyxfLFQpO2Y9TWF0aC5tYXgoZixpZS5kdXJhdGlvbitpZS5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCksdjEodGhpcyxsLmFuaW1h'@;
put 'dGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05l'@;
put 'd1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpezY9PWgucHJldmlvdXNOb2RlLnR5cGUmJihoLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxoLnByZXZpb3VzTm9kZT1YRSk7Y29uc3QgXz1CZihmLmRlbGF5KTtoLmRlbGF5TmV4dFN0ZXAoXyl9bC5zdGVwcy5sZW5n'@;
put 'dGgmJihsLnN0ZXBzLmZvckVhY2goXz0+djEodGhpcyxfLGgpKSxoLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxoLnN1YkNvbnRleHRDb3VudD5kJiZoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0R3JvdXAobCxhKXtj'@;
put 'b25zdCBkPVtdO2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IGY9bC5vcHRpb25zJiZsLm9wdGlvbnMuZGVsYXk/QmYobC5vcHRpb25zLmRlbGF5KTowO2wuc3RlcHMuZm9yRWFjaChfPT57Y29uc3QgVD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtmJiZU'@;
put 'LmRlbGF5TmV4dFN0ZXAoZiksdjEodGhpcyxfLFQpLGg9TWF0aC5tYXgoaCxULmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZC5wdXNoKFQuY3VycmVudFRpbWVsaW5lKX0pLGQuZm9yRWFjaChfPT5hLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKF8p'@;
put 'KSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoKSxhLnByZXZpb3VzTm9kZT1sfV92aXNpdFRpbWluZyhsLGEpe2lmKGwuZHluYW1pYyl7Y29uc3QgZD1sLnN0clZhbHVlO3JldHVybiBZRShhLnBhcmFtcz8kYihkLGEucGFyYW1zLGEuZXJyb3JzKTpkLGEuZXJyb3JzKX1yZXR1cm57ZHVy'@;
put 'YXRpb246bC5kdXJhdGlvbixkZWxheTpsLmRlbGF5LGVhc2luZzpsLmVhc2luZ319dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyhsLnRpbWluZ3MsYSksaD1hLmN1cnJlbnRUaW1lbGluZTtkLmRlbGF5JiYoYS5pbmNy'@;
put 'ZW1lbnRUaW1lKGQuZGVsYXkpLGguc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGY9bC5zdHlsZTs1PT1mLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5'@;
put 'ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndh'@;
put 'cmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5j'@;
put 'dXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sVD1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7VC5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChXPT57VC5mb3J3YXJkVGltZSgoVy5vZmZzZXR8'@;
put 'fDApKmYpLFQuc2V0U3R5bGVzKFcuc3R5bGVzLFcuZWFzaW5nLGEuZXJyb3JzLGEub3B0aW9ucyksVC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoVCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtm'@;
put 'KSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/QmYoaC5kZWxheSk6MDtmJiYoNj09PWEucHJldmlvdXNOb2RlLnR5cGV8fDA9PWQmJmEuY3VycmVudFRpbWVsaW5l'@;
put 'Lmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxhLnByZXZpb3VzTm9kZT1YRSk7bGV0IF89ZDtjb25zdCBUPWEuaW52b2tlUXVlcnkobC5zZWxlY3RvcixsLm9yaWdpbmFsU2VsZWN0b3IsbC5saW1pdCxsLmlu'@;
put 'Y2x1ZGVTZWxmLCEhaC5vcHRpb25hbCxhLmVycm9ycyk7YS5jdXJyZW50UXVlcnlUb3RhbD1ULmxlbmd0aDtsZXQgVz1udWxsO1QuZm9yRWFjaCgoaWUscGUpPT57YS5jdXJyZW50UXVlcnlJbmRleD1wZTtjb25zdCB3ZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLGllKTtmJiZ3ZS5k'@;
put 'ZWxheU5leHRTdGVwKGYpLGllPT09YS5lbGVtZW50JiYoVz13ZS5jdXJyZW50VGltZWxpbmUpLHYxKHRoaXMsbC5hbmltYXRpb24sd2UpLHdlLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxfPU1hdGgubWF4KF8sd2UuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1l'@;
put 'KX0pLGEuY3VycmVudFF1ZXJ5SW5kZXg9MCxhLmN1cnJlbnRRdWVyeVRvdGFsPTAsYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoXyksVyYmKGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoVyksYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50'@;
put 'U3R5bGVzKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdGFnZ2VyKGwsYSl7Y29uc3QgZD1hLnBhcmVudENvbnRleHQsaD1hLmN1cnJlbnRUaW1lbGluZSxmPWwudGltaW5ncyxfPU1hdGguYWJzKGYuZHVyYXRpb24pLFQ9XyooYS5jdXJyZW50UXVlcnlUb3RhbC0xKTtsZXQgVz1fKmEuY3Vy'@;
put 'cmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGYuZHVyYXRpb248MD8icmV2ZXJzZSI6Zi5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6Vz1ULVc7YnJlYWs7Y2FzZSJmdWxsIjpXPWQuY3VycmVudFN0YWdnZXJUaW1lfWNvbnN0IHBlPWEuY3VycmVudFRpbWVsaW5lO1cmJnBlLmRlbGF5TmV4dFN0ZXAoVyk7'@;
put 'Y29uc3Qgd2U9cGUuY3VycmVudFRpbWU7djEodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sLGQuY3VycmVudFN0YWdnZXJUaW1lPWguY3VycmVudFRpbWUtd2UrKGguc3RhcnRUaW1lLWQuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IFhFPXt9O2NsYXNzIFdI'@;
put 'e2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdWJJbnN0cnVjdGlvbnM9ZCx0aGlzLl9lbnRlckNsYXNzTmFtZT1oLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWYsdGhpcy5lcnJvcnM9Xyx0aGlzLnRpbWVsaW5lcz1ULHRoaXMu'@;
put 'cGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9WEUsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlz'@;
put 'LmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPVd8fG5ldyBKRSh0aGlzLl9kcml2ZXIsYSwwKSxULnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKGwsYSl7aWYoIWwp'@;
put 'cmV0dXJuO2NvbnN0IGQ9bDtsZXQgaD10aGlzLm9wdGlvbnM7bnVsbCE9ZC5kdXJhdGlvbiYmKGguZHVyYXRpb249QmYoZC5kdXJhdGlvbikpLG51bGwhPWQuZGVsYXkmJihoLmRlbGF5PUJmKGQuZGVsYXkpKTtjb25zdCBmPWQucGFyYW1zO2lmKGYpe2xldCBfPWgucGFyYW1zO198fChfPXRo'@;
put 'aXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGYpLmZvckVhY2goVD0+eyghYXx8IV8uaGFzT3duUHJvcGVydHkoVCkpJiYoX1tUXT0kYihmW1RdLF8sdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCBsPXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgYT10aGlz'@;
put 'Lm9wdGlvbnMucGFyYW1zO2lmKGEpe2NvbnN0IGQ9bC5wYXJhbXM9e307T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57ZFtoXT1hW2hdfSl9fXJldHVybiBsfWNyZWF0ZVN1YkNvbnRleHQobD1udWxsLGEsZCl7Y29uc3QgaD1hfHx0aGlzLmVsZW1lbnQsZj1uZXcgV0godGhpcy5fZHJpdmVy'@;
put 'LGgsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhoLGR8fDApKTtyZXR1cm4gZi5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05v'@;
put 'ZGUsZi5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsZi5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksZi51cGRhdGVPcHRpb25zKGwpLGYuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxmLmN1cnJlbnRRdWVyeVRvdGFs'@;
put 'PXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsZi5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxmfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZShsKXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9WEUsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxp'@;
put 'bmUuZm9yayh0aGlzLmVsZW1lbnQsbCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxkKXtjb25zdCBoPXtkdXJhdGlvbjphPz9sLmR1cmF0aW9uLGRlbGF5OnRoaXMu'@;
put 'Y3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhkPz8wKStsLmRlbGF5LGVhc2luZzoiIn0sZj1uZXcgb3hlKHRoaXMuX2RyaXZlcixsLmVsZW1lbnQsbC5rZXlmcmFtZXMsbC5wcmVTdHlsZVByb3BzLGwucG9zdFN0eWxlUHJvcHMsaCxsLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1'@;
put 'cm4gdGhpcy50aW1lbGluZXMucHVzaChmKSxofWluY3JlbWVudFRpbWUobCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rbCl9ZGVsYXlOZXh0U3RlcChsKXtsPjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0'@;
put 'ZXAobCl9aW52b2tlUXVlcnkobCxhLGQsaCxmLF8pe2xldCBUPVtdO2lmKGgmJlQucHVzaCh0aGlzLmVsZW1lbnQpLGwubGVuZ3RoPjApe2w9KGw9bC5yZXBsYWNlKHR4ZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKHJ4ZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xl'@;
put 'dCBpZT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihpZT1kPDA/aWUuc2xpY2UoaWUubGVuZ3RoK2QsaWUubGVuZ3RoKTppZS5zbGljZSgwLGQpKSxULnB1c2goLi4uaWUpfXJldHVybiFmJiYwPT1ULmxlbmd0aCYmXy5wdXNoKGZ1bmN0aW9uIGZNZShj'@;
put 'KXtyZXR1cm4gbmV3IEFyKDMwMTQsITEpfSgpKSxUfX1jbGFzcyBKRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1oLHRoaXMuZHVyYXRpb249MCx0aGlz'@;
put 'LmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5f'@;
put 'cGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMu'@;
put 'X2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGlu'@;
put 'ZVN0eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0'@;
put 'eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVw'@;
put 'KGwpe2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1l'@;
put 'Kz1sfWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgSkUodGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUm'@;
put 'Jih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5f'@;
put 'a2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWws'@;
put 'dGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGwse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTph'@;
put 'fSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGwpO2ZvcihsZXRbYSxkXW9m'@;
put 'IHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChhLGR8fEFmKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsQWYpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKGwsYSxkLGgpe2EmJnRo'@;
put 'aXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0IGY9aCYmaC5wYXJhbXN8fHt9LF89ZnVuY3Rpb24gc3hlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09PWgpe2Q9ZHx8bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQp'@;
put 'YS5zZXQoZixBZil9ZWxzZSBIcChoLGEpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtULFddb2YgXyl7Y29uc3QgaWU9JGIoVyxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KFQsaWUpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKFQpfHx0aGlz'@;
put 'Ll9iYWNrRmlsbC5zZXQoVCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoVCk/P0FmKSx0aGlzLl91cGRhdGVTdHlsZShULGllKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChs'@;
put 'LGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQo'@;
put 'YSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRlU3R5bGUobCxhKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1l'@;
put 'cy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9'@;
put 'Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09'@;
put 'PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoVCxXKT0+e2NvbnN0IGllPUhwKFQsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7aWUuZm9yRWFjaCgocGUsd2UpPT57IiEiPT09cGU/bC5hZGQod2UpOnBlPT09'@;
put 'QWYmJmEuYWRkKHdlKX0pLGR8fGllLnNldCgib2Zmc2V0IixXL3RoaXMuZHVyYXRpb24pLGgucHVzaChpZSl9KTtjb25zdCBmPWwuc2l6ZT9XRShsLnZhbHVlcygpKTpbXSxfPWEuc2l6ZT9XRShhLnZhbHVlcygpKTpbXTtpZihkKXtjb25zdCBUPWhbMF0sVz1uZXcgTWFwKFQpO1Quc2V0KCJv'@;
put 'ZmZzZXQiLDApLFcuc2V0KCJvZmZzZXQiLDEpLGg9W1QsV119cmV0dXJuIFpIKHRoaXMuZWxlbWVudCxoLGYsXyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3Mgb3hlIGV4dGVuZHMgSkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVD0hMSl7c3Vw'@;
put 'ZXIobCxhLF8uZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPVQsdGhpcy50aW1pbmdzPXtkdXJhdGlvbjpfLmR1cmF0aW9uLGRlbGF5Ol8uZGVsYXksZWFzaW5nOl8u'@;
put 'ZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9uOmQsZWFzaW5nOmh9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdL'@;
put 'ZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSxfPWQrYSxUPWEvXyxXPUhwKGxbMF0pO1cuc2V0KCJvZmZzZXQiLDApLGYucHVzaChXKTtjb25zdCBpZT1IcChsWzBdKTtpZS5zZXQoIm9mZnNldCIsTGVlKFQpKSxmLnB1c2goaWUpO2NvbnN0IHBlPWwubGVuZ3RoLTE7Zm9yKGxldCB3ZT0xO3dlPD1w'@;
put 'ZTt3ZSsrKXtsZXQgRWU9SHAobFt3ZV0pO2NvbnN0IFplPUVlLmdldCgib2Zmc2V0Iik7RWUuc2V0KCJvZmZzZXQiLExlZSgoYStaZSpkKS9fKSksZi5wdXNoKEVlKX1kPV8sYT0wLGg9IiIsbD1mfXJldHVybiBaSCh0aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0'@;
put 'U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIExlZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1jbGFzcyBHSHt9Y29uc3QgYXhlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4'@;
put 'V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFy'@;
put 'Z2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2'@;
put 'ZSJdKTtjbGFzcyBseGUgZXh0ZW5kcyBHSHtub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1cm4gakgobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCBfPWQudG9TdHJpbmcoKS50cmltKCk7aWYoYXhlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiBkKWY9InB4IjtlbHNle2NvbnN0IFQ9ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO1QmJjA9PVRbMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24gbk1lKGMsbCl7cmV0dXJuIG5ldyBBcigzMDA1LCExKX0oKSl9cmV0dXJuIF8rZn19ZnVuY3Rpb24g'@;
put 'SWVlKGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlLHdlLEVlKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxmcm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOl8sdGltZWxpbmVzOlQscXVlcmllZEVsZW1l'@;
put 'bnRzOlcscHJlU3R5bGVQcm9wczppZSxwb3N0U3R5bGVQcm9wczpwZSx0b3RhbFRpbWU6d2UsZXJyb3JzOkVlfX1jb25zdCAkSD17fTtjbGFzcyBSZWV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGws'@;
put 'YSxkLGgpe3JldHVybiBmdW5jdGlvbiBjeGUoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwm'@;
put 'JihoPXRoaXMuX3N0YXRlU3R5bGVzLmdldChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsXyxULFcsaWUscGUpe2NvbnN0IHdlPVtdLEVlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHwkSCxp'@;
put 'dD10aGlzLmJ1aWxkU3R5bGVzKGQsVCYmVC5wYXJhbXN8fCRILHdlKSxldD1XJiZXLnBhcmFtc3x8JEgseXQ9dGhpcy5idWlsZFN0eWxlcyhoLGV0LHdlKSxFdD1uZXcgU2V0LFN0PW5ldyBNYXAsSnQ9bmV3IE1hcCxubj0idm9pZCI9PT1oLHZuPXtwYXJhbXM6dXhlKGV0LEVlKSxkZWxheTp0'@;
put 'aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sTm49cGU/W106WUgobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLF8saXQseXQsdm4saWUsd2UpO2xldCBjcj0wO2lmKE5uLmZvckVhY2goRWk9Pntjcj1NYXRoLm1heChFaS5kdXJhdGlvbitFaS5kZWxheSxjcil9KSx3ZS5sZW5ndGgpcmV0dXJuIEll'@;
put 'ZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxubixpdCx5dCxbXSxbXSxTdCxKdCxjcix3ZSk7Tm4uZm9yRWFjaChFaT0+e2NvbnN0IExpPUVpLmVsZW1lbnQsZnI9bTEoU3QsTGksbmV3IFNldCk7RWkucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGpyPT5mci5hZGQoanIpKTtjb25zdCBpaT1tMShK'@;
put 'dCxMaSxuZXcgU2V0KTtFaS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGpyPT5paS5hZGQoanIpKSxMaSE9PWEmJkV0LmFkZChMaSl9KTtjb25zdCBMcj1XRShFdC52YWx1ZXMoKSk7cmV0dXJuIEllZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxubixpdCx5dCxObixMcixTdCxKdCxjcil9fWZ1'@;
put 'bmN0aW9uIHV4ZShjLGwpe2NvbnN0IGE9V2IobCk7Zm9yKGNvbnN0IGQgaW4gYyljLmhhc093blByb3BlcnR5KGQpJiZudWxsIT1jW2RdJiYoYVtkXT1jW2RdKTtyZXR1cm4gYX1jbGFzcyBkeGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEs'@;
put 'dGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1XYih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGY9Pntjb25zdCBfPWxbZl07bnVsbCE9PV8mJihoW2ZdPV8pfSksdGhpcy5zdHlsZXMuc3R5bGVzLmZv'@;
put 'ckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKChfLFQpPT57XyYmKF89JGIoXyxoLGEpKTtjb25zdCBXPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoVCxhKTtfPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKFQsVyxfLGEpLGQu'@;
put 'c2V0KFQsXyl9KX0pLGR9fWNsYXNzIGZ4ZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0'@;
put 'ZXMuc2V0KGgubmFtZSxuZXcgZHhlKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxPZWUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksT2VlKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlv'@;
put 'bkZhY3Rvcmllcy5wdXNoKG5ldyBSZWUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBweGUoYyxsLGEpe3JldHVybiBuZXcgUmVlKGMse3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlso'@;
put 'XyxUKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9u'@;
put 'RmFjdG9yaWVzLmZpbmQoXz0+Xy5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyhsLGEsZCl9fWZ1bmN0aW9uIE9lZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEsYy5nZXQo'@;
put 'bCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBneGU9bmV3IEtFO2NsYXNzIG14ZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVy'@;
put 'c0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9ekgodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24geU1lKGMpe3JldHVybiBuZXcgQXIoMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxm'@;
put 'KX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9bWVlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtj'@;
put 'b25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IF87Y29uc3QgVD1uZXcgTWFwO2lmKGY/KF89WUgodGhpcy5fZHJpdmVyLGEsZixISCx6RSxuZXcgTWFwLG5ldyBNYXAsZCxneGUsaCksXy5mb3JFYWNoKHBlPT57Y29uc3Qgd2U9bTEoVCxwZS5lbGVtZW50LG5ldyBNYXAp'@;
put 'O3BlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goRWU9PndlLnNldChFZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiB3TWUoKXtyZXR1cm4gbmV3IEFyKDMzMDAsITEpfSgpKSxfPVtdKSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBDTWUoYyl7cmV0dXJuIG5ldyBBcigzNTA0LCExKX0oKTtU'@;
put 'LmZvckVhY2goKHBlLHdlKT0+e3BlLmZvckVhY2goKEVlLFplKT0+e3BlLnNldChaZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKHdlLFplLEFmKSl9KX0pO2NvbnN0IGllPUZwKF8ubWFwKHBlPT57Y29uc3Qgd2U9VC5nZXQocGUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVy'@;
put 'KHBlLG5ldyBNYXAsd2UpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxpZSksaWUub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNoKGllKSxpZX1kZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UGxheWVyKGwpO2EuZGVzdHJveSgpLHRo'@;
put 'aXMuX3BsYXllcnNCeUlkLmRlbGV0ZShsKTtjb25zdCBkPXRoaXMucGxheWVycy5pbmRleE9mKGEpO2Q+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZCwxKX1fZ2V0UGxheWVyKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIFNNZShjKXty'@;
put 'ZXR1cm4gbmV3IEFyKDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihsLGEsZCxoKXtjb25zdCBmPU9IKGEsIiIsIiIsIiIpO3JldHVybiBJSCh0aGlzLl9nZXRQbGF5ZXIobCksZCxmLGgpLCgpPT57fX1jb21tYW5kKGwsYSxkLGgpe2lmKCJyZWdpc3RlciI9PWQpcmV0dXJuIHZvaWQgdGhp'@;
put 'cy5yZWdpc3RlcihsLGhbMF0pO2lmKCJjcmVhdGUiPT1kKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKGwsYSxoWzBdfHx7fSk7Y29uc3QgZj10aGlzLl9nZXRQbGF5ZXIobCk7c3dpdGNoKGQpe2Nhc2UicGxheSI6Zi5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6Zi5wYXVzZSgpO2JyZWFrO2Nh'@;
put 'c2UicmVzZXQiOmYucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmYucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpmLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6Zi5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6Zi5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGhbMF0pKTti'@;
put 'cmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShsKX19fWNvbnN0IFBlZT0ibmctYW5pbWF0ZS1xdWV1ZWQiLHFIPSJuZy1hbmltYXRlLWRpc2FibGVkIix3eGU9W10sRmVlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiEx'@;
put 'LHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxDeGU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LHAyPSJfX25nX3JlbW92ZWQiO2NsYXNzIEtIe2dldCBwYXJhbXMoKXtyZXR1cm4g'@;
put 'dGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihsLGE9IiIpe3RoaXMubmFtZXNwYWNlSWQ9YTtjb25zdCBkPWwmJmwuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiBFeGUoYyl7cmV0dXJuIGM/P251bGx9KGQ/bC52YWx1ZTpsKSxkKXtjb25zdCBm'@;
put 'PVdiKGwpO2RlbGV0ZSBmLnZhbHVlLHRoaXMub3B0aW9ucz1mfWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMu'@;
put 'cGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBxYj0idm9pZCIsWEg9bmV3IEtIKHFiKTtjbGFzcyBTeGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQs'@;
put 'dGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2wsaGQoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRo'@;
put 'aXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBNTWUoYyxsKXtyZXR1cm4gbmV3IEFyKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHhNZShjKXtyZXR1cm4gbmV3IEFyKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBreGUoYyl7cmV0'@;
put 'dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiBFTWUoYyxsKXtyZXR1cm4gbmV3IEFyKDM0MDAsITEpfSgpO2NvbnN0IGY9bTEodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSxfPXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2goXyk7Y29uc3Qg'@;
put 'VD1tMSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIFQuaGFzKGEpfHwoaGQobCxVRSksaGQobCxVRSsiLSIrYSksVC5zZXQoYSxYSCkpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBXPWYuaW5kZXhPZihfKTtXPj0wJiZmLnNw'@;
put 'bGljZShXLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8VC5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwp'@;
put 'O2lmKCFhKXRocm93IGZ1bmN0aW9uIGtNZShjKXtyZXR1cm4gbmV3IEFyKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLF89bmV3IEpIKHRoaXMuaWQsYSxsKTtsZXQgVD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVt'@;
put 'ZW50LmdldChsKTtUfHwoaGQobCxVRSksaGQobCxVRSsiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxUPW5ldyBNYXApKTtsZXQgVz1ULmdldChhKTtjb25zdCBpZT1uZXcgS0goZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZX'@;
put 'JiZpZS5hYnNvcmJPcHRpb25zKFcub3B0aW9ucyksVC5zZXQoYSxpZSksV3x8KFc9WEgpLGllLnZhbHVlIT09cWImJlcudmFsdWU9PT1pZS52YWx1ZSl7aWYoIWZ1bmN0aW9uIER4ZShjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihhLmxlbmd0aCE9ZC5s'@;
put 'ZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNPd25Qcm9wZXJ0eShmKXx8Y1tmXSE9PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KFcucGFyYW1zLGllLnBhcmFtcykpe2NvbnN0IGV0PVtdLHl0PWYubWF0Y2hTdHlsZXMoVy52'@;
put 'YWx1ZSxXLnBhcmFtcyxldCksRXQ9Zi5tYXRjaFN0eWxlcyhpZS52YWx1ZSxpZS5wYXJhbXMsZXQpO2V0Lmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoZXQpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ZmcobCx5dCksaGgobCxFdCl9KX1yZXR1cm59Y29uc3QgRWU9bTEo'@;
put 'dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7RWUuZm9yRWFjaChldD0+e2V0Lm5hbWVzcGFjZUlkPT10aGlzLmlkJiZldC50cmlnZ2VyTmFtZT09YSYmZXQucXVldWVkJiZldC5kZXN0cm95KCl9KTtsZXQgWmU9Zi5tYXRjaFRyYW5zaXRpb24oVy52YWx1ZSxpZS52YWx1ZSxs'@;
put 'LGllLnBhcmFtcyksaXQ9ITE7aWYoIVplKXtpZighaClyZXR1cm47WmU9Zi5mYWxsYmFja1RyYW5zaXRpb24saXQ9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOlpl'@;
put 'LGZyb21TdGF0ZTpXLHRvU3RhdGU6aWUscGxheWVyOl8saXNGYWxsYmFja1RyYW5zaXRpb246aXR9KSxpdHx8KGhkKGwsUGVlKSxfLm9uU3RhcnQoKCk9PntROChsLFBlZSl9KSksXy5vbkRvbmUoKCk9PntsZXQgZXQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoXyk7ZXQ+PTAmJnRoaXMucGxheWVy'@;
put 'cy5zcGxpY2UoZXQsMSk7Y29uc3QgeXQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKHl0KXtsZXQgRXQ9eXQuaW5kZXhPZihfKTtFdD49MCYmeXQuc3BsaWNlKEV0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKF8pLEVlLnB1c2goXyksX31kZXJlZ2lzdGVyKGwpe3Ro'@;
put 'aXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUobCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5uYW1lIT1s'@;
put 'KSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9PmQuZGVz'@;
put 'dHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLFpFLCEwKTtkLmZvckVhY2goaD0+e2lmKGhbcDJdKXJldHVybjtjb25zdCBm'@;
put 'PXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaChfPT5fLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihoLGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgo'@;
put 'KT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQsaCl7Y29uc3QgZj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSxfPW5ldyBNYXA7aWYoZil7Y29uc3QgVD1bXTtpZihmLmZvckVhY2goKFcsaWUp'@;
put 'PT57aWYoXy5zZXQoaWUsVy52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKGllKSl7Y29uc3QgcGU9dGhpcy50cmlnZ2VyKGwsaWUscWIsaCk7cGUmJlQucHVzaChwZSl9fSksVC5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSxf'@;
put 'KSxkJiZGcChUKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVs'@;
put 'ZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IF89Zi5uYW1lO2lmKGguaGFzKF8pKXJldHVybjtoLmFkZChfKTtjb25zdCBXPXRoaXMuX3RyaWdnZXJzLmdldChfKS5mYWxsYmFja1RyYW5zaXRpb24saWU9ZC5nZXQoXyl8fFhILHBlPW5l'@;
put 'dyBLSChxYiksd2U9bmV3IEpIKHRoaXMuaWQsXyxsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOl8sdHJhbnNpdGlvbjpXLGZyb21TdGF0ZTppZSx0b1N0YXRlOnBlLHBsYXllcjp3ZSxpc0ZhbGxiYWNr'@;
put 'VHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xl'@;
put 'dCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk6W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCBfPWw7Zm9yKDtfPV8ucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQu'@;
put 'Z2V0KF8pKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtwMl07KCFmfHxmPT09RmVlKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVh'@;
put 'ckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNlcnROb2RlKGwsYSl7aGQobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMu'@;
put 'X3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LF89dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZik7XyYmXy5mb3JFYWNoKFQ9PntpZihULm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IFc9T0goZixk'@;
put 'LnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7Vy5fZGF0YT1sLElIKGQucGxheWVyLFQucGhhc2UsVyxULmNhbGxiYWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChk'@;
put 'KX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxfPWgudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PV8/Zi1fOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxo'@;
put 'LmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBNeGV7X29uUmVtb3ZhbENvbXBsZXRlKGwsYSl7dGhpcy5vblJl'@;
put 'bW92YWxDb21wbGV0ZShsLGEpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhp'@;
put 'cy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0'@;
put 'aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlz'@;
put 'Lm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57fX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChhPT57YS5wbGF5ZXJzLmZvckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGws'@;
put 'YSl7Y29uc3QgZD1uZXcgU3hlKGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsYSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5j'@;
put 'b2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxhKXtjb25zdCBkPXRoaXMuX25hbWVzcGFjZUxpc3QsaD10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCBfPSExLFQ9'@;
put 'dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO1Q7KXtjb25zdCBXPWguZ2V0KFQpO2lmKFcpe2NvbnN0IGllPWQuaW5kZXhPZihXKTtkLnNwbGljZShpZSsxLDAsbCksXz0hMDticmVha31UPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoVCl9X3x8ZC51bnNoaWZ0KGwp'@;
put 'fWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3Bh'@;
put 'Y2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3Ro'@;
put 'aXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29r'@;
put 'dXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlm'@;
put 'KGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZihRRShhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxk'@;
put 'LGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIVFFKGEpKXJldHVybjtjb25zdCBmPWFbcDJdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCBfPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRl'@;
put 'eE9mKGEpO18+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UoXywxKX1pZihsKXtjb25zdCBfPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO18mJl8uaW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwp'@;
put 'e3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQobCksaGQobCxxSCkpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRp'@;
put 'c2FibGVkTm9kZXMuZGVsZXRlKGwpLFE4KGwscUgpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZihRRShhKSl7Y29uc3QgaD1sP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpOm51bGw7aD9oLnJlbW92ZU5vZGUoYSxkKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSwhMSxkKTtjb25zdCBmPXRo'@;
put 'aXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGEpO2YmJmYuaWQhPT1sJiZmLnJlbW92ZU5vZGUoYSxkKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGEsZCl9bWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLGQsaCxmKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChh'@;
put 'KSxhW3AyXT17bmFtZXNwYWNlSWQ6bCxzZXRGb3JSZW1vdmFsOmgsaGFzQW5pbWF0aW9uOmQscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpmfX1saXN0ZW4obCxhLGQsaCxmKXtyZXR1cm4gUUUoYSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCkubGlzdGVu'@;
put 'KGEsZCxoLGYpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbihsLGEsZCxoLGYpe3JldHVybiBsLnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsbC5lbGVtZW50LGwuZnJvbVN0YXRlLnZhbHVlLGwudG9TdGF0ZS52YWx1ZSxkLGgsbC5mcm9tU3RhdGUub3B0aW9ucyxsLnRvU3RhdGUub3B0'@;
put 'aW9ucyxhLGYpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCl7bGV0IGE9dGhpcy5kcml2ZXIucXVlcnkobCxaRSwhMCk7YS5mb3JFYWNoKGQ9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGQpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihh'@;
put 'PXRoaXMuZHJpdmVyLnF1ZXJ5KGwsTkgsITApLGEuZm9yRWFjaChkPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoZCkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2Em'@;
put 'JmEuZm9yRWFjaChkPT57ZC5xdWV1ZWQ/ZC5tYXJrZWRGb3JEZXN0cm95PSEwOmQuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT5kLmZp'@;
put 'bmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZShsPT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gRnAodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmwoKSk7bCgpfSl9cHJvY2Vzc0xlYXZlTm9kZShsKXtjb25zdCBhPWxbcDJdO2lmKGEmJmEuc2V0'@;
put 'Rm9yUmVtb3ZhbCl7aWYobFtwMl09RmVlLGEubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKTtjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGEubmFtZXNwYWNlSWQpO2QmJmQuY2xlYXJFbGVtZW50Q2FjaGUobCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUo'@;
put 'bCxhLnNldEZvclJlbW92YWwpfWwuY2xhc3NMaXN0Py5jb250YWlucyhxSCkmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KGwsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChkPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQo'@;
put 'ZCwhMSl9KX1mbHVzaChsPS0xKXtsZXQgYT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoZCxoKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxoKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50'@;
put 'b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2QrKyloZCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbZF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlz'@;
put 'Ll9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3QgZD1bXTt0cnl7YT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoZCxsKX1maW5hbGx5e2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsr'@;
put 'KWRbaF0oKX19ZWxzZSBmb3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbZF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRF'@;
put 'bnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGQ9PmQoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7Y29uc3QgZD10aGlzLl93aGVuUXVpZXRGbnM7dGhp'@;
put 'cy5fd2hlblF1aWV0Rm5zPVtdLGEubGVuZ3RoP0ZwKGEpLm9uRG9uZSgoKT0+e2QuZm9yRWFjaChoPT5oKCkpfSk6ZC5mb3JFYWNoKGg9PmgoKSl9fXJlcG9ydEVycm9yKGwpe3Rocm93IGZ1bmN0aW9uIEFNZShjKXtyZXR1cm4gbmV3IEFyKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMo'@;
put 'bCxhKXtjb25zdCBkPW5ldyBLRSxoPVtdLGY9bmV3IE1hcCxfPVtdLFQ9bmV3IE1hcCxXPW5ldyBNYXAsaWU9bmV3IE1hcCxwZT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKFFuPT57cGUuYWRkKFFuKTtjb25zdCBNcj10aGlzLmRyaXZlci5xdWVyeShRbiwiLm5nLWFuaW1h'@;
put 'dGUtcXVldWVkIiwhMCk7Zm9yKGxldCBfcj0wO19yPE1yLmxlbmd0aDtfcisrKXBlLmFkZChNcltfcl0pfSk7Y29uc3Qgd2U9dGhpcy5ib2R5Tm9kZSxFZT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksWmU9VmVlKEVlLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50'@;
put 'cyksaXQ9bmV3IE1hcDtsZXQgZXQ9MDtaZS5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1ISCtldCsrO2l0LnNldChNcixfciksUW4uZm9yRWFjaCh2dD0+aGQodnQsX3IpKX0pO2NvbnN0IHl0PVtdLEV0PW5ldyBTZXQsU3Q9bmV3IFNldDtmb3IobGV0IFFuPTA7UW48dGhpcy5jb2xsZWN0'@;
put 'ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtRbisrKXtjb25zdCBNcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbUW5dLF9yPU1yW3AyXTtfciYmX3Iuc2V0Rm9yUmVtb3ZhbCYmKHl0LnB1c2goTXIpLEV0LmFkZChNciksX3IuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KE1yLCIu'@;
put 'bmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2godnQ9PkV0LmFkZCh2dCkpOlN0LmFkZChNcikpfWNvbnN0IEp0PW5ldyBNYXAsbm49VmVlKEVlLEFycmF5LmZyb20oRXQpKTtubi5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj16RStldCsrO0p0LnNldChNcixfciksUW4uZm9yRWFjaCh2'@;
put 'dD0+aGQodnQsX3IpKX0pLGwucHVzaCgoKT0+e1plLmZvckVhY2goKFFuLE1yKT0+e2NvbnN0IF9yPWl0LmdldChNcik7UW4uZm9yRWFjaCh2dD0+UTgodnQsX3IpKX0pLG5uLmZvckVhY2goKFFuLE1yKT0+e2NvbnN0IF9yPUp0LmdldChNcik7UW4uZm9yRWFjaCh2dD0+UTgodnQsX3IpKX0p'@;
put 'LHl0LmZvckVhY2goUW49Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoUW4pfSl9KTtjb25zdCB2bj1bXSxObj1bXTtmb3IobGV0IFFuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7UW4+PTA7UW4tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1FuXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEp'@;
put 'LmZvckVhY2goX3I9Pntjb25zdCB2dD1fci5wbGF5ZXIsT3Q9X3IuZWxlbWVudDtpZih2bi5wdXNoKHZ0KSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCAkcj1PdFtwMl07aWYoJHImJiRyLnNldEZvck1vdmUpe2lmKCRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMm'@;
put 'JiRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKF9yLnRyaWdnZXJOYW1lKSl7Y29uc3QgWXI9JHIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoX3IudHJpZ2dlck5hbWUpLE5yPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChfci5lbGVtZW50KTtpZihOciYmTnIuaGFzKF9yLnRyaWdn'@;
put 'ZXJOYW1lKSl7Y29uc3QgUmk9TnIuZ2V0KF9yLnRyaWdnZXJOYW1lKTtSaS52YWx1ZT1ZcixOci5zZXQoX3IudHJpZ2dlck5hbWUsUmkpfX1yZXR1cm4gdm9pZCB2dC5kZXN0cm95KCl9fWNvbnN0IGNuPSF3ZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh3ZSxPdCksRW49SnQuZ2V0'@;
put 'KE90KSxQbj1pdC5nZXQoT3QpLEpuPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oX3IsZCxQbixFbixjbik7aWYoSm4uZXJyb3JzJiZKbi5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIE5uLnB1c2goSm4pO2lmKGNuKXJldHVybiB2dC5vblN0YXJ0KCgpPT5mZyhPdCxKbi5mcm9tU3R5bGVzKSks'@;
put 'dnQub25EZXN0cm95KCgpPT5oaChPdCxKbi50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHZ0KTtpZihfci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gdnQub25TdGFydCgoKT0+ZmcoT3QsSm4uZnJvbVN0eWxlcykpLHZ0Lm9uRGVzdHJveSgoKT0+aGgoT3QsSm4udG9TdHlsZXMpKSx2b2lk'@;
put 'IGgucHVzaCh2dCk7Y29uc3QgUHI9W107Sm4udGltZWxpbmVzLmZvckVhY2goJHI9Pnskci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKCRyLmVsZW1lbnQpfHxQci5wdXNoKCRyKX0pLEpuLnRpbWVsaW5lcz1QcixkLmFwcGVuZChPdCxKbi50aW1l'@;
put 'bGluZXMpLF8ucHVzaCh7aW5zdHJ1Y3Rpb246Sm4scGxheWVyOnZ0LGVsZW1lbnQ6T3R9KSxKbi5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaCgkcj0+bTEoVCwkcixbXSkucHVzaCh2dCkpLEpuLnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoJHIsWXIpPT57aWYoJHIuc2l6ZSl7bGV0IE5yPVcuZ2V0'@;
put 'KFlyKTtOcnx8Vy5zZXQoWXIsTnI9bmV3IFNldCksJHIuZm9yRWFjaCgoUmksWG8pPT5Oci5hZGQoWG8pKX19KSxKbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKCgkcixZcik9PntsZXQgTnI9aWUuZ2V0KFlyKTtOcnx8aWUuc2V0KFlyLE5yPW5ldyBTZXQpLCRyLmZvckVhY2goKFJpLFhvKT0+'@;
put 'TnIuYWRkKFhvKSl9KX0pO2lmKE5uLmxlbmd0aCl7Y29uc3QgUW49W107Tm4uZm9yRWFjaChNcj0+e1FuLnB1c2goZnVuY3Rpb24gVE1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNTA1LCExKX0oKSl9KSx2bi5mb3JFYWNoKE1yPT5Nci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoUW4pfWNv'@;
put 'bnN0IGNyPW5ldyBNYXAsTHI9bmV3IE1hcDtfLmZvckVhY2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O2QuaGFzKE1yKSYmKExyLnNldChNcixNciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoUW4ucGxheWVyLm5hbWVzcGFjZUlkLFFuLmluc3RydWN0aW9uLGNyKSl9KSxoLmZvckVh'@;
put 'Y2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhNciwhMSxRbi5uYW1lc3BhY2VJZCxRbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKHZ0PT57bTEoY3IsTXIsW10pLnB1c2godnQpLHZ0LmRlc3Ryb3koKX0pfSk7Y29uc3QgRWk9eXQuZmlsdGVy'@;
put 'KFFuPT5qZWUoUW4sVyxpZSkpLExpPW5ldyBNYXA7TmVlKExpLHRoaXMuZHJpdmVyLFN0LGllLEFmKS5mb3JFYWNoKFFuPT57amVlKFFuLFcsaWUpJiZFaS5wdXNoKFFuKX0pO2NvbnN0IGlpPW5ldyBNYXA7WmUuZm9yRWFjaCgoUW4sTXIpPT57TmVlKGlpLHRoaXMuZHJpdmVyLG5ldyBTZXQo'@;
put 'UW4pLFcsIiEiKX0pLEVpLmZvckVhY2goUW49Pntjb25zdCBNcj1MaS5nZXQoUW4pLF9yPWlpLmdldChRbik7TGkuc2V0KFFuLG5ldyBNYXAoWy4uLk1yPy5lbnRyaWVzKCk/P1tdLC4uLl9yPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QganI9W10sT249W10sRnI9e307Xy5mb3JFYWNoKFFu'@;
put 'PT57Y29uc3R7ZWxlbWVudDpNcixwbGF5ZXI6X3IsaW5zdHJ1Y3Rpb246dnR9PVFuO2lmKGQuaGFzKE1yKSl7aWYocGUuaGFzKE1yKSlyZXR1cm4gX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLF9yLmRpc2FibGVkPSEwLF9yLm92ZXJyaWRlVG90YWxUaW1lKHZ0LnRvdGFs'@;
put 'VGltZSksdm9pZCBoLnB1c2goX3IpO2xldCBPdD1GcjtpZihMci5zaXplPjEpe2xldCBFbj1Ncjtjb25zdCBQbj1bXTtmb3IoO0VuPUVuLnBhcmVudE5vZGU7KXtjb25zdCBKbj1Mci5nZXQoRW4pO2lmKEpuKXtPdD1KbjticmVha31Qbi5wdXNoKEVuKX1Qbi5mb3JFYWNoKEpuPT5Mci5zZXQo'@;
put 'Sm4sT3QpKX1jb25zdCBjbj10aGlzLl9idWlsZEFuaW1hdGlvbihfci5uYW1lc3BhY2VJZCx2dCxjcixmLGlpLExpKTtpZihfci5zZXRSZWFsUGxheWVyKGNuKSxPdD09PUZyKWpyLnB1c2goX3IpO2Vsc2V7Y29uc3QgRW49dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChPdCk7RW4mJkVuLmxl'@;
put 'bmd0aCYmKF9yLnBhcmVudFBsYXllcj1GcChFbikpLGgucHVzaChfcil9fWVsc2UgZmcoTXIsdnQuZnJvbVN0eWxlcyksX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLE9uLnB1c2goX3IpLHBlLmhhcyhNcikmJmgucHVzaChfcil9KSxPbi5mb3JFYWNoKFFuPT57Y29uc3Qg'@;
put 'TXI9Zi5nZXQoUW4uZWxlbWVudCk7aWYoTXImJk1yLmxlbmd0aCl7Y29uc3QgX3I9RnAoTXIpO1FuLnNldFJlYWxQbGF5ZXIoX3IpfX0pLGguZm9yRWFjaChRbj0+e1FuLnBhcmVudFBsYXllcj9Rbi5zeW5jUGxheWVyRXZlbnRzKFFuLnBhcmVudFBsYXllcik6UW4uZGVzdHJveSgpfSk7Zm9y'@;
put 'KGxldCBRbj0wO1FuPHl0Lmxlbmd0aDtRbisrKXtjb25zdCBNcj15dFtRbl0sX3I9TXJbcDJdO2lmKFE4KE1yLHpFKSxfciYmX3IuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCB2dD1bXTtpZihULnNpemUpe2xldCBjbj1ULmdldChNcik7Y24mJmNuLmxlbmd0aCYmdnQucHVzaCguLi5jbik7'@;
put 'bGV0IEVuPXRoaXMuZHJpdmVyLnF1ZXJ5KE1yLE5ILCEwKTtmb3IobGV0IFBuPTA7UG48RW4ubGVuZ3RoO1BuKyspe2xldCBKbj1ULmdldChFbltQbl0pO0puJiZKbi5sZW5ndGgmJnZ0LnB1c2goLi4uSm4pfX1jb25zdCBPdD12dC5maWx0ZXIoY249PiFjbi5kZXN0cm95ZWQpO090Lmxlbmd0'@;
put 'aD9BeGUodGhpcyxNcixPdCk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKE1yKX1yZXR1cm4geXQubGVuZ3RoPTAsanIuZm9yRWFjaChRbj0+e3RoaXMucGxheWVycy5wdXNoKFFuKSxRbi5vbkRvbmUoKCk9PntRbi5kZXN0cm95KCk7Y29uc3QgTXI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoUW4pO3Ro'@;
put 'aXMucGxheWVycy5zcGxpY2UoTXIsMSl9KSxRbi5wbGF5KCl9KSxqcn1hZnRlckZsdXNoKGwpe3RoaXMuX2ZsdXNoRm5zLnB1c2gobCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGwpfV9nZXRQcmV2aW91c1BsYXllcnMobCxhLGQsaCxmKXts'@;
put 'ZXQgXz1bXTtpZihhKXtjb25zdCBUPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO1QmJihfPVQpfWVsc2V7Y29uc3QgVD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKFQpe2NvbnN0IFc9IWZ8fGY9PXFiO1QuZm9yRWFjaChpZT0+e2llLnF1ZXVlZHx8IVcmJmll'@;
put 'LnRyaWdnZXJOYW1lIT1ofHxfLnB1c2goaWUpfSl9fXJldHVybihkfHxoKSYmKF89Xy5maWx0ZXIoVD0+IShkJiZkIT1ULm5hbWVzcGFjZUlkfHxoJiZoIT1ULnRyaWdnZXJOYW1lKSkpLF99X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCxfPWEuaXNSZW1v'@;
put 'dmFsVHJhbnNpdGlvbj92b2lkIDA6bCxUPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgVyBvZiBhLnRpbWVsaW5lcyl7Y29uc3QgaWU9Vy5lbGVtZW50LHBlPWllIT09Zix3ZT1tMShkLGllLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMo'@;
put 'aWUscGUsXyxULGEudG9TdGF0ZSkuZm9yRWFjaChaZT0+e2NvbnN0IGl0PVplLmdldFJlYWxQbGF5ZXIoKTtpdC5iZWZvcmVEZXN0cm95JiZpdC5iZWZvcmVEZXN0cm95KCksWmUuZGVzdHJveSgpLHdlLnB1c2goWmUpfSl9ZmcoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEs'@;
put 'ZCxoLGYsXyl7Y29uc3QgVD1hLnRyaWdnZXJOYW1lLFc9YS5lbGVtZW50LGllPVtdLHBlPW5ldyBTZXQsd2U9bmV3IFNldCxFZT1hLnRpbWVsaW5lcy5tYXAoaXQ9Pntjb25zdCBldD1pdC5lbGVtZW50O3BlLmFkZChldCk7Y29uc3QgeXQ9ZXRbcDJdO2lmKHl0JiZ5dC5yZW1vdmVkQmVmb3Jl'@;
put 'UXVlcmllZClyZXR1cm4gbmV3IG9iKGl0LmR1cmF0aW9uLGl0LmRlbGF5KTtjb25zdCBFdD1ldCE9PVcsU3Q9ZnVuY3Rpb24gVHhlKGMpe2NvbnN0IGw9W107cmV0dXJuIEJlZShjLGwpLGx9KChkLmdldChldCl8fHd4ZSkubWFwKGNyPT5jci5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoY3I9'@;
put 'PiEhY3IuZWxlbWVudCYmY3IuZWxlbWVudD09PWV0KSxKdD1mLmdldChldCksbm49Xy5nZXQoZXQpLHZuPW1lZSh0aGlzLl9ub3JtYWxpemVyLGl0LmtleWZyYW1lcyxKdCxubiksTm49dGhpcy5fYnVpbGRQbGF5ZXIoaXQsdm4sU3QpO2lmKGl0LnN1YlRpbWVsaW5lJiZoJiZ3ZS5hZGQoZXQp'@;
put 'LEV0KXtjb25zdCBjcj1uZXcgSkgobCxULGV0KTtjci5zZXRSZWFsUGxheWVyKE5uKSxpZS5wdXNoKGNyKX1yZXR1cm4gTm59KTtpZS5mb3JFYWNoKGl0PT57bTEodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxpdC5lbGVtZW50LFtdKS5wdXNoKGl0KSxpdC5vbkRvbmUoKCk9PmZ1bmN0'@;
put 'aW9uIHh4ZShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEpO2Quc3BsaWNlKGgsMSl9MD09ZC5sZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGl0LmVsZW1lbnQsaXQpKX0p'@;
put 'LHBlLmZvckVhY2goaXQ9PmhkKGl0LFNlZSkpO2NvbnN0IFplPUZwKEVlKTtyZXR1cm4gWmUub25EZXN0cm95KCgpPT57cGUuZm9yRWFjaChpdD0+UTgoaXQsU2VlKSksaGgoVyxhLnRvU3R5bGVzKX0pLHdlLmZvckVhY2goaXQ9PnttMShoLGl0LFtdKS5wdXNoKFplKX0pLFplfV9idWlsZFBs'@;
put 'YXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsZCk6bmV3IG9iKGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNzIEpIe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlk'@;
put 'PWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kLHRoaXMuX3BsYXllcj1uZXcgb2IsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJr'@;
put 'ZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKGwpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1sLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGQpPT57YS5m'@;
put 'b3JFYWNoKGg9PklIKGwsZCx2b2lkIDAsaCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUobC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRo'@;
put 'aXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShsKXt0aGlzLnRvdGFsVGltZT1sfXN5bmNQbGF5ZXJFdmVudHMobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmwub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGwub25Eb25lKCgpPT50'@;
put 'aGlzLmZpbmlzaCgpKSxsLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGwsYSl7bTEodGhpcy5fcXVldWVkQ2FsbGJhY2tzLGwsW10pLnB1c2goYSl9b25Eb25lKGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixsKSx0aGlzLl9wbGF5ZXIu'@;
put 'b25Eb25lKGwpfW9uU3RhcnQobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixsKSx0aGlzLl9wbGF5ZXIub25TdGFydChsKX1vbkRlc3Ryb3kobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGwpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3ko'@;
put 'bCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIu'@;
put 'cGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5f'@;
put 'cGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24obCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihsKX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPXRoaXMu'@;
put 'X3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2sobCl9fWZ1bmN0aW9uIFFFKGMpe3JldHVybiBjJiYxPT09Yy5ub2RlVHlwZX1mdW5jdGlvbiBIZWUoYyxsKXtjb25zdCBhPWMuc3R5bGUuZGlzcGxheTtyZXR1cm4gYy5zdHlsZS5kaXNwbGF5PWw/PyJub25lIixh'@;
put 'fWZ1bmN0aW9uIE5lZShjLGwsYSxkLGgpe2NvbnN0IGY9W107YS5mb3JFYWNoKFc9PmYucHVzaChIZWUoVykpKTtjb25zdCBfPVtdO2QuZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBwZT1uZXcgTWFwO1cuZm9yRWFjaCh3ZT0+e2NvbnN0IEVlPWwuY29tcHV0ZVN0eWxlKGllLHdlLGgpO3BlLnNl'@;
put 'dCh3ZSxFZSksKCFFZXx8MD09RWUubGVuZ3RoKSYmKGllW3AyXT1DeGUsXy5wdXNoKGllKSl9KSxjLnNldChpZSxwZSl9KTtsZXQgVD0wO3JldHVybiBhLmZvckVhY2goVz0+SGVlKFcsZltUKytdKSksX31mdW5jdGlvbiBWZWUoYyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKFQ9'@;
put 'PmEuc2V0KFQsW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIF8oVCl7aWYoIVQpcmV0dXJuIDE7bGV0IFc9Zi5nZXQoVCk7aWYoVylyZXR1cm4gVztjb25zdCBpZT1ULnBhcmVudE5vZGU7cmV0dXJuIFc9YS5oYXMoaWUpP2ll'@;
put 'OmguaGFzKGllKT8xOl8oaWUpLGYuc2V0KFQsVyksV31yZXR1cm4gbC5mb3JFYWNoKFQ9Pntjb25zdCBXPV8oVCk7MSE9PVcmJmEuZ2V0KFcpLnB1c2goVCl9KSxhfWZ1bmN0aW9uIGhkKGMsbCl7Yy5jbGFzc0xpc3Q/LmFkZChsKX1mdW5jdGlvbiBROChjLGwpe2MuY2xhc3NMaXN0Py5yZW1v'@;
put 'dmUobCl9ZnVuY3Rpb24gQXhlKGMsbCxhKXtGcChhKS5vbkRvbmUoKCk9PmMucHJvY2Vzc0xlYXZlTm9kZShsKSl9ZnVuY3Rpb24gQmVlKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXTtkIGluc3RhbmNlb2YgQks/QmVlKGQucGxheWVycyxsKTpsLnB1c2go'@;
put 'ZCl9fWZ1bmN0aW9uIGplZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtpZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4gaD9kLmZvckVhY2goZj0+aC5hZGQoZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgZWt7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9k'@;
put 'eU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGgsZik9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IE14ZShsLGEsZCksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IG14ZShs'@;
put 'LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShoLGYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IF89bCsiLSIraDtsZXQgVD10aGlzLl90cmlnZ2VyQ2FjaGVbX107aWYoIVQpe2NvbnN0'@;
put 'IFc9W10scGU9ekgodGhpcy5fZHJpdmVyLGYsVyxbXSk7aWYoVy5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gX01lKGMsbCl7cmV0dXJuIG5ldyBBcigzNDA0LCExKX0oKTtUPWZ1bmN0aW9uIGh4ZShjLGwsYSl7cmV0dXJuIG5ldyBmeGUoYyxsLGEpfShoLHBlLHRoaXMuX25vcm1hbGl6ZXIpLHRo'@;
put 'aXMuX3RyaWdnZXJDYWNoZVtfXT1UfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxUKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGws'@;
put 'YSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2lu'@;
put 'ZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2YsX109dmVlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixhLF8saCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQs'@;
put 'aCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbXyxUXT12ZWUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihfLGEsVCxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0'@;
put 'aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5n'@;
put 'aW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1sZXQgSXhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlz'@;
put 'Ll9zdGFydFN0eWxlcz1kLHRoaXMuX2VuZFN0eWxlcz1oLHRoaXMuX3N0YXRlPTA7bGV0IGY9Yy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChhKTtmfHxjLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGEsZj1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWZ9c3RhcnQoKXt0aGlz'@;
put 'Ll9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJmhoKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2lu'@;
put 'aXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKGhoKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKGMuaW5pdGlhbFN0eWxlc0J5RWxlbWVu'@;
put 'dC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihmZyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoZmcodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0'@;
put 'eWxlcz1udWxsKSxoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gYy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwLGN9KSgpO2Z1bmN0aW9uIFFIKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+'@;
put 'eyhmdW5jdGlvbiBSeGUoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xhc3MgemVle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25z'@;
put 'PWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlz'@;
put 'Ll9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0'@;
put 'aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhp'@;
put 'cy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2NvbnN0IGw9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVs'@;
put 'ZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwLHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsKCk9PnRoaXMuX29uRmluaXNoKCkpfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0'@;
put 'aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2Vy'@;
put 'V2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2lu'@;
put 'YWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0'@;
put 'aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMu'@;
put 'aW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNo'@;
put 'ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2Vs'@;
put 'KCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0'@;
put 'aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMu'@;
put 'ZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBs'@;
put 'PW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOmtlZSh0aGlzLmVsZW1lbnQsaCkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9bH10cmlnZ2VyQ2FsbGJhY2so'@;
put 'bCl7Y29uc3QgYT0ic3RhcnQiPT09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyBPeGV7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkobCl7'@;
put 'cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQobCxhKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQobCxhKXtyZXR1cm4gYmVlKGwsYSl9Z2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gUEgobCl9cXVlcnkobCxhLGQpe3JldHVybiB5ZWUobCxhLGQpfWNvbXB1dGVTdHlsZShsLGEsZCl7cmV0dXJu'@;
put 'IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGwpW2FdfWFuaW1hdGUobCxhLGQsaCxmLF89W10pe2NvbnN0IFc9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihXLmVhc2luZz1mKTtjb25zdCBpZT1uZXcgTWFwLHBlPV8uZmlsdGVyKFplPT5aZSBp'@;
put 'bnN0YW5jZW9mIHplZSk7KGZ1bmN0aW9uIGpNZShjLGwpe3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZwZS5mb3JFYWNoKFplPT57WmUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKGl0LGV0KT0+aWUuc2V0KGV0LGl0KSl9KTtsZXQgd2U9ZnVuY3Rpb24gTk1lKGMpe3JldHVybiBjLmxl'@;
put 'bmd0aD9jWzBdaW5zdGFuY2VvZiBNYXA/YzpjLm1hcChsPT5NZWUobCkpOltdfShhKS5tYXAoWmU9PkhwKFplKSk7d2U9ZnVuY3Rpb24gek1lKGMsbCxhKXtpZihhLnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLF8pPT57ZC5oYXMoXyl8fGgucHVzaChf'@;
put 'KSxkLnNldChfLGYpfSksaC5sZW5ndGgpZm9yKGxldCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCBfPWxbZl07aC5mb3JFYWNoKFQ9Pl8uc2V0KFQsa2VlKGMsVCkpKX19cmV0dXJuIGx9KGwsd2UsaWUpO2NvbnN0IEVlPWZ1bmN0aW9uIEx4ZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVy'@;
put 'biBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1RSChsWzBdKSxsLmxlbmd0aD4xJiYoZD1RSChsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPVFIKGwpKSxhfHxkP25ldyBJeGUoYyxhLGQpOm51bGx9KGwsd2UpO3JldHVybiBuZXcgemVlKGwsd2UsVyxFZSl9fWxl'@;
put 'dCBQeGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE5Le2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKGQuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246UGMuTm9uZSxzdHlsZXM6W10sZGF0YTp7'@;
put 'YW5pbWF0aW9uOltdfX0pfWJ1aWxkKGEpe2NvbnN0IGQ9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7Y29uc3QgaD1BcnJheS5pc0FycmF5KGEpP1ZLKGEpOmE7cmV0dXJuIFVlZSh0aGlzLl9yZW5kZXJlcixudWxsLGQsInJlZ2lzdGVy'@;
put 'IixbaF0pLG5ldyBGeGUoZCx0aGlzLl9yZW5kZXJlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFkzKSxhcihJcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIEZ4ZSBleHRl'@;
put 'bmRzIEZtZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5faWQ9bCx0aGlzLl9yZW5kZXJlcj1hfWNyZWF0ZShsLGEpe3JldHVybiBuZXcgSHhlKHRoaXMuX2lkLGwsYXx8e30sdGhpcy5fcmVuZGVyZXIpfX1jbGFzcyBIeGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5pZD1sLHRo'@;
put 'aXMuZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWgsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixkKX1fbGlzdGVuKGwsYSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1l'@;
put 'bnQsYEBAJHt0aGlzLmlkfToke2x9YCxhKX1fY29tbWFuZChsLC4uLmEpe3JldHVybiBVZWUodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsbCxhKX1vbkRvbmUobCl7dGhpcy5fbGlzdGVuKCJkb25lIixsKX1vblN0YXJ0KGwpe3RoaXMuX2xpc3Rlbigic3RhcnQiLGwpfW9u'@;
put 'RGVzdHJveShsKXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLGwpfWluaXQoKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH1wYXVzZSgpe3RoaXMuX2NvbW1h'@;
put 'bmQoInBhdXNlIil9cmVzdGFydCgpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX1maW5pc2goKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX1kZXN0cm95KCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfXJlc2V0KCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKSx0aGlzLl9zdGFydGVkPSExfXNl'@;
put 'dFBvc2l0aW9uKGwpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIixsKX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0/LmdldFBvc2l0aW9uKCk/PzB9fWZ1bmN0aW9uIFVlZShjLGwsYSxkLGgpe3JldHVybiBjLnNldFByb3Bl'@;
put 'cnR5KGwsYEBAJHthfToke2R9YCxoKX1jb25zdCBaZWU9IkAuZGlzYWJsZWQiO2xldCBOeGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fem9uZT1oLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lk'@;
put 'PTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCxkLm9uUmVtb3ZhbENvbXBsZXRlPShmLF8pPT57Y29uc3QgVD1fPy5wYXJlbnROb2RlKGYpO1QmJl8ucmVtb3ZlQ2hpbGQoVCxmKX19Y3Jl'@;
put 'YXRlUmVuZGVyZXIoYSxkKXtjb25zdCBmPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIoYSxkKTtpZighKGEmJmQmJmQuZGF0YSYmZC5kYXRhLmFuaW1hdGlvbikpe2xldCBwZT10aGlzLl9yZW5kZXJlckNhY2hlLmdldChmKTtyZXR1cm4gcGV8fChwZT1uZXcgWWVlKCIiLGYsdGhpcy5l'@;
put 'bmdpbmUsKCk9PnRoaXMuX3JlbmRlcmVyQ2FjaGUuZGVsZXRlKGYpKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChmLHBlKSkscGV9Y29uc3QgXz1kLmlkLFQ9ZC5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKFQsYSk7Y29uc3Qg'@;
put 'Vz1wZT0+e0FycmF5LmlzQXJyYXkocGUpP3BlLmZvckVhY2goVyk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKF8sVCxhLHBlLm5hbWUscGUpfTtyZXR1cm4gZC5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKFcpLG5ldyBWeGUodGhpcyxULGYsdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5f'@;
put 'Y2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLGQsaCl7YT49MCYmYTx0aGlz'@;
put 'Ll9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKT0+ZChoKSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChmPT57'@;
put 'Y29uc3RbXyxUXT1mO18oVCl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtkLGhdKSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1'@;
put 'bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53'@;
put 'aGVuUmVuZGVyaW5nRG9uZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoZWspLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgWWVle2NvbnN0cnVjdG9y'@;
put 'KGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0aGlzLl9vbkRlc3Ryb3k9aH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveU5vZGUobCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ry'@;
put 'b3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4o'@;
put 'KX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9'@;
put 'YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUu'@;
put 'b25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsYSx0aGlzLmRlbGVnYXRlKX1zZWxlY3RSb290RWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVt'@;
put 'ZW50KGwsYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKGwpfW5leHRTaWJsaW5nKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKGwpfXNldEF0dHJpYnV0ZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShsLGEsZCxo'@;
put 'KX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGwsYSxkKX1hZGRDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3MobCxhKX1yZW1vdmVDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MobCxhKX1zZXRTdHlsZShsLGEs'@;
put 'ZCxoKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKGwsYSxkLGgpfXJlbW92ZVN0eWxlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKGwsYSxkKX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKSYmYT09WmVlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCwhIWQpOnRo'@;
put 'aXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfXNldFZhbHVlKGwsYSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShsLGEpfWxpc3RlbihsLGEsZCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVB'@;
put 'bmltYXRpb25zKGwsYSl9fWNsYXNzIFZ4ZSBleHRlbmRzIFllZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpLHRoaXMuZmFjdG9yeT1sLHRoaXMubmFtZXNwYWNlSWQ9YX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKT8iLiI9PWEuY2hhckF0KDEpJiZh'@;
put 'PT1aZWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLGQ9dm9pZCAwPT09ZHx8ISFkKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsbCxhLnNsaWNlKDEpLGQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfWxpc3RlbihsLGEsZCl7aWYoIkAiPT1hLmNoYXJB'@;
put 'dCgwKSl7Y29uc3QgaD1mdW5jdGlvbiBCeGUoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIGN9fShsKTtsZXQgZj1hLnNsaWNl'@;
put 'KDEpLF89IiI7cmV0dXJuIkAiIT1mLmNoYXJBdCgwKSYmKFtmLF9dPWZ1bmN0aW9uIGp4ZShjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19KGYpKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxoLGYsXyxU'@;
put 'PT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhULl9kYXRhfHwtMSxkLFQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX19bGV0IHp4ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZWt7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYS5ib2R5LGQs'@;
put 'aCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKElzKSxhcihGSCksYXIoR0gpLGFyKHg1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29u'@;
put 'c3QgV2VlPVt7cHJvdmlkZTpOSyx1c2VDbGFzczpQeGV9LHtwcm92aWRlOkdILHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVXhlKCl7cmV0dXJuIG5ldyBseGV9fSx7cHJvdmlkZTplayx1c2VDbGFzczp6eGV9LHtwcm92aWRlOlkzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gWnhlKGMsbCxhKXtyZXR1cm4g'@;
put 'bmV3IE54ZShjLGwsYSl9LGRlcHM6W0xPLGVrLE5vXX1dLGVOPVt7cHJvdmlkZTpGSCx1c2VGYWN0b3J5OigpPT5uZXcgT3hlfSx7cHJvdmlkZTp0Uyx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5XZWVdLEdlZT1be3Byb3ZpZGU6RkgsdXNlQ2xhc3M6d2VlfSx7cHJvdmlkZTp0'@;
put 'Uyx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5XZWVdO2xldCBZeGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz9HZWU6ZU59fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6ZU4saW1wb3J0czpba0ddfSksY30pKCksV3hlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsInAiKSxOZSgyLCI0MDQgLSBOb3QgRm91bmQiKSx5ZSgpKCkpfX0pLGN9KSgpLCRlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBl'@;
put 'OiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO18uaHJlZj0iZGF0YTp0'@;
put 'ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLF8uZG93bmxvYWQ9YCR7ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfKSxfLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfKX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57'@;
put 'bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gR3hlKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCks'@;
put 'bWUoMywicCIpLE5lKDQsIkRlcGxveWluZy4uLiIpLHllKCksenIoKSl9ZnVuY3Rpb24gJHhlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIHF4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBLeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u'@;
put 'IiwzMCl9ZnVuY3Rpb24gWHhlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIEp4ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjIpLEplKDEsS3hlLDEsMCwiY2xyLWljb24iLDIzKSxKZSgyLFh4ZSwxLDAsImNsci1pY29uIiwyNCksbWUoMywicCIpLE5lKDQsIkNy'@;
put 'ZWF0ZSBkYXRhYmFzZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLENlKDEpLFJlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIFF4ZShjLGwpezEm'@;
put 'YyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBlRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiwyMCksTmUoMiwiRG9uZSIpLHllKCkscXQoMywiaHIiLDIxKSxtZSg0LCJkaXYiLDIyKSxKZSg1LCR4ZSwxLDAsImNsci1pY29uIiwyMyksSmUoNixxeGUs'@;
put 'MSwwLCJjbHItaWNvbiIsMjQpLG1lKDcsInAiKSxOZSg4LCJEZXBsb3kgU0FTIEpvYnMiKSx5ZSgpKCksSmUoOSxKeGUsNSwyLCJkaXYiLDI1KSxxdCgxMCwiaHIiLDIxKSxtZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsMjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxKZSgxMyxReGUsMSwwLCJjbHItaWNvbiIsMjQpLE5lKDE0LCIgTEFVTkNIIC8gQ09ORklHVVJFICIpLHllKCksbWUoMTUsImJ1dHRvbiIsMjgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdCho'@;
put 'LmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxOZSgxNiwiIERvd25sb2FkIGxvZyAiKSx5ZSgpKCkscXQoMTcsImhyIiwyMSksbWUoMTgsImRpdiIsMjYpKDE5LCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLGp0KGguYXV0b2RlcGxveURvbmU9ITEpfSksTmUoMjAsIiBDbG9zZSAiKSx5ZSgpLG1lKDIxLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9wZW5TYXNS'@;
put 'ZXF1ZXN0c01vZGFsKCkpfSksTmUoMjIsIiBTQVMgUmVxdWVzdHMgIikseWUoKSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLENlKDEpLFJlKCJuZ0lmIiwhYS5hdXRvRGVwbG95U3RhdHVz'@;
put 'LmRlcGxveVNlcnZpY2VQYWNrKSxDZSgzKSxSZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksQ2UoNCksUmUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrfHwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtl'@;
put 'RGF0YSl9fWZ1bmN0aW9uIHRFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTYpKDEsImRpdiIsMTcpLEplKDIsR3hlLDUsMCwibmctY29udGFpbmVyIiwxOCksSmUoMyxlRWUsMjMsNCwibmctY29udGFpbmVyIiwxOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJ'@;
put 'ZiIsIWEuYXV0b2RlcGxveURvbmUpLENlKDEpLFJlKCJuZ0lmIixhLmF1dG9kZXBsb3lEb25lKX19bGV0IG5FZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5s'@;
put 'b2dnZXJTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBFcix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhp'@;
put 'cy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITEs'@;
put 'dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hdXRvRGVwbG95U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VEYXRhOm51bGx9fW5nT25Jbml0KCl7fWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5hdXRvZGVwbG95'@;
put 'aW5nPSEwLGEuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvYyx2b2lkIDAsdm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5p'@;
put 'c0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQoYS5hdXRvZGVwbG95RG9uZT0hMSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExLGEucmVjcmVhdGVEYXRhYmFzZT9hLmNyZWF0ZURh'@;
put 'dGFiYXNlKCk6YS5hdXRvZGVwbG95RG9uZT0hMH0pKCl9Y3JlYXRlRGF0YWJhc2UoKXt0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21w'@;
put 'dXRlQXBpOiExLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihoPT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpT'@;
put 'T04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShoLnJlc3VsdCYmaC5yZXN1bHQubGVuZ3RoPjApfSkuY2F0Y2goaD0+e3RoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlz'@;
put 'LmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9fSl9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1vbkpz'@;
put 'b25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChhKXshMD09PWEudGFyZ2V0LmNo'@;
put 'ZWNrZWQmJih0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9bmF2aWdh'@;
put 'dGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh2bCksdHQoJGVlKSx0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9t'@;
put 'YXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ2LHZhcnM6MTAsY29uc3RzOltbImNsYXNzIiwiYXV0by1kZXBsb3kiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwi'@;
put 'Y2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwibXQtMCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5n'@;
put 'ZSIsImNsaWNrIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwz'@;
put 'LCJjbGljayJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNsaWNrIiwiY2hhbmdlIl0sWyJ1cGxvYWRKc29uQXV0byIsIiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFs'@;
put 'LWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbNCwibmdJZiJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJt'@;
put 'LTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEsInctMTAwIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2ly'@;
put 'Y2xlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1zdGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMs'@;
put 'ImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3kt'@;
put 'ZXJyb3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTtKZSgwLHRFZSw0LDIsImRpdiIsMCksbWUoMSwiaDQiLDEpLE5lKDIsIlZpeWEgRGVwbG95IikseWUoKSxxdCgzLCJociIpLG1lKDQsImxhYmVsIiwyKSxOZSg1LCJBcHAgTG9jIikseWUoKSxtZSg2'@;
put 'LCJkaXYiLDMpKDcsImRpdiIsNCkoOCwicCIsNSksTmUoOSkseWUoKSgpKCksbWUoMTAsImxhYmVsIiwyKSxOZSgxMSwiREMgTG9jIikseWUoKSxtZSgxMiwiZGl2IiwzKSgxMywiZGl2Iiw0KSgxNCwicCIsNSksTmUoMTUpLHllKCkoKSgpLG1lKDE2LCJsYWJlbCIsMiksTmUoMTcsIlNBUyBB'@;
put 'ZG1pbiBncm91cCIpLHllKCksbWUoMTgsImRpdiIsMykoMTksImRpdiIsNCkoMjAsInAiLDUpLE5lKDIxKSx5ZSgpKCkoKSxtZSgyMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMywiaW5wdXQiLDYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURh'@;
put 'dGFiYXNlPV99KSgiY2xpY2siLGZ1bmN0aW9uKF8pe3JldHVybiBkLnJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKF8pfSkseWUoKSxtZSgyNCwibGFiZWwiKSxOZSgyNSwiUmVjcmVhdGUgZGF0YWJhc2UiKSx5ZSgpKCkscXQoMjYsImhyIiksbWUoMjcsImJ1dHRvbiIsNykseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLmV4ZWN1dGVKc29uKCl9KSxOZSgyOCkseWUoKSxtZSgyOSwiYnV0dG9uIiw4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGgpLGp0KCRpKDMyKS5jbGljaygpKX0pLE5lKDMwLCIgVXBsb2FkIGRpZmZlcmVudCBmaWxlIHRvIGRlcGxveVxuIiks'@;
put 'eWUoKSxtZSgzMSwiaW5wdXQiLDksMTApLHh0KCJjbGljayIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuY2xlYXJVcGxvYWRJbnB1dChfKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm9uSnNvbkZpbGVDaGFuZ2UoXyl9KSx5ZSgpLG1lKDMzLCJjbHItbW9kYWwiLDExKSx4dCgiY2xy'@;
put 'TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9X30pLG1lKDM0LCJoMyIsMTIpLE5lKDM1LCJXYXJuaW5nIikseWUoKSxtZSgzNiwiZGl2IiwxMyksTmUoMzcsIiBUaGlzIGFjdGlvbiB3aWxsIHJlY3JlYXRlIHRoZSBkYXRhYmFzZSAo'@;
put 'aWYgaXQgZXhpc3RzKS4gRm9yIGFuIGluaXRpYWwgZGVwbG95bWVudCwgdGhpcyBpcyBleHBlY3RlZC4gSWYgdGhpcyBpcyBhIHJlLWRlcGxveW1lbnQsIHlvdSB3aWxsIGxvc2UgYW55IGV4aXN0aW5nIHRhYmxlcyBpbiAiKSxtZSgzOCwic3Ryb25nIiksTmUoMzkpLHllKCksTmUoNDAsIi4g'@;
put 'IikseWUoKSxtZSg0MSwiZGl2IiwxNCkoNDIsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsZC5yZWNyZWF0ZURhdGFiYXNlPSExfSksTmUoNDMsIiBDYW5jZWwgIikseWUoKSxtZSg0NCwiYnV0dG9uIiwxNSkseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxkLnJlY3JlYXRlRGF0YWJhc2U9ITB9KSxOZSg0NSwiIE9rICIpLHllKCkoKSgpfTImYSYmKFJlKCJuZ0lmIixkLmF1dG9kZXBsb3lpbmcpLENlKDkpLG9yKGQuYXBwTG9jKSxDZSg2KSxvcihkLmRj'@;
put 'UGF0aCksQ2UoNiksb3IoZC5zZWxlY3RlZEFkbWluR3JvdXApLENlKDIpLFJlKCJuZ01vZGVsIixkLnJlY3JlYXRlRGF0YWJhc2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWQuanNvbkZpbGUpLENlKDEpLGdyKCIgRGVwbG95ICIsZC5qc29uRmlsZT8iIjoiKGpzb24gZmlsZSBpcyBub3QgYXZh'@;
put 'aWxhYmxlKSIsIlxuIiksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltaaSxTMCxCcyxPcyxrYSxvdSxzdSxVcyxEMCxUMF0sc3R5bGVzOlsiLmF1'@;
put 'dG8tZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjQpO3otaW5kZXg6MTAwfS5zcGlubmVyLWJveFtfbmdjb250'@;
put 'ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFw'@;
put 'eCA4cHggIzAwMDAwMDgyfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3dpZHRoOjEwMCV9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LmRlcGxveS1zdWNjZXNzW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjojNmVjZjQ0fS5kZXBsb3ktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmRlcGxveS11bmRldGVybWluYXRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2NhY2FjYX1ocltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLWJv'@;
put 'dHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMjcwNTg4MjM1Myl9Il19KSxjfSkoKTtmdW5jdGlvbiByRWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDYpKDEsInAiLDcpLE5lKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSx5ZSgpLG1lKDMsImxhYmVsIiw4KSxOZSg0LCJVc2VybmFtZSIpLHll'@;
put 'KCksbWUoNSwiZGl2Iiw5KSg2LCJkaXYiLDEwKSxxdCg3LCJpbnB1dCIsMTEpLHllKCkoKSxtZSg4LCJsYWJlbCIsMTIpLE5lKDksIlBhc3N3b3JkIikseWUoKSxtZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCkscXQoMTIsImlucHV0IiwxMykseWUoKSgpLG1lKDEzLCJidXR0b24iLDE0KSxO'@;
put 'ZSgxNCwiTG9nIGluIikseWUoKSgpKX1mdW5jdGlvbiBpRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLmlkKSxDZSgxKSxncigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIG9FZShjLGwp'@;
put 'e2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBzRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSxKZSgyLG9F'@;
put 'ZSwyLDEsInNwYW4iLDUpLGJhKDMsImpzb24iKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLm5hbWUpLENlKDEpLGdyKCIgIixhLm5hbWUsIiAiKSxDZSgxKSxSZSgibmdJZiIsInt9IiE9WmwoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBhRWUoYyxs'@;
put 'KXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IikseWUoKSl9ZnVuY3Rpb24gbEVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5k'@;
put 'b3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSkscXQoMSwiY2xyLWljb24iLDM4KSx5ZSgpfX1mdW5jdGlvbiBjRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiwzOSksTmUoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLHllKCkscXQoMywiaHIiKSxtZSg0LCJk'@;
put 'aXYiKSg1LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLE5lKDYsIiBEb3dubG9hZCBsb2cgIikseWUoKSgpLHpyKCl9fWZ1'@;
put 'bmN0aW9uIHVFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIGRFZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInNwYW4iLDI1KSxOZSgyLCIgVmFs'@;
put 'aWRhdGluZyBkZXBsb3kuLi4gIikseWUoKSxtZSgzLCJzcGFuIiksTmUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHllKCksenIoKSl9ZnVuY3Rpb24gaEVlKGMsbCl7MSZjJiYoVnIoMCkscXQoMSwiY2xyLWljb24iLDQ2KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gZmFp'@;
put 'bGVkICIpLHllKCksenIoKSl9ZnVuY3Rpb24gZkVlKGMsbCl7MSZjJiYoVnIoMCkscXQoMSwiY2xyLWljb24iLDQ3KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLHllKCksenIoKSl9ZnVuY3Rpb24gcEVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NSks'@;
put 'SmUoMSxkRWUsNSwwLCJuZy1jb250YWluZXIiLDUpLEplKDIsaEVlLDQsMCwibmctY29udGFpbmVyIiw1KSxKZSgzLGZFZSw0LDAsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksQ2UoMSksUmUoIm5nSWYi'@;
put 'LCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxDZSgxKSxSZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIGdFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsInAi'@;
put 'LDM5KSxOZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIikseWUoKSxxdCgzLCJociIpLEplKDQsdUVlLDIsMSwiZGl2Iiw0MSksbWUoNSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLE5lKDYs'@;
put 'IiBMZXQncyBnZXQgc3RhcnRlZCAiKSx5ZSgpLG1lKDcsImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxO'@;
put 'ZSg4LCIgRG93bmxvYWQgbG9nICIpLHllKCksbWUoOSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLE5lKDEwLCIgVmFsaWRhdGUgIikseWUoKSxKZSgxMSxwRWUsNCwzLCJkaXYiLDQzKSx6cigpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxSZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxDZSg3KSxSZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19Y29uc3QgdE49ZnVuY3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZToh'@;
put 'MH19O2Z1bmN0aW9uIG1FZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImZvcm0iKSgyLCJkaXYiLDE1KSgzLCJsYWJlbCIsMTYpLE5lKDQsIkFkbWluIGdyb3VwIikseWUoKSxtZSg1LCJkaXYiLDE3KSg2LCJkaXYiLDE4KSg3LCJzZWxlY3QiLDE5KSx4dCgibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpfSksSmUoOCxpRWUsMiwyLCJvcHRpb24iLDIwKSx5ZSgpKCkoKSgpLG1lKDksImRpdiIsMTUpKDEwLCJkaXYiKSgxMSwibGFiZWwiLDE2KSxOZSgxMiwiQ29udGV4dCIpLHllKCks'@;
put 'bWUoMTMsImRpdiIsMTcpKDE0LCJkaXYiLDE4KSgxNSwic2VsZWN0IiwyMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnNlbGVjdGVkQ29udGV4dD1oKX0pLEplKDE2LHNFZSw0LDUsIm9wdGlvbiIsMjApLHllKCkoKSgpLG1lKDE3LCJidXR0'@;
put 'b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxxdCgxOCwiY2xyLWljb24iLDIzKSx5ZSgpKCksbWUoMTksImRpdiIsMjQpKDIwLCJzcGFuIiwyNSksTmUoMjEsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLHll'@;
put 'KCksbWUoMjIsInNwYW4iKSxOZSgyMywiIExvYWRpbmcgY29udGV4dHMuLi4gIikseWUoKSgpLG1lKDI0LCJsYWJlbCIsMjYpLE5lKDI1LCJEQyBMb2MiKSx5ZSgpLG1lKDI2LCJkaXYiLDkpKDI3LCJkaXYiLDEwKSgyOCwiaW5wdXQiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZGNQYXRoPWgpfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNhdmVEY1BhdGgoKSl9KSx5ZSgpKCkoKSxtZSgyOSwicCIsMjgpLE5lKDMwLCIgU2VsZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQg'@;
put 'ZmlsZSBwcmVsb2FkZWQpOiAiKSx5ZSgpLG1lKDMxLCJkaXYiLDI5KSgzMiwiaW5wdXQiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCku'@;
put 'b25Kc29uRmlsZUNoYW5nZShoKSl9KSx5ZSgpKCksbWUoMzMsImRpdiIsMzEpKDM0LCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0ZUpzb24oKSl9KSxOZSgzNSwiIFNVQk1JVCBKU09OICIpLHllKCksSmUoMzYsYUVlLDIsMCwi'@;
put 'c3BhbiIsNSkseWUoKSxtZSgzNywicCIsMjgpLE5lKDM4LCJTZWxlY3QgU0FTIGZpbGUgdG8gdXBsb2FkOiIpLHllKCksbWUoMzksImRpdiIsMjkpKDQwLCJpbnB1dCIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9'@;
put 'KSgiY2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCk7cmV0dXJuIGYub25TYXNGaWxlQ2hhbmdlKGgpLGp0KGYuZG93bmxvYWRGaWxlQnRuPSEwKX0pLHllKCksSmUoNDEsbEVlLDIsMCwiYnV0dG9uIiwzMykseWUoKSxtZSg0MiwiZGl2IiwzMSkoNDMsImJ1dHRvbiIsMzQp'@;
put 'LHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5leGVjdXRlU0FTKCkpfSksTmUoNDQsIiBTVUJNSVQgIikseWUoKSgpKCksSmUoNDUsY0VlLDcsMCwibmctY29udGFpbmVyIiw1KSxtZSg0NiwiYnV0dG9uIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBCdChhKSxqdChWZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksTmUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIikseWUoKSxKZSg0OCxnRWUsMTIsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksUmUoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwKSgibmdNb2RlbE9wdGlvbnMiLCRzKDE5LHROKSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpLENlKDIpLGRyKCJoaWRkZW4iLGEuY29udGV4dHNMb2FkaW5nKSxDZSg1KSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZENvbnRleHQpKCJuZ01vZGVsT3B0aW9ucyIsJHMo'@;
put 'MjAsdE4pKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksQ2UoMyksZHIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSxDZSg5KSxSZSgibmdNb2RlbCIsYS5kY1BhdGgpKCJuZ01vZGVsT3B0aW9ucyIsJHMoMjEsdE4pKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsYS5pc1N1'@;
put 'Ym1pdHRpbmdKc29uKSxDZSgyKSxSZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLENlKDUpLFJlKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksQ2UoMiksUmUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxDZSgyKSxSZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLENlKDEp'@;
put 'LFJlKCJjbHJMb2FkaW5nIixhLmNyZWF0ZURhdGFiYXNlTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCl9fWxldCB2RWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuZGVwbG95U2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIsdGhpcy5uZWVkc0xvZ2luPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5hbGxDb250ZXh0'@;
put 'cz1bXSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLnNlbGVjdGVkQ29udGV4dD0iIix0aGlzLmpvYkxvZz0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5saW5lc09mQ29kZT1bXSx0aGlzLmZpbGVOYW1lPSIiLHRo'@;
put 'aXMucHJlbG9hZGVkRmlsZT0hMCx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSExLHRoaXMuY29udGV4dHNMb2FkaW5nPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuZXhlY3V0aW5nU2NyaXB0PSExLHRoaXMuZG93bmxvYWRGaWxlQnRuPSExLHRoaXMuaXNWYWxpZGF0aW5n'@;
put 'PSExLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9Im5vbmUifW5nT25Jbml0KCl7fWV4ZWN1dGFibGVDb250ZXh0KCl7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJV'@;
put 'cGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZmlsZU5hbWU9ZC5uYW1lO2xldCBoPW5ldyBGaWxlUmVhZGVyO2gub25s'@;
put 'b2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIhPT1mJiZudWxsIT09ZiksdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5l'@;
put 'cygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygp'@;
put 'e3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07'@;
put 'YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNl'@;
put 'LmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEu'@;
put 'c2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHZvaWQgMCx2b2lkIDAsITApLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04u'@;
put 'c3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2Usdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1gKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfWV4ZWN1dGVTQVMoKXt2YXIg'@;
put 'YT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2FzSnMuZXhlY3V0ZVNjcmlwdCh7ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5lc09mQ29kZTphLmxpbmVzT2ZD'@;
put 'b2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxvZykpLCJlcnJvciI9PT1kLmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6YS5qb2JMb2c9ZC5sb2cuaXRl'@;
put 'bXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVhdGVEYXRhYmFzZShhPSEwKXtpZihhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2Uu'@;
put 'Z2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5zZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9k'@;
put 'ZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlz'@;
put 'LmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTohMSxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5z'@;
put 'dHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0'@;
put 'aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50'@;
put 'aGVuKGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEpLHRoaXMudmFsaWRhdGlvblN0YXRlPWEuc2FzbGlicz8ic3VjY2VzcyI6ImVycm9yIix0aGlzLmlzVmFsaWRhdGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iZXJyb3Ii'@;
put 'fSl9ZGVsZXRlS2V5cygpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJkZXBsb3lfZGNfbG9jIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dCh2bCksdHQodzApLHR0KCRlZSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJhcHAtbWFudWFsLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVj'@;
put 'bHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlubGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRl'@;
put 'IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxbImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJl'@;
put 'bCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsidHlwZSIsInRleHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3'@;
put 'b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5Hcm91cCIsImlkIiwiYWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUi'@;
put 'LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwibXItMTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJuYW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRj'@;
put 'bG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCJdLFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1m'@;
put 'bGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJjbGFzcyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsckxv'@;
put 'YWRpbmciLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMywidmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwi'@;
put 'bWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIs'@;
put 'NCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1l'@;
put 'KDAsImRpdiIsMCksTmUoMSwiIENvbmZpZ3VyYXRvciAiKSxtZSgyLCJwIiwxKSxOZSgzKSx5ZSgpLG1lKDQsImJ1dHRvbiIsMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRlbGV0ZUtleXMoKX0pLE5lKDUsIiBDbGVhciBtZW1vcnkgIikseWUoKSgpLG1lKDYsImRpdiIsMyks'@;
put 'SmUoNyxyRWUsMTUsMCwiZGl2Iiw0KSxKZSg4LG1FZSw0OSwyMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKSwyJmEmJihDZSgzKSxncigiQXBwIExvY2F0aW9uOiAiLGQuYXBwTG9jLCIiKSxDZSg0KSxSZSgibmdJZiIsZC5uZWVkc0xvZ2luKSxDZSgxKSxSZSgibmdJZiIsIWQubmVlZHNMb2dp'@;
put 'bikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLENwLGwxLGMxLFdhLE0wLEJzLHdwLE9zLHIyLGthLFp1LGRoLFVzLG9HXSxzdHlsZXM6WyIuY2xlYXItbWVtb3J5LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cmlnaHQ6MTBweDt0b3A6MnB4fSJdfSksY30pKCk7ZnVuY3Rpb24gX0VlKGMsbCl7'@;
put 'MSZjJiYobWUoMCwiZGl2IiwxNSkscXQoMSwicHJvZ3Jlc3MiKSx5ZSgpKX1mdW5jdGlvbiBiRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDE2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLkdST1VQTkFNRSksQ2UoMSksemMoIiAiLGEu'@;
put 'R1JPVVBOQU1FLCIgLSAiLGEuR1JPVVBERVNDLCIgIil9fWxldCB5RWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zYXNqc1NlcnZpY2U9ZCx0aGlzLmxvY2F0aW9uPWgsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcs'@;
put 'dGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBFcix0aGlzLmRjRGlyZWN0b3J5PSIiLHRoaXMuZGNBZG1pbkdyb3VwPSJEQ0RFRkFVTFQiLHRoaXMuTUVUQVBFUlNPTj0ibi9hIix0aGlzLk1FVEFVU0VSPSJuL2EiLHRoaXMuU1lTVVNFUklEPSJuL2EiLHRoaXMuU1lTSE9TVE5BTUU9Im4vYSIs'@;
put 'dGhpcy5TWVNWTE9ORz0ibi9hIix0aGlzLmRjQWRtaW5Hcm91cExpc3Q9W10sdGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0xvZ291dD0hMSx0aGlzLnRtcERpcmVjdG9yaWVzPXtsaW51eDoiL3RtcC9EYXRhQ29udHJvbGxlciIsd2luZG93czoiQzpcXERhdGFDb250cm9sbGVyIn19bmdPbklu'@;
put 'aXQoKXt0aGlzLmdldFVzZXJHcm91cHMoKSx0aGlzLmdldFNlcnZlckluZm8oKX1nZXRTZXJ2ZXJJbmZvKCl7dGhpcy5zYXNqc1NlcnZpY2UuZ2V0U2VydmVySW5mbygpLnN1YnNjcmliZShhPT57ImRlc2t0b3AiIT09YS5tb2RlJiYodGhpcy5zaG93TG9nb3V0PSEwKX0pfWdldFVzZXJHcm91'@;
put 'cHMoKXt0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIixudWxsKS50aGVuKGE9Pnt0aGlzLk1FVEFQRVJTT049YS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuU1lTVVNFUklELHRoaXMuU1lTSE9TVE5BTUU9YS5T'@;
put 'WVNIT1NUTkFNRSx0aGlzLlNZU1ZMT05HPWEuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuU1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlz'@;
put 'dD1hLmdyb3Vwcyx0aGlzLmRjQWRtaW5Hcm91cD10aGlzLmRjQWRtaW5Hcm91cExpc3RbMF0uR1JPVVBOQU1FLHRoaXMubG9hZGluZz0hMX0sYT0+e3RoaXMubG9hZGluZz0hMX0pfW1ha2VEYXRhKCl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtjb25zdCBoPXRo'@;
put 'aXMuc2FzSnNDb25maWcuYXBwTG9jO2xldCBmPXRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsLF89dGhpcy5kY0RpcmVjdG9yeTt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1aYy5ELlNhc2pzP3RoaXMuc2FzU2VydmljZS5zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKS50aGVuKFc9PntX'@;
put 'JiYodGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi8iKSxsb2NhdGlvbi5yZWxvYWQoKSl9KTp0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1aYy5ELlNhczkmJihmPSIiLGQ9d2luZG93LmxvY2F0aW9uLm9yaWdpbitkKyIvIixfPWVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmRjRGly'@;
put 'ZWN0b3J5KSksd2luZG93Lm9wZW4oYCR7Znx8IiJ9JHtkfT9fcHJvZ3JhbT0ke2h9L3NlcnZpY2VzL2FkbWluL21ha2VkYXRhJmFkbWluPSR7dGhpcy5kY0FkbWluR3JvdXB9JnBhdGg9JHtffSBgLCJfYmxhbmsiKX1sb2dvdXQoKXt0aGlzLnNhc1NlcnZpY2UubG9nb3V0KCl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dChvcSksdHQoSmQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pz'@;
put 'Q29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDEsdmFyczo5LGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxv'@;
put 'b3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3Jh'@;
put 'cHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFs'@;
put 'dWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIs'@;
put 'Imxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihKZSgwLF9FZSwyLDAsImRpdiIsMCksbWUoMSwiaDQiLDEpLE5lKDIsIlNhc2pzIERlcGxveSIpLHllKCkscXQoMywiaHIiLDIpLG1lKDQsInAiLDMpLE5lKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250'@;
put 'cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSx5ZSgpLG1lKDYsInAiLDQpLE5lKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSBiZWxvdywgdG8gd2hpY2ggdXNlciAiKSxtZSg4LCJzdHJvbmciKSxOZSg5'@;
put 'KSx5ZSgpLE5lKDEwLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyOlxuIikseWUoKSxtZSgxMSwibGFiZWwiLDUpLE5lKDEyLCJEQyBEaXJlY3RvcnkiKSx5ZSgpLG1lKDEzLCJkaXYiLDYpKDE0LCJkaXYiLDcpKDE1LCJpbnB1dCIsOCkseHQoIm5nTW9kZWxDaGFu'@;
put 'Z2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRjRGlyZWN0b3J5PWZ9KSx5ZSgpKCkoKSxtZSgxNiwicCIsNCksTmUoMTcsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENv'@;
put 'bnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSx5ZSgpLG1lKDE4LCJsYWJlbCIsNSksTmUoMTksIkRhdGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLHllKCksbWUoMjAs'@;
put 'ImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyMSwic2VsZWN0IiwxMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRjQWRtaW5Hcm91cD1mfSksSmUoMjIsYkVlLDIsMywib3B0aW9uIiwxMSkseWUoKSgpLG1lKDIzLCJwIiw0KSxOZSgyNCwiIE5vdywgY3JlYXRl'@;
put 'IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBkZXBsb3kgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2luZyB0aGUgYWRtaW4gZ3JvdXAgc2VsZWN0ZWQgYWJvdmU6XG4iKSx5ZSgpLG1lKDI1LCJkaXYiLDEyKSgyNiwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1h'@;
put 'a2VEYXRhKCl9KSxOZSgyNywiIFNVQk1JVCAiKSx5ZSgpKCkscXQoMjgsImhyIiwyKSxtZSgyOSwiZGl2IiwxNCkoMzAsInAiKSxOZSgzMSwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLHllKCksbWUoMzIsInVsIikoMzMsImxpIiksTmUoMzQp'@;
put 'LHllKCksbWUoMzUsImxpIiksTmUoMzYpLHllKCksbWUoMzcsImxpIiksTmUoMzgpLHllKCksbWUoMzksImxpIiksTmUoNDApLHllKCkoKSgpKSwyJmEmJihSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSg5KSxvcihkLlNZU1VTRVJJRCksQ2UoNiksUmUoIm5nTW9kZWwiLGQuZGNEaXJlY3Rvcnkp'@;
put 'LENlKDYpLFJlKCJuZ01vZGVsIixkLmRjQWRtaW5Hcm91cCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZGNBZG1pbkdyb3VwTGlzdCksQ2UoMTIpLGdyKCJNRVRBUEVSU09OOiAiLGQuTUVUQVBFUlNPTiwiIiksQ2UoMiksZ3IoIlNZU1VTRVJJRDogIixkLlNZU1VTRVJJRCwiIiksQ2UoMiksZ3Io'@;
put 'IlNZU0hPU1ROQU1FOiAiLGQuU1lTSE9TVE5BTUUsIiIpLENlKDIpLGdyKCJTWVNWTE9ORzogIixkLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsTTAsQnMsT3MsVXMsTjgsSDhdLHN0eWxlczpbIi5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVde3dpZHRoOjUwdnd9LmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50aGluUHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH0udGhpblByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0b3A6MH0iXX0pLGN9KSgpO2Z1bmN0aW9uIHdFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRp'@;
put 'diIsNCkoMSwiZGl2Iiw1KSxOZSgyLCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLHllKCksbWUoMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsInAiKSxOZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBC'@;
put 'ZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksbWUoNywiYSIsOCksTmUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdy'@;
put 'ZWVtZW50IikseWUoKSxOZSg5LCIuICIpLHllKCkoKSxxdCgxMCwiaHIiLDkpLG1lKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsMTApLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudGVybXNBZ3JlZUNoYW5nZSgpKX0pLHllKCksbWUo'@;
put 'MTMsImxhYmVsIiksTmUoMTQsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLG1lKDE1LCJhIiw4KSxOZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiBDRWUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE1KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTYpLHh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1WZSgzKTtDZSgxKSxSZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gU0VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNykoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykub25OYXZpZ2F0'@;
put 'ZVRvSG9tZSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIE1FZShjLGwpe2lmKDEmYyYm'@;
put 'KFZyKDApLEplKDEsQ0VlLDIsNiwiZGl2IiwxMyksSmUoMixTRWUsMiwzLCJkaXYiLDE0KSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEuYXV0b2RlcGxveSksQ2UoMSksUmUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiB4RWUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCksenIoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoMik7Q2UoMiksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIEVFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIs'@;
put 'MTUpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLHllKCkoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgic2FzSnMiLGEu'@;
put 'c2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24ga0VlKGMsbCl7aWYoMSZjJiYoVnIoMCwxMSksSmUoMSxNRWUsMywyLCJuZy1jb250YWluZXIiLDEyKSxKZSgyLHhFZSwzLDMsIm5nLWNv'@;
put 'bnRhaW5lciIsMTIpLEplKDMsRUVlLDMsMywibmctY29udGFpbmVyIiwxMiksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoIm5nU3dpdGNoIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEp'@;
put 'LFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgcWVlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRo'@;
put 'aXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPVpjLkQsdGhpcy5kY0FkYXB0ZXJT'@;
put 'ZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlz'@;
put 'LnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRf'@;
put 'c2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PVpjLkQuU2FzVml5YSYmZmV0'@;
put 'Y2goInNhc2J1aWxkL3ZpeWEuanNvbiIpLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPW51bGw7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmpzb25GaWxlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmpzb25GaWxl'@;
put 'KSl9KSx0aGlzLnNldERlcGxveURlZmF1bHRzKCl9c2V0RGVwbG95RGVmYXVsdHMoKXt0aGlzLmRjUGF0aD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5kY1BhdGh8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFkbWluR3JvdXB8fCIiLHRoaXMu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwfHwodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIil9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYXV0b2RlcGxveXx8dGhpcy5nZXRBZG1pbkdyb3VwcygpLHRoaXMuc3RlcCsrfWdldEFkbWluR3JvdXBzKCl7ZmV0Y2godGhpcy5z'@;
put 'YXNKc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD01MDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZDt0cnl7ZD1KU09OLnBhcnNlKGEpfWNhdGNoKGgp'@;
put 'e2NvbnNvbGUuZXJyb3IoaCl9ZCYmKHRoaXMuYWRtaW5Hcm91cHM9ZC5pdGVtcyx0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmFkbWluR3JvdXBzWzBdLmlkKX0pfW9uTmF2aWdhdGVUb0hvbWUoKXt3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0sIl9ibGFuayIp'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlOCksdHQob2EpLHR0KHcwKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxk'@;
put 'ZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRDUyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiaWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2Fy'@;
put 'ZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0'@;
put 'eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1z'@;
put 'ZWN0aW9uIiwiY2FyZCJdLFszLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJvbk5hdmlnYXRlVG9Ib21lIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsInNhc0pzIiwic2FzSnND'@;
put 'b25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsIm9uTmF2aWdhdGVUb0hvbWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksSmUoMix3RWUsMTcsMCwiZGl2IiwyKSx5ZSgpLEplKDMsa0VlLDQsNCwibmctY29udGFpbmVyIiwzKSx5ZSgp'@;
put 'KSwyJmEmJihDZSgyKSxSZSgibmdJZiIsMD09PWQuc3RlcCksQ2UoMSksUmUoIm5nSWYiLGQuc3RlcD4wKSl9LGRlcGVuZGVuY2llczpbWmksbmQsdGgsVXMsRDAsVDAsbkVlLHZFZSx5RWVdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmJ0bltfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjYzljOWM5O3BhZGRpbmc6MTBweDtvdmVyZmxvdzphdXRvO3doaXRlLXNwYWNlOnByZS13cmFw'@;
put 'fSNjb250ZXh0cy1idG5bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4IDAgMDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRp'@;
put 'b24tYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udmFsaWRhdGlvbi1iYXJbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo1cHh9LmF1dG9kZXBs'@;
put 'b3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDE1cHh9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNoZWNrYm94LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4IDB9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuYnRuLWF1dG9kZXBsb3lbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE1cHggMH0iXX0pLGN9KSgpO2NvbnN0IEFFZT1be3BhdGg6IiIsY29tcG9uZW50OnFlZX0se3BhdGg6Im1hbnVhbGRlcGxveSIsY29tcG9uZW50OnFlZX1dO2xl'@;
put 'dCBURWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbaGMuZm9yQ2hpbGQoQUVlKSxoY119KSxjfSkoKSxERWU9KCgpPT57Y2xhc3Mg'@;
put 'Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28scWwsX3UsVEVlXX0pLGN9KSgpO0YoODcxMyksRig1NjU4KSxGKDkxOTQ1KTt2YXIgTEVlPUYoNzA4OTYp'@;
put 'O2Z1bmN0aW9uIEtlZShjKXtjb25zdCBsPWMubGVuZ3RoO2xldCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1dLGErPTF9ZnVuY3Rpb24gbk4oYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIEtiKGMpe2NvbnN0IGw9W107'@;
put 'aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18fDA9PT1jWzBdLmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMubGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9'@;
put 'ZnVuY3Rpb24gQWwoYyxsLGEsZCl7bGV0IGg9LTEsZj1jLF89YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJheS5mcm9tKGMpKTtjb25zdCBUPWYubGVuZ3RoO2ZvcihkJiZUJiYoaCs9MSxfPWZbaF0pLGgrPTE7aDxUOylfPWwoXyxmW2hdLGgsZiksaCs9MTtyZXR1cm4gX31mdW5jdGlvbiBf'@;
put 'MShjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgXz0tMTtmb3IoO2E8aDspe2NvbnN0IFQ9ZFthXTtsKFQsYSxkKSYmKF8rPTEsZltfXT1UKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uIGNzKGMsbCl7'@;
put 'bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCBfPS0xO2Zvcig7YTxoOylfKz0xLGZbX109bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBEbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJy'@;
put 'YXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2FdLGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gWGVlKGMpe3JldHVybiBBbChjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gSUVlKGMpe3JldHVybiBBbChjLChsLGEpPT5sPmE/'@;
put 'bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIFJFZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBPRWUoYyl7cmV0dXJuIGMubGVuZ3RoP1hlZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9u'@;
put 'IEplZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bC5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9KZWUoYSk6YSksW10pfWZ1bmN0aW9uIHJOKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+ey0xPT09bC5pbmRleE9mKGEpJiZsLnB1c2goYSl9KSxsfWZ1bmN0aW9uIGlOKCl7Zm9yKHZhciBj'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gRG4oaCxfPT57Zj1mLmZpbHRlcihUPT4hXy5pbmNsdWRlcyhUKSl9KSxmfWZ1bmN0aW9uIFBFZSgpe2Zvcih2YXIg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIERuKGgsXz0+e2Y9Zi5maWx0ZXIoVD0+Xy5pbmNsdWRlcyhUKSl9KSxmfWZ1bmN0aW9uIEZFZSgpe2Zvcih2YXIg'@;
put 'Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdLGY9bmV3IFNldChkKTtyZXR1cm4gRG4oaCxfPT57RG4oXyxUPT57Zi5oYXMoVCl8fGYuYWRkKFQpfSl9KSxBcnJheS5mcm9tKGYpfWZ1bmN0'@;
put 'aW9uIG9OKGMpe3JldHVybiBjLnNwbGl0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiICIpfWZ1bmN0aW9uIEFhKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtk'@;
put 'LTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gQWwoYywoZixfLFQpPT5mK18ucmVwbGFjZSgvXHI/XG5ccyovZywiIikrKGFbVF0/YVtUXToiIiksIiIpLnRyaW0oKX1mdW5jdGlvbiBfbChjKXtsZXQgbDtzd2l0Y2godHlwZW9mIGMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD1gJHtjfWA7'@;
put 'YnJlYWs7Y2FzZSJvYmplY3QiOmw9bnVsbD09PWM/IiI6Yy50b1N0cmluZygpO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPSIiO2JyZWFrO2RlZmF1bHQ6bD1jLnRvU3RyaW5nKCl9cmV0dXJuIGx9ZnVuY3Rpb24gS2koYyl7cmV0dXJuIHR5cGVvZiBjPCJ1In1mdW5jdGlvbiBJYShjKXtyZXR1'@;
put 'cm4gdHlwZW9mIGM+InUifWZ1bmN0aW9uIGdjKGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHxJYShjKX1mdW5jdGlvbiBRZWUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9Y29uc3QgWGI9Imxlbmd0aCIsSmI9Yz0+cGFy'@;
put 'c2VJbnQoYywxNiksZXRlPWM9PnBhcnNlSW50KGMsMTApLG5rPShjLGwsYSk9PmMuc3Vic3RyKGwsYSksUWI9Yz0+Yy5jb2RlUG9pbnRBdCgwKS02NSxzTj1jPT5gJHtjfWAucmVwbGFjZSgvXC0vZywiIiksSEVlPWM9PkpiKG5rKHNOKGMpLEpiKCIxMiIpLFFiKCJGIikpKS8oSmIobmsoc04o'@;
put 'YyksUWIoIkIiKSx+fiFbXVtYYl0pKXx8OSksTkVlPSgpPT50eXBlb2YgbG9jYXRpb248InUiJiYvXihbYS16MC05XC1dK1wuKT9ceDY4XHg2MVx4NkVceDY0XHg3M1x4NkZceDZFXHg3NFx4NjFceDYyXHg2Q1x4NjVceDJFXHg2M1x4NkZceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7bGV0'@;
put 'IHR0ZT0hMTtjb25zdCBudGU9e2ludmFsaWQ6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOmM9'@;
put 'PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBBYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gUmVu'@;
put 'ZXcgeW91ciBsaWNlbnNlIGtleSBhdCBoYW5kc29udGFibGUuY29tIG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3JceDIwCiAgICB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzYWxlc0BoYW5kc29udGFibGUuY29tLmB9LG1pc3Np'@;
put 'bmc6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1'@;
put 'c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdFx4MjAKICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLG5v'@;
put 'bl9jb21tZXJjaWFsOigpPT4iIn0scnRlPXtpbnZhbGlkOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIg'@;
put 'dGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXHgyMAogICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxleHBpcmVk'@;
put 'OmM9PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBBYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4g'@;
put 'PGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55XHgyMAog'@;
put 'ICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYH0sbWlzc2luZzooKT0+QWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91'@;
put 'ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29t'@;
put 'bWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gYWJvdXQgaXQgaW5ceDIwCiAgICB0aGUgZG9jdW1lbnRhdGlv'@;
put 'biBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9O2Z1bmN0aW9uIGl0ZShjLGwpe2NvbnN0IGE9IWdjKGMpLGQ9InN0cmluZyI9PXR5cGVv'@;
put 'ZiBjJiYibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPT09Yy50b0xvd2VyQ2FzZSgpLGg9IjEzLjEuMCI7bGV0IGYsXz0iaW52YWxpZCIsVD0iaW52YWxpZCI7Y29uc3QgVz1mdW5jdGlvbiBWRWUoYyl7bGV0IGw9W11bWGJdLGE9bDtpZihjW1hiXSE9PVFiKCJaIikpcmV0dXJuITE7'@;
put 'Zm9yKGxldCBkPSIiLGg9IkI8SDRQKyIuc3BsaXQoIiIpLGY9UWIoaC5zaGlmdCgpKTtmO2Y9UWIoaC5zaGlmdCgpfHwiQSIpKS0tZjwiIltYYl0/YXw9KGV0ZShgJHtldGUoSmIoZCkrKEpiKG5rKGMsTWF0aC5hYnMoZiksMikpK1tdKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpk'@;
put 'PW5rKGMsZixmPzE9PT1oW1hiXT85Ojg6Nik7cmV0dXJuIGE9PT1sfShjPXNOKGN8fCIiKSk7aWYoYXx8ZHx8VylpZihXKXtjb25zdCBpZT1LbygiMzEvMDgvMjAyMyIsIkREL01NL1lZWVkiKSxwZT1NYXRoLmZsb29yKGllLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksd2U9SEVlKGMpO2Y9'@;
put 'S28oODY0ZTUqKHdlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIikscGU+d2U/KF89ImV4cGlyZWQiLFQ9ImV4cGlyZWQiKTooXz0idmFsaWQiLFQ9InZhbGlkIil9ZWxzZSBkPyhfPSJub25fY29tbWVyY2lhbCIsVD0idmFsaWQiKTooXz0iaW52YWxpZCIsVD0iaW52YWxpZCIpO2Vs'@;
put 'c2UgXz0ibWlzc2luZyIsVD0ibWlzc2luZyI7aWYoTkVlKCkmJihfPSJ2YWxpZCIsVD0idmFsaWQiKSwhdHRlJiYidmFsaWQiIT09XyYmKG50ZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PV8/ImluZm8iOiJ3YXJuIl0o'@;
put 'bnRlW19dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksdHRlPSEwKSwidmFsaWQiIT09VCYmbC5wYXJlbnROb2RlJiZydGVbVF0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKXtjb25zdCBwZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwZS5jbGFz'@;
put 'c05hbWU9ImhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIscGUuaW5uZXJIVE1MPXJ0ZVtUXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwZSxsLm5leHRTaWJsaW5nKX19ZnVuY3Rpb24gYnUoYyl7cmV0dXJuIGNbMF0udG9VcHBl'@;
put 'ckNhc2UoKStjLnN1YnN0cigxKX1mdW5jdGlvbiBCRWUoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3QgZj1fbChhW2hdKS50'@;
put 'b0xvd2VyQ2FzZSgpOy0xPT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBhTigpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4g'@;
put 'YygpK2MoKStjKCkrYygpfWZ1bmN0aW9uIGxOKGMpe3JldHVybi9eKFswLTldWzAtOV0/JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIGNOKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm5gJHtjfWAu'@;
put 'cmVwbGFjZSgvKD86XFwpP1xbKFteW1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFyQXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIHVOKGMpe3JldHVybiByayhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0pfWZ1bmN0aW9uIHJr'@;
put 'KGMsbCl7cmV0dXJuIExFZS5zYW5pdGl6ZShjLGwpfWZ1bmN0aW9uIG90ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPS0xLGQ9bnVsbCxoPWM7Zm9yKDtudWxsIT09aDspe2lmKGE9PT1sKXtkPWg7YnJlYWt9aC5o'@;
put 'b3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2g9aC5ob3N0OihhKz0xLGg9aC5wYXJlbnROb2RlKX1yZXR1cm4gZH1mdW5jdGlvbiBzdGUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9u'@;
put 'IGV5KGMpe3JldHVybiBzdGUoYykmJmMucGFyZW50fWZ1bmN0aW9uIGpFZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCl9ZnVuY3Rpb24gTnAoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd'@;
put 'LGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9yKDtudWxsIT1mJiZmIT09YTspe2NvbnN0e25vZGVUeXBlOl8sbm9kZU5hbWU6VH09ZjtpZihfPT09ZCYm'@;
put 'KGwuaW5jbHVkZXMoVCl8fGwuaW5jbHVkZXMoZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6V309ZjtmPVcmJl89PT1oP1c6Zi5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHR5KGMsbCxhKXtjb25zdCBkPVtdO2xldCBoPWM7Zm9yKDtoJiYoaD1OcChoLGwsYSksaCYmKCFhfHxhLmNv'@;
put 'bnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oLmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5sZW5ndGg7cmV0dXJuIGY/ZFtmLTFdOm51bGx9ZnVuY3Rpb24gVnAoYyxsKXtsZXQgYT1jLnBhcmVudE5v'@;
put 'ZGUsZD1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiBsP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kZWZhdWx0Vmlldz9jLnF1ZXJ5U2VsZWN0b3JBbGwobCk6Yy5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCksMCk6ZC5wdXNoKGwpO251bGwhPT1hOyl7aWYoZC5pbmRl'@;
put 'eE9mKGEpPi0xKXJldHVybiEwO2E9YS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIGF0ZShjKXtsZXQgbD0wLGE9YztpZihhLnByZXZpb3VzU2libGluZylmb3IoO2E9YS5wcmV2aW91c1NpYmxpbmc7KWwrPTE7cmV0dXJuIGx9ZnVuY3Rpb24gQnAoYyxsLGEpe2NvbnN0IGQ9YS5wYXJl'@;
put 'bnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke2N9YCk7cmV0dXJuIGQ/ZC5jb250YWlucyhsKTpudWxsfWZ1bmN0aW9uIGx0ZShjKXtyZXR1cm4gYyYmYy5sZW5ndGg/Yy5maWx0ZXIobD0+ISFsKTpbXX1mdW5jdGlvbiBCbyhjLGwpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNz'@;
put 'TGlzdCYmInN0cmluZyI9PXR5cGVvZiBsJiYiIiE9PWwmJmMuY2xhc3NMaXN0LmNvbnRhaW5zKGwpfWZ1bmN0aW9uIHBpKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPWx0ZShsKSkubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LmFkZCguLi5sKX1mdW5jdGlvbiBX'@;
put 'byhjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1sdGUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5yZW1vdmUoLi4ubCl9ZnVuY3Rpb24gZE4oYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2UgaWYoWyJUQUJM'@;
put 'RSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pZE4obFthXSl9fWZ1bmN0aW9uIGcyKGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGlsZDspYy5yZW1v'@;
put 'dmVDaGlsZChsKX1jb25zdCBjdGU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gZ2coYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2N0ZS50ZXN0KGwpP2MuaW5uZXJIVE1MPWE/cmsobCk6bDpqcChjLGwpfWZ1'@;
put 'bmN0aW9uIGpwKGMsbCl7Y29uc3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUmJm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooZzIoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpKX1mdW5jdGlvbiBlNyhjKXtj'@;
put 'b25zdCBsPWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IGE9Yztmb3IoO2EhPT1sOyl7aWYobnVsbD09PWEpcmV0dXJuITE7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7aWYoYS5ob3N0KXtpZihhLmhvc3QuaW1wbClyZXR1cm4gZTcoYS5o'@;
put 'b3N0LmltcGwpO2lmKGEuaG9zdClyZXR1cm4gZTcoYS5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZihhLnN0eWxlJiYibm9uZSI9PT1hLnN0eWxlLmRpc3BsYXkpcmV0dXJuITE7YT1hLnBhcmVudE5vZGV9cmV0dXJuITB9'@;
put 'ZnVuY3Rpb24gS2woYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsXyxULGg9Yztmb3IoZj1oLm9mZnNldExlZnQsXz1oLm9mZnNldFRvcCxUPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5OylmKz1oLm9m'@;
put 'ZnNldExlZnQsXys9aC5vZmZzZXRUb3AsVD1oO3JldHVybiBUJiYiZml4ZWQiPT09VC5zdHlsZS5wb3NpdGlvbiYmKGYrPWEucGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCxfKz1hLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCkse2xlZnQ6Zix0b3A6X319ZnVuY3Rpb24gdDcoKXtyZXR1cm4o'@;
put 'YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWX1mdW5jdGlvbiBtZygpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxYfWZ1'@;
put 'bmN0aW9uIG55KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP3Q3KGwpOmMuc2Nyb2xsVG9wfWZ1bmN0aW9uIGlrKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP21nKGwpOmMuc2Nyb2xsTGVmdH1mdW5jdGlvbiByeShjKXtsZXQgbD1jLm93bmVyRG9jdW1lbnQsYT1sP2wuZGVmYXVsdFZpZXc6dm9pZCAwO2x8fChsPWMuZG9jdW1lbnQ/Yy5kb2N1bWVudDpjLGE9bC5kZWZhdWx0'@;
put 'Vmlldyk7Y29uc3QgZD1bImF1dG8iLCJzY3JvbGwiXTtsZXQgaD1jLnBhcmVudE5vZGU7Zm9yKDtoJiZoLnN0eWxlJiZsLmJvZHkhPT1oOyl7bGV0e292ZXJmbG93OmYsb3ZlcmZsb3dYOl8sb3ZlcmZsb3dZOlR9PWguc3R5bGU7aWYoW2YsXyxUXS5pbmNsdWRlcygic2Nyb2xsIikpcmV0dXJu'@;
put 'IGg7aWYoKHtvdmVyZmxvdzpmLG92ZXJmbG93WDpfLG92ZXJmbG93WTpUfT1hLmdldENvbXB1dGVkU3R5bGUoaCkpLGQuaW5jbHVkZXMoZil8fGQuaW5jbHVkZXMoXyl8fGQuaW5jbHVkZXMoVCl8fGguY2xpZW50SGVpZ2h0PD1oLnNjcm9sbEhlaWdodCsxJiYoZC5pbmNsdWRlcyhUKXx8ZC5p'@;
put 'bmNsdWRlcyhmKSl8fGguY2xpZW50V2lkdGg8PWguc2Nyb2xsV2lkdGgrMSYmKGQuaW5jbHVkZXMoXyl8fGQuaW5jbHVkZXMoZikpKXJldHVybiBoO2g9aC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIHZnKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0Vmlldzts'@;
put 'ZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9enAoZCxhKSxmPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0byJdLF89aC5nZXRQ'@;
put 'cm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLFQ9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksVz1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXgiKTtpZihmLmluY2x1ZGVzKF8pfHxmLmluY2x1ZGVzKFQpfHxmLmluY2x1ZGVzKFcpKXJldHVybiBkO2Q9ZC5wYXJlbnROb2Rl'@;
put 'fXJldHVybiBhfWZ1bmN0aW9uIG43KGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOndpbmRvdztpZighYylyZXR1cm47aWYoYz09PWEpcmV0dXJuIndpZHRoIj09PWw/YCR7YS5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09'@;
put 'PWw/YCR7YS5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IGQ9Yy5zdHlsZVtsXTtpZigiIiE9PWQmJnZvaWQgMCE9PWQpcmV0dXJuIGQ7Y29uc3QgaD16cChjLGEpO3JldHVybiIiIT09aFtsXSYmdm9pZCAwIT09aFtsXT9oW2xdOnZvaWQgMH1mdW5jdGlvbiB6RWUoYyxsKXtjb25zdHtz'@;
put 'ZWxlY3RvclRleHQ6YX09bDtsZXQgZD0hMTtyZXR1cm4gbC50eXBlPT09Q1NTUnVsZS5TVFlMRV9SVUxFJiZhJiYoYy5tc01hdGNoZXNTZWxlY3Rvcj9kPWMubXNNYXRjaGVzU2VsZWN0b3IoYSk6Yy5tYXRjaGVzJiYoZD1jLm1hdGNoZXMoYSkpKSxkfWZ1bmN0aW9uIHpwKGMpe2xldCBsPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGMuY3VycmVudFN0eWxlfHxsLmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24gd2EoYyl7cmV0dXJuIGMub2Zmc2V0V2lkdGh9ZnVuY3Rpb24gYWwoYyl7cmV0dXJuIGMu'@;
put 'b2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIGpmKGMpe3JldHVybiBjLmNsaWVudEhlaWdodHx8Yy5pbm5lckhlaWdodH1mdW5jdGlvbiBpeShjKXtyZXR1cm4gYy5jbGllbnRXaWR0aHx8Yy5pbm5lcldpZHRofWZ1bmN0aW9uIFVFZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVu'@;
put 'Y3Rpb24gWkVlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBoTihjKXtyZXR1cm4gYy5zZWxlY3Rpb25TdGFydD9jLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gdXRlKGMpe3JldHVybiBjLnNlbGVjdGlvbkVuZD9jLnNlbGVjdGlvbkVuZDowfWZ1bmN0'@;
put 'aW9uIGR0ZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3QgbD1jLmRvY3VtZW50O2xldCBhPSIiO3JldHVybiBjLmdldFNlbGVjdGlvbj9hPWMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTpsLnNlbGVj'@;
put 'dGlvbiYmIkNvbnRyb2wiIT09bC5zZWxlY3Rpb24udHlwZSYmKGE9bC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxhfWZ1bmN0aW9uIGZOKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjLmdldFNlbGVj'@;
put 'dGlvbiYmKGMuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/Yy5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1mdW5jdGlvbiBveShjLGwsYSl7aWYodm9pZCAwPT09YSYmKGE9bCks'@;
put 'Yy5zZXRTZWxlY3Rpb25SYW5nZSl7Yy5mb2N1cygpO3RyeXtjLnNldFNlbGVjdGlvblJhbmdlKGwsYSl9Y2F0Y2h7Y29uc3QgaD1jLnBhcmVudE5vZGUsZj1oLnN0eWxlLmRpc3BsYXk7aC5zdHlsZS5kaXNwbGF5PSJibG9jayIsYy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpLGguc3R5bGUuZGlz'@;
put 'cGxheT1mfX19bGV0IHBOO2Z1bmN0aW9uIEljKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O3JldHVybiB2b2lkIDA9PT1wTiYmKHBOPWZ1bmN0aW9uIFlFZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixsLnN0eWxlLndpZHRoPSIxMDAlIjtjb25zdCBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS5ib3hTaXpp'@;
put 'bmc9ImNvbnRlbnQtYm94IixhLnN0eWxlLmhlaWdodD0iMTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNp'@;
put 'YmlsaXR5PSJoaWRkZW4iLGEuYXBwZW5kQ2hpbGQobCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO2NvbnN0IGQ9bC5vZmZzZXRXaWR0aDthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2xldCBoPWwub2Zmc2V0V2lkdGg7cmV0dXJuIGQ9PT1oJiYoaD1hLmNs'@;
put 'aWVudFdpZHRoKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQoYSksZC1ofShjKSkscE59ZnVuY3Rpb24gaHRlKGMpe3JldHVybiBjLm9mZnNldFdpZHRoIT09Yy5jbGllbnRXaWR0aH1mdW5jdGlvbiBmdGUoYyl7cmV0dXJuIGMub2Zmc2V0SGVpZ2h0IT09Yy5jbGll'@;
put 'bnRIZWlnaHR9ZnVuY3Rpb24gb2soYyxsLGEpe2Muc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2x9LCR7YX0sMClgfWZ1bmN0aW9uIFdFZShjKXtsZXQgbDtyZXR1cm4gYy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09KGw9Yy5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIixsXTot'@;
put 'MX1mdW5jdGlvbiBzeShjKXtjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1jLnN0eWxlLnRyYW5zZm9ybSYmKGMuc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBheShjKXtyZXR1cm4gYyYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTF8fCJ0'@;
put 'cnVlIj09PWMuY29udGVudEVkaXRhYmxlKX1mdW5jdGlvbiBzayhjKXtyZXR1cm4gYXkoYykmJiExPT09Yy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gcHRlKGMpe3NrKGMub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy5zZWxlY3QoKX1mdW5jdGlvbiBn'@;
put 'TihjKXtyZXR1cm4hYy5wYXJlbnROb2RlfWZ1bmN0aW9uIGd0ZShjLGwpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZCxoKT0+e2QuZm9yRWFjaChmPT57Zi5pc0ludGVyc2VjdGluZyYmbnVsbCE9PWMub2Zmc2V0UGFyZW50JiYobCgpLGgudW5vYnNlcnZlKGMpKX0pfSx7cm9vdDpjLm93'@;
put 'bmVyRG9jdW1lbnQuYm9keX0pLm9ic2VydmUoYyl9ZnVuY3Rpb24gUmEoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gbXRlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9'@;
put 'e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7Zm9yKHZhciBfPWFyZ3VtZW50cy5sZW5ndGgsVD1uZXcgQXJyYXkoXyksVz0wO1c8XztXKyspVFtXXT1hcmd1bWVudHNbV107Y29uc3QgaWU9RGF0ZS5ub3coKTtsZXQgcGU9ITE7ZC5sYXN0Q2Fs'@;
put 'bFRocm90dGxlZD0hMCxhfHwoYT1pZSxwZT0hMCk7Y29uc3Qgd2U9bC0oaWUtYSk7cmV0dXJuIHBlPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxUKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBw'@;
put 'bHkodGhpcyxUKSxhPTAsaD12b2lkIDB9LHdlKSksZH19ZnVuY3Rpb24gR0VlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPW10ZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gXygpe2Zvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQpLGllPTA7aWU8VDtpZSsrKVdbaWVdPWFyZ3VtZW50c1tpZV07cmV0dXJuIGg/KGgtPTEsYy5hcHBseSh0aGlzLFcpKTpkLmFwcGx5KHRoaXMs'@;
put 'Vyl9cmV0dXJuIF8uY2xlYXJIaXRzPWZ1bmN0aW9uIGYoKXtoPWF9LF99ZnVuY3Rpb24gbU4oYyl7bGV0IGQsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4gZnVuY3Rpb24gaCgpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO3JldHVybiBhJiZjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57ZD1jLmFwcGx5KHRoaXMsXyl9LGwpLGR9fWZ1bmN0aW9uICRFZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVu'@;
put 'Z3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09bDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfKSxXPTA7VzxfO1crKylUW1ddPWFyZ3VtZW50c1tXXTtyZXR1cm4gQWwo'@;
put 'aCwoaWUscGUpPT5wZShpZSksZC5hcHBseSh0aGlzLFQpKX19ZnVuY3Rpb24gdk4oYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO3JldHVybiBjLmFwcGx5KHRoaXMsYS5jb25jYXQoXykpfX1mdW5jdGlvbiB2dGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtjb25zdCBXPWQuY29uY2F0KF8pO2xldCBpZTtyZXR1cm4gaWU9Vy5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLFcpOmEoVyksaWV9fShbXSl9ZnVuY3Rpb24gcUVlKGMp'@;
put 'e2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspX1tUXT1hcmd1bWVudHNbVF07Y29uc3QgVz1kLmNvbmNhdChfLnJldmVyc2UoKSk7bGV0IGll'@;
put 'O3JldHVybiBpZT1XLmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsVyk6YShXKSxpZX19KFtdKX1mdW5jdGlvbiBhayhjLGwsYSxkLGgsZixfLFQpe3JldHVybiBLaShUKT9jLmNhbGwobCxhLGQsaCxmLF8sVCk6S2koXyk/Yy5jYWxsKGwsYSxkLGgsZixfKTpLaShmKT9jLmNhbGwobCxhLGQsaCxm'@;
put 'KTpLaShoKT9jLmNhbGwobCxhLGQsaCk6S2koZCk/Yy5jYWxsKGwsYSxkKTpLaShhKT9jLmNhbGwobCxhKTpjLmNhbGwobCl9ZnVuY3Rpb24gcjcoYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcgQXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9'@;
put 'e30sZHMoYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEmJiJvYmplY3QiPT10eXBlb2YgYSYmIUFycmF5LmlzQXJyYXkoYSk/cjcoYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBhWzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bcjcoYVsw'@;
put 'XSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gemYoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gWGwoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4g'@;
put 'ZHMobCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24gbHkoYyxsKXtkcyhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxbZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9i'@;
put 'amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSxseShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiB5dShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk6Y31mdW5jdGlvbiBXdShjKXtjb25zdCBs'@;
put 'PXt9O3JldHVybiBkcyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiBUYShjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIERu'@;
put 'KGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxkcyhoLChmLF8pPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbX10pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7X30nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5g'@;
put 'KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVtfXT1mO2Vsc2V7Y29uc3QgVz1mdW5jdGlvbihwZSl7Y29uc3Qgd2U9YF8ke3BlfWA7cmV0dXJuIGZ1bmN0aW9uKEVlKXt0aGlzW3dlXT1FZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSxfLHtnZXQ6ZnVu'@;
put 'Y3Rpb24ocGUsd2Upe2NvbnN0IEVlPWBfJHtwZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW0VlXSYmKHRoaXNbRWVdPShpdD0+e2xldCBldD1pdDtyZXR1cm4oQXJyYXkuaXNBcnJheShldCl8fHVzKGV0KSkmJihldD15dShldCkpLGV0fSkod2UpKSx0aGlzW0Vl'@;
put 'XX19KF8sZiksc2V0OlcoXyksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIGxrKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gdXMoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRv'@;
put 'U3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gZmgoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'ZCl9ZnVuY3Rpb24gZHMoYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uIF90'@;
put 'ZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIGRzKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gY2soYyxsLGEpe2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xldCBoPWM7ZC5mb3JFYWNoKChmLF8pPT57XyE9'@;
put 'PWQubGVuZ3RoLTE/KGJsKGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YX0pfWZ1bmN0aW9uIHVrKGMpe2lmKCF1cyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIHVzKGEpP2RzKGEsKGgsZik9PnsiX19jaGlsZHJlbiIhPT1mJiYoZCs9bChoKSl9'@;
put 'KTpkKz0xLGR9O3JldHVybiBsKGMpfWZ1bmN0aW9uIF9nKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hlZDohMSxbYV06Yyxpc1RvdWNoZWQoKXtyZXR1cm4gdGhp'@;
put 'cy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gYmwoYyxsKXtyZXR1cm4gT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9RigxMzAwNik7Y29uc3QgZmQ9Yz0+e2NvbnN0IGw9e3ZhbHVlOiExLHRlc3Q6KGEsZCk9PntsLnZhbHVlPWMoYSxkKX19O3JldHVybiBsfSxVZj17Y2hyb21lOmZkKChjLGwpPT4vQ2hyb21lLy50ZXN0KGMpJiYvR29vZ2xl'@;
put 'Ly50ZXN0KGwpKSxjaHJvbWVXZWJLaXQ6ZmQoYz0+L0NyaU9TLy50ZXN0KGMpKSxlZGdlOmZkKGM9Pi9FZGdlLy50ZXN0KGMpKSxlZGdlV2ViS2l0OmZkKGM9Pi9FZGdpT1MvLnRlc3QoYykpLGZpcmVmb3g6ZmQoYz0+L0ZpcmVmb3gvLnRlc3QoYykpLGZpcmVmb3hXZWJLaXQ6ZmQoYz0+L0Z4'@;
put 'aU9TLy50ZXN0KGMpKSxtb2JpbGU6ZmQoYz0+L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGMpKSxzYWZhcmk6ZmQoKGMsbCk9Pi9TYWZhcmkvLnRlc3QoYykmJi9BcHBsZSBDb21wdXRlci8udGVzdChsKSl9LGk3'@;
put 'PXttYWM6ZmQoYz0+L15NYWMvLnRlc3QoYykpLHdpbjpmZChjPT4vXldpbi8udGVzdChjKSksbGludXg6ZmQoYz0+L15MaW51eC8udGVzdChjKSksaW9zOmZkKGM9Pi9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChjKSl9O2Z1bmN0aW9uIGJ0ZSgpe2xldHt1c2VyQWdlbnQ6Yz1uYXZpZ2F0b3Iu'@;
put 'dXNlckFnZW50LHZlbmRvcjpsPW5hdmlnYXRvci52ZW5kb3J9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtkcyhVZixhPT57bGV0e3Rlc3Q6ZH09YTtkKGMsbCl9KX1mdW5jdGlvbiB5dGUoKXtsZXR7cGxhdGZvcm06Yz1uYXZpZ2F0'@;
put 'b3IucGxhdGZvcm19PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtkcyhpNyxsPT57bGV0e3Rlc3Q6YX09bDthKGMpfSl9ZnVuY3Rpb24gX04oKXtyZXR1cm4gVWYuY2hyb21lLnZhbHVlfWZ1bmN0aW9uIHd0ZSgpe3JldHVybiBVZi5j'@;
put 'aHJvbWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24gZGsoKXtyZXR1cm4gVWYuZmlyZWZveC52YWx1ZX1mdW5jdGlvbiBDdGUoKXtyZXR1cm4gVWYuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBLRWUoKXtyZXR1cm4gVWYuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIFN0ZSgpe3JldHVybiBVZi5l'@;
put 'ZGdlLnZhbHVlfWZ1bmN0aW9uIFhFZSgpe3JldHVybiBVZi5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIG0yKCl7cmV0dXJuIFVmLm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBiTigpe3JldHVybiBpNy5pb3MudmFsdWV9ZnVuY3Rpb24geU4oKXtsZXR7bWF4VG91Y2hQb2ludHM6Y309YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5hdmlnYXRvcjtyZXR1cm4gYz4yJiZpNy5tYWMudmFsdWV9ZnVuY3Rpb24gd04oKXtyZXR1cm4gaTcud2luLnZhbHVlfWZ1bmN0aW9uIGhrKCl7cmV0dXJuIGk3Lm1hYy52YWx1ZX1mdW5jdGlvbiBKRWUo'@;
put 'KXtyZXR1cm4gaTcubGludXgudmFsdWV9YnRlKCkseXRlKCk7Y29uc3QgY289e0FMVDoxOCxBUlJPV19ET1dOOjQwLEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1dfVVA6MzgsQVVESU9fRE9XTjpkaygpPzE4MjoxNzQsQVVESU9fTVVURTpkaygpPzE4MToxNzMsQVVESU9fVVA6'@;
put 'ZGsoKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxDT05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6'@;
put 'MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcsRjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFf'@;
put 'UExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RPUDoxNzgsTlVMTDowLE5VTV9MT0NLOjE0NCxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJT0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxG'@;
put 'OjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODksWjo5MH0sUUVlPVtjby5BTFQsY28uQVJST1dfRE9XTixjby5BUlJPV19MRUZULGNvLkFSUk9XX1JJR0hULGNvLkFSUk9XX1VQLGNvLkFVRElPX0RPV04sY28uQVVESU9fTVVURSxjby5BVURJT19VUCxjby5CQUNLU1BBQ0Us'@;
put 'Y28uQ0FQU19MT0NLLGNvLkRFTEVURSxjby5FTkQsY28uRU5URVIsY28uRVNDQVBFLGNvLkYxLGNvLkYyLGNvLkYzLGNvLkY0LGNvLkY1LGNvLkY2LGNvLkY3LGNvLkY4LGNvLkY5LGNvLkYxMCxjby5GMTEsY28uRjEyLGNvLkYxMyxjby5GMTQsY28uRjE1LGNvLkYxNixjby5GMTcsY28uRjE4'@;
put 'LGNvLkYxOSxjby5IT01FLGNvLklOU0VSVCxjby5NRURJQV9ORVhULGNvLk1FRElBX1BMQVlfUEFVU0UsY28uTUVESUFfUFJFVixjby5NRURJQV9TVE9QLGNvLk5VTEwsY28uTlVNX0xPQ0ssY28uUEFHRV9ET1dOLGNvLlBBR0VfVVAsY28uUEFVU0UsY28uU0NST0xMX0xPQ0ssY28uU0hJRlQs'@;
put 'Y28uVEFCXTtmdW5jdGlvbiBNdGUoYyl7cmV0dXJuIDMyPT09Y3x8Yz49NDgmJmM8PTU3fHxjPj05NiYmYzw9MTExfHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIENOKGMpe3JldHVybiBRRWUuaW5jbHVkZXMoYyl9ZnVuY3Rp'@;
put 'b24gZWtlKGMpe2NvbnN0IGw9W107cmV0dXJuIGhrKCk/bC5wdXNoKGNvLkNPTU1BTkRfTEVGVCxjby5DT01NQU5EX1JJR0hULGNvLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKGNvLkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24geHRlKGMpe3JldHVybltjby5DT05UUk9MLGNvLkNP'@;
put 'TU1BTkRfTEVGVCxjby5DT01NQU5EX1JJR0hULGNvLkNPTU1BTkRfRklSRUZPWF0uaW5jbHVkZXMoYyl9ZnVuY3Rpb24gbzcoYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQgZD0hMTtyZXR1cm4gRG4oYSxoPT57aWYoYz09PWNvW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiB2'@;
put 'MihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSExLGMuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIGJnKGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBVcChjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIGZrKGMp'@;
put 'e3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gR2EoKXtLaShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gU04oKXtLaShjb25zb2xlKSYmY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpfWNvbnN0IHM3PVsiYWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0'@;
put 'ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLCJiZWZvcmVD'@;
put 'b250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2Vs'@;
put 'ZWN0IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURvd24iLCJhZnRlckRyYXdTZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0Iiwi'@;
put 'YWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25D'@;
put 'ZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImFmdGVyU2Nyb2xs'@;
put 'SG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIs'@;
put 'ImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0'@;
put 'b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1ldGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJ'@;
put 'bml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2FkRGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJiZWZvcmVLZXlEb3duIiwiYmVmb3JlT25DZWxsTW91c2VEb3duIiwiYmVmb3JlT25DZWxsTW91c2VVcCIsImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IiwiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwi'@;
put 'YmVmb3JlT25DZWxsTW91c2VPdXQiLCJiZWZvcmVSZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVSb3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJiZWZvcmVTZXRDZWxsTWV0YSIsImJlZm9yZVNldFJhbmdlU3RhcnRP'@;
put 'bmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5'@;
put 'Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0IiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJjZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsInBl'@;
put 'cnNpc3RlbnRTdGF0ZUxvYWQiLCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJiZWZvcmVDb2x1bW5Tb3J0IiwiYWZ0ZXJDb2x1bW5Tb3J0IiwibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLCJiZWZvcmVDdXQiLCJhZnRlckN1'@;
put 'dCIsImJlZm9yZUNvcHkiLCJhZnRlckNvcHkiLCJiZWZvcmVQYXN0ZSIsImFmdGVyUGFzdGUiLCJiZWZvcmVDb2x1bW5GcmVlemUiLCJhZnRlckNvbHVtbkZyZWV6ZSIsImJlZm9yZUNvbHVtbk1vdmUiLCJhZnRlckNvbHVtbk1vdmUiLCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsImFmdGVyQ29s'@;
put 'dW1uVW5mcmVlemUiLCJiZWZvcmVSb3dNb3ZlIiwiYWZ0ZXJSb3dNb3ZlIiwiYmVmb3JlQ29sdW1uUmVzaXplIiwiYWZ0ZXJDb2x1bW5SZXNpemUiLCJiZWZvcmVSb3dSZXNpemUiLCJhZnRlclJvd1Jlc2l6ZSIsImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIiwiYWZ0ZXJHZXRSb3dI'@;
put 'ZWFkZXJSZW5kZXJlcnMiLCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJiZWZvcmVGaWx0ZXIiLCJhZnRlckZpbHRlciIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0'@;
put 'ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5k'@;
put 'b1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5'@;
put 'VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFm'@;
put 'dGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJi'@;
put 'ZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVy'@;
put 'RGV0YWNoQ2hpbGQiLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJhZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMi'@;
put 'LCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sdGtlPUFhYFRoZSBwbHVnaW4gaG9vayAi'@;
put 'W2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQgcmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZl'@;
put 'cnNpb25dIHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gLE1OPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0sWyJza2lwTGVuZ3Ro'@;
put 'Q2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSx4Tj1uZXcgTWFwKFtdKTtjbGFzcyBFdGV7c3RhdGljIGdldFNpbmdsZXRvbigpe3JldHVybiBmdW5jdGlvbiBya2UoKXtyZXR1cm4gbmtlfSgpfWNvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5nbG9iYWxCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpfWNyZWF0ZUVtcHR5QnVja2V0KCl7Y29uc3QgbD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEbihzNyxhPT5sW2FdPVtdKSxsfWdldEJ1Y2tldCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBsPyhsLnBsdWdpbkhvb2tCdWNrZXR8fChsLnBsdWdpbkhvb2tCdWNrZXQ9dGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKEFycmF5LmlzQXJyYXkoYSkpRG4oYSxoPT50aGlzLmFkZChsLGgsZCkpO2Vsc2V7TU4uaGFzKGwpJiZHYShjTih0a2Use2hvb2tOYW1lOmwscmVtb3ZlZEluVmVyc2lvbjpNTi5nZXQobCl9KSks'@;
put 'eE4uaGFzKGwpJiZHYSh4Ti5nZXQobCkpO2NvbnN0IGg9dGhpcy5nZXRCdWNrZXQoZCk7aWYodHlwZW9mIGhbbF0+InUiJiYodGhpcy5yZWdpc3RlcihsKSxoW2xdPVtdKSxhLnNraXA9ITEsLTE9PT1oW2xdLmluZGV4T2YoYSkpe2xldCBmPSExO2EuaW5pdGlhbEhvb2smJkRuKGhbbF0sKF8s'@;
put 'VCk9PntpZihfLmluaXRpYWxIb29rKXJldHVybiBoW2xdW1RdPWEsZj0hMCwhMX0pLGZ8fGhbbF0ucHVzaChhKX19cmV0dXJuIHRoaXN9b25jZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO0FycmF5LmlzQXJy'@;
put 'YXkoYSk/RG4oYSxoPT50aGlzLm9uY2UobCxoLGQpKTooYS5ydW5PbmNlPSEwLHRoaXMuYWRkKGwsYSxkKSl9cmVtb3ZlKGwsYSl7Y29uc3QgaD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCk7cmV0dXJu'@;
put 'IHR5cGVvZiBoW2xdPCJ1IiYmaFtsXS5pbmRleE9mKGEpPj0wJiYoYS5za2lwPSEwLCEwKX1oYXMobCl7Y29uc3QgZD10aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCk7cmV0dXJuISh2b2lkIDA9PT1kW2xd'@;
put 'fHwhZFtsXS5sZW5ndGgpfXJ1bihsLGEsZCxoLGYsXyxULFcpe3tjb25zdCBpZT10aGlzLmdsb2JhbEJ1Y2tldFthXSxwZT1pZT9pZS5sZW5ndGg6MDtsZXQgd2U9MDtpZihwZSlmb3IoO3dlPHBlOyl7aWYoIWllW3dlXXx8aWVbd2VdLnNraXApe3dlKz0xO2NvbnRpbnVlfWNvbnN0IEVlPWFr'@;
put 'KGllW3dlXSxsLGQsaCxmLF8sVCxXKTt2b2lkIDAhPT1FZSYmKGQ9RWUpLGllW3dlXSYmaWVbd2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsaWVbd2VdKSx3ZSs9MX19e2NvbnN0IGllPXRoaXMuZ2V0QnVja2V0KGwpW2FdLHBlPWllP2llLmxlbmd0aDowO2xldCB3ZT0wO2lmKHBlKWZvcig7'@;
put 'd2U8cGU7KXtpZighaWVbd2VdfHxpZVt3ZV0uc2tpcCl7d2UrPTE7Y29udGludWV9Y29uc3QgRWU9YWsoaWVbd2VdLGwsZCxoLGYsXyxULFcpO3ZvaWQgMCE9PUVlJiYoZD1FZSksaWVbd2VdJiZpZVt3ZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxpZVt3ZV0sbCksd2UrPTF9fXJldHVybiBk'@;
put 'fWRlc3Ryb3koKXtkcyh0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCksKGEsZCxoKT0+aFtkXS5sZW5ndGg9MCl9cmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCl8fHM3LnB1c2gobCl9ZGVyZWdp'@;
put 'c3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKSYmczcuc3BsaWNlKHM3LmluZGV4T2YobCksMSl9aXNEZXByZWNhdGVkKGwpe3JldHVybiB4Ti5oYXMobCl8fE1OLmhhcyhsKX1pc1JlZ2lzdGVyZWQobCl7cmV0dXJuIHM3LmluZGV4T2YobCk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBz'@;
put 'N319Y29uc3QgbmtlPW5ldyBFdGUsc289RXRlLEVOPW5ldyBNYXA7ZnVuY3Rpb24gcGQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7RU4uaGFzKGMpfHxFTi5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPUVOLmdl'@;
put 'dChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShULFcpe2wuc2V0KFQsVyl9LGdldEl0ZW06ZnVuY3Rpb24gZChUKXtyZXR1cm4gbC5nZXQoVCl9LGhhc0l0ZW06ZnVuY3Rpb24gaChUKXtyZXR1cm4gbC5oYXMoVCl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlz'@;
put 'KCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gXygpe3JldHVyblsuLi5sLnZhbHVlcygpXX19fWNvbnN0IGtOPW5ldyBXZWFrTWFwLHtyZWdpc3Rlcjppa2UsZ2V0SXRlbTprdGUsaGFzSXRlbTpBdGUsZ2V0TmFtZXM6b2tlfT1wZCgiZWRpdG9ycyIpO2Z1bmN0aW9uIHNrZShjKXtjb25zdCBsPXt9'@;
put 'LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3VpZF19LHNvLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95Iixm'@;
put 'dW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gVHRlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpa04uZ2V0KGMpfHxSMChudWxsLGMpLGE9a04uZ2V0KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3Mg'@;
put 'YW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9a3RlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIHBrKGMpe2lmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFBdGUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIGt0ZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIFIwKGMsbCl7YyYmInN0cmluZyIhPXR5cGVv'@;
put 'ZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgc2tlKGwpOyJzdHJpbmciPT10eXBlb2YgYyYmaWtlKGMsYSksa04uc2V0KGwsYSl9bGV0IGdrPTA7Y29uc3QgbGw9Y2xhc3MgYWtle2NvbnN0cnVjdG9yKCl7dGhpcy5jb250ZXh0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMsdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX1hZGRFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2Z1bmN0aW9uIGYoXyl7ZC5jYWxsKHRoaXMsZnVuY3Rpb24gbGtlKGMpe2NvbnN0IGw9Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bC5hcHBseSh0aGlzKSx2'@;
put 'Mih0aGlzKX0sY30oXykpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7ZWxlbWVudDpsLGV2ZW50OmEsY2FsbGJhY2s6ZCxjYWxsYmFja1Byb3h5OmYsb3B0aW9uczpoLGV2ZW50TWFuYWdlcjp0aGlzfSksbC5hZGRFdmVudExpc3RlbmVyKGEsZixoKSxnays9MSwo'@;
put 'KT0+e3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl9fXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCBfLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7'@;
put 'Zm9yKDtmOylpZihmLT0xLF89dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2ZdLF8uZXZlbnQ9PT1hJiZfLmVsZW1lbnQ9PT1sKXtpZihkJiZkIT09Xy5jYWxsYmFja3x8aCYmXy5ldmVudE1hbmFnZXIhPT10aGlzKWNvbnRpbnVlO3RoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxp'@;
put 'Y2UoZiwxKSxfLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihfLmV2ZW50LF8uY2FsbGJhY2tQcm94eSxfLm9wdGlvbnMpLGdrLT0xfX1jbGVhckV2ZW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMu'@;
put 'Y29udGV4dClyZXR1cm47bGV0IGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2E7KXthLT0xO2NvbnN0IGQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2FdO2wmJmQuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5z'@;
put 'cGxpY2UoYSwxKSxkLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLmV2ZW50LGQuY2FsbGJhY2tQcm94eSxkLm9wdGlvbnMpLGdrLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95'@;
put 'V2l0aE93bkV2ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVsbH1maXJlRXZlbnQobCxhKXtsZXQgZD1sLmRvY3VtZW50LGg9bDtkfHwoZD1sLm93bmVyRG9jdW1lbnQ/bC5vd25lckRvY3VtZW50OmwsaD1kLmRlZmF1bHRWaWV3KTtjb25zdCBmPXtidWJi'@;
put 'bGVzOiEwLGNhbmNlbGFibGU6Im1vdXNlbW92ZSIhPT1hLHZpZXc6aCxkZXRhaWw6MCxzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07'@;
put 'bGV0IF87ZC5jcmVhdGVFdmVudD8oXz1kLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLF8uaW5pdE1vdXNlRXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlLGYudmlldyxmLmRldGFpbCxmLnNjcmVlblgsZi5zY3JlZW5ZLGYuY2xpZW50WCxmLmNsaWVudFksZi5jdHJsS2V5LGYuYWx0'@;
put 'S2V5LGYuc2hpZnRLZXksZi5tZXRhS2V5LGYuYnV0dG9uLGYucmVsYXRlZFRhcmdldHx8ZC5ib2R5LnBhcmVudE5vZGUpKTpfPWQuY3JlYXRlRXZlbnRPYmplY3QoKSxsLmRpc3BhdGNoRXZlbnQ/bC5kaXNwYXRjaEV2ZW50KF8pOmwuZmlyZUV2ZW50KGBvbiR7YX1gLF8pfX0sbWs9ImVkaXRv'@;
put 'ck1hbmFnZXIubmF2aWdhdGlvbiIsY3k9ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2NsYXNzIEFOe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmluc3RhbmNlPWwsdGhpcy50YWJsZU1ldGE9YSx0aGlzLnNlbGVjdGlvbj1kLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbChsKSx0aGlz'@;
put 'LmRlc3Ryb3llZD0hMSx0aGlzLmxvY2s9ITEsdGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwLHRoaXMuY2VsbFByb3BlcnRpZXM9dm9pZCAwLHRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMu'@;
put 'aW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGY9PnRoaXMub25BZnRlckRvY3VtZW50S2V5RG93bihmKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9u'@;
put 'c3RhcnQiLGY9PnshdGhpcy5kZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UuaXNMaXN0ZW5pbmcoKSYmdGhpcy5vcGVuRWRpdG9yKCIiLGYpfSksdGhpcy5pbnN0YW5jZS52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoZixfLFQpPT50aGlzLm9uQ2VsbERibENsaWNrKGYsXyxUKSl9'@;
put 'cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD17Z3JvdXA6Y3l9O2QuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIi'@;
put 'LCJTaGlmdCJdLFsiRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsXyk9Pnt0aGlzLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobC5pc0N0cmxQcmVzc2VkKCkpLHRoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIo'@;
put 'Xy5pbmNsdWRlcygic2hpZnQiKSl9fSx7a2V5czpbWyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJdXSxjYWxsYmFjazooKT0+e3RoaXMuY2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsLmlzQ3RybFByZXNzZWQoKSksdGhpcy5hY3RpdmVFZGl0b3IuZm9jdXMo'@;
put 'KX19XSxoKSxhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6Zj0+e3RoaXMub3BlbkVkaXRvcihudWxsLGYsITApfX0se2tleXM6W1siQmFja3NwYWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLmVtcHR5U2VsZWN0ZWRDZWxscygpLHRo'@;
put 'aXMucHJlcGFyZUVkaXRvcigpfX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsXyk9Pnt0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nP3RoaXMuY2VsbFByb3BlcnRpZXMucmVhZE9ubHk/dGhpcy5tb3ZlU2VsZWN0'@;
put 'aW9uQWZ0ZXJFbnRlcigpOnRoaXMub3BlbkVkaXRvcihudWxsLGYsITApOnRoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoXy5pbmNsdWRlcygic2hpZnQiKSksdjIoZil9fV0sey4uLmgscnVuT25seUlmOigpPT5LaSh0aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpfSl9bG9ja0VkaXRv'@;
put 'cigpe3RoaXMubG9jaz0hMH11bmxvY2tFZGl0b3IoKXt0aGlzLmxvY2s9ITF9ZGVzdHJveUVkaXRvcihsKXt0aGlzLmxvY2t8fHRoaXMuY2xvc2VFZGl0b3IobCl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXtpZih0aGlzLmxvY2sp'@;
put 'cmV0dXJuO2lmKHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLFc9PntXJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0e3JvdzpsLGNvbDphfT10aGlzLmluc3RhbmNlLmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LGQ9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsbCxhKTtsZXQgaD1sLGY9YTtBcnJheS5pc0FycmF5KGQpJiYoW2gsZl09ZCksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKGgs'@;
put 'Zik7Y29uc3R7YWN0aXZlRWxlbWVudDpffT10aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudDtpZihfJiZzayhfKSYmXy5ibHVyKCksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgVD10aGlzLmluc3RhbmNlLmdldENlbGwo'@;
put 'bCxhLCEwKTtpZihUKXtjb25zdCBXPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxpZT10aGlzLmluc3RhbmNlLmNvbFRvUHJvcChmKSxwZT10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93'@;
put 'KGgpLGYpO3RoaXMuYWN0aXZlRWRpdG9yPVR0ZShXLHRoaXMuaW5zdGFuY2UpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUobCxhLGllLFQscGUsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRv'@;
put 'ci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKHRoaXMuaXNDZWxsRWRpdGFibGUoKSl7aWYoIXRoaXMuYWN0aXZlRWRpdG9yKXtjb25zdHtyb3c6aCxjb2w6Zn09dGhpcy5p'@;
put 'bnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCxfPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxUPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChmKTt0aGlzLmluc3RhbmNlLnZpZXcuc2Nyb2xsVmlld3BvcnQodGhpcy5pbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhfLFQpKSx0aGlzLmluc3RhbmNlLnZpZXcucmVuZGVyKCksdGhpcy5wcmVwYXJlRWRpdG9yKCl9dGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVkaXRv'@;
put 'ci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSl9ZWxzZSB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCl9Y2xvc2VFZGl0b3IobCxhLGQpe3RoaXMuYWN0aXZlRWRpdG9yP3RoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcobCxhLGQp'@;
put 'OmQmJmQoITEpfWNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobCl7dGhpcy5jbG9zZUVkaXRvcighMSxsKX1jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGwpe3RoaXMuY2xvc2VFZGl0b3IoITAsbCl9Y2xlYXJBY3RpdmVFZGl0b3IoKXt0aGlzLmFjdGl2ZUVkaXRvcj12b2lk'@;
put 'IDB9aXNDZWxsRWRpdGFibGUoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx7cm93OmEsY29sOmR9PXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmgsY29sdW1uSW5k'@;
put 'ZXhNYXBwZXI6Zn09dGhpcy5pbnN0YW5jZSxfPWguaXNIaWRkZW4odGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGEpKXx8Zi5pc0hpZGRlbih0aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWx8fF8pfW1v'@;
put 'dmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhldmVudCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcztsP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0'@;
put 'YXJ0KC1hLnJvdywtYS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGwpe2lmKCF0aGlzLmluc3RhbmNlLmlzTGlzdGVuaW5nKCkpcmV0dXJuO2NvbnN0e2tleUNvZGU6YX09bDtpZighdGhpcy5zZWxlY3Rp'@;
put 'b24uaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPShsLmN0cmxLZXl8fGwubWV0YUtleSkmJiFsLmFsdEtleTt0aGlzLmFjdGl2ZUVkaXRvciYmKCF0aGlzLmFjdGl2ZUVkaXRvcnx8dGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpfHxDTihhKXx8eHRlKGEpfHxkfHx0aGlzLmlzRWRp'@;
put 'dG9yT3BlbmVkKCl8fCh0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0s'@;
put 'e2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwwKX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhp'@;
put 'cy5pbnN0YW5jZS5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCx0aGlzLmluc3RhbmNlLmdldERpcmVjdGlvbkZhY3RvcigpKX19XSx7cnVuT25seUlmOigp'@;
put 'PT5LaSh0aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkKCkpLGdyb3VwOm1rfSksdGhpcy5vcGVuRWRpdG9yKCIiLGwpKX1vbkNlbGxEYmxDbGljayhsLGEsZCl7IlREIj09PWQubm9kZU5hbWUmJnRoaXMub3BlbkVkaXRvcihudWxsLGwsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IER0ZT1uZXcgV2Vha01hcDtBTi5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9RHRlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IEFOKGMsbCxhKSxEdGUuc2V0KGMsZCkpLGR9O2NvbnN0IHVrZT1BTixMdGU9eyImbmJz'@;
put 'cDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LGRrZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKEx0ZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rpb24gVE4oYyl7Y29uc3QgbD1jLmhhc0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVy'@;
put 'cygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5jb3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCxfPWY+MD9oWzBdLmxlbmd0aDowLFQ9WyI8dGFibGU+IiwiPC90YWJsZT4iXSxXPWw/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxpZT1bIjx0'@;
put 'Ym9keT4iLCI8L3Rib2R5PiJdLHBlPWE/MTowLHdlPWw/MTowO2ZvcihsZXQgRWU9MDtFZTxmO0VlKz0xKXtjb25zdCBaZT1sJiYwPT09RWUsaXQ9W107Zm9yKGxldCB5dD0wO3l0PF87eXQrPTEpe2NvbnN0IEV0PSFaZSYmYSYmMD09PXl0O2xldCBTdD0iIjtpZihaZSlTdD1gPHRoPiR7Yy5n'@;
put 'ZXRDb2xIZWFkZXIoeXQtcGUpfTwvdGg+YDtlbHNlIGlmKEV0KVN0PWA8dGg+JHtjLmdldFJvd0hlYWRlcihFZS13ZSl9PC90aD5gO2Vsc2V7Y29uc3QgSnQ9aFtFZV1beXRdLHtoaWRkZW46bm4scm93c3Bhbjp2bixjb2xzcGFuOk5ufT1jLmdldENlbGxNZXRhKEVlLXdlLHl0LXBlKTtpZigh'@;
put 'bm4pe2NvbnN0IGNyPVtdO2lmKHZuJiZjci5wdXNoKGByb3dzcGFuPSIke3ZufSJgKSxObiYmY3IucHVzaChgY29sc3Bhbj0iJHtObn0iYCksZ2MoSnQpKVN0PWA8dGQgJHtjci5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IExyPUp0LnRvU3RyaW5nKCkucmVwbGFjZSgiPCIsIiZsdDsi'@;
put 'KS5yZXBsYWNlKCI+IiwiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtTdD1gPHRkICR7Y3Iuam9pbigiICIpfT4ke0xyfTwvdGQ+YH19'@;
put 'fWl0LnB1c2goU3QpfWNvbnN0IGV0PVsiPHRyPiIsLi4uaXQsIjwvdHI+Il0uam9pbigiIik7WmU/Vy5zcGxpY2UoMSwwLGV0KTppZS5zcGxpY2UoLTEsMCxldCl9cmV0dXJuIFQuc3BsaWNlKDEsMCxXLmpvaW4oIiIpLGllLmpvaW4oIiIpKSxULmpvaW4oIiIpfWZ1bmN0aW9uIEROKGMpe2Nv'@;
put 'bnN0IGw9Yy5sZW5ndGgsYT1bIjx0YWJsZT4iXTtmb3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3QgaD1jW2RdLGY9aC5sZW5ndGgsXz1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBUPTA7VDxmO1QrPTEpe2NvbnN0IFc9aFtUXSxpZT1nYyhXKT8iIjpXLnRvU3RyaW5nKCku'@;
put 'cmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwezIsfS9naSxwZT0+YDxzcGFuIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+JHsiJm5ic3A7'@;
put 'Ii5yZXBlYXQocGUubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtfLnB1c2goYDx0ZD4ke2llfTwvdGQ+YCl9YS5wdXNoKCI8dHI+IiwuLi5fLCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEu'@;
put 'am9pbigiIil9ZnVuY3Rpb24gSXRlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBw'@;
put 'ZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0IEp0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLG5uPT57Y29uc3Qgdm49bm4ubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHt2bn0ke25uLnN1YnN0cmlu'@;
put 'Zyh2bi5sZW5ndGgsbm4ubGFzdEluZGV4T2YoIjwiKSkucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ksIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtKdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1bmN0aW9uIGhr'@;
put 'ZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IF89aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksVD1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLFc9Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLGll'@;
put 'PVc/QXJyYXkuZnJvbShXLmNlbGxzKS5yZWR1Y2UoKEp0LG5uKT0+SnQrbm4uY29sU3BhbiwwKS0oVD8xOjApOjAscGU9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSx3ZT1bXTtsZXQgRWU9ITEsWmU9MCxpdD0wO2lmKGYudEhlYWQpe2NvbnN0IEp0PUFycmF5LmZyb20o'@;
put 'Zi50SGVhZC5yb3dzKS5maWx0ZXIobm49Pntjb25zdCB2bj1udWxsIT09bm4ucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gdm4mJndlLnB1c2gobm4pLCF2bn0pO1plPUp0Lmxlbmd0aCxFZT1aZT4wLFplPjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oSnQpLnJlZHVjZSgobm4sdm4p'@;
put 'PT57Y29uc3QgTm49QXJyYXkuZnJvbSh2bi5jZWxscykucmVkdWNlKChjcixMcixFaSk9PntpZihUJiYwPT09RWkpcmV0dXJuIGNyO2NvbnN0e2NvbFNwYW46TGksaW5uZXJIVE1MOmZyfT1McjtyZXR1cm4gY3IucHVzaChMaT4xP3tsYWJlbDpmcixjb2xzcGFuOkxpfTpmciksY3J9LFtdKTty'@;
put 'ZXR1cm4gbm4ucHVzaChObiksbm59LFtdKTpFZSYmKGEuY29sSGVhZGVycz1BcnJheS5mcm9tKEp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKG5uLHZuLE5uKT0+KFQmJjA9PT1Obnx8bm4ucHVzaCh2bi5pbm5lckhUTUwpLG5uKSxbXSkpfXdlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPXdlLmxl'@;
put 'bmd0aCkscGUubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209cGUubGVuZ3RoKTtjb25zdCBldD1bLi4ud2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoSnQsbm4pPT4oSnQucHVzaCguLi5BcnJheS5mcm9tKG5uLnJvd3MpKSxKdCksW10pLC4uLnBlXTtpdD1ldC5sZW5ndGg7'@;
put 'Y29uc3QgeXQ9bmV3IEFycmF5KGl0KTtmb3IobGV0IEp0PTA7SnQ8aXQ7SnQrKyl5dFtKdF09bmV3IEFycmF5KGllKTtjb25zdCBFdD1bXSxTdD1bXTtmb3IobGV0IEp0PTA7SnQ8aXQ7SnQrKyl7Y29uc3Qgdm49QXJyYXkuZnJvbShldFtKdF0uY2VsbHMpLE5uPXZuLmxlbmd0aDtmb3IobGV0'@;
put 'IGNyPTA7Y3I8Tm47Y3IrKyl7Y29uc3QgTHI9dm5bY3JdLHtub2RlTmFtZTpFaSxpbm5lckhUTUw6TGkscm93U3Bhbjpmcixjb2xTcGFuOmlpfT1Mcixqcj15dFtKdF0uZmluZEluZGV4KE9uPT52b2lkIDA9PT1Pbik7aWYoIlREIj09PUVpKXtpZihmcj4xfHxpaT4xKXtmb3IobGV0IE1yPUp0'@;
put 'O01yPEp0K2ZyO01yKyspaWYoTXI8aXQpZm9yKGxldCBfcj1qcjtfcjxqcitpaTtfcisrKXl0W01yXVtfcl09bnVsbDtjb25zdCBGcj1Mci5nZXRBdHRyaWJ1dGUoInN0eWxlIik7RnImJkZyLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8RXQucHVzaCh7Y29sOmpyLHJvdzpKdCxy'@;
put 'b3dzcGFuOmZyLGNvbHNwYW46aWl9KX1sZXQgT249IiI7T249XyYmL2V4Y2VsL2dpLnRlc3QoXy5jb250ZW50KT9MaS5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwyfS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOkxpLnJlcGxhY2Uo'@;
put 'Lzxicihccyp8XC8pPltcclxuXT8vZ2ltLCJcclxuIikseXRbSnRdW2pyXT1Pbi5yZXBsYWNlKGRrZSxGcj0+THRlW0ZyXSl9ZWxzZSBTdC5wdXNoKExpKX19cmV0dXJuIEV0Lmxlbmd0aCYmKGEubWVyZ2VDZWxscz1FdCksU3QubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPVN0KSx5dC5sZW5ndGgm'@;
put 'JihhLmRhdGE9eXQpLGF9ZnVuY3Rpb24gR3UoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9dHlwZW9mIGM7aWYoIm51bWJlciI9PT1hKXJldHVybiFpc05hTihjKSYmaXNGaW5pdGUoYyk7aWYoInN0cmlu'@;
put 'ZyI9PT1hKXtpZigwPT09Yy5sZW5ndGgpcmV0dXJuITE7aWYoMT09PWMubGVuZ3RoKXJldHVybi9cZC8udGVzdChjKTtjb25zdCBkPUFycmF5LmZyb20obmV3IFNldChbIi4iLC4uLmxdKSkubWFwKGg9PmBcXCR7aH1gKS5qb2luKCJ8Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF5bKy1dP1xccyoo'@;
put 'KCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiBSdGUo'@;
put 'Yyl7cmV0dXJuIEd1KGMsWyIsIl0pfWZ1bmN0aW9uIHZvKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIHZrKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'JiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gTE4oYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1jb25zdCBPdGU9bmV3IE1hcChbWyJhc2MiLFst'@;
put 'MSwxXV0sWyJkZXNjIixbMSwtMV1dXSkscGtlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCxna2U9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsdmtlPWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVj'@;
put 'bGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBfaygpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rpb24gVCgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBXKGll'@;
put 'KXtyZXR1cm4gbC5oYXMoaWUpfXJldHVybiBjPVJhKGMpP2M6dmtlLHthZGRJdGVtOmZ1bmN0aW9uIGEoaWUscGUpe2lmKFcoaWUpKXRocm93IG5ldyBFcnJvcihjKGllKSk7bC5zZXQoaWUscGUpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJZDpmdW5jdGlvbiBmKGllKXtj'@;
put 'b25zdFtwZV09VCgpLmZpbmQod2U9PntsZXRbRWUsWmVdPXdlO3JldHVybiBpZT09PVplJiZFZX0pfHxbbnVsbF07cmV0dXJuIHBlfSxnZXRJdGVtOmZ1bmN0aW9uIF8oaWUpe3JldHVybiBsLmdldChpZSl9LGdldEl0ZW1zOlQsaGFzSXRlbTpXLHJlbW92ZUl0ZW06ZnVuY3Rpb24gZChpZSl7'@;
put 'cmV0dXJuIGwuZGVsZXRlKGllKX19fWNvbnN0IF9rZT1jPT5gJyR7Y30nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSB1bmlxdWUgc2V0LmAsUk49Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAiJHtjfSIgcGx1Z2luLmAsUHRlPWZ1bmN0aW9uIG1rZSgpe2xldHtlcnJv'@;
put 'clByaW9yaXR5RXhpc3RzOmMsZXJyb3JQcmlvcml0eU5hTjpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgYT1uZXcgTWFwO3JldHVybiBjPVJhKGMpP2M6cGtlLGw9UmEobCk/bDpna2Use2FkZEl0ZW06ZnVuY3Rpb24g'@;
put 'ZChmLF8pe2lmKCFHdShmKSl0aHJvdyBuZXcgRXJyb3IobChmKSk7aWYoYS5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2Euc2V0KGYsXyl9LGdldEl0ZW1zOmZ1bmN0aW9uIGgoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb'@;
put 'MF06ImFzYyI7Y29uc3RbXyxUXT1PdGUuZ2V0KGYpfHxPdGUuZ2V0KCJhc2MiKTtyZXR1cm5bLi4uYV0uc29ydCgoVyxpZSk9PldbMF08aWVbMF0/XzpUKS5tYXAoVz0+V1sxXSl9fX0oe2Vycm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4g'@;
put 'b24gcHJpb3JpdHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLEZ0ZT1mdW5jdGlvbiBia2UoKXtsZXR7ZXJyb3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'P2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9UmEoYyk/Yzpfa2Use2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0'@;
put 'aW9uIGQoKXtyZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czpSTn0pLE9OPV9rKHtlcnJvcklkRXhpc3RzOlJOfSk7ZnVuY3Rpb24gUE4oKXtyZXR1cm5bLi4uUHRlLmdldEl0ZW1zKCksLi4uRnRlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIHV5KGMpe2NvbnN0IGw9YnUoYyk7cmV0dXJu'@;
put 'IE9OLmdldEl0ZW0obCl9ZnVuY3Rpb24ganMoYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24gQ2tlKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09dXkoYykmJmZ1'@;
put 'bmN0aW9uIHdrZShjLGwsYSl7Y29uc3QgZD1idShjKTtpZihPTi5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihSTihkKSk7dm9pZCAwPT09YT9GdGUuYWRkSXRlbShkKTpQdGUuYWRkSXRlbShhLGQpLE9OLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOlNrZSxnZXRJdGVt'@;
put 'Ok1rZSxoYXNJdGVtOkh0ZSxnZXROYW1lczp4a2V9PXBkKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBiayhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighSHRlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1l'@;
put 'YCk7cmV0dXJuIE1rZShjKX1mdW5jdGlvbiBwaChjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksU2tlKGMsbCl9Y29uc3R7cmVnaXN0ZXI6RWtlLGdldEl0ZW06a2tlLGhhc0l0ZW06TnRlLGdldE5hbWVzOkFrZX09cGQoInZhbGlkYXRvcnMiKTtmdW5j'@;
put 'dGlvbiBGTihjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighTnRlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBra2UoYyl9ZnVuY3Rpb24gYTcoYyxsKXsic3RyaW5nIiE9dHlwZW9m'@;
put 'IGMmJihjPShsPWMpLlZBTElEQVRPUl9UWVBFKSxFa2UoYyxsKX1mdW5jdGlvbiB5ayhjKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBkeShjKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gSE4oKXtyZXR1cm4ib250b3Vj'@;
put 'aHN0YXJ0ImluIHdpbmRvd31sZXQgbDc7ZnVuY3Rpb24gVnRlKGMpe3JldHVybiBsN3x8KGw3PSJvYmplY3QiPT10eXBlb2YgSW50bD9uZXcgSW50bC5Db2xsYXRvcihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY29tcGFyZToi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlPyhhLGQpPT5gJHthfWAubG9jYWxlQ29tcGFyZShkKTooYSxkKT0+YT09PWQ/MDphPmQ/LTE6MSxsNyl9Y29uc3QgYzc9bmV3IFdlYWtNYXAsQnRlPWNsYXNzIFRrZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYs'@;
put 'Xyl7bGV0IFQ9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGw7dGhpcy53dFNldHRpbmdzPWQsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RUYWJsZT1mLHRoaXMuc2VsZWN0aW9ucz1fLHRoaXMucGFyZW50PVQsdGhpcy5ldmVudE1h'@;
put 'bmFnZXI9aCx0aGlzLmZhY2FkZUdldHRlcj1sLGM3LnNldCh0aGlzLHtzZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZDp2b2lkIDAsZGJsQ2xpY2tUaW1lb3V0OltudWxsLG51bGxdLGRibENsaWNrT3JpZ2luOltudWxsLG51bGxdfSksdGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZl'@;
put 'bnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJjb250ZXh0bWVudSIsZD0+dGhpcy5vbkNvbnRleHRNZW51KGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5UQUJMRSwibW91c2VvdmVy'@;
put 'IixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5UQUJMRSwibW91c2VvdXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhp'@;
put 'cy53dFRhYmxlLmhvbGRlciwidG91Y2hzdGFydCIsZD0+dGhpcy5vblRvdWNoU3RhcnQoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwidG91Y2hlbmQiLGQ9PnRoaXMub25Ub3VjaEVuZChkKSksdGhpcy5tb21lbnR1bVNjcm9sbGlu'@;
put 'Z3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xs'@;
put 'aW5nLm9uZ29pbmd8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVRvdWNoU2Nyb2xsIiksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSEwLHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMudG91Y2hBcHBsaWVkfHwo'@;
put 'dGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSExLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07bTIoKT9sKCk6KEhOKCkmJmwoKSwoKCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RU'@;
put 'YWJsZS5ob2xkZXIsIm1vdXNldXAiLGQ9PnRoaXMub25Nb3VzZVVwKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGwp'@;
put 'e2NvbnN0IGE9YzcuZ2V0KHRoaXMpLGg9dGhpcy5wYXJlbnRDZWxsKGwpLmNvb3JkcztpZihhLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kJiZoKXtjb25zdFtmLF9dPVtoLnJvdyxhLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kLmZyb20ucm93XSxbVCxXXT1baC5jb2wsYS5zZWxlY3Rl'@;
put 'ZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9tLmNvbF07cmV0dXJuIGY9PT1fJiZUPT09V31yZXR1cm4hMX1wYXJlbnRDZWxsKGwpe2NvbnN0IGE9e30saD10eShsLFsiVEQiLCJUSCJdLHRoaXMud3RUYWJsZS5UQUJMRSk7cmV0dXJuIGg/KGEuY29vcmRzPXRoaXMud3RUYWJsZS5nZXRDb29yZHMo'@;
put 'aCksYS5URD1oKTpCbyhsLCJ3dEJvcmRlciIpJiZCbyhsLCJjdXJyZW50Iik/KGEuY29vcmRzPXRoaXMuc2VsZWN0aW9ucy5nZXRDZWxsKCkuY2VsbFJhbmdlLmhpZ2hsaWdodCxhLlREPXRoaXMud3RUYWJsZS5nZXRDZWxsKGEuY29vcmRzKSk6Qm8obCwid3RCb3JkZXIiKSYmQm8obCwiYXJl'@;
put 'YSIpJiZ0aGlzLnNlbGVjdGlvbnMuY3JlYXRlT3JHZXRBcmVhKCkuY2VsbFJhbmdlJiYoYS5jb29yZHM9dGhpcy5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpLmNlbGxSYW5nZS50byxhLlREPXRoaXMud3RUYWJsZS5nZXRDZWxsKGEuY29vcmRzKSksYX1vbk1vdXNlRG93bihsKXtjb25z'@;
put 'dCBhPWM3LmdldCh0aGlzKSxkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsaD12TihvdGUsbC50YXJnZXQpLGY9bC50YXJnZXQ7aWYoZj09PWR8fGgoMCk9PT1kfHxoKDEpPT09ZClyZXR1cm47Y29uc3QgXz10aGlzLnBhcmVudENlbGwoZik7Qm8oZiwiY29y'@;
put 'bmVyIik/dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsbCxmKTpfLlREJiZ0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsbCxfLmNvb3JkcyxfLlREKSwoMD09'@;
put 'PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJl8uVEQmJihhLmRibENsaWNrT3JpZ2luWzBdPV8uVEQsY2xlYXJUaW1lb3V0KGEuZGJsQ2xpY2tUaW1lb3V0WzBdKSxhLmRibENsaWNrVGltZW91dFswXT1zZXRUaW1lb3V0KCgpPT57YS5kYmxDbGlja09yaWdpblswXT1udWxsfSwxZTMp'@;
put 'KX1vbkNvbnRleHRNZW51KGwpe2lmKHRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbENvbnRleHRNZW51Iikpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29udGV4dE1lbnUiLGwsYS5jb29yZHMsYS5URCl9fW9uTW91'@;
put 'c2VPdmVyKGwpe2lmKCF0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgYT10aGlzLnd0VGFibGUuVEFCTEUsZD10eShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPXRoaXMucGFyZW50fHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJlZwKGQs'@;
put 'YSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLHRoaXMud3RUYWJsZS5nZXRDb29yZHMoZCksZCkpfW9uTW91c2VPdXQobCl7aWYoIXRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlT3V0IikpcmV0dXJuO2NvbnN0IGE9dGhp'@;
put 'cy53dFRhYmxlLlRBQkxFLGQ9dHkobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD10eShsLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sYSksZj10aGlzLnBhcmVudHx8dGhpcztkJiZkIT09aCYmVnAoZCxhKSYmKHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCx0aGlzLnd0'@;
put 'VGFibGUuZ2V0Q29vcmRzKGQpLGQpLG51bGw9PT1oJiYoZi5sYXN0TW91c2VPdmVyPW51bGwpKX1vbk1vdXNlVXAobCl7Y29uc3QgYT1jNy5nZXQodGhpcyksZD10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2QuVEQmJnRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlVXAiKSYmdGhp'@;
put 'cy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlVXAiLGwsZC5jb29yZHMsZC5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoZC5URD09PWEuZGJsQ2xpY2tPcmlnaW5bMF0mJmQuVEQ9PT1hLmRibENsaWNrT3JpZ2luWzFdPyhCbyhsLnRhcmdldCwiY29ybmVyIik/dGhp'@;
put 'cy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGQuY29vcmRzLGQuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxkLmNvb3JkcyxkLlREKSxhLmRibENsaWNrT3JpZ2luWzBdPW51bGwsYS5kYmxDbGlja09yaWdpblsxXT1udWxsKTpkLlREPT09'@;
put 'YS5kYmxDbGlja09yaWdpblswXSYmKGEuZGJsQ2xpY2tPcmlnaW5bMV09ZC5URCxjbGVhclRpbWVvdXQoYS5kYmxDbGlja1RpbWVvdXRbMV0pLGEuZGJsQ2xpY2tUaW1lb3V0WzFdPXNldFRpbWVvdXQoKCk9PnthLmRibENsaWNrT3JpZ2luWzFdPW51bGx9LDUwMCkpKX1vblRvdWNoU3RhcnQo'@;
put 'bCl7YzcuZ2V0KHRoaXMpLnNlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kPXRoaXMuc2VsZWN0aW9ucy5nZXRDZWxsKCkuY2VsbFJhbmdlLHRoaXMudG91Y2hBcHBsaWVkPSEwLHRoaXMub25Nb3VzZURvd24obCl9b25Ub3VjaEVuZChsKXt2YXIgYTtjb25zdCBkPWwudGFyZ2V0LGg9bnVsbD09'@;
put 'PShhPXRoaXMucGFyZW50Q2VsbChkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29vcmRzLGY9S2koaCkmJmgucm93Pj0wJiZoLmNvbD49MDtpZihsLmNhbmNlbGFibGUmJmYmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgVD1bIkEiLCJC'@;
put 'VVRUT04iLCJJTlBVVCJdO2JOKCkmJih3dGUoKXx8Q3RlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCkmJiFULmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRo'@;
put 'aXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxoKXtjb25zdCBmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZShsKTtmJiZmKGEsZCxoLHRoaXMuZmFjYWRlR2V0dGVyKCkpfWRlc3Ryb3koKXtjb25zdCBsPWM3LmdldCh0aGlzKTtj'@;
put 'bGVhclRpbWVvdXQobC5kYmxDbGlja1RpbWVvdXRbMF0pLGNsZWFyVGltZW91dChsLmRibENsaWNrVGltZW91dFsxXSksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX07Y2xhc3MganRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdXJyZW50U2l6ZT0wLHRoaXMubmV4dFNpemU9MCx0aGlzLmN1'@;
put 'cnJlbnRPZmZzZXQ9MCx0aGlzLm5leHRPZmZzZXQ9MH1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWNsYXNzIFBr'@;
put 'ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2l6ZT1uZXcganRlLHRoaXMud29ya2luZ1NwYWNlPTAsdGhpcy5zaGFyZWRTaXplPW51bGx9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZzZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0'@;
put 'aGlzLnNpemV9aXNTaGFyZWQoKXtyZXR1cm4gdGhpcy5zaGFyZWRTaXplIGluc3RhbmNlb2YganRlfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwud29ya2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwu'@;
put 'Z2V0Vmlld1NpemUoKX1wcmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIsbC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX1jbGFzcyB6dGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hLHRoaXMuc2l6'@;
put 'ZVNldD1uZXcgUGtlLHRoaXMuY2hpbGROb2RlVHlwZT1kLnRvVXBwZXJDYXNlKCksdGhpcy52aXN1YWxJbmRleD0wLHRoaXMuY29sbGVjdGVkTm9kZXM9W119c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6'@;
put 'ZVNldC5zZXRPZmZzZXQobCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtj'@;
put 'b25zdCBsPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9Z2V0UmVuZGVyZWRDaGlsZENvdW50KCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9MDtpZih0aGlzLmlzU2hhcmVkVmlld1NldCgp'@;
put 'KXtsZXQgaD1sLmZpcnN0RWxlbWVudENoaWxkO2Zvcig7aDspe2lmKGgudGFnTmFtZT09PXRoaXMuY2hpbGROb2RlVHlwZSlkKz0xO2Vsc2UgaWYoYS5pc1BsYWNlT24oMSkpYnJlYWs7aD1oLm5leHRFbGVtZW50U2libGluZ319ZWxzZSBkPWwuY2hpbGRFbGVtZW50Q291bnQ7cmV0dXJuIGR9'@;
put 'c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMudmlzdWFsSW5kZXg9MDtjb25zdHtyb290Tm9kZTpsLHNpemVTZXQ6YX09dGhpcyxkPXRoaXMuaXNTaGFyZWRWaWV3U2V0KCkse25leHRTaXplOmh9PWEuZ2V0Vmlld1NpemUoKTtsZXQgZj10aGlzLmdldFJlbmRlcmVk'@;
put 'Q2hpbGRDb3VudCgpO2Zvcig7ZjxoOyl7Y29uc3QgVD10aGlzLm5vZGVzUG9vbCgpOyFkfHxkJiZhLmlzUGxhY2VPbigyKT9sLmFwcGVuZENoaWxkKFQpOmwuaW5zZXJ0QmVmb3JlKFQsbC5maXJzdENoaWxkKSxmKz0xfWNvbnN0IF89ZCYmYS5pc1BsYWNlT24oMSk7Zm9yKDtmPmg7KWwucmVt'@;
put 'b3ZlQ2hpbGQoXz9sLmZpcnN0Q2hpbGQ6bC5sYXN0Q2hpbGQpLGYtPTF9cmVuZGVyKCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9dGhpcy52aXN1YWxJbmRleDt0aGlzLmlzU2hhcmVkVmlld1NldCgpJiZhLmlzUGxhY2VPbigyKSYmKGQrPWEuc2hhcmVkU2l6ZS5u'@;
put 'ZXh0U2l6ZSk7bGV0IGg9bC5jaGlsZE5vZGVzW2RdO2lmKGgudGFnTmFtZSE9PXRoaXMuY2hpbGROb2RlVHlwZSl7Y29uc3QgZj10aGlzLm5vZGVzUG9vbCgpO2wucmVwbGFjZUNoaWxkKGYsaCksaD1mfXRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChoKSx0aGlzLnZpc3VhbEluZGV4Kz0xfWVu'@;
put 'ZCgpe319Y2xhc3MgVXRlIGV4dGVuZHMgenRle3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXpl'@;
put 'U2V0KSxsLnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWNsYXNzIEZrZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm5vZGVUeXBlPWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4oKXtyZXR1cm4gdGhpcy5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKX19Y2xhc3MgaHl7Y29uc3RydWN0b3IobCxhKXt0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IEZrZShsKTpudWxsLHRoaXMubm9kZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWEsdGhpcy50YWJsZT1udWxsLHRoaXMu'@;
put 'cmVuZGVyZWROb2Rlcz0wfXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1jbGFzcyBIa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KCJUSCIpLHRoaXMub3JkZXJWaWV3cz1uZXcgV2Vha01hcCx0aGlzLnNvdXJjZVJvd0luZGV4PTB9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgVXRlKGwsZD0+dGhpcy5ub2Rlc1Bv'@;
put 'b2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlz'@;
put 'LnRhYmxlO2ZvcihsZXQgXz0wO188bDtfKyspe2NvbnN0IFQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKF8pLFc9aC5nZXRSZW5kZXJlZE5vZGUoXyk7dGhpcy5zb3VyY2VSb3dJbmRleD1UO2NvbnN0IGllPXRoaXMub2J0YWluT3JkZXJWaWV3KFcpLHBlPWYub2J0YWluT3JkZXJW'@;
put 'aWV3KFcpO2llLmFwcGVuZFZpZXcocGUpLnNldFNpemUoZCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IHdlPTA7d2U8ZDt3ZSsrKXtpZS5yZW5kZXIoKTtjb25zdCBFZT1pZS5nZXRDdXJyZW50Tm9kZSgpO0VlLmNsYXNz'@;
put 'TmFtZT0iIixFZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksYVt3ZV0oVCxFZSx3ZSl9aWUuZW5kKCl9fX1jbGFzcyBOa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDph'@;
put 'fT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IFQ9MCxXPWw7VDxXO1QrKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW1RdLGR8fChkPXRoaXMudGFi'@;
put 'bGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQu'@;
put 'Y3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCBfPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYoXz5s'@;
put 'KWZvcihsZXQgVD1sO1Q8XztUKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZnMihkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29s'@;
put 'dW1uSGVhZGVyRnVuY3Rpb25zOmQsY29sdW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsXz10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07Zm9yKGxldCBUPS0xKmY7VDxoO1QrPTEpe2NvbnN0IFc9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNl'@;
put 'KFQpLGllPV8uY2hpbGROb2Rlc1tUK2ZdO2llLmNsYXNzTmFtZT0iIixpZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksZFthXShXLGllLGEpfX19fWNsYXNzIFZrZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVy'@;
put 'Omwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGUsZD1sK2E7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7'@;
put 'dGhpcy5yZW5kZXJlZE5vZGVzPmQ7KXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlz'@;
put 'LnRhYmxlO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLF89dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7X31weGB9'@;
put 'Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksXz10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke199'@;
put 'cHhgfWNvbnN0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2QmJnBpKGQsInJvd0hlYWRlciIpfX1sZXQgWnRlPSExO2NsYXNzIEJrZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksdGhpcy5vcmRlclZpZXc9bmV3IHp0ZShsLGE9PnRoaXMubm9kZXNQb29sLm9i'@;
put 'dGFpbihhKSx0aGlzLm5vZGVUeXBlKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IVp0ZSYmbD4xZTMmJihadGU9ITAsR2EoQWFgUGVyZm9ybWFuY2UgdGlwOiBIYW5k'@;
put 'c29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLiBDb25zaWRlciBsaW1pdGluZ1x4MjAKICAgICAgICB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vciB0dXJuaW5nIG9mZiB0aGUgInJlbmRl'@;
put 'ckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgYT0wO2E8bDthKyspdGhpcy5vcmRlclZpZXcucmVuZGVyKCk7dGhpcy5vcmRlclZpZXcuZW5kKCl9'@;
put 'fWNsYXNzIGprZSBleHRlbmRzIGh5e2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIiksdGhpcy5vcmRlclZpZXdzPW5ldyBXZWFrTWFwLHRoaXMuc291cmNlUm93SW5kZXg9MH1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVy'@;
put 'Vmlld3MuZ2V0KGwpOihhPW5ldyBVdGUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEs'@;
put 'cm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IGY9MDtmPGw7ZisrKXtjb25zdCBfPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShmKSxUPWQuZ2V0UmVuZGVyZWROb2RlKGYpO3RoaXMuc291cmNlUm93SW5kZXg9Xztjb25zdCBXPXRoaXMub2J0YWluT3JkZXJW'@;
put 'aWV3KFQpLGllPWgub2J0YWluT3JkZXJWaWV3KFQpO1cucHJlcGVuZFZpZXcoaWUpLnNldFNpemUoYSkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IHBlPTA7cGU8YTtwZSsrKXtXLnJlbmRlcigpO2NvbnN0IHdlPVcuZ2V0'@;
put 'Q3VycmVudE5vZGUoKSxFZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UocGUpO0JvKHdlLCJoaWRlIil8fCh3ZS5jbGFzc05hbWU9IiIpLHdlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx3ZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpLHRoaXMudGFibGUuY2VsbFJlbmRlcmVy'@;
put 'KF8sRWUsd2UpfVcuZW5kKCl9fX1jbGFzcyB6a2V7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9v'@;
put 'dE5vZGUub3duZXJEb2N1bWVudCx0aGlzLnJvd0hlYWRlcnM9bnVsbCx0aGlzLmNvbHVtbkhlYWRlcnM9bnVsbCx0aGlzLmNvbEdyb3VwPW51bGwsdGhpcy5yb3dzPW51bGwsdGhpcy5jZWxscz1udWxsLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLnJv'@;
put 'd1V0aWxzPW51bGwsdGhpcy5jb2x1bW5VdGlscz1udWxsLHRoaXMucm93c1RvUmVuZGVyPTAsdGhpcy5jb2x1bW5zVG9SZW5kZXI9MCx0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLnJvd0hlYWRlcnNDb3VudD0wLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPVtdLHRoaXMuY29s'@;
put 'dW1uSGVhZGVyc0NvdW50PTAsdGhpcy5jZWxsUmVuZGVyZXI9YX1zZXRBeGlzVXRpbHMobCxhKXt0aGlzLnJvd1V0aWxzPWwsdGhpcy5jb2x1bW5VdGlscz1hfXNldFZpZXdwb3J0U2l6ZShsLGEpe3RoaXMucm93c1RvUmVuZGVyPWwsdGhpcy5jb2x1bW5zVG9SZW5kZXI9YX1zZXRGaWx0ZXJz'@;
put 'KGwsYSl7dGhpcy5yb3dGaWx0ZXI9bCx0aGlzLmNvbHVtbkZpbHRlcj1hfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXt0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1sLHRoaXMucm93SGVhZGVyc0NvdW50PWwubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWEsdGhpcy5j'@;
put 'b2x1bW5IZWFkZXJzQ291bnQ9YS5sZW5ndGh9c2V0UmVuZGVyZXJzKCl7bGV0e3Jvd0hlYWRlcnM6bCxjb2x1bW5IZWFkZXJzOmEsY29sR3JvdXA6ZCxyb3dzOmgsY2VsbHM6Zn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2wuc2V0'@;
put 'VGFibGUodGhpcyksYS5zZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksZi5zZXRUYWJsZSh0aGlzKSx0aGlzLnJvd0hlYWRlcnM9bCx0aGlzLmNvbHVtbkhlYWRlcnM9YSx0aGlzLmNvbEdyb3VwPWQsdGhpcy5yb3dzPWgsdGhpcy5jZWxscz1mfXJlbmRl'@;
put 'cmVkUm93VG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRo'@;
put 'aXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJzLnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhp'@;
put 'cy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0UmVuZGVyZWROb2RlKGQpO2lmKGguZmlyc3RDaGlsZCl7Y29uc3QgZj10'@;
put 'aGlzLnJlbmRlcmVkUm93VG9Tb3VyY2UoZCksXz10aGlzLnJvd1V0aWxzLmdldEhlaWdodChmKTtoLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PV8/Xy0xKyJweCI6IiJ9fX19Y2xhc3MgVWtle2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93'@;
put 'VXRpbHM6Zixjb2x1bW5VdGlsczpfLGNlbGxSZW5kZXJlcjpUfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgemtlKGwse2NlbGxSZW5kZXJlcjpUfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMo'@;
put 'e3Jvd0hlYWRlcnM6bmV3IEhrZSxjb2x1bW5IZWFkZXJzOm5ldyBOa2UoYSksY29sR3JvdXA6bmV3IFZrZShkKSxyb3dzOm5ldyBCa2UoaCksY2VsbHM6bmV3IGprZX0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGYsXyl9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVy'@;
put 'LnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJl'@;
put 'cnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19Y2xhc3MgWmtle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWEsdGhpcy5oZWFkZXJXaWR0aHM9'@;
put 'bmV3IE1hcH1nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5kYXRh'@;
put 'QWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7bGV0IGQ9dGhpcy5nZXRXaWR0aChsKTtpZihhKXtjb25zdCBoPWEuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxkKTtoJiYoZD1oKX1yZXR1cm4gZH1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRo'@;
put 'KGwpe3JldHVybiB0aGlzLmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCxj'@;
put 'bG9uZVNvdXJjZTpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1oP2gud3RUYWJsZS5ob2xkZXI6YS5ob2xkZXIsXz1mLm9mZnNldEhlaWdodDxmLnNjcm9sbEhlaWdodD9JYygpOjA7bGV0IFQ9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGQuY29sdW1uc1JlbmRlckNhbGN1'@;
put 'bGF0b3IucmVmcmVzaFN0cmV0Y2hpbmcoZC5nZXRWaWV3cG9ydFdpZHRoKCktXyksVD1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLFQpLG51bGwhPVQpe2NvbnN0IFc9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLGllPWwuZ2V0U2V0dGluZygiZGVmYXVs'@;
put 'dENvbHVtbldpZHRoIik7Zm9yKGxldCBwZT0wO3BlPFc7cGUrKyl7bGV0IHdlPUFycmF5LmlzQXJyYXkoVCk/VFtwZV06VDt3ZT13ZT8/aWUsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KHBlLHdlKX19fX1jbGFzcyBZa2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0'@;
put 'aGlzLnd0U2V0dGluZ3M9YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT12b2lkIDA9'@;
put 'PT1hP2Q6TWF0aC5tYXgoYSxkKSksYX19Y29uc3QgeWc9InRvcCIsZ2g9ImJvdHRvbSIsd2c9ImlubGluZV9zdGFydCIsQ2c9InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIixacD0iYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiLFdrZT1beWcsZ2gsd2csQ2csWnBdLEdrZT1uZXcgTWFwKFtb'@;
put 'eWcsYGh0X2Nsb25lXyR7eWd9YF0sW2doLGBodF9jbG9uZV8ke2dofWBdLFt3ZyxgaHRfY2xvbmVfJHt3Z30gaHRfY2xvbmVfbGVmdGBdLFtDZyxgaHRfY2xvbmVfJHtDZ30gaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyYF0sW1pwLGBodF9jbG9uZV8ke1pwfSBodF9jbG9uZV9ib3R0b21fbGVm'@;
put 'dF9jb3JuZXJgXV0pO2Z1bmN0aW9uIG1oKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiAka2UoYyl7dmFyIGw9ZnVuY3Rpb24gcWtlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7'@;
put 'dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp'@;
put 'fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgdTc9Y2xhc3Mg'@;
put 'S2tle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7bWgodGhpcywid3RTZXR0aW5ncyIsbnVsbCksbWgodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksbWgodGhpcywiVEJPRFkiLG51bGwpLG1oKHRoaXMsIlRIRUFEIixudWxsKSxtaCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksbWgodGhpcywiaGFz'@;
put 'VGFibGVIZWlnaHQiLCEwKSxtaCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksbWgodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxtaCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksbWgodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVy'@;
put 'Ij09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxF'@;
put 'PWQucm9vdFRhYmxlLGROKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53'@;
put 'dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5j'@;
put 'b3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3QgXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aChfKSksdGhpcy5yb3dVdGls'@;
put 'cz1uZXcgWWtlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IFprZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IFVrZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0'@;
put 'aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIil9KX1p'@;
put 'cyhsKXtyZXR1cm4gdGhpcy5uYW1lPT09bH1maXhUYWJsZURvbVRyZWUoKXtjb25zdCBsPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMuVEJPRFl8fCh0aGlzLlRCT0RZPWwuY3JlYXRlRWxlbWVu'@;
put 'dCgidGJvZHkiKSx0aGlzLlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1sLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUo'@;
put 'dGhpcy5USEVBRCx0aGlzLlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNvbGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9bC5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09M'@;
put 'R1JPVVAsdGhpcy5USEVBRCkpfWNyZWF0ZVNwcmVhZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkfWNyZWF0ZUhpZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8'@;
put 'YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dEhpZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQo'@;
put 'bCkpLGR9Y3JlYXRlSG9sZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhQm8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp'@;
put 'LGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRl'@;
put 'KCJkaXIiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSksZC5hcHBlbmRDaGlsZChsKSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRp'@;
put 'bmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksXz1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksVz1ULmxlbmd0aCxpZT1h'@;
put 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxwZT1pZS5sZW5ndGg7bGV0IHdlPSExLEVlPWw7aWYodGhpcy5pc01hc3RlciYmKHRoaXMuaG9sZGVyT2Zmc2V0PUtsKHRoaXMuaG9sZGVyKSxFZT1oLmNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKEVlKSxXJiYhYS5nZXRTZXR0aW5nKCJmaXhl'@;
put 'ZENvbHVtbnNTdGFydCIpKSl7Y29uc3QgaXQ9ZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxldD10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09aXQsZXQhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKEVlPSExKX1p'@;
put 'Zih0aGlzLmlzTWFzdGVyJiYod2U9ZC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCkpLEVlKXRoaXMuaXNNYXN0ZXImJmguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZCYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9LbCh0aGlzLlRBQkxFKTp0'@;
put 'aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgaXQ9Zj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOjAsZXQ9Xz4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpOjA7dGhpcy5yb3dGaWx0ZXI9bmV3IGNsYXNzIElrZXtjb25zdHJ1Y3RvcihsLGEs'@;
put 'ZCl7dGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJj'@;
put 'ZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4gdGhpcy5y'@;
put 'ZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fShpdCxmLHBlKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgY2xhc3MgRGtl'@;
put 'e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5v'@;
put 'ZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNl'@;
put 'Q29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19KGV0LF8sVyk7bGV0'@;
put 'IHl0PSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IEV0PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxFdCkseXQ9ITAhPT1FdC5za2lwUmVuZGVyfWlmKHl0KXtsZXQgRXQ7aWYo'@;
put 'dGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoVCxpZSksKHRoaXMuaXMoZ2gpfHx0aGlzLmlzKFpwKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFQsW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCksdGhpcy50YWJs'@;
put 'ZVJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiYoRXQ9dGhpcy5k'@;
put 'YXRhQWNjZXNzT2JqZWN0LndvcmtzcGFjZVdpZHRoLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbnRhaW5lcldpZHRoPW51bGwsdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rl'@;
put 'cnx8dGhpcy5pcyhnaCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMucmVmcmVzaCghMSksdGhp'@;
put 'cy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMuYXBwbHlUb0RPTSgpO2NvbnN0IFN0PXdhKHRoaXMuaGlkZXIpLEp0PXdhKHRoaXMuVEFCTEUpOzAhPT1TdCYmSnQhPT1TdCYmKHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVy'@;
put 'LmNvbEdyb3VwLnJlbmRlcigpKSxFdCE9PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb250YWluZXJXaWR0aD1udWxsLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhz'@;
put 'KCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVyLmNvbEdyb3VwLnJlbmRlcigpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCl9ZWxzZSB0aGlzLmlzKGdoKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVu'@;
put 'dHNTaXplKCl9fWxldCBaZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKFplPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihaZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fFplKSxaZT1kLmlubGluZVN0YXJ0'@;
put 'T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8WmUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0'@;
put 'YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLFplPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLnJlZnJlc2hTZWxlY3Rpb25zKEVlKSx3ZSYmZC5zeW5jU2Nyb2xs'@;
put 'V2l0aE1hc3RlcigpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVt'@;
put 'bkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBmLF8sVDtjb25zdCBXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8W107Zm9yKDtkOylkLT0xLGY9dGhpcy5n'@;
put 'ZXRDb2x1bW5IZWFkZXJIZWlnaHQoZCksXz10aGlzLmdldENvbHVtbkhlYWRlcihhLGQpLF8mJihUPWpmKF8pLCghZiYmaDxUfHxmPFQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1UKSxBcnJheS5pc0FycmF5KFcpP251bGwh'@;
put 'PVdbZF0mJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVdbZF0pOmlzTmFOKFcpfHwodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1XKSx0aGlzLmRhdGFBY2Nlc3NPYmpl'@;
put 'Y3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPChXW2RdfHxXKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09V1tkXXx8VykpfWFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKXtjb25zdHt3dFNldHRpbmdz'@;
put 'Omx9PXRoaXMsYT10aGlzLlRIRUFELmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO2ZvcihsZXQgZj0wLF89bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2Y8XztmKyspaWYoZFtmXSl7aWYoIWFb'@;
put 'Zl18fDA9PT1hW2ZdLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjthW2ZdLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PWAke2RbZl19cHhgfX1yZXNldE92ZXJzaXplZFJvd3MoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'O2lmKCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKGdoKSkmJiFsLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXtjb25zdCBkPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9T'@;
put 'b3VyY2UoaCk7YS5vdmVyc2l6ZWRSb3dzJiZhLm92ZXJzaXplZFJvd3NbZl0mJihhLm92ZXJzaXplZFJvd3NbZl09dm9pZCAwKX19fXJlbW92ZUNsYXNzRnJvbUNlbGxzKGwpe2NvbnN0IGE9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtsfWApO2ZvcihsZXQgZD0wLGg9YS5sZW5n'@;
put 'dGg7ZDxoO2QrKylXbyhhW2RdLGwpfXJlZnJlc2hTZWxlY3Rpb25zKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyx7c2VsZWN0aW9uczpkfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuO2NvbnN0IGg9QXJyYXkuZnJvbShkKSxmPWgubGVuZ3RoO2lmKGwpe2NvbnN0IF89'@;
put 'W107Zm9yKGxldCBpZT0wO2llPGY7aWUrKyl7Y29uc3R7aGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lOnBlLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTp3ZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6RWV9PWhbaWVdLnNldHRpbmdzLFplPWhbaWVdLmNsYXNzTmFtZXMsaXQ9WmUubGVuZ3RoO2Zv'@;
put 'cihsZXQgZXQ9MDtldDxpdDtldCsrKV8uaW5jbHVkZXMoWmVbZXRdKXx8Xy5wdXNoKFplW2V0XSk7cGUmJiFfLmluY2x1ZGVzKHBlKSYmXy5wdXNoKHBlKSx3ZSYmIV8uaW5jbHVkZXMod2UpJiZfLnB1c2god2UpLEVlJiYhXy5pbmNsdWRlcyhFZSkmJl8ucHVzaChFZSl9Y29uc3QgVD1hLmdl'@;
put 'dFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5KFQpKWZvcihsZXQgaWU9MDtpZTxULmxlbmd0aDtpZSsrKV8ucHVzaChUW2llXSk7Y29uc3QgVz1fLmxlbmd0aDtmb3IobGV0IGllPTA7aWU8VztpZSsrKXRoaXMucmVtb3ZlQ2xhc3NGcm9t'@;
put 'Q2VsbHMoX1tpZV0pfWZvcihsZXQgXz0wO188ZjtfKyspaFtfXS5kcmF3KHRoaXMuZmFjYWRlR2V0dGVyKCksbCl9Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsYSxkKTtpZiho'@;
put 'JiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztp'@;
put 'Zih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3QgXz1mLmNoaWxkTm9kZXNb'@;
put 'dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighXyYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIF99Z2V0Um93KGwpe2xldCBhPW51'@;
put 'bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09'@;
put 'PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2Fy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1b'@;
put 'XSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJy'@;
put 'b3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXTtyZXR1cm4gaD8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VD'@;
put 'b2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuW107Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93Rmls'@;
put 'dGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLF89Zj8uY2hpbGROb2Rlc1toXTtfJiZhLnB1c2goXyl9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIhPT1hLm5vZGVOYW1lJiYoYT1OcChhLFsiVEQiLCJUSCJdKSksbnVsbD09PWEpcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGUsaD1kLnBhcmVudE5vZGU7bGV0IGY9YXRlKGQpLF89YS5jZWxsSW5kZXg7cmV0dXJuIEJwKENnLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8QnAoeWcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYoZi09aC5jaGls'@;
put 'ZE5vZGVzLmxlbmd0aCk6Zj1CcChacCxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKGdoLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP3RoaXMucm93RmlsdGVy'@;
put 'LnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhmKTp0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpLF89QnAoQ2csYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcCh3ZyxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKFpwLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLmNv'@;
put 'bHVtbkZpbHRlci5vZmZzZXR0ZWRUSChfKTp0aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4oXyksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLF8pfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgaCxmLF8sVCxXLGw9dGhpcy5UQk9EWS5jaGlsZE5vZGVzLmxlbmd0aDtpZihsKnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0IikhPWpmKHRoaXMuVEJPRFkpLTF8fHRoaXMud3RTZXR0aW5ncy5n'@;
put 'ZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KWwtPTEsXz10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpLGg9dGhpcy5nZXRSb3dIZWlnaHQoXyksVD10aGlzLmdldFRyRm9yUm93KF8pLFc9VC5xdWVyeVNlbGVjdG9yKCJ0aCIpLGY9Vz9qZihXKTpqZihUKS0x'@;
put 'LCghaCYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTxmfHxoPGYpJiYoZis9MSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW19dPWYpfWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNb'@;
put 'dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVh'@;
put 'ZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5k'@;
put 'ZXJlZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVt'@;
put 'bigpfWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1u'@;
put 'QmVmb3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRl'@;
put 'cmVkUm93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93'@;
put 'cyIpPT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlz'@;
put 'LnJvd1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWdldFN0cmV0Y2hlZENvbHVtbldp'@;
put 'ZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiB3YSh0aGlzLlRBQkxFKX1nZXRIZWlnaHQo'@;
put 'KXtyZXR1cm4gYWwodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9d2EodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD1hbCh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldEhlaWdodCgp'@;
put 'fWlzVmlzaWJsZSgpe3JldHVybiBlNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9UmEobCk/bCgpOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGFbYS5sZW5n'@;
put 'dGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSksdGhpcy5jb3Jy'@;
put 'ZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sWXRlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygp'@;
put 'fSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtmaChZdGUsIk1JWElOX05BTUUiLCJz'@;
put 'dGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFd0ZT1ZdGUsR3RlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmly'@;
put 'c3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtyZXR1'@;
put 'cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu'@;
put 'Y291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9fTtmaChHdGUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9'@;
put 'KTtjb25zdCBOTj1HdGU7Y2xhc3MgVk4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLHlnKX19VGEoVk4sV3RlKSxUYShWTixOTik7Y29uc3QgUWtlPVZOO2Z1bmN0aW9uIEJOKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBlQWUoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gdEFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gJHRlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBzQWUoYyl7dmFyIGw9ZnVuY3Rpb24gYUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZnkoYyxsKXtyZXR1cm4gZnVuY3Rpb24gbEFlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxxdGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gcXRlKGMs'@;
put 'bCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBTZz1uZXcgV2Vha01hcDtjbGFzcyBqTntjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07JHRlKHRoaXMsInJvdyIsbnVsbCksJHRlKHRoaXMsImNvbCIsbnVsbCksZnVuY3Rpb24gaUFlKGMsbCxhKXsoZnVuY3Rpb24gb0FlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu'@;
put 'bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxTZyx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxmdW5jdGlvbiBjQWUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB1QWUoYyxsLGEpe2lmKGwu'@;
put 'c2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHF0ZShjLGwsInNldCIpLGEpLGF9KHRoaXMsU2csZCksdHlwZW9mIGw8InUiJiZ0'@;
put 'eXBlb2YgYTwidSImJih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7cmV0dXJuISh0aGlzLnJvdzwwfHx0aGlzLmNvbDwwfHx0aGlzLnJvdz49bC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKXx8dGhpcy5jb2w+PWwuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIikpfWlzRXF1YWwo'@;
put 'bCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJu'@;
put 'IHRoaXMucm93PD1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2Yo'@;
put 'bCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKGZ5KHRoaXMsU2cpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRo'@;
put 'aXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IGpOKHRoaXMucm93LHRoaXMuY29sLGZ5KHRoaXMsU2cpKX10b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgU2s9ak47ZnVuY3Rpb24gek4o'@;
put 'YyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGZBZShjKXt2YXIgbD1mdW5jdGlvbiBwQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs'@;
put 'dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i'@;
put 'b2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2aChjLGwpe3JldHVybiBmdW5jdGlvbiBnQWUoYyxs'@;
put 'KXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLEt0ZShjLGwsImdldCIpKX1mdW5jdGlvbiBLdGUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1'@;
put 'cm4gbC5nZXQoYyl9dmFyIGdkPW5ldyBXZWFrTWFwO2NsYXNzIFVOe2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn'@;
put 'dW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3pOKHRoaXMsImhpZ2hsaWdodCIsbnVsbCksek4odGhpcywiZnJvbSIsbnVsbCksek4odGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIGRBZShjLGwsYSl7KGZ1bmN0aW9u'@;
put 'IGhBZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsZ2Qse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksdGhpcy5o'@;
put 'aWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24gbUFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gdkFlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxLdGUoYyxsLCJzZXQiKSxhKSxhfSh0aGlzLGdkLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgp'@;
put 'LHRoaXN9c2V0RnJvbShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfWlzVmFsaWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4g'@;
put 'dGhpcy5mcm9tLnJvdz49MCYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9Z2V0T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyktTWF0aC5taW4odGhp'@;
put 'cy5mcm9tLnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJv'@;
put 'dzwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJvdywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MClyZXR1cm4gMDtj'@;
put 'b25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhsKXtj'@;
put 'b25zdHtyb3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJvdzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1JhbmdlKGwpe3JldHVybiB0aGlzLmluY2x1'@;
put 'ZGVzKGwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdykmJk1h'@;
put 'dGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50'@;
put 'by5jb2wpPT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3ZlcmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1pc1NvdXRoRWFz'@;
put 'dE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5p'@;
put 'c05vcnRoV2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5j'@;
put 'b2wmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigp'@;
put 'LmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tUmlnaHRD'@;
put 'b3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRv'@;
put 'cFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlz'@;
put 'LmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFu'@;
put 'Z2UobCl7aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGg9dGhpcy5nZXREaXJlY3Rpb24oKSxmPWwuZ2V0T3V0ZXJU'@;
put 'b3BTdGFydENvcm5lcigpLF89bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLFQ9TWF0aC5taW4oYS5yb3csZi5yb3cpLFc9TWF0aC5taW4oYS5jb2wsZi5jb2wpLGllPU1hdGgubWF4KGQucm93LF8ucm93KSxwZT1NYXRoLm1heChkLmNvbCxfLmNvbCksd2U9dGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhULFcpLEVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaWUscGUpO3JldHVybiB0aGlzLmZyb209d2UsdGhpcy50bz1FZSx0aGlzLnNldERpcmVjdGlvbihoKSx0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJiJOLVMiPT09dGhp'@;
put 'cy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJl'@;
put 'Y3Rpb25Ib3Jpem9udGFsbHkoKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJTRS1O'@;
put 'VyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENv'@;
put 'cm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90'@;
put 'dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJl'@;
put 'Y3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJF'@;
put 'LVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMu'@;
put 'c2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2Jy'@;
put 'ZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlz'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6'@;
put 'dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRC'@;
put 'b3R0b21SaWdodENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRo'@;
put 'aXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRDb3Ju'@;
put 'ZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlz'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0'@;
put 'aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdl'@;
put 'dE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BSaWdo'@;
put 'dENvcm5lcigpe3JldHVybiB2aCh0aGlzLGdkKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5y'@;
put 'b3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfWlz'@;
put 'Q29ybmVyKGwsYSl7cmV0dXJuISEoYSYmYS5pbmNsdWRlcyhsKSYmKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGEuZnJvbS5yb3csYS5mcm9tLmNvbCkpfHx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRo'@;
put 'aXMuX2NyZWF0ZUNlbGxDb29yZHMoYS5mcm9tLnJvdyxhLnRvLmNvbCkpfHx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLmZyb20uY29sKSl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlz'@;
put 'RXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLnRvLmNvbCkpKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21M'@;
put 'ZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwsYSl7aWYoIShsIGluc3RhbmNlb2YgU2spKXJldHVybiExO2lmKGEpe2NvbnN0e2Zyb206ZCx0bzpofT1hO2lmKGEuaW5jbHVkZXMobCkpe2lmKHRoaXMu'@;
put 'Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7aWYodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhkLnJvdyxoLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csZC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVu'@;
put 'ZENvcm5lcigpO2lmKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csaC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9fXJldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVu'@;
put 'ZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVy'@;
put 'Qm90dG9tU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDB9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBh'@;
put 'X3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMu'@;
put 'dG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3Jl'@;
put 'dHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0JiZoLnB1c2goInJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaCgibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMu'@;
put 'Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhp'@;
put 'cy50by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9y'@;
put 'KGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10'@;
put 'aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBVTih0'@;
put 'aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byx2aCh0aGlzLGdkKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBTayhsLGEsdmgodGhpcyxnZCkp'@;
put 'fX1jb25zdCBaTj1VTjtmdW5jdGlvbiBfMihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gX0FlKGMpe3ZhciBsPWZ1bmN0aW9uIGJBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp'@;
put 'e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj'@;
put 'KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFlOe2dldCBl'@;
put 'dmVudE1hbmFnZXIoKXtyZXR1cm4gbmV3IGxsKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7XzIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxfMih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSxfMih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLF8yKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksXzIo'@;
put 'dGhpcywic2VsZWN0aW9ucyIsdm9pZCAwKSxfMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLF8yKHRoaXMsImd1aWQiLGB3dF8ke2FOKCl9YCksXzIodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksXzIodGhpcywiZHJhd24iLCExKSxfMih0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxfMih0'@;
put 'aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IGNsYXNz'@;
put 'IG5BZXtjb25zdHJ1Y3RvcihsKXtCTih0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLEJOKHRoaXMsImxhc3RTY3JvbGxlZENvbHVtblBvcyIsLTEpLEJOKHRoaXMsImxhc3RTY3JvbGxlZFJvd1BvcyIsLTEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGws'@;
put 'YSxkLGgsZil7Y29uc3QgXz10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGQsZiksVD10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxhLGgpO3JldHVybiBffHxUfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRv'@;
put 'dGFsQ29sdW1uczpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCBfPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksVD10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCksVz12b2lkIDA9PT1hJiZ2'@;
put 'b2lkIDA9PT1kLHtmaXhlZENvbHVtbnNTdGFydDppZSxpbmxpbmVTdGFydE92ZXJsYXk6cGV9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihXJiZsPGllKXJldHVybiExO2xldCB3ZT0hMTtyZXR1cm4tMT09PV8/d2U9cGUuc2Nyb2xsVG8obCxXP2w+dGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Q'@;
put 'b3M6YSk6KFcmJihsPF98fGw+VCl8fCFXKSYmKHdlPXBlLnNjcm9sbFRvKGwsVz9sPlQ6YSkpLHdlJiYodGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Qb3M9bCksd2V9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRvdGFsUm93czpmfT10aGlzLmRhdGFBY2Nl'@;
put 'c3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCBfPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksVD10aGlzLmdldExhc3RWaXNpYmxlUm93KCksVz12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtmaXhlZFJvd3NCb3R0b206aWUsZml4'@;
put 'ZWRSb3dzVG9wOnBlLHRvcE92ZXJsYXk6d2V9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihXJiYobDxwZXx8bD5mLWllLTEpKXJldHVybiExO2xldCBFZT0hMTtyZXR1cm4tMT09PV8/RWU9d2Uuc2Nyb2xsVG8obCxXP2w+dGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M6ZCk6KFcmJihsPF98fGw+'@;
put 'VCl8fCFXKSYmKEVlPXdlLnNjcm9sbFRvKGwsVz9sPlQ6ZCkpLEVlJiYodGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M9bCksRWV9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgsZml4ZWRSb3dzVG9wOmYscm9v'@;
put 'dFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9YS5nZXRGaXJzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Xyl7Y29uc3QgVz1LbChhLnd0Um9vdEVsZW1lbnQpLGllPWpmKGEuaGlkZXIpLHBlPWpmKF8pLHdlPW55KF8sXyk7aWYo'@;
put 'Vy50b3AraWUtcGU8PXdlKXtsZXQgRWU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtFZSs9bC5zdW1DZWxsU2l6ZXMoMCxmKTtmb3IobGV0IFplPWg7WmU+MDtaZS0tKWlmKEVlKz1sLnN1bUNlbGxTaXplcyhaZS0xLFplKSxXLnRvcCtpZS1FZTw9d2Upe1Q9WmU7YnJlYWt9fX1yZXR1cm4g'@;
put 'VH1nZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBfPWEuZ2V0TGFzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVF'@;
put 'bGVtZW50PT09Zil7Y29uc3QgVD1LbChhLnd0Um9vdEVsZW1lbnQpLFc9bnkoZixmKTtpZihULnRvcD5XKXtjb25zdCBpZT1qZihmKTtsZXQgcGU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IHdlPTE7d2U8PWg7d2UrKylpZihwZSs9bC5zdW1DZWxsU2l6ZXMod2UtMSx3ZSks'@;
put 'VC50b3ArcGUtVz49aWUpe189d2UtMjticmVha319fXJldHVybiBffWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0e2lubGluZVN0YXJ0T3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxDb2x1bW5zOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7'@;
put 'bGV0IF89YS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3QgVD1LbChhLnd0Um9vdEVsZW1lbnQpLFc9aXkoYS5oaWRlciksaWU9aXkoZikscGU9TWF0aC5hYnMoaWsoZixmKSk7aWYoVC5sZWZ0K1ctaWU8PXBlKXtsZXQg'@;
put 'd2U9ZC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgRWU9aDtFZT4wO0VlLS0paWYod2UrPWwuc3VtQ2VsbFNpemVzKEVlLTEsRWUpLFQubGVmdCtXLXdlPD1wZSl7Xz1FZTticmVha319fXJldHVybiBffWdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9ZC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1fKXtsZXQgaWU9'@;
put 'bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3Qgd2U9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZT1NYXRoLmFicyh3ZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgp'@;
put 'fWVsc2UgaWU9S2woZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IHBlPU1hdGguYWJzKGlrKF8sXykpO2lmKGllPnBlKXtjb25zdCB3ZT1peShfKTtsZXQgRWU9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgWmU9MTtaZTw9ZjtaZSsrKWlmKEVlKz1hLnN1bUNlbGxTaXplcyhaZS0x'@;
put 'LFplKSxpZStFZS1wZT49d2Upe1Q9WmUtMjticmVha319fXJldHVybiBUfX0odGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdpbmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hp'@;
put 'bGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRN'@;
put 'TCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe2pwKGQsbFthXSl9XSl9fWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IFNrKGwsYSx0'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgWk4obCxhLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLGx8fHRoaXMud3RUYWJsZS5pc1Zpc2libGUoKT90aGlzLnd0VGFibGUuZHJhdyhsKTp0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMCx0aGlzfWdldENlbGwobCl7aWYoIShhcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiks'@;
put 'Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksXz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDxfKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVy'@;
put 'bGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5jb2w8XyYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVy'@;
put 'T3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9ZWxzZXtpZihsLmNvbDxfKXJldHVybiB0'@;
put 'aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RP'@;
put 'dmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4hKGwuY29sPDB8fGwucm93PDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxk'@;
put 'LGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiEobDwwKSYmdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4hKGw8MCkmJnRoaXMud3RTY3JvbGwuc2Ny'@;
put 'b2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJs'@;
put 'ZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LGdldCB0b3BPdmVybGF5'@;
put 'KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdw'@;
put 'b3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVybiBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENv'@;
put 'bHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBsLnd0U2V0dGluZ3Mu'@;
put 'Z2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdl'@;
put 'dCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVybiBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBsLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9'@;
put 'LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9ucygpe3JldHVybiBsLnNlbGVjdGlvbnN9LGdldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxzZXQgZHJhd24oYSl7bC5kcmF3bj1h'@;
put 'fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29s'@;
put 'dW1uc1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNW'@;
put 'aXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJs'@;
put 'ZUNhbGN1bGF0b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93'@;
put 'fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBjb3VudFJvd3NSZW5kZXJlZCgp'@;
put 'e3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9fX19ZnVuY3Rpb24gWHRlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB5QWUo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24gd0FlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0'@;
put 'dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwp'@;
put 'LGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQ0FlIGV4dGVuZHMgWU57Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksWHRlKHRoaXMsImNsb25lU291'@;
put 'cmNlIix2b2lkIDApLFh0ZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnd0VGFibGU9dGhp'@;
put 'cy5jbG9uZU92ZXJsYXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9ucz1kLnNlbGVjdGlvbnMsdGhpcy53dEV2ZW50PW5ldyBCdGUoaCx0aGlz'@;
put 'LmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25zLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiBTQWUoYyxsLGEp'@;
put 'e3JldHVybiBsPWZ1bmN0aW9uIE1BZShjKXt2YXIgbD1mdW5jdGlvbiB4QWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLGZoKHRoaXMsIndvdCIsbCx7d3Jp'@;
put 'dGFibGU6ITF9KSx0aGlzLmRvbUJpbmRpbmdzPWYsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aDtjb25zdHtUQUJMRTpfLGhpZGVyOlQsc3ByZWFkZXI6Vyxob2xkZXI6aWUsd3RSb290RWxlbWVudDpwZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMu'@;
put 'd290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPV8sdGhpcy5oaWRlcj1ULHRoaXMuc3ByZWFkZXI9Vyx0aGlzLmhvbGRlcj1pZSx0aGlzLnd0Um9vdEVsZW1lbnQ9cGUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj12Zyh0aGlzLmhp'@;
put 'ZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCksdGhpcy5jbG9uZT10aGlzLm1ha2VDbG9uZSgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXtjb25zdCBsPXRoaXMubmVlZEZ1bGxSZW5kZXI7dGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNo'@;
put 'b3VsZEJlUmVuZGVyZWQoKTtjb25zdCBhPWwhPT10aGlzLm5lZWRGdWxsUmVuZGVyO3JldHVybiBhJiYhdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5yZXNldCgpLGF9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0Nv'@;
put 'bnRhaW5lcj12Zyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9'@;
put 'ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXI6cnkobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhp'@;
put 'cy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCBHYShgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBlfSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5k'@;
put 'b21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxfPWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFQ9YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIp'@;
put 'LXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxXPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixpZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oVyksdG9wOlcub2Zmc2V0VG9wfSxwZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0'@;
put 'YXJ0UG9zaXRpb24obCksdG9wOmwub2Zmc2V0VG9wfTtsZXQgd2U9bnVsbDtyZXR1cm4gd2U9aD90aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KF8sZixwZSxpZSk6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihfLFQsZixwZSxpZSksd2V9'@;
put 'Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5vZmZzZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0'@;
put 'IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBfPTAsVD0wO2lmKGEpe2xldCBXPWYubGVmdDt0aGlzLmlzUnRsKCkmJihXPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtJYygp'@;
put 'KSksXz1XPD0wPy0xKlc6MH1lbHNlIF89aC5zdGFydDtyZXR1cm4gVD1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50b3Ase3N0YXJ0OmQuc3RhcnQrXyx0b3A6ZC50b3ArVH19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRo'@;
put 'aW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCBfX2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxfX3ZlcnRpY2FsPXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBU'@;
put 'PTAsVz0wO2lmKGR8fChUPV9faG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBpZT10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Vz0tMSp0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK2ll'@;
put 'LnRvcH1lbHNlIGx8fChXPV9fdmVydGljYWwtZi50b3ApO3JldHVybntzdGFydDpoLnN0YXJ0LVQsdG9wOmgudG9wLVd9fW1ha2VDbG9uZSgpe2lmKC0xPT09V2tlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1'@;
put 'cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGY9YS5jcmVhdGVFbGVtZW50KCJUQUJMRSIpLF89bC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7'@;
put 'aC5jbGFzc05hbWU9YCR7R2tlLmdldCh0aGlzLnR5cGUpfSBoYW5kc29udGFibGVgLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGwoKT8icnRsIjoibHRyIiksaC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGguc3R5bGUudG9wPTAsaC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIs'@;
put 'dGhpcy5pc1J0bCgpP2guc3R5bGUucmlnaHQ9MDpoLnN0eWxlLmxlZnQ9MCxmLmNsYXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxoLmFwcGVuZENoaWxkKGYpLF8uYXBwZW5kQ2hpbGQoaCk7Y29uc3QgVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0'@;
put 'dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1UfHwiaG9yaXpvbnRhbCI9PT1UJiZ0aGlzLnR5cGU9PT15Z3x8InZlcnRpY2FsIj09PVQmJnRoaXMudHlwZT09PXdnP2Q6ImhpZGRlbiI9PT1kLmdldENvbXB1dGVkU3R5bGUoXykuZ2V0UHJvcGVydHlWYWx1ZSgib3Zl'@;
put 'cmZsb3ciKT9sLmhvbGRlcjpyeShsLlRBQkxFKSxuZXcgQ0FlKGYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25zOnRoaXMud290LnNlbGVjdGlv'@;
put 'bnN9KX1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpO3RoaXMuY2xvbmUmJih0aGlzLm5lZWRGdWxsUmVuZGVyfHxhKSYmdGhpcy5jbG9uZS5kcmF3KGwp'@;
put 'LHRoaXMubmVlZEZ1bGxSZW5kZXI9YX1yZXNldCgpe2lmKCF0aGlzLmNsb25lKXJldHVybjtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7RG4oW2wuc3R5bGUsdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGwucGFyZW50Tm9kZS5zdHlsZV0sXz0+e18ud2lkdGg9IiIs'@;
put 'Xy5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNsYXNzIFRBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSx5'@;
put 'ZyxkLGgpLGZ1bmN0aW9uIEVBZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24ga0FlKGMpe3ZhciBsPWZ1bmN0aW9uIEFBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJv'@;
put 'd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTty'@;
put 'ZXR1cm4gbmV3IFFrZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLndvdC53dFRhYmxlLmhv'@;
put 'bGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGg9MCxmPSExO2lm'@;
put 'KHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxzeShsKTtlbHNle2NvbnN0e3d0VGFibGU6VH09dGhpcy53b3QsVz1ULmhpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Y9TWF0aC5jZWlsKFcuYm90dG9t'@;
put 'KT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksb2sobCwiMHB4IixgJHtofXB4YCl9Y29uc3QgXz10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLF99c2V0U2Nyb2xsUG9zaXRpb24o'@;
put 'bCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c7bGV0IGQ9ITE7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hJiZhLnNjcm9sbFkhPT1sPyhhLnNjcm9sbFRvKG1nKGEpLGwpLGQ9ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQu'@;
put 'c2Nyb2xsVG9wIT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWwsZD0hMCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09Xz9kOl8saCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6'@;
put 'ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1JYyhhKSxfPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxUPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZHx8Imhvcml6b250YWwiPT09VCl7bGV0IGllPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJh'@;
put 'clJpZ2h0JiYoaWUtPWgpLGllPU1hdGgubWluKGllLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksXy53aWR0aD1gJHtpZX1weGB9ZWxzZSBfLndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9Xy53aWR0aDtsZXQgVz1hbCh0aGlzLmNsb25lLnd0VGFi'@;
put 'bGUuVEFCTEUpO3RoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KFc9MCksXy5oZWlnaHQ9YCR7V31weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe3ZhciBsO2NvbnN0e2hvbGRlcjphfT10aGlzLmNsb25lLnd0VGFibGUse3NlbGVjdGlvbnM6ZH09dGhpcy53b3QsaD10aGlz'@;
put 'LmZhY2FkZUdldHRlcigpLGY9TWF0aC5hYnMobnVsbCE9PShsPWQ/LmdldENlbGwoKS5nZXRCb3JkZXIoaCkuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQpJiZ2b2lkIDAhPT1sP2w6MCk7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgs'@;
put 'YS5zdHlsZS53aWR0aD1hLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsYS5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQoYS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCwxMCkrZn1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lm'@;
put 'KCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtp'@;
put 'ZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3Zlcmxh'@;
put 'eU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3Vs'@;
put 'YXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtjb25zdHt3b3Q6ZCx3dFNldHRpbmdzOmh9PXRoaXMsXz0oZC5jbG9uZVNvdXJjZT9kLmNsb25lU291cmNlOmQp'@;
put 'Lnd0VGFibGUuaG9sZGVyO2xldCBUPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxXPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmXy5vZmZzZXRIZWlnaHQhPT1fLmNs'@;
put 'aWVudEhlaWdodCYmKFc9SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCBpZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHBlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7VCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLFQtPWQud3RWaWV3cG9y'@;
put 'dC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKHBlLWllLHBlKSxUKz0xfWVsc2UgVCs9dGhpcy5zdW1DZWxsU2l6ZXMoaC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsKTtyZXR1cm4gVCs9Vyx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFQpfWdldFRhYmxlUGFyZW50'@;
put 'T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbnkodGhpcy5tYWluVGFibGVTY3JvbGxh'@;
put 'YmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1t'@;
put 'aW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFi'@;
put 'bGVQYXJlbnRPZmZzZXQoKSwwKSxkPl8mJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIu'@;
put 'cGFyZW50Tm9kZTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik/V28oZCwiZW1wdHlDb2x1bW5zIik6cGkoZCwiZW1wdHlDb2x1bW5zIik7bGV0IGY9ITE7aWYoIWEpe2NvbnN0IF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFQ9'@;
put 'dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1fLFc9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoVHx8MD09PV8pJiZXLmxlbmd0aD4wKXtjb25zdCBpZT1CbyhkLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhwaShkLCJpbm5lckJvcmRlclRvcCIpLGY9IWllKTooV28oZCwiaW5uZXJCb3JkZXJUb3AiKSxmPWllKX19cmV0dXJuIGZ9fWNvbnN0IEp0ZT17'@;
put 'Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGE9Yy1sO3JldHVybiAwPT09Y3x8MD09PWw/LTE6YTwwPzA6YX0sZ2V0Rmlyc3RW'@;
put 'aXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVk'@;
put 'Um93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgp'@;
put 'e3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtmaChKdGUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFF0ZT1KdGU7Y2xhc3MgV04gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBl'@;
put 'cihsLGEsZCxoLGdoKX19VGEoV04sUXRlKSxUYShXTixOTik7Y29uc3QgTEFlPVdOO2NsYXNzIFBBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxnaCxkLGgpLGZ1bmN0aW9uIElBZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gUkFlKGMpe3ZhciBsPWZ1bmN0'@;
put 'aW9uIE9BZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NCb3R0b20iLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiZml4ZWRSb3dzQm90dG9tIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IExBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5k'@;
put 'b21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxoJiYidmVydGlj'@;
put 'YWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1gJHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihkKTtyZXR1cm4g'@;
put 'dGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBm'@;
put 'PTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1JYyhkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9c2V0U2Nyb2xs'@;
put 'UG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YT8oYS5zY3JvbGxUbyhtZyhhKSxsKSxkPSEwKTp0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9s'@;
put 'bFRvcCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD1sLGQ9ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdHt3dFRhYmxlOmQsd3RTZXR0'@;
put 'aW5nczpofT10aGlzLndvdCxmPWguZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBfPWwsVD0wO2Zvcig7XzxhOyl7Y29uc3QgVz1kLmdldFJvd0hlaWdodChfKTtUKz12b2lkIDA9PT1XP2Y6VyxfKz0xfXJldHVybiBUfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCh0aGlzLm5lZWRGdWxsUmVuZGVyfHxsKSYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXpl'@;
put 'KCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3MsZj1JYyhkKSxUPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHls'@;
put 'ZSxXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09Vyl7bGV0IHBlPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhclJpZ2h0'@;
put 'JiYocGUtPWYpLHBlPU1hdGgubWluKHBlLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksVC53aWR0aD1gJHtwZX1weGB9ZWxzZSBULndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9VC53aWR0aDtsZXQgaWU9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRB'@;
put 'QkxFKTt0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChpZT0wKSxULmhlaWdodD1gJHtpZX1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRo'@;
put 'aXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lm'@;
put 'KDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5'@;
put 'T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxh'@;
put 'dG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90'@;
put 'aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IF89MDthJiZmLm9mZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYoXz1JYyh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlz'@;
put 'LndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPV8sdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgp'@;
put 'e3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIG55KHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1l'@;
put 'bnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRh'@;
put 'aW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxfPWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksVD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xp'@;
put 'ZW50SGVpZ2h0O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS1UK2gsMCksZD5fJiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu'@;
put 'ZygiZml4ZWRSb3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjApe2NvbnN0IF89dGhpcy53b3Qud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZSxUPUJvKF8sImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KHBp'@;
put 'KF8sImlubmVyQm9yZGVyQm90dG9tIiksZj0hVCk6KFdvKF8sImlubmVyQm9yZGVyQm90dG9tIiksZj1UKX1yZXR1cm4gZn19Y29uc3QgZW5lPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09'@;
put 'PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDty'@;
put 'ZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRS'@;
put 'b3dzUmVuZGVyZWR9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1Zpc2libGV9fTtmaChlbmUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkUm93cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB0bmU9ZW5lLG5u'@;
put 'ZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiAwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPy0xOjB9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVk'@;
put 'Q29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoInRvdGFsQ29sdW1ucyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxjKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9fTtmaChubmUsIk1J'@;
put 'WElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgR049bm5lO2NsYXNzICROIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCx3Zyl9fVRhKCROLHRuZSksVGEoJE4sR04pO2NvbnN0IE5BZT0k'@;
put 'TjtjbGFzcyBWQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsd2csZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgTkFlKC4u'@;
put 'LmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCFs'@;
put 'LmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZj0wO3RoaXMu'@;
put 'dHJpbW1pbmdDb250YWluZXIhPT1hfHxoJiYiaG9yaXpvbnRhbCI9PT1oPyhmPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxzeShkKSk6KGY9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxvayhkLGAke2Z9cHhgLCIwcHgiKSk7Y29uc3QgXz10aGlzLmFkanVz'@;
put 'dEhlYWRlckJvcmRlcnNQb3NpdGlvbihmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxffXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTtyZXR1cm4gdGhpcy5pc1J0bCgpJiYobD0tbCksdGhpcy5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWEmJmEuc2Nyb2xsWCE9PWw/KGEuc2Nyb2xsVG8obCx0NyhhKSksZD0hMCk6dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0IT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD1sLGQ9'@;
put 'ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYr'@;
put 'PXRoaXMud290Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdD'@;
put 'b250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290RG9jdW1lbnQ6YSxy'@;
put 'b290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD1JYyhhKSxfPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxUPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09ZHx8InZl'@;
put 'cnRpY2FsIj09PVQpe2xldCBpZT10aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpO3RoaXMud290Lnd0T3ZlcmxheXMuaGFzU2Nyb2xsYmFyQm90dG9tJiYoaWUtPWgpLGllPU1hdGgubWluKGllLGwud3RSb290RWxlbWVudC5zY3JvbGxIZWlnaHQpLF8uaGVpZ2h0PWAk'@;
put 'e2llfXB4YH1lbHNlIF8uaGVpZ2h0PSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PV8uaGVpZ2h0O2NvbnN0IFc9d2EodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtfLndpZHRoPWAke1d9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXt2YXIgbDtjb25zdHto'@;
put 'b2xkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlLHtzZWxlY3Rpb25zOmR9PXRoaXMud290LGg9dGhpcy5mYWNhZGVHZXR0ZXIoKSxmPU1hdGguYWJzKG51bGwhPT0obD1kPy5nZXRDZWxsKCkuZ2V0Qm9yZGVyKGgpLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0KSYmdm9pZCAwIT09bD9sOjApO3Ro'@;
put 'aXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsYS5zdHlsZS5oZWlnaHQ9YS5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxhLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGEucGFyZW50Tm9kZS5zdHlsZS53aWR0aCwxMCkrZn1weGB9YXBw'@;
put 'bHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0'@;
put 'aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGVbYV09YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3Vs'@;
put 'YXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGVbYV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZz'@;
put 'ZXQoKXt0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQ'@;
put 'b3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBfPTA7cmV0dXJuIGEmJnRoaXMud290'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZmLm9mZnNldFdpZHRoIT09Zi5jbGllbnRXaWR0aCYmKF89SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxT'@;
put 'aXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLGQrPV8sdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJs'@;
put 'ZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQu'@;
put 'bGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhpayh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3Ms'@;
put 'YT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRhYmxlUGFyZW50'@;
put 'T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFs'@;
put 'V2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi'@;
put 'Zml4ZWRDb2x1bW5zU3RhcnQiKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/V28oYSwiZW1wdHlSb3dzIik6cGkoYSwiZW1wdHlSb3dzIik7bGV0IF89ITE7aWYoaCYmIWQubGVuZ3RoKXBpKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0'@;
put 'Iik7ZWxzZSBpZighaCYmZC5sZW5ndGgpe2NvbnN0IFQ9Qm8oYSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2w/KHBpKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksXz0hVCk6KFdvKGEsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0'@;
put 'IiksXz1UKX1yZXR1cm4gX319Y2xhc3MgcU4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLENnKX19VGEocU4sV3RlKSxUYShxTixHTik7Y29uc3QgQkFlPXFOO2Z1bmN0aW9uIHJuZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gakFlKGMpe3ZhciBsPWZ1'@;
put 'bmN0aW9uIHpBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFVBZSBleHRlbmRzIHB5e2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXtzdXBlcihsLGEsQ2csZCxoKSxybmUodGhpcywidG9wT3Zl'@;
put 'cmxheSIsdm9pZCAwKSxybmUodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PV99Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylh'@;
put 'W2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IEJBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVT'@;
put 'dGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy50'@;
put 'cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9vayhsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKX1weGApOnN5'@;
put 'KGwpO2xldCBhPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgZD13YSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7'@;
put 'ZH1weGAsITF9fWNsYXNzIEtOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxacCl9fVRhKEtOLFF0ZSksVGEoS04sR04pO2NvbnN0IFpBZT1LTjtjbGFzcyBZQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCxhLFpwLGQs'@;
put 'aCksdGhpcy5ib3R0b21PdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9X31jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgWkFlKC4uLmEpfXNob3VsZEJl'@;
put 'UmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dv'@;
put 'dDpsfT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGEuc3R5bGUudG9wPSIiLHRoaXMudHJpbW1pbmdDb250YWlu'@;
put 'ZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLF89dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTthLnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7'@;
put 'Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7X31weGB9ZWxzZSBzeShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPXdhKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFz'@;
put 'RGVmaW5lZFNpemUoKXx8KGQ9MCksYS5zdHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxo'@;
put 'PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYo'@;
put 'Zis9SWMoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfX1mdW5jdGlvbiBaZihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gV0FlKGMpe3ZhciBsPWZ1bmN0aW9uIEdBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt'@;
put 'aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci'@;
put 'PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWZ1bmN0aW9uIGluZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gS0FlKGMpe3ZhciBsPWZ1bmN0aW9uIFhBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEpBZXtjb25zdHJ1Y3Rv'@;
put 'cihsKXtpbmUodGhpcywic2V0dGluZ3MiLHt9KSxpbmUodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSksZHModGhpcy5kZWZhdWx0cywoYSxkKT0+e2lmKHZvaWQgMCE9PWxbZF0pdGhpcy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAwPT09'@;
put 'YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxS'@;
put 'b3dDYWxjdWxhdG9yOiExLHN0cmV0Y2hIOiJub25lIixjdXJyZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZyZWV6ZU92ZXJsYXlzOiExLGZpeGVkQ29sdW1u'@;
put 'c1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVu'@;
put 'ZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWlu'@;
put 'U3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57anAoZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9'@;
put 'LHJvd0hlaWdodCgpe30sZGVmYXVsdFJvd0hlaWdodDoyMyxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVy'@;
put 'cmlkZTpudWxsLG9uQ2VsbE1vdXNlRG93bjpudWxsLG9uQ2VsbENvbnRleHRNZW51Om51bGwsb25DZWxsTW91c2VPdmVyOm51bGwsb25DZWxsTW91c2VPdXQ6bnVsbCxvbkNlbGxNb3VzZVVwOm51bGwsb25DZWxsRGJsQ2xpY2s6bnVsbCxvbkNlbGxDb3JuZXJNb3VzZURvd246bnVsbCxvbkNl'@;
put 'bGxDb3JuZXJEYmxDbGljazpudWxsLGJlZm9yZURyYXc6bnVsbCxvbkRyYXc6bnVsbCxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOm51bGwsb25BZnRlckRyYXdTZWxlY3Rpb246bnVsbCxvbkJlZm9yZURyYXdCb3JkZXJzOm51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25TY3Jv'@;
put 'bGxIb3Jpem9udGFsbHk6bnVsbCxvbkJlZm9yZVRvdWNoU2Nyb2xsOm51bGwsb25BZnRlck1vbWVudHVtU2Nyb2xsOm51bGwsb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6bD0+bCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25C'@;
put 'ZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6bD0+bCxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjpsPT5sLG9uV2luZG93UmVzaXplOm51bGwsb25Db250YWluZXJFbGVtZW50UmVzaXplOm51bGwscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVs'@;
put 'bCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExfX11cGRhdGUobCxhKXtyZXR1cm4gdm9pZCAwPT09YT9kcyhsLChkLGgpPT57dGhpcy5zZXR0aW5nc1toXT1kfSk6dGhpcy5zZXR0aW5nc1tsXT1hLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxo'@;
put 'LGYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2xdP3RoaXMuc2V0dGluZ3NbbF0oYSxkLGgsZik6dm9pZCAwIT09YSYmQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzW2xdKT90aGlzLnNldHRpbmdzW2xdW2FdOnRoaXMuc2V0dGluZ3NbbF19Z2V0U2V0dGluZ1B1'@;
put 'cmUobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NbbF19aGFzKGwpe3JldHVybiEhdGhpcy5zZXR0aW5nc1tsXX19Y2xhc3MgWE4gZXh0ZW5kcyB1N3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLCJtYXN0ZXIiKX1hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl7'@;
put 'Y29uc3QgbD12Zyh0aGlzLnd0Um9vdEVsZW1lbnQpLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7aWYobD09PWEpdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpfHwodGhpcy5ob2xkZXIuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMud3RS'@;
put 'b290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIpO2Vsc2V7Y29uc3QgZD1sLnBhcmVudEVsZW1lbnQsaD1uNyhsLCJoZWlnaHQiLGEpLGY9bjcobCwib3ZlcmZsb3ciLGEpLF89dGhpcy5ob2xkZXIuc3R5bGUse3Njcm9sbFdpZHRoOlQsc2Nyb2xsSGVpZ2h0Old9PWw7bGV0e3dp'@;
put 'ZHRoOmllLGhlaWdodDpwZX09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihkJiZbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiXS5pbmNsdWRlcyhmKSl7Y29uc3QgRWU9bC5jbG9uZU5vZGUoITEpO0VlLnN0eWxlLm92ZXJmbG93PSJhdXRvIixFZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1'@;
put 'dGUiLGwubmV4dEVsZW1lbnRTaWJsaW5nP2QuaW5zZXJ0QmVmb3JlKEVlLGwubmV4dEVsZW1lbnRTaWJsaW5nKTpkLmFwcGVuZENoaWxkKEVlKTtjb25zdCBaZT1wYXJzZUludCh6cChFZSxhKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoRWUpLDA9PT1aZSYmKHBlPTApfXBlPU1hdGgubWlu'@;
put 'KHBlLFcpLF8uaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke3BlfXB4YCxpZT1NYXRoLm1pbihpZSxUKSxfLndpZHRoPWAke2llfXB4YCxfLm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09Xy5oZWlnaHR8fHBlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPWllPjB9dGhp'@;
put 'cy5pc1RhYmxlVmlzaWJsZT1lNyh0aGlzLlRBQkxFKX1tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZD0ibWFzdGVyIixmPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIp'@;
put 'Lmxlbmd0aDtpZihmJiYhYS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdKXtjb25zdCBUPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxXPXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGllPTA7aWU8ZjtpZSsrKWZvcihsZXQgcGU9LTEq'@;
put 'VDtwZTxXO3BlKyspdGhpcy5tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIocGUpO2EuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXT0hMH19fVRhKFhOLHRuZSksVGEoWE4sTk4pO2NvbnN0IFFBZT1YTjtGKDUxMDEpO2NvbnN0IG9uZT1uZXcgV2Vha01hcDtjbGFzcyBKTntz'@;
put 'dGF0aWMgZ2V0IERFRkFVTFRfSEVJR0hUKCl7cmV0dXJuIDIzfWNvbnN0cnVjdG9yKCl7bGV0e3ZpZXdwb3J0U2l6ZTpsLHNjcm9sbE9mZnNldDphLHRvdGFsSXRlbXM6ZCxpdGVtU2l6ZUZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLHNjcm9sbGJhckhlaWdodDpUfT1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307b25lLnNldCh0aGlzLHt2aWV3cG9ydEhlaWdodDpsLHNjcm9sbE9mZnNldDphLHRvdGFsUm93czpkLHJvd0hlaWdodEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLGhvcml6b250'@;
put 'YWxTY3JvbGxiYXJIZWlnaHQ6VH0pLHRoaXMuY291bnQ9MCx0aGlzLnN0YXJ0Um93PW51bGwsdGhpcy5lbmRSb3c9bnVsbCx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ITEsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXtjb25z'@;
put 'dCBsPW9uZS5nZXQodGhpcyksYT1sLmNhbGN1bGF0aW9uVHlwZSxkPWwub3ZlcnJpZGVGbixoPWwucm93SGVpZ2h0Rm4sZj1sLnNjcm9sbE9mZnNldCxfPU1hdGgubWF4KGwuc2Nyb2xsT2Zmc2V0LDApLFQ9bC50b3RhbFJvd3MsVz1sLnZpZXdwb3J0SGVpZ2h0LGllPWwuaG9yaXpvbnRhbFNj'@;
put 'cm9sbGJhckhlaWdodHx8MDtsZXQgcGU9MCx3ZT0hMDtjb25zdCBFZT1bXTtsZXQgWmUsaXQ9MCxldD0wO2ZvcihsZXQgSnQ9MDtKdDxUO0p0KyspaWYoWmU9aChKdCksaXNOYU4oWmUpJiYoWmU9Sk4uREVGQVVMVF9IRUlHSFQpLHBlPD1fJiYyIT09YSYmKHRoaXMuc3RhcnRSb3c9SnQsaXQ9'@;
put 'WmUpLHBlPj1fJiZwZSsoMj09PWE/WmU6MCk8PV8rVy1pZSYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1KdCxpdD1aZSksdGhpcy5lbmRSb3c9SnQpLEVlLnB1c2gocGUpLHBlKz1aZSxldD1aZSwyIT09YSYmKHRoaXMuZW5kUm93PUp0KSxwZT49XytXLWllKXt3ZT0h'@;
put 'MTticmVha31jb25zdCBTdD0yPT09YT8wOmV0O2lmKHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGYrVy1pZTwoMj09PWE/aXQ6MCl8fGY+RWUuYXQoLTEpK1N0KSx0aGlzLmVuZFJvdz09PVQtMSYmd2UpZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFy'@;
put 'dFJvdz4wOyl7Y29uc3QgSnQ9RWVbdGhpcy5lbmRSb3ddK1plLUVlW3RoaXMuc3RhcnRSb3ctMV07aWYoKEp0PD1XLWllfHwyIT09YSkmJih0aGlzLnN0YXJ0Um93LT0xKSxKdD49Vy1pZSlicmVha30xPT09YSYmbnVsbCE9PXRoaXMuc3RhcnRSb3cmJmQmJmQodGhpcyksdGhpcy5zdGFydFBv'@;
put 'c2l0aW9uPUVlW3RoaXMuc3RhcnRSb3ddLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxUPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9VC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5z'@;
put 'dGFydFJvdysxKX19Y29uc3Qgc25lPUpOLGQ3PW5ldyBXZWFrTWFwO2NsYXNzIFFOe3N0YXRpYyBnZXQgREVGQVVMVF9XSURUSCgpe3JldHVybiA1MH1jb25zdHJ1Y3Rvcigpe2xldHt2aWV3cG9ydFNpemU6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbEl0ZW1zOmQsaXRlbVNpemVGbjpoLG92ZXJy'@;
put 'aWRlRm46ZixjYWxjdWxhdGlvblR5cGU6XyxzdHJldGNoTW9kZTpULHN0cmV0Y2hpbmdJdGVtV2lkdGhGbjpXPShwZT0+cGUpLGlubGluZVN0YXJ0T2Zmc2V0OmllfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZDcuc2V0KHRoaXMs'@;
put 'e3ZpZXdwb3J0V2lkdGg6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbENvbHVtbnM6ZCxjb2x1bW5XaWR0aEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTpfLHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuOlcsaW5saW5lU3RhcnRPZmZzZXQ6aWV9KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFy'@;
put 'dENvbHVtbj1udWxsLHRoaXMuZW5kQ29sdW1uPW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMuc3RyZXRjaEFsbFJhdGlvPTAsdGhpcy5zdHJldGNoTGFzdFdpZHRoPTAsdGhpcy5zdHJldGNoPVQsdGhpcy50b3Rh'@;
put 'bFRhcmdldFdpZHRoPTAsdGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoPSEwLHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aD1bXSx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe2xldCBsPTAsYT0hMDtjb25zdCBkPVtdO2xldCBoLGY9MCxfPTA7Y29uc3QgVD1kNy5nZXQodGhp'@;
put 'cyksVz1ULmNhbGN1bGF0aW9uVHlwZSxpZT1ULm92ZXJyaWRlRm4scGU9VC5zY3JvbGxPZmZzZXQsd2U9TWF0aC5tYXgoVC5zY3JvbGxPZmZzZXQsMCksRWU9VC50b3RhbENvbHVtbnMsWmU9VC52aWV3cG9ydFdpZHRoLGl0PXdlPjA/WmUrMTpaZTtmb3IobGV0IFN0PTA7U3Q8RWU7U3QrKylp'@;
put 'ZihoPXRoaXMuX2dldENvbHVtbldpZHRoKFN0KSxsPD13ZSYmMiE9PVcmJih0aGlzLnN0YXJ0Q29sdW1uPVN0LGY9aCksbD49d2UmJmwrKDI9PT1XP2g6MCk8PXdlK2l0JiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49U3QsZj1oKSx0aGlzLmVuZENvbHVtbj1T'@;
put 'dCksZC5wdXNoKGwpLGwrPWgsXz1oLDIhPT1XJiYodGhpcy5lbmRDb2x1bW49U3QpLGw+PXdlK1plKXthPSExO2JyZWFrfWNvbnN0IHl0PTI9PT1XPzA6XyxFdD0yPT09Vz9mOjA7aWYodGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEocGUrWmUtaXQ8LTEqVC5pbmxpbmVTdGFy'@;
put 'dE9mZnNldHx8cGU+ZC5hdCgtMSkreXR8fC0xKlQuc2Nyb2xsT2Zmc2V0LVQudmlld3BvcnRXaWR0aD4tMSpFdCksdGhpcy5lbmRDb2x1bW49PT1FZS0xJiZhKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IFN0PWRbdGhpcy5l'@;
put 'bmRDb2x1bW5dK2gtZFt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKChTdDw9WmV8fDIhPT1XKSYmKHRoaXMuc3RhcnRDb2x1bW4tPTEpLFN0PlplKWJyZWFrfTE9PT1XJiZudWxsIT09dGhpcy5zdGFydENvbHVtbiYmaWUmJmllKHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbj1kW3RoaXMuc3RhcnRD'@;
put 'b2x1bW5dLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxFZTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPUVlLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0'@;
put 'Q29sdW1uKzEpfXJlZnJlc2hTdHJldGNoaW5nKGwpe2lmKCJub25lIj09PXRoaXMuc3RyZXRjaClyZXR1cm47bGV0IGE9bDt0aGlzLnRvdGFsVGFyZ2V0V2lkdGg9YTtjb25zdCBkPWQ3LmdldCh0aGlzKSxoPWQudG90YWxDb2x1bW5zO2xldCBmPTA7Zm9yKGxldCBUPTA7VDxoO1QrKyl7Y29u'@;
put 'c3QgVz10aGlzLl9nZXRDb2x1bW5XaWR0aChUKSxpZT1kLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKHZvaWQgMCxUKTsibnVtYmVyIj09dHlwZW9mIGllP2EtPWllOmYrPVd9Y29uc3QgXz1hLWY7aWYoImFsbCI9PT10aGlzLnN0cmV0Y2gmJl8+MCl0aGlzLnN0cmV0Y2hBbGxSYXRpbz1hL2Ys'@;
put 'dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoPVtdLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMDtlbHNlIGlmKCJsYXN0Ij09PXRoaXMuc3RyZXRjaCYmYSE9PTEvMCl7Y29uc3QgVD10aGlzLl9nZXRDb2x1bW5XaWR0aChoLTEpLFc9XytUO3RoaXMuc3RyZXRjaExhc3RXaWR0'@;
put 'aD1XPj0wP1c6VH19Z2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxhKXtsZXQgZD1udWxsO3JldHVybiJhbGwiPT09dGhpcy5zdHJldGNoJiYwIT09dGhpcy5zdHJldGNoQWxsUmF0aW8/ZD10aGlzLl9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpOiJsYXN0Ij09PXRoaXMuc3RyZXRj'@;
put 'aCYmMCE9PXRoaXMuc3RyZXRjaExhc3RXaWR0aCYmKGQ9dGhpcy5fZ2V0U3RyZXRjaGVkTGFzdENvbHVtbldpZHRoKGwpKSxkfV9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpe2xldCBkPTA7Y29uc3QgaD1kNy5nZXQodGhpcyksZj1oLnRvdGFsQ29sdW1ucztpZighdGhpcy5zdHJl'@;
put 'dGNoQWxsQ29sdW1uc1dpZHRoW2xdKXtjb25zdCBfPU1hdGgucm91bmQoYSp0aGlzLnN0cmV0Y2hBbGxSYXRpbyksVD1oLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKF8sbCk7dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdPXZvaWQgMD09PVQ/Xzppc05hTihUKT90aGlzLl9nZXRDb2x1'@;
put 'bW5XaWR0aChsKTpUfWlmKHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGg9PT1mJiZ0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGgpe3RoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMTtmb3IobGV0IF89MDtfPHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5s'@;
put 'ZW5ndGg7XysrKWQrPXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtfXTtkIT09dGhpcy50b3RhbFRhcmdldFdpZHRoJiYodGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW3RoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGgtMV0rPXRoaXMudG90YWxUYXJnZXRXaWR0aC1kKX1y'@;
put 'ZXR1cm4gdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdfV9nZXRTdHJldGNoZWRMYXN0Q29sdW1uV2lkdGgobCl7cmV0dXJuIGw9PT1kNy5nZXQodGhpcykudG90YWxDb2x1bW5zLTE/dGhpcy5zdHJldGNoTGFzdFdpZHRoOm51bGx9X2dldENvbHVtbldpZHRoKGwpe2xldCBhPWQ3Lmdl'@;
put 'dCh0aGlzKS5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKSYmKGE9UU4uREVGQVVMVF9XSURUSCksYX19Y29uc3QgZVY9UU47Y2xhc3MgblRlIGV4dGVuZHMgWU57Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyBKQWUoYSkpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyBRQWUodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgY2xhc3MgZVRle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJz'@;
put 'aXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLmNvbnRhaW5lcldpZHRoPU5hTix0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhp'@;
put 'cy5ldmVudE1hbmFnZXI9aCx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIiwoKT0+e3RoaXMuY2xpZW50SGVpZ2h0PXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9KX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtjb25z'@;
put 'dCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGQ9MDtyZXR1cm4gZD1hPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ6YWwo'@;
put 'YSk+MCYmYS5jbGllbnRIZWlnaHQ+MD9hLmNsaWVudEhlaWdodDoxLzAsZH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLGY9YS5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsXz1sLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9bC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSxXPWwuZ2V0U2V0dGluZygicnRsTW9kZSIpLGllPXRoaXMud3RU'@;
put 'YWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx3ZT1mLShXP2llLnJpZ2h0LWY6aWUubGVmdCk7bGV0IEVlLFplO2lmKFQpcmV0dXJuIHdhKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50KTtpZihFZT1sLmdldFNldHRpbmcoImZyZWV6ZU92ZXJsYXlzIik/TWF0aC5taW4od2Us'@;
put 'Zik6TWF0aC5taW4odGhpcy5nZXRDb250YWluZXJGaWxsV2lkdGgoKSx3ZSxmKSxoPT09ZCYmXz4wJiZ0aGlzLnN1bUNvbHVtbldpZHRocygwLF8tMSk+RWUpcmV0dXJuIGEuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2lmKGghPT1kJiYoWmU9bjcodGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyLCJvdmVyZmxvdyIsZCksInNjcm9sbCI9PT1aZXx8ImhpZGRlbiI9PT1aZXx8ImF1dG8iPT09WmUpKXJldHVybiBNYXRoLm1heChFZSxoLmNsaWVudFdpZHRoKTtjb25zdCBpdD1sLmdldFNldHRpbmcoInN0cmV0Y2hIIik7cmV0'@;
put 'dXJuIm5vbmUiIT09aXQmJml0P0VlOk1hdGgubWF4KEVlLHdhKHRoaXMud3RUYWJsZS5UQUJMRSkpfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRIZWlnaHQ+dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7'@;
put 'cmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aD50aGlzLmdldFdvcmtzcGFjZVdpZHRoKCl9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldENvbnRhaW5l'@;
put 'ckZpbGxXaWR0aCgpe2lmKHRoaXMuY29udGFpbmVyV2lkdGgpcmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg7Y29uc3QgbD10aGlzLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS53aWR0aD0iMTAwJSIs'@;
put 'YS5zdHlsZS5oZWlnaHQ9IjFweCIsbC5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWEub2Zmc2V0V2lkdGg7cmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg9ZCxsLnJlbW92ZUNoaWxkKGEpLGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIEtsKHRoaXMud3RUYWJsZS5UQUJMRSl9Z2V0Q29s'@;
put 'dW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PWFsKHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29s'@;
put 'dW1uSGVhZGVySGVpZ2h0PTAsdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHR9Z2V0Vmlld3BvcnRIZWlnaHQoKXtsZXQgbD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpO3JldHVybiBhPjAmJihs'@;
put 'LT1hKSxsfWdldFJvd0hlYWRlcldpZHRoKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYobCl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgZD0wLGg9'@;
put 'YS5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hlYWRlcldpZHRoKz1sW2RdfHxsfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGEubGVuZ3RoKXtsZXQgZD10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBo'@;
put 'PTAsZj1hLmxlbmd0aDtoPGY7aCsrKWQ/KHRoaXMucm93SGVhZGVyV2lkdGgrPXdhKGQpLGQ9ZC5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdl'@;
put 'dFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Z2V0Vmlld3BvcnRXaWR0aCgpe2NvbnN0IGw9dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGw9PT0xLzApcmV0dXJu'@;
put 'IGw7Y29uc3QgYT10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIGE+MD9sLWE6bH1jcmVhdGVSb3dzQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxl'@;
put 'OmR9PXRoaXM7bGV0IGgsZixfO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOLGg9YS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIikmJjE9PT1sPzEvMDp0aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCk7bGV0IFQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFNjcm9sbFBvc2l0aW9uLXRoaXMuZGF0'@;
put 'YUFjY2Vzc09iamVjdC50b3BQYXJlbnRPZmZzZXQ7Y29uc3QgVz1hLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGllPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikscGU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gVyYmVD49MCYmKF89dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsVyksVCs9XyxoLT1fKSxpZSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJihfPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhwZS1pZSxwZSksaC09XyksZj1k'@;
put 'LmhvbGRlci5jbGllbnRIZWlnaHQ9PT1kLmhvbGRlci5vZmZzZXRIZWlnaHQ/MDpJYyh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3IHNuZSh7dmlld3BvcnRTaXplOmgsc2Nyb2xsT2Zmc2V0OlQsdG90YWxJdGVtczphLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGl0ZW1TaXpl'@;
put 'Rm46d2U9PmQuZ2V0Um93SGVpZ2h0KHdlKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksY2FsY3VsYXRpb25UeXBlOmwsc2Nyb2xsYmFySGVpZ2h0OmZ9KX1jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGg9dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCksZj1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQ'@;
put 'b3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCBfPWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZihfJiZmPj0wKXtjb25zdCBUPXRoaXMuZGF0YUFjY2Vzc09iamVj'@;
put 'dC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsXyk7Zis9VCxoLT1UfXJldHVybiBkLmhvbGRlci5jbGllbnRXaWR0aCE9PWQuaG9sZGVyLm9mZnNldFdpZHRoJiYoaC09SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxuZXcgZVYoe3ZpZXdwb3J0U2l6ZTpoLHNj'@;
put 'cm9sbE9mZnNldDpmLHRvdGFsSXRlbXM6YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxpdGVtU2l6ZUZuOlQ9PmQuZ2V0Q29sdW1uV2lkdGgoVCksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9uVHlw'@;
put 'ZTpsLHN0cmV0Y2hNb2RlOmEuZ2V0U2V0dGluZygic3RyZXRjaEgiKSxzdHJldGNoaW5nSXRlbVdpZHRoRm46KFQsVyk9PmEuZ2V0U2V0dGluZygib25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLFQsVyksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu'@;
put 'ZVN0YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlUmVuZGVyQ2FsY3VsYXRvcnMoKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKGEpe2NvbnN0IGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigyKSxoPXRoaXMuY3JlYXRl'@;
put 'Q29sdW1uc0NhbGN1bGF0b3IoMik7dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGQpJiZ0aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQoaCl8fChhPSExKX1yZXR1cm4gYXx8KHRoaXMucm93c1JlbmRlckNhbGN1bGF0'@;
put 'b3I9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigxKSx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoMSkpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCxhfWNy'@;
put 'ZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigyKX1hcmVBbGxQcm9wb3NlZFZpc2libGVS'@;
put 'b3dzQWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtjb25zdHtzdGFydFJvdzphLGVuZFJvdzpkLGlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI6aH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpcmV0dXJuIWg7Y29uc3R7c3RhcnRS'@;
put 'b3c6ZixlbmRSb3c6X309dGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcjtyZXR1cm4hKGE8Znx8YT09PWYmJmE+MHx8ZD5ffHxkPT09XyYmZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSl9YXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJl'@;
put 'ZChsKXtpZighdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7Y29uc3R7c3RhcnRDb2x1bW46YSxlbmRDb2x1bW46ZCxpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyOmh9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXJldHVybiFoO2NvbnN0e3N0YXJ0Q29sdW1uOmYs'@;
put 'ZW5kQ29sdW1uOl99PXRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7cmV0dXJuIShhPGZ8fGE9PT1mJiZhPjB8fGQ+X3x8ZD09PV8mJmQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpfXJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgp'@;
put 'e2RzKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12b2lkIDB9KX19KHRoaXMuZ2V0Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0'@;
put 'aW9ucz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpLHRoaXMud3RFdmVudD1uZXcgQnRlKGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9ucyksdGhpcy53dE92ZXJsYXlz'@;
put 'PW5ldyBjbGFzcyAkQWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe1pmKHRoaXMsIndvdCIsbnVsbCksWmYodGhpcywidG9wT3ZlcmxheSIsbnVsbCksWmYodGhpcywiYm90dG9tT3ZlcmxheSIsbnVsbCksWmYodGhpcywiaW5saW5lU3RhcnRPdmVybGF5IixudWxsKSxaZih0aGlzLCJ0b3BJ'@;
put 'bmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksWmYodGhpcywiYnJvd3NlckxpbmVIZWlnaHQiLHZvaWQgMCksWmYodGhpcywid3RTZXR0aW5ncyIsbnVsbCksWmYodGhpcywicmVzaXplT2JzZXJ2ZXIi'@;
put 'LG5ldyBSZXNpemVPYnNlcnZlcihwZT0+e3lrKCgpPT57IUFycmF5LmlzQXJyYXkocGUpfHwhcGUubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWluZXJFbGVtZW50UmVzaXplIil9KX0pKSx0aGlzLndvdD1sLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuZG9tQmlu'@;
put 'ZGluZ3M9ZCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT1fO2NvbnN0e3Jvb3REb2N1bWVudDpULHJvb3RXaW5kb3c6V309dGhpcy5kb21CaW5kaW5nczt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZXZlbnRNYW5hZ2VyPWYsdGhpcy5zY3JvbGxiYXJTaXplPUljKFQpO2Nv'@;
put 'bnN0IGllPSJoaWRkZW4iPT09Vy5nZXRDb21wdXRlZFN0eWxlKF8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9aWU/Xy5ob2xkZXI6cnkoXy5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlz'@;
put 'Lmhhc1Njcm9sbGJhckJvdHRvbT0hMSx0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5o'@;
put 'b3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9Vy5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9Vy5zY3JvbGxZfWdldE92ZXJsYXlzKCl7Y29uc3QgYT1bdGhpcy50b3BPdmVy'@;
put 'bGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'JiZhcmd1bWVudHNbMF0mJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVudDphfT10aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWln'@;
put 'aHQsMTApLGY9MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3NlckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlzLndvdCx0aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5'@;
put 'PW5ldyBUQWUoLi4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyBQQWUoLi4ubCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IFZBZSguLi5sKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgVUFlKC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRP'@;
put 'dmVybGF5KSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgWUFlKC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl7bGV0IGw9dGhpcy50b3BPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5k'@;
put 'ZXJpbmcoKTtyZXR1cm4gbD10aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsLGw9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50'@;
put 'b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYobD10aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGwpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKGw9dGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXku'@;
put 'dXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsKSksbH1yZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGlu'@;
put 'ZyYmdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcmJnRoaXMudG9wT3ZlcmxheS5vblNjcm9sbCgpLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExfX1yZWdpc3Rlckxpc3RlbmVycygp'@;
put 'e2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6ZH09dGhpcy50b3BPdmVybGF5LHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpofT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheTt0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXlkb3duIix3ZT0+dGhpcy5vbktleURvd24od2UpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsInZpc2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJzY3JvbGwiLHdlPT50aGlzLm9uVGFibGVTY3JvbGwod2UpLHtwYXNzaXZlOiEwfSksZCE9PWgmJnRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwic2Nyb2xsIix3ZT0+dGhpcy5vblRhYmxlU2Nyb2xsKHdlKSx7cGFzc2l2ZTohMH0pO2NvbnN0IGY9YS5kZXZpY2VQaXhlbFJhdGlvJiZhLmRldmljZVBpeGVsUmF0aW8+MSxfPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1hLFQ9'@;
put 'dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRXaGVlbCIpLFc9e3Bhc3NpdmU6X307bGV0IHBlOyhUfHxmfHwhX04oKSkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsIndoZWVsIix3ZT0+dGhpcy5vbkNsb25l'@;
put 'V2hlZWwod2UsVCksVyksW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2god2U9PntpZih3ZSYm'@;
put 'd2UubmVlZEZ1bGxSZW5kZXIpe2NvbnN0e2hvbGRlcjpFZX09d2UuY2xvbmUud3RUYWJsZTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEVlLCJ3aGVlbCIsWmU9PnRoaXMub25DbG9uZVdoZWVsKFplLFQpLFcpfX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoYSwicmVzaXplIiwoKT0+e2NsZWFyVGltZW91dChwZSkscGU9c2V0VGltZW91dCgoKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbldpbmRvd1Jlc2l6ZSIpfSwyMDApfSksX3x8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50'@;
put 'LnBhcmVudEVsZW1lbnQpfWRlcmVnaXN0ZXJMaXN0ZW5lcnMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCl9b25UYWJsZVNjcm9sbChsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxkPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9s'@;
put 'bGFibGVFbGVtZW50LGg9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9bC50YXJnZXQ7dGhpcy5rZXlQcmVzc2VkJiYoaCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoaCl8fGQhPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGQpKXx8dGhp'@;
put 'cy5zeW5jU2Nyb2xsUG9zaXRpb25zKGwpfW9uQ2xvbmVXaGVlbChsLGEpe2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9s'@;
put 'bGFibGVFbGVtZW50LF89bC50YXJnZXQsVD1mIT09ZCYmXyE9PWQmJiFfLmNvbnRhaW5zKGYpLFc9aCE9PWQmJl8hPT1kJiYhXy5jb250YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQmJihUfHxXKSlyZXR1cm47Y29uc3QgaWU9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7'@;
put 'KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZpZSkmJmwucHJldmVudERlZmF1bHQoKX1vbktleURvd24obCl7dGhpcy5rZXlQcmVzc2VkPW83KGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1dfUklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25LZXlVcCgpe3RoaXMua2V5UHJl'@;
put 'c3NlZD0hMX10cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0xKmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVlbERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUmJihkKz1kKnRoaXMuYnJvd3Nl'@;
put 'ckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxmfXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50'@;
put 'LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtyZXR1cm4gdGhp'@;
put 'cy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJldHVybjtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnRv'@;
put 'cE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsZD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcixbaCxmXT1bdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXTtpZih0aGlzLmhvcml6'@;
put 'b250YWxTY3JvbGxpbmc9YS5zY3JvbGxMZWZ0IT09aHx8dGhpcy5sYXN0U2Nyb2xsWCE9PWwuc2Nyb2xsWCx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPWQuc2Nyb2xsVG9wIT09Znx8dGhpcy5sYXN0U2Nyb2xsWSE9PWwuc2Nyb2xsWSx0aGlzLmxhc3RTY3JvbGxYPWwuc2Nyb2xsWCx0aGlzLmxh'@;
put 'c3RTY3JvbGxZPWwuc2Nyb2xsWSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2Euc2Nyb2xsTGVmdD1oO2NvbnN0IF89dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO18mJihfLnNjcm9sbExlZnQ9'@;
put 'aCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGQuc2Nyb2xsVG9wPWYpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQse3Njcm9sbExlZnQ6YSxzY3JvbGxUb3A6ZH09bDt0'@;
put 'aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xs'@;
put 'TGVmdD1hKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1kKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5kZXJlZ2lzdGVyTGlzdGVuZXJzKCks'@;
put 'dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5T'@;
put 'Y3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5'@;
put 'VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6cnkobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlz'@;
put 'LmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhp'@;
put 'cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlz'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJP'@;
put 'dmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdp'@;
put 'ZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1h'@;
put 'ZGp1c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3d0VGFibGU6ZH09dGhpcyxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENv'@;
put 'bHVtbnMiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxfPWEuZ2V0Um93SGVhZGVyV2lkdGgoKSxUPWEuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCksVz1kLmhpZGVyLnN0eWxlO2lmKFcud2lkdGg9YCR7Xyt0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxs'@;
put 'U2l6ZXMoMCxoKX1weGAsVy5oZWlnaHQ9YCR7VCt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsZikrMX1weGAsdGhpcy5zY3JvbGxiYXJTaXplPjApe2NvbnN0e3Njcm9sbEhlaWdodDppZSxzY3JvbGxXaWR0aDpwZX09ZC53dFJvb3RFbGVtZW50LHtzY3JvbGxIZWlnaHQ6d2Usc2Ny'@;
put 'b2xsV2lkdGg6RWV9PWQuaG9sZGVyO3RoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9aWU8d2UsdGhpcy5oYXNTY3JvbGxiYXJCb3R0b209cGU8RWUsdGhpcy5oYXNTY3JvbGxiYXJSaWdodCYmZC5oaWRlci5zY3JvbGxXaWR0aCt0aGlzLnNjcm9sbGJhclNpemU+cGU/dGhpcy5oYXNTY3JvbGxiYXJC'@;
put 'b3R0b209ITA6dGhpcy5oYXNTY3JvbGxiYXJCb3R0b20mJmQuaGlkZXIuc2Nyb2xsSGVpZ2h0K3RoaXMuc2Nyb2xsYmFyU2l6ZT5pZSYmKHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9ITApfXRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCksdGhpcy5pbmxpbmVTdGFydE92ZXJs'@;
put 'YXkuYWRqdXN0RWxlbWVudHNTaXplKGwpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCl9YXBwbHlUb0RPTSgpe3RoaXMud3RUYWJsZS5pc1Zpc2libGUoKSYmKHRoaXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlz'@;
put 'LmJvdHRvbU92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSl9Z2V0UGFyZW50T3ZlcmxheShsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgZD1udWxsO3JldHVybiBEbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5'@;
put 'LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0saD0+e2gmJmguY2xvbmUmJmguY2xvbmUud3RUYWJsZS5UQUJMRS5jb250YWlucyhsKSYmKGQ9aC5jbG9uZSl9KSxkfXN5bmNPdmVy'@;
put 'bGF5VGFibGVDbGFzc05hbWVzKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuVEFCTEU7RG4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFy'@;
put 'dENvcm5lck92ZXJsYXldLGQ9PntkJiYoZC5jbG9uZS53dFRhYmxlLlRBQkxFLmNsYXNzTmFtZT1sLmNsYXNzTmFtZSl9KX19KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NB'@;
put 'c0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtkcyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLFdvKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSkscGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRWaWV3cG9ydERhbygpe2NvbnN0IGw9'@;
put 'dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgdG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4g'@;
put 'bC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IHRvcFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCB0b3BQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJs'@;
put 'YXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IGlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQoKXtyZXR1'@;
put 'cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRP'@;
put 'dmVybGF5fSxnZXQgYm90dG9tT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheX19fX1jbGFzcyB0Vntjb25zdHJ1Y3RvcihsKXtsIGluc3RhbmNlb2YgWU4/dGhpcy5fd290PWw6dGhpcy5faW5pdEZyb21TZXR0aW5ncyhsKX1faW5pdEZyb21TZXR0aW5ncyhsKXts'@;
put 'LmZhY2FkZT1hPT57Y29uc3QgZD1uZXcgdFYoYSk7cmV0dXJuKCk9PmR9LHRoaXMuX3dvdD1uZXcgblRlKGwudGFibGUsbCl9Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5fd290Lmd1aWR9Z2V0IHJvb3REb2N1bWVudCgpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50'@;
put 'fWdldCByb290V2luZG93KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290V2luZG93fWdldCB3dFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzfWdldCBjbG9uZVNvdXJjZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2V9Z2V0IGNsb25lT3Zlcmxh'@;
put 'eSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5fWdldCBzZWxlY3Rpb25zKCl7cmV0dXJuIHRoaXMuX3dvdC5zZWxlY3Rpb25zfWdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC53dFZpZXdwb3J0fWdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIHRoaXMuX3dvdC53dE92ZXJs'@;
put 'YXlzfWdldCB3dFRhYmxlKCl7cmV0dXJuIHRoaXMuX3dvdC53dFRhYmxlfWdldCB3dEV2ZW50KCl7cmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50fWdldCB3dFNjcm9sbCgpe3JldHVybiB0aGlzLl93b3Qud3RTY3JvbGx9Z2V0IGRyYXduKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3bn1zZXQgZHJh'@;
put 'd24obCl7dGhpcy5fd290LmRyYXduPWx9Z2V0IGRyYXdJbnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkfXNldCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dv'@;
put 'dC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWx9Z2V0IG1vbWVudHVtU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVt'@;
put 'U2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxpZWQobCl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlz'@;
put 'dGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fd290LmV2ZW50TGlzdGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1'@;
put 'cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMobCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzBdJiZhcmd1bWVudHNbMF0pLHRoaXN9Z2V0Q2VsbChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Quc2Ny'@;
put 'b2xsVmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZp'@;
put 'ZXdwb3J0VmVydGljYWxseShsLGEsZCl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9ZXhwb3J0U2V0dGlu'@;
put 'Z3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0'@;
put 'aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gYW5lKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNMZWZ0Q2xpY2s6YSxpc1Jp'@;
put 'Z2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOl8sY2VsbENvb3Jkc0ZhY3Rvcnk6VH09Yztjb25zdCBXPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGllPWYuaXNTZWxlY3RlZEJ5Q29ybmVyKCkscGU9Zi5pc1NlbGVj'@;
put 'dGVkQnlSb3dIZWFkZXIoKTtpZihsJiZXKWgucm93Pj0wJiZoLmNvbD49MCYmIV8uY2VsbD9mLnNldFJhbmdlRW5kKGgpOihpZXx8cGUpJiZoLnJvdz49MCYmaC5jb2w+PTAmJiFfLmNlbGw/Zi5zZXRSYW5nZUVuZChUKGgucm93LGguY29sKSk6aWUmJmgucm93PDAmJiFfLmNvbHVtbj9mLnNl'@;
put 'dFJhbmdlRW5kKFQoVy50by5yb3csaC5jb2wpKTpwZSYmaC5jb2w8MCYmIV8ucm93P2Yuc2V0UmFuZ2VFbmQoVChoLnJvdyxXLnRvLmNvbCkpOighaWUmJiFwZSYmaC5jb2w8MHx8aWUmJmguY29sPDApJiYhXy5yb3c/Zi5zZWxlY3RSb3dzKE1hdGgubWF4KFcuZnJvbS5yb3csMCksaC5yb3cs'@;
put 'aC5jb2wpOighaWUmJiFwZSYmaC5yb3c8MHx8cGUmJmgucm93PDApJiYhXy5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChXLmZyb20uY29sLDApLGguY29sLGgucm93KTtlbHNle2NvbnN0IHdlPSFmLmluSW5TZWxlY3Rpb24oaCksRWU9YXx8ZCYmd2U7aC5yb3c8MCYmaC5jb2w+'@;
put 'PTAmJiFfLmNvbHVtbj9FZSYmZi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIV8ucm93P0VlJiZmLnNlbGVjdFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmguY29sPj0wJiZoLnJvdz49MCYmIV8uY2VsbD9FZSYmZi5zZXRSYW5nZVN0YXJ0KGgp'@;
put 'OmguY29sPDAmJmgucm93PDAmJmYuc2VsZWN0QWxsKCEwLCEwKX19Y29uc3QgaVRlPW5ldyBNYXAoW1sibW91c2Vkb3duIixhbmVdLFsibW91c2VvdmVyIixmdW5jdGlvbiByVGUoYyl7bGV0e2lzTGVmdENsaWNrOmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29y'@;
put 'ZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IF89ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxUPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksVz1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksaWU9ZC50YWJsZVByb3BzLmNvdW50Um93cygpO1QmJiFoLmNvbHVtbj9kLnNl'@;
put 'dFJhbmdlRW5kKGYoaWUtMSxhLmNvbCkpOl8mJiFoLnJvdz9kLnNldFJhbmdlRW5kKGYoYS5yb3csVy0xKSk6aC5jZWxsfHxkLnNldFJhbmdlRW5kKGEpfV0sWyJ0b3VjaHN0YXJ0IixhbmVdXSk7ZnVuY3Rpb24gbG5lKGMsbCl7bGV0e2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6'@;
put 'aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1sO2lUZS5nZXQoYy50eXBlKSh7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmYsaXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOmZrKGMpfHwidG91Y2hzdGFydCI9PT1jLnR5cGUsaXNSaWdo'@;
put 'dENsaWNrOlVwKGMpfSl9Y29uc3QgY25lPW5ldyBXZWFrTWFwLG5WPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gclYoYyl7cmV0dXJuIGNuZS5oYXMoYyl9ZnVuY3Rpb24gdW5lKGMsbCxhKXsoZnVuY3Rpb24gYVRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZcChjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gbFRlKGMpe3ZhciBsPWZ1bmN0aW9uIGNUZShjLGwpe2lmKCJvYmplY3Qi'@;
put 'IT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp'@;
put 'dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs'@;
put 'dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGRuZShjLGwpe3JldHVybiBmdW5jdGlvbiB1VGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGZuZShjLGwsImdldCIpKX1mdW5jdGlvbiBo'@;
put 'bmUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBkVGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGZuZShj'@;
put 'LGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gZm5lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHhnPW5ldyBXZWFrTWFwO3ZhciBpVj1u'@;
put 'ZXcgV2Vha01hcCxvVj1uZXcgV2Vha01hcDtjb25zdCBmVGU9Y2xhc3MgaFRle2NvbnN0cnVjdG9yKGwpe1lwKHRoaXMsImluc3RhbmNlIix2b2lkIDApLFlwKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxZcCh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxZcCh0aGlzLCJUSEVBRCIsdm9p'@;
put 'ZCAwKSxZcCh0aGlzLCJUQk9EWSIsdm9pZCAwKSxZcCh0aGlzLCJfd3QiLHZvaWQgMCksWXAodGhpcywiYWN0aXZlV3QiLHZvaWQgMCksdW5lKHRoaXMsaVYse3dyaXRhYmxlOiEwLHZhbHVlOjB9KSx1bmUodGhpcyxvVix7d3JpdGFibGU6ITAsdmFsdWU6MH0pLFlwKHRoaXMsInBvc3Rwb25l'@;
put 'ZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLHRoaXMuaW5zdGFuY2U9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcy5pbnN0YW5jZSksdGhpcy5zZXR0aW5ncz10aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkseGcuc2V0KHRoaXMse3NlbGVjdGlvbk1vdXNlRG93bjohMSxtb3VzZURv'@;
put 'd246dm9pZCAwLHRhYmxlOnZvaWQgMCxsYXN0V2lkdGg6MCxsYXN0SGVpZ2h0OjB9KSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl9cmVuZGVyKCl7dGhpcy5pbnN0YW5jZS5pc1JlbmRlclN1c3BlbmRlZCgp'@;
put 'fHwodGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUmJih0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx0aGlzLmFkanVzdEVsZW1lbnRzU2l6'@;
put 'ZSghMCkpLHRoaXMuX3d0LmRyYXcoIXRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSExLHRoaXMuaW5zdGFu'@;
put 'Y2UucmVuZGVyQ2FsbD0hMSl9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmluc3RhbmNlLmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1Np'@;
put 'emU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUobCl9Z2V0Q2VsbEF0Q29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLl93dC5nZXRDZWxsKGwsYSk7cmV0dXJuIGQ8MD9udWxsOmR9c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xs'@;
put 'Vmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9y'@;
put 'dFZlcnRpY2FsbHkobCxhLGQpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3QgbD14Zy5nZXQodGhpcykse3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmR9PXRoaXMuaW5zdGFuY2UsaD1hLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtoJiZhLnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbHN0eWxl'@;
put 'IixoKSxwaShhLCJoYW5kc29udGFibGUiKSxsLnRhYmxlPWQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSxwaShsLnRhYmxlLCJodENvcmUiKSx0aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUmJnBpKGwudGFibGUsdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnRh'@;
put 'YmxlQ2xhc3NOYW1lKSx0aGlzLlRIRUFEPWQuY3JlYXRlRWxlbWVudCgiVEhFQUQiKSxsLnRhYmxlLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9ZC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLGwudGFibGUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSksdGhpcy5pbnN0YW5jZS50'@;
put 'YWJsZT1sLnRhYmxlLHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLmluc2VydEJlZm9yZShsLnRhYmxlLHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3QgbD14Zy5nZXQodGhpcykse3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmQsc2Vs'@;
put 'ZWN0aW9uOmh9PXRoaXMuaW5zdGFuY2UsZj1kLmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsXz0+e2lmKGwuc2VsZWN0aW9uTW91c2VEb3duPSEwLCF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoXy50YXJnZXQpKXtj'@;
put 'b25zdHtyb290V2luZG93OlR9PXRoaXMuaW5zdGFuY2U7Zk4oVCksXy5wcmV2ZW50RGVmYXVsdCgpLFQuZm9jdXMoKX19KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT57bC5zZWxlY3Rpb25Nb3VzZURvd249ITF9KSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIsXz0+e2wuc2VsZWN0aW9uTW91c2VEb3duJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKF8udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmZOKHRoaXMuaW5zdGFuY2Uucm9vdFdpbmRvdyksXy5w'@;
put 'cmV2ZW50RGVmYXVsdCgpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwia2V5dXAiLF89PntoLmlzSW5Qcm9ncmVzcygpJiYhXy5zaGlmdEtleSYmaC5maW5pc2goKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2V1cCIsXz0+e2gu'@;
put 'aXNJblByb2dyZXNzKCkmJmZrKF8pJiZoLmZpbmlzaCgpLGwubW91c2VEb3duPSExLChzayhkLmFjdGl2ZUVsZW1lbnQpfHwhaC5pc1NlbGVjdGVkKCkmJiFoLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhYS5jb250YWlucyhfLnRhcmdldCkmJiFVcChfKSkmJnRoaXMuaW5zdGFuY2UudW5s'@;
put 'aXN0ZW4oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwiY29udGV4dG1lbnUiLF89PntoLmlzSW5Qcm9ncmVzcygpJiZVcChfKSYmKGguZmluaXNoKCksbC5tb3VzZURvd249ITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJ0b3VjaGVu'@;
put 'ZCIsKCk9PntoLmlzSW5Qcm9ncmVzcygpJiZoLmZpbmlzaCgpLGwubW91c2VEb3duPSExfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWRvd24iLF89Pntjb25zdCBUPV8udGFyZ2V0LFc9Xy54fHxfLmNsaWVudFgsaWU9Xy55fHxfLmNsaWVudFk7bGV0IHBl'@;
put 'PV8udGFyZ2V0O2lmKGwubW91c2VEb3dufHwhYXx8IXRoaXMuaW5zdGFuY2UudmlldylyZXR1cm47Y29uc3R7aG9sZGVyOndlfT10aGlzLmluc3RhbmNlLnZpZXcuX3d0Lnd0VGFibGU7aWYocGU9PT13ZSl7Y29uc3QgWmU9SWMoZCk7aWYoZC5lbGVtZW50RnJvbVBvaW50KFcrWmUsaWUpIT09'@;
put 'd2V8fGQuZWxlbWVudEZyb21Qb2ludChXLGllK1plKSE9PXdlKXJldHVybn1lbHNlIGZvcig7cGUhPT1mOyl7aWYobnVsbD09PXBlKXtpZihfLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZihwZT09PWEpcmV0dXJuO3BlPXBlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhUKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5pbnN0YW5jZS5kZXNlbGVjdENlbGwoKTp0aGlzLmluc3RhbmNlLmRlc3Ry'@;
put 'b3lFZGl0b3IoITEsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLnRhYmxlLCJzZWxlY3RzdGFydCIsXz0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fGF5KF8udGFyZ2V0KXx8Xy5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRl'@;
put 'cmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoYSxkKSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbElu'@;
put 'ZGV4KGwsYSl7bGV0IGQ9bD49MD90aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCk6bCxoPWE+PTA/dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51'@;
put 'bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09'@;
put 'PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9Y291bnRSZW5k'@;
put 'ZXJhYmxlUm93cygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhs'@;
put 'LGEsdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHRo'@;
put 'aXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX1jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLGQsaCl7aWYoaXNOYU4obCl8fGw8MClyZXR1cm4gMDtjb25zdCBmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSksXz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYo'@;
put 'IU51bWJlci5pc0ludGVnZXIoXykpcmV0dXJuIDA7bGV0IFQ9MDtyZXR1cm4gYTwwP1Q9XysxOmE+MCYmKFQ9aC1fKSxUfWNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNl'@;
put 'dHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRo'@;
put 'aXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSxhPU1hdGgubWF4KGwtcGFyc2VJbnQo'@;
put 'dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sMTApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLDEpfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0IGw9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMu'@;
put 'Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxhPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmluc3RhbmNlLmNvdW50UmVuZGVyZWRSb3dzKCk+bCYmdGhpcy5pbnN0YW5jZS5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdh'@;
put 'bGtvbnRhYmxlKCl7Y29uc3QgbD14Zy5nZXQodGhpcyksYT17cnRsTW9kZTp0aGlzLmluc3RhbmNlLmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaW5zdGFuY2UuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpJiZ0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jvd1NpemUi'@;
put 'KS5pc0VuYWJsZWQoKSx0YWJsZTpsLnRhYmxlLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+clYodGhpcy5pbnN0YW5jZSkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHN0'@;
put 'cmV0Y2hIOigpPT50aGlzLnNldHRpbmdzLnN0cmV0Y2hILGRhdGE6KF8sVCk9PnRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpKSx0b3RhbFJvd3M6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlUm93cygp'@;
put 'LHRvdGFsQ29sdW1uczooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksZml4ZWRDb2x1bW5zU3RhcnQ6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLGZpeGVkUm93c1RvcDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLGZpeGVk'@;
put 'Um93c0JvdHRvbTooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydD4wfHxhLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVy'@;
put 'bGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcD4wfHxhLmNvbHVtbkhlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT4wLG1pblNwYXJlUm93czooKT0+dGhpcy5zZXR0aW5ncy5taW5TcGFy'@;
put 'ZVJvd3MscmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3Mscm93SGVhZGVyczooKT0+e2NvbnN0IF89W107cmV0dXJuIHRoaXMuaW5zdGFuY2UuaGFzUm93SGVhZGVycygpJiZfLnB1c2goKFQsVyk9Pntjb25zdCBpZT1UPj0wP3RoaXMuaW5zdGFuY2Uucm93SW5kZXhN'@;
put 'YXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpUO3RoaXMuYXBwZW5kUm93SGVhZGVyKGllLFcpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLF8pLGhuZSh0aGlzLG9WLF8ubGVuZ3RoKSxffSxjb2x1bW5IZWFkZXJzOigp'@;
put 'PT57Y29uc3QgXz1bXTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5oYXNDb2xIZWFkZXJzKCkmJl8ucHVzaCgoVCxXKT0+e2NvbnN0IGllPVQ+PTA/dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFQpOlQ7dGhpcy5hcHBlbmRDb2xIZWFk'@;
put 'ZXIoaWUsVyl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsXyksaG5lKHRoaXMsaVYsXy5sZW5ndGgpLF99LGNvbHVtbldpZHRoOl89Pntjb25zdCBUPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl'@;
put 'bmRlcmFibGVJbmRleChfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDb2xXaWR0aChudWxsPT09VD9fOlQpfSxyb3dIZWlnaHQ6Xz0+e2NvbnN0IFQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pO3JldHVybiB0aGlzLmluc3Rh'@;
put 'bmNlLmdldFJvd0hlaWdodChudWxsPT09VD9fOlQpfSxjZWxsUmVuZGVyZXI6KF8sVCxXKT0+e2NvbnN0W2llLHBlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGll'@;
put 'LHBlKTtsZXQgRWU9aWUsWmU9cGU7QXJyYXkuaXNBcnJheSh3ZSkmJihbRWUsWmVdPXdlKTtjb25zdCBpdD10aGlzLmluc3RhbmNlLmdldENlbGxNZXRhKEVlLFplKSxldD10aGlzLmluc3RhbmNlLmNvbFRvUHJvcChaZSk7bGV0IHl0PXRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChF'@;
put 'ZSxldCk7dGhpcy5pbnN0YW5jZS5oYXNIb29rKCJiZWZvcmVWYWx1ZVJlbmRlciIpJiYoeXQ9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLHl0LGl0KSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLFcsaWUscGUsZXQseXQsaXQpLHRo'@;
put 'aXMuaW5zdGFuY2UuZ2V0Q2VsbFJlbmRlcmVyKGl0KSh0aGlzLmluc3RhbmNlLFcsaWUscGUsZXQseXQsaXQpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLFcsaWUscGUsZXQseXQsaXQpfSxzZWxlY3Rpb25zOnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmhpZ2hsaWdo'@;
put 'dCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOigpPT50aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uLG9uV2luZG93UmVzaXplOigpPT57dGhpcy5pbnN0YW5jZSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25D'@;
put 'b250YWluZXJFbGVtZW50UmVzaXplOigpPT57dGhpcy5pbnN0YW5jZSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJnRoaXMuaW5zdGFuY2UucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihfLFQsVyxpZSk9Pntjb25zdCBwZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5k'@;
put 'ZXJhYmxlVG9WaXN1YWxDb29yZHMoVCksd2U9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5pbnN0YW5jZS5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PWllLGwubW91c2VEb3duPSEwLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsXyxwZSxXLHdl'@;
put 'KSwhYmcoXykmJihsbmUoXyx7Y29vcmRzOnBlLHNlbGVjdGlvbjp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOndlLGNlbGxDb29yZHNGYWN0b3J5OihFZSxaZSk9PnRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoRWUsWmUpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29r'@;
put 'cygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLF8scGUsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvbnRleHRNZW51OihfLFQsVyxpZSk9Pntjb25zdCBwZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSxsLm1v'@;
put 'dXNlRG93bj0hMSx0aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLF8scGUsVyksIWJnKF8pJiYodGhpcy5pbnN0YW5jZS5y'@;
put 'dW5Ib29rcygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsXyxwZSxXKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KF8sVCxXLGllKT0+e2NvbnN0IHBlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKTt0aGlzLmFjdGl2ZVd0PWll'@;
put 'LHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixfLHBlLFcpLCFiZyhfKSYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdXQiLF8scGUsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooXyxULFcs'@;
put 'aWUpPT57Y29uc3QgcGU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpLHdlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9aWUsdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixfLHBlLFcsd2Up'@;
put 'LCFiZyhfKSYmKGwubW91c2VEb3duJiZsbmUoXyx7Y29vcmRzOnBlLHNlbGVjdGlvbjp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbixjb250cm9sbGVyOndlLGNlbGxDb29yZHNGYWN0b3J5OihFZSxaZSk9PnRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoRWUsWmUpfSksdGhpcy5pbnN0'@;
put 'YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLF8scGUsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlVXA6KF8sVCxXLGllKT0+e2NvbnN0IHBlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKTt0aGlzLmFjdGl2ZVd0'@;
put 'PWllLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLF8scGUsVyksIWJnKF8pJiYhdGhpcy5pbnN0YW5jZS5pc0Rlc3Ryb3llZCYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VVcCIsXyxwZSxXKSx0aGlzLmFjdGl2ZVd0PXRoaXMu'@;
put 'X3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOl89PntfLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLF8pfSxvbkNlbGxDb3JuZXJEYmxDbGljazpfPT57Xy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLF8pfSxiZWZvcmVEcmF3OihfLFQpPT50aGlzLmJlZm9yZVJlbmRlcihfLFQpLG9uRHJhdzpfPT50aGlzLmFmdGVyUmVuZGVyKF8pLG9uU2Nyb2xsVmVydGljYWxseTooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJT'@;
put 'Y3JvbGxWZXJ0aWNhbGx5Iiksb25TY3JvbGxIb3Jpem9udGFsbHk6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iiksb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2Vs'@;
put 'bENsYXNzTmFtZXMiKSxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlcixwZT1pZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhp'@;
put 'Z2hsaWdodGluZ1Jvd0hlYWRlciIscGUsVCxXKTtyZXR1cm4gaWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpfSxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5pbnN0'@;
put 'YW5jZS5jb2x1bW5JbmRleE1hcHBlcixwZT1pZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KF8pLHdlPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIscGUsVCxXKTtyZXR1cm4gaWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod2UsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooXyxULFcpPT57bGV0IGllO2NvbnN0W3BlLHdlXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChfLFQpLEVlPXRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2UoKSxaZT1FZS5zaXplKCk7aWYoWmU+MCl7Y29uc3QgZXQ9RWUucGVla0J5SW5kZXgoKFc/PzApKzEtWmUpO2llPVtldC5mcm9tLnJvdyxldC5mcm9tLmNvbCxldC50by5yb3csZXQudG8uY29sXX1yZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJEcmF3'@;
put 'U2VsZWN0aW9uIixwZSx3ZSxpZSxXKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooXyxUKT0+e2NvbnN0W1csaWUscGUsd2VdPV8sRWU9W3RoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChXKSx0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaWUpLHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChwZSksdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHdlKV07'@;
put 'cmV0dXJuIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixFZSxUKX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVG91Y2hTY3JvbGwiKSxvbkFmdGVyTW9tZW50dW1TY3JvbGw6KCk9PnRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKSxvbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDooXyxUKT0+e2NvbnN0IFc9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFQpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLF8sVyl9LG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Xz0+dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLF8pLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczooXyxULFcpPT57Y29uc3QgaWU9dGhpcy5p'@;
put 'bnN0YW5jZS5yb3dJbmRleE1hcHBlcixwZT10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLHdlPVQ+PTA/cGUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpULEVlPV8+PTA/aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKTpfLFplPXRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEVlLHdlLFcpO2lmKEFycmF5LmlzQXJyYXkoWmUpKXtjb25zdFtpdCxldCx5dCxFdF09WmU7cmV0dXJuW2l0Pj0wP2llLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGl0LDEpKTpp'@;
put 'dCxldD49MD9wZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChldCwxKSk6ZXQseXQ+PTA/aWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoeXQsLTEpKTp5dCxFdD49MD9wZS5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHBlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFdCwtMSkpOkV0XX19LHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOl89PntsZXQgVD10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PVQm'@;
put 'JnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wJiYoVD0xMCksVD4wfHwiYXV0byI9PT1UKXtjb25zdCBXPXRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpLGllPV8uc3RhcnRSb3cscGU9Xy5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiBUKV8uc3RhcnRSb3c9TWF0aC5tYXgoaWUtVCwwKSxf'@;
put 'LmVuZFJvdz1NYXRoLm1pbihwZStULFctMSk7ZWxzZSBpZigiYXV0byI9PT1UKXtjb25zdCB3ZT1NYXRoLmNlaWwocGUvVyoxMik7Xy5zdGFydFJvdz1NYXRoLm1heChpZS13ZSwwKSxfLmVuZFJvdz1NYXRoLm1pbihwZSt3ZSxXLTEpfX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclZp'@;
put 'ZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixfKX0sdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6Xz0+e2xldCBUPXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09VCYmdGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFy'@;
put 'dCYmKFQ9MTApLFQ+MHx8ImF1dG8iPT09VCl7Y29uc3QgVz10aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxpZT1fLnN0YXJ0Q29sdW1uLHBlPV8uZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgVCYmKF8uc3RhcnRDb2x1bW49TWF0aC5tYXgoaWUtVCwwKSxfLmVuZENvbHVtbj1N'@;
put 'YXRoLm1pbihwZStULFctMSkpLCJhdXRvIj09PVQpe2NvbnN0IHdlPU1hdGguY2VpbChwZS9XKjYpO18uc3RhcnRDb2x1bW49TWF0aC5tYXgoaWUtd2UsMCksXy5lbmRDb2x1bW49TWF0aC5taW4ocGUrd2UsVy0xKX19dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydENvbHVt'@;
put 'bkNhbGN1bGF0b3JPdmVycmlkZSIsXyl9LHJvd0hlYWRlcldpZHRoOigpPT50aGlzLnNldHRpbmdzLnJvd0hlYWRlcldpZHRoLGNvbHVtbkhlYWRlckhlaWdodDooKT0+e2NvbnN0IF89dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRo'@;
put 'aXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxffX07dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixhKSx0aGlzLl93dD1uZXcgdFYoYSksdGhpcy5hY3RpdmVXdD10aGlzLl93dDtjb25zdCBkPXRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIse3dp'@;
put 'ZHRoOmgsaGVpZ2h0OmZ9PXRoaXMuaW5zdGFuY2Uucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zZXRMYXN0U2l6ZShoLGYpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwibW91c2Vkb3duIixfPT57Xy50YXJnZXQ9PT1kJiYzPT09Xy53aGlj'@;
put 'aCYmXy5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwiY29udGV4dG1lbnUiLF89PntfLnRhcmdldD09PWQmJjM9PT1fLndoaWNoJiZfLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0'@;
put 'aGlzLmluc3RhbmNlLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmKHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMucmVuZGVyKCkp'@;
put 'fSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZChsKXtpZihheShsKSlyZXR1cm4hMDtjb25zdCBhPVZwKGwsdGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlLnNwcmVhZGVyKTtyZXR1cm4hISghMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmF8fCJjZWxsIj09PXRoaXMu'@;
put 'c2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkmJmF8fCF0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzQ2VsbEVkaXRlZCgpJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpKX1pc01vdXNlRG93bigpe3JldHVybiB4Zy5n'@;
put 'ZXQodGhpcykubW91c2VEb3dufWlzU2VsZWN0ZWRPbmx5Q2VsbCgpe3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdm9pZCAwIT09bCYmbH1pc0Nl'@;
put 'bGxFZGl0ZWQoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXtsJiZ0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRl'@;
put 'cixhKX1hZnRlclJlbmRlcihsKXtsJiZ0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFkZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFCbyhkLCJy'@;
put 'ZWxhdGl2ZSIpKXJldHVybiBnMihhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGwsdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWFkZXIpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmQsZ2V0'@;
put 'Um93SGVhZGVyOmh9PXRoaXMuaW5zdGFuY2UsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLF89ZC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIixfLmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoXyxsLGgpLGYuYXBwZW5kQ2hp'@;
put 'bGQoXyksYS5hcHBlbmRDaGlsZChmKX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5pbnN0YW5j'@;
put 'ZS5nZXRDb2xIZWFkZXIsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGY9YS5maXJzdENoaWxkO0JvKGYsInJlbGF0aXZlIik/dGhpcy51cGRhdGVDZWxsSGVhZGVyKGYucXVlcnlTZWxlY3Rv'@;
put 'cigiLmNvbEhlYWRlciIpLGwsZCxoKTooZzIoYSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaW5zdGFuY2UsXz1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFQ9Zi5jcmVhdGVFbGVtZW50KCJzcGFuIik7Xy5jbGFzc05hbWU9'@;
put 'InJlbGF0aXZlIixULmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoVCxsLGQsaCksXy5hcHBlbmRDaGlsZChUKSxhLmFwcGVuZENoaWxkKF8pfXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRl'@;
put 'cihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IF89dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihCbyhsLCJjb2xIZWFkZXIi'@;
put 'KT9mPV8ud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKTpCbyhsLCJyb3dIZWFkZXIiKSYmKGY9Xy53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9nZyhsLGQoYSxoKSk6KGpwKGwsU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSxwaShs'@;
put 'LCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZp'@;
put 'ZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtjb25zdCBkPXhnLmdldCh0aGlzKTtbZC5sYXN0V2lkdGgsZC5sYXN0SGVpZ2h0XT1bbCxhXX1nZXRMYXN0U2l6ZSgpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpO3JldHVybnt3aWR0aDps'@;
put 'Lmxhc3RXaWR0aCxoZWlnaHQ6bC5sYXN0SGVpZ2h0fX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZp'@;
put 'c2libGVSb3coKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdEZ1'@;
put 'bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNv'@;
put 'bHVtbigpe3JldHVybiB0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gZG5l'@;
put 'KHRoaXMsaVYpfWdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiBkbmUodGhpcyxvVil9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fSxwbmU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixzVj1wbmUubGVuZ3RoO2Z1bmN0aW9u'@;
put 'IE1rKGMpe2xldCBkLGw9YysxLGE9IiI7Zm9yKDtsPjA7KWQ9KGwtMSklc1YsYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2QpK2EsbD1wYXJzZUludCgobC1kKS9zViwxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gcFRlKGMpe2xldCBsPTA7aWYoYylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxj'@;
put 'Lmxlbmd0aDthKz0xLGQtPTEpbCs9c1YqKmQqKHBuZS5pbmRleE9mKGNbYV0pKzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24gZ1RlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChNayhoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIG1UZSgpe2xldCBjPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2Zvciho'@;
put 'PTA7aDxsO2grKylmW2Bwcm9wJHtofWBdPU1rKGgpKyhkKzEpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiB2VGUoYyxsKXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2YrKylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBhVihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgs'@;
put 'Zik9PntBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaCgoXyxUKT0+e2QucHVzaChbZitsLFQsX10pfSk6T2JqZWN0LmtleXMoaCkuZm9yRWFjaChfPT57ZC5wdXNoKFtmK2wsXyxoW19dXSl9KX0pLGR9ZnVuY3Rpb24gbFYoYyl7bGV0IGw9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNb'@;
put 'MF0mJkFycmF5LmlzQXJyYXkoY1swXSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZ1cyhjWzBdKSYmKGw9dWsoY1swXSkpKSxsfWZ1bmN0aW9uIGduZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5BcnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gbW5l'@;
put 'KGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9Y29uc3QgYlRlPWNsYXNzIF9UZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107dGhpcy5ob3Q9bCx0aGlzLmRhdGE9YSx0aGlzLmRhdGFUeXBlPSJhcnJheSIsdGhpcy5jb2xUb1Byb3A9KCk9Pnt9LHRoaXMucHJvcFRvQ29sPSgpPT57fX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5o'@;
put 'YXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhp'@;
put 'cy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBEbih0aGlzLmRhdGEsKGQsaCk9'@;
put 'Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJvdyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQ7bGV0IF89bnVsbCxU'@;
put 'PW51bGw7aWYoXz10aGlzLm1vZGlmeVJvd0RhdGEobCksQXJyYXkuaXNBcnJheShfKSlUPVtdLGY/Xy5mb3JFYWNoKChXLGllKT0+e1RbaWVdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxpZSxfKX0pOnZvKGEsZCxXPT57VFtXLWFdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxXLF8pfSk7'@;
put 'ZWxzZSBpZih1cyhfKXx8UmEoXykpaWYoVD1oP1tdOnt9LCFmfHxoKXtjb25zdCBpZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTt2bygwLGllLHBlPT57Y29uc3Qgd2U9dGhpcy5jb2xUb1Byb3AocGUpO2lmKHBlPj0oYXx8MCkmJnBlPD0oZHx8aWUpJiYhTnVtYmVyLmlzSW50ZWdlcih3'@;
put 'ZSkpe2NvbnN0IEVlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx3ZSxfKTtoP1QucHVzaChFZSk6Y2soVCx3ZSxFZSl9fSl9ZWxzZSBkcyhfLChXLGllKT0+e2NrKFQsaWUsdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLGllLF8pKX0pO3JldHVybiBUfXNldEF0Q2VsbChsLGEsZCl7aWYoIShs'@;
put 'Pj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGg9X2coZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hl'@;
put 'ZCgpJiYoZD1oLnZhbHVlKX1OdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXVthXT1kOmNrKHRoaXMuZGF0YVtsXSxhLGQpfX1nZXRBdFBoeXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVsbDtpZihkJiYoaD0ic3RyaW5nIj09dHlwZW9mIGE/X3RlKGQsYSk6ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGE/YShkKTpkW2FdKSx0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGY9X2coaCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxmLCJnZXQiKSxmLmlzVG91Y2hlZCgpJiYoaD1mLnZhbHVlKX1yZXR1cm4gaH1nZXRBdENlbGwo'@;
put 'bCxhKXtjb25zdCBkPXRoaXMubW9kaWZ5Um93RGF0YShsKTtyZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRoaXMuY29sVG9Qcm9wKGEpLGQpfWdldEJ5UmFuZ2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVs'@;
put 'bCxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9bnVsbCxfPW51bGwsVD1udWxsLFc9bnVsbDtudWxsPT09bHx8'@;
put 'bnVsbD09PWE/KGg9ITAsZj0wLFQ9dGhpcy5jb3VudFJvd3MoKS0xKTooZj1NYXRoLm1pbihsLnJvdyxhLnJvdyksXz1NYXRoLm1pbihsLmNvbCxhLmNvbCksVD1NYXRoLm1heChsLnJvdyxhLnJvdyksVz1NYXRoLm1heChsLmNvbCxhLmNvbCkpO2NvbnN0IGllPVtdO3JldHVybiB2byhmLFQs'@;
put 'cGU9PntpZS5wdXNoKGg/dGhpcy5nZXRBdFJvdyhwZSx2b2lkIDAsdm9pZCAwLGQpOnRoaXMuZ2V0QXRSb3cocGUsXyxXLGQpKX0pLGllfWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2Rp'@;
put 'ZnlTb3VyY2VMZW5ndGgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsfXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIGxWKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fSx2bmU9e19sb2Nh'@;
put 'bEhvb2tzOk9iamVjdC5jcmVhdGUobnVsbCksYWRkTG9jYWxIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3NbY118fCh0aGlzLl9sb2NhbEhvb2tzW2NdPVtdKSx0aGlzLl9sb2NhbEhvb2tzW2NdLnB1c2gobCksdGhpc30scnVuTG9jYWxIb29rcyhjLGwsYSxkLGgsZixfKXtpZih0'@;
put 'aGlzLl9sb2NhbEhvb2tzW2NdKXtjb25zdCBUPXRoaXMuX2xvY2FsSG9va3NbY10ubGVuZ3RoO2ZvcihsZXQgVz0wO1c8VDtXKyspYWsodGhpcy5fbG9jYWxIb29rc1tjXVtXXSx0aGlzLGwsYSxkLGgsZixfKX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9'@;
put 'LHRoaXN9fTtmaCh2bmUsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IE8wPXZuZTtjbGFzcyBFZ3tjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw'@;
put 'XTpudWxsO3RoaXMuaW5kZXhlZFZhbHVlcz1bXSx0aGlzLmluaXRWYWx1ZU9yRm49bH1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleChsKXtjb25zdCBhPXRoaXMuaW5kZXhlZFZhbHVlcztpZihsPGEubGVuZ3RoKXJldHVybiBhW2xdfXNldFZh'@;
put 'bHVlcyhsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9bC5zbGljZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0VmFsdWVBdEluZGV4KGwsYSl7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLHRoaXMucnVuTG9jYWxIb29r'@;
put 'cygiY2hhbmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXREZWZhdWx0VmFsdWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu'@;
put 'dHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsUmEodGhpcy5pbml0VmFsdWVPckZuKT92byhsLTEsYT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGEpKSk6dm8obC0xLCgpPT50aGlzLmluZGV4ZWRW'@;
put 'YWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWluaXQobCl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyhsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hh'@;
put 'bmdlIil9cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gY1YoYyxsLGEpe3JldHVyblsuLi5jLnNsaWNlKDAs'@;
put 'bCksLi4uYSwuLi5jLnNsaWNlKGwpXX1mdW5jdGlvbiBneShjLGwpe3JldHVybiBfMShjLGE9PiExPT09bC5pbmNsdWRlcyhhKSl9ZnVuY3Rpb24gdVYoYyxsKXtyZXR1cm4gY3MoYyxhPT5hLWwuZmlsdGVyKGQ9PmQ8YSkubGVuZ3RoKX1mdW5jdGlvbiBkVihjLGwpe2NvbnN0IGE9bFswXSxk'@;
put 'PWwubGVuZ3RoO3JldHVybiBjcyhjLGg9Pmg+PWE/aCtkOmgpfVRhKEVnLE8wKTtjbGFzcyBfbmUgZXh0ZW5kcyBFZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9ZFYodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1jVihkLGws'@;
put 'YSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9Z3kodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz11VihhLGwpLHN1cGVyLnJlbW92ZShsKX19ZnVuY3Rpb24gaFYoYyxsLGEsZCl7Y29uc3QgaD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5b'@;
put 'Li4uYy5zbGljZSgwLGgpLC4uLmEubWFwKChmLF8pPT5SYShkKT9kKGYsXyk6ZCksLi4udm9pZCAwPT09aD9bXTpjLnNsaWNlKGgpXX1mdW5jdGlvbiBmVihjLGwpe3JldHVybiBfMShjLChhLGQpPT4hMT09PWwuaW5jbHVkZXMoZCkpfWNsYXNzIFdwIGV4dGVuZHMgRWd7aW5zZXJ0KGwsYSl7'@;
put 'dGhpcy5pbmRleGVkVmFsdWVzPWhWKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWZWKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9fWNsYXNzIHhrIGV4'@;
put 'dGVuZHMgV3B7Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNs'@;
put 'YXNzIEVrIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHdUZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gQ1RlKGMpe3ZhciBsPWZ1bmN0aW9uIFNUZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShs'@;
put 'Lmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMu'@;
put 'b3JkZXJPZkluZGV4ZXM9Z3kodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLFJhKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0'@;
put 'aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5s'@;
put 'ZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1oVih0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1kVih0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmlu'@;
put 'c2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9ZlYodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9Z3kodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPXVWKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVt'@;
put 'b3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgbXkgZXh0ZW5kcyBXcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd'@;
put 'JiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IGJuZT1uZXcgTWFwKFtbImhpZGluZyIseGtdLFsiaW5kZXgiLEVnXSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1Zh'@;
put 'bHVlIixFa10sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsV3BdLFsidHJpbW1pbmciLG15XV0pO2xldCBwVj0wO2NsYXNzIGdWe2NvbnN0cnVjdG9yKCl7dGhpcy5jb2xsZWN0aW9uPW5ldyBNYXB9cmVnaXN0ZXIobCxhKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXMobCkmJih0aGlzLmNvbGxl'@;
put 'Y3Rpb24uc2V0KGwsYSksYS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSkscFYrPTEpfXVucmVnaXN0ZXIobCl7Y29uc3QgYT10aGlzLmNvbGxlY3Rpb24uZ2V0KGwpO0tpKGEpJiYoYS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRl'@;
put 'bGV0ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkscFYtPTEpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgobCxhKT0+dGhpcy51bnJlZ2lzdGVyKGEpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQobCl7cmV0dXJuIElhKGwpP0FycmF5LmZy'@;
put 'b20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGwpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EucmVtb3ZlKGwpfSl9aW5zZXJ0VG9FdmVy'@;
put 'eShsLGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGQ9PntkLmluc2VydChsLGEpfSl9aW5pdEV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLmluaXQobCl9KX19VGEoZ1YsTzApO2NsYXNzIHluZSBleHRlbmRzIGdWe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlz'@;
put 'Lm1lcmdlZFZhbHVlc0NhY2hlPVtdLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0'@;
put 'aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9Y3ModGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9S2koYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCBfPVtdO2Zvcihs'@;
put 'ZXQgVD0wO1Q8dGhpcy5nZXRMZW5ndGgoKTtUKz0xKV8ucHVzaChhW1RdW2ZdKTtkLnB1c2goXyl9cmV0dXJuIGNzKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBL'@;
put 'aShkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiB3bmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJp'@;
put 'dmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIG1WPW5ldyBXZWFrTWFwO2NsYXNzIENuZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBFVGUoYyxsLGEpeyhmdW5jdGlvbiBrVGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u'@;
put 'b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLG1WLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pfXN1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5hZGRMb2NhbEhvb2soImNoYW5nZSIsbCksdGhp'@;
put 'cy5fd3JpdGUoZnVuY3Rpb24gRFRlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIExUZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsd25lKGMsbCwiZ2V0IikpfSh0aGlzLG1WKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVu'@;
put 'c3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIEFUZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IFRUZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsd25lKGMsbCwic2V0IiksYSksYX0odGhpcyxtVixs'@;
put 'KX19ZnVuY3Rpb24gU25lKGMsbCl7Y29uc3QgYT1bXTtsZXQgZD0wLGg9MDtmb3IoO2Q8Yy5sZW5ndGgmJmg8bC5sZW5ndGg7ZCsrLGgrKyljW2RdIT09bFtoXSYmYS5wdXNoKHtvcDoicmVwbGFjZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2RdLG5ld1ZhbHVlOmxbaF19KTtmb3IoO2Q8bC5sZW5n'@;
put 'dGg7ZCsrKWEucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6ZCxvbGRWYWx1ZTp2b2lkIDAsbmV3VmFsdWU6bFtkXX0pO2Zvcig7aDxjLmxlbmd0aDtoKyspYS5wdXNoKHtvcDoicmVtb3ZlIixpbmRleDpoLG9sZFZhbHVlOmNbaF0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGF9ZnVuY3Rpb24g'@;
put 'dnkoYyxsLGEpeyhmdW5jdGlvbiBJVGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG1kKGMsbCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIFJUZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsTW5lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGtrKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gT1RlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJs'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxNbmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIE1uZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0'@;
put 'byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1UYShDbmUsTzApO3ZhciBBaz1uZXcgV2Vha01hcCxfeT1uZXcgV2Vha01hcCxUaz1uZXcgV2Vha01hcCxEaz1uZXcgV2Vha01hcCxMaz1uZXcgV2Vha01hcDtjbGFzcyBQVGV7Y29uc3RydWN0'@;
put 'b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3Z5KHRoaXMsQWsse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBTZXR9KSx2eSh0aGlzLF95LHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHZ5'@;
put 'KHRoaXMsVGsse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksdnkodGhpcyxEayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSx2eSh0aGlzLExrLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGtrKHRoaXMsTGssbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgQ25lO3JldHVybiBtZCh0'@;
put 'aGlzLEFrKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e21kKHRoaXMsQWspLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoU25lKG1kKHRoaXMsX3kpLG1kKHRoaXMsVGspKSksbH1lbWl0KGwpe2xldCBhPW1kKHRoaXMsVGspOyghbWQodGhpcyxE'@;
put 'ayl8fG1kKHRoaXMsX3kpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChtZCh0aGlzLExrKSk6a2sodGhpcyxfeSxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwobWQodGhpcyxMaykpKSxtZCh0aGlzLERrKXx8KGtrKHRoaXMsRGss'@;
put 'ITApLGE9bWQodGhpcyxfeSkpKTtjb25zdCBkPVNuZShhLGwpO21kKHRoaXMsQWspLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGtrKHRoaXMsVGssbCl9fWNsYXNzIHZWe2NvbnN0cnVjdG9yKCl7dGhpcy5pbmRleGVzU2VxdWVuY2U9bmV3IF9uZSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rp'@;
put 'b249bmV3IHluZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbj1uZXcgeW5lKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbj1uZXcgZ1YsdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZT1uZXcgUFRl'@;
put 'KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT1bXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bXSx0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITEsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQg'@;
put 'MCx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPVtdLHRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGU9bmV3IE1hcCx0aGlzLmZyb21WaXN1YWxUb1Jl'@;
put 'bmRlcmFibGVJbmRleGVzQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1NlcXVlbmNlQ2hh'@;
put 'bmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMudHJpbW1lZEluZGV4ZXNDaGFu'@;
put 'Z2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9'@;
put 'ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0'@;
put 'aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hlKCl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGwpe2lmKCJoaWRpbmciIT09bCl0'@;
put 'aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2x9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVhdGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAobCxhLGQpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFwKGws'@;
put 'ZnVuY3Rpb24gTVRlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFibmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIG1hcCB0eXBlICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3Jl'@;
put 'dHVybiBuZXcoYm5lLmdldChjKSkobCl9KGEsZCkpfXJlZ2lzdGVyTWFwKGwsYSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChsKSl0aHJvdyBFcnJv'@;
put 'cihgTWFwIHdpdGggbmFtZSAiJHtsfSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2EgaW5zdGFuY2VvZiBteT90aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTphIGluc3RhbmNlb2YgeGs/dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3Rlcihs'@;
put 'LGEpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk7Y29uc3QgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmEuaW5pdChkKSxhfXVucmVnaXN0ZXJNYXAobCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhp'@;
put 'cy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCl9dW5yZWdpc3RlckFsbCgpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51'@;
put 'bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlW2xdO3JldHVybiBLaShhKT9hOm51bGx9Z2V0UGh5c2ljYWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGwpe2NvbnN0IGE9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbbF07cmV0dXJuIEtpKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KGwp'@;
put 'O3JldHVybiBLaShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsKXtj'@;
put 'b25zdCBhPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIEtpKGEpP2E6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd'@;
put 'O2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5oYXMobCkpcmV0dXJuIGw7Y29uc3QgZj1BcnJheS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUlu'@;
put 'ZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCBfPS0xO3JldHVybiBfPWE+MD9mLmZpbmRJbmRleChUPT5UPmwpOmYucmV2ZXJzZSgpLmZpbmRJbmRleChUPT5UPGwpLC0xPT09Xz9kP3RoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsLWEsITEpOm51bGw6ZltfXX1pbml0VG9MZW5ndGgoKXts'@;
put 'ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hl'@;
put 'PVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbml0KGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xs'@;
put 'ZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0'@;
put 'aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKGwpe2NvbnN0IGE9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihsPGEpe2NvbnN0IGQ9Wy4uLkFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCktbCkua2V5cygpXS5tYXAoaD0+aCtsKTt0aGlzLnJl'@;
put 'bW92ZUluZGV4ZXMoZCl9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoYSxsLWEpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2VxdWVuY2UobCl7dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYo'@;
put 'dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMobCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5kZXhlcygpe3Jl'@;
put 'dHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNUcmltbWVkKGQpKX1nZXROb3RU'@;
put 'cmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5v'@;
put 'dEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRlcmFibGVJbmRl'@;
put 'eGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNI'@;
put 'aWRkZW4oZCkpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJbmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKGwsYSl7Im51bWJl'@;
put 'ciI9PXR5cGVvZiBsJiYobD1bbF0pO2NvbnN0IGQ9Y3MobCxpZT0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChpZSkpLGg9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGY9bC5sZW5ndGgsXz1neSh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQpLFQ9Xy5maWx0'@;
put 'ZXIoaWU9PiExPT09dGhpcy5pc1RyaW1tZWQoaWUpKTtsZXQgVz1fLmluZGV4T2YoVFtULmxlbmd0aC0xXSkrMTthK2Y8aCYmKFc9Xy5pbmRleE9mKFRbYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKGNWKF8sVyxkKSksdGhpcy5p'@;
put 'bmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4'@;
put 'KGwpfWluc2VydEluZGV4ZXMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVtsXSxoPUtpKGQpP2Q6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxmPXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoZCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5p'@;
put 'bmRleE9mKGQpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksXz1jcyhuZXcgQXJyYXkoYSkuZmlsbChoKSwoVCxXKT0+VCtXKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydChmLF8p'@;
put 'LHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZixfKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZixfKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5'@;
put 'KGYsXyksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9p'@;
put 'ZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygp'@;
put 'fXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0'@;
put 'aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMo'@;
put 'ITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygp'@;
put 'LHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9v'@;
put 'a3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2Vk'@;
put 'fSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVu'@;
put 'Z3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxhKX19'@;
put 'Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0'@;
put 'UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiB4bmUoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSktKFthLXpB'@;
put 'LVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24gRW5lKGMpe0tpKGMpJiZTTihBYWBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIg'@;
put 'cGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfVRhKHZWLE8wKTtjb25zdHtyZWdpc3RlcjpOVGUs'@;
put 'Z2V0VmFsdWVzOlZUZX09cGQoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rpb24gQlRlKGMsbCl7TlRlKGMsbCl9KCJwbHVyYWxpemUiLGZ1bmN0aW9uIEhUZShjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0IGtuZT0iQ29u'@;
put 'dGV4dE1lbnU6aXRlbXMiLF9WPWAke2tuZX0ubm9JdGVtc2AsYlY9YCR7a25lfS5pbnNlcnRSb3dBYm92ZWAseVY9YCR7a25lfS5pbnNlcnRSb3dCZWxvd2Asd1Y9YCR7a25lfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLENWPWAke2tuZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdodGAsU1Y9YCR7'@;
put 'a25lfS5yZW1vdmVSb3dgLE1WPWAke2tuZX0ucmVtb3ZlQ29sdW1uYCx4Vj1gJHtrbmV9LnVuZG9gLEVWPWAke2tuZX0ucmVkb2Asa1Y9YCR7a25lfS5yZWFkT25seWAsQVY9YCR7a25lfS5jbGVhckNvbHVtbmAsVFY9YCR7a25lfS5jb3B5YCxEVj1gJHtrbmV9LmNvcHlXaXRoSGVhZGVyc2As'@;
put 'TFY9YCR7a25lfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2AsSVY9YCR7a25lfS5jb3B5SGVhZGVyc09ubHlgLFJWPWAke2tuZX0uY3V0YCxPVj1gJHtrbmV9LmZyZWV6ZUNvbHVtbmAsUFY9YCR7a25lfS51bmZyZWV6ZUNvbHVtbmAsRlY9YCR7a25lfS5tZXJnZUNlbGxzYCxIVj1gJHtrbmV9LnVu'@;
put 'bWVyZ2VDZWxsc2AsTlY9YCR7a25lfS5hZGRDb21tZW50YCxWVj1gJHtrbmV9LmVkaXRDb21tZW50YCxCVj1gJHtrbmV9LnJlbW92ZUNvbW1lbnRgLGpWPWAke2tuZX0ucmVhZE9ubHlDb21tZW50YCx6Vj1gJHtrbmV9LmFsaWduYCxVVj1gJHtrbmV9LmFsaWduLmxlZnRgLFpWPWAke2tuZX0u'@;
put 'YWxpZ24uY2VudGVyYCxZVj1gJHtrbmV9LmFsaWduLnJpZ2h0YCxXVj1gJHtrbmV9LmFsaWduLmp1c3RpZnlgLEdWPWAke2tuZX0uYWxpZ24udG9wYCwkVj1gJHtrbmV9LmFsaWduLm1pZGRsZWAscVY9YCR7a25lfS5hbGlnbi5ib3R0b21gLEtWPWAke2tuZX0uYm9yZGVyc2AsWFY9YCR7a25l'@;
put 'fS5ib3JkZXJzLnRvcGAsSlY9YCR7a25lfS5ib3JkZXJzLnJpZ2h0YCxRVj1gJHtrbmV9LmJvcmRlcnMuYm90dG9tYCxlQj1gJHtrbmV9LmJvcmRlcnMubGVmdGAsdEI9YCR7a25lfS5ib3JkZXJzLnJlbW92ZWAsbkI9YCR7a25lfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YCxyQj1g'@;
put 'JHtrbmV9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsaUI9YCR7a25lfS5oaWRlQ29sdW1uYCxvQj1gJHtrbmV9LnNob3dDb2x1bW5gLHNCPWAke2tuZX0uaGlkZVJvd2AsYUI9YCR7a25lfS5zaG93Um93YCwkdT0iRmlsdGVyczoiLHlsPWAkeyR1fWNvbmRpdGlvbnNgLElrPWAk'@;
put 'e3lsfS5ub25lYCxsQj1gJHt5bH0uaXNFbXB0eWAsY0I9YCR7eWx9LmlzTm90RW1wdHlgLHVCPWAke3lsfS5pc0VxdWFsVG9gLGRCPWAke3lsfS5pc05vdEVxdWFsVG9gLGhCPWAke3lsfS5iZWdpbnNXaXRoYCxmQj1gJHt5bH0uZW5kc1dpdGhgLHBCPWAke3lsfS5jb250YWluc2AsZ0I9YCR7'@;
put 'eWx9LmRvZXNOb3RDb250YWluYCx6VGU9YCR7eWx9LmJ5VmFsdWVgLG1CPWAke3lsfS5ncmVhdGVyVGhhbmAsdkI9YCR7eWx9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxfQj1gJHt5bH0ubGVzc1RoYW5gLGJCPWAke3lsfS5sZXNzVGhhbk9yRXF1YWxUb2AseUI9YCR7eWx9LmlzQmV0d2VlbmAs'@;
put 'd0I9YCR7eWx9LmlzTm90QmV0d2VlbmAsQ0I9YCR7eWx9LmFmdGVyYCxTQj1gJHt5bH0uYmVmb3JlYCxNQj1gJHt5bH0udG9kYXlgLHhCPWAke3lsfS50b21vcnJvd2AsRUI9YCR7eWx9Lnllc3RlcmRheWAsa0I9YCR7JHV9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxBQj1gJHskdX1sYWJl'@;
put 'bHMuZmlsdGVyQnlWYWx1ZWAsVEI9YCR7JHV9bGFiZWxzLmNvbmp1bmN0aW9uYCxSaz1gJHskdX1sYWJlbHMuZGlzanVuY3Rpb25gLE9rPWAkeyR1fXZhbHVlcy5ibGFua0NlbGxzYCxEQj1gJHskdX1idXR0b25zLnNlbGVjdEFsbGAsTEI9YCR7JHV9YnV0dG9ucy5jbGVhcmAsSUI9YCR7JHV9'@;
put 'YnV0dG9ucy5va2AsUkI9YCR7JHV9YnV0dG9ucy5jYW5jZWxgLE9CPWAkeyR1fWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxQQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCxGQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxBbmU9e2xhbmd1YWdl'@;
put 'Q29kZToiZW4tVVMiLFtfVl06Ik5vIGF2YWlsYWJsZSBvcHRpb25zIixbYlZdOiJJbnNlcnQgcm93IGFib3ZlIixbeVZdOiJJbnNlcnQgcm93IGJlbG93Iixbd1ZdOiJJbnNlcnQgY29sdW1uIGxlZnQiLFtDVl06Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtTVl06WyJSZW1vdmUgcm93IiwiUmVt'@;
put 'b3ZlIHJvd3MiXSxbTVZdOlsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0sW3hWXToiVW5kbyIsW0VWXToiUmVkbyIsW2tWXToiUmVhZCBvbmx5IixbQVZdOiJDbGVhciBjb2x1bW4iLFt6Vl06IkFsaWdubWVudCIsW1VWXToiTGVmdCIsW1pWXToiQ2VudGVyIixbWVZdOiJSaWdo'@;
put 'dCIsW1dWXToiSnVzdGlmeSIsW0dWXToiVG9wIixbJFZdOiJNaWRkbGUiLFtxVl06IkJvdHRvbSIsW09WXToiRnJlZXplIGNvbHVtbiIsW1BWXToiVW5mcmVlemUgY29sdW1uIixbS1ZdOiJCb3JkZXJzIixbWFZdOiJUb3AiLFtKVl06IlJpZ2h0IixbUVZdOiJCb3R0b20iLFtlQl06IkxlZnQi'@;
put 'LFt0Ql06IlJlbW92ZSBib3JkZXIocykiLFtOVl06IkFkZCBjb21tZW50IixbVlZdOiJFZGl0IGNvbW1lbnQiLFtCVl06IkRlbGV0ZSBjb21tZW50IixbalZdOiJSZWFkLW9ubHkgY29tbWVudCIsW0ZWXToiTWVyZ2UgY2VsbHMiLFtIVl06IlVubWVyZ2UgY2VsbHMiLFtUVl06IkNvcHkiLFtE'@;
put 'Vl06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbTFZdOlsiQ29weSB3aXRoIGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW0lWXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtSVl06IkN1dCIsW25CXToi'@;
put 'SW5zZXJ0IGNoaWxkIHJvdyIsW3JCXToiRGV0YWNoIGZyb20gcGFyZW50IixbaUJdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbb0JdOlsiU2hvdyBjb2x1bW4iLCJTaG93IGNvbHVtbnMiXSxbc0JdOlsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSxbYUJdOlsiU2hvdyByb3ciLCJT'@;
put 'aG93IHJvd3MiXSxbSWtdOiJOb25lIixbbEJdOiJJcyBlbXB0eSIsW2NCXToiSXMgbm90IGVtcHR5IixbdUJdOiJJcyBlcXVhbCB0byIsW2RCXToiSXMgbm90IGVxdWFsIHRvIixbaEJdOiJCZWdpbnMgd2l0aCIsW2ZCXToiRW5kcyB3aXRoIixbcEJdOiJDb250YWlucyIsW2dCXToiRG9lcyBu'@;
put 'b3QgY29udGFpbiIsW21CXToiR3JlYXRlciB0aGFuIixbdkJdOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iLFtfQl06Ikxlc3MgdGhhbiIsW2JCXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbeUJdOiJJcyBiZXR3ZWVuIixbd0JdOiJJcyBub3QgYmV0d2VlbiIsW0NCXToiQWZ0ZXIiLFtT'@;
put 'Ql06IkJlZm9yZSIsW01CXToiVG9kYXkiLFt4Ql06IlRvbW9ycm93IixbRUJdOiJZZXN0ZXJkYXkiLFtPa106IkJsYW5rIGNlbGxzIixba0JdOiJGaWx0ZXIgYnkgY29uZGl0aW9uIixbQUJdOiJGaWx0ZXIgYnkgdmFsdWUiLFtUQl06IkFuZCIsW1JrXToiT3IiLFtEQl06IlNlbGVjdCBhbGwi'@;
put 'LFtMQl06IkNsZWFyIixbSUJdOiJPSyIsW1JCXToiQ2FuY2VsIixbT0JdOiJTZWFyY2giLFtQQl06IlZhbHVlIixbRkJdOiJTZWNvbmQgdmFsdWUifSxVVGU9VixIQj1BbmUubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpaVGUsZ2V0SXRlbTpUbmUsaGFzSXRlbTpZVGUsZ2V0VmFsdWVzOldUZX09'@;
put 'cGQoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIERuZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiB1cyhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBHVGUoYyxsKXtjIT09SEImJmZ1bmN0aW9uIEZUZShjLGwpe2RzKGwsKGEsZCk9PntJYShjW2RdKSYmKGNb'@;
put 'ZF09YSl9KX0obCxUbmUoSEIpKX0oYSxkKSxaVGUoYSx5dShkKSkseXUoZCl9ZnVuY3Rpb24gTG5lKGMpe3JldHVybiBOQihjKT95dShUbmUoYykpOm51bGx9ZnVuY3Rpb24gTkIoYyl7cmV0dXJuIFlUZShjKX1mdW5jdGlvbiBJbmUoYyxsLGEpe2NvbnN0IGQ9TG5lKGMpO2lmKG51bGw9PT1k'@;
put 'KXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZihJYShoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9uIHFUZShjLGwpe2xldCBhPWM7cmV0dXJuIERuKGZ1bmN0aW9uIGpUZSgpe3JldHVybiBWVGUoKX0oKSxkPT57YT1kKGMsbCl9KSxhfShoLGEpO3JldHVybiBBcnJheS5pc0FycmF5'@;
put 'KGYpP2ZbMF06Zn1EbmUoQW5lKTtjb25zdCBQaz0iYWN0aXZlLWhlYWRlciIsRms9ImFyZWEiLGJ5PSJjZWxsIixWQj0iZmlsbCIseXk9ImhlYWRlciIsQkI9ImN1c3RvbS1zZWxlY3Rpb24iLGVEZT1jbGFzcyBRVGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNldHRpbmdzPWwsdGhpcy5jZWxs'@;
put 'UmFuZ2U9YXx8bnVsbCx0aGlzLmluc3RhbmNlQm9yZGVycz17fSx0aGlzLmNsYXNzTmFtZXM9W3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lXSx0aGlzLmNsYXNzTmFtZUdlbmVyYXRvcj10aGlzLmxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcih0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNl'@;
put 'dHRpbmdzLmxheWVyTGV2ZWwpfWdldEJvcmRlcihsKXtyZXR1cm4gdGhpcy5pbnN0YW5jZUJvcmRlcnNbbC5ndWlkXXx8KHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF09bmV3IGNsYXNzIFhUZXtjb25zdHJ1Y3RvcihsLGEpe2EmJih0aGlzLmV2ZW50TWFuYWdlcj1sLmV2ZW50TWFuYWdl'@;
put 'cix0aGlzLmluc3RhbmNlPWwsdGhpcy53b3Q9bCx0aGlzLnNldHRpbmdzPWEsdGhpcy5tb3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVsbCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJv'@;
put 'dHRvbVN0eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5lbmRTdHlsZT1udWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPXt3aWR0aDoiNnB4IixoZWlnaHQ6IjZweCIsYm9yZGVyV2lkdGg6IjFweCIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9LHRo'@;
put 'aXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQ9LXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lz'@;
put 'dGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3Vz'@;
put 'ZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VF'@;
put 'bnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVy'@;
put 'T25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx2MihsKTtjb25zdCBkPXRoaXMsaD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gVChXKXsoZnVuY3Rpb24gXyhXKXtpZihXLmNsaWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fFcuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxXLmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxXLmNsaWVudFg+'@;
put 'TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKFcpJiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLFQpLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMu'@;
put 'd290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IFQ9MDtUPDU7VCsr'@;
put 'KXtjb25zdCBXPWRbVF0saWU9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZS5jbGFzc05hbWU9YHd0Qm9yZGVyICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS5oaWRlJiYoaWUuY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9'@;
put 'aWUuc3R5bGUsaC5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS5jb2xvcj90aGlzLnNldHRpbmdzW1ddLmNvbG9yOmwuYm9yZGVyLmNvbG9yLGguaGVpZ2h0PXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10ud2lkdGg/YCR7dGhpcy5z'@;
put 'ZXR0aW5nc1tXXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLGgud2lkdGg9dGhpcy5zZXR0aW5nc1tXXSYmdGhpcy5zZXR0aW5nc1tXXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW1ddLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsdGhpcy5tYWluLmFwcGVuZENoaWxk'@;
put 'KGllKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Au'@;
put 'c3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBj'@;
put 'b3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmhlaWdodD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsdGhpcy5jb3JuZXJTdHls'@;
put 'ZS5ib3JkZXI9W3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiksbTIoKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFu'@;
put 'ZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTpmfT10aGlzLndvdDtsZXQgXz1mLmJvcmRlcnNIb2xkZXI7X3x8KF89YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxfLmNsYXNzTmFtZT0iaHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9XyxmLnNwcmVhZGVyLmFwcGVuZENoaWxk'@;
put 'KF8pKSxfLmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy53b3Q7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxl'@;
put 'bWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMu'@;
put 'c2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRv'@;
put 'bVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9'@;
put 'e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMu'@;
put 'Ym90dG9tSGl0QXJlYS5zdHlsZX0sZHMoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwoXyxUKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJl'@;
put 'YVtUXT1fLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYVtUXT1ffSksZHMoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiIxMHB4Iix3aWR0aDoiMTBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDEwLzEuNSwxMCl9cHhgLGJhY2tncm91bmQ6IiNGNUY1'@;
put 'RkYiLGJvcmRlcjoiMXB4IHNvbGlkICM0Mjg1YzgifSwoXyxUKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW1RdPV8sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbVF09X30pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMu'@;
put 'dG9wKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhp'@;
put 'dEFyZWEpfWlzUGFydFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpO3JldHVybiEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8ucm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhh'@;
put 'bmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsXyl7Y29uc3QgVz10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOmllLHRvcEhpdEFyZWE6cGUsYm90dG9tOndlLGJvdHRvbUhpdEFyZWE6RWV9PXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5z'@;
put 'dHlsZXMsWmU9cGFyc2VJbnQoaWUuYm9yZGVyV2lkdGgsMTApLGl0PXBhcnNlSW50KGllLndpZHRoLDEwKSxldD1wYXJzZUludChwZS53aWR0aCwxMCkseXQ9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLEV0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7aWUudG9wPWAke3BhcnNl'@;
put 'SW50KGQtaXQtMSwxMCl9cHhgLGllW1ddPWAke3BhcnNlSW50KGgtaXQtMSwxMCl9cHhgLHBlLnRvcD1gJHtwYXJzZUludChkLWV0LzQqMywxMCl9cHhgLHBlW1ddPWAke3BhcnNlSW50KGgtZXQvNCozLDEwKX1weGA7Y29uc3QgU3Q9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSx5dC1pdC0y'@;
put 'KlplKSxKdD1NYXRoLm1pbihwYXJzZUludChoK2YtZXQvNCwxMCkseXQtZXQtMipaZSk7d2VbV109YCR7U3R9cHhgLEVlW1ddPWAke0p0fXB4YDtjb25zdCBubj1NYXRoLm1pbihwYXJzZUludChkK18sMTApLEV0LWl0LTIqWmUpLHZuPU1hdGgubWluKHBhcnNlSW50KGQrXy1ldC80LDEwKSxF'@;
put 'dC1ldC0yKlplKTt3ZS50b3A9YCR7bm59cHhgLEVlLnRvcD1gJHt2bn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhpZS5kaXNwbGF5PSJibG9jayIscGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQ'@;
put 'YXJ0UmFuZ2UobCxhKT8od2UuZGlzcGxheT0ibm9uZSIsRWUuZGlzcGxheT0ibm9uZSIpOih3ZS5kaXNwbGF5PSJibG9jayIsRWUuZGlzcGxheT0iYmxvY2siKSk6KGllLmRpc3BsYXk9Im5vbmUiLHdlLmRpc3BsYXk9Im5vbmUiLHBlLmRpc3BsYXk9Im5vbmUiLEVlLmRpc3BsYXk9Im5vbmUi'@;
put 'KSxsPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKXx8YT09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT8oaWUuekluZGV4PSI5OTk5IixwZS56SW5kZXg9Ijk5OTkiKTooaWUuekluZGV4PSIiLHBlLnpJ'@;
put 'bmRleD0iIil9YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2NvbnN0e3d0VGFibGU6YSxyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMud290O2xldCBmLF8sVCxXLGllLHBlO2NvbnN0IHdlPWEuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IF9yPTA7X3I8'@;
put 'd2U7X3IrPTEpe2NvbnN0IHZ0PWEucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3IpO2lmKHZ0Pj1sWzBdJiZ2dDw9bFsyXSl7Zj12dCxpZT1sWzBdO2JyZWFrfX1mb3IobGV0IF9yPXdlLTE7X3I+PTA7X3ItPTEpe2NvbnN0IHZ0PWEucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3Ip'@;
put 'O2lmKHZ0Pj1sWzBdJiZ2dDw9bFsyXSl7Xz12dDticmVha319Y29uc3QgRWU9YS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgX3I9MDtfcjxFZTtfcis9MSl7Y29uc3QgdnQ9YS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShfcik7aWYodnQ+PWxbMV0mJnZ0PD1sWzNd'@;
put 'KXtUPXZ0LHBlPWxbMV07YnJlYWt9fWZvcihsZXQgX3I9RWUtMTtfcj49MDtfci09MSl7Y29uc3QgdnQ9YS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShfcik7aWYodnQ+PWxbMV0mJnZ0PD1sWzNdKXtXPXZ0O2JyZWFrfX1pZih2b2lkIDA9PT1mfHx2b2lkIDA9PT1UKXJldHVybiB2'@;
put 'b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IFplPWEuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYsVCkpO2NvbnN0IGl0PWYhPT1ffHxUIT09VyxldD1pdD9hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhfLFcpKTpaZSx5dD1LbChaZSksRXQ9aXQ/S2woZXQp'@;
put 'Onl0LFN0PUtsKGEuVEFCTEUpLEp0PXdhKGEuVEFCTEUpLG5uPXl0LnRvcCx2bj15dC5sZWZ0LE5uPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCBjcj0wLExyPTA7aWYoTm4pe2NvbnN0IF9yPXdhKFplKTtMcj12bitfci1FdC5sZWZ0LGNyPWguaW5uZXJX'@;
put 'aWR0aC12bi1fci0oaC5pbm5lcldpZHRoLVN0LmxlZnQtSnQpLTF9ZWxzZSBMcj1FdC5sZWZ0K3dhKGV0KS12bixjcj12bi1TdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGYsXykpe2NvbnN0IF9yPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMi'@;
put 'LFQsVyxpZSxTdCk7bGV0IHZ0PW51bGw7X3ImJihbdnQsY3IsTHJdPV9yKSx2dCYmKFplPXZ0KX1sZXQgRWk9bm4tU3QudG9wLTEsTGk9RXQudG9wK2FsKGV0KS1ubjtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoVCxXKSl7Y29uc3QgX3I9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRl'@;
put 'cigicm93cyIsZixfLHBlLFN0KTtsZXQgdnQ9bnVsbDtfciYmKFt2dCxFaSxMaV09X3IpLHZ0JiYoWmU9dnQpfWNvbnN0IGZyPXpwKFplLGgpO3BhcnNlSW50KGZyLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoRWkrPTEsTGk9TGk+MD9MaS0xOjApLHBhcnNlSW50KGZyW05uPyJib3JkZXJSaWdo'@;
put 'dFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihjcis9MSxMcj1Mcj4wP0xyLTE6MCk7Y29uc3QgaWk9Tm4/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9YCR7RWl9cHhgLHRoaXMudG9wU3R5bGVbaWldPWAke2NyfXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke0xy'@;
put 'fXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke0VpfXB4YCx0aGlzLnN0YXJ0U3R5bGVbaWldPWAke2NyfXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke0xpfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0'@;
put 'IGpyPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9RWkrTGktanIrInB4Iix0aGlzLmJvdHRvbVN0eWxlW2lpXT1gJHtjcn1weGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtMcn1weGAsdGhpcy5ib3R0b21TdHlsZS5kaXNw'@;
put 'bGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7RWl9cHhgLHRoaXMuZW5kU3R5bGVbaWldPWNyK0xyLWpyKyJweCIsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7TGkrMX1weGAsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IE9uPXRoaXMuc2V0dGluZ3MuYm9yZGVyLmNv'@;
put 'cm5lclZpc2libGU7T249ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6T247Y29uc3QgRnI9dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixfLFcpO2xldFtRbixNcl09W18sV107aWYoRnImJkFycmF5LmlzQXJyYXko'@;
put 'RnIpJiYoWywsUW4sTXJdPUZyKSxtMigpfHwhT258fHRoaXMuaXNQYXJ0UmFuZ2UoUW4sTXIpKXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlzLmNvcm5lclN0eWxlLnRvcD1FaStMaSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5l'@;
put 'clN0eWxlW2lpXT1jcitMcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRT'@;
put 'dHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBfcj12ZyhhLlRBQkxFKTtjb25zdCB2dD1fcj09PWg7dnQmJihfcj1kLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgT3Q9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsY249cGFy'@;
put 'c2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yO2lmKFc9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCBFbj12dD9ldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OmV0Lm9mZnNldExlZnQ7bGV0IFBuPSExLEpuPTA7Tm4/'@;
put 'KEpuPUVuLXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLFBuPUpuPDApOihKbj1Fbit3YShldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsUG49Sm4+PWl5KF9yKSksUG4mJih0aGlzLmNvcm5lclN0eWxlW2lpXT1gJHtN'@;
put 'YXRoLmZsb29yKGNyK0xyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtT3QpfXB4YCx0aGlzLmNvcm5lclN0eWxlW05uPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCl9Xz09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEmJih2dD9ldC5nZXRC'@;
put 'b3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ZXQub2Zmc2V0VG9wKSthbChldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1qZihfcikmJih0aGlzLmNvcm5lclN0eWxlLnRvcD1gJHtNYXRoLmZsb29yKEVpK0xpK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRP'@;
put 'ZmZzZXQtY24pfXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifW0yKCkmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oXyxXLEVpLGNyLExyLExpKX1pc0VudGlyZUNvbHVt'@;
put 'blNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRG'@;
put 'aXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdldERpbWVuc2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTpffT10aGlzLndvdCxUPV8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xldCBXPW51'@;
put 'bGwsaWU9bnVsbCxwZT1udWxsLHdlPW51bGwsRWU9bnVsbCxaZT1udWxsLGl0PW51bGwsZXQ9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpXPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LGllPWZ1bmN0aW9uKCl7cmV0dXJuIGFsKC4uLmFyZ3VtZW50'@;
put 'cyl9LHBlPSJodF9fc2VsZWN0aW9uLS1yb3dzIixaZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOlc9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0saWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2EoLi4uYXJndW1lbnRzKX0scGU9Imh0X19zZWxlY3Rp'@;
put 'b24tLWNvbHVtbnMiLFplPSJsZWZ0In1pZihULmNsYXNzTGlzdC5jb250YWlucyhwZSkpe2NvbnN0IHl0PXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoaXQ9VyhhLHl0LWgpLGV0PVcoZCx5dC1oKSwhaXR8fCFldClyZXR1cm4hMTtjb25zdCBFdD1LbChp'@;
put 'dCksU3Q9S2woZXQpO3JldHVybiBpdCYmZXQmJih3ZT1FdFtaZV0tZltaZV0tMSxFZT1TdFtaZV0raWUoZXQpLUV0W1plXSksW2l0LHdlLEVlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9waSh0aGlzW2xd'@;
put 'LCJoaWRkZW4iKTooQm8odGhpc1tsXSwiaGlkZGVuIikmJldvKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndp'@;
put 'ZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3Jk'@;
put 'ZXJUb0RlZmF1bHRTdHlsZShsKSxhP3BpKHRoaXNbbF0sImhpZGRlbiIpOldvKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9u'@;
put 'ZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLG0yKCkmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxh'@;
put 'eT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVu'@;
put 'dHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19KGwsdGhpcy5zZXR0aW5ncykpLHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF19aXNFbXB0eSgpe3JldHVybiBudWxsPT09dGhpcy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVybiB0aGlzLmlzRW1w'@;
put 'dHkoKT90aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNlbGxSYW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2Vs'@;
put 'bFJhbmdlLmZyb209YSwhMDtpZih0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhpc31nZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlzLmNlbGxSYW5nZS5n'@;
put 'ZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19YWRkQ2xhc3NBdENvb3JkcyhsLGEsZCxoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1s0XSYmYXJndW1lbnRzWzRdO2NvbnN0IF89bC53dFRhYmxlLmdldENlbGwodGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpO2lmKCJvYmplY3QiPT10eXBlb2YgXyl7bGV0IFQ9aDtmJiYoVD10aGlzLmNsYXNzTmFtZUdlbmVyYXRvcihfKSx0aGlzLmNsYXNzTmFtZXMu'@;
put 'aW5jbHVkZXMoVCl8fHRoaXMuY2xhc3NOYW1lcy5wdXNoKFQpKSxwaShfLFQpfXJldHVybiB0aGlzfWxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcihsLGEpe3JldHVybiBmdW5jdGlvbiBkKGgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50'@;
put 'c1sxXTotMTtpZigwPT09YXx8MD09PWYpcmV0dXJuIGw7bGV0IF89Zj49MD9mOmEsVD1sO3JldHVybiBfLT0xLFQ9Qm8oaCwwPT09Xz9sOmAke2x9LSR7X31gKT9gJHtsfS0ke18rMX1gOmQoaCxfKSxUfX1kcmF3KGwpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiB2b2lkKHRoaXMuc2V0dGlu'@;
put 'Z3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5kaXNhcHBlYXIoKSk7Y29uc3QgYT1sLnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxkPWwud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLGg9dGhpcy5nZXRDb3JuZXJzKCksW2YsXyxULFddPWgse2hpZ2hsaWdodEhl'@;
put 'YWRlckNsYXNzTmFtZTppZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6cGUsaGlnaGxpZ2h0Um93Q2xhc3NOYW1lOndlLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOkVlLHNlbGVjdGlvblR5cGU6WmV9PXRoaXMuc2V0dGluZ3MsaXQ9dm9pZCAwPT09WmV8fFsiYWN0aXZlLWhlYWRlciIs'@;
put 'ImhlYWRlciJdLmluY2x1ZGVzKFplKTtpZihpdCYmbnVsbCE9PV8mJm51bGwhPT1XKXtsZXQgZXQ9MDtmb3IobGV0IHl0PTA7eXQ8ZDt5dCs9MSl7Y29uc3QgRXQ9bC53dFRhYmxlLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihFdD49XyYmRXQ8PVcpe2xldCBTdD1sLnd0'@;
put 'VGFibGUuZ2V0Q29sdW1uSGVhZGVycyhFdCk7Y29uc3QgSnQ9U3QubGVuZ3RoLTE7RWUmJlN0Lmxlbmd0aD4xJiYoU3Q9W1N0W0p0XV0pO2ZvcihsZXQgbm49MDtubjxTdC5sZW5ndGg7bm4rPTEpe2NvbnN0IHZuPVtdO2xldCBObj1TdFtubl07aWUmJnZuLnB1c2goaWUpLHBlJiZ2bi5wdXNo'@;
put 'KHBlKSxubj1FZT9KdDpubjtjb25zdCBjcj1sLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixFdCxubix7c2VsZWN0aW9uVHlwZTpaZSxjb2x1bW5DdXJzb3I6ZXQsc2VsZWN0aW9uV2lkdGg6Vy1fKzEsY2xhc3NOYW1lczp2bn0pO2NyIT09RXQmJihObj1s'@;
put 'Lnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKGNyLG5uKSkscGkoTm4sdm4pfWV0Kz0xfX19aWYobnVsbCE9PWYmJm51bGwhPT1UKXtsZXQgZXQ9MDtmb3IobGV0IHl0PTA7eXQ8YTt5dCs9MSl7Y29uc3QgRXQ9bC53dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihpdCYm'@;
put 'RXQ+PWYmJkV0PD1UKXtsZXQgU3Q9bC53dFRhYmxlLmdldFJvd0hlYWRlcnMoRXQpO2NvbnN0IEp0PVN0Lmxlbmd0aC0xO0VlJiZTdC5sZW5ndGg+MSYmKFN0PVtTdFtKdF1dKTtmb3IobGV0IG5uPTA7bm48U3QubGVuZ3RoO25uKz0xKXtjb25zdCB2bj1bXTtsZXQgTm49U3Rbbm5dO2llJiZ2'@;
put 'bi5wdXNoKGllKSx3ZSYmdm4ucHVzaCh3ZSksbm49RWU/SnQ6bm47Y29uc3QgY3I9bC5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsRXQsbm4se3NlbGVjdGlvblR5cGU6WmUscm93Q3Vyc29yOmV0LHNlbGVjdGlvbkhlaWdodDpULWYrMSxjbGFzc05hbWVzOnZu'@;
put 'fSk7Y3IhPT1FdCYmKE5uPWwud3RUYWJsZS5nZXRSb3dIZWFkZXIoY3Isbm4pKSxwaShObix2bil9ZXQrPTF9aWYobnVsbCE9PV8mJm51bGwhPT1XKWZvcihsZXQgU3Q9MDtTdDxkO1N0Kz0xKXtjb25zdCBKdD1sLnd0VGFibGUuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoU3QpO0V0'@;
put 'Pj1mJiZFdDw9VCYmSnQ+PV8mJkp0PD1XP3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxFdCxKdCx0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNldHRpbmdzLm1hcmtJbnRlcnNlY3Rpb25zKTpFdD49ZiYmRXQ8PVQ/d2UmJnRoaXMuYWRkQ2xh'@;
put 'c3NBdENvb3JkcyhsLEV0LEp0LHdlKTpKdD49XyYmSnQ8PVcmJnBlJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxFdCxKdCxwZSk7Y29uc3Qgbm49bC5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsRXQsSnQsdGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTsic3RyaW5nIj09dHlw'@;
put 'ZW9mIG5uJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxFdCxKdCxubil9fX1sLmdldFNldHRpbmcoIm9uQmVmb3JlRHJhd0JvcmRlcnMiLGgsdGhpcy5zZXR0aW5ncy5jbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5hcHBlYXIoaCl9ZGVzdHJveSgp'@;
put 'e09iamVjdC52YWx1ZXModGhpcy5pbnN0YW5jZUJvcmRlcnMpLmZvckVhY2gobD0+bC5kZXN0cm95KCkpfX07Y29uc3QgaDc9Y2xhc3MgaURlIGV4dGVuZHMgZURle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5jdGlvbiB0RGUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIG5E'@;
put 'ZShjKXt2YXIgbD1mdW5jdGlvbiByRGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly'@;
put 'ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0o'@;
put 'bCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29t'@;
put 'bWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxD'@;
put 'ZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtpZihudWxsPT09'@;
put 'aHx8bnVsbD09PWYpcmV0dXJuIG51bGw7aWYoaC5yb3c+Zi5yb3d8fGguY29sPmYuY29sKXtpZigiaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlKXJldHVybiBudWxsO2g9YSxmPWR9cmV0dXJuIHRoaXMuc2V0dGluZ3Mu'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKGgsaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRp'@;
put 'bmdzLnJvd0luZGV4TWFwcGVyKCksbC5yb3csYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyKCksbC5jb2wsZCk7cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0'@;
put 'aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtpZihhPDApcmV0dXJuIGE7Y29uc3QgaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpO3JldHVybiJoZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlJiYiYWN0aXZlLWhlYWRl'@;
put 'ciIhPT10aGlzLnNldHRpbmdzLnR5cGV8fG51bGwhPT1oP2g6LTF9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2NvbnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlz'@;
put 'LmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBhPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsZD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlv'@;
put 'bigpPzE6LTEsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksYSxkKTtpZihudWxsIT09aCYmbC5vdmVybGFwcyhoKSl7aWYobnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJh'@;
put 'YmxlQ29vcmRzKGgpO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGYpfXJldHVybiBsLnNldEhpZ2hsaWdodChoKSx0aGlzfXJldHVybiBsLnNldEhpZ2hsaWdodChsLmZyb20pLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmNl'@;
put 'bGxSYW5nZSxkPW51bGw9PT1sLnJvd3x8bnVsbD09PWEucm93LGg9bnVsbD09PWwuY29sfHxudWxsPT09YS5jb2wsZj10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoZD9udWxsOk1hdGgubWluKGwucm93LGEucm93KSxoP251bGw6TWF0aC5taW4obC5jb2wsYS5jb2wpKSxfPXRoaXMu'@;
put 'c2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhkP251bGw6TWF0aC5tYXgobC5yb3csYS5yb3cpLGg/bnVsbDpNYXRoLm1heChsLmNvbCxhLmNvbCkpO3JldHVybltmLnJvdyxmLmNvbCxfLnJvdyxfLmNvbF19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJh'@;
put 'YmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1j'@;
put 'cmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQs'@;
put 'aCl9fSx7cmVnaXN0ZXI6ZjcsZ2V0SXRlbTp2RGV9PXBkKCJoaWdobGlnaHQvdHlwZXMiKTtmdW5jdGlvbiBwNyhjLGwpe3JldHVybiB2RGUoYykoe3R5cGU6YywuLi5sfSl9ZjcoUGssZnVuY3Rpb24gb0RlKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBu'@;
put 'ZXcgaDcoe2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTpQa30pfSksZjcoRmssZnVuY3Rpb24gYURlKGMpe2xldHtsYXllckxldmVsOmwsYXJlYUNvcm5lclZpc2libGU6YSwuLi5kfT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiYXJlYSIsbWFya0lu'@;
put 'dGVyc2VjdGlvbnM6ITAsbGF5ZXJMZXZlbDpNYXRoLm1pbihsLDcpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTphfSwuLi5kLHNlbGVjdGlvblR5cGU6Rmt9KX0pLGY3KGJ5LGZ1bmN0aW9uIGNEZShjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5h'@;
put 'fT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiY3VycmVudCIsYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpieX0pfSksZjcoQkIsZnVuY3Rpb24gZERlKGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6'@;
put 'YSwuLi5kfT1jO3JldHVybiBuZXcgaDcoey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOkJCfSxhKX0pLGY3KFZCLGZ1bmN0aW9uIGZEZShjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2Vs'@;
put 'ZWN0aW9uVHlwZTpWQn0pfSksZjcoeXksZnVuY3Rpb24gZ0RlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCxyb3dDbGFzc05hbWU6YSxjb2x1bW5DbGFzc05hbWU6ZCwuLi5ofT1jO3JldHVybiBuZXcgaDcoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IixoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6'@;
put 'bCxoaWdobGlnaHRSb3dDbGFzc05hbWU6YSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6ZCwuLi5oLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOiEwLHNlbGVjdGlvblR5cGU6eXl9KX0pO2NsYXNzIF9EZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bCx0aGlzLmxheWVyTGV2ZWw9'@;
put 'MCx0aGlzLmNlbGw9cDcoYnksbCksdGhpcy5maWxsPXA3KFZCLGwpLHRoaXMuYXJlYXM9bmV3IE1hcCx0aGlzLmhlYWRlcnM9bmV3IE1hcCx0aGlzLmFjdGl2ZUhlYWRlcnM9bmV3IE1hcCx0aGlzLmN1c3RvbVNlbGVjdGlvbnM9W119aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09Ynkm'@;
put 'JihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWguaW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVy'@;
put 'biB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRDZWxsKCl7cmV0dXJuIHRoaXMuY2VsbH1nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVPckdldEFyZWEoKXtjb25zdCBsPXRoaXMu'@;
put 'bGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hcmVhcy5oYXMobCk/YT10aGlzLmFyZWFzLmdldChsKTooYT1wNyhGayx7bGF5ZXJMZXZlbDpsLC4uLnRoaXMub3B0aW9uc30pLHRoaXMuYXJlYXMuc2V0KGwsYSkpLGF9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMo'@;
put 'KV19Y3JlYXRlT3JHZXRIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5oZWFkZXJzLmhhcyhsKT9hPXRoaXMuaGVhZGVycy5nZXQobCk6KGE9cDcoeXksey4uLnRoaXMub3B0aW9uc30pLHRoaXMuaGVhZGVycy5zZXQobCxhKSksYX1nZXRIZWFkZXJz'@;
put 'KCl7cmV0dXJuWy4uLnRoaXMuaGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlT3JHZXRBY3RpdmVIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hY3RpdmVIZWFkZXJzLmhhcyhsKT9hPXRoaXMuYWN0aXZlSGVhZGVycy5nZXQobCk6KGE9cDcoUGssey4u'@;
put 'LnRoaXMub3B0aW9uc30pLHRoaXMuYWN0aXZlSGVhZGVycy5zZXQobCxhKSksYX1nZXRBY3RpdmVIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVz'@;
put 'KCldfWFkZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChwNyhCQix7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmNlbGwuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxEbih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9'@;
put 'KSxEbih0aGlzLmhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLERuKHRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5jZWxsLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRo'@;
put 'aXMuaGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IGJEZT1fRGU7Y2xhc3MgeURle2NvbnN0cnVjdG9yKGwpe3RoaXMucmFuZ2VzPVtdLHRoaXMuY3JlYXRlQ2Vs'@;
put 'bFJhbmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFu'@;
put 'Z2UobCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KDApfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgoLTEpfWluY2x1ZGVzKGwpe3JldHVybiB0aGlzLnJhbmdlcy5zb21lKGE9PmEu'@;
put 'aW5jbHVkZXMobCkpfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9cGVla0J5SW5kZXgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtj'@;
put 'b25zdCBhPXRoaXMuc2l6ZSgpK2wtMTtsZXQgZDtyZXR1cm4gYT49MCYmKGQ9dGhpcy5yYW5nZXNbYV0pLGR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCB3RGU9eURlO2NsYXNzIFJuZXtjb25zdHJ1Y3RvcihsLGEpe3Ro'@;
put 'aXMucmFuZ2U9bCx0aGlzLm9wdGlvbnM9YX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhsLGEpLGY9dGhpcy5yYW5nZS5j'@;
put 'dXJyZW50KCkuaGlnaGxpZ2h0LHtyb3c6Xyxjb2w6VH09dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgVz1mLGllPTAscGU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixoKSxudWxsIT09XyYmbnVsbCE9PVQpe2xldCB3'@;
put 'ZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksRWU9dGhpcy5vcHRpb25zLmNvdW50Q29scygpO2NvbnN0IFplPXRoaXMub3B0aW9ucy5maXhlZFJvd3NCb3R0b20oKSxpdD10aGlzLm9wdGlvbnMubWluU3BhcmVSb3dzKCksZXQ9dGhpcy5vcHRpb25zLm1pblNwYXJlQ29scygpLHl0PXRoaXMu'@;
put 'b3B0aW9ucy5hdXRvV3JhcFJvdygpLEV0PXRoaXMub3B0aW9ucy5hdXRvV3JhcENvbCgpO18rbD53ZS0xP2QmJml0PjAmJiEoWmUmJl8+PXdlLVplLTEpPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLHdlKSx3ZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCkpOkV0JiYo'@;
put 'aC5yb3c9MS13ZSxoLmNvbD1UK2guY29sPT09RWUtMT8xLUVlOjEpOkV0JiZfK2gucm93PDAmJlQraC5jb2w+PTAmJihoLnJvdz13ZS0xLGguY29sPVQraC5jb2w9PT0wP0VlLTE6LTEpLFQraC5jb2w+RWUtMT9kJiZldD4wPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUi'@;
put 'LEVlKSxFZT10aGlzLm9wdGlvbnMuY291bnRDb2xzKCkpOnl0JiYoaC5yb3c9XytoLnJvdz09PXdlLTE/MS13ZToxLGguY29sPTEtRWUpOnl0JiZUK2guY29sPDAmJl8raC5yb3c+PTAmJihoLnJvdz1fK2gucm93PT09MD93ZS0xOi0xLGguY29sPUVlLTEpO2NvbnN0IFN0PXRoaXMub3B0aW9u'@;
put 'cy5jcmVhdGVDZWxsQ29vcmRzKF8raC5yb3csVCtoLmNvbCk7aWU9MCxwZT0wLFN0LnJvdzwwPyhpZT0tMSxTdC5yb3c9MCk6U3Qucm93PjAmJlN0LnJvdz49d2UmJihpZT0xLFN0LnJvdz13ZS0xKSxTdC5jb2w8MD8ocGU9LTEsU3QuY29sPTApOlN0LmNvbD4wJiZTdC5jb2w+PUVlJiYocGU9'@;
put 'MSxTdC5jb2w9RWUtMSksVz10aGlzLm9wdGlvbnMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFN0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixXLGllLHBlKSxXfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLmNyZWF0ZUNl'@;
put 'bGxDb29yZHMobCxhKSxoPXRoaXMucmFuZ2UuY3VycmVudCgpO2xldCBmPWgudG8sXz0wLFQ9MDt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCk7Y29uc3R7cm93OlcsY29sOmllfT10aGlzLm9wdGlvbnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxp'@;
put 'Z2h0KTtpZihudWxsIT09VyYmbnVsbCE9PWllKXtjb25zdCBwZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksd2U9dGhpcy5vcHRpb25zLmNvdW50Q29scygpLHtyb3c6RWUsY29sOlplfT10aGlzLm9wdGlvbnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgudG8pLGl0PXRoaXMub3B0aW9u'@;
put 'cy5jcmVhdGVDZWxsQ29vcmRzKEVlK2Qucm93LFplK2QuY29sKTtfPTAsVD0wLGl0LnJvdzwwPyhfPS0xLGl0LnJvdz0wKTppdC5yb3c+MCYmaXQucm93Pj1wZSYmKF89MSxpdC5yb3c9cGUtMSksaXQuY29sPDA/KFQ9LTEsaXQuY29sPTApOml0LmNvbD4wJiZpdC5jb2w+PXdlJiYoVD0xLGl0'@;
put 'LmNvbD13ZS0xKSxmPXRoaXMub3B0aW9ucy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaXQpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixmLF8sVCksZn19VGEoUm5lLE8wKTtjb25zdCBDRGU9Um5lLFNEZT1bMywyXSxNRGU9W1sibnVtYmVyIl0sWyJu'@;
put 'dW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLHpCPVN5bWJvbCgicm9vdCIpLFBuZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gZzcoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMV0/YXJndW1lbnRzWzFdOnpCO2lmKGwhPT16QiYmbCE9PVBuZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKTtjb25zdCBhPUFycmF5LmlzQXJyYXkoYyksZD1sPT09'@;
put 'ekI7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgWk4/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD1nNyhmLFBuZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYhYy5zb21lKChULFcpPT4hTURlW1ddLmluY2x1ZGVzKHR5cGVv'@;
put 'ZiBUKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIHd5KGMpe2xldHtrZWVwRGlyZWN0aW9uOmw9ITEscHJvcFRvQ29sOmF9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighU0RlLmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJv'@;
put 'cigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGQpe2NvbnN0IGg9Mz09PWM7bGV0IGY9aD9kLmZyb20ucm93OmRbMF0sXz1oP2QuZnJvbS5jb2w6ZFsxXSxUPWg/ZC50by5yb3c6ZFsyXSxXPWg/ZC50by5j'@;
put 'b2w6ZFszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKCJzdHJpbmciPT10eXBlb2YgXyYmKF89YShfKSksInN0cmluZyI9PXR5cGVvZiBXJiYoVz1hKFcpKSksSWEoVCkmJihUPWYpLElhKFcpJiYoVz1fKSwhbCl7Y29uc3QgaWU9ZixwZT1fLHdlPVQsRWU9VztmPU1hdGgubWluKGllLHdl'@;
put 'KSxfPU1hdGgubWluKHBlLEVlKSxUPU1hdGgubWF4KGllLHdlKSxXPU1hdGgubWF4KHBlLEVlKX1yZXR1cm5bZixfLFQsV119fWZ1bmN0aW9uIEdwKGMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYyYmYz49MCYmYzwoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/'@;
put 'YXJndW1lbnRzWzFdOjEvMCl9Y2xhc3MgRm5le2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczt0aGlzLnNldHRpbmdzPWwsdGhpcy50YWJsZVByb3BzPWEsdGhpcy5pblByb2dyZXNzPSExLHRoaXMuc2VsZWN0ZWRCeUNvcm5lcj0hMSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNl'@;
put 'dCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkUmFuZ2U9bmV3IHdEZSgoaCxmLF8pPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZixfKSksdGhpcy5oaWdobGlnaHQ9bmV3IGJEZSh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhl'@;
put 'YWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NOYW1lLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhp'@;
put 'cy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVy'@;
put 'VmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyho'@;
put 'KSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLF8pPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZixfKSxyb3dJbmRleE1hcHBlcjooKT0+dGhpcy50YWJsZVByb3BzLnJv'@;
put 'd0luZGV4TWFwcGVyKCksY29sdW1uSW5kZXhNYXBwZXI6KCk9PnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcigpfSksdGhpcy50cmFuc2Zvcm1hdGlvbj1uZXcgQ0RlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7Y291bnRSb3dzOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzVHJh'@;
put 'bnNsYXRlZCgpLGNvdW50Q29sczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50Q29sc1RyYW5zbGF0ZWQoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhp'@;
put 'cy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNw'@;
put 'YXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxI'@;
put 'b29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYp'@;
put 'fSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJi'@;
put 'ZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRz'@;
put 'W19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgp'@;
put 'LF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNbX107cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX1iZWdpbigpe3RoaXMuaW5Qcm9n'@;
put 'cmVzcz0hMH1maW5pc2goKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExfWlzSW5Qcm9ncmVzcygpe3JldHVybiB0aGlzLmluUHJvZ3Jlc3N9c2V0UmFuZ2VTdGFydChs'@;
put 'LGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLGY9SWEoYSk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3Ry'@;
put 'bFByZXNzZWQoKTphLF89bC5yb3c8MCxUPWwuY29sPDAsVz1fJiZULGllPWwuY2xvbmUoKTt0aGlzLnNlbGVjdGVkQnlDb3JuZXI9Vyx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksaWUpLCghaHx8aCYmIWYmJklhKGEpKSYmdGhpcy5zZWxl'@;
put 'Y3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChpZSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLCFXJiZUJiZ0aGlzLnNlbGVjdGVkQnlS'@;
put 'b3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSwhVyYmXyYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5nZVN0YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChsLGEs'@;
put 'ITApfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5jbG9uZSgpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4oKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50'@;
put 'KCk7InNpbmdsZSIhPT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUmJmQuc2V0VG8odGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYS5yb3csYS5jb2wpKSx0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoYnksZC5o'@;
put 'aWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuYWRkKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChkKTtjb25zdCBoPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2g8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKERuKHRo'@;
put 'aXMuaGlnaGxpZ2h0LmdldEFyZWFzKCksVz0+e1cuY2xlYXIoKX0pLERuKHRoaXMuaGlnaGxpZ2h0LmdldEhlYWRlcnMoKSxXPT57Vy5jbGVhcigpfSksRG4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlSGVhZGVycygpLFc9PntXLmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJM'@;
put 'ZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QXJlYSgpLF89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7aWYoZi5jbGVhcigpLF8uY2xlYXIoKSxULmNsZWFyKCksdGhp'@;
put 'cy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEZrLGQuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxoPj0xKSYmKGYuYWRkKGQuZnJvbSkuYWRkKGQudG8pLmNvbW1pdCgpLDE9PT1oKSl7Y29uc3QgVz10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51'@;
put 'c2VMYXllckxldmVsKGgtMSkuY3JlYXRlT3JHZXRBcmVhKCkuYWRkKFcuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoVyksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKX1pZih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoeXksZC5oaWdobGlnaHQpKXtjb25zdCBXPTA9PT10aGlz'@;
put 'LnRhYmxlUHJvcHMuY291bnRSb3dzVHJhbnNsYXRlZCgpLGllPTA9PT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzVHJhbnNsYXRlZCgpO2xldCBwZT1kOyhXfHxpZSkmJihwZT1kLmNsb25lKCkpLFcmJihwZS5mcm9tLnJvdz0tMSksaWUmJihwZS5mcm9tLmNvbD0tMSksInNpbmdsZSI9PT10'@;
put 'aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KHRoaXMuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJnBlLmZyb20ubm9ybWFsaXplKCksXy5hZGQocGUuZnJvbSkuY29tbWl0KCkpOl8uYWRkKHBlLmZyb20pLmFkZChwZS50bykuY29tbWl0KCksdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkm'@;
put 'JnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKT09PWQuZ2V0V2lkdGgoKSYmVC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZC5mcm9tLnJvdywtMSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLnRvLnJvdywtMSkpLmNvbW1pdCgpLHRoaXMu'@;
put 'aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk9PT1kLmdldEhlaWdodCgpJiZULmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxkLmZyb20uY29sKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0x'@;
put 'LGQudG8uY29sKSkuY29tbWl0KCl9dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsKX1pc011bHRpcGxlKCl7Y29uc3QgbD1fZyghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVs'@;
put 'dGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9dHJhbnNmb3JtU3RhcnQobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1TdGFydChsLGEsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSkpfXRy'@;
put 'YW5zZm9ybUVuZChsLGEpe3RoaXMuc2V0UmFuZ2VFbmQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1FbmQobCxhKSl9Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNF'@;
put 'bXB0eSgpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIobCkmJnRoaXMuaXNFbnRpcmVSb3dT'@;
put 'ZWxlY3RlZChsKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybi0xPT09bD90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMu'@;
put 'c2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpJiZ0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4tMT09PWw/dGhpcy5zZWxl'@;
put 'Y3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpfWlzU2VsZWN0ZWRCeUFueUhlYWRlcigpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5p'@;
put 'c1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3JuZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29ybmVyfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNsdWRlcyhsKX1pc0NlbGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2V0dGlu'@;
put 'Z3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmls'@;
put 'bEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVz'@;
put 'cz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKCEobHx8YXx8MCE9PWQmJjAhPT1oKSlyZXR1cm47Y29uc3QgZj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhPy0x'@;
put 'OjAsbD8tMTowKSxfPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQtMSxoLTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGYpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2VsZWN0ZWRCeUNvbHVt'@;
put 'bkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoXyksdGhpcy5maW5pc2goKX1zZWxlY3RDZWxscyhsKXtjb25zdCBhPWc3KGwpO2lmKDE9PT1hKXJldHVybiExO2lmKDA9PT1hKXRocm93IG5ldyBFcnJvcihBYWBVbnN1cHBvcnRlZCBmb3JtYXQgb2Yg'@;
put 'dGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAg'@;
put 'IGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGQ9d3koYSx7cHJvcFRvQ29sOlQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woVCksa2VlcERpcmVjdGlvbjohMH0pLGg9dGhpcy50YWJsZVByb3BzLmNvdW50'@;
put 'Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLF89IWwuc29tZShUPT57Y29uc3RbVyxpZSxwZSx3ZV09ZChUKTtyZXR1cm4hKEdwKFcsaCkmJkdwKGllLGYpJiZHcChwZSxoKSYmR3Aod2UsZikpfSk7cmV0dXJuIF8mJih0aGlzLmNsZWFyKCksRG4obCxUPT57Y29uc3RbVyxp'@;
put 'ZSxwZSx3ZV09ZChUKTt0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFcsaWUpLCExKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHBlLHdlKSksdGhpcy5maW5pc2goKX0pKSxffXNlbGVjdENv'@;
put 'bHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50'@;
put 'YWJsZVByb3BzLnByb3BUb0NvbChsKTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSxfPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxUPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxXPUdwKGgsXykmJkdwKGYsXyk7cmV0dXJuIFcm'@;
put 'Jih0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHRoaXMuc2V0UmFuZ2VFbmQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoVC0xLGYpKSx0aGlzLmZpbmlzaCgpKSxXfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMu'@;
put 'Y291bnRDb2xzKCksXz1HcChsLGgpJiZHcChhLGgpO3JldHVybiBfJiYodGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLGQpKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSksdGhp'@;
put 'cy5maW5pc2goKSksX31yZWZyZXNoKCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLGQ9dGhpcy5nZXRMYXllckxl'@;
put 'dmVsKCk7YS5jb21taXQoKS5zeW5jV2l0aCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9y'@;
put 'R2V0QXJlYSgpLF89dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7Zi5jb21taXQoKSxfLmNvbW1pdCgpLFQuY29tbWl0KCl9dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChkKX19VGEoRm5lLE8w'@;
put 'KTtjb25zdCBrRGU9Rm5lLHtyZWdpc3RlcjpBRGUsZ2V0SXRlbTpURGUsaGFzSXRlbTpIbmUsZ2V0TmFtZXM6RERlfT1wZCgiY2VsbFR5cGVzIik7ZnVuY3Rpb24gVUIoYyl7aWYoIUhuZShjKSl0aHJvdyBFcnJvcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcg'@;
put 'dGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2Vs'@;
put 'bFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBURGUoYyl9ZnVuY3Rpb24gYjIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6ZCx2YWxpZGF0b3I6aH09bDthJiZSMChjLGEpLGQmJnBoKGMs'@;
put 'ZCksaCYmYTcoYyxoKSxBRGUoYyxsKX1mdW5jdGlvbiBWayhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBsLnR5cGU/VUIobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21h'@;
put 'dGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZkcyhsLChmLF8pPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzLmRlbGV0ZShfKX0pLCF1cyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtkcyhkLChmLF8pPT57dmFyIFQ7KGZ1bmN0aW9uIExEZShjLGwpe3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6'@;
put 'YS5oYXMoYykpfHwhYmwobCxjKSl9KShfLGEpJiYoaFtfXT1mLG51bGw9PT0oVD1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1UfHxULmFkZChfKSl9KSxYbChjLGgpfWZ1bmN0aW9uIEJrKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1'@;
put 'bmN0aW9uIGprKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiB6ayhjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBObmU9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xh'@;
put 'c3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGF1dG9Db2x1bW5TaXpl'@;
put 'OnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xs'@;
put 'YXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21t'@;
put 'ZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3Vz'@;
put 'dG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51'@;
put 'OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVm'@;
put 'dDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05h'@;
put 'bWU6Imh0SW52YWxpZCIsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09Z2MoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9'@;
put 'MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09Z2MoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksbGsodGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFi'@;
put 'ZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFu'@;
put 'dWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuZXN0ZWRIZWFk'@;
put 'ZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6'@;
put 'dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAs'@;
put 'cm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZh'@;
put 'bmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAs'@;
put 'dHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86dm9pZCAwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aXNpYmxlUm93'@;
put 'czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtjbGFzcyBPRGV7Y29uc3RydWN0b3IobCl7dGhpcy5tZXRhQ3Rvcj1jbGFzc3t9LHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxYbCh0aGlzLm1ldGEsTm5lKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25z'@;
put 'dHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7WGwodGhpcy5tZXRhLGwpLFZrKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9'@;
put 'LGwpfX1jbGFzcyBQRGV7Y29uc3RydWN0b3IobCl7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe1hsKHRoaXMubWV0YSxsKSxWayh0aGlzLm1ldGEsbCxsKX19Y2xhc3MgWkJ7Y29u'@;
put 'c3RydWN0b3IobCl7dGhpcy52YWx1ZUZhY3Rvcnk9bCx0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzPW5ldyBTZXR9b2J0YWluKGwpe2prKCgpPT5CayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPXRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5'@;
put 'S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0sdm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5kYXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVzLnNpemU+MCl7Y29uc3QgaD10aGlzLmhvbGVzLnZhbHVlcygp'@;
put 'Lm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRhdGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4gZH1pbnNlcnQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7amsoKCk9PkJrKGwpfHx6ayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtdLGg9dGhpcy5kYXRhLmxlbmd0aDtmb3IobGV0IF89MDtfPGE7'@;
put 'XysrKWQucHVzaChoK18pLHRoaXMuZGF0YS5wdXNoKHZvaWQgMCk7Y29uc3QgZj16ayhsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMuaW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXguc2xpY2UoZildfXJlbW92ZShsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtqaygoKT0+QmsobCl8fHprKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9dGhpcy5pbmRleC5zcGxpY2UoemsobCk/dGhpcy5p'@;
put 'bmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBmJiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMoKXtyZXR1cm4gXzEo'@;
put 'dGhpcy5kYXRhLChsLGEpPT4hdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmbC5wdXNo'@;
put 'KFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6ITB9fX19Y2xlYXIoKXt0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVz'@;
put 'LmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVybiB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlzLmluZGV4LmluZGV4T2YobCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5l'@;
put 'bnRyaWVzKCl9fWNvbnN0IEZEZT1bImRhdGEiLCJ3aWR0aCJdO2NsYXNzIEhEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmdsb2JhbE1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7WGwo'@;
put 'ZCxhKSxWayhkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRo'@;
put 'aXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gSURlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtm'@;
put 'dW5jdGlvbiBhKCl7fXpmKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksRkRlKS5wcm90b3R5cGV9fWNsYXNzIE5EZXtjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'LmNvbHVtbk1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlUm93KCkpfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7WGwoaCxkKSxWayhoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1u'@;
put 'KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2Qr'@;
put 'Kyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCBfPXRoaXMubWV0YXMub2J0YWluKGwp'@;
put 'Lm9idGFpbihhKTtudWxsPT09KGY9Xy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksX1tkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBs'@;
put 'PVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9Z2V0TWV0YXNBdFJvdyhsKXtqaygoKT0+QmsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29u'@;
put 'c3QgYT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9tKGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3IFpCKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVN'@;
put 'ZXRhKGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihsKSl9fWNsYXNzIFZuZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9bCx0aGlzLmdsb2JhbE1ldGE9bmV3IE9EZShsKSx0aGlzLnRhYmxlTWV0YT1uZXcgUERlKHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1bW5NZXRhPW5ldyBIRGUodGhpcy5nbG9iYWxNZXRhKSx0aGlz'@;
put 'LmNlbGxNZXRhPW5ldyBORGUodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2JhbE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMu'@;
put 'Z2xvYmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1uTWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1l'@;
put 'dGEobCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2xldHt2aXN1YWxSb3c6aCx2aXN1YWxDb2x1bW46Zn09ZDtjb25zdCBfPXRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBfLnZpc3VhbFJv'@;
put 'dz1oLF8udmlzdWFsQ29sPWYsXy5yb3c9bCxfLmNvbD1hLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsXyksX31nZXRDZWxsTWV0YUtleVZhbHVlKGwsYSxkKXtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGNlbGwgbWV0YSBv'@;
put 'YmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZyIpO3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhLGQpfXNldENlbGxNZXRhKGwsYSxkLGgpe3RoaXMuY2VsbE1ldGEuc2V0TWV0YShsLGEsZCxoKX11cGRhdGVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS51cGRhdGVNZXRhKGws'@;
put 'YSxkKX1yZW1vdmVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVNZXRhKGwsYSxkKX1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpfWdldENlbGxzTWV0YUF0Um93KGwpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzQXRSb3cobCl9'@;
put 'Y3JlYXRlUm93KGwpe3RoaXMuY2VsbE1ldGEuY3JlYXRlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfXJlbW92ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLnJlbW92ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1jcmVhdGVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5jcmVhdGVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEuY3JlYXRlQ29s'@;
put 'dW1uKGwsYSl9cmVtb3ZlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLnJlbW92ZUNvbHVtbihsLGEpfWNsZWFyQ2VsbHND'@;
put 'YWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfX1UYShWbmUsTzApO2NsYXNzIFZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5t'@;
put 'ZXRhU3luY01lbW89bmV3IE1hcCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsYT0+dGhpcy5leHRlbmRDZWxsTWV0YShhKSksc28uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIiLGE9PnthJiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5h'@;
put 'Z2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEobCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgpKXJldHVybjtjb25zdHt2aXN1YWxSb3c6Zix2aXN1YWxDb2w6X309bCxUPXRoaXMubWV0'@;
put 'YU1hbmFnZXIuaG90LFc9VC5jb2xUb1Byb3AoXyk7bC5wcm9wPVcsVC5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsXyxsKTtjb25zdCBpZT1ibChsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IHBlPVJhKGwuY2VsbHMpP2wuY2VsbHMoZCxoLFcpOm51bGw7aWYoaWUpaWYocGUpe3Zh'@;
put 'ciB3ZTtwZS50eXBlPW51bGwhPT0od2U9cGUudHlwZSkmJnZvaWQgMCE9PXdlP3dlOmllfWVsc2UgcGU9e3R5cGU6aWV9O3BlJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCxwZSksVC5ydW5Ib29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsZixfLGwpLHRoaXMubWV0YVN5bmNN'@;
put 'ZW1vLmhhcyhkKXx8dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpLmFkZChoKX19Y2xhc3MgQkRle2NvbnN0cnVjdG9yKGwpe3RoaXMubWV0YU1hbmFnZXI9bCx0aGlzLnVzYWdlVHJhY2tlcj1uZXcgU2V0LHRoaXMucHJvcERlc2NyaXB0'@;
put 'b3JzPW5ldyBNYXAoW1siZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xl'@;
put 'ZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93'@;
put 'IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtvbkNo'@;
put 'YW5nZShhLGQsaCl7aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfX1dXSksdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlz'@;
put 'LnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7dGFyZ2V0OmQsb25DaGFuZ2U6aD0oKCk9Pnt9KX09bCxmPSJzdHJpbmciPT10eXBlb2YgZCxfPWY/ZDphLFQ9YF8ke199YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtUXT10aGlzLm1ldGFNYW5hZ2VyLmds'@;
put 'b2JhbE1ldGEubWV0YVtfXSx0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLFQsaCksZiYmdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoZCxULGgpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xv'@;
put 'YmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3QgXz0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsXyksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBC'@;
put 'bmU9L14oXHJcbnxcblxyfFxyfFxuKS8sakRlPS9eW15cdFxyXG5dKy8sam5lPS9eXHQvO2Z1bmN0aW9uIEN5KGMpe2xldCBsLGEsZCxoLF8sZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSxfPWNb'@;
put 'bF1bZF0sInN0cmluZyI9PXR5cGVvZiBfP18uaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7Xy5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9XzpmKz1udWxsPT1fPyIiOl87bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWNsYXNzIG03e3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIo'@;
put 'KXtyZXR1cm4gMX1zdGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1cm4gMn1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pbnN0YW5jZT1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJj'@;
put 'ZT1hLHRoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKSx0aGlzLmNvbFRvUHJvcENhY2hlPXZvaWQgMCx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMCx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0eXBlb2YgbD4i'@;
put 'dSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJvcENhY2hlPVtd'@;
put 'LHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCxfPSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBUPXVrKGwpO2g9VD4wP1Q6dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLF89ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMs'@;
put 'YS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgVD1fP2EoZCk6YVtkXTtpZih1cyhUKSl7aWYodHlwZW9mIFQuZGF0YTwidSIpe2NvbnN0IFc9Xz9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtXXT1ULmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoVC5kYXRhLFcpfWYrPTF9fX1l'@;
put 'bHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gbFYodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IF8saD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJvYmplY3QiPT10'@;
put 'eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJmRzKGwsKFQsVyk9PntudWxsPT09VD8oXz1mK1csdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKF8pLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KF8saCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKFQsaCxgJHtXfS5gKX0pLGh9'@;
put 'Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hlJiZLaSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNv'@;
put 'bFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoS2koYSkpcmV0dXJuIHRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oYSk7Y29uc3QgZD10aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxs'@;
put 'PT09ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNl'@;
put 'WzBdP3I3KHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTox'@;
put 'LHtzb3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQgXz1mLFQ9MCxXPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgV3x8'@;
put 'Vz49ZikmJihXPWYpLFc8dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSYmKF89dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KFcpKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsVyxhLGQpfHxudWxsPT09XylyZXR1cm57ZGVsdGE6MH07Y29uc3QgcGU9'@;
put 'dGhpcy50YWJsZU1ldGEubWF4Um93cyx3ZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCxFZT1bXTtmb3IoO1Q8YSYmZitUPHBlOyl7bGV0IGl0PW51bGw7ImFycmF5Ij09PXRoaXMuaW5zdGFuY2UuZGF0YVR5cGU/dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYT9pdD15dSh0aGlzLmdldFNjaGVt'@;
put 'YSgpKTooaXQ9W10sdm8od2UtMSwoKT0+aXQucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlP2l0PXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoVytUKTooaXQ9e30sbHkoaXQsdGhpcy5nZXRTY2hlbWEoKSkpLEVlLnB1c2goaXQpLFQrPTF9dGhpcy5p'@;
put 'bnN0YW5jZS5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFcsVCksImJlbG93Ij09PWgmJihfPU1hdGgubWluKF8rMSxmKSksdGhpcy5zcGxpY2VEYXRhKF8sMCxFZSk7Y29uc3QgWmU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyhfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFNv'@;
put 'dXJjZVJvd3MoKT09PUVlLmxlbmd0aCYmdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5pbnN0YW5jZS5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksVD4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLFQpOiJhdXRvIiE9'@;
put 'PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KF8sYSkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixaZSxULGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHtkZWx0YTpULHN0YXJ0UGh5c2ljYWxJbmRleDpffX1jcmVhdGVDb2wobCl7bGV0'@;
put 'IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYoIXRoaXMuaW5zdGFuY2UuaXND'@;
put 'b2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywg'@;
put 'ZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSxfPXRoaXMudGFibGVNZXRhLm1heENv'@;
put 'bHMsVD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpO2xldCBXPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgV3x8Vz49VCkmJihXPVQpLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixXLGEsZCkpcmV0dXJue2RlbHRhOjB9O2xldCBwZT1UO1c8dGhp'@;
put 'cy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHBlPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihXKSk7Y29uc3Qgd2U9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQgRWU9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxaZT0wLGl0PXBlOyJlbmQiPT09aCYmKGl0PU1h'@;
put 'dGgubWluKGl0KzEsVCkpO2NvbnN0IGV0PWl0O2Zvcig7WmU8YSYmRWU8Xzspe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8Vz49RWUpaWYod2U+MClmb3IobGV0IEV0PTA7RXQ8d2U7RXQrPTEpdHlwZW9mIGZbRXRdPiJ1IiYmKGZbRXRdPVtdKSxmW0V0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNo'@;
put 'KFtudWxsXSk7ZWxzZSBmb3IobGV0IEV0PTA7RXQ8d2U7RXQrKylmW0V0XS5zcGxpY2UoaXQsMCxudWxsKTtaZSs9MSxpdCs9MSxFZSs9MX10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVyxaZSksWmU+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5j'@;
put 'cmVhdGVDb2x1bW4obnVsbCxaZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4oZXQsYSkpO2NvbnN0IHl0PXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oZXQpO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIseXQsWmUs'@;
put 'ZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpaZSxzdGFydFBoeXNpY2FsSW5kZXg6ZXR9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb'@;
put 'MV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLF89dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtpZihoPShfK2gpJV8sITE9PT10'@;
put 'aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGgsZi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBXPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShoLFcsZiksaDx0aGlzLmluc3RhbmNlLmNvdW50Um93cygpKXt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVy'@;
put 'LnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgcGU9S2kodGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fEtpKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpOzA9PT10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiExPT09cGUmJnRoaXMuaW5z'@;
put 'dGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KChwZSx3ZSk9PndlLXBlKS5mb3JFYWNoKHBlPT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3cocGUsMSl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJl'@;
put 'bW92ZVJvdyIsaCxXLGYsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2'@;
put 'b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9'@;
put 'Im51bWJlciIhPXR5cGVvZiBsPy1hOmw7aD0odGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKStoKSV0aGlzLmluc3RhbmNlLmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLF89Zi5zbGljZSgwKS5zb3J0KCh3ZSxFZSk9PkVlLXdlKTtpZighMT09'@;
put 'PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNvbCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IFc9ITA7Y29uc3QgaWU9Xy5sZW5ndGgscGU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgd2U9MDt3ZTxpZTt3ZSsrKVcmJmZbMF0hPT1mW3dlXS13ZSYmKFc9ITEpO2lmKFcpZm9y'@;
put 'KGxldCB3ZT0wLEVlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7d2U8RWU7d2UrKylwZVt3ZV0uc3BsaWNlKGZbMF0sYSksMD09PXdlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCB3ZT0wLEVlPXRoaXMuaW5zdGFuY2UuY291bnRT'@;
put 'b3VyY2VSb3dzKCk7d2U8RWU7d2UrKylmb3IobGV0IFplPTA7WmU8aWU7WmUrKylwZVt3ZV0uc3BsaWNlKF9bWmVdLDEpLDA9PT13ZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oX1taZV0sMSk7cmV0dXJuIGg8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHRoaXMuaW5zdGFu'@;
put 'Y2UuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwwPT09dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaW5z'@;
put 'dGFuY2UucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRoaXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGlj'@;
put 'ZShhLGErZCksXz1oLnNsaWNlKGErZCk7Zm9yKHZhciBUPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVD4zP1QtMzowKSxpZT0zO2llPFQ7aWUrKylXW2llLTNdPWFyZ3VtZW50c1tpZV07bk4oVyxfKTtsZXQgcGU9MDtmb3IoO3BlPGQ7KVcucHVzaChudWxsKSxwZSs9MTtyZXR1cm4g'@;
put 'S2VlKFcpLHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkoYSxsLFcsbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLF89aC5zbGljZShhK2QpO2Zv'@;
put 'cih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQ+Mz9ULTM6MCksaWU9MztpZTxUO2llKyspV1tpZS0zXT1hcmd1bWVudHNbaWVdO25OKFcsXyk7bGV0IHBlPTA7Zm9yKDtwZTxkOylXLnB1c2gobnVsbCkscGUrPTE7cmV0dXJuIHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9t'@;
put 'QXJyYXkobCxhLFtXXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhp'@;
put 'cy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5mb3JFYWNoKF89PnRoaXMuZGF0YVNvdXJjZS5wdXNoKF8pKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJyYXku'@;
put 'aXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZixfKT0+LTE9PT1kLmluZGV4T2YoXykpKSx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5j'@;
put 'ZS50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2xldCBfPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmYmwoaCxhKSlfPWhbYV07ZWxzZSBp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBUPWEuc3BsaXQoIi4iKTtsZXQgVz1oO2lmKCFXKXJldHVybiBudWxsO2ZvcihsZXQgaWU9MCxwZT1ULmxlbmd0aDtpZTxwZTtpZSsrKWlmKFc9V1tUW2llXV0sdHlwZW9mIFc+InUiKXJldHVybiBudWxsO189'@;
put 'V31lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGEmJihfPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBUPV9nKF8pO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5w'@;
put 'cm9wVG9Db2woYSksVCwiZ2V0IiksVC5pc1RvdWNoZWQoKSYmKF89VC52YWx1ZSl9cmV0dXJuIF99Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7'@;
put 'Y29uc3QgaD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3cobCk7bGV0IGY9ZCxfPXRoaXMuZGF0YVNvdXJjZVtoXTtjb25zdCBUPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKF89aXNOYU4oVCk/VDpfLHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5'@;
put 'RGF0YSIpKXtjb25zdCBXPV9nKGYpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5wcm9wVG9Db2woYSksVywic2V0IiksVy5pc1RvdWNoZWQoKSYmKGY9Vy52YWx1ZSl9aWYoXyYmXy5oYXNPd25Qcm9wZXJ0eSYmYmwoXyxhKSlfW2FdPWY7ZWxzZSBpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBXPWEuc3BsaXQoIi4iKTtsZXQgd2UsaWU9XyxwZT0wO2ZvcihwZT0wLHdlPVcubGVuZ3RoLTE7cGU8d2U7cGUrKyl0eXBlb2YgaWVbV1twZV1dPiJ1IiYmKGllW1dbcGVdXT17fSksaWU9aWVbV1twZV1dO2llW1dbcGVd'@;
put 'XT1mfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYT9hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik6X1thXT1mfXZpc3VhbFJvd3NUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpLGg9W107bGV0IFQsZj0oZCtsKSVkLF89YTtm'@;
put 'b3IoO2Y8ZCYmXzspVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKFQpLF8tPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSxoPVtdO2xldCBmPShkK2wpJWQsXz1hO2Zvcig7'@;
put 'ZjxkJiZfOyl7Y29uc3QgVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKFQpLF8tPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmluc3RhbmNl'@;
put 'LmNvdW50Q29scygpO2ErKyl0aGlzLnNldChsLHRoaXMuY29sVG9Qcm9wKGEpLCIiKX1nZXRMZW5ndGgoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGE7YT1sPDB8fDA9PT1sPzA6bHx8MS8wO2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RU'@;
put 'cmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmluc3RhbmNlLmNvdW50Q29scygpLTEsMCl9'@;
put 'O3JldHVybiBsLnJvdy1hLnJvdyE9MHx8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdl'@;
put 'KGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLF8sVDtjb25zdCBXPXRoaXMudGFibGVNZXRhLm1heFJvd3MsaWU9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09V3x8MD09PWllKXJldHVybltdO2NvbnN0IHBlPWQ9PT1tNy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMu'@;
put 'Z2V0Q29weWFibGU6dGhpcy5nZXQsd2U9TWF0aC5taW4oTWF0aC5tYXgoVy0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSksRWU9TWF0aC5taW4oTWF0aC5tYXgoaWUtMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWluKGwucm93LGEucm93KTtmPD13ZTtmKyspe1Q9'@;
put 'W107Y29uc3QgWmU9Zj49MD90aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZik6Zjtmb3IoXz1NYXRoLm1pbihsLmNvbCxhLmNvbCk7Xzw9RWUmJm51bGwhPT1aZTtfKyspVC5wdXNoKHBlLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKF8pKSk7bnVsbCE9PVplJiZoLnB1c2goVCl9cmV0'@;
put 'dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlKGwsYSxtNy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJv'@;
put 'eSgpe3RoaXMuaW5zdGFuY2U9bnVsbCx0aGlzLm1ldGFNYW5hZ2VyPW51bGwsdGhpcy5kYXRhU291cmNlPW51bGwsdGhpcy5kdWNrU2NoZW1hPW51bGwsdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGg9MCx0aGlzLnByb3BUb0NvbENhY2hlLmNsZWFyKCksdGhpcy5wcm9wVG9Db2xDYWNoZT12'@;
put 'b2lkIDB9fWNvbnN0IFVEZT1tNztmdW5jdGlvbiB6bmUoYyxsLGEsZCl7Y29uc3R7aG90SW5zdGFuY2U6aCxkYXRhTWFwOmYsZGF0YVNvdXJjZTpfLGludGVybmFsU291cmNlOlQsc291cmNlOlcsbWV0YU1hbmFnZXI6aWUsZmlyc3RSdW46cGV9PWQsd2U9YnUoVCksRWU9aC5nZXRTZXR0aW5n'@;
put 'cygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShFZS5kYXRhU2NoZW1hKT8iYXJyYXkiOlJhKEVlLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke3dlfWAsYyxwZSxXKTtjb25zdCBaZT1uZXcgVURlKGgsYyxpZSk7'@;
put 'aWYobChaZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke1R9IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30g'@;
put 'Z2l2ZW4pYCk7e2NvbnN0IGl0PVplLmdldFNjaGVtYSgpO2M9W107bGV0IGV0LHl0PTAsRXQ9MDtmb3IoeXQ9MCxFdD1FZS5zdGFydFJvd3M7eXQ8RXQ7eXQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIhPT1oLmRhdGFUeXBlfHwhRWUuZGF0YVNjaGVtYSlpZigiYXJy'@;
put 'YXkiPT09aC5kYXRhVHlwZSlldD15dShpdFswXSksYy5wdXNoKGV0KTtlbHNle2V0PVtdO2ZvcihsZXQgU3Q9MCxKdD1FZS5zdGFydENvbHM7U3Q8SnQ7U3QrKylldC5wdXNoKG51bGwpO2MucHVzaChldCl9ZWxzZSBldD15dShpdCksYy5wdXNoKGV0KX19QXJyYXkuaXNBcnJheShjWzBdKSYm'@;
put 'KGguZGF0YVR5cGU9ImFycmF5IiksRWUuZGF0YT1jLFplLmRhdGFTb3VyY2U9YyxfLmRhdGE9YyxfLmRhdGFUeXBlPWguZGF0YVR5cGUsXy5jb2xUb1Byb3A9WmUuY29sVG9Qcm9wLmJpbmQoWmUpLF8ucHJvcFRvQ29sPVplLnByb3BUb0NvbC5iaW5kKFplKSxfLmNvdW50Q2FjaGVkQ29sdW1u'@;
put 'cz1aZS5jb3VudENhY2hlZENvbHVtbnMuYmluZChaZSksYShaZSksaC5ydW5Ib29rcyhgYWZ0ZXIke3dlfWAsYyxwZSxXKSxwZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLFQpLGgucmVuZGVyKCkpfWNvbnN0IFVuZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIi'@;
put 'LCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xsbG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNrIiwibWVkaWF0cmFja25leHQiXSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1lZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRp'@;
put 'b3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwiYXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0aXBseSIsIioiXSxbImFkZCIsIisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRyYWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmln'@;
put 'aHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFycm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLFVrPWM9PmMubWFwKGw9Pntjb25zdCBhPWwudG9Mb3dlckNhc2UoKTtyZXR1cm4gVW5lLmhhcyhhKT9VbmUuZ2V0KGEpOmF9KS5zb3J0KCkuam9pbigiKyIpLFpuZT1jPT5jLnRvTG93ZXJD'@;
put 'YXNlKCksR0RlPVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLFN5PWZ1bmN0aW9uIFdEZSgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxldGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5j'@;
put 'LmhhcyhsKX19KCkscURlPWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPV9rKHtlcnJvcklkRXhpc3RzOlplPT5gVGhlICIke1plfSIgY29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5g'@;
put 'fSk7bGV0IF89ImdyaWQiO2NvbnN0IFc9KCk9Pl8saWU9WmU9PmYuZ2V0SXRlbShaZSk7bGV0IHdlPSExO2NvbnN0IEVlPWZ1bmN0aW9uICREZShjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PkdEZS5pbmNsdWRlcyhFZSksXz1mdW5jdGlvbihFZSl7bGV0IFplPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgaXQ9W107cmV0dXJuIEVlLmFsdEtleSYmaXQucHVzaCgiYWx0IiksWmUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9pdC5wdXNoKCJjb250cm9sL21ldGEiKTooRWUuY3RybEtleSYmaXQucHVzaCgiY29udHJvbCIp'@;
put 'LEVlLm1ldGFLZXkmJml0LnB1c2goIm1ldGEiKSksRWUuc2hpZnRLZXkmJml0LnB1c2goInNoaWZ0IiksaXR9LFQ9RWU9PntpZighMT09PWwoRWUpKXJldHVybjtjb25zdCBaZT1hKEVlKTtpZigyMjk9PT1FZS5rZXlDb2RlfHwhMT09PVplfHxiZyhFZSkpcmV0dXJuO2NvbnN0IGl0PVpuZShF'@;
put 'ZS5rZXkpO2xldCBldD1bXTtmKGl0KT9TeS5wcmVzcyhpdCk6ZXQ9XyhFZSk7Y29uc3QgeXQ9W2l0XS5jb25jYXQoZXQpOyFoKEVlLHl0KSYmKGhrKCkmJmV0LmluY2x1ZGVzKCJtZXRhIil8fCFoaygpJiZldC5pbmNsdWRlcygiY29udHJvbCIpKSYmaChFZSxbaXRdLmNvbmNhdChfKEVlLCEw'@;
put 'KSkpLGQoRWUpfSxXPUVlPT57aWYoITE9PT1sKEVlKSlyZXR1cm47Y29uc3QgWmU9Wm5lKEVlLmtleSk7ITEhPT1mKFplKSYmU3kucmVsZWFzZShaZSl9LGllPSgpPT57U3kucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoO0VlOylFZS5kb2N1bWVudC5kb2N1'@;
put 'bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixXKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaWUpLEVlPWV5KEVlKX0s'@;
put 'dW5tb3VudDooKT0+e2xldCBFZT1jO2Zvcig7RWU7KUVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixUKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFcpLEVlLmRvY3VtZW50LmRv'@;
put 'Y3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixpZSksRWU9ZXkoRWUpfSxpc1ByZXNzZWQ6RWU9PlN5LmlzUHJlc3NlZChFZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5TeS5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLChaZSxpdCk9Pntjb25zdCBldD1pZShXKCkpO2xl'@;
put 'dCB5dD0hMTtpZighZXQuaGFzU2hvcnRjdXQoaXQpKXJldHVybiB5dDtjb25zdCBFdD1ldC5nZXRTaG9ydGN1dHMoaXQpO2ZvcihsZXQgU3Q9MDtTdDxFdC5sZW5ndGg7U3QrKyl7Y29uc3R7Y2FsbGJhY2s6SnQscnVuT25seUlmOm5uLHByZXZlbnREZWZhdWx0OnZuLHN0b3BQcm9wYWdhdGlv'@;
put 'bjpObixjYXB0dXJlQ3RybDpjcn09RXRbU3RdO2lmKCExIT09bm4oWmUpJiYod2U9Y3IseXQ9ITE9PT1KdChaZSxpdCksd2U9ITEsdm4mJlplLnByZXZlbnREZWZhdWx0KCksTm4mJlplLnN0b3BQcm9wYWdhdGlvbigpLHl0KSlicmVha31yZXR1cm4geXR9KTtyZXR1cm4gRWUubW91bnQoKSx7'@;
put 'YWRkQ29udGV4dDpaZT0+e2NvbnN0IGl0PShjPT57Y29uc3QgbD1fayh7ZXJyb3JJZEV4aXN0czpXPT5gVGhlICIke1d9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6VyxjYWxsYmFjazppZSxn'@;
put 'cm91cDpwZSxydW5Pbmx5SWY6d2U9KCgpPT4hMCksY2FwdHVyZUN0cmw6RWU9ITEscHJldmVudERlZmF1bHQ6WmU9ITAsc3RvcFByb3BhZ2F0aW9uOml0PSExLHJlbGF0aXZlVG9Hcm91cDpldCxwb3NpdGlvbjp5dH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/'@;
put 'YXJndW1lbnRzWzBdOnt9O2lmKElhKHBlKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PVJhKGllKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24u'@;
put 'Iik7aWYoITE9PT1BcnJheS5pc0FycmF5KFcpKXRocm93IG5ldyBFcnJvcihBYWBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9k'@;
put 'ZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgRXQ9e2NhbGxiYWNrOmllLGdyb3VwOnBlLHJ1bk9ubHlJZjp3ZSxjYXB0dXJlQ3RybDpFZSxwcmV2ZW50RGVmYXVsdDpaZSxzdG9wUHJvcGFnYXRpb246'@;
put 'aXR9O0tpKGV0KSYmKFtFdC5yZWxhdGl2ZVRvR3JvdXAsRXQucG9zaXRpb25dPVtldCx5dF0pLFcuZm9yRWFjaChTdD0+e2NvbnN0IEp0PVVrKFN0KTtpZihsLmhhc0l0ZW0oSnQpKXtjb25zdCB2bj1sLmdldEl0ZW0oSnQpO2xldCBObj12bi5maW5kSW5kZXgoY3I9PmNyLmdyb3VwPT09ZXQp'@;
put 'Oy0xIT09Tm4/ImJlZm9yZSI9PT15dD9Obi09MTpObis9MTpObj12bi5sZW5ndGgsdm4uc3BsaWNlKE5uLDAsRXQpfWVsc2UgbC5hZGRJdGVtKEp0LFtFdF0pfSl9LGg9Vz0+e2NvbnN0IGllPVVrKFcpO2wucmVtb3ZlSXRlbShpZSl9O3JldHVybnthZGRTaG9ydGN1dDphLGFkZFNob3J0Y3V0'@;
put 'czpmdW5jdGlvbihXKXtsZXQgaWU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1cuZm9yRWFjaChwZT0+e2RzKGllLCh3ZSxFZSk9PnshMT09PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwZSxFZSkmJihwZVtF'@;
put 'ZV09aWVbRWVdKX0pLGEocGUpfSl9LGdldFNob3J0Y3V0czpXPT57Y29uc3QgaWU9VWsoVykscGU9bC5nZXRJdGVtKGllKTtyZXR1cm4gS2kocGUpP3BlLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0Olc9Pntjb25zdCBpZT1VayhXKTtyZXR1cm4gbC5oYXNJdGVtKGllKX0scmVtb3ZlU2hvcnRj'@;
put 'dXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpXPT57bC5nZXRJdGVtcygpLmZvckVhY2gocGU9PntsZXRbd2UsRWVdPXBlO2NvbnN0IFplPUVlLmZpbHRlcihpdD0+aXQuZ3JvdXAhPT1XKTswPT09WmUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkod2UpKTooRWUubGVuZ3Ro'@;
put 'PTAsRWUucHVzaCguLi5aZSkpfSl9fX0pKFplKTtyZXR1cm4gZi5hZGRJdGVtKFplLGl0KSxpdH0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6VyxnZXRDb250ZXh0OmllLHNldEFjdGl2ZUNvbnRleHROYW1lOlplPT57Xz1aZX0saXNDdHJsUHJlc3NlZDooKT0+IXdlJiYoRWUuaXNQcmVzc2VkKCJj'@;
put 'b250cm9sIil8fEVlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkVlLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9PkVlLnVubW91bnQoKX19LEtEZT0iZ3JpZERlZmF1bHQiO2xldCBZQj1udWxsO2Z1bmN0aW9uIFdCKGMsbCl7dmFyIGE7bGV0IGQ9'@;
put 'YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9dGhpcztjb25zdCBfPW5ldyBsbChmKTtsZXQgVCxXLGllLHBlLHdlPSEwOyhmdW5jdGlvbiBzVGUoYyl7cmV0dXJuIGM9PT1uVn0pKGQpJiZmdW5jdGlvbiBvVGUoYyl7Y25lLnNl'@;
put 'dChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0'@;
put 'aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBFZT1udWxsIT09KGE9bD8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixaZT1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKEVlKT9FZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlz'@;
put 'LnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIsWmUpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PVplfSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0'@;
put 'b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24gS1RlKGMpe2xldCBsPXhuZShjKTtyZXR1cm4gTkIobCl8fChsPUhCLEVuZShjKSksbH0obC5sYW5ndWFnZSk7Y29uc3QgaXQ9bmV3IFZuZShmLGwsW1ZEZSxCRGVdKSxldD1pdC5nZXRUYWJs'@;
put 'ZU1ldGEoKSx5dD1pdC5nZXRHbG9iYWxNZXRhKCksRXQ9X2soKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJlbmRlckNhbGw9ITEsYy5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsYy5maXJzdENoaWxkKSxyVih0aGlzKSYm'@;
put 'aXRlKGwubGljZW5zZUtleSxjKSx0aGlzLmd1aWQ9YGh0XyR7YU4oKX1gLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3IHZWLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IHZWLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57'@;
put 'Zi5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdnQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix2dCl9KSxXPW5ldyBiVGUoZiksKCF0'@;
put 'aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2NvbnN0IFN0PXZ0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+'@;
put 'PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE90KTpPdCxjbj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY24pOmNuKX07bGV0IG5uPW5ldyBrRGUoZXQse3Jvd0luZGV4TWFwcGVyOigpPT5mLnJvd0lu'@;
put 'ZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOigpPT5mLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5jb3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOnZ0PT5ULnByb3BUb0NvbCh2dCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRB'@;
put 'Y3RpdmVFZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpLGNvdW50Q29sc1RyYW5zbGF0ZWQ6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSb3dzVHJhbnNsYXRlZDooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxnZXRT'@;
put 'aG9ydGN1dE1hbmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczoodnQsT3QpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjcmVhdGVDZWxsUmFuZ2U6KHZ0LE90LGNuKT0+Zi5fY3JlYXRlQ2VsbFJhbmdlKHZ0LE90LGNuKSx2aXN1YWxUb1JlbmRl'@;
put 'cmFibGVDb29yZHM6U3QscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE90KTpPdCxjbj49MD9mLmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoY24pOmNuKX0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHZ0LE90KT0+Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPW5uO2NvbnN0IHZuPXZ0PT57'@;
put 'bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk90fT12dDtPdCYmdGhpcy5zZWxlY3Rpb24ucmVmcmVzaCgpfTtmdW5jdGlvbiBObih2dCl7Y29uc3QgT3Q9eG5lKHZ0KTtOQihPdCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixPdCkseXQubGFuZ3VhZ2U9T3QsZi5ydW5Ib29r'@;
put 'cygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsT3QpKTpFbmUodnQpfWZ1bmN0aW9uIGNyKHZ0LE90KXtjb25zdCBjbj0iY2xhc3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZih3ZSlwaShjbixPdCk7ZWxzZXtsZXQgRW49W10sUG49W107eXRbdnRdJiYoRW49QXJyYXkuaXNBcnJh'@;
put 'eSh5dFt2dF0pP3l0W3Z0XTpvTih5dFt2dF0pKSxPdCYmKFBuPUFycmF5LmlzQXJyYXkoT3QpP090Om9OKE90KSk7Y29uc3QgSm49aU4oRW4sUG4pLFByPWlOKFBuLEVuKTtKbi5sZW5ndGgmJldvKGNuLEpuKSxQci5sZW5ndGgmJnBpKGNuLFByKX15dFt2dF09T3R9ZnVuY3Rpb24gTHIoKXts'@;
put 'ZXQgdnQ9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3Jz'@;
put 'SW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhpcy5vblF1ZXVlRW1w'@;
put 'dHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gRWkodnQpe2NvbnN0IE90PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KE90KSk/cGFyc2VGbG9hdChPdCk6dnR9ZnVuY3Rpb24gTGkodnQsT3QsY24pe2lmKCF2dC5sZW5ndGgpcmV0dXJuO2NvbnN0IEVu'@;
put 'PWYuZ2V0QWN0aXZlRWRpdG9yKCksUG49bmV3IExyO2xldCBKbj0hMDtQbi5vblF1ZXVlRW1wdHk9UHI9PntFbiYmSm4mJkVuLmNhbmNlbENoYW5nZXMoKSxjbihQcil9O2ZvcihsZXQgUHI9dnQubGVuZ3RoLTE7UHI+PTA7UHItLSl7Y29uc3RbT3IsJHIsLFlyXT12dFtQcl0sTnI9VC5wcm9w'@;
put 'VG9Db2woJHIpLFJpPWYuZ2V0Q2VsbE1ldGEoT3IsTnIpOyJudW1lcmljIj09PVJpLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgWXImJlJ0ZShZcikmJih2dFtQcl1bM109RWkoWXIpKSxmLmdldENlbGxWYWxpZGF0b3IoUmkpJiYoUG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVD'@;
put 'ZWxsKHZ0W1ByXVszXSxSaSxmdW5jdGlvbihYbyxHbyl7cmV0dXJuIGZ1bmN0aW9uKEpzKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBKcyl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpO2lmKCExPT09SnMmJiExPT09R28uYWxsb3dJbnZh'@;
put 'bGlkKXtKbj0hMSx2dC5zcGxpY2UoWG8sMSksR28udmFsaWQ9ITA7Y29uc3QgZ2E9Zi5nZXRDZWxsKEdvLnZpc3VhbFJvdyxHby52aXN1YWxDb2wpO251bGwhPT1nYSYmV28oZ2EsZXQuaW52YWxpZENlbGxDbGFzc05hbWUpfVBuLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oUHIsUmkp'@;
put 'LE90KSl9UG4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIGZyKHZ0LE90KXtsZXQgY249dnQubGVuZ3RoLTE7aWYoY248MClyZXR1cm47Zm9yKDtjbj49MDtjbi0tKXtsZXQgUG49ITE7aWYobnVsbCE9PXZ0W2NuXSl7aWYobnVsbCE9dnRbY25dWzJdfHxudWxsIT12dFtjbl1bM10p'@;
put 'e2lmKGV0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbY25dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOkpufT1ULmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09Sm4pe1BuPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFldC5j'@;
put 'b2x1bW5zfHwwPT09ZXQuY29sdW1ucy5sZW5ndGgpJiZldC5hbGxvd0luc2VydENvbHVtbilmb3IoO1QucHJvcFRvQ29sKHZ0W2NuXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6Sm59PVQuY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZTpPdH0pO2lmKDA9PT1Kbil7'@;
put 'UG49ITA7YnJlYWt9fVBufHxULnNldCh2dFtjbl1bMF0sdnRbY25dWzFdLHZ0W2NuXVszXSl9fWVsc2UgdnQuc3BsaWNlKGNuLDEpfWYuZm9yY2VGdWxsUmVuZGVyPSEwLGllLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIix2dCxPdCkscGUubG9j'@;
put 'a0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLHBlLnVubG9ja0VkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsT3R8fCJlZGl0Iik7Y29uc3QgRW49Zi5nZXRBY3RpdmVFZGl0b3IoKTtFbiYmS2koRW4ucmVmcmVz'@;
put 'aFZhbHVlKSYmRW4ucmVmcmVzaFZhbHVlKCl9ZnVuY3Rpb24gaWkodnQsT3QsY24pe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LE90LGNuXV19ZnVuY3Rpb24ganIodnQsT3Qpe2NvbnN0IGNuPWYuZ2V0QWN0aXZlRWRpdG9yKCksRW49Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdl'@;
put 'Iix2dCxPdHx8ImVkaXQiKSxQbj12dC5maWx0ZXIoSm49Pm51bGwhPT1Kbik7cmV0dXJuITE9PT1Fbnx8MD09PVBuLmxlbmd0aD8oY24mJmNuLmNhbmNlbENoYW5nZXMoKSxbXSk6UG59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdm4pLHRoaXMu'@;
put 'cm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHZuKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5n'@;
put 'ZUVuZCIsdnQpLHZ0LnJvdzwwJiYodnQucm93PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSksdnQuY29sPDAmJih2dC5jb2w9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9v'@;
put 'aygiYWZ0ZXJTZXRSYW5nZUVuZCIsdnQ9Pntjb25zdCBPdD1fZyghMSksY249dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOkVuLHRvOlBufT1jbi5jdXJyZW50KCksSm49Y24uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLEVuLnJvdyxFbi5j'@;
put 'b2wsUG4ucm93LFBuLmNvbCxPdCxKbiksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLEVuLnJvdyxmLmNvbFRvUHJvcChFbi5jb2wpLFBuLnJvdyxmLmNvbFRvUHJvcChQbi5jb2wpLE90LEpuKTtjb25zdCBQcj10aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlBbnlIZWFk'@;
put 'ZXIoKSxPcj10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtsZXQgJHI9ITA7aCYmKCRyPSExKSxPdC5pc1RvdWNoZWQoKSYmKCRyPSFPdC52YWx1ZSk7Y29uc3QgWXI9dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTnI9dGhpcy5zZWxlY3Rpb24u'@;
put 'aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7ITEhPT0kciYmKFByP1lyP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0LnJvdykpOk5yJiZ0aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jp'@;
put 'em9udGFsbHkoZi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0LmNvbCkpOk9yJiYhdGhpcy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydChTdChPci5mcm9tKSk6dGhpcy52aWV3LnNjcm9sbFZpZXdwb3J0KFN0'@;
put 'KHZ0KSkpLFlyJiZOcj9waSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSk6WXI/KFdvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSxwaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0'@;
put 'aW9uLS1yb3dzIikpOk5yPyhXbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIikscGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpKTpXbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24t'@;
put 'LWNvbHVtbnMiXSksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgT3Q9dnQubGVuZ3RoLTEse2Zyb206Y24sdG86RW59PXZ0W090XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNl'@;
put 'bGVjdGlvbkVuZCIsY24ucm93LGNuLmNvbCxFbi5yb3csRW4uY29sLE90KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsY24ucm93LGYuY29sVG9Qcm9wKGNuLmNvbCksRW4ucm93LGYuY29sVG9Qcm9wKEVuLmNvbCksT3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgT3Q9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1PdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlm'@;
put 'eVRyYW5zZm9ybVN0YXJ0Iix2dD0+e3RoaXMucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybVN0YXJ0Iix2dCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCh2dCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5z'@;
put 'Zm9ybVN0YXJ0Iix2dCxPdCxjbil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlU'@;
put 'cmFuc2Zvcm1FbmQiLCh2dCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsdnQsT3QsY24pfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e3BlLmRlc3Ryb3lFZGl0b3IoKSx0aGlzLl9yZWZyZXNoQm9yZGVy'@;
put 'cygpLFdvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT57dGhpcy5h'@;
put 'bHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdnQsMSwiYXV0byIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIix2dD0+e3RoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKX0pLGllPXthbHRlcih2dCxPdCl7dmFyIGNuLEVuO2xl'@;
put 'dCBQbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxKbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxQcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBPcj0kcj0+e2lmKDA9'@;
put 'PT0kci5sZW5ndGgpcmV0dXJuW107Y29uc3QgWXI9Wy4uLiRyXTtyZXR1cm4gWXIuc29ydCgoUmksWG8pPT57bGV0W0dvXT1SaSxbSnNdPVhvO3JldHVybiBHbz09PUpzPzA6R28+SnM/MTotMX0pLEFsKFlyLChSaSxYbyk9PntsZXRbR28sSnNdPVhvO2NvbnN0IGdhPVJpW1JpLmxlbmd0aC0x'@;
put 'XSxbdW8sQXRdPWdhLERpPXVvK0F0O2lmKEdvPD1EaSl7Y29uc3QgUXM9TWF0aC5tYXgoSnMtKERpLUdvKSwwKTtnYVsxXSs9UXN9ZWxzZSBSaS5wdXNoKFtHbyxKc10pO3JldHVybiBSaX0sW1lyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9y'@;
put 'b3dfYWJvdmUiOmNvbnN0ICRyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZXQubWF4Um93cz09PSRyKXJldHVybjtjb25zdCBZcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7T3Q9bnVsbCE9PShjbj1PdCkmJnZvaWQgMCE9PWNuP2NuOiJiZWxvdyI9PT1Zcj8kcjow'@;
put 'O2NvbnN0e2RlbHRhOk5yLHN0YXJ0UGh5c2ljYWxJbmRleDpSaX09VC5jcmVhdGVSb3coT3QsUG4se3NvdXJjZTpKbixtb2RlOllyfSk7aWYoTnIpe2NvbnN0IEF0PW5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLERpPUF0Py5mcm9tLFFzPURpPy5yb3csbGE9Zi50b1Zpc3VhbFJvdyhSaSk7'@;
put 'aWYobm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHtyb3c6RnMsY29sOnRjfT1BdC50bztsZXQgQ2E9RGkuY29sO25uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYoQ2E9LTEpLG5uLmdldFNlbGVjdGVkUmFuZ2UoKS5w'@;
put 'b3AoKSxubi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKFFzK05yLENhKSwhMCksbm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcytOcix0YykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2Ui'@;
put 'aW5zZXJ0X2NvbF9lbmQiOmNvbnN0IFhvPSJpbnNlcnRfY29sX2VuZCI9PT12dD8iZW5kIjoic3RhcnQiO090PW51bGwhPT0oRW49T3QpJiZ2b2lkIDAhPT1Fbj9FbjoiZW5kIj09PVhvP2YuY291bnRTb3VyY2VDb2xzKCk6MDtjb25zdHtkZWx0YTpHbyxzdGFydFBoeXNpY2FsSW5kZXg6SnN9'@;
put 'PVQuY3JlYXRlQ29sKE90LFBuLHtzb3VyY2U6Sm4sbW9kZTpYb30pO2lmKEdvKXtpZihBcnJheS5pc0FycmF5KGV0LmNvbEhlYWRlcnMpKXtjb25zdCBGcz1bZi50b1Zpc3VhbENvbHVtbihKcyksMF07RnMubGVuZ3RoKz1HbyxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGV0LmNvbEhl'@;
put 'YWRlcnMsRnMpfWNvbnN0IEF0PW5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLERpPUF0Py5mcm9tLFFzPURpPy5jb2wsbGE9Zi50b1Zpc3VhbENvbHVtbihKcyk7aWYobm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHty'@;
put 'b3c6RnMsY29sOnRjfT1BdC50bztsZXQgQ2E9RGkucm93O25uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYoQ2E9LTEpLG5uLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKSxubi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKENhLFFzK0dvKSwhMCksbm4uc2V0UmFu'@;
put 'Z2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcyx0YytHbykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IGdhPUF0PT57bGV0IERpPTA7RG4oQXQsUXM9PntsZXRbbGEsRnNdPVFzO2NvbnN0IHRjPWdjKGxhKT9mLmNvdW50Um93cygpLTE6'@;
put 'TWF0aC5tYXgobGEtRGksMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsYSkmJihsYT1NYXRoLm1heChsYS1EaSwwKSksIVQucmVtb3ZlUm93KGxhLEZzLEpuKSlyZXR1cm47Y29uc3QgUmg9Zi5jb3VudFJvd3MoKSxTMT1ldC5maXhlZFJvd3NUb3A7UzE+PXRjKzEmJihldC5maXhlZFJvd3NUb3At'@;
put 'PU1hdGgubWluKEZzLFMxLXRjKSk7Y29uc3QgTGw9ZXQuZml4ZWRSb3dzQm90dG9tO0xsJiZ0Yz49UmgtTGwmJihldC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKEZzLExsKSksRGkrPUZzfSl9O0FycmF5LmlzQXJyYXkoT3QpP2dhKE9yKE90KSk6Z2EoW1tPdCxQbl1dKSxpZS5hZGp1c3RS'@;
put 'b3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCB1bz1BdD0+e2xldCBEaT0wO0RuKEF0LFFzPT57bGV0W2xhLEZzXT1Rcztjb25zdCB0Yz1nYyhsYSk/Zi5jb3VudENvbHMoKS0xOk1hdGgubWF4KGxhLURpLDApO2xldCBDYT1mLnRv'@;
put 'UGh5c2ljYWxDb2x1bW4odGMpO2lmKE51bWJlci5pc0ludGVnZXIobGEpJiYobGE9TWF0aC5tYXgobGEtRGksMCkpLCFULnJlbW92ZUNvbChsYSxGcyxKbikpcmV0dXJuO2NvbnN0IFMxPWV0LmZpeGVkQ29sdW1uc1N0YXJ0O1MxPj10YysxJiYoZXQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgu'@;
put 'bWluKEZzLFMxLXRjKSksQXJyYXkuaXNBcnJheShldC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBDYT4idSImJihDYT0tMSksZXQuY29sSGVhZGVycy5zcGxpY2UoQ2EsRnMpKSxEaSs9RnN9KX07QXJyYXkuaXNBcnJheShPdCk/dW8oT3IoT3QpKTp1byhbW090LFBuXV0pLGllLmFkanVzdFJvd3NB'@;
put 'bmRDb2xzKCksZi5fcmVmcmVzaEJvcmRlcnMoKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBhY3Rpb24gIiR7dnR9ImApfVByfHxpZS5hZGp1c3RSb3dzQW5kQ29scygpfSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHZ0PWV0Lm1pblJvd3MsT3Q9'@;
put 'ZXQubWluU3BhcmVSb3dzLGNuPWV0Lm1pbkNvbHMsRW49ZXQubWluU3BhcmVDb2xzO2lmKDA9PT1mLmNvdW50Um93cygpJiYwPT09Zi5jb3VudENvbHMoKSYmbm4uZGVzZWxlY3QoKSx2dCl7Y29uc3QgUG49Zi5jb3VudFJvd3MoKTtQbjx2dCYmVC5jcmVhdGVSb3coUG4sdnQtUG4se3NvdXJj'@;
put 'ZToiYXV0byJ9KX1pZihPdCl7Y29uc3QgUG49Zi5jb3VudEVtcHR5Um93cyghMCk7aWYoUG48T3Qpe2NvbnN0IFByPU1hdGgubWluKE90LVBuLGV0Lm1heFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7VC5jcmVhdGVSb3coZi5jb3VudFJvd3MoKSxQcix7c291cmNlOiJhdXRvIn0pfX17bGV0'@;
put 'IFBuOyhjbnx8RW4pJiYoUG49Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBKbj1mLmNvdW50Q29scygpO2lmKGNuJiYhZXQuY29sdW1ucyYmSm48Y24pe2NvbnN0IFByPWNuLUpuO1BuKz1QcixULmNyZWF0ZUNvbChKbixQcix7c291cmNlOiJhdXRvIn0pfWlmKEVuJiYhZXQuY29sdW1ucyYm'@;
put 'ImFycmF5Ij09PWYuZGF0YVR5cGUmJlBuPEVuKXtKbj1mLmNvdW50Q29scygpO2NvbnN0IE9yPU1hdGgubWluKEVuLVBuLGV0Lm1heENvbHMtSm4pO1QuY3JlYXRlQ29sKEpuLE9yLHtzb3VyY2U6ImF1dG8ifSl9fWlmKG5uLmlzU2VsZWN0ZWQoKSl7Y29uc3QgUG49Zi5jb3VudFJvd3MoKSxK'@;
put 'bj1mLmNvdW50Q29scygpO0RuKG5uLnNlbGVjdGVkUmFuZ2UsUHI9PntsZXQgT3I9ITEsJHI9UHIuZnJvbS5yb3csWXI9UHIuZnJvbS5jb2wsTnI9UHIudG8ucm93LFJpPVByLnRvLmNvbDskcj5Qbi0xPygkcj1Qbi0xLE9yPSEwLE5yPiRyJiYoTnI9JHIpKTpOcj5Qbi0xJiYoTnI9UG4tMSxP'@;
put 'cj0hMCwkcj5OciYmKCRyPU5yKSksWXI+Sm4tMT8oWXI9Sm4tMSxPcj0hMCxSaT5ZciYmKFJpPVlyKSk6Umk+Sm4tMSYmKFJpPUpuLTEsT3I9ITAsWXI+UmkmJihZcj1SaSkpLE9yJiZmLnNlbGVjdENlbGwoJHIsWXIsTnIsUmkpfSl9Zi52aWV3JiZmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCl9LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE90LGNuLEVuLFBuKXtsZXQgSm4sUHIsT3IsJHI7Y29uc3QgWXI9W10sTnI9e30sUmk9W10sWG89dnQucm93LEdvPXZ0LmNvbDtpZihQcj1PdC5sZW5ndGgsMD09PVByKXJldHVybiExO2xldCBKcz0wLGdhPTA7c3dpdGNoKHVzKGNuKSYmKEpzPWNu'@;
put 'LmNvbC1HbysxLGdhPWNuLnJvdy1YbysxKSxQbil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCB1bz1LYihPdCksQXQ9dW8ubGVuZ3RoLERpPU1hdGgubWF4KEF0LEpzKSxRcz1mLmdldERhdGEoKS5zbGljZShYbyksbGE9S2IoUXMpLnNsaWNlKEdvLEdvK0RpKTtmb3IoT3I9MDtPcjxEaTtPcis9'@;
put 'MSlpZihPcjxBdCl7Zm9yKEpuPTAsUHI9dW9bT3JdLmxlbmd0aDtKbjxnYS1QcjtKbis9MSl1b1tPcl0ucHVzaCh1b1tPcl1bSm4lUHJdKTtSaS5wdXNoKHVvW09yXS5jb25jYXQoT3I8bGEubGVuZ3RoP2xhW09yXTpuZXcgQXJyYXkoUXMubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBSaS5w'@;
put 'dXNoKHVvW09yJUF0XS5jb25jYXQobGFbT3JdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheShYbyxHbyxLYihSaSkpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IEZzPU90Lmxlbmd0aCx0Yz1NYXRoLm1heChGcyxnYSksQ2E9Zi5nZXREYXRhKCkuc2xpY2UoWG8pLm1hcCgkYz0+JGMuc2xp'@;
put 'Y2UoR28pKTtmb3IoSm49MDtKbjx0YztKbis9MSlpZihKbjxGcyl7Zm9yKE9yPTAsJHI9T3RbSm5dLmxlbmd0aDtPcjxKcy0kcjtPcis9MSlPdFtKbl0ucHVzaChPdFtKbl1bT3IlJHJdKTtpZihKbjxDYS5sZW5ndGgpZm9yKGxldCAkYz0wOyRjPENhW0puXS5sZW5ndGg7JGMrPTEpT3RbSm5d'@;
put 'LnB1c2goQ2FbSm5dWyRjXSk7ZWxzZSBPdFtKbl0ucHVzaCguLi5uZXcgQXJyYXkoQ2FbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE90LnB1c2goT3RbSm4lUHJdLnNsaWNlKDAsdGMpLmNvbmNhdChDYVtKbl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KFhvLEdvLE90KTticmVhaztkZWZh'@;
put 'dWx0Ok5yLnJvdz12dC5yb3csTnIuY29sPXZ0LmNvbDtsZXQgeDIsUmg9MCxTMT0wLExsPSEwO2NvbnN0IHU0PWZ1bmN0aW9uKFNkKXtsZXQgSnU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgTTE9T3RbU2QlT3QubGVu'@;
put 'Z3RoXTtyZXR1cm4gbnVsbCE9PUp1P00xW0p1JU0xLmxlbmd0aF06TTF9LE9oPU90Lmxlbmd0aCxDZD1jbj9jbi5yb3ctdnQucm93KzE6MDtmb3IoUHI9Y24/Q2Q6TWF0aC5tYXgoT2gsQ2QpLEpuPTA7Sm48UHImJiEoY24mJk5yLnJvdz5jbi5yb3cmJkNkPk9ofHwhZXQuYWxsb3dJbnNlcnRS'@;
put 'b3cmJk5yLnJvdz5mLmNvdW50Um93cygpLTF8fE5yLnJvdz49ZXQubWF4Um93cyk7Sm4rKyl7Y29uc3QgJGM9Sm4tUmgsU2Q9dTQoJGMpLmxlbmd0aCxKdT1jbj9jbi5jb2wtdnQuY29sKzE6MDtpZigkcj1jbj9KdTpNYXRoLm1heChTZCxKdSksTnIuY29sPXZ0LmNvbCx4Mj1mLmdldENlbGxN'@;
put 'ZXRhKE5yLnJvdyxOci5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09RW4mJiJBdXRvZmlsbC5maWxsIiE9PUVufHwheDIuc2tpcFJvd09uUGFzdGUpe2ZvcihTMT0wLE9yPTA7T3I8JHImJiEoY24mJk5yLmNvbD5jbi5jb2wmJkp1PlNkfHwhZXQuYWxsb3dJbnNlcnRDb2x1bW4mJk5yLmNvbD5m'@;
put 'LmNvdW50Q29scygpLTF8fE5yLmNvbD49ZXQubWF4Q29scyk7T3IrKyl7aWYoeDI9Zi5nZXRDZWxsTWV0YShOci5yb3csTnIuY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Fbnx8IkF1dG9maWxsLmZpbGwiPT09RW4pJiZ4Mi5za2lwQ29sdW1uT25QYXN0ZSl7UzErPTEsTnIuY29sKz0xLCRy'@;
put 'Kz0xO2NvbnRpbnVlfWlmKHgyLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Fbil7TnIuY29sKz0xO2NvbnRpbnVlfWxldCBNdT11NCgkYyxPci1TMSksYXU9Zi5nZXREYXRhQXRDZWxsKE5yLnJvdyxOci5jb2wpO2lmKG51bGwhPT1NdSYmIm9iamVjdCI9PXR5cGVvZiBNdSlpZihBcnJh'@;
put 'eS5pc0FycmF5KE11KSYmbnVsbD09PWF1JiYoYXU9W10pLG51bGw9PT1hdXx8Im9iamVjdCIhPXR5cGVvZiBhdSlMbD0hMTtlbHNle2NvbnN0IHgxPXI3KEFycmF5LmlzQXJyYXkoYXUpP2F1OmF1WzBdfHxhdSksRTI9cjcoQXJyYXkuaXNBcnJheShNdSk/TXU6TXVbMF18fE11KTtsayh4MSxF'@;
put 'Mil8fEFycmF5LmlzQXJyYXkoeDEpJiZBcnJheS5pc0FycmF5KEUyKT9NdT15dShNdSk6TGw9ITF9ZWxzZSBudWxsIT09YXUmJiJvYmplY3QiPT10eXBlb2YgYXUmJihMbD0hMSk7TGwmJllyLnB1c2goW05yLnJvdyxOci5jb2wsTXVdKSxMbD0hMCxOci5jb2wrPTF9TnIucm93Kz0xfWVsc2Ug'@;
put 'UmgrPTEsTnIucm93Kz0xLFByKz0xfWYuc2V0RGF0YUF0Q2VsbChZcixudWxsLG51bGwsRW58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1cuc2V0RGF0YShldC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKG0yKCl8fHlOKCkpJiZwaShmLnJv'@;
put 'b3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGV0LCEwKSx0aGlzLnZpZXc9bmV3IGZUZSh0aGlzKSxwZT11a2UuZ2V0SW5zdGFuY2UoZixldCxubiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMudmlldy5yZW5kZXIoKSx3ZSYm'@;
put 'bnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZndGUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIHdl'@;
put 'JiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHdlWzBdLHdlWzFdKSx3ZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29yZHModnQsT3QpfSx0aGlzLl9jcmVh'@;
put 'dGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQsT3QsY24pe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCxPdCxjbil9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgUG49Zi5nZXRDZWxsVmFsaWRhdG9yKE90KTtmdW5jdGlvbiBKbihQcil7aWYo'@;
put 'YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09T3QuaGlkZGVuKXJldHVybiB2b2lkIGNuKFByKTtjb25zdCAkcj1PdC52aXN1YWxDb2wsWXI9T3QudmlzdWFsUm93LE5yPWYuZ2V0Q2VsbChZciwkciwhMCk7aWYoTnImJiJUSCIh'@;
put 'PT1Oci5ub2RlTmFtZSl7Y29uc3QgUmk9Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFlyKSxYbz1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoJHIpO2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVy'@;
put 'IixSaSxYbyxOcil9Y24oUHIpfXZhciBQcjtRZWUoUG4pJiYoUHI9UG4sUG49ZnVuY3Rpb24oT3IsJHIpeyRyKFByLnRlc3QoT3IpKX0pLFJhKFBuKT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLEVuKSxmLl9yZWdpc3RlckltbWVkaWF0'@;
put 'ZSgoKT0+e1BuLmNhbGwoT3QsdnQsUHI9PntmJiYoUHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnByb3AsRW4pLE90LnZhbGlkPVByLEpuKFByKSxmLnJ1bkhvb2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnBy'@;
put 'b3AsRW4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57T3QudmFsaWQ9ITAsSm4oT3QudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgUG49aWkodnQsT3QsY24pLEpuPVtdO2xldCBPciwkcixZcixQcj1Fbjtmb3IoT3I9'@;
put 'MCwkcj1Qbi5sZW5ndGg7T3I8JHI7T3IrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiBQbltPcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBQbltPcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBt'@;
put 'ZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7WXI9UG5bT3JdWzFdPj10aGlzLmNvdW50Q29scygpP1BuW09yXVsxXTpULmNvbFRvUHJvcChQbltPcl1bMV0pLEpuLnB1c2goW1BuW09yXVswXSxZcixXLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coUG5bT3JdWzBdKSxQbltPcl1bMV0p'@;
put 'LFBuW09yXVsyXV0pfSFQciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKFByPU90KTtjb25zdCBOcj1qcihKbixFbik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixOcixQciksTGkoTnIsUHIsKCk9PntmcihOcixQcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuLEVuKXtjb25zdCBQbj1paSh2dCxPdCxjbiksSm49W107bGV0IE9yLCRyLFByPUVuO2ZvcihPcj0wLCRyPVBuLmxlbmd0aDtPcjwkcjtPcisrKUpuLnB1c2goW1BuW09yXVswXSxQbltPcl1bMV0sVy5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KFBuW09yXVswXSksUG5bT3Jd'@;
put 'WzFdKSxQbltPcl1bMl1dKTshUHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihQcj1PdCk7Y29uc3QgWXI9anIoSm4sRW4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsWXIsUHIpLExpKFlyLFByLCgpPT57ZnIoWXIsUHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYm'@;
put 'IWYuaXNMaXN0ZW5pbmcoKSYmKFlCPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKFlCPW51bGwsZi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlv'@;
put 'bigpe3JldHVybiBZQj09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7Zi5fcmVmcmVzaEJvcmRlcnMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdKXx8YXJndW1lbnRzWzFdKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbixQbixKbixQcil7aWYoIm9iamVjdCIhPXR5cGVvZiBjbnx8Im9iamVjdCIhPXR5cGVvZiBjblswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFt'@;
put 'ZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgT3I9Im51bWJlciI9PXR5cGVvZiBFbj9mLl9jcmVhdGVDZWxsQ29vcmRzKEVuLFBuKTpudWxsO3JldHVybiBpZS5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjbixPcixK'@;
put 'bixQcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHZ0LE90LGNuKXtmb3IodmFyIEVuPWFyZ3VtZW50cy5sZW5ndGgsUG49bmV3IEFycmF5KEVuPjM/RW4tMzowKSxKbj0zO0puPEVuO0puKyspUG5bSm4tM109YXJndW1lbnRzW0puXTtyZXR1cm4gVC5zcGxpY2VDb2wodnQsT3QsY24sLi4u'@;
put 'UG4pfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih2dCxPdCxjbil7Zm9yKHZhciBFbj1hcmd1bWVudHMubGVuZ3RoLFBuPW5ldyBBcnJheShFbj4zP0VuLTM6MCksSm49MztKbjxFbjtKbisrKVBuW0puLTNdPWFyZ3VtZW50c1tKbl07cmV0dXJuIFQuc3BsaWNlUm93KHZ0LE90LGNuLC4uLlBu'@;
put 'KX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKG5uLmlzU2VsZWN0ZWQoKSlyZXR1cm4gY3Mobm4uZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206T3QsdG86Y259PXZ0O3JldHVybltPdC5yb3csT3QuY29sLGNuLnJvdyxjbi5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRM'@;
put 'YXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBPdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoT3Q9dnRbdnQubGVuZ3RoLTFdKSxPdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYobm4uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5m'@;
put 'cm9tKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgT3Q7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE90PXZ0W3Z0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZW1wdHlT'@;
put 'ZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHZ0KXtpZighbm4uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE90PVtdO0RuKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSxjbj0+e2NvbnN0IEVuPWNuLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCksUG49Y24uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dm8oRW4ucm93LFBuLnJvdyxKbj0+e3ZvKEVuLmNvbCxQbi5jb2wsUHI9Pnt0aGlzLmdldENlbGxNZXRhKEpuLFByKS5yZWFkT25seXx8T3QucHVzaChbSm4sUHIsbnVsbF0pfSl9KX0pLE90Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFB'@;
put 'dENlbGwoT3QsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVy'@;
put 'PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiYodGhpcy5yZW5k'@;
put 'ZXJDYWxsP3RoaXMucmVuZGVyKCk6dGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMucmVuZGVyQ2FsbD0hMCx0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fChwZS5sb2NrRWRp'@;
put 'dG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkscGUudW5sb2NrRWRpdG9yKCkpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgT3Q9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5pc0V4ZWN1dGlv'@;
put 'blN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJh'@;
put 'dGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgT3Q9dGhpcy5leGVjdXRp'@;
put 'b25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE90LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZPdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5y'@;
put 'ZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3Bl'@;
put 'bmRFeGVjdXRpb24oKTtjb25zdCBjbj12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihPdCksY259LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE90PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1l'@;
put 'RXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0e3dpZHRoOnZ0LGhlaWdodDpPdH09Zi52aWV3LmdldExhc3RTaXplKCkse3dpZHRoOmNuLGhlaWdodDpFbn09Zi5yb290RWxl'@;
put 'bWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxQbj1jbiE9PXZ0fHxFbiE9PU90OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp2dCxoZWlnaHQ6T3R9LHt3aWR0aDpjbixoZWlnaHQ6RW59LFBuKSYmKChQbnx8Zi52aWV3Ll93dC53dE92ZXJsYXlz'@;
put 'LnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKGYudmlldy5zZXRMYXN0U2l6ZShjbixFbiksZi5yZW5kZXIoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOnZ0LGhlaWdodDpPdH0se3dpZHRoOmNuLGhlaWdodDpFbn0sUG4pKX0sdGhpcy51'@;
put 'cGRhdGVEYXRhPWZ1bmN0aW9uKHZ0LE90KXt6bmUodnQsY249PntUPWNufSxjbj0+e1Q9Y24sZi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxmLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dz'@;
put 'KCkpLGllLmFkanVzdFJvd3NBbmRDb2xzKCl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpPdCxtZXRhTWFuYWdlcjppdCxmaXJzdFJ1bjp3ZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHZ0LE90KXt6'@;
put 'bmUodnQsY249PntUPWNufSwoKT0+e2l0LmNsZWFyQ2VsbHNDYWNoZSgpLGYuaW5pdEluZGV4TWFwcGVycygpLGllLmFkanVzdFJvd3NBbmRDb2xzKCksd2UmJih3ZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3Vy'@;
put 'Y2U6ImxvYWREYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6aXQsZmlyc3RSdW46d2V9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5jb2x1bW5zO2xldCBPdD0wO2lmKEFycmF5LmlzQXJyYXkodnQpKU90PXZ0Lmxlbmd0aDtlbHNlIGlmKFJh'@;
put 'KHZ0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29uc3QgY249dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEVuPTA7RW48Y247RW4rPTEpdnQoRW4pJiYoT3QrPTEpfWVsc2UoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihPdD1ULmNv'@;
put 'bFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihLaShldC5kYXRhU2NoZW1hKSl7Y29uc3QgY249VC5nZXRTY2hlbWEoKTtPdD1BcnJheS5pc0FycmF5KGNuKT9jbi5sZW5ndGg6dWsoY24pfWVsc2UgT3Q9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gT3R9LHRoaXMuaW5pdEluZGV4'@;
put 'TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24o'@;
put 'dnQsT3QsY24sRW4pe3JldHVybiBJYSh2dCk/VC5nZXRBbGwoKTpULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pLFQuREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbih2dCxPdCxj'@;
put 'bixFbil7cmV0dXJuIFQuZ2V0Q29weWFibGVUZXh0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBULmdldENvcHlhYmxlKHZ0LFQuY29sVG9Qcm9wKE90KSl9'@;
put 'LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGNuPSh3ZT9mLmxvYWRE'@;
put 'YXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgUG4sSm4sRW49ITE7aWYoS2kodnQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7'@;
put 'aWYoS2kodnQuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYoS2kodnQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4'@;
put 'LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IoUG4gaW4gdnQpImRhdGEiPT09UG58fCgibGFuZ3VhZ2UiPT09UG4/Tm4odnQubGFuZ3VhZ2UpOiJjbGFzc05hbWUiPT09UG4/Y3IoImNsYXNzTmFtZSIsdnQuY2xhc3NOYW1lKToidGFi'@;
put 'bGVDbGFzc05hbWUiPT09UG4mJmYudGFibGU/KGNyKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpKTpzby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoUG4pfHxzby5nZXRTaW5n'@;
put 'bGV0b24oKS5pc0RlcHJlY2F0ZWQoUG4pPyhSYSh2dFtQbl0pfHxBcnJheS5pc0FycmF5KHZ0W1BuXSkpJiYodnRbUG5dLmluaXRpYWxIb29rPSEwLGYuYWRkSG9vayhQbix2dFtQbl0pKTohT3QmJmJsKHZ0LFBuKSYmKHl0W1BuXT12dFtQbl0pKTt2b2lkIDA9PT12dC5kYXRhJiZ2b2lkIDA9'@;
put 'PT1ldC5kYXRhP2NuKG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT9jbih2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihULmNyZWF0ZU1hcCgpLGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBQcj1mLmNvdW50Q29scygpLE9y'@;
put 'PWV0LmNvbHVtbnM7aWYoT3ImJlJhKE9yKSYmKEVuPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZpdC5jbGVhckNhY2hlKCksUHI+MClmb3IoUG49MCxKbj0wO1BuPFByO1BuKyspe2lmKE9yKXtjb25zdCBOcj1Fbj9PcihQ'@;
put 'bik6T3JbSm5dO05yJiZpdC51cGRhdGVDb2x1bW5NZXRhKEpuLE5yKX1Kbis9MX1LaSh2dC5jZWxsKSYmZHModnQuY2VsbCxOcj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QoTnIucm93LE5yLmNvbCxOcil9KSxmLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgJHI9Zi5yb290RWxl'@;
put 'bWVudC5zdHlsZS5oZWlnaHQ7IiIhPT0kciYmKCRyPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IFlyPXZ0LmhlaWdodDtpZihSYShZcikmJihZcj1ZcigpKSxPdCYmZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQu'@;
put 'c2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT1Zcil7Y29uc3QgTnI9Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7TnImJihOci5pbmRleE9mKCJoZWlnaHQiKT4t'@;
put 'MXx8TnIuaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixOcik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09WXImJihmLnJvb3RFbGVtZW50'@;
put 'LnN0eWxlLmhlaWdodD1pc05hTihZcik/YCR7WXJ9YDpgJHtZcn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IE5yPXZ0LndpZHRoO1JhKE5yKSYmKE5yPU5yKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9'@;
put 'aXNOYU4oTnIpP2Ake05yfWA6YCR7TnJ9cHhgfU90fHwoZi52aWV3JiYoZi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSksZi5ydW5Ib29rcygiYWZ0ZXJVcGRh'@;
put 'dGVTZXR0aW5ncyIsdnQpKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIXdlJiYoZi5mb3JjZUZ1bGxSZW5kZXI9ITAscGUubG9ja0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSxwZS51bmxv'@;
put 'Y2tFZGl0b3IoKSksIU90JiZmLnZpZXcmJigiIj09PSRyfHwiIj09PVlyfHx2b2lkIDA9PT1ZcikmJiRyIT09WXImJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNlbGVj'@;
put 'dGVkTGFzdCgpO2lmKGV0LmdldFZhbHVlKXtpZihSYShldC5nZXRWYWx1ZSkpcmV0dXJuIGV0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0WzBdWzBdXVtldC5nZXRWYWx1ZV19ZWxzZSBpZih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0WzFd'@;
put 'KX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBldH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlvbih2dCxPdCxjbixFbixQbil7aWUuYWx0ZXIodnQsT3QsY24sRW4s'@;
put 'UG4pfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQsT3Qpe2xldCBjbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLEVuPU90LFBuPXZ0O2lmKE90Pj0wKXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlz'@;
put 'aWNhbENvbHVtbihPdCkpKXJldHVybiBudWxsO0VuPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51bGw7'@;
put 'UG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PVBufHxudWxsPT09RW4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHMoUG4sRW4pLGNuKX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rp'@;
put 'b24odnQpe2NvbnN0IE90PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1PdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6Y24sY29sOkVufT1PdDtsZXQgUG49Y24sSm49RW47cmV0dXJuIGNuPj0wJiYoUG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxG'@;
put 'cm9tUmVuZGVyYWJsZUluZGV4KGNuKSksRW4+PTAmJihKbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRW4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKFBuLEpuKX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24odnQpe3JldHVybiBULmNvbFRvUHJv'@;
put 'cCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVC5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVt'@;
put 'bkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsVC5jb2xUb1Byb3AoT3QpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsT3QpfSx0aGlz'@;
put 'LmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSx2dCksVC5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBFbj0wO0VuPGNuLmxl'@;
put 'bmd0aDtFbis9MSlmb3IobGV0IFBuPTA7UG48Y25bRW5dLmxlbmd0aDtQbis9MSlPdC5wdXNoKGNuW0VuXVtQbl0pO3JldHVybiBPdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD1bXSxjbj1ULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxULnByb3BU'@;
put 'b0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSxULnByb3BUb0NvbCh2dCkpLFQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgRW49MDtFbjxjbi5sZW5ndGg7RW4rPTEpZm9yKGxldCBQbj0wO1BuPGNuW0VuXS5sZW5ndGg7UG4rPTEpT3QucHVzaChj'@;
put 'bltFbl1bUG5dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IFBuO3JldHVybiBQbj12b2lkIDA9PT12dD9XLmdldERhdGEoKTpXLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCksZi5fY3JlYXRlQ2VsbENvb3Jkcyhj'@;
put 'bixFbikpLFBufSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IFBuO3JldHVybiBQbj12b2lkIDA9PT12dD9XLmdldERhdGEoITApOlcuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLEVu'@;
put 'KSwhMCksUG59LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVy5nZXRBdENvbHVtbih2dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgUG49aWkodnQsT3QsY24pLEpuPXRoaXMuaGFzSG9vaygiYWZ0ZXJT'@;
put 'ZXRTb3VyY2VEYXRhQXRDZWxsIiksUHI9W107Sm4mJkRuKFBuLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtQci5wdXNoKFtZcixOcixXLmdldEF0Q2VsbChZcixOciksUmldKX0pLERuKFBuLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtXLnNldEF0Q2VsbChZcixOcixSaSl9KSxKbiYmdGhpcy5ydW5I'@;
put 'b29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixQcixFbiksdGhpcy5yZW5kZXIoKTtjb25zdCBPcj1mLmdldEFjdGl2ZUVkaXRvcigpO09yJiZLaShPci5yZWZyZXNoVmFsdWUpJiZPci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3Jl'@;
put 'dHVybiBXLmdldEF0Um93KHZ0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVy5nZXRBdENlbGwodnQsT3QpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIFQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxm'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291bnRDb2xzKCktMSksVC5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtjb25zdCBQbj12b2lkIDA9PT12dD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3Vu'@;
put 'dENvbHMoKV06W3Z0LE90LGNuLEVuXSxbSm4sUHJdPVBuO2xldFssLE9yLCRyXT1QbixZcj1udWxsLE5yPW51bGw7dm9pZCAwPT09T3ImJihPcj1Kbiksdm9pZCAwPT09JHImJigkcj1Qcik7bGV0IFJpPSJtaXhlZCI7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKEpuLE9yKSwwKSxNYXRo'@;
put 'Lm1heChKbixPciksWG89PntsZXQgR289ITA7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKFByLCRyKSwwKSxNYXRoLm1heChQciwkciksSnM9PihOcj10aGlzLmdldENlbGxNZXRhKFhvLEpzKS50eXBlLFlyP0dvPVlyPT09TnI6WXI9TnIsR28pKSxSaT1Hbz9OcjoibWl4ZWQiLEdvfSks'@;
put 'Uml9LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24odnQsT3QsY24pe2NvbnN0W0VuLFBuXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpXTtsZXQgSm49aXQuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShFbixQbixjbik7ITEhPT1mLnJ1bkhvb2tzKCJi'@;
put 'ZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsT3QsY24sSm4pJiYoaXQucmVtb3ZlQ2VsbE1ldGEoRW4sUG4sY24pLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE90LGNuLEpuKSksSm49bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIGNuPWFyZ3VtZW50cy5sZW5ndGgsRW49bmV3IEFycmF5KGNuPjI/Y24tMjowKSxQbj0yO1BuPGNuO1BuKyspRW5bUG4tMl09YXJndW1lbnRzW1BuXTtpZihFbi5sZW5ndGg+MCYmIUFy'@;
put 'cmF5LmlzQXJyYXkoRW5bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO090PjAmJml0LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3co'@;
put 'dnQpLE90KSxFbi5sZW5ndGg+MCYmRG4oRW4ucmV2ZXJzZSgpLEpuPT57aXQuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLERuKEpuLChQcixPcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQsT3IsUHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9'@;
put 'ZnVuY3Rpb24odnQsT3QsY24peyJvYmplY3QiPT10eXBlb2YgY24mJmRzKGNuLChFbixQbik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE90LFBuLEVuKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRh'@;
put 'Iix2dCxPdCxjbixFbikpcmV0dXJuO2xldCBKbj12dCxQcj1PdDt2dDx0aGlzLmNvdW50Um93cygpJiYoSm49dGhpcy50b1BoeXNpY2FsUm93KHZ0KSksT3Q8dGhpcy5jb3VudENvbHMoKSYmKFByPXRoaXMudG9QaHlzaWNhbENvbHVtbihPdCkpLGl0LnNldENlbGxNZXRhKEpuLFByLGNuLEVu'@;
put 'KSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIix2dCxPdCxjbixFbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGl0LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249dGhpcy50b1BoeXNpY2FsUm93KHZ0KSxF'@;
put 'bj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpO3JldHVybiBudWxsPT09Y24mJihjbj12dCksbnVsbD09PUVuJiYoRW49T3QpLGl0LmdldENlbGxNZXRhKGNuLEVuLHt2aXN1YWxSb3c6dnQsdmlzdWFsQ29sdW1uOk90fSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0'@;
put 'dXJuIGl0LmdldENlbGxzTWV0YUF0Um93KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ZXQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0i'@;
put 'bnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnJlbmRlcmVyOnZ0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/YmsoY24pOklhKGNuKT9iaygidGV4dCIpOmNufSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsT3Qpe2NvbnN0IGNuPSJudW1i'@;
put 'ZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZWRpdG9yOnZ0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP3BrKGNuKTpJYShjbik/cGsoInRleHQiKTpjbn0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09'@;
put 'dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnZhbGlkYXRvcjp2dC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9GTihjbik6Y259LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dz'@;
put 'PWZ1bmN0aW9uKHZ0LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0'@;
put 'LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuKXtjb25zdCBFbj1uZXcgTHI7dnQmJihFbi5vblF1ZXVlRW1wdHk9dnQpO2xldCBQbj1mLmNvdW50Um93cygpLTE7Zm9yKDtQbj49MDspe2lmKHZvaWQgMCE9PU90JiYtMT09PU90LmluZGV4T2YoUG4pKXtQbi09MTtjb250aW51ZX1sZXQgSm49Zi5jb3VudENvbHMoKS0xO2Zvcig7'@;
put 'Sm4+PTA7KXZvaWQgMD09PWNufHwtMSE9PWNuLmluZGV4T2YoSm4pPyhFbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKFBuLEpuKSxmLmdldENlbGxNZXRhKFBuLEpuKSxQcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIFByKXRocm93IG5ldyBF'@;
put 'cnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1QciYmKEVuLnZhbGlkPSExKSxFbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxKbi09MSk6Sm4tPTE7UG4tPTF9RW4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0'@;
put 'aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE90PWV0LnJvd0hlYWRlcnMsY249dnQ7cmV0dXJuIHZvaWQgMCE9PWNuJiYoY249Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixjbikpLHZvaWQgMD09PWNuPyhPdD1bXSx2byhmLmNvdW50Um93cygpLTEsRW49PntPdC5wdXNo'@;
put 'KGYuZ2V0Um93SGVhZGVyKEVuKSl9KSk6QXJyYXkuaXNBcnJheShPdCkmJnZvaWQgMCE9PU90W2NuXT9PdD1PdFtjbl06UmEoT3QpP090PU90KGNuKTpPdCYmInN0cmluZyIhPXR5cGVvZiBPdCYmIm51bWJlciIhPXR5cGVvZiBPdCYmKE90PWNuKzEpLE90fSx0aGlzLmhhc1Jvd0hlYWRlcnM9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4hIWV0LnJvd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwhPWV0LmNvbEhlYWRlcnMpcmV0dXJuISFldC5jb2xIZWFkZXJzO2ZvcihsZXQgdnQ9MCxPdD1mLmNvdW50Q29scygpO3Z0PE90O3Z0KyspaWYoZi5nZXRDb2xIZWFk'@;
put 'ZXIodnQpKXJldHVybiEwO3JldHVybiExfSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE90PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtjb25zdCBjbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLHZ0KTtp'@;
put 'Zih2b2lkIDA9PT1jbil7Y29uc3QgT3I9W10sJHI9Zi5jb3VudENvbHMoKTtmb3IobGV0IFlyPTA7WXI8JHI7WXIrKylPci5wdXNoKGYuZ2V0Q29sSGVhZGVyKFlyKSk7cmV0dXJuIE9yfWxldCBFbj1ldC5jb2xIZWFkZXJzO2NvbnN0IEpuPWYudG9QaHlzaWNhbENvbHVtbihjbiksUHI9ZnVu'@;
put 'Y3Rpb24oT3Ipe2NvbnN0ICRyPVtdLFlyPWYuY291bnRDb2xzKCk7bGV0IE5yPTA7Zm9yKDtOcjxZcjtOcisrKVJhKGV0LmNvbHVtbnMpJiZldC5jb2x1bW5zKE5yKSYmJHIucHVzaChOcik7cmV0dXJuICRyW09yXX0oSm4pO3JldHVybiExPT09ZXQuY29sSGVhZGVycz9Fbj1udWxsOmV0LmNv'@;
put 'bHVtbnMmJlJhKGV0LmNvbHVtbnMpJiZldC5jb2x1bW5zKFByKSYmZXQuY29sdW1ucyhQcikudGl0bGU/RW49ZXQuY29sdW1ucyhQcikudGl0bGU6ZXQuY29sdW1ucyYmZXQuY29sdW1uc1tKbl0mJmV0LmNvbHVtbnNbSm5dLnRpdGxlP0VuPWV0LmNvbHVtbnNbSm5dLnRpdGxlOkFycmF5Lmlz'@;
put 'QXJyYXkoZXQuY29sSGVhZGVycykmJnZvaWQgMCE9PWV0LmNvbEhlYWRlcnNbSm5dP0VuPWV0LmNvbEhlYWRlcnNbSm5dOlJhKGV0LmNvbEhlYWRlcnMpP0VuPWV0LmNvbEhlYWRlcnMoSm4pOmV0LmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgZXQuY29sSGVhZGVycyYmIm51bWJlciIh'@;
put 'PXR5cGVvZiBldC5jb2xIZWFkZXJzJiYoRW49TWsoY24pKSxFbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsRW4sdnQsT3QpLEVufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE90O2lmKHZ0Pj0wJiYoT3Q9Zi5nZXRDZWxsTWV0'@;
put 'YSgwLHZ0KS53aWR0aCksKHZvaWQgMD09PU90fHxPdD09PWV0LndpZHRoKSYmKE90PWV0LmNvbFdpZHRocyksbnVsbCE9T3Qpe3N3aXRjaCh0eXBlb2YgT3Qpe2Nhc2Uib2JqZWN0IjpPdD1PdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6T3Q9T3QodnQpfSJzdHJpbmciPT10eXBlb2YgT3Qm'@;
put 'JihPdD1wYXJzZUludChPdCwxMCkpfXJldHVybiBPdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbih2dCl7bGV0IE90PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLE90LHZ0KSx2b2lkIDA9PT1PdCYmKE90PWVW'@;
put 'LkRFRkFVTFRfV0lEVEgpLE90fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1ldC5yb3dIZWlnaHRzO2lmKG51bGwhPU90KXtzd2l0Y2godHlwZW9mIE90KXtjYXNlIm9iamVjdCI6T3Q9T3RbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk90PU90'@;
put 'KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE90JiYoT3Q9cGFyc2VJbnQoT3QsMTApKX1yZXR1cm4gT3R9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0'@;
put 'IixPdCx2dCksT3R9LHRoaXMuY291bnRTb3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIFcuY291bnRSb3dzKCl9LHRoaXMuY291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIFcuY291bnRGaXJzdFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gVC5n'@;
put 'ZXRMZW5ndGgoKX0sdGhpcy5jb3VudENvbHM9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5tYXhDb2xzLE90PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4odnQsT3QpfSx0aGlzLmNvdW50UmVuZGVyZWRSb3dzPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93'@;
put 'c0NvdW50KCk6LTF9LHRoaXMuY291bnRSZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmll'@;
put 'dy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE90PTA7cmV0dXJu'@;
put 'IHZrKGYuY291bnRSb3dzKCktMSxjbj0+e2lmKGYuaXNFbXB0eVJvdyhjbikpT3QrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksT3R9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFy'@;
put 'Z3VtZW50c1swXSxPdD0wO3JldHVybiB2ayhmLmNvdW50Q29scygpLTEsY249PntpZihmLmlzRW1wdHlDb2woY24pKU90Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE90fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBldC5pc0VtcHR5Um93LmNhbGwoZix2dCl9'@;
put 'LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7cmV0dXJuIGV0LmlzRW1wdHlDb2wuY2FsbChmLHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgUG49IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0'@;
put 'XSxKbj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFJYSh2dCkmJiFJYShPdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t2dCxPdCxjbixFbl1dLFBuLEpuKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCBjbj0h'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiYoaD0hMCk7Y29uc3QgRW49bm4uc2VsZWN0Q2VsbHMoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0pO3JldHVybiBFbiYmY24mJmYubGlzdGVuKCksaD0hMSxFbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gbm4uc2VsZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQpfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBubi5zZWxlY3RSb3dzKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCl9LHRoaXMuZGVzZWxl'@;
put 'Y3RDZWxsPWZ1bmN0aW9uKCl7bm4uZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtjb25zdCBPdD12dCYmdGhpcy5oYXNSb3dIZWFkZXJzKCksY249dnQm'@;
put 'JnRoaXMuaGFzQ29sSGVhZGVycygpO2g9ITAsbm4uc2VsZWN0QWxsKE90LGNuKSxoPSExfTtjb25zdCBPbj0odnQsT3QpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoT3QsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249YXJndW1lbnRzLmxl'@;
put 'bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxFbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IEpuPSFjbixQcj0hRW47bGV0IE9yPXZ0LCRyPU90O2lmKCEoYXJndW1lbnRzLmxlbmd0aD40JiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0pe2NvbnN0IFJpPU51bWJlci5pc0ludGVnZXIodnQpLFhvPU51bWJlci5pc0ludGVnZXIoT3QpLEdvPVJpP09uKHRoaXMucm93SW5kZXhNYXBwZXIsdnQpOnZvaWQgMCxKcz1Ybz9Pbih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLE90'@;
put 'KTp2b2lkIDA7aWYobnVsbD09PUdvfHxudWxsPT09SnMpcmV0dXJuITE7T3I9Umk/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEdvKTp2b2lkIDAsJHI9WG8/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEpzKTp2'@;
put 'b2lkIDB9Y29uc3QgWXI9TnVtYmVyLmlzSW50ZWdlcihPciksTnI9TnVtYmVyLmlzSW50ZWdlcigkcik7cmV0dXJuIFlyJiZOcj9mLnZpZXcuc2Nyb2xsVmlld3BvcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPciwkciksSm4sRW4sY24sUHIpOllyJiYhMT09PU5yP2Yudmlldy5zY3JvbGxWaWV3'@;
put 'cG9ydFZlcnRpY2FsbHkoT3IsSm4sY24pOiEoIU5yfHwhMSE9PVlyKSYmZi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KCRyLEVuLFByKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5fY2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygpLGYudmlldyYmZi52'@;
put 'aWV3LmRlc3Ryb3koKSxXJiZXLmRlc3Ryb3koKSxXPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCksaXQuY2xlYXJDYWNoZSgpLHJWKGYpKXtjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7'@;
put 'dnQmJnZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodnQpfWcyKGYucm9vdEVsZW1lbnQpLF8uZGVzdHJveSgpLHBlJiZwZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rl'@;
put 'ckFsbCgpLEV0LmdldEl0ZW1zKCkuZm9yRWFjaCh2dD0+e2xldFssT3RdPXZ0O090LmRlc3Ryb3koKX0pLEV0LmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxzby5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGYpLGRzKGYsKHZ0LE90LGNuKT0+e1JhKHZ0KT9jbltPdF09'@;
put 'ZnVuY3Rpb24gRnIodnQpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dnR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oT3QpOiJndWlkIiE9PU90JiYoY25bT3RdPW51'@;
put 'bGwpfSksZi5pc0Rlc3Ryb3llZD0hMCxUJiZULmRlc3Ryb3koKSxUPW51bGwsaWU9bnVsbCxubj1udWxsLHBlPW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiBwZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24odnQp'@;
put 'e2NvbnN0IE90PWJ1KHZ0KTtyZXR1cm4iVW5kb1JlZG8iPT09T3Q/dGhpcy51bmRvUmVkbzpFdC5nZXRJdGVtKE90KX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTpF'@;
put 'dC5nZXRJZCh2dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHZ0LE90KXtzby5nZXRTaW5nbGV0b24oKS5hZGQodnQsT3QsZil9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIHNvLmdldFNpbmdsZXRvbigpLmhh'@;
put 'cyh2dCxmKXx8c28uZ2V0U2luZ2xldG9uKCkuaGFzKHZ0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih2dCxPdCl7c28uZ2V0U2luZ2xldG9uKCkub25jZSh2dCxPdCxmKX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LE90KXtzby5nZXRTaW5nbGV0b24oKS5yZW1vdmUodnQsT3Qs'@;
put 'Zil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQsT3QsY24sRW4sUG4sSm4sUHIpe3JldHVybiBzby5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxPdCxjbixFbixQbixKbixQcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIEluZShldC5sYW5ndWFn'@;
put 'ZSx2dCxPdCl9LHRoaXMudG9IVE1MPSgpPT5UTih0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsVE4odGhpcykpLHZ0LmZp'@;
put 'cnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih2dCl7bGV0IGNuPXZ0OyJmdW5jdGlvbiI9PXR5cGVvZiBjbiYmKGNuPXNldFRpbWVvdXQoY24sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goY24pfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7RG4odGhpcy50aW1lb3V0cyx2dD0+e2NsZWFyVGltZW91dCh2dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHZ0'@;
put 'KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUodnQpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7RG4odGhpcy5pbW1lZGlhdGVzLHZ0PT57Y2xlYXJJbW1lZGlhdGUodnQpfSl9LHRoaXMuX3JlZnJlc2hCb3JkZXJzPWZ1bmN0aW9uKCl7bGV0IE90PSEoYXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07cGUuZGVzdHJveUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksT3QmJm5uLmlzU2VsZWN0ZWQoKSYm'@;
put 'cGUucHJlcGFyZUVkaXRvcigpfSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1mLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnJvb3RFbGVtZW50KS5kaXJlY3Rpb259LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVj'@;
put 'dGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX07Y29uc3QgUW49cURlKHtoYW5kbGVFdmVudDp2dD0+Zi5pc0xpc3RlbmluZygpJiZ2b2lkIDAhPT12dD8ua2V5LGJlZm9yZUtleURvd246dnQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLHZ0KSxhZnRl'@;
put 'cktleURvd246dnQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsdnQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsdnQ9PnshMT09PXZ0LmN0cmxLZXkmJiExPT09'@;
put 'dnQubWV0YUtleSYmUW4ucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBRbn07Y29uc3QgTXI9UW4uYWRkQ29udGV4dCgiZ3JpZCIpLF9yPXtydW5Pbmx5SWY6KCk9PktpKGYuZ2V0U2VsZWN0ZWQoKSkmJmYuY291bnRSZW5k'@;
put 'ZXJlZFJvd3MoKT4wJiZmLmNvdW50UmVuZGVyZWRDb2xzKCk+MCxncm91cDpLRGV9O1FuLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksTXIuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT57Zi5zZWxlY3RBbGwoKX19LHtrZXlzOltb'@;
put 'IkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzpPdCxjb2w6Y259PXZ0W3Z0Lmxlbmd0aC0xXS5oaWdobGlnaHQsRW49Zi5nZXREYXRhQXRDZWxsKE90LGNuKSxQbj1uZXcgTWFwO2ZvcihsZXQgSm49MDtKbjx2'@;
put 'dC5sZW5ndGg7Sm4rKyl2dFtKbl0uZm9yQWxsKChQcixPcik9PntpZihQcj49MCYmT3I+PTAmJihQciE9PU90fHxPciE9PWNuKSl7Y29uc3R7cmVhZE9ubHk6JHJ9PWYuZ2V0Q2VsbE1ldGEoUHIsT3IpOyRyfHxQbi5zZXQoYCR7UHJ9eCR7T3J9YCxbUHIsT3IsRW5dKX19KTtmLnNldERhdGFB'@;
put 'dENlbGwoQXJyYXkuZnJvbShQbi52YWx1ZXMoKSkpfSxydW5Pbmx5SWY6KCk9PmYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRDZWxsc0NvdW50KCk+MX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0se2tleXM6W1siQXJyb3dV'@;
put 'cCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGln'@;
put 'aHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1FbmQoLTEsMCl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdHtmcm9tOnZ0LHRv'@;
put 'Ok90fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksY249Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtubi5zZXRSYW5nZVN0YXJ0KHZ0LmNsb25lKCkpLG5uLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sT3QuY29sKSl9LHJ1bk9ubHlJ'@;
put 'ZjooKT0+IShmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJyb3dEb3duIiwi'@;
put 'Q29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRSb3dzKCktMSwtMSksZi5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLmhpZ2hsaWdodC5jb2wpKX19LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtRW5kKDEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2Nv'@;
put 'bnN0e2Zyb206dnQsdG86T3R9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygpLTEsLTEpO25uLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSksbm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhjbixPdC5jb2wpKX0scnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybVN0YXJ0'@;
put 'KDAsLTEqZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxPdD1mLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/W2YuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntubi50'@;
put 'cmFuc2Zvcm1FbmQoMCwtMSpmLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNu'@;
put 'PWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bZi5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7bm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxy'@;
put 'dW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybVN0YXJ0KDAsZi5nZXREaXJlY3Rpb25GYWN0b3Io'@;
put 'KSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csT3Q9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoLi4uZi5pc1J0bCgpP1swLDFdOltmLmNvdW50Q29scygpLTEsLTFdKTtubi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpKX19LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybUVuZCgwLGYuZ2V0RGlyZWN0'@;
put 'aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bMCwxXTpbZi5jb3VudENvbHMoKS0xLC0xXSk7bm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24u'@;
put 'aXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PXBhcnNlSW50KGYuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksT3Q9'@;
put 'Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csY249Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsMSk7bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFp'@;
put 'blRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKG5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmZyb20ucm93LGYuY29sdW1uSW5kZXhNYXBwZXIu'@;
put 'Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSkpKX19LHtrZXlzOltbIkhvbWUiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxPdD1wYXJzZUludChmLmdldFNl'@;
put 'dHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LDEpLEVuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEpO25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhjbixFbikpfSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSkpKX0scnVuT25seUlmOigpPT5mLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtr'@;
put 'ZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhubi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5mcm9tLnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygp'@;
put 'LTEsLTEpKSl9fSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLDEwKSxPdD1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5J'@;
put 'bmRleChmLmNvdW50Um93cygpLXZ0LTEsLTEpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSk7bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3Lmlz'@;
put 'TWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1TdGFydCgtZi5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e3Rv'@;
put 'OnZ0fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksT3Q9TWF0aC5tYXgodnQucm93LWYuY291bnRWaXNpYmxlUm93cygpLDApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEpO2lmKG51bGwhPT1jbil7Y29uc3QgRW49Zi5fY3JlYXRlQ2VsbENvb3Jk'@;
put 'cyhjbix2dC5jb2wpLFBuPXZ0LnJvdy1mLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxKbj1NYXRoLm1heChFbi5yb3ctUG4sMCk7bm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntubi50'@;
put 'cmFuc2Zvcm1TdGFydChmLmNvdW50VmlzaWJsZVJvd3MoKSwwKX19LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzp2dH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE90PU1hdGgubWluKHZ0LnJvdytmLmNvdW50VmlzaWJsZVJvd3MoKSxmLmNv'@;
put 'dW50Um93cygpLTEpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LC0xKTtpZihudWxsIT09Y24pe2NvbnN0IEVuPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sdnQuY29sKSxQbj12dC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksSm49'@;
put 'TWF0aC5taW4oRW4ucm93LVBuLGYuY291bnRSb3dzKCktMSk7bm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0'@;
put 'KTpldC50YWJNb3Zlcztubi50cmFuc2Zvcm1TdGFydChPdC5yb3csT3QuY29sLCEwKX19LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0KTpldC50YWJNb3Zlcztubi50cmFu'@;
put 'c2Zvcm1TdGFydCgtT3Qucm93LC1PdC5jb2wpfX1dLF9yKSxQTigpLmZvckVhY2godnQ9Pntjb25zdCBPdD11eSh2dCk7RXQuYWRkSXRlbSh2dCxuZXcgT3QodGhpcykpfSksc28uZ2V0U2luZ2xldG9uKCkucnVuKGYsImNvbnN0cnVjdCIpfWNvbnN0IFluZT17X2hvb2tzU3RvcmFnZTpPYmpl'@;
put 'Y3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtE'@;
put 'bih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe2RzKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtmaChZbmUsIk1JWElO'@;
put 'X05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgSkRlPVluZSxXYz1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElORzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNI'@;
put 'RUQ6IlNUQVRFX0ZJTklTSEVEIn0pLEdCPSJiYXNlRWRpdG9yIjtjbGFzcyB2N3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5pbnN0YW5jZT1sLHRoaXMuc3RhdGU9V2MuVklSR0lOLHRoaXMuX29wZW5lZD0hMSx0'@;
put 'aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsLHRoaXMuVEQ9bnVsbCx0aGlzLnJvdz1udWxsLHRoaXMuY29sPW51bGwsdGhpcy5wcm9wPW51bGwsdGhpcy5vcmlnaW5hbFZhbHVlPW51bGwsdGhpcy5jZWxsUHJvcGVydGllcz1udWxsLHRoaXMuaW5pdCgpfV9m'@;
put 'aXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZh'@;
put 'bHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1w'@;
put 'bGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZixfKXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9Xyx0aGlzLnN0YXRlPVdjLlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0'@;
put 'ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLF87aWYoYSl7Y29uc3Qgd2U9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7ZD1NYXRoLm1heChNYXRoLm1pbih3ZVswXSx3ZVsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbih3ZVsxXSx3ZVszXSksMCks'@;
put 'Zj1NYXRoLm1heCh3ZVswXSx3ZVsyXSksXz1NYXRoLm1heCh3ZVsxXSx3ZVszXSl9ZWxzZVtkLGgsZixfXT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBUPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgpO0FycmF5LmlzQXJyYXkoVCkmJihb'@;
put 'ZCxoXT1UKTtjb25zdCBpZT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxwZT17cnVuT25seUlmOigpPT5LaSh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91cDpHQn07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmllLmFkZFNob3J0Y3V0cyhb'@;
put 'e2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJy'@;
put 'b3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFy'@;
put 'dCgwLHRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpKX19XSxwZSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZixfLCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0ZSE9PVdjLlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpO2lmKGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLHRoaXMu'@;
put 'c3RhdGU9V2MuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgXz0ic3RyaW5nIj09dHlwZW9mIGw/bDpfbCh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMuc2V0VmFsdWUoXyl9dGhpcy5vcGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRl'@;
put 'cigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgVD10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9Vz0+e1QmJlQoVyksZChXKSx0aGlzLmhvdC52aWV3'@;
put 'LnJlbmRlcigpfX1pZih0aGlzLmlzV2FpdGluZygpKXJldHVybjtjb25zdCBfPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2lmKF8ucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChHQiksXy5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG1rKSx0aGlzLnN0'@;
put 'YXRlIT09V2MuVklSR0lOKXtpZih0aGlzLnN0YXRlPT09V2MuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IFQ9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFj'@;
put 'ZT9bWyJzdHJpbmciPT10eXBlb2YgVD9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChUfHwiIik6VF1dOltbVF1dLHRoaXMuc3RhdGU9V2MuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3Qu'@;
put 'YWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIixXPT57dGhpcy5zdGF0ZT1XYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoVyl9KToodGhpcy5zdGF0ZT1XYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19ZWxzZSB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgp'@;
put 'PT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5zdGF0ZT1XYy5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9PT1XYy5GSU5JU0hFRCYmKCExPT09bCYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVz'@;
put 'LmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9V2MuRURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRoaXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSEx'@;
put 'LHRoaXMuc3RhdGU9V2MuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxsRWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRpdE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9k'@;
put 'ZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0aGlzLnN0YXRlPT09V2MuV0FJVElOR31nZXRFZGl0ZWRDZWxsUmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhpcy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEp'@;
put 'cmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyxfPUtsKGEpLFQ9d2EoYSksVz1LbCh0aGlzLmhvdC5yb290RWxlbWVudCksaWU9d2EodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHBlPWQudG9wT3Zlcmxh'@;
put 'eS5ob2xkZXIsd2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLEVlPXBlIT09Zj9wZS5zY3JvbGxUb3A6MCxaZT13ZSE9PWY/d2Uuc2Nyb2xsTGVmdDowLGl0PWYuaW5uZXJXaWR0aC1XLmxlZnQtaWUse3d0VGFibGU6ZXR9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2'@;
put 'b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QseXQ9ZXQubmFtZSxFdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHl0KT9FZTowLFN0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMoeXQpP1plOjA7bGV0IG5uPV8udG9wLVcudG9wLShfLnRvcD09PVcu'@;
put 'dG9wPzA6MSktRXQsdm49MDt2bj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC1fLmxlZnQtVC1pdC0xK1N0Ol8ubGVmdC1XLmxlZnQtMS1TdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeXQpJiYobm4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zm'@;
put 'c2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyh5dCkmJih2bis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgTm49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLGNyPXRoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLExyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLExpPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJ'@;
put 'bmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KE5uJiZjcjw9MHx8Y3I9PT1MaSkmJihubis9MSksTHI8PTAmJih2bis9MSk7Y29uc3QgZnI9aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLGlpPWguY29sdW1u'@;
put 'c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixqcj1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxPbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxGcj1JYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpLFFuPWEub2Zmc2V0VG9w'@;
put 'K2ZyLU9uO2xldCBNcj0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IFlyPWEub2Zmc2V0TGVmdDtNcj1Zcj49MD9ldC5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhZciksTXIrPWlpLWpyLVR9ZWxzZSBNcj1hLm9mZnNldExlZnQraWktanI7Y29uc3QgX3I9enAodGhpcy5U'@;
put 'RCx0aGlzLmhvdC5yb290V2luZG93KSx2dD10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixPdD1wYXJzZUludChfclt2dF0sMTApPjA/MDoxLGNuPXBhcnNlSW50KF9yLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSxFbj13YShhKStPdCxQbj1h'@;
put 'bChhKStjbixKbj1odGUocGUpP0ZyOjAsUHI9ZnRlKHdlKT9GcjowLE9yPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoTXIpLUpuK090O3JldHVybnt0b3A6bm4sc3RhcnQ6dm4saGVpZ2h0OlBuLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGlt'@;
put 'dW1WaXNpYmxlRWxlbWVudEhlaWdodChRbiktUHIrY24sMjMpLHdpZHRoOkVuLG1heFdpZHRoOk9yfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Ns'@;
put 'b25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2Ui'@;
put 'dG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRD'@;
put 'ZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9'@;
put 'dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93'@;
put 'c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0'@;
put 'IiksYX19ZnVuY3Rpb24gZUxlKCl7dmFyIGwsYz17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDB9LGE9ZG9jdW1lbnQuYm9keSxkPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNQQU4iKSxm'@;
put 'PWZ1bmN0aW9uKEVlLFplLGl0KXtFZS5hZGRFdmVudExpc3RlbmVyKFplLGl0LCExKX0sXz1mdW5jdGlvbihFZSxaZSxpdCl7RWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihaZSxpdCwhMSl9LFQ9ZnVuY3Rpb24oRWUpe3ZhciBaZSxpdDtFZT8vXlthLXpBLVogXC4sXFxcL1x8MC05XSQvLnRlc3Qo'@;
put 'RWUpfHwoRWU9Ii4iKTpFZT0iIix2b2lkIDAhPT1kLnRleHRDb250ZW50P2QudGV4dENvbnRlbnQ9bC52YWx1ZStFZTpkLmRhdGE9bC52YWx1ZStFZSxoLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5zdHlsZS5mb250U2l6ZT13ZShsKS5mb250U2l6ZSxoLnN0eWxlLmZvbnRGYW1pbHk9'@;
put 'd2UobCkuZm9udEZhbWlseSxoLnN0eWxlLndoaXRlU3BhY2U9InByZSIsYS5hcHBlbmRDaGlsZChoKSxaZT1oLmNsaWVudFdpZHRoKzIsYS5yZW1vdmVDaGlsZChoKSxsLnN0eWxlLmhlaWdodD1jLm1pbkhlaWdodCsicHgiLGwuc3R5bGUud2lkdGg9Yy5taW5XaWR0aD5aZT9jLm1pbldpZHRo'@;
put 'KyJweCI6WmU+Yy5tYXhXaWR0aD9jLm1heFdpZHRoKyJweCI6WmUrInB4IixjLm1pbkhlaWdodD4oaXQ9bC5zY3JvbGxIZWlnaHQ/bC5zY3JvbGxIZWlnaHQtMTowKT9sLnN0eWxlLmhlaWdodD1jLm1pbkhlaWdodCsicHgiOmMubWF4SGVpZ2h0PGl0PyhsLnN0eWxlLmhlaWdodD1jLm1heEhl'@;
put 'aWdodCsicHgiLGwuc3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIik6bC5zdHlsZS5oZWlnaHQ9aXQrInB4In0sVz1mdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KFQsMCl9O2Z1bmN0aW9uIHdlKEVlKXtyZXR1cm4gRWUuY3VycmVudFN0eWxlfHxkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD'@;
put 'b21wdXRlZFN0eWxlKEVlKX1yZXR1cm57aW5pdDpmdW5jdGlvbihFZSxaZSxpdCl7IWZ1bmN0aW9uKEVlLFplLGl0KXtsPUVlLGZ1bmN0aW9uKEVlKXtpZihFZSYmRWUubWluSGVpZ2h0KWlmKCJpbmhlcml0Ij09RWUubWluSGVpZ2h0KWMubWluSGVpZ2h0PWwuY2xpZW50SGVpZ2h0O2Vsc2V7'@;
put 'dmFyIFplPXBhcnNlSW50KEVlLm1pbkhlaWdodCk7aXNOYU4oWmUpfHwoYy5taW5IZWlnaHQ9WmUpfWlmKEVlJiZFZS5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT1FZS5tYXhIZWlnaHQpYy5tYXhIZWlnaHQ9bC5jbGllbnRIZWlnaHQ7ZWxzZXt2YXIgaXQ9cGFyc2VJbnQoRWUubWF4SGVpZ2h0'@;
put 'KTtpc05hTihpdCl8fChjLm1heEhlaWdodD1pdCl9aWYoRWUmJkVlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09RWUubWluV2lkdGgpYy5taW5XaWR0aD1sLmNsaWVudFdpZHRoO2Vsc2V7dmFyIGV0PXBhcnNlSW50KEVlLm1pbldpZHRoKTtpc05hTihldCl8fChjLm1pbldpZHRoPWV0KX1pZihF'@;
put 'ZSYmRWUubWF4V2lkdGgpaWYoImluaGVyaXQiPT1FZS5tYXhXaWR0aCljLm1heFdpZHRoPWwuY2xpZW50V2lkdGg7ZWxzZXt2YXIgeXQ9cGFyc2VJbnQoRWUubWF4V2lkdGgpO2lzTmFOKHl0KXx8KGMubWF4V2lkdGg9eXQpfWguZmlyc3RDaGlsZHx8KGguY2xhc3NOYW1lPSJhdXRvUmVzaXpl'@;
put 'IixoLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsaC5hcHBlbmRDaGlsZChkKSl9KFplKSwiVEVYVEFSRUEiPT1sLm5vZGVOYW1lJiYobC5zdHlsZS5yZXNpemU9Im5vbmUiLGwuc3R5bGUub3ZlcmZsb3dZPSIiLGwuc3R5bGUuaGVpZ2h0PWMubWluSGVpZ2h0KyJweCIsbC5zdHlsZS5t'@;
put 'aW5XaWR0aD1jLm1pbldpZHRoKyJweCIsbC5zdHlsZS5tYXhXaWR0aD1jLm1heFdpZHRoKyJweCIsbC5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLGl0JiYoZihsLCJjaGFuZ2UiLFQpLGYobCwiY3V0IixXKSxmKGwsInBhc3RlIixXKSxmKGwsImRyb3AiLFcpLGYobCwia2V5ZG93biIsVyks'@;
put 'ZihsLCJmb2N1cyIsVCksZihsLCJjb21wb3NpdGlvbnN0YXJ0IixXKSxmKGwsImNvbXBvc2l0aW9udXBkYXRlIixXKSxmKGwsImNvbXBvc2l0aW9uZW5kIixXKSksVCgpfShFZSxaZSxpdCl9LHVuT2JzZXJ2ZTpmdW5jdGlvbigpe18obCwiY2hhbmdlIixUKSxfKGwsImN1dCIsVyksXyhsLCJw'@;
put 'YXN0ZSIsVyksXyhsLCJkcm9wIixXKSxfKGwsImtleWRvd24iLFcpLF8obCwiZm9jdXMiLFQpLF8obCwiY29tcG9zaXRpb25zdGFydCIsVyksXyhsLCJjb21wb3NpdGlvbnVwZGF0ZSIsVyksXyhsLCJjb21wb3NpdGlvbmVuZCIsVyl9LHJlc2l6ZTpUfX1mdW5jdGlvbiBXbmUoYyxsKXtjb25z'@;
put 'dCBhPWhOKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IF89MDtfPGQubGVuZ3RoO18rKyl7MCE9PV8mJihmKz1kW18tMV0ubGVuZ3RoKzEpO2NvbnN0IFc9ZitkW19dLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPVcpLGE8PVcpYnJl'@;
put 'YWt9b3kobCxoKX1UYSh2NyxKRGUpO2NvbnN0IFprPSJodF9lZGl0b3JfaGlkZGVuIixHbmU9InRleHRFZGl0b3IiO2NsYXNzIGtnIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'cj1uZXcgbGwodGhpcyksdGhpcy5hdXRvUmVzaXplPWVMZSgpLHRoaXMuVEVYVEFSRUE9dm9pZCAwLHRoaXMudGV4dGFyZWFTdHlsZT12b2lkIDAsdGhpcy5URVhUQVJFQV9QQVJFTlQ9dm9pZCAwLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT12b2lkIDAsdGhpcy5sYXllckNsYXNzPXZvaWQg'@;
put 'MCx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFs'@;
put 'dWU9bH1vcGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT50'@;
put 'aGlzLm9uQWZ0ZXJEb2N1bWVudEtleURvd24oYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuVEVYVEFSRUEmJnRoaXMuaG90Lmxpc3RlbigpLHRo'@;
put 'aXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYWZ0ZXJEb2N1bWVudEtleURvd24iKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtjb25zdCBUPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYs'@;
put 'XyksIV8ucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpXLGZyYWdtZW50U2VsZWN0aW9uOmllfT1fO1cmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxUIT09V2MuRklOSVNIRUQmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLCFpZSYm'@;
put 'IW0yKCkmJnRoaXMuZm9jdXMoKX19YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PVdjLlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIsc3VwZXIuYmVnaW5FZGl0aW5nKGwsYSkpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSxveSh0aGlzLlRFWFRBUkVBLHRoaXMu'@;
put 'VEVYVEFSRUEudmFsdWUubGVuZ3RoKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRBUkVBPWwuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlz'@;
put 'LlRFWFRBUkVBLnRhYkluZGV4PS0xLHBpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFy'@;
put 'ZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIikscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIiksQm8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYm'@;
put 'V28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxwaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxaayksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFS'@;
put 'RUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7U3RlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNp'@;
put 'YmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixXbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFprKX1zaG93RWRpdGFibGVFbGVt'@;
put 'ZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0Ijoi'@;
put 'cmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiI7Y29uc3QgbD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5vZGVzO2xl'@;
put 'dCBhPSExO3ZvKGwubGVuZ3RoLTEsZD0+e2lmKEJvKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSksQm8odGhpcy5URVhUQVJFQV9QQVJFTlQsWmspJiZXbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxaayksYT8odGhpcy5sYXllckNsYXNzPSJodF9lZGl0b3Jfdmlz'@;
put 'aWJsZSIscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhp'@;
put 'cy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7bGV0IGw9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09V2MuRURJVElORyYmIWwpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQobHx8dGhpcy5jbG9zZSgpKTtjb25z'@;
put 'dHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6XyxtYXhIZWlnaHQ6VH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/InJp'@;
put 'Z2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IFc9enAodGhpcy5URCx0aGlzLmhvdC5yb290V2luZG93KTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPVcuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PVcuZm9u'@;
put 'dEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcjtjb25zdCBpZT16cCh0aGlzLlRFWFRBUkVBKSxwZT1wYXJzZUludChpZS5wYWRkaW5nTGVmdCwxMCkrcGFyc2VJbnQoaWUucGFkZGluZ1JpZ2h0LDEwKSx3ZT1w'@;
put 'YXJzZUludChpZS5wYWRkaW5nVG9wLDEwKStwYXJzZUludChpZS5wYWRkaW5nQm90dG9tLDEwKSxaZT1fLXdlLGl0PWYtcGUsZXQ9VC13ZTt0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihoLXBlLGl0KSxtaW5IZWlnaHQ6TWF0aC5taW4oWmUs'@;
put 'ZXQpLG1heFdpZHRoOml0LG1heEhlaWdodDpldH0sITApfWJpbmRFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuVEVYVEFSRUEsImN1dCIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlz'@;
put 'LlRFWFRBUkVBLCJwYXN0ZSIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksYk4oKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jp'@;
put 'em9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lv'@;
put 'bnMoKSx0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlz'@;
put 'LmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hv'@;
put 'cnRjdXRzKFt7a2V5czpbWyJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiBfLnRhYk1vdmVzP18udGFiTW92ZXMoZik6Xy50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoVC5yb3cs'@;
put 'VC5jb2wsITApfX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiBfLnRhYk1vdmVzP18udGFiTW92ZXMoZik6Xy50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3Jt'@;
put 'U3RhcnQoLVQucm93LC1ULmNvbCl9fSx7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5LHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3Jl'@;
put 'In0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpLHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJh'@;
put 'Y2s6KCk9PihoKCksITEpLHJlbGF0aXZlVG9Hcm91cDpjeSxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQ'@;
put 'YWdlRG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihmLF8pPT57bGV0W1RdPV87V25lKFQsdGhpcy5URVhUQVJFQSl9fSx7a2V5czpb'@;
put 'WyJFbmQiXV0sY2FsbGJhY2s6KGYsXyk9PntsZXRbVF09XztXbmUoVCx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXpl'@;
put 'LnJlc2l6ZSgpfSwxMCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fV0se3J1bk9ubHlJZjooKT0+'@;
put 'S2kodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6R25lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7YS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG1rKSxhLnJlbW92ZVNob3J0Y3V0'@;
put 'c0J5R3JvdXAoR25lKSxhLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR0IpfW9uQWZ0ZXJEb2N1bWVudEtleURvd24obCl7LTE9PT1bY28uQVJST1dfVVAsY28uQVJST1dfUklHSFQsY28uQVJST1dfRE9XTixjby5BUlJPV19MRUZUXS5pbmRleE9mKGwua2V5Q29kZSkmJnRoaXMuYXV0b1Jlc2l6'@;
put 'ZS5yZXNpemUoU3RyaW5nLmZyb21DaGFyQ29kZShsLmtleUNvZGUpKX19ZnVuY3Rpb24gTXkoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1bXSxXPVtdO18uY2xhc3NOYW1lJiZwaShsLF8uY2xhc3NOYW1lKSxfLnJlYWRPbmx5JiZULnB1c2goXy5yZWFkT25seUNlbGxDbGFzc05hbWUpLCExPT09'@;
put 'Xy52YWxpZCYmXy5pbnZhbGlkQ2VsbENsYXNzTmFtZT9ULnB1c2goXy5pbnZhbGlkQ2VsbENsYXNzTmFtZSk6Vy5wdXNoKF8uaW52YWxpZENlbGxDbGFzc05hbWUpLCExPT09Xy53b3JkV3JhcCYmXy5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZULnB1c2goXy5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwh'@;
put 'ZiYmXy5wbGFjZWhvbGRlciYmVC5wdXNoKF8ucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxXbyhsLFcpLHBpKGwsVCl9ZnVuY3Rpb24gJHAoYyxsLGEsZCxoLGYsXyl7TXkuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pO2xldCBUPWY7aWYoIVQmJl8ucGxhY2Vob2xkZXImJihUPV8ucGxh'@;
put 'Y2Vob2xkZXIpLFQ9X2woVCksXy50cmltV2hpdGVzcGFjZSYmKFQ9VC50cmltKCkpLF8ucmVuZGVyZXJUZW1wbGF0ZSl7ZzIobCk7Y29uc3QgVz1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURU1QTEFURSIpO1cuc2V0QXR0cmlidXRlKCJiaW5kIiwie3t9fSIpLFcuaW5uZXJIVE1M'@;
put 'PV8ucmVuZGVyZXJUZW1wbGF0ZSxIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKFcpLFcubW9kZWw9Yy5nZXRTb3VyY2VEYXRhQXRSb3coYSksbC5hcHBlbmRDaGlsZChXKX1lbHNlIGpwKGwsVCl9TXkuUkVOREVSRVJfVFlQRT0iYmFzZSIsJHAuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29u'@;
put 'c3QgJG5lPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjprZyxyZW5kZXJlcjokcH07ZnVuY3Rpb24geTIoYyxsKXtjb25zdCBhPW5ldyBXQihjLGx8fHt9LG5WKTtyZXR1cm4gYS5pbml0KCksYX1iMigkbmUpLHkyLmVkaXRvcnM9e0Jhc2VFZGl0b3I6djd9LHkyLkNvcmU9ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIG5ldyBXQihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuVil9LHkyLkRlZmF1bHRTZXR0aW5ncz1ObmUoKSx5Mi5ob29rcz1zby5nZXRTaW5nbGV0b24oKSx5Mi5DZWxsQ29vcmRzPVNrLHkyLkNlbGxSYW5nZT1aTix5'@;
put 'Mi5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIix5Mi5idWlsZERhdGU9IjMxLzA4LzIwMjMgMDg6MjM6MzMiLHkyLnZlcnNpb249IjEzLjEuMCIseTIubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czpVVGUsZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OkxuZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJp'@;
put 'ZXM6ZnVuY3Rpb24gJFRlKCl7cmV0dXJuIFdUZSgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTpEbmUsZ2V0VHJhbnNsYXRlZFBocmFzZTpJbmV9O2NvbnN0IG1zPXkyLG9MZT1bImNvbnRhaW5lciJdLCRCPW5ldyBNYXAscW5lPSJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5k'@;
put 'IHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiI7bGV0IEFnPSgoKT0+e2NsYXNzIGN7Z2V0SW5zdGFuY2UoYSl7Y29uc3QgZD0kQi5nZXQoYSk7cmV0dXJuIGQuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2FybihxbmUpLG51bGwpOmR9'@;
put 'cmVnaXN0ZXJJbnN0YW5jZShhLGQpe3JldHVybiAkQi5zZXQoYSxkKX1yZW1vdmVJbnN0YW5jZShhKXtyZXR1cm4gJEIuZGVsZXRlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWN9KSxjfSkoKTtjb25zdCBzTGU9T2JqZWN0LmtleXMobXMuRGVmYXVsdFNldHRpbmdzKSxLbmU9bXMuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBYbmU9KCgpPT57Y2xhc3MgY3ttZXJnZVNldHRpbmdzKGEpe2NvbnN0IGQ9InNldHRpbmdzImluIGEmJiJvYmplY3QiPT10eXBl'@;
put 'b2YgYS5zZXR0aW5ncyxoPWQ/YS5zZXR0aW5nczp7fTtyZXR1cm4gS25lLmNvbmNhdChzTGUpLmZvckVhY2goXz0+e2NvbnN0IFQ9S25lLmluZGV4T2YoXyk+LTE7bGV0IFc7ZCYmVCYmKFc9YS5zZXR0aW5nc1tfXSksdm9pZCAwIT09YVtfXSYmKFc9YVtfXSksdm9pZCAwIT09VyYmKGhbX109'@;
put 'Im5nWm9uZSJpbiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVD9mdW5jdGlvbiguLi5pZSl7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+Vy5hcHBseSh0aGlzLGllKSl9OlcpfSksaH1wcmVwYXJlQ2hhbmdlcyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9'@;
put 'PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9KSxkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4eT0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXI9YSx0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLl9faG90SW5zdGFuY2U9bnVsbCx0aGlzLmNvbHVtbnNDb21wb25lbnRzPVtdLHRoaXMuaG90SWQ9IiJ9Z2V0IGhv'@;
put 'dEluc3RhbmNlKCl7cmV0dXJuIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZToodGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpLGNv'@;
put 'bnNvbGUud2FybihxbmUpLG51bGwpfXNldCBob3RJbnN0YW5jZShhKXt0aGlzLl9faG90SW5zdGFuY2U9YX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyh0aGlzKTtpZih0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0'@;
put 'aD4wKXtjb25zdCBkPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57ZC5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSxhLmNvbHVtbnM9ZH10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFu'@;
put 'Y2U9bmV3IG1zLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVnaXN0ZXJJbnN0YW5jZSh0aGlzLmhvdElkLHRoaXMuaG90SW5zdGFuY2UpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSl9bmdPbkNoYW5n'@;
put 'ZXMoYSl7aWYobnVsbD09PXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuO2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5wcmVwYXJlQ2hhbmdlcyhhKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0'@;
put 'aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKX11cGRhdGVIb3RUYWJsZShhKXt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLm5nWm9uZS5ydW5PdXRz'@;
put 'aWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1vbkFmdGVyQ29sdW1uc0NoYW5nZSgpe2lmKHZvaWQgMCE9PXRoaXMuY29sdW1uc0NvbXBvbmVudHMmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGE9W107dGhpcy5j'@;
put 'b2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGg9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfX1vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpe2NvbnN0IGE9W107dGhpcy5jb2x1'@;
put 'bW5zQ29tcG9uZW50cy5sZW5ndGg+MCYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfWFkZENvbHVtbihhKXt0aGlzLmNv'@;
put 'bHVtbnNDb21wb25lbnRzLnB1c2goYSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXJlbW92ZUNvbHVtbihhKXtjb25zdCBkPXRoaXMuY29sdW1uc0NvbXBvbmVudHMuaW5kZXhPZihhKTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnNwbGljZShkLDEpLHRoaXMub25BZnRlckNv'@;
put 'bHVtbnNOdW1iZXJDaGFuZ2UoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWcpLHR0KFhuZSksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQp'@;
put 'e2lmKDEmYSYmUm8ob0xlLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuY29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6'@;
put 'ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFsaWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNv'@;
put 'bHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhdXRvQ29sdW1uU2l6ZToiYXV0b0NvbHVtblNpemUiLGF1dG9Sb3dTaXplOiJhdXRvUm93U2l6ZSIsYXV0b1dyYXBDb2w6ImF1dG9XcmFwQ29sIixhdXRvV3JhcFJvdzoiYXV0b1dyYXBSb3ciLGJpbmRSb3dzV2l0aEhlYWRl'@;
put 'cnM6ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGNlbGw6ImNlbGwiLGNlbGxzOiJjZWxscyIsY2hlY2tlZFRlbXBsYXRlOiJjaGVja2VkVGVtcGxhdGUiLGNsYXNzTmFtZToiY2xhc3NOYW1lIixjb2xIZWFkZXJzOiJjb2xIZWFkZXJzIixjb2xsYXBzaWJsZUNvbHVtbnM6ImNvbGxhcHNpYmxlQ29s'@;
put 'dW1ucyIsY29sdW1uSGVhZGVySGVpZ2h0OiJjb2x1bW5IZWFkZXJIZWlnaHQiLGNvbHVtbnM6ImNvbHVtbnMiLGNvbHVtblNvcnRpbmc6ImNvbHVtblNvcnRpbmciLGNvbHVtblN1bW1hcnk6ImNvbHVtblN1bW1hcnkiLGNvbFdpZHRoczoiY29sV2lkdGhzIixjb21tZW50ZWRDZWxsQ2xhc3NO'@;
put 'YW1lOiJjb21tZW50ZWRDZWxsQ2xhc3NOYW1lIixjb21tZW50czoiY29tbWVudHMiLGNvbnRleHRNZW51OiJjb250ZXh0TWVudSIsY29weWFibGU6ImNvcHlhYmxlIixjb3B5UGFzdGU6ImNvcHlQYXN0ZSIsY29ycmVjdEZvcm1hdDoiY29ycmVjdEZvcm1hdCIsY3VycmVudENvbENsYXNzTmFt'@;
put 'ZToiY3VycmVudENvbENsYXNzTmFtZSIsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VycmVudEhlYWRlckNsYXNzTmFtZSIsY3VycmVudFJvd0NsYXNzTmFtZToiY3VycmVudFJvd0NsYXNzTmFtZSIsY3VzdG9tQm9yZGVyczoiY3VzdG9tQm9yZGVycyIsZGF0YToiZGF0YSIsZGF0YVNjaGVt'@;
put 'YToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIixkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJkaXNhYmxlVmlzdWFsU2VsZWN0aW9uIixkcmFnVG9TY3JvbGw6ImRy'@;
put 'YWdUb1Njcm9sbCIsZHJvcGRvd25NZW51OiJkcm9wZG93bk1lbnUiLGVkaXRvcjoiZWRpdG9yIixlbnRlckJlZ2luc0VkaXRpbmc6ImVudGVyQmVnaW5zRWRpdGluZyIsZW50ZXJNb3ZlczoiZW50ZXJNb3ZlcyIsZmlsbEhhbmRsZToiZmlsbEhhbmRsZSIsZmlsdGVyOiJmaWx0ZXIiLGZpbHRl'@;
put 'cmluZ0Nhc2VTZW5zaXRpdmU6ImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLGZpbHRlcnM6ImZpbHRlcnMiLGZpeGVkQ29sdW1uc0xlZnQ6ImZpeGVkQ29sdW1uc0xlZnQiLGZpeGVkQ29sdW1uc1N0YXJ0OiJmaXhlZENvbHVtbnNTdGFydCIsZml4ZWRSb3dzQm90dG9tOiJmaXhlZFJvd3NCb3R0'@;
put 'b20iLGZpeGVkUm93c1RvcDoiZml4ZWRSb3dzVG9wIixmb3JtdWxhczoiZm9ybXVsYXMiLGZyYWdtZW50U2VsZWN0aW9uOiJmcmFnbWVudFNlbGVjdGlvbiIsaGVpZ2h0OiJoZWlnaHQiLGhpZGRlbkNvbHVtbnM6ImhpZGRlbkNvbHVtbnMiLGhpZGRlblJvd3M6ImhpZGRlblJvd3MiLGludmFs'@;
put 'aWRDZWxsQ2xhc3NOYW1lOiJpbnZhbGlkQ2VsbENsYXNzTmFtZSIsbGFiZWw6ImxhYmVsIixsYW5ndWFnZToibGFuZ3VhZ2UiLGxheW91dERpcmVjdGlvbjoibGF5b3V0RGlyZWN0aW9uIixsaWNlbnNlS2V5OiJsaWNlbnNlS2V5Iixsb2NhbGU6ImxvY2FsZSIsbWFudWFsQ29sdW1uRnJlZXpl'@;
put 'OiJtYW51YWxDb2x1bW5GcmVlemUiLG1hbnVhbENvbHVtbk1vdmU6Im1hbnVhbENvbHVtbk1vdmUiLG1hbnVhbENvbHVtblJlc2l6ZToibWFudWFsQ29sdW1uUmVzaXplIixtYW51YWxSb3dNb3ZlOiJtYW51YWxSb3dNb3ZlIixtYW51YWxSb3dSZXNpemU6Im1hbnVhbFJvd1Jlc2l6ZSIsbWF4'@;
put 'Q29sczoibWF4Q29scyIsbWF4Um93czoibWF4Um93cyIsbWVyZ2VDZWxsczoibWVyZ2VDZWxscyIsbWluQ29sczoibWluQ29scyIsbWluUm93czoibWluUm93cyIsbWluU3BhcmVDb2xzOiJtaW5TcGFyZUNvbHMiLG1pblNwYXJlUm93czoibWluU3BhcmVSb3dzIixtdWx0aUNvbHVtblNvcnRp'@;
put 'bmc6Im11bHRpQ29sdW1uU29ydGluZyIsbmVzdGVkSGVhZGVyczoibmVzdGVkSGVhZGVycyIsbmVzdGVkUm93czoibmVzdGVkUm93cyIsbm9Xb3JkV3JhcENsYXNzTmFtZToibm9Xb3JkV3JhcENsYXNzTmFtZSIsbnVtZXJpY0Zvcm1hdDoibnVtZXJpY0Zvcm1hdCIsb2JzZXJ2ZURPTVZpc2li'@;
put 'aWxpdHk6Im9ic2VydmVET01WaXNpYmlsaXR5IixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6Im91dHNpZGVDbGlja0Rlc2VsZWN0cyIscGVyc2lzdGVudFN0YXRlOiJwZXJzaXN0ZW50U3RhdGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJwbGFj'@;
put 'ZWhvbGRlckNlbGxDbGFzc05hbWUiLHByZXZlbnRPdmVyZmxvdzoicHJldmVudE92ZXJmbG93IixwcmV2ZW50V2hlZWw6InByZXZlbnRXaGVlbCIscmVhZE9ubHk6InJlYWRPbmx5IixyZWFkT25seUNlbGxDbGFzc05hbWU6InJlYWRPbmx5Q2VsbENsYXNzTmFtZSIscmVuZGVyQWxsUm93czoi'@;
put 'cmVuZGVyQWxsUm93cyIscmVuZGVyZXI6InJlbmRlcmVyIixyb3dIZWFkZXJzOiJyb3dIZWFkZXJzIixyb3dIZWFkZXJXaWR0aDoicm93SGVhZGVyV2lkdGgiLHJvd0hlaWdodHM6InJvd0hlaWdodHMiLHNlYXJjaDoic2VhcmNoIixzZWxlY3Rpb25Nb2RlOiJzZWxlY3Rpb25Nb2RlIixzZWxl'@;
put 'Y3RPcHRpb25zOiJzZWxlY3RPcHRpb25zIixza2lwQ29sdW1uT25QYXN0ZToic2tpcENvbHVtbk9uUGFzdGUiLHNraXBSb3dPblBhc3RlOiJza2lwUm93T25QYXN0ZSIsc29ydEJ5UmVsZXZhbmNlOiJzb3J0QnlSZWxldmFuY2UiLHNvdXJjZToic291cmNlIixzdGFydENvbHM6InN0YXJ0Q29s'@;
put 'cyIsc3RhcnRSb3dzOiJzdGFydFJvd3MiLHN0cmV0Y2hIOiJzdHJldGNoSCIsc3RyaWN0OiJzdHJpY3QiLHRhYmxlQ2xhc3NOYW1lOiJ0YWJsZUNsYXNzTmFtZSIsdGFiTW92ZXM6InRhYk1vdmVzIix0aXRsZToidGl0bGUiLHRyaW1Ecm9wZG93bjoidHJpbURyb3Bkb3duIix0cmltUm93czoi'@;
put 'dHJpbVJvd3MiLHRyaW1XaGl0ZXNwYWNlOiJ0cmltV2hpdGVzcGFjZSIsdHlwZToidHlwZSIsdW5jaGVja2VkVGVtcGxhdGU6InVuY2hlY2tlZFRlbXBsYXRlIix1bmRvOiJ1bmRvIix2YWxpZGF0b3I6InZhbGlkYXRvciIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0'@;
put 'Q29sdW1uUmVuZGVyaW5nT2Zmc2V0Iix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLHZpc2libGVSb3dzOiJ2aXNpYmxlUm93cyIsd2lkdGg6IndpZHRoIix3b3JkV3JhcDoid29yZFdyYXAiLGFmdGVyQWRkQ2hpbGQ6ImFmdGVyQWRkQ2hp'@;
put 'bGQiLGFmdGVyQXV0b2ZpbGw6ImFmdGVyQXV0b2ZpbGwiLGFmdGVyQmVnaW5FZGl0aW5nOiJhZnRlckJlZ2luRWRpdGluZyIsYWZ0ZXJDZWxsTWV0YVJlc2V0OiJhZnRlckNlbGxNZXRhUmVzZXQiLGFmdGVyQ2hhbmdlOiJhZnRlckNoYW5nZSIsYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ6ImFmdGVy'@;
put 'Q2hhbmdlc09ic2VydmVkIixhZnRlckNvbHVtbkNvbGxhcHNlOiJhZnRlckNvbHVtbkNvbGxhcHNlIixhZnRlckNvbHVtbkV4cGFuZDoiYWZ0ZXJDb2x1bW5FeHBhbmQiLGFmdGVyQ29sdW1uRnJlZXplOiJhZnRlckNvbHVtbkZyZWV6ZSIsYWZ0ZXJDb2x1bW5Nb3ZlOiJhZnRlckNvbHVtbk1v'@;
put 'dmUiLGFmdGVyQ29sdW1uUmVzaXplOiJhZnRlckNvbHVtblJlc2l6ZSIsYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZToiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJDb2x1bW5Tb3J0OiJhZnRlckNvbHVtblNvcnQiLGFmdGVyQ29sdW1uVW5mcmVlemU6ImFmdGVyQ29sdW1uVW5m'@;
put 'cmVlemUiLGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhZnRlckNvbnRleHRNZW51SGlkZToiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLGFmdGVyQ29udGV4dE1lbnVTaG93OiJhZnRlckNvbnRleHRNZW51U2hvdyIsYWZ0ZXJD'@;
put 'b3B5OiJhZnRlckNvcHkiLGFmdGVyQ29weUxpbWl0OiJhZnRlckNvcHlMaW1pdCIsYWZ0ZXJDcmVhdGVDb2w6ImFmdGVyQ3JlYXRlQ29sIixhZnRlckNyZWF0ZVJvdzoiYWZ0ZXJDcmVhdGVSb3ciLGFmdGVyQ3V0OiJhZnRlckN1dCIsYWZ0ZXJEZXNlbGVjdDoiYWZ0ZXJEZXNlbGVjdCIsYWZ0'@;
put 'ZXJEZXN0cm95OiJhZnRlckRlc3Ryb3kiLGFmdGVyRGV0YWNoQ2hpbGQ6ImFmdGVyRGV0YWNoQ2hpbGQiLGFmdGVyRG9jdW1lbnRLZXlEb3duOiJhZnRlckRvY3VtZW50S2V5RG93biIsYWZ0ZXJEcmF3U2VsZWN0aW9uOiJhZnRlckRyYXdTZWxlY3Rpb24iLGFmdGVyRHJvcGRvd25NZW51RGVm'@;
put 'YXVsdE9wdGlvbnM6ImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyRHJvcGRvd25NZW51SGlkZToiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIixhZnRlckRyb3Bkb3duTWVudVNob3c6ImFmdGVyRHJvcGRvd25NZW51U2hvdyIsYWZ0ZXJGaWx0ZXI6ImFmdGVyRmlsdGVyIixh'@;
put 'ZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlOiJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixhZnRlckdldENlbGxNZXRhOiJhZnRlckdldENlbGxNZXRhIixhZnRlckdldENvbEhlYWRlcjoiYWZ0ZXJHZXRDb2xIZWFkZXIiLGFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzOiJhZnRlckdl'@;
put 'dENvbHVtbkhlYWRlclJlbmRlcmVycyIsYWZ0ZXJHZXRSb3dIZWFkZXI6ImFmdGVyR2V0Um93SGVhZGVyIixhZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGFmdGVySGlkZUNvbHVtbnM6ImFmdGVySGlkZUNvbHVtbnMiLGFmdGVySGlkZVJv'@;
put 'd3M6ImFmdGVySGlkZVJvd3MiLGFmdGVySW5pdDoiYWZ0ZXJJbml0IixhZnRlckxhbmd1YWdlQ2hhbmdlOiJhZnRlckxhbmd1YWdlQ2hhbmdlIixhZnRlckxpc3RlbjoiYWZ0ZXJMaXN0ZW4iLGFmdGVyTG9hZERhdGE6ImFmdGVyTG9hZERhdGEiLGFmdGVyTWVyZ2VDZWxsczoiYWZ0ZXJNZXJn'@;
put 'ZUNlbGxzIixhZnRlck1vZGlmeVRyYW5zZm9ybUVuZDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGFmdGVyTW9tZW50dW1TY3JvbGw6ImFmdGVyTW9tZW50dW1TY3JvbGwiLGFmdGVyTmFtZWRF'@;
put 'eHByZXNzaW9uQWRkZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixhZnRlck9uQ2VsbENvbnRleHRNZW51OiJhZnRlck9uQ2VsbENvbnRleHRNZW51IixhZnRlck9uQ2VsbENvcm5l'@;
put 'ckRibENsaWNrOiJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VEb3duOiJhZnRlck9uQ2VsbE1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZU91dDoiYWZ0ZXJP'@;
put 'bkNlbGxNb3VzZU91dCIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6ImFmdGVyT25DZWxsTW91c2VPdmVyIixhZnRlck9uQ2VsbE1vdXNlVXA6ImFmdGVyT25DZWxsTW91c2VVcCIsYWZ0ZXJQYXN0ZToiYWZ0ZXJQYXN0ZSIsYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ6ImFmdGVyUGx1Z2luc0luaXRp'@;
put 'YWxpemVkIixhZnRlclJlZG86ImFmdGVyUmVkbyIsYWZ0ZXJSZWRvU3RhY2tDaGFuZ2U6ImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixhZnRlclJlZnJlc2hEaW1lbnNpb25zOiJhZnRlclJlZnJlc2hEaW1lbnNpb25zIixhZnRlclJlbW92ZUNlbGxNZXRhOiJhZnRlclJlbW92ZUNlbGxNZXRhIixh'@;
put 'ZnRlclJlbW92ZUNvbDoiYWZ0ZXJSZW1vdmVDb2wiLGFmdGVyUmVtb3ZlUm93OiJhZnRlclJlbW92ZVJvdyIsYWZ0ZXJSZW5kZXI6ImFmdGVyUmVuZGVyIixhZnRlclJlbmRlcmVyOiJhZnRlclJlbmRlcmVyIixhZnRlclJvd01vdmU6ImFmdGVyUm93TW92ZSIsYWZ0ZXJSb3dSZXNpemU6ImFm'@;
put 'dGVyUm93UmVzaXplIixhZnRlclJvd1NlcXVlbmNlQ2hhbmdlOiJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixhZnRlclNjcm9sbEhvcml6b250YWxseToiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGFmdGVyU2Nyb2xsVmVydGljYWxseToiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixhZnRlclNl'@;
put 'bGVjdGlvbjoiYWZ0ZXJTZWxlY3Rpb24iLGFmdGVyU2VsZWN0aW9uQnlQcm9wOiJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25FbmQ6ImFmdGVyU2VsZWN0aW9uRW5kIixhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGFmdGVyU2V0'@;
put 'Q2VsbE1ldGE6ImFmdGVyU2V0Q2VsbE1ldGEiLGFmdGVyU2V0RGF0YUF0Q2VsbDoiYWZ0ZXJTZXREYXRhQXRDZWxsIixhZnRlclNldERhdGFBdFJvd1Byb3A6ImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsOiJhZnRlclNldFNvdXJjZURhdGFBdENlbGwi'@;
put 'LGFmdGVyU2hlZXRBZGRlZDoiYWZ0ZXJTaGVldEFkZGVkIixhZnRlclNoZWV0UmVuYW1lZDoiYWZ0ZXJTaGVldFJlbmFtZWQiLGFmdGVyU2hlZXRSZW1vdmVkOiJhZnRlclNoZWV0UmVtb3ZlZCIsYWZ0ZXJUcmltUm93OiJhZnRlclRyaW1Sb3ciLGFmdGVyVW5kbzoiYWZ0ZXJVbmRvIixhZnRl'@;
put 'clVuZG9TdGFja0NoYW5nZToiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGFmdGVyVW5oaWRlQ29sdW1uczoiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhZnRlclVuaGlkZVJvd3M6ImFmdGVyVW5oaWRlUm93cyIsYWZ0ZXJVbmxpc3RlbjoiYWZ0ZXJVbmxpc3RlbiIsYWZ0ZXJVbm1lcmdlQ2VsbHM6ImFm'@;
put 'dGVyVW5tZXJnZUNlbGxzIixhZnRlclVudHJpbVJvdzoiYWZ0ZXJVbnRyaW1Sb3ciLGFmdGVyVXBkYXRlRGF0YToiYWZ0ZXJVcGRhdGVEYXRhIixhZnRlclVwZGF0ZVNldHRpbmdzOiJhZnRlclVwZGF0ZVNldHRpbmdzIixhZnRlclZhbGlkYXRlOiJhZnRlclZhbGlkYXRlIixhZnRlclZpZXdw'@;
put 'b3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdSZW5kZXI6ImFmdGVyVmll'@;
put 'd1JlbmRlciIsYmVmb3JlQWRkQ2hpbGQ6ImJlZm9yZUFkZENoaWxkIixiZWZvcmVBdXRvZmlsbDoiYmVmb3JlQXV0b2ZpbGwiLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJlZm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJl'@;
put 'Zm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJlZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9y'@;
put 'ZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9y'@;
put 'ZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9y'@;
put 'ZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1l'@;
put 'bnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93'@;
put 'cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29u'@;
put 'dGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdl'@;
put 'Q2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VP'@;
put 'dmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2Ui'@;
put 'LGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNv'@;
put 'bDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZv'@;
put 'cmVSb3dSZXNpemUiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0'@;
put 'UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8i'@;
put 'LGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIs'@;
put 'YmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3UmVuZGVyOiJiZWZvcmVW'@;
put 'aWV3UmVuZGVyIixjb25zdHJ1Y3Q6ImNvbnN0cnVjdCIsaW5pdDoiaW5pdCIsbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkOiJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLG1vZGlmeUF1dG9maWxsUmFuZ2U6Im1vZGlmeUF1dG9maWxsUmFuZ2UiLG1vZGlmeUNvbEhlYWRlcjoibW9kaWZ5Q29s'@;
put 'SGVhZGVyIixtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ6Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU6Im1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixtb2RpZnlDb2xXaWR0aDoibW9kaWZ5Q29sV2lkdGgiLG1vZGlmeUNvcHlhYmxlUmFuZ2U6Im1v'@;
put 'ZGlmeUNvcHlhYmxlUmFuZ2UiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUdldENlbGxDb29yZHM6Im1vZGlmeUdldENlbGxDb29yZHMiLG1vZGlmeVJvd0RhdGE6Im1vZGlmeVJvd0RhdGEiLG1vZGlmeVJvd0hlYWRlcjoibW9kaWZ5Um93SGVhZGVyIixtb2RpZnlSb3dIZWFkZXJX'@;
put 'aWR0aDoibW9kaWZ5Um93SGVhZGVyV2lkdGgiLG1vZGlmeVJvd0hlaWdodDoibW9kaWZ5Um93SGVpZ2h0Iixtb2RpZnlTb3VyY2VEYXRhOiJtb2RpZnlTb3VyY2VEYXRhIixtb2RpZnlUcmFuc2Zvcm1FbmQ6Im1vZGlmeVRyYW5zZm9ybUVuZCIsbW9kaWZ5VHJhbnNmb3JtU3RhcnQ6Im1vZGlm'@;
put 'eVRyYW5zZm9ybVN0YXJ0IixwZXJzaXN0ZW50U3RhdGVMb2FkOiJwZXJzaXN0ZW50U3RhdGVMb2FkIixwZXJzaXN0ZW50U3RhdGVSZXNldDoicGVyc2lzdGVudFN0YXRlUmVzZXQiLHBlcnNpc3RlbnRTdGF0ZVNhdmU6InBlcnNpc3RlbnRTdGF0ZVNhdmUifSxmZWF0dXJlczpbdGkoW0FnLFhu'@;
put 'ZV0pLHZhXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJpZCJdLFsiY29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJkaXYiLDAsMSksMiZhJiZSZSgiaWQiLGQuaG90SWQpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfNz0oKCk9PntjbGFzcyBj'@;
put 'e3N0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOltBZ119fX1yZXR1cm4gYy52ZXJzaW9uPSIxMy4xLjAiLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSks'@;
put 'Y30pKCk7Y29uc3QgSm5lPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIHFCIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5kZXN0cm95KCksIm5v'@;
put 'bmUiPT09dGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5JiYodGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0RWRpdG9yLmluaXQo'@;
put 'KSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKSxveSh0aGlzLlRFWFRBUkVBLDAsdGhpcy5URVhUQVJFQS52'@;
put 'YWx1ZS5sZW5ndGgpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXBy'@;
put 'ZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pO2NvbnN0IFQ9dGhpcyxXPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dT'@;
put 'aXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYWZ0ZXJPbkNlbGxNb3VzZURvd24oaWUscGUpe2NvbnN0IHdlPXRoaXMuZ2V0U291cmNlRGF0YShwZS5yb3cscGUuY29sKTt2b2lkIDAhPT13ZSYmVC5zZXRWYWx1ZSh3ZSksVC5p'@;
put 'bnN0YW5jZS5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJlhsKFcsXy5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPVd9YmVnaW5F'@;
put 'ZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQu'@;
put 'Y3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9y'@;
put 'JiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRW'@;
put 'YWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5n'@;
put 'ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsXyk9Pntjb25zdCBUPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtpZih2b2lkIDAhPT1mJiYoZjwwfHxULmZsaXBwZWQmJmY+VC5jb3VudFJvd3Mo'@;
put 'KS0xP1QuZGVzZWxlY3RDZWxsKCk6VC5zZWxlY3RDZWxsKGYsMCksVC5nZXREYXRhKCkubGVuZ3RoKSlyZXR1cm4gXy5wcmV2ZW50RGVmYXVsdCgpLHYyKF8pLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuVEVYVEFSRUEuZm9jdXMoKSwhMX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93'@;
put 'VXAiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xldCBULFc7cmV0dXJuIV8uZ2V0U2VsZWN0ZWRMYXN0KCkmJl8uZmxpcHBlZD9UPV8uY291bnRSb3dzKCktMTpfLmdldFNlbGVjdGVkTGFzdCgpJiYoXy5mbGlwcGVkPyhXPV8uZ2V0U2VsZWN0'@;
put 'ZWRMYXN0KClbMF0sVD1NYXRoLm1heCgwLFctMSkpOihXPV8uZ2V0U2VsZWN0ZWRMYXN0KClbMF0sVD1XLTEpKSxoKFQsZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IF89dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xl'@;
put 'dCBULFc7aWYoXy5nZXRTZWxlY3RlZExhc3QoKXx8Xy5mbGlwcGVkKXtpZihfLmdldFNlbGVjdGVkTGFzdCgpKWlmKF8uZmxpcHBlZClUPV8uZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCFfLmZsaXBwZWQpe2NvbnN0IGllPV8uY291bnRSb3dzKCktMTtXPV8uZ2V0U2VsZWN0ZWRM'@;
put 'YXN0KClbMF0sVD1NYXRoLm1pbihpZSxXKzEpfX1lbHNlIFQ9MDtyZXR1cm4gaChULGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpKbmUscmVsYXRpdmVUb0dyb3VwOm1rLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEpuZSl9fWNvbnN0IEtCPW5ldyBXZWFrTWFwO2NsYXNzIFhCIGV4dGVuZHMgcUJ7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRv'@;
put 'Y29tcGxldGUifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGxMZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gY0xlKGMpe3ZhciBsPWZ1bmN0aW9uIHVMZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt'@;
put 'aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci'@;
put 'PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfSh0aGlzLCJzb3J0QnlSZWxldmFuY2UiLGZ1bmN0aW9uKGEsZCxoKXtjb25zdCBmPVtdLF89W10sVD1hLmxlbmd0aDtsZXQgaWUscGUsd2UsRWUsVz1kLmxlbmd0aDtpZigwPT09VCl7Zm9yKHdlPTA7d2U8Vzt3ZSsrKV8ucHVzaCh3ZSk7cmV0dXJuIF99Zm9yKHdlPTA7d2U8Vzt3'@;
put 'ZSsrKXtpZihwZT11TihfbChkW3dlXSkpLGgpRWU9cGUuaW5kZXhPZihhKTtlbHNle2NvbnN0IFplPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO0VlPXBlLnRvTG9jYWxlTG93ZXJDYXNlKFplKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoWmUpKX0tMSE9PUVlJiYoaWU9cGUubGVu'@;
put 'Z3RoLUVlLVQsZi5wdXNoKHtiYXNlSW5kZXg6d2UsaW5kZXg6RWUsY2hhcnNMZWZ0OmllLHZhbHVlOnBlfSkpfWZvcihmLnNvcnQoKFplLGl0KT0+e2lmKC0xPT09aXQuaW5kZXgpcmV0dXJuLTE7aWYoLTE9PT1aZS5pbmRleClyZXR1cm4gMTtpZihaZS5pbmRleDxpdC5pbmRleClyZXR1cm4t'@;
put 'MTtpZihpdC5pbmRleDxaZS5pbmRleClyZXR1cm4gMTtpZihaZS5pbmRleD09PWl0LmluZGV4KXtpZihaZS5jaGFyc0xlZnQ8aXQuY2hhcnNMZWZ0KXJldHVybi0xO2lmKFplLmNoYXJzTGVmdD5pdC5jaGFyc0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSx3ZT0wLFc9Zi5sZW5ndGg7d2U8Vzt3'@;
put 'ZSsrKV8ucHVzaChmW3dlXS5iYXNlSW5kZXgpO3JldHVybiBffSksdGhpcy5xdWVyeT1udWxsLHRoaXMuc3RyaXBwZWRDaG9pY2VzPVtdLHRoaXMucmF3Q2hvaWNlcz1bXSxLQi5zZXQodGhpcyx7c2tpcE9uZTohMSxpc01hY09TOnRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRm'@;
put 'b3JtLmluZGV4T2YoIk1hYyIpPi0xfSl9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpPT09dGhpcy5URVhUQVJFQS52YWx1ZSk7cmV0dXJuIEtpKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50'@;
put 'cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCkscGkodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIikscGkodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIp'@;
put 'fW9wZW4oKXtjb25zdCBsPUtCLmdldCh0aGlzKTtzdXBlci5vcGVuKCk7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCksZD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bnx8dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247dGhpcy5zaG93'@;
put 'RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpO2xldCBoPUljKCk7MD09PWgmJmwuaXNNYWNPUyYmKGgrPTE1KSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLGY9PnRoaXMub25CZWZvcmVLZXlEb3duKGYpKSxhLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6ZD9bd2EodGhpcy5U'@;
put 'RVhUQVJFQSktMl06dm9pZCAwLHdpZHRoOmQ/d2EodGhpcy5URVhUQVJFQSkraDp2b2lkIDAscmVuZGVyZXI6KGYsXyxULFcsaWUscGUsd2UpPT57JHAoZixfLFQsVyxpZSxwZSx3ZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpFZSxhbGxvd0h0bWw6WmUsbG9jYWxlOml0fT10aGlz'@;
put 'LmNlbGxQcm9wZXJ0aWVzLGV0PXRoaXMucXVlcnk7bGV0IEV0LFN0LHl0PV9sKHBlKTt5dCYmIVplJiYoRXQ9ITA9PT1FZT95dC5pbmRleE9mKGV0KTp5dC50b0xvY2FsZUxvd2VyQ2FzZShpdCkuaW5kZXhPZihldC50b0xvY2FsZUxvd2VyQ2FzZShpdCkpLC0xIT09RXQmJihTdD15dC5zdWJz'@;
put 'dHIoRXQsZXQubGVuZ3RoKSx5dD15dC5yZXBsYWNlKFN0LGA8c3Ryb25nPiR7U3R9PC9zdHJvbmc+YCkpKSxfLmlubmVySFRNTD15dH0sYXV0b0NvbHVtblNpemU6ITB9KSxsLnNraXBPbmUmJihsLnNraXBPbmU9ITEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5'@;
put 'Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0pfWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRpc2NhcmRFZGl0b3IobCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2lj'@;
put 'ZXMobCl7Y29uc3QgYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTt0aGlzLnF1ZXJ5PWwsImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsbCxkPT57dGhpcy5yYXdDaG9pY2VzPWQsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVz'@;
put 'SWZOZWVkZWQoZCkpfSk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5yYXdDaG9pY2VzPWEsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoYSkpKTp0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KFtdKX11cGRhdGVDaG9pY2VzTGlzdChsKXtjb25zdCBhPWhOKHRo'@;
put 'aXMuVEVYVEFSRUEpLGQ9dXRlKHRoaXMuVEVYVEFSRUEpLGg9dGhpcy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2UsZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcjtsZXQgXz1udWxsLFQ9bnVsbCxXPWw7aCYmKF89dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVl'@;
put 'SWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxXLHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSkpO2NvbnN0IGllPUFycmF5LmlzQXJyYXkoXyk/Xy5sZW5ndGg6MDtpZighMT09PWYpaWUmJihUPV9bMF0pO2Vsc2V7Y29uc3QgcGU9W107Zm9yKGxldCB3ZT0wLEVl'@;
put 'PVcubGVuZ3RoO3dlPEVlJiYhKGgmJmllPD13ZSk7d2UrKylwZS5wdXNoKGllP1dbX1t3ZV1dOldbd2VdKTtUPTAsVz1wZX10aGlzLnN0cmlwcGVkQ2hvaWNlcz1XLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoS2IoW1ddKSksdGhpcy51cGRhdGVEcm9wZG93bkhlaWdodCgpLHRoaXMuZmxpcERy'@;
put 'b3Bkb3duSWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShUKSx0aGlzLmhvdC5saXN0ZW4oKSxveSh0aGlzLlRFWFRBUkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93bklmTmVlZGVkKCl7Y29u'@;
put 'c3QgbD12Zyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSxhPWw9PT10aGlzLmhvdC5yb290V2luZG93LGQ9dGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7aWYoYXx8IWEmJihkfHwiaG9yaXpvbnRhbCI9PT1kKSlyZXR1cm4hMTtjb25zdCBoPUtsKHRoaXMuVEVY'@;
put 'VEFSRUEpLGY9YWwodGhpcy5URVhUQVJFQSksXz10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksVD1sLnNjcm9sbFRvcCxXPWFsKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpLGllPUtsKGwpLHBlPWgudG9wLWllLnRvcC1XK1Qsd2U9bC5zY3JvbGxIZWlnaHQtcGUtVy1mLEVlPV8+'@;
put 'd2UmJnBlPndlO3JldHVybiBFZT90aGlzLmZsaXBEcm9wZG93bihfKTp0aGlzLnVuZmxpcERyb3Bkb3duKCksdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQoRWU/cGU6d2UsXyksRWV9bGltaXREcm9wZG93bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsXz1udWxsO2Rv'@;
put 'e2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5fd3QuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpLGQrPWYsaCs9MX13aGlsZShkPGwpO189ZC1mLHRoaXMuaHRFZGl0b3IuZmxpcHBlZCYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQu'@;
put 'c3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSthLV8rInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWYpfX1mbGlwRHJvcGRvd24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2EucG9zaXRpb249'@;
put 'ImFic29sdXRlIixhLnRvcD0tbCsicHgiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD0hMH11bmZsaXBEcm9wZG93bigpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIsdGhpcy5odEVkaXRvci5mbGlwcGVkPXZvaWQg'@;
put 'MH11cGRhdGVEcm9wZG93bkhlaWdodCgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKStJYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpKzIsYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bjt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhp'@;
put 'cy5nZXREcm9wZG93bkhlaWdodCgpLHdpZHRoOmE/dm9pZCAwOmx9KSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3duSGVpZ2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdo'@;
put 'dDpsfSl9aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGwpeyJudW1iZXIiPT10eXBlb2YgbD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwobCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldERyb3Bkb3duSGVpZ2h0KCl7Y29uc3Qg'@;
put 'bD10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCkuZ2V0Um93SGVpZ2h0KDApfHwyMyxhPXRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3M7cmV0dXJuIHRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0aD49YT9hKmw6dGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKmwrOH1zdHJpcFZh'@;
put 'bHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMsZD1jcyhsLGY9Pl9sKGYpKTtyZXR1cm4gY3MoZCxmPT5hP2Y6dU4oZikpfWFsbG93'@;
put 'S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkX3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0dXJuIGw9PT1jby5BUlJPV19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRpdG9yLmNvdW50Um93cygp'@;
put 'LTEmJihoPSEwKSxsPT09Y28uQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7Y29uc3QgYT1LQi5nZXQodGhpcyk7aWYoYS5za2lwT25lPSExLE10ZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1jby5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PWNvLkRFTEVU'@;
put 'RXx8bC5rZXlDb2RlPT09Y28uSU5TRVJUKXtsZXQgZD0xMDtpZihsLmtleUNvZGU9PT1jby5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChkKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVl'@;
put 'cnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpLGEuc2tpcE9uZT0hMH0sZCl9fX1jbGFzcyBRbmUgZXh0ZW5kcyB2N3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdpbkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUpe2NvbnN0IGQ9'@;
put 'dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7Qm8oZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX12YXIgZXJlPUYo'@;
put 'MTc0ODApO2NvbnN0IHRyZT0iZGF0ZSIsbnJlPSJkYXRlRWRpdG9yIjtjbGFzcyBycmUgZXh0ZW5kcyBrZ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIHRyZX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRlZmF1bHREYXRlRm9ybWF0PSJERC9NTS9ZWVlZIix0aGlzLmlz'@;
put 'Q2VsbEVkaXRlZD0hMSx0aGlzLnBhcmVudERlc3Ryb3llZD0hMSx0aGlzLiRkYXRlUGlja2VyPW51bGx9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLbyl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgZXJlKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBQaWthZGF5IHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5pbnN0YW5jZS5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5kZXN0cm95RWxlbWVudHMoKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0'@;
put 'aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRo'@;
put 'aXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLHBpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIiksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kYXRlUGlja2VyKSxuZXcgbGwodGhpcykuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQ'@;
put 'aWNrZXIsIm1vdXNlZG93biIsYT0+YS5zdG9wUHJvcGFnYXRpb24oKSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0'@;
put 'ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsXyl7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsXyl9b3Blbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2Vy'@;
put 'KCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIub3BlbigpLHRoaXMuc2hvd0RhdGVwaWNrZXIobCksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpoPT57aC5zdG9wUHJvcGFnYXRpb24oKX0sZ3JvdXA6bnJlfSl9Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9'@;
put 'ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRlc3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaW5zdGFuY2UuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaW5zdGFuY2UuX3JlZnJlc2hCb3JkZXJzKCl9KSx0aGlzLmhvdC5nZXRT'@;
put 'aG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG5yZSksc3VwZXIuY2xvc2UoKX1maW5pc2hFZGl0aW5nKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYobCl7Y29uc3QgZD10aGlzLm9yaWdpbmFsVmFsdWU7dm9pZCAwIT09ZCYmdGhpcy5zZXRWYWx1ZShkKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT10'@;
put 'aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LGg9dGhpcy5pbnN0YW5jZS52aWV3LmlzTW91c2VEb3duKCksZj0hIWwmJkNOKGwua2V5Q29kZSk7bGV0IF87dGhpcy5kYXRlUGlja2Vy'@;
put 'LnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyBlcmUodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5k'@;
put 'b3cucGFnZVlPZmZzZXQrYS50b3ArYWwodGhpcy5URCl9cHhgO2xldCBUPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7VD10aGlzLmhvdC5pc1J0bCgpP2EucmlnaHQtd2EodGhpcy5kYXRlUGlja2VyKTphLmxlZnQsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD1gJHtUfXB4YCx0'@;
put 'aGlzLm9yaWdpbmFsVmFsdWU/KF89dGhpcy5vcmlnaW5hbFZhbHVlLEtvKF8sZCwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChLbyhfLGQpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5h'@;
put 'bFZhbHVlKSwhZiYmIWgmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhfPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsS28oXyxkLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KEtvKF8sZCksITApLCFm'@;
put 'JiYhaCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7Y29uc3QgbD10aGlz'@;
put 'LlRFWFRBUkVBLGE9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZseShhLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgZD1hLm9uU2VsZWN0LGg9YS5vbkNsb3NlO3JldHVybiBhLmZpZWxkPWws'@;
put 'YS50cmlnZ2VyPWwsYS5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGEuYm91bmQ9ITEsYS5mb3JtYXQ9YS5mb3JtYXR8fHRoaXMuZGVmYXVsdERhdGVGb3JtYXQsYS5yZXBvc2l0aW9uPWEucmVwb3NpdGlvbnx8ITEsYS5pc1JUTD0hMSxhLm9uU2VsZWN0PWY9PntsZXQgXz1mO2lzTmFOKF8u'@;
put 'Z2V0VGltZSgpKXx8KF89S28oXykuZm9ybWF0KHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCkpLHRoaXMuc2V0VmFsdWUoXyksdGhpcy5oaWRlRGF0ZXBpY2tlcigpLGQmJmQoKX0sYS5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95'@;
put 'ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksaCYmaCgpfSxhfX1jbGFzcyBKQiBleHRlbmRzIFhCe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLHRoaXMuY2VsbFByb3BlcnRp'@;
put 'ZXMuZmlsdGVyPSExLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0PSEwfX1zby5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbihjLGwsYSl7Y29uc3QgZD10aGlzLmdldENlbGxNZXRhKGwsdGhpcy5wcm9wVG9Db2woYSkpO2QuZWRpdG9yPT09SkImJnZvaWQg'@;
put 'MD09PWQuc3RyaWN0JiYoZC5maWx0ZXI9ITEsZC5zdHJpY3Q9ITApfSk7Y2xhc3MgaXJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3Mgb3JlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29y'@;
put 'ZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0'@;
put 'QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdo'@;
put 'dD0wLGcyKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgUUI9Imh0X2VkaXRvcl92aXNpYmxlIixzcmU9InNlbGVjdEVkaXRvciI7Y2xhc3MgdkxlIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1Jf'@;
put 'VFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIikscGkodGhpcy5zZWxlY3QsImh0U2VsZWN0RWRpdG9yIiksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3Qucm9v'@;
put 'dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNp'@;
put 'b25zKCksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0LnN0eWxlLmRp'@;
put 'c3BsYXk9Im5vbmUiLEJvKHRoaXMuc2VsZWN0LFFCKSYmV28odGhpcy5zZWxlY3QsUUIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9s'@;
put 'bEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1l'@;
put 'bnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pO2NvbnN0IFQ9dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBX'@;
put 'O1c9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgVD9UKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6VCksZzIodGhpcy5zZWxlY3QpLGRzKFcsKGllLHBlKT0+e2NvbnN0IHdlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTt3'@;
put 'ZS52YWx1ZT1wZSxnZyh3ZSxpZSksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQod2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlwZW9mIGwm'@;
put 'JihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNp'@;
put 'b25zKCl7aWYodGhpcy5zdGF0ZSE9PVdjLkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVj'@;
put 'dCgpLGY9dGhpcy5zZWxlY3Quc3R5bGU7Zi5oZWlnaHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1gJHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhgLGYubWFyZ2luPSIwcHgiLHBpKHRoaXMuc2VsZWN0LFFCKX1yZWdpc3RlclNob3J0'@;
put 'Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6c3JlfTshMSE9PXRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0'@;
put 'IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgrMTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYm'@;
put 'KHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChzcmUpfX1jbGFzcyBhcmUgZXh0ZW5kcyBrZ3tzdGF0aWMg'@;
put 'Z2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBlaihjLGwsYSxkLGgsZixfKXtNeS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksZ2co'@;
put 'bCxmPz8iIiwhMSl9ZnVuY3Rpb24gYjcoYyxsLGEsZCxoLGYsXyl7Y29uc3R7cm9vdERvY3VtZW50OlR9PWMsVz1fLmFsbG93SHRtbD9lajokcCxpZT1ULmNyZWF0ZUVsZW1lbnQoIkRJViIpO2lmKGllLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsaWUuYXBwZW5kQ2hpbGQoVC5j'@;
put 'cmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDk2NjApKSksVy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSksbC5pbnNlcnRCZWZvcmUoaWUsbC5m'@;
put 'aXJzdENoaWxkKSxwaShsLCJodEF1dG9jb21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3QgcGU9bmV3IGxsKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKHdlKXtCbyh3ZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5nZXRTZXR0aW5nKCJv'@;
put 'bkNlbGxEYmxDbGljayIsbnVsbCxjLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LHBlLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dMaXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e3BlLmRlc3Ryb3koKX0pfX1l'@;
put 'ai5SRU5ERVJFUl9UWVBFPSJodG1sIixiNy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiO2NvbnN0IGxyZT1uZXcgV2Vha01hcCxjcmU9bmV3IFdlYWtNYXAsQ0xlPSJodEJhZFZhbHVlIix5Nz0iZGF0YS1yb3ciLHc3PSJkYXRhLWNvbCIsU0xlPSJjaGVja2JveFJlbmRlcmVyIjtmdW5j'@;
put 'dGlvbiB0aihjLGwsYSxkLGgsZixfKXtjb25zdHtyb290RG9jdW1lbnQ6VH09YztNeS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksZnVuY3Rpb24gTUxlKGMpe2xldCBsPWNyZS5nZXQoYyk7aWYoIWwpe2NvbnN0e3Jvb3RFbGVtZW50OmF9PWM7bD1uZXcgbGwoYyksbC5hZGRFdmVudExp'@;
put 'c3RlbmVyKGEsImNsaWNrIixkPT5mdW5jdGlvbiBBTGUoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighbmooYSl8fCFhLmhhc0F0dHJpYnV0ZSh5Nyl8fCFhLmhhc0F0dHJpYnV0ZSh3NykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoeTcpLDEwKSxoPXBhcnNlSW50'@;
put 'KGEuZ2V0QXR0cmlidXRlKHc3KSwxMCk7bC5nZXRDZWxsTWV0YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnREZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIixkPT5mdW5jdGlvbiBrTGUoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztuaihhKSYmKCFhLmhhc0F0'@;
put 'dHJpYnV0ZSh5Nyl8fCFhLmhhc0F0dHJpYnV0ZSh3Nyl8fHNldFRpbWVvdXQobC5saXN0ZW4sMTApKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+ZnVuY3Rpb24gVExlKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIW5qKGEpfHwhYS5oYXNBdHRyaWJ1dGUoeTcp'@;
put 'fHwhYS5oYXNBdHRyaWJ1dGUodzcpKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKHk3KSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh3NyksMTApLGY9bC5nZXRDZWxsTWV0YShkLGgpO2lmKCFmLnJlYWRPbmx5KXtsZXQgXz1udWxsO189Yy50YXJnZXQuY2hl'@;
put 'Y2tlZD92b2lkIDA9PT1mLnVuY2hlY2tlZFRlbXBsYXRlfHxmLmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAhPT1mLnVuY2hlY2tlZFRlbXBsYXRlJiZmLnVuY2hlY2tlZFRlbXBsYXRlLGwuc2V0RGF0YUF0Q2VsbChkLGgsXyl9fShkLGMpKSxjcmUuc2V0KGMsbCl9fShjKTtsZXQgVz1mdW5jdGlv'@;
put 'biB4TGUoYyl7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGwuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJJbnB1dCIsbC50eXBlPSJjaGVja2JveCIsbC5zZXRBdHRyaWJ1dGUoImF1dG9jb21wbGV0ZSIsIm9mZiIpLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRl'@;
put 'eCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShUKTtjb25zdCBpZT1fLmxhYmVsO2xldCBwZT0hMTtpZih0eXBlb2YgXy5jaGVja2VkVGVtcGxhdGU+InUiJiYoXy5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBfLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKF8udW5jaGVja2VkVGVtcGxhdGU9'@;
put 'ITEpLGcyKGwpLGY9PT1fLmNoZWNrZWRUZW1wbGF0ZXx8X2woZikudG9Mb2NhbGVMb3dlckNhc2UoXy5sb2NhbGUpPT09X2woXy5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITA6Zj09PV8udW5jaGVja2VkVGVtcGxhdGV8fF9sKGYpLnRv'@;
put 'TG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT09PV9sKF8udW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITE6Z2MoZik/cGkoVywibm9WYWx1ZSIpOihXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHBpKFcsQ0xlKSxwZT0hMCksVy5zZXRBdHRy'@;
put 'aWJ1dGUoeTcsYSksVy5zZXRBdHRyaWJ1dGUodzcsZCksIXBlJiZpZSl7bGV0IGl0PSIiO2lmKGllLnZhbHVlKWl0PSJmdW5jdGlvbiI9PXR5cGVvZiBpZS52YWx1ZT9pZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6aWUudmFsdWU7ZWxzZSBpZihpZS5wcm9wZXJ0eSl7Y29uc3QgeXQ9Yy5n'@;
put 'ZXREYXRhQXRSb3dQcm9wKGEsaWUucHJvcGVydHkpO2l0PW51bGwhPT15dD95dDoiIn1jb25zdCBldD1mdW5jdGlvbiBFTGUoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO3JldHVybiBkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8iZnVs'@;
put 'bFdpZHRoIjoiIiksZC5hcHBlbmRDaGlsZChjLmNyZWF0ZVRleHROb2RlKGwpKSxkLmNsb25lTm9kZSghMCl9KFQsaXQsITAhPT1pZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09aWUucG9zaXRpb24/aWUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKGV0KSxsLmFwcGVuZENoaWxkKFcpKTooZXQu'@;
put 'YXBwZW5kQ2hpbGQoVyksVz1ldCk6KCFpZS5wb3NpdGlvbnx8ImFmdGVyIj09PWllLnBvc2l0aW9uKSYmKGllLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChXKSxsLmFwcGVuZENoaWxkKGV0KSk6KGV0Lmluc2VydEJlZm9yZShXLGV0LmZpcnN0Q2hpbGQpLFc9ZXQpKX1mdW5jdGlvbiBFZSgp'@;
put 'e2xldCBpdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGV0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldC5sZW5ndGg7eXQrKyl7Y29uc3R7cm93OkV0LGNvbDpTdH09ZXRbeXRdLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkse3JvdzpKdCxjb2w6bm59PWV0W3l0XS5nZXRCb3R0b21FbmRDb3JuZXIoKSx2bj1bXTtmb3IobGV0IE5uPUV0O05uPD1KdDtObis9MSlmb3IobGV0IGNyPVN0O2NyPD1ubjtjcis9MSl7Y29uc3QgTHI9Yy5nZXRDZWxsTWV0YShObixjcik7aWYoImNoZWNrYm94IiE9'@;
put 'PUxyLnR5cGUpcmV0dXJuO2lmKCEwPT09THIucmVhZE9ubHkpY29udGludWU7dHlwZW9mIExyLmNoZWNrZWRUZW1wbGF0ZT4idSImJihMci5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBMci51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihMci51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3Qg'@;
put 'RWk9Yy5nZXREYXRhQXRDZWxsKE5uLGNyKTshMT09PWl0P1tMci5jaGVja2VkVGVtcGxhdGUsTHIuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKEVpKT92bi5wdXNoKFtObixjcixMci51bmNoZWNrZWRUZW1wbGF0ZV0pOltMci51bmNoZWNrZWRUZW1wbGF0ZSxMci51bmNo'@;
put 'ZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhFaSkmJnZuLnB1c2goW05uLGNyLExyLmNoZWNrZWRUZW1wbGF0ZV0pOnZuLnB1c2goW05uLGNyLExyLnVuY2hlY2tlZFRlbXBsYXRlXSl9dm4ubGVuZ3RoPjAmJmMuc2V0RGF0YUF0Q2VsbCh2bil9fWZ1bmN0'@;
put 'aW9uIFplKCl7Y29uc3QgaXQ9Yy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoaXQpe2ZvcihsZXQgZXQ9MDtldDxpdC5sZW5ndGg7ZXQrKyl7Y29uc3QgeXQ9aXRbZXRdLmdldFRvcFN0YXJ0Q29ybmVyKCksRXQ9aXRbZXRdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgU3Q9eXQucm93O1N0'@;
put 'PD1FdC5yb3c7U3QrKylmb3IobGV0IEp0PXl0LmNvbDtKdDw9RXQuY29sO0p0Kyspe2NvbnN0IG5uPWMuZ2V0Q2VsbE1ldGEoU3QsSnQpO2lmKCJjaGVja2JveCIhPT1ubi50eXBlKXJldHVybiExO2NvbnN0IHZuPWMuZ2V0Q2VsbChTdCxKdCk7aWYobnVsbD09dm4pcmV0dXJuITA7aWYodm4u'@;
put 'cXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MCYmIW5uLnJlYWRPbmx5KXJldHVybiEwfX1yZXR1cm4hMX19KCFpZXx8aWUmJiFpZS5zZXBhcmF0ZWQpJiZsLmFwcGVuZENoaWxkKFcpLHBlJiZsLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoIiNi'@;
put 'YWQtdmFsdWUjIikpLGxyZS5oYXMoYyl8fChscmUuc2V0KGMsITApLGZ1bmN0aW9uIHdlKCl7Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCksIVplKCkpfSx7a2V5czpbWyJl'@;
put 'bnRlciJdXSxjYWxsYmFjazooKT0+KEVlKCksIVplKCkpLHJ1bk9ubHlJZjooKT0+Yy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZ30se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSghMCksIVplKCkpLHJlbGF0aXZlVG9Hcm91cDpjeSxw'@;
put 'b3NpdGlvbjoiYmVmb3JlIn1dLHtncm91cDpTTGV9KX0oKSl9ZnVuY3Rpb24gbmooYyl7cmV0dXJuIklOUFVUIj09PWMudGFnTmFtZSYmImNoZWNrYm94Ij09PWMuZ2V0QXR0cmlidXRlKCJ0eXBlIil9c28uZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1'@;
put 'bmN0aW9uKGMsbCxhKXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46Xyxwcm9wOlR9PWw7aWYoImNoZWNrYm94Ij09PWgpe2lmKGQpe2NvbnN0e3ZhbHVlOlcscHJvcGVydHk6aWV9PWQ7bGV0IHBlPWE7aWYoVylwZT0iZnVuY3Rpb24iPT10eXBlb2YgVz9XKGYsXyxULGEpOlc7'@;
put 'ZWxzZSBpZihpZSl7Y29uc3Qgd2U9dGhpcy5nZXREYXRhQXRSb3dQcm9wKGYsaWUpO3BlPW51bGwhPT13ZT93ZTphfWM9cGV9cmV0dXJuIGN9fSksdGouUkVOREVSRVJfVFlQRT0iY2hlY2tib3giO3ZhciBxcD1GKDExMTcwKSxETGU9Ri5uKHFwKTtmdW5jdGlvbiByaihjLGwsYSxkLGgsZixf'@;
put 'KXtsZXQgVD1mO2lmKEd1KFQpKXtjb25zdCBXPV8ubnVtZXJpY0Zvcm1hdCxpZT1XJiZXLmN1bHR1cmV8fCItIixwZT1XJiZXLnBhdHRlcm4sd2U9Xy5jbGFzc05hbWV8fCIiLEVlPXdlLmxlbmd0aD93ZS5zcGxpdCgiICIpOltdO2lmKHR5cGVvZiBpZTwidSImJiFxcC5sYW5ndWFnZXMoKVtp'@;
put 'ZV0pe2NvbnN0IFplPWllLnJlcGxhY2UoIi0iLCIiKSxpdD1xcC5hbGxMYW5ndWFnZXM/cXAuYWxsTGFuZ3VhZ2VzW2llXTpxcFtaZV07aXQmJnFwLnJlZ2lzdGVyTGFuZ3VhZ2UoaXQpfXFwLnNldExhbmd1YWdlKGllKSxUPXFwKFQpLmZvcm1hdChwZXx8IjAiKSxFZS5pbmRleE9mKCJodExl'@;
put 'ZnQiKTwwJiZFZS5pbmRleE9mKCJodENlbnRlciIpPDAmJkVlLmluZGV4T2YoImh0UmlnaHQiKTwwJiZFZS5pbmRleE9mKCJodEp1c3RpZnkiKTwwJiZFZS5wdXNoKCJodFJpZ2h0IiksRWUuaW5kZXhPZigiaHROdW1lcmljIik8MCYmRWUucHVzaCgiaHROdW1lcmljIiksXy5jbGFzc05hbWU9'@;
put 'RWUuam9pbigiICIpLGwuZGlyPSJsdHIifSRwKGMsbCxhLGQsaCxULF8pfWZ1bmN0aW9uIGlqKGMsbCxhLGQsaCxmLF8peyRwLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKTtjb25zdCBXPV8uaGFzaFN5bWJvbHx8IioiO2xldCBpZT0iIjt2bygoXy5oYXNoTGVuZ3RofHxsLmlubmVySFRN'@;
put 'TC5sZW5ndGgpLTEsKCk9PntpZSs9V30pLGdnKGwsaWUpfWZ1bmN0aW9uIG9qKGMsbCxhLGQsaCxmLF8peyRwLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKSxsLmRpcj0ibHRyIn1mdW5jdGlvbiBFeShjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLHRoaXMuYWxsb3dFbXB0eSYmIiI9'@;
put 'PT1hP2woITApOnRoaXMuc3RyaWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2UoYSxkcmUoYSxsKSk6ZHJlKGEsbCkodGhpcy5zb3VyY2UpOmwoITApfWZ1bmN0aW9uIGRyZShjLGwpe2NvbnN0IGE9YztyZXR1cm4gZnVuY3Rpb24oZCl7'@;
put 'bGV0IGg9ITE7Zm9yKGxldCBmPTAsXz1kLmxlbmd0aDtmPF87ZisrKWlmKGE9PT1kW2ZdKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIGhyZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihuZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERhdGUoKSk/bDpuZXcgRGF0ZShs'@;
put 'LmdldFRpbWUoKSs2ZTQqbC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBZayhjLGwpe2NvbnN0IGE9VHRlKHRyZSx0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBmPUtvKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRlZmF1bHREYXRlRm9ybWF0LCEw'@;
put 'KS5pc1ZhbGlkKCksXz1LbyhuZXcgRGF0ZShkKSkuaXNWYWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYoXz0hMCxmPSEwKSxffHwoaD0hMSksIV8mJmYmJihoPSEwKSxfJiYhZilpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgVD1mdW5jdGlvbiBITGUoYyxs'@;
put 'KXtjb25zdCBhPUtvKGhyZShjKSksZD1LbyhjLGwpLGg9Yy5zZWFyY2goL1tBLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQuaXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChsKX0oZCx0aGlzLmRhdGVGb3JtYXQp'@;
put 'LFc9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdyksaWU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKFcsaWUsVCwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBoPSExO2woaCl9ZnVuY3Rpb24gc2oo'@;
put 'YyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dFbXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZHdShjKSl9cmouUkVOREVSRVJfVFlQRT0ibnVtZXJpYyIsaWouUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLG9qLlJFTkRFUkVSX1RZUEU9InRpbWUiLEV5LlZBTElEQVRP'@;
put 'Ul9UWVBFPSJhdXRvY29tcGxldGUiLFlrLlZBTElEQVRPUl9UWVBFPSJkYXRlIixzai5WQUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgVkxlPVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBXayhjLGwpe2NvbnN0IGE9dGhpcy50aW1lRm9ybWF0fHwi'@;
put 'aDptbTpzcyBhIjtsZXQgZD0hMCxoPWM7bnVsbD09PWgmJihoPSIiKSxoPS9eXGR7Myx9JC8udGVzdChoKT9wYXJzZUludChoLDEwKTpoO2NvbnN0IGY9L15cZHsxLDJ9JC8udGVzdChoKTtmJiYoaCs9IjowMCIpO2NvbnN0IF89S28oaCxWTGUsITApLmlzVmFsaWQoKT9LbyhoKTpLbyhoLGEp'@;
put 'O2xldCBUPV8uaXNWYWxpZCgpLFc9S28oaCxhLCEwKS5pc1ZhbGlkKCkmJiFmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1oJiYoVD0hMCxXPSEwKSxUfHwoZD0hMSksIVQmJlcmJihkPSEwKSxUJiYhVylpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgaWU9Xy5mb3JtYXQoYSks'@;
put 'cGU9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbFJvdyh0aGlzLnJvdyksd2U9dGhpcy5pbnN0YW5jZS50b1Zpc3VhbENvbHVtbih0aGlzLmNvbCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHBlLHdlLGllLCJ0aW1lVmFsaWRhdG9yIiksZD0hMH1lbHNlIGQ9ITE7bChkKX1Xay5WQUxJREFU'@;
put 'T1JfVFlQRT0idGltZSI7Y29uc3QgekxlPXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOlhCLHJlbmRlcmVyOmI3LHZhbGlkYXRvcjpFeX0sVUxlPXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6UW5lLHJlbmRlcmVyOnRqfSxaTGU9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9y'@;
put 'OnJyZSxyZW5kZXJlcjpiNyx2YWxpZGF0b3I6WWt9LFlMZT17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOkpCLHJlbmRlcmVyOmI3LHZhbGlkYXRvcjpFeX0sV0xlPXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOnFCLHJlbmRlcmVyOmI3fSxHTGU9e0NFTExfVFlQRToibnVt'@;
put 'ZXJpYyIsZWRpdG9yOmlyZSxyZW5kZXJlcjpyaix2YWxpZGF0b3I6c2osZGF0YVR5cGU6Im51bWJlciJ9LCRMZT17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOm9yZSxyZW5kZXJlcjppaixjb3B5YWJsZTohMX0scUxlPXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjphcmUscmVuZGVyZXI6'@;
put 'b2osdmFsaWRhdG9yOldrfTtjb25zdCBmcmU9bmV3IE1hcChbWyJwbHVnaW4iLGZ1bmN0aW9uIHlrZShjKXtyZXR1cm4hIXV5KGMpfV0sWyJjZWxsLXR5cGUiLEhuZV0sWyJlZGl0b3IiLEF0ZV0sWyJyZW5kZXJlciIsSHRlXSxbInZhbGlkYXRvciIsTnRlXV0pLFRnPW5ldyBXZWFrTWFwLGFq'@;
put 'PVtdO2xldCBfaD1udWxsO3ZhciBwcmU9bmV3IFdlYWtTZXQ7Y2xhc3MgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFhMZShjLGwp'@;
put 'eyhmdW5jdGlvbiBKTGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMscHJlKSxmaCh0aGlzLCJob3QiLGwse3dy'@;
put 'aXRhYmxlOiExfSksVGcuc2V0KHRoaXMse2hvb2tzOnt9fSksX2g9bnVsbCx0aGlzLnBsdWdpbk5hbWU9bnVsbCx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcz1bXSx0aGlzLmlzUGx1Z2luc1JlYWR5PSExLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMu'@;
put 'aG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+dGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9PnRoaXMub25VcGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVm'@;
put 'b3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGE9QXJyYXkuaXNBcnJheShsKT9sOltdO2lmKGEubGVuZ3RoPjApe2NvbnN0IGg9W107'@;
put 'aWYoYS5mb3JFYWNoKGY9Pntjb25zdFtfLFRdPWYuc3BsaXQoIjoiKTtpZighZnJlLmhhcyhfKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHtffSIgd2FzIGZvdW5kLmApO2ZyZS5nZXQoXykoVCl8fGgucHVzaChgIC0gJHtUfSAoJHtffSlgKX0p'@;
put 'LGgubGVuZ3RoPjApe2NvbnN0IGY9W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2guam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO2FqLnB1c2goZil9fWlmKF9ofHwoX2g9UE4oKSksX2guaW5kZXhPZigiVW5kb1Jl'@;
put 'ZG8iKT49MCYmX2guc3BsaWNlKF9oLmluZGV4T2YoIlVuZG9SZWRvIiksMSksX2guaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZfaC5zcGxpY2UoX2guaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIs'@;
put 'KCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1faC5sZW5ndGgpe2lmKGFqLmxlbmd0aD4wKXtjb25zdCBoPVtgJHthai5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVh'@;
put 'bGx5LiJdLmpvaW4oIiIpO3Rocm93IG5ldyBFcnJvcihoKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxpemVkPSEwfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ldmVudE1hbmFnZXIm'@;
put 'JnRoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCksdGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWFkZEhvb2sobCxhKXtUZy5nZXQodGhpcykuaG9va3NbbF09VGcuZ2V0KHRoaXMpLmhvb2tzW2xdfHxbXTtjb25zdCBkPVRnLmdldCh0aGlzKS5ob29rc1tsXTt0aGlzLmhvdC5hZGRI'@;
put 'b29rKGwsYSksZC5wdXNoKGEpLFRnLmdldCh0aGlzKS5ob29rc1tsXT1kfXJlbW92ZUhvb2tzKGwpe0RuKFRnLmdldCh0aGlzKS5ob29rc1tsXXx8W10sYT0+e3RoaXMuaG90LnJlbW92ZUhvb2sobCxhKX0pfWNsZWFySG9va3MoKXtjb25zdCBsPVRnLmdldCh0aGlzKS5ob29rcztkcyhsLChh'@;
put 'LGQpPT50aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKXtEbih0aGlzLnBsdWdp'@;
put 'bnNJbml0aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0aW5ncyhsKXtjb25zdCBhPWZ1bmN0aW9uIFFMZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX0odGhpcyxwcmUsdEllKS5jYWxsKHRoaXMsbCk7dGhpcy5pc0VuYWJsZWQmJih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVn'@;
put 'aW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYmdGhpcy51cGRhdGVQbHVnaW4obCkpfXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXImJnRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKSxkcyh0aGlzLChsLGEpPT57ImhvdCIhPT1hJiYodGhpc1thXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVsZXRlIHRoaXMuaG90fX1mdW5jdGlvbiB0SWUoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0'@;
put 'cnVjdG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVvZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0dXJuITA7cmV0dXJuITF9Y29uc3QgbGo9Y2xhc3Mgbklle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhp'@;
put 'cy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExLHRoaXMucm93cz1bXSx0aGlzLmNvbHVtbnM9W10sdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5zZXR0aW5ncz17dXNlSGVhZGVyczohMH19YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRv'@;
put 'ZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhp'@;
put 'cy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLnRhYmxlLnRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlUm93'@;
put 'KGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWFkZENvbHVtbkhlYWRlcnNSb3cobCl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBkPXtyb3c6LTF9O3Ro'@;
put 'aXMucm93cy5wdXNoKGQpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSksdGhpcy5zYW1wbGVzPWwsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5j'@;
put 'b2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLmFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfX1hZGRD'@;
put 'b2x1bW4obCxhKXtpZih0aGlzLnJvd3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5jb2x1bW5zLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVt'@;
put 'ZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e2NvbDpsfTt0aGlzLmNvbHVtbnMucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSYmbnVsbCE9PXRoaXMu'@;
put 'aG90LmdldENvbEhlYWRlcihsKSYmdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobCx0aGlzLnRhYmxlLnRoKSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5m'@;
put 'cmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLERuKHRoaXMucm93cyxhPT57bChhLnJvdyxhbChhLnRhYmxlKS0xKX0pfWdldFdpZHRocyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRh'@;
put 'YmxlKCksRG4odGhpcy5jb2x1bW5zLGE9Pntjb25zdHt3aWR0aDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5jb2wsTWF0aC5jZWlsKGQpKX0pfXNldFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3M9bH1zZXRTZXR0aW5nKGwsYSl7dGhpcy5zZXR0aW5nc3x8KHRoaXMu'@;
put 'c2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbbF09YX1nZXRTZXR0aW5ncygpe3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1tsXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9v'@;
put 'dERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZsLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGE9PntEbihhLnN0cmluZ3MsZD0+e2wuYXBwZW5kQ2hpbGQo'@;
put 'dGhpcy5jcmVhdGVDb2xFbGVtZW50KGQuY29sKSl9KX0pLGx9Y3JlYXRlUm93KGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkm'@;
put 'Jih0aGlzLmhvdC52aWV3LmFwcGVuZFJvd0hlYWRlcihsLGgpLGQuYXBwZW5kQ2hpbGQoaCkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGY9PntEbihmLnN0cmluZ3MsXz0+e2NvbnN0IFQ9Xy5jb2wsVz10aGlzLmhvdC5nZXRDZWxsTWV0YShsLFQpO1cuY29sPVQsVy5yb3c9bDtjb25zdCBpZT10'@;
put 'aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoVykscGU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpO3BlLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLGllKHRoaXMuaG90LHBlLGwsVCx0aGlzLmhvdC5jb2xUb1Byb3AoVCksXy52YWx1ZSxXKSxkLmFwcGVuZENoaWxkKHBlKX0pfSksZH1hcHBl'@;
put 'bmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXTtpZih0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkpe2NvbnN0IGg9bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbLTEsaF0pLGEuYXBw'@;
put 'ZW5kQ2hpbGQoaCl9dGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e0RuKGguc3RyaW5ncyxmPT57Y29uc3QgXz1mLmNvbCxUPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goW18sVF0pLGEuYXBwZW5kQ2hpbGQoVCl9KX0pLHRoaXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoYSksRG4oZCxo'@;
put 'PT57Y29uc3RbZixfXT1oO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGYsXyl9KX1jcmVhdGVDb2wobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntEbihoLnN0'@;
put 'cmluZ3MsZj0+e2NvbnN0IF89Zi5yb3csVD10aGlzLmhvdC5nZXRDZWxsTWV0YShfLGwpO1QuY29sPWwsVC5yb3c9Xztjb25zdCBXPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihUKSxpZT1hLmNyZWF0ZUVsZW1lbnQoInRkIikscGU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2llLnNldEF0dHJp'@;
put 'YnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFcodGhpcy5ob3QsaWUsXyxsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLFQpLHBlLmFwcGVuZENoaWxkKGllKSxkLmFwcGVuZENoaWxkKHBlKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0'@;
put 'aGlzLmNvbHVtbnMubGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5qZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw'@;
put 'XT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYm'@;
put 'KHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNy'@;
put 'ZWF0ZUVsZW1lbnQoImNvbCIpO3JldHVybiBhLnN0eWxlLndpZHRoPWAke3RoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCl9cHhgLGF9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9h'@;
put 'cmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksXz1hLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksVD1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoImNvbGdyb3VwIiksVz1hLmNyZWF0ZUVsZW1lbnQoInRyIiksaWU9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChUKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoVy5hcHBlbmRDaGlsZChpZSksZi5hcHBlbmRDaGls'@;
put 'ZChXKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixoLnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBlbmRDaGlsZChmKSx0aGlzLmlzVmVydGljYWwoKSYmXy5hcHBlbmRDaGlsZChXKSxoLmFwcGVuZENoaWxkKF8pLHBpKGgsbCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCx0YWJs'@;
put 'ZTpoLHRIZWFkOmYsdEJvZHk6Xyxjb2xHcm91cDpULHRyOlcsdGg6aWV9fWNyZWF0ZUNvbnRhaW5lcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0'@;
put 'ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHBpKGgsYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgpe3JldHVybiEoIXRoaXMu'@;
put 'cm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5ndGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEoIXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5ndGgpfX07Y2xhc3MgY2p7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXt0aGlzLnNh'@;
put 'bXBsZXM9bnVsbCx0aGlzLmRhdGFGYWN0b3J5PWwsdGhpcy5jdXN0b21TYW1wbGVDb3VudD1udWxsLHRoaXMuYWxsb3dEdXBsaWNhdGVzPSExfWdldFNhbXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDpjai5TQU1QTEVfQ09V'@;
put 'TlR9c2V0U2FtcGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRlcz1sfWdlbmVyYXRlUm93U2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixhLGwpfWdlbmVyYXRlQ29s'@;
put 'dW1uU2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixhLGwpfWdlbmVyYXRlU2FtcGxlcyhsLGEsZCl7Y29uc3QgaD1uZXcgTWFwLHtmcm9tOmYsdG86X309Im51bWJlciI9PXR5cGVvZiBkP3tmcm9tOmQsdG86ZH06ZDtyZXR1cm4gdm8oZixfLFQ9Pntjb25z'@;
put 'dCBXPXRoaXMuZ2VuZXJhdGVTYW1wbGUobCxhLFQpO2guc2V0KFQsVyl9KSxofWdlbmVyYXRlU2FtcGxlKGwsYSxkKXtpZigicm93IiE9PWwmJiJjb2wiIT09bCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNhbXBsZSB0eXBlIik7Y29uc3QgaD1uZXcgTWFwLGY9InJvdyI9PT1sPyJj'@;
put 'b2wiOiJyb3ciLF89W107cmV0dXJuIHZvKGEuZnJvbSxhLnRvLFQ9Pntjb25zdHt2YWx1ZTpXLGJ1bmRsZVNlZWQ6aWV9PSJyb3ciPT09bD90aGlzLmRhdGFGYWN0b3J5KGQsVCk6dGhpcy5kYXRhRmFjdG9yeShULGQpLHBlPSJzdHJpbmciPT10eXBlb2YgaWUmJmllLmxlbmd0aD4wO2xldCB3'@;
put 'ZTt3ZT1wZT9pZTp1cyhXKT9gJHtPYmplY3Qua2V5cyhXKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFcpP2Ake1cubGVuZ3RofWA6YCR7X2woVykubGVuZ3RofWAsaC5oYXMod2UpfHxoLnNldCh3ZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgRWU9'@;
put 'aC5nZXQod2UpO0VlLm5lZWRlZCYmKCEoXy5pbmRleE9mKFcpPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0ZXN8fHBlKSYmKEVlLnN0cmluZ3MucHVzaCh7dmFsdWU6VyxbZl06VH0pLF8ucHVzaChXKSxFZS5uZWVkZWQtPTEpfSksaH19Y29uc3QgZ3JlPWNqO3NvLmdldFNpbmdsZXRvbigpLnJl'@;
put 'Z2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCBreT0iYXV0b0NvbHVtblNpemUiLHVqPW5ldyBXZWFrTWFwO2NsYXNzIEF5IGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGt5fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJu'@;
put 'IDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx1ai5zZXQodGhpcyx7Y2Fj'@;
put 'aGVkQ29sdW1uSGVhZGVyczpbXX0pLHRoaXMuZ2hvc3RUYWJsZT1uZXcgbGoodGhpcy5ob3QpLHRoaXMuc2FtcGxlc0dlbmVyYXRvcj1uZXcgZ3JlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpO2xldCBmPSIiO2guc3Bhbm5lZHx8KGY9dGhpcy5ob3QuZ2V0RGF0'@;
put 'YUF0Q2VsbChhLGQpKTtsZXQgXz0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikmJihfPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLF8saCxmKSkse3ZhbHVlOmYsYnVuZGxlU2VlZDpffX0pLHRoaXMuZmly'@;
put 'c3RDYWxjdWxhdGlvbj0hMCx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJlZENvbHVtbnM9MCx0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgV3AsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXplIix0aGlzLmNvbHVtbldpZHRoc01hcCks'@;
put 'dGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUoYSxkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClba3ldJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9ZW5h'@;
put 'YmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV07YSYmbnVsbCE9YS51c2VIZWFkZXJzJiZ0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygidXNlSGVhZGVycyIsYS51c2VIZWFkZXJzKSx0aGlzLnNl'@;
put 'dFNhbXBsaW5nT3B0aW9ucygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixkPT50aGlzLm9uQmVmb3JlQ2hhbmdlKGQpKSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGQ9PnRoaXMub25BZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlKGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGQ9PnRoaXMub25CZWZvcmVWaWV3UmVuZGVyKGQpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdp'@;
put 'ZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFu'@;
put 'Z2VkKCk7bC5sZW5ndGgmJih0aGlzLmNsZWFyQ2FjaGUobCksdGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUi'@;
put 'LChsLGEsZCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJldHVybjtjb25zdCBhPXRoaXMuaG90LnJlbmRlckNhbGwsZD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigp'@;
put 'LGg9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xPT09ZHx8LTE9PT1ofHx0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpkLHRvOmh9LHZvaWQgMCxhKX1jYWxjdWxhdGVDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4y'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO3ZvKGguZnJvbSxoLnRvLF89PntsZXQgVD10aGlzLmhvdC50b1BoeXNpY2FsQ29s'@;
put 'dW1uKF8pO251bGw9PT1UJiYoVD1fKSwoZHx8bnVsbD09PXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChUKSYmIXRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhUKSkmJkRuKHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoXyxm'@;
put 'KSxpZT0+e2xldFtwZSx3ZV09aWU7cmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4ocGUsd2UpfSl9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKF8sVCk9Pntjb25z'@;
put 'dCBXPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXyk7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KFcsVCl9KX0sITApLHRoaXMubWVhc3VyZWRDb2x1bW5zPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7bGV0'@;
put 'IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT0wO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgaD1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCBm'@;
put 'PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBkeShoKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206YSx0bzpNYXRoLm1pbihhK0F5LkNBTENVTEFUSU9OX1NURVAsZCl9LGwpLGE9YStBeS5DQUxDVUxBVElPTl9TVEVQKzEsYTxkP2g9'@;
put 'eWsoZik6KGR5KGgpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sXz10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7dGhpcy5maXJzdENhbGN1bGF0aW9uJiZfPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206'@;
put 'MCx0bzpffSxsKSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITEsYT1fKzEpLGE8ZD9mKCk6dGhpcy5pblByb2dyZXNzPSExfXNldFNhbXBsaW5nT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV0sYT1sJiZibChsLCJzYW1wbGluZ1JhdGlvIik/bC5zYW1wbGluZ1Jh'@;
put 'dGlvOnZvaWQgMCxkPWwmJmJsKGwsImFsbG93U2FtcGxlRHVwbGljYXRlcyIpP2wuYWxsb3dTYW1wbGVEdXBsaWNhdGVzOnZvaWQgMDthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksZCYmdGhpcy5zYW1wbGVzR2VuZXJh'@;
put 'dG9yLnNldEFsbG93RHVwbGljYXRlcyhkKX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe3RoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpKX1nZXRT'@;
put 'eW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtreV07bGV0IGE9QXkuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7cmV0dXJuIHVzKGwpJiYoYT1sLnN5bmNMaW1pdCxsTihhKT9hPUxOKGQsYSk6'@;
put 'YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Q29sdW1uV2lkdGgobCl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2b2lk'@;
put 'IDA7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsZVYuREVGQVVMVF9XSURUSCkpKSxofWdldEZpcnN0VmlzaWJs'@;
put 'ZUNvbHVtbigpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7aWYobC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5n'@;
put 'ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfWlmKGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO2lmKC0xIT09YSlyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz'@;
put 'dWFsRnJvbVJlbmRlcmFibGVJbmRleChhKX1yZXR1cm4tMX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7aWYobC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4o'@;
put 'KTtpZigtMSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9aWYobC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXtjb25zdCBhPWwud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtpZigt'@;
put 'MSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9cmV0dXJuLTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldENvbEhlYWRlcigpLHtjYWNoZWRDb2x1bW5IZWFk'@;
put 'ZXJzOmF9PXVqLmdldCh0aGlzKTtyZXR1cm4gQWwobCwoaCxmLF8pPT57Y29uc3QgVD1hLmxlbmd0aDtyZXR1cm4oVC0xPF98fGFbX10hPT1mKSYmaC5wdXNoKF8pLFQtMTxfP2EucHVzaChmKTphW19dPWYsaH0sW10pfWNsZWFyQ2FjaGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107bC5sZW5ndGg/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntEbihsLGE9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1p'@;
put 'c05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhXzEodGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucyksbD0+bnVsbD09PWwpLmxlbmd0aH1vbkJlZm9yZVZpZXdSZW5kZXIoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lk'@;
put 'dGgoKSx0aGlzLmlzTmVlZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9b25BZnRlckxvYWREYXRhKCl7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCk6c2V0VGltZW91dCgoKT0+e3Ro'@;
put 'aXMuaG90JiZ0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9LDApfW9uQmVmb3JlQ2hhbmdlKGwpe2NvbnN0IGE9Y3MobCxkPT57bGV0WyxoXT1kO3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHRoaXMuaG90LnByb3BUb0NvbChoKSl9KTt0aGlzLmNsZWFyQ2FjaGUo'@;
put 'QXJyYXkuZnJvbShuZXcgU2V0KGEpKSl9b25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpe2xldCBoPWw7cmV0dXJuIGQmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChhLHZvaWQgMCwhMCksaD10aGlzLmdldENvbHVtbldpZHRoKGEsdm9pZCAwLCExKSksaH1vbkFmdGVySW5pdCgpe3Vq'@;
put 'LmdldCh0aGlzKS5jYWNoZWRDb2x1bW5IZWFkZXJzPXRoaXMuaG90LmdldENvbEhlYWRlcigpfW9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShsKXtjb25zdCBkPWNzKF8xKGwsaD0+e3ZhciBmO3JldHVybiBLaShudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5j'@;
put 'b2wpfSksaD0+aC5hZGRyZXNzLmNvbCk7dGhpcy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChkKSkpfWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IERnPXtob3Jpem9udGFsOiJob3Jpem9udGFsIix2ZXJ0aWNhbDoidmVydGlj'@;
put 'YWwifTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgbEllPVsiZmlsbEhhbmRs'@;
put 'ZSJdO2NsYXNzIGRJZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJhdXRvZmlsbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bImF1dG9maWxsIiwuLi5sSWVdfWNvbnN0cnVj'@;
put 'dG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5kaXJlY3Rpb25z'@;
put 'PVtdLHRoaXMuYXV0b0luc2VydFJvdz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJh'@;
put 'ZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+dGhpcy5vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bihsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT50aGlzLm9uQ2VsbENvcm5lckRibENsaWNrKGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2Vs'@;
put 'bE1vdXNlT3ZlciIsKGwsYSk9PnRoaXMub25CZWZvcmVDZWxsTW91c2VPdmVyKGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJv'@;
put 'dHRvbUVuZENvcm5lcigpLF89dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLFt7c3RhcnRSb3c6YSxzdGFydENvbDpkLGVuZFJvdzpoLGVuZENvbDpmfV0pLFQ9W10sVz1bXSxpZT1bXTtyZXR1cm4gRG4oXyxwZT0+e2ZvcihsZXQgd2U9cGUuc3RhcnRSb3c7d2U8PXBl'@;
put 'LmVuZFJvdzt3ZSs9MSktMT09PVQuaW5kZXhPZih3ZSkmJlQucHVzaCh3ZSk7Zm9yKGxldCB3ZT1wZS5zdGFydENvbDt3ZTw9cGUuZW5kQ29sO3dlKz0xKS0xPT09Vy5pbmRleE9mKHdlKSYmVy5wdXNoKHdlKX0pLERuKFQscGU9Pntjb25zdCB3ZT1bXTtEbihXLEVlPT57d2UucHVzaCh0aGlz'@;
put 'LmhvdC5nZXRDb3B5YWJsZURhdGEocGUsRWUpKX0pLGllLnB1c2god2UpfSksaWV9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0'@;
put 'RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz1mLmdldFRvcFN0YXJ0Q29ybmVyKCksVD1mLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgVz1bXy5yb3csXy5jb2ws'@;
put 'VC5yb3csVC5jb2xdLGllPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixbTWF0aC5taW4oXy5yb3csbCksTWF0aC5taW4oXy5jb2wsYSksTWF0aC5tYXgoVC5yb3csZCksTWF0aC5tYXgoVC5jb2wsaCldLFcpLHtkaXJlY3Rpb25PZkRyYWc6cGUsc3RhcnRPZkRyYWdD'@;
put 'b29yZHM6d2UsZW5kT2ZEcmFnQ29vcmRzOkVlfT1mdW5jdGlvbiBvSWUoYyxsLGEpe2xldCBkLGgsZjtyZXR1cm4gbFswXT09PWNbMF0mJmxbMV08Y1sxXT8oZj0ibGVmdCIsZD1hKGxbMF0sbFsxXSksaD1hKGxbMl0sY1sxXS0xKSk6bFsyXT09PWNbMl0mJmxbMF09PT1jWzBdJiZsWzNdPmNb'@;
put 'M10/KGY9InJpZ2h0IixkPWEobFswXSxjWzNdKzEpLGg9YShsWzJdLGxbM10pKTpsWzBdPGNbMF0mJmxbMV09PT1jWzFdPyhmPSJ1cCIsZD1hKGxbMF0sbFsxXSksaD1hKGNbMF0tMSxsWzNdKSk6bFsyXT5jWzJdJiZsWzFdPT09Y1sxXSYmKGY9ImRvd24iLGQ9YShjWzJdKzEsbFsxXSksaD1h'@;
put 'KGxbMl0sbFszXSkpLGQmJmQubm9ybWFsaXplKCksaCYmaC5ub3JtYWxpemUoKSx7ZGlyZWN0aW9uT2ZEcmFnOmYsc3RhcnRPZkRyYWdDb29yZHM6ZCxlbmRPZkRyYWdDb29yZHM6aH19KFcsaWUsKFplLGl0KT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoWmUsaXQpKTtpZih3ZSYmd2Uu'@;
put 'cm93Pi0xJiZ3ZS5jb2w+LTEpe2NvbnN0IFplPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLGl0PWYuY2xvbmUoKSxldD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHdlLHdlLEVlKSx5dD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLFplLGl0LGV0LHBlKTtpZighMT09PXl0'@;
put 'KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBFdD15dDtjb25zdCBTdD15dDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YocGUpPi0xJiYoMSE9PVN0Lmxlbmd0aHx8MCE9PVN0WzBdLmxlbmd0aCkp'@;
put 'aWYoRXQ9W10sInVwIj09PXBlKXtjb25zdCBKdD1FZS5yb3ctd2Uucm93KzEsbm49SnQlU3QubGVuZ3RoO2ZvcihsZXQgdm49MDt2bjxKdDt2bisrKUV0LnB1c2goU3RbKHZuKyhTdC5sZW5ndGgtbm4pKSVTdC5sZW5ndGhdKX1lbHNle2NvbnN0IEp0PUVlLmNvbC13ZS5jb2wrMSxubj1KdCVT'@;
put 'dFswXS5sZW5ndGg7Zm9yKGxldCB2bj0wO3ZuPFN0Lmxlbmd0aDt2bisrKXtFdC5wdXNoKFtdKTtmb3IobGV0IE5uPTA7Tm48SnQ7Tm4rKylFdFt2bl0ucHVzaChTdFt2bl1bKE5uKyhTdFt2bl0ubGVuZ3RoLW5uKSklU3Rbdm5dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJh'@;
put 'eSh3ZS5yb3csd2UuY29sLEV0LEVlLnJvdyxFZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlvbihpZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLEV0LGl0LGV0LHBlKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90'@;
put 'Ll9yZWZyZXNoQm9yZGVycygpO3JldHVybiEwfXJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChsKXtyZXR1cm4gbC5yb3c8MCYmKGwucm93PTApLGwuY29sPDAmJihsLmNvbD0wKSxsfWdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGg9bDtpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcudmVydGljYWwpJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcuaG9yaXpvbnRhbCkpe2NvbnN0IGY9YS5nZXRUb3BTdGFydENvcm5lcigpOyhkLmNv'@;
put 'bDw9bC5jb2x8fGYuY29sPj1sLmNvbCkmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKSksKGQucm93PGwucm93fHxmLnJvdz5sLnJvdykmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKSl9ZWxzZSBpZih0aGlzLmRpcmVjdGlvbnMu'@;
put 'aW5jbHVkZXMoRGcudmVydGljYWwpKWg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpO2Vsc2V7aWYoIXRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhEZy5ob3Jpem9udGFsKSlyZXR1cm47aD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCl9cmV0'@;
put 'dXJuIHRoaXMucmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGgpfXNob3dCb3JkZXIobCl7Y29uc3QgYT10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpO2EmJnRoaXMucmVkcmF3Qm9yZGVycyhhKX1hZGRSb3coKXt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57'@;
put 'dGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLHZvaWQgMCwxLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGApLHRoaXMuYWRkaW5nU3RhcnRlZD0hMX0sMjAwKX1hZGROZXdSb3dJZk5lZWRlZCgpe2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0Vt'@;
put 'cHR5KCkmJiExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmF1dG9JbnNlcnRSb3cpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZD10aGlzLmhvdC5jb3VudFJv'@;
put 'd3MoKTtsWzJdPGQtMSYmYVsyXT09PWQtMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0RGF0YSgpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGg7Zm9yKGxl'@;
put 'dCBmPWxbMl0rMTtmPGQ7ZisrKXtmb3IobGV0IFc9bFsxXTtXPD1sWzNdO1crKylpZihhW2ZdW1ddKXJldHVybi0xOyhhW2ZdW2xbMV0tMV18fGFbZl1bbFszXSsxXSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlz'@;
put 'LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVj'@;
put 'dENlbGwoLi4uY3MobCxhPT5NYXRoLm1heChhLDApKSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhp'@;
put 'cy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdC'@;
put 'b3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52'@;
put 'aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9S2wodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK2Fs'@;
put 'KHRoaXMuaG90LnRhYmxlKSxoPUtsKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3dhKHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0'@;
put 'e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRo'@;
put 'aXMub25Nb3VzZU1vdmUoYSkpfW9uQ2VsbENvcm5lckRibENsaWNrKCl7dGhpcy5zZWxlY3RBZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfW9uQWZ0ZXJDZWxsQ29ybmVyTW91c2VEb3duKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1v'@;
put 'bkJlZm9yZUNlbGxNb3VzZU92ZXIobCl7dGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9yZGVyKGwpLHRoaXMuYWRkTmV3'@;
put 'Um93SWZOZWVkZWQoKSl9b25Nb3VzZVVwKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEpfW9uTW91c2VNb3ZlKGwp'@;
put 'e2NvbnN0IGE9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCk7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmE/KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0'@;
put 'c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1jbGVhck1hcHBlZFNldHRpbmdzKCl7dGhpcy5kaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuYXV0b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24g'@;
put 'c0llKGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMoRGcpLGwuYXV0b0luc2VydFJvdz0hMCk6dXMoYyk/KGwuYXV0b0luc2VydFJvdz0hIUtpKGMuYXV0b0luc2VydFJvdykmJmMuZGlyZWN0aW9uIT09RGcuaG9yaXpvbnRhbCYmYy5hdXRvSW5z'@;
put 'ZXJ0Um93LGwuZGlyZWN0aW9ucz1LaShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qua2V5cyhEZykpOiJzdHJpbmciPT10eXBlb2YgYz8obC5kaXJlY3Rpb25zPVtjXSxsLmF1dG9JbnNlcnRSb3c9ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0'@;
put 'aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVjdGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwuYXV0b0luc2VydFJvd31kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBHaz0iYXV0b1Jvd1NpemUiO2NsYXNzIFR5IGV4dGVuZHMg'@;
put 'WnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdrfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lO'@;
put 'Q19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5yb3dIZWlnaHRzTWFwPXZvaWQgMCx0aGlzLmhlYWRlckhlaWdodD1udWxsLHRoaXMuZ2hvc3RUYWJsZT1uZXcgbGoodGhpcy5ob3QpLHRoaXMuc2FtcGxlc0dlbmVyYXRvcj1uZXcg'@;
put 'Z3JlKChhLGQpPT57bGV0IGg7cmV0dXJuIGE+PTA/aD10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCk6LTE9PT1hJiYoaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoZCkpLHt2YWx1ZTpofX0pLHRoaXMuZmlyc3RDYWxjdWxhdGlvbj0hMCx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5tZWFzdXJl'@;
put 'ZFJvd3M9MCx0aGlzLnJvd0hlaWdodHNNYXA9bmV3IFdwLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGEsZCxoKT0+dGhpcy5vbkJlZm9yZVJvd1Jlc2l6'@;
put 'ZShhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHa107cmV0dXJuITA9PT1sfHx1cyhsKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0U2FtcGxpbmdPcHRpb25zKCksdGhpcy5hZGRIb29rKCJhZnRlckxv'@;
put 'YWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGE9PnRoaXMub25CZWZvcmVDaGFuZ2UoYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5y'@;
put 'ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixhPT50aGlzLm9uQmVmb3JlVmlld1JlbmRlcihhKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT50aGlzLmdldFJvd0hlaWdodChkLGEpKSx0aGlzLmFkZEhvb2so'@;
put 'Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVS'@;
put 'b3dSZXNpemUiLChsLGEsZCk9PnRoaXMub25CZWZvcmVSb3dSZXNpemUobCxhLGQpKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCkt'@;
put 'MX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVt'@;
put 'YmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBfPXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsZik7dGhpcy5n'@;
put 'aG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3coXy5nZXQoLTEpKX12byhoLmZyb20saC50byxfPT57KGR8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KF8pKSYmRG4odGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhfLGYpLFc9Pnts'@;
put 'ZXRbaWUscGVdPVc7cmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coaWUscGUpfSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChfLFQpPT57XzwwP3RoaXMuaGVhZGVySGVp'@;
put 'Z2h0PVQ6dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KF8pLFQpfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPTA7Y29uc3QgZD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldCBoPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IGY9KCk9PntpZigh'@;
put 'dGhpcy5ob3QpcmV0dXJuIGR5KGgpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206YSx0bzpNYXRoLm1pbihhK1R5LkNBTENVTEFUSU9OX1NURVAsZCl9LGwpLGE9YStUeS5DQUxDVUxBVElPTl9TVEVQKzEsYTxkP2g9eWsoZik6KGR5KGgp'@;
put 'LHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVy'@;
put 'bGF5LmNsb25lLmRyYXcoKSl9LF89dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmXz49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTowLHRvOl99LGwpLHRoaXMuZmlyc3RDYWxjdWxhdGlvbj0hMSxhPV8rMSksYTxkP2YoKToo'@;
put 'dGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCExKSl9c2V0U2FtcGxpbmdPcHRpb25zKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0drXSxhPWwmJmJsKGwsInNhbXBsaW5nUmF0aW8iKT9sLnNhbXBsaW5nUmF0aW86dm9pZCAwLGQ9'@;
put 'bCYmYmwobCwiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIik/bC5hbGxvd1NhbXBsZUR1cGxpY2F0ZXM6dm9pZCAwO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSxkJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dE'@;
put 'dXBsaWNhdGVzKGQpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe2U3KHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpJiYodGhpcy5jbGVhckNhY2hlKCksdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlz'@;
put 'LmhvdC5nZXRTZXR0aW5ncygpW0drXTtsZXQgYT1UeS5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gdXMobCkmJihhPWwuc3luY0xpbWl0LGxOKGEpP2E9TE4oZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRSb3dIZWlnaHQo'@;
put 'bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZvaWQgMDtjb25zdCBkPWw8MD90aGlzLmhlYWRlckhlaWdodDp0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpO2xl'@;
put 'dCBoPWE7cmV0dXJuIG51bGwhPT1kJiZkPihhfHwwKSYmKGg9ZCksaH1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWFkZXJIZWlnaHR9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dDtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNp'@;
put 'YmxlQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCk6bC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yP2wud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCk6LTF9Z2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O3JldHVy'@;
put 'biBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yP2wud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpOmwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCk6LTF9Y2xlYXJDYWNoZSgpe3RoaXMuaGVhZGVySGVpZ2h0'@;
put 'PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwLmluaXQoKX1jbGVhckNhY2hlQnlSYW5nZShsKXtjb25zdHtmcm9tOmEsdG86ZH09Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bDt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3ZvKE1hdGgubWluKGEsZCksTWF0aC5tYXgoYSxk'@;
put 'KSxoPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfSl9LCEwKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhXzEodGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJvd3MpLGw9Pm51bGw9PT1sKS5sZW5ndGh9'@;
put 'b25CZWZvcmVWaWV3UmVuZGVyKCl7Y29uc3QgbD10aGlzLmhvdC5yZW5kZXJDYWxsLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGg9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2lmKC0xIT09ZCYmLTEhPT1oKXtp'@;
put 'Zih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206ZCx0bzpofSx2b2lkIDAsbCksYSl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKS0xO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpmLWEsdG86Zn0pfXRoaXMuaXNOZWVkUmVjYWxjdWxhdGUoKSYmIXRoaXMuaW5Qcm9n'@;
put 'cmVzcyYmdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9fW9uQmVmb3JlUm93TW92ZShsLGEpe3RoaXMuY2xlYXJDYWNoZUJ5UmFuZ2Uoe2Zyb206bCx0bzphfSksdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9b25CZWZvcmVSb3dSZXNpemUobCxhLGQpe2xldCBoPWw7cmV0dXJu'@;
put 'IGQmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoYSx2b2lkIDAsITApLGg9dGhpcy5nZXRSb3dIZWlnaHQoYSkpLGh9b25BZnRlckxvYWREYXRhKCl7dGhpcy5ob3Qudmlldz90aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpOnNldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdCYmdGhpcy5y'@;
put 'ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX0sMCl9b25CZWZvcmVDaGFuZ2UobCl7bGV0IGE9bnVsbDsxPT09bC5sZW5ndGg/YT1sWzBdWzBdOmwubGVuZ3RoPjEmJihhPXtmcm9tOmxbMF1bMF0sdG86bFtsLmxlbmd0aC0xXVswXX0pLG51bGwhPT1hJiZ0aGlzLmNsZWFyQ2FjaGVCeVJhbmdl'@;
put 'KGEpfWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IHZyZT1uZXcgTWFwKFtbImluZGV4ZXNTZXF1ZW5jZSIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpjVixnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpneX1dLFsicGh5c2ljYWxseUlu'@;
put 'ZGV4ZWQiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6aFYsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6ZlZ9XV0pLF9yZT1jPT57aWYoITE9PT12cmUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgQWx0ZXIgc3RyYXRlZ3kgd2l0aCBJRCAnJHtjfScgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJu'@;
put 'IHZyZS5nZXQoYyl9LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6cEllLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmdJZX09X3JlKCJwaHlzaWNhbGx5SW5kZXhlZCIpLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6X0llLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmJJZX09X3JlKCJwaHlz'@;
put 'aWNhbGx5SW5kZXhlZCIpLGRqPSJiaW5kUm93c1dpdGhIZWFkZXJzIixNSWU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgbUllIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWRWKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4'@;
put 'ZWRWYWx1ZXM9cEllKGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9Z0llKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9dVYoYSxsKSxzdXBlci5yZW1vdmUobCl9fV0sWyJzdHJpY3QiLGNsYXNzIHlJ'@;
put 'ZSBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPV9JZSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCxhLChkLGgpPT50aGlzLmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcz1iSWUodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ2V0VmFsdWVzKCkpKzErbH19XV0pO2NsYXNzIHhJZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBk'@;
put 'an1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5oZWFkZXJJbmRleGVzPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RqXX1lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJs'@;
put 'ZWQpcmV0dXJuO2xldCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbZGpdOyJzdHJpbmciIT10eXBlb2YgbCYmKGw9Imxvb3NlIik7Y29uc3QgYT1NSWUuZ2V0KGwpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVh'@;
put 'ZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixkPT50aGlzLm9uTW9kaWZ5Um93SGVhZGVyKGQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVh'@;
put 'ZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1vbk1vZGlmeVJvd0hlYWRlcihsKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoaihjLGwsYSl7'@;
put 'cmV0dXJuIGw9ZnVuY3Rpb24gQUllKGMpe3ZhciBsPWZ1bmN0aW9uIFRJZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo'@;
put 'Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5'@;
put 'cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGJyZShjLGwpe3JldHVybiBmdW5jdGlvbiBESWUoYyxsKXtyZXR1'@;
put 'cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHlyZShjLGwsImdldCIpKX1mdW5jdGlvbiBmaihjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIExJZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0'@;
put 'ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMseXJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiB5cmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBu'@;
put 'b24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9Y29uc3QgcGo9ImNvbGxhcHNpYmxlQ29sdW1ucyIsUkllPVsibmVzdGVkSGVhZGVycyJdLEM3PSJjb2xsYXBzaWJsZUluZGljYXRvciIsd3JlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9y'@;
put 'ZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBTNz1uZXcgV2Vha01hcDtjbGFz'@;
put 'cyBPSWUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksaGoodGhpcywibmVzdGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksaGoodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgbGwodGhpcykpLGhqKHRoaXMsImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rp'@;
put 'b24gRUllKGMsbCxhKXsoZnVuY3Rpb24ga0llKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxTNyx7d3JpdGFi'@;
put 'bGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3RlZEhlYWRlcnMiXX1zdGF0aWMgZ2V0IFNFVFRJ'@;
put 'TkdfS0VZUygpe3JldHVybltwaiwuLi5SSWVdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwal19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKTthfHxHYSgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksZmoodGhpcyxTNyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRo'@;
put 'aXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29r'@;
put 'KCJpbml0IiwoKT0+dGhpcy5vbkluaXQoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFm'@;
put 'dGVyR2V0Q29sSGVhZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKGQsaCxmKT0+dGhpcy5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihkLGgsZikpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1'@;
put 'Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzKXtjb25zdHtjb2xsYXBzaWJsZUNvbHVtbnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsiYm9vbGVhbiI9PXR5cGVvZiBsP3RoaXMuaGVhZGVyU3Rh'@;
put 'dGVNYW5hZ2VyLm1hcFN0YXRlKGE9Pih7Y29sbGFwc2libGU6YS5vcmlnQ29sc3Bhbj4xfSkpOkFycmF5LmlzQXJyYXkobCkmJih0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZSgoKT0+KHtjb2xsYXBzaWJsZTohMX0pKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tZXJnZVN0YXRl'@;
put 'V2l0aChsKSl9c3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksZmoodGhpcyxTNyxudWxsKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLmNsZWFyQnV0'@;
put 'dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jbGVhckJ1dHRvbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5USEVBRCxk'@;
put 'PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGg9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENv'@;
put 'cm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsLGY9ZnVuY3Rpb24oXyl7XyYmXy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF8pfTt2bygwLGwtMSxfPT57Y29uc3QgVD1hLmNoaWxkTm9kZXNbX10sVz1kLmNoaWxkTm9kZXNbX10saWU9aD9oLmNoaWxkTm9kZXNbX106bnVsbDt2'@;
put 'bygwLFQuY2hpbGROb2Rlcy5sZW5ndGgtMSxwZT0+e2xldCB3ZT1ULmNoaWxkTm9kZXNbcGVdLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApO2Yod2UpLFcmJlcuY2hpbGROb2Rlc1twZV0mJih3ZT1XLmNoaWxkTm9kZXNbcGVdLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApLGYod2UpKSxoJiZpZSYm'@;
put 'aWUuY2hpbGROb2Rlc1twZV0mJih3ZT1pZS5jaGlsZE5vZGVzW3BlXS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKSxmKHdlKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dn'@;
put 'bGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhkPT57Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOl8sY29s'@;
put 'dW1uSW5kZXg6VCxpc0NvbGxhcHNlZDpXfT1kO2lmKCEwPT09aCYmZj4xJiYoVyYmImV4cGFuZCI9PT1sfHwhVyYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3JkcyhfKSxjb2w6VH19KTt0aGlzLnRvZ2dsZUNvbGxhcHNp'@;
put 'YmxlU2VjdGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYo'@;
put 'IXdyZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD1fMShsLEVlPT57bGV0e3JvdzpaZX09RWU7cmV0dXJuIFplPDB9KTtsZXQgaD1kLmxlbmd0aD4wO0RuKGQs'@;
put 'RWU9Pnt2YXIgWmU7bGV0e3JvdzppdCxjb2w6ZXR9PUVlO2NvbnN0e2NvbGxhcHNpYmxlOnl0LGlzQ29sbGFwc2VkOkV0fT1udWxsIT09KFplPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGl0LGV0KSkmJnZvaWQgMCE9PVplP1plOnt9O2lmKCF5dHx8RXQmJiJj'@;
put 'b2xsYXBzZSI9PT1hfHwhRXQmJiJleHBhbmQiPT09YSlyZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sXz1bXTtoJiZEbihkLEVlPT57bGV0e3JvdzpaZSxjb2w6aXR9PUVlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRpb246ZXQsYWZmZWN0ZWRDb2x1bW5zOnl0LHJvbGxiYWNrTW9kaWZpY2F0'@;
put 'aW9uOkV0fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLFplLGl0KTtldD4wJiYoXy5wdXNoKC4uLnl0KSxmLnB1c2goRXQpKX0pO2NvbnN0IFQ9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IFc9W107ImNvbGxhcHNlIj09PWE/Vz1yTihb'@;
put 'Li4uVCwuLi5fXSk6ImV4cGFuZCI9PT1hJiYoVz1fMShULEVlPT4hXy5pbmNsdWRlcyhFZSkpKTtjb25zdCBpZT13cmUuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoaWUuYmVmb3JlSG9vayxULFcsaCkpcmV0dXJuIHZvaWQgRG4oZixFZT0+e0VlKCl9KTt0aGlzLmhvdC5iYXRj'@;
put 'aEV4ZWN1dGlvbigoKT0+e0RuKF8sRWU9PnticmUodGhpcyxTNykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRWUpLGllLmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCB3ZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1ULmxlbmd0aDt0aGlz'@;
put 'LmhvdC5ydW5Ib29rcyhpZS5hZnRlckhvb2ssVCxXLGgsd2UpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX1nZXRDb2xsYXBzZWRDb2x1bW5zKCl7cmV0dXJuIGJyZSh0aGlzLFM3KS5nZXRIaWRkZW5JbmRleGVzKCl9b25BZnRlckdldENv'@;
put 'bEhlYWRlcihsLGEsZCl7dmFyIGg7Y29uc3R7Y29sbGFwc2libGU6ZixvcmlnQ29sc3BhbjpfLGlzQ29sbGFwc2VkOlR9PW51bGwhPT0oaD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhkLGwpKSYmdm9pZCAwIT09aD9oOnt9LFc9ZiYmXz4xJiZsPj10aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2xldCBpZT1hLnF1ZXJ5U2VsZWN0b3IoYC4ke0M3fWApO3ZhciBwZTtXPyhpZXx8KGllPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxwaShpZSxDNyksYS5xdWVyeVNlbGVjdG9yKCJkaXY6Zmlyc3Qt'@;
put 'Y2hpbGQiKS5hcHBlbmRDaGlsZChpZSkpLFdvKGllLFsiY29sbGFwc2VkIiwiZXhwYW5kZWQiXSksVD8ocGkoaWUsImNvbGxhcHNlZCIpLGpwKGllLCIrIikpOihwaShpZSwiZXhwYW5kZWQiKSxqcChpZSwiLSIpKSk6bnVsbD09PShwZT1pZSl8fHZvaWQgMD09PXBlfHxwZS5yZW1vdmUoKX1v'@;
put 'bkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEpe0JvKGwudGFyZ2V0LEM3KSYmKEJvKGwudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQobC50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbYV0sImNvbGxhcHNlIikp'@;
put 'OkJvKGwudGFyZ2V0LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChsLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFthXSwiZXhwYW5kIikpLHYyKGwpKX1vbkluaXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfW9uQWZ0ZXJM'@;
put 'b2FkRGF0YShsLGEpe2F8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZGVzdHJveSgpe2ZqKHRoaXMsUzcsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBQSWU9WyJzb3J0RW1wdHlDZWxscyIsImluZGljYXRvciIsImhlYWRlckFjdGlvbiIsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiXTtjbGFz'@;
put 'cyBWSWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuc29ydGluZ1N0YXRlcz1uZXcgRWssdGhpcy5zb3J0RW1wdHlDZWxscz0hMSx0aGlzLmluZGljYXRvcj0hMCx0aGlzLmhlYWRlckFjdGlvbj0hMCx0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dm9pZCAwLHRoaXMubWFw'@;
put 'TmFtZT1hLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGEsdGhpcy5zb3J0aW5nU3RhdGVzKX11cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKXt1cyhsKSYmZHMobCwoYSxkKT0+e1BJZS5pbmNsdWRlcyhkKSYmKHRoaXNbZF09YSl9KX1nZXRBbGxDb2x1bW5zUHJv'@;
put 'cGVydGllcygpe2NvbnN0IGw9e3NvcnRFbXB0eUNlbGxzOnRoaXMuc29ydEVtcHR5Q2VsbHMsaW5kaWNhdG9yOnRoaXMuaW5kaWNhdG9yLGhlYWRlckFjdGlvbjp0aGlzLmhlYWRlckFjdGlvbn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSYm'@;
put 'KGwuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT10aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpLGx9Z2V0U29ydE9yZGVyT2ZDb2x1bW4obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4o'@;
put 'bCkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zb3J0T3JkZXJ9Z2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpe3JldHVybiBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5maW5kSW5kZXgoYT0+e2xldFtkXT1hO3JldHVy'@;
put 'biBkPT09bH0pfWdldE51bWJlck9mU29ydGVkQ29sdW1ucygpe3JldHVybiB0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCl9aXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl9aXNDb2x1bW5Tb3J0ZWQobCl7'@;
put 'cmV0dXJuIHVzKHRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfWdldFNvcnRTdGF0ZXMoKXtyZXR1cm4gbnVsbD09PXRoaXMuc29ydGluZ1N0YXRlcz9bXTp0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChh'@;
put 'PT57bGV0W2QsaF09YTtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpLC4uLmh9fSl9Z2V0Q29sdW1uU29ydFN0YXRlKGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihLaShhKSlyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOmF9fXNldFNv'@;
put 'cnRTdGF0ZXMobCl7dGhpcy5zb3J0aW5nU3RhdGVzLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsW2FdLmNvbHVtbikse3NvcnRPcmRlcjpsW2FdLnNvcnRPcmRl'@;
put 'cn0pfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fWNvbnN0ICRrPSJhc2MiLHFrPSJkZXNjIjtmdW5jdGlvbiBDcmUoYyl7aWYoYyE9PXFrKXJldHVybiBjPT09JGs/cWs6JGt9'@;
put 'ZnVuY3Rpb24gU3JlKGMpe3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKX1mdW5jdGlvbiBNcmUoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJheS5mcm9tKGEp'@;
put 'LmluZGV4T2YobC5wYXJlbnROb2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24gZ2ooYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1VcChhKX1jb25zdCB4cmU9ImluZGljYXRvckRpc2FibGVkIixFcmU9ImNvbHVtblNvcnRpbmciLGtyZT0ic29ydEFjdGlvbiIsQXJlPW5ldyBNYXAo'@;
put 'W1skaywiYXNjZW5kaW5nIl0sW3FrLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiBUcmUoYyxsLGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6X309YTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dl'@;
put 'ckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi50b0xvY2FsZUxvd2VyQ2FzZShkKSksaD09PWY/MDpnYyhoKT9nYyhmKT8wOl8mJiJhc2MiPT09Yz8tMToxOmdjKGYpP18mJiJhc2MiPT09Yz8xOi0xOmlzTmFOKGgpJiYhaXNOYU4oZik/ImFzYyI9PT1jPzE6LTE6IWlzTmFOKGgp'@;
put 'JiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jPy0xOjE6aD5mPyJhc2MiPT09Yz8xOi0xOjB9fWNvbnN0e3JlZ2lzdGVyOktrLGdldEl0ZW06THJlLGhhc0l0ZW06ZVJlfT1wZCgic29ydGluZy5j'@;
put 'b21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOklyZSxnZXRJdGVtOnRSZX09cGQoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gUnJlKGMpe3JldHVybiBlUmUoYyk/THJlKGMpOkxyZSgiZGVmYXVsdCIpfUtrKCJudW1lcmljIixmdW5jdGlvbiAkSWUoYyxs'@;
put 'LGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSxfPXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOlR9PWE7aWYoZj09PV98fGlzTmFOKGYpJiZpc05hTihfKSlyZXR1cm4gMDtpZihUKXtpZihnYyhkKSlyZXR1cm4iYXNjIj09PWM/LTE6MTtpZihnYyho'@;
put 'KSlyZXR1cm4iYXNjIj09PWM/MTotMX1yZXR1cm4gaXNOYU4oZik/MTppc05hTihfKT8tMTpmPF8/ImFzYyI9PT1jPy0xOjE6Zj5fPyJhc2MiPT09Yz8xOi0xOjB9fSksS2soImNoZWNrYm94IixmdW5jdGlvbiBLSWUoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hl'@;
put 'Y2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbihfLFQpe2NvbnN0IFc9Z2MoXyksaWU9Z2MoVCkscGU9Vz9oOl8sd2U9aWU/aDpULEVlPXBlPT09aHx8cGU9PT1kLFplPXdlPT09aHx8d2U9PT1kO2lmKCExPT09Zil7aWYoVyYmITE9PT1pZSlyZXR1cm4g'@;
put 'MTtpZighMT09PVcmJmllKXJldHVybi0xfXJldHVybiExPT09RWUmJlplPyJhc2MiPT09Yz8tMToxOkVlJiYhMT09PVplPyJhc2MiPT09Yz8xOi0xOiExPT09RWUmJiExPT09WmU/VHJlKGMsbCxhKShfLFQpOnBlPT09aCYmd2U9PT1kPyJhc2MiPT09Yz8tMToxOnBlPT09ZCYmd2U9PT1oPyJh'@;
put 'c2MiPT09Yz8xOi0xOjB9fSksS2soImRhdGUiLGZ1bmN0aW9uIEpJZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4gMDtpZihnYyhkKSlyZXR1cm4gZ2MoaCk/MDpmJiYiYXNjIj09PWM/LTE6MTtpZihnYyhoKSly'@;
put 'ZXR1cm4gZiYmImFzYyI9PT1jPzE6LTE7Y29uc3QgXz1sLmRhdGVGb3JtYXQsVD1LbyhkLF8pLFc9S28oaCxfKTtyZXR1cm4gVC5pc1ZhbGlkKCk/Vy5pc1ZhbGlkKCk/Vy5pc0FmdGVyKFQpPyJhc2MiPT09Yz8tMToxOlcuaXNCZWZvcmUoVCk/ImFzYyI9PT1jPzE6LTE6MDotMToxfX0pLEtr'@;
put 'KCJkZWZhdWx0IixUcmUpO2NvbnN0IG1qPSJjb2x1bW5Tb3J0aW5nIjtJcmUobWosZnVuY3Rpb24gblJlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbihUKXtjb25zdCBXPWNbMF0saWU9bFswXSxwZT1oWzBdLHdlPWZb'@;
put 'MF0sRWU9aWUuY29sdW1uU29ydGluZztyZXR1cm4oRWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9FZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OlJyZShpZS50eXBlKSkoVyxpZSxFZSkocGUsd2UpfSgpfX0pLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0Iiks'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIpO2NsYXNzIFByZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBtan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0'@;
put 'aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMucGx1Z2luS2V5PW1qLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVu'@;
put 'YWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW5ldyBWSWUodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1uZXcgV3AoYT0+e2xldCBkPXRoaXMuaG90LnRv'@;
put 'VmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSksdGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCx0aGlzLmNvbHVtbk1ldGFDYWNoZSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihhLGQpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlRG93biguLi5hcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGEsZCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRh'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5ob3QudmlldyYmdGhpcy5sb2FkT3JTb3J0QnlTZXR0aW5ncygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7Y29uc3QgbD0oYSxkKT0+e2NvbnN0IGg9U3JlKGQp'@;
put 'OyExPT09TXJlKGEsZCl8fG51bGw9PT1ofHx0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaCl9O3RoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSks'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSkpfSwhMCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWApLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5kZXN0cm95'@;
put 'KCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c29ydChsKXtjb25zdCBhPXRoaXMuZ2V0U29ydENvbmZpZygpLGQ9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCksaD10aGlzLmFyZVZh'@;
put 'bGlkU29ydENvbmZpZ3MoZCk7ITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uU29ydCIsYSxkLGgpJiYoMD09PWEubGVuZ3RoJiZudWxsPT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9dGhpcy5ob3Qucm93SW5kZXhNYXBw'@;
put 'ZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXksbmV3IF9uZSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpKSxoJiYodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMo'@;
put 'ZCksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGQpLHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uU29ydCIsYSxoP2Q6YSxoKSxoJiYodGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSExLHRoaXMu'@;
put 'aG90LnZpZXcucmVuZGVyKCkpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIEtpKGwpP3Ro'@;
put 'aXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUobCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCk7dGhpcy5hcmVWYWxpZFNvcnRDb25m'@;
put 'aWdzKGEpJiZ0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhhKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/'@;
put 'bC5zbGljZSgwLDEpOltsXX1hcmVWYWxpZFNvcnRDb25maWdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIHpJZShjKXtpZihjLnNvbWUoYT0+ITE9PT1mdW5jdGlvbiBqSWUoYyl7aWYoITE9PT11cyhjKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46bCxz'@;
put 'b3J0T3JkZXI6YX09YztyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsKSYmWyRrLHFrXS5pbmNsdWRlcyhhKX0oYSkpKXJldHVybiExO2NvbnN0IGw9Yy5tYXAoYT0+e2xldHtjb2x1bW46ZH09YTtyZXR1cm4gZH0pO3JldHVybiBuZXcgU2V0KGwpLnNpemU9PT1sLmxlbmd0aH0obCkmJmwuZXZl'@;
put 'cnkoZD0+e2xldHtjb2x1bW46aH09ZDtyZXR1cm4gaDw9YSYmaD49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTthLmluaXRpYWxDb25maWc9Y3MobCxoPT57bGV0e2NvbHVtbjpmLC4u'@;
put 'Ll99PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpLC4uLl99fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJjb2x1bW5Tb3J0aW5nIixhKX1nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpe2NvbnN0IGw9e307dGhpcy5ob3QucnVu'@;
put 'SG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIixsKTtjb25zdCBhPWwudmFsdWU7cmV0dXJuIEtpKGEpJiZBcnJheS5pc0FycmF5KGEuaW5pdGlhbENvbmZpZykmJihhLmluaXRpYWxDb25maWc9Y3MoYS5pbml0aWFsQ29uZmlnLGg9PntsZXR7Y29sdW1uOmYsLi4u'@;
put 'X309aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpLC4uLl99fSkpLGF9Z2V0Q29sdW1uTmV4dENvbmZpZyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihLaShhKSl7Y29uc3QgaD1DcmUoYSk7cmV0'@;
put 'dXJuIEtpKGgpP3tjb2x1bW46bCxzb3J0T3JkZXI6aH06dm9pZCAwfWNvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmbD49MCYmbDxkKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6Q3JlKCl9fWdldE5leHRTb3J0Q29uZmlnKGwpe2xldCBhPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXBwZW5kIjtjb25zdCBkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCksaD0tMSE9PWQsZj10aGlzLmdldFNvcnRDb25maWcoKSxfPXRoaXMu'@;
put 'Z2V0Q29sdW1uTmV4dENvbmZpZyhsKTtpZihoKXtpZihJYShfKSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKV07aWYoImFwcGVuZCI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpLF9dO2lmKCJyZXBsYWNlIj09PWEpcmV0dXJuWy4uLmYu'@;
put 'c2xpY2UoMCxkKSxfLC4uLmYuc2xpY2UoZCsxKV19cmV0dXJuIEtpKF8pP2YuY29uY2F0KF8pOmZ9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKGwpe2lmKHVzKGwpKXtjb25zdCBhPWxbdGhpcy5wbHVnaW5LZXldO2lmKHVzKGEpKXJldHVybiBhfXJldHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRp'@;
put 'bmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0sZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxoPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaCk7cmV0'@;
put 'dXJuIEFycmF5LmlzQXJyYXkoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnNbbF0pKTpSYShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1ucyhsKSkpOk9i'@;
put 'amVjdC5hc3NpZ24oZCxhKX1nZXRGaXJzdENlbGxTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZD1PYmplY3QuY3JlYXRlKGEpO3JldHVybiBkW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3Qu'@;
put 'dG9QaHlzaWNhbENvbHVtbihsKSksZH1nZXROdW1iZXJPZlJvd3NUb1NvcnQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBhLm1heFJvd3M8PWw/YS5tYXhSb3dzOmwtYS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0U29ydFN0YXRlcyhsKXtpZigwPT09bC5sZW5n'@;
put 'dGgpcmV0dXJuIHZvaWQgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPWllPT5jcyhsLHBlPT50aGlzLmhvdC5nZXREYXRhQXRD'@;
put 'ZWxsKGllLHBlLmNvbHVtbikpO2ZvcihsZXQgaWU9MDtpZTx0aGlzLmdldE51bWJlck9mUm93c1RvU29ydChkKTtpZSs9MSlhLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coaWUpXS5jb25jYXQoaChpZSkpKTtjb25zdCBmPWNzKGEsaWU9PmllWzBdKTshZnVuY3Rpb24gR0llKGMsbCl7'@;
put 'Y29uc3QgYT10UmUobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSxjcyhsLGllPT5pZS5zb3J0T3JkZXIpLGNzKGwsaWU9PnRo'@;
put 'aXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoaWUuY29sdW1uKSkpO2ZvcihsZXQgaWU9YS5sZW5ndGg7aWU8ZDtpZSs9MSlhLnB1c2goW2llXS5jb25jYXQoaChpZSkpKTtjb25zdCBfPWNzKGEsaWU9PmllWzBdKSxUPW5ldyBNYXAoY3MoZiwoaWUscGUpPT5baWUsX1twZV1dKSksVz1jcyh0aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxpZT0+VC5oYXMoaWUpP1QuZ2V0KGllKTppZSk7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFcpfWxvYWRPclNvcnRCeVNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmdldEFsbFNhdmVkU29y'@;
put 'dFNldHRpbmdzKCk7aWYodXMobCkpdGhpcy5zb3J0QnlTZXR0aW5ncyhsKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlTZXR0aW5ncyhhKX19c29ydEJ5U2V0dGluZ3MobCl7aWYodXMobCkpe3RoaXMuY29sdW1uU3RhdGVz'@;
put 'TWFuYWdlci51cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKTtjb25zdCBhPWwuaW5pdGlhbENvbmZpZzsoQXJyYXkuaXNBcnJheShhKXx8dXMoYSkpJiZ0aGlzLnNvcnQoYSl9ZWxzZSB0aGlzLmhvdC5yZW5kZXIoKX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7Y29uc3QgZD1TcmUoYSk7'@;
put 'aWYoITE9PT1NcmUobCxhKXx8bnVsbD09PWQpcmV0dXJuO2NvbnN0IGg9dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhsKVt0aGlzLnBsdWdpbktleV07dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGQsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLGwsaC5pbmRpY2F0b3IsaC5oZWFkZXJBY3Rp'@;
put 'b24pfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYoV28obCxmdW5jdGlvbiBXSWUoKXtyZXR1cm4gQXJyYXkuZnJvbShBcmUudmFsdWVzKCkpLmNvbmNhdChrcmUseHJlLEVyZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShh'@;
put 'PjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cGkobCxmdW5jdGlvbiBZSWUoYyxsLGEsZCl7Y29uc3QgaD1bRXJlXTtpZihkJiZoLnB1c2goa3JlKSwhMT09PWEpcmV0dXJuIGgucHVzaCh4cmUpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3Jl'@;
put 'dHVybiBLaShmKSYmaC5wdXNoKEFyZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKCksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLmdldE51bWJlck9mSW5kZXhlcygpKSxLaShsW3RoaXMucGx1Z2luS2V5XSkmJnRoaXMuc29ydEJ5U2V0dGluZ3MobFt0aGlzLnBsdWdpbktleV0pfW9uQWZ0ZXJMb2FkRGF0YShsKXshMD09PWwmJnRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKX13YXNDbGlj'@;
put 'a2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmIlNQQU4iPT09bC50YXJnZXQubm9kZU5hbWV9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7ITEhPT1naihhLnJvdyxh'@;
put 'LmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihoLmNvbHVtbj0hMCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRo'@;
put 'aXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpKSx0aGlzLnNvcnQodGhpcy5nZXRDb2x1'@;
put 'bW5OZXh0Q29uZmlnKGEuY29sKSkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB2aihjKXtyZXR1cm4gbnVsbD09Y3x8aXNOYU4oYyl9Y29uc3QgX2o9'@;
put 'ImNvbHVtblN1bW1hcnkiO2NsYXNzIGxSZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5lbmRwb2ludHM9bnVsbH1pc0VuYWJsZWQo'@;
put 'KXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX2pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW19qXSx0aGlzLmVuZHBvaW50cz1uZXcgY2xhc3Mgb1Jle2NvbnN0cnVjdG9yKGwsYSl7'@;
put 'dGhpcy5wbHVnaW49bCx0aGlzLmhvdD10aGlzLnBsdWdpbi5ob3QsdGhpcy5lbmRwb2ludHM9W10sdGhpcy5zZXR0aW5ncz1hLHRoaXMuc2V0dGluZ3NUeXBlPSJhcnJheSIsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1nZXRFbmRwb2ludChsKXty'@;
put 'ZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKVtsXTp0aGlzLmVuZHBvaW50c1tsXX1nZXRBbGxFbmRwb2ludHMoKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxs'@;
put 'TWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKTp0aGlzLmVuZHBvaW50c31maWxsTWlzc2luZ0VuZHBvaW50RGF0YShsKXtyZXR1cm4gdGhpcy5wYXJzZVNldHRpbmdzKGwuY2FsbCh0aGlzKSl9cGFyc2VTZXR0aW5ncyhsKXtjb25zdCBhPVtdO2xldCBkPWw7aWYoZHx8ImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIHRoaXMuc2V0dGluZ3MpcmV0dXJuIGR8fChkPXRoaXMuc2V0dGluZ3MpLERuKGQsaD0+e2NvbnN0IGY9e307dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmFuZ2VzIixbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZXZl'@;
put 'cnNlZFJvd0Nvb3JkcyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uUm93IixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJv'@;
put 'cGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Db2x1bW4iLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiBjb2x1bW4gZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29y'@;
put 'ayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJzb3VyY2VDb2x1bW4iLGguZGVzdGluYXRpb25Db2x1bW4pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInR5cGUiLCJzdW0iKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJmb3JjZU51bWVyaWMiLCExKSx0aGlz'@;
put 'LmFzc2lnblNldHRpbmcoaCxmLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRpbmco'@;
put 'aCxmLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJvdW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJyYW5n'@;
put 'ZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3RoKWlmKHZvaWQgMD09PWxbZF0pe2lmKGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxbZF19'@;
put 'ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtEbihm'@;
put 'LF89Pnsicm93Ij09PWgmJl8uZGVzdGluYXRpb25Sb3c+PWEmJigiaW5zZXJ0X3JvdyI9PT1sP18uYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYoXy5hbHRlclJvd09mZnNldD0tMSpkKSksImNvbCI9PT1oJiZfLmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9jb2wi'@;
put 'PT09bD9fLmFsdGVyQ29sdW1uT2Zmc2V0PWQ6InJlbW92ZV9jb2wiPT09bCYmKF8uYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IF89IShhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IEVlPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIsRWUpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50'@;
put 'cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsRWUpfWNvbnN0IFQ9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixXPWwuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxpZT10aGlzLmdldEFsbEVuZHBvaW50cygpLHBlPTA9PT1s'@;
put 'LmluZGV4T2YoIm1vdmVfcm93Iiksd2U9YTtEbihpZSxFZT0+eyJyb3ciPT09VCYmRWUuZGVzdGluYXRpb25Sb3c+PXdlJiYoRWUuYWx0ZXJSb3dPZmZzZXQ9VypkKSwiY29sIj09PVQmJkVlLmRlc3RpbmF0aW9uQ29sdW1uPj13ZSYmKEVlLmFsdGVyQ29sdW1uT2Zmc2V0PVcqZCl9KSx0aGlz'@;
put 'LnJlc2V0QWxsRW5kcG9pbnRzKGllLCFwZSksRG4oaWUscGU/RWU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKEVlLHdlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhFZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKEVlKX06RWU9Pnt0aGlzLnNo'@;
put 'aWZ0RW5kcG9pbnRDb29yZGluYXRlcyhFZSx3ZSl9KSxfJiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGwsYSxk'@;
put 'LGgpe0RuKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtjb25z'@;
put 'dCBkPVtdLGg9W107RG4obC5yYW5nZXMsZj0+e2NvbnN0IF89W107aWYoZlsxXSlmb3IobGV0IFQ9ZlswXTtUPD1mWzFdO1QrKylfLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhUKSk7ZWxzZSBfLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKF8pfSksRG4o'@;
put 'aCxmPT57bGV0IF89W107RG4oZiwoVCxXKT0+ezA9PT1XP18ucHVzaChUKTpmW1ddIT09ZltXLTFdKzEmJihfLnB1c2goZltXLTFdKSxkLnB1c2goXyksXz1bXSxfLnB1c2goVCkpLFc9PT1mLmxlbmd0aC0xJiYoXy5wdXNoKFQpLGQucHVzaChfKSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRFbmRw'@;
put 'b2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsRG4obC5yYW5nZXMsZD0+e0RuKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9KX0p'@;
put 'KTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3QgXz1oLmFsdGVyQ29sdW1u'@;
put 'T2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rXz49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLERuKGwsaD0+e3RoaXMu'@;
put 'cmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxE'@;
put 'bih0aGlzLmdldEFsbEVuZHBvaW50cygpLGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMu'@;
put 'Y2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxEbihsLChkLGgsZik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNdfWAm'@;
put 'JkRuKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKF8sVCk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT1fLnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoVCkmJmEucHVzaChUKX0pfSksRG4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChkKSl9'@;
put 'KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaEVuZHBvaW50KGwpe3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMu'@;
put 'c2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5kcG9pbnRWYWx1ZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0'@;
put 'aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KyhhJiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjApKSwiIl0pfXNldEVuZHBvaW50VmFsdWUo'@;
put 'bCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGwuZGVzdGlu'@;
put 'YXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25zdCBfPXRoaXMuaG90LmdldENlbGxNZXRh'@;
put 'KGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fF8ucmVhZE9ubHkhPT1sLnJlYWRPbmx5KSYmKF8ucmVhZE9ubHk9bC5yZWFkT25seSxfLmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCIpfWwucm91bmRGbG9hdCYmIWlzTmFOKGwucmVzdWx0KSYmKGwucmVzdWx0PWwu'@;
put 'cmVzdWx0LnRvRml4ZWQobC5yb3VuZEZsb2F0KSksZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRd'@;
put 'KSxsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe0dhKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0'@;
put 'YWJsZSBib3VuZGFyaWVzISIpfX0odGhpcyx0aGlzLnNldHRpbmdzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFm'@;
put 'dGVyQ2hhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNy'@;
put 'ZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJD'@;
put 'cmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJT'@;
put 'dHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g'@;
put 'bC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb'@;
put 'aF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSb3dNb3ZlKC4uLmFyZ3VtZW50'@;
put 'cyl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVz'@;
put 'dWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1'@;
put 'bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIGRzKGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJj'@;
put 'ZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsXz0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPXZqKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgVD0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7'@;
put 'VD5fJiYoXz1UKX1kKz1mfHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqXykvMTAqKl99Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZHMobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3Vy'@;
put 'Y2VDb2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1h'@;
put 'eChsLGEsZCl7bGV0IF8saD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZihfPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksXz12aihfKT9udWxsOl8sbnVsbD09PWgpaD1fO2Vsc2UgaWYobnVsbCE9PV8pc3dpdGNoKGQpe2Nhc2UibWluIjpoPU1hdGgubWluKGgsXyk7YnJlYWs7Y2FzZSJtYXgiOmg9'@;
put 'TWF0aC5tYXgoaCxfKX1mLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPXZqKGQpP251bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0'@;
put 'dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIGRzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSxfPXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPV99KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJu'@;
put 'IHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksXz0i'@;
put 'IjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJihfPXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksXy5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVycm9yKEFhYENvbHVtblN1bW1hcnkgcGx1Z2lu'@;
put 'OiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfW9uQWZ0ZXJJbml0KCl7dGhpcy5lbmRwb2ludHMuZW5kcG9pbnRzPXRoaXMuZW5kcG9pbnRzLnBhcnNlU2V0'@;
put 'dGluZ3MoKSx0aGlzLmVuZHBvaW50cy5yZWZyZXNoQWxsRW5kcG9pbnRzKCEwKX1vbkFmdGVyQ2hhbmdlKGwsYSl7bCYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09YSYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWEmJiJsb2FkRGF0YSIhPT1hJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdl'@;
put 'ZEVuZHBvaW50cyhsKX1vbkFmdGVyUm93TW92ZShsLGEpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsbFswXSxsLmxlbmd0aCxsLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0'@;
put 'dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGEsbC5sZW5ndGgsbCx0aGlzLnBsdWdpbk5hbWUpfX1jbGFzcyBNN3tzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRD'@;
put 'b21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5yb290RG9jdW1lbnQ9bCx0aGlzLmlzUnRsPWEsdGhpcy5jb250'@;
put 'YWluZXI9bnVsbCx0aGlzLmVkaXRvcj10aGlzLmNyZWF0ZUVkaXRvcigpLHRoaXMuZWRpdG9yU3R5bGU9dGhpcy5lZGl0b3Iuc3R5bGUsdGhpcy5oaWRkZW49ITAsdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXt0aGlzLmVkaXRvclN0eWxlLmxlZnQ9YCR7bH1weGAsdGhpcy5lZGl0b3JT'@;
put 'dHlsZS50b3A9YCR7YX1weGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOndhKHRoaXMuZ2V0SW5wdXRFbGVtZW50'@;
put 'KCkpLGhlaWdodDphbCh0aGlzLmdldElucHV0RWxlbWVudCgpKX19cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShsKXt0aGlzLmdldElucHV0RWxlbWVudCgpLnJlYWRP'@;
put 'bmx5PWx9c2hvdygpe3RoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaGlkZGVuPSExfWhpZGUoKXt0aGlzLmhpZGRlbnx8KHRoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaGlkZGVuPSEwfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT10aGlzLmVk'@;
put 'aXRvclN0eWxlLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlPWF9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVs'@;
put 'ZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gdGhpcy5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9jdXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3JlYXRlRWRpdG9yKCl7Y29uc3QgbD10aGlzLnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250'@;
put 'YWluZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGw/InJ0bCI6Imx0ciIpLHBpKHRoaXMuY29udGFpbmVyLE03LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLHRoaXMucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpLHBpKGwsTTcuQ0xBU1NfRURJVE9S'@;
put 'KSxwaShhLE03LkNMQVNTX0lOUFVUKSxsLmFwcGVuZENoaWxkKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGwpLGx9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoYC4ke003LkNMQVNTX0lOUFVUfWApfWRlc3Ryb3koKXtjb25zdCBsPXRo'@;
put 'aXMuY29udGFpbmVyP3RoaXMuY29udGFpbmVyLnBhcmVudE5vZGU6bnVsbDt0aGlzLmVkaXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yKSx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZWRpdG9yU3R5bGU9bnVsbCxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX19'@;
put 'Y29uc3QgY1JlPU03LGdzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIFhrKGMpe3JldHVybiBCbyhjLCJodFNlcGFyYXRvciIpfWZ1bmN0aW9uIEprKGMpe3JldHVybiBCbyhjLCJodERpc2FibGVkIil9ZnVuY3Rpb24gUWsoYyl7cmV0dXJuIEJvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX1mdW5j'@;
put 'dGlvbiBMZyhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bFswXTwwP251bGw6bH1mdW5jdGlvbiBJZyhjLGwpe2NvbnN0IGE9e307cmV0dXJuIERuKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18fChhW2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9'@;
put 'KX0pLGF9ZnVuY3Rpb24gS3AoYyxsLGEsZCxoKXtEbihjLGY9PntmLmZvckFsbCgoXyxUKT0+e18+PTAmJlQ+PTAmJmZ1bmN0aW9uIGdSZShjLGwsYSxkLGgsZil7Y29uc3QgXz1oKGMsbCk7bGV0IFQ9ZDtfLmNsYXNzTmFtZSYmKFQ9InZlcnRpY2FsIj09PWE/ZnVuY3Rpb24gZlJlKGMsbCl7'@;
put 'cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfShfLmNsYXNzTmFtZSxkKTpmdW5jdGlvbiBwUmUoYyxsKXtyZXR1cm4tMSE9'@;
put 'PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KF8uY2xhc3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NO'@;
put 'YW1lIixUKX0oXyxULGwsYSxkLGgpfSl9KX1mdW5jdGlvbiB5aChjLGwpe2xldCBhPSExO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZEbihjLGQ9PihkLmZvckFsbCgoaCxmKT0+e2lmKGg+PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwhMX0pLGEpKSxhfWZ1bmN0aW9uIFlmKGMpe3Jl'@;
put 'dHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPiR7U3RyaW5nLmZyb21DaGFyQ29kZSgxMDAwMyl9PC9zcGFuPiR7Y31gfWZ1bmN0aW9uIEZyZShjLGwpe2NvbnN0IGE9Yy5zbGljZSgwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZhW2RdLm5hbWU9PT1sOylhLnNoaWZ0KCk7cmV0dXJuIGF9'@;
put 'Y2xhc3MgSHJle2NvbnN0cnVjdG9yKGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkPW51bGwsdGhpcy5oaWRpbmdUaW1lcj1udWxsLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1l'@;
put 'cj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFj'@;
put 'dGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hvd0RlYm91bmNlZD1tTihhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93'@;
put 'LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGEoSHJlLE8wKTtjb25zdCBDUmU9SHJlLGJqPSJjb21tZW50cyIsZUE9bmV3IFdlYWtNYXAsd2g9'@;
put 'ImNvbW1lbnQiLHg3PSJ2YWx1ZSIsdEE9InJlYWRPbmx5IjtjbGFzcyBNUmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYmp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5lZGl0b3I9'@;
put 'bnVsbCx0aGlzLmRpc3BsYXlTd2l0Y2g9bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMucmFuZ2U9e30sdGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMSxlQS5zZXQodGhpcyx7dGVtcEVkaXRvckRpbWVuc2lvbnM6e30sY2VsbEJlbG93Q3Vyc29yOm51bGx9KX1pc0VuYWJs'@;
put 'ZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbYmpdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuZWRpdG9yfHwodGhpcy5lZGl0b3I9bmV3IGNSZSh0aGlzLmhvdC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSkpLHRoaXMuZXZlbnRNYW5hZ2VyfHwo'@;
put 'dGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpKSx0aGlzLmRpc3BsYXlTd2l0Y2h8fCh0aGlzLmRpc3BsYXlTd2l0Y2g9bmV3IENSZSh0aGlzLmdldERpc3BsYXlEZWxheVNldHRpbmcoKSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlz'@;
put 'LmFkZFRvQ29udGV4dE1lbnUobCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGwsYSxkLGgsZixfKT0+dGhpcy5vbkFmdGVyUmVuZGVyZXIobCxfKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuZGlzcGxheVN3aXRjaC5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5kaXNwbGF5U3dpdGNoLmFk'@;
put 'ZExvY2FsSG9vaygic2hvdyIsKGwsYSk9PnRoaXMuc2hvd0F0Q2VsbChsLGEpKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCksdGhpcy5kaXNwbGF5U3dpdGNoLnVwZGF0ZURlbGF5KHRoaXMuZ2V0RGlzcGxheURlbGF5U2V0dGluZygpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuZXZl'@;
put 'bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixhPT50aGlzLm9uTW91c2VPdmVyKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsYT0+dGhpcy5vbk1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM'@;
put 'aXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwiYmx1ciIsKCk9PnRoaXMub25FZGl0b3JCbHVyKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksIm1vdXNlZG93biIsYT0+dGhpcy5vbkVkaXRvck1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVkaXRvci5nZXRJbnB1dEVsZW1lbnQoKSwibW91c2V1cCIsYT0+dGhpcy5v'@;
put 'bkVkaXRvck1vdXNlVXAoYSkpfXNldFJhbmdlKGwpe3RoaXMucmFuZ2U9bH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKXtjb25zdCBhPU5wKGwudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoYSYmQm8oYSwiaHRDb21tZW50Q2VsbCIp'@;
put 'JiZOcChhLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShsKXtyZXR1cm4gdGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUg'@;
put 'dXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPXRoaXMuZWRpdG9yLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50'@;
put 'TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse1t4N106ZH0pLHRoaXMuaG90LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVu'@;
put 'dChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCBy'@;
put 'YW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHdoKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGws'@;
put 'YSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0'@;
put 'aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx4Nyl9Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSx4Nyl9c2hvdygpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdC'@;
put 'ZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6bCxjb2w6YX19PXRoaXMucmFuZ2U7aWYobDwwfHxsPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGE8'@;
put 'MHx8YT50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gdGhpcy5lZGl0b3Iuc2V0VmFsdWUoZFt3aF0/ZFt3aF1beDddOiIiKSx0aGlz'@;
put 'LmVkaXRvci5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXt0aGlzLmVkaXRvci5oaWRlKCl9cmVmcmVzaEVk'@;
put 'aXRvcigpe3ZhciBsLGE7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLnJhbmdlLmZyb20mJnRoaXMuZWRpdG9yLmlzVmlzaWJsZSgpKSlyZXR1cm47Y29uc3R7cm93SW5kZXhNYXBwZXI6aCxjb2x1bW5JbmRleE1hcHBl'@;
put 'cjpmfT10aGlzLmhvdCx7cm93Ol8sY29sOlR9PXRoaXMucmFuZ2UuZnJvbTtsZXQgVz1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyksaWU9Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFQpO2NvbnN0IHBlPW51bGw9PT1XO3RoaXMuZWRpdG9yLnNldFBvc2l0aW9uKDAs'@;
put 'MCksbnVsbD09PVcmJihXPWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLC0xKSkpLG51bGw9PT1pZSYmKGllPWYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChULC0xKSkpO2Nv'@;
put 'bnN0IHdlPW51bGw9PT1XLEVlPW51bGw9PT1pZTtXPW51bGwhPT0obD1XKSYmdm9pZCAwIT09bD9sOjAsaWU9bnVsbCE9PShhPWllKSYmdm9pZCAwIT09YT9hOjA7Y29uc3R7cm9vdFdpbmRvdzpaZSx2aWV3Ontfd3Q6aXR9fT10aGlzLmhvdCx7d3RUYWJsZTpldH09aXQseXQ9aXQuZ2V0Q2Vs'@;
put 'bCh7cm93OlcsY29sOmllfSwhMCksRXQ9dGhpcy5nZXRDb21tZW50TWV0YShfLFQsInN0eWxlIik7RXQ/dGhpcy5lZGl0b3Iuc2V0U2l6ZShFdC53aWR0aCxFdC5oZWlnaHQpOnRoaXMuZWRpdG9yLnJlc2V0U2l6ZSgpO2NvbnN0IFN0PUVlPzA6ZXQuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgo'@;
put 'aWUpLEp0PXBlJiYhd2U/YWwoeXQpOjAse2xlZnQ6bm4sdG9wOnZuLHdpZHRoOk5uLGhlaWdodDpjcn09eXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOkxyLGhlaWdodDpFaX09dGhpcy5lZGl0b3IuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOkxpLGlubmVySGVpZ2h0OmZyfT10aGlz'@;
put 'LmhvdC5yb290V2luZG93LGlpPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IGpyPW5uK1plLnNjcm9sbFgrU3QsT249dm4rWmUuc2Nyb2xsWStKdDt0aGlzLmhvdC5pc1J0bCgpJiYoanItPUxyK1N0KSx0aGlzLmhvdC5pc0x0cigpJiZubitObitMcj5MaT9qcj1u'@;
put 'bitaZS5zY3JvbGxYLUxyLTE6dGhpcy5ob3QuaXNSdGwoKSYmanI8LShpaS5zY3JvbGxXaWR0aC1paS5jbGllbnRXaWR0aCkmJihqcj1ubitaZS5zY3JvbGxYK1N0KzEpLHZuK0VpPmZyJiYoT24tPUVpLWNyKzEpLHRoaXMuZWRpdG9yLnNldFBvc2l0aW9uKGpyLE9uKSx0aGlzLmVkaXRvci5z'@;
put 'ZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEoXyxULHRBKSl9Y2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybiExO2xldCBhPSExO2NvbnN0IGQ9bC5nZXRUb3BTdGFy'@;
put 'dENvcm5lcigpO3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGQucm93LGQuY29sLHg3KSYmKGE9ITApLGF9dXBkYXRlQ29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKVt3aF07bGV0IGY7aD8oZj15dShoKSxseShmLGQpKTpmPWQsdGhpcy5ob3Qu'@;
put 'c2V0Q2VsbE1ldGEobCxhLHdoLGYpfWdldENvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7aWYoaFt3aF0pcmV0dXJuIGhbd2hdW2RdfW9uTW91c2VEb3duKGwpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0JiYhdGhpcy5wcmV2'@;
put 'ZW50RWRpdG9yQXV0b1N3aXRjaCYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCkpe2NvbnN0IGE9TnAobC50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgZD1udWxsO2EmJihkPXRoaXMuaG90LmdldENvb3JkcyhhKSksKCFhfHx0aGlzLnJhbmdlLmZyb20mJmQmJih0aGlzLnJhbmdl'@;
put 'LmZyb20ucm93IT09ZC5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1kLmNvbCkpJiZ0aGlzLmhpZGUoKX19b25Nb3VzZU92ZXIobCl7Y29uc3QgYT1lQS5nZXQodGhpcykse3Jvb3REb2N1bWVudDpkfT10aGlzLmhvdDtpZighKHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2h8fHRoaXMu'@;
put 'ZWRpdG9yLmlzRm9jdXNlZCgpfHxCbyhsLnRhcmdldCwid3RCb3JkZXIiKXx8YS5jZWxsQmVsb3dDdXJzb3I9PT1sLnRhcmdldCkmJnRoaXMuZWRpdG9yKWlmKGEuY2VsbEJlbG93Q3Vyc29yPWQuZWxlbWVudEZyb21Qb2ludChsLmNsaWVudFgsbC5jbGllbnRZKSx0aGlzLnRhcmdldElzQ2Vs'@;
put 'bFdpdGhDb21tZW50KGwpKXtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKGwudGFyZ2V0KSk7dGhpcy5kaXNwbGF5U3dpdGNoLnNob3coaCl9ZWxzZSBWcChsLnRhcmdldCxkKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCkmJnRo'@;
put 'aXMuZGlzcGxheVN3aXRjaC5oaWRlKCl9b25Nb3VzZVVwKCl7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMX1vbkFmdGVyUmVuZGVyZXIobCxhKXthW3doXSYmYVt3aF1beDddJiZwaShsLGEuY29tbWVudGVkQ2VsbENsYXNzTmFtZSl9b25FZGl0b3JCbHVyKCl7dGhpcy5zZXRDb21t'@;
put 'ZW50KCl9b25FZGl0b3JNb3VzZURvd24obCl7ZUEuZ2V0KHRoaXMpLnRlbXBFZGl0b3JEaW1lbnNpb25zPXt3aWR0aDp3YShsLnRhcmdldCksaGVpZ2h0OmFsKGwudGFyZ2V0KX19b25FZGl0b3JNb3VzZVVwKGwpe2NvbnN0IGE9ZUEuZ2V0KHRoaXMpLGQ9d2EobC50YXJnZXQpLGg9YWwobC50'@;
put 'YXJnZXQpOyhkIT09YS50ZW1wRWRpdG9yRGltZW5zaW9ucy53aWR0aCsxfHxoIT09YS50ZW1wRWRpdG9yRGltZW5zaW9ucy5oZWlnaHQrMikmJnRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtzdHlsZTp7d2lkdGg6ZCxoZWln'@;
put 'aHQ6aH19KX1vbkNvbnRleHRNZW51QWRkQ29tbWVudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEwLHRoaXMuZGlzcGxheVN3aXRjaC5jYW5jZWxIaWRpbmcoKSx0aGlzLnNldFJhbmdlKHtmcm9tOmwuaGln'@;
put 'aGxpZ2h0fSksdGhpcy5zaG93KCksdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5lZGl0b3IuZm9jdXMoKX1vbkNvbnRleHRNZW51UmVtb3ZlQ29tbWVudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEw'@;
put 'LGwuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmdGhpcy5yZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLmhvdC5yZW5kZXIoKX1vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3RoaXMucHJldmVudEVk'@;
put 'aXRvckF1dG9Td2l0Y2g9ITAsbC5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhdGhpcy5nZXRDb21tZW50TWV0YShhLGQsdEEpO3RoaXMudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbdEFdOiFofSl9fSl9YWRkVG9Db250ZXh0TWVudShsKXtjb25zdCBhPSgpPT50aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjAmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk+MDtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImNvbW1lbnRzQWRkRWRpdCIs'@;
put 'bmFtZTooKT0+dGhpcy5jaGVja1NlbGVjdGlvbkNvbW1lbnRzQ29uc2lzdGVuY3koKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFZWKTp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKE5WKSxjYWxsYmFjazooKT0+dGhpcy5vbkNvbnRleHRNZW51QWRkQ29tbWVudCgpLGRpc2Fi'@;
put 'bGVkOigpPT4hYSgpfHwhKHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0se2tleToiY29tbWVudHNSZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEJWKX0sY2FsbGJhY2s6KCk9'@;
put 'PnRoaXMub25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKSxkaXNhYmxlZDooKT0+IWEoKXx8ISh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHtrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtsZXQgZD10'@;
put 'aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoalYpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksKGYsXyk9PntsZXQgVD10aGlzLmdldENlbGxNZXRhKGYsXylbd2hdO2lmKFQmJihUPVRbdEFdKSxUKXJldHVybiEwfSkmJihkPVlmKGQpKSxkfSxjYWxsYmFjazooKT0+dGhp'@;
put 'cy5vbkNvbnRleHRNZW51TWFrZVJlYWRPbmx5KCksZGlzYWJsZWQ6KCk9PiFhKCl8fCEodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJnRoaXMuY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCkpfSl9'@;
put 'Z2V0RGlzcGxheURlbGF5U2V0dGluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtial07aWYodXMobCkpcmV0dXJuIGwuZGlzcGxheURlbGF5fWRlc3Ryb3koKXt0aGlzLmVkaXRvciYmdGhpcy5lZGl0b3IuZGVzdHJveSgpLHRoaXMuZGlzcGxheVN3aXRjaCYmdGhpcy5kaXNw'@;
put 'bGF5U3dpdGNoLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fUYoMTYwMDEpO2NvbnN0IFZyZT1jbGFzcyB4UmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLmNvbW1hbmRzPXt9LHRoaXMuY29tbW9uQ2FsbGJhY2s9bnVsbH1yZWdpc3RlckNvbW1hbmQobCxhKXt0aGlzLmNvbW1h'@;
put 'bmRzW2xdPWF9c2V0Q29tbW9uQ2FsbGJhY2sobCl7dGhpcy5jb21tb25DYWxsYmFjaz1sfWV4ZWN1dGUobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2NvbnN0IGY9bC5zcGxpdCgiOiIp'@;
put 'LF89ZlswXSxUPTI9PT1mLmxlbmd0aD9mWzFdOm51bGw7bGV0IFc9dGhpcy5jb21tYW5kc1tfXTtpZighVyl0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAnJHtffScgbm90IGV4aXN0cy5gKTtpZihUJiZXLnN1Ym1lbnUmJihXPWZ1bmN0aW9uIEVSZShjLGwpe2xldCBhO3JldHVybiBE'@;
put 'bihsLGQ9Pntjb25zdCBoPWQua2V5P2Qua2V5LnNwbGl0KCI6Iik6bnVsbDtpZihBcnJheS5pc0FycmF5KGgpJiZoWzFdPT09YylyZXR1cm4gYT1kLCExfSksYX0oVCxXLnN1Ym1lbnUuaXRlbXMpKSwhMD09PVcuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBXLmRpc2FibGVkJiYhMD09'@;
put 'PVcuZGlzYWJsZWQuY2FsbCh0aGlzLmhvdCl8fGJsKFcsInN1Ym1lbnUiKSlyZXR1cm47Y29uc3QgaWU9W107ImZ1bmN0aW9uIj09dHlwZW9mIFcuY2FsbGJhY2smJmllLnB1c2goVy5jYWxsYmFjayksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJmllLnB1c2godGhp'@;
put 'cy5jb21tb25DYWxsYmFjayksZC51bnNoaWZ0KGYuam9pbigiOiIpKSxEbihpZSxwZT0+cGUuYXBwbHkodGhpcy5ob3QsZCkpfX0sdmQ9ImFsaWdubWVudCIsbkE9ImNsZWFyX2NvbHVtbiIsRHk9ImNvbF9sZWZ0IixMeT0iY29sX3JpZ2h0IixJeT0ibWFrZV9yZWFkX29ubHkiLHJBPSJyZWRv'@;
put 'IixSeT0icmVtb3ZlX2NvbCIsaUE9InJlbW92ZV9yb3ciLG9BPSJyb3dfYWJvdmUiLHNBPSJyb3dfYmVsb3ciLE95PSJub19pdGVtcyIsYUE9InVuZG8iLEJyZT1bb0Esc0EsRHksTHksbkEsaUEsUnksYUEsckEsSXksdmQsZ3MsT3ldLGpyZT17W2dzXTpmdW5jdGlvbiB1UmUoKXtyZXR1cm57'@;
put 'bmFtZTpnc319LFtPeV06ZnVuY3Rpb24gSFJlKCl7cmV0dXJue2tleTpPeSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfVil9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtvQV06ZnVuY3Rpb24gUFJlKCl7cmV0dXJue2tleTpvQSxuYW1lKCl7cmV0dXJuIHRo'@;
put 'aXMuZ2V0VHJhbnNsYXRlZFBocmFzZShiVil9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0Fib3ZlIil9LGRpc2FibGVk'@;
put 'KCl7cmV0dXJuIUxnKHRoaXMpfHwodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PXRoaXMuY291bnRSb3dzKCk6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuY291bnRSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dz'@;
put 'KX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbc0FdOmZ1bmN0aW9uIEZSZSgpe3JldHVybntrZXk6c0EsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeVYpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLmdldEJvdHRvbVJpZ2h0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QmVsb3ciKX0sZGlzYWJsZWQoKXtyZXR1cm4hTGcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIo'@;
put 'KSYmKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW0R5XTpmdW5jdGlvbiBUUmUo'@;
put 'KXtyZXR1cm57a2V5OkR5LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdWKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5zZXJ0'@;
put 'X2NvbF9zdGFydCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtbkxlZnQiKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8IUxnKHRoaXMpfHwodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09'@;
put 'PXRoaXMuY291bnRDb2xzKCk6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuY291bnRDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbTHld'@;
put 'OmZ1bmN0aW9uIERSZSgpe3JldHVybntrZXk6THksbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ1YpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcFJpZ2h0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9j'@;
put 'b2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFMZyh0aGlzKXx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0'@;
put 'ZWRCeUNvcm5lcigpJiYodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuY291bnRDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbbkFdOmZ1'@;
put 'bmN0aW9uIEFSZSgpe3JldHVybntrZXk6bkEsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQVYpfSxjYWxsYmFjayhjLGwpe2NvbnN0IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgw'@;
put 'LGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5zdGFydC5yb3csbFswXS5lbmQucm93KSxkLCJDb250ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgpe3JldHVybiFMZyh0aGlzKXx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfX19LFtpQV06ZnVuY3Rp'@;
put 'b24gT1JlKCl7cmV0dXJue2tleTppQSxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoU1YsbCl9LGNh'@;
put 'bGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24gRURlKGMpe2NvbnN0IGw9ZzcoYyk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9d3kobCksZD1uZXcgU2V0O3JldHVybiBEbihjLF89Pntjb25zdFtULCxXXT1hKF8pLGllPU1hdGgubWF4KFQsMCk7RG4o'@;
put 'QXJyYXkuZnJvbShuZXcgQXJyYXkoVy1pZSsxKSwod2UsRWUpPT5pZStFZSksd2U9PntkLmhhcyh3ZSl8fGQuYWRkKHdlKX0pfSksQWwoQXJyYXkuZnJvbShkKS5zb3J0KChfLFQpPT5fLVQpLChfLFQsVyxpZSk9PigwIT09VyYmVD09PWllW1ctMV0rMT9fW18ubGVuZ3RoLTFdWzFdKz0xOl8u'@;
put 'cHVzaChbVCwxXSksXyksW10pfSh0aGlzLmdldFNlbGVjdGVkKCkpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2lmKCFMZyh0aGlzKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvd319fSxbUnldOmZ1bmN0aW9uIFJSZSgpe3JldHVybntrZXk6UnksbmFtZSgpe2NvbnN0IGM9dGhp'@;
put 'cy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNVixsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfY29sIixmdW5jdGlv'@;
put 'biB4RGUoYyl7Y29uc3QgbD1nNyhjKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT13eShsKSxkPW5ldyBTZXQ7cmV0dXJuIERuKGMsXz0+e2NvbnN0WyxULCxXXT1hKF8pLGllPU1hdGgubWF4KFQsMCk7RG4oQXJyYXkuZnJvbShuZXcgQXJyYXkoVy1pZSsxKSwod2UsRWUpPT5p'@;
put 'ZStFZSksd2U9PntkLmhhcyh3ZSl8fGQuYWRkKHdlKX0pfSksQWwoQXJyYXkuZnJvbShkKS5zb3J0KChfLFQpPT5fLVQpLChfLFQsVyxpZSk9PigwIT09VyYmVD09PWllW1ctMV0rMT9fW18ubGVuZ3RoLTFdWzFdKz0xOl8ucHVzaChbVCwxXSksXyksW10pfSh0aGlzLmdldFNlbGVjdGVkKCkp'@;
put 'LG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhTGcodGhpcykpcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD'@;
put 'b3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59fX0sW2FBXTpmdW5jdGlvbiBOUmUoKXtyZXR1cm57a2V5OmFBLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhWKX0sY2FsbGJhY2soKXt0aGlzLnVuZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVk'@;
put 'byIpLmlzVW5kb0F2YWlsYWJsZSgpfX19LFtyQV06ZnVuY3Rpb24gSVJlKCl7cmV0dXJue2tleTpyQSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShFVil9LGNhbGxiYWNrKCl7dGhpcy5yZWRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9S'@;
put 'ZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1JlZG9BdmFpbGFibGUoKX19fSxbSXldOmZ1bmN0aW9uIExSZSgpe3JldHVybntrZXk6SXksbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShrVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9eWgoYywoYSxkKT0+dGhpcy5nZXRDZWxs'@;
put 'TWV0YShhLGQpLnJlYWRPbmx5KTtEbihjLGE9PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFkT25seSIsIWwpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l'@;
put 'cigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbdmRdOmZ1bmN0aW9uIGtSZSgpe3JldHVybntrZXk6dmQsbmFtZSgpe3JldHVybiB0aGlz'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2UoelYpfSxkaXNhYmxlZCgpe3JldHVybiAwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCl8fCEodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHN1Ym1lbnU6e2l0'@;
put 'ZW1zOlt7a2V5OmAke3ZkfTpsZWZ0YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4'@;
put 'T2YoImh0TGVmdCIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1JZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9v'@;
put 'a3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06Y2VudGVyYCxuYW1lKCl7'@;
put 'bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0Q2VudGVyIikpcmV0dXJuITB9KSYmKGM9'@;
put 'WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUlnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iixs'@;
put 'LGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7dmR9OnJpZ2h0YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhy'@;
put 'YXNlKFlWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0UmlnaHQiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBj'@;
put 'PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9SWcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRSaWdodCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMu'@;
put 'Z2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3ZkfTpqdXN0aWZ5YCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdWKTtyZXR1cm4geWgodGhpcy5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0SnVzdGlmeSIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCks'@;
put 'bD1JZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixf'@;
put 'LFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6Z3N9LHtrZXk6YCR7dmR9OnRvcGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChh'@;
put 'LGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodFRvcCIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1JZyhjLChoLGYpPT50aGlzLmdl'@;
put 'dENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixf'@;
put 'LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06bWlkZGxlYCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxk'@;
put 'KS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0TWlkZGxlIikpcmV0dXJuITB9KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUlnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZl'@;
put 'cnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVk'@;
put 'OiExfSx7a2V5OmAke3ZkfTpib3R0b21gLG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocVYpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+e2NvbnN0IGg9dGhpcy5nZXRDZWxsTWV0YShhLGQpLmNsYXNzTmFtZTtpZihoJiYtMSE9PWguaW5k'@;
put 'ZXhPZigiaHRCb3R0b20iKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9SWcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24genJlKCl7Y29u'@;
put 'c3QgYz17fTtyZXR1cm4gZHMoanJlLChsLGEpPT57Y1thXT1sKCl9KSxjfWNvbnN0IFVyZT1jbGFzcyBWUmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dGhpcy5ob3Q9bCx0aGlzLnByZWRl'@;
put 'ZmluZWRJdGVtcz16cmUoKSx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAsZHMobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PWdzPyhhW2dzXT1kLGY9Z3MpOmlzTmFO'@;
put 'KHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIEJSZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0FycmF5KGgpfHwoaD1sKSx1cyhoKT9kcyhoLChmLF8pPT57bGV0IFQ9YVsic3RyaW5nIj09dHlwZW9mIGY/ZjpfXTtUfHwoVD1mKSx1cyhmKT9Y'@;
put 'bChULGYpOiJzdHJpbmciPT10eXBlb2YgVCYmKFQ9e25hbWU6VH0pLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9XyksZC5wdXNoKFQpfSk6RG4oaCwoZixfKT0+e2xldCBUPWFbZl07IVQmJkJyZS5pbmRleE9mKGYpPj0wfHwoVHx8KFQ9e25hbWU6ZixrZXk6YCR7X31gfSksdXMoZikmJlhsKFQs'@;
put 'Ziksdm9pZCAwPT09VC5rZXkmJihULmtleT1fKSxkLnB1c2goVCkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19O2NsYXNzIGxBe2Nv'@;
put 'bnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVs'@;
put 'ZW1lbnR9LHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3RTdWJNZW51cz17fSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVu'@;
put 'dHx8bnVsbCx0aGlzLm1lbnVJdGVtcz1udWxsLHRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz1udWxsLHRoaXMua2V5RXZlbnQ9ITEsdGhpcy5vZmZzZXQ9e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0sdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1udWxsLHRoaXMucmVn'@;
put 'aXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe2xldCBsPXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtsOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsIm1vdXNlZG93biIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50'@;
put 'TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1leShsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXRTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3Rl'@;
put 'ZEl0ZW0oKT90aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkpfXNldE9mZnNldChsKXt0'@;
put 'aGlzLm9mZnNldFtsXT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MH1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dmFyIGw9dGhpczt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0'@;
put 'aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGE9bU4oRWU9PnRoaXMub3BlblN1Yk1lbnUoRWUpLDMwMCksZD10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNTtsZXQgaD0hMSxmPV8xKHRoaXMu'@;
put 'bWVudUl0ZW1zLEVlPT4oRWUua2V5PT09T3kmJihoPSEwKSxmdW5jdGlvbiBtUmUoYyxsKXtyZXR1cm4hYy5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRlbi5jYWxsKGwpKX0oRWUsdGhpcy5ob3QpKSk7aWYoZi5sZW5ndGg8MSYmIWgpZi5wdXNoKHpyZSgp'@;
put 'W095XSk7ZWxzZSBpZigwPT09Zi5sZW5ndGgpcmV0dXJuO2Y9ZnVuY3Rpb24gYlJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpncyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9RnJlKGEsbCksYT1mdW5jdGlvbiB2UmUoYyxs'@;
put 'KXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPUZyZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBfUmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gRG4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1'@;
put 'c2goYSl9KSxsfShhKSxhfShmLGdzKTtsZXQgXz0hMTtjb25zdCBUPXtkYXRhOmYsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpFZT0+S2koRWUpJiZFZTxkP2Q6RWUsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9y'@;
put 'OiExLGNvcHlQYXN0ZTohMSxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVyOihFZSxaZSxpdCxldCx5dCxFdCk9PnRoaXMubWVudUl0ZW1SZW5kZXJlcihFZSxaZSxpdCxldCx5dCxFdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNp'@;
put 'ZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhZnRlck9uQ2VsbE1vdXNlT3ZlcjooRWUsWmUpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/YShaZS5yb3cpOnRo'@;
put 'aXMub3BlblN1Yk1lbnUoWmUucm93KX0scm93SGVpZ2h0czpFZT0+ZltFZV0ubmFtZT09PWdzPzE6MjMsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpFZT0+e0VlLnByZXZlbnREZWZhdWx0KCksd04oKSYmXyYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGJlZm9yZU9u'@;
put 'Q2VsbE1vdXNlVXA6RWU9Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoXz0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoRWUpKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOkVlPT57KCF3TigpfHwhVXAoRWUpKSYmXyYmdGhp'@;
put 'cy5oYXNTZWxlY3RlZEl0ZW0oKSYmKG0yKCl8fHlOKCk/c2V0VGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVu'@;
put 'KCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyBXQih0aGlzLmNvbnRhaW5lcixU'@;
put 'KSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclNlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5ob3RNZW51Lmlu'@;
put 'aXQoKSx0aGlzLmhvdE1lbnUubGlzdGVuKCk7Y29uc3QgVz10aGlzLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksaWU9Vy5hZGRDb250ZXh0KCJtZW51Iiksd2U9e2dyb3VwOiJtZW51IixydW5Pbmx5SWY6RWU9PiExPT09YXkoRWUudGFyZ2V0KXx8ITE9PT10aGlzLmNvbnRhaW5lci5j'@;
put 'b250YWlucyhFZS50YXJnZXQpfTtXLnNldEFjdGl2ZUNvbnRleHROYW1lKCJtZW51IiksaWUuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmtleUV2ZW50PSEwLHRoaXMuY2xvc2UoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dE'@;
put 'b3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgRWU9dGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO3RoaXMua2V5RXZlbnQ9ITAsRWU/dGhpcy5zZWxlY3ROZXh0Q2VsbChFZVswXSxFZVsxXSk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1si'@;
put 'QXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlP3RoaXMuc2VsZWN0UHJldkNlbGwoRWVbMF0sRWVbMV0pOnRoaXMuc2VsZWN0TGFzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6'@;
put 'W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTtpZih0aGlzLmtleUV2ZW50PSEwLEVlKXtjb25zdCBaZT10aGlzLm9wZW5TdWJNZW51KEVlWzBdKTtaZSYmWmUuc2VsZWN0Rmlyc3RDZWxsKCl9dGhpcy5rZXlFdmVu'@;
put 'dD0hMX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlJiZ0aGlzLmlzU3ViTWVudSgpJiYodGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRN'@;
put 'ZW51LmhvdE1lbnUubGlzdGVuKCkpLHRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpFZT0+e2NvbnN0IFplPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLHRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3coWmVb'@;
put 'MF0pLnN1Ym1lbnV8fCh0aGlzLmV4ZWN1dGVDb21tYW5kKEVlKSx0aGlzLmNsb3NlKCEwKSksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVl'@;
put 'P3RoaXMuaG90TWVudS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlz'@;
put 'LmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLmhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KHRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RMYXN0Q2VsbCgpLHRoaXMua2V5RXZlbnQ9ITF9fV0sd2Up'@;
put 'LHRoaXMuYmxvY2tNYWluVGFibGVDYWxsYmFja3MoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmlzT3BlbmVkKCkmJihsJiZ0aGlzLnBhcmVu'@;
put 'dE1lbnU/dGhpcy5wYXJlbnRNZW51LmNsb3NlKCk6KHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMucmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGws'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpKX1vcGVu'@;
put 'U3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIGhSZShjKXtyZXR1cm4gQm8oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9'@;
put 'dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBsQSh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTty'@;
put 'ZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0'@;
put 'YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07ZCYmKGQuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XSl9Y2xvc2VBbGxTdWJNZW51cygpe0RuKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1'@;
put 'Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1'@;
put 'cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIGRSZShjKXtyZXR1cm4g'@;
put 'Y3MoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxI'@;
put 'b29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtjb25zdHtpc0NvbW1hbmQ6YSxuYW1lOmQsZGlzYWJsZWQ6aCxzdWJtZW51OmZ9PWwsXz0hMD09PWh8fCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYhMD09PWguY2FsbCh0aGlzLmhvdCk7cmV0dXJuITE9'@;
put 'PT1hfHxkPT09Z3N8fCEwPT09X3x8Zn1zZXRQb3NpdGlvbihsKXtjb25zdCBhPW5ldyBjbGFzcyBqUmV7Y29uc3RydWN0b3IobCxhKXtjb25zdCBkPXQ3KGEpLGg9bWcoYSk7bGV0IGYsXyxULFcsaWUscGU7dGhpcy5yb290V2luZG93PWEsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZShs'@;
put 'KSwibGl0ZXJhbCI9PT10aGlzLnR5cGU/KGY9cGFyc2VJbnQobC50b3AsMTApLFQ9cGFyc2VJbnQobC5sZWZ0LDEwKSxpZT1sLmhlaWdodHx8MCxwZT1sLndpZHRofHwwLF89ZixXPVQsZis9ZCxUKz1oKToiZXZlbnQiPT09dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxUPXBh'@;
put 'cnNlSW50KGwucGFnZVgsMTApLGllPWwudGFyZ2V0LmNsaWVudEhlaWdodCxwZT1sLnRhcmdldC5jbGllbnRXaWR0aCxfPWYtZCxXPVQtaCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPV8sdGhpcy5sZWZ0PVQsdGhpcy5sZWZ0UmVsYXRpdmU9Vyx0aGlzLnNjcm9sbFRvcD1kLHRoaXMu'@;
put 'c2Nyb2xsTGVmdD1oLHRoaXMuY2VsbEhlaWdodD1pZSx0aGlzLmNlbGxXaWR0aD1wZX1nZXRTb3VyY2VUeXBlKGwpe2xldCBhPSJsaXRlcmFsIjtyZXR1cm4gbCBpbnN0YW5jZW9mIEV2ZW50JiYoYT0iZXZlbnQiKSxhfWZpdHNBYm92ZShsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZT49bC5v'@;
put 'ZmZzZXRIZWlnaHR9Zml0c0JlbG93KGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlK2wub2Zmc2V0SGVpZ2h0PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodCl9Zml0c09uUmlnaHQobCl7'@;
put 'cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlK3RoaXMuY2VsbFdpZHRoK2wub2Zmc2V0V2lkdGg8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVyV2lkdGgpfWZpdHNPbkxlZnQobCl7cmV0dXJuIHRoaXMu'@;
put 'bGVmdFJlbGF0aXZlPj1sLm9mZnNldFdpZHRofX0obCx0aGlzLmNvbnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTt0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQ/KGEuZml0c0JlbG93KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSk6YS5m'@;
put 'aXRzQWJvdmUodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcihhKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSksdGhpcy5ob3QuaXNMdHIoKT90aGlzLnNldEhvcml6b250YWxQb3NpdGlvbkZvckx0cihhKTp0aGlzLnNldEhvcml6b250YWxQb3NpdGlv'@;
put 'bkZvclJ0bChhKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcihhKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKGEpKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JSdGwobCl7bC5maXRzT25MZWZ0KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZD'@;
put 'dXJzb3IobCk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JMdHIobCl7bC5maXRzT25SaWdodCh0aGlzLmNvbnRhaW5lcik/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKTp0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZD'@;
put 'dXJzb3IobCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5hYm92ZStsLnRvcC10aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7dGhpcy5pc1N1Yk1lbnUoKSYmKGE9bC50b3ArbC5jZWxsSGVpZ2h0LXRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCszKSx0'@;
put 'aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9YCR7YX1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5iZWxvdytsLnRvcCsxO3RoaXMuaXNTdWJNZW51KCkmJihhPWwudG9wLTEpLHRoaXMuY29udGFpbmVyLnN0eWxlLnRvcD1gJHthfXB4YH1zZXRQb3NpdGlv'@;
put 'bk9uUmlnaHRPZkN1cnNvcihsKXtsZXQgYT1sLmxlZnQ7aWYodGhpcy5pc1N1Yk1lbnUoKSl7Y29uc3R7cmlnaHQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthKz1sLmNlbGxXaWR0aCtkLShsLmxlZnQrbC5jZWxsV2lkdGgpfWVsc2UgYSs9'@;
put 'dGhpcy5vZmZzZXQucmlnaHQ7dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD1gJHthfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpe2xldCBhPXRoaXMub2Zmc2V0LmxlZnQrbC5sZWZ0LXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO2lmKHRoaXMuaXNTdWJNZW51KCkpe2NvbnN0'@;
put 'e2xlZnQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLT1sLmxlZnQtZH10aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0PWAke2F9cHhgfXNlbGVjdEZpcnN0Q2VsbCgpe2NvbnN0IGw9dGhpcy5ob3RNZW51LmdldENlbGwoMCwwKTtYayhsKXx8'@;
put 'SmsobCl8fFFrKGwpP3RoaXMuc2VsZWN0TmV4dENlbGwoMCwwKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbCgwLDApfXNlbGVjdExhc3RDZWxsKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUuY291bnRSb3dzKCktMSxhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7WGsoYSl8fEprKGEpfHxRayhh'@;
put 'KT90aGlzLnNlbGVjdFByZXZDZWxsKGwsMCk6KHRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLCExKSx0aGlzLmhvdE1lbnUuc2Nyb2xsVmlld3BvcnRUbyhsLDAsITAsITEpKX1zZWxlY3ROZXh0Q2VsbChsLGEpe2NvbnN0IGQ9bCsxLGg9ZDx0aGlzLmhvdE1lbnUu'@;
put 'Y291bnRSb3dzKCk/dGhpcy5ob3RNZW51LmdldENlbGwoZCxhKTpudWxsO2gmJihYayhoKXx8SmsoaCl8fFFrKGgpP3RoaXMuc2VsZWN0TmV4dENlbGwoZCxhKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGEpKX1zZWxlY3RQcmV2Q2VsbChsLGEpe2NvbnN0IGQ9bC0xLGg9ZD49MD90aGlz'@;
put 'LmhvdE1lbnUuZ2V0Q2VsbChkLGEpOm51bGw7aCYmKFhrKGgpfHxKayhoKXx8UWsoaCk/dGhpcy5zZWxlY3RQcmV2Q2VsbChkLGEpOnRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGQsYSkpfW1lbnVJdGVtUmVuZGVyZXIobCxhLGQsaCxmLF8pe2NvbnN0IFQ9bC5nZXRTb3VyY2VEYXRhQXRSb3co'@;
put 'ZCksVz10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksRWU9aXQ9Pml0LmRpc2FibGVTZWxlY3Rpb247bGV0IFplPV87dmFyIGl0OyJmdW5jdGlvbiI9PXR5cGVvZiBaZSYmKFplPVplLmNhbGwodGhpcy5ob3QpKSxnMihhKSxwaShXLCJodEl0ZW1XcmFwcGVyIiks'@;
put 'YS5hcHBlbmRDaGlsZChXKSxpdD1ULG5ldyBSZWdFeHAoZ3MsImkiKS50ZXN0KGl0Lm5hbWUpP3BpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIFQucmVuZGVyZXI/KHBpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksYS5hcHBlbmRDaGlsZChULnJlbmRlcmVyKGwsVyxk'@;
put 'LGgsZixaZSkpKTpnZyhXLFplKSwoaXQ9PiEwPT09aXQuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBpdC5kaXNhYmxlZCYmITA9PT1pdC5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KSkoVCk/KHBpKGEsImh0RGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy'@;
put 'KGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6RWUoVCk/KHBpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6KGl0PT5ibChpdCwic3VibWVu'@;
put 'dSIpKShUKT8ocGkoYSwiaHRTdWJtZW51IiksRWUoVCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVjdENlbGwoKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5zZWxl'@;
put 'Y3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKSkpOihXbyhhLFsiaHRTdWJtZW51IiwiaHREaXNhYmxlZCJdKSxFZShUKT90aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKTp0aGlzLmV2ZW50TWFuYWdlci5h'@;
put 'ZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLnNlbGVjdENlbGwoZCxoLHZvaWQgMCx2b2lkIDAsITEsITEpKSl9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZCYmKFJhKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fElhKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS16MC05XS9nLCJfIiksZD1gJHt0aGlzLm9wdGlvbnMuY2xh'@;
put 'c3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHBpKGgsYGh0TWVudSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmcGkoaCxkKSx0aGlzLm9wdGlvbnMu'@;
put 'Y29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofWJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCl7dGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1mdW5jdGlvbigpe30sdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayl9cmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpe3RoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2smJih0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHki'@;
put 'LHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spLHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrPW51bGwpfW9uQWZ0ZXJJbml0KCl7Y29uc3R7d3RUYWJsZTpsfT10'@;
put 'aGlzLmhvdE1lbnUudmlldy5fd3QsYT10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGQ9bC5oaWRlci5zdHlsZSxoPWwuaG9sZGVyLnN0eWxlLGY9cGFyc2VJbnQoZC53aWR0aCwxMCksXz1BbChhLChULFcpPT5UKyhXLm5hbWU9PT1ncz8xOjI2KSwwKTtoLndpZHRoPWAke2YrM31w'@;
put 'eGAsaC5oZWlnaHQ9YCR7XyszfXB4YCxkLmhlaWdodD1oLmhlaWdodH1vbkFmdGVyU2VsZWN0aW9uKGwsYSxkLGgsZil7ITE9PT10aGlzLmtleUV2ZW50JiYoZi52YWx1ZT0hMCl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlvbnMuc3RhbmRhbG9u'@;
put 'ZSYmdGhpcy5ob3RNZW51JiYhVnAobC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIVZwKGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3VtZW50Q29udGV4dE1l'@;
put 'bnUobCl7dGhpcy5pc09wZW5lZCgpJiZCbyhsLnRhcmdldCwiaHRDb3JlIikmJlZwKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19VGEobEEsTzApO2NvbnN0IHlqPWxBLGNBPSJjb250ZXh0TWVudSI7c28uZ2V0U2luZ2xldG9uKCkucmVn'@;
put 'aXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdp'@;
put 'c3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTtsZXQgWVJlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gY0F9c3RhdGljIGdldCBQTFVH'@;
put 'SU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW29BLHNBLGdzLER5LEx5LGdzLGlBLFJ5LGdzLGFBLHJBLGdzLEl5LGdzLHZkXX1jb25z'@;
put 'dHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IFZyZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0aGlzLm1lbnU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbY0FdfWVuYWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbY0FdOyJmdW5jdGlvbiI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhk'@;
put 'LmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IHlqKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjpkLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9y'@;
put 'ZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25NZW51QWZ0ZXJDbG9zZSgpKSx0'@;
put 'aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gYS5leGVjdXRlQ29tbWFuZC5jYWxsKGEsLi4uZil9KSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGg9PnRoaXMub25BZnRlck9uQ2VsbENvbnRleHRNZW51KGgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdp'@;
put 'bigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW9wZW4oYSl7aWYoIXRoaXMubWVudXx8KHRoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVu'@;
put 'KCksIXRoaXMubWVudS5pc09wZW5lZCgpKSlyZXR1cm47bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6Zn09dGhpcy5ob3Qucm9vdFdpbmRvdyx7dG9wOl8sbGVmdDpUfT1m'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9Xy10NyhhLnZpZXcpLGg9VC1tZyhhLnZpZXcpfWVsc2UgZD0tMSp0Nyh0aGlzLm1lbnUuaG90TWVudS5yb290V2luZG93KSxoPS0xKm1nKHRoaXMubWVudS5ob3RNZW51LnJvb3RXaW5kb3cpO3RoaXMubWVudS5zZXRQb3NpdGlvbih7dG9wOnBh'@;
put 'cnNlSW50KGEucGFnZVksMTApK2QsbGVmdDpwYXJzZUludChhLnBhZ2VYLDEwKStofSl9Y2xvc2UoKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsKX1leGVjdXRlQ29tbWFuZChhKXtudWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJl'@;
put 'cGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGEsLi4uaCl9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNG'@;
put 'YWN0b3J5PW5ldyBVcmUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbY0FdLGQ9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'IixkKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoZC5pdGVtcyk7Y29uc3QgaD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSxE'@;
put 'bihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9b25BZnRlck9uQ2VsbENvbnRleHRNZW51KGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQucm93SGVhZGVycyxmPWQuY29sSGVhZGVycyxUPWEudGFyZ2V0O3RoaXMuY2xvc2Uo'@;
put 'KSwhQm8oVCwiaGFuZHNvbnRhYmxlSW5wdXQiKSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLChofHxmfHxmdW5jdGlvbiBfKFcpe3JldHVybiJURCI9PT1XLm5vZGVOYW1lfHwiVEQiPT09Vy5wYXJlbnROb2RlLm5vZGVOYW1lfShUKXx8Qm8oVCwiY3VycmVudCIp'@;
put 'JiZCbyhULCJ3dEJvcmRlciIpKSYmdGhpcy5vcGVuKGEpKX1vbk1lbnVCZWZvcmVPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlz'@;
put 'KX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlzKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fXJldHVybiBj'@;
put 'LlNFUEFSQVRPUj17bmFtZTpnc30sY30pKCk7Y2xhc3MgWFJle2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgSlJle2NvbnN0cnVjdG9yKCl7dGhpcy5jbGlw'@;
put 'Ym9hcmREYXRhPW5ldyBYUmV9fWNsYXNzIHdqe2NvbnN0cnVjdG9yKGwpe3RoaXMucm9vdERvY3VtZW50PWwuZGVmYXVsdFZpZXc/bDpsLm93bmVyRG9jdW1lbnQsdGhpcy5tYWluRWxlbWVudD1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmxpc3RlbmVyc0NvdW50'@;
put 'PW5ldyBXZWFrU2V0LHRoaXMuY29udGFpbmVyPWx9dXNlU2Vjb25kYXJ5RWxlbWVudCgpe2NvbnN0IGw9ZnVuY3Rpb24gdE9lKGMpe2NvbnN0IGw9ZEEuZ2V0KGMpO2lmKGwpcmV0dXJuIGwucGFyZW50RWxlbWVudHx8Yy5hcHBlbmRDaGlsZChsKSxsO2NvbnN0IGQ9KGMuZGVmYXVsdFZpZXc/'@;
put 'YzpjLm93bmVyRG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGRBLnNldChjLGQpLGQuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLGQuY2xhc3NOYW1lPSJIYW5kc29udGFibGVDb3B5UGFzdGUiLGQudGFiSW5kZXg9LTEsZC5hdXRvY29tcGxldGU9'@;
put 'Im9mZiIsZC53cmFwPSJoYXJkIixkLnZhbHVlPSIgIixjLmFwcGVuZENoaWxkKGQpLGR9KHRoaXMuY29udGFpbmVyKTt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLFdyZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5F'@;
put 'bGVtZW50PWx9c2V0Rm9jdXNhYmxlRWxlbWVudChsKXt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLFdyZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5FbGVtZW50PWx9Z2V0Rm9jdXNhYmxlRWxlbWVudCgpe3JldHVy'@;
put 'biB0aGlzLm1haW5FbGVtZW50fWZvY3VzKCl7dGhpcy5tYWluRWxlbWVudC52YWx1ZT0iICIsbTIoKXx8cHRlKHRoaXMubWFpbkVsZW1lbnQpfX1UYSh3aixPMCk7Y29uc3QgdUE9bmV3IFdlYWtNYXAsQ2o9KGMsbCk9PmE9PmwucnVuTG9jYWxIb29rcyhjLGEpO2Z1bmN0aW9uIFdyZShjLGws'@;
put 'YSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsImNvcHkiLENqKCJjb3B5IixhKSksYy5hZGRFdmVudExpc3RlbmVyKGwsImN1dCIsQ2ooImN1dCIsYSkpLGMuYWRkRXZlbnRMaXN0ZW5lcihsLCJwYXN0ZSIsQ2ooInBhc3RlIixhKSl9Y29uc3QgZEE9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gR3JlKGMp'@;
put 'e2lmKCEoYyBpbnN0YW5jZW9mIHdqKSlyZXR1cm47bGV0IGw9dUEuZ2V0KGMuY29udGFpbmVyKTtpZihsPWlzTmFOKGwpPzA6bCxsPjAmJihsLT0xKSxmdW5jdGlvbiBlT2UoYyl7Yy5ldmVudE1hbmFnZXIuY2xlYXIoKX0oYyksbDw9MCl7bD0wO2NvbnN0IGE9ZEEuZ2V0KGMuY29udGFpbmVy'@;
put 'KTthJiZhLnBhcmVudE5vZGUmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksZEEuZGVsZXRlKGMuY29udGFpbmVyKSksYy5tYWluRWxlbWVudD1udWxsfXVBLnNldChjLmNvbnRhaW5lcixsKX1mdW5jdGlvbiAkcmUoYyxsKXtxcmUoYyxsKSxsLmFkZChjKX1mdW5jdGlvbiBFNyhjLGws'@;
put 'YSl7cXJlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBxcmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGhBKGMsbCxhKXtpZighbC5o'@;
put 'YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIHF1KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIG5PZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMs'@;
put 'S3JlKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGs3KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gck9lKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZp'@;
put 'ZWxkIik7bC52YWx1ZT1hfX0oYyxLcmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIEtyZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIg'@;
put 'WHA9bmV3IFdlYWtNYXAsU2o9bmV3IFdlYWtNYXAsUHk9bmV3IFdlYWtNYXAsTWo9bmV3IFdlYWtNYXAseGo9bmV3IFdlYWtNYXAsRnk9bmV3IFdlYWtNYXAsZkE9bmV3IFdlYWtTZXQsWHJlPW5ldyBXZWFrU2V0O2NsYXNzIGlPZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291'@;
put 'bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOl99PWw7JHJlKHRoaXMsWHJlKSwkcmUodGhpcyxmQSksRTcodGhpcyxYcCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxTaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAw'@;
put 'fSksRTcodGhpcyxQeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxNaix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyx4aix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRTcodGhpcyxGeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksazcodGhp'@;
put 'cyxTaixhKSxrNyh0aGlzLFB5LGQpLGs3KHRoaXMsTWosaCksazcodGhpcyx4aixmKSxrNyh0aGlzLEZ5LF8pfXNldFNlbGVjdGVkUmFuZ2UobCl7azcodGhpcyxYcCxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PXF1KHRoaXMsU2opLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLFB5KS5jYWxs'@;
put 'KHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1oQSh0aGlzLFhyZSxvT2UpLmNhbGwodGhpcyxsLGQpLF89aEEodGhpcyxmQSxF'@;
put 'aikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09XyxzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOl99fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09cXUodGhpcyxQeSkuY2FsbCh0aGlzKXx8MD09PXF1'@;
put 'KHRoaXMsRnkpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PXF1KHRoaXMsWHApLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1xdSh0aGlzLFhwKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPWhBKHRoaXMsZkEsRWopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1Jhbmdl'@;
put 'VHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PXF1KHRoaXMsUHkpLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLEZ5KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDps'@;
put 'fT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1oQSh0aGlzLGZBLEVqKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LXF1KHRoaXMsRnkpLmNhbGwodGhp'@;
put 'cyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBFaihjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrcXUodGhpcyx4aikuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBvT2UoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK3F1KHRoaXMs'@;
put 'TWopLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gSnJlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gRG4oYyxkPT57dm8oTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksVz0+ey0xPT09bC5pbmRleE9mKFcpJiZsLnB1c2goVyl9'@;
put 'KSx2byhNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxXPT57LTE9PT1hLmluZGV4T2YoVykmJmEucHVzaChXKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIFJnKGMsbCxhKXtRcmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0'@;
put 'aW9uIFFyZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQTcoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGFPZShjKXt2YXIgbD1mdW5j'@;
put 'dGlvbiBsT2UoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBiMShjLGwpe3JldHVybiBmdW5jdGlvbiB1T2UoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGVp'@;
put 'ZShjLGwsImdldCIpKX1mdW5jdGlvbiBXZihjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGRPZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVs'@;
put 'ZCIpO2wudmFsdWU9YX19KGMsZWllKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBlaWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9c28uZ2V0'@;
put 'U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ3V0'@;
put 'Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHki'@;
put 'KTtjb25zdCBwQT0iY29weVBhc3RlIixmT2U9WyJmcmFnbWVudFNlbGVjdGlvbiJdLHRpZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3NzIj50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxh'@;
put 'Y2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBraj1uZXcgV2Vha01hcCxBaj1uZXcgV2Vha01hcCxUaj1uZXcgV2Vha01hcCxUNz1uZXcgV2Vha01hcCxnQT1uZXcgV2Vha01hcCxtQT1uZXcgV2Vha01hcCxENz1uZXcgV2Vha01hcCxuaWU9bmV3IFdlYWtTZXQ7Y2xh'@;
put 'c3MgcE9lIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHNPZShjLGwpe1FyZShjLGwpLGwuYWRkKGMpfSh0aGlzLG5pZSksQTcodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLEE3KHRoaXMsInJvd3NMaW1pdCIsMS8wKSxBNyh0aGlzLCJwYXN0'@;
put 'ZU1vZGUiLCJvdmVyd3JpdGUiKSxBNyh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLFJnKHRoaXMsa2ose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxBaix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLFRqLHt3cml0YWJsZTohMCx2'@;
put 'YWx1ZTohMX0pLFJnKHRoaXMsVDcse3dyaXRhYmxlOiEwLHZhbHVlOiJjZWxscy1vbmx5In0pLFJnKHRoaXMsZ0Ese3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxtQSx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLEQ3LHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgaU9lKHtj'@;
put 'b3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3QuY291bnRDb2xzKCkscm93c0xpbWl0OigpPT50aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0LGNvdW50Q29sdW1uSGVhZGVyczooKT0+dGhpcy5o'@;
put 'b3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pfSksQTcodGhpcywiY29weWFibGVSYW5nZXMiLFtdKSxBNyh0aGlzLCJmb2N1c2FibGVFbGVtZW50Iix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwQX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVy'@;
put 'bltwQSwuLi5mT2VdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwQV19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtbcEFdOmx9PXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKCk7dmFyIGEsZDsib2JqZWN0Ij09dHlwZW9mIGwmJih0aGlzLnBhc3RlTW9kZT1udWxsIT09KGE9bC5wYXN0ZU1vZGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4obC5yb3dzTGltaXQpP3RoaXMucm93c0xpbWl0Omwucm93c0xpbWl0'@;
put 'LHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKGwuY29sdW1uc0xpbWl0KT90aGlzLmNvbHVtbnNMaW1pdDpsLmNvbHVtbnNMaW1pdCxXZih0aGlzLGtqLCEhbC5jb3B5Q29sdW1uSGVhZGVycyksV2YodGhpcyxBaiwhIWwuY29weUNvbHVtbkdyb3VwSGVhZGVycyksV2YodGhpcyxUaiwhIWwuY29w'@;
put 'eUNvbHVtbkhlYWRlcnNPbmx5KSx0aGlzLnVpQ29udGFpbmVyPW51bGwhPT0oZD1sLnVpQ29udGFpbmVyKSYmdm9pZCAwIT09ZD9kOnRoaXMudWlDb250YWluZXIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixoPT50aGlzLm9uQWZ0ZXJDb250ZXh0TWVu'@;
put 'dURlZmF1bHRPcHRpb25zKGgpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VVcCIsKCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlVXAoKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PnRoaXMub25BZnRlclNlbGVjdGlvbkVuZCgpKSx0aGlzLmFkZEhvb2so'@;
put 'ImJlZm9yZUtleURvd24iLCgpPT50aGlzLm9uQmVmb3JlS2V5RG93bigpKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9ZnVuY3Rpb24gUVJlKGMpe2NvbnN0IGw9bmV3IHdqKGMpO2xldCBhPXVBLmdldChjKTtyZXR1cm4gYT1pc05hTihhKT8wOmEsdUEuc2V0KGMsYSsxKSxsfSh0aGlzLnVpQ29u'@;
put 'dGFpbmVyKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuYWRkTG9jYWxIb29rKCJjb3B5IixoPT50aGlzLm9uQ29weShoKSkuYWRkTG9jYWxIb29rKCJjdXQiLGg9PnRoaXMub25DdXQoaCkpLmFkZExvY2FsSG9vaygicGFzdGUiLGg9PnRoaXMub25QYXN0ZShoKSksc3VwZXIuZW5hYmxlUGx1Z2lu'@;
put 'KCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmZvY3VzYWJsZUVsZW1lbnQmJkdyZSh0aGlzLmZv'@;
put 'Y3VzYWJsZUVsZW1lbnQpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7V2YodGhpcyxUNyxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxXZih0aGlzLGdBLCEwKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxl'@;
put 'RWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1o'@;
put 'ZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtXZih0aGlzLG1BLCEwKSx0aGlzLmdl'@;
put 'dE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiBDeSh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdl'@;
put 'ZERhdGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09SnJlKGwpO3JldHVybiBEbihkLGY9Pntjb25zdCBfPVtdO0RuKGgsVD0+e18ucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKFQsZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsVCkpfSksYS5wdXNoKF8pfSks'@;
put 'YX1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgSlJl'@;
put 'O2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQoKXtjb25zdCBsPXRo'@;
put 'aXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2IxKHRoaXMsRDcpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcgTWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09YjEodGhpcyxUNyk/YS5z'@;
put 'ZXQoImhlYWRlcnMiLGIxKHRoaXMsRDcpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PWIxKHRoaXMsVDcpP2Euc2V0KCJoZWFkZXJzIixiMSh0aGlzLEQ3KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOiJ3aXRo'@;
put 'LWNvbHVtbi1ncm91cC1oZWFkZXJzIj09PWIxKHRoaXMsVDcpJiZhLnNldCgiaGVhZGVycyIsYjEodGhpcyxENykuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpLGEuc2V0KCJjZWxscyIsYjEodGhpcyxENykuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJhbmdlcz1BcnJheS5m'@;
put 'cm9tKGEudmFsdWVzKCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFwKGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDpfLGVuZFJvdzpULGVuZENvbDpXfT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOl8sZW5kUm93OlQsZW5kQ29sOld9fSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlz'@;
put 'LmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxsIT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzpfLGVuZENvbDpUfT1kO3RoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsXy1oKzEsVC1mKzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQg'@;
put 'MD09PWw/dm9pZCAwOmwuVEVYVEFSRUE7YT90aGlzLmZvY3VzYWJsZUVsZW1lbnQuc2V0Rm9jdXNhYmxlRWxlbWVudChhKTp0aGlzLmZvY3VzYWJsZUVsZW1lbnQudXNlU2Vjb25kYXJ5RWxlbWVudCgpfWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5n'@;
put 'ZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigh'@;
put 'bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6Xyxjb2w6VH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Vyxjb2w6aWV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IHBlPV8sd2U9VCxFZT1fLFplPVQ7Zm9yKDtmLmxlbmd0aDxk'@;
put 'fHxwZTw9Vzspe2NvbnN0e3NraXBSb3dPblBhc3RlOml0LHZpc3VhbFJvdzpldH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEocGUsVCk7aWYocGU9ZXQrMSwhMD09PWl0KWNvbnRpbnVlO0VlPWV0LHdlPVQ7Y29uc3QgeXQ9W10sRXQ9Zi5sZW5ndGglZDtmb3IoO3l0Lmxlbmd0aDxofHx3ZTw9aWU7'@;
put 'KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpTdCx2aXN1YWxDb2w6SnR9PXRoaXMuaG90LmdldENlbGxNZXRhKF8sd2UpOyh3ZT1KdCsxLCEwIT09U3QpJiYoWmU9SnQseXQucHVzaChsW0V0XVt5dC5sZW5ndGglaF0pKX1mLnB1c2goeXQpfXJldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21B'@;
put 'cnJheShfLFQsZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbXyxULEVlLFplXX1vbkNvcHkobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFiMSh0aGlzLGdBKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlh'@;
put 'YmxlVGV4dCgpLFdmKHRoaXMsZ0EsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLGQ9ZnVuY3Rpb24gY09lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5v'@;
put 'bi1pbnN0YW5jZSIpO3JldHVybiBhfSh0aGlzLG5pZSxnT2UpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpKXtjb25zdCBmPUN5KGEpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7'@;
put 'Y29uc3QgXz1ETihhKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsZiksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW3RpZSxfXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBi'@;
put 'b2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsZik7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpfVdmKHRoaXMsVDcsImNlbGxzLW9ubHkiKSxsLnByZXZlbnREZWZhdWx0KCl9b25DdXQobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFi'@;
put 'MSh0aGlzLG1BKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlhYmxlVGV4dCgpLFdmKHRoaXMsbUEsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDdXQiLGEsdGhp'@;
put 'cy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IGg9Q3koYSk7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBmPUROKGEpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixoKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbdGllLGZdLmpvaW4oIiIpKX1l'@;
put 'bHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixoKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGEsdGhpcy5j'@;
put 'b3B5YWJsZVJhbmdlcyl9bC5wcmV2ZW50RGVmYXVsdCgpfW9uUGFzdGUobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKSlyZXR1cm47bGV0IGE7aWYobCYmbC5wcmV2ZW50RGVmYXVsdCYmbC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNs'@;
put 'aXBib2FyZERhdGE8InUiKXtjb25zdCBUPXJrKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2E9VCYmLyg8dGFibGUpfCg8VEFCTEUpL2cudGVzdChUKT9JdGUoVCx0aGlz'@;
put 'LmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoYT10aGlzLmhvdC5yb290V2luZG93LmNs'@;
put 'aXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJihhPWZ1bmN0aW9uIHpEZShjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0aDspaWYoaD1jLmxl'@;
put 'bmd0aCxjLm1hdGNoKGpuZSkpYz1jLnJlcGxhY2Uoam5lLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKEJuZSkpYz1jLnJlcGxhY2UoQm5lLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0IF89MCxUPSEwO2Zv'@;
put 'cig7VDspe2NvbnN0IFc9Yy5zbGljZSgwLDEpOyciJz09PVcmJihfKz0xKSxmKz1XLCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmXyUyPT0wKSYmKFQ9ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIikucmVwbGFjZSgvWyJd'@;
put 'Ki9nLFc9Pm5ldyBBcnJheShNYXRoLmZsb29yKFcubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3QgXz1jLm1hdGNoKGpEZSk7Zj1fP19bMF06IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGEpKSxhJiYwPT09YS5sZW5ndGh8fCExPT09'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixhLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFtkLGgsZixfXT10aGlzLnBvcHVsYXRlVmFsdWVzKGEpO3RoaXMuaG90LnNlbGVjdENlbGwoZCxoLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsZiksTWF0aC5t'@;
put 'aW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxfKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBXUmUo'@;
put 'Yyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVFYpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLGIxKHRoaXMsa2opJiZsLml0ZW1zLnB1c2goZnVuY3Rpb24gcVJlKGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9NYXRoLm1pbihsLmdldFdpZHRoKCktMSwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRFYsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJz'@;
put 'KCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLEFqKSYmbC5pdGVtcy5wdXNoKGZ1bmN0aW9uICRSZShjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2dyb3VwX2hlYWRlcnMi'@;
put 'LG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExWLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVk'@;
put 'KCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLFRqKSYmbC5pdGVtcy5wdXNo'@;
put 'KGZ1bmN0aW9uIEdSZShjKXtyZXR1cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElW'@;
put 'LGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksbC5pdGVtcy5w'@;
put 'dXNoKGZ1bmN0aW9uIEtSZShjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFJWKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4h'@;
put 'MDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJPbkNlbGxNb3VzZVVwKCl7IXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5m'@;
put 'cmFnbWVudFNlbGVjdGlvbnx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfW9uQWZ0ZXJTZWxlY3Rpb25FbmQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgp'@;
put 'LCghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5mb2N1c2FibGVFbGVtZW50LmdldEZvY3VzYWJsZUVsZW1lbnQoKT09PXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50fHwhZHRlKCkpJiYodGhpcy5zZXRDb3B5YWJsZVRleHQoKSx0aGlz'@;
put 'LmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSkpfW9uQmVmb3JlS2V5RG93bigpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsYT10aGlzLmhvdC5nZXRBY3Rp'@;
put 'dmVFZGl0b3IoKTshYXx8bCE9PXRoaXMuZm9jdXNhYmxlRWxlbWVudC5nZXRGb2N1c2FibGVFbGVtZW50KCkmJmwhPT1hLnNlbGVjdHx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfWRlc3Ryb3koKXt0aGlzLmZvY3Vz'@;
put 'YWJsZUVsZW1lbnQmJihHcmUodGhpcy5mb2N1c2FibGVFbGVtZW50KSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9bnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBnT2UoYyl7Y29uc3R7cm93czpsfT1KcmUoYyk7bGV0IGE9MDtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoJiYhKGxbZF0+PTAp'@;
put 'O2QrKylhKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gcmllKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gRGooYyl7dmFyIGwsYTtyZXR1cm4oS2koYy5zdGFydCl8fEtpKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5z'@;
put 'dGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChLaShjLmVuZCl8fEtpKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gTnkoYyl7cmV0dXJuIEtpKGMuc3RhcnQp'@;
put 'JiYoYy5sZWZ0PWMuc3RhcnQpLEtpKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gTGooYyxsKXtyZXR1cm57aWQ6cmllKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7'@;
put 'aGlkZTohMH0sc3RhcnQ6e2hpZGU6ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uICRmKGMsbCl7bGV0IGE9ITE7cmV0dXJuIERuKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCBfPWMuZ2V0Q2VsbE1ldGEoaCxmKS5i'@;
put 'b3JkZXJzO2lmKF8pe2lmKCFsKXJldHVybiBhPSEwLCExO2lmKCFibChfW2xdLCJoaWRlIil8fCExPT09X1tsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiB2QShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj4ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTAwMDMp'@;
put 'fTwvc3Bhbj4ke2N9YH1jb25zdCB5T2U9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiB3T2UoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD15T2UuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9ZnVuY3Rpb24gQ09lKGMpe3JldHVybntrZXk6ImJv'@;
put 'cmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhWKTtyZXR1cm4gJGYodGhpcywidG9wIikmJihsPXZBKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9JGYodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiBT'@;
put 'T2UoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tleToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKVik7cmV0dXJuICRmKHRoaXMsbCkmJihhPXZBKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9'@;
put 'JGYodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gTU9lKGMpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFFWKTtyZXR1cm4gJGYodGhpcywiYm90dG9tIikmJihsPXZBKGwpKSxsfSxjYWxs'@;
put 'YmFjayhsLGEpe2NvbnN0IGQ9JGYodGhpcywiYm90dG9tIik7Yy5wcmVwYXJlQm9yZGVyKGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiB4T2UoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQiOiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5n'@;
put 'ZXRUcmFuc2xhdGVkUGhyYXNlKGVCKTtyZXR1cm4gJGYodGhpcyxsKSYmKGE9dkEoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD0kZih0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiBFT2UoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1l'@;
put 'KCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0Qil9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiEkZih0aGlzKX19fWNvbnN0IF9BPSJjdXN0b21Cb3JkZXJzIjtjbGFzcyBMT2UgZXh0ZW5kcyBac3tjb25z'@;
put 'dHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24ga09lKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBBT2UoYyl7dmFyIGw9ZnVuY3Rpb24gVE9lKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9KHRoaXMsInNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfQX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX0FdfWVuYWJsZVBsdWdpbigpe3Ro'@;
put 'aXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlzLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdp'@;
put 'bigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlQm9yZGVycygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKSxzdXBlci51cGRhdGVQbHVnaW4o'@;
put 'KX1zZXRCb3JkZXJzKGwsYSl7bGV0IGQ9WyJ0b3AiLCJib3R0b20iLCJzdGFydCIsImVuZCJdLGg9bnVsbDthJiYodGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oW2FdKSxkPU9iamVjdC5rZXlzKGEpLGg9RGooYSkpO2NvbnN0IF89d3koZzcobCkpO0RuKGwsVD0+e2NvbnN0W1csaWUscGUs'@;
put 'd2VdPV8oVCk7Zm9yKGxldCBFZT1XO0VlPD1wZTtFZSs9MSlmb3IobGV0IFplPWllO1plPD13ZTtaZSs9MSlEbihkLGl0PT57dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKEVlLFplLGgsd09lKGl0KSl9KX0pLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0Qm9yZGVycyhsKXtp'@;
put 'ZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnM7Y29uc3QgZD13eShnNyhsKSksaD1bXTtyZXR1cm4gRG4obCxmPT57Y29uc3RbXyxULFcsaWVdPWQoZik7Zm9yKGxldCBwZT1fO3BlPD1XO3BlKz0xKWZvcihsZXQgd2U9VDt3ZTw9aWU7d2UrPTEpRG4odGhpcy5z'@;
put 'YXZlZEJvcmRlcnMsRWU9PntFZS5yb3c9PT1wZSYmRWUuY29sPT09d2UmJmgucHVzaChOeShFZSkpfSl9KSxofWNsZWFyQm9yZGVycyhsKXtsP3RoaXMuc2V0Qm9yZGVycyhsKTooRG4odGhpcy5zYXZlZEJvcmRlcnMsYT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdz'@;
put 'KGEuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoYS5yb3csYS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MobCxhKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJzKGwp'@;
put 'fHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGwpO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsaCxhKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdo'@;
put 'dC5hZGRDdXN0b21TZWxlY3Rpb24oe2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTpofSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmNvdW50Um93cygpLF89dGhpcy5ob3QuY291bnRDb2xzKCk7aWYobD49Znx8YT49XylyZXR1cm47bGV0'@;
put 'IFQ9TGoobCxhKTtkJiYoVD1mdW5jdGlvbiB2T2UoYyxsKXtyZXR1cm4gYmwobCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLGJsKGwsInRvcCIpJiZLaShsLnRvcCkmJihsLnRvcD8odXMobC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy50'@;
put 'b3A9bC50b3ApOihsLnRvcD17aGlkZTohMH0sYy50b3A9bC50b3ApKSxibChsLCJib3R0b20iKSYmS2kobC5ib3R0b20pJiYobC5ib3R0b20/KHVzKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToobC5ib3R0b209e2hpZGU6'@;
put 'ITB9LGMuYm90dG9tPWwuYm90dG9tKSksYmwobCwic3RhcnQiKSYmS2kobC5zdGFydCkmJihsLnN0YXJ0Pyh1cyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFydD1sLnN0YXJ0KSksYmwo'@;
put 'bCwiZW5kIikmJktpKGwuZW5kKSYmKGwuZW5kPyh1cyhsLmVuZCl8fChsLmVuZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KFQsZCksRG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxl'@;
put 'Y3Rpb25zLFc9PntpZihULmlkPT09Vy5zZXR0aW5ncy5pZClyZXR1cm4gT2JqZWN0LmFzc2lnbihXLnNldHRpbmdzLGQpLFQuaWQ9Vy5zZXR0aW5ncy5pZCxULnRvcD1XLnNldHRpbmdzLnRvcCxULmJvdHRvbT1XLnNldHRpbmdzLmJvdHRvbSxULnN0YXJ0PVcuc2V0dGluZ3Muc3RhcnQsVC5l'@;
put 'bmQ9Vy5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixOeShUKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoVCxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1hdGgubWluKGwudG8ucm93'@;
put 'LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGg9TWF0aC5taW4obC50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7dm8obC5mcm9tLnJvdyxkLGY9Pnt2byhsLmZyb20uY29sLGgsXz0+e2NvbnN0IFQ9TGooZixfKTtsZXQgVz0wO2Y9PT1sLmZyb20ucm93JiZibChhLCJ0b3AiKSYmKFcr'@;
put 'PTEsVC50b3A9YS50b3ApLGY9PT1sLnRvLnJvdyYmYmwoYSwiYm90dG9tIikmJihXKz0xLFQuYm90dG9tPWEuYm90dG9tKSxfPT09bC5mcm9tLmNvbCYmYmwoYSwic3RhcnQiKSYmKFcrPTEsVC5zdGFydD1hLnN0YXJ0KSxfPT09bC50by5jb2wmJmJsKGEsImVuZCIpJiYoVys9MSxULmVuZD1h'@;
put 'LmVuZCksVz4wJiYodGhpcy5ob3Quc2V0Q2VsbE1ldGEoZixfLCJib3JkZXJzIixOeShUKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoVCkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1yaWUobCxhKTt0aGlzLnNwbGljZUJvcmRlcihkKSx0aGlzLmNsZWFyQm9y'@;
put 'ZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRlcnM7Zj1mJiZ2b2lkIDAh'@;
put 'PT1mLmJvcmRlcj9EaihmKTpMaihsLGEpLGg/KGZbZF09e2hpZGU6ITB9LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9T'@;
put 'ZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE55KGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhm'@;
put 'KSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE55KGYpKSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7RG4obCxoPT57bGV0e3N0YXJ0OmYsZW5kOl99PWg7aWYoZi5yb3c9PT1fLnJvdyYmZi5jb2w9PT1fLmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5yZW1vdmVBbGxCb3JkZXJz'@;
put 'KGYucm93LGYuY29sKTp0aGlzLnNldEJvcmRlcihmLnJvdyxmLmNvbCxhLGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjp2byhmLmNvbCxfLmNvbCxUPT57dm8oZi5yb3csXy5yb3csVz0+e3RoaXMucmVtb3ZlQWxsQm9yZGVycyhXLFQpfSl9KTticmVhaztjYXNlInRvcCI6dm8o'@;
put 'Zi5jb2wsXy5jb2wsVD0+e3RoaXMuc2V0Qm9yZGVyKGYucm93LFQsYSxkKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjp2byhmLmNvbCxfLmNvbCxUPT57dGhpcy5zZXRCb3JkZXIoXy5yb3csVCxhLGQpfSk7YnJlYWs7Y2FzZSJzdGFydCI6dm8oZi5yb3csXy5yb3csVD0+e3RoaXMuc2V0Qm9yZGVy'@;
put 'KFQsZi5jb2wsYSxkKX0pO2JyZWFrO2Nhc2UiZW5kIjp2byhmLnJvdyxfLnJvdyxUPT57dGhpcy5zZXRCb3JkZXIoVCxfLmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtEbihsLGE9Pntjb25zdCBkPURqKGEpO2EucmFuZ2U/dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3Rv'@;
put 'bUFkZGVkUmFuZ2UoYS5yYW5nZSxkKTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09bDtyZXR1cm4gQWwoW2EsZCxoLGZdLChULFcpPT57bGV0IGllPVQ7cmV0'@;
put 'dXJuIFcmJlcuaGlkZSYmKGllKz0xKSxpZX0sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9Y3ModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9PmQuc2V0dGluZ3MuaWQpLmluZGV4T2YobCk7YT4tMSYmdGhpcy5o'@;
put 'b3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7RG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEpPT57aWYobnVsbD09PWwuY2VsbFJhbmdlKXJldHVybiB0aGlzLmhv'@;
put 'dC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJzKCl7RG4odGhpcy5zYXZlZEJvcmRlcnMsbD0+e3RoaXMuY2xlYXJC'@;
put 'b3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT1jcyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJzLnNwbGljZShhLDEpfWNo'@;
put 'ZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBhPSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOkRuKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzW2ZdPWwsYT0h'@;
put 'MCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gRG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihsLmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1cm4gZHMoZi5pbnN0YW5j'@;
put 'ZUJvcmRlcnMsXz0+e18udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmNvdW50SGlkZShsKTtsZXQgZj0hMTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhsLnJvdyxsLmNvbCks'@;
put 'Zj0hMCk6RG4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLF89PntpZihsLmlkPT09Xy5zZXR0aW5ncy5pZClyZXR1cm4gXy52aXN1YWxDZWxsUmFuZ2U9YSxfLmNvbW1pdCgpLGQmJmRzKF8uaW5zdGFuY2VCb3JkZXJzLFQ9PntULmNoYW5nZUJvcmRlclN0'@;
put 'eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfQV07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT15dShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2'@;
put 'ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZvaWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gX09lKGMpe3JldHVybiBjLnNvbWUo'@;
put 'bD0+S2kobC5sZWZ0KXx8S2kobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIGJPZShjKXtyZXR1cm4gYy5zb21lKGw9PktpKGwuc3RhcnQpfHxLaShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMg'@;
put 'c2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO2lmKHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3Ig'@;
put 'UlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe3RoaXMuaG90LmdldFNldHRpbmdzKClbX0FdJiZsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImJvcmRlcnMiLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtWKX0sZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOltDT2UodGhpcyksU09lKHRoaXMpLE1PZSh0aGlzKSx4T2UodGhpcyksRU9lKHRoaXMpXX19KX1vbkFmdGVySW5p'@;
put 'dCgpe3RoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBpaWU9ImRyYWdUb1Njcm9sbCI7Y2xhc3MgUk9lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGlpZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklU'@;
put 'WSgpe3JldHVybiAxMDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYm91bmRhcmllcz1udWxsLHRoaXMuY2FsbGJhY2s9bnVsbCx0aGlzLmxpc3RlbmluZz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbaWllXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixsPT50aGlzLnNldHVwTGlzdGVuaW5nKGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT50aGlzLnNldHVwTGlzdGVu'@;
put 'aW5nKGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50'@;
put 'cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zZXRCb3VuZGFyaWVzKGwpe3RoaXMuYm91bmRhcmllcz1sfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAsaD0wO2E8dGhpcy5ib3VuZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRo'@;
put 'aXMuYm91bmRhcmllcy5ib3R0b20mJihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5kYXJpZXMucmlnaHQmJihkPWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNr'@;
put 'KGQsaCl9bGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1h'@;
put 'bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9ZXkoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9c2V0dXBMaXN0ZW5pbmcobCl7aWYoVXAobCkpcmV0dXJuO2NvbnN0IGE9'@;
put 'dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5ob2xkZXI7YSE9PXRoaXMuaG90LnJvb3RXaW5kb3cmJih0aGlzLnNldEJvdW5kYXJpZXMoYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5zZXRDYWxsYmFjaygoZCxoKT0+e2Q8MD9hLnNjcm9sbExlZnQtPTUwOmQ+MCYmKGEuc2Nyb2xs'@;
put 'TGVmdCs9NTApLGg8MD9hLnNjcm9sbFRvcC09MjA6aD4wJiYoYS5zY3JvbGxUb3ArPTIwKX0pLHRoaXMubGlzdGVuKCkpfW9uTW91c2VNb3ZlKGwpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayhsLmNsaWVudFgsbC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1z'@;
put 'by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIp'@;
put 'LHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgSWo9ImRyb3Bkb3duTWVudSIsUmo9ImNoYW5nZVR5cGUiO2xldCBQT2U9KCgpPT57Y2xh'@;
put 'c3MgYyBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBJan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxU'@;
put 'X0lURU1TKCl7cmV0dXJuW0R5LEx5LGdzLFJ5LGdzLG5BLGdzLEl5LGdzLHZkXX1jb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IFZyZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0'@;
put 'aGlzLm1lbnU9bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGQsaCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtJal19ZW5hYmxlUGx1Z2luKCl7dmFyIGE9dGhpcztpZih0'@;
put 'aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBVcmUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbSWpdLGg9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGQpfTt0aGlzLnJlZ2lzdGVyRXZlbnRz'@;
put 'KCksImZ1bmN0aW9uIj09dHlwZW9mIGQuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGQuY2FsbGJhY2spLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRv'@;
put 'd25NZW51RGVmYXVsdE9wdGlvbnMiLGgpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhoLml0ZW1zKTtjb25zdCBmPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGQpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IHlqKHRoaXMuaG90'@;
put 'LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6ZC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGYpLHRoaXMubWVudS5zZXRN'@;
put 'ZW51SXRlbXMoZiksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnRoaXMub25NZW51QmVmb3JlT3BlbigpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50aGlzLm9uTWVudUFmdGVyT3BlbigpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlckNsb3NlIiwoKT0+dGhpcy5vbk1lbnVBZnRlckNsb3NlKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgXz1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KF8pLFc9MDtXPF87VysrKVRbV109YXJndW1lbnRzW1ddO3Jl'@;
put 'dHVybiBhLmV4ZWN1dGVDb21tYW5kLmNhbGwoYSwuLi5UKX0pLERuKGYsXz0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKF8ua2V5LF8pKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwiY2xp'@;
put 'Y2siLGE9PnRoaXMub25UYWJsZUNsaWNrKGEpKX1vcGVuKGEpe3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksYS53aWR0aCYmdGhpcy5tZW51LnNldE9mZnNldCgibGVmdCIsYS53aWR0aCksdGhpcy5tZW51LnNldFBvc2l0aW9uKGEpKX1jbG9zZSgpe3RoaXMubWVudSYmdGhpcy5tZW51'@;
put 'LmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQoYSl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4xP2QtMTowKSxmPTE7ZjxkO2YrKyloW2YtMV09YXJndW1lbnRzW2ZdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUoYSwuLi5oKX1zZXRMaXN0ZW5pbmcoKXtsZXQg'@;
put 'YT0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMubWVudS5pc09wZW5lZCgpJiYoYT90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlzLm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1vblRhYmxlQ2xpY2soYSl7aWYoYS5z'@;
put 'dG9wUHJvcGFnYXRpb24oKSxCbyhhLnRhcmdldCxSaikmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKSl7bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6X309dGhpcy5ob3Qucm9v'@;
put 'dFdpbmRvdyx7dG9wOlQsbGVmdDpXfT1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9VCxoPVd9Y29uc3QgZj1hLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6Zi5sZWZ0K2gsdG9wOmYudG9wK2EudGFyZ2V0Lm9mZnNldEhlaWdodCszK2Qsd2lkdGg6'@;
put 'Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KX19b25BZnRlckdldENvbEhlYWRlcihhLGQpe2NvbnN0IGg9ZC5wYXJlbnROb2RlO2lmKCFoKXJldHVybjtjb25zdCBmPWgucGFyZW50Tm9kZS5jaGlsZE5vZGVzLF89QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChmLGgpO2lmKGE8MHx8XyE9'@;
put 'PWYubGVuZ3RoLTEpcmV0dXJuO2NvbnN0IFQ9ZC5xdWVyeVNlbGVjdG9yKGAuJHtSan1gKTtpZih0aGlzLmVuYWJsZWQmJlQpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoVCYmVC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFQpKTtjb25zdCBXPXRoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtXLmNsYXNzTmFtZT1SaixXLnR5cGU9ImJ1dHRvbiIsVy5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGQuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUoVyxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9b25NZW51QmVmb3JlT3Blbigpe3Ro'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlck9wZW4oKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1yZXR1cm4gYy5TRVBBUkFUT1I9e25hbWU6Z3N9LGN9KSgpO2NsYXNzIE9qe3N0YXRpYyBnZXQgREVGQVVM'@;
put 'VF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhp'@;
put 'ZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFQcm92aWRlcj1sLHRoaXMub3B0aW9ucz10aGlzLl9tZXJnZU9wdGlvbnMoYSksdGhpcy5kYXRhUHJvdmlkZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpfV9tZXJn'@;
put 'ZU9wdGlvbnMobCl7bGV0IGE9V3UodGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGQ9bmV3IERhdGU7cmV0dXJuIGE9WGwoV3UoT2ouREVGQVVMVF9PUFRJT05TKSxhKSxhPVhsKGEsbCksYS5maWxlbmFtZT1jTihhLmZpbGVuYW1lLHtZWVlZOmQuZ2V0RnVsbFllYXIo'@;
put 'KSxNTTpgJHtkLmdldE1vbnRoKCkrMX1gLnBhZFN0YXJ0KDIsIjAiKSxERDpgJHtkLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsIjAiKX0pLGF9fWNvbnN0IE5PZT1PaixWT2U9U3RyaW5nLmZyb21DaGFyQ29kZSgxMyksQk9lPVN0cmluZy5mcm9tQ2hhckNvZGUoMzQpLGpPZT1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKDEwKSxQaj17Y3N2OmNsYXNzIHpPZSBleHRlbmRzIE5PZXtzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9jc3YiLGZpbGVFeHRlbnNpb246ImNzdiIsYm9tOiEwLGNvbHVtbkRlbGltaXRlcjoiLCIscm93RGVsaW1pdGVyOiJcclxu'@;
put 'In19ZXhwb3J0KCl7Y29uc3QgbD10aGlzLm9wdGlvbnMsYT10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IGQ9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGg9ZC5sZW5ndGg+MCxmPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRlcnMoKSxfPWYu'@;
put 'bGVuZ3RoPjA7bGV0IFQ9bC5ib20/U3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSk6IiI7cmV0dXJuIGgmJihkPWNzKGQsVz0+dGhpcy5fZXNjYXBlQ2VsbChXLCEwKSksXyYmKFQrPWwuY29sdW1uRGVsaW1pdGVyKSxUKz1kLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpLFQrPWwucm93RGVsaW1p'@;
put 'dGVyKSxEbihhLChXLGllKT0+e2llPjAmJihUKz1sLnJvd0RlbGltaXRlciksXyYmKFQrPXRoaXMuX2VzY2FwZUNlbGwoZltpZV0pK2wuY29sdW1uRGVsaW1pdGVyKSxUKz1XLm1hcChwZT0+dGhpcy5fZXNjYXBlQ2VsbChwZSkpLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpfSksVH1fZXNjYXBl'@;
put 'Q2VsbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9X2wobCk7cmV0dXJuIiIhPT1kJiYoYXx8ZC5pbmRleE9mKFZPZSk+PTB8fGQuaW5kZXhPZihCT2UpPj0wfHxkLmluZGV4T2Yoak9lKT49MHx8ZC5pbmRleE9mKHRo'@;
put 'aXMub3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpPj0wKSYmKGQ9ZC5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksZD1gIiR7ZH0iYCksZH19fTtjbGFzcyAkT2UgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iZXhwb3J0RmlsZSJ9c3RhdGljIGdldCBQ'@;
put 'TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfWlzRW5hYmxlZCgpe3JldHVybiEwfWV4cG9ydEFzU3RyaW5nKGwpe3JldHVybiB0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5leHBv'@;
put 'cnQoKX1leHBvcnRBc0Jsb2IobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUJsb2IodGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkpfWRvd25sb2FkRmlsZShsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3R7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPXRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhKSxfPXRoaXMuX2NyZWF0ZUJsb2IoZiksVD1oLlVSTHx8aC53ZWJraXRV'@;
put 'UkwsVz1kLmNyZWF0ZUVsZW1lbnQoImEiKSxpZT1gJHtmLm9wdGlvbnMuZmlsZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1XLmRvd25sb2FkKXtjb25zdCBwZT1ULmNyZWF0ZU9iamVjdFVSTChfKTtXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFcuc2V0QXR0'@;
put 'cmlidXRlKCJocmVmIixwZSksVy5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixpZSksZC5ib2R5LmFwcGVuZENoaWxkKFcpLFcuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKFcpLHNldFRpbWVvdXQoKCk9PntULnJldm9rZU9iamVjdFVS'@;
put 'TChwZSl9LDEwMCl9ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoXyxpZSl9X2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9'@;
put 'O2lmKCFQaltsXSl0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBmb3JtYXQgdHlwZSAiJHtsfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZnVuY3Rpb24gWU9lKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUGpbY10/bmV3IFBqW2NdKGwsYSk6bnVsbH0obCxuZXcgY2xhc3Mg'@;
put 'Rk9le2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5vcHRpb25zPXt9fXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25zPWx9Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlv'@;
put 'bnMsXz1bXTtyZXR1cm4gdm8obCxkLFQ9Pntjb25zdCBXPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KFQpfHwodm8oYSxoLGllPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oaWUpfHxXLnB1c2godGhpcy5ob3QuZ2V0RGF0'@;
put 'YUF0Q2VsbChULGllKSl9KSxfLnB1c2goVykpfSksX31nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMucm93SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTt2byhh'@;
put 'LGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVu'@;
put 'ZENvbDpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpO3ZvKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLF89bF09dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDApLGY9TWF0aC5taW4oZixhKSxfPU1hdGgubWluKF8s'@;
put 'bCkse3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6X319X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRkZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX0odGhpcy5ob3QpLGEpfV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmKGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5t'@;
put 'aW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9fWNsYXNzIG9pZXtjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRlbGVzczpoPSEwfT1hO3RoaXMuaG90PWwsdGhpcy5pZD1kLHRoaXMuZWxlbWVudHM9W10sdGhpcy5oaWRkZW49ITEsdGhpcy5zdGF0ZUlk'@;
put 'PWBGaWx0ZXJzLmNvbXBvbmVudC4ke3RoaXMuaWR9YCx0aGlzLnN0YXRlPWg/bnVsbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQsbmV3IEVrKX1yZXNldCgpe0RuKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRk'@;
put 'ZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUg'@;
put 'Z2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxEbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0'@;
put 'YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fVRhKG9pZSxPMCk7Y29uc3QgYkE9b2llLFZ5PXt9O2Z1bmN0aW9uIEpwKGMsbCl7aWYoIVZ5W2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdHtjb25k'@;
put 'aXRpb246YSxkZXNjcmlwdG9yOmR9PVZ5W2NdO2xldCBoPWw7cmV0dXJuIGQuaW5wdXRWYWx1ZXNEZWNvcmF0b3ImJihoPWQuaW5wdXRWYWx1ZXNEZWNvcmF0b3IoaCkpLGZ1bmN0aW9uKGYpe3JldHVybiBhLmFwcGx5KGYubWV0YS5pbnN0YW5jZSxbXS5jb25jYXQoW2ZdLFtoXSkpfX1mdW5j'@;
put 'dGlvbiBPZyhjKXtpZighVnlbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBWeVtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIEpsKGMsbCxhKXthLmtleT1jLFZ5W2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0'@;
put 'IEdjPSJub25lIjtKbChHYyxmdW5jdGlvbiBxT2UoKXtyZXR1cm4hMH0se25hbWU6SWssaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgQnk9ImVtcHR5IjtKbChCeSxmdW5jdGlvbiBLT2UoYyl7cmV0dXJuIGdjKGMudmFsdWUpfSx7bmFtZTpsQixpbnB1dHNDb3VudDow'@;
put 'LHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB5QT0ibm90X2VtcHR5IjtKbCh5QSxmdW5jdGlvbiBYT2UoYyxsKXtyZXR1cm4hSnAoQnksbCkoYyl9LHtuYW1lOmNCLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGp5PSJlcSI7SmwoanksZnVuY3Rpb24gSk9lKGMsbCl7'@;
put 'bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpPT09X2woYSl9LHtuYW1lOnVCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHdBPSJuZXEiO0psKHdBLGZ1bmN0aW9uIFFPZShjLGwpe3JldHVybiFKcChqeSxs'@;
put 'KShjKX0se25hbWU6ZEIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksSmwoImd0IixmdW5jdGlvbiBlUGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+ZH0se25hbWU6bUIsaW5wdXRz'@;
put 'Q291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksSmwoImd0ZSIsZnVuY3Rpb24gdFBlKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPj1kfSx7bmFtZTp2QixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRv'@;
put 'cnM6ITB9KSxKbCgibHQiLGZ1bmN0aW9uIG5QZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTpfQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxKbCgibHRlIixmdW5j'@;
put 'dGlvbiByUGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOmJCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEZqPSJkYXRlX2FmdGVyIjtKbChGaixmdW5j'@;
put 'dGlvbiBpUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6Q0IsaW5wdXRzQ291bnQ6MSxzaG93'@;
put 'T3BlcmF0b3JzOiEwfSk7Y29uc3QgSGo9ImRhdGVfYmVmb3JlIjtKbChIaixmdW5jdGlvbiBvUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFs'@;
put 'aWQoKSkmJmQuZGlmZihoKTw9MH0se25hbWU6U0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQ0E9ImJldHdlZW4iO0psKENBLGZ1bmN0aW9uIHNQZShjLGwpe2xldFthLGRdPWwsaD1hLGY9ZDtpZigibnVtZXJpYyI9PT1jLm1ldGEudHlwZSl7Y29uc3QgXz1wYXJz'@;
put 'ZUZsb2F0KGgsMTApLFQ9cGFyc2VGbG9hdChmLDEwKTtoPU1hdGgubWluKF8sVCksZj1NYXRoLm1heChfLFQpfWVsc2UgaWYoImRhdGUiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IF89SnAoSGosW2ZdKSxUPUpwKEZqLFtoXSk7cmV0dXJuIF8oYykmJlQoYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMu'@;
put 'dmFsdWU8PWZ9LHtuYW1lOnlCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHVpZT0ibm90X2JldHdlZW4iO0psKHVpZSxmdW5jdGlvbiBhUGUoYyxsKXtyZXR1cm4hSnAoQ0EsbCkoYyl9LHtuYW1lOndCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2Nv'@;
put 'bnN0IGRpZT0iYmVnaW5zX3dpdGgiO0psKGRpZSxmdW5jdGlvbiBsUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gX2woYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChfbChhKSl9LHtuYW1lOmhCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczoh'@;
put 'MH0pLEpsKCJlbmRzX3dpdGgiLGZ1bmN0aW9uIGNQZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChfbChhKSl9LHtuYW1lOmZCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IE5q'@;
put 'PSJjb250YWlucyI7SmwoTmosZnVuY3Rpb24gdVBlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YoX2woYSkpPj0wfSx7bmFtZTpwQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBm'@;
put 'aWU9Im5vdF9jb250YWlucyI7SmwoZmllLGZ1bmN0aW9uIGRQZShjLGwpe3JldHVybiFKcChOaixsKShjKX0se25hbWU6Z0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgcGllPSJkYXRlX3RvbW9ycm93IjtKbChwaWUsZnVuY3Rpb24gaFBlKGMpe2NvbnN0IGw9S28o'@;
put 'Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOnhCLGlucHV0c0NvdW50OjB9KTtjb25zdCBnaWU9ImRhdGVfdG9kYXkiO0psKGdpZSxmdW5jdGlv'@;
put 'biBmUGUoYyl7Y29uc3QgbD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShLbygpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOk1CLGlucHV0c0NvdW50OjB9KTtjb25zdCBtaWU9ImRhdGVfeWVzdGVyZGF5IjtKbChtaWUsZnVu'@;
put 'Y3Rpb24gcFBlKGMpe2NvbnN0IGw9S28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6RUIsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IF9pZT17bnVt'@;
put 'ZXJpYzpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsImd0IiwiZ3RlIiwibHQiLCJsdGUiLENBLHVpZV0sdGV4dDpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsZGllLCJlbmRzX3dpdGgiLGdzLE5qLGZpZV0sZGF0ZTpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsSGosRmosQ0EsZ3MscGllLGdp'@;
put 'ZSxtaWVdfSxWaj0iYnVpbHQiLEJqPSJidWlsZGluZyIsYmllPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgU0F7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiIiLHZh'@;
put 'bHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLm9wdGlvbnM9WGwoU0EuREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKSx0aGlzLmJ1aWxkU3RhdGU9bnVsbH1zZXRWYWx1ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9u'@;
put 'cy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1Caj90aGlzLl9lbGVtZW50OnRoaXMuYnVpbGRTdGF0ZT09PVZqPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9QmosdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT1W'@;
put 'aix0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PVZqfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoJHUpP3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2Nv'@;
put 'bnN0IGw9KGEsZCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPUJqKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZwaSh0aGlzLl9lbGVt'@;
put 'ZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpRG4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGE9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYS5lbGVtZW50KSk7ZWxzZSBpZih0aGlzLm9wdGlvbnMud3JhcEl0KXtjb25zdCBhPXRoaXMu'@;
put 'aG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTtkcyh0aGlzLm9wdGlvbnMsKGQsaCk9Pnt2b2lkIDAhPT1hW2hdJiYiY2xhc3NOYW1lIiE9PWgmJiJ0YWdOYW1lIiE9PWgmJiJjaGlsZHJlbiIhPT1oJiYoYVtoXT10aGlzLnRyYW5zbGF0ZUlmUG9z'@;
put 'c2libGUoZCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSxEbihiaWUsZD0+bChhLGQpKX1lbHNlIERuKGJpZSxhPT5sKHRoaXMuX2VsZW1lbnQsYSkpfXVwZGF0ZSgpe31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1l'@;
put 'bnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50'@;
put 'Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19VGEoU0EsTzApO2NvbnN0IFFwPVNBLE1BPW5ldyBXZWFrTWFwO2NsYXNzIGpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBX'@;
put 'dSh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFhsKGpqLkRFRkFVTFRTLGEpKSxNQS5zZXQodGhpcyx7fSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJj'@;
put 'bGljayIsKCk9PnRoaXMub25DbGljaygpKSx0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PnRoaXMub25LZXl1cChsKSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9TUEuZ2V0KHRoaXMpLGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuaW5w'@;
put 'dXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkLHBpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLHBpKGEsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBs'@;
put 'PU1BLmdldCh0aGlzKS5pbnB1dDtsLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsbC5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxsLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpfWZv'@;
put 'Y3VzKCl7dGhpcy5pc0J1aWx0KCkmJk1BLmdldCh0aGlzKS5pbnB1dC5mb2N1cygpfW9uQ2xpY2soKXt9b25LZXl1cChsKXt0aGlzLm9wdGlvbnMudmFsdWU9bC50YXJnZXQudmFsdWV9fWNvbnN0IEw3PWpqLHhBPW5ldyBXZWFrTWFwO2NsYXNzIHpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBE'@;
put 'RUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsWGwoemouREVGQVVMVFMsYSkpLHhBLnNldCh0aGlzLHt9KSx0aGlzLm1lbnU9bnVsbCx0aGlzLml0ZW1zPVtdLHRoaXMucmVnaXN0ZXJIb29rcygp'@;
put 'fXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSl9c2V0SXRlbXMobCl7dGhpcy5pdGVtcz10aGlzLnRyYW5zbGF0ZU5hbWVzKGwpLHRoaXMubWVudSYmdGhpcy5tZW51LnNldE1lbnVJdGVtcyh0aGlzLml0ZW1zKX10cmFuc2xhdGVO'@;
put 'YW1lcyhsKXtyZXR1cm4gRG4obCxhPT57YS5uYW1lPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShhLm5hbWUpfSksbH1idWlsZCgpe3N1cGVyLmJ1aWxkKCksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51Iixr'@;
put 'ZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNvbnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pLHRoaXMubWVudS5zZXRNZW51SXRlbXModGhpcy5pdGVtcyk7Y29uc3QgbD1uZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1u'@;
put 'ZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pLGQ9eEEuZ2V0KHRoaXMpO2QuY2FwdGlvbj1sLGQuY2FwdGlvbkVsZW1lbnQ9bC5lbGVtZW50LGQuZHJvcGRvd249YSxEbihbbCxhXSxoPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGguZWxlbWVudCkp'@;
put 'LHRoaXMubWVudS5hZGRMb2NhbEhvb2soInNlbGVjdCIsaD0+dGhpcy5vbk1lbnVTZWxlY3QoaCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uTWVudUNsb3NlZCgpKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1'@;
put 'cm47bGV0IGw7bD10aGlzLm9wdGlvbnMudmFsdWU/dGhpcy5vcHRpb25zLnZhbHVlLm5hbWU6dGhpcy5tZW51LmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKElrKSx4QS5nZXQodGhpcykuY2FwdGlvbkVsZW1lbnQudGV4dENvbnRlbnQ9bCxzdXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2Nv'@;
put 'bnN0IGw9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMubWVudSYmKHRoaXMubWVudS5vcGVuKCksdGhpcy5tZW51LnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LmlzTHRyKCk/bC5sZWZ0LTU6bC5sZWZ0LTMxLHRvcDpsLnRvcC0xLHdpZHRoOmwud2lkdGgsaGVp'@;
put 'Z2h0OmwuaGVpZ2h0fSkpfWNsb3NlT3B0aW9ucygpe3RoaXMubWVudSYmdGhpcy5tZW51LmNsb3NlKCl9b25NZW51U2VsZWN0KGwpe2wubmFtZSE9PWdzJiYodGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsdGhpcy5vcHRpb25z'@;
put 'LnZhbHVlKSl9b25NZW51Q2xvc2VkKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9b25DbGljaygpe3RoaXMub3Blbk9wdGlvbnMoKX1kZXN0cm95KCl7dGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCk7Y29uc3R7Y2FwdGlvbjpsLGRyb3Bk'@;
put 'b3duOmF9PXhBLmdldCh0aGlzKTtsJiZsLmRlc3Ryb3koKSxhJiZhLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IHlpZT16aixVaj1jbGFzcyBfUGUgZXh0ZW5kcyBiQXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksdGhpcy5uYW1lPWEu'@;
put 'bmFtZSx0aGlzLmFkZFNlcGFyYXRvcj1hLmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHlpZSh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBMNyh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6UEJ9KSksdGhp'@;
put 'cy5lbGVtZW50cy5wdXNoKG5ldyBMNyh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6RkJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixsPT50aGlzLm9uQ29uZGl0aW9uU2VsZWN0KGwpKSx0'@;
put 'aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksRG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT50aGlzLm9uSW5wdXRLZXlEb3duKGEpKX0pfXNl'@;
put 'dFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSwhbClyZXR1cm47Y29uc3QgYT1XdShsLmNvbW1hbmQpO2EubmFtZS5zdGFydHNXaXRoKHlsKSYmKGEubmFtZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGEubmFtZSkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpLERu'@;
put 'KGwuYXJncywoZCxoKT0+e2lmKGg+YS5pbnB1dHNDb3VudC0xKXJldHVybiExO2NvbnN0IGY9dGhpcy5nZXRJbnB1dEVsZW1lbnQoaCk7Zi5zZXRWYWx1ZShkKSxmW2EuaW5wdXRzQ291bnQ+aD8ic2hvdyI6ImhpZGUiXSgpLGh8fHNldFRpbWVvdXQoKCk9PmYuZm9jdXMoKSwxMCl9KX1nZXRT'@;
put 'dGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuZ2V0VmFsdWUoKXx8T2coR2MpLGE9W107cmV0dXJuIERuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChkLGgpPT57bC5pbnB1dHNDb3VudD5oJiZhLnB1c2goZC5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOmwsYXJnczphfX11'@;
put 'cGRhdGVTdGF0ZShsLGEpe2NvbnN0IGQ9T2cobD9sLm5hbWU6R2MpO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGEse2NvbW1hbmQ6ZCxhcmdzOmw/bC5hcmdzOltdfSksbHx8RG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksaD0+aC5zZXRWYWx1ZShudWxsKSl9Z2V0U2VsZWN0RWxlbWVu'@;
put 'dCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgeWllKVswXX1nZXRJbnB1dEVsZW1lbnQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRz'@;
put 'KClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgTDcpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxo'@;
put 'aWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLF8pPT57cGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJnBpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgVD10aGlzLmhvdC5yb290RG9jdW1l'@;
put 'bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHBpKFQsImh0RmlsdGVyc01lbnVMYWJlbCIpLFQudGV4dENvbnRlbnQ9XyxhLmFwcGVuZENoaWxkKFQpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fERuKHRoaXMuZWxlbWVudHMsVz0+YS5hcHBlbmRDaGls'@;
put 'ZChXLmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bGV0IGE9W09nKEdjKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiB2UGUoYyl7Y29uc3QgbD1bXTts'@;
put 'ZXQgYT1jO3JldHVybiBfaWVbYV18fChhPSJ0ZXh0IiksRG4oX2llW2FdLGQ9PntsZXQgaDtoPWQ9PT1ncz97bmFtZTpnc306V3UoT2coZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9RG4odGhpcy5nZXRJbnB1dEVs'@;
put 'ZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9b25Db25kaXRpb25TZWxlY3QobCl7RG4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGEsZCk9'@;
put 'PnthW2wuaW5wdXRzQ291bnQ+ZD8ic2hvdyI6ImhpZGUiXSgpLDA9PT1kJiZzZXRUaW1lb3V0KCgpPT5hLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpfW9uU2VsZWN0VUlDbG9zZWQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1vbklucHV0'@;
put 'S2V5RG93bihsKXtvNyhsLmtleUNvZGUsIkVOVEVSIik/KHRoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0IiksdjIobCkpOm83KGwua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLHYyKGwpKX19LHp5PXt9O2Z1bmN0aW9uIHlQZShjKXtyZXR1cm4genlb'@;
put 'Y10ubmFtZX1mdW5jdGlvbiBaaihjLGwsYSl7enlbY109e25hbWU6bCxmdW5jOmF9fWNvbnN0IGU0PSJjb25qdW5jdGlvbiI7WmooZTQsVEIsZnVuY3Rpb24gQ1BlKGMsbCl7cmV0dXJuIGMuZXZlcnkoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IEVBPSJkaXNqdW5jdGlvbiI7WmooRUEsUmssZnVu'@;
put 'Y3Rpb24gTVBlKGMsbCl7cmV0dXJuIGMuc29tZShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgWWo9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtaaihZaixSayxmdW5jdGlvbiBFUGUoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9u'@;
put 'IGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1bmMobCkpJiZjW2MubGVuZ3RoLTFdLmZ1bmMobCl9KTtjb25zdCBrQT1uZXcgV2Vha01hcDtjbGFzcyBXaiBleHRlbmRzIFFwe3N0YXRpYyBnZXQgREVGQVVMVFMo'@;
put 'KXtyZXR1cm4gV3Uoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLFhsKFdqLkRFRkFVTFRTLGEpKSxrQS5zZXQodGhpcyx7fSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9'@;
put 'a0EuZ2V0KHRoaXMpO2wuaW5wdXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkO2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7YS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250'@;
put 'ZW50KSxhLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSxsLmxhYmVsPWEsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1cm47Y29uc3QgbD1r'@;
put 'QS5nZXQodGhpcyk7bC5pbnB1dC5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLGwubGFiZWwudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCl9aXNDaGVja2VkKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jaGVja2Vk'@;
put 'fXNldENoZWNrZWQoKXt0aGlzLm9wdGlvbnMuY2hlY2tlZD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLHRoaXMudXBkYXRlKCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYma0EuZ2V0KHRoaXMpLmlucHV0LmZvY3VzKCl9fWNvbnN0'@;
put 'IHdpZT1XaixBUGU9Y2xhc3Mga1BlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5idWlsZE9wZXJhdG9yc0VsZW1lbnQoKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRo'@;
put 'aXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRl'@;
put 'KCJnaG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpe2NvbnN0IGw9W2U0LEVBXTtEbihsLGE9Pntjb25zdCBkPW5ldyB3aWUodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7'@;
put 'aHRtbEZvcjphLHRleHRDb250ZW50OnlQZShhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT50aGlzLm9uUmFkaW9JbnB1dENoYW5nZShoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVs'@;
put 'ZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9yKEFhYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtEbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1l'@;
put 'bnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mIHdpZSYmYS5pc0NoZWNrZWQoKSk7cmV0dXJuIGw/bC5nZXRWYWx1ZSgpOmU0fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRTdGF0ZShsKXt0aGlzLnJlc2V0KCksbCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRp'@;
put 'b25JZCgpIT09bCYmRG4odGhpcy5lbGVtZW50cyxhPT57YS5zZXRDaGVja2VkKGEuZ2V0VmFsdWUoKT09PWwpfSl9dXBkYXRlU3RhdGUoKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZTQ7ZD09PVlqJiYoZD1FQSksdGhpcy5z'@;
put 'dGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9b25SYWRpb0lucHV0Q2hhbmdlKGwpe3RoaXMuc2V0U3RhdGUobC50YXJnZXQudmFsdWUpfX07ZnVuY3Rpb24gRFBlKGMsbCl7bGV0'@;
put 'IGE9YztyZXR1cm4iIj09PWEmJihhPWAoJHtsfSlgKSxhfVZ0ZSgpO2NvbnN0IEdqPW5ldyBTZXQoWzFdKS5oYXMoMSksTFBlPUdqJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkuZnJvbTtmdW5jdGlvbiBVeShjKXtsZXQgbD1jO3JldHVybiBHaiYmKGw9bmV3IFNldChsKSksZnVuY3Rpb24o'@;
put 'YSl7bGV0IGQ7cmV0dXJuIGQ9R2o/bC5oYXMoYSk6ISF+bC5pbmRleE9mKGEpLGR9fWZ1bmN0aW9uIFNpZShjKXtyZXR1cm4gYz8/IiJ9ZnVuY3Rpb24gJGooYyl7bGV0IGw9YztyZXR1cm4gbD1MUGU/QXJyYXkuZnJvbShuZXcgU2V0KGwpKTpyTihsKSxsPWwuc29ydCgoYSxkKT0+Im51bWJl'@;
put 'ciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGQ/YS1kOmE9PT1kPzA6YT5kPzE6LTEpLGx9ZnVuY3Rpb24gTWllKGMsbCxhLGQpe2NvbnN0IGg9W10sZj1jPT09bDtsZXQgXztyZXR1cm4gZnx8KF89VXkobCkpLERuKGMsVD0+e2xldCBXPSExOyhmfHxfKFQpKSYmKFc9ITApO2NvbnN0'@;
put 'IGllPXtjaGVja2VkOlcsdmFsdWU6VCx2aXN1YWxWYWx1ZTpEUGUoVCxhKX07ZCYmZChpZSksaC5wdXNoKGllKX0pLGh9Y29uc3QgcWo9bmV3IFdlYWtNYXA7Y2xhc3MgS2ogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtocmVmOiIjIix0YWdOYW1lOiJhIn0p'@;
put 'fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxYbChLai5ERUZBVUxUUyxhKSkscWouc2V0KHRoaXMse30pfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxxai5nZXQodGhpcykubGluaz10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGR9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihxai5nZXQodGhpcyku'@;
put 'bGluay50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9fWNvbnN0IHhpZT1LaixJUGU9bmV3IFdlYWtNYXA7Y2xhc3MgWGogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtjbGFzc05hbWU6Imh0'@;
put 'VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsWGwoWGouREVGQVVMVFMsYSkpLElQZS5zZXQodGhpcyx7fSksdGhpcy5zZWFyY2hJbnB1dD1uZXcgTDcodGhpcy5ob3Qse3BsYWNlaG9sZGVyOk9CLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2Vs'@;
put 'ZWN0U2VhcmNoIn0pLHRoaXMuc2VsZWN0QWxsVUk9bmV3IHhpZSh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6REIsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pLHRoaXMuY2xlYXJBbGxVST1uZXcgeGllKHRoaXMuaG90LHt0ZXh0Q29udGVudDpMQixjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9'@;
put 'KSx0aGlzLml0ZW1zPVtdLHRoaXMuaXRlbXNCb3g9bnVsbCx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5zZWFyY2hJbnB1dC5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRoaXMub25JbnB1dEtleURvd24obCkpLHRoaXMuc2VhcmNoSW5wdXQuYWRkTG9jYWxI'@;
put 'b29rKCJpbnB1dCIsbD0+dGhpcy5vbklucHV0KGwpKSx0aGlzLnNlbGVjdEFsbFVJLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnRoaXMub25TZWxlY3RBbGxDbGljayhsKSksdGhpcy5jbGVhckFsbFVJLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnRoaXMub25DbGVhckFsbENsaWNrKGwpKX1z'@;
put 'ZXRJdGVtcyhsKXt0aGlzLml0ZW1zPWwsdGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5sb2FkRGF0YSh0aGlzLml0ZW1zKX1zZXRMb2NhbGUobCl7dGhpcy5sb2NhbGU9bH1nZXRMb2NhbGUoKXtyZXR1cm4gdGhpcy5sb2NhbGV9Z2V0SXRlbXMoKXtyZXR1cm5bLi4udGhpcy5pdGVtc119'@;
put 'Z2V0VmFsdWUoKXtyZXR1cm4gZnVuY3Rpb24gUFBlKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0odGhpcy5pdGVtcyl9aXNTZWxlY3RlZEFsbFZhbHVlcygpe3JldHVybiB0aGlzLml0ZW1zLmxlbmd0aD09PXRoaXMuZ2V0VmFs'@;
put 'dWUoKS5sZW5ndGh9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgUXAodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbdGhpcy5zZWxlY3RB'@;
put 'bGxVSSx0aGlzLmNsZWFyQWxsVUldfSk7dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlYXJjaElucHV0LmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpO2NvbnN0IGg9Zj0+e3RoaXMuX2VsZW1l'@;
put 'bnQmJih0aGlzLml0ZW1zQm94JiZ0aGlzLml0ZW1zQm94LmRlc3Ryb3koKSxwaShmLCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSx0aGlzLml0ZW1zQm94PW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3RvcihmLHtkYXRhOnRoaXMuaXRlbXMsY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNo'@;
put 'ZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihXLGllLHBlLHdlLEVlLFplKT0+e1cudGl0bGU9WmUuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChpZSxaZS5sYWJlbC5wcm9wZXJ0eSl9LG1heENvbHM6MSxh'@;
put 'dXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvbFdpZHRoczooKT0+dGhpcy5pdGVtc0JveC5jb250YWluZXIuc2Nyb2xsV2lkdGgtSWMobCksY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxIYW5kbGU6ITEsZnJhZ21lbnRTZWxlY3Rpb246ImNlbGwiLHRh'@;
put 'Yk1vdmVzOntyb3c6MSxjb2w6MH0sbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSx0aGlzLml0ZW1zQm94LmluaXQoKSx0aGlzLml0ZW1zQm94LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJF'@;
put 'c2NhcGUiXV0sY2FsbGJhY2s6Vz0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsVyx0aGlzKX0sZ3JvdXA6Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3gifSkpfTtoKGEpLHNldFRpbWVvdXQoKCk9PmgoYSksMTAwKX1yZXNldCgpe3RoaXMuc2VhcmNoSW5wdXQucmVzZXQoKSx0aGlzLnNl'@;
put 'bGVjdEFsbFVJLnJlc2V0KCksdGhpcy5jbGVhckFsbFVJLnJlc2V0KCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJih0aGlzLml0ZW1zQm94LmxvYWREYXRhKGZ1bmN0aW9uIE9QZShjLGwpe2NvbnN0IGE9VXkobCk7cmV0dXJuIGNzKGMsZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX0o'@;
put 'dGhpcy5pdGVtcyx0aGlzLm9wdGlvbnMudmFsdWUpKSxzdXBlci51cGRhdGUoKSl9ZGVzdHJveSgpe3RoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3guZGVzdHJveSgpLHRoaXMuc2VhcmNoSW5wdXQuZGVzdHJveSgpLHRoaXMuY2xlYXJBbGxVSS5kZXN0cm95KCksdGhpcy5zZWxlY3RBbGxV'@;
put 'SS5kZXN0cm95KCksdGhpcy5zZWFyY2hJbnB1dD1udWxsLHRoaXMuY2xlYXJBbGxVST1udWxsLHRoaXMuc2VsZWN0QWxsVUk9bnVsbCx0aGlzLml0ZW1zQm94PW51bGwsdGhpcy5pdGVtcz1udWxsLHN1cGVyLmRlc3Ryb3koKX1vbklucHV0KGwpe2NvbnN0IGE9bC50YXJnZXQudmFsdWUudG9M'@;
put 'b2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7bGV0IGQ7ZD0iIj09PWE/Wy4uLnRoaXMuaXRlbXNdOl8xKHRoaXMuaXRlbXMsaD0+YCR7aC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4T2YoYSk+PTApLHRoaXMuaXRlbXNCb3gubG9hZERh'@;
put 'dGEoZCl9b25JbnB1dEtleURvd24obCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixsLHRoaXMpLHZOKG83LGwua2V5Q29kZSkoIkFSUk9XX0RPV058VEFCIikmJiF0aGlzLml0ZW1zQm94LmlzTGlzdGVuaW5nKCkmJih2MihsKSx0aGlzLml0ZW1zQm94Lmxpc3RlbigpLHRoaXMuaXRl'@;
put 'bXNCb3guc2VsZWN0Q2VsbCgwLDApKX1vblNlbGVjdEFsbENsaWNrKGwpe2NvbnN0IGE9W107bC5wcmV2ZW50RGVmYXVsdCgpLERuKHRoaXMuaXRlbXNCb3guZ2V0U291cmNlRGF0YSgpLChkLGgpPT57ZC5jaGVja2VkPSEwLGEucHVzaChhVihkLGgpWzBdKX0pLHRoaXMuaXRlbXNCb3guc2V0'@;
put 'U291cmNlRGF0YUF0Q2VsbChhKX1vbkNsZWFyQWxsQ2xpY2sobCl7Y29uc3QgYT1bXTtsLnByZXZlbnREZWZhdWx0KCksRG4odGhpcy5pdGVtc0JveC5nZXRTb3VyY2VEYXRhKCksKGQsaCk9PntkLmNoZWNrZWQ9ITEsYS5wdXNoKGFWKGQsaClbMF0pfSksdGhpcy5pdGVtc0JveC5zZXRTb3Vy'@;
put 'Y2VEYXRhQXRDZWxsKGEpfX1jb25zdCBFaWU9WGosUGc9ImJ5X3ZhbHVlIjtKbChQZyxmdW5jdGlvbiBGUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVy'@;
put 'bltVeShsKV19LHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBOUGU9Y2xhc3MgSFBlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBFaWUodGhpcy5ob3QpKSx0'@;
put 'aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnRoaXMub25JbnB1dEtleURvd24obCkpfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5PT09'@;
put 'UGcpe2NvbnN0IGE9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRlbXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50'@;
put 'KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJue2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IWEubGVuZ3RoP0djOlBnfSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsXyxUKT0+e2NvbnN0W1ddPV8x'@;
put 'KGgsd2U9PndlLm5hbWU9PT1QZyksaWU9e30scGU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShPayk7aWYoVyl7Y29uc3Qgd2U9JGooY3MoXyhkLFQpLGV0PT5ldC52YWx1ZSkpO2YmJihXLmFyZ3NbMF09Zik7Y29uc3QgRWU9W10sWmU9TWllKHdlLFcuYXJnc1swXSxwZSxldD0+e2V0'@;
put 'LmNoZWNrZWQmJkVlLnB1c2goZXQudmFsdWUpfSk7aWUubG9jYWxlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4pLmxvY2FsZSxpZS5hcmdzPVtFZV0saWUuY29tbWFuZD1PZyhQZyksaWUuaXRlbXNTbmFwc2hvdD1aZX1lbHNlIGllLmFyZ3M9'@;
put 'W10saWUuY29tbWFuZD1PZyhHYyk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxpZSl9O2EobC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3Rvcnkp'@;
put 'LGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYmYShsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5LGwuZWRp'@;
put 'dGVkQ29uZGl0aW9uU3RhY2spfWdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgRWllKVswXX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5k'@;
put 'OiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZixfKT0+e3BpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgVD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7'@;
put 'cmV0dXJuIHBpKFQsImh0RmlsdGVyc01lbnVMYWJlbCIpLFQudGV4dENvbnRlbnQ9XyxhLmFwcGVuZENoaWxkKFQpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fERuKHRoaXMuZWxlbWVudHMsVz0+YS5hcHBlbmRDaGlsZChXLmVsZW1lbnQpKSxhfX19cmVzZXQo'@;
put 'KXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoT2spLGE9JGoodGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpKSxkPU1pZShhLGEsbCk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhkKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlw'@;
put 'bGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYSk7Y29uc3QgaD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1oJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGgu'@;
put 'dmlzdWFsSW5kZXgpLmxvY2FsZSl9b25JbnB1dEtleURvd24obCl7bzcobC5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksdjIobCkpfV9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5n'@;
put 'ZXRTZWxlY3RlZENvbHVtbigpO3JldHVybiBudWxsPT09bD9bXTpjcyh0aGlzLmhvdC5nZXREYXRhQXRDb2wobC52aXN1YWxJbmRleCksYT0+U2llKGEpKX19O2NsYXNzIFp5IGV4dGVuZHMgYkF7c3RhdGljIGdldCBCVVRUT05fT0soKXtyZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9OX0NB'@;
put 'TkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgTDcodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6SUIsY2xhc3NOYW1lOiJodFVJQnV0'@;
put 'dG9uIGh0VUlCdXR0b25PSyIsaWRlbnRpZmllcjpaeS5CVVRUT05fT0t9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBMNyh0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpSQixjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCIsaWRlbnRpZmllcjpaeS5CVVRUT05f'@;
put 'Q0FOQ0VMfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXtEbih0aGlzLmVsZW1lbnRzLGw9PntsLmFkZExvY2FsSG9vaygiY2xpY2siLChhLGQpPT50aGlzLm9uQnV0dG9uQ2xpY2soYSxkKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMu'@;
put 'aWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJn'@;
put 'aG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWFjY2VwdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0Iil9Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX1vbkJ1dHRvbkNsaWNrKGwsYSl7YS5vcHRp'@;
put 'b25zLmlkZW50aWZpZXI9PT1aeS5CVVRUT05fT0s/dGhpcy5hY2NlcHQoKTp0aGlzLmNhbmNlbCgpfX1jb25zdCBWUGU9Wnksa2llPSJDb25kaXRpb25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyI7Y2xhc3MgQWlle2NvbnN0cnVjdG9yKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07dGhpcy5ob3Q9bCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1uZXcgRWssITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJN'@;
put 'YXAoa2llLHRoaXMuZmlsdGVyaW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNo'@;
put 'KGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoYSksZj1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSxfPWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKGYsbCxfKX1pc01hdGNo'@;
put 'SW5Db25kaXRpb25zKGwsYSl7cmV0dXJuIWwubGVuZ3RofHxmdW5jdGlvbiBiUGUoYyl7aWYoIXp5W2NdKXRocm93IEVycm9yKGBPcGVyYXRpb24gd2l0aCBpZCAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3QgbD16eVtjXS5mdW5jO3JldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBs'@;
put 'KGEsZCl9fShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ZTQpKGwsYSl9YWRkQ29uZGl0aW9uKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmU0LGg9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLmxvY2FsZSxfPWNzKGEuYXJncyxwZT0+InN0cmluZyI9PXR5cGVvZiBwZT9wZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpwZSksVD1hLm5hbWV8fGEuY29tbWFuZC5rZXk7dGhpcy5y'@;
put 'dW5Mb2NhbEhvb2tzKCJiZWZvcmVBZGQiLGwpO2NvbnN0IFc9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYoVyl7aWYoVyE9PWQpdGhyb3cgRXJyb3IoQWFgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke1d9XGBceDIwCiAgICAgICAg'@;
put 'ZmlsdGVyIG9wZXJhdGlvbi4gVXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMg'@;
put 'KGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYoSWEoenlbZF0pKXRocm93IG5ldyBFcnJvcihBYWBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1l'@;
put 'ZCBcYCR7ZH1cYC4gUG9zc2libGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFuZCBcYGNvbmp1bmN0aW9uXGAuYCk7Y29uc3QgaWU9dGhpcy5nZXRDb25kaXRpb25zKGwpOzA9PT1pZS5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGws'@;
put 'e29wZXJhdGlvbjpkLGNvbmRpdGlvbnM6W3tuYW1lOlQsYXJnczpfLGZ1bmM6SnAoVCxfKX1dfSxoKTppZS5wdXNoKHtuYW1lOlQsYXJnczpfLGZ1bmM6SnAoVCxfKX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDtyZXR1cm4gbnVs'@;
put 'bCE9PShhPW51bGw9PT0oZD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0ZXJpbmdTdGF0'@;
put 'ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3RhY2tQb3NpdGlv'@;
put 'bihsKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRpdGlvbnMoKXtyZXR1cm4gQWwodGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJu'@;
put 'IGwucHVzaCh7Y29sdW1uOmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpjcyhmLF89PntsZXR7bmFtZTpULGFyZ3M6V309XztyZXR1cm57bmFtZTpULGFyZ3M6V319KX0pLGx9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxEbihsLGE9PntEbihhLmNvbmRpdGlvbnMs'@;
put 'ZD0+dGhpcy5hZGRDb25kaXRpb24oYS5jb2x1bW4sZCkpfSl9cmVtb3ZlQ29uZGl0aW9ucyhsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsbCksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixsKX1j'@;
put 'bGVhbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTtyZXR1cm4gYT9kLnNv'@;
put 'bWUoaD0+aC5uYW1lPT09YSk6ZC5sZW5ndGg+MH1kZXN0cm95KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKGtpZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxIb29rcygpfX1UYShBaWUs'@;
put 'TzApO2NvbnN0IFRpZT1BaWUsRGllPWNsYXNzIEJQZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1sLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9'@;
put 'YX1maWx0ZXIoKXtsZXQgbD1bXTtyZXR1cm4gRG4odGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpLChhLGQpPT57bGV0IGg9dGhpcy5jb2x1bW5EYXRhRmFjdG9yeShhKTtkJiYoaD10aGlzLl9nZXRJbnRlcnNlY3REYXRhKGgsbCkpLGw9dGhpcy5maWx0ZXJC'@;
put 'eUNvbHVtbihhLGgpfSksbH1maWx0ZXJCeUNvbHVtbihsKXtjb25zdCBkPVtdO3JldHVybiBEbihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD0+e3ZvaWQgMCE9PWgmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKGgs'@;
put 'bCkmJmQucHVzaChoKX0pLGR9X2dldEludGVyc2VjdERhdGEobCxhKXtjb25zdCBkPVtdO3JldHVybiBEbihhLGg9Pntjb25zdCBmPWgubWV0YS52aXN1YWxSb3c7dm9pZCAwIT09bFtmXSYmKGRbZl09bFtmXSl9KSxkfX07Y2xhc3MgTGlle2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOigpPT5bXTt0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNoYW5nZXM9W10sdGhpcy5ncm91cGluZz0hMSx0aGlzLmxhdGVzdEVk'@;
put 'aXRlZENvbHVtblBvc2l0aW9uPS0xLHRoaXMubGF0ZXN0T3JkZXJTdGFjaz1bXSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9PnRoaXMuX29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5KGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRk'@;
put 'TG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5h'@;
put 'ZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+dGhpcy5fb25Db25kaXRpb25CZWZvcmVDbGVhbigpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+dGhpcy5fb25Db25kaXRpb25BZnRlckNsZWFuKCkpfWdyb3VwQ2hhbmdlcygpe3Ro'@;
put 'aXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLERuKHRoaXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH1fb25Db25kaXRpb25CZWZvcmVNb2RpZnkobCl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Q'@;
put 'b3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKX11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0aGlzLmNoYW5n'@;
put 'ZXMucHVzaChsKSk7Y29uc3QgaD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlv'@;
put 'bik7Y29uc3QgXz1oLnNsaWNlKDAsZiksVD1oLnNsaWNlKGYpO1QubGVuZ3RoJiZUWzBdLmNvbHVtbj09PWwmJlQuc2hpZnQoKTtjb25zdCBXPXZ0ZShmdW5jdGlvbihwZSx3ZSl7bGV0IEVlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpb'@;
put 'XTtjb25zdCBaZT1uZXcgVGllKGQuaG90LCExKSxpdD1bXS5jb25jYXQocGUsRWUpO1plLmltcG9ydEFsbENvbmRpdGlvbnMoaXQpO2NvbnN0IGV0PWQuY29sdW1uRGF0YUZhY3Rvcnkod2UpO2xldCB5dDt5dD1aZS5pc0VtcHR5KCk/ZXQ6bmV3IERpZShaZSxTdD0+ZC5jb2x1bW5EYXRhRmFj'@;
put 'dG9yeShTdCkpLmZpbHRlcigpLHl0PWNzKHl0LFN0PT5TdC5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgRXQ9VXkoeXQpO3JldHVybiBaZS5kZXN0cm95KCksXzEoZXQsU3Q9PkV0KFN0Lm1ldGEudmlzdWFsUm93KSl9KShfKSxpZT1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdl'@;
put 'dENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6aWV9LGRlcGVuZGVudENvbmRpdGlvblN0YWNrczpULGZpbHRlcmVkUm93c0ZhY3Rvcnk6Vyxjb25kaXRpb25BcmdzQ2hhbmdlOmF9KX1f'@;
put 'b25Db25kaXRpb25CZWZvcmVDbGVhbigpe3RoaXMubGF0ZXN0T3JkZXJTdGFjaz10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCl9X29uQ29uZGl0aW9uQWZ0ZXJDbGVhbigpe0RuKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxsPT57dGhpcy51cGRhdGVTdGF0ZXNB'@;
put 'dENvbHVtbihsKX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLGRzKHRoaXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19VGEoTGllLE8wKTtjb25zdCBqUGU9TGllO2NsYXNzIFVQZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJmaWx0ZXJzIn1z'@;
put 'dGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5l'@;
put 'dmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPW51bGwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1udWxsLHRoaXMuY29tcG9uZW50cz1uZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24i'@;
put 'LG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9iYXIiLG51bGxdXSksdGhpcy5maWx0ZXJzUm93c01hcD1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVy'@;
put 'R2V0Q29sSGVhZGVyIiwoYSxkKT0+dGhpcy5vbkFmdGVyR2V0Q29sSGVhZGVyKGEsZCkpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWx0ZXJzfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5maWx0ZXJzUm93c01hcD10aGlz'@;
put 'LmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IG15KSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsYT1sJiZs'@;
put 'LnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSxkPV89PihfLmFkZExvY2FsSG9vaygiYWNjZXB0IiwoKT0+dGhpcy5vbkFjdGlvbkJhclN1Ym1pdCgiYWNjZXB0IikpLF8uYWRkTG9jYWxIb29rKCJjYW5jZWwiLCgpPT50aGlzLm9uQWN0aW9uQmFyU3VibWl0KCJjYW5j'@;
put 'ZWwiKSksXy5hZGRMb2NhbEhvb2soImNoYW5nZSIsVD0+dGhpcy5vbkNvbXBvbmVudENoYW5nZShfLFQpKSxfKSxoPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGtCKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBf'@;
put 'PW5ldyBVaih0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6aCxhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjphfSk7Xy5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmls'@;
put 'dGVyX2J5X2NvbmRpdGlvbiIsZChfKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcgQVBlKHRoaXMuaG90LHtpZDoiZmlsdGVyX29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0p'@;
put 'KSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSl7Y29uc3QgXz1uZXcgVWoodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5lcjphfSk7Xy5hZGRMb2NhbEhvb2soImFmdGVyQ2xv'@;
put 'c2UiLCgpPT50aGlzLm9uU2VsZWN0VUlDbG9zZWQoKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGQoXykpfXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGQobmV3'@;
put 'IE5QZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShBQil9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9hY3Rpb25fYmFyIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25f'@;
put 'YmFyIixkKG5ldyBWUGUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYWN0aW9uX2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgVGllKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNl'@;
put 'cnZlcnx8KHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bmV3IGpQZSh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sXz0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oXykpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLF89PnRo'@;
put 'aXMudXBkYXRlQ29tcG9uZW50cyhfKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKF89Pl8uc2hvdygpKSx0aGlzLmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixfPT50aGlzLm9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMoXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJE'@;
put 'cm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsXz0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMoXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51U2hvdygpKSx0aGlzLmFkZEhvb2soImFmdGVy'@;
put 'RHJvcGRvd25NZW51SGlkZSIsKCk9PnRoaXMub25BZnRlckRyb3Bkb3duTWVudUhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsXz0+dGhpcy5vbkFmdGVyQ2hhbmdlKF8pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVn'@;
put 'aW4mJih0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1Z2luKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93'@;
put 'bk1lbnVQbHVnaW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNv'@;
put 'bmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWFkZENvbmRpdGlvbihsLGEsZCl7bGV0IGg9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmU0O2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYse2NvbW1hbmQ6e2tleTphfSxhcmdzOmR9LGgpfXJlbW92'@;
put 'ZUNvbmRpdGlvbnMobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfWNsZWFyQ29uZGl0aW9ucyhsKXtpZih2b2lkIDA9PT1sKXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vs'@;
put 'c2V7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfX1maWx0ZXIoKXtjb25zdCBsPXRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKSxhPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgp'@;
put 'O2xldCBkPVtdO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVGaWx0ZXIiLGgpKWlmKGEpe2NvbnN0IF89W107dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRl'@;
put 'cnNSb3dzTWFwLmNsZWFyKCksZD1jcyhsLmZpbHRlcigpLFc9PlcubWV0YS52aXN1YWxSb3cpO2NvbnN0IFQ9VXkoZCk7dm8odGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxXPT57VChXKXx8Xy5wdXNoKFcpfSksRG4oXyxXPT57dGhpcy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5k'@;
put 'ZXgoVywhMCl9KX0sITApLGQubGVuZ3RofHx0aGlzLmhvdC5kZXNlbGVjdENlbGwoKX1lbHNlIHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGaWx0ZXIiLGgpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSx0aGlzLmhvdC5y'@;
put 'ZW5kZXIoKSx0aGlzLmNsZWFyQ29sdW1uU2VsZWN0aW9uKCl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGE/e3Zpc3VhbEluZGV4'@;
put 'OmEuY29sLHBoeXNpY2FsSW5kZXg6dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhLmNvbCl9Om51bGx9Y2xlYXJDb2x1bW5TZWxlY3Rpb24oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09bCYmdGhpcy5ob3Quc2VsZWN0Q2VsbCgwLGwudmlzdWFsSW5kZXgpfWdl'@;
put 'dERhdGFNYXBBdENvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIERuKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciBfO2NvbnN0e3JvdzpULGNvbDpXLHZpc3VhbENvbDppZSx2aXN1YWxSb3c6cGUsdHlwZTp3'@;
put 'ZSxpbnN0YW5jZTpFZSxkYXRlRm9ybWF0OlplLGxvY2FsZTppdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxldD1udWxsIT09KF89dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZvaWQgMCE9PV8/XzpoO2QucHVzaCh7bWV0YTp7cm93OlQs'@;
put 'Y29sOlcsdmlzdWFsQ29sOmllLHZpc3VhbFJvdzpwZSx0eXBlOndlLGluc3RhbmNlOkVlLGRhdGVGb3JtYXQ6WmUsbG9jYWxlOml0fSx2YWx1ZTpTaWUoZXQpfSl9KSxkfW9uQWZ0ZXJDaGFuZ2UobCl7bCYmRG4obCxhPT57Y29uc3RbLGRdPWEsaD10aGlzLmhvdC5wcm9wVG9Db2woZCk7dGhp'@;
put 'cy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoaCkmJnRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24oaCl9KX11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25zdCBkPSRqKHRoaXMuaG90LmdldERhdGFBdENvbChsKSk7dGhpcy5jb25kaXRpb25V'@;
put 'cGRhdGVPYnNlcnZlci51cGRhdGVTdGF0ZXNBdENvbHVtbihsLGQpfXJlc3RvcmVDb21wb25lbnRzKGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucGh5c2ljYWxJbmRleDtsLmZvckVhY2goaD0+e2guaXNI'@;
put 'aWRkZW4oKXx8aC5yZXN0b3JlU3RhdGUoZCl9KSx0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl9b25BZnRlckRyb3Bkb3duTWVudVNob3coKXt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFycmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSl9b25BZnRl'@;
put 'ckRyb3Bkb3duTWVudUhpZGUoKXt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3Nl'@;
put 'T3B0aW9ucygpfW9uQmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9Pnt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUudXBk'@;
put 'YXRlU2V0dGluZ3Moe2hpZGRlblJvd3M6ITB9KX0pfW9uQWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyhsKXtsLml0ZW1zLnB1c2goe25hbWU6Z3N9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChhPT57bC5pdGVtcy5wdXNoKGEuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9Z2V0'@;
put 'T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhsLGEsZCxoKXtsZXQgZj1sO3JldHVybiBmPT09RUEmJmEuY29tbWFuZC5rZXkhPT1HYyYmZC5jb21tYW5kLmtleSE9PUdjJiZoLmNvbW1hbmQua2V5IT09R2M/Zj1ZajpoLmNvbW1hbmQua2V5IT09R2MmJihhLmNvbW1hbmQua2V5PT09R2N8fGQu'@;
put 'Y29tbWFuZC5rZXk9PT1HYykmJihmPWU0KSxmfW9uQWN0aW9uQmFyU3VibWl0KGwpe3ZhciBhO2lmKCJhY2NlcHQiPT09bCl7Y29uc3QgaD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGQ7aWYobnVsbD09PWgpcmV0dXJuIHZvaWQobnVsbD09PShkPXRoaXMuZHJvcGRvd25NZW51UGx1'@;
put 'Z2luKXx8dm9pZCAwPT09ZHx8ZC5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4OmZ9PWgsXz10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSxUPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUo'@;
put 'KSxXPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCksaWU9dGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLF8sVCxXKTt0aGlz'@;
put 'LmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBwZT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihmKTstMT09PXBlJiYocGU9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhmKSxf'@;
put 'LmNvbW1hbmQua2V5IT09R2MmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsXyxpZSxwZSksVC5jb21tYW5kLmtleSE9PUdjJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsVCxpZSxwZSkpLFcuY29tbWFuZC5rZXkhPT1HYyYmdGhpcy5j'@;
put 'b25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLFcsaWUscGUpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCh3ZT0+d2Uuc2F2ZVN0YXRlKGYpKSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksdGhpcy5maWx0ZXIo'@;
put 'KX1udWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1hfHxhLmNsb3NlKCl9b25Db21wb25lbnRDaGFuZ2UobCxhKXt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksbC5jb25zdHJ1Y3Rvcj09PVVqJiYhYS5pbnB1dHNDb3VudCYmdGhp'@;
put 'cy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1vblNlbGVjdFVJQ2xvc2VkKCl7dGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVu'@;
put 'aW5nKCl9dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSx7Y29tbWFuZDphfT1sLmdldFN0YXRlKCksZD1bdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIi'@;
put 'KSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIildO2Euc2hvd09wZXJhdG9ycz90aGlzLnNob3dDb21wb25lbnRzKC4uLmQpOnRoaXMuaGlkZUNvbXBvbmVudHMoLi4uZCl9b25BZnRlckdldENvbEhlYWRlcihsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENv'@;
put 'bHVtbihsKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpP3BpKGEsImh0RmlsdGVyc0FjdGl2ZSIpOldvKGEsImh0RmlsdGVyc0FjdGl2ZSIpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyBEaWUoYXJndW1lbnRzLmxlbmd0aD4w'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9dXBkYXRlQ29tcG9uZW50cyhsKXt2YXIgYTtpZihudWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9'@;
put 'PT1hfHwhYS5lbmFibGVkKXJldHVybjtjb25zdHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29uZGl0aW9uczpkLGNvbHVtbjpofX09bCxmPWQuZmlsdGVyKFQ9PlQubmFtZT09PVBnKSxfPWQuZmlsdGVyKFQ9PlQubmFtZSE9PVBnKTtpZihmLmxlbmd0aD49Mnx8Xy5sZW5ndGg+PTMpR2EoQWFg'@;
put 'VGhlIGZpbHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJv'@;
put 'cGRvd24gbWVudS5ceDIwCiAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24uYCk7ZWxzZXtjb25zdCBUPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRPcGVyYXRpb24oaCk7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLnVw'@;
put 'ZGF0ZVN0YXRlKF9bMF0saCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS51cGRhdGVTdGF0ZShfWzFdLGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShULGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl'@;
put 'cl9ieV92YWx1ZSIpLnVwZGF0ZVN0YXRlKGwpfX1nZXRJbmRleGVzT2ZDb21wb25lbnRzKCl7Y29uc3QgbD1bXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuIGw7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBEbihoLF89PntEbihhLm1lbnVJdGVtcywoVCxXKT0+e1Qua2V5PT09Xy5nZXRNZW51SXRlbURlc2NyaXB0b3IoKS5rZXkmJmwucHVzaChXKX0pfSksbH1jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0'@;
put 'eSgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybjtjb25zdCBkPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudSxoPWQuZ2V0UGx1Z2luKCJo'@;
put 'aWRkZW5Sb3dzIik7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZj4xP2YtMTowKSxUPTE7VDxmO1QrKylfW1QtMV09YXJndW1lbnRzW1RdO2NvbnN0IFc9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzKC4uLl8pO2w/aC5zaG93Um93cyhXKTpoLmhpZGVSb3dzKFcp'@;
put 'LGQucmVuZGVyKCl9aGlkZUNvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmEpfXNob3dDb21wb25lbnRzKCl7Zm9yKHZh'@;
put 'ciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMCwuLi5hKX1kZXN0cm95KCl7dGhpcy5lbmFibGVkJiYodGhpcy5jb21wb25lbnRzLmZvckVhY2goKGwsYSk9Pntu'@;
put 'dWxsIT09bCYmKGwuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoYSxudWxsKSl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAo'@;
put 'dGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBSaWU9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLEpqPXtsaWNlbnNlS2V5OlJpZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJv'@;
put 'OiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZ'@;
put 'Il0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4i'@;
put 'LGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gT2llKGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1ucyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGw9Y1tDdV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9p'@;
put 'ZCAwOmwubGFuZ0NvZGV9fWZ1bmN0aW9uIFBpZShjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4oImh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7fSl9ZnVuY3Rpb24gQUEoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPXBkKEN1KTtyZXR1'@;
put 'cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIFFqKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1wZChDdSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5j'@;
put 'dGlvbiBGaWUoYyl7dmFyIGw7Y29uc3QgYT1BQSgpLGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5ldyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlv'@;
put 'biBIaWUoYyxsKXtpZihjKXtjb25zdCBhPUFBKCksZD1hLmdldChjKSxoPVFqKCksZj1oLmdldChjKTtkJiZkLmluY2x1ZGVzKGwpJiYoZC5zcGxpY2UoZC5pbmRleE9mKGwpLDEpLDA9PT1kLmxlbmd0aCYmYS5kZWxldGUoYykpLGYmJmYuaW5jbHVkZXMobC5ndWlkKSYmKGYuc3BsaWNlKGYu'@;
put 'aW5kZXhPZihsLmd1aWQpLDEpLDA9PT1mLmxlbmd0aCYmKGguZGVsZXRlKGMpLGMuZGVzdHJveSgpKSl9fWNvbnN0IE5pZT0iREQvTU0vWVlZWSI7ZnVuY3Rpb24gVmllKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmIiciPT09Yy5jaGFyQXQoMCkmJiI9Ij09PWMuY2hhckF0KDEpfWZ1'@;
put 'bmN0aW9uIGV6KGMsbCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiZGF0ZSI9PT1sfWZ1bmN0aW9uIEJpZShjLGwpe3JldHVybiBLbyhjLGwsITApLmlzVmFsaWQoKX1mdW5jdGlvbiBqaWUoYyxsKXtyZXR1cm4gS28oYyxsLCEwKS5mb3JtYXQoTmllKX1mdW5jdGlvbiB0RmUoYyxsKXty'@;
put 'ZXR1cm4gS28oYyxOaWUsITApLmZvcm1hdChsKX1mdW5jdGlvbiB6aWUoYyxsKXtjb25zdCBkPW5ldyBEYXRlKERhdGUuVVRDKDAsMCxjKy0xKSk7cmV0dXJuIEtvKGQpLmZvcm1hdChsKX1mdW5jdGlvbiBGZyhjLGwsYSl7KGZ1bmN0aW9uIG5GZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmwoYyxsKXtyZXR1cm4gZnVuY3Rpb24gckZlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6'@;
put 'bC52YWx1ZX0oYyxVaWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gdDQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBpRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5'@;
put 'IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFVpZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gVWllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwu'@;
put 'Z2V0KGMpfXZhciBZeT1uZXcgV2Vha01hcCxuND1uZXcgV2Vha01hcCx5MT1uZXcgV2Vha01hcCxUQT1uZXcgV2Vha01hcCx0ej1uZXcgV2Vha01hcCxuej1uZXcgV2Vha01hcCxEQT1uZXcgV2Vha01hcDtjb25zdCBaaWU9Y2xhc3Mgb0Zle2NvbnN0cnVjdG9yKGwsYSxkKXtGZyh0aGlzLFl5'@;
put 'LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLG40LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLHkxLHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxGZyh0aGlzLFRBLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEZnKHRoaXMsdHose3dyaXRhYmxlOiEw'@;
put 'LHZhbHVlOltdfSksRmcodGhpcyxueix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxEQSx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx0NCh0aGlzLFl5LGwpLHQ0KHRoaXMsbjQsYSksdDQodGhpcyx5MSxkKX1zZXRSZW1vdmVkSGZJbmRleGVzKGwpe3JldHVybiB0NCh0aGlz'@;
put 'LERBLGwubWFwKGE9Pntjb25zdCBkPXJsKHRoaXMsbjQpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGEpO3JldHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCl9KSkscmwodGhpcyxEQSl9Z2V0UmVtb3ZlZEhmSW5kZXhlcygpe3JldHVybiBybCh0aGlzLERBKX1nZXRI'@;
put 'ZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9cmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZD1ybCh0aGlzLG40KS5nZXROb3RUcmltbWVkSW5kZXhlcygpO3JldHVybiBhLmluZGV4T2YoZFtsXSl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke2J1KHJsKHRoaXMs'@;
put 'WXkpKX1zYDtybCh0aGlzLHkxKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZybCh0aGlzLHkxKS5nZXRFbmdpbmUoKVtkXShybCh0aGlzLHkxKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3Jl'@;
put 'TW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1kJiYodDQodGhpcyx0eixsLm1hcChoPT50aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSx0NCh0aGlzLG56LHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSkpfWdldE1vdmVMaW5lKGwsYSl7Y29uc3QgZD1ybCh0'@;
put 'aGlzLG40KS5nZXROdW1iZXJPZkluZGV4ZXMoKSxoPUFycmF5LmZyb20oQXJyYXkoZCkua2V5cygpKS5maWx0ZXIoXz0+ITE9PT1sLmluY2x1ZGVzKF8pKTt2YXIgZjtyZXR1cm4gMD09PWE/bnVsbCE9PShmPWhbYV0pJiZ2b2lkIDAhPT1mP2Y6MDpoW2EtMV0rMX1nZXRJbml0aWFsbHlDYWxj'@;
put 'dWxhdGVkTW92ZXMobCxhKXtsZXQgZD10aGlzLmdldE1vdmVMaW5lKGwsYSk7Y29uc3QgaD1bXTtyZXR1cm4gbC5mb3JFYWNoKGY9Pntjb25zdCBfPXtmcm9tOmYsdG86ZH07aC5mb3JFYWNoKFQ9PntULmZyb20+Xy5mcm9tJiZULnRvPD1fLmZyb20mJlQuZnJvbT5ULnRvJiYoXy5mcm9tKz0x'@;
put 'KX0pLF8uZnJvbT49ZCYmKGQrPTEpLGgucHVzaChfKX0pLGh9YWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXMobCl7cmV0dXJuIGwuZm9yRWFjaCgoYSxkKT0+e2wuc2xpY2UoZCsxKS5mb3JFYWNoKGY9PntmLmZyb20+YS5mcm9tJiZmLmZyb208Zi50byYmKGYuZnJvbS09MSl9KX0pLGx9Y2FsY3Vs'@;
put 'YXRlQW5kU3luY01vdmVzKGwsYSl7aWYocmwodGhpcyx5MSkuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT1sfHwhMT09PWEpcmV0dXJuO2NvbnN0IGQ9dGhpcy5hZGp1c3RlZENhbGN1bGF0ZWRNb3Zlcyh0aGlzLmdldEluaXRpYWxseUNhbGN1bGF0ZWRNb3ZlcyhybCh0aGlzLHR6KSxy'@;
put 'bCh0aGlzLG56KSkpO251bGw9PT1ybCh0aGlzLHkxKS5nZXRTaGVldElkKCk/cmwodGhpcyx5MSkuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMuc3luY01vdmVzKGQpKTp0aGlzLnN5bmNNb3ZlcyhkKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IGw9YHNldCR7YnUocmwo'@;
put 'dGhpcyxZeSkpfU9yZGVyYDtyZXR1cm4gYT0+e2lmKHJsKHRoaXMseTEpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IGQ9cmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1hKXtjb25zdCBoPXJsKHRoaXMsVEEpLm1hcChXPT5kLmluZGV4'@;
put 'T2YoVykpLGY9cmwodGhpcyx5MSkuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKHJsKHRoaXMseTEpLmdldFNoZWV0SWQoKSk7bGV0IF87Xz0icm93Ij09PXJsKHRoaXMsWXkpP2YuaGVpZ2h0OmYud2lkdGg7Zm9yKGxldCBXPWgubGVuZ3RoO1c8XztXKz0xKWgucHVzaChXKTtybCh0'@;
put 'aGlzLHkxKS5nZXRFbmdpbmUoKVtsXShybCh0aGlzLHkxKS5nZXRTaGVldElkKCksaCl9dDQodGhpcyxUQSxkKX19aW5pdCgpe3Q0KHRoaXMsVEEscmwodGhpcyxuNCkuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gSGcoYyxsLGEpeyhmdW5jdGlvbiBzRmUoYyxsKXtpZihsLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHFmKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIGFGZShjLGwpe3JldHVybiBsLmdldD9s'@;
put 'LmdldC5jYWxsKGMpOmwudmFsdWV9KGMsWWllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIE5nKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gbEZlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8g'@;
put 'c2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxZaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFlpZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5j'@;
put 'ZSIpO3JldHVybiBsLmdldChjKX12YXIgTEE9bmV3IFdlYWtNYXAsSUE9bmV3IFdlYWtNYXAscno9bmV3IFdlYWtNYXAsaXo9bmV3IFdlYWtNYXAsb3o9bmV3IFdlYWtNYXAsc3o9bmV3IFdlYWtNYXAsYXo9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gSTcoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9u'@;
put 'IGRGZShjKXt2YXIgbD1mdW5jdGlvbiBoRmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg'@;
put 'ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhs'@;
put 'KX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBseihjLGwsYSl7KGZ1bmN0aW9uIGZGZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcjQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBwRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNl'@;
put 'e2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFdpZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gUjcoYyxsKXtyZXR1cm4gZnVuY3Rpb24gZ0ZlKGMsbCl7cmV0dXJuIGwu'@;
put 'Z2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxXaWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gV2llKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMp'@;
put 'fWNvbnN0IEN1PSJmb3JtdWxhcyIsbUZlPVsibWF4Um93cyIsIm1heENvbHVtbnMiLCJsYW5ndWFnZSJdO3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9u'@;
put 'UmVtb3ZlZCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0QWRkZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbW92ZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbmFtZWQiKSxzby5nZXRTaW5nbGV0'@;
put 'b24oKS5yZWdpc3RlcigiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIpO2NvbnN0IE83PWM9PiJVbmRvUmVkby51bmRvIj09PWN8fCJVbmRvUmVkby5yZWRvIj09PWN8fCJhdXRvIj09PWM7dmFyIEtmPW5ldyBXZWFrTWFwLGN6PW5ldyBXZWFrTWFwLFd5PW5ldyBXZWFrTWFwO2NsYXNzIF9G'@;
put 'ZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7dmFyIGw7c3VwZXIoLi4uYXJndW1lbnRzKSxsPXRoaXMsbHoodGhpcyxLZix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxseih0aGlzLGN6LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGx6KHRoaXMsV3kse3dyaXRhYmxlOiEwLHZhbHVlOltbInZh'@;
put 'bHVlc1VwZGF0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVWYWx1ZXNVcGRhdGVkKC4uLmFyZ3VtZW50cyl9XSxbIm5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVkKC4uLmFyZ3VtZW50cyl9XSxbIm5h'@;
put 'bWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZCguLi5hcmd1bWVudHMpfV0sWyJzaGVldEFkZGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRBZGRlZCguLi5hcmd1bWVudHMpfV0sWyJzaGVl'@;
put 'dFJlbmFtZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25FbmdpbmVTaGVldFJlbmFtZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRSZW1vdmVkKC4uLmFyZ3VtZW50cyl9XV19KSxJNyh0aGlzLCJzdGF0aWNSZWdpc3Rl'@;
put 'ciIscGQoImZvcm11bGFzIikpLEk3KHRoaXMsImVuZ2luZSIsbnVsbCksSTcodGhpcywic2hlZXROYW1lIixudWxsKSxJNyh0aGlzLCJpbmRleFN5bmNlciIsbnVsbCksSTcodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksSTcodGhpcywiY29sdW1uQXhpc1N5bmNlciIsbnVsbCl9c3RhdGlj'@;
put 'IGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEN1fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltDdSwuLi5tRmVdfWdldCBzaGVldElkKCl7cmV0dXJuIG51bGw9PT10aGlzLnNoZWV0TmFtZT9udWxsOnRoaXMu'@;
put 'ZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMuZW5naW5lPW51bGwhPT0obD1mdW5jdGlvbiBHUGUo'@;
put 'Yyl7Y29uc3QgbD1jLmdldFNldHRpbmdzKCksYT1sW0N1XSxkPWE/LmVuZ2luZTtpZighMD09PWF8fElhKGQpKXJldHVybiBudWxsO3ZhciBoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGQpcmV0dXJuIGZ1bmN0aW9uICRQZShjLGws'@;
put 'YSl7Y29uc3QgZD1sW0N1XSxoPWZ1bmN0aW9uIFpQZShjKXt2YXIgbDtjb25zdCBhPWNbQ3VdLGQ9UGllKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxoPU9pZShjKTtyZXR1cm57Li4uSmosLi4uZCwuLi5ofX0o'@;
put 'bCksZj1BQSgpLF89UWooKTsoZnVuY3Rpb24gcVBlKGMsbCl7bCYmbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQscGx1Z2luOmgsdHJhbnNsYXRpb25zOmZ9PWE7dHJ5e2MucmVnaXN0ZXJGdW5jdGlvbihkLGgsZil9Y2F0Y2goXyl7R2EoXy5tZXNzYWdlKX19KX0pKGMsZC5mdW5jdGlvbnMp'@;
put 'LGZ1bmN0aW9uIEtQZShjLGwpe2lmKGwpe2NvbnN0e2xhbmdDb2RlOmF9PWw7dHJ5e2MucmVnaXN0ZXJMYW5ndWFnZShhLGwpfWNhdGNoKGQpe0dhKGQubWVzc2FnZSl9fX0oYyxkLmxhbmd1YWdlKTtjb25zdCBUPWMuYnVpbGRFbXB0eShoKTtyZXR1cm4gZi5zZXQoVCxbYV0pLF8uc2V0KFQs'@;
put 'W2EuZ3VpZF0pLGZ1bmN0aW9uIFhQZShjLGwpe2wmJihjLnN1c3BlbmRFdmFsdWF0aW9uKCksbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQsZXhwcmVzc2lvbjpoLHNjb3BlOmYsb3B0aW9uczpffT1hO3RyeXtjLmFkZE5hbWVkRXhwcmVzc2lvbihkLGgsZixfKX1jYXRjaChUKXtHYShULm1l'@;
put 'c3NhZ2UpfX0pLGMucmVzdW1lRXZhbHVhdGlvbigpKX0oVCxkLm5hbWVkRXhwcmVzc2lvbnMpLFQub24oInNoZWV0QWRkZWQiLCgpPT57VC5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLFQub24oInNoZWV0UmVtb3ZlZCIsKCk9PntULnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksVH0obnVs'@;
put 'bCE9PShoPWQuaHlwZXJmb3JtdWxhKSYmdm9pZCAwIT09aD9oOmQsbCxjKTtpZigib2JqZWN0Ij09dHlwZW9mIGQmJklhKGQuaHlwZXJmb3JtdWxhKSl7Y29uc3QgZj1BQSgpLF89UWooKS5nZXQoZCk7cmV0dXJuIGYuaGFzKGQpfHxmLnNldChkLFtdKSxmLmdldChkKS5wdXNoKGMpLF8mJl8u'@;
put 'cHVzaChjLmd1aWQpLGQuZ2V0Q29uZmlnKCkubGljZW5zZUtleXx8ZC51cGRhdGVDb25maWcoe2xpY2Vuc2VLZXk6UmllfSksKGQuZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09SmoubGVhcFllYXIxOTAwfHwhMT09PWxrKGQuZ2V0Q29uZmlnKCkubnVsbERhdGUsSmoubnVsbERhdGUpKSYm'@;
put 'R2EoQWFgSWYgeW91IHVzZSBIeXBlckZvcm11bGEgd2l0aCBIYW5kc29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXGBsZWFwWWVhcjE5MDBcYCBhbmQgXGBudWxsRGF0ZVxgIAogICAgICBzZXR0aW5ncy4gT3RoZXJ3aXNlLCBIeXBlckZvcm11bGEncyBkYXRlcyBtYXkgbm90IHN5bmMgY29y'@;
put 'cmVjdGx5IHdpdGggSGFuZHNvbnRhYmxlJ3MgZGF0ZXMuYCksZH1yZXR1cm4gbnVsbH0odGhpcy5ob3QpKSYmdm9pZCAwIT09bD9sOnRoaXMuZW5naW5lLCF0aGlzLmVuZ2luZSlyZXR1cm4gdm9pZCBHYSgiTWlzc2luZyB0aGUgcmVxdWlyZWQgYGVuZ2luZWAga2V5IGluIHRoZSBGb3JtdWxh'@;
put 'cyBzZXR0aW5ncy4gUGxlYXNlIGZpbGwgaXQgd2l0aCBlaXRoZXIgYW4gZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4iKTtpZihudWxsIT09dGhpcy5zaGVldE5hbWUmJiF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpe2NvbnN0IGQ9dGhpcy5h'@;
put 'ZGRTaGVldCh0aGlzLnNoZWV0TmFtZSx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7ITEhPT1kJiYodGhpcy5zaGVldE5hbWU9ZCl9dGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0'@;
put 'aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVMb2FkRGF0YSguLi5hcmd1bWVudHMpfSks'@;
put 'dGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25Nb2RpZnlEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk'@;
put 'ZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25Nb2RpZnlTb3VyY2VEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe3JldHVybiBhLm9uQmVmb3JlVmFsaWRhdGUoLi4uYXJndW1lbnRzKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2V0'@;
put 'RGF0YUF0Q2VsbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclNldERhdGFBdENlbGwoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBhLm9uQmVmb3JlQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUNyZWF0ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gYS5vbkFmdGVyQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlv'@;
put 'bigpe3JldHVybiBhLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZVJlbW92ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuaW5kZXhTeW5jZXI9bmV3IGNsYXNzIGNGZXtj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCl7SGcodGhpcyxMQSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxJQSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxyeix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksSGcodGhpcyxpeix7d3JpdGFibGU6ITAsdmFsdWU6'@;
put 'ITF9KSxIZyh0aGlzLG96LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLEhnKHRoaXMsc3ose3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxIZyh0aGlzLGF6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksTmcodGhpcyxMQSxuZXcgWmllKCJyb3ciLGwsdGhpcykpLE5nKHRoaXMsSUEsbmV3IFpp'@;
put 'ZSgiY29sdW1uIixhLHRoaXMpKSxOZyh0aGlzLHJ6LGQpfWdldEZvckF4aXMobCl7cmV0dXJuIHFmKHRoaXMsInJvdyI9PT1sP0xBOklBKX1zZXRQZXJmb3JtVW5kbyhsKXtOZyh0aGlzLGl6LGwpfXNldFBlcmZvcm1SZWRvKGwpe05nKHRoaXMsb3osbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8o'@;
put 'KXtyZXR1cm4gcWYodGhpcyxpeil8fHFmKHRoaXMsb3opfWdldFNoZWV0SWQoKXtyZXR1cm4gcWYodGhpcyxheil9Z2V0RW5naW5lKCl7cmV0dXJuIHFmKHRoaXMsc3opfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIHFmKHRoaXMscnopfXNldHVwU3luY0VuZHBvaW50KGwsYSl7TmcodGhp'@;
put 'cyxzeixsKSxOZyh0aGlzLGF6LGEpLHFmKHRoaXMsTEEpLmluaXQoKSxxZih0aGlzLElBKS5pbml0KCl9fSh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixkPT57dGhpcy5ob3QuYWRkSG9va09uY2UoImluaXQiLCgpPT57ZCgpfSl9KSx0aGlzLnJv'@;
put 'd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5j'@;
put 'ZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChk'@;
put 'LGgsZixfKT0+e3RoaXMucm93QXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLF8pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCxmLF8pPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsXyl9KSx0aGlz'@;
put 'LmhvdC5hZGRIb29rKCJhZnRlclJvd01vdmUiLChkLGgsZixfLFQpPT57dGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhfLFQpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5Nb3ZlIiwoZCxoLGYsXyxUKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxj'@;
put 'dWxhdGVBbmRTeW5jTW92ZXMoXyxUKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LGgpfSks'@;
put 'dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2Vy'@;
put 'LnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVz'@;
put 'KGgsaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyQ2VsbE1ldGFSZXNldCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITAp'@;
put 'LHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRvKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZv'@;
put 'cm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMp'@;
put 'fSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUF1dG9maWxsKC4uLmFyZ3VtZW50cyl9KSxSNyh0aGlzLFd5KS5mb3JFYWNoKGQ9PntsZXRbaCxmXT1kO3JldHVybiB0aGlzLmVuZ2luZS5vbihoLGYpfSksc3VwZXIuZW5hYmxlUGx1'@;
put 'Z2luKCl9fWRpc2FibGVQbHVnaW4oKXtSNyh0aGlzLFd5KS5mb3JFYWNoKGw9PntsZXRbYSxkXT1sO3JldHVybiB0aGlzLmVuZ2luZS5vZmYoYSxkKX0pLEhpZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2lu'@;
put 'KGwpe2NvbnN0IGE9ZnVuY3Rpb24gWVBlKGMpe3ZhciBsO2NvbnN0IGE9Y1tDdV07cmV0dXJuey4uLlBpZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksLi4uT2llKGMpfX0odGhpcy5ob3QuZ2V0U2V0dGluZ3Mo'@;
put 'KSk7KGZ1bmN0aW9uIFdQZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5zb21lKGE9PnZvaWQgMCE9PWxbYV0mJmxbYV0hPT1jW2FdKX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGEpJiZ0aGlzLmVuZ2luZS51cGRhdGVDb25maWcoYSk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpW0N1XTtpZihLaShkKSYmS2koZC5zaGVldE5hbWUpJiZkLnNoZWV0TmFtZSE9PXRoaXMuc2hlZXROYW1lJiZ0aGlzLnN3aXRjaFNoZWV0KGQuc2hlZXROYW1lKSwhbC5kYXRhJiZudWxsPT09dGhpcy5zaGVldE5hbWUpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV0uc2hl'@;
put 'ZXROYW1lO2gmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGgpP3RoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpOnRoaXMuc2hlZXROYW1lPXRoaXMuYWRkU2hlZXQoaD8/dm9pZCAwLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKX1zdXBlci51cGRhdGVQbHVnaW4obCl9'@;
put 'ZGVzdHJveSgpe1I3KHRoaXMsV3kpLmZvckVhY2gobD0+e3ZhciBhO2xldFtkLGhdPWw7cmV0dXJuIG51bGw9PT0oYT10aGlzLmVuZ2luZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub2ZmKGQsaCl9KSxyNCh0aGlzLFd5LG51bGwpLEhpZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdp'@;
put 'bmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRkU2hlZXQobCxhKXtpZihLaShhKSYmIWduZShhKSlyZXR1cm4gR2EoIlRoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9bCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0'@;
put 'dXJuIEdhKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFNoZWV0KGw/P3ZvaWQgMCk7cmV0dXJuIGEmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKGQp'@;
put 'LGEpLGR9Y2F0Y2goZCl7cmV0dXJuIEdhKGQubWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KGwpe2lmKCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdm9pZCBTTihgVGhlIHNoZWV0IG5hbWVkIFxgJHtsfVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTt0'@;
put 'aGlzLnNoZWV0TmFtZT1sO2NvbnN0IGE9dGhpcy5lbmdpbmUuZ2V0U2hlZXRTZXJpYWxpemVkKHRoaXMuc2hlZXRJZCk7YS5sZW5ndGg+MCYmdGhpcy5ob3QubG9hZERhdGEoYSxgJHtidShDdSl9LnN3aXRjaFNoZWV0YCl9Z2V0Q2VsbFR5cGUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7cmV0dXJuIG51bGwhPT1oJiZudWxsIT09Zj90aGlzLmVuZ2luZS5nZXRDZWxsVHlw'@;
put 'ZSh7c2hlZXQ6ZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShsLGEpe3JldHVybiB0aGlzLmVu'@;
put 'Z2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtzaGVldDphcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1'@;
put 'bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPW5ldyBTZXQ7bC5mb3JFYWNoKGg9Pnt2YXIg'@;
put 'Zjtjb25zdCBfPW51bGw9PWh8fG51bGw9PT0oZj1oLmFkZHJlc3MpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNoZWV0O3ZvaWQgMCE9PV8mJihkLmhhcyhfKXx8ZC5hZGQoXykpfSksRmllKHRoaXMuZW5naW5lKS5mb3JFYWNoKChoLGYpPT57dmFyIF87KGF8fGYhPT10aGlzLnNoZWV0SWQpJiZk'@;
put 'LmhhcyhmKSYmKGgucmVuZGVyKCksbnVsbD09PShfPWgudmlldyl8fHZvaWQgMD09PV98fF8uYWRqdXN0RWxlbWVudHNTaXplKCkpfSl9dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhsKXtjb25zdCBkPWY9Pnt2YXIgXztjb25zdHtyb3c6VCxjb2w6VyxzaGVldDppZX09bnVsbCE9PShfPWY/LmFk'@;
put 'ZHJlc3MpJiZ2b2lkIDAhPT1fP186e307cmV0dXJuIEtpKGllKT9gJHtpZX06JHtUfXgke1d9YDoiIn0saD1uZXcgU2V0KChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10pLm1hcChmPT5kKGYpKSk7bC5mb3JFYWNoKGY9Pnt2YXIgXyxU'@;
put 'O2NvbnN0e3JvdzpXLGNvbDppZX09bnVsbCE9PShfPWYuYWRkcmVzcykmJnZvaWQgMCE9PV8/Xzp7fTtpZighMT09PUtpKFcpfHwhMT09PUtpKGllKXx8Vz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGllPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgcGU9bnVsbD09Znx8bnVs'@;
put 'bD09PShUPWYuYWRkcmVzcyl8fHZvaWQgMD09PVQ/dm9pZCAwOlQuc2hlZXQsd2U9ZChmKTtpZih2b2lkIDAhPT1wZSYmIWguaGFzKHdlKSl7Y29uc3QgRWU9RmllKHRoaXMuZW5naW5lKS5nZXQocGUpO2lmKCFFZSlyZXR1cm47RWUudmFsaWRhdGVDZWxsKEVlLmdldERhdGFBdENlbGwoVyxp'@;
put 'ZSksRWUuZ2V0Q2VsbE1ldGEoVyxpZSksKCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21W'@;
put 'aXN1YWxJbmRleChhKSxzaGVldDp0aGlzLnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1cm4gdm9pZCBHYShgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShoKX1gKTtjb25zdCBmPXRo'@;
put 'aXMuaG90LmdldENlbGxNZXRhKGwsYSk7cmV0dXJuIGV6KGQsZi50eXBlKSYmKEJpZShkLGYuZGF0ZUZvcm1hdCk/ZD1qaWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gZUZlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFydHNXaXRoKCI9Iil9KGQpJiYoZD1gJyR7'@;
put 'ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKGgsZCl9b25CZWZvcmVWYWxpZGF0ZShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5wcm9wVG9Db2woZCk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShhLGgpKXtjb25zdCBmPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5k'@;
put 'ZXhGcm9tVmlzdWFsSW5kZXgoYSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sXz10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGgpO2xldCBUPXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShmKTtyZXR1cm4i'@;
put 'ZGF0ZSI9PT1fLnR5cGUmJkd1KFQpJiYoVD16aWUoVCxfLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlwZW9mIFQmJm51bGwhPT1UP1QudmFsdWU6VH1yZXR1cm4gbH1vbkJlZm9yZUF1dG9maWxsKGwsYSxkKXtjb25zdHtyb3c6aCxjb2w6Zn09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6'@;
put 'Xyxjb2w6VH09YS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93OlcsY29sOmllfT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpwZSxjb2w6d2V9PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksRWU9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5k'@;
put 'ZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoXyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5n'@;
put 'ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFQpLHNoZWV0OnRoaXMuc2hlZXRJZH19LFplPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFcpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChp'@;
put 'ZSksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChwZSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHdlKSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09'@;
put 'PXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKFplKSlyZXR1cm4hMTtjb25zdCBpdD10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKEVlLFplKSx7cm93OmV0LGNvbDp5dH09RWUuc3RhcnQse3JvdzpFdCxjb2w6U3R9PUVlLmVuZCxKdD1FdC1ldCsxLG5uPVN0'@;
put 'LXl0KzE7Zm9yKGxldCB2bj0wO3ZuPGl0Lmxlbmd0aDt2bis9MSlmb3IobGV0IE5uPTA7Tm48aXRbdm5dLmxlbmd0aDtObis9MSl7Y29uc3QgY3I9aXRbdm5dW05uXSxMcj12biVKdCxFaT1ObiVubixMaT10aGlzLmhvdC5nZXRDZWxsTWV0YShMcixFaSk7ZXooY3IsTGkudHlwZSkmJihjci5z'@;
put 'dGFydHNXaXRoKCInIik/aXRbdm5dW05uXT1jci5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoTHIsRWksdGhpcy5zaGVldElkKSYmKGl0W3ZuXVtObl09dEZlKGNyLExpLmRhdGVGb3JtYXQpKSl9cmV0dXJuIGl0fW9uQmVmb3JlTG9hZERhdGEobCxhKXsoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhidShDdSkpfHxyNCh0aGlzLGN6LElhKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfW9uQWZ0ZXJDZWxsTWV0YVJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRh'@;
put 'QXJyYXkoKTtsZXQgYT0hMTtsLmZvckVhY2goKGQsaCk9PntkLmZvckVhY2goKGYsXyk9Pntjb25zdCBUPXRoaXMuaG90LmdldENlbGxNZXRhKGgsXyksVz1ULmRhdGVGb3JtYXQ7ZXooZixULnR5cGUpJiYoYT0hMCxCaWUoZixXKT9sW2hdW19dPWppZShmLFcpOiExPT09dGhpcy5pc0Zvcm11'@;
put 'bGFDZWxsVHlwZShoLF8pJiYobFtoXVtfXT1gJyR7Zn1gKSl9KX0pLCEwPT09YSYmKHI0KHRoaXMsS2YsITApLHRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsbCkscjQodGhpcyxLZiwhMSkpfW9uQWZ0ZXJMb2FkRGF0YShsLGEpe2lmKCEoYXJndW1lbnRzLmxlbmd0'@;
put 'aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhidShDdSkpKWlmKHRoaXMuc2hlZXROYW1lPWZ1bmN0aW9uIEpQZShjLGwpe3JldHVybihJYShsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFkZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2lu'@;
put 'ZSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0N1XS5zaGVldE5hbWUpLFI3KHRoaXMsY3opKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VT'@;
put 'aGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpKXtyNCh0aGlzLEtmLCEwKTtjb25zdCBmPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVu'@;
put 'ZGVyRGVwZW5kZW50U2hlZXRzKGYpLHI0KHRoaXMsS2YsITEpfX19b25Nb2RpZnlEYXRhKGwsYSxkLGgpe2lmKCJnZXQiIT09aHx8UjcodGhpcyxLZil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29u'@;
put 'c3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsKTtpZihudWxsPT09Znx8bnVsbD09PWEpcmV0dXJuO2lmKCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGYsYSkmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGYsYSkpcmV0dXJuIHZvaWQoVmllKGQudmFsdWUpJiYoZC52YWx1ZT1mdW5jdGlv'@;
put 'biBRUGUoYyl7cmV0dXJuIFZpZShjKT9jLnN1YnN0cigxKTpjfShkLnZhbHVlKSkpO2NvbnN0IFQ9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSks'@;
put 'c2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgVz10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoVCk7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKTsiZGF0ZSI9PT1pZS50eXBlJiZHdShXKSYmKFc9emllKFcsaWUuZGF0ZUZvcm1hdCkpLGQudmFsdWU9Im9iamVjdCI9PXR5cGVvZiBX'@;
put 'JiZudWxsIT09Vz9XLnZhbHVlOld9b25Nb2RpZnlTb3VyY2VEYXRhKGwsYSxkLGgpe2lmKCJnZXQiIT09aHx8UjcodGhpcyxLZil8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgZj10aGlzLmhv'@;
put 'dC50b1Zpc3VhbFJvdyhsKSxfPXRoaXMuaG90LnByb3BUb0NvbChhKTtpZihudWxsPT09Znx8bnVsbD09PV98fCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGYsXykmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGYsXykpcmV0dXJuO2NvbnN0IFc9dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1l'@;
put 'bnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09Vy53aWR0aCYmMD09PVcuaGVpZ2h0KXJldHVybjtjb25zdCBpZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNT'@;
put 'eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfKSxzaGVldDp0aGlzLnNoZWV0SWR9O2QudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2VsbFNlcmlhbGl6ZWQoaWUpfW9uQWZ0ZXJTZXREYXRhQXRDZWxsKGwsYSl7aWYoTzcoYSkpcmV0dXJuO2NvbnN0IGQ9W10saD1bXSxmPXRoaXMuZW5n'@;
put 'aW5lLmJhdGNoKCgpPT57bC5mb3JFYWNoKF89PntsZXRbVCxXLCxpZV09Xztjb25zdCBwZT10aGlzLmhvdC5wcm9wVG9Db2woVyksd2U9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhUKSxFZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHBlKSxaZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5n'@;
put 'ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChwZSksc2hlZXQ6dGhpcy5zaGVldElkfTtudWxsIT09d2UmJm51bGwhPT1FZT90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKFQscGUsaWUpOmQucHVz'@;
put 'aChbVCxwZSxpZV0pLGgucHVzaCh7YWRkcmVzczpaZX0pfSl9KTtkLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IF89dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntkLmZvckVhY2goVD0+e2xldFtXLGllLHBlXT1UO3RoaXMuc3luY0NoYW5nZVdp'@;
put 'dGhFbmdpbmUoVyxpZSxwZSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKF8sITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGYsaCl9b25BZnRlclNldFNvdXJjZURhdGFBdENlbGwobCxhKXtpZihPNyhhKSlyZXR1'@;
put 'cm47Y29uc3QgZD1bXSxoPVtdO2wuZm9yRWFjaChmPT57bGV0W18sVCwsV109Zjtjb25zdCBpZT10aGlzLmhvdC5wcm9wVG9Db2woVCk7aWYoIUd1KGllKSlyZXR1cm47Y29uc3QgcGU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfKSxjb2w6dGhp'@;
put 'cy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaWUpLHNoZWV0OnRoaXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMocGUpPyhoLnB1c2goe2FkZHJlc3M6cGV9KSxkLnB1c2goLi4udGhpcy5lbmdpbmUuc2V0Q2Vs'@;
put 'bENvbnRlbnRzKHBlLFcpKSk6R2EoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KHBlKX1gKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhkLGgpfW9uQmVmb3JlQ3JlYXRl'@;
put 'Um93KGwsYSl7bGV0IGQ9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCk7aWYobD49dGhpcy5ob3QuY291bnRSb3dzKCkmJihkPWwpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0'@;
put 'aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFtkLGFdKSlyZXR1cm4hMX1vbkJlZm9yZUNyZWF0ZUNvbChsLGEpe2xldCBkPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpO2lmKGw+PXRoaXMuaG90LmNvdW50Q29s'@;
put 'cygpJiYoZD1sKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbZCxhXSkpcmV0dXJuITF9b25CZWZvcmVSZW1vdmVSb3cobCxh'@;
put 'LGQpe3JldHVybiExIT09dGhpcy5yb3dBeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZCkuZXZlcnkoXz0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbXywxXSkpJiZ2b2lkIDB9b25CZWZvcmVSZW1vdmVDb2wobCxhLGQpe3JldHVybiEx'@;
put 'IT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZCkuZXZlcnkoXz0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbXywxXSkpJiZ2b2lkIDB9b25BZnRlckNyZWF0ZVJvdyhsLGEsZCl7aWYoTzcoZCkpcmV0dXJu'@;
put 'O2NvbnN0IGg9dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGFdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKX1vbkFmdGVyQ3JlYXRlQ29sKGwsYSxkKXtpZihPNyhkKSlyZXR1cm47'@;
put 'Y29uc3QgaD10aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksYV0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGgpfW9uQWZ0ZXJSZW1vdmVSb3cobCxhLGQsaCl7aWYoTzcoaCkp'@;
put 'cmV0dXJuO2NvbnN0IGY9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCkucmV2ZXJzZSgpLF89dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntmLmZvckVhY2goVD0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFtULDFdKX0pfSk7dGhpcy5y'@;
put 'ZW5kZXJEZXBlbmRlbnRTaGVldHMoXyl9b25BZnRlclJlbW92ZUNvbChsLGEsZCxoKXtpZihPNyhoKSlyZXR1cm47Y29uc3QgZj10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKS5yZXZlcnNlKCksXz10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2YuZm9y'@;
put 'RWFjaChUPT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW1QsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhfKX1vbkFmdGVyRGV0YWNoQ2hpbGQobCxhLGQpe3ZhciBoO3I0KHRoaXMsS2YsITApO2NvbnN0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0'@;
put 'YUFycmF5KGQsMCxkKygobnVsbD09PShoPWEuX19jaGlsZHJlbil8fHZvaWQgMD09PWg/dm9pZCAwOmgubGVuZ3RoKXx8MCksdGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO3I0KHRoaXMsS2YsITEpLGYuZm9yRWFjaCgoXyxUKT0+e18uZm9yRWFjaCgoVyxpZSk9Pnt0aGlzLmVuZ2luZS5z'@;
put 'ZXRDZWxsQ29udGVudHMoe2NvbDppZSxyb3c6ZCtULHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tXXV0pfSl9KX1vbkVuZ2luZVZhbHVlc1VwZGF0ZWQobCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGwpfW9uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVk'@;
put 'KGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGwsYSl9b25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGwsYSl9b25FbmdpbmVTaGVldEFkZGVk'@;
put 'KGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLGwpfW9uRW5naW5lU2hlZXRSZW5hbWVkKGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixsLGEpfW9uRW5naW5lU2hlZXRSZW1vdmVkKGwsYSl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hl'@;
put 'ZXRSZW1vdmVkIixsLGEpfX1mdW5jdGlvbiBHaWUoYyxsLGEpeyhmdW5jdGlvbiB3RmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNl'@;
put 'dChjLGEpfWZ1bmN0aW9uIHcxKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIENGZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsJGllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIEd5KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gU0ZlKGMsbCxhKXtpZihsLnNldClsLnNldC5j'@;
put 'YWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYywkaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uICRpZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1zby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJI'@;
put 'aWRlQ29sdW1ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IHV6PSJoaWRkZW5Db2x1bW5zIjt2YXIgQ2g9bmV3IFdlYWtNYXAsU2g9bmV3IFdl'@;
put 'YWtNYXA7Y2xhc3MgeEZlIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLEdpZSh0aGlzLENoLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLEdpZSh0aGlzLFNoLHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu'@;
put 'IHV6fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMxMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdXpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbdXpdO3VzKGEpJiYoR3kodGhpcyxDaCxhKSxJYShhLmNvcHlQYXN0ZUVuYWJsZWQpJiYoYS5jb3B5UGFzdGVFbmFibGVkPSEwKSksR3kodGhpcyxTaCxuZXcgeGspLHcxKHRoaXMsU2gpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx3MSh0aGlzLFNoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1l'@;
put 'bnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGQsaCxmKT0+dGhpcy5vbkFmdGVyR2V0Q2VsbE1ldGEoZCxoLGYpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5vbk1vZGlmeUNvbFdpZHRoKGQsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJH'@;
put 'ZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENvbEhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixkPT50aGlzLm9uTW9kaWZ5Q29weWFibGVSYW5nZShkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRl'@;
put 'UGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLEd5KHRoaXMsQ2gse30pLHN1cGVy'@;
put 'LmRpc2FibGVQbHVnaW4oKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dzEodGhpcyxTaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwubGVu'@;
put 'Z3RoPjA7ZCYmXyYmKERuKGwubWFwKGllPT50aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGllKSksaWU9PntmW2llXT0hMX0pLGg9QWwoZiwoaWUscGUsd2UpPT4ocGUmJmllLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4od2UpKSxpZSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tz'@;
put 'KCJiZWZvcmVVbmhpZGVDb2x1bW5zIixhLGgsZCYmXykmJihkJiZfJiZ3MSh0aGlzLFNoKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhLGgsZCYmXyxkJiZoLmxlbmd0aDxhLmxl'@;
put 'bmd0aCkpfXNob3dDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dDb2x1bW5zKGEpfWhpZGVDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlz'@;
put 'LmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZUNvbHVtbnMiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxfPT57dzEodGhp'@;
put 'cyxTaCkuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXyksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1ucyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlQ29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5n'@;
put 'dGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlQ29sdW1ucyhhKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIGNzKHcxKHRoaXMsU2gpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSl9aXNIaWRk'@;
put 'ZW4obCl7cmV0dXJuIHcxKHRoaXMsU2gpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2'@;
put 'ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtEbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bCYmKGwuc2tpcENvbHVtbk9uUGFzdGU9ITEpfSl9b25Nb2RpZnlDb2xXaWR0aChsLGEpe3JldHVybiB0aGlzLmlzSGlkZGVuKGEpPzA6'@;
put 'dzEodGhpcyxDaCkuaW5kaWNhdG9ycyYmKHRoaXMuaXNIaWRkZW4oYSsxKXx8dGhpcy5pc0hpZGRlbihhLTEpKSYmIm51bWJlciI9PXR5cGVvZiBsJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/bCsxNTp2b2lkIDB9b25BZnRlckdldENlbGxNZXRhKGwsYSxkKXtpZighMT09PXcxKHRoaXMs'@;
put 'Q2gpLmNvcHlQYXN0ZUVuYWJsZWQmJnRoaXMuaXNIaWRkZW4oYSkmJihkLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGEtMSkpZC5jbGFzc05hbWU9ZC5jbGFzc05hbWV8fCIiLC0xPT09ZC5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGQuY2xh'@;
put 'c3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihkLmNsYXNzTmFtZSl7Y29uc3QgaD1kLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGgubGVuZ3RoPjApe2NvbnN0IGY9aC5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpO2Y+LTEmJmguc3BsaWNlKGYsMSksZC5jbGFzc05h'@;
put 'bWU9aC5qb2luKCIgIil9fX1vbk1vZGlmeUNvcHlhYmxlUmFuZ2UobCl7aWYodzEodGhpcyxDaCkuY29weVBhc3RlRW5hYmxlZClyZXR1cm4gbDtjb25zdCBhPVtdLGQ9KGgsZixfLFQpPT57YS5wdXNoKHtzdGFydFJvdzpoLGVuZFJvdzpmLHN0YXJ0Q29sOl8sZW5kQ29sOlR9KX07cmV0dXJu'@;
put 'IERuKGwsaD0+e2xldCBmPSEwLF89MDt2byhoLnN0YXJ0Q29sLGguZW5kQ29sLFQ9Pnt0aGlzLmlzSGlkZGVuKFQpPyhmfHxkKGguc3RhcnRSb3csaC5lbmRSb3csXyxULTEpLGY9ITApOihmJiYoXz1UKSxUPT09aC5lbmRDb2wmJmQoaC5zdGFydFJvdyxoLmVuZFJvdyxfLFQpLGY9ITEpfSl9'@;
put 'KSxhfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhKXtpZighdzEodGhpcyxDaCkuaW5kaWNhdG9yc3x8bDwwKXJldHVybjtjb25zdCBkPVtdO2w+PTEmJnRoaXMuaXNIaWRkZW4obC0xKSYmZC5wdXNoKCJhZnRlckhpZGRlbkNvbHVtbiIpLGw8dGhpcy5ob3QuY291bnRDb2xzKCktMSYmdGhpcy5p'@;
put 'c0hpZGRlbihsKzEpJiZkLnB1c2goImJlZm9yZUhpZGRlbkNvbHVtbiIpLHBpKGEsZCl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOmdzfSxmdW5jdGlvbiBiRmUoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgp'@;
put 'e2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpQixhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9W107Zm9yKGxldCBXPWQ7Vzw9aDtXKz0xKWYucHVzaChXKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IFQ9dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKFQpJiZUPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhUKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGRp'@;
put 'c2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiB5RmUoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fY29s'@;
put 'dW1uc19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShvQixsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMuY29sdW1uSW5k'@;
put 'ZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudENvbHMoKS0xLGMuc2hv'@;
put 'd0NvbHVtbnMobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxmLWgrMT09PXRoaXMuY291bnRDb2xzKCl8fHRoaXMuc2VsZWN0Q29sdW1ucyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPWNzKGMuZ2V0SGlkZGVuQ29sdW1ucygpLHdl'@;
put 'PT50aGlzLnRvUGh5c2ljYWxDb2x1bW4od2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLF89dGhpcy5jb2x1bW5JbmRleE1hcHBlcixUPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxXPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl'@;
put 'eChmKSxpZT1fLmdldE5vdFRyaW1tZWRJbmRleGVzKCkscGU9W107aWYoaCE9PWYpe2lmKGYtaCsxPlctVCsxKXtjb25zdCBaZT1pZS5zbGljZShoLGYrMSk7cGUucHVzaCguLi5aZS5maWx0ZXIoaXQ9PmEuaW5jbHVkZXMoaXQpKSl9fWVsc2UgaWYoMD09PVQmJlQ8aClwZS5wdXNoKC4uLmll'@;
put 'LnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PVQpcGUucHVzaCguLi5pZS5zbGljZSgwLHRoaXMuY291bnRDb2xzKCkpKTtlbHNle2NvbnN0IHdlPXRoaXMuY291bnRDb2xzKCktMTtXPT09Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KHdlLC0xKSkmJndlPmYmJnBlLnB1c2goLi4uaWUuc2xpY2UoZisxKSl9cmV0dXJuIERuKHBlLHdlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4od2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9b25NYXBJbml0KCl7QXJyYXkuaXNBcnJheSh3MSh0aGlzLENoKS5jb2x1bW5zKSYm'@;
put 'dGhpcy5oaWRlQ29sdW1ucyh3MSh0aGlzLENoKS5jb2x1bW5zKX1kZXN0cm95KCl7R3kodGhpcyxDaCxudWxsKSxHeSh0aGlzLFNoLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcWllKGMsbCxhKXsoZnVuY3Rpb24gQUZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBfZChjLGwpe3JldHVybiBmdW5jdGlvbiBURmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVl'@;
put 'fShjLEtpZShjLGwsImdldCIpKX1mdW5jdGlvbiAkeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIERGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0'@;
put 'ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsS2llKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBLaWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZVJvd3MiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93cyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJh'@;
put 'ZnRlclVuaGlkZVJvd3MiKTtjb25zdCBkej0iaGlkZGVuUm93cyI7dmFyIFhmPW5ldyBXZWFrTWFwLE1oPW5ldyBXZWFrTWFwO2NsYXNzIElGZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxxaWUodGhpcyxYZix7d3JpdGFibGU6ITAsdmFsdWU6e319KSxx'@;
put 'aWUodGhpcyxNaCx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBken1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2R6XX1lbmFibGVQ'@;
put 'bHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2R6XTt1cyhhKSYmKCR5KHRoaXMsWGYsYSksSWEoYS5jb3B5UGFzdGVFbmFibGVkKSYmKGEuY29weVBhc3RlRW5hYmxlZD0hMCkpLCR5KHRoaXMsTWgsbmV3IHhr'@;
put 'KSxfZCh0aGlzLE1oKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsX2QodGhpcyxNaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChkLGgsZik9PnRoaXMub25BZnRlckdldENlbGxNZXRhKGQsaCxmKSksdGhpcy5hZGRIb29rKCJtb2RpZnlS'@;
put 'b3dIZWlnaHQiLChkLGgpPT50aGlzLm9uTW9kaWZ5Um93SGVpZ2h0KGQsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJh'@;
put 'bmdlIixkPT50aGlzLm9uTW9kaWZ5Q29weWFibGVSYW5nZShkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93'@;
put 'SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLCR5KHRoaXMsWGYse30pLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhs'@;
put 'KTtsZXQgaD1hO2NvbnN0IGY9X2QodGhpcyxNaCkuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwubGVuZ3RoPjA7ZCYmXyYmKERuKGwubWFwKGllPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KGllKSksaWU9PntmW2llXT0hMX0pLGg9QWwoZiwoaWUscGUsd2UpPT4ocGUmJmllLnB1c2godGhpcy5o'@;
put 'b3QudG9WaXN1YWxSb3cod2UpKSxpZSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVSb3dzIixhLGgsZCYmXykmJihkJiZfJiZfZCh0aGlzLE1oKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsYSxoLGQmJl8sZCYmaC5s'@;
put 'ZW5ndGg8YS5sZW5ndGgpKX1zaG93Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Um93cyhhKX1oaWRlUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5p'@;
put 'c1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsXz0+e19kKHRoaXMsTWgp'@;
put 'LnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KF8pLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5'@;
put 'KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZVJvd3MoYSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiBjcyhfZCh0aGlzLE1oKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxSb3cobCkpfWlzSGlkZGVuKGwpe3JldHVybiBfZCh0aGlzLE1o'@;
put 'KS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQp'@;
put 'JiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7RG4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wmJihsLnNraXBSb3dPblBhc3RlPSExKX0pfW9uTW9kaWZ5Um93SGVpZ2h0KGwsYSl7cmV0dXJuIHRoaXMuaXNIaWRkZW4oYSk/MDpsfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7'@;
put 'aWYoITE9PT1fZCh0aGlzLFhmKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGwpJiYoZC5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lfHwiIiwtMT09PWQuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93'@;
put 'IikmJihkLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYoZC5jbGFzc05hbWUpe2NvbnN0IGg9ZC5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihoLmxlbmd0aD4wKXtjb25zdCBmPWguaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKTtmPi0xJiZoLnNwbGljZShmLDEpLGQuY2xh'@;
put 'c3NOYW1lPWguam9pbigiICIpfX19b25Nb2RpZnlDb3B5YWJsZVJhbmdlKGwpe2lmKF9kKHRoaXMsWGYpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGw7Y29uc3QgYT1bXSxkPShoLGYsXyxUKT0+e2EucHVzaCh7c3RhcnRSb3c6aCxlbmRSb3c6ZixzdGFydENvbDpfLGVuZENvbDpUfSl9O3Jl'@;
put 'dHVybiBEbihsLGg9PntsZXQgZj0hMCxfPTA7dm8oaC5zdGFydFJvdyxoLmVuZFJvdyxUPT57dGhpcy5pc0hpZGRlbihUKT8oZnx8ZChfLFQtMSxoLnN0YXJ0Q29sLGguZW5kQ29sKSxmPSEwKTooZiYmKF89VCksVD09PWguZW5kUm93JiZkKF8sVCxoLnN0YXJ0Q29sLGguZW5kQ29sKSxmPSEx'@;
put 'KX0pfSksYX1vbkFmdGVyR2V0Um93SGVhZGVyKGwsYSl7aWYoIV9kKHRoaXMsWGYpLmluZGljYXRvcnN8fGw8MClyZXR1cm47Y29uc3QgZD1bXTtsPj0xJiZ0aGlzLmlzSGlkZGVuKGwtMSkmJmQucHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSxsPHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRoaXMu'@;
put 'aXNIaWRkZW4obCsxKSYmZC5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxwaShhLGQpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFtZTpnc30sZnVuY3Rpb24gRUZlKGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzQixhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBXPWQ7Vzw9aDtXKz0xKWYucHVzaChXKTtjLmhpZGVSb3dzKGYpO2NvbnN0IFQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0'@;
put 'Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKFQpJiZUPj0wP3RoaXMuc2VsZWN0Um93cyhUKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGRpc2FibGVkOiExLGhpZGRl'@;
put 'bigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBrRmUoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0'@;
put 'dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShhQixsLmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhp'@;
put 'ZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0xLGMuc2hvd1Jvd3MobCksdGhpcy5yZW5kZXIoKSx0aGlz'@;
put 'LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKSxmLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPWNzKGMuZ2V0SGlkZGVuUm93cygpLHdlPT50aGlzLnRvUGh5c2ljYWxSb3cod2UpKTtpZighdGhpcy5z'@;
put 'ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJv'@;
put 'dyxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LF89dGhpcy5yb3dJbmRleE1hcHBlcixUPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxXPV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxpZT1fLmdldE5vdFRyaW1tZWRJbmRleGVzKCkscGU9W107aWYoaCE9'@;
put 'PWYpe2lmKGYtaCsxPlctVCsxKXtjb25zdCBaZT1pZS5zbGljZShoLGYrMSk7cGUucHVzaCguLi5aZS5maWx0ZXIoaXQ9PmEuaW5jbHVkZXMoaXQpKSl9fWVsc2UgaWYoMD09PVQmJlQ8aClwZS5wdXNoKC4uLmllLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PVQpcGUucHVzaCguLi5pZS5z'@;
put 'bGljZSgwLHRoaXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IHdlPXRoaXMuY291bnRSb3dzKCktMTtXPT09Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLC0xKSkmJndlPmYmJnBlLnB1c2goLi4uaWUuc2xpY2UoZisxKSl9cmV0'@;
put 'dXJuIERuKHBlLHdlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3cod2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9b25NYXBJbml0KCl7QXJyYXkuaXNBcnJheShfZCh0aGlzLFhmKS5yb3dzKSYmdGhpcy5oaWRlUm93cyhfZCh0aGlzLFhmKS5yb3dzKX1kZXN0cm95KCl7JHkodGhpcyxY'@;
put 'ZixudWxsKSwkeSh0aGlzLE1oLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy'@;
put 'KCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgWGllPSJtYW51YWxDb2x1bW5GcmVlemUiLHF5PW5ldyBXZWFrTWFwO2NsYXNzIEZGZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgp'@;
put 'e3JldHVybiBYaWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHF5LnNldCh0aGlzLHthZnRlckZpcnN0VXNlOiExfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1hpZV19ZW5hYmxlUGx1'@;
put 'Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PnRoaXMuYWRkQ29udGV4dE1lbnVFbnRyeShsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwobCxhKT0+dGhpcy5vbkJlZm9yZUNvbHVtbk1vdmUobCxh'@;
put 'KSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtxeS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZT0hMSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVn'@;
put 'aW4oKX1mcmVlemVDb2x1bW4obCl7Y29uc3QgYT1xeS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGg9ZC5maXhlZENvbHVtbnNTdGFydDx0aGlzLmhvdC5jb3VudENvbHMoKSYmbD5kLmZpeGVkQ29sdW1uc1N0YXJ0LTE7YS5hZnRlckZpcnN0VXNlfHwoYS5hZnRlckZpcnN0'@;
put 'VXNlPSEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsaCkmJihoJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxkLmZpeGVkQ29sdW1uc1N0YXJ0KSxkLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGgpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXF5LmdldCh0aGlzKSxkPXRoaXMuaG90LmdldFNldHRpbmdzKCksaD1kLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJmw8PWQuZml4ZWRDb2x1bW5zU3RhcnQtMTthLmFmdGVyRmlyc3RVc2V8fChhLmFm'@;
put 'dGVyRmlyc3RVc2U9ITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblVuZnJlZXplIixsLGgpJiYoaCYmKGQuX2ZpeGVkQ29sdW1uc1N0YXJ0LT0xLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsZC5maXhlZENvbHVtbnNTdGFydCkpLHRoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblVuZnJlZXplIixsLGgpKX1hZGRDb250ZXh0TWVudUVudHJ5KGwpe2wuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gUkZlKGMpe3JldHVybntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFu'@;
put 'c2xhdGVkUGhyYXNlKE9WKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTts'@;
put 'ZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIE9GZShjKXtyZXR1cm57'@;
put 'a2V5OiJ1bmZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFBWKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1Np'@;
put 'emUoITApfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNT'@;
put 'dGFydCkmJihhPSEwKSxhfX19KHRoaXMpKX1vbkJlZm9yZUNvbHVtbk1vdmUobCxhKXtpZihxeS5nZXQodGhpcykuYWZ0ZXJGaXJzdFVzZSl7Y29uc3QgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGE8aHx8bC5zb21lKGY9PmY8aCkpcmV0dXJuITF9fX1j'@;
put 'b25zdCBQNz0icHgiLGVvZT1jbGFzcyBIRmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wLHRoaXMuaW5saW5lUHJvcGVydHk9bC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxl'@;
put 'bWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRF'@;
put 'bGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXtHdShsKSYmKHRoaXMuX2Vs'@;
put 'ZW1lbnQuc3R5bGUudG9wPWwrUDcpLEd1KGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVt0aGlzLmlubGluZVByb3BlcnR5XT1hK1A3KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZTtyZXR1cm57dG9wOmwudG9wP3BhcnNlSW50KGwudG9wLDEwKTowLHN0YXJ0Omxb'@;
put 'dGhpcy5pbmxpbmVQcm9wZXJ0eV0/cGFyc2VJbnQobFt0aGlzLmlubGluZVByb3BlcnR5XSwxMCk6MH19c2V0U2l6ZShsLGEpe0d1KGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErUDcpfWdldFNpemUoKXty'@;
put 'ZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0'@;
put 'KGwsYSl7R3UobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbYG1hcmdpbiR7YnUodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YF09YStQNyl9Z2V0T2Zmc2V0KCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlLGE9YG1h'@;
put 'cmdpbiR7YnUodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YDtyZXR1cm57dG9wOmwubWFyZ2luVG9wP3BhcnNlSW50KGwubWFyZ2luVG9wLDEwKTowLHN0YXJ0OmxbYV0/cGFyc2VJbnQobFthXSwxMCk6MH19fSxCRmU9Y2xhc3MgVkZlIGV4dGVuZHMgZW9le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxw'@;
put 'aSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0Iil9fSxVRmU9Y2xhc3MgekZlIGV4dGVuZHMgZW9le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fTtzby5nZXRTaW5n'@;
put 'bGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uTW92ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbk1vdmUiKTtjb25zdCBmej0ibWFudWFsQ29sdW1uTW92ZSIsaTQ9bmV3IFdlYWtNYXAsdG9lPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsUkE9InNob3ctdWki'@;
put 'LHB6PSJvbi1tb3ZpbmctLWNvbHVtbnMiLGd6PSJhZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMiO2NsYXNzIFlGZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBmen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9Y29uc3RydWN0b3IobCl7'@;
put 'c3VwZXIobCksaTQuc2V0KHRoaXMse2NvbHVtbnNUb01vdmU6W10sY291bnRDb2xzOjAsZml4ZWRDb2x1bW5zOjAscHJlc3NlZDp2b2lkIDAsdGFyZ2V0OntldmVudFBhZ2VYOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxjb2w6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAw'@;
put 'fSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYmFja2xpZ2h0PW5ldyBCRmUobCksdGhpcy5ndWlkZWxpbmU9bmV3IFVGZShsKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZnpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5l'@;
put 'bmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9u'@;
put 'QmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMub25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0'@;
put 'ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LHRvZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h'@;
put 'YmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtXbyh0aGlzLmhvdC5yb290RWxlbWVudCx0b2UpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHRoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRl'@;
put 'bGluZS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbbF0sYSl9bW92ZUNvbHVtbnMobCxhKXtjb25zdCBkPWk0LmdldCh0aGlzKSxoPWQuY2FjaGVkRHJvcEluZGV4LGY9dGhpcy5pc01vdmVQb3NzaWJsZShs'@;
put 'LGEpLF89dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbk1vdmUiLGwsYSxoLGYpO2lmKGQuY2FjaGVkRHJvcEluZGV4PXZvaWQgMCwhMT09PV8pcmV0dXJuO2YmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3QgVD1mJiZ0aGlzLmlzQ29sdW1u'@;
put 'T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbk1vdmUiLGwsYSxoLGYsVCksVH1kcmFnQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMoW2xdLGEpfWRyYWdDb2x1bW5zKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRl'@;
put 'eChsLGEpO3JldHVybiBpNC5nZXQodGhpcykuY2FjaGVkRHJvcEluZGV4PWEsdGhpcy5tb3ZlQ29sdW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5k'@;
put 'LGY9YTwwLF89bC5zb21lKFc9Plc8MCksVD1sLnNvbWUoVz0+Vz49ZCk7cmV0dXJuIShofHxmfHxffHxUKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9QWwobCwoaCxmKT0+KGY8YSYm'@;
put 'KGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7Y29uc3QgXz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2grPXRoaXMu'@;
put 'aG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09XyYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoXyl8fDApfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhv'@;
put 'dC5nZXRTZXR0aW5ncygpW2Z6XTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNT'@;
put 'dGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy'@;
put 'LmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmlu'@;
put 'ZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuIHZvKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1pNC5nZXQodGhpcyksYT10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KGwuaG92'@;
put 'ZXJlZENvbHVtbikmJmE+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh2b2lkIDAsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxoPXRoaXMuaG90LnZpZXcuX3d0'@;
put 'Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQsZj0ibnVtYmVyIj09dHlwZW9mIGguc2Nyb2xsWD9oLnNjcm9sbFg6aC5zY3JvbGxMZWZ0O2xldCBfPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLGwuaG92ZXJlZENvbHVtbi0xKTtjb25z'@;
put 'dCBUPWQuaGlkZXIub2Zmc2V0V2lkdGgsVz1kLlRCT0RZLm9mZnNldExlZnQsaWU9dGhpcy5iYWNrbGlnaHQuZ2V0T2Zmc2V0KCkuc3RhcnQscGU9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLndpZHRoO2xldCB3ZT0wLEVlPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3QgZXQ9dGhpcy5o'@;
put 'b3Qucm9vdFdpbmRvdyx5dD13YSh0aGlzLmhvdC5yb290RWxlbWVudCk7RWU9ZXQuaW5uZXJXaWR0aC1sLnRhcmdldC5ldmVudFBhZ2VYLShldC5pbm5lcldpZHRoLWwucm9vdEVsZW1lbnRPZmZzZXQteXQpLSh2b2lkIDA9PT1oLnNjcm9sbFg/ZjowKX1lbHNlIEVlPWwudGFyZ2V0LmV2ZW50'@;
put 'UGFnZVgtKGwucm9vdEVsZW1lbnRPZmZzZXQtKHZvaWQgMD09PWguc2Nyb2xsWD9mOjApKTtsLmhhc1Jvd0hlYWRlcnMmJih3ZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lk'@;
put 'dGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydChsLmhvdmVyZWRDb2x1bW4pJiYoXys9ZiksXys9d2UsbC5ob3ZlcmVkQ29sdW1uPDA/bC50YXJnZXQuY29sPWwuZml4ZWRDb2x1bW5zU3RhcnQ+MD8wOmE+MD9hLTE6YTpsLnRhcmdldC5URC5vZmZzZXRXaWR0aC8yK188PUVlPyhsLnRhcmdl'@;
put 'dC5jb2w9KGwuaG92ZXJlZENvbHVtbj49bC5jb3VudENvbHM/bC5jb3VudENvbHMtMTpsLmhvdmVyZWRDb2x1bW4pKzEsXys9bC50YXJnZXQuVEQub2Zmc2V0V2lkdGgpOmwudGFyZ2V0LmNvbD1sLmhvdmVyZWRDb2x1bW47bGV0IFplPUVlLGl0PV87RWUrcGUraWU+PVQ/WmU9VC1wZS1pZTpF'@;
put 'ZStpZTxXK3dlJiYoWmU9Vyt3ZStNYXRoLmFicyhpZSkpLF8+PVQtMT9pdD1ULTE6MD09PWl0P2l0PTE6dm9pZCAwIT09aC5zY3JvbGxYJiZsLmhvdmVyZWRDb2x1bW48bC5maXhlZENvbHVtbnNTdGFydCYmKGl0LT1sLnJvb3RFbGVtZW50T2Zmc2V0PD1oLnNjcm9sbFg/bC5yb290RWxlbWVu'@;
put 'dE9mZnNldDowKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLFplKSx0aGlzLmd1aWRlbGluZS5zZXRQb3NpdGlvbihudWxsLGl0KX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIu'@;
put 'YWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRoaXMub25Nb3VzZU1vdmUoYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVh'@;
put 'cigpfW9uQmVmb3JlT25DZWxsTW91c2VEb3duKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxfPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxUPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksVz1pNC5nZXQodGhp'@;
put 'cyksaWU9Qm8obC50YXJnZXQsInNvcnRBY3Rpb24iKTtpZighVHx8IV98fFcucHJlc3NlZHx8MCE9PWwuYnV0dG9ufHxpZSlyZXR1cm4gVy5wcmVzc2VkPSExLFcuY29sdW1uc1RvTW92ZS5sZW5ndGg9MCx2b2lkIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtweixSQV0pO2NvbnN0IHBlPXRo'@;
put 'aXMuZ3VpZGVsaW5lLmlzQnVpbHQoKSYmIXRoaXMuZ3VpZGVsaW5lLmlzQXBwZW5kZWQoKSx3ZT10aGlzLmJhY2tsaWdodC5pc0J1aWx0KCkmJiF0aGlzLmJhY2tsaWdodC5pc0FwcGVuZGVkKCk7cGUmJndlJiYodGhpcy5ndWlkZWxpbmUuYXBwZW5kVG8oZi5oaWRlciksdGhpcy5iYWNrbGln'@;
put 'aHQuYXBwZW5kVG8oZi5oaWRlcikpO2NvbnN0e2Zyb206RWUsdG86WmV9PVQsaXQ9TWF0aC5taW4oRWUuY29sLFplLmNvbCksZXQ9TWF0aC5tYXgoRWUuY29sLFplLmNvbCk7aWYoYS5yb3c8MCYmYS5jb2w+PWl0JiZhLmNvbDw9ZXQpe2guY29sdW1uPSEwLFcucHJlc3NlZD0hMCxXLnRhcmdl'@;
put 'dC5ldmVudFBhZ2VYPWwucGFnZVgsVy50YXJnZXQuZXZlbnRPZmZzZXRYPWwub2Zmc2V0WCxXLmhvdmVyZWRDb2x1bW49YS5jb2wsVy50YXJnZXQuVEQ9ZCxXLnRhcmdldC5jb2w9YS5jb2wsVy5jb2x1bW5zVG9Nb3ZlPXRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhpdCxldCksVy5oYXNS'@;
put 'b3dIZWFkZXJzPSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzLFcuY291bnRDb2xzPXRoaXMuaG90LmNvdW50Q29scygpLFcuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxXLnJvb3RFbGVtZW50T2Zmc2V0PUtsKHRo'@;
put 'aXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IHl0PVcuaGFzUm93SGVhZGVycz8tMTowLEV0PWYuaG9sZGVyLnNjcm9sbFRvcCtmLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLFN0PWEuY29sPFcuZml4ZWRDb2x1bW5zU3RhcnQsSnQ9TWF0aC5hYnModGhpcy5ob3Qudmlldy5fd3Qu'@;
put 'd3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSksbm49TWF0aC5hYnMobC5vZmZzZXRYLSh0aGlzLmhvdC5pc1J0bCgpP2wudGFyZ2V0Lm9mZnNldFdpZHRoOjApKSx2bj10aGlzLmdldENvbHVtbnNXaWR0aChpdCxhLmNvbC0xKStubixObj10aGlzLmdl'@;
put 'dENvbHVtbnNXaWR0aCh5dCxpdC0xKSsoU3Q/SnQ6MCkrdm47dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24oRXQsTm4pLHRoaXMuYmFja2xpZ2h0LnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgoaXQsZXQpLGYuaGlkZXIub2Zmc2V0SGVpZ2h0LUV0KSx0aGlzLmJhY2tsaWdodC5zZXRP'@;
put 'ZmZzZXQobnVsbCwtdm4pLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LHB6KX1lbHNlIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LGd6KSxXLnByZXNzZWQ9ITEsVy5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wfW9uTW91c2VNb3ZlKGwpe2NvbnN0IGE9aTQuZ2V0KHRoaXMpO2lmKGEucHJlc3NlZCl7'@;
put 'aWYobC50YXJnZXQ9PT10aGlzLmJhY2tsaWdodC5lbGVtZW50KXtjb25zdCBkPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS53aWR0aDt0aGlzLmJhY2tsaWdodC5zZXRTaXplKDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihkKX0pfWEudGFyZ2V0'@;
put 'LmV2ZW50UGFnZVg9bC5wYWdlWCx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX19b25CZWZvcmVPbkNlbGxNb3VzZU92ZXIobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLF89aTQuZ2V0KHRoaXMpOyFmfHwhXy5wcmVzc2VkfHwoXy5jb2x1bW5zVG9Nb3Zl'@;
put 'LmluZGV4T2YoYS5jb2wpPi0xP1dvKHRoaXMuaG90LnJvb3RFbGVtZW50LFJBKTpwaSh0aGlzLmhvdC5yb290RWxlbWVudCxSQSksaC5yb3c9ITAsaC5jb2x1bW49ITAsaC5jZWxsPSEwLF8uaG92ZXJlZENvbHVtbj1hLmNvbCxfLnRhcmdldC5URD1kKX1vbk1vdXNlVXAoKXtjb25zdCBsPWk0'@;
put 'LmdldCh0aGlzKSxhPWwudGFyZ2V0LmNvbCxkPWwuY29sdW1uc1RvTW92ZS5sZW5ndGg7aWYobC5ob3ZlcmVkQ29sdW1uPXZvaWQgMCxsLnByZXNzZWQ9ITEsbC5iYWNrbGlnaHRXaWR0aD0wLFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtweixSQSxnel0pLHRoaXMuaG90LnNlbGVjdGlvbi5p'@;
put 'c1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmcGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsZ3opLGQ8MXx8dm9pZCAwPT09YSlyZXR1cm47Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwuY29sdW1uc1RvTW92ZVswXSksXz10aGlzLmRyYWdDb2x1bW5zKGwuY29sdW1uc1RvTW92'@;
put 'ZSxhKTtpZihsLmNvbHVtbnNUb01vdmUubGVuZ3RoPTAsITA9PT1fKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7Y29uc3QgVD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTt0aGlzLmhv'@;
put 'dC5zZWxlY3RDb2x1bW5zKFQsVCtkLTEpfX1vbkFmdGVyU2Nyb2xsVmVydGljYWxseSgpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxoPWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzErbC5ob2xkZXIuc2Nyb2xsVG9wO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKGgp'@;
put 'LHRoaXMuYmFja2xpZ2h0LnNldFNpemUobnVsbCxsLmhpZGVyLm9mZnNldEhlaWdodC1oKX1idWlsZFBsdWdpblVJKCl7dGhpcy5iYWNrbGlnaHQuYnVpbGQoKSx0aGlzLmd1aWRlbGluZS5idWlsZCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1kZXN0'@;
put 'cm95KCl7dGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IE9BPSJtYW51YWxDb2x1bW5SZXNpemUiLG5vZT0ibWFudWFsQ29sdW1uV2lkdGhzIixtej1uZXcgV2Vha01hcDtjbGFzcyBHRmUgZXh0ZW5kcyBac3tz'@;
put 'dGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gT0F9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdDt0aGlzLmN1cnJlbnRUSD1udWxsLHRoaXMuY3VycmVudENvbD1u'@;
put 'dWxsLHRoaXMuc2VsZWN0ZWRDb2xzPVtdLHRoaXMuY3VycmVudFdpZHRoPW51bGwsdGhpcy5uZXdTaXplPW51bGwsdGhpcy5zdGFydFk9bnVsbCx0aGlzLnN0YXJ0V2lkdGg9bnVsbCx0aGlzLnN0YXJ0T2Zmc2V0PW51bGwsdGhpcy5oYW5kbGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlz'@;
put 'Lmd1aWRlPWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMucHJlc3NlZD1udWxsLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsLHRoaXMuY29sdW1uV2lkdGhz'@;
put 'TWFwPXZvaWQgMCxtei5zZXQodGhpcyx7Y29uZmlnOnZvaWQgMH0pLHBpKHRoaXMuaGFuZGxlLCJtYW51YWxDb2x1bW5SZXNpemVyIikscGkodGhpcy5ndWlkZSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdo'@;
put 'dCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbHVtbldpZHRoc01hcD1uZXcgV3AsdGhpcy5jb2x1bW5XaWR0aHNNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5v'@;
put 'bk1hcEluaXQoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHRoaXMuY29sdW1uV2lkdGhzTWFwKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwobCxhKT0+dGhpcy5vbk1vZGlmeUNvbFdpZHRoKGwsYSkpLHRoaXMuYWRkSG9v'@;
put 'aygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwobCxhKT0+dGhpcy5vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aChsLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGwsYSxkKT0+dGhpcy5vbkJlZm9yZUNvbHVtblJlc2l6ZShsLGEsZCkpLHRoaXMuYmlu'@;
put 'ZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXttei5nZXQodGhpcykuY29uZmlnPXRoaXMuY29sdW1uV2lkdGhzTWFw'@;
put 'LmdldFZhbHVlcygpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRocygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIixub2UsdGhp'@;
put 'cy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsbm9lLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9TWF0aC5tYXgo'@;
put 'YSwyMCksaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiB0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKSxkfWNsZWFyTWFudWFsU2l6ZShsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb2x1bW5XaWR0aHNNYXAu'@;
put 'c2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9b25NYXBJbml0KCl7Y29uc3QgbD1tei5nZXQodGhpcyksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXSxkPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRocygpO3R5cGVvZiBkPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2QuZm9y'@;
put 'RWFjaCgoaCxmKT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSl9LCEwKTpBcnJheS5pc0FycmF5KGEpPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2EuZm9yRWFjaCgoaCxmKT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChm'@;
put 'LGgpfSl9LCEwKSxsLmNvbmZpZz1hKTohMD09PWEmJkFycmF5LmlzQXJyYXkobC5jb25maWcpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuY29uZmlnLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCl9c2V0dXBI'@;
put 'YW5kbGVQb3NpdGlvbihsKXtpZighbC5wYXJlbnROb2RlKXJldHVybjt0aGlzLmN1cnJlbnRUSD1sO2NvbnN0e193dDphfT10aGlzLmhvdC52aWV3LGQ9YS53dFRhYmxlLmdldENvb3Jkcyh0aGlzLmN1cnJlbnRUSCksaD1kLmNvbDtpZihoPDApcmV0dXJuO2NvbnN0IGY9YWwodGhpcy5jdXJy'@;
put 'ZW50VEgpLF89dGhpcy5jdXJyZW50VEguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IFc7aDxhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikmJihXPWEud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5j'@;
put 'dXJyZW50VEgsZC5yb3csZC5jb2wpKSxXfHwoVz1hLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxkLnJvdyxkLmNvbCkpLHRoaXMuY3VycmVudENvbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu'@;
put 'ZGVyYWJsZUluZGV4KGgpLHRoaXMuc2VsZWN0ZWRDb2xzPVtdO2NvbnN0IGllPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkm'@;
put 'JmllJiZEbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksd2U9Pnt2byh3ZS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCx3ZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsaXQ9Pnt0aGlzLnNlbGVjdGVkQ29scy5pbmNsdWRlcyhpdCl8fHRoaXMuc2VsZWN0ZWRDb2xzLnB1c2goaXQpfSl9'@;
put 'KSx0aGlzLnNlbGVjdGVkQ29scy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRDb2wpfHwodGhpcy5zZWxlY3RlZENvbHM9W3RoaXMuY3VycmVudENvbF0pLHRoaXMuc3RhcnRPZmZzZXQ9Vy5zdGFydC02LHRoaXMuc3RhcnRXaWR0aD1wYXJzZUludChfLndpZHRoLDEwKSx0aGlzLmhhbmRsZS5zdHls'@;
put 'ZS50b3A9YCR7Vy50b3B9cHhgLHRoaXMuaGFuZGxlLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHt0aGlzLnN0YXJ0T2Zmc2V0K3RoaXMuc3RhcnRXaWR0aH1weGAsdGhpcy5oYW5kbGUuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu'@;
put 'aGFuZGxlKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXt0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLmN1cnJlbnRXaWR0aH1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChhbCh0aGlzLmhhbmRsZSksMTAp'@;
put 'LGE9cGFyc2VJbnQodGhpcy5oYW5kbGUuc3R5bGUudG9wLDEwKStsLGQ9cGFyc2VJbnQodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoMCksMTApO3BpKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxwaSh0aGlzLmd1aWRlLCJhY3RpdmUiKSx0aGlzLmd1aWRlLnN0eWxl'@;
put 'LnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksdGhpcy5ndWlkZS5zdHlsZS5oZWlnaHQ9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXt0aGlzLmd1aWRlLnN0eWxlW3RoaXMu'@;
put 'aW5saW5lRGlyXT10aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7V28odGhpcy5oYW5kbGUsImFjdGl2ZSIpLFdvKHRoaXMuZ3VpZGUsImFjdGl2ZSIpfWNoZWNrSWZDb2x1bW5IZWFkZXIobCl7cmV0dXJuISFOcChsLFsiVEhFQUQiXSx0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudCl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1vbk1vdXNlT3ZlcihsKXtpZighZ04obC50YXJnZXQpJiYhMCE9'@;
put 'PXRoaXMuaXNUcmlnZ2VyZWRCeVJNQiYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGwudGFyZ2V0KSl7Y29uc3QgYT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnRhcmdldCk7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTthJiYobnVsbD09PWR8fCIx'@;
put 'Ij09PWQpJiYodGhpcy5wcmVzc2VkfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oYSkpfX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVt'@;
put 'ZW50c1NpemUoITApfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMCk7dm9pZCAwIT09ZiYmKHRoaXMubmV3U2l6ZT1mKSwiYWxsIj09PXRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEg/dGhpcy5j'@;
put 'bGVhck1hbnVhbFNpemUoZCk6dGhpcy5zZXRNYW51YWxTaXplKGQsdGhpcy5uZXdTaXplKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCEwKSxoJiZsKCl9O3RoaXMuZGJsY2xpY2s+PTIm'@;
put 'Jih0aGlzLnNlbGVjdGVkQ29scy5sZW5ndGg+MT8oRG4odGhpcy5zZWxlY3RlZENvbHMsaD0+e2EoaCl9KSxsKCkpOkRuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgsITApfSkpLHRoaXMuZGJsY2xpY2s9MCx0aGlzLmF1dG9yZXNpemVUaW1lb3V0PW51bGx9b25Nb3VzZURvd24obCl7Qm8o'@;
put 'bC50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSx0aGlzLnByZXNzZWQ9ITAsbnVsbD09PXRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQmJih0aGlzLmF1dG9yZXNpemVU'@;
put 'aW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQpKSx0aGlzLmRibGNsaWNrKz0xLHRoaXMuc3RhcnRYPWwucGFnZVgsdGhpcy5uZXdTaXplPXRoaXMuc3Rh'@;
put 'cnRXaWR0aCl9b25Nb3VzZU1vdmUobCl7aWYodGhpcy5wcmVzc2VkKXtjb25zdCBhPShsLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTt0aGlzLmN1cnJlbnRXaWR0aD10aGlzLnN0YXJ0V2lkdGgrYSxEbih0aGlzLnNlbGVjdGVkQ29scyxkPT57dGhp'@;
put 'cy5uZXdTaXplPXRoaXMuc2V0TWFudWFsU2l6ZShkLHRoaXMuY3VycmVudFdpZHRoKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpfX1vbk1vdXNlVXAoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRo'@;
put 'aXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxhPShkLGgpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsdGhpcy5uZXdTaXplLGQsITEpLGgmJmwoKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0'@;
put 'aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCExKX07dGhpcy5wcmVzc2VkJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLnByZXNzZWQ9ITEsdGhpcy5uZXdTaXplIT09dGhpcy5zdGFydFdpZHRoJiYodGhpcy5zZWxlY3RlZENvbHMu'@;
put 'bGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpKX1vbkNvbnRleHRNZW51KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUo'@;
put 'KSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmhhbmRsZSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5ndWlkZSksdGhpcy5wcmVzc2VkPSExLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMCx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9'@;
put 'Pnt0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITF9KX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3RFbGVtZW50OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50'@;
put 'TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5oYW5kbGUsImNvbnRleHRtZW51IiwoKT0+dGhpcy5vbkNvbnRleHRNZW51KCkpfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtsZXQgZD1sO2lmKHRo'@;
put 'aXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGY9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KGgpO3RoaXMuaG90LmdldFNldHRpbmdzKClbT0FdJiZmJiYoZD1mKX1yZXR1cm4gZH1vbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0'@;
put 'aChsLGEpe2xldCBkPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChhKTtyZXR1cm4gbnVsbD09PWQmJihkPWwpLGR9b25CZWZvcmVDb2x1bW5SZXNpemUoKXt0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtl'@;
put 'ZCgpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWNvbnN0IEY3PSJweCIsb29lPWNsYXNzICRGZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0'@;
put 'YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3Zl'@;
put 'Q2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0'@;
put 'eWxlLnRvcD1sK0Y3KSx2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0PWErRjcpfWdldFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQu'@;
put 'c3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQsMTApOjB9fXNldFNpemUobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK0Y3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStGNyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlz'@;
put 'Ll9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5f'@;
put 'ZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtGNyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD1hK0Y3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEw'@;
put 'KTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSxYRmU9Y2xhc3MgS0ZlIGV4dGVuZHMgb29le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFs'@;
put 'Um93TW92ZS0tYmFja2xpZ2h0Iil9fSxlSGU9Y2xhc3MgUUZlIGV4dGVuZHMgb29le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxwaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93TW92ZSIp'@;
put 'LHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJvd01vdmUiKTtjb25zdCBfej0ibWFudWFsUm93TW92ZSIsbzQ9bmV3IFdlYWtNYXAsc29lPSJodF9fbWFudWFsUm93TW92ZSIsUEE9InNob3ctdWkiLGJ6PSJvbi1tb3ZpbmctLXJvd3MiLHl6PSJhZnRlci1zZWxlY3Rpb24tLXJv'@;
put 'd3MiO2NsYXNzIG5IZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksbzQuc2V0KHRoaXMse3Jvd3NUb01vdmU6W10scHJlc3NlZDp2b2lkIDAs'@;
put 'dGFyZ2V0OntldmVudFBhZ2VZOnZvaWQgMCxjb29yZHM6dm9pZCAwLFREOnZvaWQgMCxyb3c6dm9pZCAwfSxjYWNoZWREcm9wSW5kZXg6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYmFja2xpZ2h0PW5ldyBYRmUobCksdGhpcy5ndWlkZWxpbmU9bmV3IGVI'@;
put 'ZShsKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbX3pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxN'@;
put 'b3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+'@;
put 'dGhpcy5vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxwaSh0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudCxzb2UpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7'@;
put 'V28odGhpcy5ob3Qucm9vdEVsZW1lbnQsc29lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJhY2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlUm93KGwsYSl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2xdLGEp'@;
put 'fW1vdmVSb3dzKGwsYSl7Y29uc3QgZD1vNC5nZXQodGhpcyksaD1kLmNhY2hlZERyb3BJbmRleCxmPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dNb3ZlIixsLGEsaCxmKTtpZihkLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITE9PT1fKXJl'@;
put 'dHVybjtmJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IFQ9ZiYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsaCxmLFQpLFR9ZHJhZ1JvdyhsLGEpe3JldHVybiB0aGlz'@;
put 'LmRyYWdSb3dzKFtsXSxhKX1kcmFnUm93cyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gbzQuZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1hLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCxfPWwuc29tZShXPT5XPDApLFQ9bC5zb21lKFc9Plc+PWQpO3JldHVybiEoaHx8Znx8X3x8VCl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1h'@;
put 'KX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPUFsKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IF89ZC5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT1fJiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoXyl8fDIzKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfel07aWYoQXJy'@;
put 'YXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo'@;
put 'KS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2'@;
put 'ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxs'@;
put 'LnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVybiBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiB2byhNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5y'@;
put 'b3csaC5yb3cpLFQ9PnthLnB1c2goVCl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPW80LmdldCh0aGlzKSxhPWwudGFyZ2V0LmNvb3JkcyxkPXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxoPXRoaXMuaG90LnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJv'@;
put 'dygpLGY9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmZD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLTEsLTEpKSx0aGlzLmlzRml4ZWRSb3dCb3R0b20o'@;
put 'YS5yb3cpJiZoPGYmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgrMSwxKSx2b2lkIDAsITApO2NvbnN0IF89dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxUPWwudGFyZ2V0LlRELFc9dGhpcy5ob3Qu'@;
put 'cm9vdEVsZW1lbnQsaWU9S2woVykscGU9dmcoVyk7bGV0IEVlO0VlPXRoaXMuaG90LnJvb3RXaW5kb3c9PT1wZT9wZS5zY3JvbGxZOnBlLnNjcm9sbFRvcDtjb25zdCBpdD1sLnRhcmdldC5ldmVudFBhZ2VZLShpZS50b3AtRWUpK18uaG9sZGVyLnNjcm9sbFRvcCxldD1fLmhpZGVyLm9mZnNl'@;
put 'dEhlaWdodCx5dD1fLlRCT0RZLm9mZnNldFRvcCxFdD10aGlzLmJhY2tsaWdodC5nZXRPZmZzZXQoKS50b3AsU3Q9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLmhlaWdodCxKdD1ULm9mZnNldEhlaWdodC8yLG5uPVQub2Zmc2V0SGVpZ2h0O2xldCB2bj10aGlzLmhvdC52aWV3LlRIRUFELm9m'@;
put 'ZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxhLnJvdy0xKTtjb25zdCBObj1pdD49dm4rSnQ7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmKHZuKz1fLmhvbGRlci5zY3JvbGxUb3ApLGEucm93PDA/bC50YXJnZXQucm93PWQ+MD9kLTE6ZDpObj8obC50YXJnZXQucm93PWEucm93'@;
put 'KzEsdm4rPTA9PT1hLnJvdz9ubi0xOm5uKTpsLnRhcmdldC5yb3c9YS5yb3c7bGV0IGNyPWl0LExyPXZuO2l0K1N0K0V0Pj1ldD9jcj1ldC1TdC1FdDppdCtFdDx5dCYmKGNyPXl0K01hdGguYWJzKEV0KSksdm4+PWV0LTEmJihMcj1ldC0xKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihj'@;
put 'ciksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24oTHIpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+dGhpcy5vbk1vdXNlTW92'@;
put 'ZShhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7Y29uc3R7d3RUYWJs'@;
put 'ZTpmLHd0Vmlld3BvcnQ6X309dGhpcy5ob3Qudmlldy5fd3QsVD10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPW80LmdldCh0aGlzKTtpZighV3x8IVR8fGllLnByZXNzZWR8fDAhPT1sLmJ1dHRv'@;
put 'bilyZXR1cm4gaWUucHJlc3NlZD0hMSxpZS5yb3dzVG9Nb3ZlLmxlbmd0aD0wLHZvaWQgV28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2J6LFBBXSk7Y29uc3QgcGU9dGhpcy5ndWlkZWxpbmUuaXNCdWlsdCgpJiYhdGhpcy5ndWlkZWxpbmUuaXNBcHBlbmRlZCgpLHdlPXRoaXMuYmFja2xpZ2h0'@;
put 'LmlzQnVpbHQoKSYmIXRoaXMuYmFja2xpZ2h0LmlzQXBwZW5kZWQoKTtwZSYmd2UmJih0aGlzLmd1aWRlbGluZS5hcHBlbmRUbyhmLmhpZGVyKSx0aGlzLmJhY2tsaWdodC5hcHBlbmRUbyhmLmhpZGVyKSk7Y29uc3R7ZnJvbTpFZSx0bzpaZX09VyxpdD1NYXRoLm1pbihFZS5yb3csWmUucm93'@;
put 'KSxldD1NYXRoLm1heChFZS5yb3csWmUucm93KTtpZihhLmNvbDwwJiZhLnJvdz49aXQmJmEucm93PD1ldCl7aC5yb3c9ITAsaWUucHJlc3NlZD0hMCxpZS50YXJnZXQuZXZlbnRQYWdlWT1sLnBhZ2VZLGllLnRhcmdldC5jb29yZHM9YSxpZS50YXJnZXQuVEQ9ZCxpZS5yb3dzVG9Nb3ZlPXRo'@;
put 'aXMucHJlcGFyZVJvd3NUb01vdmluZygpO2NvbnN0IHl0PWYuaG9sZGVyLnNjcm9sbExlZnQrXy5nZXRSb3dIZWFkZXJXaWR0aCgpO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwseXQpLHRoaXMuYmFja2xpZ2h0LnNldFNpemUoZi5oaWRlci5vZmZzZXRXaWR0aC15dCx0aGlzLmdl'@;
put 'dFJvd3NIZWlnaHQoaXQsZXQpKSx0aGlzLmJhY2tsaWdodC5zZXRPZmZzZXQoLTEqKHRoaXMuZ2V0Um93c0hlaWdodChpdCxhLnJvdy0xKStsLm9mZnNldFkpLG51bGwpLHBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGJ6KSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIFdvKHRoaXMuaG90'@;
put 'LnJvb3RFbGVtZW50LHl6KSxpZS5wcmVzc2VkPSExLGllLnJvd3NUb01vdmUubGVuZ3RoPTB9b25Nb3VzZU1vdmUobCl7Y29uc3QgYT1vNC5nZXQodGhpcyk7aWYoYS5wcmVzc2VkKXtpZihsLnRhcmdldD09PXRoaXMuYmFja2xpZ2h0LmVsZW1lbnQpe2NvbnN0IGQ9dGhpcy5iYWNrbGlnaHQu'@;
put 'Z2V0U2l6ZSgpLmhlaWdodDt0aGlzLmJhY2tsaWdodC5zZXRTaXplKG51bGwsMCksc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKG51bGwsZCl9KX1hLnRhcmdldC5ldmVudFBhZ2VZPWwucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9fW9uQmVm'@;
put 'b3JlT25DZWxsTW91c2VPdmVyKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxfPW80LmdldCh0aGlzKTshZnx8IV8ucHJlc3NlZHx8KF8ucm93c1RvTW92ZS5pbmRleE9mKGEucm93KT4tMT9Xbyh0aGlzLmhvdC5yb290RWxlbWVudCxQQSk6cGkodGhp'@;
put 'cy5ob3Qucm9vdEVsZW1lbnQsUEEpLGgucm93PSEwLGguY29sdW1uPSEwLGguY2VsbD0hMCxfLnRhcmdldC5jb29yZHM9YSxfLnRhcmdldC5URD1kKX1vbk1vdXNlVXAoKXtjb25zdCBsPW80LmdldCh0aGlzKSxhPWwudGFyZ2V0LnJvdyxkPWwucm93c1RvTW92ZS5sZW5ndGg7aWYobC5wcmVz'@;
put 'c2VkPSExLGwuYmFja2xpZ2h0SGVpZ2h0PTAsV28odGhpcy5ob3Qucm9vdEVsZW1lbnQsW2J6LFBBLHl6XSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiZwaSh0aGlzLmhvdC5yb290RWxlbWVudCx5eiksZDwxfHx2b2lkIDA9PT1hKXJldHVybjtjb25zdCBm'@;
put 'PXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobC5yb3dzVG9Nb3ZlWzBdKSxfPXRoaXMuZHJhZ1Jvd3MobC5yb3dzVG9Nb3ZlLGEpO2lmKGwucm93c1RvTW92ZS5sZW5ndGg9MCwhMD09PV8pe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcu'@;
put 'YWRqdXN0RWxlbWVudHNTaXplKCEwKTtjb25zdCBUPXRoaXMuaG90LnRvVmlzdWFsUm93KGYpO3RoaXMuaG90LnNlbGVjdFJvd3MoVCxUK2QtMSl9fW9uQWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsaD10aGlzLmhvdC52aWV3Ll93'@;
put 'dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCkrbC5ob2xkZXIuc2Nyb2xsTGVmdDt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLGgpLHRoaXMuYmFja2xpZ2h0LnNldFNpemUobC5oaWRlci5vZmZzZXRXaWR0aC1oKX1idWlsZFBsdWdpblVJKCl7dGhpcy5iYWNrbGlnaHQu'@;
put 'YnVpbGQoKSx0aGlzLmd1aWRlbGluZS5idWlsZCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1kZXN0cm95KCl7dGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IEZBPSJt'@;
put 'YW51YWxSb3dSZXNpemUiLGFvZT0ibWFudWFsUm93SGVpZ2h0cyIsd3o9bmV3IFdlYWtNYXA7Y2xhc3MgaUhlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwfWNvbnN0cnVjdG9yKGwpe3N1'@;
put 'cGVyKGwpO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdDt0aGlzLmN1cnJlbnRUSD1udWxsLHRoaXMuY3VycmVudFJvdz1udWxsLHRoaXMuc2VsZWN0ZWRSb3dzPVtdLHRoaXMuY3VycmVudEhlaWdodD1udWxsLHRoaXMubmV3U2l6ZT1udWxsLHRoaXMuc3RhcnRZPW51bGwsdGhpcy5z'@;
put 'dGFydEhlaWdodD1udWxsLHRoaXMuc3RhcnRPZmZzZXQ9bnVsbCx0aGlzLmhhbmRsZT1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZ3VpZGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5wcmVzc2VkPW51bGwsdGhpcy5pc1Ry'@;
put 'aWdnZXJlZEJ5Uk1CPSExLHRoaXMuZGJsY2xpY2s9MCx0aGlzLmF1dG9yZXNpemVUaW1lb3V0PW51bGwsdGhpcy5yb3dIZWlnaHRzTWFwPXZvaWQgMCx3ei5zZXQodGhpcyx7Y29uZmlnOnZvaWQgMH0pLHBpKHRoaXMuaGFuZGxlLCJtYW51YWxSb3dSZXNpemVyIikscGkodGhpcy5ndWlkZSwi'@;
put 'bWFudWFsUm93UmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJvd0hl'@;
put 'aWdodHNNYXA9bmV3IFdwLHRoaXMucm93SGVpZ2h0c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soIm1v'@;
put 'ZGlmeVJvd0hlaWdodCIsKGwsYSk9PnRoaXMub25Nb2RpZnlSb3dIZWlnaHQobCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2lu'@;
put 'KCl9ZGlzYWJsZVBsdWdpbigpe3d6LmdldCh0aGlzKS5jb25maWc9dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdo'@;
put 'dHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsYW9lLHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbFJvd0hlaWdodHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsYW9l'@;
put 'LGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hdGgubWF4KGEsc25lLkRFRkFVTFRfSEVJR0hUKTtyZXR1cm4gdGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChkLGgpLGh9c2V0dXBIYW5kbGVQb3NpdGlv'@;
put 'bihsKXt0aGlzLmN1cnJlbnRUSD1sO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3Jkcyh0aGlzLmN1cnJlbnRUSCksZj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IF89d2EodGhpcy5jdXJyZW50VEgpLFQ9dGhpcy5jdXJyZW50VEguZ2V0Qm91'@;
put 'bmRpbmdDbGllbnRSZWN0KCksVz1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksaWU9Zj49YS5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoMCwxKS1kLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpO2xldCBwZTtXP3BlPWQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5l'@;
put 'ck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpOmllJiYocGU9ZC53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxoLnJvdyxoLmNvbCkp'@;
put 'LHBlfHwocGU9ZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0aGlzLmN1cnJlbnRUSCxoLnJvdyxoLmNvbCkpLHRoaXMuY3VycmVudFJvdz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYp'@;
put 'LHRoaXMuc2VsZWN0ZWRSb3dzPVtdO2NvbnN0IHdlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJndlJiZEbih0aGlzLmhvdC5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlKCksWmU9Pnt2byhaZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxaZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyx5dD0+e3RoaXMuc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHl0KXx8dGhpcy5zZWxlY3RlZFJvd3MucHVzaCh5dCl9KX0pLHRoaXMuc2VsZWN0ZWRS'@;
put 'b3dzLmluY2x1ZGVzKHRoaXMuY3VycmVudFJvdyl8fCh0aGlzLnNlbGVjdGVkUm93cz1bdGhpcy5jdXJyZW50Um93XSksdGhpcy5zdGFydE9mZnNldD1wZS50b3AtNix0aGlzLnN0YXJ0SGVpZ2h0PXBhcnNlSW50KFQuaGVpZ2h0LDEwKSx0aGlzLmhhbmRsZS5zdHlsZS50b3A9YCR7dGhpcy5z'@;
put 'dGFydE9mZnNldCt0aGlzLnN0YXJ0SGVpZ2h0fXB4YCx0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7cGUuc3RhcnR9cHhgLHRoaXMuaGFuZGxlLnN0eWxlLndpZHRoPWAke199cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGFuZGxlKX1yZWZy'@;
put 'ZXNoSGFuZGxlUG9zaXRpb24oKXt0aGlzLmhhbmRsZS5zdHlsZS50b3A9YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLmN1cnJlbnRIZWlnaHR9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQod2EodGhpcy5oYW5kbGUpLDEwKSxhPXBhcnNlSW50KHRoaXMuaGFuZGxl'@;
put 'LnN0eWxlW3RoaXMuaW5saW5lRGlyXSwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoMCksMTApO3BpKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxwaSh0aGlzLmd1aWRlLCJhY3RpdmUiKSx0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhh'@;
put 'bmRsZS5zdHlsZS50b3AsdGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAsdGhpcy5ndWlkZS5zdHlsZS53aWR0aD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmd1aWRlKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe3RoaXMuZ3Vp'@;
put 'ZGUuc3R5bGUudG9wPXRoaXMuaGFuZGxlLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtXbyh0aGlzLmhhbmRsZSwiYWN0aXZlIiksV28odGhpcy5ndWlkZSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihsKXt2YXIgYTtyZXR1cm4gTnAobCxbIlRIIl0sdGhpcy5ob3Qucm9vdEVs'@;
put 'ZW1lbnQpJiYiVEJPRFkiPT09KG51bGw9PT0oYT1sLnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hfHxudWxsPT09KGE9YS5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS50YWdOYW1lKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09'@;
put 'bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpO3JldHVybiB2b2lkIDAhPT1hJiZ0aGlzLm5ld1NpemU8YT9hOnRo'@;
put 'aXMubmV3U2l6ZX1vbk1vdXNlT3ZlcihsKXtpZighZ04obC50YXJnZXQpJiYhMCE9PXRoaXMuaXNUcmlnZ2VyZWRCeVJNQiYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGwudGFyZ2V0KSl7Y29uc3QgYT10aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnRhcmdldCk7YSYmKHRoaXMucHJlc3NlZHx8'@;
put 'dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGEpKX19YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+'@;
put 'e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCk7dm9pZCAwIT09ZiYmKHRoaXMubmV3U2l6ZT1mKSx0aGlzLnNldE1hbnVhbFNpemUoZCx0aGlzLm5ld1NpemUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl'@;
put 'clJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCksaCYmbCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YSho'@;
put 'LCEwKX0pKSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsfW9uTW91c2VEb3duKGwpe0JvKGwudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9u'@;
put 'KCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNpemVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVU'@;
put 'aW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WT1sLnBhZ2VZLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0SGVpZ2h0KX1vbk1vdXNlTW92ZShsKXt0aGlzLnByZXNzZWQmJih0aGlzLmN1cnJlbnRIZWlnaHQ9dGhpcy5zdGFydEhlaWdodCsobC5wYWdlWS10aGlzLnN0YXJ0WSks'@;
put 'RG4odGhpcy5zZWxlY3RlZFJvd3MsYT0+e3RoaXMubmV3U2l6ZT10aGlzLnNldE1hbnVhbFNpemUoYSx0aGlzLmN1cnJlbnRIZWlnaHQpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCkpfW9uTW91c2VVcCgpe2NvbnN0IGw9KCk9Pnt0'@;
put 'aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGE9KGQsaCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEx'@;
put 'KSxoJiZsKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRo'@;
put 'aXMubmV3U2l6ZSE9PXRoaXMuc3RhcnRIZWlnaHQmJih0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg+MT8oRG4odGhpcy5zZWxlY3RlZFJvd3MsaD0+e2EoaCl9KSxsKCkpOkRuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aGlzLmN1'@;
put 'cnJlbnRUSCkpfW9uQ29udGV4dE1lbnUoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuaGFuZGxlKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmd1aWRlKSx0aGlzLnByZXNzZWQ9ITEsdGhpcy5p'@;
put 'c1RyaWdnZXJlZEJ5Uk1CPSEwLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3RoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMX0pfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PnRoaXMub25Nb3VzZU92ZXIoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIs'@;
put 'ZD0+dGhpcy5vbk1vdXNlTW92ZShkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhhbmRsZSwiY29udGV4dG1lbnUiLCgpPT50aGlzLm9u'@;
put 'Q29udGV4dE1lbnUoKSl9b25Nb2RpZnlSb3dIZWlnaHQobCxhKXtsZXQgZD1sO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChoKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXSYm'@;
put 'ZiYmKGQ9Zil9cmV0dXJuIGR9b25NYXBJbml0KCl7Y29uc3QgbD13ei5nZXQodGhpcyksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZBXSxkPXRoaXMubG9hZE1hbnVhbFJvd0hlaWdodHMoKTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3R5cGVvZiBkPCJ1Ij9kLmZvckVhY2goKGgs'@;
put 'Zik9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KTpBcnJheS5pc0FycmF5KGEpPyhhLmZvckVhY2goKGgsZik9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KSxsLmNvbmZpZz1hKTohMD09PWEmJkFycmF5LmlzQXJyYXkobC5jb25m'@;
put 'aWcpJiZsLmNvbmZpZy5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSl9LCEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCB4aD1jbGFzcyBvSGV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMucm93PWwsdGhpcy5j'@;
put 'b2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlzLnJlbW92ZWQ9ITEsdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT1ffXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xh'@;
put 'cmVkIHdpdGgge3JvdzogJHtsLnJvd30sIGNvbDogJHtsLmNvbH0sXHgyMAogICAgICByb3dzcGFuOiAke2wucm93c3Bhbn0sIGNvbHNwYW46ICR7bC5jb2xzcGFufX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBu'@;
put 'b3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpe3JldHVybiBBYWBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7bC5yb3d9LCAke2wuY29sfV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9uZWQg'@;
put 'cGFydGlhbGx5KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBzZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTChsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93'@;
put 'fSwgJHtsLmNvbH1dIGhhcyBib3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklO'@;
put 'RyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0'@;
put 'aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKGwpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvd3NwYW48MHx8bC5jb2xzcGFuPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtyZXR1cm4gMT09PWwuY29sc3BhbiYmMT09PWwucm93c3Bhbn1zdGF0aWMg'@;
put 'Y29udGFpbnNaZXJvU3BhbihsKXtyZXR1cm4gMD09PWwuY29sc3Bhbnx8MD09PWwucm93c3Bhbn1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4tMT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bh'@;
put 'bi0xPj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlzLmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMu'@;
put 'cm93K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3NwYW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKX1pbmNsdWRlcyhsLGEpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5jb2w8PWEmJnRoaXMucm93K3RoaXMucm93'@;
put 'c3Bhbi0xPj1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRlc0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMucm93K3RoaXMu'@;
put 'cm93c3Bhbi0xPj1sfXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLF89bFswXT8iY29sIjoicm93IixUPU1hdGgubWluKGEsaCksVz1NYXRoLm1heChhLGgpLGllPXRoaXNbX10scGU9dGhp'@;
put 'c1tfXSt0aGlzW2ZdLTE7aWYoaWU+PWEmJih0aGlzW19dKz1kKSxkPjApYTw9cGUmJmE+aWUmJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoVDw9aWUmJlc+PXBlKXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsITE7aWYoaWU+PVQmJmllPD1XKXtjb25zdCB3ZT1XLWllKzEsRWU9TWF0aC5h'@;
put 'YnMoZCktd2U7dGhpc1tfXS09RWUrZCx0aGlzW2ZdLT13ZX1lbHNlIGllPD1UJiZwZT49Vz90aGlzW2ZdKz1kOmllPD1UJiZwZT49VCYmcGU8VyYmKHRoaXNbZl0tPXBlLVQrMSl9cmV0dXJuITB9aXNGYXJ0aGVyKGwsYSl7cmV0dXJuIWx8fCgiZG93biI9PT1hP2wucm93K2wucm93c3Bhbi0x'@;
put 'PHRoaXMucm93K3RoaXMucm93c3Bhbi0xOiJ1cCI9PT1hP2wucm93PnRoaXMucm93OiJyaWdodCI9PT1hP2wuY29sK2wuY29sc3Bhbi0xPHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xOiJsZWZ0Ij09PWE/bC5jb2w+dGhpcy5jb2w6bnVsbCl9Z2V0TGFzdFJvdygpe3JldHVybiB0aGlzLnJvdyt0'@;
put 'aGlzLnJvd3NwYW4tMX1nZXRMYXN0Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xfWdldFJhbmdlKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5'@;
put 'KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRoaXMuZ2V0TGFzdENvbHVtbigpKSl9fTtmdW5jdGlvbiBDeihjLGwsYSxkKXtsP2wucm93PT09YSYmbC5jb2w9PT1kPyhjLnNldEF0dHJpYnV0ZSgicm93c3BhbiIsbC5yb3dzcGFu'@;
put 'LnRvU3RyaW5nKCkpLGMuc2V0QXR0cmlidXRlKCJjb2xzcGFuIixsLmNvbHNwYW4udG9TdHJpbmcoKSkpOihjLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksYy5zdHlsZS5kaXNwbGF5PSJub25lIik6KGMucmVtb3ZlQXR0cmlidXRlKCJy'@;
put 'b3dzcGFuIiksYy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxjLnN0eWxlLmRpc3BsYXk9IiIpfWNsYXNzIFN6e2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxscz1bXSx0aGlzLmhvdD1sLmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXty'@;
put 'ZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0'@;
put 'YWJsZSwgcGxlYXNlXHgyMAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEpe2xldCBoPSExO3JldHVybiBEbih0aGlzLm1lcmdlZENlbGxzLGY9PiEoZi5yb3c8PWwmJmYucm93K2Yucm93c3Bhbi0xPj1sJiZmLmNvbDw9YSYmZi5jb2wrZi5jb2xzcGFuLTE+PWEmJihoPWYsMSkpKSxo'@;
put 'fWdldEJ5UmFuZ2UobCl7bGV0IGQ9ITE7cmV0dXJuIERuKHRoaXMubWVyZ2VkQ2VsbHMsaD0+IShoLnJvdzw9bC5mcm9tLnJvdyYmaC5yb3craC5yb3dzcGFuLTE+PWwudG8ucm93JiZoLmNvbDw9bC5mcm9tLmNvbCYmaC5jb2wraC5jb2xzcGFuLTE+PWwudG8uY29sKXx8KGQ9aCxkKSksZH1n'@;
put 'ZXRXaXRoaW5SYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxscyxoPVtdO2xldCBmPWw7aWYoIWYuaW5jbHVkZXNSYW5nZSl7Y29uc3QgXz10aGlzLmhvdC5fY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhmLmZyb20ucm93LGYuZnJvbS5jb2wpLFQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi50by5yb3csZi50by5jb2wpO2Y9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShfLF8sVCl9cmV0dXJuIERuKGQsXz0+e2NvbnN0IFQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'Xy5yb3csXy5jb2wpLFc9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy5yb3crXy5yb3dzcGFuLTEsXy5jb2wrXy5jb2xzcGFuLTEpLGllPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoVCxULFcpO2E/Zi5vdmVybGFwcyhpZSkmJmgucHVzaChfKTpmLmluY2x1ZGVzUmFuZ2UoaWUpJiZo'@;
put 'LnB1c2goXyl9KSwhIWgubGVuZ3RoJiZofWFkZChsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHMsZD1sLnJvdyxoPWwuY29sLFQ9bmV3IHhoKGQsaCxsLnJvd3NwYW4sbC5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UpLFc9dGhp'@;
put 'cy5nZXQoZCxoKSxpZT10aGlzLmlzT3ZlcmxhcHBpbmcoVCk7cmV0dXJuIFd8fGllPyhHYShTei5JU19PVkVSTEFQUElOR19XQVJOSU5HKFQpKSwhMSk6KHRoaXMuaG90JiZULm5vcm1hbGl6ZSh0aGlzLmhvdCksYS5wdXNoKFQpLFQpfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXJnZWRD'@;
put 'ZWxscyxoPXRoaXMuZ2V0KGwsYSksZj1oP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihoKTotMTtyZXR1cm4hKCFofHwtMT09PWYpJiYoZC5zcGxpY2UoZiwxKSxoKX1jbGVhcigpe2NvbnN0IGE9W10sZD1bXTtEbih0aGlzLm1lcmdlZENlbGxzLGg9Pntjb25zdCBmPXRoaXMuaG90LmdldENl'@;
put 'bGwoaC5yb3csaC5jb2wpO2YmJmEucHVzaChbZix0aGlzLmdldChoLnJvdyxoLmNvbCksaC5yb3csaC5jb2xdKX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsRG4oYSwoaCxmKT0+e3ZvKDAsaC5yb3dzcGFuLTEsXz0+e3ZvKDAsaC5jb2xzcGFuLTEsVD0+e2lmKDAhPT1UfHwwIT09Xyl7'@;
put 'Y29uc3QgVz10aGlzLmhvdC5nZXRDZWxsKGgucm93K18saC5jb2wrVCk7VyYmZC5wdXNoKFtXLG51bGwsbnVsbCxudWxsXSl9fSl9KSxhW2ZdWzFdPW51bGx9KSxEbihhLGg9PntDeiguLi5oKX0pLERuKGQsaD0+e0N6KC4uLmgpfSl9aXNPdmVybGFwcGluZyhsKXtjb25zdCBhPXRoaXMuaG90'@;
put 'Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoMCwwKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crbC5yb3dzcGFuLTEsbC5jb2wrbC5jb2xzcGFuLTEpKTtsZXQgZD0hMTty'@;
put 'ZXR1cm4gRG4odGhpcy5tZXJnZWRDZWxscyxoPT4hdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcygwLDApLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGguY29sKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdytoLnJv'@;
put 'd3NwYW4tMSxoLmNvbCtoLmNvbHNwYW4tMSkpLm92ZXJsYXBzKGEpfHwoZD0hMCwhMSkpLGR9aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO3JldHVybiBkJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoZC5yb3csMSk9PT1sJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk9PT1hfWdldEZpcnN0UmVuZGVyYWJsZUNvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1l'@;
put 'cmdlZENlbGwobCxhKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKTtjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLnJvdywxKSxmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRk'@;
put 'ZW5JbmRleChkLmNvbCwxKTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1zaGlmdENvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPVswLDBdO3N3aXRjaChsKXtjYXNlInJpZ2h0IjpoWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6aFswXS09ZDticmVhaztjYXNlImRvd24i'@;
put 'OmhbMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6aFsxXS09ZH1Ebih0aGlzLm1lcmdlZENlbGxzLGY9PntmLnNoaWZ0KGgsYSl9KSx2ayh0aGlzLm1lcmdlZENlbGxzLmxlbmd0aC0xLDAsZj0+e2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc1tmXTtfJiZfLnJlbW92ZWQmJnRoaXMubWVyZ2VkQ2VsbHMu'@;
put 'c3BsaWNlKHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihfKSwxKX0pfX1jb25zdCBzSGU9U3o7c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksc28uZ2V0U2luZ2xldG9uKCku'@;
put 'cmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IEt5PSJtZXJnZUNlbGxzIixsb2U9bmV3IFdlYWtNYXAsY29lPUt5O2NsYXNzIGZIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tF'@;
put 'WSgpe3JldHVybiBLeX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksbG9lLnNldCh0aGlzLHtsYXN0RGVzaXJlZENvb3JkczpudWxsfSksdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bnVsbCx0aGlzLmF1dG9maWxsQ2Fs'@;
put 'Y3VsYXRpb25zPW51bGwsdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbS3ldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3'@;
put 'IHNIZSh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBjbGFzcyBhSGV7Y29uc3RydWN0b3IobCl7dGhpcy5wbHVnaW49bCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24sdGhpcy5jdXJyZW50RmlsbERhdGE9bnVs'@;
put 'bH1jb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUobCl7aWYobFswXT09PWxbMl0mJmxbMV09PT1sWzNdKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2EmJihsWzJdPWxbMF0rYS5yb3dzcGFuLTEsbFszXT1sWzFdK2EuY29sc3Bhbi0xKX19Z2V0RGly'@;
put 'ZWN0aW9uKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hWzBdPT09bFswXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJkb3duIjphWzJdPT09bFsyXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJ1cCI6YVsxXT09PWxbMV0mJmFbMl09PT1sWzJdPyJyaWdodCI6ImxlZnQiLGR9c25h'@;
put 'cERyYWdBcmVhKGwsYSxkLGgpe2NvbnN0IGY9YS5zbGljZSgwKSxfPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxbVCxXLGllLHBlXT1sLEVlPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMT9pZS1UKzE6cGUtVysxLGl0PV8tTWF0aC5mbG9vcihfL0VlKSpFZSxldD10aGlzLmdldEZh'@;
put 'cnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihldClpZigiZG93biI9PT1kKXtjb25zdCB5dD1ldC5yb3crZXQucm93c3Bhbi1ULWl0O2ZbMl0reXQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1pdDpmWzJdKz1pdD95dDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0'@;
put 'IHl0PWV0LmNvbCtldC5jb2xzcGFuLVctaXQ7ZlszXSt5dD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPWl0OmZbM10rPWl0P3l0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgeXQ9aWUtaXQtZXQucm93KzE7ZlswXSt5dDwwP2ZbMF0rPWl0OmZbMF0tPWl0P3l0OjB9ZWxz'@;
put 'ZSBpZigibGVmdCI9PT1kKXtjb25zdCB5dD1wZS1pdC1ldC5jb2wrMTtmWzFdK3l0PDA/ZlsxXSs9aXQ6ZlsxXS09aXQ/eXQ6MH1yZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTpsLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6'@;
put 'XyxkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOkVlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3VycmVudEZpbGxEYXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLFhsKHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxm'@;
put 'LF8sVF09bCxbVyxpZSxwZSx3ZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtVztjYXNlImRvd24iOnJldHVybiBwZS1fO2Nhc2UibGVmdCI6cmV0dXJuIGYtaWU7Y2FzZSJyaWdodCI6cmV0dXJuIHdlLVQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2Nv'@;
put 'bnN0W2gsZixfLFRdPWwsW1csaWUscGUsd2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybltXLGllLGgtMSxUXTtjYXNlImRvd24iOnJldHVybltfKzEsZixwZSxUXTtjYXNlImxlZnQiOnJldHVybltXLGllLF8sZi0xXTtjYXNlInJpZ2h0IjpyZXR1cm5baCxUKzEscGUsd2VdO2RlZmF1'@;
put 'bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLF8sVCxXXT1sLGllPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMSxwZT1pZT9UOlcsd2U9aWU/ZjpfLEVlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxaZT1pZT9ULWYrMTpXLV8rMSxl'@;
put 'dD1FZS1NYXRoLmZsb29yKEVlL1plKSpaZTtsZXQgeXQ9bnVsbCxFdD1udWxsLFN0PW51bGw7c3dpdGNoKGQpe2Nhc2UidXAiOnl0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLFN0PXBlLWV0KzE7YnJlYWs7Y2FzZSJsZWZ0Ijp5dD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLFN0PXBlLWV0KzE7YnJl'@;
put 'YWs7Y2FzZSJkb3duIjp5dD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixTdD13ZStldC0xO2JyZWFrO2Nhc2UicmlnaHQiOnl0PSJpbmNsdWRlc0hvcml6b250YWxseSIsU3Q9d2UrZXQtMX1yZXR1cm4gRG4oaCxKdD0+e0p0W3l0XShTdCkmJkp0LmlzRmFydGhlcihFdCxkKSYmKEV0PUp0KX0pLEV0'@;
put 'fXJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKXtpZighdGhpcy5jdXJyZW50RmlsbERhdGEpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRSYW5nZUZyb21DaGFuZ2VzKGwpLGQ9dGhpcy5jdXJyZW50RmlsbERhdGEuZm91bmRNZXJnZWRDZWxscyxoPXRoaXMuY3VycmVudEZpbGxEYXRhLmRy'@;
put 'YWdEaXJlY3Rpb24sZj0oaWUscGUpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiBpZS5yb3ctcGU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gaWUucm93K2llLnJvd3NwYW4tMStwZTw9YS50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1cm4gaWUuY29sLXBlPj1hLmZyb20uY29sdW1u'@;
put 'O2Nhc2UicmlnaHQiOnJldHVybiBpZS5jb2wraWUuY29sc3Bhbi0xK3BlPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJldHVybiBudWxsfX07bGV0IF89MCxUPW51bGwsVz0xO2Rve2ZvcihsZXQgaWU9MDtpZTxkLmxlbmd0aDtpZSs9MSl7aWYoVD1kW2llXSxfPVcqdGhpcy5jdXJyZW50RmlsbERh'@;
put 'dGEuY3ljbGVMZW5ndGgsZihULF8pKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6VC5yb3ctXyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wsY29sc3BhbjpULmNvbHNwYW59KTticmVhaztjYXNlImRvd24iOnRoaXMucGx1'@;
put 'Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpULnJvdytfLHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCxjb2xzcGFuOlQuY29sc3Bhbn0pO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46'@;
put 'VC5yb3dzcGFuLGNvbDpULmNvbC1fLGNvbHNwYW46VC5jb2xzcGFufSk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCtfLGNvbHNwYW46VC5jb2xzcGFufSl9aWU9PT1k'@;
put 'Lmxlbmd0aC0xJiYoVys9MSl9fXdoaWxlKGYoVCxfKSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGwpe2NvbnN0IGE9e21p'@;
put 'bjpudWxsLG1heDpudWxsfSxkPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIERuKGwsaD0+e2NvbnN0IGY9aFswXSxfPXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaFsxXSk7KG51bGw9PT1hLm1pbnx8ZjxhLm1pbikmJihhLm1pbj1mKSwobnVsbD09PWEubWF4fHxmPmEubWF4KSYmKGEu'@;
put 'bWF4PWYpLChudWxsPT09ZC5taW58fF88ZC5taW4pJiYoZC5taW49XyksKG51bGw9PT1kLm1heHx8Xz5kLm1heCkmJihkLm1heD1fKX0pLHtmcm9tOntyb3c6YS5taW4sY29sdW1uOmQubWlufSx0bzp7cm93OmEubWF4LGNvbHVtbjpkLm1heH19fWRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9u'@;
put 'cyhsLGEsZCl7Y29uc3QgaD10aGlzLmdldERyYWdBcmVhKGwsYSxkKSxbZixfLFQsV109aCxpZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZixfKSxwZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVCxXKSx3ZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNl'@;
put 'bGxSYW5nZShpZSxpZSxwZSk7cmV0dXJuISF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh3ZSwhMCl9fSh0aGlzKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucz1uZXcgY2xhc3MgY0hle2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5o'@;
put 'b3QsdGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZT0iZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwifXNuYXBEZWx0YShsLGEsZCl7Y29uc3QgaD1hLnRvLF89aC5jb2wrbC5jb2w7bC5yb3c/dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLGgucm93K2wucm93KTpsLmNvbCYm'@;
put 'dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLF8pfWp1bXBPdmVyTWVyZ2VkQ2VsbChsLGEsZCl7bGV0IGg9bC5yb3d8fGwuY29sLGY9bnVsbCxfPW51bGwsVD1udWxsO2wucm93PyhmPWEuaW5jbHVkZXNWZXJ0aWNhbGx5KGQpLF89YS5yb3csVD1hLmdldExhc3RSb3coKSk6bC5jb2wmJihm'@;
put 'PWEuaW5jbHVkZXNIb3Jpem9udGFsbHkoZCksXz1hLmNvbCxUPWEuZ2V0TGFzdENvbHVtbigpKSwwIT09aCYmKGg+MD9mJiZkIT09XyYmKGgrPVQtZCsxKTpmJiZkIT09VCYmKGgtPWQtXysxKSxsLnJvdz9sLnJvdz1oOmwuY29sJiYobC5jb2w9aCkpfWdldFVwZGF0ZWRTZWxlY3Rpb25SYW5n'@;
put 'ZShsLGEpe3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGwuaGlnaGxpZ2h0LGwuZnJvbSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnRvLnJvdythLnJvdyxsLnRvLmNvbCthLmNvbCkpfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBm'@;
put 'PU1hdGgubWluKGRbMF0sZFsyXSksXz1NYXRoLm1pbihkWzFdLGRbM10pLFQ9TWF0aC5tYXgoZFswXSxkWzJdKSxXPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwo'@;
put 'bCxhKSlyZXR1cm47Y29uc3QgcGU9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFwZSlyZXR1cm47Y29uc3Qgd2U9cGUuZ2V0TGFzdFJvdygpLEVlPXBlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9cGUucm93JiZfPD1wZS5jb2wmJlQ+PXdlJiZXPj1F'@;
put 'ZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLnBsdWdpbi5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKHBlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxl'@;
put 'Y3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVz'@;
put 'aCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCBfPTA7XzxhLmxlbmd0aDtfKz0xKWZbX109YVtfXS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJu'@;
put 'ITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5m'@;
put 'dWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX0odGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckluaXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlUcmFuc2Zvcm1TdGFydCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCguLi5hcmd1bWVudHMpfSksdGhp'@;
put 'cy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlUcmFuc2Zvcm1FbmQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUdldENlbGxDb29yZHMo'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVNldFJhbmdlU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGwub25CZWZvcmVTZXRSYW5nZVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlRW5kIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlU2V0UmFuZ2VFbmQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0'@;
put 'aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENlbGxNZXRh'@;
put 'KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3Bv'@;
put 'cnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUF1dG9maWxsUmFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2Rp'@;
put 'ZnlBdXRvZmlsbFJhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGwu'@;
put 'b25BZnRlclJlbW92ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ3JlYXRlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBs'@;
put 'Lm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNoYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bkJlZm9yZURyYXdBcmVhQm9yZGVycyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRyYXdTZWxlY3Rpb24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNz'@;
put 'TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLChhLGQpPT57aWYoIk1lcmdlQ2VsbHMiPT09ZClyZXR1cm4hMX0pLHRoaXMucmVnaXN0ZXJTaG9y'@;
put 'dGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xsZWN0aW9ucygpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LnJlbmRlcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKClbS3ldO3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncyhsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1pZkNocm9tZUZvcmNlUmVwYWludCgpe2lmKCFfTigpKXJldHVybjtjb25zdCBsPVtdO2xl'@;
put 'dCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVhY2goZD0+e2NvbnN0e3JvdzpoLHJvd3NwYW46Zn09ZDtmb3IobGV0IF89aCsxO188aCtmO18rKylhLnB1c2goXyl9KSxhPVsuLi5uZXcgU2V0KGEpXSxhLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5o'@;
put 'b3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkKTt0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKCEwKS5tYXAoZj0+Im1hc3RlciI9PT1mPy5uYW1lP2Y6Zi5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKGY9Pntjb25zdCBfPWYuZ2V0'@;
put 'Um93KGgpO18mJihfLnN0eWxlLmJhY2tncm91bmQ9bjcoXywiYmFja2dyb3VuZENvbG9yIikucmVwbGFjZSgiKSIsIiwgMC45OSkiKSxsLnB1c2goXykpfSl9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bC5mb3JFYWNoKGQ9PntkLnN0eWxlLmJhY2tncm91bmQ9bjcoZCwiYmFj'@;
put 'a2dyb3VuZENvbG9yIikucmVwbGFjZSgiLCAwLjk5KSIsIikiKX0pfSwxKX12YWxpZGF0ZVNldHRpbmcobCl7bGV0IGE9ITA7cmV0dXJuISFsJiYoeGguY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8oR2EoeGguTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCkpLGE9ITEpOnhoLmlzT3V0T2ZC'@;
put 'b3VuZHMobCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KEdhKHhoLklTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKSksYT0hMSk6eGguaXNTaW5nbGVDZWxsKGwpPyhHYSh4aC5JU19TSU5HTEVfQ0VMTChsKSksYT0hMSk6eGguY29udGFpbnNaZXJvU3Bhbihs'@;
put 'KSYmKEdhKHhoLlpFUk9fU1BBTl9XQVJOSU5HKGwpKSxhPSExKSxhKX1nZW5lcmF0ZUZyb21TZXR0aW5ncyhsKXtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBhPVtdO2lmKERuKGwsZD0+e2lmKCF0aGlzLnZhbGlkYXRlU2V0dGluZyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC5fY3Jl'@;
put 'YXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCksZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdytkLnJvd3NwYW4tMSxkLmNvbCtkLmNvbHNwYW4tMSksXz10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGgsaCxmKTt0aGlzLm1lcmdlUmFuZ2UoXywhMCwhMCksdm8oZC5yb3csZC5y'@;
put 'b3crZC5yb3dzcGFuLTEsVD0+e3ZvKGQuY29sLGQuY29sK2QuY29sc3Bhbi0xLFc9PntUPT09ZC5yb3cmJlc9PT1kLmNvbHx8YS5wdXNoKFtULFcsbnVsbF0pfSl9KX0pLDA9PT1hLmxlbmd0aClyZXR1cm47dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChhKX19Y2xlYXJDb2xsZWN0aW9ucygpe3Ro'@;
put 'aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcobCl9dG9nZ2xlTWVyZ2VPblNlbGVjdGlvbigp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudG9nZ2xlTWVyZ2UobCksdGhpcy5ob3Quc2VsZWN0Q2VsbChh'@;
put 'LnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24o'@;
put 'dGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMubWVyZ2VSYW5nZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7'@;
put 'bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVj'@;
put 'dENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNb'@;
put 'Ml07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJvdHRvbUVuZENvcm5lcigpLF89e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNwYW46Zi5jb2wtaC5jb2wrMX0sVD1bXTtsZXQgVz1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJh'@;
put 'bmdlKF8sYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VDZWxscyIsbCxhKSx2bygwLF8ucm93c3Bhbi0xLHBlPT57dm8oMCxfLmNvbHNwYW4tMSx3ZT0+e2xldCBFZT1udWxsO1RbcGVdfHwoVFtwZV09W10pLDA9PT1wZSYmMD09PXdlP0VlPXRoaXMuaG90LmdldFNvdXJjZURh'@;
put 'dGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfLnJvdyksdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihfLmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKF8ucm93K3BlLF8uY29sK3dlLCJoaWRkZW4iLCEwKSxUW3BlXVt3ZV09RWV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKF8u'@;
put 'cm93LF8uY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZChfKXx8KGQ/Vz1bXy5yb3csXy5jb2wsVF06dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoXy5yb3csXy5jb2wsVCx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSksYXx8dGhpcy5pZkNo'@;
put 'cm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1lcmdlQ2VsbHMiLGwsXyxhKSxXKSl9dW5tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD10aGlzLm1lcmdlZENl'@;
put 'bGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShsKTtkJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxEbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5jb2wpLHZvKDAsaC5yb3dzcGFuLTEsZj0+e3ZvKDAsaC5j'@;
put 'b2xzcGFuLTEsXz0+e3RoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrXywiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCtfLCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bhbm5lZCIp'@;
put 'fSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5tZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLmZyb20ucm93LGwuZnJvbS5jb2wpO2Eucm93PT09bC5mcm9tLnJvdyYmYS5j'@;
put 'b2w9PT1sLmZyb20uY29sJiZhLnJvdythLnJvd3NwYW4tMT09PWwudG8ucm93JiZhLmNvbCthLmNvbHNwYW4tMT09PWwudG8uY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhsLGEpLF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsXykpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLF89dGhpcy5ob3QuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZixfKSl9b25BZnRlckluaXQoKXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKHRoaXMuaG90LmdldFNldHRpbmdzKClbS3ldKSx0aGlzLmhvdC5yZW5kZXIoKX1yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e3RoaXMudG9nZ2xlTWVyZ2UodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSksdGhp'@;
put 'cy5ob3QucmVuZGVyKCl9LHJ1bk9ubHlJZjpkPT4hZC5hbHRLZXksZ3JvdXA6Y29lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGNvZSl9b25BZnRlcklzTXVsdGlw'@;
put 'bGVTZWxlY3Rpb24obCl7aWYobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0xKWlmKGQuZnJvbS5yb3c9PT1hW2hdLnJvdyYmZC5mcm9tLmNv'@;
put 'bD09PWFbaF0uY29sJiZkLnRvLnJvdz09PWFbaF0ucm93K2FbaF0ucm93c3Bhbi0xJiZkLnRvLmNvbD09PWFbaF0uY29sK2FbaF0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiBsfW9uTW9kaWZ5VHJhbnNmb3JtU3RhcnQobCl7Y29uc3QgYT1sb2UuZ2V0KHRoaXMpLGQ9dGhpcy5ob3QuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgaD17cm93Omwucm93LGNvbDpsLmNvbH0sZj1udWxsO2NvbnN0IF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5oaWdobGlnaHQucm93LGQuaGlnaGxpZ2h0LmNvbCksVD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoXy5yb3csXy5j'@;
put 'b2wpO2lmKGEubGFzdERlc2lyZWRDb29yZHN8fChhLmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVsbCkpLFQpe2NvbnN0IGllPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQucm93LFQuY29sKSxwZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhULnJvdytULnJvd3NwYW4tMSxULmNvbCtULmNvbHNwYW4tMSk7dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShpZSxpZSxwZSkuaW5jbHVkZXMoYS5sYXN0RGVzaXJlZENvb3Jkcyl8fChhLmxhc3REZXNpcmVkQ29vcmRzPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG51bGwsbnVs'@;
put 'bCkpLGgucm93PWEubGFzdERlc2lyZWRDb29yZHMucm93P2EubGFzdERlc2lyZWRDb29yZHMucm93LV8ucm93Omgucm93LGguY29sPWEubGFzdERlc2lyZWRDb29yZHMuY29sP2EubGFzdERlc2lyZWRDb29yZHMuY29sLV8uY29sOmguY29sLGwucm93PjA/aC5yb3c9VC5yb3crVC5yb3dzcGFu'@;
put 'LTEtXy5yb3crbC5yb3c6bC5yb3c8MCYmKGgucm93PV8ucm93LVQucm93K2wucm93KSxsLmNvbD4wP2guY29sPVQuY29sK1QuY29sc3Bhbi0xLV8uY29sK2wuY29sOmwuY29sPDAmJihoLmNvbD1fLmNvbC1ULmNvbCtsLmNvbCl9Zj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLmhpZ2hs'@;
put 'aWdodC5yb3craC5yb3csZC5oaWdobGlnaHQuY29sK2guY29sKTtjb25zdCBXPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLnJvdyxmLmNvbCk7aWYoVyl7Y29uc3QgaWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKFcucm93LFcu'@;
put 'Y29sKTthLmxhc3REZXNpcmVkQ29vcmRzPWYsaD17cm93OmllLnJvdy1fLnJvdyxjb2w6aWUuY29sLV8uY29sfX0wIT09aC5yb3cmJihsLnJvdz1oLnJvdyksMCE9PWguY29sJiYobC5jb2w9aC5jb2wpfW9uTW9kaWZ5VHJhbnNmb3JtRW5kKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKSxkPVd1KGwpLGg9dGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0VXBkYXRlZFNlbGVjdGlvblJhbmdlKGEsbCk7bGV0IGY9V3UoZCk7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShoLCEwKTtkb3tmPVd1KGQpLHRoaXMu'@;
put 'c2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShhLGQpLERuKF8sVD0+e3RoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLnNuYXBEZWx0YShkLGEsVCl9KX13aGlsZShkLnJvdyE9PWYucm93fHxkLmNvbCE9PWYuY29sKTtsLnJvdz1kLnJvdyxsLmNvbD1kLmNv'@;
put 'bH1vbk1vZGlmeUdldENlbGxDb29yZHMobCxhKXtpZihsPDB8fGE8MClyZXR1cm47Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighZClyZXR1cm47Y29uc3R7cm93OmgsY29sOmYsY29sc3BhbjpfLHJvd3NwYW46VH09ZDtyZXR1cm5baCxmLGgrVC0xLGYr'@;
put 'Xy0xXX1hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gZEhlKGMpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1l'@;
put 'cmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihhLnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShIVil9cmV0dXJuIHRoaXMu'@;
put 'Z2V0VHJhbnNsYXRlZFBocmFzZShGVil9LGNhbGxiYWNrKCl7Yy50b2dnbGVNZXJnZU9uU2VsZWN0aW9uKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFsfHx4aC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNvbDpsWzFdLHJvd3NwYW46bFsyXS1s'@;
put 'WzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJSZW5kZXJlcihsLGEsZCl7Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYSxkKSxmPXVzKGgpP1d1KGgp'@;
put 'OnZvaWQgMDtpZih1cyhmKSl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Xyxjb2x1bW5JbmRleE1hcHBlcjpUfT10aGlzLmhvdCx7cm93OlcsY29sOmllLGNvbHNwYW46cGUscm93c3Bhbjp3ZX09ZixbRWUsWmVdPXRoaXMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShXLHdlLGllLHBl'@;
put 'KSx5dD1FZS1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYSkrMSxFdD1aZS1ULmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZCkrMTtmLnJvdz1fLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLnJvdywxKSxmLmNvbD1ULmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNv'@;
put 'bCwxKSxmLnJvd3NwYW49TWF0aC5taW4oZi5yb3dzcGFuLHl0KSxmLmNvbHNwYW49TWF0aC5taW4oZi5jb2xzcGFuLEV0KX1DeihsLGYsYSxkKX1vbkJlZm9yZVNldFJhbmdlU3RhcnQobCl7aWYodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxs'@;
put 'KGwucm93LGwuY29sKSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5yb3csbC5jb2wpO1tsLnJvdyxsLmNvbF09W2Eucm93LGEuY29sXX19b25CZWZvcmVTZXRSYW5nZUVuZChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5oaWdo'@;
put 'bGlnaHQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5oaWdobGlnaHQucm93LGEuaGlnaGxpZ2h0LmNvbCksYS50bz1sO2xldCBkPSExO2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5'@;
put 'Um93SGVhZGVyKCkpZG97ZD0hMTtmb3IobGV0IGg9MDtoPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtoKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2hdLmdldFJhbmdlKCk7YS5leHBhbmRCeVJhbmdlKF8p'@;
put 'JiYobC5yb3c9YS50by5yb3csbC5jb2w9YS50by5jb2wsZD0hMCl9fXdoaWxlKGQpfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtoJiYoaC5yb3chPT1sfHxoLmNvbCE9PWE/ZC5jb3B5YWJsZT0hMTooZC5yb3dz'@;
put 'cGFuPWgucm93c3BhbixkLmNvbHNwYW49aC5jb2xzcGFuKSl9b25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChs'@;
put 'LGEpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u'@;
put 'LmdldChoLGYpO2lmKHVzKF8pKXtjb25zdCBUPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLnJvdywxKSk7aWYoVDxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PVQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQo'@;
put 'bCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u'@;
put 'Z2V0KGgsZik7aWYodXMoXykpe2NvbnN0IFc9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF8ucm93K18ucm93c3Bhbi0xLC0xKSk7aWYoVz5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9Vyx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRS'@;
put 'b3dFbmQobCxhKX19fW9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpLHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX1tb2RpZnlWaWV3'@;
put 'cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQo'@;
put 'ZixoKTtpZih1cyhfKSl7Y29uc3QgVD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5jb2wsMSkpO2lmKFQ8bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1ULHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0'@;
put 'YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBfPXRoaXMubWVyZ2VkQ2Vs'@;
put 'bHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHVzKF8pKXtjb25zdCBXPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLmNvbCtfLmNvbHNwYW4tMSwtMSkpO2lmKFc+bC5lbmRDb2x1bW4pcmV0dXJuIGwuZW5kQ29sdW1uPVcsdm9pZCB0'@;
put 'aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6X309dGhpcy5ob3Q7bGV0IFQsVztyZXR1cm4gVD0wPT09YT9mLmdldE5lYXJlc3RO'@;
put 'b3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxXPTA9PT1oP18uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6Xy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ'@;
put 'bmRleChUKTpsLGQ+PTA/Xy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFcpOmRdfW9uTW9kaWZ5QXV0b2ZpbGxSYW5nZShsLGEpe3RoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuY29ycmVjdFNlbGVjdGlvbkFyZWFTaXplKGEpO2NvbnN0IGQ9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9u'@;
put 'cy5nZXREaXJlY3Rpb24oYSxsKTtsZXQgaD1sO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGEsaCxkKSlyZXR1cm4gaD1hLGg7Y29uc3QgZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh7ZnJvbTp7cm93'@;
put 'OmFbMF0sY29sOmFbMV19LHRvOntyb3c6YVsyXSxjb2w6YVszXX19KTtyZXR1cm4gZiYmKGg9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEoYSxoLGQsZikpLGh9b25BZnRlckNyZWF0ZUNvbChsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVj'@;
put 'dGlvbnMoInJpZ2h0IixsLGEpfW9uQWZ0ZXJSZW1vdmVDb2wobCxhKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJsZWZ0IixsLGEpfW9uQWZ0ZXJDcmVhdGVSb3cobCxhLGQpeyJhdXRvIiE9PWQmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0'@;
put 'Q29sbGVjdGlvbnMoImRvd24iLGwsYSl9b25BZnRlclJlbW92ZVJvdyhsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixsLGEpfW9uQWZ0ZXJDaGFuZ2UobCxhKXsiQXV0b2ZpbGwuZmlsbCI9PT1hJiZ0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25z'@;
put 'LnJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKX1vbkJlZm9yZURyYXdBcmVhQm9yZGVycyhsLGEpe2lmKGEmJiJhcmVhIj09PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtEbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShk'@;
put 'KSxmPT57ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c9PT1mLmdldExhc3RSb3coKSYmZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1mLmdldExhc3RDb2x1bW4oKSYmKGxbMl09Zi5yb3csbFszXT1mLmNvbCl9KX19b25BZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0KGwsYSxkKXtpZigh'@;
put 'dGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7aWYoIWgpcmV0dXJuO2NvbnN0IGY9YT4wLF89YTwwLFQ9ZDwwLFc9ZD4wLGllPWgucm93K2gucm93c3Bhbi0xPT10aGlzLmhvdC5jb3VudFJvd3MoKS0xLHBlPTA9'@;
put 'PT1oLnJvdyx3ZT1oLmNvbCtoLmNvbHNwYW4tMT09dGhpcy5ob3QuY291bnRDb2xzKCktMTsoZiYmaWV8fF8mJnBlfHxXJiZ3ZXx8VCYmMD09PWguY29sKSYmKGwucm93PWgucm93LGwuY29sPWguY29sKX1vbkFmdGVyRHJhd1NlbGVjdGlvbihsLGEsZCxoKXtpZihkKXJldHVybiB0aGlzLnNl'@;
put 'bGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUobCxhLGQsaCl9b25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgp'@;
put 'fX1mdW5jdGlvbiB1b2UoKXtHYShBYWBQbHVnaW5zIFxgY29sdW1uU29ydGluZ1xgIGFuZCBcYG11bHRpQ29sdW1uU29ydGluZ1xgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS4gCiAgICBPbmx5IFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgd2lsbCB3b3JrLmApfWNvbnN0'@;
put 'IE16PSJtdWx0aUNvbHVtblNvcnRpbmciLGhvZT0iY29sdW1uU29ydGluZyI7SXJlKE16LGZ1bmN0aW9uIHBIZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24gXyhUKXtjb25zdCBXPWNbVF0saWU9bFtUXSxwZT1oW1Rd'@;
put 'LHdlPWZbVF0sRWU9aWUubXVsdGlDb2x1bW5Tb3J0aW5nLGl0PShFZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P0VlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6UnJlKGllLnR5cGUpKShXLGllLEVlKShwZSx3ZSk7aWYoMD09PWl0KXtjb25zdCBldD1UKzE7aWYodHlwZW9mIGxbZXRdPCJ1Iily'@;
put 'ZXR1cm4gXyhldCl9cmV0dXJuIGl0fSgwKX19KTtjbGFzcyBiSGUgZXh0ZW5kcyBQcmV7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE16fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE3MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnBsdWdpbktleT1N'@;
put 'en1pc0VuYWJsZWQoKXtyZXR1cm4gc3VwZXIuaXNFbmFibGVkKCl9ZW5hYmxlUGx1Z2luKCl7IXRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbaG9lXSYmdW9lKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9'@;
put 'ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1zb3J0KGwpe3N1cGVyLnNvcnQobCl9Y2xlYXJTb3J0KCl7c3VwZXIuY2xlYXJTb3J0KCl9aXNTb3J0ZWQoKXtyZXR1cm4gc3VwZXIuaXNTb3J0ZWQoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBzdXBlci5nZXRTb3J0Q29u'@;
put 'ZmlnKGwpfXNldFNvcnRDb25maWcobCl7c3VwZXIuc2V0U29ydENvbmZpZyhsKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpb'@;
put 'bF19dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07c3VwZXIudXBkYXRlSGVhZGVyQ2xhc3NlcyhsLC4uLmQpLFdvKGwsZnVuY3Rpb24gbUhlKGMpe2Nv'@;
put 'bnN0IGw9Yy5jbGFzc05hbWUuc3BsaXQoIiAiKSxhPW5ldyBSZWdFeHAoIl5zb3J0LVswLTldezEsMn0kIik7cmV0dXJuIGwuZmlsdGVyKGQ9PmEudGVzdChkKSl9KGwpKSwhMSE9PXRoaXMuZW5hYmxlZCYmcGkobCxmdW5jdGlvbiBnSGUoYyxsLGEpe2NvbnN0IGQ9W107cmV0dXJuITE9PT1h'@;
put 'fHxjLmlzQ29sdW1uU29ydGVkKGwpJiZjLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpPjEmJmQucHVzaChgc29ydC0ke2MuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpKzF9YCksZH0oLi4uZCkpfW9uVXBkYXRlU2V0dGluZ3MobCl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlz'@;
put 'LnBsdWdpbktleV0mJnRoaXMuaG90LmdldFNldHRpbmdzKClbaG9lXSYmdW9lKCksc3VwZXIub25VcGRhdGVTZXR0aW5ncyhsKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT1naihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wp'@;
put 'JiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCwiYXBwZW5kIikpKTp0aGlzLnNvcnQo'@;
put 'dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1jbGFzcyBDSGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9Y29uc3RydWN0b3Io'@;
put 'bCl7c3VwZXIobCksdGhpcy5kcmFnZ2VkPVtdLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5sYXN0U2V0Q2VsbD1udWxsfWlzRW5hYmxlZCgpe3JldHVybiBtMigpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuZXZlbnRNYW5hZ2VyfHwodGhpcy5ldmVudE1hbmFnZXI9'@;
put 'bmV3IGxsKHRoaXMpKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLHtyb290RWxlbWVudDphfT10aGlzLmhvdDtmdW5jdGlvbiBkKGgpe2lmKDE9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybiBs'@;
put 'LmRyYWdnZWQuc3BsaWNlKDAsbC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgZj1sLmRyYWdnZWQuaW5kZXhPZihoKTtpZigtMT09PWYpcmV0dXJuITE7MD09PWY/bC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgwLDEpOjE9PT1mJiYobC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgtMSkpfXRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hzdGFydCIsaD0+e2xldCBmO3JldHVybiBCbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJ0b3AiKSxsLnRv'@;
put 'dWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOkJvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNl'@;
put 'bGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwfSksdGhp'@;
put 'cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaGVuZCIsaD0+Qm8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTpCbyhoLnRhcmdl'@;
put 'dCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaG1vdmUiLGg9Pntj'@;
put 'b25zdHtyb290RG9jdW1lbnQ6Zn09dGhpcy5ob3Q7bGV0IF8sVCxXLGllLHBlLHdlO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCBFZT1mLmVsZW1lbnRGcm9tUG9pbnQoaC50b3VjaGVzWzBdLmNsaWVudFgsaC50b3VjaGVzWzBdLmNsaWVudFkpOyFFZXx8RWU9PT1sLmxh'@;
put 'c3RTZXRDZWxsfHwoKCJURCI9PT1FZS5ub2RlTmFtZXx8IlRIIj09PUVlLm5vZGVOYW1lKSYmKF89bC5ob3QuZ2V0Q29vcmRzKEVlKSwtMT09PV8uY29sJiYoXy5jb2w9MCksVD1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLFc9VC5nZXRXaWR0aCgpLGllPVQuZ2V0SGVpZ2h0KCkscGU9'@;
put 'VC5nZXREaXJlY3Rpb24oKSwxPT09VyYmMT09PWllJiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoXyksd2U9bC5nZXRDdXJyZW50UmFuZ2VDb29yZHMoVCxfLGwudG91Y2hTdGFydFJhbmdlLmRpcmVjdGlvbixwZSxsLmRyYWdnZWRbMF0pLG51bGwhPT13ZS5zdGFydCYmbC5ob3Quc2Vs'@;
put 'ZWN0aW9uLnNldFJhbmdlU3RhcnQod2Uuc3RhcnQpLGwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZCh3ZS5lbmQpLGwubGFzdFNldENlbGw9RWUpLGgucHJldmVudERlZmF1bHQoKSl9KX1nZXRDdXJyZW50UmFuZ2VDb29yZHMobCxhLGQsaCxmKXtjb25zdCBfPWwuZ2V0VG9wU3RhcnRDb3Ju'@;
put 'ZXIoKSxUPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksVz1sLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCksaWU9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgcGU9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJOVy1TRSI6'@;
put 'cGU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhXLnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3cs'@;
put 'YS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKHBlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhULnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGEucm93LF8uY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/cGU9e3N0YXJ0OmEsZW5kOld9OnBlLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09Zj9wZT17c3RhcnQ6YSxlbmQ6VH06cGUuZW5kPWE7YnJlYWs7Y2FzZSJTRS1O'@;
put 'VyI6InRvcCI9PT1mP3BlPXtzdGFydDphLGVuZDpffTpwZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/cGU9e3N0YXJ0OmEsZW5kOmllfTpwZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6cGU9ImJvdHRvbSI9PT1mP3tzdGFydDp0aGlz'@;
put 'LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFcucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3cs'@;
put 'VC5jb2wpfTticmVhaztjYXNlIlNXLU5FIjpwZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFQuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsQ29vcmRzKGEucm93LF8uY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoXy5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/cGU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGllLmNvbCksZW5kOnRoaXMuaG90Ll9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKX06InRvcCI9PT1mJiYocGU9e3N0YXJ0OlcsZW5kOmF9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRvcCI9PT1mJiYocGUuZW5kPWEpO2JyZWFrO2Nhc2UiU0UtTlci'@;
put 'OiJ0b3AiPT09Zj9wZS5lbmQ9YTpwZT17c3RhcnQ6YSxlbmQ6X319fXJldHVybiBwZX1pc0RyYWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiB4eigpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSEx'@;
put 'LGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46Xz0hMSxpc1Jvb3Q6VD0hMSxpc1BsYWNlaG9sZGVyOlc9ITF9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm57bGFiZWw6Yyxjb2xz'@;
put 'cGFuOmwsb3JpZ0NvbHNwYW46YSxjb2xsYXBzaWJsZTpkLGlzQ29sbGFwc2VkOmYsY3Jvc3NIaWRkZW5Db2x1bW5zOmgsaXNIaWRkZW46Xyxpc1Jvb3Q6VCxpc1BsYWNlaG9sZGVyOld9fWZ1bmN0aW9uIEV6KGMsbCxhKXsoZnVuY3Rpb24gTUhlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MihjLGwpe3JldHVybiBmdW5jdGlvbiB4SGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTps'@;
put 'LnZhbHVlfShjLHBvZShjLGwsImdldCIpKX1mdW5jdGlvbiBYeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIEVIZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkg'@;
put 'cHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscG9lKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBwb2UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5n'@;
put 'ZXQoYyl9Y29uc3QgZ29lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBKZj1uZXcgV2Vha01hcCxWZz1uZXcgV2Vha01hcCxrej1uZXcgV2Vha01hcDtjbGFzcyBrSGV7Y29uc3RydWN0b3IoKXtFeih0aGlzLEpmLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEV6KHRoaXMsVmcse3dyaXRh'@;
put 'YmxlOiEwLHZhbHVlOjB9KSxFeih0aGlzLGt6LHt3cml0YWJsZTohMCx2YWx1ZToxLzB9KX1zZXRDb2x1bW5zTGltaXQobCl7WHkodGhpcyxreixsKX1zZXREYXRhKCl7WHkodGhpcyxKZixmdW5jdGlvbiBTSGUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu'@;
put 'dHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO0RuKGMsaD0+e2NvbnN0IGY9W107bGV0IF89MDthLnB1c2goZiksRG4oaCxUPT57Y29uc3QgVz14eigpO2lmKHVzKFQpKXtjb25zdHtsYWJlbDpwZSxjb2xzcGFuOndlfT1UO1cubGFiZWw9X2wocGUp'@;
put 'LCJudW1iZXIiPT10eXBlb2Ygd2UmJndlPjEmJihXLmNvbHNwYW49d2UsVy5vcmlnQ29sc3Bhbj13ZSl9ZWxzZSBXLmxhYmVsPV9sKFQpO18rPVcub3JpZ0NvbHNwYW47bGV0IGllPSExO2lmKF8+PWwmJihXLmNvbHNwYW49Vy5vcmlnQ29sc3Bhbi0oXy1sKSxXLm9yaWdDb2xzcGFuPVcuY29s'@;
put 'c3BhbixpZT0hMCksZi5wdXNoKFcpLFcuY29sc3Bhbj4xKWZvcihsZXQgcGU9MDtwZTxXLmNvbHNwYW4tMTtwZSsrKWYucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO3JldHVybiFpZX0pfSk7Y29uc3QgZD1NYXRoLm1heCguLi5jcyhhLGg9PmgubGVuZ3RoKSk7cmV0dXJuIERu'@;
put 'KGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9Y3MobmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT54eigpKTtoLnNwbGljZShoLmxlbmd0aCwwLC4uLmYpfX0pLGF9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx3Mih0aGlzLGt6'@;
put 'KSkpLFh5KHRoaXMsVmcsdzIodGhpcyxKZikubGVuZ3RoKX1nZXREYXRhKCl7cmV0dXJuIHcyKHRoaXMsSmYpfW1lcmdlV2l0aChsKXtEbihsLGE9PntsZXR7cm93OmQsY29sOmgsLi4uZn09YTtjb25zdCBfPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoZCxoKTtudWxsIT09XyYmWGwoXyxmLGdv'@;
put 'ZSl9KX1tYXAobCl7RG4odzIodGhpcyxKZiksYT0+e0RuKGEsZD0+e2NvbnN0IGg9bCh7Li4uZH0pO3VzKGgpJiZYbChkLGgsZ29lKX0pfSl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZDtpZihsPj13Mih0aGlzLFZnKXx8bDwwKXJldHVybiBudWxsO2NvbnN0IGg9dzIodGhpcyxKZilb'@;
put 'bF07cmV0dXJuIGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+'@;
put 'PXcyKHRoaXMsVmcpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13Mih0aGlzLEpmKVtsXTtsZXQgXz0wO2ZvcihsZXQgVD1hO1Q8Zi5sZW5ndGg7VCsrKXtjb25zdCBXPWZbVF07aWYoVy5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5u'@;
put 'b3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKF8rPVcuY29sc3BhbixoLnB1c2goVyksVy5jb2xzcGFuPjEmJihUKz1XLmNvbHNwYW4tMSksXz09PWQpYnJlYWs7aWYoXz5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVy'@;
put 'bGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzIodGhpcyxWZyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHcyKHRoaXMsVmcpPjA/dzIodGhpcyxKZilbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtYeSh0aGlzLEpmLFtdKSxYeSh0'@;
put 'aGlzLFZnLDApfX1mdW5jdGlvbiBBeihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gQUhlKGMpe3ZhciBsPWZ1bmN0aW9uIFRIZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh'@;
put 'ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o'@;
put 'Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGJvZT1uZXcgTWFw'@;
put 'KFtbIkRGLXByZS1vcmRlciIsZnVuY3Rpb24gbW9lKGMsbCl7bGV0IGE9Yy5jYWxsKGwsdGhpcyk7Zm9yKGxldCBkPTA7ZDx0aGlzLmNoaWxkcy5sZW5ndGg7ZCsrKXtpZighMT09PWEpcmV0dXJuITE7YT1tb2UuY2FsbCh0aGlzLmNoaWxkc1tkXSxjLGwpfXJldHVybiBhfV0sWyJERi1wb3N0'@;
put 'LW9yZGVyIixmdW5jdGlvbiB2b2UoYyxsKXtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRzLmxlbmd0aDthKyspaWYoITE9PT12b2UuY2FsbCh0aGlzLmNoaWxkc1thXSxjLGwpKXJldHVybiExO3JldHVybiBjLmNhbGwobCx0aGlzKX1dLFsiQkYiLGZ1bmN0aW9uIElIZShjLGwpe2NvbnN0IGE9'@;
put 'W3RoaXNdOyFmdW5jdGlvbiBkKCl7aWYoMD09PWEubGVuZ3RoKXJldHVybjtjb25zdCBoPWEuc2hpZnQoKTthLnB1c2goLi4uaC5jaGlsZHMpLCExIT09Yy5jYWxsKGwsaCkmJmQoKX0oKX1dXSk7Y2xhc3MgSEF7Y29uc3RydWN0b3IobCl7QXoodGhpcywiZGF0YSIse30pLEF6KHRoaXMsInBh'@;
put 'cmVudCIsbnVsbCksQXoodGhpcywiY2hpbGRzIixbXSksdGhpcy5kYXRhPWx9YWRkQ2hpbGQobCl7bC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGwpfWNsb25lVHJlZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0'@;
put 'aGlzO2NvbnN0IGE9bmV3IEhBKHsuLi5sLmRhdGF9KTtmb3IobGV0IGQ9MDtkPGwuY2hpbGRzLmxlbmd0aDtkKyspYS5hZGRDaGlsZCh0aGlzLmNsb25lVHJlZShsLmNoaWxkc1tkXSkpO3JldHVybiBhfXJlcGxhY2VUcmVlV2l0aChsKXt0aGlzLmRhdGE9ey4uLmwuZGF0YX0sdGhpcy5jaGls'@;
put 'ZHM9W107Zm9yKGxldCBhPTA7YTxsLmNoaWxkcy5sZW5ndGg7YSsrKXRoaXMuYWRkQ2hpbGQobC5jaGlsZHNbYV0pfXdhbGtEb3duKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQkYiO2lmKCFib2UuaGFzKGEpKXRocm93'@;
put 'IG5ldyBFcnJvcihgVHJhdmVyc2FsIHN0cmF0ZWd5ICIke2F9IiBkb2VzIG5vdCBleGlzdGApO2JvZS5nZXQoYSkuY2FsbCh0aGlzLGwsdGhpcyl9d2Fsa1VwKGwpe2NvbnN0IGE9dGhpcyxkPWg9PnshMSE9PWwuY2FsbChhLGgpJiZudWxsIT09aC5wYXJlbnQmJmQoaC5wYXJlbnQpfTtkKHRo'@;
put 'aXMpfX1mdW5jdGlvbiBUeihjLGwsYSl7KGZ1bmN0aW9uIE9IZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp'@;
put 'b24gS3UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUEhlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyx5b2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24geW9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHBy'@;
put 'aXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBINz1uZXcgV2Vha01hcCxCZz1uZXcgV2Vha01hcCxONz1uZXcgV2Vha01hcDtjbGFzcyBOSGV7Y29uc3RydWN0b3IobCl7VHoodGhpcyxINyx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLFR6KHRo'@;
put 'aXMsQmcse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxUeih0aGlzLE43LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksZnVuY3Rpb24gRkhlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gSEhlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyx5b2UoYyxsLCJzZXQiKSxhKSxhfSh0aGlzLE43LGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20oS3UodGhpcyxINykudmFsdWVzKCkpfWdldFJv'@;
put 'b3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1cm4gS3UodGhpcyxCZykuaGFzKGwpJiYoYT1LdSh0aGlzLEg3KS5nZXQoS3UodGhpcyxCZykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLUt1KHRoaXMs'@;
put 'QmcpLmdldChhKTtsZXQgXyxmPTA7cmV0dXJuIGQud2Fsa0Rvd24oVD0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOlcsaGVhZGVyTGV2ZWw6aWV9fT1UO2lmKGw9PT1pZSl7aWYoaD49ZiYmaDw9ZitXLTEpcmV0dXJuIF89VCxfLmRhdGEuaXNSb290PWE9PT1fLmRhdGEuY29sdW1uSW5kZXgs'@;
put 'ITE7Zis9V319KSxffXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgbD0wO0t1KHRoaXMsQmcpLmNsZWFyKCksRG4oS3UodGhpcyxINyksYT0+e2xldFsse2RhdGE6e2NvbHNwYW46ZH19XT1hO2ZvcihsZXQgaD1sO2g8bCtkO2grKylLdSh0aGlzLEJnKS5zZXQoaCxsKTtsKz1kfSl9YnVpbGRUcmVl'@;
put 'KCl7dGhpcy5jbGVhcigpO2NvbnN0IGw9S3UodGhpcyxONykuZ2V0Q29sdW1uc0NvdW50KCk7bGV0IGE9MDtmb3IoO2E8bDspe2NvbnN0IGQ9S3UodGhpcyxONykuZ2V0SGVhZGVyU2V0dGluZ3MoMCxhKSxoPW5ldyBIQTtLdSh0aGlzLEg3KS5zZXQoYSxoKSx0aGlzLmJ1aWxkTGVhdmVzKGgs'@;
put 'YSwwLGQub3JpZ0NvbHNwYW4pLGErPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9YnVpbGRMZWF2ZXMobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToxO2NvbnN0IGY9S3UodGhpcyxONykuZ2V0'@;
put 'SGVhZGVyc1NldHRpbmdzKGQsYSxoKTtkKz0xLERuKGYsXz0+e2NvbnN0IFQ9ey4uLl8saGVhZGVyTGV2ZWw6ZC0xLGNvbHVtbkluZGV4OmF9O2xldCBXOzE9PT1kPyhsLmRhdGE9VCxXPWwpOihXPW5ldyBIQShUKSxsLmFkZENoaWxkKFcpKSxkPEt1KHRoaXMsTjcpLmdldExheWVyc0NvdW50'@;
put 'KCkmJnRoaXMuYnVpbGRMZWF2ZXMoVyxhLGQsXy5vcmlnQ29sc3BhbiksYSs9Xy5vcmlnQ29sc3Bhbn0pfWNsZWFyKCl7S3UodGhpcyxINykuY2xlYXIoKSxLdSh0aGlzLEJnKS5jbGVhcigpfX1mdW5jdGlvbiB3b2UoYyxsKXtjLndhbGtEb3duKGE9PntsZXR7ZGF0YTpkLGNoaWxkczpofT1h'@;
put 'O2lmKCFkLmlzSGlkZGVuJiYobChkLmNvbHVtbkluZGV4KSwwPT09aC5sZW5ndGgpKWZvcihsZXQgZj0xO2Y8ZC5jb2xzcGFuO2YrKylsKGQuY29sdW1uSW5kZXgrZil9KX1mdW5jdGlvbiBOQShjLGwpe2xldHtjaGlsZHM6YX09YztpZigwIT09YS5sZW5ndGgpcmV0dXJuIGFbMF0uZGF0YVts'@;
put 'XX1mdW5jdGlvbiBWQShjKXtyZXR1cm4gTkEoYywib3JpZ0NvbHNwYW4iKT09PWMuZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiBEeihjKXtjb25zdHtkYXRhOmwsY2hpbGRzOmF9PWM7aWYoIWwuaXNDb2xsYXBzZWR8fGwuaXNIaWRkZW58fGwub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxi'@;
put 'YWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihWQShjKSlyZXR1cm4gRHooYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCBfPTA7aWYoaC5sZW5ndGg+MClEbihoLFQ9'@;
put 'PntULnJlcGxhY2VUcmVlV2l0aChULmRhdGEuY2xvbmVkVHJlZSksVC5kYXRhLmNsb25lZFRyZWU9bnVsbCxfKz1ULmRhdGEuY29sc3Bhbix3b2UoVCxpZT0+e2YuYWRkKGllKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOlQsb3JpZ0NvbHNwYW46Vyxjb2x1bW5JbmRleDppZX09bDtfPVctVDtm'@;
put 'b3IobGV0IHBlPTE7cGU8VztwZSsrKWYuYWRkKGllK3BlKX1yZXR1cm4gYy53YWxrVXAoVD0+e2NvbnN0e2RhdGE6V309VDtXLmNvbHNwYW4rPV8sVy5jb2xzcGFuPj1XLm9yaWdDb2xzcGFuPyhXLmNvbHNwYW49Vy5vcmlnQ29sc3BhbixXLmlzQ29sbGFwc2VkPSExKTpWQShUKSYmKFcuaXND'@;
put 'b2xsYXBzZWQ9TkEoVCwiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pkx6KGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246X319ZnVuY3Rpb24gTHooYyl7dmFyIGw7Y29uc3R7ZGF0YTphLGNoaWxkczpkfT1jO2lm'@;
put 'KGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihWQShjKSlyZXR1cm4gTHooZFswXSk7YS5pc0NvbGxhcHNlZD0hMDtj'@;
put 'b25zdCBmPWQuc2xpY2UoMSksXz1uZXcgU2V0O2lmKGYubGVuZ3RoPjApRG4oZixXPT57d29lKFcsaWU9PntfLmFkZChpZSl9KSxXLmRhdGEuY2xvbmVkVHJlZT1XLmNsb25lVHJlZSgpLFcud2Fsa0Rvd24oaWU9PntsZXR7ZGF0YTpwZX09aWU7cGUuaXNIaWRkZW49ITB9KX0pO2Vsc2V7Y29u'@;
put 'c3R7b3JpZ0NvbHNwYW46Vyxjb2x1bW5JbmRleDppZX09YTtmb3IobGV0IHBlPTE7cGU8VztwZSsrKV8uYWRkKGllK3BlKX1jb25zdCBUPWEuY29sc3Bhbi0obnVsbCE9PShsPU5BKGMsImNvbHNwYW4iKSkmJnZvaWQgMCE9PWw/bDoxKTtyZXR1cm4gYy53YWxrVXAoVz0+e2NvbnN0e2RhdGE6'@;
put 'aWV9PVc7aWUuY29sc3Bhbi09VCxpZS5jb2xzcGFuPD0xPyhpZS5jb2xzcGFuPTEsaWUuaXNDb2xsYXBzZWQ9ITApOlZBKFcpJiYoaWUuaXNDb2xsYXBzZWQ9TkEoVywiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9PkR6KGMpLGFmZmVjdGVkQ29sdW1uczpBcnJh'@;
put 'eS5mcm9tKF8pLGNvbHNwYW5Db21wZW5zYXRpb246VH19Y29uc3QgQ29lPW5ldyBNYXAoW1siY29sbGFwc2UiLEx6XSxbImV4cGFuZCIsRHpdLFsiaGlkZS1jb2x1bW4iLGZ1bmN0aW9uIFZIZShjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3Nl'@;
put 'ZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoQWFgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwg'@;
put 'dGhlIGhpZGUgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKGEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJl'@;
put 'dHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMucHVzaChsKSxmLmNvbHNwYW4+MT9mLmNvbHNwYW4tPTE6Zi5pc0hpZGRlbj0hMH0pfV0sWyJzaG93LWNvbHVtbiIsZnVuY3Rpb24gQkhlKGMsbCl7aWYoIU51bWJlci5p'@;
put 'c0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihBYWBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24g'@;
put 'dGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgc2hvdyBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoIWEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9'@;
put 'Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMuc3BsaWNlKGYuY3Jvc3NIaWRkZW5Db2x1bW5zLmluZGV4T2YobCksMSksIWYuaXNIaWRkZW4mJmYu'@;
put 'Y29sc3BhbjxmLm9yaWdDb2xzcGFuJiYoZi5jb2xzcGFuKz0xKSxmLmlzSGlkZGVuPSExfSl9XV0pO2Z1bmN0aW9uIEJBKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsYT0+e2Eud2Fsa0Rvd24oZD0+e2NvbnN0IGg9ZC5kYXRhLHtvcmlnQ29sc3BhbjpmLGNvbHVtbkluZGV4Ol8saGVhZGVy'@;
put 'TGV2ZWw6VCxjcm9zc0hpZGRlbkNvbHVtbnM6V309aCxpZT1mdW5jdGlvbiBVSGUoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06KGE9W10sY1tsXT1hKSxhfShsLFQpO2xldCBwZT0hMTtmb3IobGV0IHdlPV87d2U8XytmO3dlKyspaWYoVy5pbmNsdWRlcyh3'@;
put 'ZSl8fHBlKWllLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtlbHNle2NvbnN0IFplPXpIZShoKTtaZS5pc1Jvb3Q9ITAsaWUucHVzaChaZSkscGU9ITB9fSl9KSxsfWZ1bmN0aW9uIHpIZShjKXtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6bCwuLi5hfT14eihjKTtyZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBJeihjLGwsYSl7KGZ1bmN0aW9uIFpIZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24g'@;
put 'SnkoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBZSGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFNvZShj'@;
put 'LGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gVGwoYyxsKXtyZXR1cm4gZnVuY3Rpb24gV0hlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxTb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gU29lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'YXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBFaD1uZXcgV2Vha01hcCxDMT1uZXcgV2Vha01hcCxqZz1uZXcgV2Vha01hcDtjbGFzcyBHSGV7Y29uc3RydWN0b3IoKXtJeih0aGlzLEVoLHt3cml0YWJsZTohMCx2'@;
put 'YWx1ZTpuZXcga0hlfSksSXoodGhpcyxDMSx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE5IZShUbCh0aGlzLEVoKSl9KSxJeih0aGlzLGpnLHt3cml0YWJsZTohMCx2YWx1ZTpbW11dfSl9c2V0U3RhdGUobCl7VGwodGhpcyxFaCkuc2V0RGF0YShsKTtsZXQgYT0hMTt0cnl7VGwodGhpcyxDMSku'@;
put 'YnVpbGRUcmVlKCl9Y2F0Y2h7VGwodGhpcyxDMSkuY2xlYXIoKSxUbCh0aGlzLEVoKS5jbGVhcigpLGE9ITB9cmV0dXJuIEp5KHRoaXMsamcsQkEoVGwodGhpcyxDMSkuZ2V0Um9vdHMoKSkpLGF9c2V0Q29sdW1uc0xpbWl0KGwpe1RsKHRoaXMsRWgpLnNldENvbHVtbnNMaW1pdChsKX1tZXJn'@;
put 'ZVN0YXRlV2l0aChsKXtjb25zdCBhPWNzKGwsZD0+e2xldHtyb3c6aCwuLi5mfT1kO3JldHVybntyb3c6aDwwP3RoaXMucm93Q29vcmRzVG9MZXZlbChoKTpoLC4uLmZ9fSk7VGwodGhpcyxFaCkubWVyZ2VXaXRoKGEpLFRsKHRoaXMsQzEpLmJ1aWxkVHJlZSgpLEp5KHRoaXMsamcsQkEoVGwo'@;
put 'dGhpcyxDMSkuZ2V0Um9vdHMoKSkpfW1hcFN0YXRlKGwpe1RsKHRoaXMsRWgpLm1hcChsKSxUbCh0aGlzLEMxKS5idWlsZFRyZWUoKSxKeSh0aGlzLGpnLEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKX1tYXBOb2RlcyhsKXtyZXR1cm4gQWwoVGwodGhpcyxDMSkuZ2V0Um9vdHMoKSwoYSxk'@;
put 'KT0+KGQud2Fsa0Rvd24oaD0+e2NvbnN0IGY9bChoLmRhdGEpO3ZvaWQgMCE9PWYmJmEucHVzaChmKX0pLGEpLFtdKX10cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLGEsZCl7YTwwJiYoYT10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoYSkpO2NvbnN0IGg9VGwodGhpcyxDMSkuZ2V0Tm9kZShhLGQp'@;
put 'O2xldCBmO3JldHVybiBoJiYoZj1mdW5jdGlvbiBqSGUoYyxsLGEpe2lmKCFDb2UuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9uICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBDb2UuZ2V0KGMpKGwsYSl9KGwsaCxkKSxKeSh0aGlzLGpn'@;
put 'LEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKSksZn10cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGwsYSl7cmV0dXJuIHRoaXMudHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCwtMSxhKX1yb3dDb29yZHNUb0xldmVsKGwpe2lmKGw+PTApcmV0dXJuIG51bGw7Y29uc3QgYT1sK01hdGgubWF4'@;
put 'KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYTwwP251bGw6YX1sZXZlbFRvUm93Q29vcmRzKGwpe2lmKGw8MClyZXR1cm4gbnVsbDtjb25zdCBhPWwtTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPj0wP251bGw6YX1nZXRIZWFkZXJTZXR0aW5ncyhs'@;
put 'LGEpe3ZhciBkLGg7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVsbCE9PShkPW51bGw9PT0oaD1UbCh0aGlzLGpnKVtsXSl8fHZvaWQgMD09PWg/dm9pZCAwOmhbYV0pJiZ2b2lkIDAhPT1k'@;
put 'P2Q6bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxhKXtpZihsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKSlyZXR1cm4gbnVsbDtjb25zdCBkPVRsKHRoaXMsQzEpLmdldE5vZGUobCxhKTtyZXR1cm4gZD97Li4u'@;
put 'ZC5kYXRhfTpudWxsfWZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omh9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMH07aWYoaClyZXR1cm4gYTtsZXQgZj1hLTE7Zm9yKDtmPj0wOyl7'@;
put 'dmFyIF87Y29uc3R7aXNSb290OlR9PW51bGwhPT0oXz10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsZikpJiZ2b2lkIDAhPT1fP186e2lzUm9vdDohMH07aWYoVClicmVhaztmLT0xfXJldHVybiBmfWdldExheWVyc0NvdW50KCl7cmV0dXJuIFRsKHRoaXMsRWgpLmdldExheWVyc0NvdW50KCl9'@;
put 'Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIFRsKHRoaXMsRWgpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7SnkodGhpcyxqZyxbXSksVGwodGhpcyxFaCkuY2xlYXIoKSxUbCh0aGlzLEMxKS5jbGVhcigpfX1mdW5jdGlvbiBReShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gJEhlKGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uIHFIZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGlu'@;
put 'IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIE1vZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gSkhlKGMpe3ZhciBsPWZ1bmN0aW9uIFFIZShjLGwpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs'@;
put 'bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHhvZShjLGwsYSl7KGZ1bmN0aW9uIGVOZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gakEoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB0TmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'ImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLEVvZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gU2woYyxsKXtyZXR1cm4gZnVuY3Rpb24gbk5lKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxFb2UoYyxs'@;
put 'LCJnZXQiKSl9ZnVuY3Rpb24gRW9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IGtvZT0ibmVzdGVkSGVhZGVycyI7dmFyIFFsPW5l'@;
put 'dyBXZWFrTWFwLHM0PW5ldyBXZWFrTWFwO2NsYXNzIGlOZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx4b2UodGhpcyxRbCx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEdIZX0pLHhvZSh0aGlzLHM0LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksTW9lKHRo'@;
put 'aXMsImdob3N0VGFibGUiLG5ldyBjbGFzcyBLSGV7Y29uc3RydWN0b3IobCxhKXtReSh0aGlzLCJob3QiLHZvaWQgMCksUXkodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksUXkodGhpcywibGF5ZXJzQ291bnQiLDApLFF5KHRoaXMsImNvbnRhaW5lciIsdm9pZCAw'@;
put 'KSxReSh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWEsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNN'@;
put 'YXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExheWVyc0NvdW50KGwpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PWwsdGhpc31nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfWJ1aWxkV2lk'@;
put 'dGhzTWFwKCl7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhhbmRzb250YWJsZSIsImh0R2hvc3RUYWJsZSIsImh0QXV0b1NpemUiKSx0aGlzLl9idWlsZEdob3N0VGFibGUodGhp'@;
put 'cy5jb250YWluZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtjb25zdCBsPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlwZSB0aCIpLGE9bC5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtm'@;
put 'b3IobGV0IGQ9MDtkPGE7ZCsrKXtjb25zdCBoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGgpO3RoaXMud2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChmLGxbZF0ub2Zmc2V0V2lk'@;
put 'dGgpfXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGx9X2J1aWxkR2hvc3RUYWJsZShsKXtjb25zdHtyb290RG9jdW1lbnQ6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCxoPWEuY3JlYXRlRG9jdW1l'@;
put 'bnRGcmFnbWVudCgpLGY9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLF89ISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxUPWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtmb3IobGV0IFc9MDtXPHRoaXMubGF5ZXJzQ291bnQ7VysrKXtjb25zdCBpZT1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoInRyIik7Zm9yKGxldCBwZT0wO3BlPFQ7cGUrKyl7bGV0IHdlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChwZSk7bnVsbD09PXdlJiYod2U9cGUpO2NvbnN0IEVlPWEuY3JlYXRlRWxlbWVudCgidGgiKSxaZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVy'@;
put 'KFcsd2UpO2lmKFplJiYoIVplLmlzUGxhY2Vob2xkZXJ8fFplLmlzSGlkZGVuKSl7bGV0IGl0PVplLmxhYmVsO18mJihpdCs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLGdnKEVlLGl0KSxFZS5jb2xTcGFuPVplLmNvbHNwYW4saWUuYXBwZW5kQ2hpbGQoRWUpfX1m'@;
put 'LmFwcGVuZENoaWxkKGllKX1oLmFwcGVuZENoaWxkKGYpLGwuYXBwZW5kQ2hpbGQoaCl9Y2xlYXIoKXt0aGlzLndpZHRoc01hcC5jbGVhcigpLHRoaXMuY29udGFpbmVyPW51bGx9fSh0aGlzLmhvdCwobCxhKT0+dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSksTW9lKHRoaXMsImRldGVj'@;
put 'dGVkT3ZlcmxhcHBlZEhlYWRlcnMiLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ga29lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClba29lXX1lbmFibGVQbHVnaW4oKXt2'@;
put 'YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoYVswXSkpJiZHYShBYWBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBjb25maWd1cmF0'@;
put 'aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dYCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+'@;
put 'dGhpcy5vbkluaXQoKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNl'@;
put 'bGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlck9uQ2VsbE1vdXNlRG93biguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZU92ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGQ9PnRoaXMub25BZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyhkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlD'@;
put 'b2xXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUNvbFdpZHRoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVDb3B5KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKC4uLmFyZ3VtZW50cyl9KSxzdXBlci5lbmFibGVQ'@;
put 'bHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7U2wodGhpcyxRbCkuc2V0Q29sdW1uc0xpbWl0KHRoaXMuaG90LmNvdW50Q29scygpKSxB'@;
put 'cnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPVNsKHRoaXMsUWwpLnNldFN0YXRlKGwpKSx0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJkdhKEFhYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5n'@;
put 'IGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdl'@;
put 'ZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7U2wodGhpcyxRbCkudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIVNsKHRoaXMsczQpJiZ0aGlzLmVuYWJsZWQmJmpBKHRoaXMsczQsdGhpcy5ob3QuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09ic2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29wOmgsaW5kZXg6ZixuZXdWYWx1ZTpffT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IFQ9ITA9PT1fPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1u'@;
put 'IjtTbCh0aGlzLFFsKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKFQsZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVpbGRXaWR0aHNNYXAoKSxzdXBlci51cGRh'@;
put 'dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbHNwYW5zKCksU2wodGhpcyxRbCkuY2xlYXIoKSxTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRl'@;
put 'TWFuYWdlcigpe3JldHVybiBTbCh0aGlzLFFsKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBTbCh0aGlzLFFsKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0dXJuIFNsKHRoaXMsUWwpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lm'@;
put 'KCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxoPWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3Zlcmxh'@;
put 'eXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgXz0wO188YTtfKyspe2NvbnN0IFQ9ZC5jaGlsZE5vZGVzW19dO2lmKCFUKWJyZWFrO2NvbnN0IFc9aC5j'@;
put 'aGlsZE5vZGVzW19dLGllPWY/Zi5jaGlsZE5vZGVzW19dOm51bGw7Zm9yKGxldCBwZT0wLHdlPVQuY2hpbGROb2Rlcy5sZW5ndGg7cGU8d2U7cGUrKylULmNoaWxkTm9kZXNbcGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFQuY2hpbGROb2Rlc1twZV0sImhpZGRlbkhlYWRlciIp'@;
put 'LFcmJlcuY2hpbGROb2Rlc1twZV0mJihXLmNoaWxkTm9kZXNbcGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFcuY2hpbGROb2Rlc1twZV0sImhpZGRlbkhlYWRlciIpKSxmJiZpZSYmaWUuY2hpbGROb2Rlc1twZV0mJihpZS5jaGlsZE5vZGVzW3BlXS5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'ImNvbHNwYW4iKSxXbyhpZS5jaGlsZE5vZGVzW3BlXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuKGgsZik9Pnt2YXIgXztj'@;
put 'b25zdHtjb2x1bW5JbmRleE1hcHBlcjpULHZpZXc6V309dGhpcy5ob3Q7bGV0IGllPVQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxsPT09aWUmJihpZT1oKSxmLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKGYsImhpZGRlbkhlYWRlciIpO2NvbnN0e2NvbHNwYW46'@;
put 'cGUsaXNIaWRkZW46d2UsaXNQbGFjZWhvbGRlcjpFZX09bnVsbCE9PShfPVNsKHRoaXMsUWwpLmdldEhlYWRlclNldHRpbmdzKGwsaWUpKSYmdm9pZCAwIT09Xz9fOntsYWJlbDoiIn07aWYoRWV8fHdlKXBpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYocGU+MSl7dmFyIFplLGl0O2NvbnN0'@;
put 'e3d0T3ZlcmxheXM6ZXR9PVcuX3d0LHl0PW51bGw9PT0oWmU9ZXQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8dm9pZCAwPT09WmU/dm9pZCAwOlplLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksRXQ9bnVsbD09PShpdD1ldC5pbmxpbmVTdGFydE92ZXJsYXkpfHx2b2lk'@;
put 'IDA9PT1pdD92b2lkIDA6aXQuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKSxTdD15dHx8RXQ/TWF0aC5taW4ocGUsZC1oKTpwZTtTdD4xJiZmLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsU3QpfXRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGllLGYsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKX19Z2V0Q29sdW1uSGVhZGVyVmFsdWUobCxhKXt2YXIgZDtjb25zdHtpc0hpZGRlbjpoLGlzUGxhY2Vob2xkZXI6Zn09bnVsbCE9PShkPVNsKHRoaXMsUWwpLmdldEhlYWRlclNldHRpbmdzKGEsbCkpJiZ2b2lkIDAh'@;
put 'PT1kP2Q6e307cmV0dXJuIGZ8fGg/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwsYSl9b25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIobCxhLGQpe2NvbnN0IGg9U2wodGhpcyxRbCkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCk7aWYoIWgpcmV0dXJuIGw7Y29uc3R7Y2xhc3NO'@;
put 'YW1lczpmLGNvbHVtbkN1cnNvcjpfLHNlbGVjdGlvblR5cGU6VCxzZWxlY3Rpb25XaWR0aDpXfT1kLHtpc1Jvb3Q6aWUsY29sc3BhbjpwZX09U2wodGhpcyxRbCkuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKTtpZihUPT09eXkpe2lmKCFpZSlyZXR1cm4gaC5jb2x1bW5JbmRleH1lbHNlIFQ9PT1Q'@;
put 'ayYmKHBlPlctX3x8IWllKSYmKGYubGVuZ3RoPTApO3JldHVybiBsfW9uQmVmb3JlQ29weShsLGEsZCl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpofT1kO2lmKDAhPT1oKWZvcihsZXQgXz0wO188YS5sZW5ndGg7XysrKXtjb25zdHtzdGFydFJvdzpULHN0YXJ0Q29sOlcsZW5kUm93OmllLGVu'@;
put 'ZENvbDpwZX09YVtfXSx3ZT1pZS1UKzE7aWYoVD49MHx8MT09Vy1wZSsxKWJyZWFrO2ZvcihsZXQgWmU9VztaZTw9cGU7WmUrKylmb3IobGV0IGl0PVQ7aXQ8PWllO2l0Kyspe3ZhciBmO2NvbnN0IGV0PXdlK2l0LHl0PVplLVc7MCE9PXl0JiYhMT09PShudWxsPT09KGY9U2wodGhpcyxRbCku'@;
put 'Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGl0LFplKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuaXNSb290KSYmKGxbZXRdW3l0XT0iIil9fX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKSYmKGguY29sdW1uPSEwKX1v'@;
put 'bkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7Y29uc3QgZD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtpZighZClyZXR1cm47Y29uc3R7c2VsZWN0aW9uOmh9PXRoaXMuaG90LGY9aC5pc1NlbGVjdGVkKCk/aC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51'@;
put 'bGwsXz1bXSx7Y29sdW1uSW5kZXg6VCxvcmlnQ29sc3BhbjpXfT1kLGllPSFoLmluSW5TZWxlY3Rpb24oYSk7bC5zaGlmdEtleSYmZj9hLmNvbDxmLmZyb20uY29sP18ucHVzaChmLmdldFRvcEVuZENvcm5lcigpLmNvbCxULGEucm93KTpfLnB1c2goYS5jb2w+Zi5mcm9tLmNvbD9mLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkuY29sOlQsVCtXLTEsYS5yb3cpOihmayhsKXx8VXAobCkmJmllKSYmXy5wdXNoKFQsVCtXLTEsYS5yb3cpLGguc2VsZWN0Q29sdW1ucyguLi5fKX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpKXJl'@;
put 'dHVybjtjb25zdCBmPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGEpO2lmKCFmKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpfLG9yaWdDb2xzcGFuOlR9PWYsVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPVcuZ2V0VG9wU3RhcnRDb3JuZXIoKSxwZT1X'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOndlfT1XO2guY29sdW1uPSEwLGguY2VsbD0hMDtjb25zdCBFZT1bXTthLmNvbDx3ZS5jb2w/RWUucHVzaChwZS5jb2wsXyk6RWUucHVzaChhLmNvbD53ZS5jb2w/aWUuY29sOl8sXytULTEpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoLi4uRWUp'@;
put 'fW9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMobCl7bC5sZW5ndGg9MDtmb3IobGV0IGE9MDthPFNsKHRoaXMsUWwpLmdldExheWVyc0NvdW50KCk7YSsrKWwucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShhKSl9b25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92'@;
put 'ZXJyaWRlKGwpe2NvbnN0IGE9U2wodGhpcyxRbCkuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgZD1sLnN0YXJ0Q29sdW1uLGg9ISFhO2ZvcihsZXQgZj0wO2Y8YTtmKyspe2NvbnN0IF89U2wodGhpcyxRbCkuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoZixsLnN0YXJ0Q29sdW1uKSxUPXRoaXMuaG90'@;
put 'LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyk7aWYoXz49MCYmKGg9ITEpLEd1KFQpJiZUPGwuc3RhcnRDb2x1bW4pe2Q9VDticmVha319bC5zdGFydENvbHVtbj1oP1NsKHRoaXMsUWwpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGQpLmNvbHVtbklu'@;
put 'ZGV4OmR9b25Nb2RpZnlDb2xXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKGEpO3JldHVybiBsPmQ/bDpkfW9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUobCxhLGQpe3ZhciBoO2NvbnN0e2xhYmVsOmZ9PW51bGwhPT0oaD1TbCh0aGlzLFFsKS5nZXRIZWFkZXJU'@;
put 'cmVlTm9kZURhdGEoZCxhKSkmJnZvaWQgMCE9PWg/aDp7bGFiZWw6IiJ9O3JldHVybiBmfW9uSW5pdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9b25BZnRlckxvYWREYXRhKGwsYSl7YXx8dGhpcy51cGRhdGVQbHVnaW4oKX1kZXN0cm95KCl7akEodGhpcyxRbCxudWxsKSxudWxsIT09U2wodGhp'@;
put 'cyxzNCkmJihTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIFNsKHRoaXMsUWwpLmdldEhlYWRlclRyZWVOb2RlRGF0'@;
put 'YShsLnJvdyxsLmNvbCl9fWNvbnN0IFJ6PWNsYXNzIGFOZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWEsdGhpcy5wbHVnaW49bH19O2NsYXNzIFFmIGV4dGVuZHMgUnp7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZl'@;
put 'bHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1'@;
put 'dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1u'@;
put 'dWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksXz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYi'@;
put 'KVswXSxUPV8ucXVlcnlTZWxlY3Rvcigic3Bhbi5yb3dIZWFkZXIiKTtpZihEbihfLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLGllPT57aWUmJl8ucmVtb3ZlQ2hpbGQoaWUpfSkscGkoYSxRZi5DU1NfQ0xBU1NFUy5pbmRpY2F0b3JDb250YWluZXIpLGgpe2Nv'@;
put 'bnN0e3Jvb3REb2N1bWVudDppZX09dGhpcy5ob3QscGU9VC5jbG9uZU5vZGUoITApO18uaW5uZXJIVE1MPSIiLHZvKDAsaC0xLCgpPT57Y29uc3Qgd2U9aWUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO3BpKHdlLFFmLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSxfLmFwcGVuZENoaWxkKHdl'@;
put 'KX0pLF8uYXBwZW5kQ2hpbGQocGUpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikpe2NvbnN0IGllPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtwaShhLFFmLkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRy'@;
put 'ZW5Db2xsYXBzZWQoZCk/cGkoaWUsYCR7UWYuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1FmLkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKTpwaShpZSxgJHtRZi5DU1NfQ0xBU1NFUy5idXR0b259ICR7UWYuQ1NTX0NMQVNTRVMuY29sbGFwc2VCdXR0b259YCksXy5hcHBlbmRDaGlsZChpZSl9'@;
put 'fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhpcy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50KSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9TWF0aC5tYXgoNTAsMTErMTAqYSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IEFvZT1RZixjTmU9Y2xhc3Mg'@;
put 'bE5lIGV4dGVuZHMgUnp7Y29uc3RydWN0b3IobCxhKXt2YXIgZDtzdXBlcihsLGEpLGQ9dGhpcyx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2VkUm93cz1bXSx0aGlzLmNvbGxhcHNlZFJvd3NTdGFzaD17c3Rhc2g6ZnVuY3Rpb24oKXtsZXQg'@;
put 'aD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2QubGFzdENvbGxhcHNlZFJvd3M9ZC5jb2xsYXBzZWRSb3dzLnNsaWNlKDApLGQuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLGgpfSxzaGlmdFN0YXNoOmZ1'@;
put 'bmN0aW9uKGgsZil7bGV0IF89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7bnVsbD09ZiYmKGY9MS8wKSxEbihkLmxhc3RDb2xsYXBzZWRSb3dzLChULFcpPT57VD49aCYmVDxmJiYoZC5sYXN0Q29sbGFwc2VkUm93c1tXXT1UK18pfSl9'@;
put 'LGFwcGx5U3Rhc2g6ZnVuY3Rpb24oKXtkLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pLGQubGFzdENvbGxhcHNlZFJvd3M9dm9pZCAwfSx0cmltU3Rh'@;
put 'c2g6KGgsZik9Pnt2byhoLGgrZi0xLF89Pntjb25zdCBUPXRoaXMubGFzdENvbGxhcHNlZFJvd3MuaW5kZXhPZihfKTtUPi0xJiZ0aGlzLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShULDEpfSl9fX1jb2xsYXBzZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCxfPW51bGwsVD1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLF89dGhpcy5kYXRhTWFu'@;
put 'YWdlci5nZXRSb3dJbmRleChmKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLF89bCksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmRG4oZi5fX2NoaWxkcmVuLFc9PntoLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChXKSl9KSxUPXRoaXMu'@;
put 'Y29sbGFwc2VSb3dzKGgsITAsITEpLGQmJnRoaXMudHJpbVJvd3MoVCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSwtMT09PXRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKF8pJiZ0aGlzLmNvbGxhcHNlZFJvd3MucHVzaChfKSxUfWNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQg'@;
put 'YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO0RuKGwsZj0+e2gucHVzaCguLi50aGlzLmNvbGxhcHNl'@;
put 'Q2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlUm93KGwpe3RoaXMuY29sbGFwc2VSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1j'@;
put 'b2xsYXBzZVJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gRG4obCxmPT57'@;
put 'aC5wdXNoKGYpLGEmJnRoaXMuY29sbGFwc2VDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksaH1jb2xsYXBzZUNoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJkRuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLF89Pntjb25zdCBUPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgo'@;
put 'Xyk7YS5wdXNoKFQpLHRoaXMuY29sbGFwc2VDaGlsZFJvd3MoVCxhKX0pLGgmJnRoaXMudHJpbVJvd3MoYSl9ZXhwYW5kUm93KGwpe3RoaXMuZXhwYW5kUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9ZXhwYW5kUm93'@;
put 'cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBEbihsLGY9PntoLnB1c2goZiks'@;
put 'YSYmdGhpcy5leHBhbmRDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxofWV4cGFuZENoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJkRuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLF89PntpZighdGhpcy5pc0FueVBhcmVudENvbGxhcHNlZChfKSl7Y29uc3QgVD10aGlzLmRh'@;
put 'dGFNYW5hZ2VyLmdldFJvd0luZGV4KF8pO2EucHVzaChUKSx0aGlzLmV4cGFuZENoaWxkUm93cyhULGEpfX0pLGgmJnRoaXMudW50cmltUm93cyhhKX1leHBhbmRDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRz'@;
put 'WzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsXz1udWxsLFQ9bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCxfPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpOihmPXRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxfPWwpLHRoaXMuY29sbGFwc2VkUm93cy5zcGxpY2UodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoXyksMSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmRG4oZi5fX2NoaWxkcmVuLFc9Pntjb25zdCBpZT10aGlzLmRhdGFN'@;
put 'YW5hZ2VyLmdldFJvd0luZGV4KFcpO2gucHVzaChpZSl9KSxUPXRoaXMuZXhwYW5kUm93cyhoLCEwLCExKSxkJiZ0aGlzLnVudHJpbVJvd3MoVCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxUfWV4cGFuZE11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtEbihsLGY9PntoLnB1c2goLi4udGhpcy5leHBhbmRDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0'@;
put 'aGlzLnVudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZUFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtEbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmNvbGxhcHNl'@;
put 'TXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfWV4cGFuZEFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtEbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmV4cGFuZE11bHRp'@;
put 'cGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX10cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX11bnRyaW1Sb3dzKGwpe3RoaXMu'@;
put 'aG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMSl9KX0sITApfWFyZUNoaWxkcmVuQ29sbGFwc2VkKGwpe2xldCBhPWlzTmFOKGwpP2w6dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwp'@;
put 'LGQ9ITA7cmV0dXJuIG51bGw9PT1hJiYoYT17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGEpJiZEbihhLl9fY2hpbGRyZW4saD0+e2NvbnN0IGY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChoKTtpZighdGhpcy5w'@;
put 'bHVnaW4uY29sbGFwc2VkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZikpcmV0dXJuIGQ9ITEsITF9KSxkfWlzQW55UGFyZW50Q29sbGFwc2VkKGwpe2xldCBhPWw7Zm9yKDtudWxsIT09YTspe2E9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYSk7Y29uc3QgZD10aGlzLmRhdGFNYW5h'@;
put 'Z2VyLmdldFJvd0luZGV4KGEpO2lmKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGQpPi0xKXJldHVybiEwfXJldHVybiExfXRvZ2dsZVN0YXRlKGwsYSl7aWYoYS5jb2w+PTApcmV0dXJuO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGEucm93KTtCbyhsLnRhcmdldCxBb2Uu'@;
put 'Q1NTX0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/dGhpcy5leHBhbmRDaGlsZHJlbihkKTp0aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZCksdjIobCkpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCl9dW50'@;
put 'cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1Zpc3VhbFJvdyhsKX1yZW5kZXJBbmRBZGp1c3QoKXt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfX0sVG9lPW5ldyBXZWFrTWFwLGROZT1jbGFzcyB1TmUgZXh0ZW5kcyBS'@;
put 'entjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksVG9lLnNldCh0aGlzLHtyb3dfYWJvdmU6KGQsaCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoaFtoLmxlbmd0aC0xXS5zdGFydC5yb3csImFib3ZlIil9LHJvd19iZWxvdzooZCxoKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2li'@;
put 'bGluZyhoW2gubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYmVsb3ciKX19KSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShu'@;
put 'Qil9LGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaCl9LGRpc2Fi'@;
put 'bGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7'@;
put 'a2V5OiJkZXRhY2hfZnJvbV9wYXJlbnQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJCKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkpfSxkaXNhYmxlZDooKT0+e2NvbnN0'@;
put 'IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpfHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1u'@;
put 'SGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiB2bygwLGwuaXRlbXMubGVuZ3RoLTEsZD0+e2lmKDA9PT1kKXJldHVybiBEbihhLChoLGYpPT57bC5pdGVtcy5zcGxpY2UoZCtm'@;
put 'LDAsaCl9KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe2NvbnN0IGE9VG9lLmdldCh0aGlzKTtyZXR1cm4gdm8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9Pntjb25zdCBoPWFbbC5pdGVtc1tkXS5rZXldO251bGwhPWgm'@;
put 'JihsLml0ZW1zW2RdLmNhbGxiYWNrPWgpfSksbH19O2NsYXNzIGhOZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZGF0YU1hbmFnZXI9bC5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST1sLmNvbGxhcHNpbmdVSX1vbkJlZm9yZVJvd01vdmUo'@;
put 'bCxhLGQsaCl7aWYodGhpcy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe3Jvd3M6bCxmaW5hbEluZGV4OmEsZHJvcEluZGV4OmQsbW92ZVBvc3NpYmxlOmh9KSlyZXR1cm4hMTt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9ITE7Y29uc3QgXz1kPT09dGhpcy5ob3QuY291bnRSb3dzKCks'@;
put 'VD1fP3RoaXMuaG90LmNvdW50U291cmNlUm93cygpOnRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkKTtsZXQgVz0hMDtjb25zdCBpZT1sLm1hcChpdD0+e2lmKCFXKXJldHVybiExO2NvbnN0IGV0PXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhpdCk7'@;
put 'cmV0dXJuIFc9dGhpcy5zaG91bGRBbGxvd01vdmluZyhldCxUKSxldH0pLHBlPS0xPT09aWUuaW5kZXhPZihUKTtpZighV3x8IXBlKXJldHVybiExO2NvbnN0IHdlPXRoaXMuZ2V0QmFzZVBhcmVudChpZSksRWU9dGhpcy5nZXRUYXJnZXRQYXJlbnQoXyxUKSxaZT13ZT09PUVlO3JldHVybiB0'@;
put 'aGlzLm1vdmVkVG9Db2xsYXBzZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoRWUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMoaWUsVCxaZSksdGhpcy5tb3Zl'@;
put 'Um93cyhpZSxULEVlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShpZSxUKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCxo'@;
put 'JiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMobCxkKSwhMX1kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcobCl7Y29uc3R7cm93czphLGZpbmFsSW5kZXg6ZCxkcm9wSW5kZXg6aCxtb3ZlUG9zc2libGU6Zn09bDts'@;
put 'ZXQgXz0hMTtyZXR1cm4gSWEoaCkmJihHYShBYWBTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9kIGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgyMAogICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVk'@;
put 'LiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGEsZCxoLGYsITEpLF89ITApLF99c2hvdWxkQWxsb3dNb3ZpbmcobCxhKXtyZXR1cm4hKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQobCl8fHRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCl8fGw9PT1hfHwwPT09YSl9Z2V0QmFzZVBhcmVudChsKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobFswXSl9Z2V0VGFyZ2V0UGFyZW50KGwsYSl7bGV0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQo'@;
put 'bD9hLTE6YSk7cmV0dXJuIG51bGw9PWQmJihkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEtMSkpLGR9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMobCxhLGQpe2R8fChNYXRoLm1heCguLi5sKTw9YT90aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gu'@;
put 'c2hpZnRTdGFzaChsWzBdLGEsLTEqbC5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbFswXSxsLmxlbmd0aCkpfW1vdmVSb3dzKGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGQpK3RoaXMuZGF0'@;
put 'YU1hbmFnZXIuY291bnRDaGlsZHJlbihkKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57bC5mb3JFYWNoKGY9Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVSb3coZixhLHRoaXMubW92ZWRUb0NvbGxhcHNlZCxoKX0pfSl9bW92ZUNlbGxzTWV0YShsLGEpe2NvbnN0IGQ9W10saD1NYXRoLm1h'@;
put 'eCguLi5sKTxhO2wuZm9yRWFjaChmPT57ZC5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3coZikpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGxbMF0sbC5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhLShoP2QubGVuZ3RoOjApLDAsLi4uZCl9c2VsZWN0Q2VsbHMo'@;
put 'bCxhKXtjb25zdCBkPWwubGVuZ3RoO2xldCBoPTAsZj0wLF89bnVsbCxUPW51bGw7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgVz1udWxsO1c9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2EtZDphKTtjb25zdCBpZT10aGlzLmRhdGFNYW5hZ2Vy'@;
put 'LmdldFJvd1BhcmVudChudWxsPT09Vz90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xOlctMSkscGU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChpZSk7aD10aGlzLmRhdGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhwZSksZj1ofWVsc2UgbFtkLTFdPGE/KGY9YS0xLGg9'@;
put 'Zi1kKzEpOihoPWEsZj1oK2QtMSk7Xz10aGlzLmhvdC5zZWxlY3Rpb24sVD10aGlzLmhvdC5jb3VudENvbHMoKS0xLF8uc2V0UmFuZ2VTdGFydCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLDApKSxfLnNldFJhbmdlRW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsVCksITAp'@;
put 'fWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9fWNvbnN0IE96PSJuZXN0ZWRSb3dzIixlMz1uZXcgV2Vha01hcDtjbGFzcyBnTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gT3p9c3RhdGljIGdldCBQTFVHSU5f'@;
put 'UFJJT1JJVFkoKXtyZXR1cm4gMzAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZGF0YU1hbmFnZXI9bnVsbCx0aGlzLmhlYWRlcnNVST1udWxsLHRoaXMuY29sbGFwc2VkUm93c01hcD1udWxsLGUzLnNldCh0aGlzLHttb3ZlZFRvQ29sbGFwc2VkOiExLHNraXBSZW5kZXI6bnVsbCxz'@;
put 'a2lwQ29yZUFQSU1vZGlmaWVyczohMX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbGxhcHNlZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0'@;
put 'ZXJNYXAoIm5lc3RlZFJvd3MiLG5ldyBteSksdGhpcy5kYXRhTWFuYWdlcj1uZXcgY2xhc3Mgb05le2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9YSx0aGlzLmRhdGE9bnVsbCx0aGlzLnBsdWdpbj1sLHRoaXMucGFyZW50UmVmZXJlbmNlPW5ldyBXZWFrTWFwLHRoaXMuY2FjaGU9e2xldmVs'@;
put 'czpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH19c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2Rp'@;
put 'ZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10s'@;
put 'bGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LHZvKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVs'@;
put 'c1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhp'@;
put 'cy5oYXNDaGlsZHJlbihsKSYmRG4obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSxfPWE7aWYoaXNOYU4o'@;
put 'XykmJl8uZW5kKXJldHVybiBfO2xldCBUPWw7cmV0dXJuIFR8fChUPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCxfLT0xKSxudWxsIT1kJiZfPT09ZD97cmVzdWx0OlQsZW5kOiEwfTpudWxsIT1oJiZUPT09aD97cmVzdWx0Ol8sZW5kOiEwfTooXys9MSxULl9fY2hpbGRyZW4mJkRuKFQu'@;
put 'X19jaGlsZHJlbixXPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KFcsZj9udWxsOlQpLF89dGhpcy5yZWFkVHJlZU5vZGVzKFcsXyxkLGgpLGlzTmFOKF8pJiZfLmVuZClyZXR1cm4hMX0pLF8pfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2No'@;
put 'aWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gZHModGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdp'@;
put 'dGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXty'@;
put 'ZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oRG4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGgu'@;
put 'X19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJu'@;
put 'IGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdl'@;
put 'dFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxk'@;
put 'cmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1'@;
put 'cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9'@;
put 'YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7'@;
put 'bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3QgXz10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoXywxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLF8sMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2Nr'@;
put 'Tm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBUPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLFQsMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdy'@;
put 'aXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIp'@;
put 'LHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVCwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixULDEpLGY9VH1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJz'@;
put 'KCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhp'@;
put 'cy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZy'@;
put 'b21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyh2byhsWzBdLGxbMl0sRWU9Pntjb25zdCBaZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3co'@;
put 'RWUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoWmUpKX0pLHZvKDAsaC5sZW5ndGgtMixFZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW0VlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksXz10aGlzLmNvdW50Q2hpbGRyZW4oZCks'@;
put 'VD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLFc9dGhpcy5nZXRSb3dQYXJlbnQoZCksaWU9dGhpcy5nZXRSb3dQYXJlbnQoVykscGU9dGhpcy5nZXRSb3dJbmRleChpZSk7bGV0IHdlPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURldGFjaENoaWxkIixXLGQpLG51'@;
put 'bGwhPVQpe2NvbnN0IEVlPUFycmF5LmZyb20obmV3IEFycmF5KGYrXysxKS5rZXlzKCkpLnNwbGljZSgtMSooXysxKSk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsZixfKzEsRWUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksVy5fX2NoaWxkcmVuLnNwbGljZShULDEp'@;
put 'LHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixmLF8rMSxFZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxpZSl7d2U9cGUrdGhpcy5jb3VudENoaWxkcmVuKGllKTtjb25zdCBaZT10aGlzLmdldENoaWxkKGllLHRoaXMuY291bnRDaGlsZHJl'@;
put 'bihpZSktMSksaXQ9dGhpcy5nZXRSb3dJbmRleChaZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsaXQrMSxfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksaWUuX19jaGlsZHJlbi5wdXNoKGQpfWVsc2Ugd2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93Iix3ZS0yLF8rMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChkKX10aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsd2UtMixfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLFcsZCx0aGlzLmdldFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5yZW5kZXIoKX1maWx0ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO0RuKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksRG4oaCxmPT57Y29u'@;
put 'c3QgXz10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLFQ9dGhpcy5nZXRSb3dQYXJlbnQoZik7bnVsbD09PVQ/dGhpcy5kYXRhLnNwbGljZShfLDEpOlQuX19jaGlsZHJlbi5zcGxpY2UoXywxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10'@;
put 'aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLF89bDtoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhmPWgsXz0wKTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLF89dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVu'@;
put 'dChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UoXyxhLC4uLmQpOmYuX19jaGlsZHJlbi5zcGxpY2UoXyxhKTpkP3RoaXMuZGF0YS5zcGxpY2UoXyxhLC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UoXyxhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBh'@;
put 'PWwsZD1udWxsO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQpfXdoaWxlKG51bGwhPT1kKTt0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleChhKSwiX19jaGlsZHJl'@;
put 'biIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRoUmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksXz10aGlzLmdldFJvd1BhcmVudChsKSxUPXRo'@;
put 'aXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksVz1fLl9fY2hpbGRyZW4uc2xpY2UoVCxUKzEpLGllPWw+YTtsZXQgcGU9dGhpcy5nZXRSb3dQYXJlbnQoZj9hLTE6YSk7bnVsbD09cGUmJihwZT10aGlzLmdldFJvd1BhcmVudChhLTEpKSxudWxsPT1wZSYmKHBlPXRoaXMuZ2V0RGF0YU9i'@;
put 'amVjdChhLTEpKSxwZT9wZS5fX2NoaWxkcmVufHwocGUuX19jaGlsZHJlbj1bXSk6KHBlPXRoaXMuZ2V0RGF0YU9iamVjdChhKSxwZS5fX2NoaWxkcmVuPVtdKTtjb25zdCB3ZT1mfHxkfHxoP3BlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksRWU9'@;
put 'Xz09PXBlO3BlLl9fY2hpbGRyZW4uc3BsaWNlKHdlLDAsV1swXSksXy5fX2NoaWxkcmVuLnNwbGljZShUKyhpZSYmRWU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKF8pLEVlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHBlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3Jl'@;
put 'dHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50'@;
put 'cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fSh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgY05lKHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBBb2UodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyBkTmUodGhpcyx0aGlzLmhvdCksdGhp'@;
put 'cy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgaE5lKHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJbml0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVWaWV3UmVuZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0RhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bk1vZGlmeVNvdXJjZUxlbmd0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRGF0YVNwbGljZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJmaWx0ZXJEYXRhIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBsLm9uRmlsdGVyRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0'@;
put 'ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRz'@;
put 'KX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1l'@;
put 'bnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVBZGRDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckFkZENoaWxkIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJBZGRDaGlsZCguLi5hcmd1bWVu'@;
put 'dHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURldGFjaENoaWxkKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRldGFjaENoaWxk'@;
put 'KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25B'@;
put 'ZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUm93TW92ZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsYT0+dGhpcy5vbkJlZm9yZUxvYWREYXRh'@;
put 'KGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PnRoaXMub25CZWZvcmVMb2FkRGF0YShhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIiksc3VwZXIuZGlz'@;
put 'YWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpO2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGwpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfW9uQmVm'@;
put 'b3JlUm93TW92ZShsLGEsZCxoKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtlMy5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITB9ZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpe2Uz'@;
put 'LmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycz0hMX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUobCxhLGQpfW9uTW9kaWZ5Um93RGF0YShsKXtpZighZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVy'@;
put 'biB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0'@;
put 'dXJuISghZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShsLGEsZCksMSkpfW9uRmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1lMy5nZXQodGhpcyk7cmV0'@;
put 'dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goZFswXSxhKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChkWzBdLG51bGwsLTEq'@;
put 'YSksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGwsYSxkKSxoLnNraXBSZW5kZXI9ITAsdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMo'@;
put 'bCl9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpfW9uTW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyc1VJLnJvd0hlYWRlcldpZHRoQ2FjaGV8fGx9b25BZnRlclJlbW92ZVJvdyhsLGEsZCxo'@;
put 'KXtpZihoPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBmPWUzLmdldCh0aGlzKTtzZXRUaW1lb3V0KCgpPT57Zi5za2lwUmVuZGVyPW51bGwsdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBw'@;
put 'bHlTdGFzaCgpfSwwKX1vbkJlZm9yZVJlbW92ZVJvdyhsLGEsZCl7Y29uc3QgaD1BcnJheS5mcm9tKGQucmVkdWNlKChmLF8pPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChfKSl7Y29uc3QgVD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoXykuX19jaGlsZHJlbjtyZXR1'@;
put 'cm4gZi5hZGQoXyksQXJyYXkuaXNBcnJheShUKSYmVC5mb3JFYWNoKFc9PmYuYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoVykpKSxmfXJldHVybiBmLmFkZChfKX0sbmV3IFNldCkpO2QubGVuZ3RoPTAsZC5wdXNoKC4uLmgpfW9uQmVmb3JlQWRkQ2hpbGQoKXt0aGlzLmNvbGxh'@;
put 'cHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1vbkFmdGVyQWRkQ2hpbGQobCxhKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGEpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRS'@;
put 'b3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25CZWZvcmVEZXRhY2hDaGlsZCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfW9uQWZ0ZXJEZXRhY2hDaGlsZChsLGEsZCl7dGhpcy5jb2xsYXBz'@;
put 'aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goZCxudWxsLC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25BZnRlckNyZWF0ZVJvdygpe3RoaXMuZGF0YU1h'@;
put 'bmFnZXIucmV3cml0ZUNhY2hlKCl9b25BZnRlckluaXQoKXtjb25zdCBsPU1hdGgubWF4KC4uLnRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxzKTtsPjAmJnRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpfW9uQmVmb3JlVmlld1JlbmRlcihsLGEpe2UzLmdldCh0aGlz'@;
put 'KS5za2lwUmVuZGVyJiYoYS5za2lwUmVuZGVyPSEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfW9uQmVmb3JlTG9hZERhdGEobCl7aWYoIW1uZShsKSlyZXR1cm4gU04oIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQg'@;
put 'dG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPel09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEobCksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX19'@;
put 'c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IERvZT0icGVy'@;
put 'c2lzdGVudFN0YXRlIjtjbGFzcyBiTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRG9lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5zdG9yYWdlPXZvaWQgMH1pc0VuYWJsZWQoKXty'@;
put 'ZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRG9lXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnN0b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IGNsYXNzIG1OZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3RoaXMucm9vdFdpbmRvdz1hLHRoaXMucHJlZml4PWwsdGhpcy5zYXZlZEtleXM9W10sdGhpcy5sb2FkU2F2ZWRLZXlzKCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV8k'@;
put 'e2x9YCxKU09OLnN0cmluZ2lmeShhKSksLTE9PT10aGlzLnNhdmVkS2V5cy5pbmRleE9mKGwpJiYodGhpcy5zYXZlZEtleXMucHVzaChsKSx0aGlzLnNhdmVTYXZlZEtleXMoKSl9bG9hZFZhbHVlKGwsYSl7Y29uc3QgaD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7'@;
put 'dGhpcy5wcmVmaXh9XyR7dHlwZW9mIGw+InUiP2E6bH1gKTtyZXR1cm4gbnVsbD09PWg/dm9pZCAwOkpTT04ucGFyc2UoaCl9cmVzZXQobCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCl9cmVzZXRBbGwoKXtEbih0aGlzLnNh'@;
put 'dmVkS2V5cywobCxhKT0+e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHt0aGlzLnNhdmVkS2V5c1thXX1gKX0pLHRoaXMuY2xlYXJTYXZlZEtleXMoKX1sb2FkU2F2ZWRLZXlzKCl7Y29uc3QgbD10aGlzLnJvb3RXaW5kb3cubG9jYWxT'@;
put 'dG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCksYT0ic3RyaW5nIj09dHlwZW9mIGw/SlNPTi5wYXJzZShsKTp2b2lkIDA7dGhpcy5zYXZlZEtleXM9YXx8W119c2F2ZVNhdmVkS2V5cygpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0'@;
put 'SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgLEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWRLZXlzKSl9Y2xlYXJTYXZlZEtleXMoKXt0aGlzLnNhdmVkS2V5cy5sZW5ndGg9MCx0aGlzLnNhdmVTYXZlZEtleXMoKX19KHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLHRo'@;
put 'aXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLChsLGEpPT50aGlzLnNhdmVWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLChsLGEpPT50aGlzLmxvYWRWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNp'@;
put 'c3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZhbHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFi'@;
put 'bGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1sb2FkVmFsdWUobCxhKXthLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUobCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShsLGEpfXJlc2V0VmFsdWUobCl7dHlwZW9mIGw+InUiP3RoaXMuc3RvcmFnZS5y'@;
put 'ZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChsKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBQej0ic2VhcmNoIixDTmU9ZnVuY3Rpb24oYyxsLGEsZCxoKXtjLmdldENlbGxNZXRhKGwsYSkuaXNTZWFyY2hSZXN1bHQ9aH0sU05lPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4h'@;
put 'KElhKGMpfHxudWxsPT09Y3x8IWMudG9Mb2NhbGVMb3dlckNhc2V8fDA9PT1jLmxlbmd0aHx8SWEobCl8fG51bGw9PT1sKSYmLTEhPT1sLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpLmluZGV4T2YoYy50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkpfTtjbGFzcyBN'@;
put 'TmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUHp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuY2FsbGJhY2s9Q05lLHRoaXMucXVlcnlNZXRob2Q9U05lLHRoaXMuc2VhcmNoUmVz'@;
put 'dWx0Q2xhc3M9Imh0U2VhcmNoUmVzdWx0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQel07dGhpcy51cGRh'@;
put 'dGVQbHVnaW5TZXR0aW5ncyhhKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVuZGVyZXIoLi4uYXJndW1lbnRzKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbD10aGlzO2NvbnN0IGE9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixh'@;
put 'KX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt'@;
put 'ZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCksZj10aGlzLmhvdC5jb3VudENvbHMoKSxfPVtdLFQ9'@;
put 'dGhpcy5ob3Q7cmV0dXJuIHZvKDAsaC0xLFc9Pnt2bygwLGYtMSxpZT0+e2NvbnN0IHBlPXRoaXMuaG90LmdldERhdGFBdENlbGwoVyxpZSksd2U9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoVyxpZSksRWU9d2Uuc2VhcmNoLmNhbGxiYWNrfHxhLGl0PSh3ZS5zZWFyY2gucXVlcnlNZXRob2R8fGQp'@;
put 'KGwscGUsd2UpO2l0JiZfLnB1c2goe3JvdzpXLGNvbDppZSxkYXRhOnBlfSksRWUmJkVlKFQsVyxpZSxwZSxpdCl9KX0pLF99Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhp'@;
put 'cy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZChsKXt0aGlzLnF1ZXJ5TWV0aG9kPWx9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFyY2hSZXN1bHRDbGFzcyhsKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWx9dXBkYXRlUGx1Z2lu'@;
put 'U2V0dGluZ3MobCl7dXMobCkmJihsLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGwuc2VhcmNoUmVzdWx0Q2xhc3MpLGwucXVlcnlNZXRob2QmJnRoaXMuc2V0UXVlcnlNZXRob2QobC5xdWVyeU1ldGhvZCksbC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFj'@;
put 'ayhsLmNhbGxiYWNrKSl9b25CZWZvcmVSZW5kZXJlcihsLGEsZCxoLGYsXyl7Y29uc3QgVD1fLmNsYXNzTmFtZXx8W107bGV0IFc9W107InN0cmluZyI9PXR5cGVvZiBUP1c9VC5zcGxpdCgiICIpOlcucHVzaCguLi5UKSx0aGlzLmlzRW5hYmxlZCgpJiZfLmlzU2VhcmNoUmVzdWx0P1cuaW5j'@;
put 'bHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fFcucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOlcuaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJlcuc3BsaWNlKFcuaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxfLmNsYXNzTmFtZT1XLmpv'@;
put 'aW4oIiAiKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jbGFzcyBrTmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idG91Y2hTY3JvbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygp'@;
put 'e3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuc2Nyb2xsYmFycz1bXSx0aGlzLmNsb25lcz1bXSx0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsdGhpcy5mcmVlemVPdmVybGF5cz0hMX1pc0VuYWJsZWQoKXtyZXR1cm4gSE4oKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJs'@;
put 'ZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PnRoaXMub25BZnRlclZpZXdSZW5kZXIoKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3VwZXIudXBkYXRlUGx1'@;
put 'Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT50aGlzLm9uQmVmb3JlVG91Y2hTY3JvbGwoKSksdGhpcy5hZGRIb29rKCJhZnRlck1vbWVudHVtU2Nyb2xsIiwoKT0+'@;
put 'dGhpcy5vbkFmdGVyTW9tZW50dW1TY3JvbGwoKSl9b25BZnRlclZpZXdSZW5kZXIoKXtpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6bCxib3R0b21PdmVybGF5OmEsaW5saW5lU3RhcnRPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5'@;
put 'OmgsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmZ9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChsKSxhLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMu'@;
put 'cHVzaChhKSx0aGlzLnNjcm9sbGJhcnMucHVzaChkKSxoJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSxmJiZmLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChmKSx0aGlzLmNsb25lcz1bXSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZSksYS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGQubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZ0aGlzLmNs'@;
put 'b25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksZiYmZi5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChmLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfW9uQmVmb3JlVG91Y2hTY3JvbGwoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSEwLERuKHRoaXMuY2xv'@;
put 'bmVzLGw9PntwaShsLCJoaWRlLXR3ZWVuIil9KX1vbkFmdGVyTW9tZW50dW1TY3JvbGwoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSExLERuKHRoaXMuY2xvbmVzLGw9PntXbyhsLCJoaWRlLXR3ZWVuIikscGkobCwic2hvdy10d2VlbiIpfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+'@;
put 'e0RuKHRoaXMuY2xvbmVzLGw9PntXbyhsLCJzaG93LXR3ZWVuIil9KX0sNDAwKSxEbih0aGlzLnNjcm9sbGJhcnMsbD0+e2wucmVmcmVzaCgpLGwucmVzZXRGaXhlZFBvc2l0aW9uKCl9KSx0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCl9fWNvbnN0'@;
put 'IHpBPSJ0cmltUm93cyI7Y2xhc3MgVE5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHpBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnRyaW1tZWRSb3dzTWFwPW51bGx9aXNFbmFi'@;
put 'bGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IG15KSx0aGlzLnRyaW1tZWRSb3dzTWFw'@;
put 'LmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekFdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhp'@;
put 'cy50cmltbWVkUm93c01hcC5jbGVhcigpLERuKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJv'@;
put 'd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7'@;
put 'ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxfPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgo'@;
put 'XywhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudHJp'@;
put 'bVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLF89bC5sZW5ndGg+MDtkJiZfJiYoRG4obCxXPT57ZltX'@;
put 'XT0hMX0pLGg9QWwoZiwoVyxpZSxwZSk9PihpZSYmVy5wdXNoKHBlKSxXKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJl8pJiYoZCYmXyYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy'@;
put 'VW50cmltUm93IixhLGgsZCYmXyxkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmltUm93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJu'@;
put 'IHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+'@;
put 'TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1vbk1hcEluaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekFdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0'@;
put 'SW5kZXgoYSwhMCl9KX0sITApfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHRvKGMpe2NvbnN0IGw9dGhpczt0aGlzLmluc3RhbmNlPWMsdGhpcy5kb25lQWN0aW9ucz1bXSx0aGlzLnVuZG9uZUFjdGlvbnM9W10sdGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZW5h'@;
put 'YmxlZD0hMSxjLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbihhLGQpe2NvbnN0IGg9YSYmYS5sZW5ndGg7aCYmYS5maW5kKFQ9Pntjb25zdFssLFcsaWVdPVQ7cmV0dXJuIFchPT1pZX0pJiZsLmRvbmUoKCk9Pntjb25zdCBUPWEucmVkdWNlKChpZSxwZSk9PihpZS5wdXNoKFsuLi5w'@;
put 'ZV0pLGllKSxbXSk7RG4oVCxpZT0+e2llWzFdPWMucHJvcFRvQ29sKGllWzFdKX0pO2NvbnN0IFc9aD4xP3RoaXMuZ2V0U2VsZWN0ZWQoKTpbW1RbMF1bMF0sVFswXVsxXV1dO3JldHVybiBuZXcgdG8uQ2hhbmdlQWN0aW9uKFQsVyl9LGQpfSksYy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIs'@;
put 'KGEsZCxoKT0+e2wuZG9uZSgoKT0+bmV3IHRvLkNyZWF0ZVJvd0FjdGlvbihhLGQpLGgpfSksYy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLChhLGQsaCxmKT0+e2wuZG9uZSgoKT0+e2NvbnN0IFQ9Yy50b1BoeXNpY2FsUm93KGEpLFc9eXUobC5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhKFQs'@;
put 'MCxUK2QtMSxsLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IHRvLlJlbW92ZVJvd0FjdGlvbihULFcsYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSxjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLGMucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1Nl'@;
put 'cXVlbmNlKCkpfSxmKX0pLGMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PntsLmRvbmUoKCk9Pm5ldyB0by5DcmVhdGVDb2x1bW5BY3Rpb24oYSxkKSxoKX0pLGMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwoYSxkLGgsZik9PntsLmRvbmUoKCk9Pntjb25zdCBUPWwuaW5z'@;
put 'dGFuY2UuZ2V0U291cmNlRGF0YUFycmF5KCksVz0obC5pbnN0YW5jZS5jb3VudENvbHMoKSthKSVsLmluc3RhbmNlLmNvdW50Q29scygpLGllPVtdLHBlPVtdLHdlPVtdO3ZvKFQubGVuZ3RoLTEsaXQ9Pntjb25zdCBldD1bXSx5dD1UW2l0XTt2byhXLFcrKGQtMSksRXQ9PntldC5wdXNoKHl0'@;
put 'W2MudG9QaHlzaWNhbENvbHVtbihFdCldKX0pLGllLnB1c2goZXQpfSksdm8oZC0xLGl0PT57d2UucHVzaChjLnRvUGh5c2ljYWxDb2x1bW4oVytpdCkpfSksQXJyYXkuaXNBcnJheShjLmdldFNldHRpbmdzKCkuY29sSGVhZGVycykmJnZvKGQtMSxpdD0+e3BlLnB1c2goYy5nZXRTZXR0aW5n'@;
put 'cygpLmNvbEhlYWRlcnNbYy50b1BoeXNpY2FsQ29sdW1uKFcraXQpXXx8bnVsbCl9KTtjb25zdCBFZT1jLmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFplPWMucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7cmV0dXJuIG5ldyB0by5SZW1vdmVDb2x1'@;
put 'bW5BY3Rpb24oVyx3ZSxpZSxwZSxFZSxaZSxjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpfSxmKX0pLGMuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGEsZCxoLGYpPT57bC5kb25lKCgpPT5uZXcgdG8uQ2VsbEFsaWdubWVudEFjdGlvbihhLGQsaCxmKSl9KSxjLmFk'@;
put 'ZEhvb2soImJlZm9yZUZpbHRlciIsYT0+e2wuZG9uZSgoKT0+bmV3IHRvLkZpbHRlcnNBY3Rpb24oYSkpfSksYy5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoYSxkKT0+eyExIT09YSYmbC5kb25lKCgpPT5uZXcgdG8uUm93TW92ZUFjdGlvbihhLGQpKX0pLGMuYWRkSG9vaygiYmVmb3JlTWVy'@;
put 'Z2VDZWxscyIsKGEsZCk9PntkfHxsLmRvbmUoKCk9Pm5ldyB0by5NZXJnZUNlbGxzQWN0aW9uKGMsYSkpfSksYy5hZGRIb29rKCJhZnRlclVubWVyZ2VDZWxscyIsKGEsZCk9PntkfHxsLmRvbmUoKCk9Pm5ldyB0by5Vbm1lcmdlQ2VsbHNBY3Rpb24oYyxhKSl9KSxjLmFkZEhvb2soImFmdGVy'@;
put 'SW5pdCIsKCk9PntsLmluaXQoKX0pfWZ1bmN0aW9uIElvZShjLGwpe2lmKCJsb2FkRGF0YSI9PT1sKXJldHVybiB0aGlzLnVuZG9SZWRvLmNsZWFyKCl9dG8ucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oYyxsKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09PWx8'@;
put 'fCJVbmRvUmVkby5yZWRvIj09PWx8fCJhdXRvIj09PWwpcmV0dXJuO2NvbnN0IGQ9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixkLGwpKXJldHVybjtjb25zdCBmPWMoKSxfPXRoaXMudW5kb25l'@;
put 'QWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaChmKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZCx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsXyks'@;
put 'dGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixfLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX0sdG8ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oKXtpZih0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKXtjb25z'@;
put 'dCBjPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGMpO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsYyx0aGlzLmRv'@;
put 'bmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGE9eXUobCk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixhKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGg9dGhpcyxmPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaW5zdGFu'@;
put 'Y2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksbC51bmRvKHRoaXMuaW5zdGFuY2UsKCk9PntoLmlnbm9yZU5ld0FjdGlvbnM9ITEsaC51bmRvbmVBY3Rpb25zLnB1c2gobCl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsZix0aGlz'@;
put 'LnVuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvIixhKX19LHRvLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlZG9BdmFpbGFibGUoKSl7Y29uc3QgYz10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3Rh'@;
put 'bmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGMpO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixjLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBhPXl1KGwpO2lm'@;
put 'KCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkbyIsYSkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBoPXRoaXMsZj10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixm'@;
put 'KSxsLnJlZG8odGhpcy5pbnN0YW5jZSwoKT0+e2guaWdub3JlTmV3QWN0aW9ucz0hMSxoLmRvbmVBY3Rpb25zLnB1c2gobCl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVu'@;
put 'SG9va3MoImFmdGVyUmVkbyIsYSl9fSx0by5wcm90b3R5cGUuaXNVbmRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9LHRvLnByb3RvdHlwZS5pc1JlZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmRvbmVBY3Rpb25zLmxl'@;
put 'bmd0aD4wfSx0by5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH0sdG8ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuYWJsZWR9LHRvLnByb3RvdHlwZS5lbmFi'@;
put 'bGU9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW5hYmxlZCgpKXJldHVybjtjb25zdCBjPXRoaXMuaW5zdGFuY2U7dGhpcy5lbmFibGVkPSEwLGZ1bmN0aW9uIFJOZShjKXtjLnVuZG89ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby51bmRvKCl9LGMucmVkbz1mdW5jdGlvbigpe3JldHVybiBj'@;
put 'LnVuZG9SZWRvLnJlZG8oKX0sYy5pc1VuZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5pc1VuZG9BdmFpbGFibGUoKX0sYy5pc1JlZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5pc1JlZG9BdmFpbGFibGUoKX0sYy5jbGVhclVuZG89ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5jbGVhcigpfX0oYyksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLGMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLElvZSl9LHRvLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNFbmFibGVkKCkpcmV0dXJuO2NvbnN0IGM9dGhp'@;
put 'cy5pbnN0YW5jZTt0aGlzLmVuYWJsZWQ9ITEsZnVuY3Rpb24gT05lKGMpe2RlbGV0ZSBjLnVuZG8sZGVsZXRlIGMucmVkbyxkZWxldGUgYy5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIGMuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSBjLmNsZWFyVW5kb30oYyksdGhpcy51bnJlZ2lzdGVyU2hvcnRj'@;
put 'dXRzKCksYy5yZW1vdmVIb29rKCJhZnRlckNoYW5nZSIsSW9lKX0sdG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCksdGhpcy5pbnN0YW5jZT1udWxsLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbH0sKHRvLkFjdGlvbj1mdW5j'@;
put 'dGlvbigpe30pLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7fSx0by5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXt9LHRvLkNoYW5nZUFjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMuY2hhbmdlcz1jLHRoaXMuc2VsZWN0ZWQ9bCx0aGlzLmFjdGlvblR5cGU9ImNoYW5nZSJ9LHpm'@;
put 'KHRvLkNoYW5nZUFjdGlvbix0by5BY3Rpb24pLHRvLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9eXUodGhpcy5jaGFuZ2VzKSxkPWMuY291bnRFbXB0eVJvd3MoITApLGg9Yy5jb3VudEVtcHR5Q29scyghMCk7Zm9yKGxldCBmPTAsXz1hLmxlbmd0'@;
put 'aDtmPF87ZisrKWFbZl0uc3BsaWNlKDMsMSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGwpLGMuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpO2ZvcihsZXQgZj0wLF89YS5sZW5ndGg7ZjxfO2YrKyl7Y29uc3RbVCxXXT1hW2ZdO2MuZ2V0U2V0dGluZ3Mo'@;
put 'KS5taW5TcGFyZVJvd3MmJlQrMStjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzPT09Yy5jb3VudFJvd3MoKSYmZD09PWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3MmJihjLmFsdGVyKCJyZW1vdmVfcm93IixwYXJzZUludChUKzEsMTApLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJv'@;
put 'd3MpLGMudW5kb1JlZG8uZG9uZUFjdGlvbnMucG9wKCkpLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJlcrMStjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzPT09Yy5jb3VudENvbHMoKSYmaD09PWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMmJihjLmFsdGVyKCJyZW1vdmVf'@;
put 'Y29sIixwYXJzZUludChXKzEsMTApLGMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMpLGMudW5kb1JlZG8uZG9uZUFjdGlvbnMucG9wKCkpfWMuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9LHRvLkNoYW5nZUFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2Nv'@;
put 'bnN0IGE9eXUodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspYVtkXS5zcGxpY2UoMiwxKTtjLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsbCksYy5zZXREYXRhQXRDZWxsKGEsbnVsbCxudWxsLCJVbmRvUmVkby5yZWRvIiksdGhpcy5zZWxlY3RlZCYmYy5z'@;
put 'ZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX0sdG8uQ3JlYXRlUm93QWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5pbmRleD1jLHRoaXMuYW1vdW50PWwsdGhpcy5hY3Rpb25UeXBlPSJpbnNlcnRfcm93In0semYodG8uQ3JlYXRlUm93QWN0aW9uLHRvLkFjdGlvbiksdG8uQ3JlYXRl'@;
put 'Um93QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmNvdW50Um93cygpLGQ9Yy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0aGlzLmluZGV4Pj1hJiZ0aGlzLmluZGV4LWQ8YSYmKHRoaXMuaW5kZXgtPWQpLGMuYWRkSG9va09uY2UoImFmdGVyUmVtb3Zl'@;
put 'Um93IixsKSxjLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9LHRvLkNyZWF0ZVJvd0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93IixsKSxjLmFsdGVyKCJpbnNl'@;
put 'cnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LHRvLlJlbW92ZVJvd0FjdGlvbj1mdW5jdGlvbihjLGwsYSxkLGgpe3RoaXMuaW5kZXg9Yyx0aGlzLmRhdGE9bCx0aGlzLmFjdGlvblR5cGU9InJlbW92ZV9yb3ciLHRoaXMuZml4ZWRSb3dzQm90'@;
put 'dG9tPWEsdGhpcy5maXhlZFJvd3NUb3A9ZCx0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT1ofSx6Zih0by5SZW1vdmVSb3dBY3Rpb24sdG8uQWN0aW9uKSx0by5SZW1vdmVSb3dBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0U2V0dGluZ3MoKSxkPVtdO2Eu'@;
put 'Zml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLGEuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChoLGYpPT57T2JqZWN0LmtleXMoaCkuZm9yRWFjaChfPT57Y29uc3QgVD1wYXJzZUludChfLDEwKTtkLnB1c2goW3RoaXMuaW5kZXgr'@;
put 'Zixpc05hTihUKT9fOlQsaFtfXV0pfSl9KSxjLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMuc2V0U291cmNlRGF0YUF0Q2VsbChkLG51bGwsbnVs'@;
put 'bCwiVW5kb1JlZG8udW5kbyIpLGMucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKX0sdG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGwpLGMu'@;
put 'YWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfSx0by5DcmVhdGVDb2x1bW5BY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLmluZGV4PWMsdGhpcy5hbW91bnQ9bCx0aGlzLmFjdGlvblR5cGU9Imluc2VydF9jb2wifSx6Zih0by5D'@;
put 'cmVhdGVDb2x1bW5BY3Rpb24sdG8uQWN0aW9uKSx0by5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsbCksYy5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1Jl'@;
put 'ZG8udW5kbyIpfSx0by5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsbCksYy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0'@;
put 'by5SZW1vdmVDb2x1bW5BY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCxoLGYsXyl7dGhpcy5pbmRleD1jLHRoaXMuaW5kZXhlcz1sLHRoaXMuZGF0YT1hLHRoaXMuYW1vdW50PXRoaXMuZGF0YVswXS5sZW5ndGgsdGhpcy5oZWFkZXJzPWQsdGhpcy5jb2x1bW5Qb3NpdGlvbnM9aC5zbGljZSgwKSx0'@;
put 'aGlzLnJvd1Bvc2l0aW9ucz1mLnNsaWNlKDApLHRoaXMuYWN0aW9uVHlwZT0icmVtb3ZlX2NvbCIsdGhpcy5maXhlZENvbHVtbnNTdGFydD1ffSx6Zih0by5SZW1vdmVDb2x1bW5BY3Rpb24sdG8uQWN0aW9uKSx0by5SZW1vdmVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24o'@;
put 'YyxsKXtjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBkPXRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0KCksaD0oaWUscGUsd2UpPT53ZVt0aGlzLmluZGV4ZXMuaW5kZXhPZihkW3BlXSldLGY9dGhpcy5kYXRhLmxlbmd0aCxf'@;
put 'PVtdO2ZvcihsZXQgaWU9MDtpZTxmO2llKyspXy5wdXNoKGNzKHRoaXMuZGF0YVtpZV0saCkpO2NvbnN0IFQ9Y3ModGhpcy5oZWFkZXJzLGgpLFc9W107Yy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleGVzWzBdLHRoaXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8i'@;
put 'KSxEbihjLmdldFNvdXJjZURhdGFBcnJheSgpLChpZSxwZSk9PntEbihkLCh3ZSxFZSk9PntpZVt3ZV09X1twZV1bRWVdLFcucHVzaChbcGUsd2UsaWVbd2VdXSl9KX0pLGMuc2V0U291cmNlRGF0YUF0Q2VsbChXLHZvaWQgMCx2b2lkIDAsIlVuZG9SZWRvLnVuZG8iKSx0eXBlb2YgdGhpcy5o'@;
put 'ZWFkZXJzPCJ1IiYmRG4oVCwoaWUscGUpPT57Yy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbZFtwZV1dPWllfSksYy5iYXRjaEV4ZWN1dGlvbigoKT0+e2Mucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93UG9zaXRpb25zKSxjLmNvbHVtbkluZGV4TWFwcGVyLnNl'@;
put 'dEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LHRvLlJlbW92ZUNvbHVtbkFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyUmVt'@;
put 'b3ZlQ29sIixsKSxjLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LHRvLkNlbGxBbGlnbm1lbnRBY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCl7dGhpcy5zdGF0ZUJlZm9yZT1jLHRoaXMucmFuZ2U9bCx0aGlzLnR5cGU9YSx0aGlzLmFs'@;
put 'aWdubWVudD1kfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7RG4odGhpcy5yYW5nZSxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZjLnNldENlbGxNZXRhKGQsaCwiY2xhc3NOYW1lIix0aGlzLnN0YXRlQmVmb3JlW2RdW2hdfHwi'@;
put 'IGh0TGVmdCIpfSl9KSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LHRvLkNlbGxBbGlnbm1lbnRBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtLcCh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwoYSxkKT0+Yy5nZXRD'@;
put 'ZWxsTWV0YShhLGQpLChhLGQsaCxmKT0+Yy5zZXRDZWxsTWV0YShhLGQsaCxmKSksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5GaWx0ZXJzQWN0aW9uPWZ1bmN0aW9uKGMpe3RoaXMuY29uZGl0aW9uc1N0YWNrPWMsdGhpcy5hY3Rpb25UeXBlPSJm'@;
put 'aWx0ZXIifSx6Zih0by5GaWx0ZXJzQWN0aW9uLHRvLkFjdGlvbiksdG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oImZpbHRlcnMiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEuY29uZGl0aW9uQ29s'@;
put 'bGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrLnNsaWNlKDAsdGhpcy5jb25kaXRpb25zU3RhY2subGVuZ3RoLTEpKSxhLmZpbHRlcigpfSx0by5GaWx0ZXJzQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdp'@;
put 'bigiZmlsdGVycyIpO2MuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGEuZmlsdGVyKCl9LHRvLk1lcmdlQ2VsbHNBY3Rpb249Y2xhc3MgTE5lIGV4dGVuZHMgdG8u'@;
put 'QWN0aW9ue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmNlbGxSYW5nZT1hO2NvbnN0IGQ9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmFuZ2VEYXRhPWwuZ2V0RGF0YShkLnJvdyxkLmNv'@;
put 'bCxoLnJvdyxoLmNvbCl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheShoLnJvdyxoLmNvbCx0aGlzLnJhbmdlRGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVy'@;
put 'Z2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fSx0by5Vbm1lcmdlQ2VsbHNBY3Rpb249Y2xhc3MgSU5lIGV4dGVuZHMgdG8uQWN0aW9ue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmNlbGxSYW5nZT1hfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5h'@;
put 'ZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNl'@;
put 'bGxSYW5nZSwhMCksbC5yZW5kZXIoKX19LHRvLlJvd01vdmVBY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLnJvd3M9Yy5zbGljZSgpLHRoaXMuZmluYWxJbmRleD1sLHRoaXMuYWN0aW9uVHlwZT0icm93X21vdmUifSx6Zih0by5Sb3dNb3ZlQWN0aW9uLHRvLkFjdGlvbiksdG8uUm93TW92ZUFj'@;
put 'dGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKSxkPVtdLmNvbmNhdCh0aGlzLnJvd3MpLGg9ZC5maWx0ZXIoVD0+VD50aGlzLmZpbmFsSW5kZXgpLGY9ZC5maWx0ZXIoVD0+VDw9dGhpcy5maW5hbEluZGV4KSxfPWgu'@;
put 'c29ydCgoVCxXKT0+Vy1UKS5jb25jYXQoZi5zb3J0KChULFcpPT5ULVcpKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MSl7Y29uc3QgVz1jLnRvVmlzdWFsUm93KF9bVF0pO2EubW92ZVJvdyhXLF9bVF0pfWMucmVuZGVyKCks'@;
put 'Yy5kZXNlbGVjdENlbGwoKSxjLnNlbGVjdFJvd3ModGhpcy5yb3dzWzBdLHRoaXMucm93c1swXSt0aGlzLnJvd3MubGVuZ3RoLTEpfSx0by5Sb3dNb3ZlQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2MuYWRk'@;
put 'SG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5tb3ZlUm93cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXgpLGMucmVuZGVyKCksYy5kZXNlbGVjdENlbGwoKSxjLnNlbGVjdFJvd3ModGhpcy5maW5hbEluZGV4LHRoaXMuZmluYWxJbmRleCt0aGlzLnJvd3MubGVuZ3Ro'@;
put 'LTEpfSx0by5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2NvbnN0IGM9dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnVuZG8sbD10eXBlb2YgYz4idSJ8fGM7dGhpcy5pbnN0YW5jZS51bmRvUmVkb3x8KHRoaXMuaW5zdGFuY2UudW5kb1JlZG89dGhpcyksbD90aGlzLmluc3RhbmNlLnVu'@;
put 'ZG9SZWRvLmVuYWJsZSgpOnRoaXMuaW5zdGFuY2UudW5kb1JlZG8uZGlzYWJsZSgpfSx0by5wcm90b3R5cGUucmVnaXN0ZXJTaG9ydGN1dHM9ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlz'@;
put 'OltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6aD0+IWguYWx0S2V5LGdy'@;
put 'b3VwOiJ1bmRvUmVkbyJ9KX0sdG8ucHJvdG90eXBlLnVucmVnaXN0ZXJTaG9ydGN1dHM9ZnVuY3Rpb24oKXt0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVkbyIpfTtjb25zdCBldz1zby5n'@;
put 'ZXRTaW5nbGV0b24oKTtldy5hZGQoImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7dmFyIGM7bnVsbD09PShjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpKXx8dm9pZCAwPT09Y3x8Yy5pbml0KCl9KSxldy5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLGV3LnJlZ2lzdGVyKCJhZnRl'@;
put 'clVuZG8iKSxldy5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLGV3LnJlZ2lzdGVyKCJhZnRlclJlZG8iKSx0by5QTFVHSU5fS0VZPSJ1bmRvUmVkbyIsdG8uU0VUVElOR19LRVlTPSEwO2NvbnN0IFBOZT10bztmdW5jdGlvbiBGeigpeyhmdW5jdGlvbiBiTGUoKXtSMCh2NyksUjAoWEIpLFIwKFFu'@;
put 'ZSksUjAocnJlKSxSMChKQiksUjAocUIpLFIwKGlyZSksUjAob3JlKSxSMCh2TGUpLFIwKGtnKSxSMChhcmUpfSkoKSxmdW5jdGlvbiBPTGUoKXtwaChiNykscGgoTXkpLHBoKHRqKSxwaChlaikscGgocmopLHBoKGlqKSxwaCgkcCkscGgob2opfSgpLGZ1bmN0aW9uIGpMZSgpe2E3KEV5KSxh'@;
put 'NyhZayksYTcoc2opLGE3KFdrKX0oKSxmdW5jdGlvbiBLTGUoKXtiMih6TGUpLGIyKFVMZSksYjIoWkxlKSxiMihZTGUpLGIyKFdMZSksYjIoR0xlKSxiMigkTGUpLGIyKCRuZSksYjIocUxlKX0oKSxmdW5jdGlvbiBGTmUoKXtqcyhBeSksanMoZEllKSxqcyhUeSksanMoeEllKSxqcyhPSWUp'@;
put 'LGpzKFByZSksanMobFJlKSxqcyhNUmUpLGpzKFlSZSksanMocE9lKSxqcyhMT2UpLGpzKFJPZSksanMoUE9lKSxqcygkT2UpLGpzKFVQZSksanMoX0ZlKSxqcyh4RmUpLGpzKElGZSksanMoRkZlKSxqcyhZRmUpLGpzKEdGZSksanMobkhlKSxqcyhpSGUpLGpzKGZIZSksanMoYkhlKSxqcyhD'@;
put 'SGUpLGpzKGlOZSksanMoZ05lKSxqcyhiTmUpLGpzKE1OZSksanMoa05lKSxqcyhUTmUpLGpzKFBOZSl9KCl9bGV0IEMyPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAy'@;
put 'NzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpLFY3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbYVAs'@;
put 'bFBdLGltcG9ydHM6W29vLHFsLGhjLF91LEMyXX0pLGN9KSgpLHR3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgp'@;
put 'LFJvZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbyxxbF19KSxjfSkoKSxCNz0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxxbCxfdSxoYyxWNyx0dyxDMixSb2VdfSksY30pKCk7dmFyIEh6LE56LFZ6LEJ6LGp6LERsPUYoODM0MTcpLHQzPUYoMTIw'@;
put 'NzApO2NsYXNzIE9vZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fUZ6KCksZnVuY3Rpb24gSE5lKGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxl'@;
put 'PWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IGllPWF8fHt9O3JldHVybiBoP2gudXBkYXRlU2V0dGluZ3MoaWUpOihoPW5ldyBjLkNvcmUoZFswXSxpZSksZC5kYXRhKCJo'@;
put 'YW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfPjE/Xy0xOjAp'@;
put 'LFc9MTtXPF87VysrKVRbVy0xXT1hcmd1bWVudHNbV107Zj1oW2FdLmNhbGwoaCwuLi5UKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShtcyksbXMuX19HaG9zdFRhYmxlPWxqLG1zLl9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIGNrZSgpe3JldHVybiBn'@;
put 'a30sbXMuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiB4VGUoKXtyZXR1cm4gcFZ9LG1zLkV2ZW50TWFuYWdlcj1sbDtjb25zdCBOTmU9W2FlLFIsaixCLEUsTSx4LGssTyxtLHosTF0sVk5lPVtsZSxLXTttcy5oZWxwZXI9e30sbXMuZG9tPXt9LERuKE5OZSxjPT57RG4oT2Jq'@;
put 'ZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYobXMuaGVscGVyW2xdPWNbbF0pfSl9KSxEbihWTmUsYz0+e0RuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG1zLmRvbVtsXT1jW2xdKX0pfSksbXMu'@;
put 'Y2VsbFR5cGVzPW51bGwhPT0oSHo9bXMuY2VsbFR5cGVzKSYmdm9pZCAwIT09SHo/SHo6e30sRG4oRERlKCksYz0+e21zLmNlbGxUeXBlc1tjXT1VQihjKX0pLG1zLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlPWIyLG1zLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT1VQixtcy5lZGl0b3JzPW51'@;
put 'bGwhPT0oTno9bXMuZWRpdG9ycykmJnZvaWQgMCE9PU56P056Ont9LERuKG9rZSgpLGM9Pnttcy5lZGl0b3JzW2Ake2J1KGMpfUVkaXRvcmBdPXBrKGMpfSksbXMuZWRpdG9ycy5yZWdpc3RlckVkaXRvcj1SMCxtcy5lZGl0b3JzLmdldEVkaXRvcj1wayxtcy5yZW5kZXJlcnM9bnVsbCE9PShW'@;
put 'ej1tcy5yZW5kZXJlcnMpJiZ2b2lkIDAhPT1Wej9Wejp7fSxEbih4a2UoKSxjPT57Y29uc3QgbD1iayhjKTsiYmFzZSI9PT1jJiYobXMucmVuZGVyZXJzLmNlbGxEZWNvcmF0b3I9bCksbXMucmVuZGVyZXJzW2Ake2J1KGMpfVJlbmRlcmVyYF09bH0pLG1zLnJlbmRlcmVycy5yZWdpc3RlclJl'@;
put 'bmRlcmVyPXBoLG1zLnJlbmRlcmVycy5nZXRSZW5kZXJlcj1iayxtcy52YWxpZGF0b3JzPW51bGwhPT0oQno9bXMudmFsaWRhdG9ycykmJnZvaWQgMCE9PUJ6P0J6Ont9LERuKEFrZSgpLGM9Pnttcy52YWxpZGF0b3JzW2Ake2J1KGMpfVZhbGlkYXRvcmBdPUZOKGMpfSksbXMudmFsaWRhdG9y'@;
put 'cy5yZWdpc3RlclZhbGlkYXRvcj1hNyxtcy52YWxpZGF0b3JzLmdldFZhbGlkYXRvcj1GTixtcy5wbHVnaW5zPW51bGwhPT0oano9bXMucGx1Z2lucykmJnZvaWQgMCE9PWp6P2p6Ont9LERuKFBOKCksYz0+e21zLnBsdWdpbnNbY109dXkoYyl9KSxtcy5wbHVnaW5zW2Ake2J1KFpzLlBMVUdJ'@;
put 'Tl9LRVkpfVBsdWdpbmBdPVpzLG1zLnBsdWdpbnMucmVnaXN0ZXJQbHVnaW49anMsbXMucGx1Z2lucy5nZXRQbHVnaW49dXk7Y29uc3Qgeno9bXMsVXo9KGMsbCxhKT0+e2ZvcihsZXQgZCBvZiBjKXtjb25zdCBoPWwuZmluZChfPT5fLmRhdGE9PT1kLk5BTUUpLGY9YS52YXJzW2QuTkFNRV07'@;
put 'ZiYmKGQuVFlQRT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhkLkREVFlQRSk/Im51bSI6Zi50eXBlKSxoJiZkLkRFU0MmJihoLmRlc2M9ZC5ERVNDKSxoJiZmLmxlbmd0aCYmKGgubGVuZ3RoPXBhcnNlSW50KGYubGVuZ3RoKSksaCYmZC5DTFNfUlVMRSYmKGguY2xzUnVs'@;
put 'ZT1kLkNMU19SVUxFKX1yZXR1cm4gbH07ZnVuY3Rpb24gWnooYyxsKXtpZihudWxsPT1jfHwhaXNOYU4oYykmJmlzRmluaXRlKGMpKXJldHVybiBsJiZsKCEwKSwhMDtjb25zdCBhPSgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKGMpO3JldHVybiBsJiZsKGEpLGF9Y29uc3QgUG9lPXtDQVNFOihj'@;
put 'LGwpPT57c3dpdGNoKGwpe2Nhc2UiVVBDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMoYyl8fCJzdHJpbmciPT10eXBlb2YgYyYmYy50b1N0cmluZygpPT09Yy50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7Y2FzZSJMT1dDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5j'@;
put 'bHVkZXMoYyl8fCJzdHJpbmciPT10eXBlb2YgYyYmYy50b1N0cmluZygpPT09Yy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCl9cmV0dXJuITB9LE1JTlZBTDooYyxsKT0+e2NvbnN0IGE9WnooYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybighYXx8IWlzTmFOKGQpKSYmZD49TnVtYmVyKGwudG9T'@;
put 'dHJpbmcoKSl9LE1BWFZBTDooYyxsKT0+e2NvbnN0IGE9WnooYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybiEoIWF8fCFpc05hTihkKSl8fGQ8PU51bWJlcihsLnRvU3RyaW5nKCkpfSxOT1ROVUxMOihjLGwpPT5udWxsIT1jJiZjLnRvU3RyaW5nKCkubGVuZ3RoPjB9O3ZhciBZej1GKDQ0MzE2'@;
put 'KTtjbGFzcyBaTmUgZXh0ZW5kcyB6ei5lZGl0b3JzLkF1dG9jb21wbGV0ZUVkaXRvcntjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCl9b3BlbihsKXtzdXBlci5vcGVuKGwpLHRoaXMuaXNDZWxsTnVtZXJpYygpP3RoaXMuaHRD'@;
put 'b250YWluZXIuY2xhc3NMaXN0LmFkZCgibnVtZXJpY0xpc3Rib3giKTp0aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm51bWVyaWNMaXN0Ym94Iil9aXNDZWxsTnVtZXJpYygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5jbGFzc05hbWU/LmluY2x1ZGVzKCJodE51bWVy'@;
put 'aWMiKX19Y2xhc3MgWU5le2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRxZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KFQsVyxpZSk9Pntj'@;
put 'b25zdCBwZT17Li4uVCx2YWxpZGF0b3I6dm9pZCAwLGNvcnJlY3RGb3JtYXQ6ITEscm93OjAsY29sOjAsaW5zdGFuY2U6bmV3IHp6KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHt9KSx2aXN1YWxSb3c6MCx2aXN1YWxDb2w6MCxwcm9wOjB9O251bGw9PVcmJihXPSIiKSxUJiZULnZh'@;
put 'bGlkYXRvciYmImZ1bmN0aW9uIj09dHlwZW9mIFQudmFsaWRhdG9yP1QudmFsaWRhdG9yLmNhbGwocGUsVyx3ZT0+e2llJiZpZSh3ZSl9KTppZSYmaWUoITEpfSx0aGlzLnJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpLHRoaXMuc2FzcGFyYW1zPWwsdGhpcy5ob3RJbnN0YW5jZT1fLHRoaXMucnVs'@;
put 'ZXM9KGM9Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske2N9XWApfWNhdGNoe3JldHVybltdfX0pKGwuQ09MVFlQRSksdGhpcy5ydWxlcz1VeihkLHRoaXMucnVsZXMsYSksdGhpcy5ydWxlcz0oYz0+e2lmKCFZelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0'@;
put 'IGEgb2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9'@;
put 'bC5QSy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7enouZWRpdG9ycy5yZWdpc3RlckVkaXRvcigiYXV0b2NvbXBsZXRlLmN1c3RvbSIsWk5lKX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVz'@;
put 'fWdldFJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTtyZXR1cm4gdGhpcy5ydWxlc1thXX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHRoaXMuaGlkZGVuQ29sdW1uc311cGRhdGVSdWxlKGwsYSl7bGV0IGQ9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlc1tkXT17'@;
put 'Li4udGhpcy5ydWxlc1tkXSwuLi5hfX1yZW1vdmVSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7dGhpcy5ydWxlcy5zcGxpY2UoYSwxKX1nZXREcURldGFpbHMobCl7cmV0dXJuIGw/dGhpcy5kcXJ1bGVzLmZpbHRlcihhPT5hLkJBU0VfQ09MPT09bCk6dGhpcy5kcXJ1bGVz'@;
put 'fWlzRHFDb2wobCl7cmV0dXJuISF0aGlzLmRxcnVsZXMuZmluZChhPT5hLkJBU0VfQ09MPT09bCl9aGFzRHFSdWxlcyhsLGEsZD0hMSl7cmV0dXJuIGQ/dGhpcy5kcXJ1bGVzLmZpbHRlcihoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpLmxlbmd0aD09PWEubGVu'@;
put 'Z3RoOiEhdGhpcy5kcXJ1bGVzLmZpbmQoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKX1nZXREcURyb3Bkb3duU291cmNlKGwpe2xldCBhPVtdO3JldHVybiB0aGlzLmRxcnVsZXMuZm9yRWFjaChkPT57ZC5CQVNFX0NPTC50b1N0cmluZygpPT09bC5kYXRhJiZs'@;
put 'LmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNPRlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGQuUlVMRV9UWVBFLnRvU3RyaW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWQuQkFTRV9DT0wpLmZv'@;
put 'ckVhY2goaD0+e2EucHVzaChsLnR5cGUmJiJudW1lcmljIj09PWwudHlwZT9OdW1iZXIoaC5SVUxFX0RBVEEpOmguUlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0YS5sZW5ndGg+MCYmKGM9Pntjb25zdCBsPVtdO3JldHVybiB0aGlzLmRxZGF0YS5mb3JFYWNoKGE9'@;
put 'PntsLmluY2x1ZGVzKGEuQkFTRV9DT0wpfHxsLnB1c2goYS5CQVNFX0NPTCl9KSxsfSkoKS5mb3JFYWNoKGE9PntsZXQgZD0hMTt0aGlzLmRxcnVsZXMubGVuZ3RoPjAmJnRoaXMuZHFydWxlcy5mb3JFYWNoKGg9PntoLkJBU0VfQ09MPT09YSYmKCJTT0ZUU0VMRUNUIj09PWguUlVMRV9UWVBF'@;
put 'fHwiSEFSRFNFTEVDVCI9PT1oLlJVTEVfVFlQRSkmJihkPSEwKX0pLGR8fHRoaXMuZHFydWxlcy5wdXNoKHtCQVNFX0NPTDphLFJVTEVfVFlQRToiU09GVFNFTEVDVCIsUlVMRV9WQUxVRTphLFg6MX0pfSl9c2V0dXBWYWxpZGF0aW9ucygpe2ZvcihsZXQgbD0wO2w8dGhpcy5ydWxlcy5sZW5n'@;
put 'dGg7bCsrKXtjb25zdCBhPXRoaXMucnVsZXNbbF0uZGF0YXx8IiI7aWYoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hKXtpZih0aGlzLmlzRHFDb2woYSkpe2xldCBoPXRoaXMuZ2V0RHFEcm9wZG93blNvdXJjZSh0aGlzLnJ1bGVzW2xdKTtoLmxlbmd0aD4wJiYodGhpcy5y'@;
put 'dWxlc1tsXS5zb3VyY2U9aCx0aGlzLnJ1bGVzW2xdLnR5cGU9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1tsXS5lZGl0b3I9ImF1dG9jb21wbGV0ZS5jdXN0b20iLHRoaXMucnVsZXNbbF0uZmlsdGVyPSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVz'@;
put 'W2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFS'@;
put 'RFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiTk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbbF0uYWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1tsXS5jb3JyZWN0'@;
put 'Rm9ybWF0PSEwKSx0aGlzLnNldERlZmF1bHRWYWxpZGF0b3IodGhpcyxsKSx0aGlzLnNldENvbHVtbkxldmVsU2VjdXJpdHkobCl9fXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcihsLGEpe3RoaXMucnVsZXNb'@;
put 'YV0udmFsaWRhdG9yPWZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1sLnJ1bGVzW2FdLmRhdGE/LnRvU3RyaW5nKCksXz1sLnJ1bGVzW2FdLnR5cGV8fCIiO2xldCBUPW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlzLmVkaXRvciYmImF1dG9jb21wbGV0ZS5jdXN0b20iIT09dGhpcy5lZGl0'@;
put 'b3J8fChsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcigiYXV0b2NvbXBsZXRlIikuY2FsbCh0aGlzLGQsVz0+e1Q9V30pLFQpPyhsLmdldEhhbmRzb250YWJsZVZhbGlkYXRvcihfKS5jYWxsKHRoaXMsZCxXPT57VD1XfSksVD9sLmxlbmd0aENoZWNrKGQsbC5ydWxlc1thXS5sZW5ndGgsXyk/'@;
put 'bC5pc0RxQ29sKGZ8fCIiKSYmISgoYyxsKT0+e2ZvcihsZXQgYSBvZiBjKWlmKFBvZVthLlJVTEVfVFlQRV0mJiFQb2VbYS5SVUxFX1RZUEVdKGwsYS5SVUxFX1ZBTFVFKSlyZXR1cm4gY29uc29sZS53YXJuKGBEUSBJbnZhbGlkIFJlYXNvbjogJHthLlJVTEVfVFlQRX1cblZhbHVlOiAke2x9'@;
put 'KVxuUnVsZSBWYWx1ZTogJHthLlJVTEVfVkFMVUUubGVuZ3RoPjAmJiIgIiE9PWEuUlVMRV9WQUxVRT9hLlJVTEVfVkFMVUU6Ik5vdCBkZWZpbmVkIn1gKSwhMTtyZXR1cm4hMH0pKGwuZ2V0RHFEZXRhaWxzKGZ8fCIiKSxkKT8oY29uc29sZS53YXJuKGBEUSBWYWxpZGF0aW9uIC0gaW52YWxp'@;
put 'ZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6dm9pZCBoKCEwKTooY29uc29sZS53YXJuKGBMZW5ndGggVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVl'@;
put 'OiAke2R9KWApLHZvaWQgaCghMSkpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gKGF1dG9jb21wbGV0ZSkgLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKX19bGVuZ3RoQ2hlY2sobCxhLGQpe2lmKCgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKGwpfHxu'@;
put 'dWxsPT1sfHxudWxsPT1hKXJldHVybiEwO2lmKCJudW1lcmljIj09PWQpe2lmKDg9PT1hKXJldHVybiEwO2lmKGE8M3x8YT44fHwhTnVtYmVyLmlzSW50ZWdlcihhKSlyZXR1cm4gY29uc29sZS53YXJuKCJpbnZhbGlkIGxlbmd0aCBmcm9tIFNBUywgcnVsZSBsZW5ndGggY2FuIG9ubHkgYmUg'@;
put 'YW4gaW50ZWdlciBiZXR3ZWVuIDMtOCIpLCExO2NvbnN0IGg9TnVtYmVyKGwpPT09bCYmbCUxIT0wO2lmKGE8OCYmaClyZXR1cm4gY29uc29sZS53YXJuKCJyZWR1Y2VkIGxlbmd0aCBudW1lcmljcyBjYW5ub3QgY29udGFpbiBkZWNpbWFscyBlbHNlIHByZWNpc2lvbiB3aWxsIGJlIGFmZmVj'@;
put 'dGVkIiksITE7c3dpdGNoKGEpe2Nhc2UgMzpyZXR1cm4gbDw9ODE5MjtjYXNlIDQ6cmV0dXJuIGw8PTIwOTcxNTI7Y2FzZSA1OnJldHVybiBsPD01MzY4NzA5MTI7Y2FzZSA2OnJldHVybiBsPD0xMzc0Mzg5NTM0NzI7Y2FzZSA3OnJldHVybiBsPD0zNTE4NDM3MjA4ODgzMn19cmV0dXJuIGwu'@;
put 'dG9TdHJpbmcoKS5sZW5ndGg8PWF9Z2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKGwpe3N3aXRjaChsKXtjYXNlImF1dG9jb21wbGV0ZSI6cmV0dXJuIEV5O2Nhc2UibnVtZXJpYyI6cmV0dXJuIFp6O2Nhc2UiZGF0ZSI6cmV0dXJuIFlrO2Nhc2UidGltZSI6cmV0dXJuIFdrO2RlZmF1bHQ6cmV0'@;
put 'dXJuKGEsZCk9PmQ/ZCghMCk6bnVsbH19Z2V0UnVsZUluZGV4KGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sOnRoaXMucnVsZXMuZmluZEluZGV4KGE9PmEuZGF0YT09PWwpfXNldENvbHVtbkxldmVsU2VjdXJpdHkobCl7aWYoIXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRylyZXR1cm47'@;
put 'Y29uc3QgYT10aGlzLnJ1bGVzW2xdO2lmKHRoaXMucHJpbWFyeUtleXMuaW5jbHVkZXMoYS5kYXRhKSYmKGEuY2xzUnVsZT0iUkVBRCIpLCJISURFIj09PWEuY2xzUnVsZSYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2gobCksIlJFQUQiPT09YS5jbHNSdWxlJiYoYS5yZWFkT25seT0hMCksIkVE'@;
put 'SVQiPT09YS5jbHNSdWxlKXthLnJlYWRPbmx5PSExO2NvbnN0IGQ9dGhpcy5oaWRkZW5Db2x1bW5zLmluZGV4T2YobCk7dGhpcy5oaWRkZW5Db2x1bW5zLnNwbGljZShkLDEpfX19Y29uc3QgVUE9e251bWVyaWM6MCxkZWZhdWx0OiIifSxXTmU9KGMsbCk9PmM/ImF1dG9jb21wbGV0ZSI9PT1j'@;
put 'P2wmJmwuc291cmNlP2wuc291cmNlWzBdOltdOlVBLmhhc093blByb3BlcnR5KGMpP1VBW2NdOlVBLmRlZmF1bHQ6VUEuZGVmYXVsdCxGb2U9Yz0+e2xldCBsPSgiMCIrYy5nZXRVVENIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldFVUQ01pbnV0ZXMoKSkuc2xp'@;
put 'Y2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMiksbH0sV3o9Yz0+Yy5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhjLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitjLmdldERhdGUoKSkuc2xpY2UoLTIpLEd6PWM9Pm5ldyBEYXRlKE1hdGgucm91'@;
put 'bmQoODY0MDAqKGMtMjU1NjkpKjFlMykpLHFOZT0oYyxsKT0+e2NvbnN0IGE9W10sZD1bXTtyZXR1cm4gbC5mb3JFYWNoKGg9PnstMT09PWMuaW5kZXhPZihoKT9hLnB1c2goaCk6ZC5wdXNoKGgpfSksW2EsZF19LEtOZT0oYyxsLGEsZCxoLGYsXyk9PihsLmlubmVySFRNTD1gJHtmP2YudG9T'@;
put 'dHJpbmcoKToiIn0gPGNsci1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi1jaXJjbGUiIHN0YXR1cz0id2FybmluZyI+PC9jbHItaWNvbj5gLGwpLCR6PShjLGwsYSxkLGgsZixfKT0+KGwuaW5uZXJIVE1MPWZ8fCIiLGwpLFhOZT0oYyxsLGEsZCxoLGYsXyk9PihsLmlubmVySFRNTD1gJHtmP2Yu'@;
put 'dG9TdHJpbmcoKToiIn0gPHNwYW4gY2xhc3M9InNwaW5uZXIgc3Bpbm5lci1zbSB2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiPjwvc3Bhbj5gLGwpLHF6PWM9PiEhL14tezAsMX1cZCskLy50ZXN0KGMpLEhvZT1jPT4hIS9eXGQrXC5cZCskLy50ZXN0KGMpLEt6PWZ1bmN0aW9uIFFOZShjKXtyZXR1'@;
put 'cm4ic3ltYm9sIj09dHlwZW9mIGN8fGw4KGMpJiYiW29iamVjdCBTeW1ib2xdIj09aTgoYyl9O3ZhciBlVmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sdFZlPS9eXHcqJC87ZnVuY3Rpb24gWHooYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'Y3x8bnVsbCE9bCYmImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLGg9bD9sLmFwcGx5KHRoaXMsZCk6ZFswXSxmPWEuY2FjaGU7aWYoZi5oYXMoaCkpcmV0dXJuIGYu'@;
put 'Z2V0KGgpO3ZhciBfPWMuYXBwbHkodGhpcyxkKTtyZXR1cm4gYS5jYWNoZT1mLnNldChoLF8pfHxmLF99O3JldHVybiBhLmNhY2hlPW5ldyhYei5DYWNoZXx8Z1ApLGF9WHouQ2FjaGU9Z1A7Y29uc3Qgb1ZlPVh6O3ZhciBjVmU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsi'@;
put 'J10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csdVZlPS9cXChcXCk/L2csZFZlPWZ1bmN0aW9uIGFWZShjKXt2YXIgbD1vVmUoYyxmdW5jdGlvbihkKXtyZXR1cm4gNTAwPT09YS5zaXplJiZhLmNsZWFyKCksZH0pLGE9bC5jYWNo'@;
put 'ZTtyZXR1cm4gbH0oZnVuY3Rpb24oYyl7dmFyIGw9W107cmV0dXJuIDQ2PT09Yy5jaGFyQ29kZUF0KDApJiZsLnB1c2goIiIpLGMucmVwbGFjZShjVmUsZnVuY3Rpb24oYSxkLGgsZil7bC5wdXNoKGg/Zi5yZXBsYWNlKHVWZSwiJDEiKTpkfHxhKX0pLGx9KTtjb25zdCBoVmU9ZFZlO3ZhciBO'@;
put 'b2U9bXA/bXAucHJvdG90eXBlOnZvaWQgMCxWb2U9Tm9lP05vZS50b1N0cmluZzp2b2lkIDA7Y29uc3QgbVZlPWZ1bmN0aW9uIEJvZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoYzgoYykpcmV0dXJuIGZ1bmN0aW9uIGZWZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9'@;
put 'PWM/MDpjLmxlbmd0aCxoPUFycmF5KGQpOysrYTxkOyloW2FdPWwoY1thXSxhLGMpO3JldHVybiBofShjLEJvZSkrIiI7aWYoS3ooYykpcmV0dXJuIFZvZT9Wb2UuY2FsbChjKToiIjt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0seVZlPWZ1bmN0aW9uIGJWZShj'@;
put 'LGwpe3JldHVybiBjOChjKT9jOmZ1bmN0aW9uIG5WZShjLGwpe2lmKGM4KGMpKXJldHVybiExO3ZhciBhPXR5cGVvZiBjO3JldHVybiEoIm51bWJlciIhPWEmJiJzeW1ib2wiIT1hJiYiYm9vbGVhbiIhPWEmJm51bGwhPWMmJiFLeihjKSl8fHRWZS50ZXN0KGMpfHwhZVZlLnRlc3QoYyl8fG51'@;
put 'bGwhPWwmJmMgaW4gT2JqZWN0KGwpfShjLGwpP1tjXTpoVmUoZnVuY3Rpb24gdlZlKGMpe3JldHVybiBudWxsPT1jPyIiOm1WZShjKX0oYykpfSxTVmU9ZnVuY3Rpb24gQ1ZlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY3x8S3ooYykpcmV0dXJuIGM7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwm'@;
put 'JjEvYz09LTEvMD8iLTAiOmx9LGlsPWZ1bmN0aW9uIEVWZShjLGwsYSl7dmFyIGQ9bnVsbD09Yz92b2lkIDA6ZnVuY3Rpb24gTVZlKGMsbCl7Zm9yKHZhciBhPTAsZD0obD15VmUobCxjKSkubGVuZ3RoO251bGwhPWMmJmE8ZDspYz1jW1NWZShsW2ErK10pXTtyZXR1cm4gYSYmYT09ZD9jOnZv'@;
put 'aWQgMH0oYyxsKTtyZXR1cm4gdm9pZCAwPT09ZD9hOmR9O2xldCBiZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJlc3BvbnNlPW5ldyBiZSx0aGlzLmNoYW5n'@;
put 'ZWRUYWJsZT1uZXcgYmUsdGhpcy5kZXRhaWxzPW5ldyBiZSx0aGlzLmRpZmZzPW5ldyBiZSx0aGlzLmNvbHVtbnM9bmV3IGJlLHRoaXMudmFsdWVzPW5ldyBiZSx0aGlzLmZpbHRlcj1uZXcgYmUsdGhpcy5xdWVyeT1uZXcgYmUsdGhpcy5zdWJtaXR0RGV0YWlsPW5ldyBiZSx0aGlzLnJlbW92'@;
put 'ZVF1ZXJ5PW5ldyBiZSx0aGlzLnNldFN1Ym1pdD1uZXcgYmUsdGhpcy5zZXRTdWJtaXRMaXN0PW5ldyBiZX1jYWxsU2VydmljZShhLGQsaCxmKXt2YXIgXz10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtfLmxpYmRzPWY7Y29uc3QgVD17fTtyZXR1cm4gVFtkXT1bYV0se2RhdGE6eWllbGQg'@;
put 'Xy5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxUKSxsaWJkczpfLmxpYmRzfX0pKCl9dXBkYXRlVGFibGUoYSxkLGgsZixfKXt2YXIgVD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgVz17anNkYXRhOmR9O2lmKF8pe2xldCBwZT1ULnBhcnNlRm9ybWF0cyhfKTtXLiRqc2RhdGE9e2Zvcm1h'@;
put 'dHM6cGV9fXJldHVybiBXW2hdPVthXSx5aWVsZCBULnNhc1NlcnZpY2UucmVxdWVzdChmLFcpfSkoKX1nZXRBcHByb3ZhbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdCho'@;
put 'LF8pfSkoKX1zZW5kRGV0YWlscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89T2JqZWN0LmFzc2lnbih7c3ViOiEwfSxhKTtmLnN1Ym1pdHREZXRhaWwubmV4dCh7ZGF0YTpoW2RdLHZpZXdEYXRhOl99KX0pKCl9Z2V0U3VibWl0dHMoKXt2YXIgYT10aGlz'@;
put 'O3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0c3VibWl0cyIsbnVsbCl9KSgpfXZpZXdMaWJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJs'@;
put 'aWMvdmlld2xpYnMiLG51bGwpfSkoKX1yZWZyZXNoTGliSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWZyZXNobGliaW5mbyIse2xpYjJyZWZyZXNoOlt7bGlicmVmOmF9XX0pfSkoKX12ZXJzaW9u'@;
put 'SGlzdG9yeShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPXtpd2FudDpbe0xJQkRTOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0dmVyc2lvbmhpc3RvcnkiLGgpfSkoKX12aWV3VGFibGVzKGEpe3ZhciBkPXRoaXM7'@;
put 'cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPXtTQVNDb250cm9sVGFibGU6W3tNUExJQjphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJsZXMiLGgpfSkoKX12aWV3RGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigp'@;
put 'e2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tMSUJEUzphLEZJTFRFUl9SSzpkfV19O3JldHVybiB5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixmKX0pKCl9dmlld0RhdGFTZWFyY2goYSxkPSExLGgsZil7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24q'@;
put 'KCl7bGV0IFc9e1NBU0NvbnRyb2xUYWJsZTpbe1NFQVJDSFRZUEU6YS5sZW5ndGg+MD9kPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmEsTElCRFM6aCxGSUxURVJfUks6Zn1dfTtyZXR1cm4geWllbGQgXy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsVyl9KSgp'@;
put 'fWdldFhMTWFwUnVsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgaD17Z2V0eGxtYXBzX2luOlt7WExNQVBfSUQ6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0eGxtYXBzIixoKX0pKCl9Z2V0RGV0YWlscyhhLGQs'@;
put 'aCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsXyl9KSgpfXNob3dEaWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9b'@;
put 'ZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsXyx7dXNlQ29tcHV0ZUFwaTohMX0pfSkoKX1yZWplY3RpbmcoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdCho'@;
put 'LF8se3VzZUNvbXB1dGVBcGk6ITF9KX0pKCl9YXBwcm92ZVRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9Z2V0SGlzdG9yeShhLGQsaCl7dmFyIGY9'@;
put 'dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsXyl9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGEsZCl7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6ZH0sbGliZHM6YX0pfWdldENoYW5nZUlu'@;
put 'Zm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe1RBQkxFOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsZil9KSgpfWdldFF1ZXJ5VmFsdWVzKGEsZCxoLGYsXyl7'@;
put 'dmFyIFQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IFc9e2l3YW50Olt7bGliZHM6ZCxjb2w6YSwuLi5mJiZ7U1RBUlRST1c6Zn0sLi4uXyYme1JPV1M6X319XX07cmV0dXJuIGgubGVuZ3RoPjAmJihXLkZJTFRFUlFVRVJZPWgpLHlpZWxkIFQuc2FzU2VydmljZS5yZXF1ZXN0KCJw'@;
put 'dWJsaWMvZ2V0Y29sdmFscyIsVykuY2F0Y2gocGU9Pnt0aHJvdyBwZX0pfSkoKX1zYXZlUXVlcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj17aXdhbnQ6W3tmaWx0ZXJfdGFibGU6YX1dLGZpbHRlcnF1ZXJ5OmR9LF89eWllbGQgaC5zYXNTZXJ2aWNlLnJl'@;
put 'cXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsZik7cmV0dXJuIGguZmlsdGVyLm5leHQoXyksX30pKCl9b3BlblRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPXtpd2FudDpbe3RhYmxlX2lkOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5y'@;
put 'ZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKX0pKCl9Y2hlY2tPcGVyYXRvcihhLGQsaCl7bGV0IGY7c3dpdGNoKGEpe2Nhc2UiQkVUV0VFTiI6ZCBpbnN0YW5jZW9mIEFycmF5JiYoIiIhPT1kWzBdJiYiIiE9PWRbMV0/Zj1kWzBdKyIgQU5EICIrZFsxXToiIiE9PWRbMF0mJiIi'@;
put 'PT09ZFsxXT8oZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6IiI9PT1kWzBdJiYiIiE9PWRbMV0/KGRbMF09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pOihkWzBdPSIuIixkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKSk7YnJlYWs7Y2FzZSJJTiI6Y2FzZSJOT1QgSU4iOmxldCBU'@;
put 'PVtdO2lmKHR5cGVvZiBkPCJ1Iilmb3IobGV0IFc9MDtXPGQubGVuZ3RoO1crKykhMD09PWRbV10uY2hlY2tlZCYmKCJjaGFyIj09PWg/KCJzdHJpbmciPT10eXBlb2YgZFtXXS52YWwmJihkW1ddLnZhbD1kW1ddLnZhbC5yZXBsYWNlKCInIiwiJyciKSksVC5wdXNoKCInIitkW1ddLnZhbCsi'@;
put 'JyIpKToobnVsbD09PWRbV10udmFsJiYoZFtXXS52YWw9Ii4iKSxULnB1c2goZFtXXS52YWwpKSk7ZD0iKCIrVCsiKSI7YnJlYWs7Y2FzZSJDT05UQUlOUyI6YT0iPyI7YnJlYWs7Y2FzZSJOT1QgRVFVQUwiOmE9Im5lIn1yZXR1cm4ibnVtIj09PWgmJm51bGw9PT1kJiYoZD0iLiIpLCJQbGVh'@;
put 'c2Ugc2VsZWN0IHZhbHVlIj09PWQmJihkPSIiKSwtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihhKSYmIm51bSI9PT1oJiYiIj09PWQmJihkPSIuIiksIkJFVFdFRU4iPT09YT97dmFsdWU6ZixvcGVyYXRvcjphfTp7dmFsdWU6ZCxvcGVyYXRvcjphfX13aGVyZUNs'@;
put 'YXVzZUNyZWF0b3IoYSxkLGgpe2xldCBXLHdlLGY9IiIsaWU9IiIscGU9W107Zm9yKGxldCBaZT0wO1plPGEucXVlcnlPYmoubGVuZ3RoO1plKyspe2xldCBpdD0iIixldD1hLnF1ZXJ5T2JqW1plXTtmb3IobGV0IHl0PTA7eXQ8ZXQuZWxlbWVudHMubGVuZ3RoO3l0Kyspe2xldCBTdCxFdD1l'@;
put 'dC5lbGVtZW50c1t5dF07Vz15dDxldC5lbGVtZW50cy5sZW5ndGgtMT9ldC5jbGF1c2VMb2dpYzoiIjtmb3IobGV0IExyPTA7THI8RXQudmFsdWVzLmxlbmd0aDtMcisrKXtpZigic3RyaW5nIj09dHlwZW9mIEV0LnZhbHVlJiYibnVtYmVyIj09dHlwZW9mIEV0LnZhbHVlc1tMcl0uZm9ybWF0'@;
put 'dGVkKUV0LnZhbHVlPT09SlNPTi5zdHJpbmdpZnkoRXQudmFsdWVzW0xyXS5mb3JtYXR0ZWQpJiYoU3Q9RXQudmFsdWVzW0xyXS51bmZvcm1hdHRlZCk7ZWxzZXtsZXQgTGk9Im51bWJlciIhPXR5cGVvZiBFdC52YWx1ZXNbTHJdLmZvcm1hdHRlZCYmbnVsbCE9PUV0LnZhbHVlc1tMcl0uZm9y'@;
put 'bWF0dGVkP0V0LnZhbHVlc1tMcl0uZm9ybWF0dGVkLnRyaW0oKTpFdC52YWx1ZXNbTHJdLmZvcm1hdHRlZDtFdC52YWx1ZT09PUxpJiYoU3Q9RXQudmFsdWVzW0xyXS51bmZvcm1hdHRlZCl9IlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09RXQudmFsdWUmJi0xIT09WyI9IiwiPiIsIjwiLCI8PSIs'@;
put 'Ij49IiwibmUiXS5pbmRleE9mKEV0Lm9wZXJhdG9yKSYmKFN0PSIiKSwoIkNPTlRBSU5TIj09PUV0Lm9wZXJhdG9yfHwiTElLRSI9PT1FdC5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PUV0Lm9wZXJhdG9yKSYmKFN0PUV0LnZhbHVlKX1pZihTdHx8KFN0PUV0LnZhbHVlKSxFdC52YWx1ZSBp'@;
put 'bnN0YW5jZW9mIEFycmF5JiYiQkVUV0VFTiI9PT1FdC5vcGVyYXRvcil7U3Q9W10sU3QucHVzaChFdC52YWx1ZVswXSksU3QucHVzaChFdC52YWx1ZVsxXSk7Zm9yKGxldCBMcj0wO0xyPEV0LnZhbHVlcy5sZW5ndGg7THIrKylTdFswXT09PUV0LnZhbHVlc1tMcl0uZm9ybWF0dGVkJiYoU3Rb'@;
put 'MF09RXQudmFsdWVzW0xyXS51bmZvcm1hdHRlZCksU3RbMV09PT1FdC52YWx1ZXNbTHJdLmZvcm1hdHRlZCYmKFN0WzFdPUV0LnZhbHVlc1tMcl0udW5mb3JtYXR0ZWQpfWlmKEV0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJigiSU4iPT09RXQub3BlcmF0b3J8fCJOT1QgSU4iPT09RXQub3Bl'@;
put 'cmF0b3IpKXtTdD1bXSxTdD1FdC52YWx1ZTtmb3IobGV0IExyPTA7THI8RXQudmFsdWVzLmxlbmd0aDtMcisrKVN0W0xyXSYmU3RbTHJdLnZhbD09PUV0LnZhbHVlc1tMcl0uZm9ybWF0dGVkJiYoU3RbTHJdLnZhbD1FdC52YWx1ZXNbTHJdLnVuZm9ybWF0dGVkKX1sZXQgSnQ9RXQudHlwZTtj'@;
put 'b25zdCBubj1FdC52YWx1ZVZhcmlhYmxlO2xldCBjcix2bj1udWxsPT09RXQudmFyaWFibGU/IiI6RXQudmFyaWFibGUsTm49bnVsbD09PUV0Lm9wZXJhdG9yPyIiOkV0Lm9wZXJhdG9yO2NyPXRoaXMuY2hlY2tPcGVyYXRvcihObixTdCxKdCkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBjciYm'@;
put 'IigiIT09Y3JbMF0mJihjcj1jci5yZXBsYWNlKCInIiwiJyciKSksTm49dGhpcy5jaGVja09wZXJhdG9yKE5uLGNyLEp0KS5vcGVyYXRvciwiY2hhciI9PT1KdCYmIklOIiE9PU5uJiYiTk9UIElOIiE9PU5uPyh0eXBlb2YgY3I+InUiJiYoY3I9IiIpLGNyPW5uPyIgIitjcisiICI6IiAnIitj'@;
put 'cisiJyAiLGl0PWl0KyIgIit2bisiICIrTm4rY3IrVyk6KCJudW0iPT09SnQmJnR5cGVvZiBjcj4idSImJihjcj0iLiIpLGNyPXR5cGVvZiBjcj4idSI/IiI6IiAiK2NyKyIgIixpdD1pdCsiICIrdm4rIiAiK05uK2NyK1cpfXBlLnB1c2goaXQpfWllPSIiO2ZvcihsZXQgWmU9MDtaZTxwZS5s'@;
put 'ZW5ndGg7WmUrKyl3ZT1aZTxwZS5sZW5ndGgtMT9kOiIiLGllPTE9PT1wZS5sZW5ndGg/cGVbMF06aWUrIiAoIitwZVtaZV0rIikgIit3ZTtyZXR1cm4gZj1pZS5zdWJzdHIoMSkuc2xpY2UoMCwtMSksaWU9IldIRVJFIitpZSsiOyIsdGhpcy5xdWVyeS5uZXh0KHt3aGVyZUNsYXVzZTppZSxz'@;
put 'dHJpbmc6ZixvYmo6YSxsaWJkczpofSkse3doZXJlQ2xhdXNlOmllLHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9W107cmV0dXJuIGEuZmlsdGVyR3JvdXBzLmZvckVhY2goKGgsZik9PntoLmZpbHRlckNsYXVzZXMuZm9yRWFjaChfPT57bGV0IFQ9IiI7IkJF'@;
put 'VFdFRU4iPT09Xy5vcGVyYXRvcj9UPWAke18udmFsdWVbMF19IEFORCAke18udmFsdWVbMV19YDoiSU4iPT09Xy5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1fLm9wZXJhdG9yPyhfLnZhbHVlLmZvckVhY2goVz0+e2lmKFcuY2hlY2tlZCl7Y29uc3QgaWU9Vy52YWw7InN0cmluZyIhPXR5cGVvZiBp'@;
put 'ZXx8KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoaWUpJiYiY2hhciIhPT1fLnR5cGU/VC5sZW5ndGg+MD9UKz1gLCR7aWV9YDpUPWAoJHtpZX1gOlQubGVuZ3RoPjA/VCs9YCwnJHtpZS5yZXBsYWNlKC8nL2csIicnIil9J2A6VD1gKCcke2llLnJlcGxhY2UoLycvZywiJyciKX0nYH19KSxULmxl'@;
put 'bmd0aD4wJiYoVCs9IikiKSk6IiI9PT1fLnZhbHVlP1Q9ImNoYXIiPT09Xy50eXBlPyInICciOiIuIjoiY2hhciI9PT1fLnR5cGUmJiFfLnZhbHVlVmFyaWFibGUmJihUPWAnJHtfLnZhbHVlLnJlcGxhY2UoLycvZywiJyciKX0nYCksZC5wdXNoKHtHUk9VUF9MT0dJQzphLmdyb3VwTG9naWMs'@;
put 'U1VCR1JPVVBfTE9HSUM6aC5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTpfLnZhcmlhYmxlLE9QRVJBVE9SX05NOl8ub3BlcmF0b3IsUkFXX1ZBTFVFOlR8fF8udmFsdWV9KX0pfSksZH1pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGEsZCl7Y29uc3Qg'@;
put 'aD17cXVlcnlPYmo6W10sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzppbChHbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUN9O2lsKEduLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaCksaWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWM9aWwo'@;
put 'R24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDO2xldCBmPSIiLF89e2VsZW1lbnRzOltdfSxUPTA7aWwoR24sYSkuZmlsdGVyLnF1ZXJ5LmZvckVhY2goVz0+e2NvbnN0IGllPXt9O2ZvcihsZXQgcGU9MDtwZTxkLmxlbmd0aDtwZSsrKWlmKGRbcGVdLk5BTUU9PT1XLlZBUklBQkxF'@;
put 'X05NKXtpZihmPVcuU1VCR1JPVVBfTE9HSUMsaWUuZGR0eXBlPWRbcGVdLkREVFlQRSxpZS50eXBlPWRbcGVdLlRZUEUsaWUub3BlcmF0b3JzPSJudW0iPT09ZFtwZV0uVFlQRT9Hbi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOkduLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLGllLmxvZ2ljPW51'@;
put 'bGwsaWUub3BlcmF0b3I9Vy5PUEVSQVRPUl9OTSxpZS52YXJpYWJsZT1XLlZBUklBQkxFX05NLCJjaGFyIj09PWRbcGVdLlRZUEUpaWYoIklOIj09PVcuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09Vy5PUEVSQVRPUl9OTSl7Y29uc3Qgd2U9W10sWmU9Vy5SQVdfVkFMVUUuc2xpY2UoMSwtMSku'@;
put 'c3BsaXQoIicsJyIpOzE9PT1aZS5sZW5ndGg/d2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6WmVbMF0uc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpfSk6WmUuZm9yRWFjaCgoaXQsZXQpPT57d2UucHVzaCgwPT09ZXQ/e2NoZWNrZWQ6ITAsdmFsOml0LnNsaWNlKDEpLnJlcGxhY2UoLycn'@;
put 'L2csIiciKX06ZXQ9PT1aZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6aXQuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6aXQucmVwbGFjZSgvJycvZywiJyIpfSl9KSxpZS52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHdlKX1lbHNl'@;
put 'IGllLnZhbHVlPVcuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKTtlbHNlIGlmKCJJTiI9PT1XLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PVcuT1BFUkFUT1JfTk0pe2NvbnN0IHdlPVtdO1cuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCIsIikuZm9yRWFjaCgo'@;
put 'aXQsZXQpPT57d2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6aXR9KX0pLGllLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUod2UpfWVsc2UgaWYoIkJFVFdFRU4iPT09Vy5PUEVSQVRPUl9OTSl7Y29uc3Qgd2U9Vy5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7aWUudmFsdWU9d2V9'@;
put 'ZWxzZSBpZS52YWx1ZT1XLlJBV19WQUxVRTtpZS52YWx1ZXM9W10sVD09PVcuU1VCR1JPVVBfSUR8fChpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoXykpLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1Rd'@;
put 'LmNsYXVzZUxvZ2ljPWYsaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbVF0uaW52YWxpZENsYXVzZT0hMSxUKyssXy5lbGVtZW50cz1bXSksXy5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaWUpKTticmVha319KSxfLmVsZW1lbnRzLmxlbmd0aD4w'@;
put 'JiYoaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKF8pKSxpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5jbGF1c2VMb2dpYz1mLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1RdLmludmFs'@;
put 'aWRDbGF1c2U9ITEpLGlsKEduLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gYS5yZW1vdmVRdWVyeS5uZXh0KCEwKSwhMH0pKCl9c3BlY0NvbnZlcnNpb24oYSl7bGV0IGQ9e30saD1bXTtpZihoPWEubWFw'@;
put 'KGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEgaW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6Im51bSIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5n'@;
put 'Iixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJlYWR5KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGgpKXtjb25zdCBfPWhbZl0udHlwZSxUPWhbZl0u'@;
put 'bGVuZ3RoOyJudW0iPT09Xz9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09XyYmKGRbZl09YCRjaGFyJHtUfS5gKX1yZXR1cm4gZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIob2EpLGFyKFRjKSxhcih3MCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIGE0KGMpe3JldHVybiBudWxsIT1jJiYiZmFsc2UiIT1gJHtjfWB9ZnVuY3Rpb24gam9lKGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24ga1ZlKGMpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihj'@;
put 'KSl9KGMpP051bWJlcihjKTpsfWZ1bmN0aW9uIFAwKGMpe3JldHVybiBjIGluc3RhbmNlb2YgTmk/Yy5uYXRpdmVFbGVtZW50OmN9Y29uc3Qgbnc9e3NjaGVkdWxlKGMpe2xldCBsPXJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWNhbmNlbEFuaW1hdGlvbkZyYW1lO2NvbnN0e2RlbGVnYXRlOmR9'@;
put 'PW53O2QmJihsPWQucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9ZC5jYW5jZWxBbmltYXRpb25GcmFtZSk7Y29uc3QgaD1sKGY9PnthPXZvaWQgMCxjKGYpfSk7cmV0dXJuIG5ldyBlZSgoKT0+YT8uKGgpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PW53'@;
put 'O3JldHVybihsPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4uYyl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PW53O3JldHVybihsPy5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUp'@;
put 'KC4uLmMpfSxkZWxlZ2F0ZTp2b2lkIDB9LHpvZT1uZXcgY2xhc3MgRFZlIGV4dGVuZHMgQlB7Zmx1c2gobCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlm'@;
put 'dCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19'@;
put 'fShjbGFzcyBUVmUgZXh0ZW5kcyBOUHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5w'@;
put 'dXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1udy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PmwuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVB'@;
put 'c3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYobncuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYSksbC5fc2NoZWR1bGVkPXZvaWQgMCl9fSk7bGV0IEp6LExWZT0xO2Nv'@;
put 'bnN0IFpBPXt9O2Z1bmN0aW9uIFVvZShjKXtyZXR1cm4gYyBpbiBaQSYmKGRlbGV0ZSBaQVtjXSwhMCl9Y29uc3QgSVZlPXtzZXRJbW1lZGlhdGUoYyl7Y29uc3QgbD1MVmUrKztyZXR1cm4gWkFbbF09ITAsSnp8fChKej1Qcm9taXNlLnJlc29sdmUoKSksSnoudGhlbigoKT0+VW9lKGwpJiZj'@;
put 'KCkpLGx9LGNsZWFySW1tZWRpYXRlKGMpe1VvZShjKX19LHtzZXRJbW1lZGlhdGU6UlZlLGNsZWFySW1tZWRpYXRlOk9WZX09SVZlLFlBPXtzZXRJbW1lZGlhdGUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09WUE7cmV0dXJuKGw/LnNldEltbWVkaWF0ZXx8UlZlKSguLi5jKX0sY2xlYXJJbW1l'@;
put 'ZGlhdGUoYyl7Y29uc3R7ZGVsZWdhdGU6bH09WUE7cmV0dXJuKGw/LmNsZWFySW1tZWRpYXRlfHxPVmUpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O25ldyBjbGFzcyBGVmUgZXh0ZW5kcyBCUHtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2No'@;
put 'ZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9'@;
put 'ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIFBWZSBleHRlbmRzIE5Qe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBu'@;
put 'dWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPVlBLnNldEltbWVkaWF0ZShsLmZsdXNoLmJpbmQobCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lm'@;
put 'KG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihZQS5jbGVhckltbWVkaWF0ZShh'@;
put 'KSxsLl9zY2hlZHVsZWQ9PT1hJiYobC5fc2NoZWR1bGVkPXZvaWQgMCkpfX0pO2Z1bmN0aW9uIFpvZShjLGw9aWIpe3JldHVybiBmdW5jdGlvbiBOVmUoYyl7cmV0dXJuIFhlKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCxfPSExO2NvbnN0IFQ9KCk9PntpZihmPy51bnN1YnNjcmli'@;
put 'ZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IGllPWg7aD1udWxsLGEubmV4dChpZSl9XyYmYS5jb21wbGV0ZSgpfSxXPSgpPT57Zj1udWxsLF8mJmEuY29tcGxldGUoKX07bC5zdWJzY3JpYmUoVWUoYSxpZT0+e2Q9ITAsaD1pZSxmfHxLcihjKGllKSkuc3Vic2NyaWJlKGY9VWUoYSxULFcpKX0s'@;
put 'KCk9PntfPSEwLCghZHx8IWZ8fGYuY2xvc2VkKSYmYS5jb21wbGV0ZSgpfSkpfSl9KCgpPT5qUChjLGwpKX1sZXQgUXo7dHJ5e1F6PXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7UXo9ITF9bGV0IHJ3LGVVLFlvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KGEpe3RoaXMuX3BsYXRmb3JtSWQ9YSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP1JzKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3Iu'@;
put 'dXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIVF6KSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0'@;
put 'aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8u'@;
put 'dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lk'@;
put 'L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIGl3KGMpe3JldHVybiBmdW5jdGlvbiBWVmUoKXtpZihudWxsPT1ydyYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5h'@;
put 'ZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+cnc9ITB9KSl9ZmluYWxseXtydz1yd3x8ITF9cmV0dXJuIHJ3fSgpP2M6ISFjLmNhcHR1cmV9ZnVuY3Rpb24gR29lKGMpe2lmKGZ1bmN0aW9uIEJWZSgpe2lmKG51'@;
put 'bGw9PWVVKXtjb25zdCBjPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO2VVPSEoIWN8fCFjLmNyZWF0ZVNoYWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIGVVfSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlw'@;
put 'ZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBHQShjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1sZXQgelZlPSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1hLHRoaXMuX3BsYXRmb3JtPWQsdGhpcy5fc2Nyb2xsZWQ9bmV3IGJlLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX3Njcm9sbGVkQ291bnQ9MCx0aGlzLnNjcm9sbENvbnRhaW5lcnM9bmV3IE1hcCx0aGlzLl9kb2N1'@;
put 'bWVudD1ofXJlZ2lzdGVyKGEpe3RoaXMuc2Nyb2xsQ29udGFpbmVycy5oYXMoYSl8fHRoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQoYSxhLmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dChhKSkpfWRlcmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLnNj'@;
put 'cm9sbENvbnRhaW5lcnMuZ2V0KGEpO2QmJihkLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShhKSl9c2Nyb2xsZWQoYT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgS2UoZD0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5f'@;
put 'YWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBoPWE+MD90aGlzLl9zY3JvbGxlZC5waXBlKFpvZShhKSkuc3Vic2NyaWJlKGQpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShkKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aC51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVk'@;
put 'Q291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOldpKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChhLGQpPT50aGlzLmRlcmVnaXN0ZXIoZCkp'@;
put 'LHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZCkucGlwZShMYShmPT4hZnx8aC5pbmRleE9mKGYpPi0xKSl9Z2V0QW5jZXN0b3JTY3Jv'@;
put 'bGxDb250YWluZXJzKGEpe2NvbnN0IGQ9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChoLGYpPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChmLGEpJiZkLnB1c2goZil9KSxkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVs'@;
put 'dFZpZXd8fHdpbmRvd31fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBoPVAwKGQpLGY9YS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEwfXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1fYWRkR2xvYmFsTGlzdGVuZXIo'@;
put 'KXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uMih0aGlzLl9nZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0'@;
put 'aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihZb2UpLGFyKElz'@;
put 'LDgpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxaVmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcGxhdGZvcm09YSx0aGlzLl9jaGFuZ2U9bmV3IGJlLHRoaXMuX2NoYW5nZUxp'@;
put 'c3RlbmVyPWY9Pnt0aGlzLl9jaGFuZ2UubmV4dChmKX0sdGhpcy5fZG9jdW1lbnQ9aCxkLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoYS5pc0Jyb3dzZXIpe2NvbnN0IGY9dGhpcy5fZ2V0V2luZG93KCk7Zi5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVy'@;
put 'KSxmLmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKX0pfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25z'@;
put 'dCBhPXRoaXMuX2dldFdpbmRvdygpO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdl'@;
put 'dFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgYT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93'@;
put 'c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGF9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgYT10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJv'@;
put 'dHRvbTphLnRvcCtoLHJpZ2h0OmEubGVmdCtkLGhlaWdodDpoLHdpZHRoOmR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IGE9dGhpcy5fZG9jdW1lbnQsZD10aGlzLl9nZXRXaW5kb3co'@;
put 'KSxoPWEuZG9jdW1lbnRFbGVtZW50LGY9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1mLnRvcHx8YS5ib2R5LnNjcm9sbFRvcHx8ZC5zY3JvbGxZfHxoLnNjcm9sbFRvcHx8MCxsZWZ0Oi1mLmxlZnR8fGEuYm9keS5zY3JvbGxMZWZ0fHxkLnNjcm9sbFh8fGguc2Nyb2xs'@;
put 'TGVmdHx8MH19Y2hhbmdlKGE9MjApe3JldHVybiBhPjA/dGhpcy5fY2hhbmdlLnBpcGUoWm9lKGEpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dl'@;
put 'dFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShh'@;
put 'cihZb2UpLGFyKE5vKSxhcihJcyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksWVZlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj'@;
put 'Llx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0IGxCZT1uZXcgU2koImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBjQmUoKXtyZXR1cm4gRmkoSXMpfX0pLHVCZT0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8'@;
put 'bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtsZXQgWG9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcg'@;
put 'RXIsYSYmKHRoaXMudmFsdWU9ZnVuY3Rpb24gZEJlKGMpe2NvbnN0IGw9Yz8udG9Mb3dlckNhc2UoKXx8IiI7cmV0dXJuImF1dG8iPT09bCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/dUJlLnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRyIjoi'@;
put 'cnRsIj09PWw/InJ0bCI6Imx0ciJ9KChhLmJvZHk/YS5ib2R5LmRpcjpudWxsKXx8KGEuZG9jdW1lbnRFbGVtZW50P2EuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpKX1uZ09uRGVzdHJveSgpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGxCZSw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gdFUoYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkp'@;
put 'e2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4gY31mdW5jdGlvbiB6NyhjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7dFUoYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIs'@;
put 'Ii13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXItc2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1m'@;
put 'dW5jdGlvbiBKb2UoYyxsLGEpe3RVKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uICRBKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gUW9l'@;
put 'KGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBhcnNlRmxvYXQoYykqbH1mdW5jdGlvbiBuVShjLGwpe3JldHVybiBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWZ1bmN0aW9uIHJVKGMpe2Nv'@;
put 'bnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiBpVShjLGwsYSl7Y29uc3R7dG9wOmQs'@;
put 'Ym90dG9tOmgsbGVmdDpmLHJpZ2h0Ol99PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8PV99ZnVuY3Rpb24gb3coYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIGVzZShjLGwsYSxkKXtj'@;
put 'b25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTpfLGxlZnQ6VCx3aWR0aDpXLGhlaWdodDppZX09YyxwZT1XKmwsd2U9aWUqbDtyZXR1cm4gZD5oLXdlJiZkPF8rd2UmJmE+VC1wZSYmYTxmK3BlfWNsYXNzIHRzZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMucG9zaXRpb25z'@;
put 'PW5ldyBNYXB9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JFYWNoKGE9Pnt0aGlz'@;
put 'LnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpyVShhKX0pfSl9aGFuZGxlU2Nyb2xsKGwpe2NvbnN0IGE9R0EobCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0dXJuIG51bGw7Y29u'@;
put 'c3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLF87aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCBpZT10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtmPWllLnRvcCxfPWllLmxlZnR9ZWxzZSBmPWEuc2Nyb2xsVG9wLF89YS5zY3JvbGxMZWZ0O2NvbnN0IFQ9aC50b3AtZixX'@;
put 'PWgubGVmdC1fO3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChpZSxwZSk9PntpZS5jbGllbnRSZWN0JiZhIT09cGUmJmEuY29udGFpbnMocGUpJiZvdyhpZS5jbGllbnRSZWN0LFQsVyl9KSxoLnRvcD1mLGgubGVmdD1fLHt0b3A6VCxsZWZ0Old9fWdldFZpZXdwb3J0U2Nyb2xsUG9z'@;
put 'aXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiBuc2UoYyl7Y29uc3QgbD1jLmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92ZUF0dHJp'@;
put 'YnV0ZSgiaWQiKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWQ/b3NlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8fCJ0ZXh0YXJlYSI9PT1kKSYmaXNlKGMsbCkscnNlKCJjYW52YXMiLGMsbCxv'@;
put 'c2UpLHJzZSgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxpc2UpLGx9ZnVuY3Rpb24gcnNlKGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVyeVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEucXVlcnlTZWxlY3RvckFsbChjKTtmb3IobGV0IF89MDtfPGgubGVuZ3RoO18r'@;
put 'KylkKGhbX10sZltfXSl9fWxldCBmQmU9MDtmdW5jdGlvbiBpc2UoYyxsKXsiZmlsZSIhPT1sLnR5cGUmJihsLnZhbHVlPWMudmFsdWUpLCJyYWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNsb25lLSR7bC5uYW1lfS0ke2ZCZSsrfWApfWZ1bmN0aW9uIG9zZShjLGwpe2Nv'@;
put 'bnN0IGE9bC5nZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRjaHt9fWNvbnN0IHNzZT1pdyh7cGFzc2l2ZTohMH0pLHFBPWl3KHtwYXNzaXZlOiExfSksb1U9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIGdCZXtnZXQgZGlzYWJsZWQoKXtyZXR1cm4g'@;
put 'dGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7Y29uc3QgYT1hNChsKTthIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRl'@;
put 'cmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+ejcoZCxhKSkpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PV8s'@;
put 'dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITEsdGhpcy5fbW92ZUV2ZW50cz1uZXcgYmUsdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fcG9p'@;
put 'bnRlclVwU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1lZS5FTVBUWSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fYm91bmRhcnlFbGVtZW50PW51bGwsdGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD0hMCx0aGlzLl9o'@;
put 'YW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1uZXcgU2V0LHRoaXMuX2RpcmVjdGlvbj0ibHRyIix0aGlzLmRyYWdTdGFydERlbGF5PTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBiZSx0aGlzLnN0YXJ0ZWQ9bmV3IGJlLHRoaXMucmVsZWFzZWQ9bmV3'@;
put 'IGJlLHRoaXMuZW5kZWQ9bmV3IGJlLHRoaXMuZW50ZXJlZD1uZXcgYmUsdGhpcy5leGl0ZWQ9bmV3IGJlLHRoaXMuZHJvcHBlZD1uZXcgYmUsdGhpcy5tb3ZlZD10aGlzLl9tb3ZlRXZlbnRzLHRoaXMuX3BvaW50ZXJEb3duPVQ9PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMu'@;
put 'X2hhbmRsZXMubGVuZ3RoKXtjb25zdCBXPXRoaXMuX2dldFRhcmdldEhhbmRsZShUKTtXJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhXKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoVyxUKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRp'@;
put 'YWxpemVEcmFnU2VxdWVuY2UodGhpcy5fcm9vdEVsZW1lbnQsVCl9LHRoaXMuX3BvaW50ZXJNb3ZlPVQ9Pntjb25zdCBXPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShUKTtpZighdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKXtpZihNYXRoLmFicyhXLngtdGhpcy5fcGlja3VwUG9z'@;
put 'aXRpb25PblBhZ2UueCkrTWF0aC5hYnMoVy55LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlzLl9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBaZT1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KFQpLGl0PXRo'@;
put 'aXMuX2Ryb3BDb250YWluZXI7aWYoIVplKXJldHVybiB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZShUKTsoIWl0fHwhaXQuaXNEcmFnZ2luZygpJiYhaXQuaXNSZWNlaXZpbmcoKSkmJihULnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9u'@;
put 'ZS5ydW4oKCk9PnRoaXMuX3N0YXJ0RHJhZ1NlcXVlbmNlKFQpKSl9cmV0dXJufVQucHJldmVudERlZmF1bHQoKTtjb25zdCBpZT10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihXKTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249'@;
put 'Vyx0aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEoaWUpLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihpZSxXKTtlbHNle2NvbnN0IHBlPXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5faW5pdGlhbENsaWVudFJlY3Q6dGhpcy5f'@;
put 'cGlja3VwUG9zaXRpb25PblBhZ2Usd2U9dGhpcy5fYWN0aXZlVHJhbnNmb3JtO3dlLng9aWUueC1wZS54K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueCx3ZS55PWllLnktcGUueSt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnksdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh3ZS54LHdl'@;
put 'LnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOmllLGV2ZW50OlQsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGllKSxkZWx0YTp0'@;
put 'aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGF9KX0pfSx0aGlzLl9wb2ludGVyVXA9VD0+e3RoaXMuX2VuZERyYWdTZXF1ZW5jZShUKX0sdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0PVQ9PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgVz10aGlzLl9nZXRUYXJnZXRIYW5kbGUoVCk7VyYm'@;
put 'IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoVykmJiF0aGlzLmRpc2FibGVkJiZULnByZXZlbnREZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxULnByZXZlbnREZWZhdWx0KCl9LHRoaXMud2l0aFJvb3RFbGVtZW50KGwpLndpdGhQYXJlbnQoYS5wYXJlbnREcmFnUmVmfHxudWxsKSx0'@;
put 'aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IHRzZShkKSxfLnJlZ2lzdGVyRHJhZ0l0ZW0odGhpcyl9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50fWdldFZpc2libGVFbGVtZW50'@;
put 'KCl7cmV0dXJuIHRoaXMuaXNEcmFnZ2luZygpP3RoaXMuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6dGhpcy5nZXRSb290RWxlbWVudCgpfXdpdGhIYW5kbGVzKGwpe3RoaXMuX2hhbmRsZXM9bC5tYXAoZD0+UDAoZCkpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChkPT56NyhkLHRoaXMuZGlzYWJs'@;
put 'ZWQpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZm9yRWFjaChkPT57dGhpcy5faGFuZGxlcy5pbmRleE9mKGQpPi0xJiZhLmFkZChkKX0pLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1hLHRo'@;
put 'aXN9d2l0aFByZXZpZXdUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcHJldmlld1RlbXBsYXRlPWwsdGhpc313aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1sLHRoaXN9d2l0aFJvb3RFbGVtZW50KGwpe2NvbnN0IGE9UDAobCk7cmV0'@;
put 'dXJuIGEhPT10aGlzLl9yb290RWxlbWVudCYmKHRoaXMuX3Jvb3RFbGVtZW50JiZ0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24i'@;
put 'LHRoaXMuX3BvaW50ZXJEb3duLHFBKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLHNzZSksYS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxxQSl9KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQg'@;
put 'MCx0aGlzLl9yb290RWxlbWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMuX3Jvb3RFbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5vd25lclNWR0VsZW1lbnQpLHRoaXN9d2l0aEJvdW5kYXJ5RWxl'@;
put 'bWVudChsKXtyZXR1cm4gdGhpcy5fYm91bmRhcnlFbGVtZW50PWw/UDAobCk6bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEwKS5zdWJzY3JpYmUoKCk9PnRo'@;
put 'aXMuX2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJlbnQobCl7cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5pc0RyYWdn'@;
put 'aW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVT'@;
put 'dWJzY3JpcHRpb25zKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRo'@;
put 'aXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAwLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo'@;
put 'aXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9yb290RWxlbWVudD10aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERy'@;
put 'YWdSZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyYmdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpfXJlc2V0KCl7dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm18fCIi'@;
put 'LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH19ZGlzYWJsZUhhbmRsZShsKXshdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmdGhpcy5faGFuZGxlcy5pbmRleE9mKGwpPi0xJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVz'@;
put 'LmFkZChsKSx6NyhsLCEwKSl9ZW5hYmxlSGFuZGxlKGwpe3RoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZGVsZXRlKGwpLHo3KGwsdGhpcy5kaXNhYmxlZCkpfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj1sLHRoaXN9'@;
put 'X3dpdGhEcm9wQ29udGFpbmVyKGwpe3RoaXMuX2Ryb3BDb250YWluZXI9bH1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7Y29uc3QgbD10aGlzLmlzRHJhZ2dpbmcoKT90aGlzLl9hY3RpdmVUcmFuc2Zvcm06dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtyZXR1cm57eDpsLngseTpsLnl9fXNldEZyZWVE'@;
put 'cmFnUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PWwueCx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9bC55LHRoaXMuX2Ryb3BDb250YWluZXJ8fHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0o'@;
put 'bC54LGwueSksdGhpc313aXRoUHJldmlld0NvbnRhaW5lcihsKXtyZXR1cm4gdGhpcy5fcHJldmlld0NvbnRhaW5lcj1sLHRoaXN9X3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uO2wmJnRoaXMuX2Ryb3BDb250YWlu'@;
put 'ZXImJnRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIodGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCksbCl9X3JlbW92ZVN1YnNjcmlwdGlvbnMoKXt0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BvaW50ZXJVcFN1YnNj'@;
put 'cmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9kZXN0cm95UHJldmlldygpe3RoaXMuX3ByZXZpZXc/LnJlbW92ZSgpLHRoaXMuX3ByZXZpZXdSZWY/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdSZWY9bnVs'@;
put 'bH1fZGVzdHJveVBsYWNlaG9sZGVyKCl7dGhpcy5fcGxhY2Vob2xkZXI/LnJlbW92ZSgpLHRoaXMuX3BsYWNlaG9sZGVyUmVmPy5kZXN0cm95KCksdGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fcGxhY2Vob2xkZXJSZWY9bnVsbH1fZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9w'@;
put 'UmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZVN1YnNjcmlwdGlvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcyYmKHRoaXMuX3Jvb3RFbGVt'@;
put 'ZW50LnN0eWxlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPXRoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0KSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpKWlmKHRoaXMucmVsZWFzZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fZHJv'@;
put 'cENvbnRhaW5lci5fc3RvcFNjcm9sbGluZygpLHRoaXMuX2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpLnRoZW4oKCk9Pnt0aGlzLl9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERy'@;
put 'YWdnaW5nKHRoaXMpfSk7ZWxzZXt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLng7Y29uc3QgYT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCk7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LHRoaXMu'@;
put 'X25nWm9uZS5ydW4oKCk9Pnt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShhKSxkcm9wUG9pbnQ6YSxldmVudDpsfSl9KSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERy'@;
put 'YWdnaW5nKHRoaXMpfX1fc3RhcnREcmFnU2VxdWVuY2UobCl7c3cobCkmJih0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWU9RGF0ZS5ub3coKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcjtpZihhKXtjb25zdCBkPXRoaXMu'@;
put 'X3Jvb3RFbGVtZW50LGg9ZC5wYXJlbnROb2RlLGY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCksXz10aGlzLl9hbmNob3I9dGhpcy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxUPXRoaXMuX2dldFNoYWRvd1Jvb3Qo'@;
put 'KTtoLmluc2VydEJlZm9yZShfLGQpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09ZC5zdHlsZS50cmFuc2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9dGhpcy5fY3JlYXRlUHJldmlld0VsZW1lbnQoKSxKb2UoZCwhMSxvVSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoLnJlcGxhY2VD'@;
put 'aGlsZChmLGQpKSx0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoaCxUKS5hcHBlbmRDaGlsZCh0aGlzLl9wcmV2aWV3KSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLGEuc3RhcnQoKSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPWEsdGhpcy5faW5pdGlhbElu'@;
put 'ZGV4PWEuZ2V0SXRlbUluZGV4KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKGE/YS5nZXRTY3JvbGxhYmxl'@;
put 'UGFyZW50cygpOltdKX1faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShsLGEpe3RoaXMuX3BhcmVudERyYWdSZWYmJmEuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZD10aGlzLmlzRHJhZ2dpbmcoKSxoPXN3KGEpLGY9IWgmJjAhPT1hLmJ1dHRvbixfPXRoaXMuX3Jvb3RFbGVtZW50LFQ9R0EoYSks'@;
put 'Vz0haCYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUrODAwPkRhdGUubm93KCksaWU9aD9mdW5jdGlvbiBvQmUoYyl7Y29uc3QgbD1jLnRvdWNoZXMmJmMudG91Y2hlc1swXXx8Yy5jaGFuZ2VkVG91Y2hlcyYmYy5jaGFuZ2VkVG91Y2hlc1swXTty'@;
put 'ZXR1cm4hKCFsfHwtMSE9PWwuaWRlbnRpZmllcnx8bnVsbCE9bC5yYWRpdXNYJiYxIT09bC5yYWRpdXNYfHxudWxsIT1sLnJhZGl1c1kmJjEhPT1sLnJhZGl1c1kpfShhKTpmdW5jdGlvbiBpQmUoYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbnN8fDA9PT1jLm9mZnNldFgmJjA9PT1jLm9mZnNldFl9'@;
put 'KGEpO2lmKFQmJlQuZHJhZ2dhYmxlJiYibW91c2Vkb3duIj09PWEudHlwZSYmYS5wcmV2ZW50RGVmYXVsdCgpLGR8fGZ8fFd8fGllKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRWU9Xy5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodD1FZS53ZWJraXRU'@;
put 'YXBIaWdobGlnaHRDb2xvcnx8IiIsRWUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0PXRoaXMuX3Jv'@;
put 'b3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJNb3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJh'@;
put 'Z0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJVcCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoRWU9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xs'@;
put 'KEVlKSksdGhpcy5fYm91bmRhcnlFbGVtZW50JiYodGhpcy5fYm91bmRhcnlSZWN0PXJVKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IHBlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudD1wZSYmcGUudGVtcGxhdGUmJiFwZS5tYXRjaFNp'@;
put 'emU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudCh0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCxsLGEpO2NvbnN0IHdlPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRp'@;
put 'b25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6d2UueCx5OndlLnl9LHRoaXMuX2RyYWdTdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0'@;
put 'YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51cERyYWdBcnRpZmFjdHMobCl7Sm9lKHRoaXMuX3Jvb3RFbGVtZW50LCEwLG9VKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95UHJldmlldygp'@;
put 'LHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9wQ29udGFp'@;
put 'bmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksXz1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpmLGRyb3BQ'@;
put 'b2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3ZlckNvbnRh'@;
put 'aW5lcjpfLGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0aGlzLGQsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsXyxmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFjdGl2ZURy'@;
put 'b3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5pdGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlzLl9pbml0'@;
put 'aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5pdGlhbENvbnRhaW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ryb3BDb250'@;
put 'YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJvcENvbnRhaW5lcj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRleDp2b2lk'@;
put 'IDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3VycmVudEluZGV4OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZCxoKSx0aGlzLl9kcm9w'@;
put 'Q29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwtdGhpcy5fcGlja3VwUG9zaXRpb25J'@;
put 'bkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1fY3JlYXRlUHJldmlld0VsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSxhPXRoaXMucHJldmlld0NsYXNzLGQ9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGg7aWYoZCYmbCl7Y29uc3QgZj1s'@;
put 'Lm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsQ2xpZW50UmVjdDpudWxsLF89bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkLGwuY29udGV4dCk7Xy5kZXRlY3RDaGFuZ2VzKCksaD1sc2UoXyx0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld1JlZj1fLGwubWF0Y2hTaXplP2Nz'@;
put 'ZShoLGYpOmguc3R5bGUudHJhbnNmb3JtPUtBKHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBoPW5zZSh0aGlzLl9yb290RWxlbWVudCksY3NlKGgsdGhpcy5faW5pdGlhbENsaWVudFJlY3QpLHRoaXMuX2luaXRpYWxUcmFu'@;
put 'c2Zvcm0mJihoLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtKTtyZXR1cm4gdFUoaC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOiIwIixwb3NpdGlvbjoiZml4ZWQiLHRvcDoiMCIsbGVmdDoiMCIsInotaW5kZXgiOmAke3RoaXMuX2NvbmZpZy56'@;
put 'SW5kZXh8fDFlM31gfSxvVSksejcoaCwhMSksaC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlz'@;
put 'dC5hZGQoYSkpLGh9X2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNNb3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmNsYXNzTGlzdC5hZGQo'@;
put 'ImNkay1kcmFnLWFuaW1hdGluZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQsbC50b3ApO2NvbnN0IGE9ZnVuY3Rpb24gaEJlKGMpe2NvbnN0IGw9Z2V0Q29tcHV0ZWRTdHlsZShjKSxhPW5VKGwsInRyYW5zaXRpb24tcHJvcGVydHkiKSxkPWEuZmluZChUPT4idHJhbnNm'@;
put 'b3JtIj09PVR8fCJhbGwiPT09VCk7aWYoIWQpcmV0dXJuIDA7Y29uc3QgaD1hLmluZGV4T2YoZCksZj1uVShsLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksXz1uVShsLCJ0cmFuc2l0aW9uLWRlbGF5Iik7cmV0dXJuIFFvZShmW2hdKStRb2UoX1toXSl9KHRoaXMuX3ByZXZpZXcpO3JldHVybiAw'@;
put 'PT09YT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPV89PnsoIV98fEdBKF8pPT09dGhpcy5fcHJldmlldyYmInRyYW5zZm9ybSI9PT1fLnByb3BlcnR5TmFtZSkmJih0aGlzLl9wcmV2aWV3Py5yZW1v'@;
put 'dmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKSxkKCksY2xlYXJUaW1lb3V0KGYpKX0sZj1zZXRUaW1lb3V0KGgsMS41KmEpO3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2NvbnN0'@;
put 'IGw9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSxhPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBkO3JldHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEsbC5jb250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RDaGFu'@;
put 'Z2VzKCksZD1sc2UodGhpcy5fcGxhY2Vob2xkZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpkPW5zZSh0aGlzLl9yb290RWxlbWVudCksZC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixkLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXBsYWNlaG9sZGVyIiksZH1fZ2V0UG9pbnRlclBvc2l0aW9u'@;
put 'SW5FbGVtZW50KGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsZj1oP2guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bCxfPXN3KGQpP2QudGFyZ2V0VG91Y2hlc1swXTpkLFQ9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmYubGVm'@;
put 'dC1sLmxlZnQrKF8ucGFnZVgtZi5sZWZ0LVQubGVmdCkseTpmLnRvcC1sLnRvcCsoXy5wYWdlWS1mLnRvcC1ULnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksZD1zdyhsKT9sLnRvdWNoZXNbMF18fGwu'@;
put 'Y2hhbmdlZFRvdWNoZXNbMF18fHtwYWdlWDowLHBhZ2VZOjB9OmwsaD1kLnBhZ2VYLWEubGVmdCxmPWQucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCBfPXRoaXMuX293bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKTtpZihfKXtjb25zdCBUPXRoaXMuX293'@;
put 'bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBULng9aCxULnk9ZixULm1hdHJpeFRyYW5zZm9ybShfLmludmVyc2UoKSl9fXJldHVybnt4OmgseTpmfX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3RoaXMu'@;
put 'X2Ryb3BDb250YWluZXIubG9ja0F4aXM6bnVsbDtsZXR7eDpkLHk6aH09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGwsdGhpcyx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCx0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCk6bDtpZigieCI9PT10aGlz'@;
put 'LmxvY2tBeGlzfHwieCI9PT1hP2g9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpLHRoaXMuX2JvdW5kYXJ5UmVjdCl7Y29uc3R7eDpmLHk6X309dGhpcy5fcGlja3VwUG9z'@;
put 'aXRpb25JbkVsZW1lbnQsVD10aGlzLl9ib3VuZGFyeVJlY3Qse3dpZHRoOlcsaGVpZ2h0OmllfT10aGlzLl9nZXRQcmV2aWV3UmVjdCgpLHBlPVQudG9wK18sd2U9VC5ib3R0b20tKGllLV8pO2Q9YXNlKGQsVC5sZWZ0K2YsVC5yaWdodC0oVy1mKSksaD1hc2UoaCxwZSx3ZSl9cmV0dXJue3g6'@;
put 'ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSxmPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSxfPU1hdGguYWJzKGEtZi54KSxUPU1hdGguYWJzKGQtZi55'@;
put 'KTtyZXR1cm4gXz50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxUPnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2'@;
put 'ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRsZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2'@;
put 'ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCx6Nyh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixxQSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0'@;
put 'YXJ0Iix0aGlzLl9wb2ludGVyRG93bixzc2UpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQscUEpfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1LQShsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVs'@;
put 'bD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFuc2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/aC50cmFuc2Zvcm06IiIpLGgudHJhbnNmb3JtPSRBKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShs'@;
put 'LGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPUtBKGwsYSk7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09JEEoaCxkKX1fZ2V0RHJhZ0Rpc3RhbmNlKGwpe2NvbnN0IGE9dGhpcy5fcGlja3VwUG9z'@;
put 'aXRpb25PblBhZ2U7cmV0dXJuIGE/e3g6bC54LWEueCx5OmwueS1hLnl9Ont4OjAseTowfX1fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKXt0aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dm9pZCAwLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9jb250YWluSW5z'@;
put 'aWRlQm91bmRhcnlPblJlc2l6ZSgpe2xldHt4OmwseTphfT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtO2lmKDA9PT1sJiYwPT09YXx8dGhpcy5pc0RyYWdnaW5nKCl8fCF0aGlzLl9ib3VuZGFyeUVsZW1lbnQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll'@;
put 'bnRSZWN0KCksaD10aGlzLl9ib3VuZGFyeUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PWgud2lkdGgmJjA9PT1oLmhlaWdodHx8MD09PWQud2lkdGgmJjA9PT1kLmhlaWdodClyZXR1cm47Y29uc3QgZj1oLmxlZnQtZC5sZWZ0LF89ZC5yaWdodC1oLnJpZ2h0LFQ9aC50'@;
put 'b3AtZC50b3AsVz1kLmJvdHRvbS1oLmJvdHRvbTtoLndpZHRoPmQud2lkdGg/KGY+MCYmKGwrPWYpLF8+MCYmKGwtPV8pKTpsPTAsaC5oZWlnaHQ+ZC5oZWlnaHQ/KFQ+MCYmKGErPVQpLFc+MCYmKGEtPVcpKTphPTAsKGwhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnh8fGEhPT10aGlzLl9w'@;
put 'YXNzaXZlVHJhbnNmb3JtLnkpJiZ0aGlzLnNldEZyZWVEcmFnUG9zaXRpb24oe3k6YSx4Omx9KX1fZ2V0RHJhZ1N0YXJ0RGVsYXkobCl7Y29uc3QgYT10aGlzLmRyYWdTdGFydERlbGF5O3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOnN3KGwpP2EudG91Y2g6YT9hLm1vdXNlOjB9X3VwZGF0'@;
put 'ZU9uU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTtpZihhKXtjb25zdCBkPUdBKGwpO3RoaXMuX2JvdW5kYXJ5UmVjdCYmZCE9PXRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmZC5jb250YWlucyh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpJiZvdyh0'@;
put 'aGlzLl9ib3VuZGFyeVJlY3QsYS50b3AsYS5sZWZ0KSx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54Kz1hLmxlZnQsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSs9YS50b3AsdGhpcy5fZHJvcENvbnRhaW5lcnx8KHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LT1hLmxlZnQsdGhpcy5f'@;
put 'YWN0aXZlVHJhbnNmb3JtLnktPWEudG9wLHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0odGhpcy5fYWN0aXZlVHJhbnNmb3JtLngsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkpKX19X2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50UG9zaXRpb25z'@;
put 'LnBvc2l0aW9ucy5nZXQodGhpcy5fZG9jdW1lbnQpPy5zY3JvbGxQb3NpdGlvbnx8dGhpcy5fcGFyZW50UG9zaXRpb25zLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX1fZ2V0U2hhZG93Um9vdCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9jYWNoZWRTaGFkb3dSb290JiYodGhpcy5fY2Fj'@;
put 'aGVkU2hhZG93Um9vdD1Hb2UodGhpcy5fcm9vdEVsZW1lbnQpKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQobCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiO2lmKCJwYXJlbnQiPT09ZClyZXR1cm4gbDtpZigiZ2xv'@;
put 'YmFsIj09PWQpe2NvbnN0IGg9dGhpcy5fZG9jdW1lbnQ7cmV0dXJuIGF8fGguZnVsbHNjcmVlbkVsZW1lbnR8fGgud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGgubW96RnVsbFNjcmVlbkVsZW1lbnR8fGgubXNGdWxsc2NyZWVuRWxlbWVudHx8aC5ib2R5fXJldHVybiBQMChkKX1fZ2V0UHJl'@;
put 'dmlld1JlY3QoKXtyZXR1cm4oIXRoaXMuX3ByZXZpZXdSZWN0fHwhdGhpcy5fcHJldmlld1JlY3Qud2lkdGgmJiF0aGlzLl9wcmV2aWV3UmVjdC5oZWlnaHQpJiYodGhpcy5fcHJldmlld1JlY3Q9dGhpcy5fcHJldmlldz90aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnRo'@;
put 'aXMuX2luaXRpYWxDbGllbnRSZWN0KSx0aGlzLl9wcmV2aWV3UmVjdH1fZ2V0VGFyZ2V0SGFuZGxlKGwpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQoYT0+bC50YXJnZXQmJihsLnRhcmdldD09PWF8fGEuY29udGFpbnMobC50YXJnZXQpKSl9fWZ1bmN0aW9uIEtBKGMsbCl7cmV0dXJuYHRy'@;
put 'YW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChjKX1weCwgJHtNYXRoLnJvdW5kKGwpfXB4LCAwKWB9ZnVuY3Rpb24gYXNlKGMsbCxhKXtyZXR1cm4gTWF0aC5tYXgobCxNYXRoLm1pbihhLGMpKX1mdW5jdGlvbiBzdyhjKXtyZXR1cm4idCI9PT1jLnR5cGVbMF19ZnVuY3Rpb24gbHNlKGMsbCl7Y29u'@;
put 'c3QgYT1jLnJvb3ROb2RlcztpZigxPT09YS5sZW5ndGgmJmFbMF0ubm9kZVR5cGU9PT1sLkVMRU1FTlRfTk9ERSlyZXR1cm4gYVswXTtjb25zdCBkPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEuZm9yRWFjaChoPT5kLmFwcGVuZENoaWxkKGgpKSxkfWZ1bmN0aW9uIGNzZShjLGwp'@;
put 'e2Muc3R5bGUud2lkdGg9YCR7bC53aWR0aH1weGAsYy5zdHlsZS5oZWlnaHQ9YCR7bC5oZWlnaHR9cHhgLGMuc3R5bGUudHJhbnNmb3JtPUtBKGwubGVmdCxsLnRvcCl9ZnVuY3Rpb24gdXNlKGMsbCxhKXtjb25zdCBkPWF3KGwsYy5sZW5ndGgtMSksaD1hdyhhLGMubGVuZ3RoLTEpO2lmKGQ9'@;
put 'PT1oKXJldHVybjtjb25zdCBmPWNbZF0sXz1oPGQ/LTE6MTtmb3IobGV0IFQ9ZDtUIT09aDtUKz1fKWNbVF09Y1tUK19dO2NbaF09Zn1mdW5jdGlvbiBhdyhjLGwpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGwsYykpfWNsYXNzIHZCZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2VsZW1l'@;
put 'bnQ9bCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVybGFwczohMX19c3RhcnQobCl7dGhpcy53aXRoSXRlbXMobCl9c29ydChs'@;
put 'LGEsZCxoKXtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsXz10aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpO2lmKC0xPT09XyYmZi5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25zdCBUPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sVz1mLmZp'@;
put 'bmRJbmRleCh5dD0+eXQuZHJhZz09PWwpLGllPWZbX10sd2U9aWUuY2xpZW50UmVjdCxFZT1XPl8/MTotMSxaZT10aGlzLl9nZXRJdGVtT2Zmc2V0UHgoZltXXS5jbGllbnRSZWN0LHdlLEVlKSxpdD10aGlzLl9nZXRTaWJsaW5nT2Zmc2V0UHgoVyxmLEVlKSxldD1mLnNsaWNlKCk7cmV0dXJu'@;
put 'IHVzZShmLFcsXyksZi5mb3JFYWNoKCh5dCxFdCk9PntpZihldFtFdF09PT15dClyZXR1cm47Y29uc3QgU3Q9eXQuZHJhZz09PWwsSnQ9U3Q/WmU6aXQsbm49U3Q/bC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp5dC5kcmFnLmdldFJvb3RFbGVtZW50KCk7eXQub2Zmc2V0Kz1KdCxUPyhubi5z'@;
put 'dHlsZS50cmFuc2Zvcm09JEEoYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZCh5dC5vZmZzZXQpfXB4LCAwLCAwKWAseXQuaW5pdGlhbFRyYW5zZm9ybSksb3coeXQuY2xpZW50UmVjdCwwLEp0KSk6KG5uLnN0eWxlLnRyYW5zZm9ybT0kQShgdHJhbnNsYXRlM2QoMCwgJHtNYXRoLnJvdW5kKHl0'@;
put 'Lm9mZnNldCl9cHgsIDApYCx5dC5pbml0aWFsVHJhbnNmb3JtKSxvdyh5dC5jbGllbnRSZWN0LEp0LDApKX0pLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz1pVSh3ZSxhLGQpLHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPWllLmRyYWcsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPVQ/aC54'@;
put 'OmgueSx7cHJldmlvdXNJbmRleDpXLGN1cnJlbnRJbmRleDpffX1lbnRlcihsLGEsZCxoKXtjb25zdCBmPW51bGw9PWh8fGg8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkKTpoLF89dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcyxUPV8uaW5kZXhPZihsKSxXPWwu'@;
put 'Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCk7bGV0IGllPV9bZl07aWYoaWU9PT1sJiYoaWU9X1tmKzFdKSwhaWUmJihudWxsPT1mfHwtMT09PWZ8fGY8Xy5sZW5ndGgtMSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZCkmJihpZT1fWzBdKSxUPi0xJiZfLnNwbGljZShULDEpLGll'@;
put 'JiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGllKSl7Y29uc3QgcGU9aWUuZ2V0Um9vdEVsZW1lbnQoKTtwZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShXLHBlKSxfLnNwbGljZShmLDAsbCl9ZWxzZSBQMCh0aGlzLl9lbGVtZW50KS5hcHBlbmRDaGlsZChXKSxfLnB1'@;
put 'c2gobCk7Vy5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aEl0ZW1zKGwpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXM9bC5zbGljZSgpLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhTb3J0UHJlZGljYXRlKGwpe3RoaXMuX3NvcnRQcmVkaWNh'@;
put 'dGU9bH1yZXNldCgpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXMuZm9yRWFjaChsPT57Y29uc3QgYT1sLmdldFJvb3RFbGVtZW50KCk7aWYoYSl7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmQoaD0+aC5kcmFnPT09bCk/LmluaXRpYWxUcmFuc2Zvcm07YS5zdHlsZS50cmFuc2Zvcm09'@;
put 'ZHx8IiJ9fSksdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPVtdLHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPW51bGwsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPTAsdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPSExfWdldEFjdGl2ZUl0ZW1zU25hcHNo'@;
put 'b3QoKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ2dhYmxlc31nZXRJdGVtSW5kZXgobCl7cmV0dXJuKCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJiJydGwiPT09dGhpcy5kaXJlY3Rpb24/dGhpcy5faXRlbVBvc2l0aW9ucy5zbGljZSgpLnJldmVyc2UoKTp0aGlzLl9pdGVtUG9z'@;
put 'aXRpb25zKS5maW5kSW5kZXgoZD0+ZC5kcmFnPT09bCl9dXBkYXRlT25TY3JvbGwobCxhKXt0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtjbGllbnRSZWN0OmR9KT0+e293KGQsbCxhKX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2RyYWc6ZH0pPT57dGhpcy5fZHJhZ0Ry'@;
put 'b3BSZWdpc3RyeS5pc0RyYWdnaW5nKGQpJiZkLl9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKX0pfV9jYWNoZUl0ZW1Qb3NpdGlvbnMoKXtjb25zdCBsPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247dGhpcy5faXRlbVBvc2l0aW9ucz10aGlzLl9hY3RpdmVEcmFnZ2FibGVz'@;
put 'Lm1hcChhPT57Y29uc3QgZD1hLmdldFZpc2libGVFbGVtZW50KCk7cmV0dXJue2RyYWc6YSxvZmZzZXQ6MCxpbml0aWFsVHJhbnNmb3JtOmQuc3R5bGUudHJhbnNmb3JtfHwiIixjbGllbnRSZWN0OnJVKGQpfX0pLnNvcnQoKGEsZCk9Pmw/YS5jbGllbnRSZWN0LmxlZnQtZC5jbGllbnRSZWN0'@;
put 'LmxlZnQ6YS5jbGllbnRSZWN0LnRvcC1kLmNsaWVudFJlY3QudG9wKX1fZ2V0SXRlbU9mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247bGV0IGY9aD9hLmxlZnQtbC5sZWZ0OmEudG9wLWwudG9wO3JldHVybi0xPT09ZCYmKGYrPWg/YS53aWR0'@;
put 'aC1sLndpZHRoOmEuaGVpZ2h0LWwuaGVpZ2h0KSxmfV9nZXRTaWJsaW5nT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixmPWFbbF0uY2xpZW50UmVjdCxfPWFbbCstMSpkXTtsZXQgVD1mW2g/IndpZHRoIjoiaGVpZ2h0Il0qZDtpZihfKXtj'@;
put 'b25zdCBXPWg/ImxlZnQiOiJ0b3AiLGllPWg/InJpZ2h0IjoiYm90dG9tIjstMT09PWQ/VC09Xy5jbGllbnRSZWN0W1ddLWZbaWVdOlQrPWZbV10tXy5jbGllbnRSZWN0W2llXX1yZXR1cm4gVH1fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQobCxhKXtpZighdGhpcy5fYWN0aXZlRHJhZ2dhYmxl'@;
put 'cy5sZW5ndGgpcmV0dXJuITE7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtpZihkWzBdLmRyYWchPT10aGlzLl9hY3RpdmVEcmFnZ2FibGVzWzBdKXtjb25zdCBfPWRbZC5sZW5ndGgtMV0uY2xpZW50UmVjdDtyZXR1cm4gaD9s'@;
put 'Pj1fLnJpZ2h0OmE+PV8uYm90dG9tfXtjb25zdCBfPWRbMF0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPD1fLmxlZnQ6YTw9Xy50b3B9fV9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpe2NvbnN0IGY9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixfPXRoaXMu'@;
put 'X2l0ZW1Qb3NpdGlvbnMuZmluZEluZGV4KCh7ZHJhZzpULGNsaWVudFJlY3Q6V30pPT5UIT09bCYmKCghaHx8VCE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnfHwhdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzfHwoZj9oLng6aC55KSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YSkmJihm'@;
put 'P2E+PU1hdGguZmxvb3IoVy5sZWZ0KSYmYTxNYXRoLmZsb29yKFcucmlnaHQpOmQ+PU1hdGguZmxvb3IoVy50b3ApJiZkPE1hdGguZmxvb3IoVy5ib3R0b20pKSkpO3JldHVybi0xIT09XyYmdGhpcy5fc29ydFByZWRpY2F0ZShfLGwpP186LTF9fWNsYXNzIF9CZXtjb25zdHJ1Y3RvcihsLGEs'@;
put 'ZCxoLGYpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxTdGVwPTIsdGhpcy5l'@;
put 'bnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IGJlLHRoaXMuZW50ZXJlZD1uZXcgYmUsdGhpcy5leGl0ZWQ9bmV3IGJlLHRoaXMuZHJvcHBlZD1uZXcgYmUsdGhpcy5zb3J0ZWQ9bmV3IGJlLHRoaXMucmVjZWl2aW5n'@;
put 'U3RhcnRlZD1uZXcgYmUsdGhpcy5yZWNlaXZpbmdTdG9wcGVkPW5ldyBiZSx0aGlzLl9pc0RyYWdnaW5nPSExLHRoaXMuX2RyYWdnYWJsZXM9W10sdGhpcy5fc2libGluZ3M9W10sdGhpcy5fYWN0aXZlU2libGluZ3M9bmV3IFNldCx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj1l'@;
put 'ZS5FTVBUWSx0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj0wLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249MCx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzPW5ldyBiZSx0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGwsdGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3Ro'@;
put 'aXMuX3N0b3BTY3JvbGxpbmcoKSxmdW5jdGlvbiBhQmUoYz0wLGw9aWIpe3JldHVybiBjPDAmJihjPTApLGpQKGMsYyxsKX0oMCx6b2UpLnBpcGUoYWgodGhpcy5fc3RvcFNjcm9sbFRpbWVycykpLnN1YnNjcmliZSgoKT0+e2NvbnN0IF89dGhpcy5fc2Nyb2xsTm9kZSxUPXRoaXMuYXV0b1Nj'@;
put 'cm9sbFN0ZXA7MT09PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uP18uc2Nyb2xsQnkoMCwtVCk6Mj09PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uJiZfLnNjcm9sbEJ5KDAsVCksMT09PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24/Xy5zY3JvbGxCeSgtVCwwKToy'@;
put 'PT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiYmXy5zY3JvbGxCeShULDApfSl9LHRoaXMuZWxlbWVudD1QMChsKSx0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aFNjcm9sbGFibGVQYXJlbnRzKFt0aGlzLmVsZW1lbnRdKSxhLnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0'@;
put 'aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IHRzZShkKSx0aGlzLl9zb3J0U3RyYXRlZ3k9bmV3IHZCZSh0aGlzLmVsZW1lbnQsYSksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGljYXRlKChfLFQpPT50aGlzLnNvcnRQcmVkaWNhdGUoXyxULHRoaXMpKX1kaXNwb3NlKCl7dGhpcy5f'@;
put 'c3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNv'@;
put 'bXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRoaXMuX3Njcm9sbE5v'@;
put 'ZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksdGhpcy5fbm90'@;
put 'aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIobCxhLGQsaCksdGhpcy5f'@;
put 'Y2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlzLl9yZXNldCgpLHRoaXMuZXhpdGVk'@;
put 'Lm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxhLGQsaCxmLF8sVCxXPXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudEluZGV4OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29udGFpbmVyOmgsaXNQ'@;
put 'b2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOl8sZHJvcFBvaW50OlQsZXZlbnQ6V30pfXdpdGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BDb250YWluZXIodGhpcykpLHRoaXMu'@;
put 'aXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5nKCkpLmV2ZXJ5KGg9Pi0xPT09bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhp'@;
put 'cy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sLHRoaXN9Y29ubmVjdGVkVG8obCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lm9yaWVudGF0aW9uPWwsdGhpc313aXRoU2Nyb2xsYWJsZVBh'@;
put 'cmVudHMobCl7Y29uc3QgYT1QMCh0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRoaXN9Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzfWdl'@;
put 'dEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0SXRlbUluZGV4KGwpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKX1pc1JlY2VpdmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5zaXplPjB9X3NvcnRJdGVtKGwsYSxk'@;
put 'LGgpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fY2xpZW50UmVjdHx8IWVzZSh0aGlzLl9jbGllbnRSZWN0LC4wNSxhLGQpKXJldHVybjtjb25zdCBmPXRoaXMuX3NvcnRTdHJhdGVneS5zb3J0KGwsYSxkLGgpO2YmJnRoaXMuc29ydGVkLm5leHQoe3ByZXZpb3VzSW5kZXg6Zi5w'@;
put 'cmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmx9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShsLGEpe2lmKHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKXJldHVybjtsZXQgZCxoPTAsZj0wO2lmKHRoaXMuX3BhcmVudFBvc2l0'@;
put 'aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgoXyxUKT0+e1Q9PT10aGlzLl9kb2N1bWVudHx8IV8uY2xpZW50UmVjdHx8ZHx8ZXNlKF8uY2xpZW50UmVjdCwuMDUsbCxhKSYmKFtoLGZdPWZ1bmN0aW9uIGJCZShjLGwsYSxkKXtjb25zdCBoPWZzZShsLGQpLGY9cHNlKGwsYSk7bGV0IF89MCxUPTA7'@;
put 'aWYoaCl7Y29uc3QgVz1jLnNjcm9sbFRvcDsxPT09aD9XPjAmJihfPTEpOmMuc2Nyb2xsSGVpZ2h0LVc+Yy5jbGllbnRIZWlnaHQmJihfPTIpfWlmKGYpe2NvbnN0IFc9Yy5zY3JvbGxMZWZ0OzE9PT1mP1c+MCYmKFQ9MSk6Yy5zY3JvbGxXaWR0aC1XPmMuY2xpZW50V2lkdGgmJihUPTIpfXJl'@;
put 'dHVybltfLFRdfShULF8uY2xpZW50UmVjdCxsLGEpLChofHxmKSYmKGQ9VCkpfSksIWgmJiFmKXtjb25zdHt3aWR0aDpfLGhlaWdodDpUfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLFc9e3dpZHRoOl8saGVpZ2h0OlQsdG9wOjAscmlnaHQ6Xyxib3R0b206VCxsZWZ0'@;
put 'OjB9O2g9ZnNlKFcsYSksZj1wc2UoVyxsKSxkPXdpbmRvd31kJiYoaCE9PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9ufHxmIT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbnx8ZCE9PXRoaXMuX3Njcm9sbE5vZGUpJiYodGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249'@;
put 'aCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWYsdGhpcy5fc2Nyb2xsTm9kZT1kLChofHxmKSYmZD90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbCk6dGhpcy5fc3RvcFNjcm9sbGluZygpKX1fc3RvcFNjcm9sbGluZygpe3Ro'@;
put 'aXMuX3N0b3BTY3JvbGxUaW1lcnMubmV4dCgpfV9kcmFnZ2luZ1N0YXJ0ZWQoKXtjb25zdCBsPVAwKHRoaXMuZWxlbWVudCkuc3R5bGU7dGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9pc0RyYWdnaW5nPSEwLHRoaXMuX2luaXRpYWxTY3JvbGxTbmFwPWwubXNTY3JvbGxTbmFwVHlw'@;
put 'ZXx8bC5zY3JvbGxTbmFwVHlwZXx8IiIsbC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9Im5vbmUiLHRoaXMuX3NvcnRTdHJhdGVneS5zdGFydCh0aGlzLl9kcmFnZ2FibGVzKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2Ny'@;
put 'aXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKX1fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKXtjb25zdCBsPVAwKHRoaXMuZWxlbWVudCk7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyksdGhpcy5fY2xpZW50'@;
put 'UmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldChsKS5jbGllbnRSZWN0fV9yZXNldCgpe3RoaXMuX2lzRHJhZ2dpbmc9ITE7Y29uc3QgbD1QMCh0aGlzLmVsZW1lbnQpLnN0eWxlO2wuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPXRoaXMuX2luaXRpYWxT'@;
put 'Y3JvbGxTbmFwLHRoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RvcFJlY2VpdmluZyh0aGlzKSksdGhpcy5fc29ydFN0cmF0ZWd5LnJlc2V0KCksdGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFy'@;
put 'ZW50UG9zaXRpb25zLmNsZWFyKCl9X2lzT3ZlckNvbnRhaW5lcihsLGEpe3JldHVybiBudWxsIT10aGlzLl9jbGllbnRSZWN0JiZpVSh0aGlzLl9jbGllbnRSZWN0LGwsYSl9X2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24obCxhLGQpe3JldHVybiB0aGlzLl9zaWJsaW5ncy5maW5k'@;
put 'KGg9PmguX2NhblJlY2VpdmUobCxhLGQpKX1fY2FuUmVjZWl2ZShsLGEsZCl7aWYoIXRoaXMuX2NsaWVudFJlY3R8fCFpVSh0aGlzLl9jbGllbnRSZWN0LGEsZCl8fCF0aGlzLmVudGVyUHJlZGljYXRlKGwsdGhpcykpcmV0dXJuITE7Y29uc3QgaD10aGlzLl9nZXRTaGFkb3dSb290KCkuZWxl'@;
put 'bWVudEZyb21Qb2ludChhLGQpO2lmKCFoKXJldHVybiExO2NvbnN0IGY9UDAodGhpcy5lbGVtZW50KTtyZXR1cm4gaD09PWZ8fGYuY29udGFpbnMoaCl9X3N0YXJ0UmVjZWl2aW5nKGwsYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVTaWJsaW5nczshZC5oYXMobCkmJmEuZXZlcnkoaD0+dGhpcy5l'@;
put 'bnRlclByZWRpY2F0ZShoLHRoaXMpfHx0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YoaCk+LTEpJiYoZC5hZGQobCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5uZXh0KHtpbml0aWF0b3I6bCxy'@;
put 'ZWNlaXZlcjp0aGlzLGl0ZW1zOmF9KSl9X3N0b3BSZWNlaXZpbmcobCl7dGhpcy5fYWN0aXZlU2libGluZ3MuZGVsZXRlKGwpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2Vp'@;
put 'dmVyOnRoaXN9KX1fbGlzdGVuVG9TY3JvbGxFdmVudHMoKXt0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGw9PntpZih0aGlzLmlzRHJhZ2dpbmcoKSl7Y29uc3Qg'@;
put 'YT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2EmJnRoaXMuX3NvcnRTdHJhdGVneS51cGRhdGVPblNjcm9sbChhLnRvcCxhLmxlZnQpfWVsc2UgdGhpcy5pc1JlY2VpdmluZygpJiZ0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpfSl9X2dldFNoYWRvd1Jvb3QoKXtp'@;
put 'ZighdGhpcy5fY2FjaGVkU2hhZG93Um9vdCl7Y29uc3QgbD1Hb2UoUDAodGhpcy5lbGVtZW50KSk7dGhpcy5fY2FjaGVkU2hhZG93Um9vdD1sfHx0aGlzLl9kb2N1bWVudH1yZXR1cm4gdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKXtjb25zdCBsPXRo'@;
put 'aXMuX3NvcnRTdHJhdGVneS5nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCkuZmlsdGVyKGE9PmEuaXNEcmFnZ2luZygpKTt0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0YXJ0UmVjZWl2aW5nKHRoaXMsbCkpfX1mdW5jdGlvbiBmc2UoYyxsKXtjb25zdHt0b3A6YSxib3R0b206ZCxoZWln'@;
put 'aHQ6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj8xOmw+PWQtZiYmbDw9ZCtmPzI6MH1mdW5jdGlvbiBwc2UoYyxsKXtjb25zdHtsZWZ0OmEscmlnaHQ6ZCx3aWR0aDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmPzE6bD49ZC1mJiZsPD1kK2Y/MjowfWNvbnN0'@;
put 'IFhBPWl3KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KTtsZXQgeUJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9kcm9wSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fZHJhZ0luc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5j'@;
put 'ZXM9W10sdGhpcy5fZ2xvYmFsTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGU9aD0+aC5pc0RyYWdnaW5nKCksdGhpcy5wb2ludGVyTW92ZT1uZXcgYmUsdGhpcy5wb2ludGVyVXA9bmV3IGJlLHRoaXMuc2Nyb2xsPW5ldyBiZSx0aGlzLl9wcmV2ZW50RGVmYXVsdFdo'@;
put 'aWxlRHJhZ2dpbmc9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJmgucHJldmVudERlZmF1bHQoKX0sdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0lu'@;
put 'c3RhbmNlcy5zb21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmaC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucG9pbnRlck1vdmUubmV4dChoKSl9LHRoaXMuX2RvY3VtZW50PWR9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9w'@;
put 'SW5zdGFuY2VzLmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuYWRkKGEpLDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRv'@;
put 'dWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLFhBKX0pfXJlbW92ZURyb3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoYSl9cmVtb3ZlRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5kZWxldGUoYSksdGhpcy5zdG9wRHJhZ2dp'@;
put 'bmcoYSksMD09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsWEEpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0'@;
put 'YW5jZXMuaW5kZXhPZihhKT4tMSkmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnB1c2goYSksMT09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoKSl7Y29uc3QgaD1kLnR5cGUuc3RhcnRzV2l0aCgidG91Y2giKTt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KGg/InRvdWNo'@;
put 'ZW5kIjoibW91c2V1cCIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyVXAubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzY3JvbGwiLHtoYW5kbGVyOmY9PnRoaXMuc2Nyb2xsLm5leHQoZiksb3B0aW9uczohMH0pLnNldCgic2VsZWN0c3RhcnQiLHtoYW5kbGVyOnRoaXMuX3ByZXZlbnREZWZh'@;
put 'dWx0V2hpbGVEcmFnZ2luZyxvcHRpb25zOlhBfSksaHx8dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldCgibW91c2Vtb3ZlIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJNb3ZlLm5leHQoZiksb3B0aW9uczpYQX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2ds'@;
put 'b2JhbExpc3RlbmVycy5mb3JFYWNoKChmLF8pPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihfLGYuaGFuZGxlcixmLm9wdGlvbnMpfSl9KX19c3RvcERyYWdnaW5nKGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpO2Q+LTEmJih0aGlzLl9h'@;
put 'Y3RpdmVEcmFnSW5zdGFuY2VzLnNwbGljZShkLDEpLDA9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSl9aXNEcmFnZ2luZyhhKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xfXNjcm9s'@;
put 'bGVkKGEpe2NvbnN0IGQ9W3RoaXMuc2Nyb2xsXTtyZXR1cm4gYSYmYSE9PXRoaXMuX2RvY3VtZW50JiZkLnB1c2gobmV3IEtlKGg9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IF89VD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZoLm5leHQo'@;
put 'VCl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsXywhMCksKCk9PnthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsXywhMCl9fSkpKSxpcyguLi5kKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyYWdJdGVt'@;
put 'KGEpKSx0aGlzLl9kcm9wSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcm9wQ29udGFpbmVyKGEpKSx0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpLHRoaXMucG9pbnRlck1vdmUuY29tcGxldGUoKSx0aGlzLnBvaW50ZXJVcC5jb21wbGV0ZSgpfV9jbGVhckdsb2JhbExpc3Rl'@;
put 'bmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGEuaGFuZGxlcixhLm9wdGlvbnMpfSksdGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihJcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NvbnN0IHdCZT17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVz'@;
put 'aG9sZDo1fTtsZXQgc1U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWZ9Y3JlYXRlRHJhZyhhLGQ9d0JlKXtyZXR1cm4gbmV3IGdCZShh'@;
put 'LGQsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSl9Y3JlYXRlRHJvcExpc3QoYSl7cmV0dXJuIG5ldyBfQmUoYSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlz'@;
put 'Ll92aWV3cG9ydFJ1bGVyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoSXMpLGFyKE5vKSxhcihaVmUpLGFyKHlCZSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9'@;
put 'KSgpO2NvbnN0IGFVPW5ldyBTaSgiQ0RLX0RSQUdfUEFSRU5UIiksbFU9bmV3IFNpKCJDZGtEcm9wTGlzdEdyb3VwIik7bGV0IGdzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbXM9bmV3IFNldCx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4g'@;
put 'dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWE0KGEpfW5nT25EZXN0cm95KCl7dGhpcy5faXRlbXMuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbIiIsImNka0Ryb3BMaXN0R3JvdXAiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbImNka0Ryb3BMaXN0R3JvdXBEaXNhYmxlZCIsImRpc2FibGVkIl19LGV4cG9ydEFzOlsiY2RrRHJvcExpc3RHcm91cCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpsVSx1c2VF'@;
put 'eGlzdGluZzpjfV0pXX0pLGN9KSgpO2NvbnN0IG1zZT1uZXcgU2koIkNES19EUkFHX0NPTkZJRyIpO2xldCBDQmU9MDtjb25zdCB2c2U9bmV3IFNpKCJDZGtEcm9wTGlzdCIpO2xldCBfc2U9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhp'@;
put 'cy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kcm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD1hNChhKX1jb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1oLHRo'@;
put 'aXMuX3Njcm9sbERpc3BhdGNoZXI9Zix0aGlzLl9kaXI9Xyx0aGlzLl9ncm91cD1ULHRoaXMuX2Rlc3Ryb3llZD1uZXcgYmUsdGhpcy5jb25uZWN0ZWRUbz1bXSx0aGlzLmlkPSJjZGstZHJvcC1saXN0LSIrQ0JlKyssdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGlj'@;
put 'YXRlPSgpPT4hMCx0aGlzLmRyb3BwZWQ9bmV3IEVyLHRoaXMuZW50ZXJlZD1uZXcgRXIsdGhpcy5leGl0ZWQ9bmV3IEVyLHRoaXMuc29ydGVkPW5ldyBFcix0aGlzLl91bnNvcnRlZEl0ZW1zPW5ldyBTZXQsdGhpcy5fZHJvcExpc3RSZWY9ZC5jcmVhdGVEcm9wTGlzdChhKSx0aGlzLl9kcm9w'@;
put 'TGlzdFJlZi5kYXRhPXRoaXMsVyYmdGhpcy5fYXNzaWduRGVmYXVsdHMoVyksdGhpcy5fZHJvcExpc3RSZWYuZW50ZXJQcmVkaWNhdGU9KGllLHBlKT0+dGhpcy5lbnRlclByZWRpY2F0ZShpZS5kYXRhLHBlLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KGllLHBlLHdl'@;
put 'KT0+dGhpcy5zb3J0UHJlZGljYXRlKGllLHBlLmRhdGEsd2UuZGF0YSksdGhpcy5fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24odGhpcy5fZHJvcExpc3RSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcm9wTGlzdFJlZiksYy5fZHJvcExpc3RzLnB1c2godGhpcyksVCYmVC5faXRl'@;
put 'bXMuYWRkKHRoaXMpfWFkZEl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5hZGQoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9cmVtb3ZlSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmRlbGV0ZShhKSx0aGlzLl9kcm9wTGlz'@;
put 'dFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1nZXRTb3J0ZWRJdGVtcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3Vuc29ydGVkSXRlbXMpLnNvcnQoKGEsZCk9PmEuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv'@;
put 'bihkLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HPy0xOjEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT1jLl9kcm9wTGlzdHMuaW5kZXhPZih0aGlzKTthPi0xJiZjLl9kcm9wTGlzdHMuc3BsaWNlKGEsMSksdGhpcy5fZ3JvdXAm'@;
put 'JnRoaXMuX2dyb3VwLl9pdGVtcy5kZWxldGUodGhpcyksdGhpcy5fdW5zb3J0ZWRJdGVtcy5jbGVhcigpLHRoaXMuX2Ryb3BMaXN0UmVmLmRpc3Bvc2UoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlv'@;
put 'bihhKXt0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZShjcCh0aGlzLl9kaXIudmFsdWUpLGFoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShkPT5hLndpdGhEaXJlY3Rpb24oZCkpLGEuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIEFWZShj'@;
put 'KXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jOltjXX0odGhpcy5jb25uZWN0ZWRUbykubWFwKGg9PiJzdHJpbmciPT10eXBlb2YgaD9jLl9kcm9wTGlzdHMuZmluZChfPT5fLmlkPT09aCk6aCk7aWYodGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5mb3JFYWNoKGg9PnstMT09PWQu'@;
put 'aW5kZXhPZihoKSYmZC5wdXNoKGgpfSksIXRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQpe2NvbnN0IGg9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5lbGVtZW50KS5tYXAoZj0+Zi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxl'@;
put 'bWVudCk7dGhpcy5fZHJvcExpc3RSZWYud2l0aFNjcm9sbGFibGVQYXJlbnRzKGgpLHRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ9ITB9YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLnNvcnRpbmdEaXNhYmxlZD1hNCh0aGlzLnNvcnRp'@;
put 'bmdEaXNhYmxlZCksYS5hdXRvU2Nyb2xsRGlzYWJsZWQ9YTQodGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQpLGEuYXV0b1Njcm9sbFN0ZXA9am9lKHRoaXMuYXV0b1Njcm9sbFN0ZXAsMiksYS5jb25uZWN0ZWRUbyhkLmZpbHRlcihoPT5oJiZoIT09dGhpcykubWFwKGg9PmguX2Ryb3BMaXN0UmVm'@;
put 'KSkud2l0aE9yaWVudGF0aW9uKHRoaXMub3JpZW50YXRpb24pfSl9X2hhbmRsZUV2ZW50cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1'@;
put 'YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGEsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRh'@;
put 'dGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuc29ydGVkLnN1YnNjcmliZShkPT57dGhpcy5zb3J0ZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06'@;
put 'ZC5pdGVtLmRhdGF9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRh'@;
put 'aW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06ZC5pdGVtLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9y'@;
put 'UmVmLm1hcmtGb3JDaGVjaygpfSksaXMoYS5yZWNlaXZpbmdTdGFydGVkLGEucmVjZWl2aW5nU3RvcHBlZCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ2dpbmdEaXNh'@;
put 'YmxlZDpoLHNvcnRpbmdEaXNhYmxlZDpmLGxpc3RBdXRvU2Nyb2xsRGlzYWJsZWQ6XyxsaXN0T3JpZW50YXRpb246VH09YTt0aGlzLmRpc2FibGVkPWg/PyExLHRoaXMuc29ydGluZ0Rpc2FibGVkPWY/PyExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPV8/PyExLHRoaXMub3JpZW50YXRpb249'@;
put 'VHx8InZlcnRpY2FsIixkJiYodGhpcy5sb2NrQXhpcz1kKX1fc3luY0l0ZW1zV2l0aFJlZigpe3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyh0aGlzLmdldFNvcnRlZEl0ZW1zKCkubWFwKGE9PmEuX2RyYWdSZWYpKX19cmV0dXJuIGMuX2Ryb3BMaXN0cz1bXSxjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChzVSksdHQoVWEpLHR0KHpWZSksdHQoWG9lLDgpLHR0KGxVLDEyKSx0dChtc2UsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0'@;
put 'QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksZHIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixkLl9kcm9wTGlzdFJlZi5p'@;
put 'c0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsZC5fZHJvcExpc3RSZWYuaXNSZWNlaXZpbmcoKSkpfSxpbnB1dHM6e2Nvbm5lY3RlZFRvOlsiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbImNka0Ryb3BMaXN0RGF0YSIsImRhdGEiXSxv'@;
put 'cmllbnRhdGlvbjpbImNka0Ryb3BMaXN0T3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiJdLGlkOiJpZCIsbG9ja0F4aXM6WyJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbImNka0Ryb3BMaXN0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNvcnRpbmdEaXNhYmxlZDpb'@;
put 'ImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGluZ0Rpc2FibGVkIl0sZW50ZXJQcmVkaWNhdGU6WyJjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlIiwiZW50ZXJQcmVkaWNhdGUiXSxzb3J0UHJlZGljYXRlOlsiY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0'@;
put 'ZSJdLGF1dG9TY3JvbGxEaXNhYmxlZDpbImNka0Ryb3BMaXN0QXV0b1Njcm9sbERpc2FibGVkIiwiYXV0b1Njcm9sbERpc2FibGVkIl0sYXV0b1Njcm9sbFN0ZXA6WyJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXX0sb3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJv'@;
put 'cExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9wTGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOmxVLHVz'@;
put 'ZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6dnNlLHVzZUV4aXN0aW5nOmN9XSldfSksY30pKCk7Y29uc3QgY1U9bmV3IFNpKCJDZGtEcmFnSGFuZGxlIik7bGV0IGJzZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhp'@;
put 'cy5fZGlzYWJsZWQ9YTQoYSksdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodGhpcyl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IGJlLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3BhcmVudERyYWc9ZH1uZ09uRGVzdHJveSgpe3RoaXMuX3N0'@;
put 'YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoYVUsMTIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNk'@;
put 'ay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6WyJjZGtEcmFnSGFuZGxlRGlzYWJsZWQiLCJkaXNhYmxlZCJdfSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6Y1UsdXNlRXhpc3Rpbmc6Y31dKV19KSxjfSkoKTtjb25zdCB5c2U9bmV3IFNpKCJDZGtEcmFnUGxh'@;
put 'Y2Vob2xkZXIiKSx3c2U9bmV3IFNpKCJDZGtEcmFnUHJldmlldyIpO2xldCBDc2U9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0'@;
put 'aGlzLl9kaXNhYmxlZD1hNChhKSx0aGlzLl9kcmFnUmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUscGUsd2UsRWUpe3RoaXMuZWxlbWVudD1hLHRoaXMuZHJvcENvbnRhaW5lcj1kLHRoaXMuX25nWm9uZT1mLHRoaXMuX3ZpZXdDb250YWlu'@;
put 'ZXJSZWY9Xyx0aGlzLl9kaXI9Vyx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1wZSx0aGlzLl9zZWxmSGFuZGxlPXdlLHRoaXMuX3BhcmVudERyYWc9RWUsdGhpcy5fZGVzdHJveWVkPW5ldyBiZSx0aGlzLnN0YXJ0ZWQ9bmV3IEVyLHRoaXMucmVsZWFzZWQ9bmV3IEVyLHRoaXMuZW5kZWQ9bmV3'@;
put 'IEVyLHRoaXMuZW50ZXJlZD1uZXcgRXIsdGhpcy5leGl0ZWQ9bmV3IEVyLHRoaXMuZHJvcHBlZD1uZXcgRXIsdGhpcy5tb3ZlZD1uZXcgS2UoWmU9Pntjb25zdCBpdD10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoTWUoZXQ9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOmV0LnBvaW50'@;
put 'ZXJQb3NpdGlvbixldmVudDpldC5ldmVudCxkZWx0YTpldC5kZWx0YSxkaXN0YW5jZTpldC5kaXN0YW5jZX0pKSkuc3Vic2NyaWJlKFplKTtyZXR1cm4oKT0+e2l0LnVuc3Vic2NyaWJlKCl9fSksdGhpcy5fZHJhZ1JlZj1pZS5jcmVhdGVEcmFnKGEse2RyYWdTdGFydFRocmVzaG9sZDpUJiZu'@;
put 'dWxsIT1ULmRyYWdTdGFydFRocmVzaG9sZD9ULmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6VCYmbnVsbCE9VC5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkP1QucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1LHpJbmRl'@;
put 'eDpUPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyxjLl9kcmFnSW5zdGFuY2VzLnB1c2godGhpcyksVCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoVCksZCYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKGQuX2Ryb3BMaXN0UmVmKSxkLmFkZEl0ZW0odGhpcykpLHRo'@;
put 'aXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2Ry'@;
put 'YWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZyZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJh'@;
put 'Z1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGlkKDEpLGFoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhp'@;
put 'cy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfSl9KX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3RvcixoPWEuZnJlZURy'@;
put 'YWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSxoJiYhaC5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1uZ09uRGVzdHJv'@;
put 'eSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyk7Y29uc3QgYT1jLl9kcmFnSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJhZ0luc3RhbmNlcy5zcGxpY2UoYSwxKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIo'@;
put 'KCk9Pnt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2RyYWdSZWYuZGlzcG9zZSgpfSl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtsZXQgZD1hO3RoaXMucm9vdEVsZW1lbnRTZWxl'@;
put 'Y3RvciYmKGQ9dm9pZCAwIT09YS5jbG9zZXN0P2EuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOmEucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndpdGhSb290RWxlbWVudChkfHxhKX1fZ2V0Qm91bmRhcnlF'@;
put 'bGVtZW50KCl7Y29uc3QgYT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdChhKTpQMChhKTpudWxsfV9zeW5jSW5wdXRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZigh'@;
put 'YS5pc0RyYWdnaW5nKCkpe2NvbnN0IGQ9dGhpcy5fZGlyLGg9dGhpcy5kcmFnU3RhcnREZWxheSxmPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRl'@;
put 'LmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLF89dGhpcy5fcHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhp'@;
put 'cy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGw7YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLmRyYWdTdGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9oOmpv'@;
put 'ZShoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9zaXRpb24sYS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShmKS53aXRoUHJl'@;
put 'dmlld1RlbXBsYXRlKF8pLndpdGhQcmV2aWV3Q29udGFpbmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShpZCgxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJhZyly'@;
put 'ZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFyZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7YS53aXRoUGFyZW50KGMuX2RyYWdJ'@;
put 'bnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZlRWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMsZXZl'@;
put 'bnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQuZW1p'@;
put 'dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5l'@;
put 'cjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9'@;
put 'Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVyQ29u'@;
put 'dGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixpdGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJhaW5Q'@;
put 'b3NpdGlvbjpmLHByZXZpZXdDbGFzczpfLGJvdW5kYXJ5RWxlbWVudDpULGRyYWdnaW5nRGlzYWJsZWQ6Vyxyb290RWxlbWVudFNlbGVjdG9yOmllLHByZXZpZXdDb250YWluZXI6cGV9PWE7dGhpcy5kaXNhYmxlZD1XPz8hMSx0aGlzLmRyYWdTdGFydERlbGF5PWh8fDAsZCYmKHRoaXMubG9j'@;
put 'a0F4aXM9ZCksZiYmKHRoaXMuY29uc3RyYWluUG9zaXRpb249ZiksXyYmKHRoaXMucHJldmlld0NsYXNzPV8pLFQmJih0aGlzLmJvdW5kYXJ5RWxlbWVudD1UKSxpZSYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1pZSkscGUmJih0aGlzLnByZXZpZXdDb250YWluZXI9cGUpfV9zZXR1cEhh'@;
put 'bmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMuY2hhbmdlcy5waXBlKGNwKHRoaXMuX2hhbmRsZXMpLFVjKGE9Pntjb25zdCBkPWEuZmlsdGVyKGg9PmguX3BhcmVudERyYWc9PT10aGlzKS5tYXAoaD0+aC5lbGVtZW50KTt0aGlzLl9zZWxmSGFuZGxlJiZ0aGlzLnJvb3RFbGVtZW50U2Vs'@;
put 'ZWN0b3ImJmQucHVzaCh0aGlzLmVsZW1lbnQpLHRoaXMuX2RyYWdSZWYud2l0aEhhbmRsZXMoZCl9KSxTYShhPT5pcyguLi5hLm1hcChkPT5kLl9zdGF0ZUNoYW5nZXMucGlwZShjcChkKSkpKSksYWgodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGE9Pntjb25zdCBkPXRoaXMuX2RyYWdS'@;
put 'ZWYsaD1hLmVsZW1lbnQubmF0aXZlRWxlbWVudDthLmRpc2FibGVkP2QuZGlzYWJsZUhhbmRsZShoKTpkLmVuYWJsZUhhbmRsZShoKX0pfX1yZXR1cm4gYy5fZHJhZ0luc3RhbmNlcz1bXSxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dCh2c2UsMTIp'@;
put 'LHR0KElzKSx0dChObyksdHQoYXMpLHR0KG1zZSw4KSx0dChYb2UsOCksdHQoc1UpLHR0KFVhKSx0dChjVSwxMCksdHQoYVUsMTIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYo'@;
put 'MSZhJiYoTG8oaCx3c2UsNSksTG8oaCx5c2UsNSksTG8oaCxjVSw1KSksMiZhKXtsZXQgZjthaShmPWxpKCkpJiYoZC5fcHJldmlld1RlbXBsYXRlPWYuZmlyc3QpLGFpKGY9bGkoKSkmJihkLl9wbGFjZWhvbGRlclRlbXBsYXRlPWYuZmlyc3QpLGFpKGY9bGkoKSkmJihkLl9oYW5kbGVzPWYp'@;
put 'fX0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2RrLWRyYWctZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsZC5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6'@;
put 'WyJjZGtEcmFnRGF0YSIsImRhdGEiXSxsb2NrQXhpczpbImNka0RyYWdMb2NrQXhpcyIsImxvY2tBeGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbImNka0RyYWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6WyJjZGtEcmFnQm91bmRhcnkiLCJi'@;
put 'b3VuZGFyeUVsZW1lbnQiXSxkcmFnU3RhcnREZWxheTpbImNka0RyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOlsiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6WyJjZGtEcmFnRGlzYWJsZWQiLCJk'@;
put 'aXNhYmxlZCJdLGNvbnN0cmFpblBvc2l0aW9uOlsiY2RrRHJhZ0NvbnN0cmFpblBvc2l0aW9uIiwiY29uc3RyYWluUG9zaXRpb24iXSxwcmV2aWV3Q2xhc3M6WyJjZGtEcmFnUHJldmlld0NsYXNzIiwicHJldmlld0NsYXNzIl0scHJldmlld0NvbnRhaW5lcjpbImNka0RyYWdQcmV2aWV3Q29u'@;
put 'dGFpbmVyIiwicHJldmlld0NvbnRhaW5lciJdfSxvdXRwdXRzOntzdGFydGVkOiJjZGtEcmFnU3RhcnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2RrRHJhZ0V4aXRlZCIsZHJvcHBl'@;
put 'ZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92ZWQifSxleHBvcnRBczpbImNka0RyYWciXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6YVUsdXNlRXhpc3Rpbmc6Y31dKSx2YV19KSxjfSkoKSxTc2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOltzVV0saW1wb3J0czpbWVZlXX0pLGN9KSgpO2NvbnN0IFVnPXZvaWQgMCxrQmU9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSxV'@;
put 'Z10sW1siYW0iLCJwbSJdLFVnLFVnXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVy'@;
put 'ZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxVZyxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3Yi'@;
put 'LCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLFVnLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0Iiwi'@;
put 'QW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHkiLCJFRUVFLCBkIE1NTU0geSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsVWcsInsxfSAnYXQnIHswfSIsVWddLFsiLiIsIiwi'@;
put 'LCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwi'@;
put 'JCJdfSwibHRyIixmdW5jdGlvbiBFQmUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxBQmU9WyJpbnB1dCJdO2Z1bmN0aW9uIFRCZShjLGwpe2lm'@;
put 'KDEmYyYmKG1lKDAsIm9wdGlvbiIsNyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZ3IoIiAiLGEubG9hZGluZ01vcmU/IkxvYWRpbmcuLi4iOiJMT0FEIE1PUkUiLCIgIil9fWNvbnN0IERCZT1mdW5jdGlvbihjLGwpe3JldHVybnsid2lkdGgucHgiOmMsIm1heC1oZWln'@;
put 'aHQucHgiOmx9fSxMQmU9WyIqIl07bGV0IE1zZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY2RyPWEsdGhpcy5pbnB1dElkPSIiLHRoaXMucGxhY2Vob2xkZXI9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5hdXRvY29t'@;
put 'cGxldGU9Im9mZiIsdGhpcy50YWJpbmRleD0iIix0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLm9uSW5wdXRLZXlkb3duPW5ldyBFcix0aGlzLm9uSW5wdXRDaGFuZ2U9bmV3IEVyLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub25Mb2Fk'@;
put 'aW5nTW9yZT1uZXcgRXIsdGhpcy5kYXRhbGlzdE9wZW49ITEsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXk9MTUwLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmlucHV0Q2xpZW50UmVjdD17fSx0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMu'@;
put 'bG9hZGluZ01vcmU9ITF9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfSw1MDApfW9uSW5wdXRGaXJlZChhLGQsaCl7dGhpcy5vcGVuRGF0YWxpc3QoImNsaWNrIiE9PWgpLHRoaXMudW5zZWxlY3RBbGxP'@;
put 'cHRpb25zKCksdGhpcy5maWx0ZXJPcHRpb25zTGlzdCgpLCghdGhpcy5lbWl0T25seVNlbGVjdGVkfHxkKSYmKHRoaXMub25JbnB1dENoYW5nZS5lbWl0KHt0YXJnZXQ6e3ZhbHVlOnRoaXMudmFsdWV9fSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpKX1vbklucHV0Q2xpY2so'@;
put 'YSl7dGhpcy5vcGVuRGF0YWxpc3QoKX1vcGVuRGF0YWxpc3QoYT0hMCl7dGhpcy5kYXRhbGlzdE9wZW49ITAsYSYmKHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMCx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuYWZ0ZXJPcGVuTG9jaz0hMX0sdGhpcy5h'@;
put 'ZnRlck9wZW5Mb2NrRGVsYXkpKX1jbG9zZURhdGFsaXN0KCl7Y2xlYXJUaW1lb3V0KHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dCksdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuZGF0YWxpc3RPcGVuPSExfXJlc2V0RGF0YWxpc3RGaWx0ZXIoKXt0aGlzLmZpbHRlck9wdGlvbnNM'@;
put 'aXN0KCEwKX1vbklucHV0Rm9jdXNpbihhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMH1vbklucHV0Rm9jdXNvdXQoYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbklucHV0TW91c2VlbnRlcihhKXt0aGlzLmlucHV0Q2xpZW50UmVjdC53aWR0aHx8dGhp'@;
put 'cy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9ZmlsdGVyT3B0aW9uc0xpc3QoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07aWYoMD09'@;
put 'PXRoaXMudmFsdWUubGVuZ3RoKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWlmKGEpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9Y29uc3QgXz1mLmlubmVyVGV4dHx8IiIsVD1mLnZhbHVlfHwiIjsoXytUKT8udG9Mb3dlckNhc2UoKS5pbmNs'@;
put 'dWRlcyh0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCkpP2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6Zi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19c2V0VG9DbG9zZURhdGFsaXN0KCl7dGhpcy5kYXRhbGlzdENsb3NlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5wcmV2ZW50RGF0'@;
put 'YWxpc3RDbG9zZXx8dGhpcy5hZnRlck9wZW5Mb2NrfHwodGhpcy5jbG9zZURhdGFsaXN0KCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLnJlc2V0RGF0YWxpc3RGaWx0ZXIoKSl9LDEwMCl9Y2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpe2NvbnN0IGQ9dGhpcy5pbnB1dEVsZW1lbnQu'@;
put 'bmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC53aWR0aD4wJiZkLmhlaWdodD4wJiYodGhpcy5pbnB1dENsaWVudFJlY3Q9e3dpZHRoOmQud2lkdGgsYm90dG9tOmQuYm90dG9tfSksdGhpcy5pbm5lckhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHR9b25EYXRhTGlzdE1v'@;
put 'dXNlRW50ZXIoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMH1vbkRhdGFMaXN0TW91c2VMZWF2ZShhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkRhdGFMaXN0U2Nyb2xsKGEpe3RoaXMuc2V0VG9D'@;
put 'bG9zZURhdGFsaXN0KCl9b25EYXRhTGlzdENsaWNrKGEpe2NvbnN0IGQ9YS50YXJnZXQ7ImxvYWQtbW9yZSIhPT1kLmRhdGFzZXQ/LnR5cGU/Ik9QVElPTiIhPT1kLnRhZ05hbWV8fHRoaXMuc2V0T3B0aW9uVmFsdWUoZC5pbm5lclRleHQsZC52YWx1ZSk6dGhpcy5sb2FkTW9yZSgpfWxvYWRN'@;
put 'b3JlKCl7dGhpcy5vbkxvYWRpbmdNb3JlLmVtaXQoe2xvYWRNb3JlRmluaXNoZWQ6YT0+e3RoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT1hfX0pLHRoaXMubG9hZGluZ01vcmU9ITB9c2V0T3B0aW9uVmFsdWUoYSxkKXsoYXx8ZCkmJihkfHwoZD1hKSksZCYmKHRoaXMu'@;
put 'cHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy52YWx1ZT1kLHRoaXMub25JbnB1dEZpcmVkKG51bGwsITAsImNsaWNrIiksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSl9b25NYWluS2V5ZG93bihhKXtzd2l0Y2goYS5rZXkpe2Nhc2UiQXJyb3dVcCI6dGhpcy5nZXRPcHRpb25zTW92ZUZv'@;
put 'Y3VzKCJ1cCIpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoImRvd24iKTticmVhaztjYXNlIkVudGVyIjp0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKX19b25JbnB1dEtleXVwKGEpe3JldHVybiF0aGlzLmRhdGFsaXN0T3Blbnx8KCJFc2NhcGUiPT09'@;
put 'YS5rZXk/KGEuc3RvcFByb3BhZ2F0aW9uKCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpLCExKTp2b2lkIDApfXVuc2VsZWN0QWxsT3B0aW9ucygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhp'@;
put 'cy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKX1zZWxlY3RGb2N1c2VkT3B0aW9uKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlv'@;
put 'bi5mb2N1c2VkYCk7YSYmdGhpcy5vbkRhdGFMaXN0Q2xpY2soe3RhcmdldDphfSksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1nZXRPcHRpb25zTW92ZUZvY3VzKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb246'@;
put 'bm90KC5oaWRkZW4pYCk7bGV0IGg9MDtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3QgXz1kW2ZdO2lmKF8uY2xhc3NMaXN0LmNvbnRhaW5zKCJmb2N1c2VkIikpe2g9ImRvd24iPT09YT9mKzE6Zi0xLGg8MCYmKGg9ZC5sZW5ndGgtMSksaD5kLmxlbmd0aC0xJiYoaD0wKSxfLmNs'@;
put 'YXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKTticmVha319ZFtoXS5jbGFzc0xpc3QuYWRkKCJmb2N1c2VkIil9b25SZXNpemUoYSl7dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSl9LGMu'@;
put 'XHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvY29tcGxldGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhBQmUsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5pbnB1dEVsZW1lbnQ9aC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
put 'b24oYSxkKXsxJmEmJnh0KCJyZXNpemUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uUmVzaXplKGYpfSwwLG02KX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixh'@;
put 'dXRvY29tcGxldGU6ImF1dG9jb21wbGV0ZSIsdGFiaW5kZXg6InRhYmluZGV4IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOntvbklucHV0S2V5ZG93bjoib25JbnB1dEtleWRvd24iLG9uSW5wdXRD'@;
put 'aGFuZ2U6Im9uSW5wdXRDaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25Mb2FkaW5nTW9yZToib25Mb2FkaW5nTW9yZSJ9LG5nQ29udGVudFNlbGVjdG9yczpMQmUsZGVjbHM6OSx2YXJzOjE1LGNvbnN0czpbWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0s'@;
put 'WyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSIsImNsaWNrIiwibW91c2VlbnRlciIsImZvY3Vz'@;
put 'IiwiZm9jdXNvdXQiLCJrZXl1cCJdLFsiaW5wdXQiLCIiXSxbMSwib3ZlcmxheSJdLFsxLCJkYXRhbGlzdCIsMywibmdTdHlsZSIsImlkIiwiY2xpY2siLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInNjcm9sbCJdLFsib3B0aW9ucyIsIiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwi'@;
put 'Y2xhc3MiLCJsb2FkLW1vcmUiLDQsIm5nSWYiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsMSwibG9hZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoQWkoKSxtZSgwLCJkaXYiLDApLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1haW5LZXlk'@;
put 'b3duKGYpfSksbWUoMSwiaW5wdXQiLDEsMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnZhbHVlPWZ9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRDbGljayhmKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklu'@;
put 'cHV0RmlyZWQoZil9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dE1vdXNlZW50ZXIoZil9KSgiZm9jdXMiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRGb2N1c2luKGYpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0Rm9jdXNv'@;
put 'dXQoZil9KSgia2V5dXAiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRLZXl1cChmKX0pLHllKCkscXQoMywiZGl2IiwzKSxtZSg0LCJkaXYiLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EYXRhTGlzdENsaWNrKGYpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKGYp'@;
put 'e3JldHVybiBkLm9uRGF0YUxpc3RNb3VzZUVudGVyKGYpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRGF0YUxpc3RNb3VzZUxlYXZlKGYpfSkoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EYXRhTGlzdFNjcm9sbChmKX0pLG1lKDUsImRpdiIsbnVsbCw1'@;
put 'KSxrcig3KSx5ZSgpLEplKDgsVEJlLDIsMSwib3B0aW9uIiw2KSx5ZSgpKCkpLDImYSl7Y29uc3QgaD0kaSg2KTtDZSgxKSxSZSgiaWQiLGQuaW5wdXRJZCkoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyKSgibmdNb2RlbCIsZC52YWx1ZSkoImRpc2FibGVkIixkLmRpc2FibGVkKSxUcigi'@;
put 'bGlzdCIsImRhdGFsaXN0XyIrZC5pbnB1dElkKSxDZSgyKSxkcigiaGlkZGVuIiwhZC5kYXRhbGlzdE9wZW4pLENlKDEpLGRyKCJoaWRkZW4iLCFkLmRhdGFsaXN0T3BlbiksUmUoIm5nU3R5bGUiLFEyKDEyLERCZSxkLmlucHV0Q2xpZW50UmVjdC53aWR0aCxkLmlubmVySGVpZ2h0JiZkLmlu'@;
put 'cHV0Q2xpZW50UmVjdC5ib3R0b20/ZC5pbm5lckhlaWdodC1kLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxpc3RfIitkLmlucHV0SWQpLENlKDQpLFJlKCJuZ0lmIixoLmNoaWxkcmVuLmxlbmd0aD4wJiZkLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2ll'@;
put 'czpbWmksaUcsbDEsYzEsV2EsQnMsT3NdLHN0eWxlczpbIi5pbnB1dC12YWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0'@;
put 'bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9u'@;
put 'OmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQ6d2hpdGU7Ym94LXNoYWRvdzowIDNweCAxMHB4IC0xcHggIzAwMDAw'@;
put 'MDJiO292ZXJmbG93OmF1dG87ei1pbmRleDoyMDAwfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb257cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcn0uYXV0b2NvbXBsZXRlLXdyYXBw'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgb3B0aW9uOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDU4ODIzNTI5NCl9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDU4ODIzNTI5NCl9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci10'@;
put 'b3A6MXB4IHNvbGlkICNlNmU2ZTZ9Il19KSxjfSkoKSxJQmU9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNoKGQpe2Nhc2UiZGF0ZSI6cmV0dXJuIEtvKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZv'@;
put 'cm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0'@;
put 'KCI6IilbMV0pLF89cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIitoOmh9OiR7ZjwxMD8iMCIrZjpmfToke188MTA/IjAiK186X31gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2NvbnN0IFJCZT1bImlucHV0Il07ZnVuY3Rpb24gT0JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksTmUoMSwiIC8gIiksbWUo'@;
put 'Miwic3BhbiIsNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5vbkNoYW5nZUxhYmVsKCJzZWNvbmQiKSl9KSxOZSgzKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwic2Vjb25kIj09PWEu'@;
put 'bGFiZWxTZWxlY3RlZCksQ2UoMSksb3IoYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIFBCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImxhYmVsIiwzKSgxLCJzcGFuIiw0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25DaGFuZ2VMYWJlbCgi'@;
put 'Zmlyc3QiKSl9KSxOZSgyKSx5ZSgpLEplKDMsT0JlLDQsMywibmctY29udGFpbmVyIiw1KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO2RyKCJzZWNvbmRMYWJlbEFjdGl2ZSIsYS5zZWNvbmRMYWJlbCYmYS5zZWNvbmRMYWJlbC5sZW5ndGg+MCksQ2UoMSksZHIoInZhbHVlLXR5cGUtc2Vs'@;
put 'ZWN0ZWQiLCJmaXJzdCI9PT1hLmxhYmVsU2VsZWN0ZWQpLENlKDEpLG9yKGEubGFiZWwpLENlKDEpLFJlKCJuZ0lmIixhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gRkJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiY2xyLWRhdGUtY29udGFpbmVyIikoMiwiaW5wdXQi'@;
put 'LDYpLHh0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkRhdGVJbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVy'@;
put 'biBCdChhKSxqdChWZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0TW91c2VPdmVyKCkpfSko'@;
put 'Im1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGJhKDMsImRhdGVUaW1lRm9ybWF0dGVyIikseWUoKSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoImlkIixhLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsTTUo'@;
put 'Myw1LGEudGVtcCwiZGF0ZSIpKSgiY2xyRGF0ZSIsYS52YWx1ZSkoImRpc2FibGVkIixhLmRpc2FibGVkKSxUcigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gSEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiaW5wdXQiLDcpLHh0KCJpbnB1'@;
put 'dCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmlucHV0Rm9j'@;
put 'dXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBCdChhKSxqdChWZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLHllKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgidmFsdWUiLGEudmFsdWUpKCJpZCIsYS5pbnB1dElkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLFRyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0'@;
put 'SWQpfX1mdW5jdGlvbiBOQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJhcHAtYXV0b2NvbXBsZXRlIiw4LDkpLHh0KCJvbklucHV0Q2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0RmlyZWQoaCkpfSkoIm9uTG9hZGluZ01vcmUi'@;
put 'LGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgpKX0pLGtyKDMpLHllKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgiaW5wdXRJZCIsYS5pbnB1dElkKSgidmFsdWUiLChudWxsPT1hLnZhbHVlP251bGw6YS52YWx1'@;
put 'ZS50b1N0cmluZygpKXx8IiIpKCJlbmFibGVMb2FkTW9yZSIsYS5lbmFibGVMb2FkTW9yZSkoImVtaXRPbmx5U2VsZWN0ZWQiLGEuZW1pdE9ubHlTZWxlY3RlZCkoImRpc2FibGVkIixhLmRpc2FibGVkKX19Y29uc3QgVkJlPVsiKiJdO2xldCB4c2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv'@;
put 'cigpe3RoaXMuaW5wdXRJZD0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmRpc2FibGVTb2Z0c2VsZWN0PSExLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEVy'@;
put 'LHRoaXMub25JbnB1dEV2ZW50PW5ldyBFcix0aGlzLmZvY3VzaW5JbnB1dD1uZXcgRXIsdGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlPW5ldyBFcix0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2U9bmV3IEVyLHRoaXMudGVtcD0iIix0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmxhYmVs'@;
put 'U2VsZWN0ZWQ9ImZpcnN0In1uZ09uQ2hhbmdlcyhhKXthLnZhbHVlJiZhLnZhbHVlLmN1cnJlbnRWYWx1ZSE9PWEudmFsdWUucHJldmlvdXNWYWx1ZSYmdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEudmFsdWUuY3VycmVudFZhbHVlKX1uZ09uSW5pdCgpe31hdXRvY29tcGxldGVMb2FkaW5nTW9y'@;
put 'ZShhKXt0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUuZW1pdChhKX1vbklucHV0RmlyZWQoYSl7Y29uc3QgZD1hLnRhcmdldC52YWx1ZTt0aGlzLnRlbXA9ZCx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZCksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbkRhdGVJbnB1dEZpcmVkKGEp'@;
put 'e3RoaXMudGVtcD1hLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChhKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uSW5wdXRNb3VzZU91dCgpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnZhbHVlPXRoaXMudGVtcCx0aGlzLnRlbXA9IiIpfW9uSW5wdXRNb3VzZU92ZXIoKXt0aGlz'@;
put 'LmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy50ZW1wPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIix0aGlzLnZhbHVlPSIiKX1vbkZvY3VzaW5JbnB1dChhKXt0aGlzLmZvY3VzaW5JbnB1dC5lbWl0KGEpfW9uQ2hhbmdlTGFiZWwoYSl7dGhpcy5sYWJlbFNlbGVjdGVkPWEsdGhpcy5zZWxlY3Rl'@;
put 'ZExhYmVsQ2hhbmdlLmVtaXQoImZpcnN0Ij09PWE/dGhpcy5sYWJlbDp0aGlzLnNlY29uZExhYmVsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zb2Z0LXNlbGVjdCJdXSx2'@;
put 'aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFJCZSw1KSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLmlucHV0RWxlbWVudD1oLmZpcnN0KX19LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIsbGFiZWw6ImxhYmVsIixzZWNvbmRMYWJlbDoic2Vjb25kTGFiZWwiLHZhbHVlOiJ2'@;
put 'YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixkaXNhYmxlU29mdHNlbGVjdDoiZGlzYWJsZVNvZnRzZWxlY3QiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdl'@;
put 'OiJ2YWx1ZUNoYW5nZSIsb25JbnB1dEV2ZW50OiJvbklucHV0RXZlbnQiLGZvY3VzaW5JbnB1dDoiZm9jdXNpbklucHV0IixvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlOiJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixzZWxlY3RlZExhYmVsQ2hhbmdlOiJzZWxlY3RlZExhYmVsQ2hhbmdl'@;
put 'In0sZmVhdHVyZXM6W3ZhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VkJlLGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiwzLCJzZWNvbmRMYWJlbEFjdGl2ZSIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY2xy'@;
put 'LWNvbnRyb2wtbGFiZWwiXSxbMywiY2xpY2siXSxbNCwibmdJZiJdLFsidHlwZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwzLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIiwiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVy'@;
put 'IiwibW91c2VvdXQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywidmFsdWUiLCJpZCIsImRpc2FibGVkIiwiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21w'@;
put 'bGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCIsIm9uSW5wdXRDaGFuZ2UiLCJvbkxvYWRpbmdNb3JlIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpm'@;
put 'dW5jdGlvbihhLGQpezEmYSYmKEFpKCksSmUoMCxQQmUsNCw2LCJsYWJlbCIsMCksVnIoMSwxKSxKZSgyLEZCZSw0LDgsIm5nLWNvbnRhaW5lciIsMiksSmUoMyxIQmUsMiw0LCJuZy1jb250YWluZXIiLDIpLEplKDQsTkJlLDQsNSwibmctY29udGFpbmVyIiwyKSx6cigpKSwyJmEmJihSZSgi'@;
put 'bmdJZiIsZC5sYWJlbCksQ2UoMSksUmUoIm5nU3dpdGNoIixkLnR5cGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidGV4dCIpKX0sZGVwZW5kZW5jaWVzOltaaSxuZCx0aCxV'@;
put 'cyxJYiwkRixxRixNc2UsSUJlXSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO291dGxpbmU6'@;
put 'bm9uZX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9Y2xy'@;
put 'LWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNXB4fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAgIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBp'@;
put 'Y2tlci1pbmRpY2F0b3J7bWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLXRvcDotNXB4fWxhYmVsLnNlY29uZExhYmVsQWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdOm5vdCgudmFsdWUtdHlwZS1zZWxlY3RlZCl7dGV4dC1kZWNvcmF0aW9uOmxpbmUt'@;
put 'dGhyb3VnaDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi42fSJdfSksY30pKCksVTc9KCgpPT57Y2xhc3MgY3tzZXQgbmdWYXIoYSl7dGhpcy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1ZpZXd8fCh0aGlzLnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0'@;
put 'aGlzLnRlbXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEwKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMudGVtcGxhdGVSZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1ZhcjpudWxsfSx0aGlzLmhhc1ZpZXc9ITF9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9fSksY30pKCksQkJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEsZD0iZGF5cyIsaD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJkYXlzIj09PWQpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09'@;
put 'ZClyZXR1cm4gaD8iMTE6MDA6MDAiOm51bGx9bGV0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgVD1hLnNwbGl0KCI6Iik7Zj1uZXcgRGF0ZShUWzBdKSxmLnNldEhvdXJzKHBhcnNlSW50'@;
put 'KFRbMV0pKSxmLnNldE1pbnV0ZXMocGFyc2VJbnQoVFsyXSkpLGYuc2V0U2Vjb25kcyhwYXJzZUludChUWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoZj1uZXcgRGF0ZShhKSk7bGV0IF89YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0SG91cnMoKS50b1N0'@;
put 'cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpfWA7cmV0dXJuIGg/XzpmfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLGpCZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5z'@;
put 'Zm9ybShhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIiI7bGV0IGQsaCxmO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmMz09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IF89YS5zcGxpdCgiOiIpO2Q9X1swXSxoPV9bMV0sZj1fWzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBh'@;
put 'cnNlSW50KGEpKSxkPU1hdGguZmxvb3IoYS8zNjAwKSxoPU1hdGguZmxvb3IoYSUzNjAwLzYwKSxmPU1hdGguZmxvb3IoYSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGgp'@;
put 'fToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmKX1gfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InNlY29uZHNQYXJzZXIiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7'@;
put 'ZnVuY3Rpb24gekJlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwyMiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJzZWxlY3RlZCIsVmUoKS5sb2dpY09wZXJhdG9yc1swXSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gVUJlKGMsbCl7MSZjJiYo'@;
put 'bWUoMCwiZGl2IiwyMyksTmUoMSwiXG4gICAgICAgICIpLHF0KDIsInByb2dyZXNzIiksTmUoMywiXG4gICAgICAiKSx5ZSgpKX1mdW5jdGlvbiBaQmUoYyxsKXsxJmMmJnF0KDAsImRpdiIpfWZ1bmN0aW9uIFlCZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkp'@;
put 'LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgic2VsZWN0ZWQiLFZlKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBXQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSkscXQoMSwiY2xyLWljb24iLDMzKSxtZSgyLCJzcGFuIiksTmUoMywiR3JvdXAiKSx5ZSgpKCl9fWZ1bmN0aW9uIEdCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwzNCkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5yZW1vdmVHcm91cENsYXVzZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiAkQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2Uo'@;
put 'MSksZ3IoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBxQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uIEtCZShjLGwpezEmYyYmamEoMCl9Y29uc3QgWEJlPWZ1bmN0aW9uKGMs'@;
put 'bCxhKXtyZXR1cm57cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YX19O2Z1bmN0aW9uIEpCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLmluZGV4'@;
put 'LGY9VmUoKS5pbmRleCxfPVZlKCk7cmV0dXJuIF8uY3VycmVudFF1ZXJ5SW5kZXg9aCxqdChfLmN1cnJlbnRDbGF1c2VJbmRleD1mKX0pLE5lKDIsIiBDaG9vc2UgdmFsdWVzICIpLHllKCksSmUoMyxLQmUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgy'@;
put 'KSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxmPVZlKCkuaW5kZXg7VmUoKTtjb25zdCBfPSRpKDM3KTtDZSgzKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsXykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix5XygyLFhCZSxkLGgsZikpfX1mdW5jdGlvbiBRQmUoYyxsKXsxJmMmJmphKDApfWNv'@;
put 'bnN0IGVqZT1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm57cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9fTtmdW5jdGlvbiB0amUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDU0KSxKZSgxLFFCZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCxfPVZlKCkuaW5kZXgsVD1WZSgpLFc9JGkoMzEpLGllPSRpKDMzKTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmVC51c2VQaWNrZXJzP1c6aWUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4'@;
put 'dCIsV00oMixlamUsaCxmLF8sYSkpfX1mdW5jdGlvbiBuamUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIHJqZShjLGwpezEmYyYmamEoMCl9Y29uc3QgaWplPWZ1bmN0aW9uKGMsbCxhLGQpe3JldHVybntyYW5nZToic3RhcnQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRl'@;
put 'eDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfX0sb2plPWZ1bmN0aW9uKGMsbCxhLGQpe3JldHVybntyYW5nZToiZW5kIixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH19O2Z1bmN0aW9uIHNqZShjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLEplKDIsbmplLDEsMCwibmctY29udGFpbmVyIiw1MykseWUoKSxtZSgzLCJkaXYiLDU3KSxKZSg0LHJqZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLGg9ZC4kaW1wbGlj'@;
put 'aXQsZj1kLmluZGV4LF89VmUoKS5pbmRleCxUPVZlKCksVz0kaSgzMSksaWU9JGkoMzUpO0NlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZULnVzZVBpY2tlcnM/VzppZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixXTSg0LGlqZSxoLGYsXyxhKSksQ2UoMiksUmUoIm5nVGVtcGxh'@;
put 'dGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9XOmllKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFdNKDksb2plLGgsZixfLGEpKX19ZnVuY3Rpb24gYWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDMpLE5lKDIsIlZhbHVlIikseWUoKSxt'@;
put 'ZSgzLCJpbnB1dCIsNTkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuJGltcGxpY2l0LnZhbHVlPWgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuaW5kZXgsXz1WZSgpLmluZGV4O3JldHVybiBq'@;
put 'dChWZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsZixfKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgzKSxSZSgibmdNb2RlbCIsYS52YWx1ZSl9fWZ1bmN0aW9uIGxqZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDYpLEplKDEsSkJlLDQsNiwiZGl2Iiw0'@;
put 'NyksSmUoMix0amUsMiw3LCJkaXYiLDQ4KSxKZSgzLHNqZSw1LDE0LCJkaXYiLDQ5KSxKZSg0LGFqZSw0LDEsImRpdiIsNTApLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVyYXRvciks'@;
put 'Q2UoMSksUmUoIm5nSWYiLCJCRVRXRUVOIiE9PWEub3BlcmF0b3ImJiJJTiIhPT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJMSUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09YS5vcGVyYXRvciksQ2UoMSksUmUo'@;
put 'Im5nSWYiLCJCRVRXRUVOIj09PWEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0lmIiwiTElLRSI9PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5vcGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3IpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw'@;
put 'LCJkaXYiLDYpKDEsImRpdiIsMzUpKDIsImRpdiIsMzYpKDMsImFwcC1zb2Z0LXNlbGVjdCIsMzcpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC52YXJpYWJsZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQo'@;
put 'YSksXz1mLiRpbXBsaWNpdCxUPWYuaW5kZXgsVz1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2UoXy52YXJpYWJsZSxULFcsaCkpfSksSmUoNCwkQmUsMiwxLCJvcHRpb24iLDM4KSx5ZSgpKCkoKSxtZSg1LCJkaXYiLDM5KSg2LCJjbHItc2VsZWN0LWNvbnRh'@;
put 'aW5lciIpKDcsImxhYmVsIiksTmUoOCwiT3BlcmF0b3IiKSx5ZSgpLG1lKDksInNlbGVjdCIsNDApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0Lm9wZXJhdG9yPWgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD1C'@;
put 'dChhKSxmPWguaW5kZXgsXz1oLiRpbXBsaWNpdCxUPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVPcGVyYXRvcihmLF8ub3BlcmF0b3IsVCkpfSksSmUoMTAscUJlLDIsMSwib3B0aW9uIiwzOCkseWUoKSgpKCksSmUoMTEsbGplLDUsNCwiZGl2Iiw0MSksbWUoMTIsImRp'@;
put 'diIsNDIpKDEzLCJidXR0b24iLDQzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS5pbmRleCxfPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkucmVtb3ZlQ2xhdXNlKGYsXykpfSkscXQoMTQsImNsci1pY29uIiw0NCkoMTUsInNwYW4iKSx5ZSgpLG1lKDE2LCJidXR0b24i'@;
put 'LDQ1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLmFkZENsYXVzZShoKSl9KSxxdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1W'@;
put 'ZSgpLmluZGV4LGY9VmUoKTtkcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksQ2UoMyksUmUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIitkKyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApKCJ2YWx1ZSIsYS52'@;
put 'YXJpYWJsZSksQ2UoMSksUmUoIm5nRm9yT2YiLGYuY29scyksQ2UoNSksUmUoIm5nTW9kZWwiLGEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0Zvck9mIixhLm9wZXJhdG9ycyksQ2UoMSksUmUoIm5nVmFyIiwiREFURSI9PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9'@;
put 'PT1hLmRkdHlwZSksQ2UoMiksUmUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIHVqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMjQpKDEsImRpdiIsNikoMiwiZGl2IiwyNSkoMywiZGl2IiwyNiko'@;
put 'NCwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg1LCJsYWJlbCIpLE5lKDYsIkxvZ2ljIikseWUoKSxtZSg3LCJzZWxlY3QiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5jbGF1c2VMb2dpYz1oKX0pKCJuZ01vZGVsQ2hhbmdlIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNldExvZ2ljKCkpfSksSmUoOCxZQmUsMiwyLCJvcHRpb24iLDkpLHllKCkoKSgpLHF0KDksImJyIiksSmUoMTAsV0JlLDQsMCwiYnV0dG9uIiwyOCkseWUoKSxtZSgxMSwiZGl2IiwyOSksSmUoMTIsR0JlLDEsMCwiY2xyLWljb24iLDMw'@;
put 'KSxKZSgxMyxjamUsMTksMTEsImRpdiIsMzEpLHllKCkoKSxxdCgxNCwiYnIiKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksZHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLENlKDYpLFJlKCJuZ01vZGVsIixhLmNsYXVzZUxvZ2ljKSgi'@;
put 'ZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxvZ2ljT3BlcmF0b3JzKSxDZSgyKSxSZSgibmdJZiIsZC5pbm5lcldpZHRoPjc2OCksQ2UoMiksUmUoIm5nSWYiLGQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MSksQ2UoMSksUmUoIm5nRm9yT2Yi'@;
put 'LGEuZWxlbWVudHMpfX1mdW5jdGlvbiBkamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYyKSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNs'@;
put 'YXVzZUluZGV4LGllPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChWZSgpLmRhdGVDaGFuZ2UoaCxfLFQsVyxpZSkpfSksYmEoMiwic2FzVG9Kc0RhdGUiKSxiYSgzLCJzYXNUb0pzRGF0ZSIpLHllKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPWEucXVlcnlJbmRleCxoPWEuY2xh'@;
put 'dXNlSW5kZXgsZj1hLnF1ZXJ5VmFsdWVJbmRleCxfPWEucXVlcnk7Q2UoMSksUmUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9abCgyLDMsXy52YWx1ZVtmXSk6WmwoMyw1LF8udmFsdWUpKX19ZnVuY3Rp'@;
put 'b24gaGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MykseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLmNsYXVzZUluZGV4LFQ9Zi5xdWVyeUluZGV4O3JldHVybiBqdChWZSgpLmdldFF1'@;
put 'ZXJ5RGF0ZVRpbWUoXyxUKS5kYXRlPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCksZj1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LFQ9aC5jbGF1c2VJbmRleCxXPWgucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChWZSgpLmRhdGVUaW1lQ2hhbmdlKGYs'@;
put 'XyxULFcpKX0pLGJhKDIsInNhc1RvSnNEYXRlIiksYmEoMywic2FzVG9Kc0RhdGUiKSx5ZSgpLG1lKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLF89Zi5jbGF1c2VJbmRleCxUPWYucXVlcnlJbmRleDtyZXR1'@;
put 'cm4ganQoVmUoKS5nZXRRdWVyeURhdGVUaW1lKF8sVCkudGltZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLGY9aC5xdWVyeSxfPWgucXVlcnlJbmRleCxUPWguY2xhdXNlSW5kZXgsVz1oLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS5k'@;
put 'YXRlVGltZUNoYW5nZShmLF8sVCxXKSl9KSxiYSg1LCJzYXNUb0pzRGF0ZSIpLGJhKDYsInNhc1RvSnNEYXRlIikseWUoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9YS5xdWVyeUluZGV4LGg9YS5jbGF1c2VJbmRleCxmPWEucXVlcnlWYWx1ZUluZGV4LF89YS5xdWVyeTtDZSgxKSxS'@;
put 'ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZCsiXyIraCkoInZhbHVlIix2b2lkIDAhPT1mP001KDIsNixfLnZhbHVlW2ZdLCJzZWNvbmRzIik6TTUoMyw5LF8udmFsdWUsInNlY29uZHMiKSksQ2UoMyksUmUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCko'@;
put 'ImlucHV0SWQiLCJ2YWxzX3RpbWUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9EUig1LDEyLF8udmFsdWVbZl0sInNlY29uZHMiLCEwKTpEUig2LDE2LF8udmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIGZqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEs'@;
put 'ImFwcC1zb2Z0LXNlbGVjdCIsNjUpLHh0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4LGllPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChWZSgpLnRpbWVDaGFuZ2UoaCxfLFQs'@;
put 'VyxpZSkpfSksYmEoMiwic2Vjb25kc1BhcnNlciIpLGJhKDMsInNlY29uZHNQYXJzZXIiKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCksZD1hLnF1ZXJ5SW5kZXgsaD1hLmNsYXVzZUluZGV4LGY9YS5xdWVyeVZhbHVlSW5kZXgsXz1hLnF1ZXJ5O0NlKDEpLFJlKCJkaXNhYmxlU29m'@;
put 'dHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9abCgyLDMsXy52YWx1ZVtmXSk6WmwoMyw1LF8udmFsdWUpKX19ZnVuY3Rpb24gcGplKGMsbCl7MSZjJiYoVnIoMCw2MCksSmUoMSxkamUsNCw3LCJuZy1jb250YWluZXIiLDYxKSxKZSgy'@;
put 'LGhqZSw3LDIwLCJuZy1jb250YWluZXIiLDYxKSxKZSgzLGZqZSw0LDcsIm5nLWNvbnRhaW5lciIsNjEpLHpyKCkpLDImYyYmKFJlKCJuZ1N3aXRjaCIsbC5xdWVyeS5kZHR5cGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJEQVRFIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVU'@;
put 'SU1FIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw2OCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS51bmZvcm1hdHRlZCksQ2UoMSksZ3IoIiAiLGEuZm9y'@;
put 'bWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLGdqZSwyLDIsIm9wdGlvbiIsNjcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLnF1ZXJ5O0NlKDEpLFJlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIHZqZShjLGwpe2lm'@;
put 'KDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEuTkFNRSksQ2UoMSksZ3IoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBfamUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLHZqZSwyLDIsIm9wdGlvbiIs'@;
put 'NjkpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLnF1ZXJ5O0NlKDEpLFJlKCJuZ0lmIixhLlRZUEU9PT1kLnR5cGUpfX1mdW5jdGlvbiBiamUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLF9qZSwyLDEsIm5nLWNvbnRhaW5lciIsMzgpLHllKCkpLDImYyl7'@;
put 'Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2xzKX19ZnVuY3Rpb24geWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw2NikseHQoInNlbGVjdGVkTGFiZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkucXVlcnk7'@;
put 'cmV0dXJuIGp0KFZlKCkuc2VsZWN0ZWRMYWJlbENoYW5nZShoLF8pKX0pKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLnF1ZXJ5LnZhbHVlPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj1CdChhKSxfPWYucXVlcnlJbmRleCxUPWYuY2xh'@;
put 'dXNlSW5kZXg7cmV0dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaC50YXJnZXQudmFsdWUsXyxUKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1CdChhKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4O3JldHVy'@;
put 'biBqdChWZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCxfLnZhcmlhYmxlLFQsVykpfSksSmUoMSxtamUsMiwxLCJkaXYiLDE2KSxKZSgyLGJqZSwyLDEsImRpdiIsMTYpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4O1Jl'@;
put 'KCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIikoImVtaXRPbmx5U2VsZWN0ZWQiLGEudmFsdWVWYXJpYWJsZSkoImlucHV0SWQiLCJ2YWxzXyIrZCsiXyIraCkoInZhbHVlIixhLnZhbHVlKSgiZW5hYmxlTG9hZE1vcmUiLGEubm9icz5hLnZhbHVlcy5sZW5ndGgpLENlKDEpLFJlKCJuZ0lmIiwh'@;
put 'YS52YWx1ZVZhcmlhYmxlKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZVZhcmlhYmxlKX19ZnVuY3Rpb24gd2plKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw2OCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5mb3JtYXR0ZWQpLENlKDEpLGdy'@;
put 'KCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBDamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhcHAtc29mdC1zZWxlY3QiLDcwKSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSk7cmV0dXJuIGp0KGYucXVlcnkudmFsdWVbZi5xdWVyeVZh'@;
put 'bHVlSW5kZXhdPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtjb25zdCBoPUJ0KGEpLGY9aC5xdWVyeSxfPWgucXVlcnlJbmRleCxUPWguY2xhdXNlSW5kZXg7cmV0dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVWYWx1ZXMoZi52YWx1ZSxfLFQpKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRp'@;
put 'bmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpLF89Zi5xdWVyeSxUPWYucXVlcnlJbmRleCxXPWYuY2xhdXNlSW5kZXg7cmV0dXJuIGp0KFZlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLF8udmFyaWFibGUsVCxXKSl9KSxKZSgxLHdqZSwyLDIsIm9wdGlvbiIsNjcpLHll'@;
put 'KCl9aWYoMiZjKXtjb25zdCBhPWwucmFuZ2UsZD1sLnF1ZXJ5LGg9bC5xdWVyeVZhbHVlSW5kZXg7UmUoImlucHV0SWQiLCJ2YWxzLSIrYSsiXyIrbC5xdWVyeUluZGV4KyJfIitsLmNsYXVzZUluZGV4KSgidmFsdWUiLGQudmFsdWVbaF0pKCJlbmFibGVMb2FkTW9yZSIsZC5ub2JzPmQudmFs'@;
put 'dWVzLmxlbmd0aCkoImRpc2FibGVkIix2b2lkIDAhPT1oJiYic3RhcnQiIT09YSYmIWQudmFsdWVbMF0pLENlKDEpLFJlKCJuZ0Zvck9mIixkLnZhbHVlcyl9fWZ1bmN0aW9uIFNqZShjLGwpezEmYyYmKG1lKDAsImg1Iiw3OCksTmUoMSwiIE5vIHZhbHVlcyBhdmFpbGFibGUuICIpLHllKCkp'@;
put 'fWZ1bmN0aW9uIE1qZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1jaGVja2JveC13cmFwcGVyIikoMSwiaW5wdXQiLDgwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS5pbmRleDtyZXR1cm4ganQoVmUoMikucXVlcnkudmFsdWVbX10u'@;
put 'Y2hlY2tlZD1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLF89Zi5xdWVyeUluZGV4LFQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLF8sVCkpfSkseWUoKSxtZSgyLCJsYWJlbCIpLE5lKDMpLHllKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMikucXVlcnk7Q2UoMSksUmUoIm5nTW9kZWwiLGgudmFsdWVbZF0uY2hlY2tlZCksQ2UoMiksZ3IoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIHhqZShjLGwpe2lmKDEmYyYmKG1lKDAsInNlY3Rpb24i'@;
put 'LDc5KSgxLCJjbHItY2hlY2tib3gtY29udGFpbmVyIiksSmUoMixNamUsNCwyLCJjbHItY2hlY2tib3gtd3JhcHBlciIsMzgpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCkucXVlcnk7Q2UoMiksUmUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gRWplKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiY2xyLW1vZGFsIiw3MSkoMSwiaDMiLDcyKSxOZSgyLCJTZWxlY3QgdmFsdWVzIikseWUoKSxtZSgzLCJkaXYiLDczKSxKZSg0LFNqZSwyLDAsImg1Iiw3NCksSmUoNSx4amUsMywxLCJzZWN0aW9uIiw3NSkseWUoKSxtZSg2LCJkaXYiLDc2KSg3LCJidXR0b24iLDc3'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBoLmN1cnJlbnRRdWVyeUluZGV4PS0xLGp0KGguY3VycmVudENsYXVzZUluZGV4PS0xKX0pLE5lKDgsIiBBcHBseSAiKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRl'@;
put 'eCxoPWwuY2xhdXNlSW5kZXgsZj1WZSgpO1JlKCJjbHJNb2RhbE9wZW4iLGYuY3VycmVudFF1ZXJ5SW5kZXg9PT1kJiZmLmN1cnJlbnRDbGF1c2VJbmRleD09PWgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksUmUoIm5nSWYiLCFmLmlzQXJyKGEudmFsdWUpKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsZi5pc0FycihhLnZhbHVlKSl9fSFmdW5jdGlvbiBwMGUoYyxsLGEpeyhmdW5jdGlvbiBVTShjLGwsYSl7InN0cmluZyIhPXR5cGVvZiBsJiYoYT1sLGw9Y1txby5Mb2NhbGVJZF0pLGw9bC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLCRkW2xdPWMsYSYmKCRkW2xdW3FvLkV4'@;
put 'dHJhRGF0YV09YSl9KShjLGwsYSl9KGtCZSk7bGV0IHVVPSgoKT0+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 'aXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJl'@;
put 'ZGl0b3IiOiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLGlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJihpbChHbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVz'@;
put 'ZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoaWwoR24sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUdu'@;
put 'LnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Hbi5yb290UGFyYW0mJihhPSJ2aWV3ZXIiKSxpbChHbixhKS5maWx0ZXIuY29scy5sZW5ndGg+MCYmKHRoaXMu'@;
put 'Y29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlsKEduLGEpLmZpbHRlci5jb2xzKSkpLGlsKEduLGEpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWwoR24sYSkuZmlsdGVyLnZhbHMpKSksIiIhPT1pbChHbixhKS5maWx0'@;
put 'ZXIuZ3JvdXBMb2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz1pbChHbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyx0aGlzLndoZXJlQ2xhdXNlPWlsKEduLGEpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPWlsKEduLGEpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9aWwoR24sYSkuZmlsdGVy'@;
put 'LmNsYXVzZXMsdGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoYSl7dGhpcy5ncm91cExvZ2ljPWEsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoYSxkLGgsZixfKXtsZXQgVD10aGlz'@;
put 'LmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShhKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT1fJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW19dPVQpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoVCxoLGYpfWRhdGVUaW1l'@;
put 'Q2hhbmdlKGEsZCxoLGYpe2NvbnN0IF89dGhpcy5nZXRRdWVyeURhdGVUaW1lKGgsZCk7aWYoIiI9PT1fLmRhdGUpe2lmKCIiPT09YS52YWx1ZSlyZXR1cm47Xy5kYXRlPWEudmFsdWUuc3BsaXQoIjoiKVswXX1jb25zdCBUPXBhcnNlSW50KF8udGltZS5zcGxpdCgiOiIpWzBdKSxXPXBhcnNl'@;
put 'SW50KF8udGltZS5zcGxpdCgiOiIpWzFdKSxpZT1wYXJzZUludChfLnRpbWUuc3BsaXQoIjoiKVsyXSl8fDA7bGV0IHBlPW5ldyBEYXRlKF8uZGF0ZSksd2U9bmV3IERhdGUocGUuZ2V0RnVsbFllYXIoKSxwZS5nZXRNb250aCgpLHBlLmdldERhdGUoKSxULFcsaWUpLEVlPXRoaXMuaGVscGVy'@;
put 'U2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKHdlLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09YS5vcGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT1FZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhFZSxkLGgpfXRp'@;
put 'bWVDaGFuZ2UoYSxkLGgsZixfKXthPWEudGFyZ2V0LnZhbHVlO2xldCBFZT02MCpwYXJzZUludChhLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQg'@;
put 'MCE9PV8mJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbX109RWUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoRWUsaCxmKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7Zjx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3IobGV0IF89MDtfPHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5sZW5ndGg7XysrKXtpZihmPT09YSYmXz09PWR8'@;
put 'fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVz'@;
put 'KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZSkpY29udGludWU7bGV0IFQ9IiI7Y29uc3QgVz10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10ub3BlcmF0b3IsaWU9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhcmlhYmxl'@;
put 'OyJCRVRXRUVOIj09PVc/VD1gJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVtfXS52YWx1ZVsxXX1gOiJJTiI9PT1XfHwiTk9UIElOIj09PVc/KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVtfXS52'@;
put 'YWx1ZS5mb3JFYWNoKHBlPT57aWYocGUuY2hlY2tlZCl7bGV0IHdlPXBlLnZhbDsic3RyaW5nIiE9dHlwZW9mIHdlfHwoMCx0My5pc1NwZWNpYWxNaXNzaW5nKSh3ZSk/VC5sZW5ndGg+MD9UKz1gLCR7d2V9YDpUPWAoJHt3ZX1gOlQubGVuZ3RoPjA/VCs9YCwnJHt3ZX0nYDpUPWAoJyR7d2V9'@;
put 'J2B9fSksVC5sZW5ndGg+MCYmKFQrPSIpIikpOiIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlP1Q9ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVy'@;
put 'eU9ialtmXS5lbGVtZW50c1tfXS50eXBlJiYoVD1gJyR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlfSdgKSxoLnB1c2goe0dST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5j'@;
put 'bGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTppZSxPUEVSQVRPUl9OTTpXLFJBV19WQUxVRTpUfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFsdWV9KX1yZXR1cm4gaH1nZXRWYWx1ZXNMb2FkTW9yZShhLGQsaCxmKXt2YXIgXz10aGlz'@;
put 'O3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBUPV8ubGliZHN8fCIiO3RyeXtpZih2b2lkIDAhPT1fLmNvbHMpe2ZvcihsZXQgZXQ9MDtldDxfLmNvbHMubGVuZ3RoO2V0KyspXy5jb2xzW2V0XS5OQU1FPT09ZCYmKF8uc2VsVmFyLmluZGV4PWV0KTtjb25zdCBXPV8uY29sc1tfLnNlbFZh'@;
put 'ci5pbmRleF0uRERUWVBFLHtzdGFydHJvdzppZSxyb3dzOnBlfT1fLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0sd2U9Xy5yb3dzX2luY3JlbWVudCxFZT1pZStwZTtsZXQgWmU9W107Xy5keW5hbWljV2hlcmVDbGF1c2UmJihaZT1fLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3Io'@;
put 'ZixoKSk7Y29uc3QgaXQ9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoVyk7Xy5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoZCxULFplLEVlLHdlKS50aGVuKGV0PT57Y29uc3QgeXQ9ZXQudmFscyx7U1RBUlRST1c6RXQsUk9XUzpTdCxOT0JTOkp0fT1ldC5tZXRh'@;
put 'WzBdO2lmKF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5zdGFydHJvdz1FdCxfLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ucm93cz1TdCxfLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ubm9icz1KdCwxPT09eXQubGVuZ3RoJiYiIj09PXl0WzBdLkZP'@;
put 'Uk1BVFRFRCYmIiI9PT15dFswXS5VTkZPUk1BVFRFRD9hLmxvYWRNb3JlRmluaXNoZWQoITEpOihfLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLnB1c2goLi4ueXQubWFwKE5uPT57Y29uc3QgY3I9Im51bSI9PT1ldC4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7'@;
put 'bGV0IEVpPWNyJiYoMCx0My5pc1NwZWNpYWxNaXNzaW5nKShObi5VTkZPUk1BVFRFRCk/Ii4iK05uLlVORk9STUFUVEVEOk5uLlVORk9STUFUVEVEO3JldHVybiBjciYmbnVsbD09PUVpJiYoRWk9Ii4iKSx7Zm9ybWF0dGVkOml0P05uLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOk5uLkZPUk1B'@;
put 'VFRFRCx1bmZvcm1hdHRlZDpFaX19KSksYS5sb2FkTW9yZUZpbmlzaGVkKEp0LV8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMubGVuZ3RoPjApKSxfLndoZXJlQ2xhdXNlRm4oKSxfLnNldFRvR2xvYmFscygpLF8ud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1f'@;
put 'LnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6bm4scXVlcnlJbmRleDp2bn09Xy5wZW5kaW5nSU5WYWx1ZXNTZXQ7Xy5zZXRJTlZhbHVlcyhubix2biksXy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1fLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChldD0+e18ud2hl'@;
put 'cmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKFcpe18uZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLFcpfX0pKCl9Z2V0VmFsdWVzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtmLndoZXJlQ2xhdXNlTG9hZGluZz0h'@;
put 'MDtsZXQgXz0iIjt2b2lkIDAhPT1mLmxpYmRzJiYoXz1mLmxpYmRzKSxmLmNsZWFyVmFsdWVzKGQsaCksZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1bXSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9IiIsZi5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'W2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yPSI9IixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFyaWFibGU9YTt0cnl7aWYodm9pZCAwIT09Zi5jb2xzKXtmb3IobGV0IHBlPTA7cGU8Zi5jb2xzLmxlbmd0aDtwZSsrKWYuY29sc1twZV0uTkFNRT09PWEmJihmLnNlbFZhci5p'@;
put 'bmRleD1wZSk7Y29uc3QgVD1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLkREVFlQRTtmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uZGR0eXBlPVQsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU9Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5UWVBFLGYuY2xhdXNl'@;
put 'cy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcnM9Im51bSI9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT9mLm51bU9wZXJhdG9yczpmLmNoYXJPcGVyYXRvcnM7bGV0IFc9W107Zi5keW5hbWljV2hlcmVDbGF1c2UmJihXPWYuZHluYW1pY1doZXJlQ2xh'@;
put 'dXNlQ3JlYXRvcihoLGQpKTtjb25zdCBpZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhUKTtmLnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhhLF8sVywxLGYuaW5pdGlhbF9yb3dzKS50aGVuKHBlPT57Y29uc3Qgd2U9cGUudmFscyx7U1RBUlRST1c6RWUsUk9X'@;
put 'UzpaZSxOT0JTOml0fT1wZS5tZXRhWzBdO2lmKGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5zdGFydHJvdz1FZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ucm93cz1aZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ubm9icz1pdCxmLmNsYXVz'@;
put 'ZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPXdlLm1hcChldD0+e2NvbnN0IHl0PSJudW0iPT09cGUuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBTdD15dCYmKDAsdDMuaXNTcGVjaWFsTWlzc2luZykoZXQuVU5GT1JNQVRURUQpPyIuIitldC5VTkZPUk1BVFRFRDpl'@;
put 'dC5VTkZPUk1BVFRFRDtyZXR1cm4geXQmJm51bGw9PT1TdCYmKFN0PSIuIikse2Zvcm1hdHRlZDppZT9ldC5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpldC5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6U3R9fSkuc2xpY2UoMCwyZTMpLGYud2hlcmVDbGF1c2VGbigpLGYuc2V0VG9HbG9iYWxzKCks'@;
put 'Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PWYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpldCxxdWVyeUluZGV4Onl0fT1mLnBlbmRpbmdJTlZhbHVlc1NldDtmLnNldElOVmFsdWVzKGV0LHl0KSxmLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfWYuY2RmLmRl'@;
put 'dGVjdENoYW5nZXMoKX0pLmNhdGNoKHBlPT57Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goVCl7Zi5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsVCl9fSkoKX1nZXRsb2dpYyhhKXt0aGlzLmxvZ2ljPWEsdGhpcy53aGVyZUNsYXVz'@;
put 'ZUZuKCl9c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWlzQXJyKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXkmJmEubGVuZ3RoPjAmJnR5cGVvZiBhWzBdLmNoZWNrZWQ8InUifXNlbGVjdGVkTGFiZWxDaGFuZ2UoYSxkKXtkLnZhbHVlVmFy'@;
put 'aWFibGU9IlZhcmlhYmxlIj09PWEsZC52YWx1ZT0iIix0aGlzLndoZXJlQ2xhdXNlRm4oKX12YXJpYWJsZUlucHV0Q2hhbmdlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzKGEsZCxoKX1zZXRWYXJpYWJsZVZhbHVlcyhhLGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1l'@;
put 'bnRzW2RdLm9wZXJhdG9yOyJCRVRXRUVOIiE9PWYmJiJJTiIhPT1mJiYiTk9UIElOIiE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9YS50b1N0cmluZygpKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldFZhcmlhYmxl'@;
put 'T3BlcmF0b3IoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZTtmIGluc3RhbmNlb2YgQXJyYXkmJiJJTiIhPT1kJiYiTk9UIElOIiE9PWQmJihmPWYgaW5zdGFuY2VvZiBBcnJheSYmMj09PWYubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGZb'@;
put 'MF0/ZlswXToiIiksdGhpcy5jbGVhclZhbHVlc09wZXJhdG9yKGEsaCksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLm9wZXJhdG9yPWQsKCI9Ij09PWR8fCI+Ij09PWR8fCI8Ij09PWR8fCI8PSI9PT1kfHwiPj0iPT09ZHx8Ik5FIj09PWQpJiYodGhpcy5jbGF1c2VzLnF1'@;
put 'ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPWYpLCJCRVRXRUVOIj09PWQmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9W10sdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goZiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'W2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goIiIpKSwoIklOIj09PWR8fCJOT1QgSU4iPT09ZCkmJnRoaXMuc2V0SU5WYWx1ZXMoaCxhKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldElOVmFsdWVzKGEsZCl7Y29uc3QgaD1bXSxmPXRoaXMuY2xhdXNlcy5x'@;
put 'dWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZXM7Zi5sZW5ndGg8MSYmKHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PXtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZH0pO2ZvcihsZXQgXz0wO188Zi5sZW5ndGg7XysrKWgucHVzaCh7Y2hlY2tlZDohMSx2YWw6ZltfXS5mb3JtYXR0ZWR9KTt0'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWU9aH1jbGVhclZhbHVlcyhhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS52YWx1ZT0iIn1jbGVhclZhbHVlc09wZXJhdG9yKGEsZCl7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVs'@;
put 'ZW1lbnRzW2FdLm9wZXJhdG9yOygiQkVUV0VFTiI9PT1ofHwiSU4iPT09aHx8Ik5PVCBJTiI9PT1ofHwiQ09OVEFJTlMiPT09aCkmJnRoaXMuY2xlYXJWYWx1ZXMoYSxkKX1oYXNJbnZhbGlkQ2x1YXNlKGEpe2ZvcihsZXQgZCBvZiBhKWlmKGQuaW52YWxpZENsYXVzZT0hMSwiIj09PWQudmFs'@;
put 'dWUmJiJORSIhPT1kLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1ZSlyZXR1cm4gZC5pbnZhbGlkQ2xhdXNlPSEwLCEwO3JldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52'@;
put 'YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlk'@;
put 'Q2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFkZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dp'@;
put 'YzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBl'@;
put 'b2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNh'@;
put 'bm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6'@;
put 'bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxlY3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlz'@;
put 'LmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1'@;
put 'c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihhJiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQs'@;
put 'dGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhpcy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3Jl'@;
put 'U2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50'@;
put 'cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119'@;
put 'KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Hbi5yb290UGFyYW0mJiJlZGl0b3IiIT09R24ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxp'@;
put 'YmRzLEduLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsR24udmlld2VyLmZpbHRlci5jb2xzPUpTT04u'@;
put 'cGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmR24uZWRpdG9y'@;
put 'LmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxz'@;
put 'LEduLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9t'@;
put 'R2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVz'@;
put 'U3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KFRjKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5w'@;
put 'dXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6S2QsdXNlVmFsdWU6ImVuLUdCIn1dKV0sZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEs'@;
put 'ImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIs'@;
put 'IiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJkaXNhYmxlZCIsIm5nTW9kZWwi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIl0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWNvbC1tZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVtYmVycyIsImxhbmd1YWdlLW1hcmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYi'@;
put 'XSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWluZXIiLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiY2xhdXNlLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90'@;
put 'UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxl'@;
put 'Y3QiLCIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5IiwiY2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNp'@;
put 'emUiLCIzNiIsImNsYXNzIiwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3ciLDMsImludmFsaWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0x'@;
put 'MCIsMywiY2xpY2siXSxbInNoYXBlIiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3Jh'@;
put 'cHBlciJdLFsibGFiZWwiLCJWYXJpYWJsZSIsMywiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9wZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1k'@;
put 'LTMiXSxbImNsclNlbGVjdCIsIiIsMSwibXQtMiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xyLWNvbC1tZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNsci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsx'@;
put 'LCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9jayIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJtaW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsi'@;
put 'Y2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJdLFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsInNpbmdsZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12'@;
put 'YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFs'@;
put 'dWUiLCJ2YWx1ZUNoYW5nZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWyJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElk'@;
put 'IiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0aW1lIiwzLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsMywic2Vjb25kTGFiZWwiLCJlbWl0'@;
put 'T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJzZWxlY3RlZExhYmVsQ2hhbmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywi'@;
put 'dmFsdWUiXSxbMywidmFsdWUiLDQsIm5nSWYiXSxbImxhYmVsIiwiVmFsdWUiLDMsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZGlzYWJsZWQiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiXSxbMSwiaW4tdmFsdWVz'@;
put 'LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0'@;
put 'eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEsImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlucHV0IiwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZHluYW1pY1doZXJlQ2xhdXNlPWZ9KSx5ZSgpLG1lKDQsImxhYmVsIiwzKSxOZSg1LCJE'@;
put 'eW5hbWljIHdoZXJlIGNsYXVzZSIpLHllKCkoKSgpLG1lKDYsImRpdiIsNCkoNywiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSg4LCJpbnB1dCIsNSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnVzZVBpY2tlcnM9Zn0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGQudXNlUGlja2Vyc0NoYW5nZSgpfSkseWUoKSxtZSg5LCJsYWJlbCIsMyksTmUoMTAsIiBVc2UgcGlja2VycyAiKSx5ZSgpKCkoKSgpLG1lKDExLCJkaXYiLDYpKDEyLCJkaXYiLDcpKDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLE5lKDE1LCJHcm91cCBsb2dpYyIp'@;
put 'LHllKCksbWUoMTYsInNlbGVjdCIsOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmdyb3VwTG9naWM9Zn0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnNldEdyb3VwTG9naWMoZC5ncm91cExvZ2ljKX0pLEplKDE3LHpCZSwyLDIsIm9wdGlv'@;
put 'biIsOSkseWUoKSgpKCksbWUoMTgsImRpdiIsMTApKDE5LCJwcmUiLDExKSxOZSgyMCwiICAgICAgIiksSmUoMjEsVUJlLDQsMCwiZGl2IiwxMiksTmUoMjIsIlxuXG4gICAgICAiKSxtZSgyMywiY29kZSIsMTMpLE5lKDI0KSx5ZSgpLE5lKDI1LCJcbiAgICAiKSx5ZSgpKCkoKSxtZSgyNiwi'@;
put 'ZGl2IiwxNCkoMjcsImRpdiIsMTUpLEplKDI4LFpCZSwxLDAsImRpdiIsMTYpLEplKDI5LHVqZSwxNSw4LCJkaXYiLDE3KSx5ZSgpKCksSmUoMzAscGplLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMTgsa2MpLEplKDMyLHlqZSwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDE5LGtjKSxKZSgzNCxD'@;
put 'amUsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyMCxrYyksSmUoMzYsRWplLDksNCwibmctdGVtcGxhdGUiLG51bGwsMjEsa2MpKSwyJmEmJihDZSgzKSxSZSgibmdNb2RlbCIsZC5keW5hbWljV2hlcmVDbGF1c2UpLENlKDUpLFJlKCJuZ01vZGVsIixkLnVzZVBpY2tlcnMpLENlKDgpLFJlKCJk'@;
put 'aXNhYmxlZCIsKG51bGw9PWQuY2xhdXNlc3x8bnVsbD09ZC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6ZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk8MSkoIm5nTW9kZWwiLGQuZ3JvdXBMb2dpYyksQ2UoMSksUmUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLENlKDQpLFJlKCJuZ0lmIixk'@;
put 'LndoZXJlQ2xhdXNlTG9hZGluZyksQ2UoMyksb3IoZC53aGVyZUNsYXVzZSksQ2UoMyksZHIoImNsci1jb2wtbWQtMTAiLChudWxsPT1kLmNsYXVzZXN8fG51bGw9PWQuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLENlKDEpLFJlKCJuZ0lmIiwo'@;
put 'bnVsbD09ZC5jbGF1c2VzfHxudWxsPT1kLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqKSl9LGRlcGVuZGVuY2llczpbeHMsWmkscmQsbmQsdGgsa2Esb3Usc3UsVXMsRDAsRDgs'@;
put 'VDAsTjgsSDgsbDEsYzEsV2EsUzAsTTAsQnMsT3MseHNlLFU3LEJCZSxqQmVdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtbG9naWNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Zmxl'@;
put 'eDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNlOWU5ZTk7cGFkZGluZzoxNXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7YmFja2dyb3VuZDojZmJmOGY4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVy'@;
put 'LWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTYpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRv'@;
put 'bltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtjb2xvcjpncmF5fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVu'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFy'@;
put 'dH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zZWxlY3QtY29udGFpbmVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUt'@;
put 'Y29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfS5jb250ZW50W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWNoZWNr'@;
put 'Ym94LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1j'@;
put 'b250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUt'@;
put 'ZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xh'@;
put 'dXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3'@;
put 'aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxz'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52'@;
put 'YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29u'@;
put 'dHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5y'@;
put 'YW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1'@;
put 'c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAw'@;
put 'JX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNv'@;
put 'bFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGlt'@;
put 'ZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1j'@;
put 'b2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVy'@;
put 'eVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2Vz'@;
put 'LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRb'@;
put 'X25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12'@;
put 'YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1x'@;
put 'dWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1x'@;
put 'dWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29u'@;
put 'dHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz'@;
put 'ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lk'@;
put 'dGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6YXV0b30uaW52YWxpZC1j'@;
put 'bGF1c2VbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfS5jbGF1c2Utcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7cG9z'@;
put 'aXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUz'@;
put 'QSUyRiUyRnd3dy53My5vcmdcXDIwMjYlMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWdu'@;
put 'Om1pZGRsZTttYXJnaW46MH1bX25nY29udGVudC0lQ09NUCVdOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV0sIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmJmOGY4fXByZVtjbGFz'@;
put 'cyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czoxcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1wcmVb'@;
put 'Y2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEwcHh9cHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNl'@;
put 'OnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFy'@;
put 'Z2luLXRvcDoycHghaW1wb3J0YW50fWlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tv'@;
put 'dXRsaW5lOm5vbmV9LmluLXZhbHVlcy1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jl'@;
put 'c3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOjEwMCU7aGVpZ2h0OjRweDt0b3A6M3B4fSddfSksY30pKCk7Y29uc3Qga2plPVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24gQWplKGMsbCl7MSZjJiZxdCgwLCJjbHIt'@;
put 'aWNvbiIsOSl9ZnVuY3Rpb24gVGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5'@;
put 'ZSgpfX1mdW5jdGlvbiBEamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDQpKDIsImlucHV0Iiw1LDYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9'@;
put 'KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LEFqZSwxLDAsImNsci1pY29uIiw3KSxKZSg1LFRqZSwxLDAsImNsci1pY29uIiw4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxS'@;
put 'ZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIExqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIElqZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwi'@;
put 'dGFibGVzLlRBQkxFTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIFJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDE3LDE4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLHllKCksSmUoNCxMamUsMSwwLCJjbHItaWNvbiIsNyksSmUoNSxJ'@;
put 'amUsMSwwLCJjbHItaWNvbiIsOCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5n'@;
put 'dGg+MCl9fWZ1bmN0aW9uIE9qZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBQamUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gRmplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFj'@;
put 'dCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIEhqZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxKZSgxLEZqZSwyLDAsInNwYW4iLDI1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIs'@;
put 'YSl9fWZ1bmN0aW9uIE5qZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIFZqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDMpLiRpbXBs'@;
put 'aWNpdCxfPVZlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIEJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRp'@;
put 'diIsNCkoMiwiaW5wdXQiLDI5LDE4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZl'@;
put 'KDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpLEplKDQsTmplLDEsMCwiY2xyLWljb24iLDcpLEplKDUsVmplLDEsMCwiY2xyLWljb24iLDgpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgzKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwi'@;
put 'LGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBqamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCkseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89VmUoMykuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbHVtbk9uQ2xpY2soZixULF8pKX0pLHF0KDIsImNsci1pY29uIiwzMSksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1sLiRpbXBsaWNpdCxkPVZlKDYpO0NlKDEpLGRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLENlKDIpLGdyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gemplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxCamUsNiwzLCJjbHItdHJlZS1ub2Rl'@;
put 'IiwwKSxKZSgyLGpqZSw0LDMsImNsci10cmVlLW5vZGUiLDEpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuY29sdW1ucyksQ2UoMSksUmUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIFVqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1W'@;
put 'bigpO21lKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkubmdWYXIsXz1WZSgpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdCxXPVZlKCk7cmV0dXJuIGp0KGY/IiI6Vy50YWJsZU9uQ2xpY2soXy5UQUJMRVVSSSxf'@;
put 'LFQpKX0pLFZyKDIsMjEpLEplKDMsT2plLDEsMCwiY2xyLWljb24iLDIyKSxKZSg0LFBqZSwxLDAsImNsci1pY29uIiwyMyksenIoKSxOZSg1KSx5ZSgpLEplKDYsSGplLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpLEplKDcsemplLDMsMiwibmctY29udGFpbmVyIiwyNSkseWUoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0LGg9VmUoMikuJGltcGxpY2l0LGY9VmUoKTtDZSgxKSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksQ2UoMSksUmUoIm5nU3dpdGNoIixk'@;
put 'LmluY2x1ZGVzKCItRkMiKSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxDZSgxKSxncigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLENlKDIpLFJlKCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBaamUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMikseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlTm9kZUNsaWNrZWQoaCxfLFQudGFibGVzKSl9KSgiY2xyRXhwYW5k'@;
put 'ZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxKZSgxLFVqZSw4LDksImNsci10b29sdGlwIiwxOSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMyk7ZHIoImNsci1leHBhbmRlZCIsYS5l'@;
put 'eHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksQ2UoMSksUmUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBZamUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMiwxMykseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8ubGlicmFyeUxpc3QpKX0pKCJjbHJF'@;
put 'eHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMiwicCIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPSRpKDEpLGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLmxpYj1m'@;
put 'LkxJQlJBUllJRCxqdChfLmxpYnJhcnlPbkNsaWNrKF8ubGlifHwiIixmLGgpKX0pLHF0KDMsImNsci1pY29uIiwxNSksTmUoNCkseWUoKSxKZSg1LFJqZSw2LDMsImNsci10cmVlLW5vZGUiLDApLEplKDYsWmplLDIsNSwiY2xyLXRyZWUtbm9kZSIsMTYpLHllKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSg0KSxncigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixh'@;
put 'LnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gV2plKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxZamUsNyw3LCJjbHItdHJlZS1ub2RlIiwxMSksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEu'@;
put 'aW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gR2plKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9bGV0ICRqZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNl'@;
put 'bmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBlaCx0aGlzLnRhYmxlT25DbGlja0VtaXR0ZXI9bmV3IEVyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5ldyBFcix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9'@;
put 'IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJ'@;
put 'bnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlzdD8uY3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0'@;
put 'ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEduLmxpbmVhZ2UubGli'@;
put 'cmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGY9KCk9'@;
put 'PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xp'@;
put 'YmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IF89c2V0SW50ZXJ2YWwoKCk9PntkLmxvYWRpbmdUYWJs'@;
put 'ZXN8fChmKCksY2xlYXJJbnRlcnZhbChfKSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVlSXRlbXModGhpcy5saWJyYXJ5TGlzdCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2YuaGVscGVyU2VydmljZS5kZWJv'@;
put 'dW5jZUNhbGwoNTAsKCk9PntmLmhhc0NvbHVtbnM/KGQuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwhMD09PWQuZXhwYW5kZWQmJihmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRl'@;
put 'ZDohMH0pKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKGgu'@;
put 'dGFibGVzLGQpKTpmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiExfSl9KX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMu'@;
put 'Y29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhp'@;
put 'cy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFy'@;
put 'aWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0'@;
put 'O2QmJmQuc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxpYnJhcmllcygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYyksdHQoQzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6Yyxz'@;
put 'ZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKGtqZSw1KSwyJmEpe2xldCBoO2FpKGg9bGkoKSkmJihkLnNlYXJjaExpYklucHV0TGlzdD1oKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInNjcm9sbCIsZnVuY3Rp'@;
put 'b24oZil7cmV0dXJuIGQuaGFuZGxlU2Nyb2xsKGYpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFzQ29sdW1ucyIscGFnaW5nOiJwYWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlzdCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJh'@;
put 'cnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sZmVhdHVyZXM6W3ZhXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1siY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQs'@;
put 'Im5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJd'@;
put 'LFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRp'@;
put 'bmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbImxpYlRyZWVOb2RlIiwiIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJj'@;
put 'bGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJu'@;
put 'YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsz'@;
put 'LCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJv'@;
put 'bHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxD'@;
put 'aGFuZ2UiLCJrZXl1cCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLXRy'@;
put 'ZWUiKSxKZSgxLERqZSw2LDMsImNsci10cmVlLW5vZGUiLDApLEplKDIsV2plLDIsMSwibmctY29udGFpbmVyIiwxKSx5ZSgpLEplKDMsR2plLDMsMCwiZGl2IiwyKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcnlMaXN0'@;
put 'KSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxuZCx0aCxkZCxnMSxEcCxrYSxadSxjMixmMSxqYixVYix6YixXYSxCcyxPcyxVN10sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29u'@;
put 'dGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1jbHItdHJlZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJl'@;
put 'ZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX0iXX0pLGN9KSgpO2NvbnN0IHFqZT1bInJlc2l6ZUJveCJdLEtqZT1bImRyYWdIYW5kbGVDb3JuZXIiXTtmdW5jdGlvbiBYamUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwzMiksTmUoMSkseWUoKSks'@;
put 'MiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksemMoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBw'@;
put 'b3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEpqZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMzMpLHF0KDEsImNsci1zcGlubmVyIiwzNCkseWUoKSl9ZnVuY3Rpb24gUWplKGMsbCl7MSZjJiYobWUoMCwicCIsMzUpLE5lKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAi'@;
put 'KSx5ZSgpKX1mdW5jdGlvbiBlemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkYy10cmVlIiwzNikseHQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0'@;
put 'ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnRhYmxlT25DbGljayhoKSl9KSx5ZSgpfTImYyYmUmUoImxpYnJhcnlMaXN0IixWZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gdHplKGMsbCl7MSZjJiYobWUoMCwicCIsMzcpLE5lKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxp'@;
put 'c3Qgb24gdGhlIGxlZnQgIikseWUoKSl9ZnVuY3Rpb24gbnplKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsNDUpfWZ1bmN0aW9uIHJ6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4k'@;
put 'aW1wbGljaXQsXz1WZSgpO3JldHVybiBfLm1pbmltaXplKGYpLGp0KF8uc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0KDEsImNsci1pY29uIiwxNSksbWUoMiwic3BhbiIsMTQpLE5lKDMsIk1pbmltaXplIHZpZXdib3giKSx5ZSgpKCl9fWZ1bmN0aW9uIGl6ZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLnJlc3RvcmUoZiksanQoXy5zdG9wUHJvcGFnYXRpb24oaCkpfSkscXQoMSwiY2xyLWljb24iLDE2KSxtZSgyLCJzcGFuIiwxNCksTmUo'@;
put 'MywiUmVzdG9yZSB2aWV3Ym94IikseWUoKSgpfX1mdW5jdGlvbiBvemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuc2VsZWN0Vmlld2JveChmKSl9KSxt'@;
put 'ZSgxLCJkaXYiLDM5KSxOZSgyKSxKZSgzLG56ZSwxLDAsImNsci1zcGlubmVyIiw0MCkseWUoKSxtZSg0LCJkaXYiKSg1LCJhIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKCk7cmV0dXJuIFQucmVzZXRQb3NTaXplKF8pLGp0KFQuc3Rv'@;
put 'cFByb3BhZ2F0aW9uKGgpKX0pLHF0KDYsImNsci1pY29uIiw0MiksbWUoNywic3BhbiIsMTQpLE5lKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIikseWUoKSgpLEplKDkscnplLDQsMCwiYSIsNDMpLEplKDEwLGl6ZSw0LDAsImEiLDQzKSxtZSgxMSwiYSIsMTIpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBULmNsb3NlKF8pLGp0KFQuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0KDEyLCJjbHItaWNvbiIsNDQpLG1lKDEzLCJzcGFuIiwxNCksTmUoMTQsIkNsb3NlIHZpZXdib3giKSx5ZSgpKCkoKSgpfWlmKDImYyl7'@;
put 'Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxDZSgyKSxiMCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLENlKDEpLFJlKCJuZ0lm'@;
put 'IixhLmxvYWRpbmdEYXRhKSxDZSgyKSxkcigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkpLENlKDQpLFJlKCJuZ0lmIiwhYS5taW5pbWl6ZWQpLENlKDEpLFJlKCJuZ0lmIixhLm1pbmltaXplZCl9fWZ1bmN0aW9uIHN6ZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIpLE5lKDEpLHll'@;
put 'KCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBhemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDQ4KSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw0OSw1MCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbiho'@;
put 'KXtCdChhKTtjb25zdCBmPSRpKDMpLF89VmUoKS5uZ1ZhcjtyZXR1cm4ganQoVmUoKS5vbkNvbHNlYXJjaENoYW5nZShmLGgsXy5jb2xIZWFkZXJzSGlkZGVuKSl9KSxKZSg0LHN6ZSwyLDEsIm9wdGlvbiIsNTEpLHllKCkoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDIp'@;
put 'LFJlKCJpbnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gbHplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTcpfWZ1bmN0aW9uIGN6ZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLm9uQ29sUmVtb3ZlKGgpKX0pLHllKCl9fWZ1bmN0aW9uIHV6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRp'@;
put 'diIsNTQpKDEsInNwYW4iKSxOZSgyKSxKZSgzLGx6ZSwxLDAsImNsci1pY29uIiw1NSkseWUoKSxKZSg0LGN6ZSwxLDAsImNsci1pY29uIiw1NikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikubmdWYXIsaD1WZSgpO0ZNKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLGRy'@;
put 'KCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLFJlKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLENlKDIpLHpj'@;
put 'KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoi'@;
put 'IiwiICIpLENlKDEpLFJlKCJuZ0lmIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksQ2UoMSksUmUoIm5nSWYiLCFkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSl9fWZ1bmN0aW9uIGR6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsInAiLDUpLE5lKDIsIkNvbHVtbnMgVG8g'@;
put 'RGlzcGxheSAoZHJhZyBhbmQgcmUtb3JkZXIpIikseWUoKSxtZSgzLCJkaXYiLDUyKSx4dCgiY2RrRHJvcExpc3REcm9wcGVkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY29sdW1uc0Ryb3AoaCkpfSksSmUoNCx1emUsNSwxMywiZGl2Iiw1MykseWUoKSx6cigpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDMpLFJlKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVhZGVyc1Zpc2libGUpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gaHplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NiksSmUoMSxhemUsNSwz'@;
put 'LCJuZy1jb250YWluZXIiLDQ3KSxKZSgyLGR6ZSw1LDIsIm5nLWNvbnRhaW5lciIsNDcpLHllKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLENlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gZnpl'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDg1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2xsYXBzZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBwemUoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsODYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmV4cGFuZChoKSl9KSx5ZSgpfX1mdW5jdGlvbiBnemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNv'@;
put 'biIsODcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9JGkoMTYpO3JldHVybiBqdChWZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSkseWUoKX19ZnVuY3Rpb24gbXplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsODgpLE5lKDEsIiBMb2FkaW5nLi4u'@;
put 'ICIpLHllKCkpfWZ1bmN0aW9uIHZ6ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDg5KSxOZSgxLCJMb2FkaW5nLi4uIikseWUoKSl9ZnVuY3Rpb24gX3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDkwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29u'@;
put 'c3QgaD1WZSgpLiRpbXBsaWNpdCxmPSRpKDE2KTtyZXR1cm4gVmUoKS5yZWxvYWRUYWJsZURhdGEoaCksanQoZi52YWx1ZT0iIil9KSx5ZSgpfX1mdW5jdGlvbiBiemUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDk0KSxxdCgxLCJjbHItc3Bpbm5lciIsMzQpLHllKCkpfWZ1bmN0aW9uIHl6ZShj'@;
put 'LGwpe2lmKDEmYyYmcXQoMCwiaG90LXRhYmxlIiw5NSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLiRpbXBsaWNpdCxoPVZlKCk7UmUoImhvdElkIiwiaG90SW5zdGFuY2Vfdmlld2JveF8iK2QuaWQpKCJyZWFkT25seSIsITApKCJtb2RpZnlDb2xXaWR0aCIsaC5tYXhXaWR0aENo'@;
put 'ZWtlcikoImNvcHlQYXN0ZSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29udGV4dE1lbnUpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQi'@;
put 'LDUwKSgiZGF0YSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2x1bW5zKSgiZmlsdGVycyIsITApKCJkcm9w'@;
put 'ZG93bk1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5oZWlnaHQpKCJjZWxscyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsaC52aWV3Ym94VGFibGVz'@;
put 'W2FdLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgibGljZW5zZUtleSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiB3emUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDkxKSxKZSgxLGJ6ZSwyLDAsImRpdiIsOTIp'@;
put 'LEplKDIseXplLDEsMTcsImhvdC10YWJsZSIsOTMpLHllKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9VmUoKS4kaW1wbGljaXQ7SHUoImRpc3BsYXkiLGQuY29sbGFwc2VkPyJub25lIjoiIiksQ2UoMSksUmUoIm5nSWYiLGQubG9hZGluZ0RhdGEmJmE8MCksQ2UoMSksUmUoIm5nSWYiLGE+'@;
put 'LTEpfX1jb25zdCBDemU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57eDpjLHk6bH19O2Z1bmN0aW9uIFN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTksNjApLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZl'@;
put 'KCkuZm9jdXNWaWV3Ym94KGYpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxfKSl9KSxtZSgyLCJkaXYiLDYxKSgzLCJzcGFuIiw2MiksTmUoNCkseWUoKSxtZSg1LCJkaXYiLDYz'@;
put 'KSxKZSg2LGZ6ZSwxLDAsImNsci1pY29uIiw2NCksSmUoNyxwemUsMSwwLCJjbHItaWNvbiIsNjUpLG1lKDgsImNsci1pY29uIiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLm1pbmltaXplKGYpKX0pLHllKCksbWUoOSwi'@;
put 'Y2xyLWljb24iLDY3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuY2xvc2UoZikpfSkseWUoKSgpKCksbWUoMTAsInNwYW4iLDY4LDY5KSx4dCgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBs'@;
put 'aWNpdCxUPSRpKDExKSxXPSRpKDEpO3JldHVybiBqdChWZSgpLmRyYWdNb3ZlKFQsVyxfLGgpKX0pLHllKCksbWUoMTIsImZvcm0iLDcwKSgxMywiZGl2Iiw3MSkoMTQsImRpdiIsNzIpKDE1LCJpbnB1dCIsNzMsNzQpLHh0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEp'@;
put 'LiRpbXBsaWNpdCxfPSRpKDE2KTtyZXR1cm4ganQoVmUoKS5zZWFyY2hUYWJsZShfLGYpKX0pLHllKCksSmUoMTcsZ3plLDEsMCwiY2xyLWljb24iLDc1KSxKZSgxOCxtemUsMiwwLCJzcGFuIiw3NikseWUoKSxtZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2ti'@;
put 'b3gtd3JhcHBlciIpKDIxLCJpbnB1dCIsNzcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LnNlYXJjaE51bWVyaWM9aCl9KSx5ZSgpLG1lKDIyLCJsYWJlbCIpLE5lKDIzLCJOdW1lcmljIikseWUoKSgpKCkoKSxtZSgyNCwiZGl2Iiwz'@;
put 'OSksSmUoMjUsdnplLDIsMCwic3BhbiIsNzgpLEplKDI2LF96ZSwxLDAsImNsci1pY29uIiw3OSksbWUoMjcsImEiLDgwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz0kaSgxNik7cmV0dXJuIFZlKCkub3BlbkZpbHRlcihmKSxqdChfLnZhbHVlPSIi'@;
put 'KX0pLHF0KDI4LCJjbHItaWNvbiIsODEpLG1lKDI5LCJzcGFuIiw4MiksTmUoMzApLHllKCkoKSxtZSgzMSwiY2xyLWljb24iLDgzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkub3BlblRhYmxlRWRpdChmKSl9KSx5ZSgpKCko'@;
put 'KSxKZSgzMix3emUsMyw0LCJkaXYiLDg0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7SHUoImRpc3BsYXkiLGEubWluaW1pemVkPyJub25lIjoiIikoIndpZHRoIixhLndpZHRoLCJweCIpKCJoZWlnaHQiLGEuaGVpZ2h0LCJweCIpKCJwb2ludGVyLWV2ZW50cyIs'@;
put 'YS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSgiYm94LXNoYWRvdyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxkcigiZm9jdXNlZCIsYS5mb2N1c2VkKSxSZSgiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLFEyKDM0LEN6ZSxhLngsYS55KSkoImlkIiwidmlld2JveF8iK2EuaWQpLENlKDQpLGIwKCIg'@;
put 'IyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksQ2UoMiksUmUoIm5nSWYiLCFhLmNvbGxhcHNlZCksQ2UoMSksUmUoIm5nSWYiLGEuY29sbGFwc2VkKSxDZSgzKSxSZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLENlKDIpLEh1KCJkaXNwbGF5IixhLmNvbGxhcHNl'@;
put 'ZD8ibm9uZSI6IiIpLENlKDMpLFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxDZSgyKSxSZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksQ2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyks'@;
put 'Q2UoNCksUmUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nRGF0YSksQ2UoMiksZHIoImZpbHRlci1hY3RpdmUiLCIwIiE9PWEuZmlsdGVyX3BrKSxDZSgyKSxvcihhLmZpbHRlclRleHQpLENlKDEpLGRyKCJkaXNhYmxlZCIsIWQudGFibGVFZGl0RXhp'@;
put 'c3RzKGEpKSxDZSgxKSxSZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiBNemUoYyxsKXtpZigxJmMmJnF0KDAsImFwcC1xdWVyeSIsOTYsOTcpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJ2aWV3Ym94SWQiLG51bGw9PWEuZmlsdGVyaW5nVmlld2JveD9udWxs'@;
put 'OmEuZmlsdGVyaW5nVmlld2JveC5pZCl9fWNvbnN0IHh6ZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJue2NvbEhlYWRlcnNIaWRkZW46Yyxjb2xIZWFkZXJzVmlzaWJsZTpsLGhlYWRlclBrczphfX07bGV0IEVzZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5f'@;
put 'dmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1p'@;
put 'dCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUscGUsd2Upe3RoaXMubmdab25lPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNl'@;
put 'PWYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Xyx0aGlzLmxvZ2dlclNlcnZpY2U9VCx0aGlzLmhlbHBlclNlcnZpY2U9Vyx0aGlzLnJvdXRlcj1pZSx0aGlzLmFjdGl2YXRlZFJvdXRlPXBlLHRoaXMuY2RmPXdlLHRoaXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1u'@;
put 'ZXcgRXIsdGhpcy5saWJpbmZvPW51bGwsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtdLHRoaXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNq'@;
put 'c0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5ob3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtzOltdLCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0'@;
put 'TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxjb2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OiIxMDAlIixzZXR0aW5nczp7fSxo'@;
put 'aWRkZW5Db2x1bW5zOiEwLG1hbnVhbENvbHVtbk1vdmU6ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5u'@;
put 'dWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0'@;
put 'ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2LHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBBZ31uZ09uSW5pdCgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57dGhpcy5saWJyYXJpZXM9ZC5zYXNsaWJzfSkuY2F0Y2goZD0+e3RoaXMubG9nZ2VyU2VydmljZS5l'@;
put 'cnJvcihkKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITF9KSx0aGlzLl9xdWVyeT10aGlzLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e3RoaXMuY2xhdXNlcz1kLm9iaix0aGlzLmZpbHRlckxpYmRzPWQubGliZHN9KSx0aGlzLnNhc2pzQ29uZmln'@;
put 'PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShkPT57dGhpcy5ob3RUYWJsZURlZmF1bHQubGljZW5zZUtleT1kfSk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFy'@;
put 'YW1zLnZpZXdib3hlczthJiYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyhzZXRUaW1lb3V0KCgpPT50aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkxpbmtpbmcgVmlld2JveGVzIikpLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRv'@;
put 'OnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6e319KSk6KHRoaXMudmlld2JveGVzPXRoaXMuZGVjb2RlVXJsRGF0YShhKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pKSksdGhpcy5yZUxvYWRWaWV3Ym94dGFibGVzKHRoaXMudmlld2JveGVz'@;
put 'KX1uZ0FmdGVyVmlld0luaXQoKXt9Z2V0IHZpZXdib3hMaW1pdFJlYWNoZWQoKXtyZXR1cm4gdGhpcy52aWV3Ym94ZXMubGVuZ3RoPj10aGlzLm1heFZpZXdib3hlc31jbHJNb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdChhKX1saWJyYXJ5T25DbGljayhh'@;
put 'KXthLnRhYmxlc0xvYWRlZHx8dGhpcy5sb2FkVGFibGVzKGEubGlicmFyeS5MSUJSQVJZUkVGLGEubGlicmFyeSl9dGFibGVPbkNsaWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZh'@;
put 'dWx0Q29uZmlnLHRhYmxlOmEubGliVGFibGUsbGlicmFyeTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0RhdGE6ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3'@;
put 'Ym94ZXMucHVzaChoKSxzZXRUaW1lb3V0KCgpPT57ZC5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9YCR7YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3Bh'@;
put 'dGNoRXZlbnQoInJlc2l6ZSIpLGQuc25hcFRvR3JpZCgpfSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgu'@;
put 'bGliaW5mb3x8W10sdGhpcy50YWJsZXM9ZixkJiYoZC50YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQubG9hZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEo'@;
put 'YSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9PntsZXQgVD1oLnZpZXdib3hUYWJsZXMuZmluZChXPT5XLnZpZXdib3hJZD09PWQuaWQpO2guc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8'@;
put 'fCIwIikpLnRoZW4oVz0+e1QmJihULmhvdFRhYmxlLmRhdGE9Vy52aWV3ZGF0YSksZihudWxsKX0pLmNhdGNoKCgpPT57XygpfSl9KX0pKCl9bG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9PntsZXQgVD0hMSxX'@;
put 'PWgudmlld2JveFRhYmxlcy5maW5kKGllPT5pZS52aWV3Ym94SWQ9PT1kLmlkKTtXJiYoIjAiPT09ZC5maWx0ZXJfcGt8fCFkLmZpbHRlcl9waykmJmYoKSxoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKGllPT57Vz9UPSEwOlc9'@;
put 'e3ZpZXdib3hJZDpkLmlkLHZpZXdib3hMaWJEYXRhc2V0OmEsaG90VGFibGU6engoaC5ob3RUYWJsZURlZmF1bHQpfSxXLmhvdFRhYmxlLmRhdGE9aWUudmlld2RhdGEsVy5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9aWUuJHZpZXdkYXRhLFcuaG90VGFibGUuY29scz1pZS5jb2xzLFV6KFcuaG90'@;
put 'VGFibGUuY29scyxbXSxpZS4kdmlld2RhdGEpO2xldCBwZT1bXSx3ZT1bXTtmb3IobGV0IEVlIGluIGllLnZpZXdkYXRhWzBdKUVlJiZ3ZS5wdXNoKEVlKTtmb3IobGV0IEVlPTA7RWU8d2UubGVuZ3RoO0VlKyspcGUucHVzaCh7ZGF0YTp3ZVtFZV19KTtXLmhvdFRhYmxlLmhlYWRlclBrcz16'@;
put 'eChpZS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIikpLFcuaG90VGFibGUuYWxsQ29sSGVhZGVycz13ZS5maWx0ZXIoRWU9PiFXLmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhFZSkpLFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbj16eChXLmhvdFRhYmxlLmFsbENvbEhl'@;
put 'YWRlcnMpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9d2UuZmlsdGVyKEVlPT5XLmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhFZSkpLFcuaG90VGFibGUuY29sSGVhZGVycz13ZSxXLmhvdFRhYmxlLmNvbHVtbnM9cGUsZC5jb2x1bW5zJiZkLmNvbHVtbnMubGVuZ3RoPjA/KFcu'@;
put 'aG90VGFibGUubWFudWFsQ29sdW1uTW92ZT1kLmNvbHVtbnMsZC5jb2x1bW5zPy5tYXAoKEVlLFplKT0+e2NvbnN0IGl0PXdlW0VlXSxldD1XLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uaW5kZXhPZihpdCk7ZXQ+LTEmJihXLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKGV0'@;
put 'LDEpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGVbWmVdPWl0KX0pKTpXLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goLi4uVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZSgwLDEwKSksVy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1XLmhvdFRhYmxlLmNv'@;
put 'bEhlYWRlcnNWaXNpYmxlLmZpbHRlcihFZT0+RWUpLFR8fGgudmlld2JveFRhYmxlcy5wdXNoKFcpLGQucXVlcnk9aC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZS5xdWVyeSksZC5maWx0ZXJUZXh0PWllLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRh'@;
put 'dGVIb3RDb2x1bW5zKFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgRWU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7RWU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOlcuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENv'@;
put 'bEhlYWRlcjooWmUsaXQpPT57Y29uc3QgZXQ9RWU/LmNvbFRvUHJvcChaZSk7ZXQmJlcuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4T2YoZXQpPi0xJiZpdC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSxFZT8ucmVuZGVyKCksaC5zZWxlY3RlZFZpZXdib3gmJmgu'@;
put 'cmVzZXRTZWxlY3RlZFZpZXdib3goZCl9KSxmKCl9KS5jYXRjaChpZT0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihpZSksXygpfSl9KX0pKCl9cmVMb2FkVmlld2JveHRhYmxlcyhhKXthLm1hcChkPT57Y29uc3QgaD1gJHtkLmxpYnJhcnl9LiR7ZC50YWJsZX1gO2QubG9hZGluZ0RhdGE9ITAs'@;
put 'dGhpcy5sb2FkRGF0YShoLGQpLnRoZW4oKCk9PntkLmxvYWRpbmdEYXRhPSExfSl9KX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRWaWV3Ym94VGFibGVJbmRleChhKXtyZXR1cm4gdGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChoPT5oLnZpZXdib3hJZD09'@;
put 'PWEuaWQpfXJlc2l6ZShhLGQpe2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXz1oLmxlZnQtZi5sZWZ0K2gud2lkdGgsVD1oLnRvcC1mLnRvcCtoLmhlaWdodDtyZXR1cm4gZC5zdHlsZS53aWR0aD1fKyJweCIsZC5zdHlsZS5o'@;
put 'ZWlnaHQ9VCsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx7d2lkdGg6XyxoZWlnaHQ6'@;
put 'VH19ZHJhZ01vdmUoYSxkLGgsZil7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBfPXRoaXMucmVzaXplKGEsZCk7aC53aWR0aD1fLndpZHRoLGguaGVpZ2h0PV8uaGVpZ2h0fSl9c2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl7dGhpcy5yZXNpemVCb3hRdWVyeS5mb3JF'@;
put 'YWNoKGE9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWBoYW5kbGVfJHthLm5hdGl2ZUVsZW1lbnQuaWR9YCxmPXRoaXMuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5LmZpbmQoKF8sVCk9Pl8ubmF0aXZlRWxlbWVudC5pZD09PWgpO3RoaXMuc2V0SGFu'@;
put 'ZGxlVHJhbnNmb3JtKGY/Lm5hdGl2ZUVsZW1lbnQsZCwiYm90aCIpfSl9c2V0SGFuZGxlVHJhbnNmb3JtKGEsZCxoKXtjb25zdCBmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IF89ZC53aWR0aC1mLndpZHRoLFQ9ZC5oZWlnaHQtZi5oZWlnaHQ7Xys9NSxUKz01LCJ4Ij09PWgmJihh'@;
put 'LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7X31weCwgMClgKSwieSI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgwLCAke1R9cHgpYCksImJvdGgiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHtffXB4LCAke1R9cHgpYCl9Zm9jdXNWaWV3Ym94'@;
put 'KGEpe3RoaXMudmlld2JveGVzLm1hcChkPT57ZC5mb2N1c2VkPSExfSksYS5mb2N1c2VkPSEwfXZpZXdib3hEcmFnRW5kZWQoYSxkKXtsZXQgZj1hLnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QueD1mLmxlZnQsZC55PWYudG9wLHRoaXMudmlld2Jv'@;
put 'eENoYW5nZWQoKX1zbmFwVG9HcmlkKCl7Y29uc3QgYT13aW5kb3cuaW5uZXJXaWR0aCxkPXdpbmRvdy5pbm5lckhlaWdodCxUPU1hdGguY2VpbCh0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksVz1NYXRoLmZsb29yKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSx3ZT0oYS01KihUKzEpKS9ULEVl'@;
put 'PShhLTUqKFcrMSkpL1c7bGV0IGl0PTAseXQ9KGQtMjUwLTYwKS8yLEV0PTAsU3Q9MDtmb3IobGV0IEp0PTA7SnQ8dGhpcy52aWV3Ym94ZXMubGVuZ3RoO0p0Kyspe2xldCBubj10aGlzLnZpZXdib3hlc1tKdF0sdm49IShKdD5ULTEpO2NvbnN0IE5uPXZuP3dlOkVlOyF2biYmMD09PVN0JiYo'@;
put 'RXQ9MCxTdCsrLGl0PTApLG5uLng9NStpdCtFdCooTm4rNSksbm4ueT0yNTArU3QqKHl0KzUpLG5uLndpZHRoPU5uLG5uLmhlaWdodD15dCxFdCsrfXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pfW1pbmltaXplQWxs'@;
put 'KCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0UG9zU2l6ZShhKXth'@;
put 'Lng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEueT10aGlzLmRlZmF1bHRDb25maWcueSxhLndpZHRoPXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLmhlaWdodD10aGlzLmRlZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENoYW5nZWQoKX1taW5p'@;
put 'bWl6ZShhKXthLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShhKXthLm1pbmltaXplZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y29sbGFwc2UoYSl7YS5jb2xsYXBzZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChhKXthLmNvbGxhcHNlZD0h'@;
put 'MSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y2xvc2UoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgoZj0+Zi5pZD09PWEuaWQpLGg9dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChmPT5mLnZpZXdib3hJZD09PWEuaWQpO2Q+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShk'@;
put 'LDEpLGg+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoaCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ9PT1hLmlkJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCksR24udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUE8pLHRoaXMudmlld2Jv'@;
put 'eENoYW5nZWQoKX1zZWxlY3RWaWV3Ym94KGEpe3ZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJnZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94P3RoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goYSk6YS5pZD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD90aGlzLnVuc2V0'@;
put 'U2VsZWN0ZWRWaWV3Ym94KCk6dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKX1jb2x1bW5zRHJvcChhKXt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuJiYoYS5wcmV2aW91c0NvbnRhaW5lcj09PWEuY29udGFpbmVyP3VzZShhLmNvbnRhaW5l'@;
put 'ci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCk6ZnVuY3Rpb24gbUJlKGMsbCxhLGQpe2NvbnN0IGg9YXcoYSxjLmxlbmd0aC0xKSxmPWF3KGQsbC5sZW5ndGgpO2MubGVuZ3RoJiZsLnNwbGljZShmLDAsYy5zcGxpY2UoaCwxKVswXSl9KGEucHJldmlvdXNDb250YWluZXIu'@;
put 'ZGF0YSxhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZSYmIm9iamVjdCI9PXR5cGVvZiB0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnMpJiZ0aGlzLnVwZGF0'@;
put 'ZUNvbHVtbk9yZGVySG90KGEuaXRlbS5kYXRhLGEuY3VycmVudEluZGV4LHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX1vbkNvbHNlYXJjaENoYW5nZShhLGQsaCl7Y29uc3QgZj1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZiwxKSxhLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWRW'@;
put 'aWV3Ym94VGFibGU/LmhvdFRhYmxlJiYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKGQpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMu'@;
put 'c2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGQsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgtMSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkpfW9uQ29s'@;
put 'UmVtb3ZlKGEpe2lmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlKXtjb25zdCBkPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuaW5kZXhPZihhKTt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRl'@;
put 'cnNWaXNpYmxlLnNwbGljZShkLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5wdXNoKGEpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2Vs'@;
put 'ZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfX1yZXNldFNlbGVj'@;
put 'dGVkVmlld2JveChhKXt0aGlzLnNlbGVjdGVkVmlld2JveD1hLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoZD0+ZC52aWV3Ym94SWQ9PT1hLmlkKX11bnNldFNlbGVjdGVkVmlld2JveCgpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PXZvaWQgMCx0aGlz'@;
put 'LnNlbGVjdGVkVmlld2JveFRhYmxlPXZvaWQgMH1zdG9wUHJvcGFnYXRpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX1vcGVuRmlsdGVyKGEpe3RoaXMuc2VsZWN0Vmlld2JveChhKTtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlc1t0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGEpXTt0aGlz'@;
put 'LmZpbHRlckxpYmRzPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWAsdGhpcy5maWx0ZXJpbmdWaWV3Ym94PWEsdGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMuZmlsdGVyTGliZHMsZC5ob3RU'@;
put 'YWJsZS5jb2xzKX1vcGVuVGFibGVFZGl0KGEpe2NvbnN0IGQ9YS5saWJyYXJ5KyIuIithLnRhYmxlO2xldCBoPWxvY2F0aW9uLmhyZWYuc2xpY2UoMCxsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKSk7aD1gJHtofSMvZWRpdG9yLyR7ZH1gLHdpbmRvdy5vcGVuKGgsIl9ibGFuayIpfXJlc2V0'@;
put 'RmlsdGVyKCl7dGhpcy5maWx0ZXJpbmdWaWV3Ym94JiYodGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz0iMCIsdGhpcy5yZWxvYWRUYWJsZURhdGEodGhpcy5maWx0ZXJpbmdWaWV3Ym94KSx0aGlzLmZpbHRlcj0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksR24udmlld2JveGVzW3Ro'@;
put 'aXMuZmlsdGVyaW5nVmlld2JveC5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQTykpfXNlbmRDbGF1c2UoKXt0aGlzLmZpbHRlckxvYWRpbmc9ITA7bGV0IGE9W10sZD1bXTtpZih0eXBlb2YgdGhpcy5jbGF1c2VzPiJ1IilyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZv'@;
put 'aWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXtjb25zdCBfPWhbZl0uZWxlbWVudHM7YT1fLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4gbnVsbD09PVQudmFyaWFibGV9KSxhLmxlbmd0aCYm'@;
put 'ZC5wdXNoKF8pfX1pZihkLmxlbmd0aClyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09dGhpcy5jbGF1c2VzJiZ0aGlzLmZpbHRlckxpYmRzKXtjb25zdCBoPXtncm91cExvZ2ljOnRoaXMuY2xhdXNlcy5ncm91'@;
put 'cExvZ2ljLGZpbHRlckdyb3VwczpbXX07dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goXz0+e2NvbnN0IFQ9e2ZpbHRlckNsYXVzZXM6W119O18uZWxlbWVudHMuZm9yRWFjaChXPT57VC5maWx0ZXJDbGF1c2VzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KSxU'@;
put 'LmNsYXVzZUxvZ2ljPV8uY2xhdXNlTG9naWMsaC5maWx0ZXJHcm91cHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFQpKX0pO2NvbnN0IGY9dGhpcy5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShoKTt0aGlzLnNhc1N0b3JlU2VydmljZS5zYXZlUXVl'@;
put 'cnkodGhpcy5maWx0ZXJMaWJkcyxmKS50aGVuKF89Pnt0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPV8ucmVzdWx0WzBdLkZJTFRFUl9SSyx0aGlzLmxvYWREYXRhKHRoaXMuZmlsdGVyTGliZHMsdGhpcy5maWx0ZXJpbmdWaWV3Ym94KS50aGVuKCgpPT57dGhpcy5maWx0ZXI9ITEs'@;
put 'dGhpcy5maWx0ZXJMb2FkaW5nPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfSkuY2F0Y2goXz0+e3RoaXMuZmlsdGVyTG9hZGluZz0hMX0pfX1jYXRjaHt0aGlzLmZpbHRlckxvYWRpbmc9ITF9fXNlYXJjaFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5z'@;
put 'ZWFyY2hMb2FkaW5nPSEwO2xldCBmPWEudmFsdWUsXz1kLmxpYnJhcnkrIi4iK2QudGFibGUsVD1wYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKTtjb25zdCBXPWgudmlld2JveFRhYmxlcy5maW5kKGllPT5pZS52aWV3Ym94SWQ9PT1kLmlkKTtXJiYoeWllbGQgaC5zYXNTdG9yZVNlcnZpY2Uu'@;
put 'dmlld0RhdGFTZWFyY2goZixkLnNlYXJjaE51bWVyaWMsXyxUKS50aGVuKGllPT57aWUuc2FzcGFyYW1zfHxpZS52aWV3RGF0YT9XLmhvdFRhYmxlLmRhdGE9aWUudmlld2RhdGE6ZC5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0Y2goaWU9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpfSksZC5z'@;
put 'ZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEs'@;
put 'ZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0'@;
put 'Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IF89Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKF8sZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Hbi5l'@;
put 'ZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIo'@;
put 'YSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5z'@;
put 'ZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCBfPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsVD1bXTtyZXR1cm4gaC5tYXAoKFcsaWUpPT57aWYoaWU8Xyl7'@;
put 'Y29uc3QgcGU9Zi5pbmRleE9mKFcpO3BlPi0xJiZULnB1c2gocGUpfX0pLFR9dXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpe2NvbnN0IGg9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZCk7aWYoaCl7Y29uc3QgZj1hLm1hcChfPT5oLnByb3BUb0NvbChfKSk7aC51cGRhdGVTZXR0aW5n'@;
put 'cyh7aGlkZGVuQ29sdW1uczp7Y29sdW1uczpmfX0pLGgucmVuZGVyKCl9fWdldFZpZXdib3hIb3RJbnN0YW5jZShhKXtyZXR1cm4gYT90aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZShgaG90SW5zdGFuY2Vfdmlld2JveF8ke2F9YCk6dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7'@;
put 'bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2aWV3Ym94ZXM6ZH0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZp'@;
put 'bHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEduLnZpZXdib3hlc1thLmlkXXx8KEduLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFBPKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7'@;
put 'Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5mLnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hlcy4ke2EuaWR9YDtHbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksR24udmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2Eu'@;
put 'dGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRhYmxlLmNvbHMpfX1lbmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxmKT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53'@;
put 'aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2guY29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8xOjB9LSR7aC5maWx0ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8iLSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYm'@;
put 'KGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAoXz0+e2NvbnN0IFQ9Xy5zcGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoVFswXSksbGlicmFyeTpUWzFdLHRhYmxlOlRbMl0sd2lkdGg6cGFyc2VJbnQoVFszXSksaGVpZ2h0'@;
put 'OnBhcnNlSW50KFRbNF0pLHg6cGFyc2VJbnQoVFs1XSkseTpwYXJzZUludChUWzZdKSxjb2xsYXBzZWQ6ISFwYXJzZUludChUWzddKSxtaW5pbWl6ZWQ6ISFwYXJzZUludChUWzhdKSxjb2x1bW5zOlRbMTBdPy5zcGxpdCgiLCIpLm1hcChXPT5wYXJzZUludChXKSl8fFtdLGZpbHRlcl9wazpU'@;
put 'WzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5vKSx0dChDMCksdHQob2EpLHR0KHZsKSx0dChiZCksdHQodzApLHR0KFRjKSx0dChEcyksdHQoR2wpLHR0'@;
put 'KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3Ym94ZXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8ocWplLDUpLFJvKEtqZSw1KSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5yZXNpemVCb3hRdWVyeT1oKSxhaShoPWxp'@;
put 'KCkpJiYoZC5kcmFnSGFuZGxlQ29ybmVyUXVlcnk9aCl9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1vZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxkZWNsczo1Nix2YXJzOjIzLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIi'@;
put 'LDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsx'@;
put 'LCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwibXQtMC1pIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQt'@;
put 'bm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0'@;
put 'b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFwZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWlu'@;
put 'dXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGln'@;
put 'bi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRp'@;
put 'b24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2Jv'@;
put 'eCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9u'@;
put 'IiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiLCJj'@;
put 'ZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmlld2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIs'@;
put 'ImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJsaWNlbmNlLW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJs'@;
put 'aWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMt'@;
put 'Y2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0'@;
put 'b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywi'@;
put 'Y2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJtbC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQi'@;
put 'LCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5zIiwidGFiaW5kZXgiLCIwIiwzLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlQ2hhbmdlIl0sWyJpbnB1dCIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb'@;
put 'ImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xzLWxpc3QiLDMsImNka0Ryb3BMaXN0RGF0YSIsImNka0Ryb3BMaXN0RHJvcHBlZCJdLFsiY2RrRHJhZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJpbWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlz'@;
put 'YWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJhZyIsIiIsMywiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRyYXNoIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwia2V5Il0sWyJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywiY2RrRHJhZ0ZyZWVEcmFnUG9z'@;
put 'aXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCJdLFsicmVzaXplQm94IiwiIl0sWyJjZGtEcmFnSGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFi'@;
put 'bGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxb'@;
put 'ImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImlkIiwiY2RrRHJhZ01vdmVkIl0sWyJkcmFnSGFuZGxlQ29ybmVyIiwiIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHIt'@;
put 'ZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIs'@;
put 'MywidHlwZSIsImtleXVwLmVudGVyIl0sWyJzZWFyY2hFbCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIs'@;
put 'Im51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1zbSIsNCwibmdJZiJdLFsic2hhcGUiLCJyZWZyZXNoIiwiY2xhc3MiLCJjbGljay1pY29uIiwzLCJjbGljayIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJh'@;
put 'cmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbGciLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtNSIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIiwxLCJjbGljay1pY29uIl0sWzEsInRvb2x0aXAtY29udGVudCIsInRvb2x0aXAtbG9uZyJdLFsic2hhcGUi'@;
put 'LCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsiY2xhc3MiLCJjb250ZW50IiwzLCJkaXNwbGF5Iiw0LCJuZ1ZhciJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInNlYXJj'@;
put 'aCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsImNsaWNrLWljb24iLDMsImNsaWNrIl0sWzEsImNvbnRlbnQiXSxbImNsYXNzIiwiaG90LXNwaW5uZXIgbXktMTAtbXgtYXV0'@;
put 'byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5n'@;
put 'T2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiLDQsIm5nSWYiXSxbMSwiaG90LXNwaW5uZXIiLCJteS0xMC1teC1hdXRv'@;
put 'IiwidGV4dC1jZW50ZXIiXSxbImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIs'@;
put 'ImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Il0sWzMsInZpZXdib3hJZCJdLFsicXVlcnlGaWx0ZXIiLCIiXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmNsck1vZGFsT3BlbkNoYW5nZShmKX0pLG1lKDEsImgzIiwxKSxOZSgyLCIgVmlld2JveGVzICIpLEplKDMsWGplLDIsMiwic3BhbiIsMikseWUo'@;
put 'KSxtZSg0LCJkaXYiLDMpKDUsImRpdiIsNCkoNiwicCIsNSksTmUoNywiQWRkIG5ldyIpLHllKCkscXQoOCwiaHIiLDYpLEplKDksSmplLDIsMCwiZGl2Iiw3KSxKZSgxMCxRamUsMiwwLCJwIiw4KSxKZSgxMSxlemUsMSwxLCJkYy10cmVlIiw5KSx5ZSgpLG1lKDEyLCJkaXYiLDEwKSgxMywi'@;
put 'ZGl2IiwxMSkoMTQsInAiLDUpLE5lKDE1LCJDdXJyZW50bHkgb3BlbiIpLHllKCksbWUoMTYsImRpdiIpKDE3LCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNuYXBUb0dyaWQoKX0pLHF0KDE4LCJjbHItaWNvbiIsMTMpLG1lKDE5LCJzcGFuIiwxNCksTmUoMjAsIlNu'@;
put 'YXAgdmlld2JveGVzIHRvIGdyaWQiKSx5ZSgpKCksbWUoMjEsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubWluaW1pemVBbGwoKX0pLHF0KDIyLCJjbHItaWNvbiIsMTUpLG1lKDIzLCJzcGFuIiwxNCksTmUoMjQsIk1pbmltaXplIGFsbCB2aWV3Ym94ZXMiKSx5ZSgp'@;
put 'KCksbWUoMjUsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzdG9yZUFsbCgpfSkscXQoMjYsImNsci1pY29uIiwxNiksbWUoMjcsInNwYW4iLDE0KSxOZSgyOCwiUmVzdG9yZSBhbGwgdmlld2JveGVzIikseWUoKSgpKCkoKSxxdCgyOSwiaHIiKSxKZSgzMCx0emUs'@;
put 'MiwwLCJwIiwxNyksSmUoMzEsb3plLDE1LDEwLCJkaXYiLDE4KSxtZSgzMiwiZGl2IiwxOSkoMzMsInAiLDIwKSxOZSgzNCkseWUoKSgpLHF0KDM1LCJociIpLEplKDM2LGh6ZSwzLDIsImRpdiIsMjEpLHllKCkoKSxtZSgzNywiZGl2IiwyMikoMzgsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3Ym94TW9kYWw9ITF9KSxOZSgzOSwiIE9rICIpLHllKCkoKSgpLG1lKDQwLCJkaXYiLDI0KSxKZSg0MSxTemUsMzMsMzcsImRpdiIsMjUpLHllKCksbWUoNDIsImNsci1tb2RhbCIsMjYpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYp'@;
put 'e3JldHVybiBkLmZpbHRlcj1mfSksbWUoNDMsImgzIiwyNyksTmUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLG1lKDQ1LCJzcGFuIiksTmUoNDYpLHllKCkoKSxtZSg0NywiZGl2IiwyOCksSmUoNDgsTXplLDIsMSwiYXBwLXF1ZXJ5IiwyOSkseWUoKSxtZSg0OSwiZGl2Iiwy'@;
put 'MikoNTAsImJ1dHRvbiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSksTmUoNTEsIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSg1MiwiYnV0dG9uIiwyMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMX0pLE5lKDUzLCIg'@;
put 'Q2FuY2VsICIpLHllKCksbWUoNTQsImJ1dHRvbiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZW5kQ2xhdXNlKCl9KSxOZSg1NSwiIE9rICIpLHllKCkoKSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEw'@;
put 'KSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgzKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWQuSW5maW5pdHkpLENlKDYpLFJlKCJuZ0lmIixkLmxpYnJhcmllc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnZpZXdib3hMaW1pdFJlYWNoZWQpLENl'@;
put 'KDEpLFJlKCJuZ0lmIixkLnZpZXdib3hNb2RhbCksQ2UoMTkpLFJlKCJuZ0lmIixkLnZpZXdib3hlcy5sZW5ndGg8MSksQ2UoMSksUmUoIm5nRm9yT2YiLGQudmlld2JveGVzKSxDZSgzKSxncigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9ZC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmZC5zZWxl'@;
put 'Y3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hU'@;
put 'YWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLENlKDIpLFJlKCJuZ1ZhciIseV8oMTkseHplLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVj'@;
put 'dGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUs'@;
put 'bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksQ2UoNSksUmUoIm5nRm9yT2YiLGQudmlld2JveGVzKSxDZSgxKSxSZSgiY2xyTW9k'@;
put 'YWxPcGVuIixkLmZpbHRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0KSx6YygiICMiLG51bGw9PWQuZmlsdGVyaW5nVmlld2JveD9udWxsOmQuZmlsdGVyaW5nVmlld2JveC5pZCwiICIsZC5maWx0ZXJMaWJkcywiICIpLENlKDIpLFJlKCJuZ0lm'@;
put 'IixkLmZpbHRlciksQ2UoNiksUmUoImNsckxvYWRpbmciLGQuZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGthLG91LHN1LFp1LGRoLFVzLEpKLEQwLEQ4LFQwLGYxLHUyLENwLGwxLGMxLFMwLEJzLHdwLE9zLHIyLHVVLHh5LF9zZSxnc2UsQ3NlLGJzZSxNc2UsJGplLFU3'@;
put 'LFliXSxzdHlsZXM6WyIubGljZW5jZS1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMzAwfWNsci1tb2RhbC5yb290LW1vZGFsW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6Y2FsYygxMDAlIC0gNjBweCl9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtY29udGVudHtoZWlnaHQ6ODB2aH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6MTAwJTtoZWlnaHQ6MTAwJX1kYy10cmVl'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6MX0udG9vbHRpcC1sb25nW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFkZC1uZXdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJTtwYWRkaW5nLXJpZ2h0OjVweH0udmlld2JveC1saW1p'@;
put 'dC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY30uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAgLm9wZW4tdmlld2JveFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94LnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoNjAsMTMzLDAsLjE4MDM5MjE1NjkpfS5jdXJyZW50bHktb3Bl'@;
put 'bltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9LnZpZXdib3hlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6'@;
put 'LWluZGV4Ojk5OX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjIwMHB4O21pbi1oZWlnaHQ6MjAwcHg7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3BvaW50ZXItZXZlbnRzOmFsbDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci10b3At'@;
put 'bGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMCAxMHB4IC0zcHggIzAwMH0udmlld2JveC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMwMTk2MDc4NDMpO2JhY2tncm91bmQ6d2hpdGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5k'@;
put 'cmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAwO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9p'@;
put 'bnRlci1ldmVudHM6YWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAudGFibGUtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsfS52aWV3Ym94W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0'@;
put 'aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfS52aWV3Ym94'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LnZpZXdi'@;
put 'b3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuY29ybmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2N1cnNvcjpud3NlLXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5yaWdodFtfbmdjb250ZW50LSVD'@;
put 'T01QJV17d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7Y3Vyc29yOm5zLXJlc2l6ZX0uY29scy1zZWFyY2hb'@;
put 'X25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH0uY29scy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhlaWdo'@;
put 'dDo2MHB4O2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7d2lkdGg6NDAwcHg7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHh9LmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVy'@;
put 'LWJvdHRvbTpzb2xpZCAxcHggI2NjYztjb2xvcjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2JhY2tncm91bmQ6'@;
put 'd2hpdGU7Zm9udC1zaXplOjE0cHh9LmNvbC1ib3guc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpfS5jb2wtYm94LnByaW1hcnlLZXlIZWFkZXJTdHlsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDQ4'@;
put 'LDEwNywwLC4xNDExNzY0NzA2KX0uY2RrLWRyYWctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMsMCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHgg'@;
put 'MnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fS5jZGstZHJhZy1wbGFjZWhvbGRlcltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstZHJhZy1hbmltYXRpbmdbX25nY29udGVudC0lQ09NUCVde3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVy'@;
put 'KDAsMCwuMiwxKX0uY29sLWJveFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtib3JkZXI6bm9uZX0uY29scy1saXN0LmNkay1kcm9wLWxpc3QtZHJhZ2dpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVdOm5vdCguY2RrLWRyYWctcGxhY2Vo'@;
put 'b2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uZGlzYWJsZWRbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjU7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LmZpbHRlci1hY3RpdmVbX25nY29udGVu'@;
put 'dC0lQ09NUCVde2NvbG9yOiMwMDcyYTN9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkg'@;
put 'dGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC42OTAxOTYw'@;
put 'Nzg0KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0aC5yZWFkb25seUNlbGwgZGl2e29wYWNpdHk6LjR9aG90'@;
put 'LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGQucmVhZG9ubHlDZWxse29wYWNpdHk6LjV9Il19KSxjfSkoKSxrc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBFcix0aGlzLmZpbGVEcm9wPW5ldyBFcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3Ao'@;
put 'YSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5m'@;
put 'aWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITAp'@;
put 'fW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcm9wIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3AoZil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9u'@;
put 'KGYpe3JldHVybiBkLm9uRHJhZ092ZXIoZil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyYWdMZWF2ZShmKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KSxjfSko'@;
put 'KSxBc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVTZWxlY3RlZD1uZXcgRXIsdGhpcy5lbGVtZW50PWF9aXNFbXB0eUFmdGVyU2VsZWN0aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRpcGxlfW9uQ2hhbmdlKCl7'@;
put 'Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGEpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQoYSksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVTZWxlY3RlZDoiZmlsZVNlbGVjdGVkIn19KSxjfSkoKTtmdW5jdGlvbiBFemUoYyxsKXsxJmMmJihtZSgwLCJwIiw4KSxOZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRv'@;
put 'IHNob3cuICIpLHllKCkpfWZ1bmN0aW9uIGt6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLk5BTUUp'@;
put 'LENlKDIpLG9yKGEuVkFMVUUpfX1mdW5jdGlvbiBBemUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRlbnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSgyLCJjbHItZGctY29sdW1uIiksTmUoMywiTmFtZSIpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIpLE5lKDUsIlZhbHVlIiks'@;
put 'eWUoKSxKZSg2LGt6ZSw1LDIsImNsci1kZy1yb3ciLDUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDYpLFJlKCJuZ0Zvck9mIixhLmRzbWV0YSl9fWZ1bmN0aW9uIFR6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLE5lKDIpLHll'@;
put 'KCksSmUoMyxBemUsNywxLCJjbHItdGFiLWNvbnRlbnQiLDEwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O0NlKDIpLG9yKGEuZ3JvdXApLENlKDEpLFJlKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgVHNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0'@;
put 'aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcix0aGlzLmRzbWV0YUdyb3VwcGVkPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRhPy5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiZ0aGlzLnBhcnNlRFNNZXRhKCl9cGFyc2VEU01ldGEo'@;
put 'KXt0aGlzLmRzbWV0YUdyb3VwcGVkPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21ldGFHcm91cHBlZC5maW5kSW5kZXgoaD0+aC5ncm91cD09PWEuT0RTX1RBQkxFKTtkPDAmJihkPXRoaXMuZHNtZXRhR3JvdXBwZWQucHVzaCh7Z3JvdXA6YS5PRFNfVEFCTEUs'@;
put 'ZHNtZXRhOltdfSktMSksdGhpcy5kc21ldGFHcm91cHBlZFtkXS5kc21ldGEucHVzaChhKX19b25PcGVuQ2hhbmdlKGEpe3RoaXMub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kYXRhc2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UifSxmZWF0dXJlczpb'@;
put 'dmFdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsx'@;
put 'LCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5l'@;
put 'IiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEs'@;
put 'ImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uT3BlbkNoYW5nZShmKX0pLG1lKDEs'@;
put 'ImgzIiwxKSxOZSgyLCJEYXRhc2V0IE1ldGEiKSx5ZSgpLG1lKDMsImRpdiIsMiksSmUoNCxFemUsMiwwLCJwIiwzKSxtZSg1LCJjbHItdGFicyIsNCksSmUoNixUemUsNCwyLCJjbHItdGFiIiw1KSx5ZSgpKCksbWUoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gZC5vbkNsb3NlQ2xpY2soKX0pLE5lKDksIiBDbG9zZSAiKSx5ZSgpKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLENlKDQpLFJlKCJuZ0lmIixkLmRzbWV0YUdyb3VwcGVk'@;
put 'Lmxlbmd0aDwxKSxDZSgyKSxSZSgibmdGb3JPZiIsZC5kc21ldGFHcm91cHBlZCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLFc4LFRwLHRnLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LG91LHN1LEU4LElwLE9wLGRnLFJwLExwLGNnXSxzdHlsZXM6WyIubW9kYWwtYm9keVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICBjbHItdGFic1tfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo3MHZofS5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWIt'@;
put 'Y29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfSJdfSksY30pKCk7ZnVuY3Rpb24gRHplKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0'@;
put 'aW9uIEx6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7UmUoImRpc2Fi'@;
put 'bGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcpLENlKDEpLGdyKCIgIixhLmdlbmVyYXRlZFJlY29yZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwi'@;
put 'ICIpfX1mdW5jdGlvbiBJemUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLER6ZSwyLDEsInNwYW4iLDExKSxKZSgyLEx6ZSwyLDIsImJ1dHRvbiIsMTIpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVj'@;
put 'b3JkLm5vTGlua09wdGlvbikpLENlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBSemUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE1KSgxLCJzcGFuIiwxNiksTmUoMiwiIExvYWRpbmcuLi4gIiks'@;
put 'eWUoKSgpKX1mdW5jdGlvbiBPemUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gUHplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMzApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIEZ6ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5j'@;
put 'dGlvbiBIemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaW5wdXQtY29udGFpbmVyIiwzMykoMSwiaW5wdXQiLDM0KSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgzKS5pbmRleDtyZXR1cm4ganQoVmUoMikub25SZWNvcmRJbnB1dEZvY3Vz'@;
put 'KGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0LF89VmUoMik7cmV0dXJuIF8ucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtl'@;
put 'eSksanQoXy5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1W'@;
put 'ZSgzKS4kaW1wbGljaXQsZD1WZSgyKTtkcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLENlKDEpLFJlKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gTnplKGMsbCl7MSZjJiZqYSgwKX1jb25zdCBk'@;
put 'VT1mdW5jdGlvbihjLGwpe3JldHVybntjb2w6Yyxjb2xJbmRleDpsfX07ZnVuY3Rpb24gVnplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxOemUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7VmUo'@;
put 'Mik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUTIoMixkVSxkLGgpKX19Y29uc3QgQnplPWZ1bmN0aW9uKCl7cmV0dXJuWyJudW1lcmljIix2b2lkIDBdfSxEc2U9ZnVuY3Rpb24oKXtyZXR1cm5bImF1dG9j'@;
put 'b21wbGV0ZSIsImF1dG9jb21wbGV0ZS5jdXN0b20iXX07ZnVuY3Rpb24ganplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxIemUsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzMiksSmUoMixWemUsMiw1LCJkaXYiLDIpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1W'@;
put 'ZSgyKTtsZXQgaCxmO0NlKDEpLFJlKCJuZ0lmIiwkcygyLEJ6ZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKSxDZSgxKSxSZSgibmdJZiIsJHMo'@;
put 'MyxEc2UpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmYuZWRpdG9yKSl9fWZ1bmN0aW9uIHp6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10'@;
put 'ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzYsMzcpLHh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLmluZGV4O3JldHVybiBqdChWZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChh'@;
put 'KSxqdChWZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtj'@;
put 'b25zdCBmPVZlKDMpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSxOZSgzLCIgICAgICAgICAgICAgICAgICAiKSx5ZSgpLG1lKDQsImNsci1jb250cm9sLWhlbHBlciIpLE5lKDUpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMiksZD1WZSgz'@;
put 'KS4kaW1wbGljaXQsaD1WZSgyKTtsZXQgZixfLFQ7Q2UoMSksZHIoImludmFsaWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9aC5jdXJyZW50UmVjb3Jk'@;
put 'VmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmYudHlwZSksUmUoInJvd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pKCJtYXhMZW5ndGgiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KF89aC5jdXJy'@;
put 'ZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOl8ubGVuZ3RoKSxDZSg0KSx6YygiIixhLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShUPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/'@;
put 'bnVsbDpULmxlbmd0aCwiIil9fWZ1bmN0aW9uIFV6ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWnplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxVemUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5k'@;
put 'ZXg7VmUoMik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUTIoMixkVSxkLGgpKX19Y29uc3QgWXplPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19O2Z1bmN0aW9uIFd6ZShjLGwpe2lmKDEmYyYmKFZyKDAp'@;
put 'LEplKDEsenplLDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMiksSmUoMixaemUsMiw1LCJkaXYiLDIpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtsZXQgaCxmO0NlKDEpLFJlKCJuZ0lmIiwkcygyLFl6ZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50'@;
put 'UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKSxDZSgxKSxSZSgibmdJZiIsJHMoMyxEc2UpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9ZC5jdXJy'@;
put 'ZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmYuZWRpdG9yKSl9fWZ1bmN0aW9uIEd6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM4KSgxLCJ0ZXh0YXJlYSIsMzkpLHh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7'@;
put 'cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLHllKCksbWUoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksTmUoMywiSEg6bW06c3MiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxk'@;
put 'PVZlKDIpO2xldCBoO0NlKDEpLGRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSkoIm5vdC1jaGFyIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxl'@;
put 'KGEua2V5KSk/bnVsbDpoLnR5cGUpLFJlKCJyb3dzIixhLnZhbHVlLmxlbmd0aD44MD82OjEpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gJHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzOCkoMSwidGV4dGFyZWEiLDQwKSx4dCgi'@;
put 'cGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01v'@;
put 'ZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSx5ZSgpLG1lKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDEpKDMsImlucHV0Iiw0MikseHQoImNsckRhdGVDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGgsZi5rZXkpKX0pLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtDZSgxKSxkcigiaW52YWxpZC1kYXRhIixkLmN1cnJl'@;
put 'bnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLFJlKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gcXplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBLemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLHF6ZSwxLDAsIm5nLWNvbnRh'@;
put 'aW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtWZSgyKTtjb25zdCBmPSRpKDE2KTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRMigyLGRVLGQsaCkpfX1mdW5jdGlvbiBYemUo'@;
put 'YyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJkaXYiLDE4KSgyLCJkaXYiLDE5KSgzLCJwIiwyMCksTmUoNCksSmUoNSxPemUsMSwwLCJjbHItaWNvbiIsMjEpLHllKCksbWUoNiwicCIsMjIpLE5lKDcpLHllKCkoKSxtZSg4LCJkaXYiLDIzKSxKZSg5LFB6ZSwyLDAsInNwYW4iLDI0KSxKZSgx'@;
put 'MCxGemUsMSwwLCJjbHItaWNvbiIsMjUpLEplKDExLGp6ZSwzLDQsIm5nLWNvbnRhaW5lciIsMjYpLEplKDEyLFd6ZSwzLDQsIm5nLWNvbnRhaW5lciIsMjYpLEplKDEzLEd6ZSw0LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI3KSxKZSgxNCwkemUsNCwzLCJkaXYiLDI3KSxKZSgxNSxL'@;
put 'emUsMiw1LCJkaXYiLDI2KSx5ZSgpKCkscXQoMTYsImhyIiwyOCksenIoKSksMiZjKXtjb25zdCBhPVZlKCksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1WZSgyKTtsZXQgXyxUO0NlKDQpLGdyKCIgIixkLmtleSwiICIpLENlKDEpLFJlKCJuZ0lmIixmLmlzQ29sUGsoZC5rZXkpKSxDZSgy'@;
put 'KSxncigiICIsbnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oXz1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Xy5kZXNjLCIgIiksQ2UoMSksUmUoIm5nU3dpdGNoIixudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9'@;
put 'PShUPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDpULnR5cGUpLENlKDEpLFJlKCJuZ0lmIixmLmN1cnJlbnRSZWNvcmRMb2FkaW5ncy5pbmNsdWRlcyhoKSksQ2UoMSksUmUoIm5nSWYiLGYuY3VycmVudFJlY29yZEVycm9ycy5pbmNsdWRlcyhoKSksQ2Uo'@;
put 'MSksUmUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIix2b2lkIDApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRl'@;
put 'Iil9fWZ1bmN0aW9uIEp6ZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsWHplLDE3LDExLCJuZy1jb250YWluZXIiLDIpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIkFjdGlvbiIhPT1hLmtleSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19f'@;
put 'XyIhPT1hLmtleSYmIm5vTGlua09wdGlvbiIhPT1hLmtleSl9fWZ1bmN0aW9uIFF6ZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsSnplLDIsMSwibmctY29udGFpbmVyIiwxNyksYmEoMiwia2V5dmFsdWUiKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsTTUo'@;
put 'MiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIGVVZShjLGwpezEmYyYmKG1lKDAsImNsci1hbGVydCIsNDMpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDQpLE5lKDMsIiBEYXRhIFZhbGlkYXRp'@;
put 'b24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSx5ZSgpKCkoKSksMiZjJiYoSHUoInZpc2liaWxpdHkiLFZlKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIiksUmUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFu'@;
put 'Z2VyIikpfWZ1bmN0aW9uIHRVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNDUpKDEsImJ1dHRvbiIsNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxxdCgyLCJjbHItaWNvbiIsNDcp'@;
put 'LHllKCksbWUoMywicCIpLE5lKDQsIiBDdXJyZW50IHJvdzogIiksbWUoNSwic3Ryb25nIiksTmUoNikseWUoKSgpLG1lKDcsImJ1dHRvbiIsNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLHF0KDgsImNsci1pY29u'@;
put 'Iiw0OCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLENlKDUpLGdyKCIgIixhLmN1cnJlbnRSZWNvcmRJbmRleCsxLCIgIiksQ2UoMSksUmUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNv'@;
put 'cmRJbnZhbGlkQ29scy5sZW5ndGg+MCl9fWZ1bmN0aW9uIG5VZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgibmdWYWx1ZSIsYSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gclVlKGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1MSkseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgidmFsdWVDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2w7cmV0dXJuIGp0KFZlKCkuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWguY29sLF89aC5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZERy'@;
put 'b3Bkb3duQ2hhbmdlKGYua2V5LF8pKX0pLEplKDIsblVlLDIsMiwib3B0aW9uIiw1MikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLmNvbCxkPVZlKCk7bGV0IGg7Q2UoMSksUmUoInZhbHVlIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKSgiaW5wdXRJZCIsYS5rZXkpLENlKDEpLFJlKCJu'@;
put 'Z0Zvck9mIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLnNvdXJjZSl9fWZ1bmN0aW9uIGlVZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNTYpLE5lKDEpLHllKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEpLENlKDEpLGdyKCIgIixhLCIgIil9fWZ1bmN0aW9uIG9VZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlbGVjdCIsNTQpLHh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuY29sSW5k'@;
put 'ZXg7cmV0dXJuIGp0KFZlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2w7cmV0dXJuIGp0KFZlKCkuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSxKZSgxLGlVZSwyLDIsIm9wdGlvbiIsNTUpLHll'@;
put 'KCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuY29sLGQ9VmUoKTtsZXQgaDtSZSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSksQ2UoMSksUmUoIm5nRm9yT2YiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdl'@;
put 'dFJ1bGUoYS5rZXkpKT9udWxsOmguc291cmNlKX19Y29uc3Qgc1VlPWZ1bmN0aW9uKCl7cmV0dXJuWyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl19O2Z1bmN0aW9uIGFVZShjLGwpe2lmKDEmYyYmKEplKDAsclVlLDMsMywiZGl2Iiw0OSksSmUoMSxvVWUsMiwyLCJuZy10ZW1wbGF0'@;
put 'ZSIsbnVsbCw1MCxrYykpLDImYyl7Y29uc3QgYT1sLmNvbCxkPSRpKDIpLGg9VmUoKTtSZSgibmdJZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yP251bGw6aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksJHMoMixzVWUpKSkoIm5nSWZFbHNlIixkKX19'@;
put 'bGV0IGxVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlz'@;
put 'LmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudFJlY29yZEVycm9ycz1bXSx0aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBFcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBFcix0'@;
put 'aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBFcix0aGlzLm9uUmVjb3JkRWRpdENsb3NlPW5ldyBFcix0aGlzLm9uUmVjb3JkRWRpdENvbmZpcm09bmV3IEVyLHRoaXMub25OZXh0UmVjb3JkPW5ldyBFcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IEVyLHRoaXMuY3VycmVudFJl'@;
put 'Y29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRo'@;
put 'aXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0ZVJlY29yZENvbChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZixfKT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRv'@;
put 'cihhLGQsVD0+e2YoVCl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7bGV0IGg9dGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLGY9aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPUlHKCkoYSkuZm9y'@;
put 'bWF0KGYpKX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJl'@;
put 'Y29yZERyb3Bkb3duQ2hhbmdlKGEsZCl7dGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZC5lbWl0KHtjb2xOYW1lOmEsY29sOmR9KX1vblJlY29yZElucHV0Rm9jdXMoYSxkKXt0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpkfSl9cmVjb3JkSW5wdXRQ'@;
put 'YXN0ZShhKXtzZXRUaW1lb3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJnZXQudmFsdWUucmVwbGFjZSgvXHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9y'@;
put 'Py5nZXRSdWxlKGQpLF89YS50YXJnZXQudmFsdWU7aC5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAsKCk9PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsXykudGhlbihUPT57Y29uc3QgVz1oLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO1Q/Vz4tMSYmaC5jdXJyZW50'@;
put 'UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKFcsMSk6VzwwJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNoKGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVj'@;
put 'b3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlY29yZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5z'@;
put 'dHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHlsZS5vcGFjaXR5PSIwIixoLnN0eWxlLnpJbmRleD0iNTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgp'@;
put 'LHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xpcChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJl'@;
put 'Y29yZFVybExvYWRpbmc9ITA7Y29uc3QgZD1bXTthLmhlYWRlclBrcy5mb3JFYWNoKGg9PntsZXQgZj0iQyIsXz0iIjtmb3IobGV0IFQ9MDtUPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO1QrKyl7Y29uc3QgVz1hLmNlbGxWYWxpZGF0aW9uW1RdO2lmKFcuZGF0YT09PWgpeygibnVtZXJpYyI9'@;
put 'PT1XLnR5cGV8fCJkYXRlIj09PVcudHlwZXx8InRpbWUiPT09Vy50eXBlKSYmKGY9Ik4iKTticmVha319Xz0iQyI9PT1mP2AnJHthLmN1cnJlbnRSZWNvcmRbaF19J2A6YS5jdXJyZW50UmVjb3JkW2hdLnRvU3RyaW5nKCksZC5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJ'@;
put 'QzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmgsT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTpffSl9KSxkLmxlbmd0aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsZCkudGhlbihoPT57YS5xdWVyeUZpbHRlcj17aWQ6aC5y'@;
put 'ZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmgucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgVD1sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAo'@;
put 'VCksYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVyPSExfSkuY2F0Y2goaD0+e2Euc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZCl7cmV0dXJuIGF9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGJkKSx0dChUYykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246'@;
put 'InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVj'@;
put 'b3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3Ii'@;
put 'fSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRF'@;
put 'ZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siaWQiLCJyZWNvcmRNb2RhbFJlZiIs'@;
put 'MSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIg'@;
put 'YWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMs'@;
put 'InZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9u'@;
put 'IiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3VzYWJsZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiYXV0b2NvbXBsZXRlIiwiIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVy'@;
put 'YXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9u'@;
put 'IiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNr'@;
put 'QnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIs'@;
put 'InBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNv'@;
put 'bHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwi'@;
put 'a2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9u'@;
put 'LWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJuZ01vZGVsIiwi'@;
put 'Zm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIiwiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbMSwiZGF0ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0'@;
put 'byIsMSwibm90LWNoYXIiLDMsIm5nTW9kZWwiLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9u'@;
put 'LWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJkaXNhYmxlZCIsImNs'@;
put 'aWNrIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWzMsInZhbHVlIiwiaW5wdXRJZCIsImZvY3VzaW4iLCJ2YWx1'@;
put 'ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2'@;
put 'YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkoMSwiaDMiLDEpLE5lKDIpLEplKDMsSXplLDMsMiwibmctY29udGFpbmVyIiwyKSx5ZSgpLG1lKDQsImRpdiIsMyksSmUoNSxSemUsMywwLCJkaXYiLDQpLEplKDYsUXplLDMsNSwibmctY29u'@;
put 'dGFpbmVyIiwyKSx5ZSgpLG1lKDcsImRpdiIsNSksSmUoOCxlVWUsNCw0LCJjbHItYWxlcnQiLDYpLEplKDksdFVlLDksMywiZGl2Iiw3KSxtZSgxMCwiZGl2IikoMTEsImJ1dHRvbiIsOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9u'@;
put 'PSExLGQuY2xvc2VSZWNvcmRFZGl0KCl9KSxOZSgxMiwiIENhbmNlbCAiKSx5ZSgpLG1lKDEzLCJidXR0b24iLDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb25maXJtUmVjb3JkRWRpdCgpfSksTmUoMTQsIiBDb25maXJtICIpLHllKCkoKSgpLEplKDE1LGFVZSwzLDMsIm5n'@;
put 'LXRlbXBsYXRlIixudWxsLDEwLGtjKSx5ZSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSgyKSxiMCgiICIsIkFERCI9PT1kLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1kLmxpYmRzP251bGw6ZC5s'@;
put 'aWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksQ2UoMSksUmUoIm5nSWYiLCJFRElUIj09PWQucmVjb3JkQWN0aW9uKSxDZSgyKSxSZSgibmdJZiIsZC5hZGRSZWNvcmRMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQu'@;
put 'YWRkUmVjb3JkTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLENlKDQpLFJlKCJkaXNhYmxlZCIsZC5jdXJyZW50UmVjb3JkSW52YWxp'@;
put 'ZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxyZCxuZCx0aCxsMSxjMSxXYSxNMCxCcyxPcyxIYixGUSxOYixoSCxrYSxvdSxzdSxIRixJYiwkRixxRixmMSxqRixOOCxzd2UsZFEseHNlLGR4XSxzdHlsZXM6WyIucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lLWlu'@;
put 'cHV0LXJvd1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXgtd2lkdGg6MjYwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWUtaW5wdXQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jZWxsLWRlc2NbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDozMHB4O21hcmdpbi10b3A6MTBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAuaW5wdXRzLXdyYXBwZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVde2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAgPio6'@;
put 'bm90KC5kYXRlLWZpZWxkKTpub3QoY2xyLXNlbGVjdC1jb250YWluZXIpe2ZsZXg6MX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LnJlY29y'@;
put 'ZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1l'@;
put 'bnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3R7ZGlz'@;
put 'cGxheTpibG9jazt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9'@;
put 'LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1l'@;
put 'bnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwgLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1z'@;
put 'ZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxkICAgcFtfbmdj'@;
put 'b250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnJlY29yZC1lZGl0LW1v'@;
put 'ZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMzBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDo0cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLXBpY2tlcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MTBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lcntib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtib3JkZXItcmFkaXVzOi4xMjVyZW07bWFyZ2luLXJpZ2h0OjVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0'@;
put 'LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcnt0b3A6MTVweH0ucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3R7aGVpZ2h0OmF1dG87cGFkZGluZzoxMHB4IDIwcHggMTBweCAxMHB4O2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNv'@;
put 'bnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpob3ZlcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5yZWNvcmQtZWRpdC1tb2RhbFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXJ7d2lkdGg6MjI0cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNp'@;
put 'emU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHIt'@;
put 'aW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwgLnJlY29y'@;
put 'ZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBj'@;
put 'bHItaW5wdXQtY29udGFpbmVyLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1kaWFsb2d7d2lkdGg6ODB2d30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNv'@;
put 'bnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO3Jlc2l6ZTpub25lO2JvcmRlci1jb2xvcjojOTk5fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWQ7b3V0bGluZTowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEu'@;
put 'bm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuZ2VuZXJhdGUtcmVjb3JkLXVybHtyaWdodDo0MHB4O3RvcDo0MHB4O2ZvbnQtc2l6ZToxMnB4fS5yZWNvcmQtZWRpdC1t'@;
put 'b2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbntyaWdodDoyNXB4O3RvcDo1cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWhlYWRlcntwYWRkaW5nOjAgMCAxcmVtfS5yZWNvcmQtZWRpdC1tb2Rh'@;
put 'bFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZm9vdGVyIC5hbGVydHtt'@;
put 'YXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV0gICBi'@;
put 'dXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDEwcHh9LmZvY3VzYWJsZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7Ym94LXNoYWRvdzowIDAgM3B4ICM1YWEyMjB9LmVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0Oi0zMHB4fS52YWxpZGF0'@;
put 'aW9uLWluZm8tYWxlcnRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMxMHB4fSJdfSksY30pKCk7ZnVuY3Rpb24gY1VlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLCIgIil9fWxldCB1VWU9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGVzTGlzdD1bXSx0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXSx0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdGhpcy5taW5EZWxheT0xZTN9bmdPbkluaXQoKXt9YXBwZW5kU3RhdGUoYSl7aWYoIntmaW5pc2h9Ij09PWEpcmV0dXJuIHRo'@;
put 'aXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx2b2lkIGNsZWFySW50ZXJ2YWwodGhpcy5zdGF0ZUludGVydmFsKTt0aGlzLnN0YXRlc0xpc3QucHVzaChhKSx0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKGEpfXJlcGxhY2VMYXN0U3RhdGUoYSl7dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wPyh0aGlz'@;
put 'LnN0YXRlc0xpc3QucG9wKCksdGhpcy5zdGF0ZXNMaXN0LnB1c2goYSkpOnRoaXMucHJvY2Vzc2VkU3RhdGVzW3RoaXMucHJvY2Vzc2VkU3RhdGVzLmxlbmd0aC0xXT1hfWNsZWFyU3RhdGVzKCl7dGhpcy5wcm9jZXNzZWRTdGF0ZXM9W119c3RhcnRTdGF0ZXIoKXt0aGlzLnN0YXRlckluUHJv'@;
put 'Z3Jlc3M9ITAsdGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIiksdGhpcy5zdGF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3Nl'@;
put 'ZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIil9LHRoaXMubWluRGVsYXkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0s'@;
put 'ZGVjbHM6NSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibS0wIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJ2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiXSxbMSwibS0wIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYobWUoMCwiZGl2IiksSmUoMSxjVWUsMiwxLCJwIiwwKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywic3BhbiIsMiksTmUoNCwiTG9hZGluZy4uLiIpLHllKCkoKSksMiZhJiYoQ2UoMSksUmUoIm5nRm9yT2YiLGQucHJvY2Vzc2VkU3RhdGVzKSl9LGRlcGVuZGVuY2llczpbeHNdLHN0eWxlczpb'@;
put 'Iltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja31wW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDt0ZXh0LWFsaWduOmNlbnRlcn0iXX0pLGN9KSgpLGRVZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLExzZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoYS50b1N0'@;
put 'cmluZygpLGQpfWFkZFNlcGFyYXRvcnMoYSxkPSIgIil7Y29uc3QgaD0oYSs9IiIpLnNwbGl0KCIuIik7bGV0IGY9aFswXTtjb25zdCBfPWgubGVuZ3RoPjE/Ii4iK2hbMV06IiIsVD0vKFxkKykoXGR7M30pLztmb3IoO1QudGVzdChmKTspZj1mLnJlcGxhY2UoVCwiJDEiK2QrIiQyIik7cmV0'@;
put 'dXJuIGYrX319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToidGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3QgaFVlPVsiaHQiXSxmVWU9WyJ1cGxvYWRTdGF0ZXIiXSxwVWU9'@;
put 'WyJxdWVyeUZpbHRlciJdLGdVZT1bImhvdEluc3RhbmNlIl0sbVVlPVsiZmlsZVVwbG9hZElucHV0Il07ZnVuY3Rpb24gdlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2MSkoMSwic3BhbiIsNjIpKDIsImxhYmVsIiw2MyksTmUoMywiIEJyb3dzZSAiKSx5ZSgpKCks'@;
put 'bWUoNCwiaW5wdXQiLDY0LDY1KSx4dCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5nZXRGaWxlRGVzYyhoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNCksUmUoInVwbG9hZGVyIixhLnVwbG9hZGVyKX19ZnVuY3Rpb24gX1VlKGMsbCl7aWYo'@;
put 'MSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikoMSwiYnV0dG9uIiw2NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmdldEZpbGUoKSl9KSxOZSgyLCIgVXBsb2FkICIpLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiZGlzYWJsZWQiLCEwKSl9ZnVuY3Rp'@;
put 'b24gYlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxOZSgxLCIgQ2xvc2UgIikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtSZSgiZGlz'@;
put 'YWJsZWQiLGEuZXhjZWxGaWxlUGFyc2luZ3x8YS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24geVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9'@;
put 'KSxOZSgxLCIgU2tpcCAiKSx5ZSgpfX1mdW5jdGlvbiB3VWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDcwKSxxdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVsbCw3MSkseWUoKSl9ZnVuY3Rpb24gQ1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLWVkaXQtcmVjb3JkIiw3'@;
put 'MikseHQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCkpfSkoIm9uUmVj'@;
put 'b3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNsb3NlUmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJ0KGEpLGp0KFZlKCkub25QcmV2aW91c1JlY29yZCgpKX0pLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7UmUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMpKCJxdWVyeUZpbHRl'@;
put 'ciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5nIixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEuY3VycmVudEVkaXRS'@;
put 'ZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0'@;
put 'b3IpfX1mdW5jdGlvbiBTVWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDczKSxxdCgxLCJwcm9ncmVzcyIpLHllKCkpfWNvbnN0IE1VZT1mdW5jdGlvbigpe3JldHVyblsiL2hvbWUiXX07ZnVuY3Rpb24geFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw3NCkoMSwic3Bh'@;
put 'biIsNzUpLHF0KDIsImNsci1pY29uIiw3NiksTmUoMywiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24gIikseWUoKSxtZSg0LCJzcGFuIiw3NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSkscXQoNSwiY2xyLWljb24iLDc4KSxO'@;
put 'ZSg2LCIgVmlld2JveGVzICIpLHllKCkoKX0yJmMmJihDZSgxKSxSZSgicm91dGVyTGluayIsJHMoMSxNVWUpKSl9ZnVuY3Rpb24gRVVlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsODUpfWZ1bmN0aW9uIGtVZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg2'@;
put 'KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksZ3IoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIEFVZShjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEpLGJhKDIsInRob3VzYW5kU2VwYXJhdG9yIiksenIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLHc1KCIgKCIs'@;
put 'TTUoMiw0LGEuZGF0YVNvdXJjZS5sZW5ndGgsIiwiKSwiICIsMT09PWEuZGF0YVNvdXJjZS5sZW5ndGg/InJvdyI6InJvd3MiLCIsICIsYS5jb2xzLmxlbmd0aCwiIiwxPT09YS5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gVFVlKGMsbCl7MSZjJiYoVnIoMCks'@;
put 'TmUoMSwiICgwIHJvd3MpICIpLHpyKCkpfWZ1bmN0aW9uIERVZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsQVVlLDMsNywibmctY29udGFpbmVyIiwzNSksSmUoMixUVWUsMiwwLCJuZy1jb250YWluZXIiLDM1KSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFh'@;
put 'Lnplcm9GaWx0ZXJSb3dzKSxDZSgxKSxSZSgibmdJZiIsYS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIExVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImg0Iiw3OSkoMSwiY2xyLXRvb2x0aXAiKSgyLCJjbHItaWNvbiIsODApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gQnQoYSksanQoVmUoKS5kYXRhc2V0SW5mbz0hMCl9KSx5ZSgpLEplKDMsRVVlLDEsMCwiY2xyLWljb24iLDgxKSxtZSg0LCJzcGFuIiw4MiksTmUoNSksbWUoNiwiYSIsODMpLE5lKDcpLHllKCkoKSxKZSg4LGtVZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg0KSx5ZSgpLEplKDks'@;
put 'RFVlLDMsMiwibmctY29udGFpbmVyIiwzNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCk7Q2UoMyksUmUoIm5nSWYiLGEudGFibGVOYW1lLmluY2x1ZGVzKCItRkMiKSksQ2UoMiksZ3IoIiAiLGEubGliTmFtZSwiLiIpLENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcv'@;
put 'ZGF0YS8iK2QubGliZHMpLENlKDEpLG9yKGEudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxDZSgyKSxSZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24gSVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw5MykseHQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBCdChhKSxqdChWZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLHF0KDEsImNsci1pY29uIiw5NCksbWUoMiwic3BhbiIpLE5lKDMsIlVwbG9hZCIpLHllKCkoKX19ZnVuY3Rpb24gUlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYnV0dG9uIiw4OCks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5vcGVuUWIoKSl9KSxxdCgyLCJjbHItaWNvbiIsODkpLG1lKDMsInNwYW4iKSxOZSg0LCJGaWx0ZXIiKSx5ZSgpKCksbWUoNSwiYnV0dG9uIiw5MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxq'@;
put 'dChWZSgyKS5lZGl0VGFibGUoKSl9KSxxdCg2LCJjbHItaWNvbiIsOTEpLG1lKDcsInNwYW4iKSxOZSg4LCJFZGl0IikseWUoKSgpLEplKDksSVVlLDQsMCwiYnV0dG9uIiw5MiksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOSksUmUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJp'@;
put 'dHlGbGFnKX19ZnVuY3Rpb24gT1VlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSx6YygiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxp'@;
put 'Y2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gUFVlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODYpLEplKDEsT1VlLDIsMiwic3Bh'@;
put 'biIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBGVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJidXR0b24iLDk1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNhbmNlbEVkaXQoKSl9KSxxdCgyLCJjbHItaWNvbiIsOTYpLG1lKDMsInNwYW4iKSxOZSg0LCJDYW5jZWwiKSx5ZSgpKCksbWUoNSwiY2xyLXRvb2x0aXAiKSg2LCJidXR0b24iLDk3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1W'@;
put 'ZSgyKTtyZXR1cm4ganQoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSb3coKSl9KSxxdCg3LCJjbHItaWNvbiIsOTgpLE5lKDgsIkFkZCBSb3cgIikseWUoKSxKZSg5LFBVZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg0KSx5ZSgpLG1lKDEwLCJidXR0b24iLDQw'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNoZWNrU2F2ZSgpKX0pLHF0KDExLCJjbHItaWNvbiIsOTkpLE5lKDEyLCJTdWJtaXQgIikseWUoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg2KSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVz'@;
put 'dHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSxSZSgiY2xyTG9hZGluZyIsYS5hZGRpbmdOZXdSb3cpfX1mdW5jdGlvbiBIVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5tYW51'@;
put 'YWxGaWxlRWRpdE1vZGFsPSEwKX0pLHF0KDEsImNsci1pY29uIiw5MSksbWUoMiwic3BhbiIpLE5lKDMsIkVkaXQiKSx5ZSgpKCl9fWZ1bmN0aW9uIE5VZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImJ1dHRvbiIsMTAwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJ0KGEpLGp0KFZlKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLHF0KDIsImNsci1pY29uIiw5NiksbWUoMywic3BhbiIpLE5lKDQsIkRpc2NhcmQgZmlsZSIpLHllKCkoKSxKZSg1LEhVZSw0LDAsImJ1dHRvbiIsMTAxKSxtZSg2LCJidXR0b24iLDEwMikseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5zdWJtaXRFeGNlbCgpKX0pLHF0KDcsImNsci1pY29uIiw5OSksTmUoOCwiIFN1Ym1pdCAiKSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxDZSgxKSxSZSgiY2xy'@;
put 'TG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gVlVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4NyksSmUoMSxSVWUsMTAsMSwibmctY29udGFpbmVyIiwzNSksSmUoMixGVWUsMTMsMywibmctY29udGFpbmVyIiwzNSksSmUoMyxOVWUsOSwyLCJuZy1jb250YWluZXIiLDM1'@;
put 'KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksQ2UoMSksUmUoIm5nSWYiLCFhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxDZSgxKSxSZSgibmdJZiIsYS51cGxvYWRQcmV2'@;
put 'aWV3KX19ZnVuY3Rpb24gQlVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDQpKDEsInNwYW4iKSxOZSgyLCJGSUxURVIgOiAiKSxtZSgzLCJiIiksTmUoNCkseWUoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLG9yKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24galVlKGMsbCl7MSZj'@;
put 'JiYoVnIoMCksbWUoMSwic3BhbiIsMTA3KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsImRpdiIpKDQsImgzIiksTmUoNSwiTG9hZGluZyB0YWJsZSIpLHllKCkoKSx6cigpKX1mdW5jdGlvbiB6VWUoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJzcGFuIikscXQoMiwiY2xyLWljb24i'@;
put 'LDEwOCkseWUoKSxtZSgzLCJkaXYiKSg0LCJoMyIpLE5lKDUsIkxvYWRpbmcgdGFibGUgZXJyb3IiKSx5ZSgpKCksenIoKSl9ZnVuY3Rpb24gVVVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDUpKDEsImRpdiIsMTA2KSxKZSgyLGpVZSw2LDAsIm5nLWNvbnRhaW5lciIsMzUpLEplKDMs'@;
put 'elVlLDYsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxDZSgxKSxSZSgibmdJZiIsYS5nZXRkYXRhRXJyb3IpfX1mdW5jdGlvbiBaVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSks'@;
put 'eWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLHpjKCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNv'@;
put 'bnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBZVWUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTEpLEplKDEsWlVlLDIsMiwic3BhbiIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5yZXN0'@;
put 'cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBXVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTA5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnJlc3RyaWN0aW9u'@;
put 'cy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSkscXQoMiwiY2xyLWljb24iLDk4KSxOZSgzLCIgQWRkIFJlY29yZCAiKSx5ZSgpLEplKDQsWVVlLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTEwKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEp'@;
put 'LGRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBHVWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxMTIpLE5lKDEpLHF0KDIsImNvbnRhY3QtbGluayIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGdyKCIgVG8gZGlz'@;
put 'cGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gJFVlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTI0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksemMoIk9u'@;
put 'bHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBv'@;
put 'cnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gcVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMjUpKDEsImRpdiIsMTI2KSgyLCJsYWJlbCIsMTI3KSxOZSgzLCJNZXNzYWdlIikseWUoKSxtZSg0LCJ0ZXh0YXJlYSIsMTI4KSx4dCgibmdNb2RlbENoYW5n'@;
put 'ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm1lc3NhZ2U9aCl9KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoIm5nTW9kZWwiLGEubWVzc2FnZSkoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25l'@;
put 'PyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5sZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIEtVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTEzKSgxLCJkaXYiLDExNCkoMiwiZGl2'@;
put 'IiwxMTUpKDMsImRpdiIsMTE2KSg0LCJidXR0b24iLDExNykscXQoNSwiY2xyLWljb24iLDExOCkseWUoKSxtZSg2LCJoMyIsMiksTmUoNykseWUoKSgpLG1lKDgsImRpdiIsMyksSmUoOSwkVWUsMiwyLCJzcGFuIiwxMTkpLEplKDEwLHFVZSw1LDMsImRpdiIsMTIwKSx5ZSgpLG1lKDExLCJk'@;
put 'aXYiLDEyMSkoMTIsImJ1dHRvbiIsMTIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLE5lKDEzLCIgU3VibWl0ICIpLHllKCksbWUoMTQsImJ1dHRvbiIsMTIzKSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBoLmNhbmNlbFN1Ym1pdCgpLGguc3VibWl0PSExLGp0KGgudmFsaWRhdGlvbkRvbmU9MCl9KSxOZSgxNSwiIENhbmNlbCAiKSx5ZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksYjAoIiBTdWJtaXQgZm9yIEFw'@;
put 'cHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLENlKDIpLFJlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNl'@;
put 'bmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVUcnVlKSxDZSgyKSxSZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24g'@;
put 'WFVlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTI5KSxOZSgxKSxiYSgyLCJwa1NwYWNlU2VwYXJhdGUiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLHpjKCIgT24gcm93ICIsYSsxLCI6ICIsWmwoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIs'@;
put 'IiIpKSwiICIpfX1mdW5jdGlvbiBKVWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGIwKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19ZnVuY3Rpb24gUVVlKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PVZuKCk7bWUoMCwiZGl2IiwxMzApKDEsImRpdiIsMTMxKSgyLCJkaXYiLDExNSkoMywiZGl2IiwxMTYpKDQsImJ1dHRvbiIsMTE3KSxxdCg1LCJjbHItaWNvbiIsMTE4KSx5ZSgpLG1lKDYsImgzIiwyKSxOZSg3LCJFcnJvciIpLHllKCkoKSxtZSg4LCJkaXYiLDMpKDksInAiKSxOZSgxMCwi'@;
put 'WW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLHllKCkoKSxtZSgxMSwiZGl2IiwxNykoMTIsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5udWxsVmFyaWFibGVzPSExKX0pLE5lKDEzLCIgT2sgIikseWUoKSgpKCkoKSgpfX1m'@;
put 'dW5jdGlvbiBlWmUoYyxsKXsxJmMmJnF0KDAsImFwcC1xdWVyeSIsbnVsbCwxMzIpfWZ1bmN0aW9uIHRaZShjLGwpezEmYyYmKG1lKDAsInAiLDEzMyksTmUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIikseWUoKSl9Y29uc3QgblplPWZ1bmN0aW9uKGMsbCl7cmV0'@;
put 'dXJue2xpYk5hbWU6Yyx0YWJsZU5hbWU6bH19LElzZT1mdW5jdGlvbigpe3JldHVyblsiIiwiICJdfSxyWmU9ZnVuY3Rpb24oYyl7cmV0dXJue2hlYWRlckJhckZpbHRlcjpjfX0sUnNlPUYoNTMpLE9zZT1GKDM5MDA3KS5CdWZmZXI7bGV0IEpBPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSxkLGgsZixfLFQsVyxpZSxwZSx3ZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZpY2U9Xyx0aGlzLnJvdXRlcj1ULHRoaXMucm91dGU9Vyx0aGlzLnNh'@;
put 'c1NlcnZpY2U9aWUsdGhpcy5jZGY9cGUsdGhpcy5ob3RSZWdpc3RlcmVyPXdlLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZWgsdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0PW5ldyBlaCx0aGlzLmZpbGVVcGxvYWRJbnB1dENv'@;
put 'bXBMaXN0PW5ldyBlaCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmNvbHM9W10sdGhpcy5yZXN0cmljdGlvbnM9e30sdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmlu'@;
put 'aXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10saGlkZGVuOiEwLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtaW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1'@;
put 'bW5IZWFkZXJzT25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVtczp7ZWRpdF9yb3c6e25hbWU6IkVkaXQgcm93IixoaWRkZW4oKXtjb25zdCBpdD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighaXQpcmV0dXJuITE7Y29uc3QgZXQ9aXRbMF07cmV0dXJuIGV0LmZyb20ucm93'@;
put 'IT09ZXQudG8ucm93fSxjYWxsYmFjazooWmUsaXQsZXQpPT57bGV0IHl0PWl0WzBdO3l0LnN0YXJ0LnJvdz09PXl0LmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLHl0LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6'@;
put 'Ikluc2VydCBSb3cgYmVsb3cifSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhlYWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5Ontu'@;
put 'YW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRM'@;
put 'b2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtG'@;
put 'aWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMu'@;
put 'dGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRoaXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlz'@;
put 'LnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IE9vZSx0aGlzLnVwbG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5l'@;
put 'eGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRoaXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Ba'@;
put 'b25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFkZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRo'@;
put 'aXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgYmUsdGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3Vy'@;
put 'Y2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdl'@;
put 'bmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRo'@;
put 'aXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVEcmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxW'@;
put 'YWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBFOjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lO'@;
put 'REVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50aW1lc0NsaWNrZWQ9MCxZelt3aW5kb3cubmF2'@;
put 'aWdhdG9yLmxhbmd1YWdlXSYmRExlKCkucmVnaXN0ZXJMYW5ndWFnZShZelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSksdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBBZyx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygp'@;
put 'e3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmlj'@;
put 'dGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJl'@;
put 'Y29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJv'@;
put 'dmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJp'@;
put 'dHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJl'@;
put 'c2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5z'@;
put 'aG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBy'@;
put 'dWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX11cGRhdGVfc2hlZXRfcmFuZ2UoYSl7dmFyIGQ9e3M6e3I6MS8wLGM6MS8wfSxlOntyOjAsYzowfX07'@;
put 'T2JqZWN0LmtleXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGgpe3JldHVybiIhIiE9aC5jaGFyQXQoMCl9KS5tYXAoRGwudXRpbHMuZGVjb2RlX2NlbGwpLmZvckVhY2goZnVuY3Rpb24oaCl7ZC5zLmM9TWF0aC5taW4oZC5zLmMsaC5jKSxkLnMucj1NYXRoLm1pbihkLnMucixoLnIpLGQuZS5jPU1h'@;
put 'dGgubWF4KGQuZS5jLGguYyksZC5lLnI9TWF0aC5tYXgoZC5lLnIsaC5yKX0pLGFbIiFyZWYiXT1EbC51dGlscy5lbmNvZGVfcmFuZ2UoZCl9Z2V0UmFuZ2VBbmRTaGVldChhKXtsZXQgZD0wLGg9MCxmPS0xLF89LTEsVD0iIixXPSExLGllPVtdLHdlPVsiX19fX19ERUxFVEVfX1RISVNfX1JF'@;
put 'Q09SRF9fX19fIiwuLi50aGlzLmhlYWRlckFycmF5XS5tYXAoaXQ9Pml0LnRvTG93ZXJDYXNlKCkpLEVlPXdlLnJlZHVjZSgoaXQsZXQpPT4oaXRbZXRdPS0xLGl0KSx7fSk7cmV0dXJuIGEuU2hlZXROYW1lcy5mb3JFYWNoKGl0PT57aWYoVylyZXR1cm47aWU9W10sVD1pdDtjb25zdCBldD1h'@;
put 'LlNoZWV0c1tUXTtpZih0aGlzLmRhdGE9RGwudXRpbHMuc2hlZXRfdG9fanNvbihldCx7aGVhZGVyOjEsYmxhbmtyb3dzOiExLGRlZnZhbDoiIn0pLHRoaXMuZGF0YS5sZW5ndGg8PTEpcmV0dXJuO2xldCB5dD1bXTt0aGlzLmhlYWRlckFycmF5LmZvckVhY2goKCk9Pnl0LnB1c2goIiIpKSx0'@;
put 'aGlzLmRhdGEucHVzaCh5dCk7bGV0IEV0PSExO2lmKHRoaXMuZGF0YS5mb3JFYWNoKChTdCxKdCk9PntpZighVylpZihFdCl7bGV0IG5uPSEwLHZuPSExO3dlLmZvckVhY2goTm49Pntjb25zdCBjcj1FZVtObl07IiIhPT1TdFtjcl0mJnZvaWQgMCE9PVN0W2NyXT9ubj0hMTotMSE9PXRoaXMu'@;
put 'aGVhZGVyUGtzLmluZGV4T2YoTm4udG9VcHBlckNhc2UoKSkmJih2bj0hMCl9KSxubnx8dm4/KF89SnQsVz0hMCk6LTE9PT1mJiYoZj1KdCl9ZWxzZXtjb25zdCBubj1TdC5tYXAoTm49Pk5uLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7aWYoIW5uLmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9f'@;
put 'dGhpc19fcmVjb3JkX19fX18iKSl7Y29uc3QgTm49d2UuaW5kZXhPZigiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIik7Tm4+LTEmJndlLnNwbGljZShObiwxKX1FdD0hMCx3ZS5mb3JFYWNoKE5uPT57LTE9PT1ubi5pbmRleE9mKE5uKSYmKEV0PSExKX0pO2xldCB2bj1bXTt2bj10'@;
put 'aGlzLmZpbmRWYWxpZEhlYWRlcnMobm4sd2UsSnQsVCksITE9PT12blswXT8oRXQ9ITEsdm5bMV0ubGVuZ3RoPjAmJnZuWzFdLmZvckVhY2goTm49PntpZS5wdXNoKE5uKX0pKTpFZT12blsxXX19KSxXJiYodGhpcy51cGRhdGVfc2hlZXRfcmFuZ2UoZXQpLGV0WyIhcmVmIl0pKXtjb25zdCBK'@;
put 'dD1EbC51dGlscy5kZWNvZGVfcmFuZ2UoZXRbIiFyZWYiXXx8IiIpO2Q9SnQucy5yLGg9SnQucy5jfX0pLC0xPT09ZiYmKFc9ITEpLHtmb3VuZERhdGE6VyxzaGVldE5hbWU6VCxzdGFydFJvdzpmLGVuZFJvdzpfLGNzdkFycmF5SGVhZGVyc01hcDpFZSxtaXNzaW5nSGVhZGVyczppZSxyYW5n'@;
put 'ZVN0YXJ0Um93OmQscmFuZ2VTdGFydENvbDpofX1wcm9tcHRFeGNlbFBhc3N3b3JkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZmlsZVBhc3N3b3Jk'@;
put 'SW5wdXQiKTtoJiYoaC5mb2N1cygpLGgudmFsdWU9IiIpfSwxMDApLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdC5zdWJzY3JpYmUoaD0+e3RoaXMuZmlsZVVubG9ja0Vycm9yPSExLGEoaHx8dm9pZCAwKX0pfSl9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2xldCBmO3RoaXMuZXhj'@;
put 'ZWxVcGxvYWRTdGF0ZT0iTG9hZGluZyIsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSEwLGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy5maWxlbmFtZT0iIjtsZXQgXz1mLm5hbWU7dGhpcy5maWxlbmFtZT1fLHRoaXMuYXBwZW5kVXBsb2FkU3Rh'@;
put 'dGUoYExvYWRpbmcgJHtffSBpbnRvIHRoZSBicm93c2VyYCk7bGV0IFc9Xy5zbGljZShfLmxhc3RJbmRleE9mKCIuIikrMSxfLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyI9PT1XLnRvTG93ZXJDYXNlKCkpe2xldCBpZT1uZXcgRmlsZVJlYWRlcjtpZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2'@;
put 'YXIgd2U9ZmkoZnVuY3Rpb24qKEVlKXtjb25zdCBaZT1oLnRvQnN0cihFZS50YXJnZXQucmVzdWx0KTtsZXQgaXQsZXQ9ITE7Y29uc3QgeXQ9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7'@;
put 'aXQ9RGwucmVhZChaZSx7Li4ueXR9KX1jYXRjaChMcil7aWYoTHIubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKWZvcihldD0hMDtldDspe2NvbnN0IEVpPXlpZWxkIGgucHJvbXB0RXhjZWxQYXNzd29yZCgpO2lmKEVpKXRyeXtpdD1EbC5yZWFkKFplLHsuLi55'@;
put 'dCxwYXNzd29yZDpFaX0pLGV0PSExLGguZmlsZVVubG9ja0Vycm9yPSExfWNhdGNoKExpKXtoLmZpbGVVbmxvY2tFcnJvcj0hMCxMaS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChldD0hMSl9ZWxzZSBldD0hMX1lbHNlIGguZXZlbnRTZXJ2aWNlLnNob3dB'@;
put 'Ym9ydE1vZGFsKG51bGwsTHIsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighaXQpcmV0dXJuIGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkKGguc2hvd1VwbG9hZE1vZGFsPSExKTtsZXQgRXQ9ITEsU3Q9W107Y29uc3QgSnQ9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19f'@;
put 'X18iLC4uLmguaGVhZGVyQXJyYXldO2xldCBubj1KdC5tYXAoTHI9PkxyLnRvTG93ZXJDYXNlKCkpLHZuPW5uLnJlZHVjZSgoTHIsRWkpPT4oTHJbRWldPS0xLExyKSx7fSksTm49W107Y29uc3QgY3I9aC5nZXRSYW5nZUFuZFNoZWV0KGl0KTtpZihTdD1jci5taXNzaW5nSGVhZGVycyxjci5m'@;
put 'b3VuZERhdGEpe0V0PSEwLHZuPWNyLmNzdkFycmF5SGVhZGVyc01hcDtjb25zdCBMcj1pdC5TaGVldHNbY3Iuc2hlZXROYW1lXTtoLmFwcGVuZFVwbG9hZFN0YXRlKGBUYWJsZSBmb3VuZCBvbiBzaGVldCAke2NyLnNoZWV0TmFtZX0gb24gcm93ICR7Y3Iuc3RhcnRSb3d9YCk7bGV0IEVpPSIi'@;
put 'LExpPSIiO2ZvcihsZXQgZnI9Y3Iuc3RhcnRSb3c7ZnI8Y3IuZW5kUm93OysrZnIpe2NvbnN0IGlpPVtdO25uLmZvckVhY2goT249Pntjb25zdCBRbj1EbC51dGlscy5lbmNvZGVfY2VsbCh7cjpjci5yYW5nZVN0YXJ0Um93K2ZyLGM6Y3IucmFuZ2VTdGFydENvbCt2bltPbl19KTtsZXQgTXI7'@;
put 'IiI9PT1FaSYmKEVpPVFuKSxMaT1RbixNcj1McltRbl0/THJbUW5dOnt2OiIifSxpaS5wdXNoKE1yKX0pLGlpLmZpbmQoT249PiIiIT09T24udikmJk5uLnB1c2goaWkpfWguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZvdW5kIixgU2hlZXQ6ICR7Y3Iuc2hlZXROYW1lfVxu'@;
put 'UmFuZ2U6ICR7RWl9OiR7TGl9YCl9ZWxzZSBTdD1jci5taXNzaW5nSGVhZGVycztpZihTdC5sZW5ndGg+MCl7U3Quc29ydChmdW5jdGlvbihMaSxmcil7cmV0dXJuIExpWzFdPT09ZnJbMV0/MDpMaVsxXT5mclsxXT8tMToxfSk7bGV0IExyPVN0Lm1hcChFaT0+RWlbMF0pLnNsaWNlKDAsNSku'@;
put 'am9pbigiXG4iKTtyZXR1cm4gaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxMciksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfWlmKDA9PT1Obi5sZW5ndGh8fDA9PT1Oblsw'@;
put 'XS5sZW5ndGgpcmV0dXJuIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBv'@;
put 'cCgpO2lmKChoLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8aC5kYXRlSGVhZGVycy5sZW5ndGg+MHx8aC50aW1lSGVhZGVycy5sZW5ndGg+MCkmJihObj1oLnVwZGF0ZURhdGVUaW1lQ29scyhKdCxObikpLGgueGxSdWxlcy5sZW5ndGg+MCYmKE5uPWgudXBkYXRlWExSdWxlQ29scyhKdCxO'@;
put 'bikpLCFFdCl7aWYoMD09PVN0Lmxlbmd0aCloLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISIpLHNldFRpbWVvdXQoKCk9PntoLmZpbGVuYW1lPSIifSk7ZWxzZXtTdC5zb3J0KGZ1bmN0aW9uKExpLGZyKXtyZXR1cm4g'@;
put 'TGlbMV09PT1mclsxXT8wOkxpWzFdPmZyWzFdPy0xOjF9KTtsZXQgTHI9U3QubWFwKEVpPT5FaVswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsTHIpfXJldHVybiBoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVy'@;
put 'LnF1ZXVlLnBvcCgpfXtoLmhlYWRlclNob3c9SnQsTm49Tm4ubWFwKGZyPT5mci5tYXAoaWk9PiJuIj09PWlpLnQ/aWkudjppaS53KSksTm49Tm4ubWFwKGZyPT5mci5tYXAoKGlpLGpyKT0+eyFpaSYmMCE9PWlpJiYoaWk9IiIpO2NvbnN0IE9uPWguaGVhZGVyU2hvd1tqcl07cmV0dXJuIm51'@;
put 'bWVyaWMiPT09aC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShPbik/LnR5cGUmJigwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKGlpKSYmIWlpLmluY2x1ZGVzKCIuIikmJihpaT0iLiIraWkpLGlpfSkpLGguZGF0YT1Objtjb25zdCBMcj1Obi5zbGljZSgwLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1p'@;
put 'dF9yb3dzX2xpbWl0KTtsZXQgRWk9RGwudXRpbHMuanNvbl90b19zaGVldChMcix7c2tpcEhlYWRlcjohMH0pLExpPURsLnV0aWxzLnNoZWV0X3RvX2NzdihFaSk7aWYoTGk9SnQuam9pbigiLCIpKyJcbiIrTGksIldMQVRJTjEiPT09aC5lbmNvZGluZyl7bGV0IGZyPVJzZS5kZWNvZGUoT3Nl'@;
put 'LmZyb20oTGkpLCJDUC0xMjUyIiksaWk9bmV3IEJsb2IoW2ZyXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLGpyPWguYmxvYlRvRmlsZShpaSxoLmZpbGVuYW1lKyIuY3N2Iik7aC51cGxvYWRlci5hZGRUb1F1ZXVlKFtqcl0pfWVsc2V7bGV0IGZyPW5ldyBCbG9iKFtMaV0se3R5cGU6ImFw'@;
put 'cGxpY2F0aW9uL2NzdiJ9KSxpaT1oLmJsb2JUb0ZpbGUoZnIsaC5maWxlbmFtZSsiLmNzdiIpO2gudXBsb2FkZXIuYWRkVG9RdWV1ZShbaWldKX1oLmV4Y2VsRmlsZVJlYWR5PSEwfWlmKDA9PT1oLmRhdGEubGVuZ3RoKXJldHVybiBoLnNob3dVcGxvYWRNb2RhbD0hMSxoLnVwbG9hZFByZXZp'@;
put 'ZXc9ITEsaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6ICIpO2guZXhjZWxGaWxlUmVhZHk9ITAsaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3'@;
put 'KCl9KTtyZXR1cm4gZnVuY3Rpb24oRWUpe3JldHVybiB3ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGllLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgaWYoImNzdiI9PT1XLnRvTG93ZXJDYXNlKCkpe2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09'@;
put 'MS8wKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJFeGNlbCBmaWxlcyBvbmx5LiBUbyB1bmxvY2sgQ1NWIHVwbG9hZHMsIHBsZWFzZSBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMu'@;
put 'ZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIHRoaXMudXBsb2FkZXIucXVldWUucG9wKCk7aWYoIldMQVRJTjEiPT09dGhpcy5lbmNvZGluZyl7bGV0IGllPW5ldyBGaWxlUmVhZGVyO2llLm9ubG9hZD13ZT0+e2xldCBFZT1Sc2UuZGVjb2RlKE9zZS5mcm9tKHdlLnRhcmdldC5yZXN1bHQpLCJD'@;
put 'UC0xMjUyIiksWmU9bmV3IEJsb2IoW0VlXSx7dHlwZTpXfSksaXQ9dGhpcy5ibG9iVG9GaWxlKFplLHRoaXMuZmlsZW5hbWUpO3RoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy51cGxvYWRlci5hZGRUb1F1ZXVlKFtpdF0pLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITB9LHRoaXMuZXhjZWxG'@;
put 'aWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLGllLnJlYWRBc0FycmF5QnVmZmVyKGYpLHRoaXMuZ2V0RmlsZSgpfWVsc2UgdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5nZXRGaWxlKCl9ZWxzZSB0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLnVwbG9hZGVy'@;
put 'LnF1ZXVlLnBvcCgpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5nZXRGaWxlKCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1nZXRGaWxlKCl7aWYodGhpcy5jaGVja0ludmFsaWQoKSlyZXR1cm4gdm9pZCB0aGlz'@;
put 'LmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZhbHVlcyBhcmUgcHJlc2VudC4iKTtpZih0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx2b2lkKHRoaXMuc3Vi'@;
put 'bWl0PSExKTt0aGlzLnBrRHVwcz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITA7bGV0IGE9W107Zm9yKGNvbnN0IGQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6ZCxmaWxlTmFtZTpkLm5hbWV9KTt0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSh0aGlzLnVwbG9hZFVybCxh'@;
put 'LHt0YWJsZTp0aGlzLmxpYmRzfSkudGhlbihkPT57aWYodHlwZW9mIGQuc2FzanNBYm9ydD4idSIpe2lmKHR5cGVvZiBkLnNhc3BhcmFtcz4idSIpcmV0dXJuO3t0aGlzLnVwbG9hZExvYWRpbmc9ITE7bGV0IGg9ZC5zYXNwYXJhbXNbMF07dGhpcy5zdWNjZXNzRW5hYmxlPSEwLHRoaXMudGFi'@;
put 'bGVJZD1oLkRTSUQsdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZUlkKX19ZWxzZXtjb25zdCBoPWQsZj1oLnNhc2pzQWJvcnRbMF0uTVNHLF89aC5zYXNqc0Fib3J0WzBdLk1BQzt0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlz'@;
put 'LmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLGYse1NZU1dBUk5JTkdU'@;
put 'RVhUOmguU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmguU1lTRVJST1JURVhULE1BQzpffSl9fSxkPT57dGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVs'@;
put 'ZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsZCl9KX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5'@;
put 'VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2xldCBhPVtdO3RoaXMuZGF0YS5tYXAoaD0+e2xldCBmPXt9O3RoaXMuaGVhZGVyU2hvdy5tYXAoKF8sVCk9PntmW19dPWhbVF19KSxmLl9fX19fREVM'@;
put 'RVRFX19USElTX19SRUNPUkRfX19fX3x8KGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPSJObyIpLGEucHVzaChmKX0pLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5kYXRhU291cmNlPWEs'@;
put 'dGhpcy5ob3RUYWJsZS5kYXRhPWE7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iVmFsaWRhdGluZy1IT1QiLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLG1heFJvd3M6MS8wfSwhMSksZC5yZW5kZXIoKSx0aGlzLmFwcGVuZFVw'@;
put 'bG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxkLnZhbGlkYXRlQ2VsbHMoKCk9Pnt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdF'@;
put 'eGNlbChhKXt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHttYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR9KSxhJiZ0aGlzLmNhbmNlbEVkaXQoKSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBs'@;
put 'b2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLGlzTmFOKHBhcnNlSW50KHRoaXMucm91dGVyLnVybC5zcGxpdCgiLyIpLnBvcCgpfHwi'@;
put 'IikpfHx0aGlzLnF1ZXJ5VGV4dFNhdmVkLmxlbmd0aD4wJiYodGhpcy5xdWVyeVRleHQ9dGhpcy5xdWVyeVRleHRTYXZlZCx0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiKX1wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpe3RoaXMuZGlzY2FyZFBlbmRpbmdFeGNlbCgpLHRoaXMuY29udmVydFRvQ29y'@;
put 'cmVjdFR5cGVzKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5lZGl0VGFibGUoITApfWFwcGVuZFVwbG9hZFN0YXRlKGEsZD0hMSl7dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QmJihkP3RoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3Qu'@;
put 'cmVwbGFjZUxhc3RTdGF0ZShhKTp0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LmFwcGVuZFN0YXRlKGEpKX1maW5kVmFsaWRIZWFkZXJzKGEsZCxoLGYpe2xldCBfPSExLFQ9W10sVz0wO2Zvcig7VzxhLmxlbmd0aDspe2lmKCFfJiYtMSE9PWQuaW5kZXhPZihhW1ddKSl7bGV0IGll'@;
put 'LHBlPTAsd2U9MCxFZT0wLFplPVtdLGl0PSExO2ZvcihsZXQgRXQ9VztFdDxhLmxlbmd0aDtFdCsrKXtpZigiIj09PWFbRXRdfHwtMSE9PVplLmluZGV4T2YoYVtFdF0pJiZ0aGlzLmlzQ29sSGVhZGVyKGFbRXRdKSl7IiI9PT1hW0V0XSYmKGl0PSEwKSxpZT1FdDticmVha31aZS5wdXNoKGFb'@;
put 'RXRdKX1sZXQgZXQ9W107dm9pZCAwIT09aWU/KGV0PWEuc2xpY2UoVyxpZSksRWU9Vyx3ZT1pZSxpdD8ocGU9VyxXPWllKToocGU9VyxXPWllLTEpKTooZXQ9YS5zbGljZShXKSxwZT1XLEVlPVcsd2U9YS5sZW5ndGgsVz1hLmxlbmd0aCk7bGV0IHl0PSEwO2lmKGQuZm9yRWFjaChFdD0+ey0x'@;
put 'PT09ZXQuaW5kZXhPZihFdCkmJih5dD0hMSl9KSx5dCl7Xz0hMDtsZXQgU3Q9ZC5yZWR1Y2UoZnVuY3Rpb24obm4sdm4pe3JldHVybiBublt2bl09LTEsbm59LHt9KSxKdD1hLnNsaWNlKHBlLHdlKTtyZXR1cm4gZC5mb3JFYWNoKG5uPT57U3Rbbm5dPUp0LmluZGV4T2Yobm4pK3BlfSksWyEw'@;
put 'LFN0XX17bGV0IEV0PXFOZShldCxkKTtULnB1c2goWyI8Yj5UQUIoIitmKyIpPC9iPiAtICIrRXRbMV0uam9pbigiLCIpKyIgKCBtaXNzaW5nICIrRXRbMF0uam9pbigiLCIpKyIgKSIsRXRbMV0ubGVuZ3RoXSl9fVcrK31yZXR1cm5bITEsVF19aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFk'@;
put 'ZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0'@;
put 'aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX11cGRhdGVEYXRlVGltZUNvbHMoYSxkKXtpZih0aGlzLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYp'@;
put 'KX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107aWYocXooVC52KSl7Y29uc3QgVz1HeihOdW1iZXIoVC52KSk7VC52PVcuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoVy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrVy5nZXREYXRlKCkpLnNsaWNl'@;
put 'KC0yKX1lbHNlIGlmKFQmJlQudiYmLTE9PT1ULnYudG9TdHJpbmcoKS5pbmRleE9mKCI6Iikpe2NvbnN0IFc9bmV3IERhdGUoVC52KTsiSW52YWxpZCBEYXRlIiE9PVcudG9VVENTdHJpbmcoKSYmKFQudj1XeihXKSl9ZltfXT1UfSl9KX1pZih0aGlzLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXts'@;
put 'ZXQgaD1bXTt0aGlzLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107aWYocXooVC52KXx8SG9lKFQudil8fFQudi5pbmNsdWRlcygiRS0iKSl7Y29u'@;
put 'c3QgVz1HeihOdW1iZXIoVC52KSk7VC52PUZvZShXKX1mW19dPVR9KX0pfWlmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWEuaW5kZXhPZihmKSYmaC5wdXNoKGEuaW5kZXhPZihmKSl9KSxkLmZv'@;
put 'ckVhY2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW19dO2lmKHF6KFQudil8fEhvZShULnYpKXtsZXQgVz1HeihOdW1iZXIoVC52KSk7VC52PVd6KFcpKyIgIitGb2UoVyl9ZWxzZXtpZigtMT09PVQudi5pbmRleE9mKCIgIikmJi0xIT09VC52LmluZGV4T2YoIjoiKSl7bGV0IGllPVQu'@;
put 'di5zdWJzdHJpbmcoMCxULnYuaW5kZXhPZigiOiIpKTtpZT1pZSsiICIrVC52LnN1YnN0cmluZyhULnYuaW5kZXhPZigiOiIpKzEpLFQudj1pZX1sZXQgVz1uZXcgRGF0ZShULnYpOyJJbnZhbGlkIERhdGUiIT09Vy50b1VUQ1N0cmluZygpJiYoVC52PVd6KFcpKyIgIisoYz0+e2xldCBsPSgi'@;
put 'MCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKFcpKX1mW19dPVR9KX0pfXJldHVybiBkfXVwZGF0ZVhMUnVsZUNvbHMoYSxkKXtpZih0'@;
put 'aGlzLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGg9W107dGhpcy54bFJ1bGVzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9YS5pbmRleE9mKGYuWExfQ09MVU1OKSxoLnB1c2goZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0'@;
put 'IFQ9ZltfLmluZGV4XTsiRk9STVVMQSI9PT1fLlhMX1JVTEUmJiJmImluIFQmJigibiI9PT1ULnQ/VC52PSI9IitULmY6VC53PSI9IitULmYpLGZbX109VH0pfSl9cmV0dXJuIGR9YmxvYlRvRmlsZShhLGQpe2NvbnN0IGg9YTtyZXR1cm4gaC5sYXN0TW9kaWZpZWREYXRlPW5ldyBEYXRlLGgu'@;
put 'bmFtZT1kLGh9dG9Cc3RyKGEpe2xldCBkPW5ldyBVaW50OEFycmF5KGEpLGg9IiIsZj1kLmJ5dGVMZW5ndGg7Zm9yKGxldCBfPTA7XzxmO18rKyloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRbX10pO3JldHVybiBofXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbioo'@;
put 'KXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0'@;
put 'dXJuKCJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0pJiYoR24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEduLmVkaXRvci5maWx0ZXIucXVlcnk9W10sR24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsi'@;
put 'L2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyl7Y29uc3QgVD1mW19dLmVsZW1lbnRzO2Q9VC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIG51bGw9PT1XLnZhcmlhYmxlfSksZC5sZW5ndGgmJmgu'@;
put 'cHVzaChUKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119'@;
put 'O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKFQ9Pntjb25zdCBXPXtmaWx0ZXJDbGF1c2VzOltdfTtULmVsZW1lbnRzLmZvckVhY2goaWU9PntXLmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGllKSl9KSxXLmNsYXVzZUxvZ2ljPVQuY2xhdXNlTG9naWMs'@;
put 'Zi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFcpKX0pO2NvbnN0IF89YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxfKS50aGVuKFQ9PnthLnF1ZXJ5'@;
put 'RmlsdGVyPXtpZDpULnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6VC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5uYXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5h'@;
put 'dmlnYXRlKFsiL2VkaXRvci8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5maWx0ZXI9ITF9KS5jYXRjaChUPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAs'@;
put 'YS5zdWJtaXRMb2FkaW5nPSExLGEucXVlcnlFcnJNZXNzYWdlPWZ9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxl'@;
put 'cyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShhLGQpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZj1oLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksXz1mLmdldFNvcnRDb25maWcoKSxU'@;
put 'PUFycmF5LmlzQXJyYXkoXyk/XzpbX107c2V0VGltZW91dCgoKT0+e2F8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhpcy5ob3RUYWJsZS5y'@;
put 'ZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2ZvcihsZXQgVyBvZiBUKWYuc29ydChXKTt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1'@;
put 'ZXMoKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVzKGEpe2ZvcihsZXQgZCBvZiBhKWZvcihsZXQgaCBpbiBkKXtsZXQgZj10aGlzLmNvbHMuZmluZChfPT5fLk5BTUU9PT1oKTtmJiYiIiE9PWRbaF0mJiJudW0iPT09Zi5UWVBFJiYhZi5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERU'@;
put 'WVBFLmluY2x1ZGVzKCJEQVRFIikmJihkW2hdPXBhcnNlSW50KGRbaF0pKX19Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W107Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPWEuZ2V0UGx1'@;
put 'Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxoPWQuZ2V0U29ydENvbmZpZygpLGY9QXJyYXkuaXNBcnJheShoKT9oOltoXTt0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VVbmNoYW5n'@;
put 'ZWQpKSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITAsYS51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9k'@;
put 'aWZlZFJvd3NJbmRleGVzKTtmb3IobGV0IF8gb2YgZilkLnNvcnQoXyk7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0'@;
put 'aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhp'@;
put 'cy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZD10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2EuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGQsMSksYS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxh'@;
put 'LnNlbGVjdENlbGwodGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLDApLGEucmVuZGVyKCksdGhpcy5kYXRhU291cmNlW2RdJiYodGhpcy5kYXRhU291cmNlW2RdLm5vTGlua09wdGlvbj0hMCksdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9KX1j'@;
put 'YW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhp'@;
put 'cy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAw'@;
put 'OmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZp'@;
put 'ZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGE9MCxkPTAsaD0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtd'@;
put 'O2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2xldCBfPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ZdKTtpZigiWWVzIj09PV8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fKXRoaXMuZGF0YU1vZGlmaWVkLnB1c2go'@;
put 'XyksZCsrO2Vsc2V7bGV0IFQ9dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLmZpbmQoVz0+e2ZvcihsZXQgaWUgb2YgdGhpcy5oZWFkZXJQa3MpaWYoV1tpZV0hPT1fW2llXSlyZXR1cm4hMTtyZXR1cm4hMH0pO1Q/SlNPTi5zdHJpbmdpZnkoXykhPT1KU09OLnN0cmluZ2lmeShUKSYmKHRoaXMu'@;
put 'ZGF0YU1vZGlmaWVkLnB1c2goXyksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKF8pLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksaCsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRl'@;
put 'ZDpkLHJvd3NBZGRlZDpofX12YWxpZGF0ZVByaW1hcnlLZXlzKCl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPWEuZ2V0RGF0YSgpO3RoaXMucGtGaWVsZHM9W107Zm9yKGxldCBUPTA7VDxkLmxlbmd0aDtUKyspe2xldCBXPSIiO2ZvcihsZXQgaWU9MTtpZTx0aGlzLnJlYWRPbmx5'@;
put 'RmllbGRzKzE7aWUrKylXPVcrInwiK2RbVF1baWVdO3RoaXMucGtGaWVsZHMucHVzaChXKX1sZXQgXyxoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMucGtGaWVsZHMubGVuZ3RoO1QrKylmb3IobGV0IFc9MDtXPHRoaXMucGtGaWVsZHMubGVuZ3RoO1cr'@;
put 'Kyl0aGlzLnBrRmllbGRzW1RdPT09dGhpcy5wa0ZpZWxkc1tXXSYmVyE9PVQmJmgucHVzaChXKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgVD1mO1Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VCsrKWZvcihsZXQgVz1mO1c8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VysrKVQ8VyYm'@;
put 'dGhpcy5wa0ZpZWxkc1tUXT09PXRoaXMucGtGaWVsZHNbV10mJmgucHVzaChXKTtmb3IobGV0IFQ9MDtUPGgubGVuZ3RoO1QrKylmb3IobGV0IFc9MTtXPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtXKyspXz1hLmdldENlbGxNZXRhKGhbVF0sVyksXy52YWxpZD0hMSxfLmR1cEtleT0hMCxhLnJl'@;
put 'bmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGguc29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtmb3IobGV0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgXz1mLnZh'@;
put 'bHVlcy5tYXAoVD0+VFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2guYmF0Y2goKCk9Pntjb25zdCBUPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLFc9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShULmRhdGF8fCIiKTtsZXQgaWU7VyYmKGllPXRoaXMuZGNWYWxp'@;
put 'ZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoVykpLGllfHwoaWU9W10pO2NvbnN0IHBlPVsuLi5uZXcgU2V0KFsuLi5pZSwuLi5fXSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpwZX0pLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5j'@;
put 'b2wsInNvdXJjZSIscGUpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShmLnJv'@;
put 'dyxmLmNvbCwic3RyaWN0IixmLnN0cmljdCksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3Vz'@;
put 'dG9tIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGYsdm9pZCAwLGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7aWYoYSl7ZHx8KGQ9YS5yb3cp'@;
put 'O2NvbnN0IFQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxULGgsZil9ZWxzZSBmb3IobGV0IFQgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgVz10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlD'@;
put 'ZWxsVmFsdWUoVCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoVCxULnJvdyxXLGgsZil9fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsaCxmPSExLF8pe2NvbnN0IFQ9dGhpcy5ob3RJbnN0YW5jZTtsZXQgVz1bXTtmb3IobGV0IGllIG9mIGgpVy5pbmRleE9mKGllLkVYVFJB'@;
put 'X0NPTF9OQU1FKTwwJiZXLnB1c2goaWUuRVhUUkFfQ09MX05BTUUpO2ZvcihsZXQgaWUgb2YgVyl7Y29uc3QgcGU9aC5maWx0ZXIoU3Q9PlN0LkVYVFJBX0NPTF9OQU1FPT09aWUpO2xldCB3ZT1wZS5tYXAoU3Q9PiJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5S'@;
put 'QVdfVkFMVUVfTlVNKTtjb25zdCBFZT1ULnByb3BUb0NvbChpZSk7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoU3Q9PlN0LnJvdz09PWQmJlN0LmNvbD09PUVlKXx8dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2go'@;
put 'e3JvdzpkLGNvbDpFZSxhY3RpdmU6ITF9KSxULnNldENlbGxNZXRhKGQsRWUsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksVC5zZXRDZWxsTWV0YShkLEVlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksVC5zZXRDZWxsTWV0YShkLEVlLCJzdHJpY3QiLGEuc3RyaWN0KSxULnNl'@;
put 'dENlbGxNZXRhKGQsRWUsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoRWUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IGl0'@;
put 'PVQuZ2V0Q2VsbE1ldGEoZCxFZSksZXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShpdC5kYXRhfHwiIik7bGV0IHl0O2V0JiYoeXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShldCkpLHl0fHwoeXQ9W10pLCJudW1lcmljIj09PWV0Py50eXBlPyh5dD10aGlzLmhl'@;
put 'bHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJudW1iZXIiKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJudW1iZXIiKSk6KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsInN0cmluZyIpLHdlPXRoaXMuaGVs'@;
put 'cGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsInN0cmluZyIpKTtjb25zdCBFdD1bLi4ubmV3IFNldChbLi4ueXQsLi4ud2VdKV07aWYoVC5zZXRDZWxsTWV0YShkLEVlLCJzb3VyY2UiLEV0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKEVlLHtz'@;
put 'b3VyY2U6RXR9KSxmKXtpZihfJiZfIT09ZClyZXR1cm47Y29uc3QgU3Q9cGUuZmluZChKdD0+MT09PUp0LkZPUkNFX0ZMQUcpO1N0JiZzZXRUaW1lb3V0KCgpPT57VC5zZXREYXRhQXRDZWxsKGQsRWUsIkMiPT09U3QuRElTUExBWV9UWVBFP1N0LlJBV19WQUxVRV9DSEFSOlN0LlJBV19WQUxV'@;
put 'RV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PWQmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtpZV09IkMiPT09U3QuRElTUExBWV9UWVBFP1N0LlJBV19WQUxVRV9DSEFSOlN0LlJB'@;
put 'V19WQUxVRV9OVU0pfSl9fX1nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEsZCl7Y29uc3QgZj10aGlzLmhvdEluc3RhbmNlLmdldERhdGFBdENlbGwoZHx8YS5yb3csYS5jb2wpLF89KGEudmFsdWVzLmZpbmQocGU9PnBlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVF'@;
put 'XT09PWYpfHxbXSlbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5ESVNQTEFZX0lOREVYXSxUPWEuZXh0ZW5kZWRfdmFsdWVzPy5maWx0ZXIocGU9PnBlWzBdPT09XyksVz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcyksaWU9'@;
put 'W107Zm9yKGxldCBwZSBvZiBUfHxbXSl7bGV0IHdlPXt9O2ZvcihsZXQgRWUgb2YgT2JqZWN0LmtleXMoVykpd2VbRWVdPXBlW1dbRWVdXTtpZS5wdXNoKHdlKX1yZXR1cm4gaWV9Y2hlY2tTYXZlKCl7aWYodGhpcy5nZXRSb3dzU3VibWl0dGluZ0NvdW50KCksMD09PXRoaXMucm93c0NoYW5n'@;
put 'ZWQucm93c0FkZGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQpcmV0dXJuIHRoaXMuYmFkRWRpdFRpdGxlPSJObyBjaGFuZ2VzIHRvIHN1Ym1pdCIsdGhpcy5iYWRFZGl0Q2F1c2U9IlBsZWFzZSBtb2RpZnkgc29t'@;
put 'ZSB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4iLHZvaWQodGhpcy5iYWRFZGl0PSEwKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IobGV0IGg9MDtoPHRoaXMu'@;
put 'ZGF0YVNvdXJjZS5sZW5ndGg7aCsrKWRlbGV0ZSB0aGlzLmRhdGFTb3VyY2VbaF0ubm9MaW5rT3B0aW9uO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlD'@;
put 'b2xXaWR0aDpmdW5jdGlvbihoLGYpe3JldHVybiBoPjUwMD81MDA6aH19LCExKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSxjLmNudD0wLGMubm9uUGtDbnQ9MDtsZXQgZD1hLmdldERhdGEoKTtpZihkLmxlbmd0aD4xJiZhLmlzRW1wdHlSb3coZC5sZW5ndGgtMSkmJmEuYWx0'@;
put 'ZXIoInJlbW92ZV9yb3ciLGQubGVuZ3RoLTEpLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRoaXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJtaXQoKTt0aGlzLnBrRHVwcz0h'@;
put 'MSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6KHRoaXMuc3VibWl0PSEwLHRo'@;
put 'aXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvcm1GaWVsZHNfOCIpLmZvY3VzKCl9KSl9KX1zYXZlVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoZC5ob3RJbnN0YW5jZS5nZXREYXRhKCksYT0o'@;
put 'YT1hLmZpbHRlcihfPT4hIWQuZGF0YU1vZGlmaWVkLmZpbmQoVz0+e2ZvcihsZXQgaWUgb2YgZC5oZWFkZXJQa3MpaWYoV1tpZV0hPT1fW2llXSlyZXR1cm4hMTtyZXR1cm4hMH0pKSkubWFwKF89PntsZXQgVD1fLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRl'@;
put 'IF8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLF8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPVQsT2JqZWN0LmtleXMoXykubWFwKFc9PnsibnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKFcpPy50eXBlJiYiLiI9PT1fW1ddJiYoX1tXXT1udWxsKX0pLF99'@;
put 'KSxkLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRlZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lk'@;
put 'KGQuc3VibWl0PSExKTtpZihkLnZhbGlkYXRpb25Eb25lPTAsZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZjLm5vblBrQ250PDEpe2Quc2F2ZUxvYWRpbmc9ITAsZC5kaXNhYmxlU3VibWl0PSExLGQuc3VibWl0PSEwO2xldCBfPXtB'@;
put 'Q1RJT046IkxPQUQifTtpZihkLm1lc3NhZ2U9ZC5tZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIiksXy5NRVNTQUdFPWQubWVzc2FnZSxfLkxJQkRTPWQubGliZHMsZC5jb2xzKXtjb25zdCBUPWEuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7aWYoeWll'@;
put 'bGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoXyxULCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsZC4kZGF0YUZvcm1hdHMpLnRoZW4oaWU9PntpZih0eXBlb2YgaWUuc2FzcGFyYW1zPCJ1IilyZXR1cm4gZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdl'@;
put 'LyIraWUuc2FzcGFyYW1zWzBdLkRTSUQpLCEwO2xldCBwZT0iU3VibWl0IHJlcXVlc3QgZmFpbGVkIjtpZSYmKHBlKz1gXG4keyJzdHJpbmciPT10eXBlb2YgaWU/aWU6SlNPTi5zdHJpbmdpZnkoaWUpfWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0'@;
put 'YSIscGUsbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChpZT0+e2NvbnNvbGUubG9nKCJlcnIiLGllKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITAsZC5zdWJtaXQ9ITE7bGV0IHBlPSJzdHJpbmciPT10eXBlb2YgaWU/aWU6SlNPTi5zdHJpbmdpZnkoaWUpO3Jl'@;
put 'dHVybiBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJtaXQgcmVxdWVzdCBmYWlsZWRcbiR7cGV9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVybn19Yy5jbnQ+PTE/KGQucGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0h'@;
put 'MSxjLm5vblBrQ250Pj0xPyhkLm5vUGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNhbmNlbFN1Ym1pdCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9dmFsaWRhdG9yUnVsZVNvdXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8u'@;
put 'Z2V0UnVsZShhKX1jaGVja0ludmFsaWQoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0LmZpcnN0LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEludmFsaWQiKS5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVy'@;
put 'bCgiLyIpfWNsb3NlUmVjb3JkRWRpdChhKXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRh'@;
put 'dGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpKX1jb25maXJtUmVjb3JkRWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVk'@;
put 'aXRSZWNvcmRJbmRleDthJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVtbkhlYWRlci5tYXAoZj0+e2NvbnN0IF89dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxUPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbZl0/LnR5cGUsVz0oMCx0My5pc1Nw'@;
put 'ZWNpYWxNaXNzaW5nKShfKTtUJiYhaXNOYU4oXykmJiFXJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXT0xKl8pfSksdGhpcy5kYXRhU291cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RUYWJsZS5kYXRhW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJ'@;
put 'bnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJl'@;
put 'bnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCsxLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9b25QcmV2aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVk'@;
put 'aXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg8PTA/dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleC0xLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJ'@;
put 'bmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xpY2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQiKTp0aGlzLmFkZEVkaXROZXdSZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5h'@;
put 'ZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKX0sMWUzKX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRSZWNvcmQoYSxkLGgpe2lmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29y'@;
put 'ZCl0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBpZighKHZvaWQgMD09PWR8fGQ8MHx8dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKSl7aWYodGhpcy5yZWNvcmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RU'@;
put 'YWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3IpLGgpdGhpcy5wcmV2RGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25l'@;
put 'KHRoaXMuZGF0YVNvdXJjZSksdGhpcy5wcmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhQXRSb3coZCkpO2ZvcihsZXQgXyBvZiBmKWlmKF8pe2NvbnN0IFQ9Xy5wcm9wPy50b1N0'@;
put 'cmluZygpO2RlbGV0ZSBfLnByb3AsZGVsZXRlIF8uZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKF8uY29sLHsuLi5fLGRhdGE6VH0pfX10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9ZCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVy'@;
put 'U2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2RdKX19dG9nZ2xlSG90UGx1Z2luKGEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2guYmF0Y2goKCk9PntsZXQgZj1oLmdldFBsdWdpbihhKTtmPyhzZXRUaW1lb3V0KCgpPT57ZD9mLmVuYWJsZVBsdWdpbigpOmYuZGlzYWJs'@;
put 'ZVBsdWdpbigpfSwxMDApLGgucmVuZGVyKCkpOmNvbnNvbGUud2FybigiVG9nZ2xlIEhvdCBQbHVnaW4gZmFpbGVkIC0gUGx1Z2luIG5hbWVkOiAiK2ErIiAtIGNvdWxkIG5vdCBiZSBmb3VuZC4iKX0pfWR5bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCl7cmV0dXJuISF0aGlzLmRp'@;
put 'c2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChmPT5mLnJvdz09PWEmJmYuY29sPT09ZCYmIWYuYWN0aXZlKX1keW5hbWljQ2VsbFZhbGlkYXRpb24oYSxkKXtpZih0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCkpcmV0dXJuO2NvbnN0IGg9dGhp'@;
put 'cy5ob3RJbnN0YW5jZTtpZihoLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpcmV0dXJuO2NvbnN0IF89aC5nZXREYXRhQXRDZWxsKGEsZCksVD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVthXSksVz1PYmplY3Qua2V5cyhUKVtkXSxpZT10aGlzLmhlbHBl'@;
put 'clNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2goVCxbVywibm9MaW5rT3B0aW9uIl0sITEpLHBlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHdlPT53ZS5oYXNoPT09aWUpO2lmKHBlPi0xKXtsZXQgd2U9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtwZV0udmFsdWVzLm1h'@;
put 'cChpdD0+aXRbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCBFZT0oaC5nZXRDZWxsTWV0YShhLGQpLnNvdXJjZXx8W10pLmxlbmd0aDwxLFplPSIgIiE9PV87aC5iYXRjaCgoKT0+e2NvbnN0IGl0PWguZ2V0Q2VsbE1ldGEoYSxkKSxldD10aGlzLmRjVmFsaWRh'@;
put 'dG9yPy5nZXRSdWxlKGl0LmRhdGF8fCIiKTtsZXQgeXQ7ZXQmJih5dD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKGV0KSkseXR8fCh5dD1bXSksIm51bWVyaWMiPT09ZXQ/LnR5cGU/KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsIm51'@;
put 'bWJlciIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsIm51bWJlciIpKTooeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwic3RyaW5nIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwic3Ry'@;
put 'aW5nIikpO2NvbnN0IEV0PVsuLi5uZXcgU2V0KFsuLi55dCwuLi53ZV0pXTtpZihoLnNldENlbGxNZXRhKGEsZCwic291cmNlIixFdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtzb3VyY2U6RXR9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3Bl'@;
put 'XS52YWx1ZXMubGVuZ3RoPjApe2NvbnN0IFN0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcGVdLnN0cmljdDtoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0'@;
put 'Q2VsbE1ldGEoYSxkLCJzdHJpY3QiLFN0KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpT'@;
put 'dCxmaWx0ZXI6ITF9KX10aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3BlXSxhLEVlJiZaZSksaC5yZW5kZXIoKX0pfWlmKHBlPDApe2NvbnN0IHdlPXtTQVNDb250cm9sVGFibGU6W3tsaWJkczp0aGlzLmxpYmRzLHZhcmlh'@;
put 'YmxlX25tOld9XSxzb3VyY2Vfcm93OltUXX0sRWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKFcpLmZpbmQoWmU9PiJTT0ZUU0VMRUNUX0hPT0siPT09WmUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PVplLlJVTEVfVFlQRSk7RWUmJih0aGlzLmNlbGxWYWxpZGF0aW9u'@;
put 'U291cmNlLnB1c2goe3JvdzphLGNvbDpkLHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDppZSxjb3VudDp0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aCsxfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixYTmUpLHRoaXMu'@;
put 'Y3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5wdXNoKGQpLGgucmVuZGVyKCksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0ZHluYW1pY2NvbHZhbHMiLHdlLHZvaWQgMCx7c3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDohMCxzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDohMH0p'@;
put 'LnRoZW4oWmU9PntpZihaZS5keW5hbWljX3ZhbHVlcy5tYXAoZXQ9PmV0W3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IGV0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHl0PT55dC5oYXNoPT09aWUpO2V0Pi0xJiYodGhp'@;
put 'cy5jZWxsVmFsaWRhdGlvblNvdXJjZVtldF09ey4uLnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZXRdLHJvdzphLGNvbDpkLHZhbHVlczpaZS5keW5hbWljX3ZhbHVlcyxleHRlbmRlZF92YWx1ZXM6WmUuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRhKGEsZCwicmVu'@;
put 'ZGVyZXIiLCR6KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSxoLmJhdGNoKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMucmVTZXRDZWxs'@;
put 'VmFsaWRhdGlvblZhbHVlcyghMCxhKSxoLnJlbmRlcigpLGgudmFsaWRhdGVSb3dzKFthXSl9LDEwMCl9KX1pZihoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCR6KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5n'@;
put 'cy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCBldD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnJlZHVjZSgoRXQsU3QpPT5FdC5jb3VudDxT'@;
put 'dC5jb3VudD9FdDpTdCkseXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKGV0KTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZSh5dCwxKX19KS5jYXRjaChaZT0+e2NvbnN0IGl0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGV0PT5ldC5oYXNo'@;
put 'PT09aWUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKGl0LDEpLGguYmF0Y2goKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLEtOZSksaC5yZW5kZXIoKX0pLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29y'@;
put 'ZExvYWRpbmdzLmluZGV4T2YoZCksMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5wdXNoKGQpLHNldFRpbWVvdXQoKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCR6KSxoLnJlbmRlcigpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNlKHRoaXMuY3Vy'@;
put 'cmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLFplKX0pKX19Y2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKXt0aGlzLnpl'@;
put 'cm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0uaW5jbHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVhZGVyUGtzWzBdXSkmJih0aGlzLnplcm9GaWx0ZXJSb3dzPSEwKX1vblJl'@;
put 'Y29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9ZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhLGQsaCl7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRl'@;
put 'S2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksXz10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQoVD0+VC5oYXNoPT09ZiYmZD09PVQuY29sKTtpZihfJiZfLmV4dGVuZGVkX3ZhbHVlcyYmXy5leHRlbmRlZF92YWx1ZXMubGVuZ3RoPjApe2Nv'@;
put 'bnN0IFQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKF8saCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoXyxoLFQsITApfX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMucm93c0NoYW5n'@;
put 'ZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1zZXRDZWxsRmlsdGVyKGEpe2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLGg9ZCYmZFswXTtpZihoKXtjb25zdCBmPWhbMF0sVD1oWzFdO2lm'@;
put 'KGY9PT1oWzJdJiZUPT09aFszXSl7Y29uc3QgaWU9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShmLFQpO2llJiZpZS5maWx0ZXI9PT0hYSYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShmLFQsImZpbHRlciIsYSl9fX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1'@;
put 'bmN0aW9uKigpe2EubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShoPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWh9KSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoaD0+e2gubGliZHM9PT1hLmxpYmRzJiYoYS53aGVyZVN0cmluZz1o'@;
put 'LnN0cmluZyxhLmNsYXVzZXM9aC5vYmopfSk7bGV0IGQ9e307dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwi'@;
put 'ZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JLPXBhcnNlSW50KGEuZmls'@;
put 'dGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihHbi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sR24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBhLnNhc1N0b3JlU2Vydmlj'@;
put 'ZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9aW5pdFNldHVw'@;
put 'KGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGE7Y29uc3QgZD10'@;
put 'aGlzLmRzbWV0YS5maW5kKGllPT4iTk9URVMiPT09aWUuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGllPT4iRERfTE9OR0RFU0MiPT09aWUuTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKGllPT4iRERfU0hPUlRERVNDIj09PWllLk5BTUUpO3RoaXMuZHNOb3RlPWQmJmQuVkFMVUU/ZC5WQUxV'@;
put 'RTpoJiZoLlZBTFVFP2guVkFMVUU6ZiYmZi5WQUxVRT9mLlZBTFVFOiIiO2NvbnN0IF89dGhpcy5ob3RJbnN0YW5jZSxUPWEuZGF0YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFkZXJBcnJheT0oYz0+e2NvbnN0IGw9W107Zm9yKGxldCBhIG9mIGMpIl9fX19fREVMRVRFX19USElT'@;
put 'X19SRUNPUkRfX19fXyIhPT1hLk5BTUUmJmwucHVzaChhLk5BTUUpO3JldHVybiBsfSkodGhpcy5jb2xzKSksVC5mb3JFYWNoKGllPT57dGhpcy5hcHByb3ZlcnMucHVzaChpZS5QRVJTT05OQU1FKX0pLHRoaXMudGFibGVUcnVlPSEwLHRoaXMubGliZHM9YS5saWJkcyx0aGlzLmhvdFRhYmxl'@;
put 'LmRhdGE9YS5kYXRhLnNhc2RhdGEsdGhpcy5oZWFkZXJDb2x1bW5zPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSEhYS5k'@;
put 'YXRhLnNhc3BhcmFtc1swXS5DTFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRpdFJlY29yZEJ1dHRvbjohMCxyZW1vdmVBZGRSZWNvcmRCdXR0b246ITB9KSx0aGlzLmNoZWNrRW1wdHlS'@;
put 'b3dXaGVuRmlsdGVyKCksLTEhPT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0i'@;
put 'RGVsZXRlPyIpLHRoaXMuaGVhZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFt'@;
put 'c1swXS5UTVZBUlMmJih0aGlzLnRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAi'@;
put 'KSksYS5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRvcj1uZXcgWU5lKGEuZGF0YS5zYXNwYXJhbXNbMF0sYS5kYXRhLiRzYXNkYXRhLHRoaXMuY29scyxhLmRh'@;
put 'dGEuZHFydWxlcyxhLmRhdGEuZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9YS5kYXRhLnNhc2RhdGEsdGhpcy4kZGF0YUZvcm1hdHM9YS5kYXRhLiRzYXNkYXRhO2ZvcihsZXQgaWU9MDtpZTx0aGlzLmhlYWRl'@;
put 'ckNvbHVtbnMubGVuZ3RoO2llKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25baWVdLmRhdGFdPVdOZSh0aGlzLmNlbGxWYWxpZGF0aW9uW2llXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25baWVdKTt0aGlzLmNoZWNrUm93TGltaXQoKSxfLnVwZGF0ZVNldHRpbmdz'@;
put 'KHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGZvcm11bGFzOnRoaXMuaG90VGFibGUuZm9ybXVsYXMsc3RyZXRjaEg6ImFsbCIscmVhZE9ubHk6'@;
put 'dGhpcy5ob3RUYWJsZS5yZWFkT25seSxoaWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1bW5zKCl9LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGllLHBlKXtyZXR1cm4gMD09PXBlPzYwOmllPjUwMD81MDA6aWV9LGNvcHlQ'@;
put 'YXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxyb3dIZWFkZXJz'@;
put 'OmllPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyNCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR8fDEvMCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25s'@;
put 'eTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooaWUscGUsd2UsRWUsWmUsaXQpPT57Y29uc3QgZXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi'@;
put 'c3BhbiIpO2xldCB5dCxFdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgU3Q9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1TdD9TdFswXVsxXTotMSxubj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoSnQpO3l0PXRoaXMuJGRhdGFG'@;
put 'b3JtYXRzPy52YXJzW25uXSx5dCYmKEV0PWBMQUJFTDogJHt5dD8ubGFiZWx9PGJyPlRZUEU6ICR7eXQ/LnR5cGV9PGJyPkxFTkdUSDogJHt5dD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7eXQ/LmZvcm1hdH1gKX1yZXR1cm4gZXQuaW5uZXJIVE1MPUV0LGV0fX19fSxkYXRhU2NoZW1hOnRoaXMu'@;
put 'aG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihpZSxwZSk9Pntjb25zdCB3ZT10aGlzLmNvbHVtbkhlYWRlcltpZV0sRWU9d2UmJnRoaXMu'@;
put 'aXNDb2xQayh3ZSksWmU9d2UmJnRoaXMuaXNSZWFkb25seUNvbCh3ZSk7RWUmJnBlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLFplJiYhRWUmJnBlLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1pZSYmcGUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1'@;
put 'bW5IZWFkZXJTdHlsZSIpfSxhZnRlckdldENlbGxNZXRhOihpZSxwZSx3ZSk9PntwZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHBlKSYmKHdlLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRN'@;
put 'ZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxk'@;
put 'cz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2xldCBXPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO1cmJlcuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixpZT0+e3RoaXMudXBsb2FkUHJldmlld3x8dGhpcy5ob3RDbGlja2VkKCksc2V0VGltZW91dCgoKT0+'@;
put 'e2xldCBwZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO3BlJiZwZS5jbGljaygpfSwxMDApfSksXy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKGllLHBlLHdlLEVlLFplLGl0KT0+e2llPT09d2UmJnBlPT09RWUmJiExPT09dGhpcy5ob3RU'@;
put 'YWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24oaWUscGUpfSksXy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksXy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9'@;
put 'KSxfLmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoaWUscGUpPT57aWYoImVkaXQiPT09cGUpe2NvbnN0IHdlPXRoaXMuaG90SW5zdGFuY2UsRWU9aWVbMF1bMF0sWmU9aWVbMF1bMV0saXQ9d2UucHJvcFRvQ29sKFplKSxldD13ZS5nZXRDZWxsTWV0YShFZSxpdCk7ZXQmJiExPT09ZXQuZmlsdGVy'@;
put 'JiZ3ZS5zZXRDZWxsTWV0YShFZSxpdCwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKFplLGl0LEVlKX19KSxfLmFkZEhvb2soImFmdGVyUmVuZGVyIixpZT0+e3RoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIp'@;
put 'fSksXy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGllLHBlKT0+e2lmKGllPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2xldCB3ZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57d2UmJih3ZS5zY3JvbGxUb3A9d2Uuc2Nyb2xsSGVpZ2h0KX0p'@;
put 'fX0pLF8uYWRkSG9vaygiYmVmb3JlUGFzdGUiLChpZSxwZSk9Pntjb25zdCB3ZT1wZVswXS5zdGFydENvbDtpZVswXT1pZVswXS5tYXAoKEVlLFplKT0+e2NvbnN0IGl0PXRoaXMuY29sdW1uSGVhZGVyW3dlK1plXSxldD0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2l0XT8udHlw'@;
put 'ZSx5dD0oMCx0My5pc1NwZWNpYWxNaXNzaW5nKShFZSk7cmV0dXJuIGV0JiYhaXNOYU4oRWUpJiYheXQmJihFZSo9MSksRWV9KX0pLF8uYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSxfLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3Ro'@;
put 'aXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRh'@;
put 'U291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmMD09PUduLmVkaXRvci5maWx0'@;
put 'ZXIuY2xhdXNlcy5sZW5ndGgmJihHbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxHbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5p'@;
put 'bml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLF8ucmVuZGVyKCl9fXJldHVybiBjLmNudD0wLGMubm9uUGtDbnQ9MCxjLmxhc3RDZWxsPTAsYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQodmwpLHR0KHcwKSx0'@;
put 'dChiZCksdHQoVGMpLHR0KERzKSx0dChHbCksdHQob2EpLHR0KFVhKSx0dChBZykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKGhVZSw3KSxSbyhmVWUsNSksUm8ocFVlLDUpLFJv'@;
put 'KGdVZSw1KSxSbyhtVWUsNSkpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuaHQ9aC5maXJzdCksYWkoaD1saSgpKSYmKGQudXBsb2FkU3RhdGVyQ29tcExpc3Q9aCksYWkoaD1saSgpKSYmKGQucXVlcnlGaWx0ZXJDb21wTGlzdD1oKSxhaShoPWxpKCkpJiYoZC5ob3RJbnN0YW5jZUNvbXBM'@;
put 'aXN0PWgpLGFpKGg9bGkoKSkmJihkLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWgpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjczLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiYXBwRmls'@;
put 'ZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIiwiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10'@;
put 'aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwiZW5jb2Rpbmct'@;
put 'YmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMC1pIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiVVRGLTgiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlv'@;
put 'IiwiIiwidmFsdWUiLCJXTEFUSU4xIiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBmaWx0ZXJCdG4iLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGVkaXRCdG4iLDQsIm5nSWYi'@;
put 'XSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhjZWwt'@;
put 'cGFyc2luZyBjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1'@;
put 'cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwi'@;
put 'b25QcmV2aW91c1JlY29yZCIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0xIl0sWyJodCIsIiJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImJvcmRlci0wIiwiYm94LXNoYWRvdy1ub25lLWkiLCJw'@;
put 'b3NpdGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVyIiwiY2xyLXJvdyIsImJ1dHRvbkJhciIsImhlYWRlckJhciIsImNsci1mbGV4LW1kLXJv'@;
put 'dyIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLWxnLTQgYmFja0J0biIsNCwibmdJZiJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiZC1mbGV4IiwiZmxleC1jb2x1'@;
put 'bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiZWRpdG9yLXRpdGxlIHRleHQtY2VudGVyIG10LTAtaSIsNCwibmdWYXIiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIi'@;
put 'LDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1m'@;
put 'bGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsMSwiZWRpdC1ob3QiLDMsImxpY2Vuc2VLZXkiXSxbImhvdEluc3RhbmNlIiwiIl0sWzQsIm5nSWYi'@;
put 'XSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtLTAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1w'@;
put 'cmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbImNsYXNzIiwiZC1ibG9jayIsNCwibmdGb3IiLCJu'@;
put 'Z0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0s'@;
put 'WzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIs'@;
put 'MywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1v'@;
put 'ZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNl'@;
put 'bnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciJdLFsiZmlsZVBhc3N3b3JkSW5wdXQiLCIiXSxbImNsYXNz'@;
put 'IiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFszLCJvcGVuIiwiZHNtZXRhIiwib3BlbkNoYW5nZSJdLFszLCJ2aWV3Ym94TW9kYWwiLCJ2aWV3Ym94'@;
put 'TW9kYWxDaGFuZ2UiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQi'@;
put 'LCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywidXBsb2FkZXIiLCJjaGFuZ2UiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIs'@;
put 'InByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywi'@;
put 'Y2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFs'@;
put 'aWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25O'@;
put 'ZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiLCJiYWNrQnRuIl0sWzEsImJ0biIsImJ0bi1zbSIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJjYXJldCIsImRp'@;
put 'ciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiYnRuIiwiYnRuLXNtIiwidmlld2JveC1vcGVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIiwic2l6ZSIsIjIwIl0sWzEsImVkaXRvci10aXRsZSIsInRleHQtY2VudGVyIiwibXQtMC1pIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIs'@;
put 'IiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEw'@;
put 'IiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWzEsImNsci1j'@;
put 'b2wtMTIiLCJjbHItY29sLWxnLTQiLCJidG5DdHJsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwi'@;
put 'YnRuLXByaW1hcnkiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi'@;
put 'dG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl0s'@;
put 'WyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsidHlwZSIsImJ1'@;
put 'dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2si'@;
put 'LDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJldmlldy1zdWJtaXQiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tdXBsb2FkLXByZXZp'@;
put 'ZXciLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsic2hhcGUi'@;
put 'LCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxn'@;
put 'Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1v'@;
put 'ZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQt'@;
put 'Y2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwxLCJidG4i'@;
put 'LCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwibS0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0'@;
put 'ZXh0LWNlbnRlciIsImNvbG9yLXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwiZm9ybS1ncm91cCJdLFsiZm9yIiwiZm9ybUZpZWxkc184Il0sWyJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01v'@;
put 'ZGVsIiwiZGlzYWJsZWQiLCJ2YWx1ZSIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJt'@;
put 'LTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTttZSgwLCJkaXYiLDApKDEsImNsci1tb2RhbCIsMSkseHQoImZpbGVPdmVyIixmdW5jdGlvbihfKXtyZXR1cm4gZC5maWxlT3ZlckJhc2UoXyl9KSgiZmlsZURyb3AiLGZ1bmN0aW9u'@;
put 'KF8pe3JldHVybiBkLmdldEZpbGVEZXNjKF8sITApfSkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuc2hvd1VwbG9hZE1vZGFsPV99KSxtZSgyLCJoMyIsMiksTmUoMywiVXBsb2FkIEZpbGUiKSx5ZSgpLG1lKDQsImRpdiIsMykoNSwiZGl2Iiw0KSg2LCJzcGFu'@;
put 'IiksTmUoNywiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJkaXYiLDYpKDEwLCJkaXYiLDcpKDExLCJkaXYiLDgpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiw5KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDEwKSx4'@;
put 'dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZW5jb2Rpbmc9X30pLHllKCksbWUoMTUsImxhYmVsIiksTmUoMTYsIlVURi04IikseWUoKSgpLG1lKDE3LCJjbHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihf'@;
put 'KXtyZXR1cm4gZC5lbmNvZGluZz1ffSkseWUoKSxtZSgxOSwibGFiZWwiKSxOZSgyMCwiV0xBVElOMSIpLHllKCkoKSgpKCkoKSxKZSgyMSx2VWUsNiwxLCJkaXYiLDEyKSxKZSgyMixfVWUsMywxLCJkaXYiLDEzKSxtZSgyMywiZGl2Iiw3KSxKZSgyNCxiVWUsMiwxLCJidXR0b24iLDE0KSxK'@;
put 'ZSgyNSx5VWUsMiwwLCJidXR0b24iLDE1KSx5ZSgpLEplKDI2LHdVZSwzLDAsImRpdiIsMTYpLHllKCkoKSgpLHF0KDI3LCJkaXYiLDE3KSx5ZSgpLEplKDI4LENVZSwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDE4KSxtZSgyOSwiZGl2IiwxOSwyMCksSmUoMzEsU1VlLDIsMCwiZGl2IiwyMSks'@;
put 'bWUoMzIsImRpdiIsMjIpLHh0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25TaG93VXBsb2FkTW9kYWwoKX0pLG1lKDMzLCJkaXYiLDIzKSxKZSgzNCx4VWUsNywyLCJkaXYiLDI0KSxtZSgzNSwiZGl2IiwyNSksSmUoMzYsTFVlLDEwLDUsImg0IiwyNikseWUoKSxK'@;
put 'ZSgzNyxWVWUsNCwzLCJkaXYiLDI3KSxKZSgzOCxCVWUsNSwxLCJkaXYiLDI4KSx5ZSgpLG1lKDM5LCJkaXYiLDI5KSxKZSg0MCxVVWUsNCwyLCJkaXYiLDMwKSxtZSg0MSwiZGl2IiwzMSkoNDIsImRpdiIsMzIpLHF0KDQzLCJob3QtdGFibGUiLDMzLDM0KSx5ZSgpLG1lKDQ1LCJkaXYiKSxK'@;
put 'ZSg0NixXVWUsNSwyLCJjbHItdG9vbHRpcCIsMzUpLEplKDQ3LEdVZSwzLDEsInAiLDM2KSx5ZSgpLEplKDQ4LEtVZSwxNiw2LCJkaXYiLDM3KSxtZSg0OSwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuc3VibWl0TGltaXROb3Rp'@;
put 'Y2U9X30pLG1lKDUwLCJoMyIsMiksTmUoNTEsIk5vdGljZSIpLHllKCksbWUoNTIsImRpdiIsMykoNTMsInAiLDM5KSxOZSg1NCkseWUoKSgpLG1lKDU1LCJkaXYiLDE3KSg1NiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnN1Ym1pdExpbWl0Tm90aWNlPSEx'@;
put 'fSksTmUoNTcsIiBDYW5jZWwgIikseWUoKSxtZSg1OCwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmdldEZpbGUoKSxkLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoNTksIiBTdWJtaXQgIikseWUoKSgpKCksbWUoNjAsImNsci1tb2RhbCIsMzgpLHh0KCJj'@;
put 'bHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmJhZEVkaXQ9X30pLG1lKDYxLCJoMyIsMiksTmUoNjIpLHllKCksbWUoNjMsImRpdiIsMykoNjQsInAiKSxOZSg2NSkseWUoKSgpLG1lKDY2LCJkaXYiLDE3KSg2NywiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLmJhZEVkaXQ9ITF9KSxOZSg2OCwiIE9rICIpLHllKCkoKSgpLG1lKDY5LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5wa051bGw9X30pLG1lKDcwLCJoMyIsMiksTmUoNzEsIkVycm9yIikseWUoKSxtZSg3'@;
put 'MiwiZGl2IiwzKSg3MywicCIpLE5lKDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSx5ZSgpKCksbWUoNzUsImRpdiIsMTcpKDc2LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGQucGtOdWxsPSExLGQuYmFkRWRpdD0hMX0pLE5lKDc3LCIgT2sgIikseWUoKSgpKCksbWUoNzgsImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm5vUGtOdWxsPV99KSxtZSg3OSwiaDMiLDIpLE5lKDgwLCJF'@;
put 'cnJvciIpLHllKCksbWUoODEsImRpdiIsMykoODIsInAiKSxOZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSx5ZSgpKCksbWUoODQsImRpdiIsMTcpKDg1LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubm9Q'@;
put 'a051bGw9ITEsZC5iYWRFZGl0PSExfSksTmUoODYsIiBPayAiKSx5ZSgpKCkoKSxtZSg4NywiY2xyLW1vZGFsIiw0MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucGtEdXBzPV99KSxtZSg4OCwiaDMiLDIpLE5lKDg5LCJFcnJvciIpLHllKCksbWUoOTAs'@;
put 'ImRpdiIsMykoOTEsInAiKSxOZSg5MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSx5ZSgpLG1lKDkzLCJwIiksTmUoOTQsIkR1cGxpY2F0ZXMgZm91bmQ6IikseWUoKSxKZSg5NSxYVWUsMyw0LCJzcGFuIiw0MykseWUo'@;
put 'KSxtZSg5NiwiZGl2IiwxNykoOTcsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wa0R1cHM9ITF9KSxOZSg5OCwiIE9rICIpLHllKCkoKSgpLG1lKDk5LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4g'@;
put 'ZC50b29Mb25nPV99KSxtZSgxMDAsImgzIiwyKSxOZSgxMDEsIkVycm9yIikseWUoKSxtZSgxMDIsImRpdiIsMykoMTAzLCJwIiksTmUoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLHllKCksSmUoMTA1LEpVZSwy'@;
put 'LDMsInAiLDQ0KSx5ZSgpLG1lKDEwNiwiZGl2IiwxNykoMTA3LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQudG9vTG9uZz0hMSxkLmNsZWFuRXhjZWVkKCl9KSxOZSgxMDgsIiBPayAiKSx5ZSgpKCkoKSgpKCkoKSgpKCksSmUoMTA5LFFVZSwxNCwwLCJkaXYi'@;
put 'LDQ1KSxtZSgxMTAsImNsci1tb2RhbCIsNDYpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmZpbHRlcj1ffSksbWUoMTExLCJoMyIsNDcpLE5lKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLG1lKDExMywic3BhbiIpLE5lKDExNCkseWUoKSgpLG1lKDEx'@;
put 'NSwiZGl2IiwzKSxKZSgxMTYsZVplLDIsMCwiYXBwLXF1ZXJ5IiwzNSkseWUoKSxtZSgxMTcsImRpdiIsMTcpKDExOCwiYnV0dG9uIiw0OCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlc2V0RmlsdGVyKCl9KSxOZSgxMTksIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSgxMjAs'@;
put 'ImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWx0ZXI9ITF9KSxOZSgxMjEsIiBDYW5jZWwgIikseWUoKSxtZSgxMjIsImJ1dHRvbiIsNTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZW5kQ2xhdXNlKCl9KSxOZSgxMjMsIiBPayAiKSx5ZSgp'@;
put 'KCkoKSxtZSgxMjQsImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnF1ZXJ5RXJyPV99KSxtZSgxMjUsImgzIiwyKSxOZSgxMjYsIkVycm9yIikseWUoKSxtZSgxMjcsImRpdiIsMykoMTI4LCJwIiksTmUoMTI5KSx5ZSgpKCksbWUo'@;
put 'MTMwLCJkaXYiLDE3KSgxMzEsImJ1dHRvbiIsNTEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDEzMiwiIENhbmNlbCAiKSx5ZSgpLG1lKDEzMywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnF1ZXJ5RXJyPSExfSks'@;
put 'TmUoMTM0LCIgT2sgIikseWUoKSgpKCksbWUoMTM1LCJjbHItbW9kYWwiLDUyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5kaXNjYXJkU291cmNlRmlsZT1ffSksbWUoMTM2LCJoMyIsNDcpLE5lKDEzNywiV2FybmluZyIpLHllKCksbWUoMTM4LCJkaXYi'@;
put 'LDMpLE5lKDEzOSwiIFRoaXMgYWN0aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEgIiksbWUoMTQwLCJiIiksTmUoMTQxKSx5ZSgpLE5lKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLHllKCksbWUoMTQzLCJkaXYiLDE3KSgxNDQs'@;
put 'ImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kaXNjYXJkU291cmNlRmlsZT0hMX0pLE5lKDE0NSwiIENhbmNlbCAiKSx5ZSgpLG1lKDE0NiwiYnV0dG9uIiw1MykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRpc2NhcmRTb3VyY2VGaWxlPSExLGQu'@;
put 'ZGlzY2FyZFBlbmRpbmdFeGNlbCghMCl9KSxOZSgxNDcsIiBPayAiKSx5ZSgpKCkoKSxtZSgxNDgsImNsci1tb2RhbCIsNTIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmZpbGVQYXNzd29yZE1vZGFsPV99KSxtZSgxNDksImgzIiw0NyksTmUoMTUwLCIg'@;
put 'UGFzc3dvcmQgUHJvdGVjdGVkIEZpbGUgIikseWUoKSxtZSgxNTEsImRpdiIsNTQpKDE1MiwicCIsMzkpLE5lKDE1MywiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLHllKCkscXQoMTU0LCJpbnB1dCIsNTUsNTYpLHllKCksbWUoMTU2LCJkaXYiLDE3KSxKZSgxNTcsdFplLDIsMCwicCIsNTcp'@;
put 'LG1lKDE1OCwiYnV0dG9uIiw0OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbGVQYXNzd29yZE1vZGFsPSExLGQuZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KHZvaWQgMCl9KSxOZSgxNTksIiBDYW5jZWwgdXBsb2FkICIpLHllKCksbWUoMTYwLCJidXR0b24iLDU4KSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSgxNTUpO3JldHVybiBkLmZpbGVQYXNzd29yZE1vZGFsPSExLGp0KGQuZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KF8udmFsdWUpKX0pLE5lKDE2MSwiIFVubG9jayAiKSx5ZSgpKCkoKSxtZSgxNjIsImNsci1tb2RhbCIsNTIpLHh0'@;
put 'KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLm1hbnVhbEZpbGVFZGl0TW9kYWw9X30pLG1lKDE2MywiaDMiLDQ3KSxOZSgxNjQsIldhcm5pbmciKSx5ZSgpLG1lKDE2NSwiZGl2IiwzKSxOZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1l'@;
put 'YW4gdGhlIHNvdXJjZSBmaWxlICIpLG1lKDE2NywiYiIpLE5lKDE2OCkseWUoKSxOZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIikseWUoKSxtZSgxNzAsImRpdiIsMTcpKDE3MSwiYnV0dG9uIiw0OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBkLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITF9KSxOZSgxNzIsIiBDYW5jZWwgIikseWUoKSxtZSgxNzMsImJ1dHRvbiIsNTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5tYW51YWxGaWxlRWRpdE1vZGFsPSExLGQucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKX0pLE5lKDE3'@;
put 'NCwiIE9rICIpLHllKCkoKSgpLG1lKDE3NSwiYXBwLWRhdGFzZXQtaW5mbyIsNTkpLHh0KCJvcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5kYXRhc2V0SW5mbz1ffSkseWUoKSxtZSgxNzYsImFwcC12aWV3Ym94ZXMiLDYwKSx4dCgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlv'@;
put 'bihfKXtyZXR1cm4gZC52aWV3Ym94ZXM9X30pLHllKCl9aWYoMiZhKXtjb25zdCBoPSRpKDE1NSk7Q2UoMSksUmUoInVwbG9hZGVyIixkLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwiVmFsaWRh'@;
put 'dGluZy1EUSI9PT1kLmV4Y2VsVXBsb2FkU3RhdGUpKCJjbHJNb2RhbE9wZW4iLGQuc2hvd1VwbG9hZE1vZGFsKSxDZSgxMyksUmUoIm5nTW9kZWwiLGQuZW5jb2RpbmcpKCJkaXNhYmxlZCIsIiIhPWQuZmlsZW5hbWUpLENlKDQpLFJlKCJuZ01vZGVsIixkLmVuY29kaW5nKSgiZGlzYWJsZWQi'@;
put 'LCIiIT1kLmZpbGVuYW1lKSxDZSgzKSxSZSgibmdJZiIsIWQuZXhjZWxGaWxlUGFyc2luZyYmIWQudXBsb2FkTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFkLmV4Y2VsRmlsZVBhcnNpbmcmJiFkLnVwbG9hZExvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1kLmV4Y2Vs'@;
put 'VXBsb2FkU3RhdGUpLENlKDEpLFJlKCJuZ0lmIiwiVmFsaWRhdGluZy1EUSI9PT1kLmV4Y2VsVXBsb2FkU3RhdGUpLENlKDEpLFJlKCJuZ0lmIixkLmV4Y2VsRmlsZVBhcnNpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+LTEpLENlKDMpLFJlKCJuZ0lmIiwh'@;
put 'ZC52YWxpZGF0aW9uRG9uZSYmZC5zdWJtaXQpLENlKDMpLFJlKCJuZ0lmIixkLnRhYmxlVHJ1ZSksQ2UoMSksZHIoImNsci1jb2wtbGctMTIiLCFkLnRhYmxlVHJ1ZSksQ2UoMSksUmUoIm5nVmFyIixRMig2NixuWmUsbnVsbD09ZC5saWJkcz9udWxsOmQubGliZHMuc3BsaXQoIi4iKVswXSxu'@;
put 'dWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzFdKSksQ2UoMSksUmUoIm5nSWYiLGQudGFibGVUcnVlKSxDZSgxKSxSZSgibmdJZiIsISRzKDY5LElzZSkuaW5jbHVkZXMoZC5xdWVyeVRleHQpKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoNzEsclplLCEkcyg3MCxJc2UpLmlu'@;
put 'Y2x1ZGVzKGQucXVlcnlUZXh0KSkpLENlKDEpLFJlKCJuZ0lmIiwhZC50YWJsZVRydWUpLENlKDMpLGRyKCJoaWRkZW4iLGQuaG90VGFibGUuaGlkZGVuKSxSZSgibGljZW5zZUtleSIsZC5ob3RUYWJsZS5saWNlbnNlS2V5KSxDZSgzKSxSZSgibmdJZiIsZC50YWJsZVRydWUmJiFkLnJlc3Ry'@;
put 'aWN0aW9ucy5yZW1vdmVBZGRSZWNvcmRCdXR0b24pLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSYmZC5kYXRhU291cmNlJiZkLmRhdGFTb3VyY2UubGVuZ3RoPmQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9y'@;
put 'b3dzX2FsbG93ZWQpLENlKDEpLFJlKCJuZ0lmIixkLnN1Ym1pdCksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5zdWJtaXRMaW1pdE5vdGljZSksQ2UoNSksZ3IoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQs'@;
put 'IiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLENlKDYpLFJlKCJjbHJNb2RhbE9wZW4iLGQuYmFkRWRpdCksQ2UoMiksb3IoZC5iYWRFZGl0VGl0bGV8fCJFcnJv'@;
put 'ciIpLENlKDMpLG9yKGQuYmFkRWRpdENhdXNlKSxDZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixkLnBrTnVsbCksQ2UoOSksUmUoImNsck1vZGFsT3BlbiIsZC5ub1BrTnVsbCksQ2UoOSksUmUoImNsck1vZGFsT3BlbiIsZC5wa0R1cHMpLENlKDgpLFJlKCJuZ0Zvck9mIixkLmR1cGxpY2F0ZVBr'@;
put 'SW5kZXhlcyksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC50b29Mb25nKSxDZSg2KSxSZSgibmdGb3JPZiIsZC5leGNlZWRDZWxscyksQ2UoNCksUmUoIm5nSWYiLGQubnVsbFZhcmlhYmxlcyksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIp'@;
put 'KCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksZ3IoIiAiLGQubGliZHMsIiAiKSxDZSgyKSxSZSgibmdJZiIsZC5maWx0ZXIpLENlKDYpLFJlKCJjbHJMb2FkaW5nIixkLnN1Ym1pdExvYWRpbmcpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQucXVlcnlFcnIpLENlKDUpLG9yKGQucXVl'@;
put 'cnlFcnJNZXNzYWdlKSxDZSg2KSxSZSgiY2xyTW9kYWxPcGVuIixkLmRpc2NhcmRTb3VyY2VGaWxlKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDYpLG9yKGQuZmlsZW5hbWUpLENlKDcpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZmlsZVBhc3N3b3JkTW9k'@;
put 'YWwpKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoOSksUmUoIm5nSWYiLGQuZmlsZVVubG9ja0Vycm9yKSxDZSgzKSxSZSgiZGlzYWJsZWQiLGgudmFsdWUubGVuZ3RoPDEpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQubWFudWFsRmlsZUVkaXRNb2Rh'@;
put 'bCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg2KSxvcihkLmZpbGVuYW1lKSxDZSg3KSxSZSgib3BlbiIsZC5kYXRhc2V0SW5mbykoImRzbWV0YSIsZC5kc21ldGEpLENlKDEpLFJlKCJ2aWV3Ym94TW9kYWwiLGQudmlld2JveGVzKX19LGRlcGVuZGVu'@;
put 'Y2llczpbRXNlLGRjLHhzLFppLFdhLGxFLEJzLE9zLEJ1LGthLG91LHN1LFp1LGMyLGRoLFVzLFhGLG53ZSxLRixqYixVYix6Yix4eSxVNyxZYixrc2UsQXNlLFRzZSxqRSx1VSxsVWUsdVVlLGRVZSxMc2VdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7'@;
put 'Ym9yZGVyOjB9LmJ1dHRvbkJhcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMTBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnRlc3RSZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmY7YmFja2dyb3VuZDpyZ2JhKDI1NSwwLDAsLjgpIWltcG9ydGFudH1ob3QtdGFibGVbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHls'@;
put 'ZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjY5MDE5NjA3ODQpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAg'@;
put 'IC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0ZC5yZWFk'@;
put 'b25seUNlbGx7b3BhY2l0eTouNX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4O2hlaWdodDozMHB4O3RleHQtb3ZlcmZsb3c6'@;
put 'ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo4MCV9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFj'@;
put 'ZTpub3JtYWx9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6dW5zZXR9LnBrSGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiM2ODc2ODI7Y29sb3I6I2ZmZjttYXJnaW46LTFweH0uaGVhZGVyQmFyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmZmZmO2JhY2tncm91bmQ6I2Y1ZjZmZX0uZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtjb2xvcjpyZWR9LmJ0bkN0cmxbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH0uaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0ubXktZHJvcC16b25l'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4IGxpZ2h0Z3JheTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp3aGl0ZXNtb2tlO2JveC1zaGFkb3c6aW5zZXQgMCAwIDRweCAycHggI2E3YTVhNTJiO2hlaWdodDo1MHZofS5udi1maWxlLW92ZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVde2JvcmRlcjpzb2xpZCAycHggZ3JlZW59LmZpbGUtZHJvcC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6'@;
put 'OXB4IWltcG9ydGFudH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19LmhvdEVkaXRvcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNp'@;
put 'bmdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5leGNlbC1wYXJzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46'@;
put 'MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9LmVkaXQtcmVjb3JkLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjYpO3Bvc2l0aW9u'@;
put 'OmFic29sdXRlO3RvcDowO2JvdHRvbTowO3dpZHRoOjEwMCU7ei1pbmRleDo1MDB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpey5wcm9ncmVzU3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjMycHghaW1wb3J0YW50fS5jYXJkLWJsb2NrW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSwgLmNhcmQtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMCAwfX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjhyZW0gLjhyZW0haW1wb3J0YW50O3BhZGRpbmctdG9wOjB9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVD'@;
put 'T01QJV17cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MXB4O2JvcmRlcjoycHggZGFzaGVkICNmZmY7ei1pbmRleDotMX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVd'@;
put 'e2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MjBweDtjb2xvcjojZmZmfSNzdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjY2FuY2VsU3VibWl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNTBweH0iXX0pLGN9KSgpO2NvbnN0IGlaZT1be3BhdGg6IjpsaWJNZW0iLGNvbXBv'@;
put 'bmVudDpKQX0se3BhdGg6IjpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6SkF9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtIixjb21wb25lbnQ6SkF9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OkpBfV07bGV0IG9aZT0oKCk9PntjbGFzcyBj'@;
put 'e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxoYy5mb3JDaGlsZChpWmUpLGhjXX0pLGN9KSgpLFFBPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LG9vLHFsLEMyXX0pLGN9KSgpLHNaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95'@;
put 'KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCk7Y29uc3QgYVplPVsic2lkZWJhck5hdiJdO2Z1bmN0aW9uIGxaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxOZSgxLCJEYXRhIikseWUoKX19ZnVuY3Rpb24gY1plKGMsbCl7MSZjJiYobWUoMCwiYSIsMTkpLE5lKDEsIkFQSSBFeHBsb3JlciIpLHllKCkpfWZ1bmN0aW9uIHVaZShjLGwpezEmYyYmKG1lKDAsImEiLDIw'@;
put 'KSxOZSgxLCJMaW5lYWdlIikseWUoKSl9ZnVuY3Rpb24gZFplKGMsbCl7MSZjJiYobWUoMCwiYSIsMjEpLE5lKDEsIk1ldGFkYXRhIikseWUoKSl9ZnVuY3Rpb24gaFplKGMsbCl7MSZjJiYobWUoMCwiYSIsMjIpLE5lKDEsIiBVc2VycyIpLHllKCkpfWZ1bmN0aW9uIGZaZShjLGwpezEmYyYm'@;
put 'KG1lKDAsImEiLDIzKSxOZSgxLCJTdWJtaXR0ZWQiKSx5ZSgpKX1mdW5jdGlvbiBwWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyNCksTmUoMSwiVG8gQXBwcm92ZSIpLHllKCkpfWZ1bmN0aW9uIGdaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kcm9wZG93bi1tZW51IiksSmUoMSxsWmUsMiww'@;
put 'LCJhIiwxMSksSmUoMixjWmUsMiwwLCJhIiwxMiksSmUoMyx1WmUsMiwwLCJhIiwxMyksSmUoNCxkWmUsMiwwLCJhIiwxNCksSmUoNSxoWmUsMiwwLCJhIiwxNSksSmUoNixmWmUsMiwwLCJhIiwxNiksSmUoNyxwWmUsMiwwLCJhIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEp'@;
put 'LFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVNWSVlBIj09PWEuc2VydmVyVHlwZSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJv'@;
put 'dXRlKCJhcHByb3ZlIikpfX1mdW5jdGlvbiBtWmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCksTmUoMykscXQoNCwiY2xyLWljb24iLDkpLHllKCksSmUoNSxnWmUsOCw3LCJjbHItZHJvcGRvd24tbWVudSIsMTApLHllKCkoKSks'@;
put 'MiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksZ3IoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWZ1bmN0aW9uIHZaZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gX1plKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1jb25zdCBiWmU9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm5bIi92aWV3L3VzZXJuYXYvcm9sZXMiXX07ZnVuY3Rpb24geVplKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsMjYpKDIsInAiLDI3KSxxdCgzLCJjbHItaWNvbiIsMzIpLE5lKDQsIiBSb2xlcyAiKSx5ZSgpKCksSmUoNSxfWmUsMSwwLCJjbHItdGFi'@;
put 'LWNvbnRlbnQiLDMwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDIsYlplKSksQ2UoNCksUmUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1jb25zdCB3WmU9ZnVuY3Rpb24oKXtyZXR1cm5bIi92'@;
put 'aWV3L3VzZXJuYXYvdXNlcnMiXX0sQ1plPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldy91c2VybmF2L2dyb3VwcyJdfTtmdW5jdGlvbiBTWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNykscXQoNCwiY2xyLWlj'@;
put 'b24iLDI4KSxOZSg1LCIgVXNlcnMiKSx5ZSgpKCkscXQoNiwiY2xyLXRhYi1jb250ZW50IikseWUoKSxtZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLHF0KDEwLCJjbHItaWNvbiIsMjkpLE5lKDExLCIgR3JvdXBzIikseWUoKSgpLEplKDEyLHZaZSwxLDAsImNsci10'@;
put 'YWItY29udGVudCIsMzApLHllKCksSmUoMTMseVplLDYsMywiY2xyLXRhYiIsMzEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJyb3V0ZXJMaW5rIiwkcyg0LHdaZSkpLENlKDYpLFJlKCJyb3V0ZXJMaW5rIiwkcyg1LENaZSkpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsYS5p'@;
put 'c01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksQ2UoMSksUmUoIm5nSWYiLCJTQVM5Ij09PWEuc2VydmVyVHlwZSl9fWZ1bmN0aW9uIE1aZShjLGwpezEmYyYmKG1lKDAsImNsci1kcm9wZG93bi1tZW51IikoMSwiYSIsMzMpLE5lKDIsIlRhYmxlcyIpLHllKCksbWUoMywiYSIs'@;
put 'MzQpLE5lKDQsIkZpbGVzIikseWUoKSgpKX1mdW5jdGlvbiB4WmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCksTmUoMykscXQoNCwiY2xyLWljb24iLDkpLHllKCksSmUoNSxNWmUsNSwwLCJjbHItZHJvcGRvd24tbWVudSIsMTAp'@;
put 'LHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksZ3IoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWNvbnN0IEVaZT1bIioiXTtsZXQgbjM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcm91dGVyPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLl9zYXNTZXJ2'@;
put 'aWNlPWgsdGhpcy5zY3JvbGxlZFRvQm90dG9tPW5ldyBFcix0aGlzLnNpZGViYXJPcGVuPSEwLHRoaXMuc2lkZWJhcldpZHRoPW51bGwsdGhpcy5zaWRlYmFyTWF4V2lkdGg9bnVsbCx0aGlzLnJlc2l6aW5nPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuc2Fz'@;
put 'anNDb25maWc9dGhpcy5fc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLl9zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2lkZWJhclRvZ2dsZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2lkZWJhck9w'@;
put 'ZW49YT9hLm9wZW46IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KX1vblRyZWVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLnNjcm9sbGVk'@;
put 'VG9Cb3R0b20uZW1pdCgpfWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfWdldFN1YlBhZ2UoKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9WaWV3ZXIoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0i'@;
put 'Iix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9InVzZXItc2VsZWN0OiBub25lIn1yZXNpemVFbmQoKXt0aGlz'@;
put 'LnJlc2l6aW5nPSExLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0iIn1vbk1vdXNlTW92ZShhKXtpZih0aGlzLnJlc2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1hLmNsaWVudFg7bGV0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNz'@;
put 'TmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0aCYmdGhpcy5pc092ZXJmbG93bihkKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lkZWJhcldpZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAoYSl7dGhp'@;
put 'cy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJmbG93bihhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRofX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQodmwpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdy'@;
put 'KHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oYVplLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuc2lkZWJhck5hdj1oLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoIm1v'@;
put 'dXNlbW92ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Nb3VzZU1vdmUoZil9LDAsZmYpKCJtb3VzZXVwIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlVXAoZil9LCExLGZmKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LG5nQ29udGVudFNlbGVj'@;
put 'dG9yczpFWmUsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJpZCIsInNpZGViYXJOYXYiXSxbInNpZGViYXJOYXYiLCIiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwi'@;
put 'bmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10'@;
put 'b2dnbGUiLCJidG4iLCJidG4tbGluayJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJv'@;
put 'dXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJd'@;
put 'LFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZl'@;
put 'IiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIv'@;
put 'cmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsi'@;
put 'LCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwi'@;
put 'cm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIi'@;
put 'LCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJd'@;
put 'LFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91'@;
put 'cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9maWxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihBaSgpLG1lKDAsImNsci12ZXJ0aWNhbC1uYXYiLDAsMSksSmUoMixtWmUsNiwxLCJkaXYiLDIpLEplKDMsU1plLDE0LDYsImNsci10YWJzIiwzKSxKZSg0LHhaZSw2LDEsImRpdiIsMikscXQoNSwiZGl2Iiw0KSxtZSg2LCJkaXYiLDUp'@;
put 'LHh0KCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVHJlZVNjcm9sbChmKX0pLGtyKDcpLHllKCksbWUoOCwic3BhbiIsNikseHQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNpemVTdGFydCgpfSkseWUoKSgpKSwyJmEmJihIdSgid2lkdGgiLGQuc2lkZWJhcldp'@;
put 'ZHRoLCJweCIpKCJtYXgtd2lkdGgiLGQuc2lkZWJhck1heFdpZHRoLCJweCIpLGRyKCJjbG9zZWQiLCFkLnNpZGViYXJPcGVuKSgicmVzaXppbmciLGQucmVzaXppbmcpLENlKDIpLFJlKCJuZ0lmIixkLmlzTWFpblJvdXRlKCJ2aWV3IikpLENlKDEpLFJlKCJuZ0lmIixkLmlzTWFpblJvdXRl'@;
put 'KCJ2aWV3L3VzZXJuYXYiKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoImhvbWUiKSksQ2UoNCksZHIoInJlc2l6aW5nIixkLnJlc2l6aW5nKSl9LGRlcGVuZGVuY2llczpbWmksa2EsRTgsYzIsSXAsT3AsZGcsUnAsTHAsY2csWVEsV1EsTmYsYWcsbGcsQnUsR19dLHN0eWxlczpb'@;
put 'ImNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYhaW1w'@;
put 'b3J0YW50fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnN1bi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDozNnB4fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWln'@;
put 'aHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Y2xyLXZlcnRpY2FsLW5hdi5jbG9zZWRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0yNzJweH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlv'@;
put 'bjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnJlc2l6ZS1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdOmhvdmVye29wYWNpdHk6LjV9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZS5yZXNpemluZ1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfWNsci12ZXJ0aWNhbC1uYXYucmVzaXpp'@;
put 'bmdbX25nY29udGVudC0lQ09NUCVde3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9Lm5hdi1kaXZpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZDNkM2QzO21hcmdpbi1ib3R0b206MH0ucGFnZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17'@;
put 'bWFyZ2luOjA7Zm9udC1zaXplOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lnplcm8tbWFyZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0udXNlci1uYXYtYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgMnB4fSNzaWRlYmFyTmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt6LWlu'@;
put 'ZGV4OjIwMH1AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpeyNzaWRlYmFyTmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDt0b3A6MH19Il19KSxjfSkoKTtmdW5jdGlvbiBrWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gQVpl'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBUWmUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LGtaZSwxLDAsImNsci1pY29uIiwxMCksSmUoNSxBWmUsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpYnJh'@;
put 'cmllc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gRFplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIExaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21l'@;
put 'KDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSkseWUoKX19'@;
put 'ZnVuY3Rpb24gSVplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMTgsMTkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuJGltcGxpY2l0LnNlYXJjaFN0cmlu'@;
put 'Zz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSkseWUoKSxKZSg0LERaZSwxLDAsImNsci1pY29uIiwxMCksSmUoNSxMWmUsMSwwLCJjbHItaWNvbiIsMTEpLHllKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBSWmUoYyxsKXsx'@;
put 'JmMmJnF0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gT1plKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIFBaZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxOZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5p'@;
put 'byAiKSx5ZSgpKX1mdW5jdGlvbiBGWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksSmUoMSxQWmUsMiwwLCJzcGFuIiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiBIWmUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLm5nVmFyLF89VmUoKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQsVz1WZSgpO3JldHVybiBqdChmPyIiOlcub25UYWJsZUNsaWNr'@;
put 'KF8sVCkpfSksVnIoMiwyMiksSmUoMyxSWmUsMSwwLCJjbHItaWNvbiIsMjMpLEplKDQsT1plLDEsMCwiY2xyLWljb24iLDI0KSx6cigpLE5lKDUpLHllKCksSmUoNixGWmUsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCku'@;
put 'JGltcGxpY2l0LGg9VmUoMikuJGltcGxpY2l0LGY9VmUoKTtDZSgxKSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksQ2UoMSksUmUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksQ2UoMSksUmUoIm5n'@;
put 'U3dpdGNoQ2FzZSIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxDZSgxKSxncigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBOWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiksSmUoMSxIWmUsNyw4LCJjbHItdG9vbHRpcCIsMjApLHll'@;
put 'KCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9VmUoMyk7Q2UoMSksUmUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBWWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy50cmVlTm9kZUNsaWNrZWQoaCxmKSxqdChfLmxpYj1mLkxJQlJBUllSRUYpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUo'@;
put 'KS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwxNikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsanQoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSkscXQo'@;
put 'MiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgpLEplKDQsSVplLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksSmUoNSxOWmUsMiwxLCJjbHItdHJlZS1ub2RlIiwxKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xy'@;
put 'RXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoMyksZ3IoIiAiLGEuTElCUkFSWVJFRiwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gQlplKGMs'@;
put 'bCl7aWYoMSZjJiYoVnIoMCksSmUoMSxWWmUsNiw3LCJjbHItdHJlZS1ub2RlIiwxNCksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBqWmUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJz'@;
put 'cGFuIiwzMiksTmUoMywiIExvYWRpbmcuLi4gIikseWUoKSgpKCkpfWZ1bmN0aW9uIHpaZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNiksTmUoMSwiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSx5ZSgpKX1mdW5jdGlvbiBVWmUoYyxsKXsxJmMmJihtZSgwLCJoMyIsMzYpLE5lKDEsIiBObyBF'@;
put 'ZGl0YWJsZSBUYWJsZXMgQ29uZmlndXJlZCAiKSx5ZSgpKX1mdW5jdGlvbiBaWmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDMzKSxxdCgxLCJjbHItaWNvbiIsMzQpLEplKDIselplLDIsMCwiaDMiLDM1KSxKZSgzLFVaZSwyLDAsImgzIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7'@;
put 'Q2UoMiksUmUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKTwxKX19bGV0IFla'@;
put 'ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlPWEsdGhpcy5yb3V0ZXI9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5oZWxwZXJTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9Xyx0aGlzLnNhc1NlcnZpY2U9VCx0aGlzLnRyZWVOb2RlTGli'@;
put 'cmFyaWVzPW51bGwsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFy'@;
put 'eUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllJRCE9PWQuTElCUkFSWUlEJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9'@;
put 'bGlicmFyeU9uQ2xpY2soYSxkKXtkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQuZXhwYW5kZWQmJiF0aGlzLnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkoYSwhMSxkKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfXNlbGVjdExpYnJhcnkoYSxkLGgpe2gubG9h'@;
put 'ZGluZ1RhYmxlcz0hMDtsZXQgZixfPVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYmKGY9dGhpcy5saWJzQW5kVGFibGVzW2FdLHRoaXMudGFibGU9dm9pZCAwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YSkpe2xldCBUPWYuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybi0xPT09Xy5pbmRl'@;
put 'eE9mKFcpJiYoXy5wdXNoKFcpLCEwKX0pO3RoaXMudGFibGVzPVQsR24uZWRpdG9yLmxpYnJhcmllcz10aGlzLmxpYnJhcmllc31Hbi5lZGl0b3IubGlicmFyeT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9ITB9c2VsZWN0VGFi'@;
put 'bGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLmxpYlRhYj1oLmxpYisiLiIraC50YWJsZSxoLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxHbi5lZGl0b3IudGFibGU9YSxkfHxoLmNsZWFyR2xvYmFsc0ZpbHRlcigpfSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIo'@;
put 'KXtHbi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLEduLmVkaXRvci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsR24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiLEduLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxHbi5lZGl0b3IuZmlsdGVyLnZhbHM9W10sR24uZWRpdG9yLmZpbHRlci5jb2xz'@;
put 'PVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVs'@;
put 'cGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLEduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofW9uVGFibGVDbGljayhhLGQpe3RoaXMudGFibGU9YSx0'@;
put 'aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShhKSx0aGlzLmVkaXRUYWJsZSgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxlKX1nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1H'@;
put 'bi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFyaWVzPUduLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Hbi5lZGl0b3IubGlicmFyeSl7dGhpcy5saWI9R24uZWRpdG9yLmxpYnJhcnk7bGV0IGE9bnVsbDt0aGlzLnRyZWVOb2RlTGlicmFyaWVz'@;
put 'JiYoYT10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQoZD0+ZC5MSUJSQVJZUkVGPT09dGhpcy5saWIpKSx0aGlzLnNlbGVjdExpYnJhcnkoR24uZWRpdG9yLmxpYnJhcnksITAsYSl9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUduLmVkaXRvci5saWJzQW5kVGFibGVz'@;
put 'LHRoaXMubGlicmFyaWVzPUduLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29udGVudEluaXQoKXtHbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25T'@;
put 'dGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KEdsKSx0dChDMCksdHQoVGMpLHR0KHZsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OCx2YXJzOjQsY29uc3RzOltbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJl'@;
put 'YSJdLFsxLCJjYXJkLWJsb2NrIl0sWyJjbGFzcyIsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIs'@;
put 'InBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRp'@;
put 'bWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhw'@;
put 'YW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJh'@;
put 'dXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsi'@;
put 'c2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJj'@;
put 'bHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFs0LCJuZ0lmIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3Rh'@;
put 'bmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lk'@;
put 'ZWJhciIpKDEsImNsci10cmVlIiksSmUoMixUWmUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxKZSgzLEJaZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkseWUoKSgpLG1lKDQsImRpdiIsMikoNSwiZGl2IiwzKSxKZSg2LGpaZSw0LDAsImRpdiIsNCksSmUoNyxaWmUsNCwyLCJkaXYiLDUpLHllKCko'@;
put 'KSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLChudWxsPT1kLnRyZWVOb2RlTGlicmFyaWVzP251bGw6ZC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLENlKDEpLFJlKCJuZ0Zvck9mIixkLnRyZWVOb2RlTGlicmFyaWVzKSxDZSgzKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgi'@;
put 'bmdJZiIsIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W1dhLEJzLE9zLGRkLGcxLERwLGthLFp1LGMyLGYxLGpiLFViLHpiLG4zLHhzLFppLG5kLHRoLFU3XSxzdHlsZXM6WyJjbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hp'@;
put 'dGUtc3BhY2U6bm93cmFwfS5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwYWRkaW5nOjB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0gIGNsci1pY29uLmlzLWJsdWUsICAgY2xyLWlj'@;
put 'b24uaXMtaW5mb3tmaWxsOiM2YTkyMzV9LnNwaW5uZXItd3JhcHBlci1mdWxscGFnZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Il19KSxjfSkoKTtjb25zdCBX'@;
put 'WmU9Yz0+e2Zvcihjb25zdCBsIGluIGMpaWYoIl9fcm93TnVtX18iIT09bClyZXR1cm4hMTtyZXR1cm4hMH0saFU9Yz0+e2NvbnN0IGE9Yy5tYXRjaCgvUlxbKFxkKylcXUNcWyhcZCspXF0vKTtyZXR1cm4gYT97cm93OnBhcnNlSW50KGFbMV0sMTApLGNvbHVtbjpwYXJzZUludChhWzJdLDEw'@;
put 'KX06bnVsbH0sUHNlPShjLGwpPT57aWYoYy5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGM9Yy5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksYy5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgYT1oVShjKTtpZihhKXtjb25zdHtyb3c6ZCxjb2x1bW46aH09YTtjPURsLnV0aWxzLmVu'@;
put 'Y29kZV9jZWxsKHtyOmQtMSxjOmgtMX0pfX1pZihjLnN0YXJ0c1dpdGgoIk1BVENIICIpKXtsZXQgYT0iIjtjb25zdCBkPWMubWF0Y2goL0NcW1xkK1xdOiguKykvKTtkJiYoYT1kWzFdKTtjb25zdCBmPWMuc3BsaXQoIiAiKVsxXTtsZXQgXz0iIixUPS0xLFc9IiI7aWYoaXNOYU4oTnVtYmVy'@;
put 'KGYpKT9fPWY6VD1wYXJzZUludChmKSwtMSE9PVQpe2NvbnN0IHdlPWxbVC0xXTtmb3IoY29uc3QgRWUgaW4gd2UpaWYoIl9fcm93TnVtX18iIT09RWUmJndlW0VlXT09PWEpe1c9RWUrVDticmVha319ZWxzZSBmb3IobGV0IHdlPTA7d2U8bC5sZW5ndGg7d2UrKylpZihsW3dlXVtfXT09PWEp'@;
put 'e1c9Xysod2UrMSk7YnJlYWt9Y29uc3QgaWU9RGwudXRpbHMuZGVjb2RlX2NlbGwoVykscGU9aFUoYyk7aWYocGUpe2NvbnN0e3Jvdzp3ZSxjb2x1bW46RWV9PXBlO2M9RGwudXRpbHMuZW5jb2RlX2NlbGwoe3I6aWUucit3ZSxjOmllLmMrRWV9KX19cmV0dXJuIGN9LEtaZT1bImZpbGVVcGxv'@;
put 'YWRJbnB1dCJdO2Z1bmN0aW9uIFhaZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMjgpLHF0KDEsImNsci1zcGlubmVyIiwyOSkseWUoKSl9ZnVuY3Rpb24gSlplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIFFaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAs'@;
put 'ImNsci1pY29uIiwzMSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5zZWFyY2hTdHJpbmc9IiIsanQoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGVZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEs'@;
put 'ImNsci10cmVlLW5vZGUiKSgyLCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkueGxtYXBPbkNsaWNrKGYpKX0pLHF0KDMsImNsci1pY29uIiwzMyksTmUoNCkseWUoKSgpLHpyKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PWwuJGltcGxpY2l0LGQ9VmUoKTtDZSgyKSxkcigidGFibGUtYWN0aXZlIixkLmlzQWN0aXZlWExNYXAoYS5pZCkpLENlKDIpLGdyKCIgIixhLmlkLCIgIil9fWZ1bmN0aW9uIHRZZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNyksTmUoMSwiIFBsZWFzZSBzZWxlY3QgYSBtYXAgIikseWUoKSl9'@;
put 'ZnVuY3Rpb24gblllKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM3KSxOZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLHllKCkpfWZ1bmN0aW9uIHJZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzQpLHF0KDEsImNsci1pY29uIiwzNSksSmUoMix0WWUsMiwwLCJoMyIsMzYpLEplKDMs'@;
put 'blllLDIsMCwiaDMiLDM2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg8MSl9fWZ1bmN0aW9uIGlZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzgpKDEsInNwYW4iLDM5'@;
put 'KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsImRpdiIpKDQsImg0IiksTmUoNSkseWUoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDUpLG9yKGEuaXNMb2FkaW5nRGVzYyl9fWZ1bmN0aW9uIG9ZZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24g'@;
put 'c1llKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBhWWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIGxZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNDApLHh0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKCkub25TaG93VXBsb2FkTW9kYWwoKSl9KSxtZSgxLCJjbHItdGFicyIpKDIsImNsci10YWIiKSgzLCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uUnVsZXMpfSksTmUo'@;
put 'NCwiUnVsZXMiKSx5ZSgpLEplKDUsb1llLDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MikseWUoKSxtZSg2LCJjbHItdGFiIikoNywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLkRh'@;
put 'dGEpfSksTmUoOCwiRGF0YSIpLHllKCksSmUoOSxzWWUsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSx5ZSgpKCksSmUoMTAsYVllLDEsMCwibmctY29udGFpbmVyIiw0MyksbWUoMTEsImRpdiIsNDQpKDEyLCJoMyIsNDUpLE5lKDEzKSx5ZSgpLG1lKDE0LCJpIiw0NSksTmUoMTUpLHllKCks'@;
put 'bWUoMTYsImg1Iiw0NSksTmUoMTcsIiBSdWxlcyBTb3VyY2U6ICIpLG1lKDE4LCJhIiw0NiksTmUoMTkpLHllKCkoKSxtZSgyMCwiaDUiLDQ1KSxOZSgyMSwiIFRhcmdldCBkYXRhc2V0OiAiKSxtZSgyMiwiYSIsNDYpLE5lKDIzKSx5ZSgpKCkoKSxtZSgyNCwiZGl2Iiw0NykscXQoMjUsImhv'@;
put 'dC10YWJsZSIsNDgpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPSRpKDQxKTtDZSg1KSxSZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzKSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLkRhdGEpLENl'@;
put 'KDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxDZSgzKSxncigiICIsYS5zZWxlY3RlZFhMTWFwLmlkLCIgIiksQ2UoMiksb3IoYS5zZWxlY3RlZFhMTWFwLmRlc2NyaXB0aW9uKSxDZSgzKSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnJ1bGVzU291cmNlKSxDZSgxKSxncigi'@;
put 'ICIsYS5ydWxlc1NvdXJjZSwiICIpLENlKDMpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Euc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksQ2UoMSksZ3IoIiAiLGEuc2VsZWN0ZWRYTE1hcC50YXJnZXREUywiICIpLENlKDIpLFJlKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmll'@;
put 'd3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzOmEueGxEYXRhKSgiY29sSGVhZGVycyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzSGVhZGVyczphLnhsVXBs'@;
put 'b2FkSGVhZGVyKSgiY29sdW1ucyIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXM/YS54bG1hcFJ1bGVzQ29sdW1uczphLnhsVXBsb2FkQ29sdW1ucykoImZpbHRlcnMiLCEwKSgiaGVpZ2h0IiwiMTAwJSIpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWNrZXIpKCJjZWxs'@;
put 'cyIsYS5nZXRDZWxsQ29uZmlndXJhdGlvbikoIm1heFJvd3MiLGEuaG90VGFibGVNYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoInJvd0hlYWRlcnMiLGEucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIiwxNSkoInJvd0hlaWdodHMiLDIwKSgibGljZW5zZUtleSIsYS5ob3RU'@;
put 'YWJsZUxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBjWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSkscXQoMiwiY2xyLWlj'@;
put 'b24iLDUzKSxtZSgzLCJzcGFuIiksTmUoNCwiVXBsb2FkIikseWUoKSgpKCl9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc3VibWl0'@;
put 'RXhjZWwoKSl9KSxxdCgyLCJjbHItaWNvbiIsNTMpLG1lKDMsInNwYW4iKSxOZSg0LCJTdWJtaXQiKSx5ZSgpKCkoKX19ZnVuY3Rpb24gZFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBCdChhKSxqdChWZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLHF0KDIsImNsci1pY29uIiw1NSksbWUoMywic3BhbiIpLE5lKDQsIkRpc2NhcmQiKSx5ZSgpKCkoKX19ZnVuY3Rpb24gaFllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0OSksSmUoMSxjWWUsNSwwLCJkaXYiLDUw'@;
put 'KSxKZSgyLHVZZSw1LDAsImRpdiIsNTApLEplKDMsZFllLDUsMCwiZGl2Iiw1MCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9VcGxvYWQpLENlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51'@;
put 'bS5SZWFkeVRvU3VibWl0KSxDZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciB5ZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9MF09Ik5vTWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGlu'@;
put 'Z1J1bGVzIixjW2MuUmVhZHlUb1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsY1tjLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLGNbYy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4'@;
put 'dHJhY3RlZERhdGEiLGNbYy5TdWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfSh5ZHx8e30pLFo3PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUnVsZXM9MF09IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIsY30oWjd8fHt9KTtsZXQgRnNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk'@;
put 'LGgsZixfLFQsVyl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zYXNTdG9yZVNlcnZpY2U9VCx0aGlzLnNhc1NlcnZpY2U9Vyx0aGlzLmNvbnRlbnRDb250YWluZXJD'@;
put 'bGFzcz0hMCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBlaCx0aGlzLlN0YXR1c0VudW09eWQsdGhpcy5UYWJzRW51bT1aNyx0aGlzLnNlbGVjdGVkVGFiPVo3LlJ1bGVzLHRoaXMucnVsZXNTb3VyY2U9R24uZGNMaWIrIi5NUEVfWExNQVBfUlVMRVMiLHRoaXMueGxtYXBzPVtd'@;
put 'LHRoaXMuc2VsZWN0ZWRYTE1hcD12b2lkIDAsdGhpcy5zZWFyY2hTdHJpbmc9IiIsdGhpcy54bG1hcHNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz15ZC5Ob01hcFNlbGVjdGVkLHRoaXMueGxtYXBSdWxlc0hlYWRlcnM9WyJY'@;
put 'TE1BUF9TSEVFVCIsIlhMTUFQX1JBTkdFX0lEIiwiWExNQVBfU1RBUlQiLCJYTE1BUF9GSU5JU0giXSx0aGlzLnhsbWFwUnVsZXNDb2x1bW5zPVt7ZGF0YToiWExNQVBfU0hFRVQifSx7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiWExNQVBfU1RBUlQifSx7ZGF0YToiWExNQVBfRklO'@;
put 'SVNIIn1dLHRoaXMueGxtYXBSdWxlcz1bXSx0aGlzLnhsVXBsb2FkSGVhZGVyPVsiWExNQVBfUkFOR0VfSUQiLCJST1dfTk8iLCJDT0xfTk8iLCJWQUxVRV9UWFQiXSx0aGlzLnhsVXBsb2FkQ29sdW1ucz1be2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlJPV19OTyJ9LHtkYXRhOiJD'@;
put 'T0xfTk8ifSx7ZGF0YToiVkFMVUVfVFhUIn1dLHRoaXMueGxEYXRhPVtdLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy51cGxvYWRlcj1uZXcgT29lLHRoaXMu'@;
put 'bGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzB9eGxtYXBPbkNsaWNrKGEpe2Eu'@;
put 'aWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWEsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENv'@;
put 'bXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9WjcuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2ZpbGVzLyIrYS5pZCkpfXhsbWFwTGlzdE9uRmlsdGVyKCl7dGhpcy54bG1hcHM9'@;
put 'dGhpcy5zZWFyY2hTdHJpbmcubGVuZ3RoPjA/R24ueGxtYXBzLmZpbHRlcihkPT5kLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkpOkduLnhsbWFwc31pc0FjdGl2ZVhMTWFwKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkWExNYXA/Lmlk'@;
put 'PT09YX1tYXhXaWR0aENoZWNrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Q2VsbENvbmZpZ3VyYXRpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fXJvd0hlYWRlcnMoKXtyZXR1cm4iICJ9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMH1maWxlT3ZlckJh'@;
put 'c2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9Z2V0RmlsZURlc2MoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKCFmKXJldHVybjtjb25zdCBfPWYubmFtZTtpZih0aGlzLmZpbGVuYW1lPV8sInhscyI9PT1fLnNsaWNlKF8ubGFz'@;
put 'dEluZGV4T2YoIi4iKSsxLF8ubGFzdEluZGV4T2YoIi4iKSs0KS50b0xvd2VyQ2FzZSgpKXt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IkV4dHJhY3RpbmcgRGF0YSIsdGhpcy5zdGF0dXM9eWQuRXh0cmFjdGluZ0RhdGE7Y29u'@;
put 'c3QgVz1uZXcgRmlsZVJlYWRlcjtXLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBpZT1maShmdW5jdGlvbioocGUpe2NvbnN0IHdlPShjPT57Y29uc3QgbD1uZXcgVWludDhBcnJheShjKTtsZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWErPVN0cmluZy5m'@;
put 'cm9tQ2hhckNvZGUobFtoXSk7cmV0dXJuIGF9KShwZS50YXJnZXQucmVzdWx0KTtsZXQgRWU7Y29uc3QgWmU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7RWU9RGwucmVhZCh3ZSx7Li4u'@;
put 'WmV9KX1jYXRjaChpdCl7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxpdCx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFFZSlyZXR1cm4gaC5pc0xvYWRpbmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWQsdm9pZCBoLnVw'@;
put 'bG9hZGVyLnF1ZXVlLnBvcCgpO2guZXh0cmFjdERhdGEoRWUpfSk7cmV0dXJuIGZ1bmN0aW9uKHBlKXtyZXR1cm4gaWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxXLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRo'@;
put 'aXMuc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxl'@;
put 'YXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1aNy5SdWxlcyx0aGlzLmZp'@;
put 'bGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1'@;
put 'ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9eWQuU3VibWl0dGluZyx0aGlzLmlzTG9hZGlu'@;
put 'Zz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IFQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6VCxmaWxlTmFtZTpULm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBd'@;
put 'KS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoVD0+T2JqZWN0LnZhbHVlcyhUKS5qb2luKCIsIikpLmpvaW4oIlxuIiksZj0oKGMsbCk9Pm5ldyBGaWxlKFtjXSx0aGlzLmZpbGVuYW1lKyIu'@;
put 'Y3N2Iix7bGFzdE1vZGlmaWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSkpKG5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2Fk'@;
put 'ZmlsZSIsYSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihUPT57VC5zYXNqc0Fib3J0P3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLFQuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOlQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JU'@;
put 'RVhUOlQuU1lTRVJST1JURVhULE1BQzpULnNhc2pzQWJvcnRbMF0uTUFDfSk6VC5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1Quc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goVD0+e3RoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigi'@;
put 'ZmlsZSB1cGxvYWQiLFQpfSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPXlkLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29uc3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57bGV0IGY9aC5Y'@;
put 'TE1BUF9TSEVFVDtpZihmLnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgWmU9Zi5zcGxpdCgiLyIpWzFdLGl0PXBhcnNlSW50KFplKS0xO2Y9YS5TaGVldE5hbWVzW2l0XX1jb25zdCBfPWEuU2hlZXRzW2ZdLFQ9RGwudXRpbHMuc2hlZXRfdG9fanNvbihfLHtyYXc6ITAsaGVhZGVyOiJBIixibGFu'@;
put 'a3Jvd3M6ITB9KSxXPVBzZShoLlhMTUFQX1NUQVJULFQpLGllPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBjO2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9aFUo'@;
put 'bCk7aWYoZCl7Y29uc3R7cm93OmgsY29sdW1uOmZ9PWQse3I6XyxjOlR9PURsLnV0aWxzLmRlY29kZV9jZWxsKGMpO2w9RGwudXRpbHMuZW5jb2RlX2NlbGwoe3I6XytoLGM6VCtmfSl9fWlmKGwuc3RhcnRzV2l0aCgiTUFUQ0ggIikmJihsPVBzZShsLGEpKSwiTEFTVERPV04iPT09bCl7Y29u'@;
put 'c3R7cjpkLGM6aH09RGwudXRpbHMuZGVjb2RlX2NlbGwoYyksZj1EbC51dGlscy5lbmNvZGVfY29sKGgpO2xldCBfPWQ7Zm9yKGxldCBUPWQrMTtUPGEubGVuZ3RoJiZhW1RdW2ZdO1QrKylfPVQ7bD1mKyhfKzEpfWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PURsLnV0aWxzLmRlY29k'@;
put 'ZV9jZWxsKGMpO2xldCBoPWQ7Zm9yKGxldCBXPWQrMTtXPGEubGVuZ3RoJiYhV1plKGFbV10pO1crKyloPVc7bD1PYmplY3Qua2V5cyhhW2hdKS5maWx0ZXIoVz0+Il9fcm93TnVtX18iIT09VykucmVkdWNlKChXLGllKT0+aWU+Vz9pZTpXLCIiKSsoaCsxKX1yZXR1cm4gbH0pKFcsaC5YTE1B'@;
put 'UF9GSU5JU0gsVCkscGU9YCR7V306JHtpZX1gLHdlPURsLnV0aWxzLmRlY29kZV9yYW5nZShwZSksRWU9RGwudXRpbHMuc2hlZXRfdG9fanNvbihfLHtyYXc6ITAscmFuZ2U6cGUsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KTtmb3IobGV0IFplPTA7WmU8RWUubGVuZ3RoO1plKyspe2NvbnN0'@;
put 'IGl0PUVlW1plXTtmb3IobGV0IGV0PXdlLnMuYyx5dD0wO2V0PD13ZS5lLmM7ZXQrKyx5dCsrKXtjb25zdCBFdD1EbC51dGlscy5lbmNvZGVfY29sKGV0KTtFdCBpbiBpdCYmZC5wdXNoKHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JB'@;
put 'TkdFX0lELFJPV19OTzpaZSsxLENPTF9OTzp5dCsxLFZBTFVFX1RYVDppdFtFdF19KX19fSksdGhpcy5zdGF0dXM9eWQuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPVo3LkRhdGF9dmll'@;
put 'd1hMTWFwUnVsZXMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnNlbGVjdGVkWExNYXAmJihhLmlzTG9hZGluZz0hMCxhLmlzTG9hZGluZ0Rlc2M9IkxvYWRpbmcgZXhjZWwgcnVsZXMiLGEuc3RhdHVzPXlkLkZldGNoaW5nUnVsZXMseWllbGQgYS5zYXNTdG9yZVNlcnZp'@;
put 'Y2UuZ2V0WExNYXBSdWxlcyhhLnNlbGVjdGVkWExNYXAuaWQpLnRoZW4oZD0+e2EueGxtYXBSdWxlcz1kLnhsbWFwcnVsZXMsYS5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZH0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KSxhLmlzTG9hZGluZz0hMSxhLmlzTG9hZGluZ0Rl'@;
put 'c2M9IiIpfSkoKX1sb2FkKCl7dGhpcy54bG1hcHM9R24ueGxtYXBzLHRoaXMueGxtYXBzTG9hZGluZz0hMTtjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO2lmKGEpe2NvbnN0IGQ9dGhpcy54bG1hcHMuZmluZChoPT5oLmlkPT09YSk7ZCYmKHRoaXMuc2VsZWN0ZWRYTE1h'@;
put 'cD1kLHRoaXMudmlld1hMTWFwUnVsZXMoKSl9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hfSl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe0duLmVkaXRv'@;
put 'ci5zdGFydHVwU2V0P3RoaXMubG9hZCgpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5sb2FkKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmwpLHR0KEMwKSx0dCh3MCksdHQo'@;
put 'R2wpLHR0KERzKSx0dChiZCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oS1plLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQuZmlsZVVwbG9hZElucHV0Q29tcExp'@;
put 'c3Q9aCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNvbnRlbnQtY29udGFpbmVyIixkLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwi'@;
put 'bmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElkIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVw'@;
put 'Il0sWyJzZWFyY2hYTE1hcFRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQi'@;
put 'LDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxh'@;
put 'dGl2ZSIsMywidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiIsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwt'@;
put 'Ym9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAw'@;
put 'Il0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywidXBsb2FkZXIiLCJjaGFu'@;
put 'Z2UiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhY3Rpb25C'@;
put 'dXR0b25zIiwiIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwi'@;
put 'bm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsx'@;
put 'LCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0'@;
put 'LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWzEsIm1sLTEwIiwzLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1m'@;
put 'bGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdC10YWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJoZWlnaHQi'@;
put 'LCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsi'@;
put 'Y2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWNvbC0xMiBjbHItY29sLWxnLTQiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00Il0sWyJ0eXBlIiwiYnV0dG9uIiwx'@;
put 'LCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwidGltZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpLEplKDEsWFplLDIsMCwiZGl2IiwwKSxtZSgyLCJjbHItdHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDEpKDQsImRpdiIsMikoNSwiaW5wdXQiLDMsNCkseHQoIm5nTW9k'@;
put 'ZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNlYXJjaFN0cmluZz1mfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBkLnhsbWFwTGlzdE9uRmlsdGVyKCl9KSx5ZSgpLEplKDcsSlplLDEsMCwiY2xyLWljb24iLDUpLEplKDgsUVplLDEsMCwiY2xyLWljb24iLDYpLHllKCkoKSxK'@;
put 'ZSg5LGVZZSw1LDMsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDEwLCJkaXYiLDgpLEplKDExLHJZZSw0LDIsImRpdiIsOSksSmUoMTIsaVllLDYsMSwiZGl2IiwxMCksSmUoMTMsbFllLDI2LDI0LCJkaXYiLDExKSxtZSgxNCwiY2xyLW1vZGFsIiwxMikseHQoImZpbGVPdmVyIixmdW5j'@;
put 'dGlvbihmKXtyZXR1cm4gZC5maWxlT3ZlckJhc2UoZil9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmdldEZpbGVEZXNjKGYsITApfSkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2hvd1VwbG9hZE1vZGFsPWZ9KSxtZSgxNSwiaDMiLDEzKSxO'@;
put 'ZSgxNiwiVXBsb2FkIEZpbGUiKSx5ZSgpLG1lKDE3LCJkaXYiLDE0KSgxOCwiZGl2IiwxNSkoMTksInNwYW4iKSxOZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSx5ZSgpKCksbWUoMjEsImRpdiIsMTYpKDIyLCJkaXYiLDE3KSgyMywiZGl2IiwxOCkoMjQsInNwYW4iLDE5'@;
put 'KSgyNSwibGFiZWwiLDIwKSxOZSgyNiwiIEJyb3dzZSAiKSx5ZSgpKCksbWUoMjcsImlucHV0IiwyMSwyMikseHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0RmlsZURlc2MoZil9KSx5ZSgpKCkoKSgpKCkoKSxtZSgyOSwiY2xyLW1vZGFsIiwyMykseHQoImNsck1vZGFsT3Bl'@;
put 'bkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9Zn0pLG1lKDMwLCJoMyIsMTMpLE5lKDMxLCJOb3RpY2UiKSx5ZSgpLG1lKDMyLCJkaXYiLDE0KSgzMywicCIsMjQpLE5lKDM0KSx5ZSgpKCksbWUoMzUsImRpdiIsMjUpKDM2LCJidXR0b24iLDI2KSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxOZSgzNywiIENhbmNlbCAiKSx5ZSgpLG1lKDM4LCJidXR0b24iLDI2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3VibWl0KCksZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDM5LCIg'@;
put 'U3VibWl0ICIpLHllKCkoKSgpKCksSmUoNDAsaFllLDQsMywibmctdGVtcGxhdGUiLG51bGwsMjcsa2MpKSwyJmEpe2NvbnN0IGg9JGkoNik7Q2UoMSksUmUoIm5nSWYiLGQueGxtYXBzTG9hZGluZyksQ2UoNCksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIs'@;
put 'aC52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGgudmFsdWUubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0Zvck9mIixkLnhsbWFwcyksQ2UoMiksUmUoIm5nSWYiLCFkLnNlbGVjdGVkWExNYXApLENlKDEpLFJlKCJuZ0lmIixkLmlzTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFkLmlz'@;
put 'TG9hZGluZyYmZC5zZWxlY3RlZFhMTWFwKSxDZSgxKSxSZSgidXBsb2FkZXIiLGQudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxPcGVuIixkLnNob3dVcGxvYWRNb2RhbCks'@;
put 'Q2UoMTMpLFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlciksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5zdWJtaXRMaW1pdE5vdGljZSksQ2UoNSksZ3IoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dz'@;
put 'IGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0sZGVwZW5kZW5jaWVzOlt4eSxCdSxXYSxCcyxPcyxkZCxnMSxEcCxrYSxvdSxzdSxFOCxVcyxmMSxJcCxPcCxkZyxScCxM'@;
put 'cCxjZyx1MixuMyx4cyxaaSxyZCxZYixrc2UsQXNlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZs'@;
put 'ZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uc3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0g'@;
put 'LjVyZW0gMXJlbX0udmlld2VyVGl0bGVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGlu'@;
put 'ZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX0uZHJvcC1hcmVhW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVD'@;
put 'T01QJV17Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9Il19KSxjfSkoKTtjb25zdCBmWWU9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQo'@;
put 'MCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6RnNlfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6RnNlfV19XTtsZXQgcFllPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2hjLmZvckNoaWxkKGZZZSksaGNdfSksY30pKCk7RnooKTtsZXQgZ1llPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W183LHBZZSxxbCxfdSxCNyxvbyxRQSxDMl19KSxjfSkoKTtjb25zdCBtWWU9W3twYXRoOiIiLGNvbXBvbmVudDpzWmUsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVk'@;
put 'aXJlY3RUbzoidGFibGVzIn0se3BhdGg6InRhYmxlcyIsY29tcG9uZW50OllaZX0se3BhdGg6ImZpbGVzIixsb2FkQ2hpbGRyZW46KCk9PmdZZX1dfV07bGV0IHZZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltoYy5mb3JDaGlsZChtWWUpLGhjXX0pLGN9KSgpLGZVPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSks'@;
put 'Yy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3ZZZSxxbCxfdSxCNyxvbyxRQSxDMl19KSxjfSkoKSxwVT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtp'@;
put 'bXBvcnRzOltvbyxfdSxvbyxxbCxCNyx0dyxDMl19KSxjfSkoKSxIc2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28s'@;
put 'cWwscFUsXzcsU3NlLFJvZSxRQSxDMl19KSxjfSkoKTtGeigpO2xldCBfWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbSHNlLG9v'@;
put 'LHFsLG9aZSxfdSxfNy5mb3JSb290KCksQjcsQzIsVjcsZlUsdHcsUUEsU3NlLHBVXX0pLGN9KSgpLGdVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/'@;
put 'LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VT'@;
put 'ZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExv'@;
put 'Y2tlZC52YWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEMwKSxhcihEcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIE5zZShjLGwpeyhmdW5jdGlvbiBiWWUoYyxs'@;
put 'KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX1mdW5jdGlvbiBtVShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX1mdW5jdGlvbiBsdyhjKXtyZXR1cm4obHc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24obCl7cmV0dXJu'@;
put 'IHR5cGVvZiBsfTpmdW5jdGlvbihsKXtyZXR1cm4gbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmbC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGx9KShjKX1mdW5jdGlvbiBGMChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g'@;
put 'd1llKGMpe3ZhciBsPWZ1bmN0aW9uIHlZZShjLGwpe2lmKCJvYmplY3QiIT09bHcoYyl8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09bHcoZCkpcmV0'@;
put 'dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWx3KGwpP2w6U3RyaW5nKGwpfShsKSlp'@;
put 'biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31sZXQgbDQ9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6'@;
put 'ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVy'@;
put 'Om51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlvbiBWc2UoYyl7bDQ9Y31jb25zdCBCc2U9L1smPD4iJ10vLENZZT1uZXcgUmVnRXhwKEJzZS5zb3VyY2UsImciKSxqc2U9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLFNZZT1u'@;
put 'ZXcgUmVnRXhwKGpzZS5zb3VyY2UsImciKSxNWWU9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LHpzZT1jPT5NWWVbY107ZnVuY3Rpb24gU3UoYyxsKXtpZihsKXtpZihCc2UudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKENZZSx6'@;
put 'c2UpfWVsc2UgaWYoanNlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZShTWWUsenNlKTtyZXR1cm4gY31jb25zdCB4WWU9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gVXNlKGMpe3JldHVybiBjLnJlcGxhY2UoeFllLChsLGEpPT4iY29sb24i'@;
put 'PT09KGE9YS50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09YS5jaGFyQXQoMCk/IngiPT09YS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK2Euc3Vic3RyaW5nKDEpKToiIil9Y29uc3QgRVllPS8o'@;
put 'XnxbXlxbXSlcXi9nO2Z1bmN0aW9uIGZhKGMsbCl7Yz0ic3RyaW5nIj09dHlwZW9mIGM/YzpjLnNvdXJjZSxsPWx8fCIiO2NvbnN0IGE9e3JlcGxhY2U6KGQsaCk9PihoPShoPWguc291cmNlfHxoKS5yZXBsYWNlKEVZZSwiJDEiKSxjPWMucmVwbGFjZShkLGgpLGEpLGdldFJlZ2V4OigpPT5u'@;
put 'ZXcgUmVnRXhwKGMsbCl9O3JldHVybiBhfWNvbnN0IGtZZT0vW15cdzpdL2csQVllPS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gWnNlKGMsbCxhKXtpZihjKXtsZXQgZDt0cnl7ZD1kZWNvZGVVUklDb21wb25lbnQoVXNlKGEpKS5yZXBsYWNlKGtZZSwiIikudG9M'@;
put 'b3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZC5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH1sJiYhQVllLnRlc3QoYSkmJihhPWZ1bmN0aW9uIElZZShjLGwpe2VU'@;
put 'WyIgIitjXXx8KGVUWyIgIitjXT1UWWUudGVzdChjKT9jKyIvIjpuVChjLCIvIiwhMCkpO2NvbnN0IGE9LTE9PT0oYz1lVFsiICIrY10pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8iPT09bC5zdWJzdHJpbmcoMCwyKT9hP2w6Yy5yZXBsYWNlKERZZSwiJDEiKStsOiIvIj09PWwuY2hhckF0KDAp'@;
put 'P2E/bDpjLnJlcGxhY2UoTFllLCIkMSIpK2w6YytsfShsLGEpKTt0cnl7YT1lbmNvZGVVUkkoYSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gYX1jb25zdCBlVD17fSxUWWU9L15bXjpdKzpcLypbXi9dKiQvLERZZT0vXihbXjpdKzopW1xzXFNdKiQvLExZ'@;
put 'ZT0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sdFQ9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBZc2UoYyxsKXtjb25zdCBkPWMucmVwbGFjZSgvXHwvZywoZixfLFQpPT57bGV0IFc9ITEsaWU9Xztmb3IoOy0taWU+PTAmJiJcXCI9PT1UW2llXTspVz0hVztyZXR1cm4gVz8ifCI6'@;
put 'IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaD0wO2lmKGRbMF0udHJpbSgpfHxkLnNoaWZ0KCksZC5sZW5ndGg+MCYmIWRbZC5sZW5ndGgtMV0udHJpbSgpJiZkLnBvcCgpLGQubGVuZ3RoPmwpZC5zcGxpY2UobCk7ZWxzZSBmb3IoO2QubGVuZ3RoPGw7KWQucHVzaCgiIik7Zm9yKDtoPGQubGVu'@;
put 'Z3RoO2grKylkW2hdPWRbaF0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiBkfWZ1bmN0aW9uIG5UKGMsbCxhKXtjb25zdCBkPWMubGVuZ3RoO2lmKDA9PT1kKXJldHVybiIiO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWMuY2hhckF0KGQtaC0xKTtpZihmIT09bHx8YSl7'@;
put 'aWYoZj09PWx8fCFhKWJyZWFrO2grK31lbHNlIGgrK31yZXR1cm4gYy5zbGljZSgwLGQtaCl9ZnVuY3Rpb24gV3NlKGMsbCxhLGQpe2NvbnN0IGg9bC5ocmVmLGY9bC50aXRsZT9TdShsLnRpdGxlKTpudWxsLF89Y1sxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09Y1sw'@;
put 'XS5jaGFyQXQoMCkpe2Quc3RhdGUuaW5MaW5rPSEwO2NvbnN0IFQ9e3R5cGU6ImxpbmsiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6Xyx0b2tlbnM6ZC5pbmxpbmVUb2tlbnMoXyl9O3JldHVybiBkLnN0YXRlLmluTGluaz0hMSxUfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmEsaHJlZjpo'@;
put 'LHRpdGxlOmYsdGV4dDpTdShfKX19Y2xhc3MgclR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0fXNwYWNlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMobCk7aWYoYSYmYVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzphWzBdfX1j'@;
put 'b2RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6YVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFu'@;
put 'dGljP2Q6blQoZCwiXG4iKX19fWZlbmNlcyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLGg9ZnVuY3Rpb24gUFllKGMsbCl7Y29uc3QgYT1jLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobnVsbD09PWEpcmV0dXJuIGw7Y29u'@;
put 'c3QgZD1hWzFdO3JldHVybiBsLnNwbGl0KCJcbiIpLm1hcChoPT57Y29uc3QgZj1oLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PWYpcmV0dXJuIGg7Y29uc3RbX109ZjtyZXR1cm4gXy5sZW5ndGg+PWQubGVuZ3RoP2guc2xpY2UoZC5sZW5ndGgpOmh9KS5qb2luKCJcbiIpfShkLGFbM118fCIi'@;
put 'KTtyZXR1cm57dHlwZToiY29kZSIscmF3OmQsbGFuZzphWzJdP2FbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVsyXSx0ZXh0Omh9fX1oZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMobCk7aWYoYSl7bGV0'@;
put 'IGQ9YVsyXS50cmltKCk7aWYoLyMkLy50ZXN0KGQpKXtjb25zdCBoPW5UKGQsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaHx8LyAkLy50ZXN0KGgpKSYmKGQ9aC50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDphWzFdLmxlbmd0aCx0ZXh0OmQsdG9r'@;
put 'ZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19aHIobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaHIiLHJhdzphWzBdfX1ibG9ja3F1b3RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMobCk7aWYoYSl7'@;
put 'Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGg9dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgZj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1oLHt0eXBlOiJibG9ja3F1'@;
put 'b3RlIixyYXc6YVswXSx0b2tlbnM6Zix0ZXh0OmR9fX1saXN0KGwpe2xldCBhPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGwpO2lmKGEpe2xldCBkLGgsZixfLFQsVyxpZSxwZSx3ZSxFZSxaZSxpdCxldD1hWzFdLnRyaW0oKTtjb25zdCB5dD1ldC5sZW5ndGg+MSxFdD17dHlwZToibGlz'@;
put 'dCIscmF3OiIiLG9yZGVyZWQ6eXQsc3RhcnQ6eXQ/K2V0LnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtldD15dD9gXFxkezEsOX1cXCR7ZXQuc2xpY2UoLTEpfWA6YFxcJHtldH1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGV0PXl0P2V0OiJbKistXSIpO2NvbnN0IFN0PW5l'@;
put 'dyBSZWdFeHAoYF4oIHswLDN9JHtldH0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKGl0PSExLChhPVN0LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQubGVuZ3RoKSxwZT1hWzJdLnNwbGl0'@;
put 'KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sbm49PiIgIi5yZXBlYXQoMypubi5sZW5ndGgpKSx3ZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhfPTIsWmU9cGUudHJpbUxlZnQoKSk6KF89YVsyXS5zZWFyY2goL1teIF0vKSxfPV8+ND8xOl8sWmU9cGUuc2xp'@;
put 'Y2UoXyksXys9YVsxXS5sZW5ndGgpLFc9ITEsIXBlJiYvXiAqJC8udGVzdCh3ZSkmJihkKz13ZSsiXG4iLGw9bC5zdWJzdHJpbmcod2UubGVuZ3RoKzEpLGl0PSEwKSwhaXQpe2NvbnN0IG5uPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLF8tMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4p'@;
put 'XSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksdm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLE5uPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLF8tMSl9fSg/'@;
put 'OlxgXGBcYHx+fn4pYCksY3I9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19I2ApO2Zvcig7bCYmKEVlPWwuc3BsaXQoIlxuIiwxKVswXSx3ZT1FZSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJih3ZT13ZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikp'@;
put 'LCEoTm4udGVzdCh3ZSl8fGNyLnRlc3Qod2UpfHxubi50ZXN0KHdlKXx8dm4udGVzdChsKSkpOyl7aWYod2Uuc2VhcmNoKC9bXiBdLyk+PV98fCF3ZS50cmltKCkpWmUrPSJcbiIrd2Uuc2xpY2UoXyk7ZWxzZXtpZihXfHxwZS5zZWFyY2goL1teIF0vKT49NHx8Tm4udGVzdChwZSl8fGNyLnRl'@;
put 'c3QocGUpfHx2bi50ZXN0KHBlKSlicmVhaztaZSs9IlxuIit3ZX0hVyYmIXdlLnRyaW0oKSYmKFc9ITApLGQrPUVlKyJcbiIsbD1sLnN1YnN0cmluZyhFZS5sZW5ndGgrMSkscGU9d2Uuc2xpY2UoXyl9fUV0Lmxvb3NlfHwoaWU/RXQubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChkKSYmKGll'@;
put 'PSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGg9L15cW1sgeFhdXF0gLy5leGVjKFplKSxoJiYoZj0iWyBdICIhPT1oWzBdLFplPVplLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSksRXQuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZCx0YXNrOiEhaCxjaGVja2VkOmYsbG9v'@;
put 'c2U6ITEsdGV4dDpaZX0pLEV0LnJhdys9ZH1FdC5pdGVtc1tFdC5pdGVtcy5sZW5ndGgtMV0ucmF3PWQudHJpbVJpZ2h0KCksRXQuaXRlbXNbRXQuaXRlbXMubGVuZ3RoLTFdLnRleHQ9WmUudHJpbVJpZ2h0KCksRXQucmF3PUV0LnJhdy50cmltUmlnaHQoKTtjb25zdCBKdD1FdC5pdGVtcy5s'@;
put 'ZW5ndGg7Zm9yKFQ9MDtUPEp0O1QrKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxFdC5pdGVtc1tUXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhFdC5pdGVtc1tUXS50ZXh0LFtdKSwhRXQubG9vc2Upe2NvbnN0IG5uPUV0Lml0ZW1zW1RdLnRva2Vucy5maWx0ZXIoTm49PiJz'@;
put 'cGFjZSI9PT1Obi50eXBlKSx2bj1ubi5sZW5ndGg+MCYmbm4uc29tZShObj0+L1xuLipcbi8udGVzdChObi5yYXcpKTtFdC5sb29zZT12bn1pZihFdC5sb29zZSlmb3IoVD0wO1Q8SnQ7VCsrKUV0Lml0ZW1zW1RdLmxvb3NlPSEwO3JldHVybiBFdH19aHRtbChsKXtjb25zdCBhPXRoaXMucnVs'@;
put 'ZXMuYmxvY2suaHRtbC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzphWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09YVsxXXx8InNjcmlwdCI9PT1hWzFdfHwic3R5bGUiPT09YVsxXSksdGV4dDphWzBdfTtpZih0aGlzLm9w'@;
put 'dGlvbnMuc2FuaXRpemUpe2NvbnN0IGg9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOlN1KGFbMF0pO2QudHlwZT0icGFyYWdyYXBoIixkLnRleHQ9aCxkLnRva2Vucz10aGlzLmxleGVyLmlubGluZShoKX1yZXR1cm4gZH19ZGVmKGwpe2NvbnN0'@;
put 'IGE9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGg9YVsyXT9hWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIi'@;
put 'LGY9YVszXT9hWzNdLnN1YnN0cmluZygxLGFbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6ZCxyYXc6YVswXSxocmVmOmgsdGl0bGU6Zn19fXRhYmxlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5i'@;
put 'bG9jay50YWJsZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6InRhYmxlIixoZWFkZXI6WXNlKGFbMV0pLm1hcChoPT4oe3RleHQ6aH0pKSxhbGlnbjphWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czphWzNdJiZhWzNdLnRyaW0oKT9hWzNdLnJl'@;
put 'cGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZihkLmhlYWRlci5sZW5ndGg9PT1kLmFsaWduLmxlbmd0aCl7ZC5yYXc9YVswXTtsZXQgZixfLFQsVyxoPWQuYWxpZ24ubGVuZ3RoO2ZvcihmPTA7ZjxoO2YrKylkLmFsaWduW2ZdPS9eICotKzogKiQvLnRlc3QoZC5hbGln'@;
put 'bltmXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGQuYWxpZ25bZl0pPyJsZWZ0IjpudWxsO2ZvcihoPWQucm93cy5sZW5ndGgsZj0wO2Y8aDtmKyspZC5yb3dzW2ZdPVlzZShkLnJvd3NbZl0sZC5oZWFkZXIubGVuZ3Ro'@;
put 'KS5tYXAoaWU9Pih7dGV4dDppZX0pKTtmb3IoaD1kLmhlYWRlci5sZW5ndGgsXz0wO188aDtfKyspZC5oZWFkZXJbX10udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGQuaGVhZGVyW19dLnRleHQpO2ZvcihoPWQucm93cy5sZW5ndGgsXz0wO188aDtfKyspZm9yKFc9ZC5yb3dzW19dLFQ9MDtU'@;
put 'PFcubGVuZ3RoO1QrKylXW1RdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShXW1RdLnRleHQpO3JldHVybiBkfX19bGhlYWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6Ij0i'@;
put 'PT09YVsyXS5jaGFyQXQoMCk/MToyLHRleHQ6YVsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVsxXSl9fXBhcmFncmFwaChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD0iXG4iPT09YVsxXS5jaGFyQXQoYVsxXS5sZW5ndGgt'@;
put 'MSk/YVsxXS5zbGljZSgwLC0xKTphWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzphWzBdLHRleHQ6ZCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZCl9fX10ZXh0KGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToidGV4dCIs'@;
put 'cmF3OmFbMF0sdGV4dDphWzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzBdKX19ZXNjYXBlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6YVswXSx0ZXh0OlN1KGFbMV0pfX10YWcobCl7Y29uc3Qg'@;
put 'YT10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhsKTtpZihhKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChhWzBdKSYmKHRo'@;
put 'aXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwv'@;
put 'KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OmFbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3Qmxv'@;
put 'Y2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTpTdShhWzBdKTphWzBdfX1saW5rKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxp'@;
put 'bmUubGluay5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KGQpKXtpZighLz4kLy50ZXN0KGQpKXJldHVybjtjb25zdCBfPW5UKGQuc2xpY2UoMCwtMSksIlxcIik7aWYoKGQubGVuZ3RoLV8ubGVuZ3RoKSUyPT0w'@;
put 'KXJldHVybn1lbHNle2NvbnN0IF89ZnVuY3Rpb24gUlllKGMsbCl7aWYoLTE9PT1jLmluZGV4T2YobFsxXSkpcmV0dXJuLTE7Y29uc3QgYT1jLmxlbmd0aDtsZXQgZD0wLGg9MDtmb3IoO2g8YTtoKyspaWYoIlxcIj09PWNbaF0paCsrO2Vsc2UgaWYoY1toXT09PWxbMF0pZCsrO2Vsc2UgaWYo'@;
put 'Y1toXT09PWxbMV0mJihkLS0sZDwwKSlyZXR1cm4gaDtyZXR1cm4tMX0oYVsyXSwiKCkiKTtpZihfPi0xKXtjb25zdCBXPSgwPT09YVswXS5pbmRleE9mKCIhIik/NTo0KSthWzFdLmxlbmd0aCtfO2FbMl09YVsyXS5zdWJzdHJpbmcoMCxfKSxhWzBdPWFbMF0uc3Vic3RyaW5nKDAsVykudHJp'@;
put 'bSgpLGFbM109IiJ9fWxldCBoPWFbMl0sZj0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2NvbnN0IF89L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKGgpO18mJihoPV9bMV0sZj1fWzNdKX1lbHNlIGY9YVszXT9hWzNdLnNsaWNlKDEsLTEpOiIiO3JldHVybiBoPWgu'@;
put 'dHJpbSgpLC9ePC8udGVzdChoKSYmKGg9dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KGQpP2guc2xpY2UoMSk6aC5zbGljZSgxLC0xKSksV3NlKGEse2hyZWY6aCYmaC5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmYmJmYucmVwbGFjZSh0'@;
put 'aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sYVswXSx0aGlzLmxleGVyKX19cmVmbGluayhsLGEpe2xldCBkO2lmKChkPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhsKSl8fChkPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGwpKSl7bGV0IGg9KGRbMl18fGRb'@;
put 'MV0pLnJlcGxhY2UoL1xzKy9nLCIgIik7aWYoaD1hW2gudG9Mb3dlckNhc2UoKV0sIWgpe2NvbnN0IGY9ZFswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzpmLHRleHQ6Zn19cmV0dXJuIFdzZShkLGgsZFswXSx0aGlzLmxleGVyKX19ZW1TdHJvbmcobCxhLGQ9IiIpe2xldCBo'@;
put 'PXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKGwpO2lmKCEoIWh8fGhbM10mJmQubWF0Y2goL1tccHtMfVxwe059XS91KSkmJighaFsxXSYmIWhbMl18fCFkfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGQpKSl7Y29uc3QgXz1oWzBdLmxlbmd0aC0x'@;
put 'O2xldCBULFcsaWU9XyxwZT0wO2NvbnN0IHdlPSIqIj09PWhbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVuZDtmb3Iod2UubGFzdEluZGV4PTAsYT1hLnNsaWNlKC0xKmwubGVuZ3RoK18pO251bGwh'@;
put 'PShoPXdlLmV4ZWMoYSkpOyl7aWYoVD1oWzFdfHxoWzJdfHxoWzNdfHxoWzRdfHxoWzVdfHxoWzZdLCFUKWNvbnRpbnVlO2lmKFc9VC5sZW5ndGgsaFszXXx8aFs0XSl7aWUrPVc7Y29udGludWV9aWYoKGhbNV18fGhbNl0pJiZfJTMmJiEoKF8rVyklMykpe3BlKz1XO2NvbnRpbnVlfWlmKGll'@;
put 'LT1XLGllPjApY29udGludWU7Vz1NYXRoLm1pbihXLFcraWUrcGUpO2NvbnN0IEVlPWwuc2xpY2UoMCxfK2guaW5kZXgrVysxKTtpZihNYXRoLm1pbihfLFcpJTIpe2NvbnN0IGl0PUVlLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OkVlLHRleHQ6aXQsdG9rZW5zOnRoaXMubGV4'@;
put 'ZXIuaW5saW5lVG9rZW5zKGl0KX19Y29uc3QgWmU9RWUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OkVlLHRleHQ6WmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKFplKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhl'@;
put 'YyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9U3UoZCwhMCkse3R5cGU6ImNvZGVzcGFuIixy'@;
put 'YXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJkZWwiLHJhdzph'@;
put 'WzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwpO2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD1TdSh0aGlzLm9wdGlvbnMubWFuZ2xl'@;
put 'P2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9U3UoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4'@;
put 'ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPVN1KHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IF87ZG97Xz1kWzBdLGRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdoaWxlKF8hPT1kWzBd'@;
put 'KTtoPVN1KGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5p'@;
put 'bmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOlN1KGRbMF0pOmRbMF06U3UodGhpcy5v'@;
put 'cHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCBUbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHsz'@;
put 'LH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4r'@;
put 'fCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86'@;
put 'PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xc'@;
put 'c1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxz'@;
put 'XFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148'@;
put 'XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6dFQsbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0r'@;
put 'KD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidc'@;
put 'bl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307VG8uZGVmPWZhKFRvLmRlZikucmVwbGFjZSgibGFiZWwiLFRvLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLFRvLl90aXRsZSkuZ2V0UmVnZXgoKSxUby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sVG8ubGlzdEl0ZW1T'@;
put 'dGFydD1mYSgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLFRvLmJ1bGxldCkuZ2V0UmVnZXgoKSxUby5saXN0PWZhKFRvLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxUby5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpc'@;
put 'XCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrVG8uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksVG8uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91'@;
put 'cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8'@;
put 'bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsVG8uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLFRvLmh0bWw9ZmEoVG8u'@;
put 'aHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLFRvLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLFRvLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJl'@;
put 'Z2V4KCksVG8ubGhlYWRpbmc9ZmEoVG8ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxUby5idWxsZXQpLmdldFJlZ2V4KCksVG8ucGFyYWdyYXBoPWZhKFRvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNl'@;
put 'KCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86Wyor'@;
put 'LV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykuZ2V0UmVnZXgoKSxUby5ibG9ja3F1b3RlPWZhKFRvLmJsb2NrcXVvdGUpLnJlcGxhY2Uo'@;
put 'InBhcmFncmFwaCIsVG8ucGFyYWdyYXBoKS5nZXRSZWdleCgpLFRvLm5vcm1hbD17Li4uVG99LFRvLmdmbT17Li4uVG8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxu'@;
put 'KCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sVG8uZ2ZtLnRhYmxlPWZhKFRvLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIp'@;
put 'LnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLild'@;
put 'KSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFRvLl90YWcpLmdldFJlZ2V4KCksVG8uZ2ZtLnBhcmFncmFwaD1mYShUby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIs'@;
put 'VG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLFRvLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVte'@;
put 'YFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFRv'@;
put 'Ll90YWcpLmdldFJlZ2V4KCksVG8ucGVkYW50aWM9ey4uLlRvLm5vcm1hbCxodG1sOmZhKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10q'@;
put 'KSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50IixUby5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8'@;
put 'cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5n'@;
put 'Oi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6dFQsbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6ZmEoVG8ubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpb'@;
put 'XlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixUby5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IFhpPXtlc2NhcGU6L15c'@;
put 'XChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOnRULHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRl'@;
put 'KSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwp'@;
put 'XF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkp'@;
put 'LyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNd'@;
put 'KFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShf'@;
put 'KykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xz'@;
put 'XFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDp0VCx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVu'@;
put 'Y3R1YXRpb25dKS99O2Z1bmN0aW9uIEZZZShjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgv'@;
put 'KF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBHc2UoYyl7bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsrKWQ9Yy5jaGFyQ29k'@;
put 'ZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1YaS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsWGkucHVuY3R1YXRpb249ZmEoWGkucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9n'@;
put 'LFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csWGkuYW55UHVuY3R1YXRpb249L1xcW3B1bmN0XS9nLFhpLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLFhpLl9jb21tZW50PWZhKFRv'@;
put 'Ll9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLmxEZWxpbT1mYShYaS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5lbVN0cm9uZy5yRGVsaW1B'@;
put 'c3Q9ZmEoWGkuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLnJEZWxpbVVuZD1mYShYaS5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24p'@;
put 'LmdldFJlZ2V4KCksWGkuYW55UHVuY3R1YXRpb249ZmEoWGkuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuX2VzY2FwZXM9ZmEoWGkuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRp'@;
put 'b24pLmdldFJlZ2V4KCksWGkuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sWGkuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0o'@;
put 'PzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sWGkuYXV0b2xpbms9ZmEoWGkuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsWGkuX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLFhpLl9lbWFpbCkuZ2V0UmVnZXgoKSxYaS5fYXR0cmlidXRlPS9ccytbYS16QS1a'@;
put 'Ol9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLFhpLnRhZz1mYShYaS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLFhpLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLFhpLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksWGku'@;
put 'X2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLFhpLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovLFhpLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/Olxc'@;
put 'XCk/fFteKVxcXSkqXCkvLFhpLmxpbms9ZmEoWGkubGluaykucmVwbGFjZSgibGFiZWwiLFhpLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsWGkuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixYaS5fdGl0bGUpLmdldFJlZ2V4KCksWGkucmVmbGluaz1mYShYaS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJl'@;
put 'bCIsWGkuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLFRvLl9sYWJlbCkuZ2V0UmVnZXgoKSxYaS5ub2xpbms9ZmEoWGkubm9saW5rKS5yZXBsYWNlKCJyZWYiLFRvLl9sYWJlbCkuZ2V0UmVnZXgoKSxYaS5yZWZsaW5rU2VhcmNoPWZhKFhpLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZs'@;
put 'aW5rIixYaS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLFhpLm5vbGluaykuZ2V0UmVnZXgoKSxYaS5ub3JtYWw9ey4uLlhpfSxYaS5wZWRhbnRpYz17Li4uWGkubm9ybWFsLHN0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8Xlwq'@;
put 'XCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6'@;
put 'L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpmYSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6ZmEoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLFhp'@;
put 'Ll9sYWJlbCkuZ2V0UmVnZXgoKX0sWGkuZ2ZtPXsuLi5YaS5ub3JtYWwsZXNjYXBlOmZhKFhpLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpb'@;
put 'YS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsq'@;
put 'XycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+'@;
put 'X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sWGkuZ2ZtLnVybD1mYShYaS5nZm0udXJsLCJpIikucmVwbGFj'@;
put 'ZSgiZW1haWwiLFhpLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksWGkuYnJlYWtzPXsuLi5YaS5nZm0sYnI6ZmEoWGkuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OmZhKFhpLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJl'@;
put 'cGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3Mga2h7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9bHx8bDQsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMu'@;
put 'dG9rZW5pemVyfHxuZXcgclQsdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3'@;
put 'QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazpUby5ub3JtYWwsaW5saW5lOlhpLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPVRvLnBlZGFudGljLGEuaW5saW5lPVhpLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1Uby5nZm0sYS5pbmxp'@;
put 'bmU9dGhpcy5vcHRpb25zLmJyZWFrcz9YaS5icmVha3M6WGkuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6VG8saW5saW5lOlhpfX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBraChhKS5sZXgobCl9c3RhdGljIGxleElubGlu'@;
put 'ZShsLGEpe3JldHVybiBuZXcga2goYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhpcy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2Vucyhh'@;
put 'LnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLF87Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXiggKikoXHQrKS9nbSwo'@;
put 'VCxXLGllKT0+VysiICAgICIucmVwZWF0KGllLmxlbmd0aCkpO2w7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKFQ9PiEhKGQ9VC5jYWxsKHtsZXhlcjp0aGlzfSxs'@;
put 'LGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuc3BhY2UobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwxPT09ZC5yYXcubGVuZ3RoJiZhLmxlbmd0aD4wP2FbYS5sZW5ndGgtMV0ucmF3Kz0iXG4iOmEu'@;
put 'cHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/YS5wdXNoKGQpOihoLnJhdys9IlxuIitkLnJhdyxoLnRl'@;
put 'eHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5mZW5jZXMobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10'@;
put 'aGlzLnRva2VuaXplci5oZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXpl'@;
put 'ci5ibG9ja3F1b3RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGlzdChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmh0bWwo'@;
put 'bCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWYobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/'@;
put 'dGhpcy50b2tlbnMubGlua3NbZC50YWddfHwodGhpcy50b2tlbnMubGlua3NbZC50YWddPXtocmVmOmQuaHJlZix0aXRsZTpkLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNy'@;
put 'Yz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFibGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChk'@;
put 'KTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBUPTEvMDtjb25zdCBXPWwuc2xpY2UoMSk7bGV0IGllO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlv'@;
put 'bihwZSl7aWU9cGUuY2FsbCh7bGV4ZXI6dGhpc30sVyksIm51bWJlciI9PXR5cGVvZiBpZSYmaWU+PTAmJihUPU1hdGgubWluKFQsaWUpKX0pLFQ8MS8wJiZUPj0wJiYoZj1sLnN1YnN0cmluZygwLFQrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoZD10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgo'@;
put 'ZikpKXtoPWFbYS5sZW5ndGgtMV0sXyYmInBhcmFncmFwaCI9PT1oLnR5cGU/KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOmEu'@;
put 'cHVzaChkKSxfPWYubGVuZ3RoIT09bC5sZW5ndGgsbD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGV4dChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3'@;
put 'Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBUPSJJbmZpbml0ZSBsb29wIG9uIGJ5'@;
put 'dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoVCk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKFQpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsYX1pbmxpbmUobCxhPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6'@;
put 'bCx0b2tlbnM6YX0pLGF9aW5saW5lVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLFQsVyxpZSxfPWw7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IHBlPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihwZS5sZW5ndGg+MClmb3IoO251bGwhPShUPXRoaXMudG9rZW5pemVyLnJ1'@;
put 'bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMoXykpOylwZS5pbmNsdWRlcyhUWzBdLnNsaWNlKFRbMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJihfPV8uc2xpY2UoMCxULmluZGV4KSsiWyIrImEiLnJlcGVhdChUWzBdLmxlbmd0aC0yKSsiXSIrXy5zbGljZSh0aGlzLnRva2VuaXpl'@;
put 'ci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoO251bGwhPShUPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhfKSk7KV89Xy5zbGljZSgwLFQuaW5kZXgpKyJbIisiYSIucmVwZWF0KFRbMF0ubGVuZ3RoLTIpKyJdIitfLnNsaWNl'@;
put 'KHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoO251bGwhPShUPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKF8pKTspXz1fLnNsaWNlKDAsVC5pbmRleCkrIisrIitfLnNsaWNlKHRoaXMudG9rZW5pemVy'@;
put 'LnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7bDspaWYoV3x8KGllPSIiKSxXPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUocGU9'@;
put 'PiEhKGQ9cGUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRo'@;
put 'aXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2Vu'@;
put 'aXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9'@;
put 'PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLF8saWUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9'@;
put 'dGhpcy50b2tlbml6ZXIuY29kZXNwYW4obCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5icihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5p'@;
put 'emVyLmRlbChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKGwsR3NlKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsm'@;
put 'JihkPXRoaXMudG9rZW5pemVyLnVybChsLEdzZSkpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBwZT0xLzA7Y29uc3Qg'@;
put 'd2U9bC5zbGljZSgxKTtsZXQgRWU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChmdW5jdGlvbihaZSl7RWU9WmUuY2FsbCh7bGV4ZXI6dGhpc30sd2UpLCJudW1iZXIiPT10eXBlb2YgRWUmJkVlPj0wJiYocGU9TWF0aC5taW4ocGUsRWUpKX0pLHBlPDEvMCYm'@;
put 'cGU+PTAmJihmPWwuc3Vic3RyaW5nKDAscGUrMSkpfWlmKGQ9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChmLEZZZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwiXyIhPT1kLnJhdy5zbGljZSgtMSkmJihpZT1kLnJhdy5zbGljZSgtMSkpLFc9ITAsaD1hW2EubGVuZ3RoLTFdLGgm'@;
put 'JiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgcGU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihwZSk7'@;
put 'YnJlYWt9dGhyb3cgbmV3IEVycm9yKHBlKX19cmV0dXJuIGF9fWNsYXNzIGlUe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNH1jb2RlKGwsYSxkKXtjb25zdCBoPShhfHwiIikubWF0Y2goL1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IGY9dGhpcy5v'@;
put 'cHRpb25zLmhpZ2hsaWdodChsLGgpO251bGwhPWYmJmYhPT1sJiYoZD0hMCxsPWYpfXJldHVybiBsPWwucmVwbGFjZSgvXG4kLywiIikrIlxuIixoPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K1N1KGgpKyciPicrKGQ/bDpTdShsLCEwKSkrIjwvY29kZT48'@;
put 'L3ByZT5cbiI6IjxwcmU+PGNvZGU+IisoZD9sOlN1KGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9ja3F1b3RlKGwpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7bH08L2Jsb2NrcXVvdGU+XG5gfWh0bWwobCxhKXtyZXR1cm4gbH1oZWFkaW5nKGwsYSxkLGgpe3JldHVybiB0aGlzLm9wdGlv'@;
put 'bnMuaGVhZGVySWRzP2A8aCR7YX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtoLnNsdWcoZCl9Ij4ke2x9PC9oJHthfT5cbmA6YDxoJHthfT4ke2x9PC9oJHthfT5cbmB9aHIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KGwsYSxk'@;
put 'KXtjb25zdCBoPWE/Im9sIjoidWwiO3JldHVybiI8IitoKyhhJiYxIT09ZD8nIHN0YXJ0PSInK2QrJyInOiIiKSsiPlxuIitsKyI8LyIraCsiPlxuIn1saXN0aXRlbShsKXtyZXR1cm5gPGxpPiR7bH08L2xpPlxuYH1jaGVja2JveChsKXtyZXR1cm4iPGlucHV0ICIrKGw/J2NoZWNrZWQ9IiIg'@;
put 'JzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBhcmFncmFwaChsKXtyZXR1cm5gPHA+JHtsfTwvcD5cbmB9dGFibGUobCxhKXtyZXR1cm4gYSYmKGE9YDx0Ym9keT4ke2F9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRo'@;
put 'ZWFkPlxuIitsKyI8L3RoZWFkPlxuIithKyI8L3RhYmxlPlxuIn10YWJsZXJvdyhsKXtyZXR1cm5gPHRyPlxuJHtsfTwvdHI+XG5gfXRhYmxlY2VsbChsLGEpe2NvbnN0IGQ9YS5oZWFkZXI/InRoIjoidGQiO3JldHVybihhLmFsaWduP2A8JHtkfSBhbGlnbj0iJHthLmFsaWdufSI+YDpgPCR7'@;
put 'ZH0+YCkrbCtgPC8ke2R9PlxuYH1zdHJvbmcobCl7cmV0dXJuYDxzdHJvbmc+JHtsfTwvc3Ryb25nPmB9ZW0obCl7cmV0dXJuYDxlbT4ke2x9PC9lbT5gfWNvZGVzcGFuKGwpe3JldHVybmA8Y29kZT4ke2x9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6'@;
put 'Ijxicj4ifWRlbChsKXtyZXR1cm5gPGRlbD4ke2x9PC9kZWw+YH1saW5rKGwsYSxkKXtpZihudWxsPT09KGw9WnNlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9JzxhIGhyZWY9IicrbCsnIic7cmV0dXJuIGEmJihoKz0nIHRp'@;
put 'dGxlPSInK2ErJyInKSxoKz0iPiIrZCsiPC9hPiIsaH1pbWFnZShsLGEsZCl7aWYobnVsbD09PShsPVpzZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPWA8aW1nIHNyYz0iJHtsfSIgYWx0PSIke2R9ImA7cmV0dXJuIGEmJiho'@;
put 'Kz1gIHRpdGxlPSIke2F9ImApLGgrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixofXRleHQobCl7cmV0dXJuIGx9fWNsYXNzIF9Ve3N0cm9uZyhsKXtyZXR1cm4gbH1lbShsKXtyZXR1cm4gbH1jb2Rlc3BhbihsKXtyZXR1cm4gbH1kZWwobCl7cmV0dXJuIGx9aHRtbChsKXtyZXR1cm4g'@;
put 'bH10ZXh0KGwpe3JldHVybiBsfWxpbmsobCxhLGQpe3JldHVybiIiK2R9aW1hZ2UobCxhLGQpe3JldHVybiIiK2R9YnIoKXtyZXR1cm4iIn19Y2xhc3MgYlV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxh'@;
put 'Y2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5zZWVu'@;
put 'Lmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlzLnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlhbGl6'@;
put 'ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIEFoe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgaVQsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlv'@;
put 'bnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgX1UsdGhpcy5zbHVnZ2VyPW5ldyBiVX1zdGF0aWMgcGFyc2UobCxhKXtyZXR1cm4gbmV3IEFoKGEpLnBhcnNlKGwpfXN0YXRpYyBwYXJzZUlubGluZShsLGEpe3JldHVy'@;
put 'biBuZXcgQWgoYSkucGFyc2VJbmxpbmUobCl9cGFyc2UobCxhPSEwKXtsZXQgaCxmLF8sVCxXLGllLHBlLHdlLEVlLFplLGl0LGV0LHl0LEV0LFN0LEp0LG5uLHZuLE5uLGQ9IiI7Y29uc3QgY3I9bC5sZW5ndGg7Zm9yKGg9MDtoPGNyO2grKylpZihaZT1sW2hdLHRoaXMub3B0aW9ucy5leHRl'@;
put 'bnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1taZS50eXBlXSYmKE5uPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1taZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sWmUpLCExIT09Tm58'@;
put 'fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKFplLnR5cGUpKSlkKz1Obnx8IiI7ZWxzZSBzd2l0Y2goWmUudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJo'@;
put 'ciI6ZCs9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVhZGluZyI6ZCs9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKSxaZS5kZXB0aCxVc2UodGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlz'@;
put 'LnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6ZCs9dGhpcy5yZW5kZXJlci5jb2RlKFplLnRleHQsWmUubGFuZyxaZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3Iod2U9IiIscGU9IiIsVD1aZS5oZWFkZXIubGVuZ3RoLGY9MDtmPFQ7ZisrKXBlKz10aGlzLnJlbmRlcmVy'@;
put 'LnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKFplLmhlYWRlcltmXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246WmUuYWxpZ25bZl19KTtmb3Iod2UrPXRoaXMucmVuZGVyZXIudGFibGVyb3cocGUpLEVlPSIiLFQ9WmUucm93cy5sZW5ndGgsZj0wO2Y8VDtmKyspe2ZvcihpZT1aZS5yb3dz'@;
put 'W2ZdLHBlPSIiLFc9aWUubGVuZ3RoLF89MDtfPFc7XysrKXBlKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKGllW19dLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpaZS5hbGlnbltfXX0pO0VlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHBlKX1kKz10aGlzLnJl'@;
put 'bmRlcmVyLnRhYmxlKHdlLEVlKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOkVlPXRoaXMucGFyc2UoWmUudG9rZW5zKSxkKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoRWUpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKGl0PVplLm9yZGVyZWQsZXQ9WmUuc3RhcnQseXQ9WmUubG9vc2Us'@;
put 'VD1aZS5pdGVtcy5sZW5ndGgsRWU9IiIsZj0wO2Y8VDtmKyspU3Q9WmUuaXRlbXNbZl0sSnQ9U3QuY2hlY2tlZCxubj1TdC50YXNrLEV0PSIiLFN0LnRhc2smJih2bj10aGlzLnJlbmRlcmVyLmNoZWNrYm94KEp0KSx5dD9TdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3JhcGgiPT09U3QudG9r'@;
put 'ZW5zWzBdLnR5cGU/KFN0LnRva2Vuc1swXS50ZXh0PXZuKyIgIitTdC50b2tlbnNbMF0udGV4dCxTdC50b2tlbnNbMF0udG9rZW5zJiZTdC50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiYidGV4dCI9PT1TdC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihTdC50b2tlbnNbMF0udG9rZW5z'@;
put 'WzBdLnRleHQ9dm4rIiAiK1N0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOlN0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OnZufSk6RXQrPXZuKSxFdCs9dGhpcy5wYXJzZShTdC50b2tlbnMseXQpLEVlKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKEV0LG5uLEp0KTtkKz10'@;
put 'aGlzLnJlbmRlcmVyLmxpc3QoRWUsaXQsZXQpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6ZCs9dGhpcy5yZW5kZXJlci5odG1sKFplLnRleHQsWmUuYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpkKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKFplLnRva2Vu'@;
put 'cykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKEVlPVplLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKFplLnRva2Vucyk6WmUudGV4dDtoKzE8Y3ImJiJ0ZXh0Ij09PWxbaCsxXS50eXBlOylaZT1sWysraF0sRWUrPSJcbiIrKFplLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKFplLnRva2Vucyk6'@;
put 'WmUudGV4dCk7ZCs9YT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChFZSk6RWU7Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgTHI9J1Rva2VuIHdpdGggIicrWmUudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJy'@;
put 'b3IoTHIpO3Rocm93IG5ldyBFcnJvcihMcil9fXJldHVybiBkfXBhcnNlSW5saW5lKGwsYSl7YT1hfHx0aGlzLnJlbmRlcmVyO2xldCBoLGYsXyxkPSIiO2NvbnN0IFQ9bC5sZW5ndGg7Zm9yKGg9MDtoPFQ7aCsrKWlmKGY9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRp'@;
put 'b25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXSYmKF89dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGYpLCExIT09X3x8IVsiZXNjYXBlIiwiaHRtbCIsImxp'@;
put 'bmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhmLnR5cGUpKSlkKz1ffHwiIjtlbHNlIHN3aXRjaChmLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOmQrPWEudGV4dChmLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6ZCs9'@;
put 'YS5odG1sKGYudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpkKz1hLmxpbmsoZi5ocmVmLGYudGl0bGUsdGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJpbWFnZSI6ZCs9YS5pbWFnZShmLmhyZWYsZi50aXRsZSxmLnRleHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpkKz1hLnN0'@;
put 'cm9uZyh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImVtIjpkKz1hLmVtKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOmQrPWEuY29kZXNwYW4oZi50ZXh0KTticmVhaztjYXNlImJyIjpkKz1hLmJyKCk7YnJlYWs7Y2Fz'@;
put 'ZSJkZWwiOmQrPWEuZGVsKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IFc9J1Rva2VuIHdpdGggIicrZi50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihX'@;
put 'KTt0aHJvdyBuZXcgRXJyb3IoVyl9fXJldHVybiBkfX1jbGFzcyBjd3tjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDR9cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19RjAoY3csInBhc3NUaHJvdWdoSG9va3MiLG5ldyBTZXQoWyJwcmVwcm9j'@;
put 'ZXNzIiwicG9zdHByb2Nlc3MiXSkpO3ZhciB5VT1uZXcgV2Vha1NldCwkc2U9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gcXNlKGMsbCl7cmV0dXJuKGEsZCxoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBkJiYoaD1kLGQ9bnVsbCk7Y29uc3QgZj17Li4uZH07ZD17Li4udGhpcy5kZWZhdWx0cywuLi5m'@;
put 'fTtjb25zdCBfPW1VKHRoaXMsJHNlLE5ZZSkuY2FsbCh0aGlzLGQuc2lsZW50LGQuYXN5bmMsaCk7aWYodHlwZW9mIGE+InUifHxudWxsPT09YSlyZXR1cm4gXyhuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIh'@;
put 'PXR5cGVvZiBhKXJldHVybiBfKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihmdW5jdGlvbiBPWWUoYyxsKXshY3x8Yy5zaWxlbnR8fChsJiZj'@;
put 'b25zb2xlLndhcm4oIm1hcmtlZCgpOiBjYWxsYmFjayBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvdXNpbmdf'@;
put 'cHJvI2FzeW5jIiksKGMuc2FuaXRpemV8fGMuc2FuaXRpemVyKSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc2FuaXRpemUgYW5kIHNhbml0aXplciBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC43LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSBy'@;
put 'ZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvIy9VU0lOR19BRFZBTkNFRC5tZCNvcHRpb25zIiksKGMuaGlnaGxpZ2h0fHwibGFuZ3VhZ2UtIiE9PWMubGFuZ1ByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdo'@;
put 'dCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtl'@;
put 'ZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRv'@;
put 'IGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFt'@;
put 'ZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBh'@;
put 'bnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5u'@;
put 'cG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g'@;
put 'dGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLChjLmhlYWRlcklkc3x8Yy5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVu'@;
put 'YWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2Zt'@;
put 'LWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSl9KGQsaCksZC5ob29rcyYmKGQuaG9va3Mub3B0aW9ucz1kKSxoKXtjb25zdCBUPWQuaGlnaGxpZ2h0O2xldCBXO3RyeXtkLmhvb2tzJiYoYT1kLmhvb2tzLnByZXByb2Nlc3MoYSkpLFc9'@;
put 'YyhhLGQpfWNhdGNoKHdlKXtyZXR1cm4gXyh3ZSl9Y29uc3QgaWU9d2U9PntsZXQgRWU7aWYoIXdlKXRyeXtkLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhXLGQud2Fsa1Rva2VucyksRWU9bChXLGQpLGQuaG9va3MmJihFZT1kLmhvb2tzLnBvc3Rwcm9jZXNzKEVlKSl9Y2F0Y2goWmUp'@;
put 'e3dlPVplfXJldHVybiBkLmhpZ2hsaWdodD1ULHdlP18od2UpOmgobnVsbCxFZSl9O2lmKCFUfHxULmxlbmd0aDwzfHwoZGVsZXRlIGQuaGlnaGxpZ2h0LCFXLmxlbmd0aCkpcmV0dXJuIGllKCk7bGV0IHBlPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhXLHdlPT57ImNvZGUiPT09d2UudHlw'@;
put 'ZSYmKHBlKyssc2V0VGltZW91dCgoKT0+e1Qod2UudGV4dCx3ZS5sYW5nLChFZSxaZSk9PntpZihFZSlyZXR1cm4gaWUoRWUpO251bGwhPVplJiZaZSE9PXdlLnRleHQmJih3ZS50ZXh0PVplLHdlLmVzY2FwZWQ9ITApLHBlLS0sMD09PXBlJiZpZSgpfSl9LDApKX0pLHZvaWQoMD09PXBlJiZp'@;
put 'ZSgpKX1pZihkLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rcz9kLmhvb2tzLnByZXByb2Nlc3MoYSk6YSkudGhlbihUPT5jKFQsZCkpLnRoZW4oVD0+ZC53YWxrVG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhULGQud2Fsa1Rva2VucykpLnRoZW4oKCk9PlQp'@;
put 'OlQpLnRoZW4oVD0+bChULGQpKS50aGVuKFQ9PmQuaG9va3M/ZC5ob29rcy5wb3N0cHJvY2VzcyhUKTpUKS5jYXRjaChfKTt0cnl7ZC5ob29rcyYmKGE9ZC5ob29rcy5wcmVwcm9jZXNzKGEpKTtjb25zdCBUPWMoYSxkKTtkLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhULGQud2Fsa1Rv'@;
put 'a2Vucyk7bGV0IFc9bChULGQpO3JldHVybiBkLmhvb2tzJiYoVz1kLmhvb2tzLnBvc3Rwcm9jZXNzKFcpKSxXfWNhdGNoKFQpe3JldHVybiBfKFQpfX19ZnVuY3Rpb24gTlllKGMsbCxhKXtyZXR1cm4gZD0+e2lmKGQubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8v'@;
put 'Z2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixjKXtjb25zdCBoPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK1N1KGQubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGw/UHJvbWlzZS5yZXNvbHZlKGgpOmE/dm9pZCBhKG51bGwsaCk6aH1pZihsKXJldHVybiBQcm9t'@;
put 'aXNlLnJlamVjdChkKTtpZighYSl0aHJvdyBkO2EoZCl9fWNvbnN0IFpnPW5ldyBjbGFzcyBIWWV7Y29uc3RydWN0b3IoLi4ubCl7TnNlKHRoaXMsJHNlKSxOc2UodGhpcyx5VSksRjAodGhpcywiZGVmYXVsdHMiLHthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6'@;
put 'bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNt'@;
put 'YXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX0pLEYwKHRoaXMsIm9wdGlvbnMiLHRoaXMuc2V0T3B0aW9ucyksRjAodGhpcywicGFyc2UiLG1VKHRoaXMseVUscXNlKS5jYWxsKHRoaXMsa2gubGV4LEFoLnBhcnNlKSksRjAodGhpcywicGFyc2VJ'@;
put 'bmxpbmUiLG1VKHRoaXMseVUscXNlKS5jYWxsKHRoaXMsa2gubGV4SW5saW5lLEFoLnBhcnNlSW5saW5lKSksRjAodGhpcywiUGFyc2VyIixBaCksRjAodGhpcywicGFyc2VyIixBaC5wYXJzZSksRjAodGhpcywiUmVuZGVyZXIiLGlUKSxGMCh0aGlzLCJUZXh0UmVuZGVyZXIiLF9VKSxGMCh0'@;
put 'aGlzLCJMZXhlciIsa2gpLEYwKHRoaXMsImxleGVyIixraC5sZXgpLEYwKHRoaXMsIlRva2VuaXplciIsclQpLEYwKHRoaXMsIlNsdWdnZXIiLGJVKSxGMCh0aGlzLCJIb29rcyIsY3cpLHRoaXMudXNlKC4uLmwpfXdhbGtUb2tlbnMobCxhKXtsZXQgZD1bXTtmb3IoY29uc3QgaCBvZiBsKXN3'@;
put 'aXRjaChkPWQuY29uY2F0KGEuY2FsbCh0aGlzLGgpKSxoLnR5cGUpe2Nhc2UidGFibGUiOmZvcihjb25zdCBmIG9mIGguaGVhZGVyKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGYudG9rZW5zLGEpKTtmb3IoY29uc3QgZiBvZiBoLnJvd3MpZm9yKGNvbnN0IF8gb2YgZilkPWQuY29uY2F0'@;
put 'KHRoaXMud2Fsa1Rva2VucyhfLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJsaXN0IjpkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLml0ZW1zLGEpKTticmVhaztkZWZhdWx0OnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZ0'@;
put 'aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXS5mb3JFYWNoKGY9PntkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoW2ZdLGEpKX0pOmgudG9rZW5zJiYoZD1kLmNvbmNhdCh0aGlz'@;
put 'LndhbGtUb2tlbnMoaC50b2tlbnMsYSkpKX1yZXR1cm4gZH11c2UoLi4ubCl7Y29uc3QgYT10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tlbnM6e319O3JldHVybiBsLmZvckVhY2goZD0+e2NvbnN0IGg9ey4uLmR9O2lmKGguYXN5bmM9dGhpcy5kZWZh'@;
put 'dWx0cy5hc3luY3x8aC5hc3luY3x8ITEsZC5leHRlbnNpb25zJiYoZC5leHRlbnNpb25zLmZvckVhY2goZj0+e2lmKCFmLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbmFtZSByZXF1aXJlZCIpO2lmKGYucmVuZGVyZXIpe2NvbnN0IF89YS5yZW5kZXJlcnNbZi5uYW1lXTthLnJl'@;
put 'bmRlcmVyc1tmLm5hbWVdPV8/ZnVuY3Rpb24oLi4uVCl7bGV0IFc9Zi5yZW5kZXJlci5hcHBseSh0aGlzLFQpO3JldHVybiExPT09VyYmKFc9Xy5hcHBseSh0aGlzLFQpKSxXfTpmLnJlbmRlcmVyfWlmKGYudG9rZW5pemVyKXtpZighZi5sZXZlbHx8ImJsb2NrIiE9PWYubGV2ZWwmJiJpbmxp'@;
put 'bmUiIT09Zi5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTthW2YubGV2ZWxdP2FbZi5sZXZlbF0udW5zaGlmdChmLnRva2VuaXplcik6YVtmLmxldmVsXT1bZi50b2tlbml6ZXJdLGYuc3RhcnQmJigiYmxvY2siPT09'@;
put 'Zi5sZXZlbD9hLnN0YXJ0QmxvY2s/YS5zdGFydEJsb2NrLnB1c2goZi5zdGFydCk6YS5zdGFydEJsb2NrPVtmLnN0YXJ0XToiaW5saW5lIj09PWYubGV2ZWwmJihhLnN0YXJ0SW5saW5lP2Euc3RhcnRJbmxpbmUucHVzaChmLnN0YXJ0KTphLnN0YXJ0SW5saW5lPVtmLnN0YXJ0XSkpfWYuY2hp'@;
put 'bGRUb2tlbnMmJihhLmNoaWxkVG9rZW5zW2YubmFtZV09Zi5jaGlsZFRva2Vucyl9KSxoLmV4dGVuc2lvbnM9YSksZC5yZW5kZXJlcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgaVQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IF8gaW4gZC5yZW5kZXJlcil7Y29uc3Qg'@;
put 'VD1mW19dO2ZbX109KC4uLlcpPT57bGV0IGllPWQucmVuZGVyZXJbX10uYXBwbHkoZixXKTtyZXR1cm4hMT09PWllJiYoaWU9VC5hcHBseShmLFcpKSxpZX19aC5yZW5kZXJlcj1mfWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgclQodGhpcy5k'@;
put 'ZWZhdWx0cyk7Zm9yKGNvbnN0IF8gaW4gZC50b2tlbml6ZXIpe2NvbnN0IFQ9ZltfXTtmW19dPSguLi5XKT0+e2xldCBpZT1kLnRva2VuaXplcltfXS5hcHBseShmLFcpO3JldHVybiExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0'@;
put 'IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IGN3O2Zvcihjb25zdCBfIGluIGQuaG9va3Mpe2NvbnN0IFQ9ZltfXTtmW19dPWN3LnBhc3NUaHJvdWdoSG9va3MuaGFzKF8pP1c9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1tfXS5jYWxs'@;
put 'KGYsVykpLnRoZW4ocGU9PlQuY2FsbChmLHBlKSk7Y29uc3QgaWU9ZC5ob29rc1tfXS5jYWxsKGYsVyk7cmV0dXJuIFQuY2FsbChmLGllKX06KC4uLlcpPT57bGV0IGllPWQuaG9va3NbX10uYXBwbHkoZixXKTtyZXR1cm4hMT09PWllJiYoaWU9VC5hcHBseShmLFcpKSxpZX19aC5ob29rcz1m'@;
put 'fWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKF8pe2xldCBUPVtdO3JldHVybiBULnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyxfKSksZiYmKFQ9VC5jb25jYXQoZi5jYWxsKHRoaXMsXykpKSxUfX10aGlz'@;
put 'LmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9fShsNCk7ZnVuY3Rpb24gcGEoYyxsLGEpe3JldHVybiBaZy5wYXJzZShjLGwsYSl9cGEub3B0aW9ucz1w'@;
put 'YS5zZXRPcHRpb25zPWZ1bmN0aW9uKGMpe3JldHVybiBaZy5zZXRPcHRpb25zKGMpLFZzZShwYS5kZWZhdWx0cz1aZy5kZWZhdWx0cykscGF9LHBhLmdldERlZmF1bHRzPWZ1bmN0aW9uIHZVKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxs'@;
put 'LGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5'@;
put 'cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfX0scGEuZGVmYXVsdHM9bDQscGEudXNlPWZ1bmN0aW9uKC4uLmMpe3JldHVybiBaZy51c2UoLi4uYyksVnNlKHBhLmRlZmF1bHRzPVpnLmRlZmF1bHRzKSxwYX0scGEud2Fsa1Rva2Vucz1mdW5jdGlvbihj'@;
put 'LGwpe3JldHVybiBaZy53YWxrVG9rZW5zKGMsbCl9LHBhLnBhcnNlSW5saW5lPVpnLnBhcnNlSW5saW5lLHBhLlBhcnNlcj1BaCxwYS5wYXJzZXI9QWgucGFyc2UscGEuUmVuZGVyZXI9aVQscGEuVGV4dFJlbmRlcmVyPV9VLHBhLkxleGVyPWtoLHBhLmxleGVyPWtoLmxleCxwYS5Ub2tlbml6'@;
put 'ZXI9clQscGEuU2x1Z2dlcj1iVSxwYS5Ib29rcz1jdyxwYS5wYXJzZT1wYTtjb25zdCBCWWU9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlvbiBqWWUoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiw4KX1sZXQgelllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2'@;
put 'aWNlPWEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1bGFfbWFya2Rvd249J1xuTGljZW5jZSBBZ3JlZW1lbnQgZm9yIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1c'@;
put 'blxuQ29weXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5EYXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdMIEFwcHMsIGEgYnJhbmQgb3duZWQgYnkgQm93ZSBJTyBMdGQsIGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJk'@;
put 'LCBDdW1icmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmllcyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVtYmVyOiAyMDM5MTQyNDBcblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGlu'@;
put 'dGVybmF0aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxpY2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1v'@;
put 'bmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5JZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2Us'@;
put 'IGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZp'@;
put 'bGUgYXZhaWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5kYXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZFxuXG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2Vz'@;
put 'IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVkIGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFueSBjYXNlLCB5b3UgbXVzdCBub3QgbWFrZSBhbnkgc3VjaCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1h'@;
put 'eSBiZSBjb25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCA0R0wgQVBQUyBQUk9WSURFUyBUSElTIFNPRlRXQVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E'@;
put 'SVRJT05TIE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZFTlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBD'@;
put 'T05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRS5cblxuXG4nfW5nT25Jbml0KCl7Y29uc3QgYT1wYS5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlz'@;
put 'LmV1bGFfbWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJrZG93bkNhcmQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3Ro'@;
put 'aXMuYWdyZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZ2lzdGVydXNlciIse1NBU0NvbnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGQ9PntkLnJldHVybiYm'@;
put 'ZC5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRjaChkPT5kKS5maW5hbGx5KCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuYWdyZWVCb3hMb2NrZWQ9ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5hZ3JlZUNoZWNrZWQ9'@;
put 'ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwoYSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZD1hLnRhcmdldDtkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hKGQuc2Nyb2xsVG9wK2Qub2Zmc2V0SGVpZ2h0Pj1kLnNjcm9sbEhlaWdodC0yMCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oQlllLDUpLDImYSl7bGV0IGg7YWkoaD1saSgpKSYmKGQubWFya2Rvd25D'@;
put 'YXJkPWguZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywiaW5uZXJIVE1MIiwic2Nyb2xsIl0sWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJd'@;
put 'LFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVt'@;
put 'cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksTmUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLG1lKDMsInAiKSxOZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0'@;
put 'IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSx5ZSgpKCksbWUoNSwiZGl2IiwyLDMpLHh0KCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2FyZEJsb2NrU2Nyb2xsKGYpfSkseWUoKSxtZSg3LCJkaXYiLDQpKDgsImNsci1jaGVja2JveC13cmFwcGVyIiw1'@;
put 'KSg5LCJpbnB1dCIsNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFncmVlQ2hlY2tlZD1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC50ZXJtc0FncmVlQ2hhbmdlKCl9KSx5ZSgpLG1lKDEwLCJsYWJlbCIpLE5lKDExLCJJIGhhdmUgcmVhZCBhbmQg'@;
put 'YWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIpLHllKCkoKSxKZSgxMixqWWUsMSwwLCJjbHItc3Bpbm5lciIsNykseWUoKSgpKSwyJmEmJihDZSg1KSxSZSgiaW5uZXJIVE1MIixkLmV1bGFfbWFya2Rvd24scTIpLENlKDMpLGRyKCJkaXNhYmxlZCIsZC5hZ3JlZUJveExvY2tlZCksQ2Uo'@;
put 'MSksUmUoIm5nTW9kZWwiLGQuYWdyZWVDaGVja2VkKSgiZGlzYWJsZWQiLGQuYWdyZWVCb3hMb2NrZWQpLENlKDMpLFJlKCJuZ0lmIixkLmFncmVlQm94TG9ja2VkJiZkLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFMwLEJzLE9zLFVzLEQwLFQwLHUyXSxzdHlsZXM6WyJbX25n'@;
put 'aG9zdC0lQ09NUCVde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn0uY2xyLWNoZWNrYm94LXdyYXBwZXIuZGlzYWJsZWRbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjV9LmNhcmRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj'@;
put 'dGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjR9LmFjY2VwdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17'@;
put 'cGFkZGluZzoxMHB4IDE1cHh9Il19KSxjfSkoKTtmdW5jdGlvbiBVWWUoYyxsKXsxJmMmJihtZSgwLCJwIiwyNyksTmUoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1vcmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLHllKCkpfWZ1bmN0aW9uIFpZ'@;
put 'ZShjLGwpe2lmKDEmYyYmcXQoMCwicCIsMjgpLDImYyl7Y29uc3QgYT1WZSgzKTtSZSgiaW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0scTIpfX1mdW5jdGlvbiBZWWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIikoMSwic3Ryb25nIiksTmUoMiwiRGV0YWlsczoiKSx5ZSgp'@;
put 'LE5lKDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgzKSxncigiICIsYS5lcnJvckRldGFpbHMsIiIpfX1mdW5jdGlvbiBXWWUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLFVZZSwyLDAsInAiLDI1KSxKZSgyLFpZZSwxLDEsInAiLDI2KSxKZSgzLFlZZSw0LDEsInAiLDEpLHpyKCkp'@;
put 'LDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIWEua2V5RXJyb3IpLENlKDEpLFJlKCJuZ0lmIixhLmtleUVycm9yKSxDZSgxKSxSZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJwIiwyNyksTmUoMiwiIFRoZSBy'@;
put 'ZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIikscXQoMywiY29udGFjdC1saW5rIiwyOSksTmUoNCwiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2Vu'@;
put 'Y2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLHllKCksenIoKSl9ZnVuY3Rpb24gJFllKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwicCIsMjcpLE5lKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtl'@;
put 'eSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIikseWUoKSx6cigpKX1mdW5jdGlvbiBxWWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpO2RyKCJtaXNza2V5Iixo'@;
put 'Lm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksQ2UoMSksemMoIiAiLGEsIiIsZD09PShudWxsPT1oLnN5c3NpdGUudmFsdWU/bnVsbDpoLnN5c3NpdGUudmFsdWUubGVuZ3RoKS0xPyIiOiIsIiwiICIpfX1mdW5jdGlvbiBLWWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwz'@;
put 'MCkoMSwic3Ryb25nIiksTmUoMiwiQWxsb3dlZCB1c2VyczoiKSx5ZSgpLE5lKDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgzKSxncigiICIsYS5saWNlbnNlS2V5RGF0YS51c2Vyc19hbGxvd2VkLCIgIil9fWZ1bmN0aW9uIFhZZShjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIi'@;
put 'LDMxKX1mdW5jdGlvbiBKWWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSxOZSgxLCIgRHJvcCAvIEJyb3dzZSBsaWNlbmNlIGZpbGUgIikseWUoKSl9ZnVuY3Rpb24gUVllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksTmUoMSwiIFNlbGVjdGVkIGZpbGU6ICIpLG1lKDIsInN0cm9uZyIpLE5l'@;
put 'KDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLG9yKGEubGljZW5jZWZpbGUuZmlsZW5hbWUpfX1mdW5jdGlvbiBlV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJzdHJvbmciKSxOZSgyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgyKSxvcihhLmxpY2Vu'@;
put 'Y2VGaWxlRXJyb3IpfX1mdW5jdGlvbiB0V2UoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLEpZZSwyLDAsImRpdiIsMSksSmUoMixRWWUsNCwxLCJkaXYiLDEpLEplKDMsZVdlLDMsMSwiZGl2IiwxKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCIiPT09YS5saWNl'@;
put 'bmNlZmlsZS5maWxlbmFtZSksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksQ2UoMSksUmUoIm5nSWYiLGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIG5XZShjLGwpezEmYyYmKG1lKDAsImJ1dHRvbiIsMzIpLE5lKDEsIiBDb250aW51ZSB3aXRoIGZy'@;
put 'ZWUgdGllciAiKSx5ZSgpKX1mdW5jdGlvbiByV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDIpKDEsImRpdiIsMyksTmUoMiwiTGljZW5jaW5nIikseWUoKSxtZSgzLCJkaXYiLDQpLEplKDQsV1llLDQsMywibmctY29udGFpbmVyIiw1KSxKZSg1LEdZZSw1LDAsIm5n'@;
put 'LWNvbnRhaW5lciIsNSksSmUoNiwkWWUsMywwLCJuZy1jb250YWluZXIiLDUpLG1lKDcsInAiKSg4LCJzdHJvbmciKSxOZSg5LCJTWVNTSVRFOiIpLHllKCksSmUoMTAscVllLDIsNCwic3BhbiIsNiksbWUoMTEsImEiLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPSRp'@;
put 'KDEzKSxmPSRpKDE1KSxfPVZlKCk7cmV0dXJuIGp0KF8uY29weVN5c3NpdGUoaCxmLF8uc3lzc2l0ZS52YWx1ZXx8W10pKX0pLHF0KDEyLCJjbHItaWNvbiIsOCw5KSxtZSgxNCwic3BhbiIsMTAsMTEpLE5lKDE2LCJDb3B5IHRvIGNsaXBib2FyZCIpLHllKCkoKSgpLEplKDE3LEtZZSw0LDEs'@;
put 'InAiLDEyKSxtZSgxOCwiY2xyLXRhYnMiKSgxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDEzKSxOZSgyMSwiVXBsb2FkIGxpY2VuY2UiKSx5ZSgpLG1lKDIyLCJjbHItdGFiLWNvbnRlbnQiKSgyMywiaW5wdXQiLDE0LDE1KSx4dCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLHllKCksbWUoMjUsImRpdiIsMTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoJGkoMjQpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkZpbGVDYXB0dXJlKGgs'@;
put 'ITApKX0pLEplKDI2LFhZZSwxLDAsImNsci1zcGlubmVyIiwxNyksSmUoMjcsdFdlLDQsMywibmctY29udGFpbmVyIiwxKSx5ZSgpKCkoKSxtZSgyOCwiY2xyLXRhYiIpKDI5LCJidXR0b24iLDEzKSxOZSgzMCwiUGFzdGUgbGljZW5jZSIpLHllKCksbWUoMzEsImNsci10YWItY29udGVudCIp'@;
put 'KDMyLCJmb3JtIiwxOCkoMzMsInAiKSxOZSgzNCwiTGljZW5jZSBrZXk6IikseWUoKSxtZSgzNSwiZGl2IiwxOSkoMzYsInRleHRhcmVhIiwyMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpY2VuY2VLZXlWYWx1ZT1oKX0pKCJtb3VzZWxl'@;
put 'YXZlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnRyaW1LZXlzKCkpfSkseWUoKSgpKCksbWUoMzcsImZvcm0iLDIxKSgzOCwicCIpLE5lKDM5LCJBY3RpdmF0aW9uIGtleToiKSx5ZSgpLG1lKDQwLCJkaXYiLDE5KSg0MSwidGV4dGFyZWEiLDIyKSx4dCgibmdNb2RlbENoYW5n'@;
put 'ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYWN0aXZhdGlvbktleVZhbHVlPWgpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudHJpbUtleXMoKSl9KSx5ZSgpKCkoKSgpKCkoKSxtZSg0MiwiYnV0dG9uIiwyMykseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmFwcGx5S2V5cygpKX0pLE5lKDQzLCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLHllKCksSmUoNDQsbldlLDIsMCwiYnV0dG9uIiwyNCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLFJlKCJuZ1N3aXRjaCIsYS5hY3Rpb24p'@;
put 'LENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJrZXkiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksQ2UoNCksUmUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52YWx1ZSksQ2UoNyksUmUoIm5nSWYiLGEubGljZW5zZUtleURh'@;
put 'dGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksQ2UoOSksUmUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWEubGljZW5jZUZpbGVMb2FkaW5nKSxDZSg5KSxSZSgibmdNb2RlbCIsYS5saWNlbmNlS2V5VmFsdWUpLENlKDUpLFJlKCJuZ01vZGVsIixhLmFj'@;
put 'dGl2YXRpb25LZXlWYWx1ZSksQ2UoMSksUmUoImNsckxvYWRpbmciLGEuYXBwbHlpbmdLZXlzKSgiZGlzYWJsZWQiLGEuZGlzYWJsZUFwcGx5QnV0dG9uKSxDZSgyKSxSZSgibmdJZiIsYS5pc0FwcEZyZWVUaWVyLnZhbHVlKX19ZnVuY3Rpb24gaVdlKGMsbCl7MSZjJiZxdCgwLCJhcHAtdGVy'@;
put 'bXMiKX12YXIgS3NlPWZ1bmN0aW9uKGMpe3JldHVybiBjLmtleT0ia2V5IixjLnJlZ2lzdGVyPSJyZWdpc3RlciIsYy5saW1pdD0ibGltaXQiLGMudXBkYXRlPSJ1cGRhdGUiLGN9KEtzZXx8e30pO2NvbnN0IG9XZT1be3BhdGg6IjphY3Rpb24iLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMucm91dGU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5hcHBTZXJ2aWNlPWYsdGhpcy5hY3Rpb249bnVsbCx0aGlzLmxpY2Vuc2VFcnJvcnM9e21pc3Npbmc6J0xpY2VuY2Uga2V5IGlzIG1pc3NpbmcgLSBwbGVh'@;
put 'c2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxleHBpcmVkOidMaWNlbmNlIGtleSBpcyBleHBpcmVk'@;
put 'IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsaW52YWxpZDonTGljZW5jZSBrZXkgaXMg'@;
put 'aW52YWxpZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLG1pc3NtYXRjaDonWW91ciBT'@;
put 'WVNTSVRFIChiZWxvdykgaXMgbm90IGZvdW5kIGluIHRoZSBsaWNlbmNlIGtleSAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50'@;
put 'ZXIgdmFsaWQga2V5cyBiZWxvdy4nfSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT0iIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT0iIix0aGlzLmFwcGx5aW5nS2V5cz0hMSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5jdXJyZW50TGljZW5jZUtleT10aGlzLmxpY2Vu'@;
put 'Y2VTZXJ2aWNlLmxpY2VuY2VLZXksdGhpcy5jdXJyZW50QWN0aXZhdGlvbktleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb25LZXksdGhpcy5pc0FwcEZyZWVUaWVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllcix0aGlzLnVzZXJDb3VudExpbWl0YXRpb249dGhpcy5s'@;
put 'aWNlbmNlU2VydmljZS51c2VyQ291bnRMaW1pdGF0aW9uLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLmlucHV0VHlwZT0iZmlsZSIsdGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlZmlsZT17ZmlsZW5hbWU6IiJ9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlS2V5'@;
put 'VmFsdWU9dGhpcy5jdXJyZW50TGljZW5jZUtleXx8IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleXx8IiIsdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoYT0+e3RoaXMua2V5RXJyb3I9YS5lcnJvcix0aGlzLm1pc3NtYXRjaGVkS2V5'@;
put 'PWEubWlzc21hdGNoSWQsYS5kZXRhaWxzJiYodGhpcy5lcnJvckRldGFpbHM9YXRvYihhLmRldGFpbHMpKX0pLHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShhPT57bGV0IGQ9YS5hY3Rpb247ZCYmT2JqZWN0LnZhbHVlcyhLc2UpLmluY2x1ZGVzKGQpJiYodGhpcy5hY3Rpb249ZCl9KSx0'@;
put 'aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKX10cmltS2V5cygpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMubGljZW5jZUtleVZhbHVlLnRyaW0oKSx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmFjdGl2YXRpb25LZXlWYWx1'@;
put 'ZS50cmltKCl9Y29weVN5c3NpdGUoYSxkLGgpe2NvbnN0IGY9aC5qb2luKCJcbiIpO25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGYpLnRoZW4oKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjaGVjayIpLGEuc2V0QXR0cmlidXRlKCJjbGFzcyIsImlzLXN1Y2Nlc3MiKSxkLmlu'@;
put 'bmVyVGV4dD0iQ29waWVkISIsc2V0VGltZW91dCgoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNvcHkiKSxhLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxkLmlubmVyVGV4dD0iQ29weSB0byBjbGlwYm9hcmQifSwxZTMpfSl9YXBwbHlLZXlzKCl7dGhpcy5hcHBseWluZ0tleXM9ITAs'@;
put 'dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZ2lzdGVya2V5Iix7a2V5dXBsb2FkOlt7QUNUSVZBVElPTl9LRVk6dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUsTElDRU5DRV9LRVk6dGhpcy5saWNlbmNlS2V5VmFsdWV9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJldHVyblswXSYm'@;
put 'IlNVQ0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZXBsYWNlKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tleXM9ITF9KX1vbkZpbGVDYXB0dXJlKGEsZD0hMSl7bGV0IGg9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBd'@;
put 'O2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aC5uYW1lLCFoKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPV89PntpZih0aGlzLmxpY2VuY2VGaWxlRXJyb3I9IkVycm9yIHJlYWRpbmcgZmlsZS4iLCFffHwhXy50'@;
put 'YXJnZXR8fDIhPV8udGFyZ2V0LnJlYWR5U3RhdGV8fF8udGFyZ2V0LmVycm9yfHwhXy50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VGaWxlRXJyb3I9dm9pZCAwO2NvbnN0IFQ9Xy50YXJnZXQucmVzdWx0LnRvU3RyaW5nKCkuc3Bs'@;
put 'aXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9VFsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1UWzBdfSxmLnJlYWRBc1RleHQoaCl9c3dpdGNoVHlwZShhKXt0aGlzLmlucHV0VHlwZT1hfWdldCBkaXNhYmxlQXBwbHlCdXR0b24oKXtyZXR1cm4gdGhpcy5saWNlbmNlS2V5VmFsdWUu'@;
put 'bGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZhdGlvbktleVZhbHVlPT09dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR2wpLHR0KEMwKSx0dChvYSksdHQoVXgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpY2Vuc2luZyJdXSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzQsIm5n'@;
put 'SWYiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywibWlzc2tleSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10b3AtcmlnaHQiLDMs'@;
put 'ImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWyJjb3B5SWNvbiIsIiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNvcHlUb29sdGlwIiwiIl0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFsiY2xyVGFiTGluayIsIiJdLFsidHlwZSIs'@;
put 'ImZpbGUiLCJoaWRkZW4iLCIiLDMsImNoYW5nZSJdLFsibGljZW5jZUZpbGUiLCIiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxbImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZv'@;
put 'cm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwibGljZW5zZS1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiXSxbMSwiY2xy'@;
put 'LWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0aXZhdGlvbi1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiXSxbMSwi'@;
put 'YnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiLCJjbGljayJdLFsicm91dGVyTGluayIsIi8iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lmIl0sWyJjbGFzcyIs'@;
put 'ImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsxLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCJdLFsiY2xhc3NlcyIsImNvbG9yLWdyZWVuIl0sWzEsIm0tMCJdLFsxLCJzcGlubmVyLXNtIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwiYnRu'@;
put 'LXNtIiwiYnRuLWxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihKZSgwLHJXZSw0NSwxMywiZGl2IiwwKSxKZSgxLGlXZSwxLDAsImFwcC10ZXJtcyIsMSkpLDImYSYmKFJlKCJuZ0lmIiwicmVnaXN0ZXIiIT09ZC5hY3Rpb24pLENlKDEpLFJlKCJuZ0lmIiwicmVnaXN0ZXIi'@;
put 'PT09ZC5hY3Rpb24pKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxuZCx0aCxDcCxXYSxCcyx3cCxPcyxyMixrYSxadSxkaCxJcCxPcCxkZyxScCxMcCxjZyx1MixCdSx6WWUsakVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwJSAtIDk2cHgpO3BhZGRpbmc6MjBweH0u'@;
put 'Y2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5rZXktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5taXNza2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTc0YzNjfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFj'@;
put 'dGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MH0ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0YXJlYVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MTcwcHg7bWF4LWhlaWdodDoxNzBweDttaW4t'@;
put 'aGVpZ2h0OjE3MHB4O3Jlc2l6ZTpub25lfS5hcHBseS1rZXlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDBweDt3aWR0aDoyMDBweH0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7'@;
put 'cGFkZGluZzoxNXB4O2JvcmRlcjoycHggZGFzaGVkICNiMmIyYjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1jbHItdGFic1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6bm9uZSFpbXBvcnRh'@;
put 'bnR9Il19KSxjfSkoKSxjYW5BY3RpdmF0ZTpbZ1VdLGNhbkRlYWN0aXZhdGU6W2dVXX1dO2xldCBzV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7'@;
put 'aW1wb3J0czpbaGMuZm9yQ2hpbGQob1dlKSxoY119KSxjfSkoKSxhV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28scWwsX3Us'@;
put 'c1dlLFY3XX0pLGN9KSgpO2Z1bmN0aW9uIGxXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiwxOSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtSZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2QuanNQYXJhbXNbYV0pLENlKDEpLGdyKCIgIixkLmpzUGFy'@;
put 'YW1zW2FdLCIgIil9fWZ1bmN0aW9uIGNXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLGdyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIHVXZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'InRyIikoMSwidGQiLDQpLE5lKDIpLHllKCksSmUoMyxsV2UsMiwyLCJ0ZCIsMTcpLEplKDQsY1dlLDIsMSwidGQiLDE4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYSksQ2UoMSksUmUoIm5nSWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLENlKDEpLFJlKCJu'@;
put 'Z0lmIiwhYS5pbmNsdWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0aW9uIGRXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDQpLE5lKDIpLHllKCksbWUoMywidGQiLDQpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMyk7Q2UoMiksb3IoYSksQ2Uo'@;
put 'Miksb3IoZC5zdWJtaXREZXRhaWxzW2FdKX19ZnVuY3Rpb24gaFdlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyMikoMiwidGFibGUiLDMpKDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksTmUoNiwiTmFtZSIpLHllKCksbWUoNywidGgiLDQpLE5l'@;
put 'KDgsIlZhbHVlIikseWUoKSgpKCksbWUoOSwidGJvZHkiKSxKZSgxMCxkV2UsNSwyLCJ0ciIsNSkseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEwKSxSZSgibmdGb3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiBmV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRk'@;
put 'Iiw0KSxOZSgyKSx5ZSgpLG1lKDMsInRkIiw0KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpO0NlKDIpLG9yKGEpLENlKDIpLG9yKGQuanNQYXJhbXNbYV0pfX1mdW5jdGlvbiBwV2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFicyIpKDEsImNsci10'@;
put 'YWIiKSgyLCJidXR0b24iLDIwKSxOZSgzLCJTdWJtaXR0ZWQgVGFibGUgRGV0YWlscyIpLHllKCksSmUoNCxoV2UsMTEsMSwiY2xyLXRhYi1jb250ZW50IiwyMSkseWUoKSxtZSg1LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksTmUoNywiQmFzZSBUYWJsZSBEZXRhaWxzIikseWUoKSxtZSg4'@;
put 'LCJjbHItdGFiLWNvbnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwidGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksTmUoMTQsIk5hbWUiKSx5ZSgpLG1lKDE1LCJ0aCIsNCksTmUoMTYsIlZhbHVlIikseWUoKSgpKCksbWUoMTcsInRib2R5IiksSmUoMTgsZldlLDUsMiwi'@;
put 'dHIiLDUpLHllKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg0KSxSZSgiY2xySWZBY3RpdmUiLCEwKSxDZSgxNCksUmUoIm5nRm9yT2YiLGEua2V5c0FycmF5KX19ZnVuY3Rpb24gZ1dlKGMsbCl7MSZjJiYobWUoMCwicCIsNzQpLE5lKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWls'@;
put 'cyB0byBzaG93ICIpLHllKCkpfWZ1bmN0aW9uIG1XZShjLGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsImRpdiIsNzUpKDIsInNwYW4iKSxOZSgzLCJUYWJsZSBJZDoiKSx5ZSgpLG1lKDQsInN0cm9uZyIsNzYpLE5lKDUpLHllKCkoKSxtZSg2LCJkaXYiKSg3LCJzcGFuIiksTmUoOCwiU3VibWl0'@;
put 'dGVyOiIpLHllKCksbWUoOSwic3BhbiIsNzcpLE5lKDEwKSx5ZSgpKCksbWUoMTEsImRpdiIpKDEyLCJzcGFuIiksTmUoMTMsIlN1Ym1pdHRlZCBvbjoiKSx5ZSgpLG1lKDE0LCJzcGFuIiw3NyksTmUoMTUpLHllKCkoKSxtZSgxNiwiZGl2IikoMTcsInNwYW4iKSxOZSgxOCwiU3VibWl0dGVk'@;
put 'IFJlYXNvbjoiKSx5ZSgpLG1lKDE5LCJzcGFuIiw3NyksTmUoMjApLHllKCkoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksUmUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLENlKDEpLGdy'@;
put 'KCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRh'@;
put 'aWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiB2V2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw3'@;
put 'OCkscXQoMSwiY2xyLWljb24iLDc5KSxOZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLHllKCkpfWZ1bmN0aW9uIF9XZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNDkpKDEsImRpdiIsNTAp'@;
put 'KDIsImRpdiIsNTEpLEplKDMsZ1dlLDIsMCwicCIsNDUpLEplKDQsbVdlLDIxLDUsIm5nLWNvbnRhaW5lciIsOCkseWUoKSxtZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7'@;
put 'Y29uc3QgaD1WZSg0KTtyZXR1cm4ganQoaC5nb1RvQmFzZShudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTmUoMTAsIiBHbyB0byBiYXNlIHRhYmxlIHNjcmVlbiAiKSx5ZSgpLG1lKDExLCJidXR0b24iLDU3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQo'@;
put 'YSk7Y29uc3QgaD1WZSg0KTtyZXR1cm4ganQoaC5nZXRUYWJsZShoLnRhYmxlSWQpKX0pLE5lKDEyLCIgR28gdG8gZWRpdGVkIHNjcmVlbiAiKSx5ZSgpLG1lKDEzLCJidXR0b24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSg0KTtyZXR1cm4ganQoaC5nb0Jh'@;
put 'Y2sobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLE5lKDE0LCIgR28gYmFjayB0byBlZGl0b3IgIikseWUoKSgpKCkoKSxtZSgxNSwiZGl2Iiw1OSkoMTYsImJ1dHRvbiIsNjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCku'@;
put 'YXBwcm92ZVRhYmxlKCkpfSksTmUoMTcsIiBBQ0NFUFQgIikseWUoKSxtZSgxOCwiYnV0dG9uIiw2MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5yZWplY3RPcGVuPSEwKX0pLE5lKDE5LCIgUkVKRUNUICIpLHllKCksbWUoMjAsImNsci10b2dnbGUtY29u'@;
put 'dGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUtd3JhcHBlciIpKDIyLCJpbnB1dCIsNjMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuZm9ybWF0dGVkVmFsdWVzPWgpfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUo'@;
put 'NCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSx5ZSgpLG1lKDIzLCJsYWJlbCIsNjQpLE5lKDI0KSx5ZSgpKCkoKSgpLG1lKDI1LCJkaXYiLDY1KSxKZSgyNix2V2UsMywwLCJzcGFuIiw2NiksbWUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgpLE5lKDMwLCIgQ2hhbmdl'@;
put 'ZCBSb3dzICIpLG1lKDMxLCJzcGFuIiw2OSksTmUoMzIpLHllKCkoKSxtZSgzMywic3BhbiIsNzApLE5lKDM0LCIgQWRkZWQgUm93cyAiKSxtZSgzNSwic3BhbiIsNzEpLE5lKDM2KSx5ZSgpKCksbWUoMzcsInNwYW4iLDcyKSxOZSgzOCwiIERlbGV0ZWQgUm93cyAiKSxtZSgzOSwic3BhbiIs'@;
put 'NzMpLE5lKDQwKSx5ZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDQpO0NlKDMpLFJlKCJuZ0lmIiwhYS50YWJsZURldGFpbHMpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlRGV0YWlscyksQ2UoMTIpLFJlKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRpbmcpKCJkaXNhYmxl'@;
put 'ZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxDZSgyKSxSZSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9W'@;
put 'RVIpfHxhLm5vQ2hhbmdlcyksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxDZSgyKSxvcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxDZSgyKSxSZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxDZSg2KSxvcihhLmxlbnMudXBkYXRlZCks'@;
put 'Q2UoNCksb3IoYS5sZW5zLm5ldyksQ2UoNCksb3IoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiBiV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIHlXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODApKDEs'@;
put 'InNwYW4iLDgxKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLEplKDMsYldlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIHdXZShjLGwpezEmYyYmKG1lKDAsInAiLDc0KSxOZSgxLCIgVGhl'@;
put 'cmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdyAiKSx5ZSgpKX1mdW5jdGlvbiBDV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0aCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG9yKGEpfX1mdW5jdGlvbiBTV2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4'@;
put 'NiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSgyKS5pbmRleCxoPVZlKDQpO0NlKDEpLGdyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWNvbnN0IFhzZT1mdW5jdGlvbihjKXtyZXR1cm57ImNoIHRvb2x0aXAgdG9vbHRp'@;
put 'cC1tZCB0b29sdGlwLXRvcC1yaWdodCI6Y319O2Z1bmN0aW9uIE1XZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw4NCksTmUoMSksSmUoMixTV2UsMiwxLCJzcGFuIiw4NSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLmluZGV4LGY9VmUoNCk7UmUo'@;
put 'Im5nQ2xhc3MiLEoyKDMsWHNlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksQ2UoMSksZ3IoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxDZSgxKSxSZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJb'@;
put 'aF0pfX1mdW5jdGlvbiB4V2UoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLE1XZSwzLDUsInRkIiw4MyksenIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gRVdlKGMsbCl7aWYoMSZjJiYobWUoMCwi'@;
put 'dGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24ga1dlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxFV2UsMiwxLCJ0ZCIsNDcpLHpy'@;
put 'KCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoNCk7Q2UoMSksUmUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWNvbnN0IEpzZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJue2FkZGVkUm93OmMsZGVsZXRlZFJvdzpsLHVwZGF0ZWRSb3c6YX19O2Z1bmN0aW9uIEFXZShjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsInRyIiw4MiksSmUoMSx4V2UsMiwxLCJuZy1jb250YWluZXIiLDgpLEplKDIsa1dlLDIsMSwibmctY29udGFpbmVyIiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVZlKDQpO1JlKCJuZ0NsYXNzIix5XygzLEpzZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVk'@;
put 'Ij09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksQ2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBUV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJk'@;
put 'aXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nb1RvQXBwcm92YWxzTGlzdCgpKX0pLHF0KDUsImNsci1pY29uIiwzNCksTmUoNiwiQmFjayB0byBhcHByb3Zh'@;
put 'bHMgbGlzdCAiKSx5ZSgpKCksbWUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxOZSg5KSx5ZSgpKCksbWUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nZXREZXRhaWxzKCkpfSkscXQoMTIsImNsci1pY29uIiwzOSks'@;
put 'eWUoKSgpKCksbWUoMTMsInAiLDQwKSxOZSgxNCkseWUoKSgpLG1lKDE1LCJkaXYiLDQxKSxKZSgxNixfV2UsNDEsMTEsImRpdiIsNDIpLHllKCksSmUoMTcseVdlLDQsMSwiZGl2Iiw0MyksbWUoMTgsImRpdiIsNDQpLEplKDE5LHdXZSwyLDAsInAiLDQ1KSxtZSgyMCwidGFibGUiLDMpKDIx'@;
put 'LCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLEplKDIzLENXZSwyLDEsInRoIiw0NykseWUoKSgpLG1lKDI0LCJ0Ym9keSIpLEplKDI1LEFXZSwzLDcsInRyIiw0OCkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoOSksZ3IoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFy'@;
put 'YW1zLlRBQkxFX05NLCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX0RFU0MsIiAiKSxDZSgyKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLENlKDIpLFJlKCJuZ0lmIixhLmxvYWRpbmdU'@;
put 'YWJsZSYmYS5ub0NoYW5nZXMpLENlKDQpLFJlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksQ2UoMiksUmUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIERXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjcpLEplKDEsVFdlLDI2LDcsImRpdiIsMjgpLHllKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBMV2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw4MSksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gSVdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHByZXZp'@;
put 'ZXciKSx5ZSgpKCkpfWZ1bmN0aW9uIFJXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODcpLEplKDEsTFdlLDIsMCwic3BhbiIsODgpLEplKDIsSVdlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5n'@;
put 'SWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIE9XZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjMpLEplKDEsRFdlLDIsMSwiZGl2IiwyNCksbWUoMiwiZGl2IiwyNSksSmUoMyxSV2UsMywyLCJkaXYiLDI2KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmxv'@;
put 'YWRlZCksQ2UoMiksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFBXZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDc4KSxxdCgxLCJjbHItaWNvbiIsNzkpLE5lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiks'@;
put 'eWUoKSl9ZnVuY3Rpb24gRldlKGMsbCl7MSZjJiZxdCgwLCJkaXYiLDQ5KX1mdW5jdGlvbiBIV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIE5XZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTAzKSgxLCJz'@;
put 'cGFuIiw4MSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSxKZSgzLEhXZSwzLDAsImRpdiIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDMpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBWV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0aCIsNCksTmUoMSkseWUo'@;
put 'KSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG9yKGEpfX1mdW5jdGlvbiBCV2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4NiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSgyKS5pbmRleCxoPVZlKDQpO0NlKDEpLGdyKCJPcmlnaW5hbCB2YWx1'@;
put 'ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIGpXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw4NCksTmUoMSksSmUoMixCV2UsMiwxLCJzcGFuIiw4NSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLmluZGV4LGY9VmUo'@;
put 'NCk7UmUoIm5nQ2xhc3MiLEoyKDMsWHNlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksQ2UoMSksZ3IoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxDZSgxKSxSZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYu'@;
put 'Y2hBcnJbaF0pfX1mdW5jdGlvbiB6V2UoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGpXZSwzLDUsInRkIiw4MyksenIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gVVdlKGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwidGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24gWldlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxVV2UsMiwxLCJ0ZCIs'@;
put 'NDcpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoNCk7Q2UoMSksUmUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIFlXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiw4MiksSmUoMSx6V2UsMiwxLCJuZy1jb250YWluZXIiLDgpLEplKDIsWldlLDIsMSwibmct'@;
put 'Y29udGFpbmVyIiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVZlKDQpO1JlKCJuZ0NsYXNzIix5XygzLEpzZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiPT09'@;
put 'ZC5jaEFyclthXSksQ2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBXV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDkzKSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5NSkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLHF0KDUsImNsci1pY29uIiwzNCksTmUoNiwiQmFjayB0byBzdWJtaXR0ZWQgbGlzdCAiKSx5ZSgpKCksbWUoNywiZGl2Iiw5NikoOCwiaDMiLDk3KSxOZSg5KSx5ZSgpKCksbWUoMTAsImRpdiIs'@;
put 'MzcpKDExLCJhIiwzOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS50YWJsZUZsYWc9ITApfSkscXQoMTIsImNsci1pY29uIiwzOSkseWUoKSgpKCksbWUoMTMsInAiLDk4KSxOZSgxNCkseWUoKSgpLG1lKDE1LCJkaXYiLDUwKSgxNiwiZGl2Iiw1MSkoMTcs'@;
put 'ImRpdiIsNzUpKDE4LCJzcGFuIiksTmUoMTksIlRhYmxlIElkOiIpLHllKCksbWUoMjAsInN0cm9uZyIsNzYpKDIxLCJzcGFuIiksTmUoMjIpLHllKCkoKSgpLG1lKDIzLCJkaXYiKSgyNCwic3BhbiIpLE5lKDI1LCJTdWJtaXR0ZWQgb246IikseWUoKSxtZSgyNiwic3BhbiIsNzcpLE5lKDI3'@;
put 'KSx5ZSgpKCksbWUoMjgsImRpdiIpKDI5LCJzcGFuIiksTmUoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLHllKCksbWUoMzEsInNwYW4iKSxOZSgzMikseWUoKSgpKCksbWUoMzMsImRpdiIsNTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJidXR0b24iLDU2KSx4'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5nb1RvQmFzZShoLnN1Yk9iai5iYXNlKSl9KSxOZSgzOCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLHllKCksbWUoMzksImJ1dHRvbiIsNTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChh'@;
put 'KTtjb25zdCBoPVZlKDMpO3JldHVybiBqdChoLmdldFRhYmxlKGguc3ViT2JqLnRhYmxlSWQpKX0pLE5lKDQwLCIgR28gdG8gZWRpdGVkIHNjcmVlbiAiKSx5ZSgpLG1lKDQxLCJidXR0b24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQo'@;
put 'aC5nb0JhY2soaC5zdWJPYmouYmFzZSkpfSksTmUoNDIsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpKCkoKSgpLG1lKDQzLCJkaXYiLDY1KSxKZSg0NCxQV2UsMywwLCJzcGFuIiw2NiksbWUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLE5lKDQ4LCIgQ2hhbmdl'@;
put 'ZCBSb3dzICIpLG1lKDQ5LCJzcGFuIiw2OSksTmUoNTApLHllKCkoKSxtZSg1MSwic3BhbiIsNzApLE5lKDUyLCIgQWRkZWQgUm93cyAiKSxtZSg1Mywic3BhbiIsNzEpLE5lKDU0KSx5ZSgpKCksbWUoNTUsInNwYW4iLDcyKSxOZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxtZSg1Nywic3BhbiIs'@;
put 'NzMpLE5lKDU4KSx5ZSgpKCkoKSgpKCksbWUoNTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsOTkpKDYxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg2MiwiaW5wdXQiLDYzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmZv'@;
put 'cm1hdHRlZFZhbHVlcz1oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSkseWUoKSxtZSg2MywibGFiZWwiKSxOZSg2NCkseWUoKSgpKCkoKSgpKCksbWUoNjUsImRpdiIsMTAwKSxKZSg2NixGV2UsMSwwLCJkaXYiLDQy'@;
put 'KSx5ZSgpLEplKDY3LE5XZSw0LDEsImRpdiIsMTAxKSxtZSg2OCwiZGl2IiwxMDIpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIikoNzEsInRyIiw0NiksSmUoNzIsVldlLDIsMSwidGgiLDQ3KSx5ZSgpKCksbWUoNzMsInRib2R5IiksSmUoNzQsWVdlLDMsNywidHIiLDQ4KSx5ZSgpKCkoKSgp'@;
put 'fWlmKDImYyl7Y29uc3QgYT1WZSgzKTtDZSg5KSxncigiICIsYS5zdWJPYmouYmFzZSwiICIpLENlKDUpLGdyKCIgIixhLnRhYmxlRGVzY3JpcHRpb24sIiAiKSxDZSg2KSxSZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2Euc3ViT2JqLnRhYmxlSWQpLENlKDIpLGdyKCIgIixhLnN1Yk9iai50'@;
put 'YWJsZUlkLCIiKSxDZSg1KSxncigiICIsYS5zdWJPYmouc3VibWl0dGVkLCIgIiksQ2UoNSksZ3IoIiAiLGEuc3ViT2JqLnN1Ym1pdFJlYXNvbiwiICIpLENlKDEyKSxSZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxDZSg2KSxvcihhLmxlbnMudXBkYXRlZCksQ2UoNCksb3IoYS5sZW5zLm5ldyks'@;
put 'Q2UoNCksb3IoYS5sZW5zLmRlbGV0ZWQpLENlKDQpLFJlKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksQ2UoMiksb3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksQ2UoMiksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9h'@;
put 'ZGluZ1RhYmxlKSxDZSg1KSxSZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLENlKDIpLFJlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBHV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDkxKSxKZSgxLFdXZSw3NSwxNiwiZGl2Iiw5MikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIp'@;
put 'O0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uICRXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIHFXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTA0KSgxLCJkaXYiLDEw'@;
put 'NSkoMiwic3BhbiIsODEpLE5lKDMsIiBMb2FkaW5nLi4uICIpLHllKCksSmUoNCwkV2UsMywwLCJkaXYiLDgpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDQpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBLV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLEdX'@;
put 'ZSwyLDEsImRpdiIsODkpLEplKDIscVdlLDUsMSwiZGl2Iiw5MCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19Y29uc3QgWFdlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQg'@;
put 'UXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAs'@;
put 'dXBkYXRlZDowLGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhpcy5pbnN0YW5jZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9'@;
put 'ITEsdGhpcy50YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVzPSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVj'@;
put 'b3Jkc0xpbWl0PTEwMH1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxlbnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92'@;
put 'YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb0JhY2soYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigp'@;
put 'e3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Z2V0RGV0YWlscygpe3RoaXMuZGV0YWlsc09wZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhp'@;
put 'cy5ob3RTZWxlY3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVzZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1yZWplY3RpbmcoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnJlamVjdExvYWRpbmc9ITAsYS5zdWJtaXRSZWFz'@;
put 'b249YS5zdWJtaXRSZWFzb24ucmVwbGFjZSgvXG4vZywiLiAiKTtsZXQgZD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsU1RQX1JFQVNPTjphLnN1Ym1pdFJlYXNvbn07eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMi'@;
put 'LCJhcHByb3ZlcnMvcmVqZWN0aW9uIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITEsYS5yZWplY3RMb2FkaW5nPSExfSl9KSgpfWFwcHJvdmVUYWJsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZp'@;
put 'KGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZUSU1FLExJQkRTOmEucGFyYW1zPy5MSUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxl'@;
put 'KGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRl'@;
put 'QnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkIil9Y2FsbENoYW5nZXNJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYSkudGhlbihoPT57ZC50YWJsZURldGFpbHM9aC5qc3BhcmFtc1swXSxkLmpzUGFy'@;
put 'YW1zPWguanNwYXJhbXNbMF07bGV0IGY9W107Zm9yKGNvbnN0IF8gaW4gZC5qc1BhcmFtcylkLmpzUGFyYW1zLmhhc093blByb3BlcnR5KF8pJiZmLnB1c2goXyk7ZC5rZXlzQXJyYXk9Zn0pLmNhdGNoKGg9PntkLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZC5sb2FkZWQ9ITB9'@;
put 'KX0pKCl9Zm9ybWF0dGluZ0NoYW5nZWQoKXt0aGlzLmNhbGNEaWZmKCl9Y2FsY0RpZmYoKXtpZighdGhpcy5yZXNwb25zZSlyZXR1cm47bGV0IGE9dGhpcy5yZXNwb25zZS5uZXcsZD10aGlzLnJlc3BvbnNlLnVwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmRlbGV0ZWQsZj10aGlzLnJlc3BvbnNl'@;
put 'Lm9yaWdpbmFsczt0aGlzLmZvcm1hdHRlZFZhbHVlcyYmKGE9dGhpcy5yZXNwb25zZS5mbXRfbmV3LGQ9dGhpcy5yZXNwb25zZS5mbXRfdXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZm10X2RlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLmZtdF9vcmlnaW5hbHMpLHRoaXMub3JpZ2luYWxzPWYsdGhp'@;
put 'cy5yb3dLZXlzPVtdO2ZvcihsZXQgU3Q9MDtTdDxkLmxlbmd0aDtTdCsrKXtsZXQgSnQ9T2JqZWN0LmtleXMoZFtTdF0pO2ZvcihsZXQgbm49MDtubjxKdC5sZW5ndGg7bm4rKylkW1N0XVtKdFtubl1dIT09ZltTdF1bSnRbbm5dXSYmdGhpcy5jaGFuZ2VzQXJyLnB1c2goe2luZDpTdCxmaWVs'@;
put 'ZDpKdFtubl0scHJvcDpkW1N0XVtKdFtubl1dLG9yaWdpbmFsOmZbU3RdW0p0W25uXV19KX10aGlzLmxlbnM9e25ldzp0aGlzLnBhcmFtcz8uTlVNX0FEREVEfHwwLHVwZGF0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9VUERBVEVEfHwwLGRlbGV0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9ERUxFVEVEfHww'@;
put 'fTtsZXQgaWU9W10scGU9ZC5jb25jYXQoYSxoKTtmb3IobGV0IFN0PTA7U3Q8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtTdCsrKWllLnB1c2godGhpcy5yZXNwb25zZS5jb2xzW1N0XS5OQU1FKTtsZXQgd2U9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNM'@;
put 'aW1pdDp0aGlzLmxlbnMubmV3LEVlPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlmZnNMaW1pdD10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMudXBkYXRlZD50aGlz'@;
put 'LnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5hZGRDb3VudD13ZTtsZXQgaXQ9W10sZXQ9W107Zm9yKGxldCBTdD0wO1N0PGllLmxlbmd0aDtTdCsrKWV0LnB1c2goe2RhdGE6aWVbU3RdLHJlYWRPbmx5OiEwfSk7dGhpcy5kaWZmVGFibGUu'@;
put 'ZGF0YT1wZTtmb3IobGV0IFN0PTA7U3Q8cGUubGVuZ3RoO1N0Kyspe2xldCBubj1PYmplY3Qua2V5cyhwZVtTdF0pO3RoaXMucm93S2V5cy5wdXNoKG5uKX1sZXQgeXQ9W10sRXQ9W107Zm9yKGxldCBTdD0wO1N0PHRoaXMuZGlmZlRhYmxlLmRhdGEubGVuZ3RoO1N0Kyspe2lmKFN0PEVlJiYw'@;
put 'IT09RWUpe3l0LnB1c2goW10pLEV0LnB1c2goW10pLGl0LnB1c2goInVwZGF0ZWQiKTtsZXQgSnQ9T2JqZWN0LmtleXModGhpcy5kaWZmVGFibGUuZGF0YVtTdF0pO2ZvcihsZXQgbm49MDtubjxKdC5sZW5ndGg7bm4rKyl7bGV0IHZuPUp0W25uXTtmW1N0XVt2bl0hPT1kW1N0XVt2bl0/KHl0'@;
put 'W1N0XS5wdXNoKCEwKSxFdFtTdF0ucHVzaChmW1N0XVt2bl0pKTooeXRbU3RdLnB1c2goITEpLEV0W1N0XS5wdXNoKG51bGwpKX10aGlzLmFyckNoYW5nZWQ9eXQsdGhpcy5hcnJPZkNoYW5nZXM9RXR9U3Q+PUVlJiZTdDxFZSt3ZSYmaXQucHVzaCgiYWRkZWQiKSxTdD53ZStFZS0xJiZpdC5w'@;
put 'dXNoKCJkZWxldGVkIil9dGhpcy5jaEFycj1pdCx0aGlzLnJvd0hlYWRlcj10aGlzLnJvd0tleXNbMF0sdGhpcy5kaWZmVGFibGUuZGF0YT1wZX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihhLl9kZXRhaWxzU3ViPWEuc2FzU3RvcmVTZXJ2'@;
put 'aWNlLnN1Ym1pdHREZXRhaWwuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVuY3Rpb24qKGYpe2Euc3ViT2JqPWYudmlld0RhdGEsYS50YWJsZUlkPWYudmlld0RhdGEudGFibGVJZCxhLnN1Ym1pdHRlZD1mLnZpZXdEYXRhLnN1YixhLnN1Ym1pdERldGFpbHM9Zi5kYXRhLGEuc3Vi'@;
put 'bWl0QXJyPVtdO2ZvcihsZXQgVCBpbiBhLnN1Ym1pdERldGFpbHMpInN1YiIhPT1UJiZhLnN1Ym1pdEFyci5wdXNoKFQpO2xldCBfPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNl'@;
put 'LnNob3dEaWZmcyhfLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oVD0+e2EucGFyYW1zPVQucGFyYW1zWzBdLGEucmVzcG9uc2U9VCxhLmNhbGNEaWZmKCl9KS5jYXRjaChUPT5UKS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITB9KSxhLmNhbGxDaGFu'@;
put 'Z2VzSW5mbyhhLnRhYmxlSWQpfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZD4idSIpcmV0dXJuO2EudGFibGVJZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFi'@;
put 'bGVJZDtsZXQgZD17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnMoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnBh'@;
put 'cmFtcz1oLnBhcmFtc1swXSxhLnJlc3BvbnNlPWgsYS5jYWxjRGlmZigpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMCxhLnNldEZvY3VzKCl9KSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkoKX1uZ09uRGVzdHJv'@;
put 'eSgpe3RoaXMuX2RldGFpbHNTdWImJnRoaXMuX2RldGFpbHNTdWIudW5zdWJzY3JpYmUoKX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjY2VwdEJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChHbCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NDIs'@;
put 'dmFyczoxMixjb25zdHM6W1szLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFs0LCJuZ0lmIl0sWzEsImZvcm0tYmxvY2siXSxbMSwiZm9ybS1ncm91cCJdLFsiZm9yIiwiZm9ybUZpZWxkc184Il0sWyJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdN'@;
put 'b2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwi'@;
put 'Y2xpY2siXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCBsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMSwibGVmdCIsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxb'@;
put 'ImNsclRhYkxpbmsiLCIiXSxbNCwiY2xySWZBY3RpdmUiXSxbMSwib3ZlcmZsb3ctYXV0byJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm92ZXJmbG93LWF1dG8iLCJtci0x'@;
put 'MiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFz'@;
put 'cyIsImNhcmQiLCJjbGFzcyIsIm10LTAiLDQsIm5nSWYiXSxbMSwibXQtMCJdLFsxLCJjYXJkLWhlYWRlciIsInAtMCJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsQmFjayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsIm0tMCIsMywiY2xpY2si'@;
put 'XSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImNsci1jb2wtbWQtNCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEluZm8iXSxbMSwi'@;
put 'dG9vbHRpcCIsInRvb2x0aXAtc20iLCJ0b29sdGlwLXRvcC1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJpbmZvLXN0YW5kYXJkIiwic2l6ZSIsIjI4Il0sWzEsInRleHQtY2VudGVyIiwibXQtMTAiXSxbMSwiY2FyZC1ibG9jayIsInAtMCJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5n'@;
put 'SWYiXSxbImNsYXNzIiwiaC0yNHZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiLCJtdC0wIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtc2l6ZS0xOCIsNCwibmdJZiJdLFsx'@;
put 'LCJkLWZsZXgiXSxbImNsYXNzIiwibGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImQtZmxleCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJjbHItcm93IiwiZm9udC1zaXplLTE1Il0sWzEsImNsci1jb2wtbWQtNSJdLFsx'@;
put 'LCJjbHItY29sLW1kLTciXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTAiXSxbMSwiY2xyLXJvdyIsImNsci1nYXAtNSIsImNsci1nYXAtc20tMCJdLFsxLCJidG4iLCJi'@;
put 'dG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRl'@;
put 'eHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2VudGVy'@;
put 'Il0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiaWQiLCJyZWplY3RCdG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0biIsImJ0bi1kYW5nZXIiLCJtci0wIiwz'@;
put 'LCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1i'@;
put 'bG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0w'@;
put 'Il0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSIsImJhZGdlLXdhcm5pbmciXSxbMSwibGFiZWwiLCJsYWJlbC1zdWNjZXNzIl0sWzEsImJhZGdlIiwiYmFkZ2Utc3VjY2VzcyJdLFsxLCJsYWJlbCIsImxhYmVsLWRhbmdlciJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdl'@;
put 'ciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtc2l6ZS0xOCJdLFsxLCJtdC0xNSJdLFsxLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm10LTEwIl0sWzEsInJvd3Mtbm90aWNlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3Itb3JhbmdlIl0s'@;
put 'WzEsImgtMjR2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRl'@;
put 'ciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtNCJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQt'@;
put 'MzAwIiwidGV4dC1jZW50ZXIiXSxbMSwibS0wIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtLTAiLCJtbC0yMC1pIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC0yNXZoIGQtZmxleCBmbGV4LWNvbHVt'@;
put 'biBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiXSxbMSwiaC0yNXZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImNhcmQtYmxv'@;
put 'Y2siXSxbMSwibG9hZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kZXRhaWxzT3Blbj1mfSksbWUoMSwiaDMiLDEpLE5lKDIsIkFwcHJvdmFsIERldGFpbHMi'@;
put 'KSx5ZSgpLG1lKDMsImRpdiIsMikoNCwidGFibGUiLDMpKDUsInRoZWFkIikoNiwidHIiKSg3LCJ0aCIsNCksTmUoOCwiTmFtZSIpLHllKCksbWUoOSwidGgiLDQpLE5lKDEwLCJWYWx1ZSIpLHllKCkoKSgpLG1lKDExLCJ0Ym9keSIpLEplKDEyLHVXZSw1LDMsInRyIiw1KSx5ZSgpKCkoKSxt'@;
put 'ZSgxMywiZGl2Iiw2KSgxNCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGV0YWlsc09wZW49ITF9KSxOZSgxNSwiIE9rICIpLHllKCkoKSgpLG1lKDE2LCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBk'@;
put 'LnRhYmxlRmxhZz1mfSksbWUoMTcsImgzIiwxKSxOZSgxOCwiQWxsIERldGFpbHMiKSx5ZSgpLG1lKDE5LCJkaXYiLDIpLEplKDIwLHBXZSwxOSwyLCJjbHItdGFicyIsOCkseWUoKSxtZSgyMSwiZGl2Iiw2KSgyMiwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'dGFibGVGbGFnPSExfSksTmUoMjMsIiBPayAiKSx5ZSgpKCkoKSxtZSgyNCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yZWplY3RPcGVuPWZ9KSxtZSgyNSwiaDMiLDEpLE5lKDI2LCJSZWFzb24gTWVzc2FnZSIpLHllKCksbWUo'@;
put 'MjcsImRpdiIsMikoMjgsImZvcm0iKSgyOSwic2VjdGlvbiIsOSkoMzAsImRpdiIsMTApKDMxLCJsYWJlbCIsMTEpLE5lKDMyLCJSZWFzb24gZm9yIHJlamVjdGluZz8iKSx5ZSgpLG1lKDMzLCJ0ZXh0YXJlYSIsMTIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5z'@;
put 'dWJtaXRSZWFzb249Zn0pLHllKCkoKSgpKCkoKSxtZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlamVjdE9wZW49ITF9KSxOZSgzNiwiIENhbmNlbCAiKSx5ZSgpLG1lKDM3LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGQucmVqZWN0aW5nKCl9KSxOZSgzOCwiIE9LICIpLHllKCkoKSgpLG1lKDM5LCJkaXYiLDE1KSxKZSg0MCxPV2UsNCwyLCJkaXYiLDE2KSxKZSg0MSxLV2UsMywyLCJkaXYiLDgpLHllKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQuZGV0YWlsc09wZW4pLENlKDEy'@;
put 'KSxSZSgibmdGb3JPZiIsZC5rZXlzQXJyYXkpLENlKDQpLFJlKCJjbHJNb2RhbE9wZW4iLGQudGFibGVGbGFnKSxDZSg0KSxSZSgibmdJZiIsZC50YWJsZUZsYWcpLENlKDQpLFJlKCJjbHJNb2RhbE9wZW4iLGQucmVqZWN0T3BlbiksQ2UoOSksUmUoIm5nTW9kZWwiLGQuc3VibWl0UmVhc29u'@;
put 'KSgibmdNb2RlbE9wdGlvbnMiLCRzKDExLFhXZSkpKCJpbm5lckhUTUwiLGQuc3VibWl0UmVhc29uLHEyKSxDZSg0KSxSZSgiY2xyTG9hZGluZyIsZC5yZWplY3RMb2FkaW5nKSxDZSgzKSxSZSgibmdJZiIsIWQuc3VibWl0dGVkKSxDZSgxKSxSZSgibmdJZiIsZC5zdWJtaXR0ZWQpKX0sZGVw'@;
put 'ZW5kZW5jaWVzOltkYyx4cyxaaSxDcCxXYSxTMCxCcyx3cCxPcyxyMixCdSxrYSxvdSxzdSxadSxFOCxkaCxVcyxEMCxEOCxUMCxJcCxPcCxkZyxScCxMcCxjZ10sc3R5bGVzOlsnLmxvYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7'@;
put 'aGVpZ2h0Ojc1dmg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ubW9kYWxMYXJnZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTByZW0haW1wb3J0YW50fS5hZGRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2IoMTQ2LDIwOCwxNTQpO2Jv'@;
put 'cmRlcjoxcHggc29saWQgcmdiYSg5LDc3LDExNywuMik7Ym9yZGVyLXJhZGl1czo1cHh9LmRlbGV0ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiKDIzMCwxNzksMTc5KTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoNzAsNzEsNzAsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS51'@;
put 'cGRhdGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmYWZkYTg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksMTE3LDksLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xKTtib3JkZXI6MXB4IHNvbGlk'@;
put 'IHJnYmEoMTA0LDEwMCwwLC40KTtib3JkZXItcmFkaXVzOjVweH0uY2hbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTIsMTM1LDEyMCwuNCl9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtmb250LXNpemU6LjU0MTY3cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZDojMzE0MzUxO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtjb2xvcjojZjBmMWVjO2xpbmUtaGVpZ2h0Oi43NXJlbTttYXJnaW46MDtwYWRkaW5nOi4zNzVyZW0gLjVy'@;
put 'ZW07d2lkdGg6MjM1cHg7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgMTJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTouNjY2NjdyZW19LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlw'@;
put 'LXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29s'@;
put 'dGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LS4zNzVyZW07bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoiIjtib3JkZXItbGVmdDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItdG9wOi4yMDgzM3JlbSBz'@;
put 'b2xpZCAjMzE0MzUxO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgdHJhbnNwYXJlbnR9LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4IHNvbGlkfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNl'@;
put 'LWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW46MTVweCAxMHB4IDEwcHh9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkfS5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmFwcHJvdmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpm'@;
put 'bGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuYXBwcm92YWxJbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9LmFwcHJvdmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17'@;
put 'ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjByZW0haW1wb3J0YW50O21pbi1oZWlnaHQ6Y2FsYygxMDB2aCArIC0wcHgpIWltcG9ydGFudH0udGFibGVbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IHRkLmxlZnRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGgubGVmdFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MTt3aWR0aDozMDBweCFpbXBvcnRhbnR9LnRvb2xsW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjph'@;
put 'YnNvbHV0ZTtiYWNrZ3JvdW5kOiNlNmIzYjM7Y29sb3I6IzMxNDM1MTt0b3A6MDtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9I2FjY2VwdEJ0bltfbmdjb250ZW50LSVDT01QJV0sICNy'@;
put 'ZWplY3RCdG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE3NXB4fS5mb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjc1cHh9Y2xyLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntvdmVyZmxvdzphdXRv'@;
put 'fS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MTBweDtjb2xvcjojNmE2YTZhO2ZvbnQtc2l6ZToxNXB4fS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50'@;
put 'LSVDT01QJV17bWFyZ2luOjB9J119KSxjfSkoKTtmdW5jdGlvbiBKV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDkpKDEsImRpdiIsMTApLHF0KDIsImNsci1pY29uIiwxMSksbWUoMywiaDMiLDEyKSxOZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLHllKCkoKSgpKX1m'@;
put 'dW5jdGlvbiBRV2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTMpLE5lKDEsIiBSRVZJRVcgIikseWUoKSl9ZnVuY3Rpb24gZUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMTQpLE5lKDEsIiBZb3UgaGF2ZSAiKSxtZSgyLCJzcGFuIiksTmUoMykseWUoKSxOZSg0LCJhcHByb3ZhbHMgcmVtYWlu'@;
put 'aW5nICIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLGdyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gdEdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMTcpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIG5HZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEs'@;
put 'ImgzIiksTmUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLHllKCkoKSl9ZnVuY3Rpb24gckdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNSksSmUoMSx0R2UsMiwwLCJzcGFuIiwxNiksSmUoMixuR2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJl'@;
put 'KCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBpR2UoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzOCl9ZnVuY3Rpb24gb0dlKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzkpLDImYyYmUmUoImNsclNtYWxsIiwhMCl9ZnVuY3Rp'@;
put 'b24gc0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5lKDQpLHllKCksbWUoNSwiY2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgpLG1lKDcsImNsci1kZy1jZWxsIiksTmUo'@;
put 'OCkseWUoKSxtZSg5LCJjbHItZGctY2VsbCIpKDEwLCJkaXYiLDI2KSgxMSwiYSIsMjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLmluZGV4O3JldHVybiBqdChWZSgyKS5nZXRDbGlja2VkKGYpKX0pLHF0KDEyLCJjbHItaWNvbiIsMjgpLG1lKDEzLCJzcGFuIiwyOSks'@;
put 'TmUoMTQsIkdvIHRvIHJldmlldyBwYWdlIHNjcmVlbiIpLHllKCkoKSxtZSgxNSwiYSIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPUJ0KGEpLGY9aC4kaW1wbGljaXQsXz1oLmluZGV4LFQ9VmUoMik7cmV0dXJuIGp0KGYucmVqZWN0TG9hZGluZz8iIjpULnJlamVjdGluZyhf'@;
put 'KSl9KSxKZSgxNixpR2UsMSwwLCJjbHItaWNvbiIsMzEpLEplKDE3LG9HZSwxLDEsImNsci1zcGlubmVyIiwzMiksbWUoMTgsInNwYW4iLDI5KSxOZSgxOSwiUmVqZWN0IikseWUoKSgpLG1lKDIwLCJhIiwzMykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0'@;
put 'O3JldHVybiBqdChWZSgyKS5nZXRUYWJsZShmLnRhYmxlSWQpKX0pLHF0KDIxLCJjbHItaWNvbiIsMzQpLG1lKDIyLCJzcGFuIiwyOSksTmUoMjMsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLHllKCkoKSgpKCksbWUoMjQsImNsci1kZy1jZWxsIiwzNSkoMjUsImJ1dHRvbiIsMzYpLHh0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIFZlKDIpLmRvd25sb2FkKF8udGFibGVJZCksanQoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxxdCgyNiwiY2xyLWljb24iLDM3KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2Uo'@;
put 'Miksb3IoYS5zdWJtaXR0ZXIpLENlKDIpLG9yKGEuYmFzZVRhYmxlKSxDZSgyKSxvcihhLnN1Ym1pdHRlZCksQ2UoMiksb3IoYS5zdWJtaXRSZWFzb24pLENlKDgpLFJlKCJuZ0lmIiwhYS5yZWplY3RMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxDZSg4KSxSZSgi'@;
put 'aWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIGFHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTgpKDIsImNsci1kZy1jb2x1bW4iLDE5KSxOZSgzLCJTVUJNSVRURVIiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg1LCJC'@;
put 'QVNFIFRBQkxFIikseWUoKSxtZSg2LCJjbHItZGctY29sdW1uIiwxOSksTmUoNywiU1VCTUlUVEVEIikseWUoKSxtZSg4LCJjbHItZGctY29sdW1uIiwxOSksTmUoOSwiU1VCTUlUIFJFQVNPTiIpLHllKCksbWUoMTAsImNsci1kZy1jb2x1bW4iKSxOZSgxMSwiQUNUSU9OIikseWUoKSxtZSgx'@;
put 'MiwiY2xyLWRnLWNvbHVtbiIpLE5lKDEzLCJET1dOTE9BRCIpLHllKCksSmUoMTQsc0dlLDI3LDcsImNsci1kZy1yb3ciLDIwKSxtZSgxNSwiY2xyLWRnLWZvb3RlciIsMjEpKDE2LCJzcGFuIiksTmUoMTcsIml0ZW1zIHBlciBwYWdlIikseWUoKSxtZSgxOCwic2VsZWN0IiwyMikseHQoIm5n'@;
put 'TW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLml0ZW1zTnVtPWgpfSksbWUoMTksIm9wdGlvbiIsMjMpLE5lKDIwLCIzIikseWUoKSxtZSgyMSwib3B0aW9uIiwyMyksTmUoMjIsIjUiKSx5ZSgpLG1lKDIzLCJvcHRpb24iLDIzKSxOZSgyNCwiMTAiKSx5ZSgp'@;
put 'LG1lKDI1LCJvcHRpb24iLDIzKSxOZSgyNiwiMTUiKSx5ZSgpKCksbWUoMjcsImNsci1kZy1wYWdpbmF0aW9uIiwyNCwyNSksTmUoMjkpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDI4KSxkPVZlKCk7Q2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxDZSgyKSxSZSgi'@;
put 'Y2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxDZSg2KSxSZSgiY2xyRGdJdGVtc09mIixkLmFwcHJvdmVMaXN0KSxDZSg0KSxSZSgibmdNb2RlbCIsZC5pdGVtc051'@;
put 'bSksQ2UoMSksUmUoIm5nVmFsdWUiLDMpLENlKDIpLFJlKCJuZ1ZhbHVlIiw1KSxDZSgyKSxSZSgibmdWYWx1ZSIsMTApLENlKDIpLFJlKCJuZ1ZhbHVlIiwxNSksQ2UoMiksUmUoImNsckRnUGFnZVNpemUiLGQuaXRlbXNOdW0pLENlKDIpLGIwKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEu'@;
put 'bGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgYXBwcm92YWxzICIpfX1jb25zdCBsR2U9ZnVuY3Rpb24oYyl7cmV0dXJue25vQm9yZGVyOmN9fTtsZXQgY0dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZl'@;
put 'bnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuY2RyPV8sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMH1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldENsaWNrZWQoYSl7dm9pZCAwIT09dGhpcy5h'@;
put 'cHByb3ZlTGlzdCYmKHRoaXMudGFibGVJZD10aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQsdGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCJyZXZpZXcvYXBwcm92ZURldC8iK3RoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCkpfXJlamVjdGluZyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShm'@;
put 'dW5jdGlvbiooKXt2b2lkIDAhPT1kLmFwcHJvdmVMaXN0JiYoZC50YWJsZUlkPWQuYXBwcm92ZUxpc3RbYV0udGFibGVJZCk7bGV0IGg9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6ZC50YWJsZUlkLFNUUF9SRUFTT046InF1aWNrIHJlamVjdGlvbiJ9O3RyeXsoZC5hcHByb3Zl'@;
put 'TGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9ITAsKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhoLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpKS5mcm9tc2FzWzBdLlJFU1BPTlNFLmluY2x1ZGVzKCJTVUNDRVNTIikmJigoZC5hcHByb3ZlTGlzdHx8'@;
put 'W10pW2FdLnJlamVjdExvYWRpbmc9ITEsZC5hcHByb3ZlTGlzdD8uc3BsaWNlKGEsMSksZC5yZW1haW5lZC0tLGQuY2RyLmRldGVjdENoYW5nZXMoKSl9Y2F0Y2goZil7ZC5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvcmVqZWN0aW9uIixmKX19KSgpfW5nT25J'@;
put 'bml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5mZXRjaEFwcHJvdmFscygpfSkoKX1mZXRjaEFwcHJvdmFscygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuaXRlbXNOdW09MTA7bGV0IGQ9e1NUUF9BQ1RJT046Ik9QRU5fQVBQUk9WQUxTIn07dHJ5'@;
put 'e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEFwcHJvdmFscyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIpO2EucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aDtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKF8pe3JldHVybnt0YWJsZUlkOl8u'@;
put 'VEFCTEVfSUQsc3VibWl0dGVyOl8uU1VCTUlUVEVEX0JZX05NLHN1Ym1pdHRlZDpfLlNVQk1JVFRFRF9PTl9EVFRNLGJhc2VUYWJsZTpfLkJBU0VfVEFCTEUsc3VibWl0UmVhc29uOl8uU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7YS5hcHByb3ZlTGlzdD1mLGEubG9hZGVkPSEwfWNhdGNoKGgp'@;
put 'e2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIsaCl9fSkoKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2MsXz10aGlzLnNhc1NlcnZpY2UuZ2V0'@;
put 'RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChEcyksdHQo'@;
put 'b2EpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5LHZhcnM6OCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZs'@;
put 'ZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3It'@;
put 'ZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJsb2Nr'@;
put 'Iiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNl'@;
put 'bnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQt'@;
put 'Y3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0sWzMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJE'@;
put 'Z1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWyJyb2xlIiwidG9vbHRpcCIsMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1n'@;
put 'cmVlbiIsMywiY2xpY2siXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjQiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLXJlZCIsMywiY2xpY2siXSxb'@;
put 'InNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiw0LCJuZ0lmIl0sWzMsImNsclNtYWxsIiw0LCJuZ0lmIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIs'@;
put 'ImNvZGUiLCJzaXplIiwiMjgiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiaWQiLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiXSxbMywiY2xyU21hbGwi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksSmUoMixKV2UsNSwwLCJkaXYiLDIpLG1lKDMsImRpdiIsMyksSmUoNCxRV2UsMiwwLCJoMyIsNCksSmUoNSxlR2UsNSwxLCJwIiw1KSx5ZSgpLEplKDYsckdlLDMsMiwiZGl2Iiw2KSxtZSg3'@;
put 'LCJkaXYiLDcpLEplKDgsYUdlLDMwLDE0LCJkaXYiLDgpLHllKCkoKSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsMD09PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0NsYXNzIixKMig2LGxHZSwhZC5sb2FkZWQpKSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkZWQmJjAhPT1kLnJlbWFpbmVkKSxD'@;
put 'ZSgxKSxSZSgibmdJZiIsZC5sb2FkZWQmJjAhPT1kLnJlbWFpbmVkKSxDZSgxKSxSZSgibmdJZiIsIWQubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsZC5hcHByb3ZlTGlzdCYmMCE9PWQucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOltkYyxaaSxsMSxjMSxNMCxCcyxPcyxXOCxUcCx0ZyxQRSxV'@;
put 'OCxGRSxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxrYSx1Ml0sc3R5bGVzOlsiLmNvbHVtbi1jZW50ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlk'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhZ3JpZC1jb2x1bW5bX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17b3V0bGluZTpub25lIWltcG9ydGFudH0ubGlua3NbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0Ojcw'@;
put 'MDtjdXJzb3I6cG9pbnRlcn0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9t'@;
put 'LWxlZnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfS5ub0JvcmRlcltfbmdjb250'@;
put 'ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fS5hcHByb3ZhbHMtbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NzB2aDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpj'@;
put 'b2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5ub2FwcHJvdmFscy1pbmZvLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmNhbGMoMTAwdmgg'@;
put 'LSAyMDBweCl9Il19KSxjfSkoKTtmdW5jdGlvbiB1R2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxxdCgyLCJjbHItaWNvbiIsMTQpLG1lKDMsImgzIiwxNSksTmUoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQgYW55IHRhYmxlcyAiKSx5ZSgpKCkoKSl9ZnVuY3Rp'@;
put 'b24gZEdlKGMsbCl7MSZjJiYobWUoMCwiaDMiLDE2KSxOZSgxLCIgU1VCTUlUIFFVRVVFICIpLHllKCkpfWZ1bmN0aW9uIGhHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDE3KSxOZSgxLCIgWW91IGhhdmUgIiksbWUoMiwic3BhbiIpLE5lKDMpLHllKCksTmUoNCwic3VibWlzc2lvbnMgd2Fp'@;
put 'dGluZyB0byBiZSBhcHByb3ZlZCAiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksZ3IoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBmR2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwyMCksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gcEdlKGMsbCl7MSZj'@;
put 'JiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IikseWUoKSgpKX1mdW5jdGlvbiBnR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE4KSxKZSgxLGZHZSwyLDAsInNwYW4iLDE5KSxKZSgyLHBHZSwzLDAsImRpdiIsMikseWUoKSksMiZjKXtjb25z'@;
put 'dCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBtR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctcm93IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGlt'@;
put 'cGxpY2l0O3JldHVybiBqdChWZSg1KS5nb1RvRGV0YWlscyhmLnRhYmxlSWQpKX0pLG1lKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5lKDQpLHllKCksbWUoNSwiY2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgpLG1lKDcsImNsci1kZy1jZWxsIikoOCwi'@;
put 'ZGl2IiwzMSkoOSwiYSIsMzIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoNSkuZ29Ub1N0YWdlKGYudGFibGVJZCkpfSkscXQoMTAsImNsci1pY29uIiwzMyksbWUoMTEsInNwYW4iLDM0KSxOZSgxMiwiR28gdG8gc3RhZ2VkIGRh'@;
put 'dGEgc2NyZWVuIikseWUoKSgpKCkoKSxtZSgxMywiY2xyLWRnLWNlbGwiLDM1KSgxNCwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4gVmUoNSkuZG93bmxvYWQoXy50YWJsZUlkKSxqdChoLnN0b3BQcm9wYWdhdGlvbigp'@;
put 'KX0pLHF0KDE1LCJjbHItaWNvbiIsMzcpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLmJhc2UpLENlKDIpLG9yKGEuc3VibWl0dGVkKSxDZSgyKSxvcihhLnN1Ym1pdFJlYXNvbil9fWZ1bmN0aW9uIHZHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp'@;
put 'O21lKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMjIpKDIsImNsci1kZy1jb2x1bW4iKSxOZSgzLCJCQVNFIFRBQkxFIikseWUoKSxtZSg0LCJjbHItZGctY29sdW1uIiwyMyksTmUoNSwiU1VCTUlUVEVEIikseWUoKSxtZSg2LCJjbHItZGctY29sdW1uIiwyMyksTmUoNywiU1VCTUlUIFJF'@;
put 'QVNPTiIpLHllKCksbWUoOCwiY2xyLWRnLWNvbHVtbiIsMTIpLE5lKDksIkFDVElPTiIpLHllKCksbWUoMTAsImNsci1kZy1jb2x1bW4iLDEyKSxOZSgxMSwiRE9XTkxPQUQiKSx5ZSgpLEplKDEyLG1HZSwxNiwzLCJjbHItZGctcm93IiwyNCksbWUoMTMsImNsci1kZy1mb290ZXIiLDI1KSgx'@;
put 'NCwic3BhbiIpLE5lKDE1LCJpdGVtcyBwZXIgcGFnZSIpLHllKCksbWUoMTYsInNlbGVjdCIsMjYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuaXRlbXNOdW09aCl9KSxtZSgxNywib3B0aW9uIiwyNyksTmUoMTgsIjMiKSx5ZSgpLG1lKDE5'@;
put 'LCJvcHRpb24iLDI3KSxOZSgyMCwiNSIpLHllKCksbWUoMjEsIm9wdGlvbiIsMjcpLE5lKDIyLCIxMCIpLHllKCksbWUoMjMsIm9wdGlvbiIsMjcpLE5lKDI0LCIxNSIpLHllKCkoKSxtZSgyNSwiY2xyLWRnLXBhZ2luYXRpb24iLDI4LDI5KSxOZSgyNykseWUoKSgpKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9JGkoMjYpLGQ9VmUoNCk7Q2UoNCksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLENlKDYpLFJlKCJjbHJEZ0l0ZW1zT2YiLGQuc3VibWl0dGVyTGlzdCksQ2UoNCksUmUoIm5nTW9kZWwiLGQuaXRlbXNOdW0p'@;
put 'LENlKDEpLFJlKCJuZ1ZhbHVlIiwzKSxDZSgyKSxSZSgibmdWYWx1ZSIsNSksQ2UoMiksUmUoIm5nVmFsdWUiLDEwKSxDZSgyKSxSZSgibmdWYWx1ZSIsMTUpLENlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIixkLml0ZW1zTnVtKSxDZSgyKSxiMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxh'@;
put 'c3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBfR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSxKZSgxLHZHZSwyOCwxMiwiZGl2IiwyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLGEuc3VibWl0dGVy'@;
put 'TGlzdCYmMCE9PWEucmVtYWluZWQpfX1jb25zdCBiR2U9ZnVuY3Rpb24oYyl7cmV0dXJue25vQm9yZGVyOmN9fTtmdW5jdGlvbiB5R2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDUpLEplKDEsdUdlLDUsMCwiZGl2Iiw2KSxtZSgyLCJkaXYiLDcpLEplKDMsZEdlLDIsMCwiaDMiLDgpLEpl'@;
put 'KDQsaEdlLDUsMSwicCIsOSkseWUoKSxKZSg1LGdHZSwzLDIsImRpdiIsMTApLEplKDYsX0dlLDIsMSwiZGl2IiwxMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwwPT09YS5yZW1haW5lZCYmYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0NsYXNzIixKMig2LGJHZSwh'@;
put 'YS5sb2FkZWQpKSxDZSgxKSxSZSgibmdJZiIsMCE9PWEucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCYmMCE9PWEucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIHdHZShjLGwpe2lmKDEmYyYm'@;
put 'KG1lKDAsImRpdiIsMyksSmUoMSx5R2UsNyw4LCJkaXYiLDQpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5zdWJSZWFkeSl9fWZ1bmN0aW9uIENHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpLHF0KDEsImFwcC1hcHByb3ZlLWRldGFpbHMiKSx5ZSgpKX1sZXQg'@;
put 'ZWFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5zYXNTZXJ2aWNlPV8sdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMu'@;
put 'c3ViUmVhZHk9ITEsdGhpcy5kZXRhaWxzT3Blbj0hMX1nb1RvU3RhZ2UoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29Ub0RldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQvIithKX1nZXREZXRhaWxzKGEsZCl7'@;
put 'dGhpcy5zdWJSZWFkeT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2VuZERldGFpbHMoYSxkLHRoaXMuc3VibWl0RGF0YSl9LDApfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgZD1hLnJvdXRlLnNuYXBzaG90LnBhcmFt'@;
put 'cy50YWJsZUlkO2EuaXRlbXNOdW09MTA7dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFN1Ym1pdHRzKCk7aWYoYS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoLGEucmVtYWluZWQ+MCl7YS5zdWJtaXR0ZXI9aC5mcm9tc2FzWzBdLlNVQk1JVFRFRF9CWV9OTTtsZXQgZj1o'@;
put 'LmZyb21zYXMubWFwKGZ1bmN0aW9uKF8pe3JldHVybnt0YWJsZUlkOl8uVEFCTEVfSUQsYmFzZTpfLkJBU0VfVEFCTEUsc3VibWl0dGVkOl8uU1VCTUlUVEVEX09OX0RUVE0sc3VibWl0dGVyOl8uU1VCTUlUVEVEX0JZX05NLHN1Ym1pdFJlYXNvbjpfLlNVQk1JVFRFRF9SRUFTT05fVFhUfX0p'@;
put 'O2lmKGEuc3VibWl0dGVyTGlzdD1mLGEuc3VibWl0RGF0YT1oLmZyb21zYXMsdHlwZW9mIGQ8InUiKXtjb25zdCBfPWEuc3VibWl0dGVyTGlzdC5maW5kSW5kZXgoVD0+VC50YWJsZUlkPT09ZCk7Xz4tMSYmYS5nZXREZXRhaWxzKGEuc3VibWl0dGVyTGlzdFtfXSxfKX19YS5sb2FkZWQ9ITB9'@;
put 'Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJlZGl0b3JzL2dldHN1Ym1pdHMiLGgpfX0pKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcmVhZHlTdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT1h'@;
put 'fSksdGhpcy5fYmFja1RvU3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdExpc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PSF0aGlzLnN1YlJlYWR5LHRoaXMuZGV0YWlsc09wZW49ITF9KX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25m'@;
put 'aWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2MsXz10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChEcyksdHQoR2wpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdWJtaXR0ZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczoy'@;
put 'LGNvbnN0czpbWzEsInctMTAwIl0sWyJjbGFzcyIsImNvbnRlbnQtYXJlYSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQs'@;
put 'Im5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3Mi'@;
put 'LCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJuby1zdWJt'@;
put 'aXR0ZWQtdGFibGVzIiwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVy'@;
put 'IiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgt'@;
put 'Y29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbImNsYXNz'@;
put 'IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1zdGFydCJdLFszLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJuZ1ZhbHVlIl0sWzEsImNlbnRlciIsMywiY2xyRGdQYWdl'@;
put 'U2l6ZSJdLFsicGFnaW5hdGlvbiIsIiJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJyb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRp'@;
put 'cC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNr'@;
put 'Il0sWyJzaGFwZSIsImRvd25sb2FkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSxKZSgxLHdHZSwyLDEsImRpdiIsMSksSmUoMixDR2UsMiwwLCJkaXYiLDIpLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5zdWJSZWFkeSksQ2UoMSksUmUoIm5n'@;
put 'SWYiLGQuc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOltkYyxaaSxsMSxjMSxNMCxCcyxPcyxXOCxUcCx0ZyxQRSxVOCxGRSxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxrYSxRc2VdLHN0eWxlczpbIi5ub0JvcmRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQg'@;
put 'dHJhbnNwYXJlbnQhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1i'@;
put 'b3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9Lm5vLXN1Ym1pdHRl'@;
put 'ZC10YWJsZXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSksY30pKCk7ZnVuY3Rpb24gU0dlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMikscXQoMSwiY2xyLWljb24iLDEzKSxtZSgyLCJoMyIsMTQpLE5lKDMsIlRoZXJlIGlzIG5vIGhpc3Rvcnkg'@;
put 'dG8gc2hvdyIpLHllKCkoKSl9ZnVuY3Rpb24gTUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4ganQoZi5nZXRUYWJsZShmLmFwcHJvdmVEYXRhW2hd'@;
put 'KSl9KSxOZSgxKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksb3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHhHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImEiLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGp0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE5lKDIsIlZJRVciKSx5ZSgpLG1lKDMsInNwYW4iKSxOZSg0LCIgLyAiKSx5ZSgpLG1lKDUsImEiLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGp0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE5lKDYsIkVESVQiKSx5ZSgpKCl9fWZ1bmN0aW9uIEVHZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLG9yKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBrR2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiw2KSxOZSgyKSx5ZSgpLG1lKDMsInRkIiw2KSxKZSg0LE1HZSwyLDEsImEiLDE1KSxKZSg1LHhHZSw3LDAsImRpdiIs'@;
put 'MTYpLEplKDYsRUdlLDIsMSwic3BhbiIsMTYpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtDZSgyKSxvcihhKSxDZSgyKSxSZSgibmdJZiIsZDwxKSxDZSgxKSxSZSgibmdJZiIsZDwyJiZkPj0xKSxDZSgxKSxSZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIEFH'@;
put 'ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDIwKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBUR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgaGlzdG9yeSIpLHllKCkoKSl9ZnVuY3Rpb24gREdlKGMsbCl7aWYoMSZjJiYobWUoMCwi'@;
put 'ZGl2IiwxOCksSmUoMSxBR2UsMiwwLCJzcGFuIiwxOSksSmUoMixUR2UsMywwLCJkaXYiLDE2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gTEdlKGMsbCl7MSZjJiYobWUoMCwi'@;
put 'aDMiLDI4KSxOZSgxLCJISVNUT1JZIikseWUoKSl9ZnVuY3Rpb24gSUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMjkpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxncigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jv'@;
put 'd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19Y29uc3QgUkdlPWZ1bmN0aW9uKGMsbCl7cmV0dXJue3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH19O2Z1bmN0aW9uIE9HZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1k'@;
put 'Zy1yb3ciLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLmdldEFwcHJJbmRleChmKSl9KSxtZSgxLCJjbHItZGctY2VsbCIsMzQpKDIsImEiLDM1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1w'@;
put 'bGljaXQ7cmV0dXJuIGp0KFZlKDMpLmdldEJhc2VUYWJsZShmLmJhc2V0YWJsZSkpfSksTmUoMykseWUoKSgpLG1lKDQsImNsci1kZy1jZWxsIiwzNiksTmUoNSkseWUoKSxtZSg2LCJjbHItZGctY2VsbCIsMzQpLE5lKDcpLHllKCksbWUoOCwiY2xyLWRnLWNlbGwiLDM0KSxOZSg5KSx5ZSgp'@;
put 'LG1lKDEwLCJjbHItZGctY2VsbCIsMzQpLE5lKDExKSx5ZSgpLG1lKDEyLCJjbHItZGctY2VsbCIsMzQpLE5lKDEzKSx5ZSgpLG1lKDE0LCJjbHItZGctY2VsbCIsMzcpKDE1LCJidXR0b24iLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0O3JldHVy'@;
put 'biBWZSgzKS5kb3dubG9hZChfLnRhYmxlSWQpLGp0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSkscXQoMTYsImNsci1pY29uIiwzOSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDMpLG9yKGEuYmFzZXRhYmxlKSxDZSgxKSxSZSgibmdDbGFzcyIsUTIoNyxSR2UsIlJF'@;
put 'SkVDVEVEIj09PWEuc3RhdHVzLCJBUFBST1ZFRCI9PT1hLnN0YXR1cykpLENlKDEpLG9yKGEuc3RhdHVzKSxDZSgyKSxvcihhLnN1Ym1pdHRlciksQ2UoMiksb3IoYS5zdWJtaXR0ZWRSZWFzb24pLENlKDIpLG9yKGEuc3VibWl0dGVkKSxDZSgyKSxvcihhLnJldmlld2VkKX19ZnVuY3Rpb24g'@;
put 'UEdlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDIsIkJBU0VfVEFCTEUiKSx5ZSgpLG1lKDMsImNsci1kZy1jb2x1bW4iLDMxKSxOZSg0LCJTVEFUVVMiKSx5ZSgpLG1lKDUsImNsci1kZy1jb2x1bW4iLDMxKSxOZSg2LCJT'@;
put 'VUJNSVRURVIiKSx5ZSgpLG1lKDcsImNsci1kZy1jb2x1bW4iLDMxKSxOZSg4LCJTVUJNSVQgUkVBU09OIikseWUoKSxtZSg5LCJjbHItZGctY29sdW1uIiwzMSksTmUoMTAsIlNVQk1JVFRFRCIpLHllKCksbWUoMTEsImNsci1kZy1jb2x1bW4iLDMxKSxOZSgxMiwiQVBQUk9WRUQgLyBSRUpF'@;
put 'Q1RFRCIpLHllKCksbWUoMTMsImNsci1kZy1jb2x1bW4iKSxOZSgxNCwiRE9XTkxPQUQiKSx5ZSgpLEplKDE1LE9HZSwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgiY2xyRGdGaWVsZCIsImJhc2V0YWJsZSIpLENlKDIpLFJlKCJjbHJE'@;
put 'Z0ZpZWxkIiwic3RhdHVzIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZFJlYXNvbiIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJyZXZpZXdlZCIpLENl'@;
put 'KDQpLFJlKCJjbHJEZ0l0ZW1zT2YiLGEuaGlzdG9yeSl9fWZ1bmN0aW9uIEZHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikubG9hZERhdGEoKSl9KSxOZSgxKSx5ZSgpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgyKTtSZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nTW9yZSksQ2UoMSksZ3IoIiBMb2FkICIsYS5yb3dzTGVmdFRvTG9hZCwiIG1vcmUgIil9fWZ1bmN0aW9uIEhHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpLEplKDIsTEdlLDIsMCwiaDMi'@;
put 'LDIzKSxKZSgzLElHZSwyLDEsInAiLDI0KSx5ZSgpLEplKDQsUEdlLDE2LDcsImNsci1kYXRhZ3JpZCIsMjUpLG1lKDUsImRpdiIsMjYpLEplKDYsRkdlLDIsMiwiYnV0dG9uIiwyNykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMiksUmUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkPT09YS5JbmZpbml0eSYmYS5y'@;
put 'b3dzTGVmdFRvTG9hZD4wKX19Y29uc3QgTkdlPVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50OmNHZX0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDpRc2V9LHtwYXRoOiJzdWJtaXR0ZWQiLGNvbXBvbmVudDplYWV9LHtwYXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNv'@;
put 'bXBvbmVudDplYWV9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnNhc1Nl'@;
put 'cnZpY2U9Xyx0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0aGlzLm9wZW5Nb2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJvdmVEYXRhPXt9LHRoaXMuc2FzanNDb25maWc9'@;
put 'bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaGlzdFBhcmFtcz17SElTVDowLFNUQVJUUk9XOjEsTk9CUzotMX0sdGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLnNhc2pzQ29u'@;
put 'ZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfWdldFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldEJhc2VUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z2V0RWRpdFRhYmxlKGEpe3Ro'@;
put 'aXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nZXRBcHBySW5kZXgoYSl7Y29uc3QgZD10aGlzLmhpc3RvcnlBcnIuZmluZEluZGV4KGg9PmguVEFCTEVfSUQ9PT1hLnRhYmxlSWQpO2Q+LTEmJih0aGlzLmFwcHJvdmVEYXRhPXRoaXMuaGlzdG9yeUFycltkXSx0aGlzLm9w'@;
put 'ZW5Nb2RhbD0hMCl9Z2V0IHJvd3NMZWZ0VG9Mb2FkKCl7Y29uc3QgYT10aGlzLmhpc3RQYXJhbXMuTk9CUy10aGlzLmhpc3RvcnkubGVuZ3RoLGQ9dGhpcy5oaXN0UGFyYW1zLkhJU1Q7cmV0dXJuIGE8PTA/MDphPmQ/ZDphfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRT'@;
put 'YXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2ErIiZfY29udGV4dG5hbWU9'@;
put 'Iit0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBkPXtTVEFSVFJPVzphLmhpc3RQYXJhbXMuSElTVCthLmhpc3RQYXJhbXMuU1RBUlRST1d9O2EubG9hZGluZ01vcmU9ITA7dHJ5e2xldCBmLGg9eWll'@;
put 'bGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0SGlzdG9yeShkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGhpc3RvcnkiKTthLmxvYWRpbmdNb3JlPSExLGEuaGlzdFBhcmFtcz1oLmhpc3RwYXJhbXNbMF07Y29uc3QgXz1oLmZyb21zYXMuc2xpY2UoMCxhLmxpY2VuY2VTdGF0ZS52YWx1'@;
put 'ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCk7aWYoXy5sZW5ndGg+MCl7Y29uc3QgVD1fO2EuaGlzdG9yeUFycj1fLGY9T2JqZWN0LmtleXMoVFswXSksYS50YWJsZVRpdGxlcz1mO2xldCBXPV8ubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm57dGFibGVJZDppZS5UQUJMRV9JRCxzdWJtaXR0ZXI6aWUu'@;
put 'U1VCTUlUVEVSLHN1Ym1pdHRlZFJlYXNvbjppZS5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6aWUuU1VCTUlUVEVELHN0YXR1czppZS5TVEFUVVMscmV2aWV3UmVhc29uOmllLlJFVklFV19SRUFTT05fVFhULHJldmlld2VyOmllLlJFVklFV0VSLHJldmlld2VkOmllLlJFVklFV0VE'@;
put 'LG51bU9mQXBwcm92YWxzOmllLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOmllLkJBU0VfVEFCTEV9fSk7YS5oaXN0b3J5LnB1c2goLi4uVyksYS5sb2FkZWQ9ITB9ZWxzZSBhLmxvYWRlZD0hMCwwPT09YS5oaXN0b3J5Lmxlbmd0aCYmKGEubm9EYXRhPSEwKX1jYXRjaCho'@;
put 'KXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixoKSxhLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmxvYWREYXRhKCl9KSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQoYmQpLHR0KHZsKSx0dChEcyksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhpc3RvcnkiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjIwLHZhcnM6'@;
put 'Nixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwiY2xhc3MiLCJjYXJkLWJsb2NrIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJj'@;
put 'bHJNb2RhbFNpemUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1v'@;
put 'dXRsaW5lIiwzLCJjbGljayJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwxLCJjYXJk'@;
put 'LWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJj'@;
put 'bGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIi'@;
put 'XSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAw'@;
put 'IGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1oaXN0b3J5IGRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwibG9hZC1tb3JlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVy'@;
put 'Il0sWyJjbGFzcyIsImJ0biBidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJk'@;
put 'YXRhZ3JpZC1oaXN0b3J5IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIs'@;
put 'MywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImJ0biIsImJ0bi1z'@;
put 'dWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLEplKDEsU0dlLDQsMCwiZGl2IiwxKSxtZSgyLCJjbHItbW9kYWwiLDIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9w'@;
put 'ZW5Nb2RhbD1mfSksbWUoMywiaDQiLDMpLE5lKDQsIkFwcHJvdmFsIGRldGFpbHMiKSx5ZSgpLG1lKDUsImRpdiIsNCkoNiwidGFibGUiLDUpKDcsInRoZWFkIikoOCwidHIiKSg5LCJ0aCIsNiksTmUoMTAsIk5hbWUiKSx5ZSgpLG1lKDExLCJ0aCIsNiksTmUoMTIsIlZhbHVlIikseWUoKSgp'@;
put 'KCksbWUoMTMsInRib2R5IiksSmUoMTQsa0dlLDcsNCwidHIiLDcpLHllKCkoKSgpLG1lKDE1LCJkaXYiLDgpKDE2LCJidXR0b24iLDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vcGVuTW9kYWw9ITF9KSxOZSgxNywiIE9LICIpLHllKCkoKSgpLEplKDE4LERHZSwzLDIsImRp'@;
put 'diIsMTApLEplKDE5LEhHZSw3LDQsImRpdiIsMTEpLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIixkLm5vRGF0YSksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuTW9kYWwpKCJjbHJNb2RhbFNpemUiLCJ4bCIpLENlKDEyKSxSZSgibmdGb3JPZiIsZC50YWJsZVRpdGxlcyksQ2Uo'@;
put 'NCksUmUoIm5nSWYiLCFkLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFkLm5vRGF0YSYmZC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltkYyx4cyxaaSxXOCxUcCx0ZyxVOCxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxrYSxvdSxzdSxadSxkaF0sc3R5bGVzOlsiLnJlamVjdGVkW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtjb2xvcjojZjgzMTI2O2ZvbnQtd2VpZ2h0OjcwMH0uYWNjZXB0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfS5oc0NlbGxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7ZmxleC1kaXJlY3Rpb246'@;
put 'Y29sdW1uIWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudDthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50O3BhZGRpbmc6N3B4fS5idENlbGxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFp'@;
put 'bXBvcnRhbnR9LnZlckNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ubG9hZC1tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo5MHB4fSNub0Rh'@;
put 'dGFDb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSksY30pKCl9XTtsZXQgVkdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpj'@;
put 'fSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLGhjLmZvckNoaWxkKE5HZSksaGNdfSksY30pKCksQkdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9'@;
put 'bWkoe2ltcG9ydHM6W29vLHFsLFZHZSxfdSxfNy5mb3JSb290KCksQzIsVjddfSksY30pKCksakdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcmV2aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgp'@;
put 'O2Z1bmN0aW9uIHpHZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDYpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIFVHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIFpHZShj'@;
put 'LGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNCksSmUoMSx6R2UsMiwwLCJzcGFuIiw1KSxKZSgyLFVHZSwzLDAsImRpdiIsMykseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWNvbnN0IFlHZT1mdW5j'@;
put 'dGlvbihjLGwpe3JldHVybntyZWplY3RlZDpjLGFjY2VwdGVkOmx9fTtmdW5jdGlvbiBXR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLE5lKDQsIlN0YWdlZCBEYXRhIikseWUoKSgpKCksbWUoNSwiZGl2Iiwx'@;
put 'MCkoNiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwiZGl2Iiw4KSxOZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLHllKCkoKSxtZSgxMCwiZGl2IikoMTEsInNwYW4iKSxOZSgxMiwiVGFibGUgSWQ6IikseWUoKSxtZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxOZSgxNSkseWUoKSgp'@;
put 'KCksbWUoMTYsImRpdiIpKDE3LCJzcGFuIiksTmUoMTgsIkJhc2UgVGFibGU6IikseWUoKSxtZSgxOSwiYSIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLE5lKDIwKSx5ZSgpKCksbWUoMjEsImRpdiIpKDIyLCJz'@;
put 'cGFuIiksTmUoMjMsIlN1Ym1pdCBEYXRlOiIpLHllKCksbWUoMjQsInNwYW4iLDE0KSxOZSgyNSkseWUoKSgpLG1lKDI2LCJkaXYiKSgyNywic3BhbiIpLE5lKDI4LCJSZXZpZXcgU3RhdHVzOiIpLHllKCksbWUoMjksInNwYW4iLDE1KSxOZSgzMCkseWUoKSgpKCksbWUoMzEsImRpdiIsMTYp'@;
put 'KDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxOZSgzNCwiQWN0aW9ucyIpLHllKCkoKSxtZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxOZSgz'@;
put 'OCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLHllKCksbWUoMzksImJ1dHRvbiIsMjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5hcHByb3ZlVGFibGVTY3JlZW4oKSl9KSxOZSg0MCwiIEdvIHRvIGFwcHJvdmFscyBzY3JlZW4gIikseWUoKSxtZSg0'@;
put 'MSwiYnV0dG9uIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmdvQmFjaygpKX0pLE5lKDQyLCIgR28gYmFjayB0byBlZGl0b3IgIikseWUoKSxtZSg0MywiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTty'@;
put 'ZXR1cm4ganQoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxxdCg0NCwiY2xyLWljb24iLDIzKSx5ZSgpKCkoKSgpKCksbWUoNDUsImRpdiIsMjQpLHF0KDQ2LCJob3QtdGFibGUiLDI1KSx5ZSgpLHF0KDQ3LCJkaXYiLDI2'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDE1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQkFTRV9UQUJMRSwiICIp'@;
put 'LENlKDUpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksQ2UoNCksUmUoIm5nQ2xhc3MiLFEyKDEzLFlHZSwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVW'@;
put 'SUVXX1NUQVRVU19JRCksIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSksQ2UoMSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwiICIp'@;
put 'LENlKDkpLFJlKCJkaXNhYmxlZCIsIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpfHwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19J'@;
put 'RCkpLENlKDcpLFJlKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibGlj'@;
put 'ZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpfX1jb25zdCBHR2U9W3twYXRoOiI6dGFibGVJZCIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNh'@;
put 'c1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zYXNTZXJ2aWNlPVQsdGhpcy5sb2FkZWQ9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0'@;
put 'YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wfX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2'@;
put 'aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgi'@;
put 'L3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0duLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2ZpbGVzLyIrdGhpcy5ob3RUYWJs'@;
put 'ZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2MsXz10'@;
put 'aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEubGljZW5j'@;
put 'ZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShkPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWR9KSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ8InUiKXthLnRhYmxlX2lkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO3RyeXtsZXQgZD15'@;
put 'aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEudGFibGVfaWQpO2lmKCFkfHwhZC5qc3BhcmFtcyl0aHJvdyBuZXcgRXJyb3IoImpzcGFyYW1zIHByb3BlcnR5IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTthLnRhYmxlRGV0YWlscz1kLmpzcGFyYW1zWzBdfWNhdGNo'@;
put 'KGQpe2xldCBoPXt9O2QuTUVTU0FHRT9oPWQ6aC5NRVNTQUdFPWQsYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsaCl9dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLm9wZW5UYWJsZShhLnRhYmxlX2lkKTtpZighZHx8IWQu'@;
put 'c3RhZ2V0YWJsZSl0aHJvdyBuZXcgRXJyb3IoIlN0YWdldGFibGUgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2xldCBoPWQuc3RhZ2V0YWJsZVswXSxmPVtdLF89W107Zm9yKGxldCBXIGluIGgpaCYmZi5wdXNoKFcpO2ZvcihsZXQgVz0wO1c8Zi5sZW5ndGg7VysrKV8u'@;
put 'cHVzaCh7ZGF0YTpmW1ddfSk7bGV0IFQ9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fTthLmhvdFRhYmxlLmRhdGE9ZC5zdGFnZXRhYmxlLGEuaG90VGFibGUuY29sSGVhZGVycz1mLGEuaG90VGFibGUuY29sdW1ucz1fLGEuaG90VGFibGUuY2VsbHM9VCxhLmxvYWRlZD0hMCxhLnNl'@;
put 'dEZvY3VzKCl9Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFfHwoaC5NRVNTQUdFPWQpLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCksYS5sb2FkZWQ9ITF9fX0pKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9'@;
put 'd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHByb3ZhbC1idG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQodmwpLHR0KERzKSx0dChHbCksdHQob2EpKX0sYy5cdTAy'@;
put 'NzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN0YWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImNhcmQiXSxbImNsYXNzIiwiaC04MHZoIGQt'@;
put 'ZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImgtODB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsi'@;
put 'Y2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLXRpdGxlIiwidGV4dC1jZW50ZXIiXSxbMSwibXQtMCJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1yb3ciXSxbMSwiY2FyZC1ibG9jayIs'@;
put 'ImNsci1jb2wtbWQtNiJdLFsxLCJjYXJkLWhlYWRlciIsInB5LTUiXSxbMSwiYmFzZVRhYmxlTGluayIsMywiY2xpY2siXSxbMSwibXQtMTAiXSxbMSwibXQtMTAiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2FyZC1ibG9jayJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwi'@;
put 'YnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0s'@;
put 'WzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInRleHQtY2VudGVyIiwibXQtMjAiLCJtaW4tdy0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJd'@;
put 'LFsxLCJjYXJkLWJsb2NrIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJtYXhSb3dzIiwiaGVpZ2h0IiwibGljZW5zZUtleSIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwi'@;
put 'ZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxKZSgyLFpHZSwzLDIsImRpdiIsMiksSmUoMyxXR2UsNDgsMTYsImRpdiIsMykseWUoKSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIs'@;
put 'IWQubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltkYyxaaSxrYSx4eV0sc3R5bGVzOlsiLnJlamVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjgzMTI2O2ZvbnQtd2VpZ2h0OjcwMH0uYWNjZXB0ZWRbX25nY29udGVudC0lQ09NUCVde2Nv'@;
put 'bG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfS5iYXNlVGFibGVMaW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjEwcHg7Y29sb3I6IzAwN2NiYn0iXX0pLGN9KSgpfV07bGV0ICRHZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxoYy5mb3JDaGlsZChHR2UpLF83LmZvclJvb3QoKV19KSxjfSkoKTtmdW5jdGlvbiBxR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgx'@;
put 'LCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEtHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5l'@;
put 'KDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gWEdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiks'@;
put 'TmUoMSwiIFN0YWdlIHJvd3MgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gSkdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiks'@;
put 'TmUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFFHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAi'@;
put 'LDYpLE5lKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIGUkZShjLGwpe2lmKDEmYyYmKG1lKDAsInAi'@;
put 'LDYpLE5lKDEsIiBUYWJsZXMgaW4gbGlicmFyeSBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIHQkZShjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsInAiLDYpLE5lKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIG4kZShjLGwpe2lmKDEmYyYmKG1l'@;
put 'KDAsInAiLDYpLE5lKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiByJGUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE3KSxOZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksbWUoMiwiYnV0dG9uIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxOZSgzLCIgUkVGUkVTSCAiKSx5'@;
put 'ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1bmN0aW9uIGkkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLEplKDEsciRlLDQsMSwiZGl2IiwxNiksbWUoMiwiZGl2IiwxNyksTmUoMywi'@;
put 'IFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLG1lKDQsImJ1dHRvbiIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5yZWZyZXNoRGF0YUNhdGFsb2coKSl9KSxOZSg1LCIgUkVGUkVTSCAiKSx5ZSgpKCksbWUoNiwiZGl2IiwxNyksTmUoNywiIERvd25sb2Fk'@;
put 'IENvbmZpZ3VyYXRpb24gIiksbWUoOCwiYnV0dG9uIiwxOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmRvd25sb2FkQ29uZmlndXJhdGlvbigpKX0pLE5lKDksIiBET1dOTE9BRCAiKSx5ZSgpKCksbWUoMTAsImRpdiIsMTcpLE5lKDExLCIgVXBkYXRlIExp'@;
put 'Y2VuY2UgS2V5ICIpLG1lKDEyLCJidXR0b24iLDIwKSxOZSgxMywiIFVQREFURSAiKSx5ZSgpKCksenIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxDZSgzKSxSZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFs'@;
put 'b2cpfX1jb25zdCBvJGU9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmFwcFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xMC4yIixh'@;
put 'cHBWZXJzaW9uOiJ2Ni43LjAiLnJlcGxhY2UoInYiLCIiKSxidWlsZFRpbWVzdGFtcDpJRygpKHBhcnNlSW50KCIxNzExOTcwNjMyMzI4IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0aGlzLnJlZnJlc2hpbmdE'@;
put 'YXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJlc3BvbnNlPSJObyByZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRo'@;
put 'aXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5jZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlz'@;
put 'LmVudmlyb25tZW50SW5mbyYmKHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDPWRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQykpfW5nT25Jbml0KCl7fWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2VydmljZS5nZXRTYXNq'@;
put 'c0NvbmZpZygpLGQ9YS5zZXJ2ZXJVcmwsaD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVm'@;
put 'cmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9u'@;
put 'c2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMX0pfXJlZnJlc2hEYXRhTGluZWFnZSgpe3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1'@;
put 'ZXN0KCJhZG1pbi9yZWZyZXNodGFibGVsaW5lYWdlIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25z'@;
put 'ZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykodHQoVXgpLHR0KG9hKSx0dChDMCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3lzdGVtIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxMzAsdmFyczozNCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIs'@;
put 'InAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbMSwidy0xMDAiLCJsaWdodCJdLFsxLCJjb250ZW50LWJveCIsImQtZmxleCIsImNsci1m'@;
put 'bGV4LWNvbHVtbiJdLFsxLCJzeXMtaW5mbyIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbGctcm93Il0sWzEsIm0tMCJdLFsxLCJkYXJrIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVy'@;
put 'Il0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNt'@;
put 'IiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywi'@;
put 'Y2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLE5lKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLHll'@;
put 'KCkscXQoNCwiaHIiLDMpLG1lKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksTmUoOSwiRW52aXJvbm1lbnQgRGV0YWlscyAiKSxxdCgxMCwic3BhbiIsNykseWUoKSxtZSgxMSwicCIsNiksTmUoMTIsIiBTWVNTSVRFOiAiKSxtZSgxMywic3BhbiIsNyksTmUoMTQp'@;
put 'LHllKCkoKSxtZSgxNSwicCIsNiksTmUoMTYsIiBTWVNTQ1BMOiAiKSxtZSgxNywic3BhbiIsNyksTmUoMTgpLHllKCkoKSxtZSgxOSwicCIsNiksTmUoMjAsIiBTWVNUQ1BJUEhPU1ROQU1FOiAiKSxtZSgyMSwic3BhbiIsNyksTmUoMjIpLHllKCkoKSxtZSgyMywicCIsNiksTmUoMjQsIiBT'@;
put 'WVNWTE9ORzogIiksbWUoMjUsInNwYW4iLDcpLE5lKDI2KSx5ZSgpKCksbWUoMjcsInAiLDYpLE5lKDI4LCIgTUVNU0laRTogIiksbWUoMjksInNwYW4iLDcpLE5lKDMwKSx5ZSgpKCksbWUoMzEsInAiLDYpLE5lKDMyLCIgU1lTUFJPQ0VTU01PREU6ICIpLG1lKDMzLCJzcGFuIiw3KSxOZSgz'@;
put 'NCkseWUoKSgpLG1lKDM1LCJwIiw2KSxOZSgzNiwiIFNZU0hPU1ROQU1FOiAiKSxtZSgzNywic3BhbiIsNyksTmUoMzgpLHllKCkoKSxtZSgzOSwicCIsNiksTmUoNDAsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLG1lKDQxLCJzcGFuIiw3KSxOZSg0MikseWUoKSgpLG1lKDQzLCJwIiw2KSxOZSg0'@;
put 'NCwiIFNZU0VOQ09ESU5HOiAiKSxtZSg0NSwic3BhbiIsNyksTmUoNDYpLHllKCkoKSxtZSg0NywicCIsNiksTmUoNDgsIiBBVVRPRVhFQzogIiksbWUoNDksInNwYW4iLDcpLE5lKDUwKSx5ZSgpKCksbWUoNTEsInAiLDYpLE5lKDUyLCIgREMgQURNSU4gR1JPVVA6ICIpLG1lKDUzLCJzcGFu'@;
put 'Iiw3KSxOZSg1NCkseWUoKSgpKCksbWUoNTUsImRpdiIsOCkoNTYsImRpdiIpKDU3LCJoNiIsNiksTmUoNTgsIiBEYXRhIENvbnRyb2xsZXIgRGV0YWlscyAiKSxxdCg1OSwic3BhbiIsNykseWUoKSxtZSg2MCwicCIsNiksTmUoNjEsIiBBcHBsaWNhdGlvbiB2ZXJzaW9uOiAiKSxtZSg2Miwi'@;
put 'c3BhbiIsNyksTmUoNjMpLHllKCkoKSxtZSg2NCwicCIsNiksTmUoNjUsIiBCdWlsZCB0aW1lc3RhbXA6ICIpLG1lKDY2LCJzcGFuIiw3KSxOZSg2NykseWUoKSgpLG1lKDY4LCJwIiw2KSxOZSg2OSwiIEFkYXB0ZXIgdmVyc2lvbjogIiksbWUoNzAsInNwYW4iLDcpLE5lKDcxKSx5ZSgpKCks'@;
put 'bWUoNzIsInAiLDYpLE5lKDczLCIgSFRUUDogIiksbWUoNzQsInNwYW4iLDcpLE5lKDc1KSx5ZSgpKCkoKSgpLG1lKDc2LCJkaXYiKSg3NywiaDYiLDYpLE5lKDc4LCJMaWNlbmNlIGRldGFpbHMgIikscXQoNzksInNwYW4iLDcpLHllKCksbWUoODAsInAiLDYpLE5lKDgxLCIgVmFsaWQgdW50'@;
put 'aWw6ICIpLG1lKDgyLCJzcGFuIiw3KSxOZSg4MykseWUoKSgpLG1lKDg0LCJwIiw2KSxOZSg4NSwiIFVzZXJzIGFsbG93ZWQ6ICIpLG1lKDg2LCJzcGFuIiw3KSxOZSg4NykseWUoKSgpLG1lKDg4LCJwIiw2KSxOZSg4OSwiIFNpdGUgSURzOiAiKSxtZSg5MCwic3BhbiIsNyksTmUoOTEpLHll'@;
put 'KCkoKSxtZSg5MiwicCIsNiksTmUoOTMsIiBGcmVlIFRpZXI6ICIpLG1lKDk0LCJzcGFuIiw3KSxOZSg5NSkseWUoKSgpLEplKDk2LHFHZSw0LDEsInAiLDkpLEplKDk3LEtHZSw0LDEsInAiLDkpLEplKDk4LFhHZSw0LDEsInAiLDkpLEplKDk5LEpHZSw0LDEsInAiLDkpLEplKDEwMCxRR2Us'@;
put 'NCwxLCJwIiw5KSxKZSgxMDEsZSRlLDQsMSwicCIsOSksSmUoMTAyLHQkZSw0LDEsInAiLDkpLEplKDEwMyxuJGUsNCwxLCJwIiw5KSxtZSgxMDQsInAiLDYpLE5lKDEwNSwiIFZpZXdib3hlczogIiksbWUoMTA2LCJzcGFuIiw3KSxOZSgxMDcpLHllKCkoKSxtZSgxMDgsInAiLDYpLE5lKDEw'@;
put 'OSwiIEZpbGUgVXBsb2FkOiAiKSxtZSgxMTAsInNwYW4iLDcpLE5lKDExMSkseWUoKSgpLG1lKDExMiwicCIsNiksTmUoMTEzLCIgRWRpdCByZWNvcmQ6ICIpLG1lKDExNCwic3BhbiIsNyksTmUoMTE1KSx5ZSgpKCksbWUoMTE2LCJwIiw2KSxOZSgxMTcsIiBBZGQgcmVjb3JkOiAiKSxtZSgx'@;
put 'MTgsInNwYW4iLDcpLE5lKDExOSkseWUoKSgpKCkoKSxxdCgxMjAsImhyIiwzKSxKZSgxMjEsaSRlLDE0LDIsIm5nLWNvbnRhaW5lciIsMTApLHllKCkoKSgpLG1lKDEyMiwiY2xyLW1vZGFsIiwxMSkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVzcG9u'@;
put 'c2VNb2RhbD1mfSksbWUoMTIzLCJoMyIsMTIpLE5lKDEyNCwiUmVzcG9uc2UiKSx5ZSgpLG1lKDEyNSwiZGl2IiwxMyksTmUoMTI2KSx5ZSgpLG1lKDEyNywiZGl2IiwxNCkoMTI4LCJidXR0b24iLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzcG9uc2VNb2RhbD0hMX0p'@;
put 'LE5lKDEyOSwiIE9rICIpLHllKCkoKSgpKSwyJmEmJihDZSgxNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNTSVRFKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1NDUEwpLENl'@;
put 'KDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTVENQSVBIT1NUTkFNRSksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNWTE9ORyksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVu'@;
put 'dEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5NRU1TSVpFKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1BST0NFU1NNT0RFKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZv'@;
put 'LlNZU0hPU1ROQU1FKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU0hPU1RJTkZPTE9ORyksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNFTkNPRElORyksQ2UoNCksb3Io'@;
put 'bnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5EQ19BRE1JTl9HUk9VUCksQ2UoOSksb3IoZC5hcHBJbmZvLmFwcFZlcnNpb24pLENlKDQp'@;
put 'LG9yKGQuYXBwSW5mby5idWlsZFRpbWVzdGFtcCksQ2UoNCksb3IoZC5hcHBJbmZvLmFkYXB0ZXJWZXJzaW9uKSxDZSg0KSxvcihkLmh0dHA/IllFUyI6Ik5PIiksQ2UoOCksb3IobnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8udmFsaWRfdW50aWwpLENlKDQpLG9yKG51'@;
put 'bGw9PWQubGljZW5jZUluZm8/bnVsbDpkLmxpY2VuY2VJbmZvLnVzZXJzX2FsbG93ZWQpLENlKDQpLG9yKG51bGw9PWQubGljZW5jZUluZm8/bnVsbDpkLmxpY2VuY2VJbmZvLnNpdGVfaWRfbXVsdGlwbGUpLENlKDQpLG9yKG51bGwhPWQubGljZW5jZUluZm8mJmQubGljZW5jZUluZm8uZGVt'@;
put 'bz8iWUVTIjoiTk8iKSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUo'@;
put 'Im5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52'@;
put 'YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09'@;
put 'ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQhPT1kLkluZmluaXR5KSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyJZRVMiOiJOTyIpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLmZp'@;
put 'bGVVcGxvYWQ/IllFUyI6Ik5PIiksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZD8iWUVTIjoiTk8iKSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQ/IllFUyI6Ik5PIiksQ2UoMiksUmUoIm5nSWYiLDE9PT0obnVsbD09ZC5lbnZpcm9ubWVu'@;
put 'dEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5JU0FETUlOKSksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5yZXNwb25zZU1vZGFsKSxDZSg0KSxncigiICIsZC5yZXNwb25zZSwiICIpKX0sZGVwZW5kZW5jaWVzOltaaSxCdSxvdSxzdSxadSxkaF0sc3R5bGVzOlsiLmNvbnRlbnQtYm94'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTI4OXB4fS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gPiBkaXZbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MX0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQoMil7'@;
put 'bWFyZ2luOjAgMzBweH0uYWRtaW4tYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6NXB4IDEwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGVk'@;
put 'ZWRlO21hcmdpbi1ib3R0b206NXB4fS5hZG1pbi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MTAycHh9LmRhcmtbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9QG1lZGlhIChtYXgtd2lkdGg6IDk5M3B4KXsuc3lz'@;
put 'LWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQoMil7bWFyZ2luOjB9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGRpdltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHggMH19Il19KSxjfSkoKX1dO2xldCBzJGU9KCgp'@;
put 'PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbaGMuZm9yQ2hpbGQobyRlKSxoY119KSxjfSkoKSxhJGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28scyRlLF91XX0pLGN9KSgpO2Z1bmN0aW9uIGwkZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBj'@;
put 'JGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmdyb3VwU2VhcmNoPSIiLGp0KGguZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiB1JGUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5ncm91cFNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gQnQoYSksanQoVmUoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLHllKCksSmUoNCxsJGUsMSwwLCJjbHItaWNvbiIsMTApLEplKDUsYyRlLDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5ncm91cFNl'@;
put 'YXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gZCRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChh'@;
put 'KTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmdyb3VwT25DbGljayhoKSl9KSxtZSgxLCJwIiwxNikscXQoMiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtkcigidGFibGUtYWN0aXZlIixhLkdS'@;
put 'T1VQVVJJPT09ZC5ncm91cFVyaSksQ2UoMyksZ3IoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIGgkZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsZCRlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIs'@;
put 'IWEuaGlkZGVuKX19ZnVuY3Rpb24gZiRlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gcCRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI0KSgzLCJ0'@;
put 'Ym9keSIpKDQsInRyIikoNSwidGQiLDI1KSg2LCJwIiwyNikoNywiYiIpLE5lKDgpLHllKCkoKSgpKCksbWUoOSwidHIiKSgxMCwidGQiLDI1KSgxMSwiaSIpLE5lKDEyKSx5ZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOCksb3IoYS5ncm91cE5hbWUpLENlKDQpLG9y'@;
put 'KGEuZ3JvdXBEZXNjfHwibm8gZGVzY3JpcHRpb24iKX19ZnVuY3Rpb24gZyRlKGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBtJGUoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJ0ZCIsMzEpKDIsImIiKSxOZSgzLCJOQU1FIiks'@;
put 'eWUoKSgpLG1lKDQsInRkIiwzMSkoNSwiYiIpLE5lKDYsIkVNQUlMIikseWUoKSgpLG1lKDcsInRkIiwzMSkoOCwiYiIpLE5lKDksIkNSRUFURUQiKSx5ZSgpKCksbWUoMTAsInRkIiwzMikoMTEsImIiKSxOZSgxMiwiVVBEQVRFRCIpLHllKCkoKSx6cigpKX1mdW5jdGlvbiB2JGUoYyxsKXsx'@;
put 'JmMmJihWcigwKSxtZSgxLCJ0ZCIsMzEpKDIsImIiKSxOZSgzLCJJRCIpLHllKCkoKSxtZSg0LCJ0ZCIsMzEpKDUsImIiKSxOZSg2LCJESVNQTEFZIE5BTUUiKSx5ZSgpKCksbWUoNywidGQiLDMxKSg4LCJiIiksTmUoOSwiVVNFUiBOQU1FIikseWUoKSgpLHpyKCkpfWZ1bmN0aW9uIF8kZShj'@;
put 'LGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsInRkIiwzMiksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzIpLE5lKDQpLHllKCksbWUoNSwidGQiLDMyKSxOZSg2KSx5ZSgpLG1lKDcsInRkIiwzMiksTmUoOCkseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksb3IoYS5N'@;
put 'RU1CRVJOQU1FKSxDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxvcihhLk1FTUJFUkNSRUFURUQpLENlKDIpLG9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIGIkZShjLGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsInRkIiwzMiksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzIpLE5lKDQpLHllKCks'@;
put 'bWUoNSwidGQiLDMyKSxOZSg2KSx5ZSgpLHpyKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLklEKSxDZSgyKSxvcihhLkRJU1BMQVlOQU1FKSxDZSgyKSxvcihhLlVTRVJOQU1FKX19ZnVuY3Rpb24geSRlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMzKSxKZSgx'@;
put 'LF8kZSw5LDQsIm5nLWNvbnRhaW5lciIsNSksSmUoMixiJGUsNywzLCJuZy1jb250YWluZXIiLDUpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDQpO1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iKyhhLlVSSU1FTXx8YS5JRCkpLENlKDEpLFJlKCJu'@;
put 'Z0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXNqcyl9fWZ1bmN0aW9uIHckZShjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpLEplKDMsbSRlLDEz'@;
put 'LDAsIm5nLWNvbnRhaW5lciIsNSksSmUoNCx2JGUsMTAsMCwibmctY29udGFpbmVyIiw1KSx5ZSgpKCksbWUoNSwidGJvZHkiKSxKZSg2LHkkZSwzLDMsInRyIiwzMCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlw'@;
put 'ZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiBDJGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksSmUoMyxnJGUsMiww'@;
put 'LCJoNSIsNSksbWUoNCwiZGl2IiwyNyksSmUoNSx3JGUsNywzLCJ0YWJsZSIsMjgpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLENlKDIp'@;
put 'LFJlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBTJGUoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIE0kZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiwzMykoMSwidGQiLDMyKSxOZSgyKSx5ZSgp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiB4JGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIi'@;
put 'KSgzLCJ0ZCIpKDQsImIiKSxOZSg1KSx5ZSgpKCkoKSgpLG1lKDYsInRib2R5IiksSmUoNyxNJGUsMywyLCJ0ciIsMzApLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDUpLGdyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmdy'@;
put 'b3VwTWVtYmVycyl9fWZ1bmN0aW9uIEUkZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxKZSgzLFMkZSwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI3KSxKZSg1LHgkZSw4LDIsInRhYmxlIiwyOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiks'@;
put 'b3IoYS5ncm91cE5hbWUpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBrJGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLHAkZSwxMywyLCJkaXYiLDIwKSxtZSgyLCJk'@;
put 'aXYiLDIxKSgzLCJkaXYiLDIyKSg0LCJkaXYiLDIzKSxKZSg1LEMkZSw2LDMsImRpdiIsNSksSmUoNixFJGUsNiwzLCJkaXYiLDUpLHF0KDcsImJyIikseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhKSxDZSg0KSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCB0YWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2Fz'@;
put 'U2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9Xyx0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0i'@;
put 'Iix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPVpjLkQsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNl'@;
put 'cnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAw'@;
put 'IT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEduLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUduLnVzZXJu'@;
put 'YXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9R24udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PUduLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vw'@;
put 'cz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlw'@;
put 'dGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxHbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmdyb3VwcyxHbi51c2Vy'@;
put 'bmF2Lmdyb3VwTGlzdD1hLmdyb3Vwc30pKToodGhpcy5ncm91cHM9R24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Hbi51c2VybmF2Lmdyb3VwU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pz'@;
put 'Q29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrdGhpcy5wYXJhbVVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ9SlNPTi5wYXJzZShhKTt0aGlz'@;
put 'LmxvYWRpbmc9ITE7bGV0IGg9ZC5pdGVtcy5tYXAoZj0+KHtNRU1CRVJOQU1FOmYubmFtZSxNRU1CRVJJRDpmLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPWgsdGhpcy5ncm91cE1lbWJlckNvdW50PWgubGVuZ3RoLHRoaXMuZ3JvdXBVcmk9dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT10'@;
put 'aGlzLnBhcmFtVVJJfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZD0+e3RoaXMuZ3JvdXBNZW1iZXJzPWQuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9'@;
put 'ZC5zYXNtZW1iZXJzLmxlbmd0aCx2b2lkIDAhPT1kLnNhc21lbWJlcnNbMF0mJih0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1kLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuc2FzbWVtYmVyc1swXS5HUk9VUE5BTUUsdGhpcy5ncm91'@;
put 'cERlc2M9ZC5zYXNtZW1iZXJzWzBdLkdST1VQREVTQyx0aGlzLmdyb3VwTmFtZXx8KHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkkpKX0pKSl9Z3JvdXBMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZ3JvdXBzLHRoaXMuZ3JvdXBTZWFy'@;
put 'Y2gsIkdST1VQTkFNRSIpLEduLnVzZXJuYXYuZ3JvdXBTZWFyY2g9dGhpcy5ncm91cFNlYXJjaH1ncm91cE9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAs'@;
put 'ZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpOmQrIi8iK2VuY29kZVVSSShhLkdST1VQVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK2EuR1JPVVBVUkkrIi9tZW1iZXJzP2xp'@;
put 'bWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0'@;
put 'aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQztsZXQgXz1mLml0ZW1zLm1hcChUPT4oe01FTUJFUk5BTUU6VC5uYW1lLE1FTUJFUklEOlQuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9Xyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Xy5sZW5ndGh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNl'@;
put 'cm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6YS5HUk9VUFVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQyx0aGlz'@;
put 'Lmdyb3VwTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuc2FzbWVtYmVycy5sZW5ndGh9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQob2EpLHR0KFRjKSx0dChEcyksdHQoSmQpLHR0KEdsKSl9LGMuXHUwMjc1'@;
put 'Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJu'@;
put 'Z0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgR3JvdXBz'@;
put 'IiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJd'@;
put 'LFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXJzIl0sWzEsImxvYWRp'@;
put 'bmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAtZGF0YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8iXSxbMSwibGVmdCJdLFsxLCJncm91cC1pbmZvLXRleHQi'@;
put 'XSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIsMCkoMSwiY2xyLXRyZWUiKSxKZSgyLHUkZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLEplKDMsaCRlLDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxKZSg1LGYkZSwzLDAs'@;
put 'ImRpdiIsNCksSmUoNixrJGUsOCwzLCJkaXYiLDUpLHllKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIixkLmdyb3VwcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZ3JvdXBzKSxDZSgyKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5ncm91cE1lbWJlcnMmJiFkLmxvYWRp'@;
put 'bmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxCdSxXYSxCcyxPcyxkZCxnMSxrYSxmMSxuM10sc3R5bGVzOlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0uZ3JvdXAtaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250'@;
put 'LXNpemU6MjBweH0uZ3JvdXAtaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5ncm91cC1pbmZvW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVw'@;
put 'eCAjZGFkN2Q3fS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmF1dG99Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAuZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17dGV4dC1hbGlnbjpjZW50ZXJ9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3dpZHRoOjEwMCV9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10'@;
put 'YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuZ3Jv'@;
put 'dXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCk7ZnVuY3Rpb24gQSRlKCl7fWZ1bmN0aW9uIHdVKGMpe3JldHVybiBudWxsPT1jP0EkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoYyl9fWZ1bmN0aW9u'@;
put 'IG5hZShjKXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBEJGUoKXtyZXR1cm5bXX1mdW5jdGlvbiByYWUoYyl7cmV0dXJuIG51bGw9PWM/RCRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChjKX19ZnVu'@;
put 'Y3Rpb24gaWFlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoYyl9fWZ1bmN0aW9uIG9hZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0Y2hlcyhjKX19dmFyIFIkZT1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBQJGUoKXtyZXR1cm4gdGhp'@;
put 'cy5maXJzdEVsZW1lbnRDaGlsZH12YXIgSCRlPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gTiRlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gc2FlKGMpe3JldHVybiBuZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0aW9uIG9UKGMsbCl7dGhpcy5v'@;
put 'd25lckRvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1jLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2RhdGFfXz1sfWZ1bmN0aW9uIFokZShjLGwsYSxkLGgsZil7Zm9yKHZhciBULF89MCxXPWwubGVuZ3RoLGllPWYu'@;
put 'bGVuZ3RoO188aWU7KytfKShUPWxbX10pPyhULl9fZGF0YV9fPWZbX10sZFtfXT1UKTphW19dPW5ldyBvVChjLGZbX10pO2Zvcig7XzxXOysrXykoVD1sW19dKSYmKGhbX109VCl9ZnVuY3Rpb24gWSRlKGMsbCxhLGQsaCxmLF8pe3ZhciBULFcsWmUsaWU9bmV3IE1hcCxwZT1sLmxlbmd0aCx3'@;
put 'ZT1mLmxlbmd0aCxFZT1uZXcgQXJyYXkocGUpO2ZvcihUPTA7VDxwZTsrK1QpKFc9bFtUXSkmJihFZVtUXT1aZT1fLmNhbGwoVyxXLl9fZGF0YV9fLFQsbCkrIiIsaWUuaGFzKFplKT9oW1RdPVc6aWUuc2V0KFplLFcpKTtmb3IoVD0wO1Q8d2U7KytUKVplPV8uY2FsbChjLGZbVF0sVCxmKSsi'@;
put 'IiwoVz1pZS5nZXQoWmUpKT8oZFtUXT1XLFcuX19kYXRhX189ZltUXSxpZS5kZWxldGUoWmUpKTphW1RdPW5ldyBvVChjLGZbVF0pO2ZvcihUPTA7VDxwZTsrK1QpKFc9bFtUXSkmJmllLmdldChFZVtUXSk9PT1XJiYoaFtUXT1XKX1mdW5jdGlvbiBXJGUoYyl7cmV0dXJuIGMuX19kYXRhX199'@;
put 'ZnVuY3Rpb24gJCRlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBlcWUoYyxsKXtyZXR1cm4gYzxsPy0xOmM+bD8xOmM+PWw/MDpOYU59b1QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvVCxhcHBlbmRDaGlsZDpmdW5j'@;
put 'dGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJl'@;
put 'bnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fTt2YXIgQ1U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGFhZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8y'@;
put 'MDAwL3N2ZyIseGh0bWw6Q1UseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBzVChjKXt2YXIgbD1jKz0iIixh'@;
put 'PWwuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEpKSYmKGM9Yy5zbGljZShhKzEpKSxhYWUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNlOmFhZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9uIGFxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92'@;
put 'ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gbHFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gY3FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVuY3Rpb24gdXFlKGMs'@;
put 'bCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbCl9fWZ1bmN0aW9uIGRxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6dGhpcy5z'@;
put 'ZXRBdHRyaWJ1dGUoYyxhKX19ZnVuY3Rpb24gaHFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9j'@;
put 'YWwsYSl9fWZ1bmN0aW9uIGxhZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gcHFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHko'@;
put 'Yyl9fWZ1bmN0aW9uIGdxZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwsYSl9fWZ1bmN0aW9uIG1xZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZD90aGlzLnN0eWxlLnJlbW92'@;
put 'ZVByb3BlcnR5KGMpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBZNyhjLGwpe3JldHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fGxhZShjKS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShsKX1mdW5jdGlvbiBfcWUoYyl7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIGJxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24geXFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhp'@;
put 'c1tjXTp0aGlzW2NdPWF9fWZ1bmN0aW9uIGNhZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gU1UoYyl7cmV0dXJuIGMuY2xhc3NMaXN0fHxuZXcgdWFlKGMpfWZ1bmN0aW9uIHVhZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9Y2FlKGMuZ2V0QXR0cmli'@;
put 'dXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gZGFlKGMsbCl7Zm9yKHZhciBhPVNVKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5hZGQobFtkXSl9ZnVuY3Rpb24gaGFlKGMsbCl7Zm9yKHZhciBhPVNVKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1vdmUobFtkXSl9ZnVuY3Rp'@;
put 'b24gQ3FlKGMpe3JldHVybiBmdW5jdGlvbigpe2RhZSh0aGlzLGMpfX1mdW5jdGlvbiBTcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7aGFlKHRoaXMsYyl9fWZ1bmN0aW9uIE1xZShjLGwpe3JldHVybiBmdW5jdGlvbigpeyhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9kYWU6aGFlKSh0aGlzLGMp'@;
put 'fX1mdW5jdGlvbiBFcWUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGtxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIEFxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRD'@;
put 'b250ZW50PWw/PyIifX1mdW5jdGlvbiBEcWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBMcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVuY3Rpb24gSXFlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Ro'@;
put 'aXMuaW5uZXJIVE1MPWw/PyIifX1mdW5jdGlvbiBPcWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRnFlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBh'@;
put 'cmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gTnFlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09Q1UmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUNVP2wuY3JlYXRlRWxlbWVu'@;
put 'dChjKTpsLmNyZWF0ZUVsZW1lbnROUyhhLGMpfX1mdW5jdGlvbiBWcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gZmFlKGMpe3ZhciBsPXNUKGMpO3JldHVybihsLmxvY2Fs'@;
put 'P1ZxZTpOcWUpKGwpfWZ1bmN0aW9uIGpxZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFVxZSgpe3ZhciBjPXRoaXMucGFyZW50Tm9kZTtjJiZjLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIFlxZSgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCExKSxsPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4g'@;
put 'bD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gV3FlKCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITApLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBYcWUoYyl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5fX29uO2lmKGwpe2Zvcih2YXIgZixhPTAsZD0tMSxoPWwubGVuZ3RoO2E8aDsrK2EpZj1sW2FdLGMudHlwZSYmZi50eXBlIT09Yy50eXBlfHxmLm5hbWUhPT1jLm5hbWU/bFsrK2RdPWY6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGYudHlwZSxmLmxp'@;
put 'c3RlbmVyLGYub3B0aW9ucyk7KytkP2wubGVuZ3RoPWQ6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEpxZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGgsZD10aGlzLl9fb24sZj1mdW5jdGlvbiBxcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2MuY2FsbCh0aGlzLGwsdGhpcy5f'@;
put 'X2RhdGFfXyl9fShsKTtpZihkKWZvcih2YXIgXz0wLFQ9ZC5sZW5ndGg7XzxUOysrXylpZigoaD1kW19dKS50eXBlPT09Yy50eXBlJiZoLm5hbWU9PT1jLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLnR5cGUsaC5saXN0ZW5lcixoLm9wdGlvbnMpLHRoaXMuYWRkRXZl'@;
put 'bnRMaXN0ZW5lcihoLnR5cGUsaC5saXN0ZW5lcj1mLGgub3B0aW9ucz1hKSx2b2lkKGgudmFsdWU9bCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKGMudHlwZSxmLGEpLGg9e3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLHZhbHVlOmwsbGlzdGVuZXI6ZixvcHRpb25zOmF9LGQ/ZC5wdXNoKGgpOnRo'@;
put 'aXMuX19vbj1baF19fWZ1bmN0aW9uIHBhZShjLGwsYSl7dmFyIGQ9bGFlKGMpLGg9ZC5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaD9oPW5ldyBoKGwsYSk6KGg9ZC5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxhPyhoLmluaXRFdmVudChsLGEuYnViYmxlcyxhLmNhbmNl'@;
put 'bGFibGUpLGguZGV0YWlsPWEuZGV0YWlsKTpoLmluaXRFdmVudChsLCExLCExKSksYy5kaXNwYXRjaEV2ZW50KGgpfWZ1bmN0aW9uIGVLZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwYWUodGhpcyxjLGwpfX1mdW5jdGlvbiB0S2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gcGFlKHRoaXMsYyxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXVhZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihjKXt0aGlzLl9uYW1lcy5pbmRleE9mKGMpPDAmJih0aGlzLl9uYW1lcy5wdXNoKGMpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9p'@;
put 'bigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihjKXt2YXIgbD10aGlzLl9uYW1lcy5pbmRleE9mKGMpO2w+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UobCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihj'@;
put 'KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihjKT49MH19O3ZhciBNVT1bbnVsbF07ZnVuY3Rpb24gWHUoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVuY3Rpb24gZ2FlKCl7cmV0dXJuIG5ldyBYdShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLE1VKX1YdS5w'@;
put 'cm90b3R5cGU9Z2FlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WHUsc2VsZWN0OmZ1bmN0aW9uIFQkZShjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9d1UoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIFcs'@;
put 'aWUsZj1sW2hdLF89Zi5sZW5ndGgsVD1kW2hdPW5ldyBBcnJheShfKSxwZT0wO3BlPF87KytwZSkoVz1mW3BlXSkmJihpZT1jLmNhbGwoVyxXLl9fZGF0YV9fLHBlLGYpKSYmKCJfX2RhdGFfXyJpbiBXJiYoaWUuX19kYXRhX189Vy5fX2RhdGFfXyksVFtwZV09aWUpO3JldHVybiBuZXcgWHUo'@;
put 'ZCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIEkkZShjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIEwkZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmFlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOnJhZShjKTtmb3IodmFyIGw9dGhpcy5f'@;
put 'Z3JvdXBzLGE9bC5sZW5ndGgsZD1bXSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgVyxfPWxbZl0sVD1fLmxlbmd0aCxpZT0wO2llPFQ7KytpZSkoVz1fW2llXSkmJihkLnB1c2goYy5jYWxsKFcsVy5fX2RhdGFfXyxpZSxfKSksaC5wdXNoKFcpKTtyZXR1cm4gbmV3IFh1KGQsaCl9LHNlbGVj'@;
put 'dENoaWxkOmZ1bmN0aW9uIEYkZShjKXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09Yz9QJGU6ZnVuY3Rpb24gTyRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBSJGUuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpvYWUoYykpKX0sc2VsZWN0Q2hp'@;
put 'bGRyZW46ZnVuY3Rpb24gQiRlKGMpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT1jP04kZTpmdW5jdGlvbiBWJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEgkZS5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOm9hZShjKSkpfSxmaWx0ZXI6'@;
put 'ZnVuY3Rpb24gaiRlKGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1pYWUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIFcsZj1sW2hdLF89Zi5sZW5ndGgsVD1kW2hdPVtdLGllPTA7aWU8XzsrK2llKShX'@;
put 'PWZbaWVdKSYmYy5jYWxsKFcsVy5fX2RhdGFfXyxpZSxmKSYmVC5wdXNoKFcpO3JldHVybiBuZXcgWHUoZCx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBHJGUoYyxsKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLFckZSk7dmFyIGE9bD9ZJGU6WiRl'@;
put 'LGQ9dGhpcy5fcGFyZW50cyxoPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVuY3Rpb24gVSRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0oYykpO2Zvcih2YXIgZj1oLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPW5ldyBBcnJheShmKSxXPW5ldyBBcnJh'@;
put 'eShmKSxpZT0wO2llPGY7KytpZSl7dmFyIHBlPWRbaWVdLHdlPWhbaWVdLEVlPXdlLmxlbmd0aCxaZT0kJGUoYy5jYWxsKHBlLHBlJiZwZS5fX2RhdGFfXyxpZSxkKSksaXQ9WmUubGVuZ3RoLGV0PVRbaWVdPW5ldyBBcnJheShpdCkseXQ9X1tpZV09bmV3IEFycmF5KGl0KTthKHBlLHdlLGV0'@;
put 'LHl0LFdbaWVdPW5ldyBBcnJheShFZSksWmUsbCk7Zm9yKHZhciBubix2bixTdD0wLEp0PTA7U3Q8aXQ7KytTdClpZihubj1ldFtTdF0pe2ZvcihTdD49SnQmJihKdD1TdCsxKTshKHZuPXl0W0p0XSkmJisrSnQ8aXQ7KTtubi5fbmV4dD12bnx8bnVsbH19cmV0dXJuKF89bmV3IFh1KF8sZCkp'@;
put 'Ll9lbnRlcj1ULF8uX2V4aXQ9VyxffSxlbnRlcjpmdW5jdGlvbiB6JGUoKXtyZXR1cm4gbmV3IFh1KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHNhZSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gcSRlKCl7cmV0dXJuIG5ldyBYdSh0aGlzLl9leGl0fHx0aGlzLl9ncm91'@;
put 'cHMubWFwKHNhZSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gSyRlKGMsbCxhKXt2YXIgZD10aGlzLmVudGVyKCksaD10aGlzLGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9uKCkpOmQ9ZC5hcHBlbmQoYysiIiks'@;
put 'bnVsbCE9bCYmKGg9bChoKSkmJihoPWguc2VsZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5tZXJnZShoKS5vcmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9uIFgkZShjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24oKTpjLGE9dGhpcy5fZ3JvdXBzLGQ9'@;
put 'bC5fZ3JvdXBzLGg9YS5sZW5ndGgsXz1NYXRoLm1pbihoLGQubGVuZ3RoKSxUPW5ldyBBcnJheShoKSxXPTA7VzxfOysrVylmb3IodmFyIFplLGllPWFbV10scGU9ZFtXXSx3ZT1pZS5sZW5ndGgsRWU9VFtXXT1uZXcgQXJyYXkod2UpLGl0PTA7aXQ8d2U7KytpdCkoWmU9aWVbaXRdfHxwZVtp'@;
put 'dF0pJiYoRWVbaXRdPVplKTtmb3IoO1c8aDsrK1cpVFtXXT1hW1ddO3JldHVybiBuZXcgWHUoVCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIGlLZSgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiBKJGUoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9LTEsYT1jLmxl'@;
put 'bmd0aDsrK2w8YTspZm9yKHZhciBfLGQ9Y1tsXSxoPWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKF89ZFtoXSkmJihmJiY0Xl8uY29tcGFyZURvY3VtZW50UG9zaXRpb24oZikmJmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXyxmKSxmPV8pO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9u'@;
put 'IFEkZShjKXtmdW5jdGlvbiBsKHdlLEVlKXtyZXR1cm4gd2UmJkVlP2Mod2UuX19kYXRhX18sRWUuX19kYXRhX18pOiF3ZS0hRWV9Y3x8KGM9ZXFlKTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Ype2Zvcih2YXIgaWUsXz1hW2Zd'@;
put 'LFQ9Xy5sZW5ndGgsVz1oW2ZdPW5ldyBBcnJheShUKSxwZT0wO3BlPFQ7KytwZSkoaWU9X1twZV0pJiYoV1twZV09aWUpO1cuc29ydChsKX1yZXR1cm4gbmV3IFh1KGgsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiB0cWUoKXt2YXIgYz1hcmd1bWVudHNbMF07cmV0dXJu'@;
put 'IGFyZ3VtZW50c1swXT10aGlzLGMuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIG5xZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIHJxZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3Io'@;
put 'dmFyIGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKXt2YXIgXz1kW2hdO2lmKF8pcmV0dXJuIF99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gaXFlKCl7bGV0IGM9MDtmb3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24gb3FlKCl7cmV0dXJuIXRo'@;
put 'aXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIHNxZShjKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsrK2EpZm9yKHZhciBULGg9bFthXSxmPTAsXz1oLmxlbmd0aDtmPF87KytmKShUPWhbZl0pJiZjLmNhbGwoVCxULl9fZGF0YV9fLGYsaCk7cmV0dXJuIHRoaXN9'@;
put 'LGF0dHI6ZnVuY3Rpb24gZnFlKGMsbCl7dmFyIGE9c1QoYyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUoKTtyZXR1cm4gYS5sb2NhbD9kLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJuIHRoaXMuZWFjaCgobnVs'@;
put 'bD09bD9hLmxvY2FsP2xxZTphcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YS5sb2NhbD9ocWU6ZHFlOmEubG9jYWw/dXFlOmNxZSkoYSxsKSl9LHN0eWxlOmZ1bmN0aW9uIHZxZShjLGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/cHFlOiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBsP21xZTpncWUpKGMsbCxhPz8iIikpOlk3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiB3cWUoYyxsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9fcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/eXFlOmJxZSkoYyxsKSk6'@;
put 'dGhpcy5ub2RlKClbY119LGNsYXNzZWQ6ZnVuY3Rpb24geHFlKGMsbCl7dmFyIGE9Y2FlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPVNVKHRoaXMubm9kZSgpKSxoPS0xLGY9YS5sZW5ndGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVy'@;
put 'biEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP01xZTpsP0NxZTpTcWUpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIFRxZShjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9FcWU6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0FxZTprcWUpKGMp'@;
put 'KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBScWUoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/RHFlOigiZnVuY3Rpb24iPT10eXBlb2YgYz9JcWU6THFlKShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlv'@;
put 'biBQcWUoKXtyZXR1cm4gdGhpcy5lYWNoKE9xZSl9LGxvd2VyOmZ1bmN0aW9uIEhxZSgpe3JldHVybiB0aGlzLmVhY2goRnFlKX0sYXBwZW5kOmZ1bmN0aW9uIEJxZShjKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmZhZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uIHpxZShjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6ZmFlKGMpLGQ9bnVsbD09bD9qcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDp3VShsKTtyZXR1cm4gdGhp'@;
put 'cy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbiBacWUoKXtyZXR1cm4gdGhpcy5lYWNoKFVxZSl9LGNsb25lOmZ1bmN0aW9uIEdx'@;
put 'ZShjKXtyZXR1cm4gdGhpcy5zZWxlY3QoYz9XcWU6WXFlKX0sZGF0dW06ZnVuY3Rpb24gJHFlKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixjKTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gUXFlKGMsbCxhKXt2YXIgaCxfLGQ9'@;
put 'ZnVuY3Rpb24gS3FlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24obCl7dmFyIGE9IiIsZD1sLmluZGV4T2YoIi4iKTtyZXR1cm4gZD49MCYmKGE9bC5zbGljZShkKzEpLGw9bC5zbGljZSgwLGQpKSx7dHlwZTpsLG5hbWU6YX19KX0oYysiIiksZj1kLmxl'@;
put 'bmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihUPWw/SnFlOlhxZSxoPTA7aDxmOysraCl0aGlzLmVhY2goVChkW2hdLGwsYSkpO3JldHVybiB0aGlzfXZhciBUPXRoaXMubm9kZSgpLl9fb247aWYoVClmb3IodmFyIHBlLFc9MCxpZT1ULmxlbmd0aDtXPGllOysrVylmb3IoaD0w'@;
put 'LHBlPVRbV107aDxmOysraClpZigoXz1kW2hdKS50eXBlPT09cGUudHlwZSYmXy5uYW1lPT09cGUubmFtZSlyZXR1cm4gcGUudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIG5LZShjLGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP3RLZTplS2UpKGMsbCkpfSxbU3lt'@;
put 'Ym9sLml0ZXJhdG9yXTpmdW5jdGlvbipyS2UoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciBfLGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKShfPWRbaF0pJiYoeWllbGQgXyl9fTtjb25zdCBZZz1nYWU7ZnVuY3Rpb24geFUoYyl7'@;
put 'cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBYdShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBYdShbbmFlKGMpXSxNVSl9ZnVuY3Rpb24ga3MoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBYdShbW2RvY3Vt'@;
put 'ZW50LnF1ZXJ5U2VsZWN0b3IoYyldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFh1KFtbY11dLE1VKX12YXIgb0tlPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIG1hZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307YzxsOysrYyl7aWYoIShkPWFyZ3Vt'@;
put 'ZW50c1tjXSsiIil8fGQgaW4gYXx8L1tccy5dLy50ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2QpO2FbZF09W119cmV0dXJuIG5ldyBhVChhKX1mdW5jdGlvbiBhVChjKXt0aGlzLl89Y31mdW5jdGlvbiBhS2UoYyxsKXtmb3IodmFyIGgsYT0wLGQ9Yy5sZW5ndGg7'@;
put 'YTxkOysrYSlpZigoaD1jW2FdKS5uYW1lPT09bClyZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiB2YWUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9Yy5sZW5ndGg7ZDxoOysrZClpZihjW2RdLm5hbWU9PT1sKXtjW2RdPW9LZSxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKTticmVha31y'@;
put 'ZXR1cm4gbnVsbCE9YSYmYy5wdXNoKHtuYW1lOmwsdmFsdWU6YX0pLGN9YVQucHJvdG90eXBlPW1hZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFULG9uOmZ1bmN0aW9uKGMsbCl7dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBzS2UoYyxsKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMr'@;
put 'LykubWFwKGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9YS5zbGljZSgwLGgpKSxhJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTtyZXR1cm57dHlwZTphLG5hbWU6'@;
put 'ZH19KX0oYysiIixhKSxmPS0xLF89ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8XzspaWYoaD0oYz1kW2ZdKS50eXBlKWFbaF09'@;
put 'dmFlKGFbaF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVsbD09bClmb3IoaCBpbiBhKWFbaF09dmFlKGFbaF0sYy5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytmPF87KWlmKChoPShjPWRbZl0pLnR5cGUpJiYoaD1hS2UoYVtoXSxjLm5hbWUpKSlyZXR1cm4gaH0sY29weTpmdW5jdGlvbigp'@;
put 'e3ZhciBjPXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBpbiBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgYVQoYyl9LGNhbGw6ZnVuY3Rpb24oYyxsKXtpZigoaD1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpYVtkXT1hcmd1'@;
put 'bWVudHNbZCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2ZvcihkPTAsaD0oZj10aGlzLl9bY10pLmxlbmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVuY3Rpb24oYyxsLGEpe2lmKCF0'@;
put 'aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRoaXMuX1tjXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IEVVPW1hZTt2YXIgbFQsaHcsVzc9MCx1dz0wLGR3PTAs'@;
put 'X2FlPTFlMyxjVD0wLFdnPTAsdVQ9MCxmdz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxiYWU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmlt'@;
put 'YXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oYyl7c2V0VGltZW91dChjLDE3KX07ZnVuY3Rpb24ga1UoKXtyZXR1cm4gV2d8fChiYWUobEtlKSxXZz1mdy5ub3coKSt1VCl9ZnVuY3Rpb24gbEtlKCl7V2c9MH1mdW5jdGlvbiBkVCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlz'@;
put 'Ll9uZXh0PW51bGx9ZnVuY3Rpb24geWFlKGMsbCxhKXt2YXIgZD1uZXcgZFQ7cmV0dXJuIGQucmVzdGFydChjLGwsYSksZH1mdW5jdGlvbiB3YWUoKXtXZz0oY1Q9Zncubm93KCkpK3VULFc3PXV3PTA7dHJ5eyFmdW5jdGlvbiBjS2UoKXtrVSgpLCsrVzc7Zm9yKHZhciBsLGM9bFQ7YzspKGw9'@;
put 'V2ctYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tVzd9KCl9ZmluYWxseXtXNz0wLGZ1bmN0aW9uIGRLZSgpe2Zvcih2YXIgYyxhLGw9bFQsZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9u'@;
put 'ZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOmxUPWEpO2h3PWMsQVUoZCl9KCksV2c9MH19ZnVuY3Rpb24gdUtlKCl7dmFyIGM9Zncubm93KCksbD1jLWNUO2w+X2FlJiYodVQtPWwsY1Q9Yyl9ZnVuY3Rpb24gQVUoYyl7Vzd8fCh1dyYmKHV3PWNsZWFyVGltZW91dCh1dykpLGMtV2c+'@;
put 'MjQ/KGM8MS8wJiYodXc9c2V0VGltZW91dCh3YWUsYy1mdy5ub3coKS11VCkpLGR3JiYoZHc9Y2xlYXJJbnRlcnZhbChkdykpKTooZHd8fChjVD1mdy5ub3coKSxkdz1zZXRJbnRlcnZhbCh1S2UsX2FlKSksVzc9MSxiYWUod2FlKSkpfWZ1bmN0aW9uIGhUKGMsbCxhKXt2YXIgZD1uZXcgZFQ7'@;
put 'cmV0dXJuIGQucmVzdGFydChoPT57ZC5zdG9wKCksYyhoK2wpfSxsPW51bGw9PWw/MDorbCxhKSxkfWRULnByb3RvdHlwZT15YWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkVCxyZXN0YXJ0OmZ1bmN0aW9uKGMsbCxhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2E9KG51bGw9PWE/a1UoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJmh3IT09dGhpcyYmKGh3P2h3Ll9uZXh0PXRoaXM6bFQ9dGhpcyxodz10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLEFVKCl9LHN0b3A6'@;
put 'ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEFVKCkpfX07dmFyIGhLZT1FVSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxmS2U9W10sQ2FlPTAsRFU9MixmVD0zLExVPTUscFQ9NjtmdW5jdGlvbiBnVChjLGwsYSxkLGgs'@;
put 'Zil7dmFyIF89Yy5fX3RyYW5zaXRpb247aWYoXyl7aWYoYSBpbiBfKXJldHVybn1lbHNlIGMuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbiBwS2UoYyxsLGEpe3ZhciBoLGQ9Yy5fX3RyYW5zaXRpb247ZnVuY3Rpb24gXyhpZSl7dmFyIHBlLHdlLEVlLFplO2lmKDEhPT1hLnN0YXRlKXJldHVy'@;
put 'biBXKCk7Zm9yKHBlIGluIGQpaWYoKFplPWRbcGVdKS5uYW1lPT09YS5uYW1lKXtpZihaZS5zdGF0ZT09PWZUKXJldHVybiBoVChfKTs0PT09WmUuc3RhdGU/KFplLnN0YXRlPXBULFplLnRpbWVyLnN0b3AoKSxaZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLGMsYy5fX2RhdGFfXyxaZS5pbmRleCxa'@;
put 'ZS5ncm91cCksZGVsZXRlIGRbcGVdKTorcGU8bCYmKFplLnN0YXRlPXBULFplLnRpbWVyLnN0b3AoKSxaZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2RhdGFfXyxaZS5pbmRleCxaZS5ncm91cCksZGVsZXRlIGRbcGVdKX1pZihoVChmdW5jdGlvbigpe2Euc3RhdGU9PT1mVCYmKGEuc3RhdGU9'@;
put 'NCxhLnRpbWVyLnJlc3RhcnQoVCxhLmRlbGF5LGEudGltZSksVChpZSkpfSksYS5zdGF0ZT1EVSxhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxhLnN0YXRlPT09RFUpe2ZvcihhLnN0YXRlPWZULGg9bmV3IEFycmF5KEVlPWEudHdlZW4ubGVuZ3RoKSxw'@;
put 'ZT0wLHdlPS0xO3BlPEVlOysrcGUpKFplPWEudHdlZW5bcGVdLnZhbHVlLmNhbGwoYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCkpJiYoaFsrK3dlXT1aZSk7aC5sZW5ndGg9d2UrMX19ZnVuY3Rpb24gVChpZSl7Zm9yKHZhciBwZT1pZTxhLmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51bGws'@;
put 'aWUvYS5kdXJhdGlvbik6KGEudGltZXIucmVzdGFydChXKSxhLnN0YXRlPUxVLDEpLHdlPS0xLEVlPWgubGVuZ3RoOysrd2U8RWU7KWhbd2VdLmNhbGwoYyxwZSk7YS5zdGF0ZT09PUxVJiYoYS5vbi5jYWxsKCJlbmQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLFcoKSl9ZnVuY3Rp'@;
put 'b24gVygpe2Zvcih2YXIgaWUgaW4gYS5zdGF0ZT1wVCxhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9eWFlKGZ1bmN0aW9uIGYoaWUpe2Euc3RhdGU9MSxhLnRpbWVyLnJlc3RhcnQoXyxhLmRlbGF5LGEudGlt'@;
put 'ZSksYS5kZWxheTw9aWUmJl8oaWUtYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOmhLZSx0d2VlbjpmS2UsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6Q2Fl'@;
put 'fSl9ZnVuY3Rpb24gSVUoYyxsKXt2YXIgYT1TMihjLGwpO2lmKGEuc3RhdGU+Q2FlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIGF9ZnVuY3Rpb24gVGgoYyxsKXt2YXIgYT1TMihjLGwpO2lmKGEuc3RhdGU+ZlQpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGF9ZnVuY3Rpb24gUzIoYyxsKXt2YXIgYT1jLl9fdHJhbnNpdGlvbjtpZighYXx8IShhPWFbbF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gYX1mdW5jdGlvbiBtVChjLGwpe3ZhciBk'@;
put 'LGgsXyxhPWMuX190cmFuc2l0aW9uLGY9ITA7aWYoYSl7Zm9yKF8gaW4gbD1udWxsPT1sP251bGw6bCsiIixhKShkPWFbX10pLm5hbWU9PT1sPyhoPWQuc3RhdGU+RFUmJmQuc3RhdGU8TFUsZC5zdGF0ZT1wVCxkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoaD8iaW50ZXJydXB0IjoiY2FuY2Vs'@;
put 'IixjLGMuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgYVtfXSk6Zj0hMTtmJiZkZWxldGUgYy5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIERoKGMsbCl7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKStsKmF9fXZhciB2VCxNYWU9MTgwL01hdGguUEks'@;
put 'UlU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24geGFlKGMsbCxhLGQsaCxmKXt2YXIgXyxULFc7cmV0dXJuKF89TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPV8sbC89XyksKFc9YyphK2wqZCkmJihhLT1jKlcs'@;
put 'ZC09bCpXKSwoVD1NYXRoLnNxcnQoYSphK2QqZCkpJiYoYS89VCxkLz1ULFcvPVQpLGMqZDxsKmEmJihjPS1jLGw9LWwsVz0tVyxfPS1fKSx7dHJhbnNsYXRlWDpoLHRyYW5zbGF0ZVk6Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKk1hZSxza2V3WDpNYXRoLmF0YW4oVykqTWFlLHNjYWxlWDpf'@;
put 'LHNjYWxlWTpUfX1mdW5jdGlvbiBFYWUoYyxsLGEsZCl7ZnVuY3Rpb24gaChpZSl7cmV0dXJuIGllLmxlbmd0aD9pZS5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGllLHBlKXt2YXIgd2U9W10sRWU9W107cmV0dXJuIGllPWMoaWUpLHBlPWMocGUpLGZ1bmN0aW9uIGYoaWUscGUsd2Us'@;
put 'RWUsWmUsaXQpe2lmKGllIT09d2V8fHBlIT09RWUpe3ZhciBldD1aZS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGwsbnVsbCxhKTtpdC5wdXNoKHtpOmV0LTQseDpEaChpZSx3ZSl9LHtpOmV0LTIseDpEaChwZSxFZSl9KX1lbHNlKHdlfHxFZSkmJlplLnB1c2goInRyYW5zbGF0ZSgiK3dlK2wr'@;
put 'RWUrYSl9KGllLnRyYW5zbGF0ZVgsaWUudHJhbnNsYXRlWSxwZS50cmFuc2xhdGVYLHBlLnRyYW5zbGF0ZVksd2UsRWUpLGZ1bmN0aW9uIF8oaWUscGUsd2UsRWUpe2llIT09cGU/KGllLXBlPjE4MD9wZSs9MzYwOnBlLWllPjE4MCYmKGllKz0zNjApLEVlLnB1c2goe2k6d2UucHVzaChoKHdl'@;
put 'KSsicm90YXRlKCIsbnVsbCxkKS0yLHg6RGgoaWUscGUpfSkpOnBlJiZ3ZS5wdXNoKGgod2UpKyJyb3RhdGUoIitwZStkKX0oaWUucm90YXRlLHBlLnJvdGF0ZSx3ZSxFZSksZnVuY3Rpb24gVChpZSxwZSx3ZSxFZSl7aWUhPT1wZT9FZS5wdXNoKHtpOndlLnB1c2goaCh3ZSkrInNrZXdYKCIs'@;
put 'bnVsbCxkKS0yLHg6RGgoaWUscGUpfSk6cGUmJndlLnB1c2goaCh3ZSkrInNrZXdYKCIrcGUrZCl9KGllLnNrZXdYLHBlLnNrZXdYLHdlLEVlKSxmdW5jdGlvbiBXKGllLHBlLHdlLEVlLFplLGl0KXtpZihpZSE9PXdlfHxwZSE9PUVlKXt2YXIgZXQ9WmUucHVzaChoKFplKSsic2NhbGUoIixu'@;
put 'dWxsLCIsIixudWxsLCIpIik7aXQucHVzaCh7aTpldC00LHg6RGgoaWUsd2UpfSx7aTpldC0yLHg6RGgocGUsRWUpfSl9ZWxzZSgxIT09d2V8fDEhPT1FZSkmJlplLnB1c2goaChaZSkrInNjYWxlKCIrd2UrIiwiK0VlKyIpIil9KGllLnNjYWxlWCxpZS5zY2FsZVkscGUuc2NhbGVYLHBlLnNj'@;
put 'YWxlWSx3ZSxFZSksaWU9cGU9bnVsbCxmdW5jdGlvbihaZSl7Zm9yKHZhciB5dCxpdD0tMSxldD1FZS5sZW5ndGg7KytpdDxldDspd2VbKHl0PUVlW2l0XSkuaV09eXQueChaZSk7cmV0dXJuIHdlLmpvaW4oIiIpfX19dmFyIF9LZT1FYWUoZnVuY3Rpb24gbUtlKGMpe2NvbnN0IGw9bmV3KCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT9SVTp4YWUobC5hLGwuYixsLmMsbC5kLGwuZSxsLmYpfSwicHgsICIsInB4KSIsImRlZykiKSxrYWU9RWFlKGZ1bmN0aW9uIHZLZShjKXtyZXR1cm4g'@;
put 'bnVsbCE9YyYmKHZUfHwodlQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksdlQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGMpLGM9dlQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/eGFlKChjPWMubWF0cml4KS5h'@;
put 'LGMuYixjLmMsYy5kLGMuZSxjLmYpOlJVfSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGJLZShjLGwpe3ZhciBhLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGg9VGgodGhpcyxjKSxmPWgudHdlZW47aWYoZiE9PWEpZm9yKHZhciBfPTAsVD0oZD1hPWYpLmxlbmd0aDtfPFQ7KytfKWlmKGRbX10u'@;
put 'bmFtZT09PWwpeyhkPWQuc2xpY2UoKSkuc3BsaWNlKF8sMSk7YnJlYWt9aC50d2Vlbj1kfX1mdW5jdGlvbiB5S2UoYyxsLGEpe3ZhciBkLGg7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPVRoKHRoaXMsYyksXz1mLnR3ZWVu'@;
put 'O2lmKF8hPT1kKXtoPShkPV8pLnNsaWNlKCk7Zm9yKHZhciBUPXtuYW1lOmwsdmFsdWU6YX0sVz0wLGllPWgubGVuZ3RoO1c8aWU7KytXKWlmKGhbV10ubmFtZT09PWwpe2hbV109VDticmVha31XPT09aWUmJmgucHVzaChUKX1mLnR3ZWVuPWh9fWZ1bmN0aW9uIE9VKGMsbCxhKXt2YXIgZD1j'@;
put 'Ll9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9VGgodGhpcyxkKTsoaC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGgpe3JldHVybiBTMihoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiBQVShjLGwsYSl7Yy5wcm90b3R5'@;
put 'cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0cnVjdG9yPWN9ZnVuY3Rpb24gQWFlKGMsbCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtkXT1sW2RdO3JldHVybiBhfWZ1bmN0aW9uIHB3KCl7fXZhciBfVD0xLy43LEc3PSJcXHMqKFsrLV0/XFxkKylc'@;
put 'XHMqIixtdz0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTGg9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixDS2U9L14jKFswLTlhLWZdezMsOH0pJC8sU0tlPW5ldyBSZWdFeHAoYF5yZ2JcXCgk'@;
put 'e0c3fSwke0c3fSwke0c3fVxcKSRgKSxNS2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7TGh9LCR7TGh9LCR7TGh9XFwpJGApLHhLZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7Rzd9LCR7Rzd9LCR7Rzd9LCR7bXd9XFwpJGApLEVLZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7TGh9LCR7TGh9LCR7TGh9'@;
put 'LCR7bXd9XFwpJGApLGtLZT1uZXcgUmVnRXhwKGBeaHNsXFwoJHttd30sJHtMaH0sJHtMaH1cXCkkYCksQUtlPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHttd30sJHtMaH0sJHtMaH0sJHttd31cXCkkYCksVGFlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6'@;
put 'NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEs'@;
put 'Y2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3'@;
put 'MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtv'@;
put 'cmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlv'@;
put 'bGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNp'@;
put 'YToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBp'@;
put 'bms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1'@;
put 'ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxt'@;
put 'b246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVl'@;
put 'bjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1l'@;
put 'ZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2'@;
put 'NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVn'@;
put 'cmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJw'@;
put 'bGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6'@;
put 'MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46'@;
put 'MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46'@;
put 'MTAxNDUwNzR9O2Z1bmN0aW9uIERhZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIExhZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEdnKGMpe3ZhciBsLGE7cmV0dXJuIGM9KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPUNL'@;
put 'ZS5leGVjKGMpKT8oYT1sWzFdLmxlbmd0aCxsPXBhcnNlSW50KGxbMV0sMTYpLDY9PT1hP0lhZShsKTozPT09YT9uZXcgSDAobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgxNSZsKTw8NHwxNSZsLDEpOjg9PT1hP2JUKGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZs'@;
put 'KS8yNTUpOjQ9PT1hP2JUKGw+PjEyJjE1fGw+PjgmMjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9U0tlLmV4ZWMoYykpP25ldyBIMChsWzFdLGxbMl0sbFszXSwxKToobD1NS2UuZXhlYyhjKSk/bmV3IEgwKDI1NSpsWzFd'@;
put 'LzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLDEpOihsPXhLZS5leGVjKGMpKT9iVChsWzFdLGxbMl0sbFszXSxsWzRdKToobD1FS2UuZXhlYyhjKSk/YlQoMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsbFs0XSk6KGw9a0tlLmV4ZWMoYykpP1BhZShsWzFdLGxb'@;
put 'Ml0vMTAwLGxbM10vMTAwLDEpOihsPUFLZS5leGVjKGMpKT9QYWUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCxsWzRdKTpUYWUuaGFzT3duUHJvcGVydHkoYyk/SWFlKFRhZVtjXSk6InRyYW5zcGFyZW50Ij09PWM/bmV3IEgwKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gSWFlKGMpe3Jl'@;
put 'dHVybiBuZXcgSDAoYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLDEpfWZ1bmN0aW9uIGJUKGMsbCxhLGQpe3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgSDAoYyxsLGEsZCl9ZnVuY3Rpb24geVQoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIExLZShj'@;
put 'KXtyZXR1cm4gYyBpbnN0YW5jZW9mIHB3fHwoYz1HZyhjKSksYz9uZXcgSDAoKGM9Yy5yZ2IoKSkucixjLmcsYy5iLGMub3BhY2l0eSk6bmV3IEgwfShjKTpuZXcgSDAoYyxsLGEsZD8/MSl9ZnVuY3Rpb24gSDAoYyxsLGEsZCl7dGhpcy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5v'@;
put 'cGFjaXR5PStkfWZ1bmN0aW9uIFJhZSgpe3JldHVybmAjJHtxZyh0aGlzLnIpfSR7cWcodGhpcy5nKX0ke3FnKHRoaXMuYil9YH1mdW5jdGlvbiBPYWUoKXtjb25zdCBjPXdUKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/InJnYigiOiJyZ2JhKCJ9JHskZyh0aGlzLnIpfSwgJHskZyh0'@;
put 'aGlzLmcpfSwgJHskZyh0aGlzLmIpfSR7MT09PWM/IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIHdUKGMpe3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxjKSl9ZnVuY3Rpb24gJGcoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8'@;
put 'fDApKX1mdW5jdGlvbiBxZyhjKXtyZXR1cm4oKGM9JGcoYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygxNil9ZnVuY3Rpb24gUGFlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1hPU5hTjphPD0wfHxhPj0xP2M9bD1OYU46bDw9MCYmKGM9TmFOKSxuZXcgTTIoYyxsLGEsZCl9ZnVuY3Rpb24g'@;
put 'RmFlKGMpe2lmKGMgaW5zdGFuY2VvZiBNMilyZXR1cm4gbmV3IE0yKGMuaCxjLnMsYy5sLGMub3BhY2l0eSk7aWYoYyBpbnN0YW5jZW9mIHB3fHwoYz1HZyhjKSksIWMpcmV0dXJuIG5ldyBNMjtpZihjIGluc3RhbmNlb2YgTTIpcmV0dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1j'@;
put 'LmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgubWluKGwsYSxkKSxmPU1hdGgubWF4KGwsYSxkKSxfPU5hTixUPWYtaCxXPShmK2gpLzI7cmV0dXJuIFQ/KF89bD09PWY/KGEtZCkvVCs2KihhPGQpOmE9PT1mPyhkLWwpL1QrMjoobC1hKS9UKzQsVC89VzwuNT9mK2g6Mi1mLWgsXyo9NjApOlQ9Vz4w'@;
put 'JiZXPDE/MDpfLG5ldyBNMihfLFQsVyxjLm9wYWNpdHkpfWZ1bmN0aW9uIE0yKGMsbCxhLGQpe3RoaXMuaD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBIYWUoYyl7cmV0dXJuKGM9KGN8fDApJTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIENUKGMpe3Jl'@;
put 'dHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsY3x8MCkpfWZ1bmN0aW9uIEZVKGMsbCxhKXtyZXR1cm4gMjU1KihjPDYwP2wrKGEtbCkqYy82MDpjPDE4MD9hOmM8MjQwP2wrKGEtbCkqKDI0MC1jKS82MDpsKX1mdW5jdGlvbiBOYWUoYyxsLGEsZCxoKXt2YXIgZj1jKmMsXz1mKmM7cmV0dXJu'@;
put 'KCgxLTMqYyszKmYtXykqbCsoNC02KmYrMypfKSphKygxKzMqYyszKmYtMypfKSpkK18qaCkvNn1QVShwdyxHZyx7Y29weShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlh'@;
put 'YmxlKCl9LGhleDpEYWUsZm9ybWF0SGV4OkRhZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIFRLZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0sZm9ybWF0SHNsOmZ1bmN0aW9uIERLZSgpe3JldHVybiBGYWUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpMYWUsdG9TdHJpbmc6'@;
put 'TGFlfSksUFUoSDAseVQsQWFlKHB3LHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP19UOk1hdGgucG93KF9ULGMpLG5ldyBIMCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxu'@;
put 'ZXcgSDAodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBIMCgkZyh0aGlzLnIpLCRnKHRoaXMuZyksJGcodGhpcy5iKSx3VCh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8'@;
put 'PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlJhZSxmb3JtYXRIZXg6UmFlLGZvcm1hdEhleDg6ZnVuY3Rpb24gSUtlKCl7cmV0dXJu'@;
put 'YCMke3FnKHRoaXMucil9JHtxZyh0aGlzLmcpfSR7cWcodGhpcy5iKX0ke3FnKDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpPYWUsdG9TdHJpbmc6T2FlfSkpLFBVKE0yLGZ1bmN0aW9uIFJLZShjLGwsYSxkKXtyZXR1cm4gMT09PWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg/RmFlKGMpOm5ldyBNMihjLGwsYSxkPz8xKX0sQWFlKHB3LHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP19UOk1hdGgucG93KF9ULGMpLG5ldyBNMih0aGlzLmgsdGhpcy5zLHRoaXMubCpjLHRoaXMub3BhY2l0eSl9LGRhcmtlcihjKXtyZXR1cm4gYz1udWxsPT1j'@;
put 'Py43Ok1hdGgucG93KC43LGMpLG5ldyBNMih0aGlzLmgsdGhpcy5zLHRoaXMubCpjLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBjPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksbD1pc05hTihjKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxhPXRoaXMubCxkPWErKGE8LjU/YToxLWEpKmws'@;
put 'aD0yKmEtZDtyZXR1cm4gbmV3IEgwKEZVKGM+PTI0MD9jLTI0MDpjKzEyMCxoLGQpLEZVKGMsaCxkKSxGVShjPDEyMD9jKzI0MDpjLTEyMCxoLGQpLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyBNMihIYWUodGhpcy5oKSxDVCh0aGlzLnMpLENUKHRoaXMubCksd1QodGhpcy5v'@;
put 'cGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtjb25zdCBjPXdUKHRoaXMub3BhY2l0eSk7cmV0'@;
put 'dXJuYCR7MT09PWM/ImhzbCgiOiJoc2xhKCJ9JHtIYWUodGhpcy5oKX0sICR7MTAwKkNUKHRoaXMucyl9JSwgJHsxMDAqQ1QodGhpcy5sKX0lJHsxPT09Yz8iKSI6YCwgJHtjfSlgfWB9fSkpO2NvbnN0IEhVPWM9PigpPT5jO2Z1bmN0aW9uIEJhZShjLGwpe3ZhciBhPWwtYztyZXR1cm4gYT9m'@;
put 'dW5jdGlvbiBWYWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMrYSpsfX0oYyxhKTpIVShpc05hTihjKT9sOmMpfWNvbnN0IFNUPWZ1bmN0aW9uIGMobCl7dmFyIGE9ZnVuY3Rpb24gSEtlKGMpe3JldHVybiAxPT0oYz0rYyk/QmFlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9m'@;
put 'dW5jdGlvbiBGS2UoYyxsLGEpe3JldHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBvdyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEpfX0obCxhLGMpOkhVKGlzTmFOKGwpP2E6bCl9fShsKTtmdW5jdGlvbiBkKGgsZil7dmFyIF89YSgoaD15VCho'@;
put 'KSkuciwoZj15VChmKSkuciksVD1hKGguZyxmLmcpLFc9YShoLmIsZi5iKSxpZT1CYWUoaC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHBlKXtyZXR1cm4gaC5yPV8ocGUpLGguZz1UKHBlKSxoLmI9VyhwZSksaC5vcGFjaXR5PWllKHBlKSxoKyIifX1yZXR1cm4gZC5nYW1t'@;
put 'YT1jLGR9KDEpO2Z1bmN0aW9uIGphZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIF8sVCxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpO2ZvcihfPTA7XzxhOysrXylUPXlUKGxbX10pLGRbX109VC5yfHwwLGhbX109VC5nfHwwLGZbX109'@;
put 'VC5ifHwwO3JldHVybiBkPWMoZCksaD1jKGgpLGY9YyhmKSxULm9wYWNpdHk9MSxmdW5jdGlvbihXKXtyZXR1cm4gVC5yPWQoVyksVC5nPWgoVyksVC5iPWYoVyksVCsiIn19fWphZShmdW5jdGlvbiBPS2UoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9YTw9'@;
put 'MD9hPTA6YT49MT8oYT0xLGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9Y1tkXSxmPWNbZCsxXTtyZXR1cm4gTmFlKChhLWQvbCkqbCxkPjA/Y1tkLTFdOjIqaC1mLGgsZixkPGwtMT9jW2QrMl06MipmLWgpfX0pLGphZShmdW5jdGlvbiBQS2UoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKGEpe3ZhciBkPU1hdGguZmxvb3IoKChhJT0xKTwwPysrYTphKSpsKTtyZXR1cm4gTmFlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tkJWxdLGNbKGQrMSklbF0sY1soZCsyKSVsXSl9fSk7dmFyIE5VPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxW'@;
put 'VT1uZXcgUmVnRXhwKE5VLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHphZShjLGwpe3ZhciBkLGgsZixhPU5VLmxhc3RJbmRleD1WVS5sYXN0SW5kZXg9MCxfPS0xLFQ9W10sVz1bXTtmb3IoYys9IiIsbCs9IiI7KGQ9TlUuZXhlYyhjKSkmJihoPVZVLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYo'@;
put 'Zj1sLnNsaWNlKGEsZiksVFtfXT9UW19dKz1mOlRbKytfXT1mKSwoZD1kWzBdKT09PShoPWhbMF0pP1RbX10/VFtfXSs9aDpUWysrX109aDooVFsrK19dPW51bGwsVy5wdXNoKHtpOl8seDpEaChkLGgpfSkpLGE9VlUubGFzdEluZGV4O3JldHVybiBhPGwubGVuZ3RoJiYoZj1sLnNsaWNlKGEp'@;
put 'LFRbX10/VFtfXSs9ZjpUWysrX109ZiksVC5sZW5ndGg8Mj9XWzBdP2Z1bmN0aW9uIFZLZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGMobCkrIiJ9fShXWzBdLngpOmZ1bmN0aW9uIE5LZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY319KGwpOihsPVcubGVuZ3RoLGZ1bmN0'@;
put 'aW9uKGllKXtmb3IodmFyIHdlLHBlPTA7cGU8bDsrK3BlKVRbKHdlPVdbcGVdKS5pXT13ZS54KGllKTtyZXR1cm4gVC5qb2luKCIiKX0pfWZ1bmN0aW9uIFVhZShjLGwpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/RGg6bCBpbnN0YW5jZW9mIEdnP1NUOihhPUdnKGwpKT8obD1h'@;
put 'LFNUKTp6YWUpKGMsbCl9ZnVuY3Rpb24gQktlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBqS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiB6S2UoYyxs'@;
put 'LGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiBfPT09aD9udWxsOl89PT1kP2Y6Zj1sKGQ9XyxhKX19ZnVuY3Rpb24gVUtlKGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz10aGlz'@;
put 'LmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX1mdW5jdGlvbiBaS2UoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXyxXLFQ9YSh0aGlzKTtyZXR1cm4gbnVsbD09VD92b2lkIHRoaXMucmVt'@;
put 'b3ZlQXR0cmlidXRlKGMpOihfPXRoaXMuZ2V0QXR0cmlidXRlKGMpKT09PShXPVQrIiIpP251bGw6Xz09PWQmJlc9PT1oP2Y6KGg9VyxmPWwoZD1fLFQpKX19ZnVuY3Rpb24gWUtlKGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF8sVyxUPWEodGhpcyk7cmV0dXJuIG51'@;
put 'bGw9PVQ/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6KF89dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpKT09PShXPVQrIiIpP251bGw6Xz09PWQmJlc9PT1oP2Y6KGg9VyxmPWwoZD1fLFQpKX19ZnVuY3Rpb24gcUtlKGMsbCl7dmFyIGEs'@;
put 'ZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gJEtlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0aGlzLGEpKX19KGMsZikp'@;
put 'LGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBLS2UoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBHS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRy'@;
put 'aWJ1dGUoYyxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gSktlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7SVUodGhpcyxjKS5kZWxheT0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFFLZShjLGwpe3JldHVybiBsPStsLGZ1'@;
put 'bmN0aW9uKCl7SVUodGhpcyxjKS5kZWxheT1sfX1mdW5jdGlvbiB0WGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtUaCh0aGlzLGMpLmR1cmF0aW9uPStsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gblhlKGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXtUaCh0aGlzLGMpLmR1'@;
put 'cmF0aW9uPWx9fXZhciB2WGU9WWcucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIFphZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpfX12YXIgUFhlPTA7ZnVuY3Rpb24gSWgoYyxsLGEsZCl7dGhpcy5fZ3JvdXBzPWMsdGhpcy5fcGFyZW50'@;
put 'cz1sLHRoaXMuX25hbWU9YSx0aGlzLl9pZD1kfWZ1bmN0aW9uIEJVKGMpe3JldHVybiBZZygpLnRyYW5zaXRpb24oYyl9ZnVuY3Rpb24gWWFlKCl7cmV0dXJuKytQWGV9dmFyIHIzPVlnLnByb3RvdHlwZTtJaC5wcm90b3R5cGU9QlUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJaCxzZWxlY3Q6'@;
put 'ZnVuY3Rpb24gZ1hlKGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9d1UoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoOysrXylmb3IodmFyIHBlLHdlLFQ9ZFtfXSxXPVQubGVu'@;
put 'Z3RoLGllPWZbX109bmV3IEFycmF5KFcpLEVlPTA7RWU8VzsrK0VlKShwZT1UW0VlXSkmJih3ZT1jLmNhbGwocGUscGUuX19kYXRhX18sRWUsVCkpJiYoIl9fZGF0YV9fImluIHBlJiYod2UuX19kYXRhX189cGUuX19kYXRhX18pLGllW0VlXT13ZSxnVChpZVtFZV0sbCxhLEVlLGllLFMyKHBl'@;
put 'LGEpKSk7cmV0dXJuIG5ldyBJaChmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIG1YZShjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJhZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9'@;
put 'W10sXz1bXSxUPTA7VDxoOysrVClmb3IodmFyIHBlLFc9ZFtUXSxpZT1XLmxlbmd0aCx3ZT0wO3dlPGllOysrd2UpaWYocGU9V1t3ZV0pe2Zvcih2YXIgWmUsRWU9Yy5jYWxsKHBlLHBlLl9fZGF0YV9fLHdlLFcpLGl0PVMyKHBlLGEpLGV0PTAseXQ9RWUubGVuZ3RoO2V0PHl0OysrZXQpKFpl'@;
put 'PUVlW2V0XSkmJmdUKFplLGwsYSxldCxFZSxpdCk7Zi5wdXNoKEVlKSxfLnB1c2gocGUpfXJldHVybiBuZXcgSWgoZixfLGwsYSl9LHNlbGVjdENoaWxkOnIzLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOnIzLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbiBsWGUoYyl7ImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIGMmJihjPWlhZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxmPWxbaF0sXz1mLmxlbmd0aCxUPWRbaF09W10saWU9MDtpZTxfOysraWUpKFc9ZltpZV0pJiZjLmNhbGwoVyxXLl9f'@;
put 'ZGF0YV9fLGllLGYpJiZULnB1c2goVyk7cmV0dXJuIG5ldyBJaChkLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGNYZShjKXtpZihjLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9Yy5fZ3Jv'@;
put 'dXBzLGQ9bC5sZW5ndGgsZj1NYXRoLm1pbihkLGEubGVuZ3RoKSxfPW5ldyBBcnJheShkKSxUPTA7VDxmOysrVClmb3IodmFyIEVlLFc9bFtUXSxpZT1hW1RdLHBlPVcubGVuZ3RoLHdlPV9bVF09bmV3IEFycmF5KHBlKSxaZT0wO1plPHBlOysrWmUpKEVlPVdbWmVdfHxpZVtaZV0pJiYod2Vb'@;
put 'WmVdPUVlKTtmb3IoO1Q8ZDsrK1QpX1tUXT1sW1RdO3JldHVybiBuZXcgSWgoXyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gX1hlKCl7cmV0dXJuIG5ldyB2WGUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1'@;
put 'bmN0aW9uIFJYZSgpe2Zvcih2YXIgYz10aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1ZYWUoKSxkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgVyxfPWRbZl0sVD1fLmxlbmd0aCxpZT0wO2llPFQ7KytpZSlpZihXPV9baWVdKXt2YXIgcGU9UzIoVyxsKTtnVChX'@;
put 'LGMsYSxpZSxfLHt0aW1lOnBlLnRpbWUrcGUuZGVsYXkrcGUuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpwZS5kdXJhdGlvbixlYXNlOnBlLmVhc2V9KX1yZXR1cm4gbmV3IEloKGQsdGhpcy5fcGFyZW50cyxjLGEpfSxjYWxsOnIzLmNhbGwsbm9kZXM6cjMubm9kZXMsbm9kZTpyMy5ub2Rl'@;
put 'LHNpemU6cjMuc2l6ZSxlbXB0eTpyMy5lbXB0eSxlYWNoOnIzLmVhY2gsb246ZnVuY3Rpb24gaFhlKGMsbCl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9TMih0aGlzLm5vZGUoKSxhKS5vbi5vbihjKTp0aGlzLmVhY2goZnVuY3Rpb24gZFhlKGMsbCxhKXt2YXIg'@;
put 'ZCxoLGY9ZnVuY3Rpb24gdVhlKGMpe3JldHVybihjKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24obCl7dmFyIGE9bC5pbmRleE9mKCIuIik7cmV0dXJuIGE+PTAmJihsPWwuc2xpY2UoMCxhKSksIWx8fCJzdGFydCI9PT1sfSl9KGwpP0lVOlRoO3JldHVybiBmdW5j'@;
put 'dGlvbigpe3ZhciBfPWYodGhpcyxjKSxUPV8ub247VCE9PWQmJihoPShkPVQpLmNvcHkoKSkub24obCxhKSxfLm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1bmN0aW9uIFdLZShjLGwpe3ZhciBhPXNUKGMpLGQ9InRyYW5zZm9ybSI9PT1hP2thZTpVYWU7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGMs'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGw/KGEubG9jYWw/WUtlOlpLZSkoYSxkLE9VKHRoaXMsImF0dHIuIitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP2pLZTpCS2UpKGEpOihhLmxvY2FsP1VLZTp6S2UpKGEsZCxsKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBYS2UoYyxsKXt2YXIgYT0iYXR0ci4iK2M7'@;
put 'aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3ZhciBkPXNUKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEs'@;
put 'KGQubG9jYWw/cUtlOktLZSkoZCxsKSl9LHN0eWxlOmZ1bmN0aW9uIFNYZShjLGwsYSl7dmFyIGQ9InRyYW5zZm9ybSI9PShjKz0iIik/X0tlOlVhZTtyZXR1cm4gbnVsbD09bD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBiWGUoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'dmFyIGY9WTcodGhpcyxjKSxfPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLFk3KHRoaXMsYykpO3JldHVybiBmPT09Xz9udWxsOmY9PT1hJiZfPT09ZD9oOmg9bChhPWYsZD1fKX19KGMsZCkpLm9uKCJlbmQuc3R5bGUuIitjLFphZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhp'@;
put 'cy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gd1hlKGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89WTcodGhpcyxjKSxUPWEodGhpcyksVz1UKyIiO3JldHVybiBudWxsPT1UJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxXPVQ9WTcodGhpcyxjKSksXz09PVc/'@;
put 'bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX0oYyxkLE9VKHRoaXMsInN0eWxlLiIrYyxsKSkpLmVhY2goZnVuY3Rpb24gQ1hlKGMsbCl7dmFyIGEsZCxoLFQsZj0ic3R5bGUuIitsLF89ImVuZC4iK2Y7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFc9VGgodGhpcyxjKSxpZT1X'@;
put 'Lm9uLHBlPW51bGw9PVcudmFsdWVbZl0/VHx8KFQ9WmFlKGwpKTp2b2lkIDA7KGllIT09YXx8aCE9PXBlKSYmKGQ9KGE9aWUpLmNvcHkoKSkub24oXyxoPXBlKSxXLm9uPWR9fSh0aGlzLl9pZCxjKSk6dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24geVhlKGMsbCxhKXt2YXIgZCxmLGg9YSsi'@;
put 'IjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1ZNyh0aGlzLGMpO3JldHVybiBfPT09aD9udWxsOl89PT1kP2Y6Zj1sKGQ9XyxhKX19KGMsZCxsKSxhKS5vbigiZW5kLnN0eWxlLiIrYyxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBFWGUoYyxsLGEpe3ZhciBkPSJzdHlsZS4iKyhjKz0iIik7'@;
put 'aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihkPXRoaXMudHdlZW4oZCkpJiZkLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGQsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGQsZnVuY3Rpb24geFhl'@;
put 'KGMsbCxhKXt2YXIgZCxoO2Z1bmN0aW9uIGYoKXt2YXIgXz1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gXyE9PWgmJihkPShoPV8pJiZmdW5jdGlvbiBNWGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbC5jYWxsKHRoaXMsZCksYSl9'@;
put 'fShjLF8sYSkpLGR9cmV0dXJuIGYuX3ZhbHVlPWwsZn0oYyxsLGE/PyIiKSl9LHRleHQ6ZnVuY3Rpb24gVFhlKGMpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiBBWGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yyh0aGlzKTt0aGlz'@;
put 'LnRleHRDb250ZW50PWw/PyIifX0oT1UodGhpcywidGV4dCIsYykpOmZ1bmN0aW9uIGtYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fShudWxsPT1jPyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIElYZShjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1lbnRz'@;
put 'Lmxlbmd0aDwxKXJldHVybihsPXRoaXMudHdlZW4obCkpJiZsLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gTFhlKGMpe3ZhciBsLGE7'@;
put 'ZnVuY3Rpb24gZCgpe3ZhciBoPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIERYZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9KGMp'@;
put 'KX0scmVtb3ZlOmZ1bmN0aW9uIHBYZSgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBmWGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwucmVt'@;
put 'b3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiB3S2UoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgXyxkPVMyKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKF89ZFto'@;
put 'XSkubmFtZT09PWMpcmV0dXJuIF8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9iS2U6eUtlKShhLGMsbCkpfSxkZWxheTpmdW5jdGlvbiBlWGUoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgYz9KS2U6UUtlKShsLGMpKTpTMih0aGlzLm5vZGUoKSxsKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gclhlKGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/dFhlOm5YZSkobCxjKSk6UzIo'@;
put 'dGhpcy5ub2RlKCksbCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gb1hlKGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbiBpWGUoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7VGgodGhpcyxjKS5lYXNlPWx9fShsLGMpKTpTMih0aGlzLm5vZGUoKSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBhWGUoYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gc1hlKGMsbCl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO1RoKHRoaXMsYykuZWFzZT1hfX0odGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gT1hlKCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEuc2l6'@;
put 'ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLF8pe3ZhciBUPXt2YWx1ZTpffSxXPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGllPVRoKHRoaXMsZCkscGU9aWUub247cGUhPT1jJiYoKGw9KGM9cGUpLmNvcHkoKSkuXy5jYW5j'@;
put 'ZWwucHVzaChUKSxsLl8uaW50ZXJydXB0LnB1c2goVCksbC5fLmVuZC5wdXNoKFcpKSxpZS5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpyM1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgSFhlPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlv'@;
put 'biBGWGUoYyl7cmV0dXJuKChjKj0yKTw9MT9jKmMqYzooYy09MikqYypjKzIpLzJ9fTtmdW5jdGlvbiBOWGUoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFuc2l0aW9uKXx8IShhPWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBu'@;
put 'b3QgZm91bmRgKTtyZXR1cm4gYX1ZZy5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIGdLZShjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bVQodGhpcyxjKX0pfSxZZy5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBWWGUoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgSWg/'@;
put 'KGw9Yy5faWQsYz1jLl9uYW1lKToobD1ZYWUoKSwoYT1IWGUpLnRpbWU9a1UoKSxjPW51bGw9PWM/bnVsbDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBXLF89ZFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKShXPV9baWVd'@;
put 'KSYmZ1QoVyxjLGwsaWUsXyxhfHxOWGUoVyxsKSk7cmV0dXJuIG5ldyBJaChkLHRoaXMuX3BhcmVudHMsYyxsKX07dmFyIEJYZT1bbnVsbF07Y29uc3QgalU9e2NhcHR1cmU6ITAscGFzc2l2ZTohMX07ZnVuY3Rpb24gelUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVBy'@;
put 'b3BhZ2F0aW9uKCl9ZnVuY3Rpb24gV2FlKGMpe3JldHVybigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0IEdYZT1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsXyl7dmFyIHl0LEV0LFQ9ZlswXSxXPWZbMV0saWU9ZlsyXSxFZT1fWzJdLFplPV9bMF0tVCxpdD1fWzFdLVcsZXQ9'@;
put 'WmUqWmUraXQqaXQ7aWYoZXQ8MWUtMTIpRXQ9TWF0aC5sb2coRWUvaWUpL2wseXQ9ZnVuY3Rpb24oY3Ipe3JldHVybltUK2NyKlplLFcrY3IqaXQsaWUqTWF0aC5leHAobCpjcipFdCldfTtlbHNle3ZhciBTdD1NYXRoLnNxcnQoZXQpLEp0PShFZSpFZS1pZSppZStkKmV0KS8oMippZSphKlN0'@;
put 'KSxubj0oRWUqRWUtaWUqaWUtZCpldCkvKDIqRWUqYSpTdCksdm49TWF0aC5sb2coTWF0aC5zcXJ0KEp0Kkp0KzEpLUp0KSxObj1NYXRoLmxvZyhNYXRoLnNxcnQobm4qbm4rMSktbm4pO0V0PShObi12bikvbCx5dD1mdW5jdGlvbihjcil7dmFyIExyPWNyKkV0LEVpPVdhZSh2biksTGk9aWUv'@;
put 'KGEqU3QpKihFaSpmdW5jdGlvbiBXWGUoYyl7cmV0dXJuKChjPU1hdGguZXhwKDIqYykpLTEpLyhjKzEpfShsKkxyK3ZuKS1mdW5jdGlvbiBZWGUoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKS0xL2MpLzJ9KHZuKSk7cmV0dXJuW1QrTGkqWmUsVytMaSppdCxpZSpFaS9XYWUobCpMcit2bild'@;
put 'fX1yZXR1cm4geXQuZHVyYXRpb249MWUzKkV0KmwvTWF0aC5TUVJUMix5dH1yZXR1cm4gaC5yaG89ZnVuY3Rpb24oZil7dmFyIF89TWF0aC5tYXgoLjAwMSwrZiksVD1fKl87cmV0dXJuIGMoXyxULFQqVCl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiBLZyhjLGwpe2lmKGM9ZnVuY3Rp'@;
put 'b24gJFhlKGMpe2xldCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQgMD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25lclNWR0VsZW1lbnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3Jl'@;
put 'dHVybiBkLng9Yy5jbGllbnRYLGQueT1jLmNsaWVudFksWyhkPWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVu'@;
put 'dFgtaC5sZWZ0LWwuY2xpZW50TGVmdCxjLmNsaWVudFktaC50b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5bYy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBNVD1jPT4oKT0+YztmdW5jdGlvbiBxWGUoYyx7c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MH0sdHJhbnNmb3JtOnt2YWx1ZTpkLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpofX0pfWZ1bmN0aW9uIGkzKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9bCx0aGlzLnk9YX1pMy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmkzLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVy'@;
put 'biAxPT09Yz90aGlzOm5ldyBpMyh0aGlzLmsqYyx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IGkzKHRoaXMuayx0aGlzLngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'W2NbMF0qdGhpcy5rK3RoaXMueCxjWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMpe3JldHVybiBjKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54'@;
put 'KS90aGlzLmssKGNbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWlu'@;
put 'KGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIHhUPW5ldyBpMygxLDAsMCk7ZnVuY3Rpb24gRVQoYyl7Zm9yKDshYy5fX3pvb207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiB4VDtyZXR1cm4gYy5fX3pvb219ZnVu'@;
put 'Y3Rpb24gVVUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB2dyhjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBLWGUoYyl7cmV0dXJuIShjLmN0cmxLZXkmJiJ3aGVlbCIhPT1jLnR5cGV8fGMuYnV0dG9u'@;
put 'KX1mdW5jdGlvbiBYWGUoKXt2YXIgYz10aGlzO3JldHVybiBjIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZHRWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1soYz1jLnZpZXdCb3guYmFzZVZhbCkueCxjLnldLFtjLngrYy53aWR0aCxjLnkrYy5oZWlnaHRd'@;
put 'XTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gR2FlKCl7cmV0dXJuIHRoaXMuX196b29tfHx4VH1mdW5jdGlvbiBKWGUoYyl7cmV0dXJuLWMuZGVsdGFZ'@;
put 'KigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6LjAwMikqKGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiBRWGUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gZUplKGMsbCxhKXt2YXIgZD1jLmludmVydFgo'@;
put 'bFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBdKS1hWzFdWzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1bMV0sXz1jLmludmVydFkobFsxXVsxXSktYVsxXVsxXTtyZXR1cm4gYy50cmFuc2xhdGUoaD5kPyhkK2gpLzI6TWF0aC5taW4oMCxkKXx8TWF0aC5tYXgoMCxoKSxf'@;
put 'PmY/KGYrXykvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgwLF8pKX1mdW5jdGlvbiAkYWUoYyl7dmFyIGw9e30sYT1jLm5vZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGwuYXR0cmli'@;
put 'dXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52YWx1ZX12YXIgcGUsVz1jLm5vZGUoKS50cmFuc2Zvcm07aWYoVyYmMCE9Vy5iYXNlVmFsLm51bWJlck9mSXRl'@;
put 'bXMpe3ZhciBpZT1XLmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7bC50cmFuc2xhdGlvbj17eDppZS5lLHk6aWUuZn0sbC5zY2FsZT1pZS5hfWlmKCJlbGxpcHNlIj09YSYmKGwuY2VudGVyPXt4OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7'@;
put 'dmFyIHdlPShwZT1jLmF0dHIoInBvaW50cyIpLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMF19KSxFZT1wZS5tYXAoZnVuY3Rpb24oSnQpe3JldHVybiBKdC5zcGxpdCgiLCIpWzFdfSksWmU9TWF0aC5taW4uYXBwbHkobnVsbCx3ZSksaXQ9TWF0'@;
put 'aC5tYXguYXBwbHkobnVsbCx3ZSksZXQ9TWF0aC5taW4uYXBwbHkobnVsbCxFZSkseXQ9TWF0aC5tYXguYXBwbHkobnVsbCxFZSk7bC5iYm94PXt4OlplLHk6ZXQsd2lkdGg6aXQtWmUsaGVpZ2h0Onl0LWV0fSxsLmNlbnRlcj17eDooWmUraXQpLzIseTooZXQreXQpLzJ9fSJwYXRoIj09YSYm'@;
put 'KChwZT1jLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksd2U9cGUubWFwKGZ1bmN0aW9uKGZyKXtyZXR1cm4rZnIuc3BsaXQoIiwiKVswXX0pLEVlPXBlLm1hcChmdW5jdGlvbihmcil7cmV0dXJuK2ZyLnNwbGl0KCIsIilbMV19KSxaZT1NYXRoLm1pbi5hcHBseShudWxsLHdl'@;
put 'KSxpdD1NYXRoLm1heC5hcHBseShudWxsLHdlKSxldD1NYXRoLm1pbi5hcHBseShudWxsLEVlKSx5dD1NYXRoLm1heC5hcHBseShudWxsLEVlKSxsLmJib3g9e3g6WmUseTpldCx3aWR0aDppdC1aZSxoZWlnaHQ6eXQtZXR9LGwuY2VudGVyPXt4OihaZStpdCkvMix5OihldCt5dCkvMn0sbC50'@;
put 'b3RhbExlbmd0aD1jLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpKTtyZXR1cm4idGV4dCI9PWEmJihsLmNlbnRlcj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5j'@;
put 'dGlvbiBYZyhjKXt2YXIgbD0kYWUoYyk7cmV0dXJuIGwuY2hpbGRyZW49W10seFUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbigpe3ZhciBkPVhnKGtzKHRoaXMpKTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVzaChkKX0pLGx9ZnVuY3Rpb24gWlUoYyl7cmV0dXJuIiN0ZXh0'@;
put 'Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOiIjY29tbWVudCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoYy5jb21tZW50KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjLnRhZyl9ZnVuY3Rpb24gWVUoYyl7'@;
put 'dmFyIGw9WlUoYyksYT1rcyhsKSxkPWMuYXR0cmlidXRlcztmb3IodmFyIGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgsZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gcWFlKGMsbCl7dmFyIGE9a3MoYy5ub2RlKCkucGFyZW50Tm9kZSksZD1ZVShsKSxoPWEuaW5zZXJ0KGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGR9LGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpfSk7cmV0dXJuIGMucmVtb3ZlKCksaH1mdW5jdGlvbiBXVShjLGwpeyFmdW5jdGlvbiBuSmUoYyxsKXtjLmRhdHVtKGwpLGMuZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCkseFUoYy5ub2RlKCkuY2hp'@;
put 'bGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe1dVKGtzKHRoaXMpLGwuY2hpbGRyZW5baF0pfSl9ZnVuY3Rpb24gX3coYyxsPTApe3ZhciBhPWtzKHRoaXMpLGg9Yy5hdHRyaWJ1dGVzLGY9YS5ub2RlKCkuYXR0cmlidXRlcztpZihmKWZvcih2YXIgXz0wO188Zi5sZW5ndGg7XysrKXt2YXIg'@;
put 'VD1mW19dLFc9VC5uYW1lO2lmKCJ4bWxucyIhPVcuc3BsaXQoIjoiKVswXSYmVC5uYW1lc3BhY2VVUkkpe3ZhciBpZT1ULm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO1c9aWVbaWUubGVuZ3RoLTFdKyI6IitXfVcgaW4gaHx8KGhbV109bnVsbCl9Zm9yKHZhciB3ZSBvZiBPYmplY3Qua2V5cyho'@;
put 'KSlhLmF0dHIod2UsaFt3ZV0pO2MudGV4dCYmYS50ZXh0KGMudGV4dCksZnVuY3Rpb24gckplKGMsbCl7dmFyIGE9Yy5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCkuY2hpbGROb2Rlc30pLGQ9KGE9YS5kYXRhKGZ1bmN0aW9uKF8pe3JldHVybiBfLmNoaWxkcmVufSxmdW5j'@;
put 'dGlvbihfKXtyZXR1cm4gXy50YWcrIi0iK2x9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oXyl7cmV0dXJuIFpVKF8pfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1kLm1lcmdlKGEpO3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbihfKXt2YXIgVD1fLnRhZztudWxsPT1mW1RdJiYoZltU'@;
put 'XT0wKTt2YXIgVz1mW1RdKys7X3cuY2FsbCh0aGlzLF8sVyl9KX0oYSxsKX1mdW5jdGlvbiBLYWUoYyxsKXt2YXIgXyxhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxjLmxlbmd0aCk6MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3IoXz0wO188ZDsrK18paFtfXT1rVChj'@;
put 'W19dLGxbX10pO2Zvcig7XzxhOysrXylmW19dPWxbX107cmV0dXJuIGZ1bmN0aW9uKFQpe2ZvcihfPTA7XzxkOysrXylmW19dPWhbX10oVCk7cmV0dXJuIGZ9fWZ1bmN0aW9uIGlKZShjLGwpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0'@;
put 'VGltZShjKigxLWQpK2wqZCksYX19ZnVuY3Rpb24gb0plKGMsbCl7dmFyIGgsYT17fSxkPXt9O2ZvcihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17fSksKG51bGw9PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1rVChjW2hdLGxb'@;
put 'aF0pOmRbaF09bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7cmV0dXJuIGR9fWZ1bmN0aW9uIHNKZShjLGwpe2x8fChsPVtdKTt2YXIgaCxhPWM/TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYp'@;
put 'e2ZvcihoPTA7aDxhOysraClkW2hdPWNbaF0qKDEtZikrbFtoXSpmO3JldHVybiBkfX1mdW5jdGlvbiBrVChjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8fCJib29sZWFuIj09PWE/SFUobCk6KCJudW1iZXIiPT09YT9EaDoic3RyaW5nIj09PWE/KGQ9R2cobCkpPyhsPWQs'@;
put 'U1QpOnphZTpsIGluc3RhbmNlb2YgR2c/U1Q6bCBpbnN0YW5jZW9mIERhdGU/aUplOmZ1bmN0aW9uIGFKZShjKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5zdGFuY2VvZiBEYXRhVmlldyl9KGwpP3NKZTpBcnJheS5pc0FycmF5KGwpP0thZToiZnVuY3Rpb24iIT10eXBl'@;
put 'b2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgbC50b1N0cmluZ3x8aXNOYU4obCk/b0plOkRoKShjLGwpfWZ1bmN0aW9uIFhhZSgpe3ZhciBjPXRoaXMsZD1rcyh0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpKTtpZigwPT1kLnNpemUoKSlyZXR1cm4g'@;
put 'dGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9ZnVuY3Rpb24gdEplKCl7dmFyIHBlLHdlLEVlLGM9S1hlLGw9WFhlLGE9ZUplLGQ9SlhlLGg9UVhlLGY9WzAsMS8wXSxfPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLFQ9MjUwLFc9R1hlLGllPUVVKCJzdGFydCIsInpvb20iLCJlbmQi'@;
put 'KSxaZT01MDAsaXQ9MTUwLGV0PTAseXQ9MTA7ZnVuY3Rpb24gRXQoT24pe09uLnByb3BlcnR5KCJfX3pvb20iLEdhZSkub24oIndoZWVsLnpvb20iLExyLHtwYXNzaXZlOiExfSkub24oIm1vdXNlZG93bi56b29tIixFaSkub24oImRibGNsaWNrLnpvb20iLExpKS5maWx0ZXIoaCkub24oInRv'@;
put 'dWNoc3RhcnQuem9vbSIsZnIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsaWkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLGpyKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIFN0KE9uLEZyKXtyZXR1cm4oRnI9'@;
put 'TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLEZyKSkpPT09T24uaz9PbjpuZXcgaTMoRnIsT24ueCxPbi55KX1mdW5jdGlvbiBKdChPbixGcixRbil7dmFyIE1yPUZyWzBdLVFuWzBdKk9uLmssX3I9RnJbMV0tUW5bMV0qT24uaztyZXR1cm4gTXI9PT1Pbi54JiZfcj09PU9uLnk/T246bmV3'@;
put 'IGkzKE9uLmssTXIsX3IpfWZ1bmN0aW9uIG5uKE9uKXtyZXR1cm5bKCtPblswXVswXSsgK09uWzFdWzBdKS8yLCgrT25bMF1bMV0rICtPblsxXVsxXSkvMl19ZnVuY3Rpb24gdm4oT24sRnIsUW4sTXIpe09uLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe05uKHRoaXMsYXJndW1lbnRzKS5l'@;
put 'dmVudChNcikuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtObih0aGlzLGFyZ3VtZW50cykuZXZlbnQoTXIpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIF9yPXRoaXMsdnQ9YXJndW1lbnRzLE90PU5uKF9yLHZ0KS5ldmVudChN'@;
put 'ciksY249bC5hcHBseShfcix2dCksRW49bnVsbD09UW4/bm4oY24pOiJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseShfcix2dCk6UW4sUG49TWF0aC5tYXgoY25bMV1bMF0tY25bMF1bMF0sY25bMV1bMV0tY25bMF1bMV0pLEpuPV9yLl9fem9vbSxQcj0iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'RnI/RnIuYXBwbHkoX3IsdnQpOkZyLE9yPVcoSm4uaW52ZXJ0KEVuKS5jb25jYXQoUG4vSm4uayksUHIuaW52ZXJ0KEVuKS5jb25jYXQoUG4vUHIuaykpO3JldHVybiBmdW5jdGlvbigkcil7aWYoMT09PSRyKSRyPVByO2Vsc2V7dmFyIFlyPU9yKCRyKSxOcj1Qbi9ZclsyXTskcj1uZXcgaTMo'@;
put 'TnIsRW5bMF0tWXJbMF0qTnIsRW5bMV0tWXJbMV0qTnIpfU90Lnpvb20obnVsbCwkcil9fSl9ZnVuY3Rpb24gTm4oT24sRnIsUW4pe3JldHVybiFRbiYmT24uX196b29taW5nfHxuZXcgY3IoT24sRnIpfWZ1bmN0aW9uIGNyKE9uLEZyKXt0aGlzLnRoYXQ9T24sdGhpcy5hcmdzPUZyLHRoaXMu'@;
put 'YWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWwuYXBwbHkoT24sRnIpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIExyKE9uLC4uLkZyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFFuPU5uKHRoaXMsRnIpLmV2ZW50KE9uKSxNcj10aGlzLl9fem9vbSxf'@;
put 'cj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sTXIuaypNYXRoLnBvdygyLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHZ0PUtnKE9uKTtpZihRbi53aGVlbCkoUW4ubW91c2VbMF1bMF0hPT12dFswXXx8UW4ubW91c2VbMF1bMV0hPT12dFsxXSkmJihRbi5tb3VzZVsxXT1Nci5pbnZl'@;
put 'cnQoUW4ubW91c2VbMF09dnQpKSxjbGVhclRpbWVvdXQoUW4ud2hlZWwpO2Vsc2V7aWYoTXIuaz09PV9yKXJldHVybjtRbi5tb3VzZT1bdnQsTXIuaW52ZXJ0KHZ0KV0sbVQodGhpcyksUW4uc3RhcnQoKX12dyhPbiksUW4ud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbiBPdCgpe1FuLndoZWVs'@;
put 'PW51bGwsUW4uZW5kKCl9LGl0KSxRbi56b29tKCJtb3VzZSIsYShKdChTdChNcixfciksUW4ubW91c2VbMF0sUW4ubW91c2VbMV0pLFFuLmV4dGVudCxfKSl9fWZ1bmN0aW9uIEVpKE9uLC4uLkZyKXtpZighRWUmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUW49T24uY3VycmVudFRh'@;
put 'cmdldCxNcj1Obih0aGlzLEZyLCEwKS5ldmVudChPbiksX3I9a3MoT24udmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbiBFbihKbil7aWYodncoSm4pLCFNci5tb3ZlZCl7dmFyIFByPUpuLmNsaWVudFgtT3QsT3I9Sm4uY2xpZW50WS1jbjtNci5tb3ZlZD1QcipQcitPcipPcj5l'@;
put 'dH1Nci5ldmVudChKbikuem9vbSgibW91c2UiLGEoSnQoTXIudGhhdC5fX3pvb20sTXIubW91c2VbMF09S2coSm4sUW4pLE1yLm1vdXNlWzFdKSxNci5leHRlbnQsXykpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24gUG4oSm4pe19yLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVw'@;
put 'Lnpvb20iLG51bGwpLGZ1bmN0aW9uIFVYZShjLGwpe3ZhciBhPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGQ9a3MoYykub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtsJiYoZC5vbigiY2xpY2suZHJhZyIselUsalUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFn'@;
put 'IixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGE/ZC5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxlY3QsZGVsZXRlIGEuX19ub3NlbGVjdCl9KEpuLnZpZXcsTXIubW92ZWQpLHZ3KEpuKSxNci5ldmVudChKbikuZW5kKCl9'@;
put 'LCEwKSx2dD1LZyhPbixRbiksT3Q9T24uY2xpZW50WCxjbj1Pbi5jbGllbnRZOyhmdW5jdGlvbiB6WGUoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1rcyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLHpVLGpVKTsib25zZWxlY3RzdGFydCJpbiBsP2Eub24oInNlbGVjdHN0'@;
put 'YXJ0LmRyYWciLHpVLGpVKToobC5fX25vc2VsZWN0PWwuc3R5bGUuTW96VXNlclNlbGVjdCxsLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0pKE9uLnZpZXcpLFVVKE9uKSxNci5tb3VzZT1bdnQsdGhpcy5fX3pvb20uaW52ZXJ0KHZ0KV0sbVQodGhpcyksTXIuc3RhcnQoKX19ZnVuY3Rp'@;
put 'b24gTGkoT24sLi4uRnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUW49dGhpcy5fX3pvb20sTXI9S2coT24uY2hhbmdlZFRvdWNoZXM/T24uY2hhbmdlZFRvdWNoZXNbMF06T24sdGhpcyksX3I9UW4uaW52ZXJ0KE1yKSxPdD1hKEp0KFN0KFFuLFFuLmsqKE9uLnNoaWZ0S2V5'@;
put 'Py41OjIpKSxNcixfciksbC5hcHBseSh0aGlzLEZyKSxfKTt2dyhPbiksVD4wP2tzKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihUKS5jYWxsKHZuLE90LE1yLE9uKTprcyh0aGlzKS5jYWxsKEV0LnRyYW5zZm9ybSxPdCxNcixPbil9fWZ1bmN0aW9uIGZyKE9uLC4uLkZyKXtpZihjLmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHZ0LE90LGNuLEVuLFFuPU9uLnRvdWNoZXMsTXI9UW4ubGVuZ3RoLF9yPU5uKHRoaXMsRnIsT24uY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09TXIpLmV2ZW50KE9uKTtmb3IoVVUoT24pLE90PTA7T3Q8TXI7KytPdClFbj1bRW49S2coY249UW5bT3Rd'@;
put 'LHRoaXMpLHRoaXMuX196b29tLmludmVydChFbiksY24uaWRlbnRpZmllcl0sX3IudG91Y2gwPyFfci50b3VjaDEmJl9yLnRvdWNoMFsyXSE9PUVuWzJdJiYoX3IudG91Y2gxPUVuLF9yLnRhcHM9MCk6KF9yLnRvdWNoMD1Fbix2dD0hMCxfci50YXBzPTErISFwZSk7cGUmJihwZT1jbGVhclRp'@;
put 'bWVvdXQocGUpKSx2dCYmKF9yLnRhcHM8MiYmKHdlPUVuWzBdLHBlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtwZT1udWxsfSxaZSkpLG1UKHRoaXMpLF9yLnN0YXJ0KCkpfX1mdW5jdGlvbiBpaShPbiwuLi5Gcil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB2dCxPdCxjbixFbixRbj1Obih0aGlz'@;
put 'LEZyKS5ldmVudChPbiksTXI9T24uY2hhbmdlZFRvdWNoZXMsX3I9TXIubGVuZ3RoO2Zvcih2dyhPbiksdnQ9MDt2dDxfcjsrK3Z0KWNuPUtnKE90PU1yW3Z0XSx0aGlzKSxRbi50b3VjaDAmJlFuLnRvdWNoMFsyXT09PU90LmlkZW50aWZpZXI/UW4udG91Y2gwWzBdPWNuOlFuLnRvdWNoMSYm'@;
put 'UW4udG91Y2gxWzJdPT09T3QuaWRlbnRpZmllciYmKFFuLnRvdWNoMVswXT1jbik7aWYoT3Q9UW4udGhhdC5fX3pvb20sUW4udG91Y2gxKXt2YXIgUG49UW4udG91Y2gwWzBdLEpuPVFuLnRvdWNoMFsxXSxQcj1Rbi50b3VjaDFbMF0sT3I9UW4udG91Y2gxWzFdLCRyPSgkcj1QclswXS1Qblsw'@;
put 'XSkqJHIrKCRyPVByWzFdLVBuWzFdKSokcixZcj0oWXI9T3JbMF0tSm5bMF0pKllyKyhZcj1PclsxXS1KblsxXSkqWXI7T3Q9U3QoT3QsTWF0aC5zcXJ0KCRyL1lyKSksY249WyhQblswXStQclswXSkvMiwoUG5bMV0rUHJbMV0pLzJdLEVuPVsoSm5bMF0rT3JbMF0pLzIsKEpuWzFdK09yWzFd'@;
put 'KS8yXX1lbHNle2lmKCFRbi50b3VjaDApcmV0dXJuO2NuPVFuLnRvdWNoMFswXSxFbj1Rbi50b3VjaDBbMV19UW4uem9vbSgidG91Y2giLGEoSnQoT3QsY24sRW4pLFFuLmV4dGVudCxfKSl9fWZ1bmN0aW9uIGpyKE9uLC4uLkZyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHZ0LE90LFFuPU5u'@;
put 'KHRoaXMsRnIpLmV2ZW50KE9uKSxNcj1Pbi5jaGFuZ2VkVG91Y2hlcyxfcj1Nci5sZW5ndGg7Zm9yKFVVKE9uKSxFZSYmY2xlYXJUaW1lb3V0KEVlKSxFZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RWU9bnVsbH0sWmUpLHZ0PTA7dnQ8X3I7Kyt2dClPdD1Nclt2dF0sUW4udG91Y2gwJiZRbi50'@;
put 'b3VjaDBbMl09PT1PdC5pZGVudGlmaWVyP2RlbGV0ZSBRbi50b3VjaDA6UW4udG91Y2gxJiZRbi50b3VjaDFbMl09PT1PdC5pZGVudGlmaWVyJiZkZWxldGUgUW4udG91Y2gxO2lmKFFuLnRvdWNoMSYmIVFuLnRvdWNoMCYmKFFuLnRvdWNoMD1Rbi50b3VjaDEsZGVsZXRlIFFuLnRvdWNoMSks'@;
put 'UW4udG91Y2gwKVFuLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoUW4udG91Y2gwWzBdKTtlbHNlIGlmKFFuLmVuZCgpLDI9PT1Rbi50YXBzJiYoT3Q9S2coT3QsdGhpcyksTWF0aC5oeXBvdCh3ZVswXS1PdFswXSx3ZVsxXS1PdFsxXSk8eXQpKXt2YXIgY249a3ModGhpcykub24oImRi'@;
put 'bGNsaWNrLnpvb20iKTtjbiYmY24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIEV0LnRyYW5zZm9ybT1mdW5jdGlvbihPbixGcixRbixNcil7dmFyIF9yPU9uLnNlbGVjdGlvbj9Pbi5zZWxlY3Rpb24oKTpPbjtfci5wcm9wZXJ0eSgiX196b29tIixHYWUpLE9uIT09X3I/dm4oT24s'@;
put 'RnIsUW4sTXIpOl9yLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXtObih0aGlzLGFyZ3VtZW50cykuZXZlbnQoTXIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBGcj9Gci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RnIpLmVuZCgpfSl9LEV0LnNjYWxlQnk9ZnVuY3Rp'@;
put 'b24oT24sRnIsUW4sTXIpe0V0LnNjYWxlVG8oT24sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20uayooImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGcil9LFFuLE1yKX0sRXQuc2NhbGVUbz1mdW5jdGlvbihPbixGcixRbixNcil7RXQudHJhbnNm'@;
put 'b3JtKE9uLGZ1bmN0aW9uKCl7dmFyIF9yPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHZ0PXRoaXMuX196b29tLE90PW51bGw9PVFuP25uKF9yKToiZnVuY3Rpb24iPT10eXBlb2YgUW4/UW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOlFuLGNuPXZ0LmludmVydChPdCksRW49ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGcjtyZXR1cm4gYShKdChTdCh2dCxFbiksT3QsY24pLF9yLF8pfSxRbixNcil9LEV0LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKE9uLEZyLFFuLE1yKXtFdC50cmFuc2Zvcm0oT24sZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLl9fem9v'@;
put 'bS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGciwiZnVuY3Rpb24iPT10eXBlb2YgUW4/UW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOlFuKSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfKX0sbnVsbCxNcil9LEV0LnRyYW5zbGF0ZVRv'@;
put 'PWZ1bmN0aW9uKE9uLEZyLFFuLE1yLF9yKXtFdC50cmFuc2Zvcm0oT24sZnVuY3Rpb24oKXt2YXIgdnQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksT3Q9dGhpcy5fX3pvb20sY249bnVsbD09TXI/bm4odnQpOiJmdW5jdGlvbiI9PXR5cGVvZiBNcj9Nci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6'@;
put 'TXI7cmV0dXJuIGEoeFQudHJhbnNsYXRlKGNuWzBdLGNuWzFdKS5zY2FsZShPdC5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIEZyPy1Gci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUZyLCJmdW5jdGlvbiI9PXR5cGVvZiBRbj8tUW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1Rbiks'@;
put 'dnQsXyl9LE1yLF9yKX0sY3IucHJvdG90eXBlPXtldmVudDpmdW5jdGlvbihPbil7cmV0dXJuIE9uJiYodGhpcy5zb3VyY2VFdmVudD1PbiksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQo'@;
put 'InN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oT24sRnIpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09T24mJih0aGlzLm1vdXNlWzFdPUZyLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT1PbiYmKHRoaXMudG91Y2gwWzFdPUZyLmludmVydCh0'@;
put 'aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMVsxXT1Gci5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUZyLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0'@;
put 'aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihPbil7dmFyIEZyPWtzKHRoaXMudGhhdCkuZGF0dW0oKTtpZS5jYWxsKE9uLHRoaXMudGhhdCxuZXcgcVhlKE9uLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50'@;
put 'LHRhcmdldDpFdCx0eXBlOk9uLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOmllfSksRnIpfX0sRXQud2hlZWxEZWx0YT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOk1UKCtPbiksRXQpOmR9LEV0LmZp'@;
put 'bHRlcj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOk1UKCEhT24pLEV0KTpjfSxFdC50b3VjaGFibGU9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpN'@;
put 'VCghIU9uKSxFdCk6aH0sRXQuZXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246TVQoW1srT25bMF1bMF0sK09uWzBdWzFdXSxbK09uWzFdWzBdLCtPblsxXVsxXV1dKSxFdCk6bH0sRXQuc2NhbGVFeHRlbnQ9ZnVu'@;
put 'Y3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmWzBdPStPblswXSxmWzFdPStPblsxXSxFdCk6W2ZbMF0sZlsxXV19LEV0LnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF9bMF1bMF09K09uWzBdWzBdLF9bMV1bMF09K09uWzFd'@;
put 'WzBdLF9bMF1bMV09K09uWzBdWzFdLF9bMV1bMV09K09uWzFdWzFdLEV0KTpbW19bMF1bMF0sX1swXVsxXV0sW19bMV1bMF0sX1sxXVsxXV1dfSxFdC5jb25zdHJhaW49ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPU9uLEV0KTphfSxFdC5kdXJhdGlvbj1mdW5jdGlv'@;
put 'bihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9K09uLEV0KTpUfSxFdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFc9T24sRXQpOld9LEV0Lm9uPWZ1bmN0aW9uKCl7dmFyIE9uPWllLm9uLmFwcGx5KGllLGFyZ3VtZW50cyk7cmV0dXJu'@;
put 'IE9uPT09aWU/RXQ6T259LEV0LmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhldD0oT249K09uKSpPbixFdCk6TWF0aC5zcXJ0KGV0KX0sRXQudGFwRGlzdGFuY2U9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5dD0rT24s'@;
put 'RXQpOnl0fSxFdH0oKS5zY2FsZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudCkudHJhbnNsYXRlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudCkuaW50ZXJwb2xhdGUoa1QpLm9uKCJ6b29tIixmdW5jdGlvbiBsKF8pe2tzKGQubm9kZSgpLnF1ZXJ5'@;
put 'U2VsZWN0b3IoImciKSkuYXR0cigidHJhbnNmb3JtIixfLnRyYW5zZm9ybSksYy5fZGlzcGF0Y2guY2FsbCgiem9vbSIsYyl9KTt0aGlzLl96b29tQmVoYXZpb3I9aDt2YXIgZj1rcyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpO3JldHVybiBkLmNhbGwoaCksdGhpcy5fYWN0aXZlfHwk'@;
put 'VS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09RVQoZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gR1UoYyl7dmFyIGw9dGhpcy5fdHJhbnNsYXRpb24sYT10aGlzLl9zY2FsZSxkPWMuZGF0dW0oKS50cmFuc2xhdGlvbixoPWMuZGF0dW0oKS5zY2FsZSxmPUVUKHRoaXMuX3pv'@;
put 'b21TZWxlY3Rpb24ubm9kZSgpKTtyZXR1cm4gbCYmKGY9KGY9Zi5zY2FsZSgxL2EpKS50cmFuc2xhdGUoLWwueCwtbC55KSksKGY9Zi50cmFuc2xhdGUoZC54LGQueSkpLnNjYWxlKGgpfWZ1bmN0aW9uICRVKGMpe3RoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0odGhpcy5fem9vbVNlbGVj'@;
put 'dGlvbixHVS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09eFQudHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFu'@;
put 'c2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIHBKZShjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGtUKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXty'@;
put 'ZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gSmFlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQu'@;
put 'YXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBRYWUoYyl7cmV0dXJuIGMucGFyZW50JiZKYWUoYy5wYXJlbnQpfWZ1bmN0aW9uIGVsZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhp'@;
put 'cy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyxfPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPWwsVD10aGlzLl9hdHRyaWJ1dGVyLFc9dGhpczt2YXIgd2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwh'@;
put 'PWwpe3ZhciBFZT10aGlzLl9qb2JzO2lmKFcuX2FjdGl2ZSlyZXR1cm4gRWUucHVzaChudWxsKSx0aGlzO3dlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Vy5fYWN0aXZlPSExLDAhPUVlLmxlbmd0aCYmKEVlLnNoaWZ0KCksVy5y'@;
put 'ZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmd2UudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixXKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVu'@;
put 'ZCIsVyl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe1cuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLFcpLFcuX2Rpc3BhdGNoLmNhbGwoImVuZCIsVyksYyYmYy5jYWxsKFcpfSk7dmFyIFplPXRoaXMuX2RhdGEsaXQ9d2Uuc2VsZWN0QWxsKCJz'@;
put 'dmciKS5kYXRhKFtaZV0sZnVuY3Rpb24oZXQpe3JldHVybiBldC5rZXl9KTtyZXR1cm4gaXQ9aXQuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKGl0KSxmdW5jdGlvbiBwZShldCl7dmFyIHl0PWtzKHRoaXMpO2lmKCJzdmciPT1ldC50YWcpe3ZhciBFdD1XLl9vcHRpb25zO2lmKG51bGwh'@;
put 'PUV0LndpZHRofHxudWxsIT1FdC5oZWlnaHQpe3ZhciBTdD1FdC53aWR0aCxKdD1FdC5oZWlnaHQ7bnVsbD09U3Q/U3Q9NCpldC5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0IiwiIikvMzooeXQuYXR0cigid2lkdGgiLFN0KSxldC5hdHRyaWJ1dGVzLndpZHRoPVN0KSxudWxsPT1KdD9K'@;
put 'dD00KmV0LmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikvMzooeXQuYXR0cigiaGVpZ2h0IixKdCksZXQuYXR0cmlidXRlcy5oZWlnaHQ9SnQpLEV0LmZpdHx8KHl0LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKlN0LzQvRXQuc2NhbGV9ICR7MypKdC80L0V0LnNjYWxlfWApLGV0'@;
put 'LmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MypTdC80L0V0LnNjYWxlfSAkezMqSnQvNC9FdC5zY2FsZX1gKX0xIT1FdC5zY2FsZSYmKEV0LmZpdHx8bnVsbD09RXQud2lkdGgmJm51bGw9PUV0LmhlaWdodCkmJihTdD1ldC5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxKdD1l'@;
put 'dC5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSx5dC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7U3QvRXQuc2NhbGV9ICR7SnQvRXQuc2NhbGV9YCksZXQuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHtTdC9FdC5zY2FsZX0gJHtKdC9FdC5zY2FsZX1gKX1UJiZ5dC5lYWNoKFQpO3Zh'@;
put 'ciBubj1ldC50YWcsdm49ZXQuYXR0cmlidXRlcyxObj15dC5ub2RlKCkuYXR0cmlidXRlcztpZihObilmb3IodmFyIGNyPTA7Y3I8Tm4ubGVuZ3RoO2NyKyspe3ZhciBMcj1Obltjcl0sRWk9THIubmFtZTtpZigieG1sbnMiIT1FaS5zcGxpdCgiOiIpWzBdJiZMci5uYW1lc3BhY2VVUkkpe3Zh'@;
put 'ciBMaT1Mci5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtFaT1MaVtMaS5sZW5ndGgtMV0rIjoiK0VpfUVpIGluIHZufHwodm5bRWldPW51bGwpfXZhciBpaT0hMSxqcj0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZl'@;
put 'dC5hbHRlcm5hdGl2ZU9sZCYmKGpyPSEwKSwoInBvbHlnb24iPT1ubnx8ImVsbGlwc2UiPT1ubikmJmV0LmFsdGVybmF0aXZlTmV3JiYoaWk9ITApLCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT1ubiYmZXQuYWx0ZXJuYXRpdmVPbGQpe3ZhciBPbj0kYWUoeXQpO2lmKCFm'@;
put 'KXt2YXIgUW49T24uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7KE1yPWV0LmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09UW4mJihpaT0hMSxqcj0hMSl9fWlmKGpyKXt2YXIgT3Q9cWFlKHl0LGV0LmFsdGVybmF0aXZlT2xkKTtPdC5kYXRhKFtldF0s'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gZXQua2V5fSkseXQ9T3R9aWkmJihubj0icGF0aCIsdm49ZXQuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIEVuPXl0O2lmKGwmJihFbj1Fbi50cmFuc2l0aW9uKGwpLGEmJkVuLmZpbHRlcihmdW5jdGlvbihEaSl7cmV0dXJuIiMiPT1EaS50YWdbMF0/'@;
put 'bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLEVuLmZpbHRlcihmdW5jdGlvbihEaSl7cmV0dXJuIiMiPT1EaS50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rpb24oRGkpe2tzKHRoaXMpLmF0dHIoInN0eWxlIixEaSYmRGkuYXR0cmlidXRlcyYmRGkuYXR0cmlidXRlcy5z'@;
put 'dHlsZXx8bnVsbCl9KSksXyYmInBhdGgiPT1ubiYmZXQub2Zmc2V0KXt2YXIgSm49ZXQudG90YWxMZW5ndGg7eXQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsSm4rIiAiK0puKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsSm4pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2V0Lm9m'@;
put 'ZnNldC54KyIsIitldC5vZmZzZXQueSsiKSIpLHZuWyJzdHJva2UtZGFzaG9mZnNldCJdPTAsdm4udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsRW4uYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLHZuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLHZuLnRyYW5zZm9y'@;
put 'bSkub24oInN0YXJ0IixmdW5jdGlvbigpe2tzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7a3ModGhpcykuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIs'@;
put 'bnVsbCl9KX1pZihfJiYicG9seWdvbiI9PW5uJiZRYWUoZXQpJiZldC5vZmZzZXQmJiJwYXRoIj09ZXQucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIE9yPWtzKHl0Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksJHI9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5n'@;
put 'dGgoMCksWXI9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgpLE5yPU9yLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGV0LnRvdGFsTGVuZ3RoLTEpLFJpPTE4MCpNYXRoLmF0YW4yKFlyLnktTnIueSxZci54LU5yLngpL01hdGguUEksWG89JHIueC1Zci54K2V0Lm9m'@;
put 'ZnNldC54LEdvPSRyLnktWXIueStldC5vZmZzZXQueTt5dC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitYbysiLCIrR28rIikiKSxFbi5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oRGkpe3ZhciBRcz1Pci5ub2RlKCkuZ2V0UG9pbnRBdExl'@;
put 'bmd0aChldC50b3RhbExlbmd0aCpEaSksbGE9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgqRGkrMSksRnM9MTgwKk1hdGguYXRhbjIobGEueS1Rcy55LGxhLngtUXMueCkvTWF0aC5QSS1SaTtyZXR1cm4idHJhbnNsYXRlKCIrKFhvPVFzLngtWXIueCtldC5vZmZz'@;
put 'ZXQueCooMS1EaSkpKyIsIisoR289UXMueS1Zci55K2V0Lm9mZnNldC55KigxLURpKSkrIikgcm90YXRlKCIrRnMrIiAiK1lyLngrIiAiK1lyLnkrIikifX0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtrcyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigp'@;
put 'e2tzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgSnM9ZCYmbCYmInBhdGgiPT1ubiYmbnVsbCE9eXQuYXR0cigiZCIpO2Zvcih2YXIgZ2Egb2YgT2JqZWN0LmtleXModm4pKXt2YXIgdW89dm5bZ2FdO2lmKEpzJiYiZCI9PWdhKXt2YXIgTXI7KE1yPShldC5hbHRlcm5hdGl2'@;
put 'ZU9sZHx8ZXQpLnBvaW50cykmJkVuLmF0dHJUd2VlbigiZCIscEplKE1yLHVvKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09Z2EmJmV0LnRyYW5zbGF0aW9uKWlmKGwpe3ZhciBBdD1Fbi5vbigiZW5kIik7RW4ub24oInN0YXJ0IixmdW5jdGlvbigpe1cuX3pvb21CZWhhdmlvciYmRW4udHdlZW4o'@;
put 'ImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBEaT10aGlzO3JldHVybiBmdW5jdGlvbihRcyl7RGkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGthZShFVChXLl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxHVS5jYWxsKFcseXQpLnRvU3RyaW5nKCkpKFFzKSl9fSl9'@;
put 'KS5vbigiZW5kIixmdW5jdGlvbigpe0F0LmNhbGwodGhpcyksVy5fem9vbUJlaGF2aW9yJiYkVS5jYWxsKFcseXQpfSl9ZWxzZSBXLl96b29tQmVoYXZpb3ImJigkVS5jYWxsKFcseXQpLHVvPUdVLmNhbGwoVyx5dCkudG9TdHJpbmcoKSk7RW4uYXR0cihnYSx1byl9fWlpJiZFbi5vbigiZW5k'@;
put 'IixmdW5jdGlvbihEaSxRcyxsYSl7cWFlKE90PWtzKHRoaXMpLERpKS5kYXRhKFtEaV0sZnVuY3Rpb24oKXtyZXR1cm4gRGkua2V5fSl9KSxldC50ZXh0JiZFbi50ZXh0KGV0LnRleHQpLGZ1bmN0aW9uIGllKGV0KXt2YXIgeXQ9ZXQuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGV0Lm5v'@;
put 'ZGUoKS5jaGlsZE5vZGVzfSksRXQ9KHl0PXl0LmRhdGEoZnVuY3Rpb24obm4pe3JldHVybiBubi5jaGlsZHJlbn0sZnVuY3Rpb24obm4pe3JldHVybiBubi5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24obm4pe3ZhciB2bj1aVShubik7cmV0dXJuIiN0ZXh0Ij09bm4udGFnJiZhJiYo'@;
put 'dm4ubm9kZVZhbHVlPW5uLnRleHQpLHZufSk7KGF8fF8mJkphZShldC5kYXR1bSgpKSkmJkV0LmZpbHRlcihmdW5jdGlvbihubil7cmV0dXJuIiMiPT1ubi50YWdbMF0/bnVsbDp0aGlzfSkuZWFjaChmdW5jdGlvbihubil7dmFyIHZuPWtzKHRoaXMpO2Zvcih2YXIgTm4gb2YgT2JqZWN0Lmtl'@;
put 'eXMobm4uYXR0cmlidXRlcykpdm4uYXR0cihObixubi5hdHRyaWJ1dGVzW05uXSl9KS5maWx0ZXIoZnVuY3Rpb24obm4pe3JldHVybiJzdmciPT1ubi50YWd8fCJnIj09bm4udGFnP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKTt2YXIgSnQ9eXQuZXhpdCgpO1QmJkp0LmVhY2goVCks'@;
put 'bCYmKEp0PUp0LnRyYW5zaXRpb24obCksYSYmSnQuZmlsdGVyKGZ1bmN0aW9uKG5uKXtyZXR1cm4iIyI9PW5uLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCkpLEp0PUp0LnJlbW92ZSgpLCh5dD1FdC5tZXJnZSh5dCkpLmVhY2gocGUpfSh5dCl9LmNhbGwoaXQubm9kZSgp'@;
put 'LFplKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJlhhZS5jYWxsKHRoaXMpLFcuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsVyksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfUVULnByb3Rv'@;
put 'dHlwZT1pMy5wcm90b3R5cGU7dmFyIHdKZT1BcnJheUJ1ZmZlcixlYz1VaW50OEFycmF5LEFUPVVpbnQxNkFycmF5LENKZT1JbnQxNkFycmF5LFRUPUludDMyQXJyYXkscVU9ZnVuY3Rpb24oYyxsLGEpe2lmKGVjLnByb3RvdHlwZS5zbGljZSlyZXR1cm4gZWMucHJvdG90eXBlLnNsaWNlLmNh'@;
put 'bGwoYyxsLGEpOyhudWxsPT1sfHxsPDApJiYobD0wKSwobnVsbD09YXx8YT5jLmxlbmd0aCkmJihhPWMubGVuZ3RoKTt2YXIgZD1uZXcgZWMoYS1sKTtyZXR1cm4gZC5zZXQoYy5zdWJhcnJheShsLGEpKSxkfSxidz1mdW5jdGlvbihjLGwsYSxkKXtpZihlYy5wcm90b3R5cGUuZmlsbClyZXR1'@;
put 'cm4gZWMucHJvdG90eXBlLmZpbGwuY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDsrK2EpY1thXT1sO3JldHVybiBjfSxTSmU9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoZWMucHJvdG90eXBlLmNvcHlX'@;
put 'aXRoaW4pcmV0dXJuIGVjLnByb3RvdHlwZS5jb3B5V2l0aGluLmNhbGwoYyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KWNbbCsrXT1jW2ErK119LE1KZT1bImludmFsaWQgenN0ZCBkYXRhIiwid2luZG93'@;
put 'IHNpemUgdG9vIGxhcmdlICg+MjA0Nk1CKSIsImludmFsaWQgYmxvY2sgdHlwZSIsIkZTRSBhY2N1cmFjeSB0b28gaGlnaCIsIm1hdGNoIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsInVuZXhwZWN0ZWQgRU9GIl0sbWM9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPW5ldyBFcnJvcihsfHxNSmVbY10p'@;
put 'O2lmKGQuY29kZT1jLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkLG1jKSwhYSl0aHJvdyBkO3JldHVybiBkfSx0bGU9ZnVuY3Rpb24oYyxsLGEpe2Zvcih2YXIgZD0wLGg9MDtkPGE7KytkKWh8PWNbbCsrXTw8KGQ8PDMpO3JldHVybiBofSx4SmU9'@;
put 'ZnVuY3Rpb24oYyxsKXt2YXIgYSxoPWNbMF18Y1sxXTw8OHxjWzJdPDwxNjtpZigzMTI2NTY4PT1oJiYyNTM9PWNbM10pe3ZhciBmPWNbNF0sXz1mPj41JjEsVD1mPj4yJjEsVz0zJmYsaWU9Zj4+Njs4JmYmJm1jKDApO3ZhciBwZT02LV8sd2U9Mz09Vz80OlcsRWU9dGxlKGMscGUsd2UpLFpl'@;
put 'PWllPzE8PGllOl8saXQ9dGxlKGMscGUrPXdlLFplKSsoMT09aWUmJjI1NiksZXQ9aXQ7aWYoIV8pe3ZhciB5dD0xPDwxMCsoY1s1XT4+Myk7ZXQ9eXQrKHl0Pj4zKSooNyZjWzVdKX1ldD4yMTQ1Mzg2NDk2JiZtYygxKTt2YXIgRXQ9bmV3IGVjKCgxPT1sP2l0fHxldDpsPzA6ZXQpKzEyKTty'@;
put 'ZXR1cm4gRXRbMF09MSxFdFs0XT00LEV0WzhdPTgse2I6cGUrWmUseTowLGw6MCxkOkVlLHc6bCYmMSE9bD9sOkV0LnN1YmFycmF5KDEyKSxlOmV0LG86bmV3IFRUKEV0LmJ1ZmZlciwwLDMpLHU6aXQsYzpULG06TWF0aC5taW4oMTMxMDcyLGV0KX19aWYoMjU0ODE4OTM9PShoPj40fGNbM108'@;
put 'PDIwKSlyZXR1cm4gOCsoKChhPWMpWzRdfGFbNV08PDh8YVs2XTw8MTZ8YVs3XTw8MjQpPj4+MCk7bWMoMCl9LEpnPWZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0wOzE8PGw8PWM7KytsKTtyZXR1cm4gbC0xfSx5dz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NCsobDw8MyksaD01KygxNSZjW2xdKTto'@;
put 'PmEmJm1jKDMpO2Zvcih2YXIgZj0xPDxoLF89ZixUPS0xLFc9LTEsaWU9LTEscGU9Zix3ZT1uZXcgd0plKDUxMisoZjw8MikpLEVlPW5ldyBDSmUod2UsMCwyNTYpLFplPW5ldyBBVCh3ZSwwLDI1NiksaXQ9bmV3IEFUKHdlLDUxMixmKSxldD01MTIrKGY8PDEpLHl0PW5ldyBlYyh3ZSxldCxm'@;
put 'KSxFdD1uZXcgZWMod2UsZXQrZik7VDwyNTUmJl8+MDspe3ZhciBTdD1KZyhfKzEpLEp0PWQ+PjMsbm49KDE8PFN0KzEpLTEsdm49KGNbSnRdfGNbSnQrMV08PDh8Y1tKdCsyXTw8MTYpPj4oNyZkKSZubixObj0oMTw8U3QpLTEsY3I9bm4tXy0xLExyPXZuJk5uO2lmKExyPGNyPyhkKz1TdCx2'@;
put 'bj1Mcik6KGQrPVN0KzEsdm4+Tm4mJih2bi09Y3IpKSxFZVsrK1RdPS0tdm4sLTE9PXZuPyhfKz12bix5dFstLXBlXT1UKTpfLT12biwhdm4pZG97dmFyIEVpPWQ+PjM7Vz0oY1tFaV18Y1tFaSsxXTw8OCk+Pig3JmQpJjMsZCs9MixUKz1XfXdoaWxlKDM9PVcpfShUPjI1NXx8XykmJm1jKDAp'@;
put 'O2Zvcih2YXIgTGk9MCxmcj0oZj4+MSkrKGY+PjMpKzMsaWk9Zi0xLGpyPTA7anI8PVQ7Kytqcil7dmFyIE9uPUVlW2pyXTtpZihPbjwxKVplW2pyXT0tT247ZWxzZSBmb3IoaWU9MDtpZTxPbjsrK2llKXt5dFtMaV09anI7ZG97TGk9TGkrZnImaWl9d2hpbGUoTGk+PXBlKX19Zm9yKExpJiZt'@;
put 'YygwKSxpZT0wO2llPGY7KytpZSl7dmFyIEZyPVplW3l0W2llXV0rKyxRbj1FdFtpZV09aC1KZyhGcik7aXRbaWVdPShGcjw8UW4pLWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6eXQsbjpFdCx0Oml0fV19LEVKZT15dyhuZXcgZWMoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2'@;
put 'LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsxXSxrSmU9eXcobmV3IGVjKFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLEFKZT15dyhuZXcgZWMoWzMyLDEz'@;
put 'MiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sbmxlPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9bmV3IFRUKGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxLVT1uZXcgZWMobmV3IFRUKFswLDAsMCwwLDE2ODQz'@;
put 'MDA5LDUwNTI4NzcwLDEzNDY3ODAyMCwyMDIwNTAwNTcsMjY5NDIyMDkzXSkuYnVmZmVyLDAsMzYpLFRKZT1ubGUoS1UsMCksWFU9bmV3IGVjKG5ldyBUVChbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVy'@;
put 'LDAsNTMpLERKZT1ubGUoWFUsMyksd3c9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPWMubGVuZ3RoLGg9bC5sZW5ndGgsZj1jW2QtMV0sXz0oMTw8YS5iKS0xLFQ9LWEuYjtmfHxtYygwKTtmb3IodmFyIFc9MCxpZT1hLmIscGU9KGQ8PDMpLTgrSmcoZiktaWUsd2U9LTE7cGU+VCYmd2U8aDspe3Zh'@;
put 'ciBFZT1wZT4+MztsWysrd2VdPWEuc1tXPShXPDxpZXwoY1tFZV18Y1tFZSsxXTw8OHxjW0VlKzJdPDwxNik+Pig3JnBlKSkmX10scGUtPWllPWEubltXXX1wZT09VCYmd2UrMT09aHx8bWMoMCl9LExKZT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NixoPWwubGVuZ3RoKzM+PjIsZj1oPDwxLF89'@;
put 'aCtmO3d3KGMuc3ViYXJyYXkoZCxkKz1jWzBdfGNbMV08PDgpLGwuc3ViYXJyYXkoMCxoKSxhKSx3dyhjLnN1YmFycmF5KGQsZCs9Y1syXXxjWzNdPDw4KSxsLnN1YmFycmF5KGgsZiksYSksd3coYy5zdWJhcnJheShkLGQrPWNbNF18Y1s1XTw8OCksbC5zdWJhcnJheShmLF8pLGEpLHd3KGMu'@;
put 'c3ViYXJyYXkoZCksbC5zdWJhcnJheShfKSxhKX0sSUplPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZCxoPWwuYixmPWNbaF0sXz1mPj4xJjM7bC5sPTEmZjt2YXIgVD1mPj4zfGNbaCsxXTw8NXxjW2grMl08PDEzLFc9KGgrPTMpK1Q7aWYoMT09XylyZXR1cm4gaD49Yy5sZW5ndGg/dm9pZCAwOihs'@;
put 'LmI9aCsxLGE/KGJ3KGEsY1toXSxsLnksbC55Kz1UKSxhKTpidyhuZXcgZWMoVCksY1toXSkpO2lmKCEoVz5jLmxlbmd0aCkpe2lmKDA9PV8pcmV0dXJuIGwuYj1XLGE/KGEuc2V0KGMuc3ViYXJyYXkoaCxXKSxsLnkpLGwueSs9VCxhKTpxVShjLGgsVyk7aWYoMj09Xyl7dmFyIGllPWNbaF0s'@;
put 'cGU9MyZpZSx3ZT1pZT4+MiYzLEVlPWllPj40LFplPTAsaXQ9MDtwZTwyPzEmd2U/RWV8PWNbKytoXTw8NHwoMiZ3ZSYmY1srK2hdPDwxMik6RWU9aWU+PjM6KGl0PXdlLHdlPDI/KEVlfD0oNjMmY1srK2hdKTw8NCxaZT1jW2hdPj42fGNbKytoXTw8Mik6Mj09d2U/KEVlfD1jWysraF08PDR8'@;
put 'KDMmY1srK2hdKTw8MTIsWmU9Y1toXT4+MnxjWysraF08PDYpOihFZXw9Y1srK2hdPDw0fCg2MyZjWysraF0pPDwxMixaZT1jW2hdPj42fGNbKytoXTw8MnxjWysraF08PDEwKSksKytoO3ZhciBldD1hP2Euc3ViYXJyYXkobC55LGwueStsLm0pOm5ldyBlYyhsLm0pLHl0PWV0Lmxlbmd0aC1F'@;
put 'ZTtpZigwPT1wZSlldC5zZXQoYy5zdWJhcnJheShoLGgrPUVlKSx5dCk7ZWxzZSBpZigxPT1wZSlidyhldCxjW2grK10seXQpO2Vsc2V7dmFyIEV0PWwuaDtpZigyPT1wZSl7dmFyIFN0PWZ1bmN0aW9uKGdhLHVvKXt2YXIgQXQ9MCxEaT0tMSxRcz1uZXcgZWMoMjkyKSxsYT1nYVt1b10sRnM9'@;
put 'UXMuc3ViYXJyYXkoMCwyNTYpLHRjPVFzLnN1YmFycmF5KDI1NiwyNjgpLENhPW5ldyBBVChRcy5idWZmZXIsMjY4KTtpZihsYTwxMjgpe3ZhciBSaD15dyhnYSx1bysxLDYpLExsPVJoWzFdLHgyPVJoWzBdPDwzLHU0PWdhW3VvKz1sYV07dTR8fG1jKDApO2Zvcih2YXIgT2g9MCxDZD0wLCRj'@;
put 'PUxsLmIsU2Q9JGMsSnU9KCsrdW88PDMpLTgrSmcodTQpOyEoKEp1LT0kYyk8eDIpOyl7dmFyIE0xPUp1Pj4zO2lmKEZzWysrRGldPUxsLnNbT2grPShnYVtNMV18Z2FbTTErMV08PDgpPj4oNyZKdSkmKDE8PCRjKS0xXSwoSnUtPVNkKTx4MilicmVhaztDZCs9KGdhW00xPUp1Pj4zXXxnYVtN'@;
put 'MSsxXTw8OCk+Pig3Jkp1KSYoMTw8U2QpLTEsRnNbKytEaV09TGwuc1tDZF0sJGM9TGwubltPaF0sT2g9TGwudFtPaF0sU2Q9TGwubltDZF0sQ2Q9TGwudFtDZF19KytEaT4yNTUmJm1jKDApfWVsc2V7Zm9yKERpPWxhLTEyNztBdDxEaTtBdCs9Mil7dmFyIE11PWdhWysrdW9dO0ZzW0F0XT1N'@;
put 'dT4+NCxGc1tBdCsxXT0xNSZNdX0rK3VvfXZhciBhdT0wO2ZvcihBdD0wO0F0PERpOysrQXQpKGQ0PUZzW0F0XSk+MTEmJm1jKDApLGF1Kz1kNCYmMTw8ZDQtMTt2YXIgeDE9SmcoYXUpKzEsRTI9MTw8eDEsJDc9RTItYXU7Zm9yKCQ3JiQ3LTEmJm1jKDApLEZzW0RpKytdPUpnKCQ3KSsxLEF0'@;
put 'PTA7QXQ8RGk7KytBdCl7dmFyIGQ0PUZzW0F0XTsrK3RjW0ZzW0F0XT1kNCYmeDErMS1kNF19dmFyIFN3PW5ldyBlYyhFMjw8MSksZW09U3cuc3ViYXJyYXkoMCxFMiksTXc9U3cuc3ViYXJyYXkoRTIpO2ZvcihDYVt4MV09MCxBdD14MTtBdD4wOy0tQXQpe3ZhciB4dz1DYVtBdF07YncoTXcs'@;
put 'QXQseHcsQ2FbQXQtMV09eHcrdGNbQXRdKigxPDx4MS1BdCkpfWZvcihDYVswXSE9RTImJm1jKDApLEF0PTA7QXQ8RGk7KytBdCl7dmFyIHRtPUZzW0F0XTtpZih0bSl7dmFyIEV3PUNhW3RtXTtidyhlbSxBdCxFdyxDYVt0bV09RXcrKDE8PHgxLXRtKSl9fXJldHVyblt1byx7bjpNdyxiOngx'@;
put 'LHM6ZW19XX0oYyxoKTtaZSs9aC0oaD1TdFswXSksbC5oPUV0PVN0WzFdfWVsc2UgRXR8fG1jKDApOyhpdD9MSmU6d3cpKGMuc3ViYXJyYXkoaCxoKz1aZSksZXQuc3ViYXJyYXkoeXQpLEV0KX12YXIgSnQ9Y1toKytdO2lmKEp0KXsyNTU9PUp0P0p0PTMyNTEyKyhjW2grK118Y1toKytdPDw4'@;
put 'KTpKdD4xMjcmJihKdD1KdC0xMjg8PDh8Y1toKytdKTt2YXIgbm49Y1toKytdOzMmbm4mJm1jKDApO2Zvcih2YXIgdm49W2tKZSxBSmUsRUplXSxObj0yO05uPi0xOy0tTm4pe3ZhciBjcj1ubj4+MisoTm48PDEpJjM7aWYoMT09Y3Ipe3ZhciBMcj1uZXcgZWMoWzAsMCxjW2grK11dKTt2bltO'@;
put 'bl09e3M6THIuc3ViYXJyYXkoMiwzKSxuOkxyLnN1YmFycmF5KDAsMSksdDpuZXcgQVQoTHIuYnVmZmVyLDAsMSksYjowfX1lbHNlIDI9PWNyPyhoPShkPXl3KGMsaCw5LSgxJk5uKSkpWzBdLHZuW05uXT1kWzFdKTozPT1jciYmKGwudHx8bWMoMCksdm5bTm5dPWwudFtObl0pfXZhciBFaT1s'@;
put 'LnQ9dm4sTGk9RWlbMF0sZnI9RWlbMV0saWk9RWlbMl0sanI9Y1tXLTFdO2pyfHxtYygwKTt2YXIgT249KFc8PDMpLTgrSmcoanIpLWlpLmIsRnI9T24+PjMsUW49MCxNcj0oY1tGcl18Y1tGcisxXTw8OCk+Pig3Jk9uKSYoMTw8aWkuYiktMSxfcj0oY1tGcj0oT24tPWZyLmIpPj4zXXxjW0Zy'@;
put 'KzFdPDw4KT4+KDcmT24pJigxPDxmci5iKS0xLHZ0PShjW0ZyPShPbi09TGkuYik+PjNdfGNbRnIrMV08PDgpPj4oNyZPbikmKDE8PExpLmIpLTE7Zm9yKCsrSnQ7LS1KdDspe3ZhciBPdD1paS5zW01yXSxjbj1paS5uW01yXSxFbj1MaS5zW3Z0XSxQbj1MaS5uW3Z0XSxKbj1mci5zW19yXSxQ'@;
put 'cj1mci5uW19yXSxPcj0xPDxKbiwkcj1PcisoKGNbRnI9KE9uLT1Kbik+PjNdfGNbRnIrMV08PDh8Y1tGcisyXTw8MTZ8Y1tGciszXTw8MjQpPj4+KDcmT24pJk9yLTEpO0ZyPShPbi09WFVbRW5dKT4+Mzt2YXIgWXI9REplW0VuXSsoKGNbRnJdfGNbRnIrMV08PDh8Y1tGcisyXTw8MTYpPj4o'@;
put 'NyZPbikmKDE8PFhVW0VuXSktMSk7RnI9KE9uLT1LVVtPdF0pPj4zO3ZhciBOcj1USmVbT3RdKygoY1tGcl18Y1tGcisxXTw8OHxjW0ZyKzJdPDwxNik+Pig3Jk9uKSYoMTw8S1VbT3RdKS0xKTtpZihGcj0oT24tPWNuKT4+MyxNcj1paS50W01yXSsoKGNbRnJdfGNbRnIrMV08PDgpPj4oNyZP'@;
put 'bikmKDE8PGNuKS0xKSxGcj0oT24tPVBuKT4+Myx2dD1MaS50W3Z0XSsoKGNbRnJdfGNbRnIrMV08PDgpPj4oNyZPbikmKDE8PFBuKS0xKSxGcj0oT24tPVByKT4+Myxfcj1mci50W19yXSsoKGNbRnJdfGNbRnIrMV08PDgpPj4oNyZPbikmKDE8PFByKS0xKSwkcj4zKWwub1syXT1sLm9bMV0s'@;
put 'bC5vWzFdPWwub1swXSxsLm9bMF09JHItPTM7ZWxzZXt2YXIgUmk9JHItKDAhPU5yKTtSaT8oJHI9Mz09Umk/bC5vWzBdLTE6bC5vW1JpXSxSaT4xJiYobC5vWzJdPWwub1sxXSksbC5vWzFdPWwub1swXSxsLm9bMF09JHIpOiRyPWwub1swXX1mb3IoTm49MDtObjxOcjsrK05uKWV0W1FuK05u'@;
put 'XT1ldFt5dCtObl07eXQrPU5yO3ZhciBYbz0oUW4rPU5yKS0kcjtpZihYbzwwKXt2YXIgR289LVhvLEpzPWwuZStYbztmb3IoR28+WXImJihHbz1ZciksTm49MDtObjxHbzsrK05uKWV0W1FuK05uXT1sLndbSnMrTm5dO1FuKz1HbyxZci09R28sWG89MH1mb3IoTm49MDtObjxZcjsrK05uKWV0'@;
put 'W1FuK05uXT1ldFtYbytObl07UW4rPVlyfWlmKFFuIT15dClmb3IoO3l0PGV0Lmxlbmd0aDspZXRbUW4rK109ZXRbeXQrK107ZWxzZSBRbj1ldC5sZW5ndGg7YT9sLnkrPVFuOmV0PXFVKGV0LDAsUW4pfWVsc2UgaWYoYSl7aWYobC55Kz1FZSx5dClmb3IoTm49MDtObjxFZTsrK05uKWV0W05u'@;
put 'XT1ldFt5dCtObl19ZWxzZSB5dCYmKGV0PXFVKGV0LHl0KSk7cmV0dXJuIGwuYj1XLGV0fW1jKDIpfX07dmFyIFBKZT0odHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmZG9jdW1lbnQsZnVuY3Rpb24oYyl7dmFyIGwsYSxkPXZvaWQgMCE9PShjPWN8fHt9KT9j'@;
put 'Ont9O2QucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oc3QsZ3Qpe2w9c3QsYT1ndH0pO3ZhciBoLGY9T2JqZWN0LmFzc2lnbih7fSxkKSxfPSIuL3RoaXMucHJvZ3JhbSIsVD0oc3QsZ3QpPT57dGhyb3cgZ3R9LFc9ZC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxpZT1kLnBy'@;
put 'aW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGQsZiksZj1udWxsLGQudGhpc1Byb2dyYW0mJihfPWQudGhpc1Byb2dyYW0pLGQucXVpdCYmKFQ9ZC5xdWl0KSxkLndhc21CaW5hcnkmJihoPWQud2FzbUJpbmFyeSk7dmFyIHBlLHdlPWQubm9FeGl0UnVu'@;
put 'dGltZXx8ITA7Im9iamVjdCIhPXR5cGVvZiBXZWJBc3NlbWJseSYmRW4oIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgRWU9ITE7ZnVuY3Rpb24gWmUoc3QsZ3Qpe3N0fHxFbihndCl9dmFyIGl0LGV0LHl0LEV0LFN0LEp0LG5uLHZuPXR5cGVvZiBUZXh0RGVjb2Rlcjwi'@;
put 'dSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIE5uKHN0LGd0LFJ0KXtmb3IodmFyIHRuPWd0K1J0LHduPWd0O3N0W3duXSYmISh3bj49dG4pOykrK3duO2lmKHduLWd0PjE2JiZzdC5idWZmZXImJnZuKXJldHVybiB2bi5kZWNvZGUoc3Quc3ViYXJyYXkoZ3Qsd24p'@;
put 'KTtmb3IodmFyIHNyPSIiO2d0PHduOyl7dmFyIGxyPXN0W2d0KytdO2lmKDEyOCZscil7dmFyIFJyPTYzJnN0W2d0KytdO2lmKDE5MiE9KDIyNCZscikpe3ZhciBnbz02MyZzdFtndCsrXTtpZigobHI9MjI0PT0oMjQwJmxyKT8oMTUmbHIpPDwxMnxScjw8NnxnbzooNyZscik8PDE4fFJyPDwx'@;
put 'Mnxnbzw8Nnw2MyZzdFtndCsrXSk8NjU1MzYpc3IrPVN0cmluZy5mcm9tQ2hhckNvZGUobHIpO2Vsc2V7dmFyIE1vPWxyLTY1NTM2O3NyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fE1vPj4xMCw1NjMyMHwxMDIzJk1vKX19ZWxzZSBzcis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmbHIp'@;
put 'PDw2fFJyKX1lbHNlIHNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxyKX1yZXR1cm4gc3J9ZnVuY3Rpb24gY3Ioc3QsZ3Qpe3JldHVybiBzdD9Obih5dCxzdCxndCk6IiJ9ZnVuY3Rpb24gTHIoc3QsZ3QsUnQsdG4pe2lmKCEodG4+MCkpcmV0dXJuIDA7Zm9yKHZhciB3bj1SdCxzcj1SdCt0bi0x'@;
put 'LGxyPTA7bHI8c3QubGVuZ3RoOysrbHIpe3ZhciBScj1zdC5jaGFyQ29kZUF0KGxyKTtpZihScj49NTUyOTYmJlJyPD01NzM0MyYmKFJyPTY1NTM2KygoMTAyMyZScik8PDEwKXwxMDIzJnN0LmNoYXJDb2RlQXQoKytscikpLFJyPD0xMjcpe2lmKFJ0Pj1zcilicmVhaztndFtSdCsrXT1Scn1l'@;
put 'bHNlIGlmKFJyPD0yMDQ3KXtpZihSdCsxPj1zcilicmVhaztndFtSdCsrXT0xOTJ8UnI+PjYsZ3RbUnQrK109MTI4fDYzJlJyfWVsc2UgaWYoUnI8PTY1NTM1KXtpZihSdCsyPj1zcilicmVhaztndFtSdCsrXT0yMjR8UnI+PjEyLGd0W1J0KytdPTEyOHxScj4+NiY2MyxndFtSdCsrXT0xMjh8'@;
put 'NjMmUnJ9ZWxzZXtpZihSdCszPj1zcilicmVhaztndFtSdCsrXT0yNDB8UnI+PjE4LGd0W1J0KytdPTEyOHxScj4+MTImNjMsZ3RbUnQrK109MTI4fFJyPj42JjYzLGd0W1J0KytdPTEyOHw2MyZScn19cmV0dXJuIGd0W1J0XT0wLFJ0LXdufWZ1bmN0aW9uIEVpKHN0KXtmb3IodmFyIGd0PTAs'@;
put 'UnQ9MDtSdDxzdC5sZW5ndGg7KytSdCl7dmFyIHRuPXN0LmNoYXJDb2RlQXQoUnQpO3RuPD0xMjc/Z3QrKzp0bjw9MjA0Nz9ndCs9Mjp0bj49NTUyOTYmJnRuPD01NzM0Mz8oZ3QrPTQsKytSdCk6Z3QrPTN9cmV0dXJuIGd0fWZ1bmN0aW9uIExpKHN0KXtpdD1zdCxkLkhFQVA4PWV0PW5ldyBJ'@;
put 'bnQ4QXJyYXkoc3QpLGQuSEVBUDE2PUV0PW5ldyBJbnQxNkFycmF5KHN0KSxkLkhFQVAzMj1TdD1uZXcgSW50MzJBcnJheShzdCksZC5IRUFQVTg9eXQ9bmV3IFVpbnQ4QXJyYXkoc3QpLGQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoc3QpLGQuSEVBUFUzMj1KdD1uZXcgVWludDMyQXJyYXko'@;
put 'c3QpLGQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KHN0KSxkLkhFQVBGNjQ9bm49bmV3IEZsb2F0NjRBcnJheShzdCl9dmFyIGZyLGlpLGpyLE9uLEZyPVtdLFFuPVtdLE1yPVtdLF9yPTAsdnQ9bnVsbDtmdW5jdGlvbiBPdChzdCl7X3IrKyxkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJmQu'@;
put 'bW9uaXRvclJ1bkRlcGVuZGVuY2llcyhfcil9ZnVuY3Rpb24gY24oc3Qpe2lmKF9yLS0sZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoX3IpLDA9PV9yJiZ2dCl7dmFyIGd0PXZ0O3Z0PW51bGwsZ3QoKX19ZnVuY3Rpb24gRW4oc3Qpe2Qub25BYm9y'@;
put 'dCYmZC5vbkFib3J0KHN0KSxpZShzdD0iQWJvcnRlZCgiK3N0KyIpIiksRWU9ITAsc3QrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgZ3Q9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihzdCk7dGhyb3cgYShndCksZ3R9ZnVuY3Rpb24gUG4oc3Qp'@;
put 'e3JldHVybiBzdC5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIil9UG4oZnI9ImdyYXBodml6bGliLndhc20iKXx8KGlpPWZyLGZyPWQubG9jYXRlRmlsZT9kLmxvY2F0ZUZpbGUoaWksIiIpOiIiK2lpKTt2YXIgT3I9ezE3NTY2NDooc3QsZ3QpPT57'@;
put 'dmFyIFJ0PWNyKHN0KSx0bj1jcihndCk7QXQuY3JlYXRlUGF0aCgiLyIsUmkuZGlybmFtZShSdCkpLEF0LndyaXRlRmlsZShSaS5qb2luKCIvIixSdCksdG4pfX07ZnVuY3Rpb24gJHIoc3Qpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQg'@;
put 'd2l0aCBleGl0KCIrc3QrIikiLHRoaXMuc3RhdHVzPXN0fWZ1bmN0aW9uIFlyKHN0KXtmb3IoO3N0Lmxlbmd0aD4wOylzdC5zaGlmdCgpKGQpfWZ1bmN0aW9uIE5yKHN0KXt0aGlzLmV4Y1B0cj1zdCx0aGlzLnB0cj1zdC0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKGd0KXtKdFt0aGlzLnB0'@;
put 'cis0Pj4yXT1ndH0sdGhpcy5nZXRfdHlwZT1mdW5jdGlvbigpe3JldHVybiBKdFt0aGlzLnB0cis0Pj4yXX0sdGhpcy5zZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbihndCl7SnRbdGhpcy5wdHIrOD4+Ml09Z3R9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gSnRbdGhpcy5w'@;
put 'dHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9uKGd0KXtTdFt0aGlzLnB0cj4+Ml09Z3R9LHRoaXMuc2V0X2NhdWdodD1mdW5jdGlvbihndCl7ZXRbdGhpcy5wdHIrMTI+PjBdPWd0PWd0PzE6MH0sdGhpcy5nZXRfY2F1Z2h0PWZ1bmN0aW9uKCl7cmV0dXJuIDAhPWV0W3RoaXMu'@;
put 'cHRyKzEyPj4wXX0sdGhpcy5zZXRfcmV0aHJvd249ZnVuY3Rpb24oZ3Qpe2V0W3RoaXMucHRyKzEzPj4wXT1ndD1ndD8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPWV0W3RoaXMucHRyKzEzPj4wXX0sdGhpcy5pbml0PWZ1bmN0aW9uKGd0LFJ0KXt0aGlzLnNl'@;
put 'dF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShndCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihSdCksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe1N0W3RoaXMucHRyPj4yXT1T'@;
put 'dFt0aGlzLnB0cj4+Ml0rMX0sdGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBndD1TdFt0aGlzLnB0cj4+Ml07cmV0dXJuIFN0W3RoaXMucHRyPj4yXT1ndC0xLDE9PT1ndH0sdGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKGd0KXtKdFt0aGlzLnB0cisxNj4+Ml09Z3R9LHRo'@;
put 'aXMuZ2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbigpe3JldHVybiBKdFt0aGlzLnB0cisxNj4+Ml19LHRoaXMuZ2V0X2V4Y2VwdGlvbl9wdHI9ZnVuY3Rpb24oKXtpZih0bSh0aGlzLmdldF90eXBlKCkpKXJldHVybiBKdFt0aGlzLmV4Y1B0cj4+Ml07dmFyIGd0PXRoaXMuZ2V0X2FkanVzdGVk'@;
put 'X3B0cigpO3JldHVybiAwIT09Z3Q/Z3Q6dGhpcy5leGNQdHJ9fXZhciBSaT17aXNBYnM6c3Q9PiIvIj09PXN0LmNoYXJBdCgwKSxzcGxpdFBhdGg6c3Q9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKHN0KS5zbGlj'@;
put 'ZSgxKSxub3JtYWxpemVBcnJheTooc3QsZ3QpPT57Zm9yKHZhciBSdD0wLHRuPXN0Lmxlbmd0aC0xO3RuPj0wO3RuLS0pe3ZhciB3bj1zdFt0bl07Ii4iPT09d24/c3Quc3BsaWNlKHRuLDEpOiIuLiI9PT13bj8oc3Quc3BsaWNlKHRuLDEpLFJ0KyspOlJ0JiYoc3Quc3BsaWNlKHRuLDEpLFJ0'@;
put 'LS0pfWlmKGd0KWZvcig7UnQ7UnQtLSlzdC51bnNoaWZ0KCIuLiIpO3JldHVybiBzdH0sbm9ybWFsaXplOnN0PT57dmFyIGd0PVJpLmlzQWJzKHN0KSxSdD0iLyI9PT1zdC5zdWJzdHIoLTEpO3JldHVybihzdD1SaS5ub3JtYWxpemVBcnJheShzdC5zcGxpdCgiLyIpLmZpbHRlcih0bj0+ISF0'@;
put 'biksIWd0KS5qb2luKCIvIikpfHxndHx8KHN0PSIuIiksc3QmJlJ0JiYoc3QrPSIvIiksKGd0PyIvIjoiIikrc3R9LGRpcm5hbWU6c3Q9Pnt2YXIgZ3Q9Umkuc3BsaXRQYXRoKHN0KSxSdD1ndFswXSx0bj1ndFsxXTtyZXR1cm4gUnR8fHRuPyh0biYmKHRuPXRuLnN1YnN0cigwLHRuLmxlbmd0'@;
put 'aC0xKSksUnQrdG4pOiIuIn0sYmFzZW5hbWU6c3Q9PntpZigiLyI9PT1zdClyZXR1cm4iLyI7dmFyIGd0PShzdD0oc3Q9Umkubm9ybWFsaXplKHN0KSkucmVwbGFjZSgvXC8kLywiIikpLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1ndD9zdDpzdC5zdWJzdHIoZ3QrMSl9LGpvaW46ZnVu'@;
put 'Y3Rpb24oKXt2YXIgc3Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gUmkubm9ybWFsaXplKHN0LmpvaW4oIi8iKSl9LGpvaW4yOihzdCxndCk9PlJpLm5vcm1hbGl6ZShzdCsiLyIrZ3QpfSxYbz17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgc3Q9IiIs'@;
put 'Z3Q9ITEsUnQ9YXJndW1lbnRzLmxlbmd0aC0xO1J0Pj0tMSYmIWd0O1J0LS0pe3ZhciB0bj1SdD49MD9hcmd1bWVudHNbUnRdOkF0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2YgdG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmlu'@;
put 'Z3MiKTtpZighdG4pcmV0dXJuIiI7c3Q9dG4rIi8iK3N0LGd0PVJpLmlzQWJzKHRuKX1yZXR1cm4oZ3Q/Ii8iOiIiKSsoc3Q9Umkubm9ybWFsaXplQXJyYXkoc3Quc3BsaXQoIi8iKS5maWx0ZXIod249PiEhd24pLCFndCkuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooc3QsZ3QpPT57ZnVu'@;
put 'Y3Rpb24gUnQoTW8pe2Zvcih2YXIgZm89MDtmbzxNby5sZW5ndGgmJiIiPT09TW9bZm9dO2ZvKyspO2Zvcih2YXIgSm89TW8ubGVuZ3RoLTE7Sm8+PTAmJiIiPT09TW9bSm9dO0pvLS0pO3JldHVybiBmbz5Kbz9bXTpNby5zbGljZShmbyxKby1mbysxKX1zdD1Yby5yZXNvbHZlKHN0KS5zdWJz'@;
put 'dHIoMSksZ3Q9WG8ucmVzb2x2ZShndCkuc3Vic3RyKDEpO2Zvcih2YXIgdG49UnQoc3Quc3BsaXQoIi8iKSksd249UnQoZ3Quc3BsaXQoIi8iKSksc3I9TWF0aC5taW4odG4ubGVuZ3RoLHduLmxlbmd0aCksbHI9c3IsUnI9MDtScjxzcjtScisrKWlmKHRuW1JyXSE9PXduW1JyXSl7bHI9UnI7'@;
put 'YnJlYWt9dmFyIGdvPVtdO2ZvcihScj1scjtScjx0bi5sZW5ndGg7UnIrKylnby5wdXNoKCIuLiIpO3JldHVybihnbz1nby5jb25jYXQod24uc2xpY2UobHIpKSkuam9pbigiLyIpfX07ZnVuY3Rpb24gR28oc3QsZ3QsUnQpe3ZhciB0bj1SdD4wP1J0OkVpKHN0KSsxLHduPW5ldyBBcnJheSh0'@;
put 'biksc3I9THIoc3Qsd24sMCx3bi5sZW5ndGgpO3JldHVybiBndCYmKHduLmxlbmd0aD1zciksd259dmFyIEpzPXt0dHlzOltdLGluaXQ6ZnVuY3Rpb24oKXt9LHNodXRkb3duOmZ1bmN0aW9uKCl7fSxyZWdpc3RlcjpmdW5jdGlvbihzdCxndCl7SnMudHR5c1tzdF09e2lucHV0OltdLG91dHB1'@;
put 'dDpbXSxvcHM6Z3R9LEF0LnJlZ2lzdGVyRGV2aWNlKHN0LEpzLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9SnMudHR5c1tzdC5ub2RlLnJkZXZdO2lmKCFndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7c3QudHR5PWd0LHN0LnNlZWthYmxl'@;
put 'PSExfSxjbG9zZTpmdW5jdGlvbihzdCl7c3QudHR5Lm9wcy5mc3luYyhzdC50dHkpfSxmc3luYzpmdW5jdGlvbihzdCl7c3QudHR5Lm9wcy5mc3luYyhzdC50dHkpfSxyZWFkOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighc3QudHR5fHwhc3QudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBu'@;
put 'ZXcgQXQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBzcj0wLGxyPTA7bHI8dG47bHIrKyl7dmFyIFJyO3RyeXtScj1zdC50dHkub3BzLmdldF9jaGFyKHN0LnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PVJyJiYwPT09c3IpdGhyb3cgbmV3IEF0LkVy'@;
put 'cm5vRXJyb3IoNik7aWYobnVsbD09UnIpYnJlYWs7c3IrKyxndFtSdCtscl09UnJ9cmV0dXJuIHNyJiYoc3Qubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksc3J9LHdyaXRlOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighc3QudHR5fHwhc3QudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBu'@;
put 'ZXcgQXQuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgc3I9MDtzcjx0bjtzcisrKXN0LnR0eS5vcHMucHV0X2NoYXIoc3QudHR5LGd0W1J0K3NyXSl9Y2F0Y2h7dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjkpfXJldHVybiB0biYmKHN0Lm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHNy'@;
put 'fX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjpmdW5jdGlvbihzdCl7aWYoIXN0LmlucHV0Lmxlbmd0aCl7dmFyIGd0PW51bGw7aWYodHlwZW9mIHdpbmRvdzwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0oZ3Q9d2luZG93LnByb21wdCgiSW5wdXQ6ICIp'@;
put 'KSYmKGd0Kz0iXG4iKToiZnVuY3Rpb24iPT10eXBlb2YgcmVhZGxpbmUmJm51bGwhPT0oZ3Q9cmVhZGxpbmUoKSkmJihndCs9IlxuIiksIWd0KXJldHVybiBudWxsO3N0LmlucHV0PUdvKGd0LCEwKX1yZXR1cm4gc3QuaW5wdXQuc2hpZnQoKX0scHV0X2NoYXI6ZnVuY3Rpb24oc3QsZ3Qpe251'@;
put 'bGw9PT1ndHx8MTA9PT1ndD8oVyhObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSk6MCE9Z3QmJnN0Lm91dHB1dC5wdXNoKGd0KX0sZnN5bmM6ZnVuY3Rpb24oc3Qpe3N0Lm91dHB1dCYmc3Qub3V0cHV0Lmxlbmd0aD4wJiYoVyhObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSl9fSxk'@;
put 'ZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcjpmdW5jdGlvbihzdCxndCl7bnVsbD09PWd0fHwxMD09PWd0PyhpZShObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSk6MCE9Z3QmJnN0Lm91dHB1dC5wdXNoKGd0KX0sZnN5bmM6ZnVuY3Rpb24oc3Qpe3N0Lm91dHB1dCYmc3Qub3V0cHV0Lmxl'@;
put 'bmd0aD4wJiYoaWUoTm4oc3Qub3V0cHV0LDApKSxzdC5vdXRwdXQ9W10pfX19O2Z1bmN0aW9uIGdhKHN0KXtzdD02NTUzNipNYXRoLmNlaWwoc3QvNjU1MzYpO3ZhciBSdCxndD14dyg2NTUzNixzdCk7cmV0dXJuIGd0Pyh5dC5maWxsKDAsUnQ9Z3QsUnQrc3QpLFJ0KTowfXZhciB1bz17b3Bz'@;
put 'X3RhYmxlOm51bGwsbW91bnQ6ZnVuY3Rpb24oc3Qpe3JldHVybiB1by5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApfSxjcmVhdGVOb2RlOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXtpZihBdC5pc0Jsa2RldihSdCl8fEF0LmlzRklGTyhSdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMp'@;
put 'O3VvLm9wc190YWJsZXx8KHVvLm9wc190YWJsZT17ZGlyOntub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDp1by5ub2RlX29wcy5sb29rdXAsbWtub2Q6dW8ubm9kZV9vcHMubWtub2QscmVuYW1lOnVvLm5vZGVfb3Bz'@;
put 'LnJlbmFtZSx1bmxpbms6dW8ubm9kZV9vcHMudW5saW5rLHJtZGlyOnVvLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6dW8ubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOnVvLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOnVvLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7'@;
put 'Z2V0YXR0cjp1by5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dW8ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6dW8uc3RyZWFtX29wcy5sbHNlZWsscmVhZDp1by5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6dW8uc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTp1by5zdHJlYW1fb3Bz'@;
put 'LmFsbG9jYXRlLG1tYXA6dW8uc3RyZWFtX29wcy5tbWFwLG1zeW5jOnVvLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOnVvLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJl'@;
put 'YW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjp1by5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dW8ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOkF0LmNocmRldl9zdHJlYW1fb3BzfX0pO3ZhciB3bj1BdC5jcmVhdGVOb2RlKHN0LGd0LFJ0LHRuKTtyZXR1cm4gQXQuaXNEaXIod24ubW9k'@;
put 'ZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5kaXIubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5kaXIuc3RyZWFtLHduLmNvbnRlbnRzPXt9KTpBdC5pc0ZpbGUod24ubW9kZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5maWxlLm5vZGUsd24uc3RyZWFtX29wcz11by5v'@;
put 'cHNfdGFibGUuZmlsZS5zdHJlYW0sd24udXNlZEJ5dGVzPTAsd24uY29udGVudHM9bnVsbCk6QXQuaXNMaW5rKHduLm1vZGUpPyh3bi5ub2RlX29wcz11by5vcHNfdGFibGUubGluay5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpBdC5pc0NocmRldih3bi5t'@;
put 'b2RlKSYmKHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5jaHJkZXYubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSx3bi50aW1lc3RhbXA9RGF0ZS5ub3coKSxzdCYmKHN0LmNvbnRlbnRzW2d0XT13bixzdC50aW1lc3RhbXA9d24udGltZXN0YW1wKSx3bn0s'@;
put 'Z2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5jb250ZW50cz9zdC5jb250ZW50cy5zdWJhcnJheT9zdC5jb250ZW50cy5zdWJhcnJheSgwLHN0LnVzZWRCeXRlcyk6bmV3IFVpbnQ4QXJyYXkoc3QuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApfSxleHBh'@;
put 'bmRGaWxlU3RvcmFnZTpmdW5jdGlvbihzdCxndCl7dmFyIFJ0PXN0LmNvbnRlbnRzP3N0LmNvbnRlbnRzLmxlbmd0aDowO2lmKCEoUnQ+PWd0KSl7Z3Q9TWF0aC5tYXgoZ3QsUnQqKFJ0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT1SdCYmKGd0PU1hdGgubWF4KGd0LDI1NikpO3ZhciB0bj1z'@;
put 'dC5jb250ZW50cztzdC5jb250ZW50cz1uZXcgVWludDhBcnJheShndCksc3QudXNlZEJ5dGVzPjAmJnN0LmNvbnRlbnRzLnNldCh0bi5zdWJhcnJheSgwLHN0LnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxlU3RvcmFnZTpmdW5jdGlvbihzdCxndCl7aWYoc3QudXNlZEJ5dGVzIT1ndClpZigw'@;
put 'PT1ndClzdC5jb250ZW50cz1udWxsLHN0LnVzZWRCeXRlcz0wO2Vsc2V7dmFyIFJ0PXN0LmNvbnRlbnRzO3N0LmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGd0KSxSdCYmc3QuY29udGVudHMuc2V0KFJ0LnN1YmFycmF5KDAsTWF0aC5taW4oZ3Qsc3QudXNlZEJ5dGVzKSkpLHN0LnVzZWRCeXRl'@;
put 'cz1ndH19LG5vZGVfb3BzOntnZXRhdHRyOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9e307cmV0dXJuIGd0LmRldj1BdC5pc0NocmRldihzdC5tb2RlKT9zdC5pZDoxLGd0Lmlubz1zdC5pZCxndC5tb2RlPXN0Lm1vZGUsZ3Qubmxpbms9MSxndC51aWQ9MCxndC5naWQ9MCxndC5yZGV2PXN0LnJkZXYs'@;
put 'Z3Quc2l6ZT1BdC5pc0RpcihzdC5tb2RlKT80MDk2OkF0LmlzRmlsZShzdC5tb2RlKT9zdC51c2VkQnl0ZXM6QXQuaXNMaW5rKHN0Lm1vZGUpP3N0LmxpbmsubGVuZ3RoOjAsZ3QuYXRpbWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSxndC5tdGltZT1uZXcgRGF0ZShzdC50aW1lc3RhbXApLGd0'@;
put 'LmN0aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCksZ3QuYmxrc2l6ZT00MDk2LGd0LmJsb2Nrcz1NYXRoLmNlaWwoZ3Quc2l6ZS9ndC5ibGtzaXplKSxndH0sc2V0YXR0cjpmdW5jdGlvbihzdCxndCl7dm9pZCAwIT09Z3QubW9kZSYmKHN0Lm1vZGU9Z3QubW9kZSksdm9pZCAwIT09Z3QudGlt'@;
put 'ZXN0YW1wJiYoc3QudGltZXN0YW1wPWd0LnRpbWVzdGFtcCksdm9pZCAwIT09Z3Quc2l6ZSYmdW8ucmVzaXplRmlsZVN0b3JhZ2Uoc3QsZ3Quc2l6ZSl9LGxvb2t1cDpmdW5jdGlvbihzdCxndCl7dGhyb3cgQXQuZ2VuZXJpY0Vycm9yc1s0NF19LG1rbm9kOmZ1bmN0aW9uKHN0LGd0LFJ0LHRu'@;
put 'KXtyZXR1cm4gdW8uY3JlYXRlTm9kZShzdCxndCxSdCx0bil9LHJlbmFtZTpmdW5jdGlvbihzdCxndCxSdCl7aWYoQXQuaXNEaXIoc3QubW9kZSkpe3ZhciB0bjt0cnl7dG49QXQubG9va3VwTm9kZShndCxSdCl9Y2F0Y2h7fWlmKHRuKWZvcih2YXIgd24gaW4gdG4uY29udGVudHMpdGhyb3cg'@;
put 'bmV3IEF0LkVycm5vRXJyb3IoNTUpfWRlbGV0ZSBzdC5wYXJlbnQuY29udGVudHNbc3QubmFtZV0sc3QucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLHN0Lm5hbWU9UnQsZ3QuY29udGVudHNbUnRdPXN0LGd0LnRpbWVzdGFtcD1zdC5wYXJlbnQudGltZXN0YW1wLHN0LnBhcmVudD1ndH0s'@;
put 'dW5saW5rOmZ1bmN0aW9uKHN0LGd0KXtkZWxldGUgc3QuY29udGVudHNbZ3RdLHN0LnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcjpmdW5jdGlvbihzdCxndCl7dmFyIFJ0PUF0Lmxvb2t1cE5vZGUoc3QsZ3QpO2Zvcih2YXIgdG4gaW4gUnQuY29udGVudHMpdGhyb3cgbmV3IEF0LkVycm5v'@;
put 'RXJyb3IoNTUpO2RlbGV0ZSBzdC5jb250ZW50c1tndF0sc3QudGltZXN0YW1wPURhdGUubm93KCl9LHJlYWRkaXI6ZnVuY3Rpb24oc3Qpe3ZhciBndD1bIi4iLCIuLiJdO2Zvcih2YXIgUnQgaW4gc3QuY29udGVudHMpc3QuY29udGVudHMuaGFzT3duUHJvcGVydHkoUnQpJiZndC5wdXNoKFJ0'@;
put 'KTtyZXR1cm4gZ3R9LHN5bWxpbms6ZnVuY3Rpb24oc3QsZ3QsUnQpe3ZhciB0bj11by5jcmVhdGVOb2RlKHN0LGd0LDQxNDcxLDApO3JldHVybiB0bi5saW5rPVJ0LHRufSxyZWFkbGluazpmdW5jdGlvbihzdCl7aWYoIUF0LmlzTGluayhzdC5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJv'@;
put 'cigyOCk7cmV0dXJuIHN0Lmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXt2YXIgc3I9c3Qubm9kZS5jb250ZW50cztpZih3bj49c3Qubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIGxyPU1hdGgubWluKHN0Lm5vZGUudXNlZEJ5dGVzLXduLHRuKTtp'@;
put 'Zihscj44JiZzci5zdWJhcnJheSlndC5zZXQoc3Iuc3ViYXJyYXkod24sd24rbHIpLFJ0KTtlbHNlIGZvcih2YXIgUnI9MDtScjxscjtScisrKWd0W1J0K1JyXT1zclt3bitScl07cmV0dXJuIGxyfSx3cml0ZTpmdW5jdGlvbihzdCxndCxSdCx0bix3bixzcil7aWYoZ3QuYnVmZmVyPT09ZXQu'@;
put 'YnVmZmVyJiYoc3I9ITEpLCF0bilyZXR1cm4gMDt2YXIgbHI9c3Qubm9kZTtpZihsci50aW1lc3RhbXA9RGF0ZS5ub3coKSxndC5zdWJhcnJheSYmKCFsci5jb250ZW50c3x8bHIuY29udGVudHMuc3ViYXJyYXkpKXtpZihzcilyZXR1cm4gbHIuY29udGVudHM9Z3Quc3ViYXJyYXkoUnQsUnQr'@;
put 'dG4pLGxyLnVzZWRCeXRlcz10bix0bjtpZigwPT09bHIudXNlZEJ5dGVzJiYwPT09d24pcmV0dXJuIGxyLmNvbnRlbnRzPWd0LnNsaWNlKFJ0LFJ0K3RuKSxsci51c2VkQnl0ZXM9dG4sdG47aWYod24rdG48PWxyLnVzZWRCeXRlcylyZXR1cm4gbHIuY29udGVudHMuc2V0KGd0LnN1YmFycmF5'@;
put 'KFJ0LFJ0K3RuKSx3biksdG59aWYodW8uZXhwYW5kRmlsZVN0b3JhZ2UobHIsd24rdG4pLGxyLmNvbnRlbnRzLnN1YmFycmF5JiZndC5zdWJhcnJheSlsci5jb250ZW50cy5zZXQoZ3Quc3ViYXJyYXkoUnQsUnQrdG4pLHduKTtlbHNlIGZvcih2YXIgUnI9MDtScjx0bjtScisrKWxyLmNvbnRl'@;
put 'bnRzW3duK1JyXT1ndFtSdCtScl07cmV0dXJuIGxyLnVzZWRCeXRlcz1NYXRoLm1heChsci51c2VkQnl0ZXMsd24rdG4pLHRufSxsbHNlZWs6ZnVuY3Rpb24oc3QsZ3QsUnQpe3ZhciB0bj1ndDtpZigxPT09UnQ/dG4rPXN0LnBvc2l0aW9uOjI9PT1SdCYmQXQuaXNGaWxlKHN0Lm5vZGUubW9k'@;
put 'ZSkmJih0bis9c3Qubm9kZS51c2VkQnl0ZXMpLHRuPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3JldHVybiB0bn0sYWxsb2NhdGU6ZnVuY3Rpb24oc3QsZ3QsUnQpe3VvLmV4cGFuZEZpbGVTdG9yYWdlKHN0Lm5vZGUsZ3QrUnQpLHN0Lm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KHN0'@;
put 'Lm5vZGUudXNlZEJ5dGVzLGd0K1J0KX0sbW1hcDpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7aWYoIUF0LmlzRmlsZShzdC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTt2YXIgc3IsbHIsUnI9c3Qubm9kZS5jb250ZW50cztpZigyJndufHxSci5idWZmZXIhPT1pdCl7'@;
put 'aWYoKFJ0PjB8fFJ0K2d0PFJyLmxlbmd0aCkmJihScj1Sci5zdWJhcnJheT9Sci5zdWJhcnJheShSdCxSdCtndCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUnIsUnQsUnQrZ3QpKSxscj0hMCwhKHNyPWdhKGd0KSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDgpO2V0LnNldChScixz'@;
put 'cil9ZWxzZSBscj0hMSxzcj1Sci5ieXRlT2Zmc2V0O3JldHVybntwdHI6c3IsYWxsb2NhdGVkOmxyfX0sbXN5bmM6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3JldHVybiB1by5zdHJlYW1fb3BzLndyaXRlKHN0LGd0LDAsdG4sUnQsITEpLDB9fX0sQXQ9e3Jvb3Q6bnVsbCxtb3VudHM6W10s'@;
put 'ZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDohMSxpZ25vcmVQZXJtaXNzaW9uczohMCxFcnJub0Vycm9yOm51bGwsZ2VuZXJpY0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3Rz'@;
put 'OjAsbG9va3VwUGF0aDooc3QsZ3Q9e30pPT57aWYoIShzdD1Yby5yZXNvbHZlKHN0KSkpcmV0dXJue3BhdGg6IiIsbm9kZTpudWxsfTtpZigoZ3Q9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0sZ3QpKS5yZWN1cnNlX2NvdW50PjgpdGhyb3cgbmV3IEF0'@;
put 'LkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgUnQ9c3Quc3BsaXQoIi8iKS5maWx0ZXIoTW89PiEhTW8pLHRuPUF0LnJvb3Qsd249Ii8iLHNyPTA7c3I8UnQubGVuZ3RoO3NyKyspe3ZhciBscj1zcj09PVJ0Lmxlbmd0aC0xO2lmKGxyJiZndC5wYXJlbnQpYnJlYWs7aWYodG49QXQubG9va3VwTm9k'@;
put 'ZSh0bixSdFtzcl0pLHduPVJpLmpvaW4yKHduLFJ0W3NyXSksQXQuaXNNb3VudHBvaW50KHRuKSYmKCFscnx8bHImJmd0LmZvbGxvd19tb3VudCkmJih0bj10bi5tb3VudGVkLnJvb3QpLCFscnx8Z3QuZm9sbG93KWZvcih2YXIgUnI9MDtBdC5pc0xpbmsodG4ubW9kZSk7KXt2YXIgZ289QXQu'@;
put 'cmVhZGxpbmsod24pO2lmKHduPVhvLnJlc29sdmUoUmkuZGlybmFtZSh3biksZ28pLHRuPUF0Lmxvb2t1cFBhdGgod24se3JlY3Vyc2VfY291bnQ6Z3QucmVjdXJzZV9jb3VudCsxfSkubm9kZSxScisrPjQwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMyKX19cmV0dXJue3BhdGg6d24sbm9k'@;
put 'ZTp0bn19LGdldFBhdGg6c3Q9Pntmb3IodmFyIGd0Ozspe2lmKEF0LmlzUm9vdChzdCkpe3ZhciBSdD1zdC5tb3VudC5tb3VudHBvaW50O3JldHVybiBndD8iLyIhPT1SdFtSdC5sZW5ndGgtMV0/UnQrIi8iK2d0OlJ0K2d0OlJ0fWd0PWd0P3N0Lm5hbWUrIi8iK2d0OnN0Lm5hbWUsc3Q9c3Qu'@;
put 'cGFyZW50fX0saGFzaE5hbWU6KHN0LGd0KT0+e2Zvcih2YXIgUnQ9MCx0bj0wO3RuPGd0Lmxlbmd0aDt0bisrKVJ0PShSdDw8NSktUnQrZ3QuY2hhckNvZGVBdCh0bil8MDtyZXR1cm4oc3QrUnQ+Pj4wKSVBdC5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZTpzdD0+e3ZhciBndD1BdC5o'@;
put 'YXNoTmFtZShzdC5wYXJlbnQuaWQsc3QubmFtZSk7c3QubmFtZV9uZXh0PUF0Lm5hbWVUYWJsZVtndF0sQXQubmFtZVRhYmxlW2d0XT1zdH0saGFzaFJlbW92ZU5vZGU6c3Q9Pnt2YXIgZ3Q9QXQuaGFzaE5hbWUoc3QucGFyZW50LmlkLHN0Lm5hbWUpO2lmKEF0Lm5hbWVUYWJsZVtndF09PT1z'@;
put 'dClBdC5uYW1lVGFibGVbZ3RdPXN0Lm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgUnQ9QXQubmFtZVRhYmxlW2d0XTtSdDspe2lmKFJ0Lm5hbWVfbmV4dD09PXN0KXtSdC5uYW1lX25leHQ9c3QubmFtZV9uZXh0O2JyZWFrfVJ0PVJ0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGU6KHN0LGd0KT0+e3Zh'@;
put 'ciBSdD1BdC5tYXlMb29rdXAoc3QpO2lmKFJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFJ0LHN0KTtmb3IodmFyIHRuPUF0Lmhhc2hOYW1lKHN0LmlkLGd0KSx3bj1BdC5uYW1lVGFibGVbdG5dO3duO3duPXduLm5hbWVfbmV4dClpZih3bi5wYXJlbnQuaWQ9PT1zdC5pZCYmd24ubmFtZT09'@;
put 'PWd0KXJldHVybiB3bjtyZXR1cm4gQXQubG9va3VwKHN0LGd0KX0sY3JlYXRlTm9kZTooc3QsZ3QsUnQsdG4pPT57dmFyIHduPW5ldyBBdC5GU05vZGUoc3QsZ3QsUnQsdG4pO3JldHVybiBBdC5oYXNoQWRkTm9kZSh3biksd259LGRlc3Ryb3lOb2RlOnN0PT57QXQuaGFzaFJlbW92ZU5vZGUo'@;
put 'c3QpfSxpc1Jvb3Q6c3Q9PnN0PT09c3QucGFyZW50LGlzTW91bnRwb2ludDpzdD0+ISFzdC5tb3VudGVkLGlzRmlsZTpzdD0+MzI3Njg9PSg2MTQ0MCZzdCksaXNEaXI6c3Q9PjE2Mzg0PT0oNjE0NDAmc3QpLGlzTGluazpzdD0+NDA5NjA9PSg2MTQ0MCZzdCksaXNDaHJkZXY6c3Q9PjgxOTI9'@;
put 'PSg2MTQ0MCZzdCksaXNCbGtkZXY6c3Q9PjI0NTc2PT0oNjE0NDAmc3QpLGlzRklGTzpzdD0+NDA5Nj09KDYxNDQwJnN0KSxpc1NvY2tldDpzdD0+NDkxNTI9PSg0OTE1MiZzdCksZmxhZ01vZGVzOntyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9LG1vZGVTdHJp'@;
put 'bmdUb0ZsYWdzOnN0PT57dmFyIGd0PUF0LmZsYWdNb2Rlc1tzdF07aWYodm9pZCAwPT09Z3QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAiK3N0KTtyZXR1cm4gZ3R9LGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOnN0PT57dmFyIGd0PVsiciIsInciLCJydyJdWzMm'@;
put 'c3RdO3JldHVybiA1MTImc3QmJihndCs9InciKSxndH0sbm9kZVBlcm1pc3Npb25zOihzdCxndCk9PkF0Lmlnbm9yZVBlcm1pc3Npb25zfHwoIWd0LmluY2x1ZGVzKCJyIil8fDI5MiZzdC5tb2RlKSYmKCFndC5pbmNsdWRlcygidyIpfHwxNDYmc3QubW9kZSkmJighZ3QuaW5jbHVkZXMoIngi'@;
put 'KXx8NzMmc3QubW9kZSk/MDoyLG1heUxvb2t1cDpzdD0+QXQubm9kZVBlcm1pc3Npb25zKHN0LCJ4Iil8fChzdC5ub2RlX29wcy5sb29rdXA/MDoyKSxtYXlDcmVhdGU6KHN0LGd0KT0+e3RyeXtyZXR1cm4gQXQubG9va3VwTm9kZShzdCxndCksMjB9Y2F0Y2h7fXJldHVybiBBdC5ub2RlUGVy'@;
put 'bWlzc2lvbnMoc3QsInd4Iil9LG1heURlbGV0ZTooc3QsZ3QsUnQpPT57dmFyIHRuO3RyeXt0bj1BdC5sb29rdXBOb2RlKHN0LGd0KX1jYXRjaChzcil7cmV0dXJuIHNyLmVycm5vfXZhciB3bj1BdC5ub2RlUGVybWlzc2lvbnMoc3QsInd4Iik7aWYod24pcmV0dXJuIHduO2lmKFJ0KXtpZigh'@;
put 'QXQuaXNEaXIodG4ubW9kZSkpcmV0dXJuIDU0O2lmKEF0LmlzUm9vdCh0bil8fEF0LmdldFBhdGgodG4pPT09QXQuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYoQXQuaXNEaXIodG4ubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuOihzdCxndCk9PnN0P0F0LmlzTGluayhzdC5tb2Rl'@;
put 'KT8zMjpBdC5pc0RpcihzdC5tb2RlKSYmKCJyIiE9PUF0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGd0KXx8NTEyJmd0KT8zMTpBdC5ub2RlUGVybWlzc2lvbnMoc3QsQXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZ3QpKTo0NCxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQ6KHN0PTAsZ3Q9'@;
put 'QXQuTUFYX09QRU5fRkRTKT0+e2Zvcih2YXIgUnQ9c3Q7UnQ8PWd0O1J0KyspaWYoIUF0LnN0cmVhbXNbUnRdKXJldHVybiBSdDt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbTpzdD0+QXQuc3RyZWFtc1tzdF0sY3JlYXRlU3RyZWFtOihzdCxndCxSdCk9PntBdC5GU1N0'@;
put 'cmVhbXx8KEF0LkZTU3RyZWFtPWZ1bmN0aW9uKCl7dGhpcy5zaGFyZWQ9e319LEF0LkZTU3RyZWFtLnByb3RvdHlwZT17fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBdC5GU1N0cmVhbS5wcm90b3R5cGUse29iamVjdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX0sc2V0OmZ1'@;
put 'bmN0aW9uKHduKXt0aGlzLm5vZGU9d259fSxpc1JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAxIT0oMjA5NzE1NSZ0aGlzLmZsYWdzKX19LGlzV3JpdGU6e2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMjA5NzE1NSZ0aGlzLmZsYWdzKX19LGlzQXBwZW5kOntnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfX0sZmxhZ3M6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc30sc2V0OmZ1bmN0aW9uKHduKXt0aGlzLnNoYXJlZC5mbGFncz13bn19LHBvc2l0aW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQucG9zaXRpb259'@;
put 'LHNldDpmdW5jdGlvbih3bil7dGhpcy5zaGFyZWQucG9zaXRpb249d259fX0pKSxzdD1PYmplY3QuYXNzaWduKG5ldyBBdC5GU1N0cmVhbSxzdCk7dmFyIHRuPUF0Lm5leHRmZChndCxSdCk7cmV0dXJuIHN0LmZkPXRuLEF0LnN0cmVhbXNbdG5dPXN0LHN0fSxjbG9zZVN0cmVhbTpzdD0+e0F0'@;
put 'LnN0cmVhbXNbc3RdPW51bGx9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuOnN0PT57dmFyIGd0PUF0LmdldERldmljZShzdC5ub2RlLnJkZXYpO3N0LnN0cmVhbV9vcHM9Z3Quc3RyZWFtX29wcyxzdC5zdHJlYW1fb3BzLm9wZW4mJnN0LnN0cmVhbV9vcHMub3BlbihzdCl9LGxsc2VlazooKT0+'@;
put 'e3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOnN0PT5zdD4+OCxtaW5vcjpzdD0+MjU1JnN0LG1ha2VkZXY6KHN0LGd0KT0+c3Q8PDh8Z3QscmVnaXN0ZXJEZXZpY2U6KHN0LGd0KT0+e0F0LmRldmljZXNbc3RdPXtzdHJlYW1fb3BzOmd0fX0sZ2V0RGV2aWNlOnN0PT5BdC5k'@;
put 'ZXZpY2VzW3N0XSxnZXRNb3VudHM6c3Q9Pntmb3IodmFyIGd0PVtdLFJ0PVtzdF07UnQubGVuZ3RoOyl7dmFyIHRuPVJ0LnBvcCgpO2d0LnB1c2godG4pLFJ0LnB1c2guYXBwbHkoUnQsdG4ubW91bnRzKX1yZXR1cm4gZ3R9LHN5bmNmczooc3QsZ3QpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHN0'@;
put 'JiYoZ3Q9c3Qsc3Q9ITEpLEF0LnN5bmNGU1JlcXVlc3RzKyssQXQuc3luY0ZTUmVxdWVzdHM+MSYmaWUoIndhcm5pbmc6ICIrQXQuc3luY0ZTUmVxdWVzdHMrIiBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrIik7'@;
put 'dmFyIFJ0PUF0LmdldE1vdW50cyhBdC5yb290Lm1vdW50KSx0bj0wO2Z1bmN0aW9uIHduKGxyKXtyZXR1cm4gQXQuc3luY0ZTUmVxdWVzdHMtLSxndChscil9ZnVuY3Rpb24gc3IobHIpe2lmKGxyKXJldHVybiBzci5lcnJvcmVkP3ZvaWQgMDooc3IuZXJyb3JlZD0hMCx3bihscikpOysrdG4+'@;
put 'PVJ0Lmxlbmd0aCYmd24obnVsbCl9UnQuZm9yRWFjaChscj0+e2lmKCFsci50eXBlLnN5bmNmcylyZXR1cm4gc3IobnVsbCk7bHIudHlwZS5zeW5jZnMobHIsc3Qsc3IpfSl9LG1vdW50OihzdCxndCxSdCk9Pnt2YXIgdG4sd249Ii8iPT09UnQsc3I9IVJ0O2lmKHduJiZBdC5yb290KXRocm93'@;
put 'IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtpZighd24mJiFzcil7dmFyIGxyPUF0Lmxvb2t1cFBhdGgoUnQse2ZvbGxvd19tb3VudDohMX0pO2lmKFJ0PWxyLnBhdGgsQXQuaXNNb3VudHBvaW50KHRuPWxyLm5vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtpZighQXQuaXNEaXIodG4u'@;
put 'bW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpfXZhciBScj17dHlwZTpzdCxvcHRzOmd0LG1vdW50cG9pbnQ6UnQsbW91bnRzOltdfSxnbz1zdC5tb3VudChScik7cmV0dXJuIGdvLm1vdW50PVJyLFJyLnJvb3Q9Z28sd24/QXQucm9vdD1nbzp0biYmKHRuLm1vdW50ZWQ9UnIsdG4u'@;
put 'bW91bnQmJnRuLm1vdW50Lm1vdW50cy5wdXNoKFJyKSksZ299LHVubW91bnQ6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7Zm9sbG93X21vdW50OiExfSk7aWYoIUF0LmlzTW91bnRwb2ludChndC5ub2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIFJ0PWd0Lm5vZGUs'@;
put 'dG49UnQubW91bnRlZCx3bj1BdC5nZXRNb3VudHModG4pO09iamVjdC5rZXlzKEF0Lm5hbWVUYWJsZSkuZm9yRWFjaChscj0+e2Zvcih2YXIgUnI9QXQubmFtZVRhYmxlW2xyXTtScjspe3ZhciBnbz1Sci5uYW1lX25leHQ7d24uaW5jbHVkZXMoUnIubW91bnQpJiZBdC5kZXN0cm95Tm9kZShS'@;
put 'ciksUnI9Z299fSksUnQubW91bnRlZD1udWxsO3ZhciBzcj1SdC5tb3VudC5tb3VudHMuaW5kZXhPZih0bik7UnQubW91bnQubW91bnRzLnNwbGljZShzciwxKX0sbG9va3VwOihzdCxndCk9PnN0Lm5vZGVfb3BzLmxvb2t1cChzdCxndCksbWtub2Q6KHN0LGd0LFJ0KT0+e3ZhciB0bj1BdC5s'@;
put 'b29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLHduPVJpLmJhc2VuYW1lKHN0KTtpZighd258fCIuIj09PXdufHwiLi4iPT09d24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3ZhciBzcj1BdC5tYXlDcmVhdGUodG4sd24pO2lmKHNyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHNy'@;
put 'KTtpZighdG4ubm9kZV9vcHMubWtub2QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiB0bi5ub2RlX29wcy5ta25vZCh0bix3bixndCxSdCl9LGNyZWF0ZTooc3QsZ3QpPT4oZ3Q9dm9pZCAwIT09Z3Q/Z3Q6NDM4LGd0Jj00MDk1LEF0Lm1rbm9kKHN0LGd0fD0zMjc2OCwwKSks'@;
put 'bWtkaXI6KHN0LGd0KT0+KGd0PXZvaWQgMCE9PWd0P2d0OjUxMSxndCY9MTAyMyxBdC5ta25vZChzdCxndHw9MTYzODQsMCkpLG1rZGlyVHJlZTooc3QsZ3QpPT57Zm9yKHZhciBSdD1zdC5zcGxpdCgiLyIpLHRuPSIiLHduPTA7d248UnQubGVuZ3RoOysrd24paWYoUnRbd25dKXt0bis9Ii8i'@;
put 'K1J0W3duXTt0cnl7QXQubWtkaXIodG4sZ3QpfWNhdGNoKHNyKXtpZigyMCE9c3IuZXJybm8pdGhyb3cgc3J9fX0sbWtkZXY6KHN0LGd0LFJ0KT0+KHZvaWQgMD09PVJ0JiYoUnQ9Z3QsZ3Q9NDM4KSxBdC5ta25vZChzdCxndHw9ODE5MixSdCkpLHN5bWxpbms6KHN0LGd0KT0+e2lmKCFYby5y'@;
put 'ZXNvbHZlKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7dmFyIFJ0PUF0Lmxvb2t1cFBhdGgoZ3Qse3BhcmVudDohMH0pLm5vZGU7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgdG49UmkuYmFzZW5hbWUoZ3QpLHduPUF0Lm1heUNyZWF0ZShSdCx0bik7aWYo'@;
put 'd24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFSdC5ub2RlX29wcy5zeW1saW5rKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gUnQubm9kZV9vcHMuc3ltbGluayhSdCx0bixzdCl9LHJlbmFtZTooc3QsZ3QpPT57dmFyIFJ0LHRuLHduPVJpLmRpcm5hbWUoc3Qp'@;
put 'LHNyPVJpLmRpcm5hbWUoZ3QpLGxyPVJpLmJhc2VuYW1lKHN0KSxScj1SaS5iYXNlbmFtZShndCk7aWYoUnQ9QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZSx0bj1BdC5sb29rdXBQYXRoKGd0LHtwYXJlbnQ6ITB9KS5ub2RlLCFSdHx8IXRuKXRocm93IG5ldyBBdC5FcnJub0Vy'@;
put 'cm9yKDQ0KTtpZihSdC5tb3VudCE9PXRuLm1vdW50KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDc1KTt2YXIgZ28sTW89QXQubG9va3VwTm9kZShSdCxsciksZm89WG8ucmVsYXRpdmUoc3Qsc3IpO2lmKCIuIiE9PWZvLmNoYXJBdCgwKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7aWYo'@;
put 'Ii4iIT09KGZvPVhvLnJlbGF0aXZlKGd0LHduKSkuY2hhckF0KDApKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU1KTt0cnl7Z289QXQubG9va3VwTm9kZSh0bixScil9Y2F0Y2h7fWlmKE1vIT09Z28pe3ZhciBKbz1BdC5pc0RpcihNby5tb2RlKSxZaT1BdC5tYXlEZWxldGUoUnQsbHIsSm8p'@;
put 'O2lmKFlpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFlpKTtpZihZaT1nbz9BdC5tYXlEZWxldGUodG4sUnIsSm8pOkF0Lm1heUNyZWF0ZSh0bixScikpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoWWkpO2lmKCFSdC5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMp'@;
put 'O2lmKEF0LmlzTW91bnRwb2ludChNbyl8fGdvJiZBdC5pc01vdW50cG9pbnQoZ28pKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtpZih0biE9PVJ0JiYoWWk9QXQubm9kZVBlcm1pc3Npb25zKFJ0LCJ3IikpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFlpKTtBdC5oYXNoUmVtb3ZlTm9k'@;
put 'ZShNbyk7dHJ5e1J0Lm5vZGVfb3BzLnJlbmFtZShNbyx0bixScil9Y2F0Y2goWXMpe3Rocm93IFlzfWZpbmFsbHl7QXQuaGFzaEFkZE5vZGUoTW8pfX19LHJtZGlyOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsUnQ9UmkuYmFzZW5hbWUoc3QpLHRuPUF0'@;
put 'Lmxvb2t1cE5vZGUoZ3QsUnQpLHduPUF0Lm1heURlbGV0ZShndCxSdCwhMCk7aWYod24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFndC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYoQXQuaXNNb3VudHBvaW50KHRuKSl0aHJvdyBuZXcgQXQu'@;
put 'RXJybm9FcnJvcigxMCk7Z3Qubm9kZV9vcHMucm1kaXIoZ3QsUnQpLEF0LmRlc3Ryb3lOb2RlKHRuKX0scmVhZGRpcjpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFndC5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU0'@;
put 'KTtyZXR1cm4gZ3Qubm9kZV9vcHMucmVhZGRpcihndCl9LHVubGluazpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7dmFyIFJ0PVJpLmJhc2VuYW1lKHN0KSx0bj1BdC5sb29rdXBOb2RlKGd0'@;
put 'LFJ0KSx3bj1BdC5tYXlEZWxldGUoZ3QsUnQsITEpO2lmKHduKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHduKTtpZighZ3Qubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtpZihBdC5pc01vdW50cG9pbnQodG4pKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEw'@;
put 'KTtndC5ub2RlX29wcy51bmxpbmsoZ3QsUnQpLEF0LmRlc3Ryb3lOb2RlKHRuKX0scmVhZGxpbms6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCkubm9kZTtpZighZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKCFndC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgQXQu'@;
put 'RXJybm9FcnJvcigyOCk7cmV0dXJuIFhvLnJlc29sdmUoQXQuZ2V0UGF0aChndC5wYXJlbnQpLGd0Lm5vZGVfb3BzLnJlYWRsaW5rKGd0KSl9LHN0YXQ6KHN0LGd0KT0+e3ZhciBSdD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IWd0fSkubm9kZTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5v'@;
put 'RXJyb3IoNDQpO2lmKCFSdC5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gUnQubm9kZV9vcHMuZ2V0YXR0cihSdCl9LGxzdGF0OnN0PT5BdC5zdGF0KHN0LCEwKSxjaG1vZDooc3QsZ3QsUnQpPT57dmFyIHRuO2lmKCEodG49InN0cmluZyI9PXR5'@;
put 'cGVvZiBzdD9BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IVJ0fSkubm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7dG4ubm9kZV9vcHMuc2V0YXR0cih0bix7bW9kZTo0MDk1Jmd0fC00MDk2JnRuLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9'@;
put 'KX0sbGNobW9kOihzdCxndCk9PntBdC5jaG1vZChzdCxndCwhMCl9LGZjaG1vZDooc3QsZ3QpPT57dmFyIFJ0PUF0LmdldFN0cmVhbShzdCk7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO0F0LmNobW9kKFJ0Lm5vZGUsZ3QpfSxjaG93bjooc3QsZ3QsUnQsdG4pPT57dmFyIHdu'@;
put 'O2lmKCEod249InN0cmluZyI9PXR5cGVvZiBzdD9BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IXRufSkubm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7d24ubm9kZV9vcHMuc2V0YXR0cih3bix7dGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNo'@;
put 'b3duOihzdCxndCxSdCk9PntBdC5jaG93bihzdCxndCxSdCwhMCl9LGZjaG93bjooc3QsZ3QsUnQpPT57dmFyIHRuPUF0LmdldFN0cmVhbShzdCk7aWYoIXRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO0F0LmNob3duKHRuLm5vZGUsZ3QsUnQpfSx0cnVuY2F0ZTooc3QsZ3QpPT57aWYo'@;
put 'Z3Q8MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIFJ0O2lmKCEoUnQ9InN0cmluZyI9PXR5cGVvZiBzdD9BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtpZihBdC5pc0RpcihS'@;
put 'dC5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMSk7aWYoIUF0LmlzRmlsZShSdC5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIHRuPUF0Lm5vZGVQZXJtaXNzaW9ucyhSdCwidyIpO2lmKHRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHRuKTtSdC5ub2RlX29w'@;
put 'cy5zZXRhdHRyKFJ0LHtzaXplOmd0LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZTooc3QsZ3QpPT57dmFyIFJ0PUF0LmdldFN0cmVhbShzdCk7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZSdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5v'@;
put 'RXJyb3IoMjgpO0F0LnRydW5jYXRlKFJ0Lm5vZGUsZ3QpfSx1dGltZTooc3QsZ3QsUnQpPT57dmFyIHRuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU7dG4ubm9kZV9vcHMuc2V0YXR0cih0bix7dGltZXN0YW1wOk1hdGgubWF4KGd0LFJ0KX0pfSxvcGVuOihzdCxndCxSdCk9'@;
put 'PntpZigiIj09PXN0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgdG47aWYoUnQ9dm9pZCAwPT09UnQ/NDM4OlJ0LFJ0PTY0JihndD0ic3RyaW5nIj09dHlwZW9mIGd0P0F0Lm1vZGVTdHJpbmdUb0ZsYWdzKGd0KTpndCk/NDA5NSZSdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2Yg'@;
put 'c3QpdG49c3Q7ZWxzZXtzdD1SaS5ub3JtYWxpemUoc3QpO3RyeXt0bj1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ISgxMzEwNzImZ3QpfSkubm9kZX1jYXRjaHt9fXZhciB3bj0hMTtpZig2NCZndClpZih0bil7aWYoMTI4Jmd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDIwKX1lbHNlIHRu'@;
put 'PUF0Lm1rbm9kKHN0LFJ0LDApLHduPSEwO2lmKCF0bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoQXQuaXNDaHJkZXYodG4ubW9kZSkmJihndCY9LTUxMyksNjU1MzYmZ3QmJiFBdC5pc0Rpcih0bi5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCk7aWYoIXduKXt2YXIg'@;
put 'c3I9QXQubWF5T3Blbih0bixndCk7aWYoc3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Ioc3IpfTUxMiZndCYmIXduJiZBdC50cnVuY2F0ZSh0biwwKSxndCY9LTEzMTcxMzt2YXIgbHI9QXQuY3JlYXRlU3RyZWFtKHtub2RlOnRuLHBhdGg6QXQuZ2V0UGF0aCh0biksZmxhZ3M6Z3Qsc2Vla2Fi'@;
put 'bGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOnRuLnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gbHIuc3RyZWFtX29wcy5vcGVuJiZsci5zdHJlYW1fb3BzLm9wZW4obHIpLCFkLmxvZ1JlYWRGaWxlc3x8MSZndHx8KEF0LnJlYWRGaWxlc3x8KEF0LnJlYWRGaWxl'@;
put 'cz17fSksc3QgaW4gQXQucmVhZEZpbGVzfHwoQXQucmVhZEZpbGVzW3N0XT0xKSksbHJ9LGNsb3NlOnN0PT57aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO3N0LmdldGRlbnRzJiYoc3QuZ2V0ZGVudHM9bnVsbCk7dHJ5e3N0LnN0cmVhbV9vcHMuY2xvc2Um'@;
put 'JnN0LnN0cmVhbV9vcHMuY2xvc2Uoc3QpfWNhdGNoKGd0KXt0aHJvdyBndH1maW5hbGx5e0F0LmNsb3NlU3RyZWFtKHN0LmZkKX1zdC5mZD1udWxsfSxpc0Nsb3NlZDpzdD0+bnVsbD09PXN0LmZkLGxsc2Vlazooc3QsZ3QsUnQpPT57aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5F'@;
put 'cnJub0Vycm9yKDgpO2lmKCFzdC5zZWVrYWJsZXx8IXN0LnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKTtpZigwIT1SdCYmMSE9UnQmJjIhPVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gc3QucG9zaXRpb249c3Quc3RyZWFtX29wcy5s'@;
put 'bHNlZWsoc3QsZ3QsUnQpLHN0LnVuZ290dGVuPVtdLHN0LnBvc2l0aW9ufSxyZWFkOihzdCxndCxSdCx0bix3bik9PntpZih0bjwwfHx3bjwwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoMT09KDIw'@;
put 'OTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKEF0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzEpO2lmKCFzdC5zdHJlYW1fb3BzLnJlYWQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3ZhciBzcj12b2lkIDAhPT13'@;
put 'bjtpZihzcil7aWYoIXN0LnNlZWthYmxlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKX1lbHNlIHduPXN0LnBvc2l0aW9uO3ZhciBscj1zdC5zdHJlYW1fb3BzLnJlYWQoc3QsZ3QsUnQsdG4sd24pO3JldHVybiBzcnx8KHN0LnBvc2l0aW9uKz1sciksbHJ9LHdyaXRlOihzdCxndCxSdCx0'@;
put 'bix3bixzcik9PntpZih0bjwwfHx3bjwwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZihBdC5pc0RpcihzdC5u'@;
put 'b2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMxKTtpZighc3Quc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7c3Quc2Vla2FibGUmJjEwMjQmc3QuZmxhZ3MmJkF0Lmxsc2VlayhzdCwwLDIpO3ZhciBscj12b2lkIDAhPT13bjtpZihscil7aWYo'@;
put 'IXN0LnNlZWthYmxlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKX1lbHNlIHduPXN0LnBvc2l0aW9uO3ZhciBScj1zdC5zdHJlYW1fb3BzLndyaXRlKHN0LGd0LFJ0LHRuLHduLHNyKTtyZXR1cm4gbHJ8fChzdC5wb3NpdGlvbis9UnIpLFJyfSxhbGxvY2F0ZTooc3QsZ3QsUnQpPT57aWYo'@;
put 'QXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKGd0PDB8fFJ0PD0wKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZighKDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKCFBdC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSYm'@;
put 'IUF0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO2lmKCFzdC5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEzOCk7c3Quc3RyZWFtX29wcy5hbGxvY2F0ZShzdCxndCxSdCl9LG1tYXA6KHN0LGd0LFJ0LHRuLHduKT0+'@;
put 'e2lmKDImdG4mJiEoMiZ3bikmJjIhPSgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyKTtpZigxPT0oMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMik7aWYoIXN0LnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgQXQuRXJybm9FcnJv'@;
put 'cig0Myk7cmV0dXJuIHN0LnN0cmVhbV9vcHMubW1hcChzdCxndCxSdCx0bix3bil9LG1zeW5jOihzdCxndCxSdCx0bix3bik9PnN0LnN0cmVhbV9vcHMubXN5bmM/c3Quc3RyZWFtX29wcy5tc3luYyhzdCxndCxSdCx0bix3bik6MCxtdW5tYXA6c3Q9PjAsaW9jdGw6KHN0LGd0LFJ0KT0+e2lm'@;
put 'KCFzdC5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gc3Quc3RyZWFtX29wcy5pb2N0bChzdCxndCxSdCl9LHJlYWRGaWxlOihzdCxndD17fSk9PntpZihndC5mbGFncz1ndC5mbGFnc3x8MCxndC5lbmNvZGluZz1ndC5lbmNvZGluZ3x8ImJpbmFy'@;
put 'eSIsInV0ZjgiIT09Z3QuZW5jb2RpbmcmJiJiaW5hcnkiIT09Z3QuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVuY29kaW5nIHR5cGUgIicrZ3QuZW5jb2RpbmcrJyInKTt2YXIgUnQsdG49QXQub3BlbihzdCxndC5mbGFncyksd249QXQuc3RhdChzdCkuc2l6ZSxzcj1uZXcg'@;
put 'VWludDhBcnJheSh3bik7cmV0dXJuIEF0LnJlYWQodG4sc3IsMCx3biwwKSwidXRmOCI9PT1ndC5lbmNvZGluZz9SdD1ObihzciwwKToiYmluYXJ5Ij09PWd0LmVuY29kaW5nJiYoUnQ9c3IpLEF0LmNsb3NlKHRuKSxSdH0sd3JpdGVGaWxlOihzdCxndCxSdD17fSk9PntSdC5mbGFncz1SdC5m'@;
put 'bGFnc3x8NTc3O3ZhciB0bj1BdC5vcGVuKHN0LFJ0LmZsYWdzLFJ0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgZ3Qpe3ZhciB3bj1uZXcgVWludDhBcnJheShFaShndCkrMSksc3I9THIoZ3Qsd24sMCx3bi5sZW5ndGgpO0F0LndyaXRlKHRuLHduLDAsc3Isdm9pZCAwLFJ0LmNhbk93bil9'@;
put 'ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGd0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO0F0LndyaXRlKHRuLGd0LDAsZ3QuYnl0ZUxlbmd0aCx2b2lkIDAsUnQuY2FuT3duKX1BdC5jbG9zZSh0bil9LGN3ZDooKT0+QXQuY3VycmVudFBhdGgsY2hkaXI6'@;
put 'c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSk7aWYobnVsbD09PWd0Lm5vZGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKCFBdC5pc0RpcihndC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU0KTt2YXIgUnQ9QXQubm9kZVBlcm1pc3Np'@;
put 'b25zKGd0Lm5vZGUsIngiKTtpZihSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihSdCk7QXQuY3VycmVudFBhdGg9Z3QucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzOigpPT57QXQubWtkaXIoIi90bXAiKSxBdC5ta2RpcigiL2hvbWUiKSxBdC5ta2RpcigiL2hvbWUvd2ViX3VzZXIi'@;
put 'KX0sY3JlYXRlRGVmYXVsdERldmljZXM6KCk9PntBdC5ta2RpcigiL2RldiIpLEF0LnJlZ2lzdGVyRGV2aWNlKEF0Lm1ha2VkZXYoMSwzKSx7cmVhZDooKT0+MCx3cml0ZTooZ3QsUnQsdG4sd24sc3IpPT53bn0pLEF0Lm1rZGV2KCIvZGV2L251bGwiLEF0Lm1ha2VkZXYoMSwzKSksSnMucmVn'@;
put 'aXN0ZXIoQXQubWFrZWRldig1LDApLEpzLmRlZmF1bHRfdHR5X29wcyksSnMucmVnaXN0ZXIoQXQubWFrZWRldig2LDApLEpzLmRlZmF1bHRfdHR5MV9vcHMpLEF0Lm1rZGV2KCIvZGV2L3R0eSIsQXQubWFrZWRldig1LDApKSxBdC5ta2RldigiL2Rldi90dHkxIixBdC5tYWtlZGV2KDYsMCkp'@;
put 'O3ZhciBzdD1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7dmFyIGd0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybigpPT4oY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhndCksZ3RbMF0pfXJldHVy'@;
put 'bigpPT5FbigicmFuZG9tRGV2aWNlIil9KCk7QXQuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixzdCksQXQuY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsc3QpLEF0Lm1rZGlyKCIvZGV2L3NobSIpLEF0Lm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVj'@;
put 'dG9yaWVzOigpPT57QXQubWtkaXIoIi9wcm9jIik7dmFyIHN0PUF0Lm1rZGlyKCIvcHJvYy9zZWxmIik7QXQubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSxBdC5tb3VudCh7bW91bnQ6KCk9Pnt2YXIgZ3Q9QXQuY3JlYXRlTm9kZShzdCwiZmQiLDE2ODk1LDczKTtyZXR1cm4gZ3Qubm9kZV9vcHM9'@;
put 'e2xvb2t1cDooUnQsdG4pPT57dmFyIHNyPUF0LmdldFN0cmVhbSgrdG4pO2lmKCFzcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTt2YXIgbHI9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5zci5wYXRofX07cmV0dXJuIGxy'@;
put 'LnBhcmVudD1scixscn19LGd0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zOigpPT57ZC5zdGRpbj9BdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZC5zdGRpbik6QXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksZC5zdGRvdXQ/QXQu'@;
put 'Y3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGQuc3Rkb3V0KTpBdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZC5zdGRlcnI/QXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLGQuc3RkZXJyKTpBdC5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2'@;
put 'L3N0ZGVyciIpLEF0Lm9wZW4oIi9kZXYvc3RkaW4iLDApLEF0Lm9wZW4oIi9kZXYvc3Rkb3V0IiwxKSxBdC5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LGVuc3VyZUVycm5vRXJyb3I6KCk9PntBdC5FcnJub0Vycm9yfHwoQXQuRXJybm9FcnJvcj1mdW5jdGlvbihzdCxndCl7dGhpcy5ub2RlPWd0'@;
put 'LHRoaXMuc2V0RXJybm89ZnVuY3Rpb24oUnQpe3RoaXMuZXJybm89UnR9LHRoaXMuc2V0RXJybm8oc3QpLHRoaXMubWVzc2FnZT0iRlMgZXJyb3IifSxBdC5FcnJub0Vycm9yLnByb3RvdHlwZT1uZXcgRXJyb3IsQXQuRXJybm9FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3I9QXQuRXJybm9F'@;
put 'cnJvcixbNDRdLmZvckVhY2goc3Q9PntBdC5nZW5lcmljRXJyb3JzW3N0XT1uZXcgQXQuRXJybm9FcnJvcihzdCksQXQuZ2VuZXJpY0Vycm9yc1tzdF0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSkpfSxzdGF0aWNJbml0OigpPT57QXQuZW5zdXJlRXJybm9FcnJvcigpLEF0'@;
put 'Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksQXQubW91bnQodW8se30sIi8iKSxBdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxBdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLEF0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLEF0LmZpbGVzeXN0ZW1zPXtNRU1GUzp1b319LGluaXQ6'@;
put 'KHN0LGd0LFJ0KT0+e0F0LmluaXQuaW5pdGlhbGl6ZWQ9ITAsQXQuZW5zdXJlRXJybm9FcnJvcigpLGQuc3RkaW49c3R8fGQuc3RkaW4sZC5zdGRvdXQ9Z3R8fGQuc3Rkb3V0LGQuc3RkZXJyPVJ0fHxkLnN0ZGVycixBdC5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKX0scXVpdDooKT0+e0F0Lmlu'@;
put 'aXQuaW5pdGlhbGl6ZWQ9ITE7Zm9yKHZhciBzdD0wO3N0PEF0LnN0cmVhbXMubGVuZ3RoO3N0Kyspe3ZhciBndD1BdC5zdHJlYW1zW3N0XTtndCYmQXQuY2xvc2UoZ3QpfX0sZ2V0TW9kZTooc3QsZ3QpPT57dmFyIFJ0PTA7cmV0dXJuIHN0JiYoUnR8PTM2NSksZ3QmJihSdHw9MTQ2KSxSdH0s'@;
put 'ZmluZE9iamVjdDooc3QsZ3QpPT57dmFyIFJ0PUF0LmFuYWx5emVQYXRoKHN0LGd0KTtyZXR1cm4gUnQuZXhpc3RzP1J0Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aDooc3QsZ3QpPT57dHJ5e3N0PSh0bj1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IWd0fSkpLnBhdGh9Y2F0Y2h7fXZhciBS'@;
put 'dD17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciB0bj1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KTtSdC5wYXJlbnRF'@;
put 'eGlzdHM9ITAsUnQucGFyZW50UGF0aD10bi5wYXRoLFJ0LnBhcmVudE9iamVjdD10bi5ub2RlLFJ0Lm5hbWU9UmkuYmFzZW5hbWUoc3QpLHRuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohZ3R9KSxSdC5leGlzdHM9ITAsUnQucGF0aD10bi5wYXRoLFJ0Lm9iamVjdD10bi5ub2RlLFJ0Lm5h'@;
put 'bWU9dG4ubm9kZS5uYW1lLFJ0LmlzUm9vdD0iLyI9PT10bi5wYXRofWNhdGNoKHduKXtSdC5lcnJvcj13bi5lcnJub31yZXR1cm4gUnR9LGNyZWF0ZVBhdGg6KHN0LGd0LFJ0LHRuKT0+e3N0PSJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6QXQuZ2V0UGF0aChzdCk7Zm9yKHZhciB3bj1ndC5zcGxp'@;
put 'dCgiLyIpLnJldmVyc2UoKTt3bi5sZW5ndGg7KXt2YXIgc3I9d24ucG9wKCk7aWYoc3Ipe3ZhciBscj1SaS5qb2luMihzdCxzcik7dHJ5e0F0Lm1rZGlyKGxyKX1jYXRjaHt9c3Q9bHJ9fXJldHVybiBscn0sY3JlYXRlRmlsZTooc3QsZ3QsUnQsdG4sd24pPT57dmFyIHNyPVJpLmpvaW4yKCJz'@;
put 'dHJpbmciPT10eXBlb2Ygc3Q/c3Q6QXQuZ2V0UGF0aChzdCksZ3QpLGxyPUF0LmdldE1vZGUodG4sd24pO3JldHVybiBBdC5jcmVhdGUoc3IsbHIpfSxjcmVhdGVEYXRhRmlsZTooc3QsZ3QsUnQsdG4sd24sc3IpPT57dmFyIGxyPWd0O3N0JiYoc3Q9InN0cmluZyI9PXR5cGVvZiBzdD9zdDpB'@;
put 'dC5nZXRQYXRoKHN0KSxscj1ndD9SaS5qb2luMihzdCxndCk6c3QpO3ZhciBScj1BdC5nZXRNb2RlKHRuLHduKSxnbz1BdC5jcmVhdGUobHIsUnIpO2lmKFJ0KXtpZigic3RyaW5nIj09dHlwZW9mIFJ0KXtmb3IodmFyIE1vPW5ldyBBcnJheShSdC5sZW5ndGgpLGZvPTAsSm89UnQubGVuZ3Ro'@;
put 'O2ZvPEpvOysrZm8pTW9bZm9dPVJ0LmNoYXJDb2RlQXQoZm8pO1J0PU1vfUF0LmNobW9kKGdvLDE0NnxScik7dmFyIFlpPUF0Lm9wZW4oZ28sNTc3KTtBdC53cml0ZShZaSxSdCwwLFJ0Lmxlbmd0aCwwLHNyKSxBdC5jbG9zZShZaSksQXQuY2htb2QoZ28sUnIpfXJldHVybiBnb30sY3JlYXRl'@;
put 'RGV2aWNlOihzdCxndCxSdCx0bik9Pnt2YXIgd249Umkuam9pbjIoInN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KSxndCksc3I9QXQuZ2V0TW9kZSghIVJ0LCEhdG4pO0F0LmNyZWF0ZURldmljZS5tYWpvcnx8KEF0LmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIGxyPUF0'@;
put 'Lm1ha2VkZXYoQXQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIEF0LnJlZ2lzdGVyRGV2aWNlKGxyLHtvcGVuOlJyPT57UnIuc2Vla2FibGU9ITF9LGNsb3NlOlJyPT57dG4mJnRuLmJ1ZmZlciYmdG4uYnVmZmVyLmxlbmd0aCYmdG4oMTApfSxyZWFkOihScixnbyxNbyxmbyxKbyk9'@;
put 'Pntmb3IodmFyIFlpPTAsWXM9MDtZczxmbztZcysrKXt2YXIgSWw7dHJ5e0lsPVJ0KCl9Y2F0Y2h7dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PUlsJiYwPT09WWkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNik7aWYobnVsbD09SWwpYnJlYWs7WWkrKyxnb1tNbytZ'@;
put 'c109SWx9cmV0dXJuIFlpJiYoUnIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksWWl9LHdyaXRlOihScixnbyxNbyxmbyxKbyk9Pntmb3IodmFyIFlpPTA7WWk8Zm87WWkrKyl0cnl7dG4oZ29bTW8rWWldKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIGZvJiYo'@;
put 'UnIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksWWl9fSksQXQubWtkZXYod24sc3IsbHIpfSxmb3JjZUxvYWRGaWxlOnN0PT57aWYoc3QuaXNEZXZpY2V8fHN0LmlzRm9sZGVyfHxzdC5saW5rfHxzdC5jb250ZW50cylyZXR1cm4hMDt0aHJvdyB0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUi'@;
put 'P25ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1w'@;
put 'cmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik6bmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKX0sY3JlYXRlTGF6eUZpbGU6KHN0LGd0LFJ0LHRuLHduKT0+e2Z1bmN0aW9uIHNyKCl7dGhpcy5sZW5ndGhLbm93'@;
put 'bj0hMSx0aGlzLmNodW5rcz1bXX1pZihzci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGZvKXtpZighKGZvPnRoaXMubGVuZ3RoLTF8fGZvPDApKXt2YXIgSm89Zm8ldGhpcy5jaHVua1NpemU7cmV0dXJuIHRoaXMuZ2V0dGVyKGZvL3RoaXMuY2h1bmtTaXplfDApW0pvXX19LHNyLnByb3RvdHlw'@;
put 'ZS5zZXREYXRhR2V0dGVyPWZ1bmN0aW9uKGZvKXt0aGlzLmdldHRlcj1mb30sc3IucHJvdG90eXBlLmNhY2hlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGZvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihmby5vcGVuKCJIRUFEIixSdCwhMSksZm8uc2VuZChudWxsKSwhKGZvLnN0YXR1cz49MjAwJiZm'@;
put 'by5zdGF0dXM8MzAwfHwzMDQ9PT1mby5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK1J0KyIuIFN0YXR1czogIitmby5zdGF0dXMpO3ZhciBKbyxZaT1OdW1iZXIoZm8uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpLFlzPShKbz1mby5nZXRSZXNw'@;
put 'b25zZUhlYWRlcigiQWNjZXB0LVJhbmdlcyIpKSYmImJ5dGVzIj09PUpvLElsPShKbz1mby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmImd6aXAiPT09Sm8sTWw9MTA0ODU3NjtZc3x8KE1sPVlpKTt2YXIgUXU9dGhpcztRdS5zZXREYXRhR2V0dGVyKGNsPT57dmFy'@;
put 'IGtpPWNsKk1sLGpvPShjbCsxKSpNbC0xO2lmKGpvPU1hdGgubWluKGpvLFlpLTEpLHZvaWQgMD09PVF1LmNodW5rc1tjbF0mJihRdS5jaHVua3NbY2xdPSgocWMsUmwpPT57aWYocWM+UmwpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK3FjKyIsICIrUmwrIikgb3Igbm8gYnl0'@;
put 'ZXMgcmVxdWVzdGVkISIpO2lmKFJsPllpLTEpdGhyb3cgbmV3IEVycm9yKCJvbmx5ICIrWWkrIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIG5jPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihuYy5vcGVuKCJHRVQiLFJ0LCExKSxZaSE9PU1sJiZuYy5zZXRSZXF1ZXN0'@;
put 'SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrcWMrIi0iK1JsKSxuYy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixuYy5vdmVycmlkZU1pbWVUeXBlJiZuYy5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIiksbmMuc2VuZChudWxsKSwhKG5jLnN0'@;
put 'YXR1cz49MjAwJiZuYy5zdGF0dXM8MzAwfHwzMDQ9PT1uYy5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK1J0KyIuIFN0YXR1czogIituYy5zdGF0dXMpO3JldHVybiB2b2lkIDAhPT1uYy5yZXNwb25zZT9uZXcgVWludDhBcnJheShuYy5yZXNwb25zZXx8W10pOkdv'@;
put 'KG5jLnJlc3BvbnNlVGV4dHx8IiIsITApfSkoa2ksam8pKSx2b2lkIDA9PT1RdS5jaHVua3NbY2xdKXRocm93IG5ldyBFcnJvcigiZG9YSFIgZmFpbGVkISIpO3JldHVybiBRdS5jaHVua3NbY2xdfSksIUlsJiZZaXx8KE1sPVlpPTEsWWk9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLE1sPVlpLFco'@;
put 'IkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9WWksdGhpcy5fY2h1bmtTaXplPU1sLHRoaXMubGVuZ3RoS25vd249ITB9LHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhy'@;
put 'b3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIGxyPXtpc0RldmljZTohMSx1cmw6UnR9LFJyPUF0LmNyZWF0ZUZpbGUo'@;
put 'c3QsZ3QsbHIsdG4sd24pO2xyLmNvbnRlbnRzP1JyLmNvbnRlbnRzPWxyLmNvbnRlbnRzOmxyLnVybCYmKFJyLmNvbnRlbnRzPW51bGwsUnIudXJsPWxyLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUnIse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVu'@;
put 'dHMubGVuZ3RofX19KTt2YXIgZ289e307ZnVuY3Rpb24gTW8oZm8sSm8sWWksWXMsSWwpe3ZhciBNbD1mby5ub2RlLmNvbnRlbnRzO2lmKElsPj1NbC5sZW5ndGgpcmV0dXJuIDA7dmFyIFF1PU1hdGgubWluKE1sLmxlbmd0aC1JbCxZcyk7aWYoTWwuc2xpY2UpZm9yKHZhciBjbD0wO2NsPFF1'@;
put 'O2NsKyspSm9bWWkrY2xdPU1sW0lsK2NsXTtlbHNlIGZvcihjbD0wO2NsPFF1O2NsKyspSm9bWWkrY2xdPU1sLmdldChJbCtjbCk7cmV0dXJuIFF1fXJldHVybiBPYmplY3Qua2V5cyhSci5zdHJlYW1fb3BzKS5mb3JFYWNoKGZvPT57dmFyIEpvPVJyLnN0cmVhbV9vcHNbZm9dO2dvW2ZvXT1m'@;
put 'dW5jdGlvbigpe3JldHVybiBBdC5mb3JjZUxvYWRGaWxlKFJyKSxKby5hcHBseShudWxsLGFyZ3VtZW50cyl9fSksZ28ucmVhZD0oZm8sSm8sWWksWXMsSWwpPT4oQXQuZm9yY2VMb2FkRmlsZShSciksTW8oZm8sSm8sWWksWXMsSWwpKSxnby5tbWFwPShmbyxKbyxZaSxZcyxJbCk9PntBdC5m'@;
put 'b3JjZUxvYWRGaWxlKFJyKTt2YXIgTWw9Z2EoSm8pO2lmKCFNbCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0OCk7cmV0dXJuIE1vKGZvLGV0LE1sLEpvLFlpKSx7cHRyOk1sLGFsbG9jYXRlZDohMH19LFJyLnN0cmVhbV9vcHM9Z28sUnJ9LGNyZWF0ZVByZWxvYWRlZEZpbGU6KHN0LGd0LFJ0'@;
put 'LHRuLHduLHNyLGxyLFJyLGdvLE1vKT0+e3ZhciBZaSxJbCxRdSxmbz1ndD9Yby5yZXNvbHZlKFJpLmpvaW4yKHN0LGd0KSk6c3Q7ZnVuY3Rpb24gSm8oWWkpe2Z1bmN0aW9uIFlzKElsKXtNbyYmTW8oKSxScnx8QXQuY3JlYXRlRGF0YUZpbGUoc3QsZ3QsSWwsdG4sd24sZ28pLHNyJiZzcigp'@;
put 'LGNuKCl9QnJvd3Nlci5oYW5kbGVkQnlQcmVsb2FkUGx1Z2luKFlpLGZvLFlzLCgpPT57bHImJmxyKCksY24oKX0pfHxZcyhZaSl9T3QoKSwic3RyaW5nIj09dHlwZW9mIFJ0PyhJbD1scixRdT0iYWwgIisoWWk9UnQpLCh2b2lkIDApKFlpLGNsPT57WmUoY2wsJ0xvYWRpbmcgZGF0YSBmaWxl'@;
put 'ICInK1lpKyciIGZhaWxlZCAobm8gYXJyYXlCdWZmZXIpLicpLChZaT0+e0pvKFlpKX0pKG5ldyBVaW50OEFycmF5KGNsKSksUXUmJmNuKCl9LGNsPT57aWYoIUlsKXRocm93J0xvYWRpbmcgZGF0YSBmaWxlICInK1lpKyciIGZhaWxlZC4nO0lsKCl9KSxRdSYmT3QoKSk6Sm8oUnQpfSxpbmRl'@;
put 'eGVkREI6KCk9PndpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQixEQl9OQU1FOigpPT4iRU1fRlNfIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsREJfVkVSU0lPTjoyMCxEQl9TVE9SRV9OQU1F'@;
put 'OiJGSUxFX0RBVEEiLHNhdmVGaWxlc1RvREI6KHN0LGd0LFJ0KT0+e2d0PWd0fHwoKCk9Pnt9KSxSdD1SdHx8KCgpPT57fSk7dmFyIHRuPUF0LmluZGV4ZWREQigpO3RyeXt2YXIgd249dG4ub3BlbihBdC5EQl9OQU1FKCksQXQuREJfVkVSU0lPTil9Y2F0Y2goc3Ipe3JldHVybiBSdChzcil9'@;
put 'd24ub251cGdyYWRlbmVlZGVkPSgpPT57VygiY3JlYXRpbmcgZGIiKSx3bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUoQXQuREJfU1RPUkVfTkFNRSl9LHduLm9uc3VjY2Vzcz0oKT0+e3ZhciBzcj13bi5yZXN1bHQudHJhbnNhY3Rpb24oW0F0LkRCX1NUT1JFX05BTUVdLCJyZWFkd3JpdGUi'@;
put 'KSxscj1zci5vYmplY3RTdG9yZShBdC5EQl9TVE9SRV9OQU1FKSxScj0wLGdvPTAsTW89c3QubGVuZ3RoO2Z1bmN0aW9uIGZvKCl7MD09Z28/Z3QoKTpSdCgpfXN0LmZvckVhY2goSm89Pnt2YXIgWWk9bHIucHV0KEF0LmFuYWx5emVQYXRoKEpvKS5vYmplY3QuY29udGVudHMsSm8pO1lpLm9u'@;
put 'c3VjY2Vzcz0oKT0+eysrUnIrZ289PU1vJiZmbygpfSxZaS5vbmVycm9yPSgpPT57Z28rKyxScitnbz09TW8mJmZvKCl9fSksc3Iub25lcnJvcj1SdH0sd24ub25lcnJvcj1SdH0sbG9hZEZpbGVzRnJvbURCOihzdCxndCxSdCk9PntndD1ndHx8KCgpPT57fSksUnQ9UnR8fCgoKT0+e30pO3Zh'@;
put 'ciB0bj1BdC5pbmRleGVkREIoKTt0cnl7dmFyIHduPXRuLm9wZW4oQXQuREJfTkFNRSgpLEF0LkRCX1ZFUlNJT04pfWNhdGNoKHNyKXtyZXR1cm4gUnQoc3IpfXduLm9udXBncmFkZW5lZWRlZD1SdCx3bi5vbnN1Y2Nlc3M9KCk9Pnt2YXIgc3I9d24ucmVzdWx0O3RyeXt2YXIgbHI9c3IudHJh'@;
put 'bnNhY3Rpb24oW0F0LkRCX1NUT1JFX05BTUVdLCJyZWFkb25seSIpfWNhdGNoKFlpKXtyZXR1cm4gdm9pZCBSdChZaSl9dmFyIFJyPWxyLm9iamVjdFN0b3JlKEF0LkRCX1NUT1JFX05BTUUpLGdvPTAsTW89MCxmbz1zdC5sZW5ndGg7ZnVuY3Rpb24gSm8oKXswPT1Nbz9ndCgpOlJ0KCl9c3Qu'@;
put 'Zm9yRWFjaChZaT0+e3ZhciBZcz1Sci5nZXQoWWkpO1lzLm9uc3VjY2Vzcz0oKT0+e0F0LmFuYWx5emVQYXRoKFlpKS5leGlzdHMmJkF0LnVubGluayhZaSksQXQuY3JlYXRlRGF0YUZpbGUoUmkuZGlybmFtZShZaSksUmkuYmFzZW5hbWUoWWkpLFlzLnJlc3VsdCwhMCwhMCwhMCksKytnbytN'@;
put 'bz09Zm8mJkpvKCl9LFlzLm9uZXJyb3I9KCk9PntNbysrLGdvK01vPT1mbyYmSm8oKX19KSxsci5vbmVycm9yPVJ0fSx3bi5vbmVycm9yPVJ0fX0sRGk9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdDpmdW5jdGlvbihzdCxndCxSdCl7aWYoUmkuaXNBYnMoZ3QpKXJldHVybiBndDt2'@;
put 'YXIgdG47aWYodG49LTEwMD09PXN0P0F0LmN3ZCgpOkRpLmdldFN0cmVhbUZyb21GRChzdCkucGF0aCwwPT1ndC5sZW5ndGgpe2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7cmV0dXJuIHRufXJldHVybiBSaS5qb2luMih0bixndCl9LGRvU3RhdDpmdW5jdGlvbihzdCxndCxS'@;
put 'dCl7dHJ5e3ZhciB0bj1zdChndCl9Y2F0Y2goUnIpe2lmKFJyJiZSci5ub2RlJiZSaS5ub3JtYWxpemUoZ3QpIT09Umkubm9ybWFsaXplKEF0LmdldFBhdGgoUnIubm9kZSkpKXJldHVybi01NDt0aHJvdyBScn1TdFtSdD4+Ml09dG4uZGV2LFN0W1J0Kzg+PjJdPXRuLmlubyxTdFtSdCsxMj4+'@;
put 'Ml09dG4ubW9kZSxKdFtSdCsxNj4+Ml09dG4ubmxpbmssU3RbUnQrMjA+PjJdPXRuLnVpZCxTdFtSdCsyND4+Ml09dG4uZ2lkLFN0W1J0KzI4Pj4yXT10bi5yZGV2LE9uPVt0bi5zaXplPj4+MCwoanI9dG4uc2l6ZSwrTWF0aC5hYnMoanIpPj0xP2pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxv'@;
put 'b3IoanIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzQwPj4yXT1PblswXSxTdFtSdCs0ND4+Ml09T25bMV0sU3RbUnQrNDg+PjJdPTQwOTYsU3RbUnQrNTI+PjJdPXRuLmJsb2Nrczt2'@;
put 'YXIgd249dG4uYXRpbWUuZ2V0VGltZSgpLHNyPXRuLm10aW1lLmdldFRpbWUoKSxscj10bi5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIE9uPVtNYXRoLmZsb29yKHduLzFlMyk+Pj4wLChqcj1NYXRoLmZsb29yKHduLzFlMyksK01hdGguYWJzKGpyKT49MT9qcj4wPygwfE1hdGgubWluKCtNYXRo'@;
put 'LmZsb29yKGpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCs1Nj4+Ml09T25bMF0sU3RbUnQrNjA+PjJdPU9uWzFdLEp0W1J0KzY0Pj4yXT13biUxZTMqMWUzLE9uPVtNYXRoLmZsb29y'@;
put 'KHNyLzFlMyk+Pj4wLChqcj1NYXRoLmZsb29yKHNyLzFlMyksK01hdGguYWJzKGpyKT49MT9qcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKGpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxT'@;
put 'dFtSdCs3Mj4+Ml09T25bMF0sU3RbUnQrNzY+PjJdPU9uWzFdLEp0W1J0KzgwPj4yXT1zciUxZTMqMWUzLE9uPVtNYXRoLmZsb29yKGxyLzFlMyk+Pj4wLChqcj1NYXRoLmZsb29yKGxyLzFlMyksK01hdGguYWJzKGpyKT49MT9qcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKGpyLzQyOTQ5'@;
put 'NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCs4OD4+Ml09T25bMF0sU3RbUnQrOTI+PjJdPU9uWzFdLEp0W1J0Kzk2Pj4yXT1sciUxZTMqMWUzLE9uPVt0bi5pbm8+Pj4wLChqcj10bi5pbm8sK01h'@;
put 'dGguYWJzKGpyKT49MT9qcj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKGpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCsxMDQ+PjJdPU9uWzBdLFN0W1J0KzEwOD4+Ml09T25bMV0s'@;
put 'MH0sZG9Nc3luYzpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7aWYoIUF0LmlzRmlsZShndC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtpZigyJnRuKXJldHVybiAwO3ZhciBzcj15dC5zbGljZShzdCxzdCtSdCk7QXQubXN5bmMoZ3Qsc3Isd24sUnQsdG4pfSx2YXJh'@;
put 'cmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRGkudmFyYXJncys9NCxTdFtEaS52YXJhcmdzLTQ+PjJdfSxnZXRTdHI6ZnVuY3Rpb24oc3Qpe3JldHVybiBjcihzdCl9LGdldFN0cmVhbUZyb21GRDpmdW5jdGlvbihzdCl7dmFyIGd0PUF0LmdldFN0cmVhbShzdCk7aWYoIWd0KXRo'@;
put 'cm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO3JldHVybiBndH19LFFzPVtdO2Z1bmN0aW9uIEZzKHN0KXt0cnl7cmV0dXJuIHBlLmdyb3coc3QtaXQuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxMaShwZS5idWZmZXIpLDF9Y2F0Y2h7fX12YXIgdGM9e307ZnVuY3Rpb24gQ2EoKXtpZighQ2Euc3Ry'@;
put 'aW5ncyl7dmFyIHN0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBd'@;
put 'fHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsXzpffHwiLi90aGlzLnByb2dyYW0ifTtmb3IodmFyIGd0IGluIHRjKXZvaWQgMD09PXRjW2d0XT9kZWxldGUgc3RbZ3RdOnN0W2d0XT10Y1tndF07dmFyIFJ0PVtdO2Zvcih2YXIgZ3QgaW4gc3QpUnQucHVzaChndCsiPSIrc3RbZ3Rd'@;
put 'KTtDYS5zdHJpbmdzPVJ0fXJldHVybiBDYS5zdHJpbmdzfWZ1bmN0aW9uIExsKHN0KXtyZXR1cm4gc3QlND09MCYmKHN0JTEwMCE9MHx8c3QlNDAwPT0wKX12YXIgeDI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSx1ND1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAs'@;
put 'MzEsMzAsMzFdLENkPWZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXtzdHx8KHN0PXRoaXMpLHRoaXMucGFyZW50PXN0LHRoaXMubW91bnQ9c3QubW91bnQsdGhpcy5tb3VudGVkPW51bGwsdGhpcy5pZD1BdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9Z3QsdGhpcy5tb2RlPVJ0LHRoaXMubm9kZV9vcHM9'@;
put 'e30sdGhpcy5zdHJlYW1fb3BzPXt9LHRoaXMucmRldj10bn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2QucHJvdG90eXBlLHtyZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMzY1PT0oMzY1JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihzdCl7c3Q/dGhpcy5tb2RlfD0zNjU6dGhpcy5t'@;
put 'b2RlJj0tMzY2fX0sd3JpdGU6e2dldDpmdW5jdGlvbigpe3JldHVybiAxNDY9PSgxNDYmdGhpcy5tb2RlKX0sc2V0OmZ1bmN0aW9uKHN0KXtzdD90aGlzLm1vZGV8PTE0Njp0aGlzLm1vZGUmPS0xNDd9fSxpc0ZvbGRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEF0LmlzRGlyKHRoaXMubW9k'@;
put 'ZSl9fSxpc0RldmljZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEF0LmlzQ2hyZGV2KHRoaXMubW9kZSl9fX0pLEF0LkZTTm9kZT1DZCxBdC5zdGF0aWNJbml0KCk7dmFyIEp1PXtiOmZ1bmN0aW9uKHN0LGd0LFJ0KXt0aHJvdyBuZXcgTnIoc3QpLmluaXQoZ3QsUnQpLHN0fSxsOmZ1bmN0aW9u'@;
put 'KHN0LGd0LFJ0LHRuKXt0cnl7aWYoZ3Q9RGkuZ2V0U3RyKGd0KSxndD1EaS5jYWxjdWxhdGVBdChzdCxndCksLTgmUnQpcmV0dXJuLTI4O3ZhciB3bj1BdC5sb29rdXBQYXRoKGd0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCF3bilyZXR1cm4tNDQ7dmFyIHNyPSIiO3JldHVybiA0JlJ0JiYoc3Ir'@;
put 'PSJyIiksMiZSdCYmKHNyKz0idyIpLDEmUnQmJihzcis9IngiKSxzciYmQXQubm9kZVBlcm1pc3Npb25zKHduLHNyKT8tMjowfWNhdGNoKGxyKXtpZih2b2lkIDA9PT1BdHx8IShsciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGxyO3JldHVybi1sci5lcnJub319LGk6ZnVuY3Rp'@;
put 'b24oc3QsZ3QsUnQpe0RpLnZhcmFyZ3M9UnQ7dHJ5e3ZhciB0bj1EaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3N3aXRjaChndCl7Y2FzZSAwOnJldHVybih3bj1EaS5nZXQoKSk8MD8tMjg6QXQuY3JlYXRlU3RyZWFtKHRuLHduKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDc6cmV0dXJu'@;
put 'IDA7Y2FzZSAzOnJldHVybiB0bi5mbGFncztjYXNlIDQ6dmFyIHduPURpLmdldCgpO3JldHVybiB0bi5mbGFnc3w9d24sMDtjYXNlIDU6cmV0dXJuIHduPURpLmdldCgpLEV0W3duKzA+PjFdPTIsMDtjYXNlIDE2OmNhc2UgODpkZWZhdWx0OnJldHVybi0yODtjYXNlIDk6cmV0dXJuIFN0W013'@;
put 'KCk+PjJdPTI4LC0xfX1jYXRjaChscil7aWYodm9pZCAwPT09QXR8fCEobHIgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBscjtyZXR1cm4tbHIuZXJybm99fSx3OmZ1bmN0aW9uKHN0LGd0KXt0cnl7dmFyIFJ0PURpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIERpLmRvU3Rh'@;
put 'dChBdC5zdGF0LFJ0LnBhdGgsZ3QpfWNhdGNoKHRuKXtpZih2b2lkIDA9PT1BdHx8ISh0biBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHRuO3JldHVybi10bi5lcnJub319LHg6ZnVuY3Rpb24oc3QsZ3QsUnQpe0RpLnZhcmFyZ3M9UnQ7dHJ5e3ZhciB0bj1EaS5nZXRTdHJlYW1G'@;
put 'cm9tRkQoc3QpO3N3aXRjaChndCl7Y2FzZSAyMTUwOTpjYXNlIDIxNTA1OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmNhc2UgMjE1MjM6Y2FzZSAyMTUyNDpyZXR1cm4gdG4udHR5PzA6LTU5O2Nhc2UgMjE1MTk6aWYo'@;
put 'IXRuLnR0eSlyZXR1cm4tNTk7dmFyIHduPURpLmdldCgpO3JldHVybiBTdFt3bj4+Ml09MCwwO2Nhc2UgMjE1MjA6cmV0dXJuIHRuLnR0eT8tMjg6LTU5O2Nhc2UgMjE1MzE6cmV0dXJuIHduPURpLmdldCgpLEF0LmlvY3RsKHRuLGd0LHduKTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goc3Ip'@;
put 'e2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuLXNyLmVycm5vfX0sdTpmdW5jdGlvbihzdCxndCxSdCx0bil7dHJ5e2d0PURpLmdldFN0cihndCk7dmFyIHduPTI1NiZ0bixzcj00MDk2JnRuO3JldHVybiB0biY9LTY0MDEsZ3Q9'@;
put 'RGkuY2FsY3VsYXRlQXQoc3QsZ3Qsc3IpLERpLmRvU3RhdCh3bj9BdC5sc3RhdDpBdC5zdGF0LGd0LFJ0KX1jYXRjaChscil7aWYodm9pZCAwPT09QXR8fCEobHIgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBscjtyZXR1cm4tbHIuZXJybm99fSxkOmZ1bmN0aW9uKHN0LGd0LFJ0'@;
put 'LHRuKXtEaS52YXJhcmdzPXRuO3RyeXtndD1EaS5nZXRTdHIoZ3QpLGd0PURpLmNhbGN1bGF0ZUF0KHN0LGd0KTt2YXIgd249dG4/RGkuZ2V0KCk6MDtyZXR1cm4gQXQub3BlbihndCxSdCx3bikuZmR9Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9F'@;
put 'cnJvcikpdGhyb3cgc3I7cmV0dXJuLXNyLmVycm5vfX0sdjpmdW5jdGlvbihzdCxndCl7dHJ5e3JldHVybiBzdD1EaS5nZXRTdHIoc3QpLERpLmRvU3RhdChBdC5zdGF0LHN0LGd0KX1jYXRjaChSdCl7aWYodm9pZCAwPT09QXR8fCEoUnQgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJv'@;
put 'dyBSdDtyZXR1cm4tUnQuZXJybm99fSxwOmZ1bmN0aW9uKHN0LGd0LFJ0KXt0cnl7cmV0dXJuIGd0PURpLmdldFN0cihndCksZ3Q9RGkuY2FsY3VsYXRlQXQoc3QsZ3QpLDA9PT1SdD9BdC51bmxpbmsoZ3QpOjUxMj09PVJ0P0F0LnJtZGlyKGd0KTpFbigiSW52YWxpZCBmbGFncyBwYXNzZWQg'@;
put 'dG8gdW5saW5rYXQiKSwwfWNhdGNoKHRuKXtpZih2b2lkIDA9PT1BdHx8ISh0biBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHRuO3JldHVybi10bi5lcnJub319LGo6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scTpmdW5jdGlvbihzdCxndCxSdCx0bix3bixzcixscil7dHJ5e3ZhciBS'@;
put 'cj1EaS5nZXRTdHJlYW1Gcm9tRkQodG4pLGdvPUF0Lm1tYXAoUnIsc3Qsd24sZ3QsUnQpLE1vPWdvLnB0cjtyZXR1cm4gU3Rbc3I+PjJdPWdvLmFsbG9jYXRlZCxKdFtscj4+Ml09TW8sMH1jYXRjaChmbyl7aWYodm9pZCAwPT09QXR8fCEoZm8gaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0'@;
put 'aHJvdyBmbztyZXR1cm4tZm8uZXJybm99fSxyOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduLHNyKXt0cnl7dmFyIGxyPURpLmdldFN0cmVhbUZyb21GRCh3bik7MiZSdCYmRGkuZG9Nc3luYyhzdCxscixndCx0bixzciksQXQubXVubWFwKGxyKX1jYXRjaChScil7aWYodm9pZCAwPT09QXR8fCEo'@;
put 'UnIgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBScjtyZXR1cm4tUnIuZXJybm99fSxhOmZ1bmN0aW9uKCl7RW4oIiIpfSx5OmZ1bmN0aW9uKHN0LGd0LFJ0KXtyZXR1cm4gZnVuY3Rpb24gbGEoc3QsZ3QsUnQpe3ZhciB0bj1mdW5jdGlvbih3bixzcil7dmFyIGxyO2ZvcihRcy5s'@;
put 'ZW5ndGg9MCxzcj4+PTI7bHI9eXRbd24rK107KXNyKz0xMDUhPWxyJnNyLFFzLnB1c2goMTA1PT1scj9TdFtzcl06bm5bc3IrKz4+MV0pLCsrc3I7cmV0dXJuIFFzfShndCxSdCk7cmV0dXJuIE9yW3N0XS5hcHBseShudWxsLHRuKX0oc3QsZ3QsUnQpfSxlOmZ1bmN0aW9uKCl7cmV0dXJuIERh'@;
put 'dGUubm93KCl9LGs6ZnVuY3Rpb24oc3QsZ3QsUnQpe3l0LmNvcHlXaXRoaW4oc3QsZ3QsZ3QrUnQpfSxvOmZ1bmN0aW9uKHN0KXt2YXIgZ3QsdG49eXQubGVuZ3RoLHduPTIxNDc0ODM2NDg7aWYoKHN0Pj4+PTApPnduKXJldHVybiExO2Zvcih2YXIgc3I9MTtzcjw9NDtzcio9Mil7dmFyIGxy'@;
put 'PXRuKigxKy4yL3NyKTtpZihscj1NYXRoLm1pbihscixzdCsxMDA2NjMyOTYpLEZzKE1hdGgubWluKHduLChndD1NYXRoLm1heChzdCxscikpKyg2NTUzNi1ndCU2NTUzNiklNjU1MzYpKSlyZXR1cm4hMH1yZXR1cm4hMX0sczpmdW5jdGlvbihzdCxndCl7dmFyIFJ0PTA7cmV0dXJuIENhKCku'@;
put 'Zm9yRWFjaChmdW5jdGlvbih0bix3bil7dmFyIHNyPWd0K1J0O0p0W3N0KzQqd24+PjJdPXNyLGZ1bmN0aW9uKGxyLFJyLGdvKXtmb3IodmFyIE1vPTA7TW88bHIubGVuZ3RoOysrTW8pZXRbUnIrKz4+MF09bHIuY2hhckNvZGVBdChNbyk7ZXRbUnI+PjBdPTB9KHRuLHNyKSxSdCs9dG4ubGVu'@;
put 'Z3RoKzF9KSwwfSx0OmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9Q2EoKTtKdFtzdD4+Ml09UnQubGVuZ3RoO3ZhciB0bj0wO3JldHVybiBSdC5mb3JFYWNoKGZ1bmN0aW9uKHduKXt0bis9d24ubGVuZ3RoKzF9KSxKdFtndD4+Ml09dG4sMH0sZjpmdW5jdGlvbihzdCxndCl7IWZ1bmN0aW9uIFJo'@;
put 'KHN0KXt3ZXx8KGQub25FeGl0JiZkLm9uRXhpdChzdCksRWU9ITApLFQoc3QsbmV3ICRyKHN0KSl9KHN0KX0sYzpmdW5jdGlvbihzdCl7dHJ5e3ZhciBndD1EaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3JldHVybiBBdC5jbG9zZShndCksMH1jYXRjaChSdCl7aWYodm9pZCAwPT09QXR8fCEoUnQg'@;
put 'aW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBSdDtyZXR1cm4gUnQuZXJybm99fSxnOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7dmFyIHduPWZ1bmN0aW9uKHNyLGxyLFJyLGdvKXtmb3IodmFyIE1vPTAsZm89MDtmbzxScjtmbysrKXt2YXIgSm89SnRbbHI+PjJdLFlpPUp0W2xy'@;
put 'KzQ+PjJdO2xyKz04O3ZhciBZcz1BdC5yZWFkKHNyLGV0LEpvLFlpLHZvaWQgMCk7aWYoWXM8MClyZXR1cm4tMTtpZihNbys9WXMsWXM8WWkpYnJlYWt9cmV0dXJuIE1vfShEaS5nZXRTdHJlYW1Gcm9tRkQoc3QpLGd0LFJ0KTtyZXR1cm4gSnRbdG4+PjJdPXduLDB9Y2F0Y2goc3Ipe2lmKHZv'@;
put 'aWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuIHNyLmVycm5vfX0sbTpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7dHJ5e3ZhciBzcj0oZ289UnQpKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISEoUnI9Z3QpPyhScj4+PjApKzQyOTQ5NjcyOTYq'@;
put 'Z286TmFOO2lmKGlzTmFOKHNyKSlyZXR1cm4gNjE7dmFyIGxyPURpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIEF0Lmxsc2Vlayhscixzcix0biksT249W2xyLnBvc2l0aW9uPj4+MCwoanI9bHIucG9zaXRpb24sK01hdGguYWJzKGpyKT49MT9qcj4wPygwfE1hdGgubWluKCtNYXRoLmZs'@;
put 'b29yKGpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFt3bj4+Ml09T25bMF0sU3Rbd24rND4+Ml09T25bMV0sbHIuZ2V0ZGVudHMmJjA9PT1zciYmMD09PXRuJiYobHIuZ2V0ZGVudHM9bnVs'@;
put 'bCksMH1jYXRjaChNbyl7aWYodm9pZCAwPT09QXR8fCEoTW8gaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBNbztyZXR1cm4gTW8uZXJybm99dmFyIFJyLGdvfSxoOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7dmFyIHduPWZ1bmN0aW9uKHNyLGxyLFJyLGdvKXtmb3IodmFyIE1v'@;
put 'PTAsZm89MDtmbzxScjtmbysrKXt2YXIgSm89SnRbbHI+PjJdLFlpPUp0W2xyKzQ+PjJdO2xyKz04O3ZhciBZcz1BdC53cml0ZShzcixldCxKbyxZaSx2b2lkIDApO2lmKFlzPDApcmV0dXJuLTE7TW8rPVlzfXJldHVybiBNb30oRGkuZ2V0U3RyZWFtRnJvbUZEKHN0KSxndCxSdCk7cmV0dXJu'@;
put 'IEp0W3RuPj4yXT13biwwfWNhdGNoKHNyKXtpZih2b2lkIDA9PT1BdHx8IShzciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHNyO3JldHVybiBzci5lcnJub319LG46ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3JldHVybiBmdW5jdGlvbiBPaChzdCxndCxSdCx0bil7dmFyIHdu'@;
put 'PVN0W3RuKzQwPj4yXSxzcj17dG1fc2VjOlN0W3RuPj4yXSx0bV9taW46U3RbdG4rND4+Ml0sdG1faG91cjpTdFt0bis4Pj4yXSx0bV9tZGF5OlN0W3RuKzEyPj4yXSx0bV9tb246U3RbdG4rMTY+PjJdLHRtX3llYXI6U3RbdG4rMjA+PjJdLHRtX3dkYXk6U3RbdG4rMjQ+PjJdLHRtX3lkYXk6'@;
put 'U3RbdG4rMjg+PjJdLHRtX2lzZHN0OlN0W3RuKzMyPj4yXSx0bV9nbXRvZmY6U3RbdG4rMzY+PjJdLHRtX3pvbmU6d24/Y3Iod24pOiIifSxscj1jcihSdCksUnI9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwi'@;
put 'JXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIl'@;
put 'ZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgZ28gaW4gUnIpbHI9bHIucmVwbGFj'@;
put 'ZShuZXcgUmVnRXhwKGdvLCJnIiksUnJbZ29dKTt2YXIgTW89WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGZvPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJK'@;
put 'dWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBKbyhraSxqbyxxYyl7Zm9yKHZhciBSbD0ibnVtYmVyIj09dHlwZW9mIGtpP2tpLnRvU3RyaW5nKCk6a2l8fCIiO1JsLmxlbmd0aDxqbzspUmw9cWNbMF0rUmw7cmV0dXJu'@;
put 'IFJsfWZ1bmN0aW9uIFlpKGtpLGpvKXtyZXR1cm4gSm8oa2ksam8sIjAiKX1mdW5jdGlvbiBZcyhraSxqbyl7ZnVuY3Rpb24gcWMobmMpe3JldHVybiBuYzwwPy0xOm5jPjA/MTowfXZhciBSbDtyZXR1cm4gMD09PShSbD1xYyhraS5nZXRGdWxsWWVhcigpLWpvLmdldEZ1bGxZZWFyKCkpKSYm'@;
put 'MD09PShSbD1xYyhraS5nZXRNb250aCgpLWpvLmdldE1vbnRoKCkpKSYmKFJsPXFjKGtpLmdldERhdGUoKS1qby5nZXREYXRlKCkpKSxSbH1mdW5jdGlvbiBJbChraSl7c3dpdGNoKGtpLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKGtpLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7'@;
put 'Y2FzZSAxOnJldHVybiBraTtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGtpLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKGtpLmdldEZ1bGxZZWFyKCksMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKGtpLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJu'@;
put 'IG5ldyBEYXRlKGtpLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShraS5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBNbChraSl7dmFyIGpvPWZ1bmN0aW9uKFJydCxWVCl7Zm9yKHZhciBFMT1uZXcgRGF0ZShScnQuZ2V0VGltZSgpKTtWVD4w'@;
put 'Oyl7dmFyIE9ydD1MbChFMS5nZXRGdWxsWWVhcigpKSxsWj1FMS5nZXRNb250aCgpLE1sZT0oT3J0P3gyOnU0KVtsWl07aWYoIShWVD5NbGUtRTEuZ2V0RGF0ZSgpKSlyZXR1cm4gRTEuc2V0RGF0ZShFMS5nZXREYXRlKCkrVlQpLEUxO1ZULT1NbGUtRTEuZ2V0RGF0ZSgpKzEsRTEuc2V0RGF0'@;
put 'ZSgxKSxsWjwxMT9FMS5zZXRNb250aChsWisxKTooRTEuc2V0TW9udGgoMCksRTEuc2V0RnVsbFllYXIoRTEuZ2V0RnVsbFllYXIoKSsxKSl9cmV0dXJuIEUxfShuZXcgRGF0ZShraS50bV95ZWFyKzE5MDAsMCwxKSxraS50bV95ZGF5KSxxYz1uZXcgRGF0ZShqby5nZXRGdWxsWWVhcigpLDAs'@;
put 'NCksUmw9bmV3IERhdGUoam8uZ2V0RnVsbFllYXIoKSsxLDAsNCksbmM9SWwocWMpLElydD1JbChSbCk7cmV0dXJuIFlzKG5jLGpvKTw9MD9ZcyhJcnQsam8pPD0wP2pvLmdldEZ1bGxZZWFyKCkrMTpqby5nZXRGdWxsWWVhcigpOmpvLmdldEZ1bGxZZWFyKCktMX12YXIgUXU9eyIlYSI6ZnVu'@;
put 'Y3Rpb24oa2kpe3JldHVybiBNb1traS50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKX0sIiVBIjpmdW5jdGlvbihraSl7cmV0dXJuIE1vW2tpLnRtX3dkYXldfSwiJWIiOmZ1bmN0aW9uKGtpKXtyZXR1cm4gZm9ba2kudG1fbW9uXS5zdWJzdHJpbmcoMCwzKX0sIiVCIjpmdW5jdGlvbihraSl7cmV0'@;
put 'dXJuIGZvW2tpLnRtX21vbl19LCIlQyI6ZnVuY3Rpb24oa2kpe3JldHVybiBZaSgoa2kudG1feWVhcisxOTAwKS8xMDB8MCwyKX0sIiVkIjpmdW5jdGlvbihraSl7cmV0dXJuIFlpKGtpLnRtX21kYXksMil9LCIlZSI6ZnVuY3Rpb24oa2kpe3JldHVybiBKbyhraS50bV9tZGF5LDIsIiAiKX0s'@;
put 'IiVnIjpmdW5jdGlvbihraSl7cmV0dXJuIE1sKGtpKS50b1N0cmluZygpLnN1YnN0cmluZygyKX0sIiVHIjpmdW5jdGlvbihraSl7cmV0dXJuIE1sKGtpKX0sIiVIIjpmdW5jdGlvbihraSl7cmV0dXJuIFlpKGtpLnRtX2hvdXIsMil9LCIlSSI6ZnVuY3Rpb24oa2kpe3ZhciBqbz1raS50bV9o'@;
put 'b3VyO3JldHVybiAwPT1qbz9qbz0xMjpqbz4xMiYmKGpvLT0xMiksWWkoam8sMil9LCIlaiI6ZnVuY3Rpb24oa2kpe3JldHVybiBZaShraS50bV9tZGF5K2Z1bmN0aW9uKGpvLHFjKXtmb3IodmFyIFJsPTAsbmM9MDtuYzw9cWM7UmwrPWpvW25jKytdKTtyZXR1cm4gUmx9KExsKGtpLnRtX3ll'@;
put 'YXIrMTkwMCk/eDI6dTQsa2kudG1fbW9uLTEpLDMpfSwiJW0iOmZ1bmN0aW9uKGtpKXtyZXR1cm4gWWkoa2kudG1fbW9uKzEsMil9LCIlTSI6ZnVuY3Rpb24oa2kpe3JldHVybiBZaShraS50bV9taW4sMil9LCIlbiI6ZnVuY3Rpb24oKXtyZXR1cm4iXG4ifSwiJXAiOmZ1bmN0aW9uKGtpKXty'@;
put 'ZXR1cm4ga2kudG1faG91cj49MCYma2kudG1faG91cjwxMj8iQU0iOiJQTSJ9LCIlUyI6ZnVuY3Rpb24oa2kpe3JldHVybiBZaShraS50bV9zZWMsMil9LCIldCI6ZnVuY3Rpb24oKXtyZXR1cm4iXHQifSwiJXUiOmZ1bmN0aW9uKGtpKXtyZXR1cm4ga2kudG1fd2RheXx8N30sIiVVIjpmdW5j'@;
put 'dGlvbihraSl7cmV0dXJuIFlpKE1hdGguZmxvb3IoKGtpLnRtX3lkYXkrNy1raS50bV93ZGF5KS83KSwyKX0sIiVWIjpmdW5jdGlvbihraSl7dmFyIGpvPU1hdGguZmxvb3IoKGtpLnRtX3lkYXkrNy0oa2kudG1fd2RheSs2KSU3KS83KTtpZigoa2kudG1fd2RheSszNzEta2kudG1feWRheS0y'@;
put 'KSU3PD0yJiZqbysrLGpvKXtpZig1Mz09am8pe3ZhciBxYz0oa2kudG1fd2RheSszNzEta2kudG1feWRheSklNzs0PT1xY3x8Mz09cWMmJkxsKGtpLnRtX3llYXIpfHwoam89MSl9fWVsc2V7am89NTI7dmFyIFJsPShraS50bV93ZGF5Kzcta2kudG1feWRheS0xKSU3Oyg0PT1SbHx8NT09Umwm'@;
put 'JkxsKGtpLnRtX3llYXIlNDAwLTEpKSYmam8rK31yZXR1cm4gWWkoam8sMil9LCIldyI6ZnVuY3Rpb24oa2kpe3JldHVybiBraS50bV93ZGF5fSwiJVciOmZ1bmN0aW9uKGtpKXtyZXR1cm4gWWkoTWF0aC5mbG9vcigoa2kudG1feWRheSs3LShraS50bV93ZGF5KzYpJTcpLzcpLDIpfSwiJXki'@;
put 'OmZ1bmN0aW9uKGtpKXtyZXR1cm4oa2kudG1feWVhcisxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKX0sIiVZIjpmdW5jdGlvbihraSl7cmV0dXJuIGtpLnRtX3llYXIrMTkwMH0sIiV6IjpmdW5jdGlvbihraSl7dmFyIGpvPWtpLnRtX2dtdG9mZjtyZXR1cm4oam8+PTA/IisiOiItIikr'@;
put 'KCIwMDAwIisoam89KGpvPU1hdGguYWJzKGpvKS82MCkvNjAqMTAwK2pvJTYwKSkuc2xpY2UoLTQpfSwiJVoiOmZ1bmN0aW9uKGtpKXtyZXR1cm4ga2kudG1fem9uZX0sIiUlIjpmdW5jdGlvbigpe3JldHVybiIlIn19O2Zvcih2YXIgZ28gaW4gbHI9bHIucmVwbGFjZSgvJSUvZywiXDBcMCIp'@;
put 'LFF1KWxyLmluY2x1ZGVzKGdvKSYmKGxyPWxyLnJlcGxhY2UobmV3IFJlZ0V4cChnbywiZyIpLFF1W2dvXShzcikpKTt2YXIgY2w9R28obHI9bHIucmVwbGFjZSgvXDBcMC9nLCIlIiksITEpO3JldHVybiBjbC5sZW5ndGg+Z3Q/MDooZXQuc2V0KGNsLHN0KSxjbC5sZW5ndGgtMSl9KHN0LGd0'@;
put 'LFJ0LHRuKX19OyhmdW5jdGlvbigpe3ZhciBzdD17YTpKdX07ZnVuY3Rpb24gZ3Qod24sc3Ipe2QuYXNtPXduLmV4cG9ydHMsTGkoKHBlPWQuYXNtLnopLmJ1ZmZlciksUW4udW5zaGlmdChkLmFzbS5BKSxjbigpfWZ1bmN0aW9uIFJ0KHduKXtndCh3bi5pbnN0YW5jZSl9ZnVuY3Rpb24gdG4o'@;
put 'd24pe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIFByKHN0KXt0cnl7aWYoc3Q9PWZyJiZoKXJldHVybiBuZXcgVWludDhBcnJheShoKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9'@;
put 'Y2F0Y2goZ3Qpe0VuKGd0KX19KGZyKX0pLnRoZW4oZnVuY3Rpb24oc3Ipe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShzcixzdCl9KS50aGVuKGZ1bmN0aW9uKHNyKXtyZXR1cm4gc3J9KS50aGVuKHduLGZ1bmN0aW9uKHNyKXtpZSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHBy'@;
put 'ZXBhcmUgd2FzbTogIitzciksRW4oc3IpfSl9aWYoT3QoKSxkLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIGQuaW5zdGFudGlhdGVXYXNtKHN0LGd0KX1jYXRjaCh3bil7aWUoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrd24pLGEod24p'@;
put 'fShofHwiZnVuY3Rpb24iIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fFBuKGZyKXx8ZnVuY3Rpb24gSm4oc3Qpe3JldHVybiBzdC5zdGFydHNXaXRoKCJmaWxlOi8vIil9KGZyKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZldGNoP3RuKFJ0KTpmZXRjaChmcix7Y3Jl'@;
put 'ZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24od24pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3bixzdCkudGhlbihSdCxmdW5jdGlvbihzcil7cmV0dXJuIGllKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitzciksaWUoImZh'@;
put 'bGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksdG4oUnQpfSl9KSkuY2F0Y2goYSl9KSgpLGQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKGQuX19fd2FzbV9jYWxsX2N0b3JzPWQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIE0x'@;
put 'PWQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTTE9ZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1kLmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE11PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZp'@;
put 'el9HcmFwaHZpel8yPWZ1bmN0aW9uKCl7cmV0dXJuKE11PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPWQuYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD1mdW5jdGlvbigpe3JldHVybihh'@;
put 'dT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPWQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seDE9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKHgxPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9s'@;
put 'YXN0RXJyb3JfMD1kLmFzbS5FKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUyPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9ZnVuY3Rpb24oKXtyZXR1cm4oRTI9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1kLmFzbS5GKS5hcHBseShu'@;
put 'dWxsLGFyZ3VtZW50cyl9LCQ3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0UmVzdWx0XzA9ZnVuY3Rpb24oKXtyZXR1cm4oJDc9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RSZXN1bHRfMD1kLmFzbS5HKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGQ0PWQuX2Vtc2Ny'@;
put 'aXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1mdW5jdGlvbigpe3JldHVybihkND1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGF5b3V0XzM9ZC5hc20uSCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxTdz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1m'@;
put 'dW5jdGlvbigpe3JldHVybihTdz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1kLmFzbS5JKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O2QuX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oZC5fZnJlZT1kLmFzbS5LKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGQuX21h'@;
put 'bGxvYz1mdW5jdGlvbigpe3JldHVybihkLl9tYWxsb2M9ZC5hc20uTCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZW0sTXc9ZC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybihNdz1kLl9fX2Vycm5vX2xvY2F0aW9uPWQuYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRz'@;
put 'KX0seHc9ZC5fZW1zY3JpcHRlbl9idWlsdGluX21lbWFsaWduPWZ1bmN0aW9uKCl7cmV0dXJuKHh3PWQuX2Vtc2NyaXB0ZW5fYnVpbHRpbl9tZW1hbGlnbj1kLmFzbS5OKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRtPWQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1mdW5jdGlvbigpe3JldHVy'@;
put 'bih0bT1kLl9fX2N4YV9pc19wb2ludGVyX3R5cGU9ZC5hc20uTykuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtmdW5jdGlvbiBFdyhzdCl7ZnVuY3Rpb24gZ3QoKXtlbXx8KGVtPSEwLGQuY2FsbGVkUnVuPSEwLEVlfHwoZC5ub0ZTSW5pdHx8QXQuaW5pdC5pbml0aWFsaXplZHx8QXQuaW5pdCgp'@;
put 'LEF0Lmlnbm9yZVBlcm1pc3Npb25zPSExLFlyKFFuKSxsKGQpLGQub25SdW50aW1lSW5pdGlhbGl6ZWQmJmQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxmdW5jdGlvbigpe2lmKGQucG9zdFJ1bilmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucG9zdFJ1biYmKGQucG9zdFJ1bj1bZC5wb3N0UnVu'@;
put 'XSk7ZC5wb3N0UnVuLmxlbmd0aDspUnQ9ZC5wb3N0UnVuLnNoaWZ0KCksTXIudW5zaGlmdChSdCk7dmFyIFJ0O1lyKE1yKX0oKSkpfV9yPjB8fChmdW5jdGlvbigpe2lmKGQucHJlUnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wcmVSdW4mJihkLnByZVJ1bj1bZC5wcmVSdW5dKTtkLnBy'@;
put 'ZVJ1bi5sZW5ndGg7KVJ0PWQucHJlUnVuLnNoaWZ0KCksRnIudW5zaGlmdChSdCk7dmFyIFJ0O1lyKEZyKX0oKSxfcj4wfHwoZC5zZXRTdGF0dXM/KGQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLnNldFN0YXR1'@;
put 'cygiIil9LDEpLGd0KCl9LDEpKTpndCgpKSl9aWYoZC5fX19zdGFydF9lbV9qcz0xNzU4MjgsZC5fX19zdG9wX2VtX2pzPTE3NTkyNix2dD1mdW5jdGlvbiBzdCgpe2VtfHxFdygpLGVtfHwodnQ9c3QpfSxkLnByZUluaXQpZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnByZUluaXQmJihkLnBy'@;
put 'ZUluaXQ9W2QucHJlSW5pdF0pO2QucHJlSW5pdC5sZW5ndGg+MDspZC5wcmVJbml0LnBvcCgpKCk7ZnVuY3Rpb24gTWQoKXt9ZnVuY3Rpb24gTlQoc3Qpe3JldHVybihzdHx8TWQpLl9fY2FjaGVfX31mdW5jdGlvbiBhWihzdCxndCl7dmFyIFJ0PU5UKGd0KSx0bj1SdFtzdF07cmV0dXJuIHRu'@;
put 'fHwoKHRuPU9iamVjdC5jcmVhdGUoKGd0fHxNZCkucHJvdG90eXBlKSkucHRyPXN0LFJ0W3N0XT10bil9RXcoKSwoTWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTWQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9TWQsTWQucHJvdG90eXBlLl9fY2xhc3NfXz1NZCxNZC5fX2NhY2hlX189e30s'@;
put 'ZC5XcmFwcGVyT2JqZWN0PU1kLGQuZ2V0Q2FjaGU9TlQsZC53cmFwUG9pbnRlcj1hWixkLmNhc3RPYmplY3Q9ZnVuY3Rpb24oc3QsZ3Qpe3JldHVybiBhWihzdC5wdHIsZ3QpfSxkLk5VTEw9YVooMCksZC5kZXN0cm95PWZ1bmN0aW9uKHN0KXtpZighc3QuX19kZXN0cm95X18pdGhyb3ciRXJy'@;
put 'b3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO3N0Ll9fZGVzdHJveV9fKCksZGVsZXRlIE5UKHN0Ll9fY2xhc3NfXylbc3QucHRyXX0sZC5jb21wYXJlPWZ1bmN0aW9uKHN0LGd0KXtyZXR1cm4gc3QucHRyPT09Z3QucHRyfSxkLmdldFBv'@;
put 'aW50ZXI9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5wdHJ9LGQuZ2V0Q2xhc3M9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5fX2NsYXNzX199O3ZhciBPYT17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBzOltdLG5lZWRlZDowLHByZXBhcmU6ZnVuY3Rpb24oKXtpZihPYS5uZWVkZWQpe2Zvcih2'@;
put 'YXIgc3Q9MDtzdDxPYS50ZW1wcy5sZW5ndGg7c3QrKylkLl9mcmVlKE9hLnRlbXBzW3N0XSk7T2EudGVtcHMubGVuZ3RoPTAsZC5fZnJlZShPYS5idWZmZXIpLE9hLmJ1ZmZlcj0wLE9hLnNpemUrPU9hLm5lZWRlZCxPYS5uZWVkZWQ9MH1PYS5idWZmZXJ8fChPYS5zaXplKz0xMjgsT2EuYnVm'@;
put 'ZmVyPWQuX21hbGxvYyhPYS5zaXplKSxaZShPYS5idWZmZXIpKSxPYS5wb3M9MH0sYWxsb2M6ZnVuY3Rpb24oc3QsZ3Qpe1plKE9hLmJ1ZmZlcik7dmFyIFJ0LHduPXN0Lmxlbmd0aCpndC5CWVRFU19QRVJfRUxFTUVOVDtyZXR1cm4gT2EucG9zKyh3bj13bis3Ji04KT49T2Euc2l6ZT8oWmUo'@;
put 'd24+MCksT2EubmVlZGVkKz13bixSdD1kLl9tYWxsb2Mod24pLE9hLnRlbXBzLnB1c2goUnQpKTooUnQ9T2EuYnVmZmVyK09hLnBvcyxPYS5wb3MrPXduKSxSdH0sY29weTpmdW5jdGlvbihzdCxndCxSdCl7c3dpdGNoKFJ0Pj4+PTAsZ3QuQllURVNfUEVSX0VMRU1FTlQpe2Nhc2UgMjpSdD4+'@;
put 'Pj0xO2JyZWFrO2Nhc2UgNDpSdD4+Pj0yO2JyZWFrO2Nhc2UgODpSdD4+Pj0zfWZvcih2YXIgdG49MDt0bjxzdC5sZW5ndGg7dG4rKylndFtSdCt0bl09c3RbdG5dfX07ZnVuY3Rpb24ga3coc3Qpe2lmKCJzdHJpbmciPT10eXBlb2Ygc3Qpe3ZhciBndD1HbyhzdCksUnQ9T2EuYWxsb2MoZ3Qs'@;
put 'ZXQpO3JldHVybiBPYS5jb3B5KGd0LGV0LFJ0KSxSdH1yZXR1cm4gc3R9ZnVuY3Rpb24gbzMoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiB2YyhzdCxndCl7c3QmJiJvYmplY3QiPT10eXBlb2Ygc3QmJihzdD1zdC5w'@;
put 'dHIpLGd0JiYib2JqZWN0Ij09dHlwZW9mIGd0JiYoZ3Q9Z3QucHRyKSx0aGlzLnB0cj1NdShzdCxndCksTlQodmMpW3RoaXMucHRyXT10aGlzfXJldHVybihvMy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNZC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1vMyxvMy5wcm90b3R5cGUuX19jbGFz'@;
put 'c19fPW8zLG8zLl9fY2FjaGVfXz17fSxkLlZvaWRQdHI9bzMsbzMucHJvdG90eXBlLl9fZGVzdHJveV9fPW8zLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe00xKHRoaXMucHRyKX0sKHZjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9y'@;
put 'PXZjLHZjLnByb3RvdHlwZS5fX2NsYXNzX189dmMsdmMuX19jYWNoZV9fPXt9LGQuR3JhcGh2aXo9dmMsdmMucHJvdG90eXBlLnZlcnNpb249dmMucHJvdG90eXBlLnZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY3IoYXUodGhpcy5wdHIpKX0sdmMucHJvdG90eXBlLmxhc3RFcnJvcj12Yy5w'@;
put 'cm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGNyKHgxKHRoaXMucHRyKSl9LHZjLnByb3RvdHlwZS5jcmVhdGVGaWxlPXZjLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9dGhpcy5wdHI7T2EucHJlcGFyZSgpLHN0PXN0JiYib2JqZWN0Ij09'@;
put 'dHlwZW9mIHN0P3N0LnB0cjprdyhzdCksZ3Q9Z3QmJiJvYmplY3QiPT10eXBlb2YgZ3Q/Z3QucHRyOmt3KGd0KSxFMihSdCxzdCxndCl9LHZjLnByb3RvdHlwZS5sYXN0UmVzdWx0PXZjLnByb3RvdHlwZS5sYXN0UmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIGNyKCQ3KHRoaXMucHRyKSl9LHZj'@;
put 'LnByb3RvdHlwZS5sYXlvdXQ9dmMucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPXRoaXMucHRyO3JldHVybiBPYS5wcmVwYXJlKCksc3Q9c3QmJiJvYmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOmt3KHN0KSxndD1ndCYmIm9iamVjdCI9PXR5cGVvZiBndD9ndC5w'@;
put 'dHI6a3coZ3QpLFJ0PVJ0JiYib2JqZWN0Ij09dHlwZW9mIFJ0P1J0LnB0cjprdyhSdCksY3IoZDQodG4sc3QsZ3QsUnQpKX0sdmMucHJvdG90eXBlLl9fZGVzdHJveV9fPXZjLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1N3KHRoaXMucHRyKX0sYy5yZWFkeX0pO2xldCBDdyxK'@;
put 'VTtmdW5jdGlvbiBGSmUoYyl7cmV0dXJue3BhdGg6Yy5wYXRoLGRhdGE6YDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PlxuPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcv'@;
put 'R3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj5cbjxzdmcgd2lkdGg9IiR7Yy53aWR0aH0iIGhlaWdodD0iJHtjLmhlaWdodH0iPjwvc3ZnPmB9fWNsYXNzIERUe2NvbnN0cnVjdG9yKGwpe3RoaXMuX21vZHVsZT1sfXN0YXRpYyBsb2FkKCl7cmV0dXJuKEpVfHwoSlU9ZnVuY3Rpb24g'@;
put 'T0plKGMpe3JldHVybiBmdW5jdGlvbiBSSmUoYyxsKXtmb3IodmFyIGE9MCxkPVtdLGg9KyFsLGY9MDtjLmxlbmd0aDspe3ZhciBfPXhKZShjLGh8fGwpO2lmKCJvYmplY3QiPT10eXBlb2YgXyl7Zm9yKGg/KGw9bnVsbCxfLncubGVuZ3RoPT1fLnUmJihkLnB1c2gobD1fLncpLGYrPV8udSkp'@;
put 'OihkLnB1c2gobCksXy5lPTApOyFfLmw7KXt2YXIgVD1JSmUoYyxfLGwpO1R8fG1jKDUpLGw/Xy5lPV8ueTooZC5wdXNoKFQpLGYrPVQubGVuZ3RoLFNKZShfLncsMCxULmxlbmd0aCksXy53LnNldChULF8udy5sZW5ndGgtVC5sZW5ndGgpKX1hPV8uYis0Kl8uY31lbHNlIGE9XztjPWMuc3Vi'@;
put 'YXJyYXkoYSl9cmV0dXJuIGZ1bmN0aW9uKFcsaWUpe2lmKDE9PVcubGVuZ3RoKXJldHVybiBXWzBdO2Zvcih2YXIgcGU9bmV3IGVjKGllKSx3ZT0wLEVlPTA7d2U8Vy5sZW5ndGg7Kyt3ZSl7dmFyIFplPVdbd2VdO3BlLnNldChaZSxFZSksRWUrPVplLmxlbmd0aH1yZXR1cm4gcGV9KGQsZil9'@;
put 'KGZ1bmN0aW9uKGEpe2NvbnN0IGQ9YS5sZW5ndGgsaD1bXTtsZXQgZj0wLF89MCxUPS0xO2ZvcihsZXQgVz0wO1c8ZDtXKyspe2NvbnN0IGllPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSEjJCUmKCkqKywuLzo7PD0+P0Bb'@;
put 'XV5fYHt8fX4iJy5pbmRleE9mKGFbV10pO2lmKC0xIT09aWUpaWYoVDwwKVQ9aWU7ZWxzZXtUKz05MSppZSxmfD1UPDxfLF8rPSg4MTkxJlQpPjg4PzEzOjE0O2Rve2gucHVzaCgyNTUmZiksZj4+PTgsXy09OH13aGlsZShfPjcpO1Q9LTF9fXJldHVybiBUPi0xJiZoLnB1c2goMjU1JihmfFQ8'@;
put 'PF8pKSxuZXcgVWludDhBcnJheShoKX0oYykpfSgndjcjYVNYajpdQ1s5MD55S21hOktgMmh0ejh7L1suJVkrTkFFPmlyVS8/X0poXk1pfVYifmZ5elMhKDF5NiVTXWJxaEZodz5+fnJ1QF5QYWM3fk40bjlCa09qY1o9RjhOJHdCInNdaW5dJVRHXj1KRDRMYmdOLFcrNmBVNyopcGokMi5HXTxw'@;
put 'MH1ANncxWDxpey5nPDcydnVdMitVL0R7L2N+dkNzdD16Y1Fyb3BeN0k2YjlkTXp8W2taIXMiQUd5VEUleTM8NERbQD9mfHwkU2JmdSZLblVYUDkhRmc1PWBaKylBSmNaPCt4aC9iPExEd1tYcmRMIVlaKH5jMkNmeHpxRyVfeCtLej9GRF49OEVlekd3aD9dbDg4S3NDUyY6VigvMm53KihhXVU7'@;
put 'Wnl3ZSNVUnxUdTk1LEJvXyJlV3FDQVFiJF5NQ1Q2JCpiZDVnVmd1WE9dOFJpdWVAaWUhbDxGYWs7IVsscGpGY304Z3t7aFksW0w0cTEreU5DZShpZDApUnRWRCFbRD5CfFhXKTJTPzBySD1GeFVBV0p3aUUienVaZjApUkJ+MktiZT9SS0ZCZTN4OzdMUk99Zjs1OWdxL1lXKUhQZ1ZhdGtvQ2dS'@;
put 'WUJdcXlCUDQ0fm8/bUNAQlpyJU1MWVQ4PnVDUWBReSVtPU44M0p4VzJUWEAiXWFoXnRzIU1mNS88OWJFTUFrWXIsI0A/eEhbYU05Km1NPE1PKiNeR2dtYHZXV3l0RDN0PFF5UnV4fEllVyk6V010X3dvbTh2R1BQUlRjem1HdiZ7M3Zse3pXbX09WG89STlPPVVqP2x7bX48VW0uUkdeUWdlTFc8'@;
put 'OUZGRm06VVUpa3RYS0shZUZZSWddK1ZVc3MiWUhUVmdwOHMsZEtuOHJ5OCVvOGJ5OCVRaHRnM2xMeDc4SlhPSVBzfTd0Xn5edHYhe3pgQDdje11QL25+dlRUQjZlazhwSSMmTSpkUiNtM05UVWRlPSohMmwuUjVLV2ZIMTJWRkxiJGF5OmpESXA8Z29iPEtAYFdmdGR0O1sucjU3SDFGczU3OyU5'@;
put 'TG9ld0MkRy9QJU5eSGx2dXQ5cjhNIjR8QHVqa1V0NkIsXnoiLzRrP2wmZ1ZLYCNBeGBaaDh2TkdvTHhbYWN1NCY6RVdVOS5KeElUQSpnQz9jODJKS2pETGhYRlUxQ1VXKjJ2M2xBYWY5JmtPfXMhPkx9MSFFfnIrWl9nXTVPUGkvSXhARjtlYzxUWixyfiJkfjRJYk08Oyw1UWk9elFCbHMvNSZl'@;
put 'XihjW1U7bVVlUDRnSVJKcSZweVRvQlRnJDJxcH52KkZlRm9yZ1orNHZMT29wb3RNK2wzaWsoJSpERHlrSzMwL2ErWlsufGsjL2ZMODBTLl5BWlQhOGUxdS5YZX1XIzZmciZRT3UsQnhiQCh5byozKUBnYF8rJS8/aVB6UkZeI3hZYlZMe0BIPEgpTERFMlcqLjtNMXRFIWpuYy5LQGVfRi5LWl5Q'@;
put 'KGlvZ0khNlQ+Un43fjNWfUwwfEJIPiNMaUpjYVFOaipZOFViXjRvcXBdJj9zXztrKj5OLzN4bVZocDh8QzFzWk9vWjhVbzh3cDlseD9KJCwhbT5CJC8pQjk0SkgzMC9iZi5wcjw8bltbP3ZyYlpzNitKJWBPalJNR3Z5ZkA6LEllUXJZSHlIM0ZBMl1GL0xLdX1DL0lRYyVGIklpK0FrQVNlUGk7'@;
put 'WntZaFQre21afTwsUHxZNGw+QTJkXywmU190OWw/MkNRI1lwY1NlTUFQQThIaFoxO15hZz9SSU4mS1hKakl4SFBkbXdZS3B1KC99YlpfLCZ4XUpqKzl9JntEQXVIcjhFYkV4Oms9QTglYSFmImI2PjQ6X341ZGVgRXRfe0t5fUlKfEk8WHBbfSE5KDlhN2JfQmd+Jns8YjZya1A8bEppeCNNLHhU'@;
put 'R1o+JjF1L2pdMHcwazVCYnZZSU5KaV9PIUI7eCkoWjk3Oyo7cz58az4xM1dbZCY5Mi45eHJUKzMkJHYqckY4QWVgQEI7TTloXVBGaSsuOFNGVWdYaVQkVlFrcE4hRjxCLkxSbXk8QH1wLkNPIzVWRixnM0dTOnt3OnUsanBWJERRLF1kISNdeXM8aTdnTDN1MW9iUmljI2FbXWAldTAuS0BoZUI4'@;
put 'MiZDZSNdKztVN0YjcHtxJDslNn5dYHMyd3xqN0dwRVY5PVN4cV5GekU5dlZ4akZyYDNZZ1h8cWZwRWc6KnI0NXBbJS5CKGxXdHNPbWVrcS9leEJWK2JEKk98TilJMitZT0RIKUx5UXVsU3kybHBAVj5VJnpmOGxpfCYhby5TJn0wL3F3NTtuOVV5TjlfPUBTI3gjL0kvNXFxNVRtN2RvaDQwUGF5'@;
put 'NUY/dUpHOkpUUXJ4SmZYP3d0RCNOIVlITHtSSnA+RzNoeEppNUB0V1hfUng7fSwqRSMvMTBpTUNvM10zTiVyb1AwYnhCV3J7KEA3P11gOS9ZOWxtenpgezNHOWdwdzo5TUVbLFgqWXR4a3BPXXEkVjs/enpga0p5VUcyQ148XzJWWixdPDFfIWB6Q3A7NzQsTioiVXJsIkdUMmY1OjdFRWZkeyVs'@;
put 'JjswM1NIeXYpW2cjem1HNyZOS1tBN2dafGk6ZlN0QnFETylNVy5NelpjImw5LjYhYlNBT0gqWVVdRlNLe1kkVUQjNH46SUFIXTJrNUlsRDVNcXdDVFkhOStsWD1zfDNTL1dCbX54PCFsTUpOfDlWUl9ZLzZbbyg4YEtrdj9rZUZpPSUuN3BUI3gySFRIdmZgPTU6R10qQFtnLk82QHQiQGU8OUpn'@;
put 'SG4uekJ0eG1NbFNCO3p5ISleYHNuc19he3pQXyorKkApcTkqSGBXN0xrVn03NVBuZkJbeiY/Q15La1JyLmIoYiVQREE4VitBSS42OiMhREA2OH1fRmprJnBoV3NUSTJDXlhgNzs9RXk5KWB8TlFbciRUZkZXKlRsb0I9SV42XUtrTCQoPjIjPiQhOV95QyY/Jkx+KmcmJWh9dnh7ODJJcmU7NyVD'@;
put 'KmI4JW5kd2VzVEU4UlVNNVEjMlBwNyUvQGVNZE53NSlsN0hweTlIcCg2YTx8PTRTYFkqUmAxKHRiJW0mX2pmJFheYEYrYnNUJE82PX5tcihVNzxhdUNpL25LQGVpYkNTb0VCVzxpWj5XI1J8S3N5OzlpO3BET11dSlQ7JnYpNmRaX0EwZD54Mko4WDhfMVYuZzBNOFYjKFJFM00zMC9UX0tPfiMm'@;
put 'YF1gKSQ0bHg/KzgrSVVDTEszfWpWdkB5NVQxVk8sXXFsbHhfcn5yTyQudExydzU2YnBwQ0o6TCwlSm08anAyIkBGKk15Ymg5TSltMUJ0Y09EbllUPSY6UVlWWmJINUlASlhsY2FyM0dIQkp3Q2Q/U2JVcy8peSo5TSZIVmVVJlJPZV1qMmMybzBGekNmbStBa0FTWG9kOS9HSXtjPUZJWTdiXkh9'@;
put 'Tmd5eCEpVHlKb1JDeC5kVEtjdlRoZC50a3NZVjIjOVhfQ2A2Xiw8Y3gxcTtwb3x7JlRZaW9TT015WSJuOz1GR0w9O3FEZVJ3Q103VW5XMVkmcEczRkdyT0xIVl0wNE1XIzVNS19kOGwoY0YuOV4kRl8vcyMye3AjOmNLdmlGMl8iQHBSP3xMby8yNVlrRzw7dzNtO0YqT3w6ZmVxfnZoaGF6YSw2'@;
put 'NElxIW0vfUZJZk07WGUoXz15JmdGOSQjOiMyI20zT11RS18qcERWNl4kTntASXErcTs1JC9nKnomLDZzY0RZKGtXWWhfJEguSnJsWTE+TGI+ZX5VO01Pe1UzPE1IREphclVUSz5zd0AyNT82LkFeOykmbnhvYWpWNlFoPFM4bGBMWXF6MlQjeUR7fXo8ImVbNXNjOG9TaytUOGBnT30jXnF8JGto'@;
put 'YnN0WSIpRlNMPWdkdFlyW0IybXZVcyJtVnlrSW9SJFZ4S3lzYm9bPzVNXTEiRFZlejhXW1JteTM0SEV8TDRzL359QDo9cWtONUVoaVZdZ3YkPEsjWzshMFNsayhuPEdxNGZqLjxkVURYJWcmMjMrajV6Z302cDklSEprI1QuajxKLD18aWI8NWE7dyRKbiVOe0B1eXArdnxoS2l9PyxSKSFDODNg'@;
put 'LHY+N11tPSx5czNRbHE0Vys1PVg9LzEoLkpmYDYxckhUOzYxailMKShyYndESGcxbT0uOS4qfkg5Q2t0QE8+YT5dNmVrMmFCNTF6eTszY1glRjREbiNgTkhkQW5lcUx2eVtXLjZ1RDcvJjo5cVB2dEo5JiJZeWZHdUZWe1N5MXp9ZEVbUzlzWzpbbk84c3R4NXVoNzg5NyhCczUvWDsvOXkkOTQm'@;
put 'eW8kMnc+YikhIkYlM10lZGY/XktBUHtYV31KLFgvSlROZzBVKjk1IUlePWBTWltIajJhJXRpdyg0QnIjaHxaPiRwOGw4Q2c3c3E1dnhPODhGcjw8ZnE4Q2N8Tz5EVzEvRU9rPj0vNXJRa0tbdEtxfSRgNTAjXVRrVjx+Qk1gVn13PiRMVmt3WlZaVGY9e3RLPjwkZ1AyYCxZcntAd3VUVHRMUkQv'@;
put 'XXsoNFp3Q3g6L0cmd3pLIlVGey8pb2BwbkZEb15oOVdPVDRBbyo6WVNAcD8jaUpqPChOcUNWO2ROJU0yO1J4S29hdmk9eGdCelM0SjFxWiJwSF0mOzpNNWVLUSVnY2YqOSpTPmRPSSYqdyNjOi9HVDJPfVUwRzlvWXBobUIxRCxyfHdrL04rSmlQLis/RiFwZWxEMVtHaiZYdjk5bmcuMiM1ZTpi'@;
put 'MkYke3tVPjFTalhWaUpbInJyVFR9PW9gcVpRI2BoPz0yblJDNDk5PnJ9X0A4cyk2LEROVklySHMoI1lyfjRDbjtxPSROQT91WmJLYEl5PUI7bG8rT30mOnZ0Ok99b3A5WChbJmMpKlM7KF1qc3Z7S1d9Tz5iKl4sNT1PfDVgNnlgV2x0PzYsMjB9YklPNUk5ZTo3SVYsK2lkL358RE8pTVBbJlYh'@;
put 'TTJyQFUpYnJ0amJLITQvQkw5P1A6c2NmQERPP0w1IzZLQXgrZWFqd0JVWXZ7K3YiXVYrQEhbPFJ0Py4sRklxPExZN3Z4VnBXWSh1JTd3RkFtKEZZKUVHNkY6R280djJrTUNtO0ZNbXNDQ204eWFidm99fm9vVTFNIV9QOm0+MVBrOm10K0YxJDdTTVMuQDZQVkw4fENwMF8yKy9ZKFkqOWMvRVAr'@;
put 'Xz0vfE05L3tLOEM1STJAfHdWJDZhKysqSnt7KFkqeyhyQHF7MyhQZzVafnl7S1JEcjNVVzEkX1VfbmhhJV4vZiY3Q0IieTkrfE1rZChaTTNaZiQ5JVc1PWtldXQ0cypXZV1OaWdNQDtiaDVVR0gyU1NgaHhwSWFvbCZMNCEpKCNqIjM8PVVlaCYzOz9nWCVJMXlxVm4jIT83SUpUKWpoTEJMYEFj'@;
put 'KTt2L1JxLCx5WT5kN21wLklBSFt4LlsxRigmKmJKI194JlU3SUBKbElyWlEzeT0kOXs3STljR24wOXciVnM7Nzo2MCQ3MDMkOih+M2k7XmB9fSZ5MmNfY31aXlhCen07KV9iOkVGPlYqJmtUI15KfUBUW0Y3fT18LCVVOntaUl8vUUoiPE1Vdm1uKGl7PXwqe3FsSCx8VktWfWIiR0E9PCtBNWg/'@;
put 'L0MkQnJzbD1LUTF4fnpSX08jPk48PGlGbkR9OFBBS35XL29nXXxGY2tGbHtLeU5pO3pHLi4qOl9UKzVOUnxLUTxpbX1nLjxlXytQPnZ5X2lyVVkqVCZ5c2VuZipMUT5iS2UsSSJ8Zmx1bD5udl1kIUM4MzF0SEQ4anB2W3N3Z2FHWjxMQWZ+eG9ZPjduT0U3TUQ4cFZQK2NJZm5lbXdDM10ufnJN'@;
put 'JkNGKyNyQENlaEc5LkJLRkBrRjZOajwvM3QrMkBDYTBoZyxBXWA6VTB2bFFgZVU1Jj15UGV3PXxQcV5KbnYqT2BpK0xFcWoxfWY7ZzpQQyFyfkAyJkBQRElRMCNkdmNtOCE5dURYWzZwfWIuSURPbnZoV2s4eyozNVpiSihsN2c+ampscko5U14qLjhoRz9HciMyc1R3LHJoIyY0anhuP2x5YDY/'@;
put 'Zy5tIU5fdmtlOmlfMXA6VUM5ZFFHeTkrT1JsRGlfVjxHcVcrfmE3NmcwWHJDXUtwaEpWXXFMVT4qKnZ8N3ZvYmU3YSlXV15dS3B6OSZ2N0lEQClCRypGN2xXekteS20jLl09OzojNTRjUSN4NC9zd2AzVzs9ejo7bjhKM1JfNj9LZ2EzO3FzJlcsb2NCOT5iSyFiaHs9KXMpNnNtQlBvRzJYVHZM'@;
put 'R28rdEk7Q0clZDVDKWg1Y3QlWTYiJVk5IiVZPGlfUX58KWF4PzVZTylOaD4rWmRKLDVZTEpoRT5JKENRZiR3OmhUOVlldUlsRXhIL1plNVlHb0dSKlZIbHpXWDsiJVksKUBvI3pRXmY3XmgjLypJLnZZaj55fSg1Xzw+RmlvdCh1KURXKXZwSDxYaUJDPVIpMChhaDUlNX5lUE1mWXNVOlNoTXBS'@;
put 'bTBVLD1baHghdW87ZjdxWiVMfCJYSEVQNmUhK1h4MnVWMDkvRlJJR09vNll7aXFPKGZkPGZaKldJQ0hSbHhVWEhCMm5zTEtCMFBZazlaaCsuV2BEX1BrJCFHMkpRb3pxZ1o6V0tFN0s7S0FMRnp4WFNFTEsvdC9JWlhzTShUW3BtTyZNbUxSQ3daPVdtRVFMOiIuSXF1UE5mUCVqM0RKbyZ5TnUq'@;
put 'TW9Md0JsTWZEK0QrazZLZkc+aFQ5YTQ3dU9DLkZkSG50MEc2SXVIQ2VDcXN1ZXV5NmZENDAvKkU4TThNJjpMK0tVQF5RYyNmL1RmImh7dFJTMjpwdWhCdDdXUzIwXlY8cisuY2MvRihGbmplU1EwYnhmdjJ1OGMpSUR5bzs5L3F4RSttbTIrMUlLRlFpVDk2WW4pNWQyKyl5IVghSF4vVlg7aSJP'@;
put 'X2RlNVZpdlBRMGF4X1k8VTxreklGRXVIITpheEh2QShPR05SeUkiNFJ6TlImSUNNV1hXKUxuOWRieFh2NS5PR0xEcXg+VWVPfUMyeF10UHpGUiJJQkdkTU5pd01RMCFZZClxYWY3eEkheCkzT0dKUk5IM1JnNT80W0RXOjAwJk16KzdMXkIiMGM8aFpgVyFFS045UkpvIjk5QklUODRAJHdQI0xU'@;
put 'Wjt4OktmT0thSm9GZiJofCJ2SD9PZWUqMHJMXUJjZEoqUmp0TCJCb1RrJEdlcTEueUV1a0leKC5JalpFWGlFaGoscjUhK3k2WEdLUD9JWVNqeExmQ31UMEB3ZyNNUiFydCNIZFVGPWBbalpbTHBDLlQhaVFqekwydkdLWltdYSR5YXVtS0drODg1IVd0YU9RNjk1fHldQWBjKHplWjEiUkolZDl5'@;
put 'fEIpZnIjaVo0IlVRdCVlWjYia1F6P283KE1+eUdDdWhVMDl5O0I2ZD01OHk6dSJPKGZlWnUiUFBobGVadyJjSX1vaVp5IjhJPE05eWBCdFVQRCt5TUM9VTlaYmpfTDdDTGJgayt5ZkIvcmVHd0wsQ20iPGMhV11JVEQhNWl0flJzVSNNanRRTWZqIXlhQ0daUERnTDVFWjdVMCF5NUJ7MGVHJVcu'@;
put 'R1FvZlpRdT5TInFmWlN1S088TSN5O0J+N0lZI3k/Qmo5PGMpV2BIYylmWlV1RVFKKiN5R0MlKDxjK1c2SUF9ZlpJQllqbjcseSxCITg8YzpXU0kicSQ1enR+Un1vJHlxQzlrbU9rTDlFZCpnenpMJUVhISE1JkxHRj48ZnovV1VLdSYvSXdMLkRzblA3KXkwQ1JvX2tzK2xCUl5Rdz4ka1k4Tytw'@;
put 'PGN8eVFEQn5BOFJRQT90SFMqYFtTMFFTbTY6Z3VPNFclWFVQWXdMTy93PWZ2elhjT0V2JUU2dzQ8STZ1SGFHWGpTdjdNT2B3XlYiaEM6K0ZPRU9lI3oxVjR8a0BIYWM1X1ExP0RhRWQ6SUN+QzYxNFpSVGBEYWc1ckx1U3c4QSF9V0NsYCVZd01hL3ROTCtHLzdCWF9GbjMyeFYvdkIqWWJ2aCNb'@;
put 'V2hHUChYRFIweEJHbGw1PVBXLzVCdmFOeEZUX183ZnM0NEQ4Njw4WC9gQldJQCF8N1s+KzR9RCMlSS5ZL0lDRyFIYlovU0NRblRQZFNHWElKSSkxRWEvY0NtbEU4TTgyaylYRkt4O2VtJmtUdU1PJWwjPG4vKEJgb2ZyZFM/NEJFTjNIYiVrPXQzTkQjZCMzLyRZdlNrVSM8L2tXdWBUVThSMjA0'@;
put 'R0Y/W0kuJmtidSJVUn5qI3ZjPUY6QiNadGNFdzx1NWQqNT12Y1kiTyNmX1h0dGVlNjo9dkJCV2h0Lz5GTENiKkRuKUZUQ1BnIkNWJkFYQko2bX1MRj9CRV86fTQoTGBIZ21BemtMS0koPXxMOldrUXY/WTdETTdjU0ZONVQsUHQudTNwW2B9WDZ0c1UiQ3x2TnY8VXRafHZkQno2aVN+WCF0W1ZB'@;
put 'd3x2akJTdHNjbkxdSVJEfjQ/V35Sb1UiTEBXUU1Yaj92YnZGWiJDJkY1RVk3TTA/djVCYDB+RnFMLkdNb2BYUEI6T2ojflhAdEdtdEJAdmx2MGNWcCJYbFh+VVMyLzc3QSlEYmZ+NElHJEReZFlMfVdQUEBvQHZgQiwhInl0TCNKKHAkPHU4TndDQz9VW2RZTHJBWEplXWBYREJEZipbKUZWRS51'@;
put 'fUxKR2RFM3h9TEZYelQ6T3tYTEJkOTpXZVNNMFt2cnZobFdPfnZnQ048dC9Gd3h2UW82Olt2bUMrWypbK0ZgRWIqfjRbTEVLfWdFMFt2d0NXSXYvaT19WGJCalQuTTlZK1JkSEM4MVomWSNpOEkuTVl4dCpUUEl3I3lJSi93PGZQekFST0UsdDVZJmlFUVUyVVgjaXhKOWRZeH11WEhSe1BIIVlS'@;
put 'KXJuJjpSQHkrZnRHdk1JLyV5cSwkcCtqMGFZdk8qWk8wZVk2ZFs1RzBHNiJPO3REYVg1RVEkIURhWjVbSis6SGEmT3w2R0tbNUgwNll5VlhET09xeDR1dnpmT3l4Q3dCZGRjWUdNYWNTPih0SGJ0O1BWL1VDTEV0Z2FDNmtIdVJQNz1NOGB2MENAXipbazV5eGIqNWQvNVh4bippU0l3Z3hrdU48'@;
put 'eXFWQCVXTzBXMDZdfXZ5O2ZDR3R4P05NMTB9dE93dyM4Uzdsek5JKH13eV1Dd0prPm8wODxPSHosI0VYZWpyIXh3MkhXWksjVjMsT3hwWEhASTAwNVhJI0Q4ZnI8cnU4U0cmPy5nLklrYmlSViZsSysuIzk9SEdpYEU4TmVJdGR2KnNLOikpZXZ9SzhBIXU4eDc3OTAxYHdvZiFhZTF7ZE8sKThV'@;
put 'MSojaiolUGk7TUxoV2xmUmZhZkIpZ2VSODVqOyFBLlF7QEB+OnIvXiwvakUiMz5TKHcsc2RsQUteQXw3Kk1SJmt5RFVqfilvWCx1PmdzUUlTYyV4RGFOZ2NsNWpYLHVQSixTZ1gkTVhYX257UFshRmxoZWMscHxgIzR4NCZPbmJfVikqb2lgblIwSUNYaHQ8aUwoS3xYNTpnY1EvRiRtQVJIQz5G'@;
put 'biV0KmoqVDF7JFc2RG1COHdPQThmUjBJdiphaU8hSTl+KEZmLCM6Sz0lSm1CJmh0TWV3UHx0QWhebW8sb2VCUER9VmV2XTpqa3tVbWFwfSx9OExQSVA+aUFJZkx+QklPdS5lJnpuVE1dQ1RZMkxbTyxEVWU/MCVNVVh9PntJWyFTL0tzUiV6RjRXa1lxTEhyTmkqdnRBeGRtPW09bHxBTDwsR3NT'@;
put 'ZksxOjc9bFRlJjhoO2kvT1B5KGBrbjlDOzhxWUEhS3VRPzBSOG9lJlAwMSMmbmZgVHxwK3R5bkJlL3lVWylPZHVHZXg4TTY8JEV7VVhDOC5DQjJkaXArW2Q7SyJtMiRoIm1aYD4sJiFMKGxhcDVGMCJnWC5pTnRMVC5xLEs5bDBCaUZiRD1aPENtRnJvNDNDZW00ejhEV1FfWF1YbClEQzhKUExX'@;
put 'ZT0lXVhlTXQ0R3M4ODhuQSF1fFF9Q3gjQFAvJkhEdEhbV2RjTT9DImI+QEpZNC4mcjQxXyVZQH1JSThtQXY5YXxZe11uU19TP1t4cjtQKGZYZVRfe3Q7JHgoTEFCOEFBazZQZ0I4OmdSNzp3fDpYTlh0OkgwZUtSbGd2XS8hMUp7bXw2RiFyKnhnX1BFV2d0fSQ4aUd2UFIsalA3K3ZbPGU9byxS'@;
put 'WF9eKkxQdjVZbkw7LGJ9NiFLISojRjRje01Db2Y6JGFhOGN4MGshYFBkZyI2YCVGZiRMNCl9ZFc+alJEdiNFfnB3RmcrMTppNHgpfilEWC4kQmkkQz9XQEJIOnduP3tYZVkpeWEiIi9sWzxeIXx0Y2M/XzxTRXQjSEB8SUFFe0pvJVAvIXs9eCVvfEc9c3hNOzVrR0JHQn0kTTYjdD0reyJWUnVh'@;
put 'PEMrIypXYXg+TG5mUXYhRD0pfjdIWkRwRlc2dVVYfEQ7REQiaTtBdiNEekhVUXxqOXIxJU05QWVsUHs2dFgmZzQxTi5JZUtkZjtxbXw6eUkrYURIcHVMaTlhajBoJC4hIjppam1KO0hnJjMkb3NwTGU9LGlTZnN0Q2YxW29CRTBIXUp1d3UsT052Wis/KFRzP0FsQnhPQlBScj1he1A0KSlGQldo'@;
put 'TFshc2FyTytTK2hBSUN0YkFnJndrcmlCPn5EPTgyOSpAXVJPNjs9XUI3dUI4fjdXKXFnV2w0SHNIVyklTGZ0c0xYSW1LKTxQNiUoeXJMISxpMVpgJTorPClCKF44UkBdQkQpans0IW5mRUVQe2hrWXx8M1BedVAuN09VXjkzTDxNTnBKaXw2KFNjRDBhVV8kXi4makZvdWVSIVdRdHJ0V117ZmUs'@;
put 'WEJQO3UkNypGd1UpUXZyK3dnRmVIOjwmaFJhPEdBO3ZiQiRkaWIyOyNadUlZYT5oQCN2RkhtRV4jcX5XZyNHXUZDeTc2dT5aUTtmUkRlVjhMV30jXkZUKEYkXyVmXldJMyl5WkFQSjdndStXLDt8dDRJaHB2KCxfdXkwP2RNajlqOHhycX08WSpWRXNOWVlWRmBdOnVfTXJeSEA1bUw6YUBDMX5I'@;
put 'YnMmN0hMajQ0NkBBR2RGVj9jXWdCVzEzKEJ5aUlRX3w7WTJVZWh2eDkuJmcmbDdHST8pMUxjJngpaCJmRW5CUkRmTE9DRmMhJXs4e3VUSkpzIWlEJSE8ZjcpaiZbOmAlUFl7VGEwVkBmblEsREAmQWV8S0lzUUI7SGwlLkZYMThSSCosMS4xNEw3ci5GdCw0NHw2T3xAKSp3Sz9odWpFe3J7ISND'@;
put 'NTRWUFt2MylUX1hlYzhULE97JUZIXjhdSldGO1BjTGk0T2l5cCxzJiRWLmVVWF0pcmBLaVF9LDFAWDgsJDliYHlyJDlwNzpINllXNWVFKURuPmM9W09ZP3khU1d4MXp7W0Y9Ym1oQ2VHc0h9OjhaYU59MUxWZUJiOlA4OWoqezc7PUwqQmw4S1NiW048InFMMDMrU0dlTURqSmp2N2JqSnhsTjM5'@;
put 'TG91TThBXjpCUDI3Iy8oLDV6ZX5leXMmYWRCI0UmZTh0ZkNyUkRGK1M7I3thakpHVzdHI0VYUG5DakpNayFFK1NNc3c7VUVLcj0iSjt5L3BRal1jRGgvPkJhQj1vPjxzYXg1PGw2ZHJVfFpSUWtYc1hFSD1fJFd8dUlPLC9MeVdOZTAiY2Njemo6TkxPZE5RT150SU95YT1mMGNwMG91SU9dIl1n'@;
put 'KTpgZl86PFlJNUw2eDUpZHNVRGJyVWtmeGE2T0h6S0AmWmVkZTM3R0lIIjVCTjtaVzhKT2ljdkQ4R1BhclVdIklPLC9qXWR3bTQvTiw6Ny41R2s8czRTeyVEOlp+RGQ0Pk8qJHI3SjBGZHhhUCNiTjFmXVtaMVpkO1A1Lkk2Vks8KHhjIjU2YWdjKkJpNGBkZHd7b1AjSTUsL3pdaSEmWmJ7NEds'@;
put 'UXo2OTckOHhjLGFYYVJRejY2YT48YT4raz8lcjdeT0toO0YyR1plNiU/KGc0MWt9bytKS0lDMG9vbFB2Mk4qbmFRb3NjKUZeXUBnfERzc0tKdCtYKEx+WFpmMG9CSzh8Q2E4dk5lU3B4VU8ueTlnNkc4NntsYiRUbS5PKG1zXT1YUG5IeFFdRno/YkE1SV4mKmd7Jlcoa0Q9XmZVbUkvSm9HYCZY'@;
put 'JiZGJX1dJkE/YzgydHNQSz06aUYhWVcsJnRHQlVyb2w2OnZua0VbOVRQSHo2Vio4d2olbDtSXSZPaHdjSTA9OE81VC80IkVUZDQ5U1VJPk93c2FsO0gmWCpkejUvWFcvLE5DcDxFPj0sQlBfPEVoUCN5bjsiKHcmLE5pcGhGNF96PFkqOUtQbEM9QipPd3csOCY0SiZVKnU6UCVlUTN5dHk0eCss'@;
put 'T3NsVkdaPGBnNk5XMVgvcyRhL1A4MUk9XUJyLmc4d2NrMkQyLm9ALnNbO2lgODkoeGk1cUR1W1RIKVNadSRubyElZGJXVilIWzJuPGAqS1A3KDszPTw8K30yMn4+MHt9aGptb3hxe1U3aGsiYlIoVTsyb3tWU1Y5OSxOdmk/b1J4aEZCVU8jTjIwVUJtVEk6TD89YCNyVSU7aHBXWlBUajxIRntw'@;
put 'SjckWEYueykuZSIjVz00bUBgTD1la2gzRz1la19xa15LVVQ0Y3srM3ZOK3F9P148TnAhfVMkMDRyJXVZQWxbR0ttXjFELj8ybW1wU1tnIXcrQDcjaEVvWjJaKmI0SiwlOV5IfDtmLjBVYWdkO2w8RG1STVpvRH43NCFLbltraDdWRHg8KHl6biI3KltwPjFeZWV5KSJkY2ZWJDN0QThQXm1kN1Vi'@;
put 'M3FRV3k1SjhrTkJdMkZSUkNoQE1TZTtfYzAxT25jeEU8eW0kTHtOZj1GOSQlW10peHdqLHxAbitKRTZWazdZN107KT49JVlkeCRxVEdWfVc7OWRTXkdze0BQLFFgeDMkcWQ/bFNTNDExInptaDtAb3hJY21ydjFDKEpRLFVVQXlsJmpmWDwqZzxOYlcjKkZHZ11ASj9GKnZOclZWU0FXfFpMfSZH'@;
put 'WFppdkEsLm9rTDpHbERhSl9lYCE5TCtTTCJVJGNyMWxyen48ZEZKZ0AwLHI8QFhrUmEsfUlnQDBqLHMlRH1ac31NXk4ySEdgclY4e3FTTWphZXoqay5hbXZ3RFtXMWpoPTo/STdibkNjazZVU2cxMU5oeyM8M2o5bWBnbXNmIzVeb0drNj91JSJLQ3gjRz1yUCNWYHVTTWphZW1AfWpRTnRqPTtD'@;
put 'c1dvejNTPn5xR1FvYWZycWtjVmo6I1lrWW9YKyt7LEE2QjRGS1tOeVRTZlVVfiNOe2skN1pFMT92anA4X0w0cmN9N3s+d2o8WWY0blhFLnhJNjl8ZkFoTjw2TlRyaHE/SnNDXkh9PyVbY15FdVlRaj1JRyp+VGgmTEk5SXQiRy5dJnckSTRxWDcxM1F0WzIiRmhGaiI2YmVdelEuTEA7VVYydSZY'@;
put 'RnNNTXxIPTZpOHgvOXlHJkE4M1J1SFdfYFVjPjMyLFp5SWYjezI2XSg+V1NlfiZ4UUNtTHNZclIvSz1IX1lMOHYqTHJEZmBKSVB1bihnQkVARHU1QHRoaURmNnhuXXBPSzBsZyNlKHFWTzskVkhFZzpePCxaJF5vcCxNVjgvfUcucll1cGhHYnpuIUB0X1BWeHVORjIhP3Z5STMrRSF3NV1efFJL'@;
put 'PkRjXzxpYl1WP2QrXXZpXW1rWChtb1JOI1FGdDRaLitXZyhQKV5xUU9mJnlxblhgNjIoXjxnRVdZZldtX1REPVhwbSt1ODckTHJNWl9mRHNjNj1hWFttaDhMTWpqKlBVW00zPUllTlF7IUpGVEMhZ3JnYlNASSZIdUNgKmRxaVl0OUt3fUxyeDw5XTtzLztqPnQyKmxGfHJHITkzMXl0JElrdmJq'@;
put 'aXohVGR9OEkzcEx1Nn1hR3RvTzMpcFlPaFRCZUBBRjUwP19DdjI0bWpjWEJ2Mkd1YnZ0RzhPZ3YuUnByJGYjX21QNU55eEkoKz8wRTZQNjZYXjp4Lnt9eW5nb1VkOFFwJWZJVVM0Km5PczdwWktQU1k1Pk1wJUJLWjhQRG41YTptdktTOkNNVCZZO1ltPFdPU31PZixUfjE+b3VwS3lfZHJ9TT1b'@;
put 'ZWhHS1oyK3xWJkNNej1lJEZMRyhlLmV5XyVmd2htMylbVDFkZGxGUXwpSVY4Q2s7Z01QZzg1IWdyO29TWkRbO2JrXThnc3xka3NAIyEyLkZ+P041aTlvLk0jWVhYIUpWOzdTJHc6U1AyMTx9U3RAPTdOXTxnJWFFbDkhSjoxPDgiSToxPEZdOykhOWlKXTB1VSRsQ35KOU4zTERlZHh9ND9lZjdr'@;
put 'Unw/Q2hFW2hES3hbfGpOIjMkTU1uWFF8Q2wyfWFaKy4yfjRZQylBSXBzTGpZTFd0eGcwTCFrNk1mdjRCbEpdUUJsZi8xPGFpVC9hSVN7REtuNV1pZWQ/eXY9eTV0QGs7c3w+MmM0VilCSFlsbEcrPlh2P3t2dShGOSRaJCNucHl3LEMxdjh3Rlo4OWZJWnRCNXdOTihNYzVmNyJ5JUwrUnJhMnMh'@;
put 'N0l6QWwwdyg6LE9lbTs7YEFPTXE1dCtPdD04QEJMLHE1fEElN0pPJT89b2djUz1zRT1nYkxqVFJ2YF42RiNKdDVMb0loN1hxOUR3KUNmX2Exez0xaGA2S3dNWzBwaj42P1VPc1RuUGBGUGdUaDBCUVhRe193QDIqLld1eG4/eXZtfng2TUR5bEgpOk9zcGJRQDJucGlQe2E8eGc8WChycks/WmJC'@;
put 'c3N+IkFfQHQ5KCVYLnU2KChbUDt2Qi9bYVo4VWIxcHdDbzlAKGUmI01OTUN1NHBLJmYrKDB5X1lLWnV1UGVWUiJFZkooV0tRSH1qT0IlViVRTFBNbnVFPChUVWQ6PiZOQnJCbD8oQV09ZSo5fihUJFAxXjhvaTNZeyJFQFtrT35ZKC45QHl2M15CO0kmMVBLTSZ2c0plYyZMNGdaL1VmcVl5cm41'@;
put 'RTUmTDZvUkwqaG5mW0dWZSpQW1QhRl1ILGA7MUBqQ05qVEQpPk5GLFlWMDBKKjdAQTN0LEkqQVM7MC5mQyI7UDF1TG1RRnU5JV5kZT0qcyEwfCNCOEJIV3I9OnBuT0hLL1c3JUJJKnFNOU4hbGgrWTUwdyQ4Z3xvKUdtd1FjO2U0KlNFen47e29PczBSM0JkW2MzSkZILzYleWNuMl1mb18hNCRJ'@;
put 'NmllXkBFTHRyL24yS1ljSEkoaUhUSy4pbWx6JG5tUn59RXE1Oi4hNEk9LEI0Q0VRMURjJlchdzopRj02TkU4XUB4TmhMZk5sd2grTDIlRT5OX1daPzpVbXd1RjdkSz03V1ttOF9ObnEucUtIVyQ5d2pQIlNVM1RWY3RFPixCMndhTyJTWzY6LklhRXU4VSE2VjlVN1UxfF1oYjUxY2Q/PiF+VGx3'@;
put 'IyokNEQxcSppNiZsdlhwU0ZOZ2FJYjs5PFIqKnlCOz50L2RWYSYicWM9OUhTQzxENnR4dXBpRURKZEM8byZLbnViL00qazEjJCtaVnRFT2Q0bXFdM1pVWmxaT319JjV3Y2VZXjckOTN0KmlSYlZ3NE9mKmVIPVorK098PVpMcjFsS2w8YzM8dUI+PFNGaC98fSR3YjQucW9HfnpobDtVNmlrMjpB'@;
put 'VHVsUGJ7TmNNNi5JS091aSZYL2Rjc1JDT19fQUYrQlY5SSk9R35Kdl1nPUl+d0hESnJ6VzJHZHhKVGFsLCIueyJ3TndYVCZ9JTtHWW9YVlopc1N9XVcvN1cpQnQsM2dUfmhzRlhDXVYoZDpKdVdsclBwbllvIUBMQmVtOTxjIU5jOmIvSjY5KVRwOTZzI191NmMmPjpqc2hOc0dxIi5jIW5TZDk9'@;
put 'WD9rTDNFajpHJDRlcn1OKnhWVS5zU3Y+YEdqMHBLbW97U1NXXnxJKXNaJjdweW5YPSF9YFNEb294cCNSakhYUVsyblh9RCNGJnVFZWQsTlpeZSRSUCg0MUtnY31rbUhLWll9R2Aue0E6MEc1UT50ZVk7YFZiKjVkSzE7SU5PIyk8aCo8SzI0PWc8RnlgVms8a3oyYy5rZXB4cCN4amhwIU81STlE'@;
put 'SXJ5SiJZRmUoR2tWViE0XXcjR28qeV4sI103NCsqRVFuOHY8ZEVAdjYxOXZtbWlXbFVdRmlKUmNseXlUakZPfWRhZXhtIUtDNSRJNV1FTUg9bmFeRl1MLEkjM1VaelQ9flozbVJiazxbXXlDUT4pdjxDOiVdVztyYSVVZVgqNU5ifCIhb1goOXBHIVlPPSR1WlZBPEtYbChfKz9JUEMjNFpwOTdO'@;
put 'bmd2ME1PazxXaX1qIzJ8YF9telt9cjVTWFo7ZFBLIyFFInx+TXA3ZkBNKEhRInh4eDpuXTw6RmhAU0dFTmYwX2ljUTNKeWJodklWUTBAN1J8RWFmYSpjdGwpdHkzST9CTHFmUVJXfDkpckBGVnxDVm13P08qanFKTiQ6MUslL1ZLRyJiNC5IWk49YGxtfXIxOTtWWD52QG43UCYwc3NfWHM+N245'@;
put 'RkttIkN8VyoiYHI2QEI0ZFhXQ1Y8XTRkUiNTem00VkdrPy9ScERufCNiNSovKWYuNChUSFohXlMwQk85TEtdVXpLXX0qL0ZLIyMjQjY7SXJ9aEwsMW8jS1p9WHpGNzpNfn1GMF83UihPR0FQTGUiT1hXKTxKZ1dqNCVRWC90VTtieWM8N21bb3kvJCVlYyZMNkViJno8a3JXTldwYH59dnByKXRu'@;
put 'Mjg6YnUzVi5FbWQjVXo7dksibCI8Ny9rVVdUVG8mOnwpJHFnP1h1Yi9xaClyekxLZDxMWzZsOGssZTNOaHFaRmV2XWAwbXo2MEgxUDZQb2woZTBRcSM5W1AzfSU+eFFEXzBLeSw+WDxxbFZYM1hROnxJQCV2c30wTV0/emF5fCh5JHJlNjJnI307JSNJUHQzLEFwQzFGTSlSbFtod0EsOiZbWl9O'@;
put 'VnEuMUFPZ1o5LDVObTJJSzhvL1NRVSp+X0ZrJj8oPndOaGBoVXowcDBxbHdiaSlLcSxxZDFmWzM2LlErPGJNbjFNJV0wLDJWdiZAUEZvMmdjeDN7azhTJEZwQzZBcFhoSXtReiovJjwxSnE1RllVWElFVSFxR316dnssMTszQyFDN2QxZHI/UnlgS3Vsb0M0QyFxOXtNPHpweVdgaW1hVl9MZjYq'@;
put 'bS5LSjNOPix4KTVGe34+fT5hMT4hXjYpNV9WPWpvPD4pcX12cnw/YGtjfC5AQHRjIk1ofFoqaWs+R24wZnYqay5QdGFbe1tGb0hbKUZQP2w+TV1zYlRmOyVaRlomc319b0drK3JsYHohSEM6VigvIis1JSE2THciK0xyMkp8TndwdU16czRbb1VFW2VLb105NSQvMTxXS2FrMDtXPTY9MDlbR0NX'@;
put 'LiF0MlJqJiNobUQ+eTtbS0E7dmx1d3lmWzxNZSs5KEowcXU8SGsvI2IhNnkmTn1FYUdTQHxEcEJGIUAxP14xcTE8bTNpaChVP287bWhwZ1oicFsibGNMc2duQkdHO0BddSZoIUQ4bTg4JlBfbHZKOCFaYj5ZLnA1JmVzVCY9PkVrJClWV3hbNjwhO2R1JS8jUyQlfHN1VCZXIVQqKUZyJHxsV3ZW'@;
put 'VVFuejl2ViRxIy9OXn5ATDlqd2wyOCs/SV9iOGV4PHJ7KHlIXlpwLjxZJFBpIT9nMyI5JCU/JSYqekxvcT1VYmJQU0RXSl52ZjlbWSRwOD49Ti9oQyImTW0kW1YkYzI+YE40KG5fS3g7O114PmczWWFXck0kfGk1VjJ9TWdDIUZNQlZGRj1xOiw+YDY1SGlLPHYjKyxmU2lKWjM1fXBne1ZbQEVl'@;
put 'cDI0LkJCSSNEdkcmYjVTQmx4QT5WOGMvKjBaajMlRV9DSGhocEBscilUe10oKXFyLixod11DOXl4Wi85VTxiTEdAKUc3fX4+K2tXPzgzRnAsNzkpMDgmT2t7Tkk7emNiNlUsSEQ6eTtrSnBQUj9QPEhMVz8wdV01Ly5ZYiNoWFVtO3YsPUlmcUh5L2ZEU01kUDZtZHZpOWRsWigqKGJoUlBQImhp'@;
put 'bHBvcHJRdkhTKlAyMTsuODEvLCNxUERrWlY0X1RobCRSfT12bHo8PEx9LCJCcHIzTGVTVSlYZkttMmpgfF9AekJNT3pdeyhjSyJgPCwsK1NLRD5SfjBDcktdezhLU3svfUpFXXtOOVpAaWs4MV44ZUdQRVVhLDVGN0tnUGE3cjRvSmVvN310Xkh4LiJFWSlBXUpxdjJIYl1QbEw+bFolODYrbFlo'@;
put 'IVZedjx2Pkwwfnh8alopX0Rod0hgYnNJLiFOa2VrU0JmXWEpYUtmKjVffDlfVVJ2e2BpWj1GcVkyRGNmPDRyVC4kJktFR29aa2pgNzZab21sRTkwNmRgW243Kjl4PkZSVWh3Z1gpPD9qKz9deXJLI3p9c0puOH1eZ1hFOCxwMTl1O21mS2pke2FfJnBhemQ+a3tjX0tsUDxgYVlzOVY+WEcoIV8o'@;
put 'djgvQ1dTKn1eZ0x7eytbO0taXihCSnxyMnNZSntUQz1sUiE/SUVsVSRNTl5dIy5re20hMlY+T0R7YDtvN0w7OFtlNmpSLEU9PHlJKFdraWRoVD4uS0BkSiZgPj1nK2AuXSN0ZHt6YHpKenx8Rl95JGY0bFVrdytSXXNicjx6djdMXmpZTSwsR1dlU102V1hYKSxidHVNT0hFMUVlNWBHPlZ9eHV3'@;
put 'RGVSIWAoV3VjdlhkS2Bve2orcys7ZXdwUDJtO0wjaTV6eX4xVjtBRV5iOyVVeU4lRltKOiYpVVgoUTtXeHZXW0hWPVcuSUU7ZSJeKnchPkxOTVtjMzxXcC9HMjhfN0leaislPntkenwlRWY1Ny8hKy9Kc0dtfT92cypRal9PLG5YQ31vR1BnfDxrYVpvSzU5e3V5TUxzaE9LIU1IbHtMa0QjNFtN'@;
put 'cikkIV9tekVWNl4vdSkuKU0sXlJTfDJRX3x8RklIWXk7U01Tc3loNnAlODpOSyhpJDlzMFFQTDReSmZePDN1OiJqKks1OkVEb3doMEQsbUJYYHp3VitsY0J2SzxlZHteVCojTT1FPkJzQWx9P34jOk4zNH1QWmJVPGB5emVxZCJIYERXaEpwLCwsN01WITZ5NT1lSlpVJUlZK19HVktTM2ghOXxX'@;
put 'THxVPjZfT3wqSntAPmV5fT5lfT9XP3JALzwsS1s2YEcrI1tSOk9QXm5MWl8lak1yJFlvWl93OCtYTX1LLDosd2JDNFU/KWdGaHFyZF42JmZXYGtrQDB8Nz41clNjWT5VZyUjNWBPJUxHZHFuOWt3VFliKklOa0FhbGtHTFBxNkVTaUBjP3RHTXs5UTNEbmN5ZjprSHAhNS5sL2IvKlFzVWJRd0lj'@;
put 'Xj94UVYvL0ZDV11HU2s1Rl0xTVNlaH08RShfYWF9eDliX1tfemVyJl92Nyx8NWZMLjhWcig3S25WaV50JkIseGxmKy5JIyNQbyRdcVouZlUrLzxaJEFHMGZuI2EoPW9RKyRZd2wqIjR7WEtfNnl4eWNzPzFQfHlGYDwzd1ZrW2FyUUdMV1RfNUBGcW9faEtuOCkzSkB5ODZDcCNnOWl7cD9iS15P'@;
put 'PjZEV2g6OkhocT4pY1ZyKHkzSkA9JlBdJlRONiR2Z0ZHciNOVj5bc2NWVzVxNzY+X3pxbilDLFZCN0FeIit0U2hCSjZFQFBTcVp5TmF1d0Q9X3hwUiNsS2hbIlZHcGQ3ejNCM0FkOW9pV0NSempGVCU9Inw+aVksP1tRbDEoI0RtdTdXZmNJd2B5PnZ8T0U2bk86PCUuTW1sJT1URD1aKmR5M0k2'@;
put 'XXFaPHo9Y0JPME1kKWlddXs0THA6KGlqdGohW0txVkcwNiM0TWRiI1tyc3ltQWRgP01nTEBKM3RzLC9TSSMjJjEmTXJIP3lFdXJNPFJJNzdXVnk4WDpvISQ5flh8SDd9YEpqZkBXJl9qdDF5OmU0LEEyRmN0TFdmX19mYjRrJWx8e19Wb01ZODEhaVR1Ilprd2NePU5QI0hOSWJnITQibDtjIig6'@;
put 'QV5NUSZ3NVtgUGtaa3dzNGVKRTdvaGM0RDcrTnlJZi9MLnh4dzpPW0xGeSpvS15xUSROaUUlSF0pa0ROeEBIK09FJUUhL3JfXTM1ckJXKio0Y1NhQEU8aXdFXXdPKzF5RyZCRFU9WTVUQE98UGdvSyhdXmhDWEoxNWdvRGA3KyMlQ2ZpczlVRyZkLl42ZGBbS2VdfXgxXUpRR3hjYypBRmFKOGJF'@;
put 'Mk8uSTIzKykhMyJjQVF8XyQpZDhNImZNT2ZtL2BuOE5rLFBEREt+SFIjSihaOmJAIjdudFZ8RGhMeXtBbD19KV83bUk4YHMqaSRSYXhTYldMJnhZP2NmL1cuNSU7PGwrbDltMnM5OCZzVVUocEZLfUBMfi98VjxpbTZGaFZOWDtsLkBYR3FbQExkX0FnVXBPdD14cDczJnBVaV1dR018THxXd1Yl'@;
put 'NCRkKVBMXTYmTnxAfV9PN29lOE8uQ281I3MxUlI7fTowdStCWUFyVitVPl0xais0RnlRbnErJkthKiErKlhCakZaOGtvWm8/KjIuXSxYRTR5UjNkaFpUdGhPdG8md0Ftajt1P2dHU0VrSyQpci5kPHZ7RiZnUE9tJjE4Kjd0M3ZyIX1SeFltOzlNIURMcVtjd1JLRnc4aCtwZmtKbEk1OTsvVH5S'@;
put 'QGx3bnBzc348KFdEbCNVJldqUUgkajIiQFMyK1doTCtXczlRLG1YU31nIWpweyptWDNSWnEhdXhCYnEhRi9HRWojMkIkVmpnWmtqbDtiXzpTe0AoVkJnOHRAKTslUz9ze2hFbkNKOz4xeXJPcmVFMjNnR0VWUkZLeCM2e2wrI2ZdYERgbkU5SGBSRXBRW0doPmwyK1NjKXR1Z1pmTHF3Ul4xVmhz'@;
put 'I1VmM1o8QXloRzZFfnc6PjFEV1UuUWMpcDJuXjlNVFlAWGRbK0VmL3NfVm0ydWxLUEZ9P0BMOmpRfEpmQFZoe2grfSNiZSIpPXgjTSs3Jmg5I0FaWit0QEl6fUppVXNUSUpxZH5uZ0AqT3VBcHJFRFkheXNvdG9vSE1ZWmY3XS9LOzVUVX5wN3hhTChrNnpaJjFgaUZGQkRoazptdnVKfCR5OGFE'@;
put 'bCxdTml1ZSY6cmMsTUx8SzI6Yl81JE99Z1pHdnU5ZzFYVTwiRmNMSn1eLGdAdmx6ZmhIYlZWQD41U209M1BJW0Rhfkh3KElGMmlNL3NqPSpMYGBMPS56dV0hSTkkUXQ8azVLdnZQYV97S3N6bU12JX5HViVNXnJZQnFTLF88RHkyQVBLfW91L10peUUxX1BkIkhecVojO3g+dFo8I18zfUZLLERE'@;
put 'ZjolSTp0eTMxZiNfIzw/QWQuZ2FfS0NJOTQjWWtIcSElSW1RYXhHQ1dwJDZDWEdzdlkwLCp5ZltFdUxyRUl4Y3BoJWQpaCVkLElQdDdOYHZHQ1dwayZodHdVMFFsc0pxKzlbeUtrRX5YV2BMXT11aFpPeD50RFd3SDl5RCtedF9IXnJzeDtAcE9IZyF5PGgqN05vJnFINEpwP2NPOGlEVHRkPCM1'@;
put 'fThOOVk6R0NuZGE6dVYsOC5Jd3w7QFZZK21HJHxja0A6TUg9bjUrX2BRentxWjVreGc0MyxdekpWc0Zyc3dgJE5qang6JUkjV3liWSttR0VvIm9CTj58SEpCRz4yN3QyRU5qVERKSzslc04mV0N7VlcqLkRWc3NIJkgrcDZWNzJtWTI3dFZ8NWF6eClhLm1GOl0vQEtmY2EucHQzPCt4ZFtwU15H'@;
put 'W2M4MjRiKG1vUjR1Wlp5LE5GVF5jNUthK2hHfHpOOUk2Tn1aM1VrKSspUitISC88UUwkWn5gIzdKT2dfWDIjP0RKbl1ELFFhIS8vUEVkODI3LFBPaGQubThWUmEhLz5eakhmPCpWOG14Jm43Y21peikhbCkuXU8hJEJGKXEwbixGN1dNQk5DWGxmbmNtUWBdJU1uNUBTTXYsKntHcG0hTmR4ODdT'@;
put 'MmFfVWxDcE40azA1ZCNfY08zPlVaUzAmS2AhIzZsRGY6fH1iLFZjRzVCaEc1OHcoPjoxbEBjen51dVlJamJ0V0RLL1c3cmIlNF18enlWSEhPcndPY2B6Y1NpfUw0NmtLNFY2KkUwWX01YlQ3Tnw0fmMjI20zciJWVzhOYXhjcypkfkVzRG9xQj5RLnNobnVLfFJJRW92ezQpaHlBMG1odWpXK15b'@;
put 'fFhgV3c+YjZYK3Yqai9ZWVNjSkIzeEkmeGdxPVNPbyFBN2ZTXXJ0WFF+JkZDKi4vLDt+WU8kdHFUWix6Lll2S1lld2xTbzZ4RVNFR2V7cSRLU0djbWIsTHpXTltHY0M+OypDSj9NQ2UzVVJPMjdWK2tNUUNMVVQ0LihOWGpObTBRfjkpYilSX3tiXXpxN3ljUGs5LlZCIUpfKj5raG1FQHUrdUx1'@;
put 'P2FJTlZBPClGUXFPYmlRW3QmVz1jZTw4MEZdT09LYSsjSSQ3NHlLTGdDJkhUIUA9N2p3XSJeODIjSjwySm86cl57d2haeSNaVX1ZOylVLiRUQU8rMlBeJWRGU3s8UmpTPig2U3lXfSNEYGJKOTNzTTVAMyEyRT1sSkFIdV0yaT9rVzNpZztKZHp6Wmt+altORC9LfVgsQn5dT0Z6Y3ckaEhBPTRt'@;
put 'N1VFSXJtY2deWWJ1OVhoXnFnZHhdZWM/YikofGYhWnZrc1lTQW0wQiY9RyUpW3JaVGVSdnt1RGJwWiR5VlNPX3IoekcvJTImTitSdXBoNDEyRlA/Ikd7LjUrUWxwRXlWcCZmU2wrVURLSStGJHIkZE16MDVTcyUwOHRmbUR0ZmM0VVNlKyNka2VkRm8qZHZ3PkxJMjA6Ry5TMipKVzB7YHsld0Qh'@;
put 'cGYjVGs3T2BkSjdUcDtCLnxKaCpbOXNFTkwjVCZ0L1kqV1A3IzttP2NbOkNFRkBiQD8kVVUmaEVnPGchNT5mI2U3OEB1PlNWLjMhT0VxPiR2NkY+PFdVQE8pcF17fCtjYSlOfCswUyJidEpOdFFxUWF1K19GLnM3a2dwKE0ibm43STpjeHgrWjhCdiIjcFVYR1J8YCsibCsoK1N+SFA/X0Zad1tF'@;
put 'MCwpRmIsblpoJnRjV2ZuOTZaJWVqOz8rJnBveG5aRXAiJXo7Q01LfSovaDU+Y207VGJ+SC5VfFs7TnhUaFpYbk0wR0NXcDdiM111WjVOWlBaSXs6ZEtOMDBZbl5xMFd0JGxkV0g+N15obG9kKS9Kc2x3PWZWOFF0cGJ5UmVLbVJFNSRGKCYyLkw7cSVDeDdVayRpeTMqPWNCT3B0UyY8KDx2KmAh'@;
put 'SXJqRkZXfShQdDxmK3BmSWgiUFJEX1goVzc5MiFodzBYVD1DZzEqSm8zPGRLTzx7LFd9IiErclQ7emNUaEBSVEA9RGA6SipNTG08JGI1PkF+ZEtsWGhGSzsiKTRKdVlUdGRTfFltWXsyMXh3fWhJPSIma0cubntMNHx9TERfXXpIMXBETj1ZYXt4bHlyRkZBIU5LczRzWyJOS1d+cjluNyMlY01u'@;
put 'L1N7KDV9ZW5tV1tAdXtvXSQobWJtKz9PcXJHP0VJWCFrWmpAIUtuVTUhMXk4e2Q0dkw1X2szSysxK2xJVHdKJDA0fX1ZR0pnMHBHeyErciF+PkQyIjt2QSpLKnU6a008eC9oeHBCRkU6YEd3ZXk8elZ5KU01Z0Y1JSFlUkkhKiJTMjtuQyxKWClbVjwqZGhTZk04NTx4UjhrVTtreU9RKkdIRSxA'@;
put 'IWI2OSFVY2ovOVNSVFUkcWghMHhVRTpbPHYrMj92Yjp5fERhNXgyMnNQeDwhKHZgPUo9RmxZWWhSaTwwOS5Qa1N7a0BKSjBvLGRsVENreXx3dmpIYnZXQnRmIXlDdyx3OitIdk0mVUhgNSZrWGl3eUs+flskWXIscUxxUkZtW3RjUXR3dzIjcDZXZzV6bywlaj8hOCslalYlV1dOamN1OiopS1V5'@;
put 'NGZyeE5JJmw3YWU3eW06Qm0vOUd2WnBHZnlpZmtYKVsue15LLHVxITBvcmFlSUMxM1kyWUAmISFhRytIYXJbYG1rcCFPVjl6YitgS1NJPy55JGIjSmdHOj8hUDZiZlZ2fDBWVmFpVEs0aXUiY11PL3oveURncj83flksfEo/SUw5ezZMfixMNVh0fE4qSnp8PCxjRlQ6S1lTKyVHJSl6QnA1amBZ'@;
put 'aG52NHttNDVQRkdTRnlZKz86T09YOUFFN2JFcm9JXWdETTNkcUFrMC5UVzwjYlc5eiEqSEQ5JjJ7OWgycVNTbXddcEBMVSpAcCksLkNiVjMxKUJgSzkmMDRXL2xGOFFRVVQvJTxlLlZuK3JQdjNpYDRhVHclUz9wLHBvejJzKW1BQ3FUVUp8STREbmNNZkJAQENBQFF9LCNDO0cyS01HOTcxNG9C'@;
put 'UlR0PnV2U0ZgdShPX018Xl5AKX1ofGp5Rz1zIVEsL3BJQEBpWiQjSz17bHF4Om4/fjFIaVIreileQF5nZnU5IUNVb3J5MmxpUD1QbDpePVBbUFtuenl9UDdna29jPFVNWl5HUThhfVF+fThrPixuYCI7eFprUUhDe1FfPWlMLCk6VUlLdSw+I01nfFdFezZLQklsNktKb2ArbUx5TiR0QmtpJDxt'@;
put 'VXsyaXdqbmZkdWpLQHZqQCg7aiZAczk0bUBWQjx1PGssUTpHcntrKTVaPF48ZS9iL2dFZS9OXk1rPjsuOzB1VSsoeSo8RCM+MyN6Znp+UCtAZWhzK2hoOyVPWUlZN0l3JStscVFZRmtWWVZ5RG0sfHU/ekJUVjx7Q0h8dWVTNEU3MnpdTXFRWjxVbTJZZkVIK3NtSSE7a1F6Sl0oTVYxX1dXZiJf'@;
put 'Tls9UEhFZjArOThSb0IlanIhMypJdXl7LHN6MT1IW2heUnB2YFJkYy5wbWgwcGI8QTh8MSpaPSgvdHxYI3kwWnl8YkBhaiFLNXUmezdMcjgpMkJhdCVnd1hPakNFWUtSMHApVXF1I0lOZzpaJjxXW1U9UGxnQEB+UStjPHE6KiRsK1Q9PClMV3E/cGkkQy9HcmdhJi90bUloSShdbmohKzZvdTdh'@;
put 'dUNFZ2MxQkpWS0BpOmldSUF2KEdyWEFPTy4pUD1ISlR3MSQjPGd1eVAlL1lhR1AsVyJvdSR5UW9JVEs1XUIoc3EwM0YlOm02ZSJPe3FJOHsqPTBHMmkrJXBHNmJ9JHI9bzpxI0N4Zm1Wdzp7LH4zaVZrc2x9djJHRExsU2NsQ21WKjlgank6N11sL35ILjZmNmRRemIyZmpEQWdSTUJbNkNVMDtt'@;
put 'W3toNUFsTC4+VVQ5QEsqOz9JLjUlMkhgQFdAS0IwIVtsWyVgVkBNLk1HLFg1Tn50Tj17V084Yi8zTmNoamU8W3dWJjtvLEFGTDlTRnc4YTkjUWlFPHo7U3ZAIiUydkhpfGwvR3hofFAifV4jYFN6eT0mKCpzQHwhSFgwPiFsJmBaTTs5SV5WJHRBbVZQRH5bMyE4dmh1dUtocTRNZi4ofU5aaiZB'@;
put 'V1AhejsxalE2K3ZYc0hqU1dlNmN8aGYic1sqdFhNezJteFh1amkuTWhxVWRKRWM5Sl4sQ1dQITVwajpgMjBGRTEsNTZoRnVNZUxbUkA6bi5YSnJldVJCdmFzckVjdlQxc0xWJVRhJEcxMGJUQm5rbVgvfCx2RVtgUF1gRm1SYj8vZnlhbUg9TDw6Z3hlUkV6XSo/azwiPWoqMmBbanZqTlFge208'@;
put 'X20yZls+ZXlCLFMrMjV7ajB2eHlneVVid3liaHg7ODRqa3NOc29ZaC5VYF5sUH1AMVZZVXRVZHFERDtJIk5NfjtsWitub2I8USJWRm03P1suS0VsWzhgbnVMPHhbb0tGWjJkJF03bXtMWCs7YDpUWnI3Sn41Rl0sViFCRU0zUVs4cipgZ35lIyYrLl10PGQ3IyVoa289NG16dWJyRlZWaHpHd21w'@;
put 'K0FrdTxIdnJzeVNKTzg5KjlMaFBYWEZiZ3VRXXJDJDNsaiRxNXlxKXV7MWUqdHNYYk5bWUx1amciTSEkOzhBMW4jZCxdZDNpVFspIT1leXhnK1JAbFdVNi5fNiI2bV5oUTEvSms9LEQ5ejIwMSpTX3h6Xng7YS5GZ09tb2Zgdz4pZExdcit7Kyw1VUw8a3VlJSlvMEYuNm1gYiQxTDspOkd1fiZ6'@;
put 'LjErI1UqcH5KKjpRYWJlSXklanI2WDZVTSQ/LE9oY2E7Qz9ARCp9I25wZF5kYlcubXxuMkl0Okd0b3NmW3h4VzdsPEVybz5II2Z1OVE5VjtjOHBpbjlfYlZyZk1lcC5bLyFDY1psSyooZSF0RlZIM2ZYWTZPP2lzdHE1ZCUyN0k/Kzc7USpsd0EsLGZbZUlwa3UiYSx5XzxtOE1gZXVJSnlWYkVd'@;
put 'VmJeSDlNbC85KEovTkc1fCYwPWl5VzMyfmN1JnZCPDVGOG09QT9jN0pASUhfMykiOSsuajwmTXFJNEsqLDg2OSRvMzZdI0lKJWh8Um50RD80SjBxRzBJfkMiRTwmaXdXZVcxRyoxdk5tMUVrZG1TKjQzRzkpT3phQzpyNmkkTThafU8jZUBIYmUzRlkvfn1vV0chQj8+YFR4Ky9uWzY2N0tFb15d'@;
put 'U3MhTXY+ZWRRK0pARTM8enNqb35LeCUvIlA3NltJYWJufmpDajUiZjc2WUQyLGgxOVlLX3JeMHN+STVoIyNIVTp9Q3g0PG4+PnBsOC8uO1E2L3tDUV5VRl5VSWNXUXJxJVZVZkd6P0l9cGw4Wy51amYzPWJkO2BxfUsqY1R9PzlHZzN2WE1POEdnSltfdlhnUC5ULjMxUlheTm0zP1VMM3BreFhX'@;
put 'ZyMvbjlFTGx7KFBxK1dpQ0MhciVfNytjWT9gJEhIYDErNi9tRXwzdkxFSkhFKE91Z2ByMDM0Nnd9eXBTO1Z6Oyx+P2VAWkwrKEU7eVdMKzxrK21aIXlMSG5CT0JGMzs+OztlIWJGV2VmMGJEeXkqcnZmVSl4SmJURTk3aypZJS9pIk5Vajh7WHFMM240dmlTUlFYXiU8Yjt3MXNKQ08jcXM1cH52'@;
put 'dUZPU0YoSHUwZm03SX5wLnc3MXVQdEZENzhUfVNFd2g9V2FqLG8xS0dgW2NYJVg+O29qNT5EbzVuU1ljYyZUYXVeTnh1S0MxNiZLLmVIdCUlZVs7VnJbJkcrZy4kPDRtX2BCMUtaeU5MPVVLUGs5KVhPS2o0MC4jP3FKQjFSL2osWHc1QyF5d2pgNjJAdXhwdyM3SDE8TXB1NHVzeF5WWWlaaGE9'@;
put 'JjtkPkZ5Tmk0eHV3e1dtL0dtWFp1IVteKGxeSnUpL2UpL25VbT8pPlchWCNdeCl3NG88YUUpeVVGP2k9UChOUGtBMm8sdVk6WlYlVys7PTxvOl8oP3w9TTYhI2AxMCtzIT1NS054I1ZkXlp5MSkqPG93b2ZEOj9DPG5qbjkydWJ6N1FkdiNkPFQqZTYvOCtPRVtwVFp+LG5nREI4MWI8S1Yjdjky'@;
put 'IUFFQTBZT31EeHZXP1ZuQmtFXlRvMFZDWSVxVXgyfi80XSg/ISNrO2lMNkxJeGBXT0tjPGM6S1VxK01qdD1NNkp1biwzdGdDMlp7LDlIIWNSUD0xSEZEbF5QJV5GI2IhLmlDMzt5fUZdMjVGQUFYTG9pPEc1TG9GUFh1dUFrOlVaWltoYU1VUXpSQUp7W3pLWGlad0lVdlo+SCoiQGdLa34oQi5G'@;
put 'YFtibGNdOkpWZ3x8aTIiYTMsXXRKYmd2Klc2am8lLz4hMFBtWVJDVWxVTS5RN1gpRCNlSENIOjd2cWwrdDVZMjMuKiE/eHFDV1lVK1lWKz1pXVtdQzJNTSE0ZXx5cWpCSzRDUTVXamM8b2gveHMvRVg5SHtENS9mXyMxWUQ+PHF5WE1xLDVCLDJXK2p9M0plKiMrUlFGUGIpenZDKztrNy8jKzAz'@;
put 'LyMrYjlqfU9CQ01WOz9eb1t5TXdZPng4eEJwNX0hcXl0KS9tYykvbWMpLDQ9PDRDTUouVGlUb1pOXlpwX3BPOzw/OEV0IShKO3x4XkNAR3cjcCZLPkJZL1V5QztkakQiMV5OaXt3RWZQVCUpVWYqd3owYFhYUkRXSSspd2AhRmBEKzhNYCY7PzZbZ0BqLDtJfU9nU2JoLi9ENldldDNaMlpraz8z'@;
put 'UFJqWl9AeCpQWCk0ayZXMmw5IyYsWzxTaGh6dmNbTENgZCMid0ciV0lFS1VsSkY3Tk1vXUx2IUJXfUxqcTwpaVJ1VURGRF1nLl1xYlRRdXxkKkdFS0NYZypyPDIiPEE0YzxUUlhbRyVCaTk8MllXektKQTJsTXs2U3sofkF5fWFeV11aKWs0Z0A3SChPdnYocE82UmsqTXlmdl9QSileOjxZcDtl'@;
put 'fW13eTlKTD1wNDQ4QXx2dShGSS5GO1cmbCg8RTdoPiNnUT8jJW1WeT0hfDhOZ3giOWZ0WXFLRUtYNWtKT3Ele34+MkJvO0ZaWSpJcnx7KzVJMmdAXkhBSFkqO181USQ6bmVgWzZGbTQ+U341Z3U0eTo9WjRDO31lWFcrcGtXPFRgNDhWeSRHVkVwUHlDXXJ5T3pQfC5JWElRQUI+VTF4M1FYdGJu'@;
put 'fFYzezt+YzNhb1JhWDt1P19GPSpnO3U0LyR4UDc0XzpvSz1mYXNoZzh6Wkx4V1ltMzQzcnBWbU5bZTExXmdPPzg6R0Jwd294eHJwWzhgTEBDbEQwV1hiSV1FcDtuZWFhWHdDNWllJH10eSpzN1lYNT1RIzxyXnVfNy8qOltlM2NELztbPF1FXnBKb0FEVUM+MD9DQUhdanBJRG0jNVRxUiNlditl'@;
put 'WSkvPDlKQUY7eiVESHhtbn1yUVdBbzI5Tl5DYSFKU246Rz9UMEN9NTNYYWpMKykoK1J9dXgwSVhaa15EbyZfX0Ntb3t9cFMqbEJvWnxHPXFoKSxIbUdGTSp0Nl04RlYlQHUlcCUmfnJEPl13cnA7SnEmQUQqS11xdGxlbU05NFtgVjZEInZwcCVIY3VFclM1aTN7QlUqK1hYfW9KT3U+aHgrdTJI'@;
put 'fiQ+aS87MSZRVUNCYStKOSNiNitpIiptQXloIy5MRl5aX0JNekpzPjl4X1g3ZTlgNn1FVmlKIShVTUZeWikqO3J6S3lAPEgmaTspNSFLKSYwPSMjWm5CRE0lU0tFWUwiNFlYTElNenMvfEc+dE4wM3pBaTU6di96cD5hWEQidmtDW2U/RXVZInJVOlhiVCFMezVmImY9Zi51fmdMYGMpbzpvOWZo'@;
put 'SyE9VXN6djNycH58dyE9XXUyY31FS2xwKjk4KlREcjolYilYQkAqZm51dlkjL358LyR0ay5Fa2I7flZ2djQ8eEpoTDRKRE9TaGJBJGl6ZWY8dzgvYSpsVUc2dXZdW2dAI2IlITo9NDV8byU4QG1hRkRLK1Z9dy5zMzVSYWhTKDxUUDxkcVU8SUthaFNlOypKMC49WCwpe2A6NiozKmEmXTNEZ00k'@;
put 'NmcpP3hvdlRhbyRQOS5lOV0wIUB2TClsXn5KUGpMZkZEem1oIUNXIW0lYn1iJTViNDche0Y6fC4qN3g5NUtIPVg+cixxKVthVkFZT0E6PWBOWT8uSXg7c10lZl9YTDVePzZyREYxfCVPXXt8L1hXeD13TG1SQEM+aXVVOzVXTTt7RVhPR1BSYDRmRWs2dmZZQHpSeDFBVylIeWRTPiVZS0x5VEEq'@;
put 'WXlpRVh4Z1FzVllXfCQrQzIjUCl5bkp4bnMrQ0RAVElybzAmNypVWmlPMEVQWUBDcVgqUzkuYXVaTyh1YnVfQUpzZlIxTEheanY8UVo5QHlpdUtwQC4+Z0RfO0xIJUV2PWI4ZSlyWUB+QHlZQldHIU83Vks7OUo/dVV3PFVRcm1OZytZK1ZkZSQrYHpXcS87R3s+KkU1WWxgYDAvY0l4UitFNHc7'@;
put 'L18uM1d4Qm82RVhnfExDKVledmRyQjl6TF9CYTldQCpqRkY2T0pdaGRkPm1Icmx6MkM6Y2R0Wi9aLmtye1smeVghdyVwIW84aURSd0MxOkBmWlI5cjpKU318OU1XS1V1M0x7eyNwIz94YnghKUNkNjkrRWdIe3xEM1sxYmhaVT9HaU92U0VvOlMwfUlmQDYxZV9vailOQVN7KGNQXV40b08mXUQy'@;
put 'OnlsTGopIkpxSm9sajNuOyE0bWQuTEleS2U3TiRiTjY7ZTRiJlg6TSZYSVE/eUs1dylgeT15cC9yK3csL25oejNxTG8iL3N3PkxRRndOcHZxMk5gYFhCWWsmRlVIQz5KIU1jN2M8SCw9b3k1bmw3LD5MK3EoIkd6TTN6c1FWYiYhX21oa3J5QUA4NGphY2N1THxzelc3ZyNNX2tAY1RHTnFySmJm'@;
put 'ckFoaGduO3xHRkYpcWthXSRKLmNQO0wyI3Ipe2BbR0NoNT1EWng6NmM/ZSI7c1BlQygpMSZ7NEJvPmB5O05mc3RkZF0sJGlMXywmQl9wdVI9MD5neFglQzptTyxdeiE1WFJ1Y3RkOVhaSTJyL0doTz9CZSwieHI5Kl9ZOSR6S2syaEBZKiFLRnNHKWJCflhnLGRBfn41TklvSXR+c1YlK3M6M21w'@;
put 'ND9kdkRFbDpZdyVPQ3VuXTJnRUVtJEYkQUk7QTcqbyI3SmEpLndZYkc+I2liRH19N2duIUcieTNCVHl4LjQhVldkS0tfTklDOjBgeVVsMzZgUHpCbSxyK3VGOltkL1QzWFhpbz9jV1hBNUFjSX01Yz9CRSRoK0pGdyFPdjRxaEJOWDhWOzNeNypDeCE7S0IwSGVkUVh0KVJyUzAwJGlMfWwmKDRe'@;
put 'aGt5LmR3QS9yKko8dzB7X2lzSTd5a0JaMyF+fX1WYzxYKmQzajtVdkcvVTM8K3gsMTAra3ttSzpSNFk/NUZZVkU9SiZbJjVHQSJkM2tXV2BAMkZDVTQmNzxeXnhWKG9AMlBeRll3NEA4RT0oOi9deGAqTDptK2J0JS8yZXRHcXReeiw2OUFHO1ROaHo7SncwRDhEZmZ7YE05bnwrOHtnIjgvTSVk'@;
put 'T0kjSnE1OjcyVWR2NktEcihfVSNzJUxBbz5uMFFAcXArKS5JdFlAWzc0U3hyWjd8RiNOTjRnN09BdkBbJkQuS1ppe1FeW294UzBYak5+WUMldG9DOjRoYEwqdz5WK24uKzQ8YCVleSE5cGk5SU15dD5zdHBMemE1MTwvbyg7OE86dks8Ikd6aDllbz0xZno4bSQrV0I4TUFhalcsfDQja3REa3Bj'@;
put 'Lz5JIk5PcXEiL2dxezZZaEwlUV1ne29BPm81d3FFWDNGcT5kbCFMLnFZRGtLVyRBfiwxaiI/ekE8PDJ8KGN+LykxQj5TeXYrMn4wO1luWEtYUnJUNy55ImN6bTlaSl8+WkdZT305NnwvRVJLfCw4YEwzfEprSH4qelVVTWd2blszaDBbNGd7cWY9eXJafSNzTiZtbyx0SH5nayhSbix0X3tHQmhf'@;
put 'Z0w+NyZNcXduJkNoaEAkZl1lQ3wxOS45cj8oVXE+dUUudl1NS3dRJFE6JjtIcVpJQ0R6bX5AdSkyU2E4UEc4fjpiZkx3OHJpRzlmRVRoQ0xDa1RoaGhhenEoZztJPl9GcnV4I2xASm5xd3tLVkQ5Y2hPTmtgcixYVSY2VyhyNHpHKXBVcUU3L1haPyhsXnZ1RTxBTTFJNU1jciF0YHQobjkrdDJn'@;
put 'TVN0UX53SjN8OGNrRmZQJVJhazlFczM/dFFSWXpebUkjZnY1fjghdUVoRS87VURVc0cxX3k1Nn4+cnAjRy5PKEgpNHt5dEhJT1hANChAMmpILnc9Y29YNGchIV9DVSUlZD95THQlW14heXRdbWpMPUF9USFIWGJjPGI2YF9GI25meT1AQ1BfKU1QRF9ySks9cSZyM3QsSF4qeDo0b3ZLVyQpMl1K'@;
put 'Rj8yMkZbdGtnWigzdHZQbD1TOGc0QX19UkJMNlBqUTF7QGJyOGcyTXByUSR1Rl17V1h3S2w2JXR8UyluaXZWRk81IUJ0UzVJMGE0Z2B5cCh6PzR3V0tCO3lXNkJqLFdSUnJwLDNPTEEvJGdEQ3V5dGNleSs8aCJ4YDV8SjZaY0t+ITFkJUdmNykyeGNoX2JpNWJmaV08VHRmZ0ZudzIkSSYpdGpx'@;
put 'bWswU2MlXzlnalYsVVNmZDk4NilSQjc2VV0scCkzKEYsJHRrQmdOYVMkRGpXI1hqfVUpWWJJTWYzOlhlIytAaEcsc2tiNyVGNypmO3c2TGYhMF4zQ2wzfW9zTGVdMkVgbkRedXxwN2ouUWVaOSklMTtoTUpzcHteUDhdKDgpJWhESG1YPWB6PTxLZ3o/SC9yc1E2bSpRd0JjbHlxXjJXPFJqUyld'@;
put 'KEY9PyxNRUl5KTQ4P3ldSSNDWkxjWFNFKCYlSEtgcFpAV1t2a3N4cDg5ZEJMc1dnZG0wM0t5XztieVU7YHQ7NDFJXnJ+O2RuSFJ1cUZAJVlObWs9fXpYPlBbVnE0MyE6VGM4S2Usb3gmVUdkUz4pTHkxIl4kVXh9KWRxeHRCNWU9TDFwbTJzQmZIVHkpRFUhbntzcypVNTlpJHtKT2N5ISNPP0JM'@;
put 'PC5vKTRiS2RkfWRiVFJGTjNeZCk8L2B0WmIlQ1VeRzw6MCwpRlJYa2Q8UWJ8Nk45T0B1MDJKK1RwVmJoSW9VV21ZQD9DMFtFeFgpe0U3VEMuZTZZZyokc3Jba119UDs+W1R+XyZ7Ukh2SlgoJFtRb0lDK3F2N0RYS1UpQWkwKERIPUJoP0M8cEpQcCssUUllWSp5dWN0SlZ1PFRtNEJRfnhBKTIx'@;
put 'SD40SSQpN0U8ZDZwcTJ9VnhnZ2hHaTo+a2JLaXk3Jn1odlYvKFc8RU5DP1s0LitDYUxKPHtQOllwdV4hfihNaHhFVVJQdGl7YElgZEJHbDFVT1lAIWBaIiE8PGErOXhfP2BIeHo0S2JmKDwrPHVbO2pvOi82eWo+e15vJVEkPi5bRTN7PTYrSmheIWIxOUQ1dDIrVWg3TH0zNTIycDRpXkh7Z21j'@;
put 'cEdDb0RXdzc5MD1PR0VRRXRsKSUiNjUpQjd1L1g3cSZ0byN0LlRYMXA/V21QZjx8T0YiT2MjIU09OWBJKylGXy5zPmYmPyhLc0E1aV47SyJyPWVVSkVWfUgoYVYwbyMjT0liMjZJQ1JJVzNOKXVwZ25IflB5SSY7Ki55I2xqJVtAWGI+bmN7PE5qPy8jWUZhLzFeZy5sSj4kZEt5bUJPKU1Ze2hY'@;
put 'STtzWCg2QSlxZ3A9WyY9ITBDJExuUClbZCVTandmNUYyITB5anJmdTpHeVZOQzJfZ1hUUiV0P2c8N1hacGwzQl9MTD49SXtoNHdOPHRobzQ9I01XOSNpQCxGV35NRkBZY0JOZndzLnRpMkRrYlolZG9bZnFEaEMjXSg9OmwhdStreCxfWnlnOUxvOHBjXTdYbT8yOnlkRlY4KmUhIjhaZShIZW0r'@;
put 'KlREaUZVRU8lV1ZAUXY5aD9JZEZ8QkgvQmlXLlhgV0paaTRnfDlKRURCVFU0azB0filFXSJpWyNLdld9V0pAUEs8aT95TXFSeDRlJHl7KFRZKGVFNWdIS0c6UXlMUyN4e2YraFUyWS4mdHUwUl1zRFEvVWBnWkw0OnRNTCtnajojXSg4YyZsUzBuU3NveFdielooe2swcmkrPyxgTSwuViRNfSUp'@;
put 'IW9iWGcubEhJSUxbVmNdOWdnY0UvO3JEcnRAZkEleDIyOnBXL1d0WCJ0M3d3JjosXkIzdHF7U1AvO2pEU3tjTzcjeGZVPF9nXVcoeTApaGVZZGducmdMYHhFSSVCbUVrMitFVTIzW0RJQnc+YEozL19rYixQL3hgMDlCUlB6e1AhdVVXbCxGQiUrSnU+az5RS1ovbkp0LGAhPFJqODlgZlYzI3or'@;
put 'XV9aSW5uKzReZEUyVVY2LF86fU1SeXViaDRsNWxkMyZ8X2lgfWgsW3Y1Yk9KLjtwO1ZEMW1ZSj1CQUg/MyJOY0UlX3F8Im1DeGtbTEc9aWZIQkNifFkkVGZISWd+MF4+M2pMaEtVZ0tuaENbPWtDXip9PzU9ayhSX0hiIm84eDE0Ukk4ZVl2aUhLI3QyS2pzcUA6aSN+PE8kYEAobWM/MTZfWDFL'@;
put 'X0NFS08jVHAuPW42a15qOUA6RzlfRyFodSEiaToqIy91MmB+eUVRXWRRVV5zcVR1SzVCVDlRKyU2UXI0LG5YYjBpZllhanp9M3F0aVJwM3ZYalVgPmtlJEZkOzY7cHV2VmIjUTlyR1ZOW2Y8X04+S3h7W1gkXT82QSZVTSlxVE9gcXtCYnFeMi5ybHU5aSJ8aSs5R1ZfWHo/WGsmNmdWOyp+ckJ1'@;
put 'TS5lQ15+QGhfITJRRTdWMlRVUUA9YDhwP3ppUWssZTkmKkZjUU9ncG8oZTkyY1YxOHRQRVhDNEFHSWBIVTUmb2AxUkA2SipMMzxDcVgpQiopIldRYDEmZkd0dmpZYDZAIn1RL0JFPExEQGVTeiNZNXRlaU9WXz96MUl3fSxeW1UjUi93QUMuImFabGd+ai84OX14MnwoIyhbW11OSlZFOVt8US9C'@;
put 'RTxsW3A0b2x3alEjXlVFeiI5ZiFySSlgRl1fdEtNQV48QjdPPF9sPTpYLlheMXh1UTdyWitONGwyKUBjaTU9Mm8/VzteajZkIXJQXW0wKEs4e019L1EuYT89Ozl3Ymk1W1NxZEh1QEVyb2A4NVBbM1k3MiEuIUt0ZCZSNmJEfHJhS0dKST1QPz4oVVV7PGlJT186V3U4dERJeXN0d0RGOnFXc3s5'@;
put 'M0Zbbi4mTix8LH08eDM8SD9NPkM8eyhvL2ldJG5Ndkg3WTRqQ0lvV0hScjRRcDdfQERmMFtmWkgmcUo7KyZ1WWdjaWNYKzRBd3B5dHFUW2QmIX1CRDkuSHhfODV4aHZeZDZ5eX5TQz1fNkAhW3JIOTVoej0xaTtiUGtFQ29HcTh9ZkwkV0E+NFM6RzxKZ1Q+ay9xRit3JkBMZWNdJjcuNHpLcFtX'@;
put 'IUVBbEwzeFh0Uk5fPXRUXVQmaW96fHo8Z3hyfCQrdDEySHUlNF0/en5RJGxbdld3aEwlUU9NJmhjWT44WkU3KldYaGVuWEhEb1VscSZwXVRFW0o7dTJRKT4kISVaYjtLcE1taFFyS3hkeWcrPmw6QHFOMyxUU2svNWlJUS5hPGczKDRUaStSblFEJEhARiVkb1gpW3NJU1loXlcrdXgoeTtLYTd9'@;
put 'Jj9XO2BjUSlST1IiTm5Fa2FFWGAseHdCSC5rWGQ1IVJtaDloV1YldCo8U1pNNk5iSDxgKi9zJDovITFCIUAxVlZBT2ledyQmNkEwIXBjZHVqQTglTGxgKHpET3BOfmJpPGIuVmJscFFJTUgsZ05sOUNQL1kzMVBuSlUsJSVPVWFLRE8+S3VwLj07TWdAO3NYYmJQeEZhayVyQktWOFNEckAuVT1N'@;
put 'OG1MOXljVUY7ZUZ5YVdzdU0pXzxfNzc6aHswO3ZLazZsK0VKOkxjS0R4X1luMlNua0VNTF8+RFR6cXNScnpVVV9HPGk7MW43ZD5QPlZfUHk8VSN9NzR7VlVOZlJfK3wyWWtSSyVNLmohWjEhM0EuSUd5Jjo4OWVPcXZNNGF5OTlDXVkkT1kzcUx3VVVFKHU0bFU3STo/ZD1Yfm9vRT80Lk4lUTB7'@;
put 'eEJtUU9EUitUNU4saTN9JkZ3YEokIzw3blVVcztgVyNuSnd4amZtKDh2el9JXURRXThEPio2NFZ+SHY5eFZDcXJvRktqYkZWSCFrQkdoJmpzbkI6Lk9jKkh1R1UuVXF9bSk2NHVsQk1GbFpmaFMqKTxmcVZEW3BsbTNFRFZJe11yY2A3KldXVFt6STptTEw2UXN9NjF6PGphQlRwJDtZMCNRXyNr'@;
put 'NEpXI1JfcHlGbUUmfFZUUkRzK2ltSH1RXVBDMnBFXl0hcVtQaigwcFRLZlU4T30mbWIwelpbUm0vdVEzeW8hTXFVTyRgS2x2QlRjYmFSd0dkZGBKa0NbSnFyXmtUSU9ebzxwRFMxeE1HK2dpaTVUN0F7WVtTdlhFdHUiaVo+JFpVKVFpZSgianBjR2ldVEdZYjIoSkRHY3JIdUVybilMSVFiKUBN'@;
put 'NW5DMXlDeCFxL0gsZGAxZDNJVHZtLjtvaj5SSj9zUEB2bWwwWS4hPmt8cWRiX0YkcDkuYnIrOi9tJVFCUjVxVjE2dkAjKm1GXmBXNis0VFQyPGV9bVR6bk9KOF1qYjo3L0VtLGc4WGdtV2AjWlpRMEAxJGA9bnowLE46S1lFVkYxLE5WRzZaRVFbcndtTCswUWRuIyNVN2d2d3tNUkA8M3Z0WWtk'@;
put 'TXN6MU92SVBLQEpJWXdOXkIhOj1lSGxEYV47Iy98RHZrV1UhQn1YUTVOVklKOGBZXXJhR2tyYm9BPEdyTWt0bGdqMmxMN1ZVeHw/JWJ5RT0oTk5teygsX0FqYll9RiosJUB+dG9vWD82YDY2STJxPHI+K0d4TTJzfXREW2BQLEJxIUt2QVR+PGVJdjEwRldfPixNUmpwdmdFRUUrQCslP1czfWZG'@;
put 'PW9Ga0QuNnA5aVgmelUzZzt7KGZrQEtJLG4qMVJ+UUd6KTI7X086cG1lay5pKUJLI3F0WnZNNGZUI1twWlkiLmZdQHNVYkttPDZWNVh5MjxbZjJ3PWg0dCUme2ViTSNnfjtwWSRJMnA1X0o5LmBgYCs5dnYqTntnb0pRTk9yL1BsWissTiVWQy45azkjI0tQPFQyWVQvSHtfKWc/JXwyfkRYYity'@;
put 'NFo6cXtIb28pZz8lM0dEWj1YYiQkWnNYL3trWkwzL0UjbV8oNVomLHJjMX5rdSwsQHRiVXU1WzFTTXZpeWovNEchZXJVTUg5Uyt9UGU+RnopMldHSGYkeSJeZUorcUJWJkphL0UsdkdXTWdkYE1LIS8mcEdgNm16TiwhPHcwelZUTiNrQ15CMTZfbUddayYqIzxRXi5qJl1GV1hlZmZoXTZoYzl5'@;
put 'WmUpS3tqZkJDS0tvJG9hZz1jSUJZWmhtPixoVmEjVXttcEBFKVd5XUN4RTVTe2MiYDhtPmszdXk0KUIjZ2E8ZWYqWlVVODhLLElydEJ0SEAvQGcmUCh9TnBwIXV1fk1nVj1qSHQ1W3s0ZHFNYGQ8Yi9tYGM6fEVIL3cmSykhayZLPykrTGNrfX5McTFRMntuaWIkVTtaSV5Eek1aPjRqLFcmVV9o'@;
put 'VEtzL2Q3LCw6YFEkXig6V1BGfUZ5PHZdS2V4TFBpWj5xR21pPTZ1WDxgYTBUfnY7Rm9vO3tqfns2WWtGQC9gIW1kLDRqXXslUyt2djAzRihIJFssJGZfQnZNfGlWaUd9Xih3JjtvIUZ9bzhPeHFQXSI0U1psN0k1Nj5PI1QpQm5NcmFiTzpOM2VKdHosYnMyTnNvO0E9MnV0bEBrcXBQZGEmaU0+'@;
put 'VStIUFouRUB0QDhDaUN+ekRwPW5ULF41VWdATHNodnJobzd2d0U9X2t1aVI8eUIpIztldHtxTFlPdF9KazROdiRaM1ZCUXsyTi5hLzE8dzNHXSxaN30hYDk3VURKVU5JaT05di5OUjJbUEZxQHkqVnFzc1dgUX0vKTtLZDojWThAViM0XUtrMTE8b2xGV2A0VXkhN0tTXUNeT0I/YCtzOFZJYixJ'@;
put 'MTBBTEZsay4hZ3F3ekMoaiRMRkxpYDxoOVZKKjl3NGkpIz5VYHwkWk9TdFRqPHR7ZnpIPEgrO3tmQk9SQU8rMmJ3NW1aQHdbK1ZmalFzK1k+bitPTSkvKC43UXNfWVBfOFZCLz1rUV9wSWg1NlY3V25PWCo4V2g1T35dTmlYNyVGSkxtdERoWzFaWEVbSX5sUTJrKXA9Ti9NT3dxekJVUmFTZWZE'@;
put 'dV5eZzk4b2tXcil8OE8vWSo4P3BMQHQwaWM0PjZsU2l9ZVBpeFFWbj9qeTNLKnVAXkQmTVdRKVM5cUNFam1ecE9Lfkx4NC9CLD44d0ZocSJnWnhiaEJXO1E3OFFzcnZ4NlY+cDRjVl8/Y3FDNDNQZHRaS2dsdVd1RGF3UjB4NDVXZE0qKURSamclLmFHNUJ5VjNuVzg9XXVwdGNxdmdFNnU3UCFV'@;
put 'ZngoS29wZmw4JWRebWU5bShxMEplfkRJb3tyajJeN3RycCFNMSVOPGJxMSVbbCJicDM2cDQ2UDxIViRrW0doaE9pMHJPaUs1Y0tpVXVeb18/dFM7UT9bK2d6O1UrZnRKQ0M1U0J4RyE8KmpwMz1yUCMleVdpUCokIn1GPW1STzgkZnRtPHB2XmdrO1U7JEVEZTJxbGVjbi5uTEpbSCloKlhNdl45'@;
put 'ZnJiYTpGQjRXbit9OihiSFRfXTV1KS4wOUV3PkJmbSFTZmhJdkRdUDtxTSk6KUJFKngrakpXaHUqSXd1YDAuLlspZU5oYzAhd1FGI3JVbmtgRnJYcmQuVTxCMjkqKF4sXjlNUnZ3MmBwblIxRGkxbUdTYXwpYFE9OEtianltWTdyZlBbVyhKLlg1Q1NeOC9+JGNrXXFWejArXkZQZSUqI0w/YHY7'@;
put 'R3BwcStPM10yTXZmIUxqPTxfVitOOD9rWldIJUt3SzZQcnRHUj1hSXg7ekRVZzZYNSxdNG9kKi9TSz5dRl4/eFRHd14zeG97cmUwfkdBKGZZVldyUWltNCptTl1+PjhQSkA/MXZsUWBuJWZacD1JIj1afTQ8Umx4cE8lOyZ4MiE9WF50K1NYWSwlenhzUlA/aS9ndl0mPjduZD9UK2UhZSIjdj4j'@;
put 'MTspPDI0N3Y9XmJTc2wuaUo7dFBIUXVLR1EmRltsUj0/aThEPzhjWFVVXXJMfT5sL1t5ZUQ5NSpoJWZDdlQ7RHQ+W3c3Q24mYlZJQVkzcWc/V2FUO3lhLzRVRXRoSUFmSkdePDh9TCF+YVlhdFU8MzMvbGJYIz8qa1s2YFNnOzUyRU0pUjZjZU1Oe1tOJDNgYE98TUVkaXN1VVVkJEFoY15wSCE1'@;
put 'VWQ5KWRlaDBtcDM1b11eLGJQM11NUXtFOCI1ZURkSjhBcTFZaC95O3l4L0tsPi4mV34+WEFAKzxFJnNFNyZzVl40ImM4TyhURlpoYSsjLFQoVGpCWTlDMiIqUWZ5NWhdVGZAKGxVdUVqc0FPXkp1NWArTHA9OHBNM11JO2tCbH14Plh2Rl1XYE94djRlYnJJKHB5Xm92ISV5fW9AUzZeWSJTTTVt'@;
put 'eyJjPyFsdzU7Qz5aOCpxRE1YM1F+KkUycVYsU2s6ZDBdP2NBSVJKOSo/KC9wSSV5NT01T1k4enV1KCY4W2krdVdmWzRJeX1dJkFtbz4yPEEhflFwSltWKTc+NmBxZD0zXiMvaVZVYHRgNy9gPGA8czV+In4odkxhPW49LkVsP2l5b1EyTW9CNnZ1RCI8I0IwXjJ2L1NyVU8menY8c1pUXWs8WkFh'@;
put 'IyNmTVtFJjo2OGMuMDFFfFloZyRKZT1qWlReYmZGaDxUIUJhRSg3LyU8NUg6TDs1Q2Q3Zls7IzFnPEtaWnZPWnpZVGBoNV5PdS9oLmFvQ0QxbXNMX3wmRkJKZStTUj1gUjNYXz42TG9GfHcvVmowPmFTI1dFdjQ2MzJKO1dDZkAxX0BFRHheS1ZqbWdZKD91REMkPCY8bGB0YFM4NThpKzEuYVVd'@;
put 'b0dnLiwvd2wzPmRVdTV+dnUsZWE3RVMpb1hCOGk7Vy5fT0V2UF05LF09UmxETGdYXyp5KnYwbUFpQjNFSXBVXXk4bjVFRnEmNUN7PnlTbnRELlR5cDhFbDUmdm1YK1lfSCF+MXdvK3J3XkRxeFU2M2pSWm0wMjVVLHYzYHUmWUNWXUlUZUx1JTdWIU1YY1dkWjQ4T1B6K1EhZHhBPiJOaGhMfGt0'@;
put 'PVdpdXs0SClJKHRIXXsuM3lNd3kiRmJoRzE8Rk5zK3liLDtTQmVnemI4dEgjI21mU1UzPikyLkdMRl49cFM+cXoxbVhndCUxc0ZMR3hxRztONiJ5OyxjTlp1bTdUazh7cjApW143K3YsKlpeM1YqYSlbb21kOH12dksybCp2WUN4WHFtaj44Yyo5UDRQO1R+XmlkZDJUYEZBTFdNJXxBVDMyfTlH'@;
put 'TUp7M0JgTTlScHlAbzove2AsTXx3cEoleFR4LEhbY2lUdEs9ZmVqZk9lZjVoPml1K2BiLF8vSzYhM0VQYUV6eWkvSVA6Pls1YnN5UV43ZnxEKjRnI0FJIjRRYHdjcyxeU3ZSMzhXaHNUTC5YXiFIKGRHKHRIbDxJaCRARmBHbHUsa1Q2LndKaHEpQCZPdFEmLD8hbVtaa3dyfD9qeVordl99bzgr'@;
put 'WitfUk1qTlZGYGp5QzNkMUc0fXlJNjpAWV1iJlomKEdXLDxzSmpieWE8Z2ldSWgxZ2ldSX57WWI1andRX1p8YU5tQWUjNixKMEc6bUVbeXdWTV9gSk9vWjxILGNpaWxnWTlhdW43KVJpd0lYQ3B6OHcqeGRDSVEvJkdnJmQxXTBXL1pnZlhhIT10ISRtTn0weS9OI01RMUdnL3NSSWJRaS9APS5o'@;
put 'RFpeOyNeR2lHTmRTPE5fam92JiorOiRxK2xKV2E8TlVGSV5mTGw6bjFWKTspQ1AjNSgyUVhufVdtREptMzxBRm9hJnNDVnNvTmlaVTElTEtqWE1tI3kyd204UHg7dixLRS55NUMobVJRUWUkMTR0fnQraTVmJm0jbFNQe1c3SmtRUFBbV1ooXXRAKS43YFdxLldjJjo2a0s4JDVtSXpMc1IkcFFj'@;
put 'YENDSFppRVRuSGU7XnMpaWBvL1JUSyJCMm5XbmF8WnFnWkZKIkxOKD0yLkxGbixkSXt+SVZdPmBxTn5ERF1eW25FJDtsNFZOcT5XQF4vQ3Ngbn16Imxwbzhjdl9FQDVnNE4vcEFxOmJgeXdWbkNLdjohUE9tKyJrQE53IzJFSFgkZjF4LjpIJWJ4MHVteCZ7eWs4WSswK1JxazY+cUxtcHxIZTVU'@;
put 'bTZ9M1JDRTcvM31VSyUrans8Zl93W0h2WHZfTTRfVSJ3OC9jentePE1PPT9mPlBfdUB5aXdBLG06dndTPDxIeTVsJFE0OCtBcDdnZkdGcylxL1RCN18vTkxKUVhLdDs1bGl7fXZFT1B0PzgmWDt0dWpjUExtbysxbTlkU0NRXngvJFFLc3s9VThpWVE2QTBlSjhIc2dEcW9pblg9IzxkRzgsNU47'@;
put 'LHlaZjE6ZUpgeGkhTnlzWE1hNzhTOWFhZTtbZFN9YzpAKywwLEBzZmx4PCFFfSN2MCReakxTZCx6UXlSWGMoXSR4Yl5ieUFMLGQ5MFssN2w1aH5kUTZMZTZ1LDVxWjJxMTVjLmx6d1ZYMUZ7VW1WekZgRyVSd2V5c051fXY7d0pLVCwxcjI6JkU7X2RfRjYlbThhRF5aflVKKjosc2BKcSUldlJx'@;
put 'Ol03XUdrLnE9eF4pNXpPaD9hWCFtMlN2UlBrdTJ0IllUIjs8d2FtdURGLiFgIVltVUdnfj4mblNSPjM8c2xwREpLfUZyT1ZpXUF2P2twUDx7P2NQNlNiejJ6Kj5bQj11VSJ4KT9vI1piVXpZK1dpQFAkPmlUXl1xZlN5VyRaLGVNV0RqL3lCJn5nUWpETTNLRn1eWnMkVkkhZztPUH15ImNqflly'@;
put 'aC4zKG1XOTlzMXhtYzM7S196cDRES35fSFVgP3R1dTI9TTpHM31YaypLSjwoXnoha0oqOyZLWGkpUmc+aHd7Q0FPPlBrUTRpWWltfU49JGRUKW50XngyW0okOXNMLF8yZz8/ZiFqIzIxWUZMOFZNUyl9UGhzQFBqMXo+dVJOe0NnKWxERDt+OlJQMFh1R3F1bnRydVBpPWhVcVVjb3VSTj5pP1c4'@;
put 'Mjl1MHs/VzgyN3Uwe3VIaHBie21SZGM3VURqRk0sLCE1VSk6V319R3lIYzJdP3g8L1FTVS9ULm9TYS82ZTtuNjNnWE1yQF1udWdYcUZfU21QOXdIZ2hIeD5CVEtkc1R1JndlL2pyfCY5KTI4STM5VH55eTBQQGVLQkhCPldFT3VPTkBmTTF6QSsmT3REaX18Mn0hZGROPXVqYTZMM2MuMygoTmw3'@;
put 'eUFAfTRrX2pjYCJ2OixrK3tMIjwuYSpHT1RoR0hgKE1hSiw4M3VnSl4qMXU2JGoyU0BJdV4wTTtKWXkmVVcpTTw2c3swSnNFKUw1TiVgOE80bmwraVB8TmhWPzdZTGZtMFVrQHJsKy9WeDx3O2g2ZUwxLHwzM3BackBXTldBT0J1dWpBXkQwdGQvS29td0AxcVQ1O1luMHcmc0Y8N2JSNk1+STJY'@;
put 'YjQjfGBUKz04RTgmOjQrWGNXXUkwLFtUIj5MKkRJWC80bTRQekRPTUVQRCoodyE8a1NoW3lQclQrQWVGdz1VbG48aSo7ZS8qckg7fD5xOSlmb21ndUs4JFhRX0V+OkVFVEt4aXRYNzFudyp9JHNxdjBvX0ZlKGRPTX1QdS9JWFFUKXI3MntOT2BVO1dIJmw5I2hjSjVsSUw9JD94bXM8OVhUTj8v'@;
put 'MXZPRjwldkNLZUg7WCM0Jns4ZkttYloqMHA1cWU8V1A3O28rUlNkYmAyPXZZclg3QHFnQjhZRnpIJlM/aTA7UHBaQ19acHdfNGBbPDEqQ0ZqPzJRV28sN2RRU2dbY1toZnFMXjtvfTRFL1YlYSttQSxdZUIhV0VHMHh5OmtmcUpzbH1DY19ld3IkWX1xQFJfVlReYj1iYDJTQG1GNGVHPFBQUVl2'@;
put 'OS9Gezh5S3tSKXdlJFROV25MTDA4TkR5alZIZ3kodDQ/MixUUGV6YnwyajNlaXtBP190fVosLEZALlR4KW50OVR7VCxya0Y4NkNYNSMoKXckLGwvey5SL2dfO2sqW0w/ZVN3fTg8OixNOnFxb3VXTWBYMEVzJW0sWEF1QFt2V3suPTx9NUZqYnY8e2Vue3w6bDN5WWEhUjY+b2hQRihmOHpuaTNP'@;
put 'Nj5pL3B5cmZ3MD5sZzs2bG0kNUlzKnhoJWQlWmtLVHxWXVteVTtqekAxKkwqZz5ZKU1vUzVKOW46WSY1X3ZWKlkpMjl2VnFWR0khREYueDwlK2BLSFUrcmNDQ1siOHpBMFBySWhqSXRWNHVMNz5tPHQhRGpqNTVMYD05WnFMbGk8alBqXjcxJllJZzhSSUUreHNyYF9HfTUjWC9beGtyWDVac1lR'@;
put 'c3BfTUFLfWgjciZJYG41Mk5MbX5aLF9aJF5beyx9cFJJIjJuOklYNEVxSHBmWFk+Y0tKcS8vNCU2Wjd6bjIyQix0NTpHJU4wZnRbWn5XeURaM0dheUUhcmExe0NSQ1BlOipELClGKlJ1YltqSUtlSipPLzlfcWYjSUZLYVZtaSt9aWlVVWdLNmVkYTB5VENEQHh0MnNMKyh4cXEkPDxOZWV9KHUw'@;
put 'fDNIWEd0WS49Wyh4SXVAYUhSY1AzP0N9fUdoYnh4OXpGR1JjKT1MeVhHOmNAYDFybTchZjp8RzYuZ01KZjVNcGdlekJwM3B2NUkpTmkpWzh7ensoZVVCcT42W3NMMWJoeFlDe1prJmIlOXpicnNmflsjei5xI2xxcHNqfVQhLnkiRzwuIUwqdCRUbCtrWFpzV0tSej9vRzlSalhMSmt3STMmKSJm'@;
put 'TGVASDdLNTdEQGFuX2J+bl9hc3ZaQmM+Rzw8NHdpUE4wZSE0XWwpXWZgXkg3Z3xgUDZFdH4sdkdNfX15RnxhJTRQdF1ZbmMjN0luKyh9NTRZVjApNzw8clRVP2JeRiF2NjIhK3R+cDc+a1JvTExDdXhFdktgV1pYPSxgaHpHN3NKZ3pqQz40UjR5PXN0QDx+NG41SD1yI1F3UndeZTJ0XnZrKyE5'@;
put 'b0x9TlNAZk50ciVeQ3JuYVNaKmJscSlhY3dlYyFNQGs3bmIsKUZnSy9TL1pLdz9oXi9EZStsNjo8U3xaa3BPaUs5I1UpL3clSDpPeS42RlZbJHZiLEkxMEpxTXwxfFVTMSxbUCtWXkxDcE1OTlVJe1F6JUx+clRfMVk7L1V9fmYzajJZLiY+O0F+R10oTE5QJGRbM3dpPnR0OiJlKmZkTWw4e1tB'@;
put 'TVg/SzZoTGw1PXlYRHpaYTBoMz81XUk6NXpHNHskKyFMImR9WChCZHE9WE5TOU07dCZ5NG9rLCFsMT9aZGF3WzgmdVArI1k3anN9SERxeEBpcUUiXk82MCladlAwSGYxRyZYZ2lHQyhTbixiSXs6ODhlJm43Vmo7KXgmLkkhTXxQM0VGMz51PykkL1VKIUplZDVRaSk+KyRjW2N1alQ1Y1F5ZSVS'@;
put 'JVA/MGRZM3ttSSNvWFdaciFlSCN4e2klaG9Eb29FbWR2JC4yeTZAPVhaWHoqUlF4fCMjLikhUXx4PnBRND4hLlooYnc+TEI1SG44a0lZMVVJWFAuYHl4K3RaSWordjpVR3pxL3d0OyVGW0t4aWIrU2V6VF5rejt1PWJqRDZnZERxTEROO3Ryd0hFQiZgL3xmLnx9azkhUnUzcFIjYyp0ak9ZS002'@;
put 'b3BYYEtaIUwxT19wWjxUJFJjQ14vRl5VdmtqUTdYRHovMzN8RChZV2kpUCtkMmRbSD9PWVUmRDBJfGt6Zk93Zj9IIyQuN3BoQms+YyZreFQsOlo/V01LJXdVeiFsOUBVdms1eHwmUzA3PltXJjNaOHFDSiVFQWBfaTI5UFZyfnx4bDI5cWZpPHwjVUpqJGBFU3N5O0BvP3heMCF6Nn5xS1cpdU5t'@;
put 'eiF6NlBWXXVhfD10fnF1U1tEWiZhW1kqMGR0WHwwUSE2e1crUDdfY2lOVnchK2s8PURhSmtlM3A7VTM8d3I6L1g+M1VMbCovbjwlLnhuM24qbEJkZUlNfER4KmYxNUtiOllJVmZAK04qczxaS1klTXJsLlE9VTkjaFRSI2xLTjN0QkxhaGhjamZAWjJYXUouV0pZLFosN3BmPyM7XkhYans/JG1Y'@;
put 'MnF5JmRrLE1kfFolKzU+KzA1YmRYJjVWNm06e2lKd0c6aG86WSIzRz1fP2ZNU01uTTNARE1gfVFUYGJkcmguPlZdY09WelJOUChnfTNrNCVENkUiWEhsQDQlLjdwPSpycyxgJCttUHhmTzZ+cChCLGtrYTh1dUJRRHk7V09Bej5MMT8/Q2A2SjYlK2J7fmBqUWVyMk1SOkR6P0k+QF17NClMLk17'@;
put 'X29IW0dtQlVdP3xDO3l3VGVTSHVLbncuMzMyR18oUzIyR2dmN3EvYn06UypgYXs9LEclIXNYflE3JkVhT1ldYDZ1P1BoeUVwJjBUOzd2Sl9oQCpFKWZGcmZpcEBpRiQzXU9uMnpOR3JyMzVxJm8jOSg1ODN9eTpNTGI7MVddPlt7LGEraF4uJGNeaFtxPCUuP3RnQGpwPGopXk96TiszdVtDWUVK'@;
put 'Kz8ub3R8XVlHWC5GRzdMUEo5bmJYXTJ7VCpVQSxNfXVqSH50UU1gJUlsPEkudj04JDxVZGZWOGV1WnFXZTY0dEpwRzJMby40b3l+ZSQ0QFF6JGNVO3w2Oz90bWloeTM7fV1+SmsldmtUZFAoOVdRL1NSJUddV1R6eEZMRCUhYXRxdCVHcmtvJkBqbSlnN0ouUFk1e1ROOCRHOkBNamFlZ0tuXiQy'@;
put 'VDxQal0sfXljIUAxVVZkclUyeGo7PGZtTSlSI20zKFthJCUrbXBoPDQ6TWEkdEgxaVJ+L3N5Oy9kTGh1QSwvJXIqOVo9OTRKeW0rcGkkOCNRel49MDM9Y3w8Sih1azJ1ZE4mWG1Aait9Q2xxfjRKaEVyNnVjJmdPZ3psMjFMUi5AYkg9IkwrcXU8JW5EMDFzXSskL3MlI10mOCRkIlJLVVF9eVJU'@;
put 'Sy9YWFV4XVJGRVdlcEVhfilpKX12ZlhoQzVBPDhGJTU/ZyNEe0d3UkEsRmlGeDR2eUV0R3dYTjtuLHJMLnlkWEAsOGkkJmZaUklKZFpyLzlmdCs/dkZbVXYzbTI+LjFYYjtzJnQ4a2Z6VEAqO2RbfXd7K2ZVaClsXjk+YXJnPUspOlpLSyZILnJjaCJWT1o7UDxTP2N5O1tLZiRCemEwfXZZZT5b'@;
put 'XVRMVWYpaGZdSFA/cnoqTWA2P0lXNGt9aiM/ZSxeUUI3OlIud2xNZiJWUXp0WnptWTQoXV5fRlFQcEV+bGJtKyNvL1dlI0s4MExzeU9iZmojOGlDS34lKHkzNmQycmxxfl9Rei9uMHs7c3o5IVl1ZU5nRi4rWW0rL2ZIYTVCO04pZDdXe3w2WjNsPGdmcXQmXSNJRFpKdWNyQU03aS9mIzp5P1Jb'@;
put 'QjJWPWVmTT1+WiMySkRtWChlIWdTXzFEJj1xcEF7UTp9UjAiaEdCQDRNdG9hNFRSckJJRi5+P0FKa1lXUGRjSlcmO2g5SUxbaVkmNUk1Ump5R3JYRltLUF9iPjhsKiN+YmA+bD5XLHdWdyRbM1QxT0ZnTjsqMWc7Uy4xW1Y+W148fT5mR2MrJlQ2VmdWPls3VXosJVgzLCNFdmd0aiNWb2V1Xm9v'@;
put 'Sig9dDpjVjsubyZbYz5VTihsdnhLfDl6amIkSS4xYE5YJnw8MzUzM1M+OTQuKEtLbD03M2pAfWgvZmIlUTUkL0JIMnYrOSE0RFNdZy4xJSluKlc0VWsoZmVTVjpJN3cyflphO2V5eGcjd1F2KzkoSmhlQDBscGEoLGxQYHNFYFZ3aVdkT1N8bX0/amF9ejJwIk57LFtoemJXVSNXdXR1NjxWQGpx'@;
put 'TCpXfTpXXXZHKVJURkJiWF0maXpvNWRtZSErcUgueXxnQEpqentabSRBbyFoJVpVeDx9LjVsKDR3YU1gS1FsdllFMzBIbjgmS0tsamNwViNaJVtkKisqRFAoXyEvbDU8ZkQlfW1hTTF3cDkvNS88Ikl7eXNLTFdGTEpMYG9ncjE9Q29IME9oVEliVmYvW2c3SnczMFlxNHpvYmJneFtWVy4hcklZ'@;
put 'U3c0MFR7T09mTmZOUnY/ZnxoPzxDbXVSSjVaOjdaQnRuMEc2Y0lMQjBqM1ZLPEduKCYmeSkqM1Y1WFM9MyF0RUshaXJIRzAkWTwxTmIjTytsNS9ZWGlBO1I2THoqIjF0ZkI0RUBbOksxdWkjNHo0MGApRjZfOGJiUysoUFhuUit5TWMuVy9yVTk3dyNnclAjWjlHSyJCXXI4UHRZcVlfaXo2LG00'@;
put 'I3paMTxVUDchX3c7KzxpNEs/Y3kzbWVOaDh0L1J3bD93eXEwO2BnUytlNlorU2A4dls/aS9LeGR4VnptR2RaKntMNWRTSnVOJEsiU2hzRT5tNmVWTi99Iks5b3JWUlolZFBYeGk3N0d5e2o3MEgkT2hMa3ErdWJSVF1YODphVkQ5LE5MKSwxfkBIbGkpPVY2KTosQ11CYElMO14xZkF1Q3hmYV1I'@;
put 'InJfd0RiN3BFMSMjInVqRExLSCsoWnFWckJiLl15flskWSlaV0grMUcrUTpfbWQ2Vmg6QjtNVlFzS0RKYmNHRz55STpecVJ4JVtPek96I3FteHMmVkhaPF9tMkJybzNYIi5UUCwpNGdtRz9gOCsrPDlaXz1eWkkqM3RmaiUvNmtqK1A9IXFZUVNIblM6MSRwZGR+cWNPWElPSS9yJSFnbFIhPShA'@;
put 'S0x3UFQ/bE1kVTtkcCYuVWRAaSs0X1ZQXmJibUZ3MzAxJFs3YC8kSGFHeEZrYUdVSSJgSUtXVTRiLFt2JixrNilQQlNGQCVCaChwPFhVeEREV1VIU2BTP31gTmEkXnQvW1Y8eC9tYGdlSVlxQmBIbyU6VE9OLE99elNkS302RyVjcTQyWFhkJS9FQSMoUk5DIntFMVA3bkZgKkJVOXZzVUFvIlto'@;
put 'ZyE5dHRML2EvST1pY0VRQUFBQUFBQWdBQUFeVTQsPndLOjVITE1MdDJJKTJgMXRqTHtpdlVmKGFEWSxiIjRkLyl5Tm4yKHpHb2hYZEgrbSJJMX5ya1dKYkkzOlNARGpgWTNDNHNfSzdbO0wkem8wWzAxJkBoKTJ+KFh6dSFbQzN6SHRFLHAqYl5XS1NMWTYqbmBlKnoyd0poc0JGdzQ2SSFUIT59'@;
put 'S0U0VGVoMyZsQy4xPEwmXnc0ejdoWTVFLHlYMTx8bXB9REM4cDB7LzlraXJpN0E8QDhAMV4lNlZ7MXY2e15oM0l8I2gwe0YhUmorYDgkaSZiVT9AL0NidmA4I1NZVCVeQWtdNWBdWlE1SzhUYHtpWC8xMiVMbCQyakpddEpgcz5FbEAjWkY2ZW5mRSxMWGdDeGZmKW9rUSUrd1UhJlNFVVg8bU17'@;
put 'ZjheLFo0aFFIVFRrMGdkQiV2OnN3fUtRK2s3akRDJjlscChFZytGRWZAUURjWGk5akR5emlUL3R9d1d0NW1vJnp5IyYyJU5UIiZyJTl2I1c6dFNleFt8Ok1jWkxjbzBvNHdoUTo3IUFGZypMWGs2bEM0U1lDRldWUlgjSzslTGNVbyFxdE9rZE1kRkNdJF1FNnM1W01aU2Y1MVBKWm0/NSowdFI5'@;
put 'PFtGMSpAPERybTVVcWY1cXN0NSxkXXJoYz9CaGxrTmpYe3oxPH0pZUI2IX4vYXd9dl55XUpsbn5IMnNaNU5QUjtrZipmNm9TVDx5Mnt7RW9gPCZbJEU0SlA/VzYuTFtER058RjM9QDkvMHQqQyV6KmIpTjBFOylJeT1qaV9KJEJ1MEtpdihEYnA1N2Q9PEJEUVd5N2FVJmcqZUh4IlhSI1lDWmkj'@;
put 'bEIyMjVFI3xKKlMlOzcsMXxKLCw6c1B4Imp+RUVrOlI8MDtzMG9xcVl4XTBqZ2hOdWIhUipOSGlAMXprMyVvQkJLQmVLP2IsMlRXbjF1Y2BCIX4lRihjT11lXmd6OCM2cWUxUEREKlckaFZQeXQ3fDB9Q2kvK3U6X0F+eik8Jms3JiNPVCpTNTpAZjA2N29ZNSkzRnFdSVAuQjszXl1uXUFzNTt0'@;
put 'MHBMUHlmZSVnIT02SSwpYXloWnlTdX5xOTl4YCY7VHJTWVo7NVlSfTJnVURUNS9mU3oqeFJrOi9ybmhSODxYIUA8JWxwVHhyS3RZVz9YclssZH1lfjUyQEVVYVg5fmBYa31SR1lXcDQzTWUvQXkoXyZpQ0VOLnExLGtwckVqNjM5fmVuVHE5VGBXaW98MTtqIl5ZSX5fazAyazcoMk1pSldpbU1e'@;
put 'Q0YwS3JuREBYKiFrdmNtaGE7R3xzeCpwa28sdmF4XiNbNGNyRkxWU1dPNDdjPmJjYjJfJndXUDpGI2MibTdYZHpLOWVLLzd1UCRHRU5QWEA6UUlwKFdVbEI4ZyE6U2F0K2JQezQ4bUdqV0NsQjgwZUBJRzx1M0h4OTBPXzZePDpNOisqUTEwVl9RQEpnezdKWDdmeDV+VENbTEYlOkl3KGdPZU8k'@;
put 'MShKSUV+YWN0Zig0NzpNSFdMNUBiMFtkKl5qXyxmbTJSRF1ZLClYXzVJUUF4NEBOe35DJjZJKENsIzR5aTZaUiEiITxMRDYoN1g5Zj1rS0Y7dS9kezI9OWAiJSo5WGpeanoxbi9uLHM9fCVlNjY7KmgwXSsrd3VNI2t0PUwkRU5KS1pZNmtUL25sL3chQW9wfVs4JEx6cmE2ZS9IVXRyYCZIdy9F'@;
put 'SixRP3khS2BIezdbe2hVX0FBRDt1NWFbTEU1OCw0RCZFT05gX1EmN3ciLmQ6PiphYWVmdlUoNWwlKDFrKntScixCK1pXdkNsL0I6I3RScFV+TU9KKyFoaTReZWAmIW1RaD0/SFR0RGF0RVNsIXVGOmt4aTVyYldRR0pGZDc7LGk5TGdIazp6Vnl8e1BSIXhLUjphd1l7K1hKP01EOGE8XiN9XkY6'@;
put 'UiF9MltoMGlIP3Nmdj0rSD9WdVooSUpWSj9CI0osKU97YVBvWE9TTyliKkpNYUM/N3Z0T09AZmJMfSl0c3dCMS9HdVVzSWV8fHZPWkYoYH55YDo/MFBhSD5ZJnA8XVpFSXFyaFtzNXhWPDB9aHsqW0FPWTJsd1d0X2Q5M15UVHgxIzRNeipxa3FkSWVEaXBpXn03OCFlalZSYFZoeVBZUTtaZkF3'@;
put 'O1tHQ3VkTypraC4vVl1GPHFDQjVwa0ooaD1eSis1VyNpRj8vJSQ+QlAuYXpNe0xIXnwse3t8UHVzTS9qJjZKellvLHwsd30kQjFhSXk8XUg1YXo0aDElWUdlK3pganc4JjdARXBPditEbCojNSw9ZzE8YD1NdiwoL1BSRWg8IUJFUT03QHh3S2w/Mlk0cE4jZTU7bXp2eSRBdWVRMV1xL1lvYCo6'@;
put 'VjRuKVteUlolOU5yJjRYWHBwVjcpRSE4PG5obF8iSFJwVCRTUmBHS1BbSmxnKn1tKFdYLiEpJlhULjd2bVJFTGhgR1g1alIyY3ZJQ215blJMR3k/I2NmTUVtVH0ucztjI3Bdc0Yjd2F3fCQiWihLdCM0RCpKKE49XndzJVZHNnI2WnBVZD9TTThdPmhHV0tsV2B4cV89WC8+Pm1nVCEmYHYlPX5C'@;
put 'fF1mKkw7I1dMREZ6PypxWlkrJk17WVomLmxfWFB6Y0MpSWJrekxSVkdbRCxuWW9jXiM/KzB6PFsjWHpuUVhDRikob1BVTUlpRj07Sk4sOm56cXM9fHc1RUhMLlcycCRJS21lKmk5TlljRV5yIXlgKTdOWWNuPUVpKWFMLH1DUE45Lm1qQ31HQyM1WHB2fm07Zks6LzIsQ1peIkFWTWE1Zkdna1Us'@;
put 'eUxGKFBBQUBHIlpbJWw1TE88V1lXeGciVnl4SCZ9KiI/cDNaQWk3fGlpYXFfWSVIUSNUIncrfE8rU3JWNllTVFVFNU9VMT0jIzs+dkV3Qk8hZEtvZD1wVTdgPXgjSj4zbWFXJSxILF88OzNVRjZDW1FaITlKOXQ1PFFgIzdbdTZzXiZNLjRDe3gzSjZXeWkjVzJVYVEiR2Jiaj9aUFQoPH5QW35F'@;
put 'T0AibDNTQy84RX5sSG0zI20hV1MiJGRYdUUqeCs1NWtRMkBJfSYlNU5EeG5tUUVEVntzU2VyfFU7JiFXTEduPWhtbXpFU0VyRnZueXYrc0tbQFk0YShKJGJyPyVnX0NXKTBfW0ZWLkxPZypddmVYUkE4PzYxRnR2UHd3Pz1QO1VxTypUVF18PGQyTltiOSRfLE5Xa2dnUTBuNiJFOW4hSiJYSkc+'@;
put 'T0dzc2Y+K3N6SF51MisyTH1wZ1NPLllAfj5GeUZwQ1Y6I3spV10lXTwoeys1Wl8yTiMvQW9wYH0hbD55Wjc4Pz1QOXh9YyRtQTYocTNscllqKyZPQyVYTXwqRnFScWYhfXdTajt9I1lMSDYlSCFuRllJdyxFNkc1RmBiejsvIWkhTXRpQGYvdjl7Pm9FJCtLNVl6R29BK2lEPy8wWXxHRzJgXmZ7'@;
put 'ZFhfNDpTbGV1Q29wbThNSTtJMEIuckQ4S35lNH1oMUx+VXxkSCVoTmB7VV8pVjNyODFsfG9nOmU8VzJvYUIkYUtzJjh0O1g9JUQ7Sy5bZS4kZCZnWmtfRmhPaTtLcEwscCN+cnw/Ql8jciU+dTEiNE1CclVgPndkTUlaIlp2aVM+WEIhPD1zU2k8RncmbCQyRlBJWV9ZTDwmR2B5LkcxPSExIjQo'@;
put 'Q25rOnVAaT4/cVo2TkJtX0BtKXdZMDhuO0IqaTg7OHI8fHklRFFAPXRwJDN1M0VUWzhgX15Ze3ladS9uM2d7TCZmenhzOW9wKWo5PmluXnYzN3Y/R2dhLHl7PiZyLDNUXVFRVjd6Yj4hNGNtYHI7b0I/JVlgRUFralgwe2gsbXkqUDwqOWNxfU8vXUE3fUVRZmwzTnFvPHtYZWF4ZUYvSSRSSFUk'@;
put 'az94SmBwMzEkWDk5XyQqfFZvNCw+JEtIPFhQT2M/RXh9b1R4MUozVzVoOC9me05RL3h0OEpQISMhOV0+UTszPlQjOzA+fUdzSzM0SC9lbC5PVjRxZmAjeEZuJWBeMXhdWilzTUJqJCNMWU94RXxuOTluJSg5entFPCYlYnNURiEuKi9mL0h6WWFjL2goMD9Rdk1RLCVsKGM4MVJFaHpyISxidE89'@;
put 'VHl2SE4wI0lpWTQlMnc6VTQhMy9VLFdMdCtNQEd9SCt9WnFMazUxPDNrTDZDa3x9V3ZJejptLyg2cHFjY1FwXmVuaXpqdSRjRUJGP3A0Y29fKGF+fWdWcm5XNUs3ITlwKGo/KGdbW2JJLiIwRXUzQ3s/I35GYkt4fVk5MmZGeXRjRT98ZChhJEVNMXJdXkZXJmV5K3FpaH17aXwpdD5qY0pUfTl9'@;
put 'fVdZcn1pMDZHaCp8dlJJeCxiIl9GfS5TS01fLHcsQ3I6MURwKjxMJlVsbC94PDY3Ry9dUCxvQ3l7ZUJHPm8+KWdWKHZoQWNLRHA4Q1RPP30wKnIwXm02OzFKM0lEJVI0QFdacmNDeih4eT4ubjI3cmBaZ00pTVpgci82ejpkWzM6Oj5PSjRUM0UlXkNrQV1rbCZfMT8xYzFWXmV3Tkh9eUtISXYv'@;
put 'RmtUKlcoTykmJHFeUl5ZUnZPY2wlZUUoMmY7Nn5GaEVtcTNfNVZIcmxobCR3cH5AKzQsRGdZbE9JJVEpSDhyclR2OUkyZm1pYSt8aT9kXyx0SSVqJWo/IURxNzosel9dMzxVMkBbPXJRQUdNTzMhJT1tbCNCRkNOR1YwfkFAOX0qSzxGQTRVMmFvMzwlZVB0YUVVfEE8d2dzZngzQkduOyRfRWVU'@;
put 'MStSTTE1SmtDbCREO0E3MiYwZT5PWyFwailsO30ldjdXKlphWEA+Y1t+bmlzbk8qT1MzcWNXJD8jdmlGMXZYTHAmcHRtfWEsI0orNDBIOnhlVSllZll1cntqbHo4eiR8bFFqRSI8UDl8O2xlb0FwYiNPXihleCV5RWVUaFdtbFQpXTU1RnM+UjAqJi8xampHeFIzYm1jbmJVRFlYRm8pNkt9Z1VY'@;
put 'cFNEOl1aQzw5JV4lLH0hWFQwIVNVfFlPMk1SJXJFRz9TOUovS311QnRdNWtsfls9Q3lHI2dGNm9CQTohdmBreDs1cDheMWRRSWhUR1U9TFpqLm0kVGFfP09bUkVkPGp4OEk3JXhZKkF5SDdBeWh+MkJJMiNxcFdRMnBQOjdPdHNMUzVmUT42Ri5CQ3k8N3I+SlElLmVfYisib25KRERGPXV3YTdG'@;
put 'VWEyTjNgNThAMmZKaWw7bCpnb1VxI3QrW1VlQD48aHFwOWtMQSxDTTRuVmdmJltMXVouVk9pbUFDTyI0dlNXOCxwKz04R217XXpQWUJqRS8uIXIiMWgpIVh4ezVLZzBifU86Z3J0MU5lSW8wX1pkLCZ3ajZ+Zz1ZJXwlMXFLKyFPS3JHTGshP150QUVkZztfcDt1fCJmdVgsZEAhJGFiRH5MUTR+'@;
put 'bnp6SDBgNnshX1FeOGNWbUoqUFQpXz9ZfHVAWCs2MFU/azVYSmFZdlE6Rlgzc19bcG82blViKnA3dVE0UWQ9VXQibUprInhWbU03K1IwNVJIUFN9am0ufF1FQ1pQPjUvfDhJPWZFNj1sQk5hPmJFX2E2WihZTVtyPCRwMVJeRV9rZTZWcmkxKzVwLHRSJnwlTTVNJjFbbkRDcCYkP0xvfC8mMTFT'@;
put 'PUhIRyRtMz5acWVENUt4RCNLUzxtPWJyQngiVzw1fC9odEcvIiZARWhPen5gNEREa1p2V2Z6Xl5TPWReK3tJRURSST09ckR7LGhdeS57eWEjRV9qPTpDfmdIQT9uZz9XcFN2bntAbDx9dEx7YjFmSGs0T119VlJ8N2oway5mKmlCbzRfMjdqeXJMY18uNXQ5blNyVTQxK0l9eFZLdzVGaE0kcDl9'@;
put 'VlRAaVtoRkZ3YV1AM1BKLlpka1U2NDR0P3RYbGtqUjg/bypkQlA2S0g4JkNwbmQoSExqa2o2b05HWFljNm0lbF9oOTlzVSIrY0dEOkBGMXUwKGIxaFZ7OEM4WzlWWk9hRWRiYXMuQil2Z0wkYS86PjNeVCNINDB6fGUvMjRreThmIylJT1ExeGw+MyQ0OUpnXiw1ITJAKW1oZnBMK2dhO21HJU5y'@;
put 'XSN3Ikd6YUpkOypASnY4NTdYJHZiJklnNlhPZ1Urd2JLO1IzSWxdaURkISQlUEU0KklneFluSGdPQCFQaT18ekJQJHdAR3xmYDhrfVghYjIqZnZsdzdJdDtbQSFrSCFzNmQ/dUl0R0RESGZdc1RtMHFvNnZxO0o5WG13RlE6NHRRb3V7WitMVjZDLFNONU9pUXdiKzNvI2NwNWVbJmclNkwqNkxv'@;
put 'NHZtZnMoKyFFcDo9ITVHeU57KSlhXVZRdkhAZ3BNYl1NdXl5WEJxZHxuPXR7T04+emdnZiMiVzZmaS5qR1Ihe1skJDBVM2RqS19zem5ifkdSRyZbUksvdHwqQmtDNkZ8KlUhQyN4Syg/U0NbNkklSiVdInh0WmlDV2BHISE4SU5SdnZUfEJELzBrZmAqQGFJKTVxL0xMQF54cDFYVV9CZFppN2Zv'@;
put 'NDY3eCJdNltHZ2NAREVaM2ZDP3tTJFFENTNaPDVmbmZEZy4jSkcybClNbkBePiN1OSlGXmJjXXsidytLaSQ1X2VddF81LGB+elpAO2FvSjVxZ15AMCVMN3lnemdjLFtKcitnOW9PVEJYaUZ6XTRwMU42ekwjWndkPj83PCRCS2kvflBiNz91Lls4bnFPPiw8SzlCLCkxPkdmcW07Li87cmJLfSZ2'@;
put 'bnVGO25AWnIvMkwqT1p4Xmp6dlRJKnFxRERnTHIiTkslKTJgQjJlVGEkQE9LXnVqXXcse044bnIoQHsvVDRdUTpdbzx5bXR2UXZsOUhTNz9FaFcpMisucTY9XVpiO0R6XWZEN0pHW3g0aD8xN0QwLkNBJHEuVCppeyhtL2cyQnRmbkoyVU08fn1XWkQoK2oyPnhhWS9RdXNlOWMialUyKGZePyV1'@;
put 'T2M4fDIsbStrVTxRaEpWS11PVmVEN3V7OUhCTUM7JnxnYSxaaFlBYXhod0Q4dFpOZWwsa01sLzciZ1hDU1JfdDR5XUxkfWxzej9Jd2gvOkk5KXtUbFlzIUYpLFE7SmxVUUpKYk53fSEya2kuLzB5IiVrMytydWBIOzJ3OjpsQ31eWUgsfDJzNGJ5PVpgcyRbRHNeVklBaXR9bUE1OjVUYkhTOEY4'@;
put 'ZiY8Rm19V0RrMipDamtZVVhzWUZ4RlVQVywyRi5kVlBpY1lSNXtZLktuIiZqUSZBMylrYHcra0RCV3tLM3IyRSg6QmhYcWlgSj56IkthRVVIMj8ieSxMUmB5Zns/OltZc1lOW0A3dkFkeDBMWCJ1SChfSkNieSEwYFp4SjpgUUtqfVErZ3V4RXRSei86STV1YE9JOG85VUVDLFJAcWRbIktyWUg9'@;
put 'c0J1akN9IkFtTCxwPkh+ViJsUWhiUH00ISN8MTY9cVB0Uz97Mj0lWE1QbilYVShjT1NJXTZvaH1GLE1sSl0qPyM9LHRbd0pjb2AxdX01LGFbcFhXakRvbXJGSlE2MW5kPzpfQDpeMmRpWyg+K2pwcXwvMzlebGlkVCxZJEkkP0tgV28ufEY+PXhLVGdZVjRncUclfHAhYG9YVnkhIkF7IzJleX5k'@;
put 'TXQofWxjVlo2SiMlQzUmbXMyOH1ANDdCSl1SaUx2PCRmS2phMFg+OH0yZVRsXTpJKTB1VlFnPDBKd1dJSHFxI0ojfj9PaWY0WTIweGhPc0U9OTVrNFRldzcpNjVXQCMjJVtxL2RXTUloQ0tmYWlPVzYuRVhkNnEydGpZZ2E3U2NLYyxPWlNXZEJAKSw4Zi5MKDxGMTBrKjZ4LFRHJD82N2J9Q0wm'@;
put 'fVF3ei88I1o6QG1TQix8UV1aRnlfYz9PPWRmNj5bU0swb0FBTkUiPnAxJncyfSJsKm0oMGFzWkVXaDZdP3JSdCU0T04hW3xxKWxCTWVKNC4rLCZNPDt3RCR4IkUqTy81KzxRbGFGQWRtMD9ZUl10KDF3WXh3fC53YntvfDxbPnROUVh3IzY/QiJJXSZLOjZre1JSQUxYIVooaUhufVBhTmwyVyNY'@;
put 'QG4reEo4QypNRU8+NGc3YildNntmNHdLfDhAYDQkeSwkQzchW1ojOG4iOVd0VlBEUzxOU1NqMCNxdU9NIUxJQFZgeUhyWyRMS3pYUUx+VjUyJkwzNi83fVAqR1BeRTpsJX5nLi4jRS9IYzprYFswQHdSUkI0Tmw5MW9UPntMR1hMQEk3eGluVDtjWyMiM1Q+SnhmRmxIaVNKL2BbXkw5IldiQEpr'@;
put 'TVZNODZ4c2A2MSFZWm1fP352PGsjdn1WRmJvQTB1a0pgUWVsQ1N4L1MsXW9iVFFkVWYqMDJbPWZXUFlXZTRgTlp0OFJLSFgoajcxdj5QRzJodW9teTxwQ0kzK3ptTD1DP09LTWhVSjF3KEt8cVB5eV98MVFqR09aMmEqcX1bbF90RTBka0w1N15XOWRmWTROe1Z2cEg2blY+Jl1AbjIjKS9NWmta'@;
put 'LlgrPjQmSD5YLENfQFVOSG9SW2VdaCNrNzJBZDAkZjY9KDl+XS5MYHshSDgjPHtvalpQW1c5PDsuNihXb3I+dV9KaHRzRjxWdGZValhtZEVyWSR3Ll9rMXx4d0J4bDpSR1ZXXlhkWSpsNWNhfnoudnBPcnxPK3tOciJYKkxVO24jWkQ3Ly9uZnNHRlJoVmBzfWhSM0dGekJKIUxhK0ZpQXVBPnAu'@;
put 'PEc7YyRJM2xXUHZsfipAI1AqeiQyLnkyU240TXhZZER3MSRANkRCektLQTIpYXtIM3daK2VqYjBmUkAkKTNdalUmc2JCa3JjZ3I2fTYqb0UxP0EjN2JTLkd0P3MxTFlqP3opL1pBc31gOypkR19TP3IjJXFpcDk3YGpSYlBCQ0w1OmZDR2ttJGpKP2dVSTVkdm1RK246OEd9cWQqIyt6ZFJ3SzBt'@;
put 'KWY3YikqMHh+VlYhZXtRLiFYeX55WjImIWJxS2VrUURJeytQV0BbZT86JnkwRl4sJXo2T2FvbTgsYGV+fHJ3TlAlRnUvS3ZiMUo3R10xUjgjQTtZMHdoTFg9dmNLd2g9Y3NCPkVPKU5RTihfXk5wOktNRGFJN1JgK3c4P2M7R3dFKm9FN100d24xeFcxZWtmYCQ0NXc+IUFDZXVtX25NZHNHL19p'@;
put 'UHdUZjg3KloyUG0ifjZhaHwpI2VMdF1KWy8iXl1Qa3JXJGlubmtfQ3RrLz1EZF9HWyJbeGwzSXhLMTprZ0gjcDVAd1lnekU9SjBFPjxfRTZfLF8vajhmTlN8bUpoUVRsYlhHdkVIR09leWA+MEgvWjQ2NG9INjRpQEkveSwkR25uTU5IPFU6YTZjYVV6aSpJPksuKiFJfTRILz1Idz5aRiJ0JnU9'@;
put 'U1BET24xOFBGPS9gNU9rVk07dlBHKXdofmohX0hAc182MU98W0hMS3Z+RHYmMiJfImNRcXw5V0h9RH5WSGN5fDBbTlVRY3UyWyJZPkBKWXhCP2xGPi5wbllJJnp7fD9FIXh7QHhnbTZTMWAxYiI1Q0VxR2hhZCUoV2s1a1ZXdk5KbnpVcl83PTBYTlsxMmkiP2o/fipYY09LeVZ3JCh8JE1NW1FJ'@;
put 'Z0VTJHYwe2heQC5MQGFHRXVyOjkyKmY5PSlxdDhTJmN3TnV4MyJ7UXhhZkZgK1Y0IllMUDNpfFcuTk8pei5Qa3hORWtPUVM0VEtMN141Yzo7IWAvcUhkS2x3eTUiPlIxPkU1KG8rcXg1eUB2e3k2MUJQaE1BdWI2QD5yIVopYkl0R0UwelV2OVFKKVFLe3FWbGdiXjImISltQSFUVndISjBZfSF9'@;
put 'QyQ+VTI3cFV3WGMrZEVVQ2tEZTlXTD9AUj90bj4oWCQubEZOTyx7c2tlNSJrL0Y1bCR1JkduQjFqVHZxXzgyJUVfOmFESEsrPCE/VkN7algzQCE8YlhoVjhyZkF6fjd+QypfdnglbXg6Z0R6NSJmUXNCZWRpa15RLDNdTTBhNlRjR0Ulc1NrbTdIeEcvOVtVTX41clA1JHh1ZU1FRDw6KV1adjM6'@;
put 'XndgaC9FMC9oN0FPbyRjNDVIeWlrcTBheVoqQl9RUDlecXk4NytNVVlrQE0rQjFVfnhdV1FsWF5PenBUfCx0eXA2WlNjY0FTc1JQPyouOzI+cSJYcmxST0JJdUR8Tl9NLDhdLzNWVDVILzZuanssNzk5bENYMHZ3SU86R1FLUTspUls1XUZeSzBQVzh5NFZlbUZRPjF6dkplSm1nezpsOUJUPkV0'@;
put 'QmZyfSh5QFBCJVlkbFUpYi9MOzNaPUAudD0sNnRLMHZvfixLKmcxZE08X10/T14rQjN3QlAqWyQiQ3Q1cil3Y2dMaVpsQGxKSGtgL2ZgNCxJPyxlQSolejo3VEJPa29JVkIlcEpVcC53Ym9GOmF0WGZrUC47b3Q1Rzx5el0lIltGQz51dFpwV3ZMLFFBVismPnhLPVdGRHtJIj1EfGV9IlpDXSIw'@;
put 'bl1dWyZCNSp+K1NQZW9Ed2gveG9tNnclb0w2O15vJiJ4WkQqZD5JSDRmaE5rXiJ8VHJuckppMCRWKHpaUTdpXndlRldKZzBba143bVA1VH11Nk5heW5YUyk2ZHM7VHokfmhNWWspbHVyaFErJTkhUTdjPzBnVClnfGQxQ3dzRnYiRGdHTEFLMT5JTG0xLikiP3FEa1NYOjZXMSE3Ti9jL15jIX17'@;
put 'WjRVdDk5ZHc3RG5ON0glUSZBflJTPltTdTlaSjFwUjV6RmJQO0B7e3lKVzhbamhKPjZ6fWYxbkFLJjx3JFZhRWosb2k8Z20wMD5KX3c6RygyX31LUEsofGMpdD9JJC9sbWYre3xFKjt4InVZdmAjb31hcTlUQl54YUVNfHFqKUdEMlReeSFZKk0sVVlXNXEhejxrSyJvL0Y4amdQRiEmd0A5eyUv'@;
put 'YVA+c1tjSik7XjROTGA2PkhyWXB2aUdsZytHO0V+KjtXeDE+MFQjVm5pKTt7THp2TCF5T2UkaigwI14qK3pBWn5RXzMrTE95NTledWxQdixvOk9ySW4/ZGw8aWNaelJfW1BOJUhkd0AqTUMyVE05fV1iT2ZPVVRALiYvbjdjbVYwelc7eX1aWnFuOCtkZXVMfjk3OD9ELiNRNF0/SU0xPDMpRl8q'@;
put 'KDI5Z0VyJSwkZl1rYGE7SU1NIldfYiNyb3JfKkpbS2FLRkp7SlFMPEJ5dUp7RipFPihgQ0V3KmdgcUpQR0pDY3J8LixfcD9zSCtdUCpmemZSMC4lIVU7PmMlRzV8aCx4NlQhcEpoV0smNGFqZ3JjW3hiL3Zwcz89fnphbDBIR0k8TmtQPUtPb0JeQntTbHd7PlsvSHZ2bnAkLk5qJixTb2dmaW8v'@;
put 'WEY5b1pDS0xHbE9sWypvOXZtYnpxcC5tLFRHM0trRk5ffGtDenVXZ2VfTDRiMUkxMSZ3c3BPV3A6KVlhaW8+QWd5RXc2Yl1BZTVdWWM4blQ4LnJ5Vm9FSVZbcDxJTGo1L115cldLTEBYMDdNUlJoP3s1MiV+elN9RXZESGRLIVEqWkd9Nj0vdTAqJSkiO1RPa101fm1JbH1hb2BXbl5jTTteV2pQ'@;
put 'ZHhHYGEjQSshJTddfH0xYVlqYCFOWXZ7M1EubSthP2Jkfl5kSF1ROnkifHNAPUh8KXFzKyFkYlg4fmNQfjhiNyhzU2FIYnNmYStsLD5+S0RHQj4xVTxGTnV4dz4sLDRLLHNyU2wvOTF1YE52N20wQTtBWnozX3BGenlRX1VCN31KWStFKW0+REBAdUFpb0NZanVAcXlHK11fNHhgNk49QkxhRltt'@;
put 'REU8WEMjSmhlIy5aRy9VJFFMKyJyRlE1T04/NTdSK3t+MkBCOU1fRWVeSTU6QiJQZiZiTml7STA+fU5jMDdLQiRNdnU3NnxUT0czRTJ+PWZFPkg3X154W04vbEYhVnA5S0RGPzxgKGtNS0QkZ3RYVmNOV1o1MVlRQzxRcjxPMSxPXTpGIm40cDhbYHE2ImpUOEkheEU0Z01xR1BXR1JzVU14O0kk'@;
put 'RlFzaWokUDtZeWRkJX1Jezh2fWpMd2xKSGc+bH16ZClgTHlhaFoyJE1waWw6NHNxTm5XLih0ME17OTlPb1E0cHR7UiUrPzpoRyVCXkVpZnxFMDovKihjRXVodyZWRTVMXXd4N3liKGhtTEJVOVRQTVFGY3g4cz49KlJsd1guYX03Y0xiN2dNITVRbW5zUGxoOjtCKyM7R354QTxqLmE1dUFjNjks'@;
put 'TDl6eWJ2Jjd3dWIvLntGej9UOFd3Tz1WQVBPVjpFVGpia0AhZT9JWGB1ISJvKUA2Ol0hT3I8Y1RZOD48Tyo1fXtRaT5LM1g+Sy4yKFNWTV0heik4cDwsOWEuUUkoZUw/Z0MoW2k9VUY7O1B3QkE+IT1hS1Zoen1nPDclbVk+eGxYTEY4Z3woV2U3T3RYIj9GSjdFNCMhQzludWZWckIvPWRhNWVC'@;
put 'aXBQSk0sMGlFUjcxPTR3TE5eL2s6XV1pbEhRcnUpaGgoUUJ4NUlTLm58fXt6diJKYmlaTSZkazpBI3hAS1ByYGs1Uko2U05LcixIXjtPd2ZLaEp+ViwkdV1ucTxtPnhJIktOPUUzPWlaNH0yMzU5YTA5bWV3Pj5VbmZjLE9SSTIwS1tXflpzRmdASDZrei4iajtdT1hYTGZYL1c5ZT9iR3AqJTgv'@;
put 'UGI/Rlg2S2ohOzMxNVkjW1diamYwKDBUY2YiQkBfbmthcWpkJH1XQnlkSzNSIy86VGlWRERmVzk+JUtbVkVZe25oL1Z6WHRUQD9daSIkUDl1M0BiNGskMF5KMlo5aGdlIi5jIkArL2ZMbzQufi4sRkZOMntiMmkqXXF2L2khZEVIP19fJWJJZ0A+USxedVI1IypecWRZfXFZLDouJjBWI014TzZ4'@;
put 'RF5eKV81IU1mXXBrckBZUFRafT9wU3x6JWpiPT1vMkJzJCpOZ0tZUWg2ODtYbWRuMSJqYihibGMoeExoQ0EvY3ZKX3lodEIqT3Y9fG0lamErSl0zL3NgY3pnYjpMOUd9RmFEfkBUKFBxTllpKGpfK3d0JmtLL0QiOTNdLnZSPV18ISRfeithNT96eltIUC9rV0dHe1ZrYGZ2QihUdmE1e25YKSh5'@;
put 'R2A5eWt2RS42UltWZyFqbXZSI2Y1PXY7bnA3SlRRPS8/TEo0VlpyZzlGbzMyNlk+VFgxd35pW0p6MkcrfWlJdylXbXVEWGZhJGZHWFElPS4qamlbdW1sakB1Jnw7Yjd4T1gsZ2JzSzxmZV5RUnRteldkOTFSZFY0QyRHbGJGc1UjTTBBSihLd2xnWkB+W1UwWC5ybWkqOnQpWVV3bFQyam1panBu'@;
put 'KHtWa0Z4PVFlUTliWU1MeEF5PTxMLE5DbEJWRUg4WCFoU2NTOnRnU3hJOSwzQm4uLkNJWnojI2JOLHVvdVBdV1hCaXlDW3VWZXU6eGdOWzEmWzh1P25sY35SNVIsNykjKGZ+Kk9ETnJofm93a20uX0s8O1VESFJIdX4razwjdkxsLzJucShgQyk1QCk/T3lSO2o9PkBsM3RlQS50bGAwIzohMl9Q'@;
put 'ZERrRGI1TCo8SFBEcWc5JnI3eXReNFtGaVBxSV5mKFRxKmBvJFlsbzAmYn1TSHYvRkghV0JiUThFYnE9WzpLQlhSUHw5eEFKPk8iVixkZjgwSkNOTWlyTSQ1blQ0TFF5IkkqdyxSIWQkblJ1IjdmST0qMk1ZeiFZQ1RtX0ZiTDFRWnRpYWNiKlBvZUozZUoxPW9mRWdKMG1XQ05eIUpQMkpMY3R4'@;
put 'WCZiJFRaJUpeVVk2cjIiLEpgJko9elVWU0FfVVFxMVJza3RGbD59K3NuODJKbEU8SXtuLmB6LitsWmQ5Y2NaS2tqR2t7Y0BUP2xmOUdXQCFVRFFwVkxuV3UhPntLZkdSJSM9RTV+VSZZTHtxVEdnOTsvRTlacWVaT15UYzhrS2glTElQb3gyVCxUX2NkQmZlSXJ3YERyKXdfYmhvfks8blsoZlIy'@;
put 'dHVJN21ZQyVkJXZEKCFodlpnflFnUD44ODF7TmE7JF8rViE8XWhKZ1B1WUd6SyU2QCE7Q2ZvQEdVJWJMVDY4TH0ka2dscUt2SF9lZDlhL3pHOGo3LCQuImlKfiE4Kmd3fjkmSXdMJGl9Rjw/YGpPfENTMHozb1N+WzA7KUJ7VlBXPkoycDl3JDAkYngka25McE43QEs4Nj5JZmZCI1khNk8kV0M4'@;
put 'aUh7QExHQCo3YE4/fl5PfGFnW2NSSHlZISJ0WTtKR09OYCRubzomVV4zfCgvZ19bbGU2WW1YVWtwIUJSLlVifFY0c2pBRTYybkBvPzw3eXh2KCkxRzpaaSo4T2hWWWxVS1JHYXlRSE9QNyNlSkF0LD52K3wuRV12aFA6LHxFVG9AY0dzIjsoNW57KDdxVDJyM19RLD0/VkJWZmhCMy5deCM6RD8j'@;
put 'QWlzOkhPa3h1W1RjUSsuYGxmelcxQUZnezdvVFh8SkRAVG9kWDdbKUUkbDMlcDZsdyJFVVY/fnhVMmBEOFQjazNLKEtaUklTdHwmRWw2anNrYTkwRlVwfGddbUU9LkdWZUtVIkEpWzNbezZxeWFuNz5JTmQ9ZUZla3pxS2t6T0tpdm1MSGpeOm5iZDx3YVt7biMzbTkze3Q9dldlQlhrVVdreWg8'@;
put 'IU5Oan1mdiQkUzFfaURhTEx8U1IyKn5MTiZ4Qn5FIlZVYmo5XmNwdjIzKkhPektLJFVyPWw7b2Y2ZEAxfD0xaWEhKn0wT1Bmc21AWmdFclFoPzVXNH1Yb0E9cCw4YFZRTWJXfkpwY2hgPldiJTZ1PWtsKUElKHNfTm5JPUtvMTdGfmFuKCood3R4fVdQV3FbYEZPTHReMWJNcE1HdEB1KjlNKjAz'@;
put 'W0Byey9gJnwmS0lyNX51T3pGJiIzYlRgLjBUUzNrcklMN2F8TXUsLHouYkZSMU4wUnlTM1UpUzV0Y3ByNi9HciJdcnBLfDFXRjpUPWFaNjJIZ21jISl3TD00PTNwaDs1WjM8Uno/Pmpbfl1xdkAkUS5gVksxelFsNzU9bCUscDl5Qyl6ciJ+Y1ZmRGlUaGMvYD9ELiI/WHRrRFpyPDddSTpNLHAq'@;
put 'I1lMNFQ1YU9fNmYuZGp9SE91fF1OQVB4XVBgd24yb3lnLmhWKTMyezQ/Y0xDNmNuO34uPnNpRTBxW0lqQEBfeXV6YnRReDdnTXxzOXRHR1lnZkNFRmRIUn0xNzt1SWI/SXRvSGdTN0EuTWc7QzFobiRSfC5CYC8vPmtVd0FTeUs7NzA6KShMPVZjZlk4Tm12UiN4OzVTZF9iYjV2MCphdG18c2E3'@;
put 'WVZCNEdeLm0hP3BaKitBQlJtRWo2eC8+cFh3YjhDdVJGJUleaEg6LyNXIlY9fCh3QzAsNHRyJDpHRyhyKjw8SSRDfUxOSWZTJWhldFIzUElYO0JRVXBiKmk+Vk9ELj1hc1EheiFuSkooJiVOUDlXb2gjSF00S2A3amlFam5OPGc5bj1bYE9KWUwhLFROKn5JNU13ey8zdWk5Rz10WD5aPTghLHR5'@;
put 'UTw3OX4hd0ltaHJ6dyEyLzwpKGYzS11eNEp7ZStXKEIrV2p0Z15YWip6eEtIVk02Vj42T15OU0xVPmdGWm9+TDtIYDVHQyNrXSVrXWNneHxWOHIqXWJ1Ty97IyZDe0prTXVMdlM0OCxmNkN0Ri42MWVUY2psaVh+ZW1qWD55L08vTjhyYDV3Y0hedzV0emp4PGtMV1JnRFV9M3UhNCFOVk1SRyNh'@;
put 'Jk16d0A/RXFQbU00W1lvUzNYNTUpWXtbaWs7amFDPXIkND0rPWAleH1Sc01teHBPTWElNzJSJF5KNXxNRWUxRllvVlFBRiZCUDtUKCkpUm5BVGY0e3gvUnJLdWN9RHIkUG5Na3BPeWRuZ0E/W2xeNFVKOGFTOlhrJFk0b1YkbDs1ZGQoLFB6MjNIX04oJEIyfks5a2ZKTXU3VisybUhOMnYzb2JY'@;
put 'Jkhze0F2R0thNyNqdEYuZDd5SlZLKEx7T2tCblF0TS45MSNKNGZPQUhXbj5ETVZqdjslIkdVOWtbWXh4I0V0QWp3b2ZqPFR0cVkrN0YpQDp5PV9wdk9JYFNpQy9wbEk2dXddQUgrbGJrbHB+NiRzVTsjbkZHV0ZvSTdiQX4+KGhMYlZAMmJ6OipLVz4wdU94bWlFPHJ+PW1zX3ZIdENafExqa1Es'@;
put 'S2xrYV5GYi4xLnVGe0h+R0xJOEFHQWp3e0MrQFQoSEtvPkRvbnh7SEpITmI0KXAhe2dfMjQsbiYjNjI5Szp6U0EkK2xaKjhIflNsdDAzfXpKPWRtMTlXezp1NTlqcDRKXjUofGEwK0tmRTJRRmY3ZVJCZj4yVX4vMUYjJkY1V0k3OU82bDMob05JT1AxRUBmL1BkM3EsfWNaeXwrUDlldTlgQUps'@;
put 'L097KFhPNC9mWUFLZVZhWWtjPENYTVhnNltabDhaVFo+aHw6NXs1VDpLQGhrRTw6c1QwdXJRIWwpUW49NixEa149bzAoYnwpaUd+LncveU8+fF1eUGJPSiRWImo1VyRxdUJyRHx0REQ+SHI0e3NaW1g4LmFuPyN6KDhidiYqSDRBPilZOGA3WWd3K3ZPcDtuSWpGbl5nd2U8JWAsQVtlKGcmJCV1'@;
put 'Ynt3aFJNd2BiYCFfV2FzXzVRflt2T1FVQl9NbCg4fGRLJllfJn1bOSZ0QkhTV0xwdzxubXZnTE5rbiVLci5zOHNeVHgueTtQWmBOelV8cnJvTDY5I0kwJGZqanYuUzoxcW1tUzdwSXJgXnVNWWF8VChsOkNYQXQoQnQ/PjwxdVRXR1lXUW9QbCVnVW9VdGJ3b0NsaCxIc0VTeyMkRDQwekx0aW9O'@;
put 'UlUhX3ZgRyNUWHJoWVY3XUo2THNNUVlCezEyQHpJfUxDJXx0KTdESyFEdX5nfF5lKk4kTlElP3dTL1VPRFo3Tjw5WCNGY0lXak5qSVJKOEZgL3ZiTjFxJTZEdF96bE5iSXo1fm8vQnJhYDFIJXFlPmt1cXlrbjZRcUFTRFFaTnlGO3F7fFNwY3xAKyF4ImJ+a2hKTDE2UEdDQ3xpUCx8eTtQT0dg'@;
put 'VURkfngjTjwvWTs+Z0NWXWJCR3AzTz9NanVrfFlGUUhteTVFUVUpLnEhJmxBJH5oQ0xIek8+TilyVnJ0dSp2Py5icn40TmRLZGV6ZCUoLixYb0ReWzRURTw1P1ReVS9YdWROIXtYK1hATzdDYDU4SUNSVnhlWUAxLnBRMTU+WT0vQlR9Qzh2OWI7RChUbiQiPSRMWnJjOT4rdn4/Yj1sJnReUXF5'@;
put 'N05vdDN9biIuWTpXQXcmT19eNUJubW1hUj8jVE9VdjdiKltRbk4vZ0g7RX5eVkl8KzQ+WnR3YzV+Tz13RUdLVmtNeG17WVJgPl5laj1Ac0J1ZGFUZ25BSntXOFo3OT5AdWdEeSl3emtaOi8sLD5KOCgvIUslMzpsJTRAe1FVWDA3X1RjO28hNSMxOUxCaUJkJUQxJXpWeF1HTnNZeW8/TD5CUHRK'@;
put 'fC84dzpfUkByR2UoSnB2IXAucl8yemI3TnRoZGl6ckZrRXliclJlKS5hU0U6Sl1bVkA0XVA8MzFMeUcoaFBKPXk0cjt8OmZ9M3AkQX0jUVRQJD1SWGIwU1s4RlRPe2MmdHhBSmpOR3xzXXF2Z3dWU2dkbTZteXZQPXBhTm5tKm5qNHB5fCxsUm4/M1IjWSxtbFR2Wzh3QDBwZlVpRl9JPzllVyYk'@;
put 'SEB0K3clQHIxUmQxV2IzSF5hPyQpSSl1Y2F+LkIrITFxOFIiKGpmP1Bxa3tkb0J1V00uZi8hdTlnejhtc1M0ITV7d3lXQTJkPl1VMUtLSHpASSldVC9+aUd6VGMhJEl4VzQ5NnNxWiY4ZjJybjx1UCVVQCtENFBfaDdMXkhaajR4TXY2Vn4uYXwkU3pqSERrKDZfZDBFLi5Nb35hWFAqQGFASUoo'@;
put 'VChzMiNSWlElcnZvUStabktAczA/YmI1MFV8c0BxLCUoMy96QEJDTUM6ZTNWLmhMSlB1RiFxc1ZIeT14QHU+bTdHUyhqbkVoWXh8ImY+fkM/Lk5UPlBZc35xV0E2YFdtVStaayVzYTVybEJ8aEAvZnxLLn1mbktHVio5Nk18I21iaEBNcC9NSCoiRnY+dkcqPVs0NFc+OHA3WWB3UDA9YnNPIy92'@;
put 'KEVYLClPK3Vnbj47enkxK2RhM0pjUGlgeGc6aF97OGsiPioxc2E8eEAjL2lRQmQ2KE9vcj5fP0N0O2M8NFMvVi5MRlJzSmtrSnFtOkJ7ViRpZE9gblg8Nk48Wn5rWlRrKyNLdFFTaHZWfkFma3g7X1A/T3g0SFBubn0/diZreWpOI3l3IjVYVkhucDdOSkluZDBvQSkpSFBTY1J2UnlRbkxOSFM4'@;
put 'VXNEZWpeRD06SnNXY2hOUVUhJGhQVGFEKXtvZ1YpZFtJSWV6ZiMhQHZsZl9aQFo8YnAiZ1pgcDNwQUg2NGVmT1BrRlRFXUE/NF5CRy57K2o+WjZYZ0o4eEd2Wj1le1UwWFFQaU46QlBDP3Z1fER4ciRoZmQ5KVY6JVYhS1FtMitGcWJXOzE5Vm5aPHV4RVEpbWwuOyZ+PVZ5WiklMjdZMl19aixq'@;
put 'MDdKeCZFSGZZS158OH0uN3xibEZbQl5JQi8qWj1RbjpSJVtrYjR5Z1AuUEguKGkvUCo1fXlVW2wldWNTZiVnKjVjSXA6aTEuPUVdRTw1ZWUwVElJP0Q/OEtddTxUVHA2Qn5EW31DR0ZZdi47JGk1eGVGRltAdnx6d1ZLWz4ldltaWX06bE5dTjckX204RC84WiF1UWojRlJ4PXNzLGNpcmBhR3JP'@;
put 'XipqSUd8M2M4bU03bTFkUzFaKiFPLF4udnRBa252dFo0PzR1YmJOIileamlqfVo/WkxpaXRvJD83TFtpXU1DM2E/ZSo3TnFwPSEoeC83bDw6bXJqKEQiViNzVVBkfV03N0MvcGVPTXR6KTY7Knheci8heFlRO2NBO2hXVDVWaEVOeHVNXS5GX2h1WU1Kbl9QR3FMNUlpWjUocVRhVi93O0dDYzs7'@;
put 'ang6MkBHZFdiYFBqZz9gaSNyQ3pIQGloWGNnYDlgRmcxYGV+U005c20mRH5aUktJST41ei9eLyo2I2JQXy84e2FUPXI6bVtZI2ckcnNBfEFMfjxIQnhhfjhIPTRCOnV5Klg7O0RON2hAIU9RQjxZRUpAQU47RjRDMDxwKXxmPDlwKz5dNz9uMjAldytqQSVSUlN0Ml5xdEhbbUwyUTx4NS5fN3J9'@;
put 'UTNqbnZFNCtMNjIkSkdlYlhoO1o3IWZ6QSZkcn05eUBtRWN1PWx1VVsmM2NvOCorW2hIcVk3ZE1nY0tmN2ReYmtrRls3OU4reV59THp8eTFNZEtATjh+eiV0MT9DS31TOj5JdyExNVZpWkl6PThUY0xPdHteMiRfdzJZT11EQ0F4dUhvJDRgVlM9PEJWP3c1cFl6O2tFbWI2SzB7dm9qbk4oYlJ2'@;
put 'LDddL1JUYz95JDUqbUxNVyUzUDBUQU91Sj1iQz1vbk91cFQqJTVRLmNYaTdKMj18dUovcCxdeWhCOjxGLm13IjtoR3c9OVA0ZCFGdlApKCtbdF5CUCk+WWV2KSllNmt4djd7MHhOYn42JEw6VF5UdGRIeyhTaUhsPjJnQW1IbU4maT9wK1hIKEI9K1RAYigjdzU5PHN0RG1oYjldZlFXZzlPeGVv'@;
put 'Wzc4TEFwNHVabyMxdSs9b1ZlJTQ+K29ZMDh9JGBedHh8cXVYNFhZRjpNOVA9OHpnNGJpSC4jUF5MYGkjPVc8W0cpX1Jhb3lEfFR5KUZIMmZzKzk9bjV8NzpBUEByJTRlUj1dTU1tQV0hb3NkdTwiRSkwaylePSJYWDVXX0UlVlRDd05xW2lfdyg1XUtLeSthVVZyZU90UTcwMHRqd29qSDIlfEwi'@;
put 'WW1tOCRpNlQ1Kl5rRjhIP08sd1BmXmleZiNhX2puUUV3JDssYnEpKW1mdUUmJSgzWX10OnwxUD47eVAiU1pQVUFJKl4pZ1hkNCJ0NjZXI1kzR2Y8QiU1W2UrdEg5dDNFezReT1ZWLmhlP1hZdTNWPG5yMmRDcFRyXXdEP0tAWFBTbVZpbCNCX28pNEhdMHdyZy5UZiQkIiVJYDBsYG8sdHp+NnU/'@;
put 'bHRbMEVRWWx1JkJAbig9UEpCIjAkfX1POC99bGxuU0h4dFVoKitpMjV2LENROF0od2t4d2dzV1JFdFdVKjVKI3ZFITFoaGcweVBMNUlfJjAvKzRKfXFqPk1QfW12ZWZodGwkN1RyRWl9PkguTmhfWE1pYCYzbUl2b11qTmEkek5fb351Zj14YzlXfmRlL20ufFN1LlZyWzUkOixJMHg5bi5wSm9G'@;
put 'STIqanVrVVRHVk4ufH1GMl0ybTd9eXFXdmhydTx2MHV8PU8wKzFfRDkse1s9NC5NQyI1dk5YW3hnSX11KjIuSWs/Q0FSWlVdfWIjWT5Ke34/UXhjMiwzWXJVVUlrUHMqe19gfCwqbSwvaX5rRF4/JCt+Y2MxY2QjT3pwfU98JHp0MGU3JHNQaCFJb1I5d0g0PGhvQHdKIyQuRlR4cWMyPzhqdGIw'@;
put 'fXdXUyU9VTRIQzVgYGp4TlJ2UyUqPHgyJCQ6YTAyRFAsK0RYRDpAYVk8SipUKGFiTyQ7VGF7en5lcFZ0eCksRWZUVkg8UD8qW2BDKWp5e0FdeEFEI1gwenokJlJCdzNic3dtcD17WHtwZjs8THk6RktWZSkvI1AiaG8wRm83dXlGPS4mKGcpTUdgbzEjTDJAIWA8a1d4PDtoM2orQjVdKEZ3YUo7'@;
put 'Ilg7OmM6fSJUQHxON2cyUU9UPkw4PkhSPmIlUHNKVjZielgxT090SXdVUF9RYExiazNBTnlvc1hdUmFlUyQhVmksW1Y3QnMxZ0s2QXJ5JVEqITU+XltzTURGR0s+dnJCNm07MkRndXlIUzFiSFBkW3Z4SXohUmhqWGpxLmgwVSZnLkImbVpbZ2M5Uk1QNy9mcWQ7VypXZ1ZnYHF5W0granZyfCEz'@;
put 'PnxTRk52eFlIJXMqTm5SeClkT0Vre2hdcHNKdl5FYnhjOlQrXW88dCJJOU4xPGB6IThzTk81PXx8JFMvcmtAZ1lOY1MiX1VtLDxnJm5ESm4qPX0+c2JJKiMzOTohfDA/YUEpfUNvRDZTdHVkZ0NfYCVVYmt0ITUzITQjbCVuM3x8YmZ0Zmp+aDFlU3AjLCo5LFJXdXJfN3lMfVNoMFZZa0NORkgs'@;
put 'QzwvflgobEJqZj1gX0ozam0vO0kuQ0tEZW4oSXcsJGEmM2MwPzMwZG1WQndPTztgYzRVLFlkNnU2MFc9YFUyJWg1QkhVMmtxMTI9PE53WGZeKnRaV25qYjRiSlpXQjojaT9vTkxEIlBvIlJOL2dIeGA+c2F+JChKZiZEdjhCWXtHNXREbGFNZVMuTlEqN3RBPj1TOHMoTEB6V1ooPWt1VXciTk13'@;
put 'IjF4I0FodjxWakwmPn0wXiY1VWsmPGEscmM3aj45IjRwZXFdM0hFfT91JT1WP2dbI1treV51c11UZE9WLmV0UzJZUyRubDdKRHk2Ll5QJEEjdXQ5QVNAbllDO1J3YStzX0N1Qm0wWSZwXTtHdiZ4ZkA0VmZgN1QqVy5xaWdqWHVzblFPK2h8NyVLI3F4R0pZZV4rMzR6PDlsRiZpczspWkxCSy4w'@;
put 'JHZEdGZIKz4/ekxJfUUrVDRCdGBoeE8/PWxBS28kYjM/KkxqK1F0RSk4O090elJORjtqQFshWHp1THUrXVVvVUJ9TEdmfnV3O1pzcV97bklQQG9ELEwjbklLek5HbkVdb3FQVGxpNHNsRTYjLmE5KyF9TDJPOiFORU84X3VLU2M4Ry5PT0BbKDVjX1FKQHhNZnt1cHViJT8+WSEmM1RHSEdiblt2'@;
put 'N3x4aW9ZN3l7SUozM2tpWHZESz5nLjVraDBnWjdQWnhGaEVYdWduNCh6ZSFRW3dId0d9Mio9N0xANlt4WmV0cXFHM3twMyorTENhOTFSe3FoTCkvVmk+YkhNS0htI1dxUHl8OS9iJmE7Rlh3LCgwM2xERTpCQnU/cHd+JXxobTQyXnxaRiRDYHNoO1NacDNLcGVEU0MrIWZoWiZTRjwiZUIhO0x0'@;
put 'OH1fKSQkYG1CWDRJKXFjV0dzX1p8S19GR18zVk8saUFjSlV2Wi5SUjB2T0R6Xzk+d2V9e3RuQEhyYFpUUkp7OF48WVdPNkZ+V19eOT9VdnorOkNNQ09sdGpkY10lfGBeKmE9bUx0djd6V0dOcmJDVyRtWHZnSzNWeXFmSSssO2Mmbi5AVVEyXjd9JHpnZzFeQnw7JGt0YjIjLEIzcDVtRUZwIjZ9'@;
put 'dz1icEtFbk5dPylZTEZscUgkRUZQaTVjVWZmXSt3LkhKfEkwMX1FQUEwLEVOMWRzNC5ENk1xT2tuTEQoQ1hzVGR2JFcueitSREUibGdpM3c5Ty8oZTw5UloxKDJzPmI7OHxlZklIeyZuSyNKeER7X1RpP15XL3sxaCF9fishfVBsTlJqOEAySHh3dzJEei94bmdNXm41V0VhJGQwNGN4K1Jsc0cv'@;
put 'K3w7XzEsaCpMWWI2I3NNTnRVWjxSZTkmKXA9SHUlWlRbanEpMV1KLD0sMnRiaVgzZXd3RiZdMHh7ak91I1kjd3gsRWJ4Ik58Nk1SLGZJKzI4a0xuXj5Tal1OSyomd0JdT0AwenVzfU0hUUo2d2YlVV9benoiR3NeeSpuZCpmS2N6b2BnQ01gWTBzRy9dZXFtckZbcTxHSDFPWUkkKHtQczB0dH56'@;
put 'VllbSH1iS2NMSzJdTyNuN245TDI9IzFoakxmQHVCQ0JdZHNBSTFSL0xeW0dLemVHNCE6P1E/IkddUk1dWkVBYzMuZXU9a1U8YTpJZ1ljdW5gbiJxMnRkWVA8dnM4STdQVXg9SGRsQlI/IX5AMWRTLHxkKX5fM2VtTnw0ZGZUR3shbEM9K2tUTnBGK2c0RStqcnZiJiYxO3lOMjthIkJMdzN6e1t8'@;
put 'UUw0PmJfKyhZZWNGZ2Q2SjVmbD08SntBZ2AraEFYb2J0TERdbS5pVnQuKVtTIjxpQFN3LnM+eTxmOHtuRV5hLlJEc3s1aHpET2NPbntRRVlTVC98PTpEe2c7JVlFS3koQj5rMTF4UD0hWX54O0VFdyxgMWI+KixOX2wxcV9Td0wiPlhOaHJrSzZRYygrKzcyO2U9YHs3SX1lQlB9ZDh8amUjSDgr'@;
put 'IXVtM0FANDNSJnVDcSMsS0lPJmM7N0NtI3lIRUd9N3cxPVdCd3xLOGo8VDJudDNdJS9CYiZeME1XKjsiYkQ2dlQ1SVJsY2AsIStgWFQ1cnRrYVckRj5KVCM6bEl2RD1HaUtCMUkmY2wwM21SJntfaz89PiFbNmdaOi9AcktHO25FT1NHNklPXUowImpUU3wrL25BQz81VU5UT1ZdbXlVOyZqQlJC'@;
put 'YTUwJj9WKG5XQndLeXB4QCJyUTg/JlcpODI0UXpCKiIkJU0zN24jPkNjKUZSVHRITGcyeDhsWT9MUWYkWlQjRGBeViF3bGovYCRlbSxuPFBeR102NUBBPCImJDg6Xz9+O2lxQUd5U1tqLF4+aGB7fixrMS5KNDssKnp1bmN3JURRKyYveTlWIVJ2IXx8aThHe0V1PTtXWnZZeWI0MWI6UE9sRUop'@;
put 'JmtDNDdhWlFpQi41P3IpU1lje0VVX0wsJXJJU0JZfS5ecDAvc0BlUHJXQTdhb1Nhanp+TmYpODlAW0gpT3tRR1IhSk48dHZPQVNmU1B2dSRvODEuVDJDYGpYWSFVK3w6OFM9VmpLP0wxVFtQVC55W1hkQ1Epd2FVc0VRO29qZDZkX0AldjI6JFsrfG1IZT9TME44VD5re3d6SmAsPEBrbFBraSxy'@;
put 'XWkpTnIlPmRKK3U7Q01VaE1FLkk6dUAkYEglVUNaI3gibi5nZFRTI2I7PjpoNkRbW3hDMzxdL105blRMQyI6VndjSi5NelppeXZOQy8qMFpjXUgvbmA5UUxMfTRGaDJFakosZmY/NU1hUU1bbHs2YHRNMEdKQkVqTmtuMTc1S0VSNlFyUSE4QkxCQkc5REN6R010OjVsOVVwbjsodzFrV3NLKzN5'@;
put 'b3ZBNC8yX3ozQGFnVTVzOWh4dyVCLjR7enFReCI+UWQlb3B6RTsqY2I4alpfeGJuSVtZRiReKEhIdWg6RU0vMVF6YyNsYEQ+bF4/SjxnPTdCKyYuZF4xRCFWZnZAJiIhVCh+VVlSSD4uQmJaP1pqcyRVNEooVXxfJV4xczkuJVRRamJFa3NYZG9vcXhDJkcjR3pGJGAoaCUxYUMjV3E4KXNdL3dl'@;
put 'SngrMGxhPEV4fEAubT5xdGtkJmJzNCooOS9EIlV8UyJ1RDowK19QXXd5fHF2eW1beEIqeXNbOXckLyw7dGNpXUVQTXtYaExKTlU+K3NzYEFKR28qczJbd1goUTAseERlQmNQQmdBZVRLJT54aVBIdFdHJWtzKFVNJWo2PD5qZ0NNaEd4akl5KXJEIl0saC9QOktuQF8wX21zN1JuXXYsMV49eEpz'@;
put 'NDwsRk4yR2EkdWpnYSwqOStWRUdAXUVjfUU7fDBiP2I/PV0hXUhZfEg/QkZzKXFUKE1dXV4jWlordVNPNk1WKmdEYFsmajNKNE4qT11TdTVGNT5JQkw0WGk0IjgwNXhqYTUqM31CSVtMdy5ALG18LiZka3dORWoxOTJ1MCgsUmpvXmZQNkV0LyprIU9pOnxfJXFObShYMmpuWno2SWRrdXwvKnc9'@;
put 'dk1uSzY7VVdtSHh+V2JjdDE+fjt8cWMhWUNBKHEvL0BpYW9TInhjQjIxKENTUClCV3lrKHJbeHxUS2osV1p4RWJqMj5UOiZkXy40W14+KXQmKzNxbH1vejBBJTNacGFvZUxHenl2SFtCOm8xUnw/ZitUakNAYkVAK2dvfHJsT1tvJUIyTiJzITV6RGxeYCtvbiFtJCJTUDxsZjxOTEY0KmpFIXlD'@;
put 'KmxLaGN7YnQ+KGsmanBYbE81MlApW21HZTA+cD13WzpjOzxEM05UK3RpVnphdVVIdSRjTSo0RTtESVBHPiZuTWFRYkA8UD9LYUtyXm5GL3IlcHlKaEJ2enE0Q1VHP2g8QTBrRUFEI1sscT8jRyJDNWJ4OSpMXn5iSWhrfX4qPnApLkR3ITM8Uk5VW1lNY2IrRT1IUE0pMTA8OFslR3ZwKmxCMG8x'@;
put 'U2MxYDRKQHRPUngvfjpDcGd1M2tGNjN0fT0qL1AiRXVPUGN0OWhOIjkxWVFDdyMjfGlAeVtpSnJDRnpgOkBZS3p+Z2t6RXROfDFnamFrNStHXkZuUmlyQ355bXV4JVYmLl5NTk95dldMIy5nLmNuInczcyJUeXcsYUtdOmZ4PU5xVyxKajFXZXlvUT9Ib3Jzazt1ZTVVcy84eztFKlZ8S29RanJO'@;
put 'NlJYUkQ6e0BCbzQoO35eRTAvalZIOXdyPk5jL04we2A2YmoyJmtaamR1P1I1SWFoV1FBYl9HenlmXmdWUTFjRVNHJjF4dUtjYnRNUHIobXBFKXdoPiklUFgoaSVMd2FPNEZrRmJMU2o8MzBhY1hTWkBaKXBKOlRmTlc1aCpbajJ4SDlaa358NUYoN3tKYDV9ITJMR31oUW9Ya3NNeitSYyFCR0pd'@;
put 'KFN3NkBBYiZCQmVtaktnWF5OcG5JMmo/TFVqTndNRnksZzQweD1obXhgV0RKKTFCI3pQSHJnWyZaXXJEYXt1LHVTT3I7ImgqSHI/P0BdIlFUaTx6UiRFQnB4WUVua2YwdmFQa1hdLm0sPDFySSNHT0lZb3M2Oj5mfH14NEQ6JHtXcj5aKnwoQlI/fDQiT28haW8pVj5kNDlaMkpTcVJHdkk3azE/'@;
put 'RD0hMDpRbmRrWnIiW1I9IU93fGEvNzp1eGJJU0BxRDIhOV1GQn1lKjFXKzFWajxaYUJsJlRxTngwKjore3M2cSh1VTk5UCY2KFJBODloTkBgI2FFKVBVMkguRiRJZDRgWmZbV3UkQGV4VU1nZj14NiJzPSkkUEgpTT59XTs9aC9NP1spU1toMyY+Tmd2U1EuMypdOF5zQklALj1PMzgkfVQvPVVU'@;
put 'V21LJXpUXzY1aUxae0ZWd10oJnJKLDZHTHlVNDI0KGZDQGNeYTZ6QF83V3heZ1U7dlApYG8pYW9KK250eWM5VEJHV049Ty4pVF4vKUgsVT94UFhaTmAoe2JmTHh+Vzs6SnFFYjR1flpkWXUkRjJ3LDJbJTMwREtwJmgoa1lkSGllfjAwczk4OlpfWzkjTUAiZHNYRm93T05OSmI0PllAaChsNW9k'@;
put 'Tj5bPj5CRGt9dUJaU2Q6d2Z8OixlcnIySi4+WSwrKTA2akwmLFlVKEtII3EoQWh5aCN1QXAkbCtsbSwvVkVmWDFbMjIzcX5RSFlbTmV1Mn41MUxTISVHXnFCSjxnKXpdYilTRUguW2hwVEdvI1ZvZDZYKVkiP21eVDZKJDVsZD4mezZWb2JJWToyfU5xdypGVH1UcDsqOEdvMl9eSWtvSiMzYHZ2'@;
put 'YkZAO15wJmNpZUQ5ZDUofDNoZS9uOm5AL0UoLDZiSjVRUVdvM2AieEV3fGhIfWBDe25EPSpuKUNtWFsoPXRZPEUmYHMjcTt6SnQ+LyhMMHc8QCVKTms/KjZ4N2BfKHReanFmVDUjZSJ+PlZnPEZyRHRHVks0Q3U6OjUiJmN7SSl5bHUmfkBQY1N2Uz5jKytTTnE7R1cwTGQjZXREMjF2YDFCNWpA'@;
put 'Smw3NmUuRmQwITNoNj82UmEqJHlZVFAuKWVKfEp5d1AiZUIwYmE7JEE5dzEwRyYiNjc5OmU/Vy4+ZHE9c2hCO2YkWT53fWBWRCw7TnJkey5LYHQpcjUhRHdIb1ZiUmxEa3YvcGJUZm9MeTppNyVlQ193N2pLdG1zYkxOVHZDPls4JDt+cExUXSgvO0o/RDhoPjtCTChpeXdwLkBMRUIiOz9DQ11C'@;
put 'OEVhLnJNUH03MDhNeHwoMCZ9aGM7MGFZI0tGaChqQTkqVT14alJ9WHVzc00jMko/Jk52WnIxLylJfVVCakVULmUsQldfbGgiQ1Y6TkpdKGx6K1NndnM/OWlfOikmPzhWZVhOOWhNMnVbKVV+eD51OGV5N1lISTw3S2E7Q3E8PWksTSZpQCh0cFFab0ppPkc5KWt4V11iSVpacG5bdFNNJEpVflpf'@;
put 'ZWZsZTVIRUVGWS9LTnVUbE5HKHZiQlcheFU/X0x6ITVNd3U/VFcqPHI4S112fUsmKlpTdC5fZlFwdypJNC49JXpuVV9zdkhAQ3hRKUpyJnZ7VFFdV21DMEJHaiovWF9ETT50SG5paWVROXk+YnxecGJjLDJ2e3k0QXdseWdWJCt8KUJmdj1mVWd3Z20jay9OVDVpbEJvXT9sUmlgNSY/WFZXJlsx'@;
put 'SCtHMTwjel4jLzdvXl8zZVduKF1pL149NXdqVl55UmVlSXZ7fClATk5JUWFhM21tZ1dSO3NydW06LkVqb1VWU3JVcG48cWFodUoxTTQkeVlzYlhXS2dgMFk5NEoiOU09LF55MXpuVEQmZlBKIXM9RXtTPEReL2RkSGhPOUphaHZuaHdrQThKN0s1OHBwbjtyIWtFUmsvRFk+OmFyb1RTaFBmTzN4'@;
put 'W15jNnYqOkI0ODU0JTRebV05PipoKHlJaTNIVUgmYztNO3hQQTE4RENaaWUkUnpzOn46UjtGaGl8SilrOG9SJTQjKW5EYEFbQTJCdDlRRCtAJnw9el5LRlhbbHMqfS88elpPUkNoSCtJRD4hN2dJeTFvbSN7W1U5V2shfDp4dy5rQj5UNyFjNDZtTlhYJk97Qzg3WCw/cmlhSlllcjJYRiQ9LkZ4'@;
put 'WnwmeWMrST8/M21zdThHZW8pT1Y6PCZQZF1QO1s0fUsvWV1RPnhYRltvPnFad3ljRGZURnZYKTdkdztSfGJmZ04xcDt0Pz82aEUrMHs8MiIkImFeN2VNNWFlKERPLkNdc15Fc1lMSiVvZGpdKWhFPG0+eG5+b3Q4UVtbP1hmWzxQU14pMS8zUD5sPjR8Py8mVXdVXm1hZDtBZHVdTERuI152fjpG'@;
put 'VE8wPSE2S05zM0FFaVQrY1hAW2JHVUg7NH4mJkpPK3pEXXZhNzY7OzxDOE5BR2tCWjhpdSJuQS9aXS8za31uSVJRKShOXiorZ0BwVzhUWG1EVU5BLDZEZ2xxSUBHNEljK11QYF54aX1xRVEkZ1A9a3puU1Nbcl5+OkclVEptOWRwSEglbHVMYTNaOHd2QllrMTpALGdYelJlNjsrS1kyLks6Zmc/'@;
put 'e2Q4IlVGTStzRWpKL2NudXxJI3YqbWJOPklwMS5wdGk3dX5Qd3Zfc3ouWGVrY1JBPmdSOHtdKyZpJFNUQ31jJFBANzdOdTZ8RXJPeGo+PDh+c2xsa1Y+akZ2KENrflJqOCZMb3VDVDluM093LlhAT05eS3lIVH5rWCVUa1o4aFR+YylGbDMoPzd+THd4MnZvKCJJdSIpTnwod1lCSX1vP1NzZE8u'@;
put 'cyZhIUdte2RsX1IkYkVgYF86ck9uaUN+ZjgzYmgra2ZLTmYwIzJ3b0JeSDtwdlQ2TzUkSXY2KHxNWDRfWXJUNitEKVo0dDc/e3BEbEwhfmxNYW02YWpIUltqKTs6ZTpbY0p0M2lGVSYvMl1wUDlgfjc+XSEkJFRvTW0+c3xUMExpUkdxNHg8eC5IXVtYQGpuInY3dGNaIlB3QUN8VEwuTzF4WXUx'@;
put 'bzg0V2ttJDM/P15fTVhkLnx2T0FNRV9jQEc9QUdJbltralZpYC99TnIlSFhPUG0/I0NXWn56UlQ+aj9YV1VXJTpQX1BbZ11MNnxALF91dDozY35XOE9TI0MsMTwhYGtpWUV6RmpjND5jXyxhZSwhInVkOF4kM3FOcDppfndQZkYsbk5RNHZvMSkvYEpwc01OenB0Y19QbUYoNnZZOEpIMy55UW9C'@;
put 'SlEiJFZ+MzdgYTA+WXU3L1t5KT1Zd1YmWkNqZmBmNyF9MEFYKV5QUChhKC81XjElW01NTjMrLlMhXzBZQWhwYTpHdzY/PFo3NUw8TGldJDx1RUlfYSlyQyJleXYlbXFfMilVLyw9KldaRzh2YTt+Zi5tI0lCN2JqUEUuaTpCVXNfe29tMilsdm1nNXloRkwhOV99Ln5VP0ddfVYyR19NISMjW1pi'@;
put 'VmxuXk0/TlV7NXlmQTZreTc+PV14WmR+Xjp0aj5jfEZqKjU3L3NKWFEyMjdDbChoTEEhKEdqRlk/fUZvYV0xYE1vQyIqeU05Z0g2OUB7QFlBTWcmcUszekpbdGYvXXBmL018VyQjNHpLR3pwaktgXTpMQnhiVkh0MUNZMXM4aWMjPG0sWT50NGJFeVE2IUF3aXZ1QGZZYEZ1ciN+aD57OH42Kyg0'@;
put 'XlE4LnNUXzl4SVBTd0AzfXxlflRbJV1MOjJPTVozMm5TWzUqUUVmMnx9cF8pJVcpRV5xYXBlVmJXenxkZChGN3R7VXxyK1l0UyFVTTlMWXcoKG5pNT1rdHswRWBLOkw9a25RYzB2WVVIZDRALmZBU34wPkUxWmtgbkJQZ2VVOzAyXURtR3dicCZJTmIrb2JyXXg+XjtHe0duemFNRkB8RzsmMGZ8'@;
put 'YThNeSsla0BWMUkiVXsjLHRYZGAqViRTd0YrRzYsfkNEPnQ4JTVHOTpJWyVQcGtlOzFDdFo8PWheQm4+MV5ZXSsudHpFRGIuIkRqMUthZ2FnMD9sQjFjXlFBaTBEdF5MWEVqKnN0UD05QWN6JUh6UVUmRWJBWFtBckF4O2FJLlhbR29eWUtfQShYZ340ZSRVOFs2LkhxPl0hSCR5PU9PUk1rQi9+'@;
put 'YiFHITQwMT1+fTRMcyo4TU12VUAyMkVqOHVHSWl7bU0wK0lVZ1ZgQTA3cjNhSENzU3ZvUWB9KHchLnd8Xj0+RCVaMigxTGdqUUUzN0YxRlVOeFpeT3g8XmI1V0xNPig2eFIoJmpVcGhbYSszOHFuM2BaQ0ZeNFcldENtRFc+KklLPD1HfXtATGM4NXo4KD89V3VEa0kve3EsbFAre2p0cCtKY3I8'@;
put 'PUQuSldMfm0jIjBdWk5HL318UyN9VFJYfCMrVVZkdiRFL21FVGV4cXdXTSFSO3RdNkFTZj1nQCk+MyFqcl5sQEdtUnBENkpMS04hIW5GYFVvYUhCYC9SWWYhIWRhUVdWXiZVWU15JGRHW0MjY3QueUc6UzBnVF9+anZaMG42M1QiXzNTISI+T2YqcmBsbU8oIU9oYW9AQ15EQUNBOF9zejlBQGJ9'@;
put 'PE8yJi9BdCVjajJhPk9XW2VpZjhfQ3ZVWHBHJTBeJDxyRj17Q0I2SWMlNS5LI0ZhTnxfNiFWNyJXVWVlKmN7aXJjPDladz59cEYxQHB2MSRQK1BBM1dxJmllYHZTUVRAZkQpPyFjeysuSXdLUXQoZX1DfUw3JjI1ZHMmRHh5JTxxWSpEVntGcFpnQ0RERmQvKEltMlMmTjA5VyV5aHYmPDMocWFp'@;
put 'PGU2NmNxVl5pQDVBVF9kNyo2T0Y+L1VLIkZbVXRrOFp9YmkseCZGSHFCXkQpYUpPPk9ZSjNfb1lRcVssMDprYX5pfFFURG96WE1hVXdyWmhbbHR3NjM2ZSs1a1RhY3JWP2NbVkI6b29nYk9UeWJ2JSNzfGZyXjdnXS4pY3Y3aT83VkV0YUpCO2p+Uk9FW2txTlNKaWovalh4ZURMZGlDXj5aJXxj'@;
put 'MnBadH1JWyFddDk2RmRZaWhWYmJEQ2xgeVpPemxyS1FuZllqbVUoXT9FPV9APnp5akB0TzBGUHJ8UlthPGtSU01fb0okKmQ/KSwufCp1bnI6OjZEOz07LDQyLFRyc05NN19PeCVicCNgciNaWnp3akhMXjEuQzFxSzdjWiE5QStFKTx6PCZwaW0kKWxQXjZPbWdsRDBUL2xTNlRCJTN0Uk52S2R3'@;
put 'Uj05dzNeYU9ZY0E/Rk9zJkgqNSpaN3k9clN1Z3g+b3lFQU1WTzcjelBJMSNtZ1tWQlcpV3U4N0pSTV8qeyYxPHN7PX52O0tkRiJmQkBEKG0qbXkmYnFWblRyaUsvUF5uMHRORlhYWCI8OyhdUWs+UFBkRCxIVmx4L2dUJEhYL2Y3eUgqZENNNS5rQDgrK2wxLyRvTG5mMy4hR3tNLDhjeTskRlcw'@;
put 'cjgkIVl8RHsqciM/PyE9e2kkNGsvOVF6dDpvfCxaUU1kYH1LeElyXkI0JGYucVlbfjQjUjElamVxZmNiaXNwOFB6ayomTGk0VFZZNG4+WzooeFdJY2ZQM0BEemFhPVg/OSlvQH5ZMTk7KWtSP0p6RiJdJkJ4JTI6bVQwYiUzSXw1SUtZcT9YdkRqUHBrc3EvKih7NjwoMWRjK1UxfT4pUVk7aVYi'@;
put 'NXklKmcod1hAZl99V2Q9ODFANDMxaHQ+P1FSVnNvQz5QPnlQPkU+PV4wQ0lZWCNrdClXKnIyTTFKPVBrXjMhRHp8dzdDXXRFaUlYTTRiQiJRPiREUFdfIU82Z0RgPlY1NyxxX19lKDgxUV9wYld5KyRXMjtPIzYqOyg7blFOMGx2LiplZCtjRUFQJCF2P29mU2o3JlBsZTFOTll2YHNrMz4vZEBQ'@;
put 'PVZ3O1Q0czcxSzVgVDEmTnYiUD5RInVyZyshcGxQOkN+Vl96W1p2YnJmRCNANHFnNG82Sm9Xd1M7S3tIZ19QO141Im5NWEtlVWpZV1F6X3VWcnhJX1csY0NEZCpjdTNSP2RdbkRlb29dJlk+RzYwIXxydFgyZlglM1gjT25HZX0wTyg8JD9tX0w/dUljclI7MX1mKUk6UGU7NyVOMktYfHkqJlJo'@;
put 'bilpZHkkUSRGfFhGIVolPWw0QFd7MWFIUTk8WEQve3VzK3hIJC9WTDJ1OUs0WlsqTUpAcFQsTl1tY0RpN3Z9SUJ7PW9jY1J0eTI/UkdKTDQiez41JWRYSiN4WToyYUg1MGhMZXtsSy86fFlgRF18KzxFMmg4SE9mZCgoUl4wM3VldntWOnQ9aEssaFZBRSlHMnsmWjlpUXhMOFE4JDJSKCRdUiVy'@;
put 'PiVTKElvYGo7RGB5U2k5biR+JkdyUWUjcGEpbVF7OGNPWE0yUStzdDMkYjRMRD5KaDVifmApXzphc30pMF5CYEFDY3MqRHQ9NV8iTiVbSWRoX0JPd2FrPHcwSHlveDRiQVNDX04mQyM3X35kLGtRXUg8ZEI9Pz4oYStYb0xQOnduV1tfO09NTFZFRi9YaD1mIXglVlBpbkJuWylPcFQ1eD4kVDdU'@;
put 'cXU1W2xbKVQiKEpQU0JkOl9NWyZiTFtjMGdfbmRyZDI1TCohK0s1RWh6XzV9PkZCUDlaTTkvOnRpflFyQzxgIk51Zz5DOz9VVmBqXmJ7RVZsVktgcC5rS0F1QitWaHFHODpEajFFJGxheVA3ZDNeYnBNOl8/TSNIcEVLZmxgWVU+P3t2Rio9PFhuNHdGX34lXnZ9P28he11TOiYlQGwzJSokJVJn'@;
put 'SD1jc3ZoL3swfVtVa1E3OixsZ21dL2xYS1A6Vk9mL2R7M0EoOjNeIVBQPFZwNmJ1K2NrJGE8LFFvXzYqNFg+VEkxNXdPQjd3PntTX0VwSyZSXn52JHJxTltBNX4jM01ddlo6Z2hfVjl2W3hLRCVGMUF5QzQ3XlRCMWl6dk4/U3Z3K2NFMXQrZWApQT1xaisqJHBLMHNMPmhQVC4qZls5T1o7aUNv'@;
put 'QEE3WWl3M0E4Z2UySFpBVStvSEJVRUIldk1oalBuM19bdXxjcTEjQl1TOnxHZ2JSXkVTMF1OIT8xdW0vdj99d0M0c0xiOSg1N2AkSTVQclpGbGBmK24wUmdBRDJlNWssdE1dW1NnJTB9SXtzKl5bLDtlI2ErO2VgeStgfV9GOXU6YXhXfSU6bClAeTw6UU98VGtCMmdxOEV0L3twaDZMVmB0dnND'@;
put 'TmhQMHBoMjM1JjZNNUM6b0xwOX5GaVpnY01ka3E5YEh0L0MmcUpUfGNwWmkkaSNxV1M1Y35yTFo2TGNqSFs8ZEx2LnZUfGdbWF8vPUs0VFFdcSNWK21qOTZeYE54M2NPNih0ZnMsRylvUiNaaXg0WWw3Xnp1NUpOa0cld2dCIyVmZkc0PGZFTTNRW08qbSJeQE5XbGAmMz5HZndQJlQpQjJ9aDNk'@;
put 'aUBUQCpnTmNbRmBzRC9nNlRELDNjPUk6LlZpY2trb0UheGdgYH4xZ1pbMTUoKl8sPWU1P0pJK11Qc006eVAsZk5kb10wM3oiMkw6KWlyMGl+cTV6Ozdbbik3JXptPHNOP2V6ZV5+R21rfDRiNXF5SUJydzlNWnxGTCR4cFJ1RU9gYyhyR1U1en5BPUteJEozdkE9KGxZVCg+IiVkYGJ6eWVhTCRy'@;
put 'b1RyPWdHQU9pTGBmdXp1cCs4aGVNWWohS0Fqc2psYSVTen1Zfk5QKCFlMHxvcGpMZmp9VUg4a30rJnhROXgqa2ZwfDEoOWdRTHBYeGNuXlYsP0lQTF5tKnk0eCh9Si5Ad35aTFRoR3s6S2tILHFCaHhTYUBmOS5xaStKYjosNFhAZ2pdTkZ5dlRIcV96YUc4YD5rP0pJczcuc2NMWDc4akpESjx9'@;
put 'MjQhMmAyMW4rQH4jKHU+ZjE5VE1wSUc6fVgkZFt5cnlveCpWQWdAU0N1Ik8yWi85KltEYWpNaCwvbi9bYn4pImw5fDh7VUByYTZjI3pCb344Wz1nXjJGJW5vaHk3Z0BHUnlbTklBKTdkTn5OdUJ2MHFAfEk6PCMlNzEvQSkoXnhpUzJtRzEjc2VVO3k3UCEsfG5sNSl4c05SSkh1STBCc0lebkVu'@;
put 'Kk1sTF1EZnpadkxIVXdpSENhaypiRHJ4LiN7K1d1OGlvRTUlamdMa3l4OEUra21ZXUJEZEpxP1RwVSFbfTwlfE17P0dPTUwzPVs2LiVOTGIwWUNQMUwjXXdPZy5qJXBvI0JzIThXWVY9bCtOSTQ1JEN2ZisxQz55TiwhcXFTbXRUbnYjM01ad2tHOn0mJW9QT25GVFRqMz9Ba3M5US5RJiRVazZC'@;
put 'VWdBZiEkNkUkTVRwR1hIVm1meE5LMjhPbXVaNUM/YkJPMVRFRlY5bEQ8TU01dDlnc1kqPz9GW0o1RiNecEgoRGV3O053IWwlam41JHgqUDRzZzJnMCM6RXVSckxQS0w8eDlDeHZ7fmFjaXsvdi5TbkVWfDY7X2teV2FtNy5lQEZVb3VXeE9Ga0MrPXQpYzlzempfM2hMWkJsLDguJi4kMk1iOEk4'@;
put 'KWFmdnFMTUQwKU1oMXgrdHIsejFlPzFqLFhoSi81KSZ8SmpBPUdbOT8pbHBFQlEvLGJWWDVWP0RBM2R0Km1vdElrNzo9TSZ7MlUzKHZUVGRUbT5gV3NyKzY2YCs/N05vbj1DI31PJF5RXikqbEFpOlNDR1NJdmo4cFN6dCRBe087NjRTNEd3X3VOLjQvLmJeRSRoJik5MyxffHw1PHBrXy5Mbndf'@;
put 'am5NTE9oWCU7KjlDQm4lV3d4Tm9KUjR3aGl3alsifk9je3Y4SzY0TDxuNlQvUUJJe0ZFQUwoT1ErT3UsalozNXhXXlFmRHB+SEtjbCZlLEBScC5XKF9VeFFbbkNyS20kYSU8SiovI0FxbmhUQDd2P0A/KkB8dS4rWTQwZ3c0NkokaC8vajt1Tig2JWxOYCIqcDhbVClZOmVUb3gqLlRlKF47XT42'@;
put 'JVZSVV84ZWF3PDsjajFvPUdkQDhDTiZ8Z2ooQVQlTE17JTkmOUdeU2NKdUJvYFYuWU5BYTJrcSMoQmkjcTxydllvNH1ObHJ3WDNyIVYzZ0N9UmJiMXp7LnJAMT8ocG5HdUlCSlhAdG51Qy94Yys4I0hLdmdGKV9lTnZgV0ZYO3I7ITsyJi5yTko2UX1jbHxAPEhuTV1YO105YGJ2NF11NkFiK3o4'@;
put 'JjVSQVBUWixFbHMyPHJSeyVpN35mJT1DIWVaJEoqXy5yM0BnazB0WC9aWkIuUF9YSWdXZnFBTkhNYXZFUj00JFZyaGdVSCFrUWxZK2RPZCRRTk4odEUjXyIvPWd6L2R2JXtjNkZFRGx0OTFCeE0oVn1hMChLKXY1byJGdC4oRkNrXk0ifi9aSXshMFRQeTlaXixxbX1uNmB7UEMkNG5JbUU3PUR0'@;
put 'cHoqdEdTfFdfQ3lKcW1CZm55PVUrPGI4e1B9U2pffkszaixlcUtkeGIlWl5SPyQ2akpxKFgiRDRpXS5xSE0oWyZvbmJHVmZZW2p2UHRIbChbXSRgaFduLkliLyR1cl80bClpYG0jLlRUdjgzSWlJSTN2IlNQRD5gNF5YcG1aKDxifFEobmdtb156NGs1Ni8uIX1nZUBORTV7dmJEdzMsWGpMLyNY'@;
put 'TUR8cGlmPjZVIz0xdWI2SUlYO2AwSW9HcFNvRCQjY30lNV5sSl92SkRbU3B2aiorKUxDI1EwWTBQIVsrVDg/JTFPSFI4W10+QEpbV15+fE10ViNSY0NOeEVlcFRiJHVIaEttIWl4RXlfX14qXzM5aGx0ZUtnUkJmTlpDcVExKVhQdWE1NFFjIVBZekNqMiImakVUdHZeMWQ8PUx7RzJ7ZEZzRFlL'@;
put 'XmRNNnVQRmRIRUshQ1d1Kn0zTkZvcU5mOk82JVQ7ZClpe25RSzF8LCZ5Qj81YzoqLittRkI2W1hRLnhtPl1qU3x7SWc2JiRPW1ZNcGYwLy8qcXh3Kl03WmJoU2poTCpqaDBWclRKW0xPPzBqVnczInljWmF1IyJoYCpGdEd6YkFTJktpVVZBLkFjaXpUL1Z1ZFZZIl50e24xUFIxbntyWXZtVmJF'@;
put 'QWx1Y1ppYSgofCo4NiJQXk1IS2paQz96YWppUUpueU4xfix4NT1wOl1rJT5YR11TSGptJnhnVTwuUzRNMTN0SUdDej1mR2p3ZSw9USN9I3s7MUwkS0o1Mn5Ya2U4Sm1KLl9ZKU1UUXFBblBuNX58aF5nT2dVTGBXPENrJGZ6N3V3WDMxaCQwaUdoSCttIkswTClzJSUsRj15TE0pVmRRTCxwO0s2'@;
put 'dFFNZk5UXXBzNzVaSGZuPlFga01+SkNtTC83flRJe0VeJDY+SjFDVlQmNzchc1g/Zi9lW2VgKngvTSE1YGJCXj5+WC4uXkIlbis3NzldbHchTFl5TU1lZUtkSUUpKkxAamhBaHE/TWhTJFFadjFdNTkkP1lrX3ZZfmUxUmk7c31YOW4rNlt+ViRdaUZvKDhMZ353VUV9fnpBQGokPElQZ2x8PU5O'@;
put 'UjlgME9DWTFkMGtBMmJASX5ifl5zODhMZ0hKUX0rJTRWYVd+e057OHIvaFg3cFhQI3VOKC9mMSpeZlYwYmNGUk87bXIqVmguXnFnTUg0Y0A4OHZYM2p1KGByMT5UNUdSfWl+Vms0YCNAKF45SWY/cndbJkYqaCJnZjxIUE9sQlVOazY2RDNGM285SkZyV3VxVnxiZjw3YXsrNyVnKUxVPjsieHpd'@;
put 'SCQ7fDBDXSs6S2leNUNrS0JkXix2fnVfRXlVeXE0Ly8jYWFDUl9jTTlJSnUpRT81ZlpPNG5MZmpVRWIpLGxrYlApdihGP2l6NWFRbDlYVGVxVWBSSjdSbX4xOWl2R3gkaUxhKVlhKyRdRnM0M2U6XyVxYm9bSWpjSFE+Myp0XU1MdExSPXUqcWtiOTU0VlJtc3s3SEB3PmM0cihZW1VGQjE2KDYu'@;
put 'Lyx4S0VWKyova3ZGVWojPExgOl90VVVtIiw+Kkk5Y2V9JjNUPVtHM2luWmh3T3toW0xtN0J0eSZzZURfVm56S01JXi95QVlPcEQqSEVpemw+Y1E9ajlDVUUzZ10wPntNNyZJIkBmQUVGVzd5fGthcnpzMVpodD9obT1zeX1wZE5VL35QJEo9I0NTSmNvQV8hckZpamdfRFtpPz9ZPm5fe3w0ejlT'@;
put 'e3U3ZiYjYmR5Z1U2KWUvP0piRXlOUnNKPHgoZ1BYWnZRJmRWQWosUz4uLiFFanRyTi90VT1MVTMuNn5xOzBRZEBze3hhTCRgazdxaTVoOjZMT0hXRiNKdGErbU5iZWFVbEhFT1YqYURvL00zYlkqTHl0TG1OV0Z8ZH4vYjtvJj42aXxbe2pgVm06PSJ+VF86NGg5amAkU2RxZS5WXUQ7QF5VWj81'@;
put 'R3grXk5QTHlJejNNVSNTbWllUkkod3s8dTwvXTNVOSJCOy4ibD1tanp3dHguNV5mLHYyIksrTjt6bGdBTjs3LzddUGVkPS9zZFtwejdgXU0mMlUycjMrK3V8W0RpeHM3fWNvS1N2akp3fHxufDRuRyM8dFN+fjNZYyR5dnxQNGBnWzBMWmxofiUrWUgmOktycygmK1ZMKldHK3dWME93aT9ARnBA'@;
put 'Wl40JFN3Zk9qT05pR1gyMlJeQ0pnTk5ifS8lbD17UEA1azN6YlRDMVpuKz48YGFCKk9RWEVyMiZkIUEjUnFJQ0VFbU5IQyQhWDB0cHczJWFXVCJfJD8xNG06ampITV5AU3Vpb104Xlo5bnNLOV8wbjcjJFE4QU5bV3hYZT4yOFgmVT4oem10JThBWUYvJjpTZH40V3wwWDFyLCYhaGsyPWwmQjx8'@;
put 'a1BqPCNJSWUqcnJ0X0lJWnFTekN9ZVgjTVtWPEJ8a0duVFVJeklWNCpQdFEiREgzfEdkOl5AM3B9cWszeDZzTUgwMFImS1lyeSZMP350KFpiZHxBNDtRfkp+SEFiYSs5N3o5VlU4TFh8UUgrImx1X0QoWCtxKFRxK348PS9LaTRGd2xMS0xBZWdddTsvdVJeP2pYWiNEaUxCMUlJJk49W2ZeWUJJ'@;
put 'd29DbnF1djg9XjZsUVApWmZNaD9SMitjdzRvdzdKdFQ5dF1Jc05mW3tyLD11aksmTjtdRHtQSC5Pb2Fifm81aE4ibTZTOV5gZiFTRmohcU9SWnVTL35HUEM1VFZfLDA/Umo+cVdabn5mPix9dk98figuWj46MWVTeE54QSl9dCg+XyFrdT4wbW1TN3VwUGVyRUBCfXNnUmsvfWwjQkl7dEIlVWZM'@;
put 'Y05Ncl5PbXJLWCpaaUpCemt0SSFJIUk7dWEzIlVYPFBDKjdoYlRLPSVwRDp0XlAyV3pfbU9xK3M8Pm45aX4lfEhMckhMOThNTmAxfkRlOnE9KEhQdVVwOzNnI0FpbTFDakAkcTZrRXg1NlY7eH1qUT94YGhDI3syVSZGdkxPQkQkT3g1UFs2KnVVOHhofS54KTlaSltiIU5qNTF0eDsxNS59P0gx'@;
put 'aFJvWXhSX3B8RkkmPWBVdWpNd1dCfXtVKEh4RT9ITEtJcjhRRShEL11PNHREZFVoUyFqa3I8ajF9dTcjej5IRFVqQVc2YEMqcUlpbCw7V3FLcCwpZmJoeHlpaDE/VHB4YXZIM3leS0tiUjNoNkArTUZOOyhZN0A6Pj8+V0Z0MWokcmgpX11sNU1JfEZWcERaLHZYcGZUbitnYW9OVG1VZz97T0dy'@;
put 'IURyYzRrfCQ4alRWTFIqX2RTJGR+RiNvYiUxZEAwSCVaPH1RTGtjeXwxfDAjTXomWyhKcmZFcEpHVWdaM1IhNz9vSDNqeSY1fXUsKDNTVEtCUW1HdFlqdHBQaTlQOCQ9KGVHcnMwIl4zWD1fMilqWE5nP2csRFhAWywqMkJYdjMuMjp0IkhvciU4emlSa1hjcSkyVz5DSWtCOX4wX0c+Jkw2YmJj'@;
put 'eHwmdW4rOUZCTV54ZyJRKHBCYzhkU1peOGlDeXxJVFteblJAO3NCeyN3ZFl1TCtjMF8oOiErWEw8UUxOIlFCezl5Yjc1KVtNRmFfVEAkOTUiJXMhJiVjQmdEe3Z5KCYiNDEmdCx1VWpuRE1IV1tWa3B3W1FJeVdVa2VkJXw9eXw5bGRubGU2ZlUuWTZrMTZALkhXTF9YYGVtIVkieHpCU096KnE0'@;
put 'M31jeE5Bb2FXRXN7R1lpRzVUYCQhOltKRlArK2dCS2Bgc3I8V3BibDsseDhqWSVfczMhXXxWPDk5MDc0Nl9jRD81bHEvRjk5Z0hESlo+N1oheEsjLnRxQ2B0fi99T25FelRbMz0kJDRoeGIrKWw2SjR2OG5WaH5Bb1JrInhJM1FjPH5WdFA0eUtuPWRTdWhrTTtDR0pFen5qemk0WnZtZiM8bHh7'@;
put 'KX1wb3hBSWo+fSFiaTlDayRUR19AMDFfMX58LlYufVFecVE1KU06WW1TZ0lbcl8rdGBFVi46a2h9MT8yUG9uPCFteE1+RiZNdHhEPV1rKVRDelt6N2ttOVF7ZUhDJGRYJUpCPHloISteNzskb090fXNCWlJvRmtCLFtsMFVUTzcjUEo/UlYiK0UveEdYOzpWNF9SRThOYThPd2deVDpxWj1LQiJS'@;
put 'bllpU01mSH1AYSFxKVh2UVJANSI/akthcSFja0JCXWQhaWVmcUk5fSRRIndEJCRbbEt3YzxPWnJlfD9efjgqYzp5UHM2L1g2bnh6L2l2dUY8S1R6T3ZpflJfSDZwIjZDfXhgTDJVd31lVzhvIyxxLHo9QnVMKWthQzMhZ1d8NEB0Xm9fRkdiRCVqaik6eDJ3ZlEpe1RyPWJQNEhIYTF0RVtyNDZI'@;
put 'aWs+eihVfmMxMSw4YV5ZMiN9RkRXISNVZGxieDJIQFJKfDNlSltpM0BIJXJUIiR0cmdLRksrcGdDaVJ0YCZLb1RMUEFBZHpNV1tKPzFZODBNKkp6NkkwSVVVR25sR0QpSVJiPlNGa3kzTCUme2MwbWhIaX1FLDduSTlRZWVbYntHWnJrQkZZZHB8YV94b0IwMStOYVtJO1lBMXByPzAsZi9sQUNi'@;
put 'U3I3IT1HUmtRK3s7fnEwcmZYd11vKlp9dSU4flBib15aSWU9KFI/WUp3e0hCZDoiOTkzUmg9dylJZ1Y7VytrcHxBP3IwZjVzMSMyViY9anBFOj9uNjdTfXQzJUsyIWcmU3RCcE9ZQEpiQEgycHxQYFVvd3p0IjNXUn00R05xW3Vkfn1zXTV1c2RnaTp8WixvSD0qfTErWFc7XWBoNDw5T2wmellF'@;
put 'RGh+Qjh6fCI8KGJjPXZIR1BaYEhKeE1gK2dpPD9vW0xxUHZJQjwxbispeywjUFVZRy5ieSNLM0s+c0dOdUhxKUludGZ5aUpSWjtnRX4iVmskRFN7UjchWSZLY3d2SmIrK2I8fnoqJCx1c3IxKF5CfVQ4a1MzWFFQaHFNQ3pReXcuS0k8YHhtUUFxSU5fVkxbanhvWjh8T00rSE1eWXsuPE9ZPiRh'@;
put 'ZzZQbzViekBwfDBVbzZIVjZ2fTNYYVVfYDdCRiVlXmskKUQiYS5XeixFdFdsTUpeI0t6c3YwLDdPRCNGTk1nbzwleXl9RFFxYCRfRVpdWCptMi9sbCtdK2pZYXBIZF9CXWVQMSl6KnssKE1Ra2pLW0lKNDFEOlgpKVlvVCJQSzRGZCNUakYjamI+PXY4TX5DbEZhZj91MyJwbjFKalpxanwvXjpW'@;
put 'STpCeD81JSo1MlA7fGQxLHA4Lj1PM1tkS0psWVV1PXhrcmlBdX5tN0BaUkd4Y1RPUDdiYl8jIlFPTyxjKzh0OThdPlhKL2d2US4wdWgzdEBhSW9OeUpIQndML3woLmh6YXkucW0kZlVYUioqI0xsOjBAb1hsQl1JQzYqKjU+L1QqYyh6MSU9dHVxWUhnXW1sIzM5RC8hOV88bHRjbExrfj0ybWF+'@;
put 'TUhpWFRebUgySVpjLndseWE4SDZHK1lyeHVqXSV8SzJMXk47N3tbNCV8Rkt4Ujx4OSlnUWl7XmFfWEpVYHNaW3lAbEc5KHRye11aam9beSIoXXh8fCMufnQ5JHNFJUdmMFBvUjtZcjQqJE9tR2k9WHs5Z15dLz4xdGxyJVhCIkIiZCZmaGU7ZiNeRlNtcm5mTjpuYVsjfiFjIkBiKT1CX2FgKHlb'@;
put 'enBDfWV2VTc8VH5xek94Y3gxU1p+S357X2BmWG8iZ1I4b1J2U2M3TyEvY11lVXJLPzEqTixoPm5hMzZ4MFpoRWI+cj1jR0RULmBPWkIpQitHNkQ5VUhMQ3Z0YCxTQ1Updz4mUCV3L0YuWmowZE9vUTJqRjdVM05KfElNZmlKUm9lSGlHZDphU3x4PEIqPUk8YVUwak5JVTx2e2xJYmErPSxKJU1V'@;
put 'd1V7QCxkVzwqeHxiMjw9Z2BkKmFITn1dRm9ISjZ1OG4xZ2JNX0E0PTB7Mm9gfWEjLyRRO0h0PCt0S2BKKnpjRlJaZkRqQDtbbH0waEomfDdqYzswfFFET2dDWkBCL10rO2piTzAuRVRXVzFHN0I2TVkveitJPG0lMWpkfXk+N2lGY0VWTiw2NH1VbWc5KnAsUlleSWlBUWljaDVbN1A1S1g7WVV4'@;
put 'QW1RLk9Nd3I7WzlHZiYlbkRla1ptZ0NEcn5DOXlMdlgkeUh1Mj1xY1cmXlh+N0F4ITBqaG9oQSJHXWNoel5sOXJiSmdQVCw6anZ1ZzhxSFV8NCJlMj9WKW1ESSZwQn1gcDREU35odElVeVtXdHMzamdSYyEycldZSiF4V2NtJGNReyYrd1IkUU09U2p7eEFOJk89Pm1xLjFgQko/YkhfV18rK2lI'@;
put 'TClCQWUxKDZObD58eEFhdmloIzhWVj5rTko9UnVmJWw3cSV+X04hfV43RCUlcz8hWUptc2JKfiN0aHFoW3wrX3hkZHA6aVpuMGJ7Qy8mQVUjLE1DOHVbcGhvMXM1dyhmMlBqKTJ3Wyl5T1pBdXtvaGY6a1UlQTV+R2E5KGJAKmE6RGBueGEoaG1AIVY8SXwjcitfTn02XXhVXitrI2NmIVkqLGVP'@;
put 'Mzo/VT5CWzhTZ0ouaU5SZkUqMDZpQX1VZCV9Q0xsZTZJVmJHNnlQL31FOSRPKEUjKnZ6dTleO1FnLmxKOHpIYFVjPC4pX0c2UE8rOzo0VVh5N35xcCZHYig4YVQ0Qj4mJSpAR3JzIV5SUz5nVjMoKjBfWkBOY0skeC4yRFNiPyw0VDorLiYxUGl9L1pRJVRXJkVxITRfal9IcX5zW1YzXn5HT058'@;
put 'aVVPbnsuRyUhSVo5MSNNMVg0PkczdUAxUU5nMDt4MlE4Zih3MVhuZHtFQzRONyMuIlZhIlByLGh6VT9BcT1pdiFubDFNbitbJEsiVm8xcGZlKixXQnhiXV4mZ05KRSpUdkw1cztJbEljQEtVKisjYHhhJH5QKmUoUmpGZUdtbz9WSnJAK1pINzNuSixVSiFQOzxtaFI2JS56ak58OzlDY0svKTsq'@;
put 'ZXV1UVFrNENqelcxWHhbdn5IS3M+Y2R6c1AqMz1RPEZtVj5oa3wjfTdSQFkocCw3dnBSTn1dMjFbd0lOVExxV3g6JmlHe1NYNz01flE1WkRkZHR0VU1dd2U2bCFUP3c+eH54OWtmRl4sQnVZe3p0NTJPMCNOWTpmZ3E8Y0tbbl9pTGEvcHVlIjI8bnJlLFl3NlE6fi4jdyROS3sqb00veEZsOEss'@;
put 'YDkua3B6MlN7fkhsQyNoKH5XZnU5TXpGVzFZIXlPUSthRVh4Ol8veWhRfX5LVEBZaCM4ZFk1TDQ3eXJSdVo9YHYwJm81bmFmYklkMXtXcGg1ZF5MeigsdURBP3xuaXMpKnc3OytXTil0eSVoI35XTSRKMV5bbzpJMFRYPU1IWDZnO1QoIzQxOkFwM1VhfSxuUmJSWElVe1trPV1TJSQqaFJXdUBe'@;
put 'KUdiP1k9dDFpLHl1ZEFCYVMwI3pbX0VxNEh2R1JWQzw2UTslUSg8TTYoOlMyWWU0fWI3Xnd+eip9UF02biRNMXBwQDgoTmU5Q1Y7cjJlRnppZThuSkApJmxGRTk7RXUmcF50K1hKVThaN1I/PT16TEV7Xy5iZ0lWb2ZsS3Emd0htKkBbflYrL21eLk1wKkBDNWFle0UlOmh+YGhMdDVgdWlwZEJi'@;
put 'VlEsL0drfT1gXytLPXoxW3Q6eVJDYCNlKEUqWlI3ZG1BflQqWW02IWtfJmEmM31ldE00ITM1N10reU8vTFJRX2BReiRvZXM/KDxzLz5hPHszSC5RaCYsJC9TZXpsNTtPLEBTXkZIPFVIZSQoY11qXSV1YlQkbUteOXs8cXgvP0kmSWpAM0hAUT9+WFVFdzJXSno4Y11DaUtjTCVDc34/QXAraVtt'@;
put 'UzV4I11EZUQpPGFXKjxVWXRHYlg9aGBJKixPRVFHT0R+VjpbMUM5QDU1UUZyNVJjVSljVnd5LmpER34sY0FwXypGTUxxX0gvVUY0enxva1YvSXBJcTJ2Oj5DRElIc1UuMmRbMDM6UUQrRmU2TXl5ViImc0pAVmdTcVZSfGFienI9c3g/TDYxTzw/aG1AIUlEcSRFMDp6cCkoZ3A4UEJgMT0rd0xn'@;
put 'V0BuclhTSSgoe1NHTHA8MD0vSWpLTXgwQVImZXVzYUJOKTY9UDo6Omg0V1lqeGhraCVWYiUlci5IQk1gSDd7bz9pWGJ3LFBMM3pMU0h2cDU4YlB2NHhdPykoUkslTT4lMCRnSUtxakgmIkxEN2RAVUpxRV8yaHZafCJKb3ZlOzEpUkwxU0lURHB7eC4mdUlsOVlLWVtpU14oTT5sPjtCbktZaVpU'@;
put 'ek1KciREQ1g5aX4+KDx5aVtMVkA7dDtvT1Q4UmN7Pn4uZCJidlMsNjxdSEcpeiYmKmhzOF5KTGtBQUMjL2tgPDxud0JvJEpVSCFyVzdiaGFUeVVuaj10Vy4mTEx7RyUjdEQudH1aTTA2YHZibGw2fHBsXjJpUW5vLCtCaH53bkEydEU1RT8/T2x8JGVUQ3pHdnRoRzFJTTpGaFJscmVFOjM+I198'@;
put 'ZnRjci98K0JQQnAvXyFybEk8eyJYbHhHSC5DXnskPz41SlVDIyROb0N1bEw2fXM8dyZndVdhYzt8cTNPKX5YKSFEfVFCM2h0VTpbOlZGJUZGPjVJeldHWlBrbWNqYjRwfG18OitNeCE2T1cmJDp9a1d8QlpnQlU+MEo7V3t7ZTBPeSJNcEhJaU9oZTgpM3ZKXiZAKmpnfiNEREd7cXRkbz1GWUBL'@;
put 'YndRNT5NWDI7YGlZJVdWQXN2UiY0RXc7RE9VdWlqM3EuJn46XnQ2LCgjMEY/TVtfIVpPLzloJF5Vc2dESEZrdEpjMktFSUBJNHdfI0IrNVY/RlM5dnRydlovMmh9NGdpVzYvaklUa0FUUW9gbG9nRVY+OkB7fGlyeE55andGSyozUzZ6Vy99NGJxWH0iIlU3Iyp2Lk83IkQ6RSpqZUNLfFFTTGRI'@;
put 'LEdHekRfQ1NgKjEkfHh0cnohJjQyVlB1Xmd1MFJFeW8pIVV0b2Aqd0ZtPVVWMz5YaDRjNUtLXiM5JDRBOWYhYVRNNk0xL2gmdUJrTng1X2o/fTw/RncsIXVbS3pMP05oJHZCTCxiNytbekRTeWRFOmQoJCFnb0pvQTUjfVAwdnx0Y21nKCltTj90Qz5LR3tfQiNKfUVbOCZid3NmRHgpRXtJTUwk'@;
put 'bCw0LzFYV35oOEY1cEwxX2wiY1NYRlZnZEhZViVoPVNUKzZSNGsqZnVEa1FdM21De3dLPEhGTXJUZ19tN3BwQk5ESX0wcW1nUS9gdUA6dFNodkFTVlJQNUpoJXVgOyh3PzVnSXphLClZYEVjVUQwU1VzKXJVMihSVUl8TjB4X2pDTTw8LmlCXjB7PzI6NEZYJEBJcSFWQldqe35Hd3gvb05oeFAh'@;
put 'T2hvQWdFTnw9JDhZa0k/JG50NEB5KXd+JjV9KCVlKlB+UGF+SF12ZS9RPCwwP0hfMUV1P3BZQ11qWilvc3N8YWw5SihjM3kpblQ1ejROLj1HJGZIaC5aQnEwdjxnKkgpNWB6ZDBfPzdSeFVSQCsiKy50UmQ4SXUxNm5WKDFrZCVUJHJ2VmJGZDIjMjc0XSMjaDJCOE9CLDt6LFk3RXRMQmFBVENi'@;
put 'YmN1OXxxQDxgQGNtTUtJQS44ZDR+P3oudGM6JXBPa0kuYHluKzAwfTVBXn45aypnRDBSNVdGYVRQanY2WEhLVGssVHVZVyZZUio6d247WzwxMkx1JlhAPEMseU86fXQreCokd1tiV1NOS1k/dF49YGtpMklVTXUrO2hBdTIqd2BtMUFrWFEiRTB0dXZ9YS5lb3hmXm9fR1QzfUNENEhLaSZ0e0R6'@;
put 'ZnhtUyxdenp0MypzeGtRRGd3KnBLLDovPH18RypOWHpZfmFLNVs9aENydC81NEJoIW5leEs/UXAyJiMiKnFDV1BtZVllJUZLYCJ1SDA4RnZzVFhsPyhtJnxSSUkpWF9RYmRbeUR3QzhAZmAwPTkuUDNhMj9ZRFNDJSZlJUt2SlVeUSpacGFeVmdoPU8hS2M2OHBiNX4zfSp7VjI0UUVkcEZCP2dT'@;
put 'LGZifilGbjxZYDJrQH5CMW5BYjM1UzpsOFthJl9FbV9HanJkOSQxX1NqdXghLC9jXUwpSi5gNT9BRDYlZ3cmfi86NGksKHV7WjN5XkVQaztyYGdHTjhkQSwxMkJJe2U7WmBRZm8lLHdVI0c8KV8lQ0lkP3MsWUAhVjJVOEVQa3FqKnE5dGQ5Y3B8ODlLNmtReCN1alApVVJlPnB5Jl9tSTdtMUZH'@;
put 'fGlbS1tsVitxTSNPNVBgeFQwLj8hZ2pNW01AKT9JNlhuS1J6bHx5JWZ1bmpqcGU+M15vNSp9Pz9tUDVSaldDVVB8fktJLkxRaHFqUVQ+JWZQbHVMOEl5VDk2dlVMOyU5UlluTUd5c1MoJDAiO0A4OClkcFZscFRURzR7IloreFZUMkYkVDBfNEdJMElzbDtELmFJTV8mQVEkcHt7UDBybixkblg/'@;
put 'PG8vbW4hQFtySXgpcmwwQjR+W2xpeyx4clQuKkspIzQhV0ReNmdXZHxeXVZeeWcrTlpYdyUmV10yeXVCLGFLVShnNGxLSjUscUYrVSRbelEzVSRBIUUiMDdrb0MxMlsoeUJQXmVDU0U1dFFQO0IyRVAwLik9TTlbTnZCJkhNUChXS3YoY0sscjkvbUdZWTh7UUZuOD5wW08xckRzfWo+UGdTI182'@;
put 'UDNyeTUqW1I3cWdsUn5oQ0YpRi8wY2tOR2soNTk9RH5+ZmxUajxGVlgyezM9Y2l1SH44OGtIYU96MS5ZW1g1QyVLPHxIPERAW2xweUdEeyRfZTxiVE5ZLnx9djJlWCskVSVsN0pNOlNoV0skS2NbWUlMKzU5dGh3ODJZRW90Xm5gNlFjeVI6W0B2bXFeYjVjbH5vNEEvOVg1aCF0Qyw3eForPkNw'@;
put 'bHAxLypyPU9xbGdLPno1TkJ0WkRtXVNhR0tFXTA1LFtUcDhvNFZLZ0B4XVNWTjxhKHBCZHh2K1A7YiFwZTZJaGYyTVpaMHdMUzVYaExOcyZTaGkySitddFh6SjZkaFF1K1UrZzkjXWxWcGo3ME1SW2MqQiVzOkUjaiomcCF2Q0pLIVpRI31ZZXkvXmkud0xOdlV6aGdsKjM1fCs0T2JFZVYzc2Vv'@;
put 'ZlAjNy4zaTwoc2pQTTFkRGBWX083KnIyeVFNJSQhUEdOZHQuXjpeeCgzLGQyVk1SK1ZMWSFCc1smcjJSKyV3dWw4MkorIT9mMlIrTyhlI1FHVjZJWiJkaGxwXnBkRGBtMHFNI2xuMS5PU1QsfCglPl1keFtqaVkrPXM+XjY3ZG5wZ18oZEZtTFZiY2l0NXRRRm1NI2x3S1RUfkIpOHlWfUUhYTI2'@;
put 'QyVrPyo8Ojg/W01Lci9xVW1tODIubkJUPUc9NDpPKkhedHFnKE5ONSxHeGN3cVU3bWwpU2YuQDVQNyNfXlBnREQlNF8mU30hJSN+ZFU2SG1TaDZkZ0p2SjtkTCFneno8eTY+LnEobH5JRm4uIWx+OG85XiFnUzJkfCZQM0dXWzEyQWdEeWN0Yzoybi9PZGhedFJgSk1OODldbHMye3ZSc05PJF14'@;
put 'N0lFQlE7TnRoTH1LaChlRE5JR3ohVEhqMVE6UWNIflFXd1ZHNmM1Jm9UMz9URHVhe0p+JWciZz0ze2Y4W3I1ciV1OjQxMyFlX05oRypUS1c2aXZRK3RZS2xoMjNCV3d2JUIzUlZzMlFbOzM3QzdHP1RkaH5yN0ZEPFMzM0Q0VzRtLjomS3NDb3BlMihuYWk0aG4oUH0vSl9sfj5TMHUhLFVDKG5L'@;
put 'UE9BaiJIX2piVVghKWRDO1VUdGVxUT4hOjthRXFbYz5GaU9YQGwvT0NyZSlWRk5deiNkPVk6ei4jUEp4fUs6LFVFW3JHcCNLfktJWytFV1hLTFloQmxQZmNFZiF3NV5XXyFBO3ExMTdQaTJaaDVWK2BwXXp8eXRUR14mYWpCUj8qWU4iKVBnQkwlSlMpQ1ZgT35OfTpzP2JIQGJrP35sS3RdbHJn'@;
put 'ayg5ZEVBZFVsfCZiUkNhQldEU1RNdmpTTDozY3t7YEQyMEtTVDZrSklAWVgvQzNRdEQ9TEhiKm5TSyxsKX1oN1hpNDhTTUs7MktJJGMjV3o7UnZHXVEwL3UlL2g3clJ4eERaR2I4TWVDMW9Laz1CP2lxbz54anIjIU1VYjE8YnZVVSFec2lgLypEa3lEZUgiUF9VXTs3Ul52ezlWYFBAQ3FfNCpy'@;
put 'anM3VnQrPmg3e0NtJXImJChAMS93cTxoNk5uZkshPV8uZWBZWytNOixhY1dVMFdhOS4mcCtYazs0T2ZdYEZlSHl2UCopWnJCNVM0TGA/eVE6ZztCVEk7JVs0fGBbJHx5aHZaNyhEOXI8WXZGfGx1QTM5PElJPkdhImg2IXluYnt7YD5sTVUjZ1FmZnFtXX1VeS9yYW5TaV5aYiJGZjdzPXUyaSR9'@;
put 'MjBuImI7VWA3Y0ZAQmcvWS5jM31CQGRMVm5FVFhsOmpIYDdWYSF1I1lseSEybzUlMTlnX1lbJkYmSVF+LnR9QFUsKXM6eV0xMzQrZkpZVDRhWCtLeE5bJXdZJV9JUHEkX29dYEA7SXw/M1BHKDdfZ1ZZfCFdM1BFYyI2ayZYJmxLWWVQUyY/RiU1LmspOm5rcFJIWV1sJHNVWixQLlB2L1U0JTd6'@;
put 'XyZtJCUkWXh0WXljPXAjallgKkphVkIrZz9uXkFAWWZ2VXhEZm08NG9edDVgPz56fFleKVovez85aCYmTmR6QENfbT0ufF4zVUl5UWRGVGE/UXgyTVs0T31ISndMOkpAcGlkZDhkKCx4eiJ7dVZRUHtkbTA4Mi5kSEA7NzdhaHlNW1YlJltIMEc1KFVMNTc9UDFPWCs1UXApbjIwWXdkZEVYcmo5'@;
put 'MmFjaF5wZEF0bmNtMD9kU2gxYSQ2Q1RPWEk1dkwoUjFmendzP2E2OlUka3hdXiFCXTcsOXBZZlhjbHheZUU7LGFDUiIsTVI5Z1c6LmoqZmlRekdIKFs9RHRWNGl2JDN1OmBpMUFyekJiVm1FeS5CamFSbyVwISF6RHMucjc4IU5VPXhZQ3JARks0bns2YztJdzV6K2F0c2tKciltTTZXTElnUzFC'@;
put 'Zj93XzJIUV1vWF9Jb0dBNi4xV2ovYzY+b3ZgQCZsJFszJHJTZV98P3JgY2EjOnNzNlhTUllKX3xqT1ssXUA/bj1QSzI6VlYpR01TOHJrWnxeRDM4fUw2PlZDUmZzMTd2NlI3YFBlQyphe3Yufjp5NlpGeyYpJVNlLylSeGo2YTZeQHp4KzQsLnUpWyFwdzdNNnI4Q3M+MSZ8IThsX0gqNzV7Q213'@;
put 'JGpyZSREanJ6OXFFYW4qYXFKdXs3XXV7Nzo4WGIiMFJkU0ZrLFJibWxRdUt3MjE+MyFSYltHeWwsP0wscz9XTFIpMCgsVTI2N2ouTjhYT2Q5Rjp0TW9AdHxgajdlQGpjODtQNWhMUlIyMy4ya3hgJXdFP05TXzM0NyE+d1JPfUczbUo/PDs2OH5qM2EqRlNuSDJud18mZy4rLiR5QmdpZWQpfFA1'@;
put 'X2lfYD8pQW1lMCU0TlBnYGpqWTp1PG4hbSEjXmJyfjt5akdhXjU+a0poSHpVMXUyVip0P193PXZtfF1uemYoRmNSfkd7Mnx6YFRoeD50PDMjXjd2I1ZJcVlPdXpJK2s8YTw2LHNZdWI7Q2Zia0dvT093Qlh0VEg8R3FNPj5bUH1lQXM+PnxfRFUqMHBDPGkraFo0PWcjMiw+PzkmRm1VaEhnUHtA'@;
put 'djFFcXwqaywpKlFKRD5IP0ttKT9fOikrUXBxUT9fJUZuL2FtdzxYYFZHJmIxc3p+UFZaN18sWUlBaFdEcl9Ia2FWP3xxdzdrMDxPU0FFXVRHM2w4OCR5Izk0ZFF9eEJ+SGxEbjhCN3tAdFMjM1owKX09O21TT3E/KW5vJHxhX0dgb2hBfkQ7SWdMJj5ZLCJzMnNKQ0xRPExEQHJARll0ejlPak8j'@;
put 'ckQqKXQxL0Z7MmpNemk4YGVrTzxhbSh1TGAzeXd1dHNIdTY/ey5CcjpjQGJtd3M3d0kpTEkmO1ZxRjxOMjNma2ZDcmhic28rN21tJEdBLz9dNTF3T3goXTlLdGsqe208P18pVTxlXzU1N1doM3xMK1M2dykrJWVJZ3JVMmg3O1ssNTVqUXgmTWJAOSZrPGFkV3lxSkRHK0Q6MDVNIjwjY2dtImg2'@;
put 'IUkqUj9LWilPSDlvNWZPNmRnMihuQjt4LmU7SkdxOD1PO3peRzwjJnE/K3pDVT14JDdaWS40aiVfMWlJXyhrWGIqdzhVLyZ+UT9XLyxVNjY9YzJPJVliPTxraCRrZlJCeSxoe0BvWSp8eyZKdyYxYzBCKmpJW3FQcWxjOHxHX1glTjxkUnNYXWksXUhSWVYocXVMWzFvSDgxZXksdSQpWEh2fE9h'@;
put 'IyFPSDQ4eE54RDBrJlczWGp2aDRiWHh4aD8mVFpJKXUsV2FldTZ3K0A+LmdgSjklUWRIXk1SK1N+OVREI182SXpNdjthZFclfGF7LlQ/KiFQPWxLRnc3O0plc2dKZyouU2Urald5OyxtSWM0I0V7O2oubnsrIyVHVXN+ZzhtbS9JUD97S0p7USV8cWsxOCoiQ2VudGRRMldQfWRJIWVvTk5+Szg4'@;
put 'dWYja0JWaUt4PyooI2ovQS95c15yIyNQKkhKIXBudHNeaCpbV0ZdUk94b25SSnpRWTM3XkBaREJYeTMqemQyZk9sQEZJM3IoO0BkRX52TzBHNW9GKkc+LFU/bGFfdD9pUF17S18zWlg1KDpiTkxHaEtsbzcya2wpenZJbiFsPDhabktdKmUzR046NHBZKGxwSixpSGdjNmEsZkRBOS4+YnBufGJO'@;
put 'fiEsYFtyW3dPI2A7filEdU9la0FxKFlKR2wjTipDKXVzIVFQV2JUOCFmJFRMbiI/Ul5mTnBiKVByIT5ZUFY4WEpeMjBmWml0LFtuX3pIWUBpOCE4OWdkWzk0bzwsJHxvLyNwZSZ4KXNtTzE3PzJzc114SV4sKkFpV304SWN6aiNTOlhaaldVMEQmMnlJXkJqOl1MOT4wc0kiciNmNXdNSG88Pjdl'@;
put 'amRMR0o3Qlo0alpoRlghWTRBJlkpVj1XYFIrRilacC5Eem5IV1c4M3Y+YkIuUXFmdGZ1VjEqd3dTUldbTm9FZXNmR0FDJVcpeDc+VF5XM1YlKEVeLE1bRWw2Wl5xenFIfkhDK3txe2RTJV4raHZwIVNVQH51RCU4eTxTSzM+K2h5V2huMmBpIzNxdGddLk5ZVkJbTmBlWDhdfUlbbGJ4VX0vT2Bf'@;
put 'I2k5SV0xMzgqd2V7RFBEQl1AWmJdT0pRWiE7RS97ZV91MSxpbn15aFhiZkc2dyJOcz5USStaNU9hPU1TVTZwQH50Y3xBWS9eam88dE85U3N8XjBOVSFueDlwQU5CLkJAVm58MFd4VVs4eiNObVBKdyMuOjhNTyRoMV9ja3Rlcm9jZzNDV24qY0dOPkBQaywxfW1PM0IuQkArUityOD9peT8zX3Jg'@;
put 'VWJCRURjQGdEYz9STylHZjYrLCg7ZjlzQ3dYQiU2aXdpNmRAWDVWdVh8RlhhWHsmZ1N2eitQeHQ1bE5pWV9WPVp1XUE1ZFkpcTI7KmgsVlk8MnY2P2FBbSRicC9YKUAuRzF3IixoMmkqMCxtZUopaWV0Pj56Tl9rWCJUbUglSTQ1SnU/fH0md2VWbSJvPWsvamYkbjVYYFYkOz13QGl5UkdxKyNt'@;
put 'LGFxbzEmWS8kaG8kVzskbyQlaTdMbTo4S3o/X0IrY3tUMTl3XmUwKmlycVtMK15jRGlZbj8sVmVacG81cFplOl8rZy9waCZYOWo3MVNVQ1szYXcmXzNeNUdxMHM6SlBsNnpyZ3U4R0hSZWAsc2cieGBTeCxCMnQuLiRoQ0JRZy4/cEE8Vm0+a0RJNkwsSH0xemFzXT5STFp+fGUxMk15bDxlQjg0'@;
put 'YXgxKFV9ZVtnIWdOZTE1S2lrby5ZZjNFeFN6M0NSdSNYJSlMJWJ6YXpOZ3ouPWhmRStISGV2Jjl7RXs0LDpnXnk0KUwlNE1vR3JAcUksLDU8LFQ4V252TX5fNi93RlYkJnZHODFrUURoTik0PFJ+bUxBelpONXhSRn5BV3RlZU5YdXEockQqLEIzNHNKW15XVS5RXThkNm9nUXFhZj5yOVJJR1ZL'@;
put 'VixFLihlVjU4fXBMI3t4aH0hImV4dTdoLEA5XWolPkBeNWoxREQ1djlHVjZ0SC8kMjNeWU5TPWcwXXtwVUYxbTxwWCFIOnw+M0ZhVzNMTlMiUl4xKnEmJT8lbDJaa3RWOWV0bz8xSElHX0QhV2h2SC9ycjZCTWlJREdBXjtRR001O1B3MllHWnpWVHhNeUF3OCVpcEplT1BMO2V5cXZROF8lT3lt'@;
put 'b0NNXW1pUTh6ODs5LGZabXJVKWttIkRoU2p4dlJoWGAzfnx0Lms1UmJsNngpPz9rNnIqe19EP1NUOnciNUVJP2lSL0Uxckcvez9gT2VbWiVsOj8qfmxIQld2Qk89cmldVG95eUE9Pjgreyg5PVdXVkY9LE5rYjdOa193RStjVHRkQjNJLzpuPmtRMmVufk5OM2liQTAkZHhvT2JiL2tjaS5jdkM1'@;
put 'fGJjKiRkZzVYYixLLHUjd3VHKnVAdG9eJlV1d2tvSTtwdkl+NS5CS1lBWVsiN3I1dGZ5V0RqdF5jJEc8SDk4R3s7PktBSHFUby5KdEcrZm5KPWledjV3SE07dTxOYjdgfXpoemIkNmAzR0FVVm0rbkFhQW1HRWpNISM1LGomYCVedGR0PnA+QnI8UGQ+KzVvbzNhMmleYC9+fCZjSTklT1liO1ln'@;
put 'JW9sL1JJOGt5fSQ6PFE7NGNPKk5iNCVZYkdpN1p3NWN1V1puM1pKeHYxTTsyQlRgQGY/aEJSMmhWQlBeYTYzbWdNZi40fTk8aURqOzJhST1URXNfS08qRH5HQ0I2eX5ARUQrRTJ1JDNlYzRjY1g4OmZBQDxVbnlBMHpKfFYwXTRIbGwsaWcxSjA2NkduNCU7Q2Y4VGFLaVQkekxyQ0RtNSRyQ2wk'@;
put 'Yy4wRyIzPzQ7WkdUIW49c25tbGVycDBeYnt4VFFNOi8pfCFJWDp5d1Z6eCFmNiQ2bnZuey9ELFhTa2pZal1IP3BUKDx0b3VlVSxIRiFRSW1DM0tmPiw1YC5iQVRqNjh1YGROLkhAV1VJQFZgOjsyYmFVPnN1ZyJyVEdsWV8vU2kjeFc4fEo/WXJLaitFN158Si58Z2hVbyRmdWhEaGleWEx9Ziok'@;
put 'OnRPa2NMJSFEXUV+S2JwPWxWPTR4KyluVGppbSxEdkg9by99NkdzaEEpcmNGYzJAW2JKQy9fRilJZTlPKmxeQjwzfCZQOHVYc1BkMnNaJThLJkkoLnVbfXZBL2tsOGBWS2BZTCtRSkRBcWlKSUVqNDUkR3BxXiR1Y1ghNWAxOCRkUUNbOndKLEh1d09odGl9YltKfmUiNmxKJkd6TVZ5WiY9JFso'@;
put 'WClCVClEXnFCS0cyT2VWZ0ZSY3AyIUI4M3VYYnM5eX41Ri4zfmA5THRxeTJIWUZAO1d8Yi90bl1DOT1QRncuZjlhNyFAI3J9Wzgpaks8SVMqSFQhdkNyNThRPHQmUnl4Sz8iR3dSTStbbEpBIyNDUEZ3TjVteHReKS5gPTtuXlRCO0tLKmNwUCwvXXQwNklmfk4vPEU1SThyVzt8fXdtUjtfUG8p'@;
put 'OCZUKF8yKzNPYDJpfHhSfk5qeG53P0xvPUFBfFYxaTExM2w/PylLVz1KT35mNCt4ZlYmaWMlNT4zSFNoY2JhVHdnRl5yTmxhMX0qY0syNC54PSlHVHBIWGwmbkdRU2hSM10mNEFQbDhwUGpGIWV4OWM4bX1WTUBHVFAhO2FiVVdTQT96LGt2JW1leDpdNGdJInI2cmxsbyF4R29HOHkoKStFLlJ3'@;
put 'JnIpKShDKE00NFpMbFNzZSJNLFRYWTYrenl8eTBkcUcyIXd2ImI0LClfOzZXVjVgWHtOLiRbLE4kYXNiNjY4VC9WQHZzejc8fDszfFchU2BeYURtfW0ub3JJMD12dzBIbktQI3NmP28wLkdWVylWcT1bZ1k+KEVvZ0IvZVB5LFVQKWpLbk9RR18+SEQ+b3RfZVtSMXUyKWcwT3pNRU42NjtANDk8'@;
put 'MHUyPml6bnZde04wPSp8ezdiLk5bIXFoRklwaj9rOHUwWWE+QDV3SXB7JnwmLFIlKmNRYHVuZ3EjNSxkXmcvOTIuW2YjL2dsUT93TUkkVnQmNiRuZEQ5SilGYG1bV1tLYm1aJnhuZ2pxTSlWdCphMUVnSjs7Ji59eDJXMlY6cnpsckVCNkprXmlqTyxrUkpZKkc9I25ub1U8NXhKRzA+MXZsRWYw'@;
put 'NWt7YSpUYVFIMCsqPTVMPD5lOikpdjlxVGooPHxrS3xhVTZgMUg9fTpWcmg3IzA4L19MIWh9Jnd1S08jSndLLn50bi9qdj9ecVZHIntWNWAmYD8yVj44OC5jcG9JN0JNZUo3W0BIRTZMa2pySlB3N3ZKd3hPTF91YE9EZyRJOklwcT5JdGQyJn0idih9Ujc1UWhHOzAzZEd5cGVrb3Y2P3Nwdndj'@;
put 'cHpbU01ZNT5UViEhYElIQyppfFRwSlk3SElMYSgqakwkW3h2PVRGS1lFZ3Elc0FPZWkvPixsfT9qT1tQbjF3NyxEfSpWcCZzW2JJdWg4SXdta2huQiIzRThKaFE8P2Q/fSQyWFdDRWM1MFFBPDYrbUhYWVkuTjAoeX45NTxnJm9FWSpOdWgpfDtzWW1IU3h3MjJ8RG1PJD1pQ3dSUlgjOlJgMz8o'@;
put 'NER2bVh1LGQuXykuVGVdWzEsVjg5MnMxXmNQPWleQjgzb1tYN3M8d2M4dCZiRnIrNVtaKnNwNjFIK1JMcm1TSiRrblBpLiJkUTs4VStjWU1ecj03YmprKnt5RDc3RnRkRDhiKncmMjtNdFhiQE4iWjB3WUp2ZSJWcEhUaSQ2Llp9eiZFa0kjVlgpdEJCOTZAbzVBUCE5ZjlBZUc4OFEsdDd1Lkw7'@;
put 'fGI7XVd5MnYoNDNedTVpa3RybjsvSEY2cjA2YWw6VlA2ZmwwUUZQS0d8VlFnNitVK053OnxLcX00fT0sVHl8P3IqYyJWJXQ2P21yL0JCVHZhO1Y9S0RHSThMOXJORyEzMnV5Yi9rSGZaQnRLTGR6JTJwL1ZxS3khKHFWJVJEIko/X0UzKzs/O2E1cGxWLFhobFpkclNsS2YwP25HeXA6L0UuTzhZ'@;
put 'IlBtVFVSMW1qP35tUDlmPTUsfEpGTF0rSHltbnkmKjgoUEEuO0o6NG51Lzx3dVpLdk0/e1VocDYjOWgmJGQrY1FVLnU/WUNIOW1MP34+fGc9ampZQz1dSkpKTzM2bmR6T1sqViksVGBuTkpMZT9qNzFhZGUmeGM2eClZSCFeP19fZEtpVCRFW1dLVlEhcD1tSHxSek14YGw9JXRPamBraWMxR0p2'@;
put 'WlUpLj1ZOHBjXVc6Piw1Vl5iYE5RfUU7IjdyTDshZG0kL0kvTGlQKiRIJVtPIXVDOG0ieSgjKWNaJlU/WjxjOjQ0eCspN0hDVlF4W30jfSRvckdlOk5yNkZ7XXh+LkljXjhSUU0yNmY6byQ6dDd+dHYoVGFwa0YzOTFdUmZUUklefjlIZn4sdyheel0lW3Q3cTcsJWJhMztDYG9UVFJvJDJOTDJf'@;
put 'LjN4RlVvXkBMMXJHa2EhXV5OLHBNLFY6eW0qe2dMbVA/ZTg3K0x9WHM5fFVIISs/PkBNZU9IRjYoaWlqX3FpT0kiWExedjdwXTNITDRqTnIuOGl6ODtUbytfJDloRE19fDhoRCxEWyg5OT1QPWtlTF0oZF5QU0JMK1M/Pi4jZD1oUmV+eXJ6Tl0sISJNbnZSdHZeSl9YZXtfMzJ4ImJKIVA5fUtb'@;
put 'ImI5XVpHcyRCV2dOZTx8PiJZUX5RezIwOCRTTyZbTF5Nd2xnZSh1b3cxbixJfGA6O25zOilnRUl2JX5jcEQiY2dBei8yK31XSzU0JjE1VkNhcWBOfDZATmN1MTFoLkBTPCVaUyhnREw4RFNtN3N9Ii86Ri5+d0R4TWJYayNwb0I+cCxrcXFJaUMvTkFFYnZGXj5MKjdrZWVqVTlbIW5mSzp6I05e'@;
put 'XT00Zkgrbkd+JDJZMmhjdD5xTkJ0dj8uaEw1P3A+KFdVWW8mdHRvdyhpJCtAPnc2dnlKejU9fGw2L1B5cmVlO1klU0pGJDRAP1VCTihuYDZOWzMzUiEwWCh8R0NZWmJ6NT1iSkY6YWglakUoYj8oLD1PZmo1cFVoRUApVkVdPGhTfW1JaUJjIX10XnIwMD5nNnpRJD5AaXVQVjhXOCFlYyVbVDE7'@;
put 'az4lKy9TZFdqdDhUPVhhai5FSExGOFh9dDsqRTYqNGp0RD17MHw5XWlHS31YQDc1Y1JIKEImaj8hZlJxXV86Oyouaz83NnhBbGV4M1sscSl5IjFqQ2xLI3doSFBtd0U4T19GOyV9TntiL3RgKCZfYiY8ZWIwdzxIczZyVE8yKiVwdl1pJjsjcWBtOCsxeX5qP1YlTkFPdTtwO2UkZDNMTU1HIWRy'@;
put 'ZHNYaHpMel5jalZAe1lveUpgI3oyO0JYV3R8YjpZdTI5TD4kVzhwREI7eUhFPChEbUg/Qk9nM3ckL3RAOWk3VUE7ZWh0eFN8SjR5TD5ydHZaSUM8QU1nPH1JW1JYdkU/Ryk1KXdfJUtNIVlqWGJPcWVqWiVYKl0sS2Y1Tk1FIjElWy9WYEpbVlZpVyxeM0B9IkxvS0NIXTsiUntocmxkZUxlSGZg'@;
put 'WS9eeykwTDYyPXBoLGo/JEtSZkFeRXxeQlUrZTNvKUc1cVs/UGdzbiksZytyNEYmaj92SS8xMXRzdFkkNlhiZXBtUX5LQiM/VENEaGYlREJdU1B1OjArZUhQbCxWcEBtc0JUe1ZUektKVEdIOE0rWjU6VnVwO09jWXxjbk9WZjxlVkVsOjI4NEV4STZObSNOJmhqSiZGblFWaXRNKSpMP1Rke2Fo'@;
put 'ODV+LnU+bnE5IlRPRig5cX10LCZGWCQhIj5HMz1CVT1jNUBNLk1YcChufFhxMSs/REk9S2QoaGlzInZPdTIofE5Fel1xTnJrL2F+al5MZVZEKWcqc3pEdTkwcWl2cEpxYV9pOy8sSytSZkBdSmApazhvMWxpWWl6bjZVSTlQcHlKaUpsOX1VKGdEez1tOGZSSmk4emc0QjFmJFU7cGB5YyVsOHA5'@;
put 'X0w2WSFdfSZ3MWxgO0A+X3FdQiQ0dGVtRzI8JWMlLmomIiFTNC5IRFB+Mj9oLFZvQ0kzUjVGNVA4KURYfEglKG9nR0thaElVRlQ2TXU8KX1mYllMTmtbaTBCaDQsUWlwOTRmcXBzNGhmPFJtMk5gNEpMYiFIRnw7TnMuUlhNSXAxfn5KRkchUzFxR11UPkB2QncxfUlCS0B0PnRhWG5wJXBBOSo2'@;
put 'ZFYjZHFHKz5jJUBFNi9lOVRRZiRuYzIveFFfeXIhaCtaQkN1UV5eWDNgWTl0X054KDV2bmBYaXleYDNHYFclS0RjVTd0eCpjbVImUGkuclkoK2V1JSNZW3phbDxWX1dnW1pla2lLM3d1KCpMZ3F5NnlNck9mLkt+L1VDQENgeHo9OXY8UDJtSDM5N0pMTmdfYmNUISQ7eVhudXklZjk8Q1FdOzkx'@;
put 'NDF5c3s4V1s7cUR1aDVDfHxVUy5kVndgME9FfmlqJmM4b29YXn19P2psJGp6a0s3Y0J3b29seWxvYH5NM2pCaFcwbktxQVVSUldhYFRDcT4hRGx2WFtNdmtBfG17VTY4SixjIlZIOE1mT3c9OE91cnF+ODByckwrPURHLnZ8RHtiVjhqSFcqIUA+cFdATnRxVnpISUIlW1M5W0ZEfHFgbD8xWkwu'@;
put 'P3lRVlNFPXFYZmVGd08vVVZyMWpMZ2FkKlF7RUlGWUY8OlkmLFQhNjpXUDByLmlUX0h3dndPdz82YEFvOnFLeSNkW1s1dH1TcG94ZXlgSCN1PCtjWlZ6dnIsSmZibEJtX2pDZWhePylHaVZEJEJBZD9jJmQwbCswb2l8eEJRXVc/ZEdkI3Q7OkpAPDcwTyQ8WklFKHlzZ14sYzNZI2BzMGJgWHFF'@;
put 'Lmc1OUMxZU53NFZKbSwlZWlPSD43fSxtRTt7KVsmQzhGWjkrYUR5K0MkQl5FfGouWkUvXVgxV3BCVWMoVnVXXXQ1dFh3TkQkQmhLJVhPKnxofWh3WnhAUCgkRTJfTlJBYUtfcmAvUXZARUtATmJzdiQlJV01eVY2K20lWlYlaSUjQE19RmVSc2xfaipiTFp+ZF4qYnYxZiZKWGcvOEhKaUkoUCV1'@;
put 'X2QwMlRRX25KdyJvKyV8KmZERmVEOzJIY3BafGwsbF58My9kUVN8WGtFV0NERHlkInVRUks+PzhBRV5JYCwpLk87KmhuWlU1bzJ7dTQpUG1VME5HODN4NUNhe3Y3c3hwXkQ5OGwsS28+OVZIXTVXbVV8L0t1e1d4NU1uYHkxdiJ+Q2xfcFdjc1EqclhzIUkqUWBJZ0l0c3xsSSR1MTdxJDEkfWRM'@;
put 'R1hmUjovY0hMTEh2T3M3XmRjPkNHPypINWdJQjhBTTI4ckcsSXp8cT4sYyJWbllEN1oxKlJ9TTZdWTg2VTRCNW9MfXZKX3txRztiNFc/ciIsbkVAOFFoclFiTUwrLl08YVg+bTduRFV9dD9zLl51WmpmNWJSaioobmlZLCtMNU1pUjxeb2RnJkIuR3M/Rk0vaEliQUMoNChGeCgieXcwZ1lEUGk4'@;
put 'Vzh7diRKbEQkMiFHaipQZ3E+UjhfMW9lfEQ5VFhsQXA7Q2cmd2lGT3JTa0sxS29oKi5PVzI3Uj9YQWVNNHZlMXFYSFkhM11fVF9kZjAvJGUlX2taVnNQWD0/Kktpc25QcX1tJFQuP2p2Zj8sQTErNCo4Ik0uVldNdTJeKXBzXkRRaXl1ITszcVlmRG9AVnxCIXZZZmUhTz44bngyOHNXeHdMWj9T'@;
put 'SlFmPEk+e1VoZElHOndnYWFIRUVdeXBaUTZZJnxTK1AmNFE3X01pVj0qZkdHeDJYel83QjtValRAPCFqNkp4Ul4zT3tbO2E4TE53Z0hXdSRMOFsyV3wvUW9SMmV6WFc+PC4kfnxbVnNmSUdRZzI6fUowTlhsJEpzPi8pYltVMzVCXihsUjVHM3BzPypqa3ZEVDw3OTVENDN0O2lkUCQyKz9hYnF6'@;
put 'Lzx5U1liOXFXaFIpPEBfaiMsNSkvUjpHQmt6YmlEN0lqeVp4Q2xbQHFSfihTZW0/O3xgNmQwXU86OXdtJCldITMyMF9TYGxQS2ltfF9TSHhgJn1iMTdqS3FTWDlvKylEc0kqfTpWJiosd2hjPyxwQHUheDJnXmxsV0lrU0wxUkwzNjA0PDdEZF5jUG81N0hvaWNDR3lzeFJPcj4rZk9HeS8lX0RJ'@;
put 'Snh7OV0lWkppfnYmOG8vYz4zMlpWUDwxXlRVan54aVBOWV5iYTEjdj1FO0lUTUReOHRyJG44ZzI5SWkqRFl2dnYkMWExRThKWzBaWU4oXnJgVzFtS3smJiU+ZzozXVZ4MjImeyxzM20kdCVqMk46O1ohZnB6QlV8Jio2XWxxYUc1MDltcHtTSUZMZEohJW9iVEp5TFlrbEU2Qns1YnxaWlYsY1gy'@;
put 'WlYrY2NSNks+cilRO2JXcCluLD9oKDU1dixEPiZTRlo4ZlY9YyZKWTJkbyVmU04pKkAld0BxT1AiMVshVDVFVVkqQDxnKUA8KipwLCVkN29uUyF3TTRha04zZ1lpekpVb299T0l3MTwjaFAsd0RJYTd2L0wpdENNSyYvJmdTL1JqV2ptMkY5Nzs5WGh9XXA4dHIxKWYsPWtQPClAJj8+T011KXUz'@;
put 'eDd2fFYudEx8PT8mckdma3J0ZC9pNzZQPSZqMVldYmpJOzNiOkxsfHZVO0A/azIue3JWTTkuUztKQW4zQ0dKcTE9PDkqaDBvNzgzKlJGO0xPdXByJHYyMmkjOCo6fCEuJjdyMG46dGNZVFlRNnhsOV1td0hlLyRqOV48Kjh1MFByUWslVTA4PmdVenk3fFtOfDYldUhKOjYlTWw4ZjEycDNFJG4r'@;
put 'bThCQlNsYDNleyJeZWRvdVRUT2ZlUDFDRkt1YD5sSGpON154KXxWZkQ4bmo0d0x1LkU2I3Rpems1a3h4O0pCbTlIeU9+ZSlZSkp1OlUydit3JmFIZUhoTWxAYmxqSEkqLkp5Z313PmtAO3cpJWtaUTxZYnNEXSVQKTlqQ0hFSF1YUW52eCNBSyFZVSVDO0NuSV9MV147b31eby5KTVI9R31xfmIq'@;
put 'ZUE4TD84L1J5dilBM21CQnlHJVZFcXJYaC95PHRGdSxtPmVARlB8ZE11SjlQfGI3QmVIIlBaUkR8Z3UucmJARnZiK2F3fDEobmA1PlU6MnVBRlY4OTc1KHckPXlhVlYySmZvXz9jRnt6X3J+Pm9Td0hHbjBaU0R8OzJoYGJyM0hmNlVVamtvQSF9VXldeCFjK053fHdtUzMvOmEqME1lXilPTmlL'@;
put 'ez9RdjN0RyYheUwqWF5TTUZedyFIODs3JXxBRzYlPmxOWW85WUQ8bH47UU4ze0g8NSZZalc7dzg4JWQyfmRHYHppJEhMOEU4OkBLWXdSYC5jK0hPayNlcmcvTl4kZDE7djokTXZ6W1ZsYk8+UzQvaGY2PEliMVNZVG1OWUJNM3Bie0xOVSY2JTB3OyFZT1plRVhtJikrSj9beWdkUjsvR2JZa0BO'@;
put 'QFdoTVV+YkIle1BGcGFOIzFVeWwqLzlRaEF1LFlFO15rS0h6bDEoaG1oMGJxRjl+Xig8VX5rNVdpIT8oPEZaTXVEOXM8Q2hUPkdzez1dITo9OE9bazN5cGVMIk59JC9dRjNFQHgwWVhRRE1zZXNLZUtPeFlHK2QmaVVlKD89a3svPVBQPixaU00uckpjU1AwLjdVc3g+eEEmdysqOShWMG0hL10l'@;
put 'SD1kJERdbig3PyYhL1tIUSliREkicihwL3VOc1d6ZS9Ga0VAKCM/a19vOCQoSm14WSYkcmVjUH0sfXxkV3p1TCp3QGp6ODRsSU5kP0hpNH0qZ1ZpMD5iOnNpNj5saSRkL24mMWgwU0NFVnpPeT4lYk9IZGR4NU1PWjwuejU7dk5WK10vaDhhd1pKKyk9JURdfkVjY2QsN3BrZU88N2JZajluc1Vg'@;
put 'XjRRJEpiYEhle2UiO3c/ZkwoekhzTjowSmBWWG02P0M7P0lyekRWRGQ+QFs5RFl4NEB0TXxoLH5AZUhYX2NnQFJNUD9EeyZ5WGxUXWNvNFpqPyRAK21pZXMhanJGZk1VSXVmSHxpWlBoZWgoQEJpPmp8PmYuZE0hfnBGIzBSfndmflF2N15xP14xZi5GbjlacnRVPFN2aT5bRWFNMj99ZCVNOmVu'@;
put 'O1N4YERnYT9YfTM8PWxtYE9RZ0NPOW13d2w2e113LzExSDpLdigsTnZib0xQNWdjQ0xFQlJmbmJiUEBjKmRXdCowVzBoKkFCKjU3WGZCT1VVcWlLaVlVY1FzOVh6QkZYMChgeEpJJkMqNXY3dGN7KSRBSFUiRkZ0NHd+NzlQKSJdVntHfihtTFA1ZnYhKzQrbUVwcCZOQGM7THpMQ0NSbmxKUUdr'@;
put 'SFU2Lmh0dUJNaF5qU1hLRk9ZZipnNWQrOmxpQ2Q0Um9uQGMrOi9GZVpmZGJlQTx+TEhhcis3XyxHekIrbk10NHdmSjBLNG9vT2JELEIieUU2V0BxX3d3PEUybklCVUhyKy5bcFZ4WCRIUGQqZGJPWGUsREpHP2lPRyo1djdaRHhXYyk6KHtSfExQNUE4IUNib3BucDQzYzZGMWNBZVpCKUxSQ15I'@;
put 'cHZ+V2NZR2QwUVlAclVRP19YN35+ZjQwNiZGZCw5JG1obX1FJXdwPE15QTV3UHJPVFRBUEAhTygmYUIxaiFjeVpHa2tjY21ISEEvSmBpTCRFQE9kOkE6N3Z7aXpJZWdiM0wvSjU3RXdeYE8wXkY/QnJuUHZ7dVo0OEYxY2RYXzAyUi9GR0NfaDlGSXpvNCU8VlJ7Q0tNVGoiQ3x9RTZzdXtRYFhP'@;
put 'MHUweVdTT3V4ZU9hU3xMakdnbTZhY3Y0KF1OWSlGR3N3UVcjZnRCNTI6JkNQVXd9T195e0csJkFZU0opOjJZImRYR1FBRHRYTDpDZUdvTzMvJl8va3g3Und5USVxWG05UyJ5RTZqKk1oa1NJdTthX1grTWp6U0tFdXgoTiZxRnRaOVhGQklDYj96KClISUJVSEB2RCkjW0dCKXUlNF92OiZnWW9Z'@;
put 'VV8uREY4UFZec0k4RV0sLGY8MGVCSFI/OH0yX2J2VmZjSTRDLkMoQXg2b0hob307USEsbmFLdGE3ITZYPV0hOHZTKWgodjQ6fGYkR1U9fnxgfTNxZF07NCopNkpVUil8QkI2NDg/fld6Wl80eGRPPGtJV3hdcU46QzNbY3dDMWNkMGBQNjZ3YlliQS9XY05mc2EpVjRePU83TT5ecSNdJm1Danxv'@;
put 'eUdKJipbPHxJZntdZkhrIy9xWGJEPiU0dl9jSmlQUlRzMXVdfmxGaXxaTkAvRVciWSVzOz1aRFpALHU7ZjE7dHVgOFFzVStqOHNhe2ZwJVJ5IWJ9bnQkcjh8JWUmbG96bXtfaDh2KnlpPjlUYHI+JUhKYz9sT15Ma3I5MWZKVyhwSG93P0c5azVjXXA4bHtgO2lMSXBGbTl4RklUWiM5I2NnXmJb'@;
put 'R3MzdypFcG8mJGxLL2JXPCpbb1leaVh7c0NzdSIlYCg8WkZSd0lOOG59I31KWFByZ0wmSDNvNGdeTXdJYkt3PDkyPVN3bWIsTzNVTEwrbC40ejBDNXIyWDE0WXs6WkchMTtRP1tDRyNQbT1dUVswbzloKW46Zl95WSR7eS4/fWM3Ui8uSSkwfUhLO0RvUH05dXMraTBLfkAlbiNZWz9NcFYlKywr'@;
put 'REtCPTFweWJ6KiZNIUlkUm49fCh8clpnWkliO0Y5OnwzMS4lSHVGPXlqWmdQTU4oaEsidXM/V0N7OmQ9T14oXTg0MSxlZ0VmcU95UEQ2SyY7Tyh1aW15fG1YNltLOkJuLzRJXjMvZCMjdnQwcngybUYkYGR1SCQoPG8oTW08NVlZR0g8PlFjX1trZkliakZzNl9WJEcmWHtJNGI3MzUuSktPNT9a'@;
put 'ZDVUMVRVeWN2aVtGZ2lFPCRAOUJtPGlTTzFVYFVHJEglfDY6RCtxR3JgcCRRMSVQUXQlc3tXT0QkRWBpZilAbj4/RkN4fW1LPyYzVylFeSxjJnVAclJbO3pOLyQobSs0dGl8QzooMk9gcXsjZFFRPFd0VlRqY1c/OFEickxyZEVnUUtlNmNxJlMwWFAuUiZIMkgsUTs7YnZZbmtCSCQ2V1d5Z1Y8'@;
put 'Lm8kN2p8VjM5Q19CRVc5JiZJJG5mRztXV2xTMCQ6XmNOP2cmPyYvOHAkW1ZJLns/UGJsXUBWS31LQF5CKF97P0pXNkQ0O2VTPlR7OiQ0TU06IiVCcHwiJlUyMmp3dFFYYXI/TTh8VTteKGtbTGVqfnwxaVVpLFo/VHtidklnZCQ1YCpsbTpwQzZwYGduKmZFNVgoZkJ7JmRUKFVwclc4PGE0JFMy'@;
put 'SiRER21jM2tWSm8hfl5XMV06MmlmaT98aCp3KEluNVJ6T1A9dW1OcXhbTlsqVkRoYk4hJFkhczVvNyhbdkNGU2RpUiMoXWJ2Zi5pKWNeQCQlQm1KY2RQLG4rQ15MOSU7JWo7aytaTnoobjIwJHUjXS9rK1NzP2JyRWpXNl4oeHxacFpiVnlxNSRkNU4sYEFtZHZeIT10TSlBMn1EYWI+Xy5KXXsj'@;
put 'Rj9yeXY2bEY5KTAuNkdSR2NRSlYsOzpidj9mdDFSayxBTXx9Tl9VKFhafjF3MyxvYTU+aFVfM1IzSCxIMFM/YEd1c2VeeWYieko2fikjUXYxXXQ0Mzd2X1lGaSFmZUN+VGVmKVl4NCo4I1F+TiJ2SVRHbC9bRWMySWZ2bmBMQCR4IlZEMjFoR0MrVnssZE8/VCNRRVRHYD5IVCpyXjF9MXY3S1c1'@;
put 'ZHkhc05yLnlzJnBMK0d9JT5gbkJEMjxRIkNCRWY7SWsvN1BXSS4sSGhNY2QrfEF1MDdSLml1Rnx5MjkmdVt4ITIvPDk+a10pQ1MxVHZRPFZmOkxuSWY8eDNyRG1rXWoxdUdaVi9nNmhfQWNXTClzT2dUNjZSTD5kKD89dz5uM0tocUomKX17SFlWeWF4aVU7dll5eClKMTBedTNQcm8vdSEhI3pN'@;
put 'antMIzxWQXg8VkFWbmFqYjxLfnAxbD41Xk5TW1N+P1BSITFYNkA7ZE11VTcqKV0lSlFIfiF5O1VUcUVmKj8sYl8hLFtAfD1kSls/el1gV2gjXkQ1XXdjRUtQLChlJVF0MWJBbFM1eW4jYlNVQyRCWyE4QiRKR0dRQjh2IV8yUGAmWWJoMDo2Ymk7aUArUUIhSmE8cEBQQigyQyUqSytyXkxuYVAr'@;
put 'Sj4hL0JTKEJANmhdd3thU1ksejIkd3Q/cGZCcDkqYCh9K190eEB3ZSpjWyouKHRQVH5TNUR8dDhTT0MpS1cyTVBtKWFQYSpmTHJGZC5EUmZEJnRQS0IlbGg8KWQsUGxRZUh6QzRBT0Rvb1l2WC94KEAwISViUSMmSGs3JWlPZjtBJjMzPCkiUytPPyFyJjpuJV49c1lgLEJEJGl4OHVsPT0rcWE4'@;
put 'L2V5cz9AQEhSbzNGRjIsVEZUcG5FY2oiN0xOVV1ENCl8cSVIXSZhNiliL18jYD1SUmsyeVIpUVY9cnE9LClKKUV1aVk6emB8W2tzYDBKKkJQTSZqIj17aE1ZMFRlSSxtO2g1JEp2XVg7UGVgaGNOQzwiO2EoWzF0aWpBfW0mcCt3MXgrV2cyTkk8bzxgKlhoXnJVWjhCfE5PK2s7V3YwL18/U2Fm'@;
put 'fFUjcFd5aTU6YEJ2Zj1FLjl6VHlgPXk3UW9ZR3YxSGR9dlRHUWw3NWdRNjgzUjA2Y3JsUnlZcHYuV2xlNF04cDp0K1N9c15bVWgkOTl6cTwwdDBTfXM6VTZqfjs8a0svN09PNnwpRURzL1R9UVoxZEMxUSY9SXZZbU1IO0skXWNvNDx0UFlqPTgpU25WYj1jPT9aPj4lOmpWKHxnS18+czgwLGh1'@;
put 'OHc5e3xbY11rUzFyR3NGVmgrRnRTZEZKYFZVIypjNUNLZE1+UnxBU0IxPjQsYyZqQjxDKHolTmIrPU08Vl98UVFhPyFZRHZFMzc4Knk4SG1JVFFxdXBHK3xSZ2JqLHMiNmo+T1J0cmgmVWEpeWtVV1hhfDlzdyo1W3toaktBTz94N1NdRiZMMWtzdTkoPU9RIilsQjFwPHZ+e0pPY3FxW0NyaHBM'@;
put 'dHVsQVNCSlhAVnw3SDRFJHZCQlheZFlIN3RdOVdYPSw4anJSQ0hGPllPWiNyTW5aazMhIX5pNlt4bCZUNS5YNzFiWDtbN1gsVW1UOi9tJGs3WDJhNCZ4JEZnWTZNKngsdEw2VlZoVUopVSU1SERhX3R2Z1NhT1ZmJShDdXl7KDpwblEyKl8jZHFHPihjYTxyelg4QCVfJXlnPlYlSV9SRzIxeGxl'@;
put 'PD9yNnYiYGl5Uko9Y282cWBYNkJSNXc7emxsOG01NT8vcSxjITo1TERyaHtMPU1sNnF4YVUkNCJ5JVtOSmFDJHdBX0wkTWpbQHdQeCVabEtIOGBSZzU+YzlnNElFe2w/ZWBAOUs1XU5JOSxOUlV+OUBYPWVfIm8sKTB9TVMlXkI7M2RLR21XUD8/Tk9eLHF7KDMsKGNSbiM5PSwoS2RHdkN1ME5+'@;
put 'Q0pzPE89JWxaKTNZXmdBYSIxWSM0U2pLbnF5eyNrSlpdTmEvaWV9PTZsIWRxISpFQEVzYix7aipyWzwjanJLOCt7U2UsZS8wJjp+aHhnKmg8IUhbTmEoZntaYSxPaGg4c0A1ZEFkU2ImTjpHeSx0Q21mPixwOEJpWUIoYXs0IVdDbURAPSxecmR2WEJyMW9Zd0kpTGw/UkxpMlBVfEdGbFBmRHhJ'@;
put 'Rl4xb08qbURGWDUjKyJJOXwqUGVMZCglUzNVWEA/VFhiKWN6SW50NDRoLzxgN1E9TXRkLzhmOHRJaUMoQnxNMyZuL0QzT09kOzJxXk43aU5vTDZzWTZlOEJxanpTV2Q0QGYqaWpiZVBOZDtyNWtbKV58VEEpLFJYPUBKMV5SUTckOTgiMDJ3O3V7aWcxZ2ZidlBeVFo6R2E8ZyhsMiYkMUt9bj9o'@;
put 'RVIidik2cj9iUG90UVhvbjtVbU0pKEo/dGNvMFtiSn5yYWZIcjNCVUA5OCglXzt8T1huJE4+cTcjXk5afms/KUFtW0AiNCNaaHlnMHIpP3YpTnIrOyIybGBpKU1BbCtsVDdCNm5EIjYiSDx3fk9DbH43KGVRWXxKYSpoKXg7P3p7fVRoOG1Eej10flojdTFQIjtyLDJeWlVyNzprISF5Nlo3cTB0'@;
put 'bDpARGIudklGZEhDNEliYSpeInMyRnUwNGouIjE9TVRXXkJxNWYuaXpSKE9lRXcqdSV3Jmo6eXVxRGJSSE97ejxFLi5XLDV9dWZIcEg1SDZLajk/RDYwelRPMyJWPXViLyJWNXAsUHBzNEU0OmovNWxoJCRUNVs3cmJWJm51XyFSQ0UpL34wRXIkOH1sUUlDYnhuSSpuL3UlIXt8ITZySFt4aShL'@;
put 'RVFlT3RkQFBhVWspUC5zRip1I3drSDczeDdxdCg3YVk1Vz9kWyJ8VzdaTy5NLi9wKXpEVEkjPlVTMVI+anIhKXh4cXtiVSRiU0B7W24hZHp8MmgpYylFTXpDTFlWYUNte1EkRjdkalMqdWsxKSpoTDlHW21lMjViSVlXS1dEIlksVX1MOFFkWXYvWDFMdi5DRE9VVSZOfjEuZExOdUVYTip8Rnl5'@;
put 'USIzZ2ZUTjU3ZSFBO1NkUFlFPHVdMjcldF83M2wjVX13Jk1ebyg3WGhUbH13IilJbWhIMGJXSFhOKzA7b0FTUjxCaThFLzhMdkVmSCsmL308UnUqcVFKNEdPRm9HfUVYPU41WFJnWypMS0Vjejp+T0N0UzNfLnxnQDc4JCprJkNpVnYvPHlROXNlZUUpeHAvOjs1QnZfXiZNOm12fVIkQm4xeWZi'@;
put 'OG1qYmxpcEUyI1o8L20yJTxRc1l3d2dWOXp4RG8oblhZTCNMeHFBVXNzbmB9P0Z+XWxBVSlnSU9BQD5zaTE1WzZocnRzMnBnK3Nda3EsImc9RG99O19mLyVNWCFHeWo3RFh4N2pWQFYueCN3c2lQNn1PdExNeWF3WXZ0VDtkKkY/Lm0lPTQ/TXREXUA+WHxWRzhDWzw5XXQ6NHc/TFYmPD1ARVUj'@;
put 'ZCF5UDw7R31QUWYhbSl8YnZATCxOcmJfLjtwbjJILiVgIzFfL01neyZlPUFgeWBLKDJCYWY6I29vZVMrYzlyMjhsWD1bTmdkLmJiflMsZClpZ0JILkAseHlVM2UjQEcra1lIfUVaU0tlJlckXyFYMFZgKX5JM19iZ2BnZzBVVyhwSTMsfDsjTiZIW2ZvZytGS1cofUc3M04zS1BoTERrcXNZSGRG'@;
put 'ZVtKOjVyb3UpaURtVz40OnhUZlBsKmp8Jip8empSS1shZnJTMCRVZFokKFAkai4wR1skKkNlRzV1NHBZbDZpUzkjOSo8SUltTG9GKV1rMlhZPD03QChjXns+ZjhnKVJpbywlaitwPjZsSDpLQCk1QyxTezlhfD9NXlA1W1JieWBwUT5yUVJbJT4hZnNWSH4hWnBuK20jTl1IPUNeJn05LmZ2RGBC'@;
put 'JVhWTWhoMkZ7bi9XUzdFe1ZdenQlbWxNNlFbKWcleUlOXVs9WmNSOypVeyIval0kKm4vZzJJLkRAW1pnMk15bS94ek5bWSVtbGtTPHhTMEQjOTdZVXxQRixbOWZkNVNxZW0vfnxlZGU7XkNPJWM1K25Yd2Z4SEY9M2tINSFNK2N3d1NuXTo6Z0sjYCVwNHM3R2A6JWp2dHg1L2F4PmZ3R3pDbXlZ'@;
put 'SUo1fSVjekdsRGZgMk8vJjc7JEhIYklVMXhZbTY+OUVzdGFVfS43S1F0bjowMTtRV3VmcThqdEpEPiVuKFcoRVJ1NjY+Ui94OWp1MWZqQHc0STV4WUVrYm4lcCxFRDd3UFZrL2dSamBSRStWOWZ5JGx8QVJjSTlrP0w7QixKXkZWPFAyZFlaZVchLmswITdTVzdWIWY7aStxZVNXQXhFeX1xL1J2'@;
put 'fWVmKE1bcVBLJSNYfS9FLHE1Yzo7QmlLS1k0MXdfO1VGW1AiMGV4R0Awe2tXQGc8Mi9jOzpyYXhoYVc6S3xhUSUkcV9ed0M8PVZSZEMyUGxsM3dNcEpsb1hEaVJyK2lBdXBYbVN1P3dhYVBORUBab0pQNSVFSHo3Lz5ZZSZVZFtuaEMkOHNQe1lMZz9jTGRvSkQ6QVBQOVhjWFpYOzk/cFlkNkM7'@;
put 'OT9QMDM5bk97Vj9jbzJ1PCEqe1kqTX04eGB2SyZjaFcueyhMUUFyb3kqQCp2b1hTMyRTdUxxRFBCK3ojMHVXfmA6OlFfb0clZWh5aVQkYzRbSEs7NC9PIkc5KE1wcmdKU1NtJGhLXUxTWzomOSNqeDhDSTplYXlXVmdgZzBtR3ZhYT09cF5fZ1MmdjUhT2dZcGVLMSkqNkp2Q2sqUVQ8cUJ9JlEi'@;
put 'MzRsN258fVM3Yzl1fl1DZUgweC5DRTxtcT8oZipBZDNHR3ZQKig4cVhlZyRISlc9UFZVNEd1O0xOKG4wJm9Oa0hZI2NZTzp7XmY4LiFfR2lldVRtcD5VQGo5RnBje1QqRC4hYD0pSX59OTVjUC8yfjdaMihucEIoTmY9L0ZmZW4rPzgjKXJvUDZ2fUZ8JG83OEZLWmFCXiZOUDxtMyhjaXQqL2Ap'@;
put 'VCZxVSNmUVNpbXErTDdtM2o7MFUzVSZfc2lzdDQhRVU4KDZHW3VLPnclKy8xaWwxI1tJP3wlRHZxMFg6TGw5RXBZMj9nKk5ZemxBZTJ1cXh6WVt1TTlhRDZLVzFRVntRZzxfM1tGdXQkTiYvXyhXNS5BKikuYzxlaHozXVFEK3tqckZtUCQkWUpLOF02QEtJX31IeEIhd08lVX1hIXI3RnV3NUcw'@;
put 'enVKYG9jUVUxNEJCQHRmaHVITVhTR2gleTgwRUUpYjZLdVtsJTs/aiVHMj9Qdk5tKDlKb3IjSEwlfW03aDxtdDFtSD0pTTAxYTNDUDh+UTUsTypOZHZvZEteTmBAeEJLaj89IVpOaGdbUHhTPmVaPSY9eVEmR3lrYVkmJUx6cUtGWHtydDlFYDBsI1FzNCxZNWptTXplPiVTeEp8OkA3amxTSWk5'@;
put 'Vzgrd2oveHoqWzhkLGJKYHpqUjglXyI0NiEzL11nZGY4eWRleGMobW4wV2FsNWZmQE04NENUS2h1Uz4sYWleej92Szc8VltAUzYqbkxxNFFpL2dFMG8qSnUybHBUcEw/akBhKEt5PndERjN7MzRISnIlP1RlZnQ5PVB4c3BsTnhUNWxKVFI9R21ZW3V0aF9BM2BmaWVHM1dJaThwLlFdTnlxZ0s7'@;
put 'SmpHXkxwekNlZ0o9UD1rPyVHTSEjYmRkbyw9VDpEKyR3SzVFZktiYzcxP2FCazl6dnFhUWJUcmpHN3ZkRzczPjBsTHZOLCx+KSExc0ZtXV45SDJpPlM8Vio2eFVMO1lSJlAkUWBBdkpgNktgKUJZIlNjUk1iKSRpcWRHaGtOblZnJWE/NiszflV7VChnO0gzUWw+fnJga0xTL2ppPDg0aDFmeGFK'@;
put 'OS56eXdxLixxbCFMbTF9YEImWCM6KXZSPU9zIjEubF1XS3ApPmliMHw7XUUxI281QHJDMjw6MUJ0TWpNJlo4N0lAJG91NlV7KylAQFJ5Z0daVnomMFlJNDtBfEc0aDFHODd8elgxWH1VdF80OjlbfTB5SmB0TmFNYjYyQDEsfjV8bzsoMCx+NVg1Iyt+TEJvLygvQml8a1NmZlo9I2t8PmVJV01B'@;
put 'R012Wkc1fi5iPCVocFtAPSJgQChnWWpnaH13T012L2l5aTFfKVNOfVJWMSVQcyp7YEplbVVkNlgjMTUweHNtSDhNPTBtREkxbVoxKFlDLFUzbVo7VSlZJSs0ZyJTajw/KSxORG92elFJIllLVUh6Xyk/RzQ3WURqaWJkXkdBKzs9UCViNmRZbXFKS0xofUBsYkxWWFdWcHl7ZWxCL1tSV1U6a3xb'@;
put 'XnY1bD5fSTQ3IVopNzg1ej15SWpwdk5FbWl3eWJkaXdXWlV4Xyw0UUBNa2M4VzhQOGR9WCJydD9tR21OflhSenUvfCxyby5JdmUsLDxZajBJamtlVGRiUnFpPURTODRscyQ9PVhaNk9bKDtASSUyU0giJWYuRyJZZTNKOEBeVVUkbHVfJXFYVkJ5fk0hP2h5WjxvTGYyTFZHeUIrTl5HTTQ2UVdS'@;
put 'K1k8KUI7Ykd5cG97W3hsbjVkSFpaIixdPVYzPFAxLDNZcmFsdD9yPFdQYHJwZWYhL2NoOn0iRGElTkNnbCJRIixCQG1ILHUzNm1vTEtnbG41JTElS0Z2fnZNSDNZO2s8SXcvbiJ7K2dLM2RmTGY5V3ZdMFE4RHdRYlNobTdSNyJmV1VbZCxdeCNFQzBvTH5XQlo7dmxMPEBrSUVvWT5YTzw4Z25v'@;
put 'ZXpbRSZ1Xm5WN1NkRSZTbl0zZEpGJnx6LEZ1QzN8alh5cVYsYU1ZUj9nY0dReEx0bDh8ZHFPQmxZWFNbTzcqcl05P3FqNXNbWVJtKmRFLkQ5ez0hP1VIISklPE83YyhTNGdeOkR1OzFLNUEqRy9demhBTy9VOnoyNmNfbzNCNmA7fHJEbXdgZVBlNHU0P2w8TWxxUlkuaSpGd01JbltBakp+cWAv'@;
put 'RWNsY1FLOjAsVUBjTjArUWlPfmFNe2YhUVs6XjMoVkopfGR3ZEY2W2wlfTAhQ3cuTmkpfTpLfEV7QSwxbF8zZnZNIVsufjJzUnp7K2FlJWpPdlBfUy9TIXVBRltBJURYWFgpRi52PWxvX3s1WFNtbztYdjYvZE5aKSM8PmJBSkU2RDJ8ZTx3cjVoe0RiXihyfmlKdlEiXjN2OjY+OUBDN2hjUE1M'@;
put 'Ki5TZWouOHsqakwkW3g5akViM21Nb0BxQltMallmPlN6QU1iK3xQdkNsQmwxIiRmOG02KXRTeXg5Pz9gRVMyMyRjbiFVYW9aUXgwWDA+NXtLcDExcyZkbV06PklPdmdPb0NdTTU5fClaTVFrTWl7LkNPO31DU3sibGNyaXhKZmokRT5pT3Q7ZiUqbi9qYGNsb2sve09DIldrb1k1QypBMEZebEV7'@;
put 'dlteMTxfVmZhe3ZHOWNQcm1peG87PypPIU11ODN4a3FASGZ8elp2T1ZhZFtRKytaJUV1aC9fQTZrIWkiR1RwNGdIWCNrTDpxRUw6IWo8MG1vOiNDI3ErUlREYWljTl9hRytYLlk9W20qNDZRb1EhKjN9VzojcUM5KSFrL1tLSn11RilwZ0tdcVVDRSkvV1BFRXF+MzFgbDkpYG9bMHJ6Qj1SK2lK'@;
put 'fVk0K2JSUktdWDtudihsUlFgfillN14sOlh7IWRud3U4ZWdkbzJPUnVWVTN5aSJHI1Z8eHl3IjV9Pnl6KUlOWzUlUGNCbVIhVkQ5Nyw1VG5uKzcsP2h8dFtScFJmSz5ASUdAaCU/Q1A1WHNgVDI6MVU7LEVRIyM0Xmd5JGUqYlpiMDYvVTFOPDYvdiZmMTt5ZiQlamBvekdWfSlrXUZZPzBoa3w6'@;
put 'T1FlXWBnIzx+c21dIypOflg3d01NX3ZgcztyUDAkZCVCI0JYJTZXKC9VYFBkLGgxeTRrVkt+XVYlQGkheUkoLF11OSxSVjh+OVB9WUQ3JDUmaHtTI3ssSSE6QVR+aCwuKHdocTl6dypTLz5KfVBzQlBiO1IxcHAxKFBjcyltPH5AVDUvRiNbLkdEWiRXV0VqNWRpWSh9L0o1Y0BdeDh1QEB3aSp0'@;
put 'Ul4kXiV3Zk1NaCVpcXMsdjZPIypMLFkpVXB3fHhpOGAvOUtNe2RTWk1TZHlXaztpe3U1cnxXeyFhXnEhPWBMLnBAQC9MbUJ6LF9RWXV1Sk1VOk48UUtVfHNgTUREejJNaHRFUFlFZGcoUnwpa0lxdTtKemBydzxGZV9nZHxecyR2SWlMYHwlX3l3VHRzT2RdPygwZWM1PjpuaSJGKy5aRz4zSFF7'@;
put 'NV95b3U1JThtejEjYj1gJmpjUFd0Jlt2aHw/SWZtbGMhNy9eMHUxciVYKGA2fGIxZ0tTbWlDWDZmPlojRmlkR1h5M190USkudUl0WSlEfl06en5ITngxLk8iNCVHfnh3UF9BOyRQfT5IUzA/djldQWYyUm5SKENCVCElJTNeNX19RjcyOTdXLDE0OixLRHVBKUAiXkwrKjFwSD5YKGhldk1LbWZw'@;
put 'QkhCSE1HO0ljWS8mYmY1aDZRPlYrZEpoTG5lL2xRcG0zaUVTWWIuOiRJZG5XTjZbR2p6WD9jKGdKeml2c3I/YE9FSjhKalkvfnxrcmsocHQoN2gqRmpoL2JmN0JAZEp6anY8cHImWFg4JUUkL3dyYFZnIlc1cng3aiNjSXclL2oxXj15WWNVcX5udCZGdkpgNE1FeWhYWGZ8WUVYWGZuITJNJXJa'@;
put 'RDFyPWBTRTNdeWdwLGR2SjhpWX1AMyRmVXh6LzAyK3I1RipkeGgpfDFwPCthLDxzc1ZNIVspOzhqVW9mal5EZzVPImZtW3JPNWdTbCpvbWh8S3VhL2tbSWIydmlXKEVrLDdQLENFTjlbU1BFRTRQVnJSKWMkW0JBbToxMXpfbk1FKCZRYkJrRUl4KVpYQWFCTiJ1N0hbMGkhMzFnKyZyKkYwOCs3'@;
put 'MSxMYCQ1NSpPcy5zZHB4XSQhRkBZemNrWChvJnU+N2BMOmp0SiZiak0/a3sleSZRPTtyWnlCXUVYal9bamojKVphL0xqRDU0Y3p9dStDRGRFTkMkP3F+TWIwQDwxUUc8Z1I4d1ozIS5PQl9gMGEvTF9jS1oobVQqMk9hd19nU2dPTUV8P0c8TjpVMVM4MXw0ZzVtTCx2fERAZH4wbSQwe3hfb3J1'@;
put 'aSI4bnRuJTw4JExQV012NnNzUk5LNytgeTZGKyRyaXRJYUM7K3RgSSxZL01sTV9XZGF+YmNGdWgvNDVeNSNyNF1ocU9OIXVAOyE5Zj80fHFaKlRoJWJqWD5JQiJHfVFraEJKWDVNUnxgWnZYL1laa3MlZDJ1T21SRkB1TmkqUyxvTENxNDpCSkVuLERwWSwkTTVjMGQmTjtMOmsqSnROPzFNRGky'@;
put 'Qy4iUURISGt0SXlDQyV7cnUpe2B8IT83bCNdJkc/QnJVYyU/PUVbSVR1XVYraW4pY3xLT2cuc291X0w2LERDbVEuOT9JLHklXVB8JlBIazZGUjgjK3FZMkkxQWlxcFlEfmsvWFJicmxNO110Plt9KW83UDRRLkpiSSY6fFhsSjd7WmhiPWs1Lz42SGtyaDtVZVUhTTVCcmtsZX1YNjxUWWsySHt4'@;
put 'L1A5dCMlWntnQWFPc2UzN3pVOEdQWDluK0Z2aj8+TXBlOD9dUDIqSWJaRC4/X00sXnhVbiYpNH1xYE05I0lfSiF0X3tQMXg+fTB9S21QRDBZM0c1fGM5ODdvaitMbyMyIXdHfShmTGxIMDgmaSpmSiRre0xnQkxAeTVJImsoSz97MEZrV2l7RElOS2J7WWYhRjk5el9vTyxAJEp1OlR0flpsc24r'@;
put 'K015cSQhVCViTFJhTFs5NE5bWEQ3M3c+VHxIfC8sOFR8Lylue3djfUJNPzt7M2AwN0IxUyFIPXBMRWJAJDYmck15KDh9ZXV1SiFeTmclMCE3LnFecGREYDxxXkwpMWk1XmAocDM3K30jV1pmaCV4fFpKPWVISTs+Tlp3RGJdImVPV1ZEb0loY0t2c11YYkJvQnQ8Q2YwTTFrSEJURCsmWGY8e0tW'@;
put 'TWYwPV1lITFCQ05BK29vUVZ3Li5SOykuWDRXKDdfci82IiopVT4zRjNUXzA5ZUFvdU17TUY7SnJQNyV7ckYqSXV4RmpmdkZAcWQlS0VBJEtwdWlLMSEiKV9fKH14KixnYT5hJl8+Nm1wLGElbiVuT2k1dmVyQUU7JXxeQyYyM3x5dDE4dE44eUQ3Uy9YfGg5dkNQdjJuWSwsKz5sP2A0SCwvTztM'@;
put 'KXN6M1hZPzxdQihncTYiTUIudjY4PUtVLl0rZmtnZE1bJC4mMFVEWmVAbHB+TmAuV0JfMzdWNjM5U3Axcj9oYl5KNFFRaTclZ3FOL3Iud3A7UCsqJjs3QGlPTnhVeyQ3OyFZNV4hVH1EcV00Ji52Z0lYeDMyRj85Pih9dCp8YlleWGs2Z3E/JHRGM1V5ayVUciZ4c2dRMUpGOSN0VjhkWC9ld0Y7'@;
put 'ZHpEcExmP2pScm9HW28/bzkpX2R9MHMzYyw7bUw6aElFQHJMX0pJUGE1KEpGSkMvLGhSWUZyXjRddl06M2JjdjM8V34rVDt+azE5flc8aSU1aFtxIUNlXjRHTiUuVEA9cXdnJWk6OksuPjc/aksvPzliOkZgaCNBS21FS1hiOHVnVS92aDI2VGkuWU5vXTRQaC5BfnFdQmR0a3AsTzdtdmI1Oi5a'@;
put 'KTh7Zyx0fGZNUGw1ZU19MSJiOSRSIXRVUjtNI3IyJWVdOHxAWiVWbGFrJEtQLk0uR11DMltUVU9bSjNfNFE4dztYITxraW8kW3lgV0tZRGZ9TE5VRWI9ZGouJF9mR0kweFYveUxybnQ2YmRpc3lgV288eGdwKWhxM0tKVXx1U11qXShEZTQ4d2R9byRVWGJybiMoLjB9ci98SiVQan0zQyh5SEpp'@;
put 'K34pNCNifXpOfG15LysoRVNgZkxOSz46JTtlKHR8QnM/IjRCPGEsOXBHdE9ncUIoZVYjYndvOGFyc3h9OVYxKHxxZlhDJGkpbkxQbzpQLCxCd3JUJXEyU11TTWhsaE0yaW8/MlY4JUpsU1JFaUhuJEhyfGxRMz9eI1FpVlpnUkJAd0d7Sz1QQW9LOSxlbGxCeX5xI0dWKG0wR1JCQFRGPGxCeW1I'@;
put 'cWBdbkFePls5TzpVQVV2RyxDP0hjUUh1TEN7MENTcG94SX5XQz5pdTNqbnUoLG8zcF9BXjQjPSkuYDxrc1kqdWVtbSUye0ppYVhBdSlfMkxPPltASDtYV31ITHt0XVl0JS5jdWZeXzpoNnJPWHtBZXdTO1NbaFA5YWkkTEZkI2AieV40b15wW2JgSjB5S302L0QqblpdYmA6aHx5dHdDd285Kkxu'@;
put 'WHxpeTFsUVIrLF5AemxFWWVhd2psckBsQ1ohUipkRD50LkQoQlA8PnR6XWRoK1oqJHtjWnNaRUs7dFVJR3gyQX0ka1NWYHApc0lAeXUxU289NSRZdTl1RihSMjJFW2BYMCFvLC4mYFBLb2VUKUFddFIuR301aiQsYChgZXtFbU15WSVIWlheZzpEYHc2UXl2fW87NW9HeSNFUzhmOFBte0Uvajlp'@;
put 'PmdgXSw1YCRmPFVlK2FrL3o7ellNeXZNWGIjY1JjSytlcnF4M1tlMTYiZH0+Mit7P1B1cEdibXdbfl4zSDlwPkBbO0gxOTJdPDRXTUBDYkdUZ2k4aSsvVmZYZmkjeUY1VTVzPFdsIXA1JDM7aGQ2OkhsakprWCt2fV5kYGtOQixVKF8zV1MiZ31dUjU2eGZOTnNeZXNMJC5oLCRPeEc5OSwxdVVs'@;
put 'dT8lYEYvNVg+Mnd1elZFcVEvIlNme1F3fVtgOklHWHRtbD0xbHJNMnxxc1V9K3U+dH5WaWUqRTNFc3U0JF9WfFZQZz1GS2VednlENUI3Q1UsLGhETGxRMXU8SDYhT15mPD0+InRkfVsqfSx0IWt4KkxOJUNZd3lETDVMUk1SVjxGQWlPPiJXP1QxdlNbeUZGSDt0RHYodmpYJkZGUXJIcz9zP2sp'@;
put 'LGhQWnNFS0ltMEFmd3lKWkRDTU0zcmJ9ZXtzYyJ0MntfLC9qdjlRXl85JllZNFNYNGIveTQ0amQ5QlBjeiordjZddXs1TmA5R1R2SFVaWW4+S0woVCFzX01QbzRKViYobEJyTVZ2NDpKbzkpUU9aRn1FY0U5dERSTkZSO3pIN2QqR3E5Y21tI3paV05UPDJFdWhwSmslPHVrL05vaV5mU1VBV0JJ'@;
put 'ZFVRQUVVTHBWfCgxOThCfmRhcDgvX21wKTdmOUgkMTpZYmlxVXEqKUcmKWJOV1NeXW9WeWg+a3l7d0l7Q3FGbFVoc21PYk1rc0FER2xaUUk2WDZPKj1IeDQlcjFFensmIXQmSFJfMEkmejprTXFgai5HTCgoJWJ9Oj9QfCZnJiRrU2BVWEx1W1I4azw2L0NEbG8mZWUoVjdjeDdFbHZ0MGpQI0Bz'@;
put 'dnJiNUA6In09fj1+NkNRYixDUSVYaGghWGhTMyttdiYrN1IsRHtnQ318MFlGOig3YExSRHlmcykreWZhPXhIVEJGZ3NQeHdHWEJaSW1baUdYQlJRInVtIy5MNXFZT1VMYjVGZEw2YGYxdGMwM0ZpSEVdfjY7WzU6clZobDw2V00lbmJTeVlLb283ekRfNiM1ZDdeQVdCV0JmMnUwalZeQl15Il9E'@;
put 'R011KUx9T3BCaTFvR3tSPk88a2RzbU9jTVJWWVFkbGlMUzJVVUtHMjpOSGQjPkNOcCluKW4rSzRraUZhXXM/cz8iOk1eaz1ddCZ0YHZJbG80VlhWL01eaz04TGF0US97JjJTLlJlOlFobW9YMk1IQmt3MWwyUC5Aa1BkQEp9RTw/TzElTV1DfURCTlJWezJwbyhZY3NHTDN6PW1XfHVLeVZ3TnZe'@;
put 'KHdrcmU2NkZmL1VtUkFzP1B5R3UrLzUmeTtiSU9SUnM6ZTVjfDE3UCpDWlpkN0lNaGorOXRyaEtsb0QkdixFeyhmXVtnPmcpPm1eRXNjNDZYITh6WGQrVHYlNCZvQmtMLC9EJjlsW0JjQyV0MTs7cztgcChjQH0mTXE7PCxDXmw+SUgmVF0icWxeY2crXS9hVXtxa0BmYS9ySCFlL2UjRT9wPWU+'@;
put 'UiFiPVA1O20odmBPcjV9byZmYWJYI1VlOlFTQV4wO2Q+cmxKcSQ/alArMnE+WTpdWHIwd05ZLntdOkNZKnR9Ql5vOXU3aFFwK2MvMipMYXZpdktgbSV9VUR3ZSRnZykwOUhIMEJRbmU6UWhxbGRPWTpRaERoMF0mfFFoJEttS3lzYU4zUHN6OzlLbGZuak0mOCVyQFViUikhSHxAZD99fDhuNSol'@;
put 'T3FHY3pJSWJUUzljOkspRUc8M2tAXm0oSls6KTNjfXFfbHlaWyk7VjVwOSYkbmpMYHFQMV8zQE9GfEx1eWRiPWB6VH4iVkEpeWNVUjhoOUpVU3tMMmJ9KiNRZElYQ0tgZGYuYl1bPGFCZkYyMmk3L18vRTVCfmZDaHd2O3lSXnl8Uk9+cCUzTUFXNXBVXTR2PCJdbyQ7XzM4PipMWlZHWCxyW2U1'@;
put 'Zm9MfiV6JnA6I00hSFU0UUl0dltPLiQmP2xFU2ZEb0lYTn4oeD9vQEMuZV5nbGlBYSomXkA6NGloSW0pYTQ4P0I8LFRTaW1eQGdZfnlfaUxCczFsNikhfFdfZWQ2Q1lyTFpdeUwqOT4sRjprY0hrIm9MZ3k2VDJyJGw1UVRpNnhQR2EzWVFUJGNxMnoyZWlWa0xMaEVeY1owfik+Qj9VbEgpTD90'@;
put 'dEphd080bXNaLElYQjl5fjI+WDBGJSNISzoofDp3SmlYeWh1WHJha09VcWBHREssPlUkb0dkX3VDOHs6Oy4lXzxbJlNDd148VXZvQiJUfDFzP0VvYzd9Pm9vS2BgSkJgNDR2JnJkNEhuUCh5LkI1Z1hhXylaZUtzLkZBPl5GeCQxSW95Q2xTcUwyRVsoRS9PODRLcTw1V0gsSU06Yjs2N29HYWZY'@;
put 'KzsmW0R0TUh1TX1FLGlWUT9FNVF7VVl4PVdyYjVsSClMclp5WDYrUFhORHc5Ll8pb0tgMUxkVjJEOXZSRHsyL3NqPkc1Y1R+OTUmNGQ2d05IflJTXUE1bGcwLjAvN2I3Y1pWXnZ2alJ8Pz1rYV8lbGx7Pk1uJSw6WlJoJX40fHJrbjNeTHZnemkjeFhUQyhBKU8uI24ofkRiLzhyKSpmelBgdUR7'@;
put 'QjRjVnVSb2FubysoZlNwM1F2NS9YS2orQUozI01JOzNpOUZMa1BzWU1wSV5SSnBofFZSb2d1YnpjWyF4VilEWDNILjtRTnkmRnJsKWAoOnpRPVNWUkglcU1ZWEdaRkdmWl9UTW4jI0hlNVt5ZllLYG43LmV9d2s+MWBSUVdqKixtZVEyXXlrXl5OOlYvQCV8Y1FbKUUuIytDSzY+RltjUTIseXFL'@;
put 'Rz41S3ssQmZ1JXA7U1YvKD1BbT0sJC9tfWB0fk5ISmkrM2dgem91cEgwUVVdRHN6cWJKJko/Q0lIXytnZUcqXlpub05vRWJFNjQ1JU5lTjgxJTdheGlDdns8IUMvOCUqRlg1PzQmQzVBZnswRDFTcHVNYSFwaiNbJTIlcWxkN08hOjpXNmEvdmZaY05fQmsrc3hmaWl4JEYoVyQoJXhqXXdgV2ov'@;
put 'KUUpJDFFSXBdVSZ3cTRDPXd2d1heYGYxeixNMyFvTFJyVXtEOGA2SUNkS2BuN3t2PV0mdHVsak90eU5yUkV3NX44RmgxQnQwbls5Rn1kS1U7UjNlQGhTfVlaWDBBdiI9KTt9YSp9WyUyTkhSQTdyKX4xK2EoO0w7M2NYXlA9JjxfRHdGfGB6JD1ZbDVIZTBPeiIlZlg1JCFrNVRTTyhASlI2YzVy'@;
put 'Zi8pRUFxWGsleH5qYihDLlNpTlgzVysoJDMhNiRrPEcqcHBhKHE4aX1UPE46WChvSVU0O0I9Nz1yTXdMSDVMc3BuTyhhPVB+eFpwNlJlOllhMysvVnFjeip6RD8vLDRVMiROXWVOYHhyPy9WUTwpJih0MU4uSzpMXkx0ZGErLk1NKCFaKld7XV13bENZWilofCxzOXdXYTpRNDJgLkpNVCgvV0os'@;
put 'enYuZmlVImhJKzlbdz52QlosWGJJOFlSQGkhMVtMZFojaVo7bXY1aVc0NTh4PW1INjVkeWsqIXlHVWVIOXFnRDtiUW95dTsjS15yYFZveXVVKU5ibXgmQUJUY1BJaTNoSD5HVE8zWldJcEY4NGVGUmZNVUBhWHVvU0drJlpvcXU6UmViK3x3NiVRMlk3eDZIYzUzMiI3LiZmR3szNG1iJGZZZDNV'@;
put 'aFk6OGtJX3R4bFJkRVBKeH1UYFZpZTomcmIkMS5rKiNWOiM+PkJlRHY5Y3g9KE0xXTI/ezwvRTYjKXREUmJ1RWY3eTlIbjdhI2gmZS5xZy5jUz19YUpyUD1AK1hZVDY7VEppOlJNZnplYSFbSC9JSGZ8LE48NjZoO3pteU1wa1I4SFQ5N0lXW15dPUMuSzhyfiY6cWoyJjR1V1hOOUppSkxEXzVq'@;
put 'QGhtQ3xdVmBGI3pqbVJOJkBpbWlAMGNyWHZsSVtrPkMhWlpWcFFycEo5MEtzZTk1M0Z2bF87TGA8QHpMOH1ZO0JLc3h5azg+ND1+ZTN5RX02KiY7OilXWDloalcjI3w+d3F9YytVRl4sNVROcjpoalAmVlZGc3ApZzVVYDRHait8eVN9UzdITUhZZjxfJHxIYFs4a1s7MVFSTC41c1JYZ2toRz41'@;
put 'XkAsUWEhIW9AW3NJQUZ9Mk19SHVkYXpRIUZ8VTsiSylLenJBcHsza3spNU4oYTsxfl84RXY+UnIzZXhPb05tVndTIyl0fklQZSwuP1MoWHR4PHJQclhFL2szM2EvblFqJDZnVClnYSQlMypxPk9FOlUzJURWSXBWZ3tMNz5MYHM9VTElY1tmN3lAZTN5ayhpajxWQVhbTi5FQStbeUpVZDg9fEd2'@;
put 'Sk0mX00yUVF4MVFXJGlzOyVHK1ppRD1tdDE9fj8hMV9eaylnQnhwYHdYaWJ+b1FdVm9rL2svKTBHXTFJIVliOGVJJiElMTZWMGRyeUlYaClRMFpwQmIrU1gkW0Y1Y2txfSQmeGxzO2EmZVs3O1A9aGJmIkNMRTNPckRhdFEiJEFbWEE8NixwfXMwfERAelJFaWRQS3JiZ1VHTWBNOWVNOzo8THM4'@;
put 'b0ElTE5FKCg4L19CJD1WeHl1MS5MeUxzJVtbYW9DdChDQG5jJElHQCEwJnF8UD9XZ3d8JiU9JWs7cnAxIyJ3TEBjRV5OP0NPPzM0ayhxUUdHSXV2TDwuci9TQE9Rd1BORCMxJV18PURWSzNKMkZDR2hPelRTYnBwbXtpQ1QvTVhHdm1KUUtedX5FYXcyPTcjNlFoYCoiK0lYWV1vbz0rUjpsZmcp'@;
put 'S2lkKFhYc3tKLFZpcWE/KG1eYmNNUUUmLl8zTVkpaWYmIkI1fGJlcElUTzBeMzxpM1M1ckFlYlVrXz4sOylWKGBXc0M5YTdfWyNaQjEoLCQhQW1MT3NVN1FRZV9sQ0VhNkNTQXtKeE5uWEghTnV5ZHlTXT85eWdhTU1XYURhPCxVP189LzAmNHRZZkpfI0V6IjxYaGc0NzRbc206cSlXekk/Liw3'@;
put 'UzNIX3s/LzE3NGJuN2RmTmUiZTZkdUJ4cStbTDkhTnxteGNCd2N5cmVWZVVUeSoyN2gwc0codWIyQ1E0Z25OblBLcXlidyFScm9PIjZRRj9wYSQhZWlYYEBUVT85ZUVfe0BXbywlak59Yn48X0wuI2p8Uj5+WnpsYlpJImBYYTFRNjZUaSI3bTxYKm08bSZ1RDNLQ2RacEZ7VDRlN0ZlPGlHXlJ5'@;
put 'NiU8WVcxMmwzPUFoNiwqIWlyT30yfEsrPz9weyg7WmUqdSZxZ25pK35yJiVrUHgjN1JpYT0iWmx+R2J3KThwdiF0YkgqNzcuYkl2Mz9lRz1oMiptbHIkK3RKO3o8O0xxNGY+ImslO3E/SXU6O3hDITpWMSlbKkU/OWl5MllDNl8iZH1TTGo7eV15QzJ4L1dDPGNZZUgrTT8oKkRIZytASU11QHRk'@;
put 'TXouZDU6ViZ0THkiSGpKY2x6SmRXOEV5cyR6MmlCJHZTbWFbKyNsSjwvUGw4cFBKPC9QVSNHa084I0VRUU46bEBQbU5tQGVGfWZwYyg9JVBMLHt1NjAqP1VoOSp6OmdZZlpjayhNR1FnKmpoJFt4I0ZWL19eXkBZNlJzQExZO1txaTVMZWAoUWVBOzM6Xm16ZVEhKTdhOFJycXxQcXcldkpkV3xQ'@;
put 'VnpFN2tpaENTZyFNIi9fXmd+aFAiX10pfXBmPlF0WyErPTZbNlpOTmdzZF1tKmFpM2FWclV+ZTpgXlA4SHhIKSZ6PVkmP31lRjlbV0RoJUg9OG0+TjZHOnBTamR2WDtja3NhWG0vVE4xcTN9NDFEa1R4Y29nU15MbzhZezc+IVhDNCojZ01bcVZoWitFXUtuLHMybHg2KVIiQ1p6OjRhU1c2W08v'@;
put 'THU7JnJbPUQ8M3EySEUlXyhDVUclcDdZK0I9Tmh2UzNvd1FPZjUpfGQ8d3BwJCViJlIxSXI9RTx8c2s4YG0+QVErbFI+SWdEM0sqR2o4V1ddYmZ+XTdlOzdNZVspLiJBQjxrcG1UN24+dlR3ZXk4OG1fPjZrVE9db3Ijc3A2MX44elsmeGNlMkJdcylVWnsyfkMmUk1PWjY2NU4qNDZReXdnY3cl'@;
put 'SmheL0lzSmlIbWlTbz5adHZxO2hZJUZdfEpWL2dZUD9qcH1EVlh8REAhQ2U4JHVSR2NJSDB3U3xEO1krOmZPcihqTm93aXFeSFVGN1VTM2s5WlVAMCJgSVpDJFchY1FEaVBFOFIofSxXV059QXZeMz5GKXclaSY4cj1tPT1kR2VPfU9mYmVvOSwkcHdqLjE4YVV5bjhgb200OFkxM2FPSGsxdUg4'@;
put 'ZjFmLylrOGx2RmtgSDNIPWkzSG9mdDsxSDNjZy48LCVqPyF3MGJVPXNQQEYqd2hqVyExPiZVVjVRVmNiPjBiWmEka3VofSpXeW11V3lIXnEke1dfMFF6UkdGcGUvQThqay93T29YR1ArZjd5czQqSUR4JXpGL2csS09bYXVPM313YXprZWN+d3ouV1NuQDxYZl08IWU0bjhgNUhDZVs8a3lXSmIr'@;
put 'QkxsODdIeCQ7cSoqWkp5W3F4Zk58SGd7P246bHQxXXhHci9KdzdoK09mNWJwXUpgNSoubGY0OGhZLnc7bStEKXFremlicy8kYWZCZmZqNHhaam1KOGVGPT5gMm84VXsmVSI9YGY9XlFMaz1CN3RjcUBAbng9NFpDcXReQGVJMTFDdCNWPHQydGxmOyx2VFUwPGQ+KztpVEFVMDEscUZ6TXJ1Z1Mi'@;
put 'ZWEjZz8ld09tbTg5RGllOkcyJmQqOSpiUm5MYGh6dz49U1JxQkA7NVVlSFFENTlwQCo0ejtWbV5ZcV0mNXplV2FvZSkxUVtVbWw2SzxiTE5LbVkkdkcmdkhfWXwuYjAsaV5vOGI3eEpeSyoobjd+KSl6Mkd8RXFrIUZ2P09hPmwmY0NOfjlhdz8jSnIpd312XyRLaDFXJGRKUE9Vb3QkZzVDdigm'@;
put 'eXNyRUhSWkw5V09FRV12LkxfaUpEcWdacjdKd1A+XktsTmtbWkQwI29nLkt4UXJ1WV5jaG1gXVZKKTMrRWo0X1M1KTg2QEZSKDRBKGReblF3ZH48JD08OGB6MXt2OG5LPnB4cChKJF1FUikmKWdVcTFxTV4heCY1Kmt8YjszNW5beS5yNEc1fHh9Xn1xJnBWTXxKbXxGUihDel07Mzc/cmg2LjVM'@;
put 'alFPLi42Q2FnTUNkI1NAOXt8LlRXai5gKVJ2W3A7QG5UUDElRzJfZkE2TXM4Kz9eKmUrZnNEbjMoSyU3SlslX1lFJXlXfEZjIUJaMUBtTXQ2XzdiRWQwQy4sekFBMClTQUtDXkplY2khcylQKz0xP15JdEUiJE17SCojPTVAdi5MU2p8dnRCQUFBQUFBQUFBQU1jfmFFZ1svJWdpV0JKR3kmJmpG'@;
put 'WC5bZCZqW0l9b3AzYFJsWkdrZGNuPGJYeEYvSFpZZ2trR0gsQTBMY1QzPSw3Xn5xdztqVSxZdF4uRGchTzxYeDlwQXQ0OVY2P3ZHaXgoWFl1XkEpVDRRUTU7UyhVaDxKNG5rYjVOWTVZQ0ZMKiUkeDpqfmk4TzRzaEVSbT1MTWVeYnV9WWVpNWZie2l0Jl54dV96JUJiRjEiQSp9JDMlUi84cWE9'@;
put 'Kngvcig1I2wzfEAoflQjWWV6eV5UKG9KekcpSFNKUUdkWEVoWWk/JVYiLFN6bV84eTg8OW9FUGQ8UCMmQSZSYHdFLyRsaS8rfmh4VlZdMVJ9dihtLHVNaWVpN1UmalBLJkRpQkBuP2k8ZTUwYDNwayJLPCw3P0FJaDcrPWsiRH1ELkl6JXE9MDNrcVBBXyEpSWBBRVZML15OTWQvXTZIZXhNRXJv'@;
put 'Q0hFdlZ0XnZjOV8oSCo9KEVzbTopUiRKOVA9SExUW31dL2hsNUdKY1ZfOSl4PnAoQyRbO2BCcSxreT9mQXEyMSZSNnQsTT4jOUQhcn1VL1d8ISxVb0lyKX1Dd1VfKCF2QClZIyRmU1R2blZWJjR9PiNIK25XKzR1PS4haV5MTkdCMkFsWGpNREhXenZ0dFUie0h8cDpzRF04I3okVF42XkQyYnRN'@;
put 'SllCYnw4WUlZI251bGBlSGc8JF5qPWE1djQrUF96IzIsPC95NH1Rc25IfFZncjx4QkdLdUclPjIreVhBYHNzQD4iZCVabz9SWldyPEM8cHdYVjVwWmtzQlJXdX4xV0p1cS4qXi4hUGEpTT5sVDZzRzwubU5jVGQmSWZmOXM3fkt9WmVlNGt+dFZsQipCXUJGM3B2UEYkVno3I181NGVEOjEyVHQ0'@;
put 'SFhDZ2leWFB3WnA2TyZVYERbe05IKUAmQmV7Yl1FQWclKXVRZDg/NWU0OEB8Ry8+VjtYQlt0MW15WSNTIXFBR2Q2Nn0kdWpzNz5jSHFDNil9JHg7fCEoK1c9UnROJXtrYF5JLDxGYXVEMUVEIzUqJiFGMS91fTN6KCwmeFtKV3p6RTdzOk5LTiVVfnIrV3leJEozXmJiInhvWmRxX0MwKk9KPTZn'@;
put 'ciZML1RVMXRQe3YuVSguKnpYOXNGL3Q5IWZRcFd5RSkkOyY1WD5re1BqcXQ8XzwkdGMuPXxATGU1XT9rYXUzZWciJHZYU2NMMFNZKFRdSjomQ1BkTHU8bWJ0ZyV0eEcqZE9edSguXnN0N1dVTz9CPUxSbGg3MG42Nm1zTkV3VWY9WVpXQlQ/My9UIi8pMkUhb3UzZHsiRjJqa2hxantfPGp9fmAr'@;
put 'V2lzen5fVXNlY08pN2JbUyJFSzJGdF9IK1JmSH0sVTojXkpKZmJgVCFCUVJ4c3czVlJ9WnF0OzhmUnZsRTU1XVViOFkodXdVLEp8ME8mMjs5W241TChZczJJI1UhflQ5MUUraFBKbkk1RDp2ZWF0LHxaKzZKdD16QE1Zd0JFZ2p2MnxoJnNGOlZQSXx+ZSNJWyxTWn46PXlkdHpPJFZDUDZPUWN8'@;
put 'T0s+a3s7fHBJS3NZbHN8X297Ol9HK2ZhUndAIylIPmApPTtpZX4qQ0pCdz5Pa15DdUgoMFJKelgyfmBIMDplR1IiMCVQUTMrIUx9P1F0O04mUnhiSUJgZnY8KT47N1J4V05ZPiFTLEg1RSV0cERqN2NYUGgiVzUhIj9NTHdyKllFSHQ2dDV0UXZSKDU5Y3hbSz46biEmcSg3aDVPbHVgcVMxWmxs'@;
put 'KUNQYjJHV3g1Z0BdQ0lJRl8yZ1RDVDNtUUI6YlI1LiNDP0JfO0dCU31MR0w5fFA9fHloJjBCcnwlVWNFPWhjNEIxQUVHSzZXY1JGeFtIMXIrbTw1YktqU2xSfSY6UVZraUtofmc2JmRJTyskbnBhbGtSYSlBOElYcDIoeV9lQDBMaTJaL35XKHkmMVUiJF9FaHpYPjZJNEN5UUc+WC5zdChEW3t0'@;
put 'SngqQmEqam0obitJP1BmakxYLnYzTz1pbDRhRHZSWypKajFHVGooSmpAU2w6cVZDe25gUXZ3Tmh0KmZtOVolPiheT3A+QmYvfjwyQThaQHcwenUvTmV8WHBBMnJ0V3clN2YwcT1GKjd8dSh7KXBsT3d2PHwvaWJ0SSJadkBAamtlYDRbaEsmeEc0ZVNHWGk4VnB3SkYxdTtMRlRLWm5jUGpHZE4r'@;
put 'PmpyWCx0bW5QXXYqTjB9fCtZWkhuP2tFJj5YfWpPSjZyNSw/en1QQl5FLDRRZkFQZGt2YVlSREcoX05kTE58ZTdgQz19XWphXWkhO3x4dUQ8Z05oMlooPEckTDltIXQ3RVIsUUVSVGJJMVE2JF5YR2M/W2E4KjZXIWo3bjY3Nk1VemtifHVTbFkjJGxZa284NyhpSX57K3B4OEYqOElvU2JfKkZu'@;
put 'OD1RPzVJXl9xOyFWODFIKDlwcnd1ImpOQXIqOSNmRWlfcndDM3svSFt3cGNAdXBWNn1eK3k4N2cwRH5leEQ3e3g6eyVadjFsNF1xXmJualddV18uaylCdGt7RChTPClpQl0iVmFUME1PVGh3OmdUJjVNNldoSCVMcWtCSVllODU/X1IzTkN5WHUyY3M8UGElTT1PaU9WaT5oPzAhS01GIzY7PHBQ'@;
put 'TExlOzgmcT99YHomUEd9dn1LNU9bazFoSVErZDNNeHlEIWlbYSZ6QCxEMSZkUyJ5QjMydyVLOGk2KTZFc2Q+flIxMHxdRCV0W3ZUZTNyczErNVtTa0h2NztoKzV+P1ZrOCJMR2JVMiRKN2R8OXl6NiFYNk5GVDZAdkFkNW5bVD9yMUNiTXN5UCt8WCNgSElLbFlXTDhhQHpaPTtKbWZ9QyVWQFdW'@;
put 'fi5ncW5fc21HMEkvelZPL1Z7QzsuSENze3tiUjVON08mbE54amFpfngwJTFxSWZyVTM4fSsoK1ohezI+PVAjUHspcSJJIzg1LEEvfm1IXSlXJSpCbmJpQ0NdNXQrQmp6VCk7SEY7UHZJSnhUXyw2Wk40SE08MCFnQkJLMkEyKGpGVDZuVlNSNnl9RyE6N0IpaE11PywpJVM1KntrTkg9K0gmbVVP'@;
put 'alJkaDJbXWsoYDZJYT9aZSw7WWVVTFNeJD5+VmwwZCw4S29UQkdYOGZXRyV0P0tTJnBMOCtTMDp5SypPe2g2QmxQUCVPd35vMD1GVXVLei4pSUtgcWxkJENlNEB0KUxNc3o1QExHVWFGUFozOTA7WkFJM2JHZldRM2ImMj9HWWtaZShCWkdPK2VGMEJoT0xtRUtDXW1JYU56SmlpYHFoOjpFck4i'@;
put 'JEdyfWFIKlVaT0xAck9DTmlvWW0oX1RuTHo1Jls9aiNoNCQ7by8mNWY0b0RtNSZILEt9MzEzRE5AW3x6e144ajpRcWowQC59enU5IXM4UDE6dSxBW1J8dTd6MUx+WzhRdVZzSyRbaltufGd4OU17KTFQaTZBanBlYDlwMk5qWn06NFNbZDFNRyFHP3F5Tm5MUU8pT299dVEyP19zMW4/Vjgoc10h'@;
put 'TSNuaVchUmk4c0toaVN9blQsUiFaRUIhTXkvWHB2OGh2WD5oVEMoNFRkYzA0entkMDw1RUNkcXpOWmR0RVRoI2dVI2RneEwjZmV7LDVgX1ttUnp7MGEqaj40K0BBWV1tPUosRHsxKFcvbGp6UkRyJF1fZi9jbTgzSl4yQllKbE84YWNNRC80S2RMbnssbyVbcnZVaz4qRWIqZltXfT9UZmhhO3tE'@;
put 'PG0lUHZZd0AzdCplMjpxVm44PV9rYW8wNSpMdEZFTndHdF1IWSI2UTVUSm1UK3dqRV5NVUU7Lj1Lc1E/bURuPyNrTDA+KnUxNHBHQUdxXSgsVTI2RWMrW2A2dFtCJDNFZld0QHg7YGtES0h9Pj9HfisyTEcoI1lQfGBgVUZdNXRaP3hbbjMrWmFOR2JlRz1pXyozOXpWQUB1Q3RvQ1kjPnVDRns+'@;
put 'RlhbXj5KfGUmYzI1dXFCMEtKTkhGZyluOTNnRE4wJGR5JWA7Tm8jQ3taQ100SGReTUdaendsW2pJI0RQJW1mXUtHJkY0Jnl1NjppJCxFVDhLaCpGO1Jgajw8ZDUuXlV3VSs5dnpyTiVFVzVGQl9EQlViK3Y9VHskPTM7MFlPVSxZWjpVVSI2L1M5VFJzKUEkbTNTXXVRSE5paHdRQk8ueyU6b21j'@;
put 'c1dya0hbTFowPEk6UjE5eFddO0F0TTIsRD06YFQ3SH1rdGA2L3lwJTVxSk9vWUFKLjkqNWpxL3VvIzZSKzVrP04vcGtlViEkUFQ+JTlRPjkjOW83KUx4XVlFN0B2X1VHSm52MU50ZW9wNDxWI3R7IVJ+N3ZaeEJkUmJDXkVJRm93Z218eTBDMm5fI2lUdiM+ZUZZMDFCdH5qRmpkOUArLzFYQl0s'@;
put 'LzMlVTdOW280ZE5oWiQmSVdARFV5YSQpSTxNU15xSnprUl45c29LK0U5TFRaa0h6RVs4QHFuXlRpM0l1Y2Mzdll0UGdsZmMpTTUjdVJ0ej5xW2ApI1NKPE9FTCVjX1R8QCVKY0xANV18RFhmQCxXdHVNYztfel5Nb0RpWiZRNzphWDBTWWAiNT9dIn1DQXFxfElsRTpjLm95eGtzMVBgdnN2bHAv'@;
put 'bUJ4cUFHeFU7TWlRc3hJWV1ZM2VhNm0zSEk9WTtKbCNFNVBnSmxPL19kSzhlTHddUzY6PXs4dTRrfDd+MylOQE9sZCpYTEc9UjM/QDxMZXl6JEUxdygqRWtuTCVmc2wpKn55JEVJYUh3LjtHNnVtOm1xX1ZES15LSD5rPHhxMmRoaiJgJSN2eVBSZHMzPjFoO3dQVmpocChPYComPihaZzg7PSV7'@;
put 'bV1EdikxMUtnY2JaW3U0eWZCdVlMKzo7MWhJTE9OVU8/KChlQiRIIXgmLmBwaHomZCp5cTh2P091c2o0Uz4iTz0oWl5SXVdQNmIwdkA7UGsscyRIaWFBb3xIdkg7aF9rVkYyY1EvaDwzLCVTOE5OdkFxX0IlMmNZVkBMYTh0eHFTWHt7TVlTQGZ5ciVlTE8zQHVvbFpqazh1Nz1YQS9PNjxmUEBU'@;
put 'X1RCRk1vbjVLOis7dmN+c0ZAJWI/RTdBa1hwfnlkQUkoXkopfU8uLms2Xj1CYzBqNkd2YVBZP058M3whWzBxL1EvaVVvQDZXIyZqRkF5andWekl2RCNxVF5Yang+bG18biM+YkBXbmlfQCFpfj1CNkJIeWJUZUJHUnVKKTxMdiJiXlhmPlIkc3dnMnNJWE03YkIvTCFuaDp8fCVYQ2lHMS9DV1k9'@;
put 'JEJyVUJuWyxZRX4jeVcsLFZXL08pbC9MTXBkZUpLK1J9WWU6SDQsVSN2bTx4Y21lbUQwN2d1anR3VDpxbj8lQ1M2OEQwNTltRCsyKWYsWjQjQkBsMFdtNElwa0JDbCxpPmdSfk9wImFaIlp+a3dKbCFMelElIT9fRTBAcG91dDcjIUtmQSZbXSUkPWFrSVV1bGo2fmVzTXptNnkhSnUwLnFxJGhH'@;
put 'a150WCw/YWA6XXVTYCE+YjBCXzVePDAhSyNXNClxbCE2JHlWUyFIZC5jTTwmQGYjWGY/eig0Q1pBbkJfK1AlNyZdY0B9WE9rQEt3XkJVQCVLUFpWZEk+I0MhY0chYm14Q2I0L1R1OzspMndvW301fkxkYWkoKDJwWWFtTEp6PiNrZ1dWS2M7TEU5cGgpMXEkM1VvY082WD9HSlkzNT45MFJ7Jn1v'@;
put 'KEg1ZkBLbXE8aXovaG5ob3RhT305bislZzAodGJwYzZwRSN2UTpFfmN1RDk7bDlHQU40MUAqREVFSmh0eFptJUYwSTk8cVY4MkxwQUFsdnZSSTBhXjlFMz5lKyNsWnxeWmpISHdyL1lldE8kJjkkSl1hMDlyXmhLZCMkXiI3KlV5eWtieXoxI3tIUXAlVktSMXdMP25oe0J9TVFWfEBaaH1fQXp1'@;
put 'V1g7I0loPndAdzIwaUM3JkJAR3h6fWhudnZTWjl8W2VGclhsbnYyNSNmfWdNPFBjW04kZVIjJTlJUl8lazYwJFQ2VkNLNThYM00kPyNVczNBYVlxeGx4L0tQXismTCIwZTgzWTZpbT81aDhwQ21Vc2xmRERqe0dOVk5xMUxJTk52fE1rI2ZuY1EzYHJ5OTtSXklmYmFzRC9xdnt7Wm57LmZRb1Av'@;
put 'RVpPLiZGMjZvKktkOiJiM2lwfTA9eHspJTU9WXskemQ+WyNtM19lVEN3KF5BUiIwI19DNipRQD1IWjQuWGJZXlpMI2s9JWhlUUZQSGEmNXZUTmxVR1UyVyZGM1NFZmNPUFJYJXxqPkRUWSwhJWlFciN7YmA4NSZMcVB0cypHJihXWXE1cjJGXWl5VlVIZyZeUmtJIjI0bW5KU0hqP1NGa2lAKCgr'@;
put 'dTBIYmFGL3R1Q2tTJWgpQm9QPUpyTCQxfn55azxlI1prXndzK01jd2sxJXJzVCRLZCxBU20wXkhyKnlxJSNZK3gzfkUmSDd8Mn1nSSExTFJwQ3p9Q1F7KiJGdmddaVdieSFIdmw2TyIpKEsxOSk5fCtiZkl5bGY3aEtUb0l2XyhMYGRLTz80WEkvVVk9eVQsLkY6Rk9XXlJnRkJyeztgR3Y8eXV5'@;
put 'UFk5VUxaLH1lJUAwY3NqQmlrN2swU1ExdTB6ajp5WVF0YWA4d3haTlRbSy4xVGxNWU91a2ZfWDtMN00weC5eTnxuIW8vTzt3ZklGKnx+T2l2XklZZi8hclNKOHJUO1lyOkV7YExaMjVrZz49VWE6P3p0bCFKSjpBdFleZz5JOHkmcTI9MV5JMStEIiVdXWpfW3ZGQ3ZTO3h3fVNeWyo8NGVifiVb'@;
put 'RFJbSlg6YFJ8dEk5Q0M8QDIiKkVIKEgrKVI5cV1UN1N3cGRwMHokIzZuQnFdRml9ZmhrJTNLcz9NfXtqaTFdPFI4aHF6a144X0szSEtufCs8aHs0YmxodSFhVDxzWytVISVDJiYrSmwsQCwkQkE9UjJ8L2I1UWh6Iik5dEhHbyJ+L0RPZ1E4ajZgKGUuJDhZXVF3PE9QVnN4I2RfM2l5QkhCYjA3'@;
put 'eXI0Nkl9Sjw2PnZ2Y2RFP1J9K2c5RnwyTXw4KUJSa0tkS2RkXUY8UD4/ditqe0t1KiRZd3puSk0vI3ZHUTRWLDk6Z3dqTzNsWzJiJjVFZCpCSSlnZUJSczI4Mzo6X0dCZD8wNDh2cFV7IyI+M2A9VWs/WzFTdD8zNExgQF05O15meWIyd2gjbldCNDEqSTYuOHR0QCFmKG9pek8iWVF+RCFmKEtf'@;
put 'cHM2SHNHblcxNUJwWz1QTVNTKU14XSFvMjp9WmhnfGNENVk5USNLb3lAd1RwaldNTFZlLHJmbWVFYEJWflNUemBVRVg+YmU/JDRbc0hzYmlVNjRkdVFEL2FeQVtva0QrcFV+IWAvJnZXWE5lcmVvRXdBe1VCS2RCbSNgInk6OnN4b0lZRV87MGhwQUtjfEk2aSVVNmlVSTtqQXg/RSo6ZFJsZ2Yk'@;
put 'MmlFQHlScDdFR31zcT9WNWQhWWFTbmNIPShPdn15MVhfdGtediZQOWdWbmZQUTxMUCYqWC9VOiVpWWJaP2Z9entfO2syIyNkYWxeL3M2KFJ9MCthcHtNNyt3eEZ4cmo0Lyo6UGhibSFNZmZSZn4peUk6MlJ0JGxIQlp+ZHEjPmx0TC4pRTtsREFMPjQ2VmNVLD5XI2M9ZCZmRU4oUXVHQnhUQiV4'@;
put 'I0UvcHY1W0FfXWNDRGh2a2Z4ZjVSXzptTEk7YzIqKithR1lpU1MqcFg3PG46Z095SFZBcV4hT2VvJHtBUTFhYDNNc2g6cVFNZXQ+eWthMkc5VCoxZEl0QmFtXUkxckRWajkoK3tJb1U+SmdVd09BIzgoI21mNSglPEd6c2B7bGF8aGV+Y3R0VFk6biY1M2hmZGszXTkwa0Epc3BsfSMsKjRRL1s7'@;
put 'KH0wTD1yMzRLY2VNXVldWnZ1VjJUenR+Uiw5Q2IjTVhbU3UxKl1PUE54MTldb2habEFHXSVfL3k+c1JtOHVfcEE+V2ElMCJwWz1HaU9MR2FZb3UmZF8xcDlbTShMKXhhOixXIj54KlI9YVR7U3tzIlJmWClxZTJwRnZBNTNZJXJSJDJ1VltraDlQZ1pxVUBZYiFqampNNl9YcUo1MClLcEx5XnBX'@;
put 'KXpDODN9Ly5sbVRWJTcrLF9tZiw6fCxGRGgwS0hYS0I1PEYxTFtfbmpPY1U8THg0ZTssYTpyP0IyJURWUVtVYlZ+dH5BWzZYXytrKGtZMjkkOE1lOzJhezMuPUxHbk1VZjwxanFxZ2EoN3R8Zz5YYiouXU9kcUFfIUg9bEJ5NlQ9MWVqbzdPdFpjeE01ZFVFST09aF5USyVweGEuUWRROCgiPm10'@;
put 'SlBnVmJeN25YeT5gbSptSl91JG13SCVNS0RrfiZiWVFXOCZwSVpmNkNDKmsxI2ovPD09bEZaSyQ/LFgkYy5tWixiVyRWZ2ZPWzthQm1rZDE1bF84bjo5KFskcEIvd0ZSayxaS2Zbeno4Tj5CYTIqfC92fG5JR2B3JVZ9PEt0a1EvbV5RemNYRH0mSy9EKEdeOzJ5Ok9bJmdpZGtJOUxOaSxSUklC'@;
put 'fHEwYCZYW3wrT0RAUUEiamg9KmYyTk87eG17PU4zUH1MLDh5WXZ6fGRKc3RuUjMmYXpaREIwRj8jT09je0tyYE1MdClLIX5gXj8odXVOa11JaEI1JV5Ne09kRCE/MkRsaHEsW0RITTl6fnJGeFZ3REJ6SHFHIXxqM19fL2RMTVsqLFArRXxoeWgvKF10QFBUVXtRdzk0K3d3ZlVCdW5GJFdbU2dy'@;
put 'KnpdWWMzNmFNJkxDJDRyeH5kJlNHNzk1VmZRXmJ+ZTxJSVNGYDo3aE8yMlFhPnoqYDdgalIkOjo/YXJJMUchN1c5cUdpdnVeb3d8L0JmV25leUg9JDg+dTVYN25DfHxoaXJ1WlFTOCtpZEQqVD80WmQ6TmBWdWEhQikqIVJLbj1sLlowJTUiaWpNNjo8SzRLNlUhYVB1TX55bUhBTDYsQCRAV0Ar'@;
put 'Kk5YYF1YJVIlRTpZQ0l5aXdRfVRyKTtwLjxhLElRLH19T1RkUlpDSmxIVUI4JUBnMzNDTkYrPjdUL0x3YWJfMDwiNzJJMzhoKWQla2xpJGd1PUZddWNEXlNjX2BSPVB3YypVeDd9Y1NWUXhiMlFgL15fbiowTCxoc35hUD06VSJ3Kld1eUp0WHtzTDBtWWBIVTd1RztebEZNajwzTjlpXmFwP0lL'@;
put 'PWdpXyZvWzYjWn4yMiFvUn1GKjRFNX5ETWQsRTBYIkd3L2YqMTNWUSUhX0dkQkI0aFhCIyNJJXRyVCMyKXY6KmBycFV+NDg2YWo6I2RiQC9RNCFVVG5uVTlKST5hd2l1fVFSbmokTCNAQ0g0InRCaWY+MD1jYjl0P3thfndAR3skIT5nVGA9fU9ObTooY2VQbCk3SWNYdlY9UnJlLlNMLm5QX2Zy'@;
put 'fHVVS1E0NVcuXUQraEZ6dWYzUyRpQW0oY11hOmFxMlgyP3YhJXNYMCxVPH1iW2ZHMz49PDFDOHpVSGxRc3klczY0VGN8bmo+T2RKSXpebD1mKG5+UVl+TlhgW1tJRW5OfUB8OFU5KyNQbzxVPyVkdWM8MldUPHBvVGRTTUh+NFZzZz5rbV9uUzxSMDdPWiwxTjF7U2txYyZvcD43VV1SPjYoKVFa'@;
put 'eitiaENPdjlDWmdha2g6cClGP1gifFZadj9VOTBpYkFdNFNqPkV9TUhhT0gjR1BgTkZaUWJkN0FsRV1dMXBNb3l7fjJPOWBjI2JYbXdsR2BLLnx0UHJ0NEErdEpuLC8udV4mTnJOTkladzdFVyhjJUZeQFVUenoycWg8PzdUaWh1aU80Vjs3Ul53VGg+JSx1ez5UUnUyaktAMXFWT0N9U0AucUl4'@;
put 'X3ZXIy8mWXImWysldn1zYDt3bkdnRVBicnQwXmdOVyR5OiNnRml0NjZJOzhuNn1hfnUlZyZgdltpIlk0LjJzcCM7V3tKME83Lk5MVyl3P0ZPPThgMihtPl90d0ghTzNJSSl5OVpFMj9iWSQlVWUuYEZIekZ5X2ZuS2dALix0Pz5QJTdZXWV6Pj0lL3V5N2A/In1BK1BpU1VeaFt5dlE4Sy4wV01t'@;
put 'VDhxK3xmWlFGKnx9IWxBW3lhSyMhdnhaPXhqdDheekVoLmxgUzhiUTNEeml9VjA9Ln03JmcxSzh1I2EmbkoqcCpOOzFJYzBCXS9rRUwuYV5iQjFWLy9aVUMhfHR7MFZKOFs8bHshY2BBdVF6WThtX1kvV0shcG5MNXVWflgyWDkpai4hWkJSe0ZuV0ZAVDxFa1tFTDk6JWdwajY6Xls8KT1VZUI7'@;
put 'UW9jdCZBVTRoNEIpXU9yWS44Kz5kMlljLjIqakFVRixSLDopIzM2emY+fDl6dktAMUFqPWQ3QDBTWlFjIVpdUjtgN3t4SEMuOyU1ZHg+cFdTVH0qTUVjNjElJjNmVDFnXj0xejN+d1A9MU1LNFcxRUdEdCxvX3JYN0B2OE92ZT0vITBAOkd4VDVNfD1KUVhtTmp9STZ5dTRIZVFmMmY3eUdVWntG'@;
put 'WEZlZSh4Y1Y0fjUmUXJAR21BTEhwd0cqSG9HJmFPLHwiYn0jISFBMmpsSn1XPTR3Q3YhLiJ7bDtXTGV7bEdfTEJZRnlSLGAybl56LGYiKW95c11WLjB7V1dCSklzOG1hfnsySC5ZVjAoYnc+Xmt+JUkrYlNYMVM2UChrYypufEw3YkwjI1ckSHRQcCl8aGhndn5mYzlhYnBZPGZfZ2ZxbDF7Z2Il'@;
put 'eUdwZHswan5lMnp9ZChwSmR+N3x5bzh5bHdnPCgqRHowbF1TfCR8MVE4QzlCellWdU4wSzhVbTB6RmMqPWk0aWMpT1VUeHtVKW9IOmVIN2gyZkgxT1N8e2MpQi9CYH0/ODZqeCJ2djRbX2UyLClMKUkibk1uQ25gO1hmMzV9U358KlR6eUBFP1FxPGImLldkREo7Ol5pSil8cztoI2UwUGQ7LFVW'@;
put 'U3s7XkZHQE9DY2xDZndCTTxZUygzKlR4RWpoQkYuJDcvdWBRVj9EU3NrYjlfTkFAPiQiJU9ITGpHbjVlNWs0YCp+Plp+JH1PLEowfEQoQC88bWRfeVRieUVuKUVzKE1TfjBGSixkdTp6XW56YFBEQlpbSEF0SiE6JC91PzkqVEtvQ3whQiVwdk5MYGNPSl1ZKW5Kcjo9cDtEI3MwanNlSFBrInhC'@;
put 'eyNuUmQjdEo7XjUmNCNWWjphWXVee0ptdT4iLm9pd1dvOSlvV3B1RlBxYkEhLGgsMTF6UG90NzxacS81IWVeVmRWWVRRYjU5OXEqbCVUczE2QGc0cmNOSWdmK1k+WWMubjJDRWIlOEZNcl1HP0x+b3pyUjxZLFEsPC9kTjRRajU9ZFFabyI+YFFUQyFULyF4cSZRYHldbV9ANn1UXip6Zyh8YGpz'@;
put 'MF5qPXRpUDliJHhuViVWY1ZyOTpDU09eNjFVOypGSDslJXNBPHpPUEE7UG9SZ0VWS0M3anZFUSNWazFwTWBZdlhbPnwjeiZ1dXI4UUJCUFkjWEZCfWg0bFpVLDVHWE1be2F1VXVbazRpaXVsZjxBQiV6WTpmWlc0dXlNOjI8TnFnKXdYQi9Cc2s+ZHRLYUhsZThoPGJiKXlhT0lLfG9YS2s7ZWFm'@;
put 'dzZVWGNZLDswbmhtInlES095On0rVV5ofHtdbDxNNzMldDl8JitFOVZCPXtZVmkmI0dLcjlhRV41e2U7ZCtrKXxnb35RLil6d0csNDB1Qzx3PnQzazpve3tHRVAqVUpwZjJwfGlERkgoK11PUylwUHhedjQ0d1FpXkBRLks9OHZGMm8mMlklRUs3VmxgRzJGNEZBL11yeEBwI25HMWxYaGJqWjN6'@;
put 'I1Z5T1NFKmNjOE5IM2Z1TT1Ea1IoYSR4WHFyPU9GfVovPlk1YHcoZld9PE9Tc2pWLj8xeCkyeXEvRWQqWy56VDF8cH0+flJfMy9ARlozVTIid0Y8W185bmxjeCYxInE/QW1ZaVt9UGNuei5PPmVkYmRaK3MiQVYxLjJOXTpkYH1dI14lYSwrIzkwZSU7LHNSY1tmfVU5K10+bFtlL1NdUUdVY2Nn'@;
put 'RSFvblAoe3I1dyk2XztHVjdaMTRUMXEqdlV9OENJQnw5eWJvZmIwPjYuOnlUclBkfjg7Km4xKnFfNT5xTWVTYkE6T0hSfTpPeV5dKzY8YlFKYSE5W1tuSnpBSmtzRkpkOXF0VXpmRndhRCxNWm0uVmdpRiNhJnQ0Myg3L2dPc2NaIVBHOTRSO1g9VEhMOWBGOm0oNEJOSktgXmR+QUZVaHlfbHdK'@;
put 'bWdbVEV1OT9xeDd8LlFGTz5XRkl4e3N4UnZpaVYiN1EvTUlyS2h0bHJzU093e3tlJU1bI0VASndfZDNNNkpyTEtDaD43K2BLeHpKQGUvZ2t0UG1ebjlLQm1beyhDXiFjMzY6c341fFtMKXdhVmheR05xfn5Jfj02Tll+Vmdlc3B8KHBbVn0iOyRsM3A6JUs2N0RubT98M0hpUkJONz8+VUErd01w'@;
put 'SEFydnN7Xi40LmhwY0pgNDs7c3t4S05+cWRGb2c5OF82fDZMNipjYjl4N3loezhWfFZMWTFsUFlYUGsyZVcwKns4Vk5keSpEIiJ8WVF8PHRyPyFvOy5YQyRwc2F2b1klRDRXaShWZ0FxKGlETnZZaGozLG54WT1nZjElPUNNdUAhKGlVMFNLLlU1UjRCM0JMOyVgbld3JTo5bzFpfWgsMmV4NShM'@;
put 'RTlPVX1OVFkwLjpHRCkhSkhQRVNnM1NRSXUqbGZXU2siJUo0b1Ztd2UoWmRwRj5ZbHFyb2gqJkg8Vk1AUW1wX0U3bCg2LERVI0tmJmJlSVdbUCReK2ckO1ReMlAsentKSG9taVgxfEQjQl82LF1OUUhrenslRXpkTnVJaSshbEtoUmN9fD5vNndZPjkoZXg9T0lafkB6JmIyISJESW5yJn45UG9E'@;
put 'LjFEImlXJUcyKyNgKDdZYkpZcnNWOTw3dEcmXjRRVXlnIkNdZjlZY0QhQk0iV0I7LjsxMSE8bkZPSCZAW1hWKFNZU1AvWigsKDwwOnlieSpseUtvSFQ7LGtTUVUmU18+QEdzSkA1UjtvfmVjT05IIyw9IyU3OkhrbjpIUlZveTBHP2A2WTVgenVGZnJbeHE6dkJAYmZZXmx6a1hvZjp3NDl+by8y'@;
put 'SG19SFB0QjA6IXVCQTEhRylFI3pjMGYlbHAvMWxqLF4zSnV6cXY7d103R2MrR2J0XnxhbDZbbzhgdz98RD5PMTNdKkdpVE1CVnJEcytmeEs0ZCQxVC9tLGMySzFRVGtPWWQxZFZ3d285IXlLS2pYZXc2aSozPG9XTGc1dk9+OGR8R3Z0JDU0ejZjY1hrWiVXVVRtJVdHbCF+QlVDMjQqVEJjOzNG'@;
put 'OldDaDQ0bzhFMUJedi9NRnI+cFtHR0R1VytOR0lXRiV4ZylbQmxOQkJaQyJ3PSN7VTUsOikwXiZVR2VGJEd4TmVsQ3BEK2E2dXlXISlGMTgyZSVYfCEzeF1ERUt6dXhfRmcjTmFjPj8mPmYmUmQ5eThCKigwXUFQPT8uNlRdK1EuRypGWn46fF1IdzldZjFhVCQmZmdsbW19JGUjNzJLJj09LlFU'@;
put 'PSVnV1VmaH1rRyZTb0JbfjdbfmxGaUlHfTgsQm1jdU4kSy5KVWMrJkp0fm9fMmhXZ1lNSktCX2tGeG00X0diTlslNms3cHJeKHxmT2lJd3MkKmZeZWZoYyYhY3gxSUNMdDJVS2J0SmZPKX57JiouSCZqNzU9bm0sMS9AQFB+eU9QMk46UTpqRUpTKDVnRzB8M0huR1dANlRed14zdUdoejVDLEko'@;
put 'aHRQPyZBbkxMMUYvY24vS0JmXj1FWUxXWm0mYnw5d1ZJcVFiSmxgfjxDe1ptWC9tXTtGITFAcW1OZ2VtZU9BciljZnw6O09CY3JZMTdjKXlaPTxZY0pfXWMkR1R+XzJxIzU4JGlOLCNDc3pENFA3ZGo9VUpkYVU1Pn1SaWQoYT1SI0YkfFZwMnwlRCRab0RYO3k0REJ0NUdIOVJIL00ycS8jdSEj'@;
put 'cmFhfGUuVGZdT0l8LEBgbl45S3h2Nm5wdCQpNFpbVixIXSpUdngyJXZIKlA4dj9lJiVqZjplJjgvKjU4YTQlNitQLGgvK21EMSNmd109QFtEcjIuLispJmd4QjpKcnIwQksxUkshTFIpcVI3KmxmTyFPMlR2R09ITVJvNjo9czV8U3BuOExIIVpvMkAkLGpGTHpqUWlZWkgibH1tenlXKkJOJVht'@;
put 'P150MTJ9RWUsdihWaHxgQzxMXzxVWWohKS5dOztdeXNoUWxDTmNBWDF2KWJDaCFNIXFTN2MmfVlmRWY2UClsfGAwRnM/KWQ5S3lieDM1YlRiYDIldyZ9bSJ5KF9Pbm5ETzhLTU9DI1ApU01kXXhHVi9AcWp8PSkpMHQ7PXBZe0hoSVFsNU5lJEZtTzEwaShPIiNvUjteL34sM3RBNiwyYWtWe31A'@;
put 'bUxhSXpBOVAzXkt2Wz9naXwzLk43TE50TnhjZU4lNVNSc1ptT1lZPStKa0RSTXVXfER6Sn5ZV1Y6QiJEbTVxSTYkPkgrZDNbITJBb21gdE5uUGhQInhbSHkwfEB9dCtWcmh1QilVciFgd215X0d0JFFYbHFRPGllbXlhMzV5eCskbSFZNXpQLmQ4QWF9UnpDa0ZrZVlVZktZNyJrISVsKlo7MD9a'@;
put 'KFE2WzBRbzF6SWJNUXwqKVhpVEUvUjNLR0FbL1RARWlReSlCMER1eS9Bck1VQXxbZXtKV2ZJYlpqQWpaRWg+Y2gyJmxbPWp1dFhVTWI6K242O24xPX4vV2AwJiQuank9PGljOXUubzB+bVNDcjxuQ3QqfTVBIURYOHl6e1siVD4uWntRVDx1RDtQTzZgPi98NEhRaTgrOERTR1s5WV85PXIhMyl2'@;
put 'a3tyZG0sfUp1fCs3LER7c2RydmlzYH55czpgdlBpd1BNbUUqVk9+PUBUZkR3TjMqWi4zQj1tVVNkMyJ7MDNjaWZ8Ljp3NVV5Pn54Y2JvNGledVY3IlZ3OUNGNEJxV0xnMSVRUGk/e3xJPEFqMUMjMyE0OzZgInBWWEwlKSQ+MU5xU3ZSdEVqbFZWODdzfE9rJmR3OnFyMWlfKU1ORCtIb2RmSGcp'@;
put 'PF45OzJ4Tj5BeVRhUlB7NzxmKnMvTzZ0XVMuKShOPldhVW0lW05bLyIsaDVOKnVuKFd4M3JmNTAkXiQpYl0uYG58OUJOKTR+MV9FZSxYc29HVj1sYTZwemYrUylgYm9CeGtfdllPbWRFXysvR3JZek5KRy8laXx4czNQci8oS0BWXTJ4aERRQDJAZytVcnxFXktpL2g6TlpuWERwXXtwdTRZL2VD'@;
put 'cyE7LGVuVGFbSkMuR05PT2xrc2A4I2s8Lk5LbDUiKXhuIWRxVlEmZnNjdU9HIUUpQW92Wz9hWjUiOTBNV2k6WyVkYCooS1pwOk5HVzJzbmNieTh8MTZHVkxHR2BpezIrTUZSNDk3bGl5W29xKEIrQ31nXlZXMD4rTmAjMVlNcWduVWVTQ2tkOW0pRDh9ZEkmeiZKbSVNR2t0L3cyRG4oMzBeNnlJ'@;
put 'OUd0ZztgKzp1eyhOKnM7Uk9KNyJDPlZMKUpRNmZXSS51Vj5kJXp8L21dQVRnZ0M3akR6amlyI1k+Rm4/flZfSVdYNHRNTj9qcWZ2QmNuamRUZkgyblZYdj9GWVFdaV1KQUYyXV1eK1AsNysjbjhhdSxIRzFWdHp3N1F1Q2JpKCg4OTh9WFhEbGJEJGQ3QFNDIUk1LnsrNk93dHhYP1Q6biU6SVg+'@;
put 'P3cybnxSInpMXSFRV1VVIV1JSV50SnAyXmNWYEE5Lzp4VEtZUVNLZikpQiYsOzR1T3JtTkJMUF1mQmJyaW90cVlbOm9fMzJaVkgzLkl2eWRPJGE3UGsidEN6PlM6d1V7L2lNQml4P1ksbDk+fXxULEVfPVl3P3ZadkA0YzkxdWNHeC97MT02TmJDUGk5SUBVWlBeTV5WVjBdaEM1dEdrUVNwb2NK'@;
put 'LmR1TllVTnJgRyFmKEVqfDFFKUwzZ1ZIdjAqb1V2M2J+JWt2MkIqVUxsY1pkK0JyTEV5XyIqbSJCbjVCL3A9L1M3P0l3dVY0azl0O2QySDVQPm5qSC9fbUJSbyNLe21dTlJKYG5rKUAjLm51VEE6PUxOWHYzWkdyVkhNOCsic3hCKkVPUGwzeHNPM2VlWSZWITxNcF5Yb2VZcCYrdiJXVTg/KFdY'@;
put 'ZCZnWHMlZGNyeHU+eiN4Wls9O3lkSjFSPktFO2ZYbm1iUUJrKVNRcEhZdWcia2RoWX0qTX1DPVIkSnxDMW8pOThOWU0vcWQ8JjRPZD13ZzpkSCN1KypOTz8/dnEydzZEYiE3MjwlQyQldTBFWHE4Mm1naWl+WFUoQTFTPUxPNHNxVFlsXWguNTc4OXdOKih0KDZTOmckUzRlZ0dKXkVAOjNAY2Ej'@;
put 'IVB3KWdiWGdUeDBbZG8zYTw6VnBgUzlwTihHYSJUS2JMIjoyaUV7S1FFaH1iRF8rXilZYThkbSpRS0BoMm0mdWQkYlE5c0YubDddcl5rc1AvTnZbTkdORUR1QF84SWNdM098P19MRWEsXkI6K1kpX0o9XTVoWz5XSjhVfHJMN3ghRjl3Zyhbcj9fQnlOaVdWVnRKInNXdEpgQV1YP0o1L0NWSEIq'@;
put 'X1M+e0d+MnhMfipSNUx5Q1R0YnVtPSFFVF8iZD14W3REVSxHSXolYSxyRzwxXXtackZ9eW1aflVNUzBGY3BDIjhjPHUxXyRoeztCcXkmfisvWHFrNVVOInZGXTY3QFNzM1NVa2E5OGxTdSJ8KStzdHpbMil+SCteJTl7KSU/Zj8qPzNVUENSL2F1eiZ0ckpDOGE9U3Z7LjY0QVk9RTV7cFAoUFZp'@;
put 'OUd2OUl7O3xPSnJ1WmhYYFpNYk5JcT1iUlJRNFAxWTIyfX1pN25mfTZQa1gjWHUuSS88XmRraGx1IzMlKEE0U0BfciJmWmtQWHBMaX1xJip0VmFNQm93c1tAOiovO3gsKClZJFpxKWFSZ1IlVkMofXw0S2V+NVtnRSE8ZURnOThYUVRjU0BoIl1ZViswRFpoRS5GI2VHK3ZYKTYrNltjMTBgMlFV'@;
put 'MCtaZW40emUpZ3Q2YV95VHEyUTh3NXtsLDt7UVB5dCkieXhJdUpgN253K3RlLkJYRDQmUFMiQkwqPmckKihQWkowPzhDRVdqcUA+e0pnbz1VejtAP0spaUo3WnY8N0tqWkJISH1hbVVhUExNRFomM1dHXWAxUSl9aHFnOE9HJmsoI2I7THVAc3huRHFkcUJ3L28rZmxMLm0jISY1JVFWc21ubndB'@;
put 'SmspQ3VGKXB2Z1cjWEAmMz1QdnFFVzx8Zk9hXmkhbi4sUXUhImRSZEBmPFU5dUo1OH5BcFU/dHt1YUJbPDA9XSwweTlMeyFbWjBPcDNnW2pFSzJEdklMX1dvYngqQHF5TEdjcmg+JiF8ZytwUykrb0piSFdyIzVnb1ApNFVUY2VrOE52OTdvVXRkNn0pbkhGYWE7S1AoOyw7ZFchJmhXbCFqa3o6'@;
put 'Xz5mTXR8VDkkK1RvS2hLdGpVWWdoLiNTMUZBbFQ9eSRkZFN4X0ZSL3ZqL3wjd3NJN3NsJDkpTzAlQGJsT2JIUDx+eix8KGY2Sms7dlZPdV4wUjJjOyp8aX5pLHptMT0qMl1bWHtvWm5ZVVooSzx5Xyx3SiF7RWM7L1paRldabnZ+Sj0+LzNLdz4jYCwzWCVPNWFScEwqdGBdNEQsa1UuZV1mWldv'@;
put 'XmhgcXhyJWhsOlA7LzExUlgoPCssJTI9RmlMfmQ/Nz47XXpjOXY1UGZ4QkY3LlVYY3ZHVG5DIyQ1O0cuQGNpcjRxbFJuUXYkYVhrRjI5RF1lMF1le2x0RXJZIWoyUDBeYkxQN3c2djkjJS57Y3Rbb3lmbmY1UyleUzhMUDYuKUIiKCg7NUd9Y28ybCRlbnhmWSMiYzpscV5uOGJqT2BCaSohbGN5'@;
put 'KFZYVEFjenR3UUAmW3c4WyYrX1A4SXcrXjVKYiU1cVIib2JEQm08dmNDSF0hZSNpVXNDS3VHVSI8aD4ySWV8O3RxMDFhWSMmMGhneWtWLitlT3NWRHUhPTEofFcsIVdXSENCXjYoWjR6UCg5RE0vOWMvQG5yYSxqKzsoYihXZ1N1THNxQWY8T3xyZWFRND04YnhbXigseSFgNl01eyk5TFh3dVhI'@;
put 'PmV9W3wya3ZMMSgzO2opN1g+XT1+cCNEVSVGX3FaK29XQz1Yfl1XRHdLa2NjRVsqJHE8RVdFc1RCU0hrX2JuQFtMPUVKUDc9MmJFYDwjIVpCI1JyQFBCSU09dSUzaklGUWsoRy5raS57X2g/blNVY1lFY1kudmNmbDVHOFI6ISJ1K2o6fiRKIih6Qk1mVEVCeUpKJDJrU2pjeWlII1JdcW5xYWB9'@;
put 'ekhxUy45YHY7IkpjSmxYRUx5LyRRd0NsbFVTd0l2MSlJV1NOelJvRXRpcU43MENKImBMZyE9Qm1CYzA7Y0dTWV1vL1Qhc3I9enp+SygsfXFKRGdnJm10KnZWPFowP15jc0d7P0JFSEMzSEYpamJ7fjZiIXxmXnx7OEtjZVtvS01AeDkiO3BHU0NnYWlVYjVZcDQ9P1Y1dEJQYCFWeWhKT0J8SHhY'@;
put 'Rj1gfWphIj0rNntbaEtLemQ9SSNkZTBudnpwK15BbnRWNj5WfURBcFg7LmhlUGkjWiVKPX1ed0V3dnA6TU5TJX51Sig/OW42c2xOQyhGeEt4SCE5SE9Rc0ZzaXV2NVJUV1VpRTI8SC82PGwpVyJJY1NARTNvIjo3aF4vQ1oiNXApUDpsQC9PX24oT0toSnJCN2A1VHZyeDlbYGw2Z2N6RGdYJD5G'@;
put 'P2d5SDF0aW1WdzdFPyZpQz0uKnh1cGQhQ3lYPiYyLzkqQ2g5MmMqZGkhR18/XzgzeWMqJnomb2pKOT8oQlQyRWt+T2VOIz5ZbiFzbyZbc0N2VzRePz5YQSNmTEdFVUp1cDkpQVhTNWVeWmRfTCF8eDduL1ZsKTFNJHs6bzNPUixyLzRyNVlRbCg7anRoMVlfb04wSktAWjpgO2h1WlVyZmBoWGgu'@;
put 'XldPbDBISXthP1Y7QCxBZi5BVlFXR05ScFtDXjQuVFAzU25rbEpAX2pGa2d4dnZobCh6VUZqY2dHJlpVO349SVd5YDw1RiY6Y0ApMmdVMyJBSFArNVhWK1t6aXd1JTNEcWc8cExwekw5U3NyQ21geSgvJWRPcFtYXkBYPjR2TVtvSFk8U1B6eX1CLHpdRGZRMVJ0TGU+SyxqaWxhNFg8MlMwMl9Q'@;
put 'fWxLLi9MfiUvckgvKysxPW5SKUVVNF9JTlhqX3g0TFlrO2hrWD0qPn4rMi4+bzpxIXguOGJ7NzR4Wz5JU0wjeW09RWUjK2w6eHN+TWUlKjZOfSJJNWB4S2cxTUd2SitucGteTzNeQy9WWGlgcGJESDZ8OUVTNW8lbzBOPF13P0JeOHduYFlIOHEwYzhgdmVtXV0vITN1YmdKRihWXX1dWE1ZMHly'@;
put 'InZ7SHR1TXxLYGp7e0xUM2BpN0B5RjNnW1QvW3IvOjlHekNfcClNXmwvaG1nQzxMWWtzeW01cjlFO012dFIiQUYwdmMsRTN4fm94T1UjZEI4T05WeXlOeWRwI2BkW211bzlWfiNrKWxDI0dYfkc4WjkvQnZFRlVwOHhfTlleUWZdP3opWCI2OVpUI3klTU44LzYrRGc8ZFFYbEA4S2J7RTc6QEB4'@;
put 'PGUzPFluJGQpbGtMLk8/JV04SXx2TS9rITZ8dktyRHhnPHppKDJDIXdbKGJ2JUheSmVYa1tOIiJPP0liazRHUGQ9Lz00XVNQMHEhYWIqbEhGa1UuWyE4TW47KlJ3SS9mUUV2K0I1PXZ9S356WmtBPEoqZjFPc11RbTgyMjtNdzc3JnEyfk8jVHhjYTRDd3Fwa3xwOS5bcm9TN2JpV1lQeXd1Q3le'@;
put 'O344Mng/VD8yLHUpRzdnaFAuK3Z1NEYlKnk1dHg+KyQ0SWN7N0NCZ10xYEBQfFIyMXl0Lmc+LH57KnZxP248bns4LDk/ezB3Pz1KbStOditNLzI1SkJ1ZTRUaGBMRGNjYnpjLzQrZ3MyIlI7YG80SHw+WTBALCNmY0ljYjl0X3pISjd6WyZOZCEvejZsdDdnUnw1dHx1ZitPaXozMTtNTG9bfVhq'@;
put 'cGRpRXEmOU9GZFR1Y1phM1oxfEkyRih0Z141MUR+O2dNTzYydSVNd1ZzX0NZYlledUJDcEFmIyFfbnZmMH02UDh3KnArRlYxKzAsYnhnRGojRWxSMHtlPEUhInJoXnhtLGdOSEROUD9kRDh7YCFscFhKRjI+OTQxai5jLzMlb21baCUvPVchdjhlSE9hfHxDO3x9SzclWz5pQUpqRzdyK1kyUDNH'@;
put 'WHc3KVF8dmdiV09VTE06PldndVR6Wzo5JmlhMVBTVVYwRlUhYC9ed09sdj5jWDtIVlhEKXVlayUmUj9TYHtuel0vSjJSVW85WyJOd0NMM30xWjhPY2x8ZVd3NCp7ODI7PkZtVnJ0V25IZH13NDpxWnNnMGJAYE9rVXtIPnlBeFYjZ1NhRmlURzlJPU9tPzZWazY9fTcvdDRWPDl1L2BSbTx4W0xS'@;
put 'IXdpaV5NMGhEX0ZCRyhFNllTPyt+KGYmVCVHeGVFMVR4OWRLcj0wPG12ZDNiblBPIjkraTkvMHIoJTErZnQyKzxdVWssZCE8Y2tnezZaN0NYcCNidTN6a2NiX2MqIT85TjshIk4xfXxlRT9wJEVIOkRoMGVJPT1yRiFsdjBteVFOSVozXkNjdT1DbVl2YiljZl5fRSxFeEw1KSE9MTR8dU8/YTpQ'@;
put 'JFtIanBnQTFiRUxacmxebDo1RC5OS31zOypPNWBfME1Ud0Z1dkElQnwuYnVLOW06U3VLazVrfUpCNlllRz52PnF1Q15sLihXZUddd0ojWjxsPHM6TGBiKURlK3B2LyQxclopMVNzPSNWQ311eVcsaWR2TUwpdXFKUktzezIsfnp6U1JMcEFDKTRJNkBMRS9WdWkhMSpfWEZ5PUw+JGkpfUwhWnRK'@;
put 'OVJWKn5XcVtNZHk7YjI0UkRCIlJ6eDw1YWB5ZDhhckxqM3VETzhDUlQuS1NDZ208SkU8SzBxczRiJnZMYG5HbFA+Sz9QLyVxKV1gVigyamZhTjtnXUdWIXNaVGpPY1NhZGJXJiU3aVZne1JZWVslXm8hZkBAdHNSQ3pRUi82VWZ3UD1xZnxxOFRiOGFePGRlZEp4LDhWc053NGI8Zn5sXls8bHtm'@;
put 'ZjE+OkBXWVBeO2Y/IVJHdGkyVSpeLnA/WyxWRyE6TyVkJU5wOi55fCVFTnBdVzB8SGtzb2d9cmJRPGFUUzRsY287ZHFvfDc0MFJzYWozV3lsbmZBdWpnRDAjOTRAaT9SZ298LjIoXjdlOD1OW1NQQCErfDxVPTdhZW9APEkmW212Um1oVnhgP2J3YC9Zbm9ZYTh5N3JwSDMyWlV+bHVdPyZtMChn'@;
put 'VX1raWlWdiQ/LGJFaSY5eTRKJDUqQlkpT21vbHpwWylbXml6fmQ9IW9jNi5JYlVheCZjVyF+a25MYD1MRCV1ZmxiPFEzbD8qZ24rOmZZWjNjPjQ6ZWheUF4lMFlMcm05cTFdeXVyQjhtKF5FVVBUVmEySUJefjoiIzZrPTBrZj4xNEp2XiR1a2VLTUN7dl07M3hzbUtXc2smd0U/YyssOXlEO1NO'@;
put 'MFlpfmwqejByODB2OlpBbCVnM2IoNUh8QSgqIVVrWipCQWBjT1EqeCRubm8qfDRIO00oJWE7XjlNOlR9TT97aH56Qy9JRTtbND16MiFWWFUwYlBSfVs9Skw2TDlQVV17dzBOclFvWGchaS9sP2hAVD49ZUcxXnNpRCgiRD9iZHBxQHxsTUBLNnBgKVMyOz1UdHNoYUhAaSl4XWlDKGoza1RUcCVq'@;
put 'UHxOTTBrVi53KCopYCRNLEUmKFJzX3pAVGBmc1Z0ej9hZV15fTh1cVlDIyt3W0pZd2M3ZklFNThMUCN1c00rdXQ2N0MvIT5OQn0/bHIwfGQ8PnN3OV5aPnBgKC9DeVsyd31dXyUwM15bZih2Wkk4PiROQVEiVyVqP2F1SEFoZGUjaXMqIVlpcWFddWNnaWtra1N7WlQ7YlshTlNWR1R9fGBpO3Bx'@;
put 'MEwjXmVZbjsxLEQqI3ZuRTA9Wzkkei9DcWlNXykpUSkoYUNYaGhYJnc2MUxuZztQXndpci9OSE9wZ1RHV1RpRTg3ai8qbGNVWW5tejkmPX1LSEIme0QjaipuKW9iQ2AiVj1yYSV3aUMsJSZ1LlZCZDovPUddYClyI2ZoI00lRjJtJkBFTGxrWEIkK3FJNVcmQG90Ojk8T2pCUF1JbG5YLCUyREgw'@;
put 'Vlo0SXxuSSNkVixGPmt1RkJOI2ZWSHZdSl1SLlZYMEgjPjwmMUUkXU9kPTdKPWZidTJQPVFIZTNkZTFqVWZtNz1VbVlMUmlyZ3o7NSF3QiYmQFJETCRwR0hbYHRUNUFBUWdbZiFuUSNkPUdCZWwubCl8QDtjY0VYZXVzbnRxRntFaTpZbT84MTBYZjdTfnBIenIiWW9IOVIjJnZES3E4WyF7a3xZ'@;
put 'Z2tkJEZqS1J5OmtdNjQ3cXo9MiJOTHNxU056KDk1Pl52Pkl8ZFIjYHJMJGRbX1BLYTk0LmhfOyUraTUrVEhHM0w8dmU7XWxOd3JNbT1jYkhkayluR1ZPVzJ2SnhiI3FPfDpjcWlEV3tuKF4vNnouQWBIRFJEbG9pNCl6SSZtNGJSRzQleWVgWUttNEtETlRlUTpDYms2P0Z6enF7Qm8zPS5mN3JE'@;
put 'NGZWTiQrRyFKRHZUb3ksfj5XY1Q2WyR6JHQ/Llg7KzJvOVc0dFp2cCZhbjNbP3ErN1Joek9LNCVKXiVZYnhOKTNDLCgvalhVXl11cUkyaEMlM3FOcExBdllFVVg/PUA5JFt5c1hlTSJjWVJPQTU8PHA6KVJGVzcpLEtYTjIreUklWEhvZXg+PVQhJmNwNmFTcDpWVT9MVFIjciwqJXp4ZCQuOkpL'@;
put 'enxybWE5SCU4JEBQNlp5XnBRdGxFZT49LlBjV2Ftb31qRSxeQ3FufX5rS0F0O31zQjEoVFFaNC8/dmVxLjFqZkJbOzNERCp8Jl1bODBLIUxbKWV2bEFDazNgXiFrYUNZbD4+OW85dWQ9QWkiY18zIWFrYng8RlM7eSF3KDNUUmJ6Uz5mMCRHWGM7PjE4TkV0ZFlnKCNUTXVsYFowe3l1V20obGx7'@;
put 'IS9ZIlIzXjJtdWcjLGxueytWWiZKU09zQHBtcllhYDlSS1dIT1NpfGFQTH5PWjk7RVRTWTdDLHx6XjMvd1VHZyhWQ08oKyk9I3RMKyxnWDFxWkpRdX1ybWAvJkxDKjQ/KkltaCFuYWZrUiJddkA1eGB9W3YlZjFBSVNRKC9KQVh5IjlTV1BJY3lYSlB7QnthKTB4YkVUVjR6LClYKUpuWUxUO1Vu'@;
put 'IUxAI01+MXVNP19rVUhuJj1GWEo+ZVErKVh9UGZQQnw2OCNxQmZxQW0je2k0LFZfeHowJmlLYT16UlJ4S0FmLkhBZ0pxKWVbYjkmU255ZDU9N3UhfDxLVEo1bFBxVGEjXjdEeW01MTtlPG9Xek42fFp2RmEyelE9WWlFPGNxbytpSFJpJTM6VzdAengqZis0c19eUj1wUnIpRTU4SEgpZCl0V1d8'@;
put 'b2BVOnFMdEBAeGFnfGp0TTVGajRUbik1ITA2ejhYPUFIPT5UdD8iKHlrITwhbD1kZnZGSzcoInQzPXZCLD13N0UpRjpuU0Z1ezhOUHtNdzA5XXg9WzxnI2JHIjQ7YFA6YDBoWUBwMUFJIkRYLCF1Rl9tZEBKUzE5UmVmZngsbX0ma1VEa2VFITw3dihWKmo9OE0pT0RLS04wJGJdRG10e3l4TU01'@;
put 'aXpUIl1sOVcpLDk5QnI8bUhdTC9nQUtVN3Q2W140eDszbHo+MT5lanxGJDBUKXd4NmpTQnY4OjJaMnlBbWE4Vlh2LlYmIVZzRT5UfEkwWEhmODI3ay5GdT9VPV4jQSpDdDBaQUFieHtqNzREQjJtKTc9UklGIkJ3QGl5QkdHaDdCR0N8WW54MVN3USxLRzFZNHw8aGZxWFRIZ3JiWHtLSixvdmda'@;
put 'fGh5Z11EPCQrT3lnTXVTcC9FRThrTmNyb0VbcGIwcjt8MU5aVl5NazFuMzs8JiFQbDslfl9OWnpUVixmWzFgRiE6PVdnPjYoNih6OWxnYXNbW3lOPEhPKXorNG1kcV5wS358ZUZ+V1crfmZ+eiRtRD1WNFQvUzZabmEwZCxyeDVJdWFZTXlWQH5KX0lDKG5iLE1Me0ZJdUR3ZV80Zzp3RVJaaCoy'@;
put 'Nnc2JkovPktsejtkJGZxOlN0KUpxMzsoNCRscGdRKkw9Y20jXXhTfjl6Jmx5LlhESDFUSE1CI0hHKCpKKHBhJWRHNmVvcjMwO3hPUkg2VmIhQ1RpeGlBSWQkPCpWMUl5eFZZVSRNIikwVWcleCpVZnlkUG5GI0VPYHlfLipQNigrfEI0UD1HIWBFPT5FXkA+cGpjeXFgXnB5PSxTeFh5IVRbR09q'@;
put 'cUU8KUhNdjx3cFBGQHtxcExTaHA9em9KXVpqNEMrIWBWSz9gV0ptMSV1dG1wJF9AfT9ZMTZ+ODkrMkdGYFYqbFolVEk9NHVOaF1mfFRbPjg+RiJafHV3QiFvRDdne0drKWpBX1o/YGtdTzpsJHlUcjY6Ujh6XU1hJHlDbCxES3hNYXt3PWg8flpYLy5wVTJJQUNTNlE6YixXVl4hP3ZJKSpeUlU+'@;
put 'YmM7d3R2XXBlWyhbLj5MflFPWFJAI0s5dypdb3grUCpZK1F5Pl82YDlsX0RneiNHbG0pTmlrNF00V1AzfFBmLiV+a11wK3I1TzttdzMuZGNzb0dBUWR3a0IiIWZFZl97b2RxRlI5JXElKWNwNmdWOigiNjBWbFd2JX58I1ttW15xe3dMVnVPd1lITFVAZFd7LGc0SE5TVzdGSXk2S3lLU0YkZVNn'@;
put 'V090M3F8IUVONV5gXlFacXtOIkVmZDlTLm5eZjorYUhie2F8PUpwXSxvJTkzaW5IZ0lFZmgqQyZzNG8sZGcmfHFiPU98UHF1bUJOTl1bQmJuRHNbWEhIbT5VVzlBMkNddipFPHpJNV8wZiFqOjVJViolcTlAZG1PXS45d1pVOmc1Z2pTbDVgPjNQZnpjZkUlRSgqJUMwKDUpa2N8Sy9SUiolT1s6'@;
put 'b1VrZkJLe0sufSNpKj1XJlhjIyxdb1EjRkg2L0pFZz9JdzNqR3JOLFRRI043JCNCUE4sWFojfnBDQ3NkRV9IWCJlMn5gR3coJV8saU56d0dvflpKZkZKSypSXylGQTVOT2xodnoxN2tWLlo2eF9DU0NNUltyezV+NnI2Q2JPfiJKMl10TmNKQGU7XVFFTyhIV3tsNDUpU3EhRHBeU0pjTTxOK35P'@;
put 'cTJXfHdnX2hpPDpyX2dKKiUwMnk7cFNDc2gwfXQ0cHozK0doRWU5ZjdvP3xsYz5uRF9iXj5OYGVZcV1TZXhdci5jW0tKMzooWTYrMT9RY21iMz1WLCFNeC9+WmIzekJ0PE8mbVs5UDQhW2ZIIUpNJndRbU46MHphLnUlY0ZJKFA4Y0BPPXo/bSxUaD1QYHMoME1gYmBsNH0sU3UxT3ZaVTcxWnVm'@;
put 'QVdHflJgNER8RFIzaHFMbDR3YDhPTEIpcTYjWVQ7MUQuKUV3NjskbF0+fk4xXURofHg6dmd1bCZiMkNXVDZNcV9gaE09dT0/Zzx2S0I7UE14THQsO1FLRERAdF1XOEIwO2Y1RHU9ZFUjcmV7cCs+TWZhQzMyOjFkbj8iUmVubUA9VUZEe29AS1l4SEZYYWhOdHxbVGZ0a3xCdGd8XXJPZCVYN15K'@;
put 'JDlobS4uL1NZbVldV0NNKFphNUEoJFZMZXBzZFBfKkluailEJG5NVUk3ST15I0pRZShVeEtvYkZsdUBGeChpfVYyIWRDJml4NzcoeCEmNTJHLkIwWDE9bmBrNUwxYDpLUFNqJTZhJDVBJEVjfmRVQCxiay5+X2QqeXYpZDxbel9ZUSEvK1NFVm0wMTo4KlAzfTcjOTBFQEpfKFttZlJoMjJSYXNt'@;
put 'NylpUV15K2hdYWFPRTBJYl0+diw9RyFCdFBGcHxlWCElekBNWVoobmBNWlg0bl5Ncik/VVcofktHR29bcDZ9K15rdWIjb3hWYVc0X3xUek9DS2V2byJSRiE3fkAkM0UzWzQ5WThWfFl5aiw+P1F4KGBYVFRXRjs1dzMmUX5sX040cSVhfGxgYSN3bTRVUHZKNmd8biliNClzPm8sL2xFb3M+WHNx'@;
put 'JXdtbWQkKUFKVyNEZEU0d2lgYTl0NT5pOHU2ISkpPkxCUlt1PFM1L1prMyUiMkZBeTd6e0lXPzszMTFoMGY8fTA2KDNucEFuSCxnTW5fMVBYT0M1RWU7YWE0OkxLaT1AN058aDRjPm0paV9yRFpnIVBrOFsiS15hZ2s8by84RTNNaGpgNltyb0dCXz0haENFIWhRVGlhRkdMQyRiMFJtOj1lcz8u'@;
put 'aGZhak47cXJvVXopNDpXSkF3TWJLL2hKUnhIPF9Pamp3eUNlKWw5TEghcTI9enhDMnQrJGV9SSxPZjR4PH04RTklb20zJFZ1eGhpb0J1KkooOiVyNU47a0w0PlNSIz0sNmV8QWtPKipoIlczJnNzKnZMVTlaLmVRdyZiZ35WZiNGPGQ6TjdRIjZ4M1VHNH1Ndz5Bei8hS0MxSy9EPHMqSjVePXJ2'@;
put 'PjMhW1Nhcj47ZG1kTmZxOEZBd189bnAvNSM5R2NuWHU8XVFkV0RROTxuNHViUlt4eHZkam1VPTlIZltCUShhOnNkUDAqY29lSXRaWj5TNSY3eVpVR3YiZXJfInIyXzR5am12fXBHMllpaX1DZGNvOWZZaCtMV1lHeTdoSypfTX5dTShTZGZkem5hZSVwZ2E8QHVfXWJeYTZefTJXTnNGTk9+bSxU'@;
put 'YjQlIiYoanUkJHs1MSJlc0hufTE6UytoQktWJU4kZ2kxMX52KzxULGtjeTYhUyEjWDQ9cFs6ckRpV21AYTgxeGddc35UWl9MaEoyNDsiKU96NiFuWVNGZGw9eXc4UClaWFBRKWdraXd+ZyVoK3NXWl1pRVhKKmhkKG5qdG56N3dffF0pOmtAX2YhU2ZRd3xGITh3QT03PjteR3o5YFB1UE1tUXk2'@;
put 'V08yJUddJiIoRURFYDBxVlQuNWMjYiZpYXxHWFZROiM9KE9+d2JnPU88QXMsfiU6NyxFUFtfT1RbKHlTXX0seWAkV3hUWVk1JHw8MztSOC8lcEE4Ryp1WS88XTFmeE4lVkcwaD4+TTRFL2VvKzwoIzN8RiNga0JreCNtRCxIdXhsSEd1RypJUUZ3Ilg9UWM7bTZ+OEI/YVpTZUwjJkhUWG1fMEYp'@;
put 'UF5WUysuSjxZWGcrfmFAb21tciU2IjVrYFB7Wk4uLE5xZCY8MXc7L24rWzNnRn09MixNVGtwZVVPTXJpR3cuZyt6LzYqeDtATlhMTTJ4Q3IyL3NUczFAM0NNKysvLnV7P2pXUCZXR28hWVJ9L2Nfe2s+ITBXdHl5TztnNzFIQCR7anJGaDI4TU1gTnVkMWVAWzg/IiNuc2oxUV4jWjJ1NVJIdCZd'@;
put 'Vl9AOHRySGw7blU5dk44WSUwP006biFeSUhhTWtvUTJsXiZUflo9aGJTLmZUfjVLZyRDdE16YDJUaTJNNVlFLGEyJnFQJHZJPChwO2lWU25obTcjQVVsTkJvOjJdYDI7XkosTGYhenRdWHg+MT5DfEV2TDxQO2tlRylOVGMmQCg6PlBmOXNwR01hWEBfTXpoekZJc0w5US4jPksjWDQkS0o7aHxm'@;
put 'ZiFvcl5STiUpKD9Ncm95MDdqMEMucFZSSGh1ckhwWGlmRmJTdGgwaTA4enp6clBXdGVsX208eU49QVlOYEo3T14iPmEjQG5xbCxZMH0mS11QbjojOHx0fGdnWD1UZSN0dHA3TFRYTzBlOXNQUFZ6PkxPWWpffjJVRyNqczl5IiNwcjYmTzxvSk5jd2llSHokNCZMKjQ1WCprPWVERnVNVTU5MWA/'@;
put 'YnhNZHkyW1ZeMVZsNFFqWnhNVjgoNEVWQzFSdjh9TEwvZ0UrZXN3bVZCM3siM2g9U05ebSEvZWZ8WEpCbGBhK0ZhKjcpSWVJcFRkVENpMykydkNjMnFbRGZPVnNiP0tHMWRCJkd3TChMRHp9Rk1tckouVWRxM10uS3VfUVhzSSReNlowazheIloxWm9QR0RTQDtsKVYqPGFXOktVTSxYZWlMQTYz'@;
put 'L0B7aG1nRk1lTWgzfVEqKm9lLCkiRl85MTpNUVQyaHJUN0oiOlJocSVXeVBdNFBMJC5fPk5eVSRReUckcG1aPW1tIS5+Ok5iSW5sSFpBa0t9eSxRRkwrSihTaF40VF1mRWU4dGxTXkg/ZT5PL1lAXnxCfHpMOHxJT3gmblJ7VDZVKzA7bjddSm5IUXZqUChyUiQ3TjIrOXZsZn04Pm1gRGl+MFNC'@;
put 'cGZFUFNHMk52Y1d0K0JBZUVRNSZ3WDVdXllMTkw6aUVeZWl8YmhQLzxCSi5WZTBAWEZqVj5zdUxlcztkPSVKU11NflIuOzt2WmRBOFpFW14wMDEkXUtPNUMkPnFCbVFmNyhsfkd5R3tnJk1Rd2wwP2BiLzxdVHhwL0JsQjguczxUYHV8VD1JNntdfipLfitjZT48IyRZRnNBVUIzQjNPTEI8WFZf'@;
put 'a0QlVWBJOyokNFcpMSliQCR8PCU+Tn4kRXpJTlMiTn1nT0J6MjI8YXFlSjwqayNHcStkNWMqfmg9MWEsfXUmaStnKWxENFtoJmh1b28yZ1ZJbElCWXZEfDQ/I1JQc0dOcX42d29TKz5uaV92VUtHS1EqUUMlVD8lflh0K0w+Nk1TL09nNDR0VyppTm9hT0RDTl13MHNSaVkoUXJVMW8mKl1QIm5q'@;
put 'WFk3ITZNNzN5JDZvfEg9NFhpUSVAYGtGMTxFTGRiTztqcHQ2JWomZy99KSU4a2JaSzIufTQyPnkkRSVta2o2c1NpX1s6NF04dS4sYiJET2Mqd2xaImBhRj1qRUpJOHh2OThLLD1yS1gmMUd5LGh6Z1d3R31OQGJdZXVtfWh1QnpMUTJPd3NqTkRvS2lARTcvcl58JU4/JntHbyJIe19ncGEyc2JS'@;
put 'NTd+WH11TXJEPypWcmtgX0lad11MblRKZUpvSHZFTWxYRmJ4PHxXSy9GIUNgYyghY2EkZTh5RFI0LHJfRyZXeXVscVZPdGg8X18jMGkpVjB5dysrPUhUKnZoYFJdRFNQbTwsNE5YZV94Ujhddj1xVyMucFRvRExxUWQsX3s+cGF4WiNUWSp+MSNUUW4sSUZlVnZeKT9tfn46eG0iKWkzelBUVW0z'@;
put 'cy9IJXJBWTMuMzo1Lzs9bnxQQEMzfjI3KzQzMjRLfiNVJj16Pzp0MXJTYTpQYGNlODg8W2hdOCY6XUxZZkxCLHlSIWJZO0UhT2VpUmN8ISUkZl9pSUU9JChCLnZ0TU5YOmlgR3oqdkNJLz8mM3JgKEBEdDZVOzo5OU0xUEZuRkZnd0ZqM1hPQH1YZURwbnNyPXI0cTU+Un5AMyNCSUVpZm12KFks'@;
put 'Il5mTCEwImp3ZmcoY0lUd3o/NXtLInIle0pRWVlNYTBpe1ExayloYGkqeWZpTX0hSDRGRn58JFlUSTZhJlNKcmRjJVc5XkBuJU5dQ3pQJGJSOl5yKjs6eD8xaEFSaX5eaC4wQGgsfCFqdypdVGJeQVI9OS5HWFU5Zzl6ODBxU3hCQSFoS0FGMS44WWVAY0ldfFMoNTR+MiMpSiUiUV8yNV9kdyhV'@;
put 'SlZNe2I3S3VMZC42NWQuci9NUUhvYF5iY0J1IlIkQC54TCtlR2xKZEgxXWowY1JYXkxdQl9lImlLVjssI3p5LGNYIWl8T2JPO1oiSjgjIlN+QDtzQ10lQl1tfFBVcUk/dkRnP0dka1MjeGE0bkp4XW9gU1p6cEk1MXwzUGB8VDI3TUVDTltdIWpuXi9ofk1PJjNZKVFicD54eTFtYFdnJD1bVzxS'@;
put 'KDBdamRWKTRiPVNgVWpefVZ+X2hMdmE7d0BIS2VNeysxXztaQCF7L0peYzVKIkZZMU9XTnIyIXpdL2x0WjJ6KDZuNTV2QmpsLEx1dFFnTSpxI3l2SzRfUT82NFdmU3VmTyV0eFsjWCQ+b15uQik+Z3kuekQkLEhCYDBTNSV4UzBIZEZZPyNdTFcuLnp1OXRvYXw4JTh3Pjkqb2w/Ui5Bc1cqW3hU'@;
put 'VD50Q0UwY2BHTGk2fHdkM2NNcVZbYUxjYz8kWWBLdClfJHJjeXRdYHovMGE+O2A2QiVRMGNoNmJlR0JjZF0xOnJ0Kk44Z19WSkh1XntFTHpQI004NlgvcSpGQkNAIWg6P2FzJSMwaWloX1pOKjlsITw/fllDJEpZezlTMEp2Y2xLSGRzTz93QjU7L2N5U1c0USRqRCVydnxVRnRENkc8c24uSiVC'@;
put 'OHx9K1djL213UUR5VFhzNmQobUttJSgmUz0/d2F4QUF0SzhWSkQlUGNXOCplOGRJYk5belB0b3ZDX1ZIYEFPelhqTWU1bjZZT2lMMVVbaE9TS3JSRkwwKitbYXFpMip7TTlLKjF5VTl3TmwzIyVfdXVMfn5iaT1GdU0iVD4wPDFYL0suPFdnVSkjIz8jLFFNdnk7XkxyM0R7QWV8fn1Dek8oTGY/'@;
put 'ZlpXUig4ZVtkWF56cU1zeShNIXNLSjJWZlpQSHMjTz9ZR2kwREQrPDd1SWkqQmVXfj9IZD94Yi5DOjNZVXptMWNAbi4vYCV+USg6NUR0K2ZJTi9eWk8jU3FmQXtwdHlVSlY0KjJwciRMTzBFMzh5WjRVKFRvUDc6eDBsL3NTQjh8Z2c5Oj8vMFRSJVN4eW5adVUpUiRldCE5MH40VFdPSUFXKzlR'@;
put 'QGxXJmMxUGkjRSUwNHUkLy9mR0QmY3FUTDhjc340QFM9UF1VPkpsOkMxTGNSZU9wNWIyUG18UD09RV0/a3cmXnJ7O2kyW0VbJFZuOnZ8VkpPfHtET3dzMm1FYEdbKnQmOWFiP1BSe3UkJGpdNGI4dWomVmFQQTE8R0clSU55S3dKQzszdmFfMiZvdW8lIURuZThFSTBmLHhCcmlAZnJ+PzdyIkoj'@;
put 'VDcqQG1YQTBkfCtwPUJmSF92QyZjRkxmYCZwdDZHLk92Sih9Q2RuSDopYSh6TG5+bmlSSWRvM2xHfURASTtnczAwOkBecG9WV2Y4MTU1ZkkxQHUxczQoLHA7O3VfOUs0Knl3N3t6T3M1KnVYSHZbM2FiczZFMlYhdExrO0xMe2l5WjUsRCpvITZeR0dqfDduc1c8Zi44TmxAe3VHMF5YJE1rQCFQ'@;
put 'RT5OTzc2bG0+cWFhV0FrSHBGNWIqZUg4W30xMWwuZngkJlgqdyJCcUI8I3I4bXpMLkZhdG5jJFg+N0R7d3FbbkslJTdRajdPQmlxb1tNW111RTJBOkAxM2sjbS9UQGtVUTthYlFJOT1CVCZ7MTZYMXR9eCMlJldtKnRFNjhFJXxsbDhSOTRvcW5ZUX56M2ZNPERHZG88SHtYUWA6QlNIfnI5MFFx'@;
put 'OEVnNV9TcV4oRSNsPUZUNz8zKmh0ZnhoSTJnM3lvTWN7O0Z8RylvZCpQX3IoTiY2PiU7bDo/d2IxZV0mWnpLQEtZRHZua1tubiRsdmEiYTFhMkhaPEJMWFdkclpVX1J5ezkjOkdmelModXhIK0h7MmdCRVUsci5HS1NHO1hySyJXZzNCflROeV47Pi9xQlE2OipIUjslcXpmZCp7dyZsVl18ez5P'@;
put 'WEtsTmo7R1ojTmZOOEIuJG1HUFApPCREd31JRWtLKiNkMG9eSDUvKTN6VDgvYCo0aHpDUyRTKDlPaCx6K0lCUlBESEslXldiKH1Ra3hQK18jNmxzOXZPITcubjUhTyE6UDduPExIZlNPXm5VVihkalBEI0g6OmhvZGNvTjxYMzYrKDRXZWArKFtGejRITCM9ekN4M0YxTlVNJndAfkkxd2F9O3Vk'@;
put 'Ky9sKTouLElQa0xGMVR4MXZqRSN7JntDcntoLEI3cVFkYTMsdn4xMHlONyoqeFFbRkh0eHs9UX1eZzNSbGpCJm1xLnJwdT9JTmo1ZS95OExRV1JdeEVeZCw8RCxpbE5kPXkuY0ZTPS55SzxuIz47diJ7JkA1RG03R003Y3xCZT9AQFRYMko7JiRuVV93Mit5LGs+aFEyVDBUPH1HYGhVI0tQa34l'@;
put 'OSx7PUB0PTZUZS81QGUpX2tNMiJKd3d8cnhiXlZKdTR+VmJFJC8wKDkqc0wsLk5kSWUiK0BtMkdpIjo9TCkrIkdbLEZpZk8pMyxjWC9tLj1HZk1YdE0rZkU1TEdCXVVjQnpZazQ3SHhQPEYmfWdmPn5wYkx0UHVyaj9CSHJgYmdqeS4xeFNgOV17Imd1WUV6Tz5OQiYlSWE/QihXREAwdVZlTyh5'@;
put 'XS5UN096K2pFWX0mbzZUaTxacFZuNy5jNVBLRFlmSU9edXxRczZzQ2x1OlVGQHFKOXBHRiFPNiQ9Sk5fdShtVE9+dUI2NmgoIVlSK1ZMKCEqaHszT3l6JmNeOFQoSHN2dFZ3RWYsP0RlXl5sZyxNdXk4IU85fFdaYiRySEMmSzdxRz1HUE1xWmA9RjE6YTNgRkg2dyE1Lllzc0FSO3JFPnBgcF1I'@;
put 'aHd3VUMubiw/aV5ze1AufFs1OT1CcGoyMCxVajZGKVhbbEV1UTtCXkoudGUvTDMybFd8Tkh1W2Znd1R0fG5YI35eVEx8XSYwNlBPI0pBe29OPkQ4Zn1DQGg4Q1lFZVh8eS8qKV44WDkvMSMjbC9SXlkhWzI5PGg9V3tGJU5tSTt4JWM5eHdlcmk6RlU6ZFlSVlA/WkQ4Y1YyZTMhNTo8ZDRROUds'@;
put 'X2JFRig8PHkyPWV7NFA+cUFLXVJrKXs9TzZbV1l0eHZgaH4vfnxAY3Y0cDc+T2BZOy95SkBoQSM3fFFvWF9nXztvbUJZKiFSQV08Kjc5PCN9L2RfWVApalo0Q3VQJXYqSnYhfXA0eFc0Q1hAcDpPeixTd2NQbEc7VV9sbVRyemh7SElIIzhQQCNHdXthOEFwST5qLCZ0VzpldHMoOS9yZS5Gfkdn'@;
put 'RFFhbCkkUmJ0QT0sT0d9MElxOCMhQnM2NDdPXURRZUE1fWR+IVdrV0Z1aXQ7VGMlPiZSJD1nVS5uZyg/QnFTJjZYeVBpWTZvcTJrKzBwNjNDSG5tSSRdZH53NSZdZWY6KG8mVW87WFRTOm95KE13bUtoZ1hSP2lJcHgzZlJ+NS99RHE+Z0FuX09HbTJYfndzK3xPbEljPVlOelpPLjxoPTN3XzZi'@;
put 'UlVFPWlObTlteDBuJUtZNDwhNnBYfG1PI1QodXBENW0kaE5FLmtkNVZjVTsmdTZ3anhyTlFwY3txb1kmK3FpZjNbRGU5MF8jaztvZUY6Il1lSDh9RT1tfXh1LCNWPWd+LE9sLnQzIXY7PjY7W3UvaU5eTyJGazl0QVJrXT9UTiJGcGJzJVgzP3F0bGg4U1AoLGp8VHQ+VVN3SFtNemQ/UnEjXylC'@;
put 'dyF3Rm1GLlpZYlNUYy9aUl53LjJSQ0dlUyw3MHAiK31IREYzU2tEZ1BRR1t3SXNTe0JIUntGJXQ3YE4+Q3BqSmZzU3NIYFl0W0huLjRfdUA2NkVnJT1xIVQlZjoyTXgiVyF3aFkxUFYvTFtadFt+Pk5YMn0pPm9DeVR1biV5cGc0IWIkT0pPQzhaMDYhWytdZTVGYTgrRWswd2dXXVJUb3RDKEE5'@;
put 'S1QyZXBFVUI5dUBqYE4pM0dERUJffk9Ze2B7Ok1eNEF1OGs0XVBIOzl1d2BuP3pJeTVJKFtuJXJ4bnwxe29nSDZBJnVWUE92P0cuV3khK1tpQitjXmRDUj5JVj05cCJVW3VbTTksIUVrPD5Ad1ckOFFsXUZYXm1mInAld0I/KD1mJE42IVlXUTxtZjVRKntbKTczV0dyZGVeeUxhX1l0NGt9dT8s'@;
put 'TiEiMSRyRyJfSjROWldMbVhuakNaY0NHZSEqOiZgUWI+LEZ2QjwyfilPb1VrMWFAfVo5b1VeYyhJT1g6LFs1T1ZhQmQ1OWZEOVFUUH08TCV+TFYkTmBtQVhHYDxgSnc1NjkuKi5IMkEiVit3Qn1eZkhfaUh6dEh0OCU9U1MuMjJvWnU6KipOI3xvTURlVSwxJi51aWE8NCs3UyM+JTY4c2NVWSFC'@;
put 'I00le2twNFFKPF1kWTlPRFRzSU5jX2AhZVpqJVs/U0ExZ21tTXhMU3slQVRpPCtwQWVWZnlLcjlLNV4lVGVBUUxuRlRNL0NhbSxNLnIjZkpjV0p4blk2JHJLczN2eFYrLy9VRVd8V1pZbT9OVmRgXnlkVUlocGAmaWMyX0dpSERHKzEkTWhYeyIsdjNBRiRyRmhiaDtEbjQ9PjpZeD9BaSFwOnoi'@;
put 'KSJ2YEhOQ0ttTnBUJiRnUF4jZkI3JGgsSngrOjdiS0tWMCRAWzpKUHszNCtOUERUYXUuKE5NTE0mYWhhdjFJbkw9aCVgM2VpaU4qVWFsNm0rNHA9fjlLWG97WXFXLn5mfi5RSGp6R2VeK3VwMW5CVSleX0B0aGEuSTJMNSIrZjtWPz5aP1gofWwvdiswbjMuNlFWezQwczAuTDM7SjwrV1IyKDpI'@;
put 'KnBHSXMjdHc0fDVUd343LFEiOGciUWguTDxQUiFKTHAwVXtlKDs7SHNmRSZTTlc0TVgjeVZuUlN2d2gwc0gyYDhqbVZCZTxwRSxlUVF3eGs8OFFWNX5tV3hXLykyL3doMnhFWFtEUTcyODwpVHZLTUUkLmZqdFZsbXxtaFo8ViZ1dDBpKnhRPm9sVHhrJCt0TW94aHt1Rytfck8wWHRgOms+S2xG'@;
put 'LiF8T1slWHxRZC5Caz13TnV+NTdnO1FQWUohQngqXy8+RTdxRyxrT187T1dOcDJ6L0VeKFVscEMsZ3pwUz5yM290XnxdSlRAWUdUTHpWMHsxaXQoQ2NnNDZub3hXRmtwJlVje3V8X1U8elM+dll1PHdGU0hyQXVUQHM3WXkyVXpQI0dDM0dRfCUrZGAzU1swVkVZO14mME9hVCNLfj5LSnY1I0U+'@;
put 'WGA/QzlXJEduWz9ERlYjTXY6e35BTypSSVMpUkVQSWhTOzM6Imx2JGopJTZpczxsYWFPcylWPiwrQFJwTUtzK19YQEsjYUNJU1F6R145PS8lRC9qdlRTYWN0Pkc6TnRqQSYoS0xSbFdOQTYhe3oxd1g4REc+KnZYR3VQLypFM1I+cCo8bTh1cEx5eng2WDZAckdSJTd1d2kzKi83cnEudENIN1VQ'@;
put 'aEhBKGJyaDE9XlR+WnhfN18sSFVwImYoTjd9P25heENtNVIuQDJocE5RIXxOJkNyT15JaXBpIXdSRXdyPy5rJW91cHpaeVVvbysxdUhgXyIrMX4hOklwSTFFRyhDeFRSOX5aQTY/Wyl1I3tpIyImVzgpejpLV20vNS5qaEZfWkBQMUU3Lj0+VTMhUEU6VXpgUkN2dThzNDhsNylUWW5dITYqZys8'@;
put 'ODgmd3QzPEROJWJNamcpISVSUltIakU4YTojezs+Y1cxb0smOHxYTjpgJEQyZmQuLilKO15hQTBTdkZCY21SRj85QnBOJFZbZkF5ZDA8TnxyMyhZKztWcis1XmB6a2o0USUwIy9iSiI8aENWUnpxZF1jY2RZNShgKyRocD0qNlF1bmV9XUZZL1EsZlJWPlBXWERbOTpebUgxKUpOVSllKkx8aXxf'@;
put 'eV4lWDFSfHhacSVxOW13I2BUK3MwaFkma0BLcnE1YVRqLjZQNXZJbkluTHVhRDoveiRvZjJpZ0YpVCQ1XyYwZnxCXyglSHgzdC87blhfLEFtJHRCPSEiV3gkYlMxeUc/bCtWXl9LO0R9YzRxPGllXT5+fDBKL3xFYVFtYkxVLDt3NDdbOWh6WH46cERSeVVUYUhkW05YP0JAWTxyQnRqMn5TPi9x'@;
put 'XnlHeDM/bXFrWVFhU29uNyozJHksVC4lNX5lIzt+NjtHb1cmaWlzXSpZdG1WVUIhY3xPdVoqej9xbi8qbU9VPC4hJGg9aUE+YCs8ciN9PUlaQ1l+OUZydUpscG56QDIjNn0qVVBKXjMrPEZMbihAS0RQdngrKTwkMDdJbUFMZzo6bHwzYlYuK35AOCVzQl01QXBtLHFdVEBiKlsvW1NxUkxPMU58'@;
put 'KWhJeWBsRCN1c2FHLl1fVisiYGdhPihsVDpZRTciaCp2dlZ4Nm9zW2lNdVZjJFBpSVYlfkRma0dYeU9FOCMzQ31JZnF6WEdpdVA+WloqUml6L0k/XSZySGB2SENFcDJ1SiF1TnAmKThsK01bVCQmYnU7ezFUK2Q1WnF0WTNLYX1mW3pLb1E0R1o5S1FLMmpGQ0NuajJvaUNVTlg2cHouMHRSdW1r'@;
put 'I0dLSWlRSy59Q2A4JVBCaSRvaSsvMnVTL0RWd0xWSSNhcHcjR0hPK3NaWSlfQntobHlaPj9idDFQMlV0PmN8WWMvZS4+QSFzb2xqNFE0UiZVZj5eQkJdMGlEYS9mUU5eYnc+ey5QSEkyaEA3czYkdnd6W0tddHZ9OVhUXio6UWw2Xm1+VE8manpqcjkqfWh3Lz1rSmtNUURbb1JnQ3JFXkZ3TW06'@;
put 'TCokM3g8RkRvKkIybmUsM21rbjVESzApXV1YU0drSW0+PVhBemI9Sk9pRn5lSjUqRGp3LExYciYuLlJiRWh5b2gpem19TEtIZSpSdX5ifTolSHw+QktNKTR9Nj93aUo7L1VRQURQOz8vZUczIkghb1FFVkQpb3o9P01GWGBoa0dAS3d+NzkvazBDVSEoS05vb05fM01wdn0kPnY2RkxtOkNjJmxx'@;
put 'd35jOzBUVm5eMjswdEJZSGVOXSwrfS87PCl4NC94KlIvQzUqUEthSXRSLmhec01tNSh5a3RRQ0VHRktOLl58YGp+M1VuKyg+b2oxVyt7cXVNJGkkYzNlZ0xHL3QoPF83JlIxRnRKUkwjOWY+QU9PWjMxYU1eanwxayVmNVk4IUNyfTlIKmxXYlklWXo0T2VsWnpGbHguMlI5NUI+dFFTPVY1OnJ5'@;
put 'Tj9aNW9HbC53eWQmQ0w/fWx8dGJmfHhLMThSa1lSTnpHcmRnK25MMC4sNXQjQ3J2dU5mbVdDP0N7U0siLHg5XnMsQX01YzJCNy8mX3VlVz4yYEVfXX1QQVkuLkU2bk58VGFkPGl7W1hfaixrJTp1Yk84N09Manl4UH5QcDFmWCV4OWBHcTBMT0NTJVByViF3d190bkVeenY9SjdMJmcrWX1MR0JF'@;
put 'aTxmfXBVOVAiRDN2M3RvK013ZTEsYGo9UGlxMEAqaDhQcmdHRWptOkByWyp6N2IvWSM9cmsvamlNSj4hLnBLIj5PcFgxLjBDeSFNXUBDWVQhIXBvKUNTPGVTPEtOd3AvJjEmYEBNOU0sZiE+eUZVPCpaVTYvbCVhWUtUfkFDLkFXYDlNXXxnJVZ8MmokKVR3V3BePF8pb1N0MXc2bzBBNmszQ0ss'@;
put 'Kmc4ZzU3azp9c0t9S0Jtd2hFWSQ/XjE+PXJmXjtrZGpweV9oOFRFOENdKCZXfmBaNXomNl5VOiM2LzVhNy4kNWoseF9aPnAseTRQTSleL19rZH5WWFFeRDghcmZAYCwmInViTVpmYyRae1VBXkBRWSlUWkFIbS5MdTl0PEZddzxISzQ/VjdgWTQleSt3KGFdKVU+Y0RISF5RKSp9JSYycHJ7TEQm'@;
put 'fjdjPzdHZ2RUe1JQUCs3LlJhZ1t3S013VmJFfmJTQGxgT1dtV3w4MlNpZlhCeU5wO21zQnZpUDVxLCVdXk40YXtPQz1bOnE0QDRuXjdgZDtgTyZlS2p+XT04em9rY1VyalZ2Z0p2bURjWzZbVkZkKXhCS01AfDBKMklMIW1PKGp1KzlXbm1gRFo6fSlXfG9IWF4+eDlyL0hMREs9fnxLUjdXWiUo'@;
put 'Z30xcWA9fUBSPzAxbzF9MEduJWUwLHZuUUxveSUpLiRjIltjSX5CREI1eDwhPT9pUUFtYUE+c3NxKS9DQCorUjA2XVZbL1EySXhhL1loMGleJGlkIzUjPVJmWX47fSZLUTR0TS9xSUg4fFN8XmZSWi40V18pOXlhflJmM1hnaWJjNl8zP3kqMlNtNT0+XSRnSWYqW2RmWWMlMTFIbjN0V0FIQm4u'@;
put 'PFVSMSRzN3hBRlFjWyRCQ3JmWSVqOyNLSFZfZ2MuNiVEOHZ9Z3YsX15ob0QrMyxudClbKXNZcG10Wj49QGI0e2Ize2hYOSIyPixPOGZ2ImNNb1AsIyRzLCRyVWpUMH0yKSROQD5MS084VH1hQmkwczJtLmR7PClrUHQ7Pl55SjQ0b2t2SHI3ZEpQL2ZhKkp4SGZQSDJ9cTN2MWc6JjE2SCxyKlhP'@;
put 'XlBCZlAxb1ZSczVqbHtmNyhNTnQ0NUtVRDBmQTVfQmZ9N3MzVDlvbn4+by9Fdn5CMFdhIVYzNHdMWnA5Y3FdcHApUzlDUXc+XTkvW3pEJTFHUDNldDgmfE53P0xNNWg1UW5mPXl+dXtZSnRsWH5ldld4Lmw5NmgsOT0kc31nYW1YeC55RFF3WHNwdGhsNll6b2hgY05ZOVc6Kzl1Oi44MGR1PiUq'@;
put 'SUlJaGo/YjwvIWhtTDtRck0yTnk/dDUpQnskZDlCUnVUcW0sLE9tWW4/NHE1SntEKyJkTm1hNnA8MXM1dlZvMUg3WD9ESVh8dTFTJl10UE07eXVxQG5eMSVZXWo0Y303aSU+aF9RWGFlT1MrVFY5Y31AajdjJF9eTlQ7M303QjE+YzVfY1AjXjUyPmBYc2VeSX4jdVNnaD9YQFQkbV9TWCN2aTg/'@;
put 'Zz4oJkFqQGFJPSgwaDA3MGtuI3hDRDQlUz95bFVBRGljW0NqdjBDJWJzZ1ZgN115UGpbSHVjNCU2LF9Gc19GQSE4dGhVMShzYjohVFJjSlQoOWUqflpkLDxXbnAwMkJJJWNoMmI5XjNHXytrY1NffG5USShHUz0zPUBLa3ZAdipSTiQsVzdDdkx4WWMlS31sYFRsM1lkZyFDS2xoQmpPME5pK2NR'@;
put 'Vng5ZnNOSzxVPDs6MHQ5a2ZCUT1+aCEzWD1NfX5XNX56fV5wJitCYF5qdVU4ZSlPMHY/JC5nPjlWNi5tVCRIbipgWSZkMldybm5LLy5qaTJKNlpgL0VpYHt9endQNH49L090Ul4/aH5zdkxzU1dPZXRzLmRoU18qPEYyUyZRQmJ6dDJtRmYlZDtKMz96WnpvSXNNUSpQXzdXYD4idnpbNWlEfHg7'@;
put 'KCwoXXB1WT80N0tnUTM2RCQkT2ErYWc+ZmZwMEI6L3orTCR8KCU9NTd7U301ZT1TXk5uSUtva3d9SyspYTAmfFtDM3pPfG9wTnhaaHlzfEVRdEc5eEEiRCIjdSQqLGIyTTRXUmQ4OTJZOkFONkg/MF5iaGxsTmprPDE/O3x8LFROTWBEeXA/P3N3OlsrJlNmcCN6dnJDezcpXXhJbzoxd3csOnsy'@;
put 'amU7VCw9Tkp+ck1+WzFyJWxCIVBJakBHPT52YEp9QmV3Q14+IT5QaDc0bXZvNFBfZC9WRnkifF9xbmVgISJDW15xT2FPdSIpUHA/YDFjPC9LUXlkd1lJfj1PRm8qXkN9Zz87Sl9vbFB2ZWYwayloKTNtcHlRXl0sSio8MnBzY20qTDhhdmxrNH56WnA4PWx0Qy8hRkxCLHNUQUNEKHE0akgzdSYi'@;
put 'XmpoVlFLKlc6czhGOitsPmdpMHt5ail3ZV83dCNRdFVIbmU3OkZqKjp7Oy80dmJ2dnJSSlZ1QkF+Z1U/Ri9rejxHb3dZQD4zdyhkSFg8TGFmPDpkMi53PjwmIz0/KSZ3Xyh3YVo6JCo1TCRkOWxWdSpZYkhRcHM6Mi9xXVJBekFDaDZgKDVSU3tJTkRPVUFVW3k7ZXtaNk0mWHVINk5gfH1Hekkk'@;
put 'bDNCNz5FI1BLSTMjOXNJI0htb3U3YmFxVlIzSlhdQUd8RnQoMT5VUm9DQllpd0JidmNxKU54eXc1fXhsSn5TRTNZLzM5a2lxMHtuenE/WW18U01pKkY+Wl5kYiVNR1p0LyR+eThYfD8yV29XQX4vXUMsK1RfI3xZRS4oXWJ9KHdnVEhYcXgxQm5DTkxibFRxVnk8W3wvensoQGA2SlRZMlRwL3xz'@;
put 'JEpEXltrXzFXbiZtIWVCJG44SClqNyh0RjIwbldDMCRtYW5mKVdafDYuUVFaam5VIz87SCtRSSFlOjh7eGtjWVE9UFkuRiYwZld2dEh7bk02SDEmXjpdPVY+eFdLWG8rI3xNfDshdmYmUDJLSjxhMj1WI1psaXVfOi9hKDRQcndeOixHPng6N2ZLJkxlUSkvY193SyVjeFZ6aVBKQWNdVyUkWWQ9'@;
put 'ZU16SjEuYGc4WHoqMCtSZyJIOmYzMWdTcFAvc1cmJDB7NW5pITNfc31LWDVYUEo1JCVyUTlEK3dHRHdydlhMZmhlM3p5N2VSVH5YLFdPMTMsYiFCbTlsTmgrLiEzOi9aNz5gY35UVENEdWBQa15dTEJCS05mZiM3REo0YjlVbTY9TmR4WDgrZ0REL2lSfjdoPn5AaDs1LHZCRz9dPzk9NikueCpv'@;
put 'cUptIjU8ZFdSIjp9TWxienFoRT1qdmxYUi9IVnR7SSFQdiV1ZVFiJmBrcUk3Kmp+V14kQEUiakBHYiNYYDlxYF9ZZG4+NmZUQnUkKkpqempgXWdfWW9FP2lqbiRhQVckeStNXj5Zd1ZzVHchV3tXIShZQzZNYi5aW3NKdTAzS0tpLzFiZUV4S1oya1dGWCZJMkw9VHVXbjB0PUpXc0IuPlYyKGRt'@;
put 'PGBOXj8jKm8vcWh8L1ssKTh4enJ7XzdpeHU5SD80UXZsL2FsfEpxUX5TO20lRXVJbG1BdiFlPUM1IXtbKFt3MGc8VWQzMHlnMSM1VTh8PyY0KSRhS3Q/Lz9JOCglTkwlIltkXnZSWEBxIVQwamF1UCZWRVM6ezR3Yy9xKXR3RHRAY2k5ZDBMbjt1PUladj5NZkxmRV51VW96O185Zkt1YChmViJH'@;
put 'e2RqZnZ0QGAxOVFdaGhheSx4Ujw8bkAle2AvWUg8bD1YKnM6P1F5WHhBNk1pbGwqNFRuWFg0SDtHRD1LNFIxcCpedE05PjopOTY6Kld5TkhAdlg4cXl0bzAjUFNLQTxyZSJvc1VeNkROPkpkWW9RckhRI0o3bERoKDZvUk1bZi98KjQsMUJpbEUvOUZkQ0R4T1tBMSxOWEp2NlIudyojdWB0Jkom'@;
put 'YEJ9Si56akNLMDxmfTVNXnBlLztOY1RRYUpIQ208NUYydHIqfWBQLGk5QDMmd3FaVElQaXswaD1fLCFuWHlyMWEzfWBzQ3Y3Nz1eMShjfSksXiM0bkRWbFJMNSsvIzNqNjFiTzwlY0l3KmAwSE83LnF0PFc5Q2I2cyhYOmB+bHtLfG59KSthfHx5KCpONmxFV1NIQ1tYNDg7dU5ZSmd7UFs0PnlI'@;
put 'MiNjYyt6QzxoZTBvRUxbUl9bQnYodn4kTkBjRHdAKEFJP0ZUb2MzJDJDREFiMTFSMDFtTkM1V0ZgIlNkdWdyITcudj1aTkxeTUF0TDM9QH5FOlV+XjtMPHh2T1RoUVJRYXs+PFh4WWBBMzBqdVlCO2JnQThFVmEhVlZDelRpdkJfUXxiajlZfXFNMjp7InA7PkBMMEhDRjxqcGN7Kk43YlJITmhM'@;
put 'd1FIbEsuUXZjXSJmW2lLXl9tRnZrKFhLMGU2JW41NH1rNkpENi4iWlR1O0lFfmQ4NDJpekAwKHhXSVBSUF9zZHx1dDttVkgxPSxZWEZsaCFaWWQ1S1V7IVpNZnZ4M2RnRGBtNClqfU8zaDNTRW04fmgzPkVWRDsleV1YeVcpUG97Q0QwNyQxdHg/d1NGKmgxJWBbMUA6fVR1MHxNI29dSnNCfHFm'@;
put 'T18rUy9ge1VNdysoTWJrS2N1Mj0jc0JIQyN9KTVaSVcmIndAZXsvSCRCNGFvVUBfPDt6IXlTdWUwUVo3JGRzNzA7LGZMQmFBNm9JKT5YOnkrP1RSNSxHTyQ/SmZNVVJ2aEtQdTR4dS5vd1VPMUJ8XV8oaGA/MTkkOkN1R09fYEM1TEF1UEF+YWF1VzFVZTwjL1c+VTpUfFA/UjdJfGVfRilrPVkh'@;
put 'a2ZrfCExKmA9MlBAPGorek02PGkzXVplZV0laWJrMWVHOG44QFd+K0w9Wy5BXkFyVGRCKGJISDEkWjVoTUd+VGxPPXpjdVZaQVJfUDkuJjM7PjN9ODJxfFFhYzslZGRaTSp9VyYjYFtLbGVVI0ZPTzUqMEYzeEo8eGJON3dzcXE0c012LyhLTDRScHdJWHBDfnFTK1lveDo5KShCTE1fO3doOkx6'@;
put 'PHl2YUBUIzhFJDZ6fipzN246fUlxU0I5cTJ9MlZbRmQpMShOZFg4K3dGUXpmKlZuay99eCMifjp7MFlgbmVnOE9MU288XkE4aUo2S01lajZTInopeGhbZ1EiNz4hTmRoaGZJIjApUk1bQHhKWCwoPjptMy96Zmp1fHM8elBkOEF9TVg7JXRfcTssaE43YnIrNShZV3xCfUpsND0kYVljdCVDQkBo'@;
put 'JXhVcz5kTGY/VngwRDs3eW9YVEhnb2JbMT1xMlssZXt5VjFsWENlI2AiPElPWXEheXpCd1ZDZUkwTTRTaUJmXz5HeXxbYkJ6W0VpOmR+c3xMUV8ub2I7I0s7Ry9sel9keH56TU48KXAoNnkpWm1vXkU+dTZaO0poQTo4VkF2P15yXWxqMmVUbF9CWyg4TDVFfk40RVpQeElLLyVjb211KDsue3xr'@;
put 'Snpnd08uU2FMJEdNdXtYb0QoW3FqWCwmMT08YnY7PHI9Q1puVmtWK3tgY2hNMmpBU0krZ1dOV0dTVnc3c34sSXRaMCZLeUN8SFhFUTFFR0dPaXwvJX0qaGRkOVdTSV8zLkI6MXJdMHFLNlE6JDtmSm9GJSEyZDlESik8RWc1ezo4I3hhajg8MjRzLnxNJXJ3ZFsobHVFcnpbbFNFaWU0dX49eXw7'@;
put 'fDRfU00pXntzUDI/bmt0Pn4+KHEpLEV7L2o3Unl3aWlPVmlobVswOnk5SiU+WzpFXkYkUGMsXiQ4ZHIqb1E8TF1nYFYrTzkoXmlgQDpSeDdLJixZOz4wW0c0cVEvXmY4Vm4jfG9SfFswaFE5NlVUfShgczArb1Q8IkN9b3lPdEMqOzZdSEdsIis/I2llKE9YQWgrYFBHXzs+QnZNLCZzK1s0eVsu'@;
put 'XlQkdWFOW30iQSskVnBxRmJPJmtLRn0rXnU9PShBSyhaKGlpMFJjVE1JZXxFc15SQD81YT1GdHgpTHR9Y1BUSj8oM3tCeXciPmpzJDhQZj5rRW9vdktWcWlMZU9uJWIibCY0Uml8fVtDT356Y216bHJOSVhWZWYialhQKFsoTDJaRnNue2hVWENjeE00cj1CfSpbRSEpNEh8dnIxVTdOQUNAejRd'@;
put 'RHZXPmBeTkVmR3UkSXUzUS4qIywwKCF0bVtHInhXZ0kuJExPc2QqNC8laldfXj8qImEwTSI3OiN4Q25iNHc5IUNJQVc3aHJfQi5AaV9YeUdbJT4/Mj14cEplUi9CWGJFVFouOTRfbSJ6fWxSZjUmWz1dZUltcWdxLmB4X0RBS1U3TFVVb2EkVyhGdz09P2VDPnNCSFtYK319WzFpOUc4VlJ1ODRJ'@;
put 'JChCVSV7W311O0hgL1lOUUdVVEo5enZVVGh0TE9oNig/V0tvRFZWWjJdNS4uOktIPWRVU35jNmhJOEA+YGh0bno9ZFo3V01XWStMZiNUWmUvU3JoLnJtcFhtQH0lN1NAKn5OPEU9b2A9SmA4U2BTRjNQOGUzIXhpTlgrdj1bSGRbMltnP3JgRyRJOUt3Q09SS1tLRV5Ic3liUz43eWlGQUBybDJD'@;
put 'eUVrfVczRmMrK3A3JCglLCgxaHs5QCNKSE9xTXQxSm0zUV9UYCo4TDEpQWhkdW5adiVzfWV9fSV4Xis+R2wuaFcwU3NRPEVMVyVOfGx9O3hkP1pJTzVrTTZXPTJuX35zX2JrWlMhYV1wYmI2O25EQXsqdjtERVBURCRQQnR+N0o3aF8yZnVOdktxL2YwUkE9Tzc8MkVZOjV4V3BOIn48dT5mWnh5'@;
put 'Jlo1T1NBXTZ6N35CKkdaPVA+aDt1ajo8SiV4RlR2RSVkIk8scnFTcXR5XU10P2ZTamJdT3hmMjwxYTR8JkNeRyozNFo1Vmp9NmJnSGl3VlRjSnhzIz1kPTpobmFufGxaKyxyKkVJQXI9SnI+JSpwKCQ6aF4wYUNmZHIrNEZhKE5AcGUkSi89I3JLSGM5WHY3UEs9Py9HRCtEU0t6OGArSldmNWUp'@;
put 'InBlYiksemU9eT5MNyomSUB2bF9PflR1Zk1vSld5UF8vOm5oWWRuayFITDsjKG1heSlIcVhMMXA1JERUdCVKSkBLbVYvVkwrVl9GRiZ2dVQrVX4wQGMxeFYwQGUwPWgmeHRVIjwmXVE9S1IwSl1SUEQ8L0VGUHV6L2wkcThTTzN5NWNlfikqX0siVWEpR3wzVikoa1JCY2MxYmRyY0pjQHFYVzJn'@;
put 'T35WOV57fWlKI2hjPT5IPCpsZTtnMGNGd1FecGdDaitPbjpMQD12PlsxbGJMfkBLMChNbmV2VExmJF9lTE4hZFosOncsQH00cG16bUtBQ0tIP2VvKzJuMzo4MDR+P0RYTigwcC5DY0BgfSlARUoocTcmflpDWVBnX3xdTzpXRnVLdiFWOVp5NmtqRHJzSTc4JjZZMkJEKTRLcGMoRWY1ODE1TT5t'@;
put 'dkMydSF0TFhfckx1TVVfTEVsNi9hLkVAcEkmWE1mJEk8eigxKSw2V0tTSipYcVNwaVkvMzB5JClmZkQ3MUpnRXpTKmBXZnpNNFM3N2MsdlF7cmFLP0JQSmBANShnVSlJSEJAPig1Pz1NcU1VQGRyLEp8P1BQZk40NkNdb2NEIix7aEl+PWA/OEEySmIzKkNZTW5wQH1KJlVxNz4+dE1EfilIdlpj'@;
put 'NyolVHIyXS5wVzpgYlg8XkpWMER9RVBEYCxgMTZkcENjKiZ5VzxDZUp5REs4PSUpTk0hc08sTj4qTVBlMmIyJjJzcUlkdnQ5VEIiOl9TR15wMzp+WiY6RXJxa2A8al9aSnw2blNQLChFSXFnZUpEI2g3Jk5EeX52SWprcFJsS0IjKTFUL0t4XXRuLEQ6a3pbd2ppazJyNzU5P2Q0YDM1Xn1oInE9'@;
put 'KXZXfHtxX2kpSUYzQyxteUwoUmI7bXpXVnYsUEwsS313TEckRyI6eH0ieC8vZW9pMzE9YSV+RyxNKnpDIlh8OkhnMV4rJC9uWU9oV1M6OHovV21EcVNCYCRTNCUyUFNnPVFAKXk+cyVbKnk5JkZvOV1HbyxFfFF6Yk9+NiI2NCJicz10O0E5UX0wVEsjYzViRlM4ZF06XTk1WWpUWz1uSy9WKVBl'@;
put 'P0NSK094aVNpQSQyQFkvMCtJJHJuIjsmQUxHUkh6ZHhHMzBweks1eVpfTnZhU348OjosXSkveE80R0VGa05KS0koTjV8a1hJRGhlJkU+U0xHeDw0YGlESGgvb3Y1TUt5RXYoODYwTjlpIUIiPk8uZy5nPCZoXWJEVWtoRSwmQWwhQEV3OFh7ZnBmJSxZZ0Z8ajI8X0UvL2cuUWwsUHQqdUd2W19e'@;
put 'OUxmLGRkJHI3KlR4Q1JkP0ZxPnteKm12a1hQQGtoJisyMGEwL0NeNW1BMEReJlQyXjFQLDRCLn5HMn17Njk5fklRbl9TPD14eiFKMkE8OTErenA3d0orZUc3RFkwfkVTMmAzOCRfaXpDTXkuNzd4KkZOaEx8c2A4TFM4NS5hTz8vNWRiPysrPSt1MFtiWS9CNlF8YUY2azcvc19NUEJfPU1+KXFv'@;
put 'W0YhSXQjSy91V3R7XiNRLn17RnZaK3RWbWQ6cTQuayVhTC5FMFNzODdHQFUrdXJLKFlMYX10YD1DKik2aHJGOzc6RzhbZEk2JHE3Y3VpTSZvUjp4blNjfC9rLHQ7ZnNJVSxOWG1Odj45UDBnIlA2KUxCSWokc3R1RCVMYj5VOF8qeFd1WHdKdiMlSnthKD91PnUhTDYhKlB0QzBkPG5UeCpWQ3xj'@;
put 'Qyt7YT1PQF1OPDZeLERFQV0iSzgyLFNdTDpQajNfQU9Vd0NrRi9mQCZeRkxUMCMkMWZeVz1DfFVbdGlzcC5GXVQoYjZrYCxEIl5kb0VqZTJbOH54dGZ+OXElZyQ4bzlkVDsmfU08PlcmWiVrWC9FeURFQEFremxwVj9ULDMqRiwyZm5bPiRjSiJYeUBEMmQqImZnU0xSbGoqTl4kZztfPDdgOVcr'@;
put 'WDZzQnohZj0sIXxAN01tW2klKVY8MFA9UiRZVCElOVZbPkRJalRDd0MoRyw4am1TdEs/c2ApejNwaCVENmt2TFVRfH1QZEA1dk04dHpCVnIwLF5hK0Z3SCFxKSRdcUJ5NmpkT2Frcn1lZmw8UWc6KFUrRUguPXRYdnlvX19pfkFGZkQvX1BDOl88X2dlczxnXkxJQCs8XUJWVk18fH0+NVlGNUJ9'@;
put 'b2x0fjhxU1ZKZj1aMzF8WkpsR2k8aWJKSCl9cTh9clppTjAkc3hZU3VRVzIwZ1U2MFJ6OzlVJHl9Qi8maHcxNSk3Z0JjcENmIjxWKWxTfW5PNTpYL1h+KkFuVihSKiIoV3gjbyYqU0koZkk9Qz5pTkFyT1ArTSQmIzYiZX03c1lEK2tdImR7anZ5O0N+ez1ibl1NYGxlbmIvLC59bVZEVXVeTml7'@;
put 'MHZAL01oe29+dkZpS2VEUmJ8IlgrOkk4cj14dywjSk19eTVOaWxNdiRWTHZAaXo+NSosPVJEVzs7dEwycD1YRkQlI0h+IV1GVVdjMkk8eDE8YmVuYGg9JXxhRzNSRkIuQHFsbFVUL3d2YHl1djR2ITNHcm8rd0xPI1cmdW9LW0N0bj43I3dMfF47ZSRSdXthX2UoRk5xYXtsLz5IYERoTn1EfEgo'@;
put 'N2I/TH1hJTx6d3hMQ2krcFgmVEAvc3w7XTJONkN4VHw6djgpR0NeR1olaU9yWUFMLzQ2WGh0Li9TUTB3VTpVKVkzdD54XnUxKH17cS9bQiY/RH1Cem1TUWt5Pj9pQVV6e25HXy5TUmB2M2dwUHkrO11TWXFQOFJ4NTleMCJWZ0x1OzR3d1FEYyN6a3JQP1Y4KGA2YE9QUilFcnJLIzd9OXhkVHcy'@;
put 'NHZ8QE1kLE9aLlVfN15HPUBjWE5qR3N4czg5bVJCUzc3RDQ7YCp3dForVy89S14wXmJ5TyxlfWcoYFhZPGBaLjglVjlMfV8+WipJcWx5X3YvaVBdQ01iMzxFJnIsYywqJDozeWJqMW5OejB2cmdQYUFRQEFtaUZzNVlCMmFiS2FnamNxfCtzMmczbks6cm0uNVA5Ozd7aTEzZldzJS9JL2hMaFAp'@;
put 'Jik0Q3Y5SyUoeyZMTl9kWjZ9PjZhOUFBZW8zLDlMV1t2L3twcFEzbH06S2dAS1M5WlBgeyFFPHkqYmxTXmxvdkVFTXt1cyY+OnMveHYrWShsWnIwdlRNdHJbVjYhKDxkNGVrSFtDMntwLjhHOyUxWE5oYUJwI0dGaEFgVCZmWFZWOiRKInN+WSRNZEdRYVFhZihyayxJO2lmLENoXixvMUZFZjV4'@;
put 'ZHc0Lyh6aGdQWmhdblY2OG0vOHN3NUNdRFNAVGRIVEo7Y0FbWyYoTi8+THU5WWlBIkxidTc9WWNtZkNwdHUleC5RKHhrPUdTWVhNZEEyXkAuVmlESz9DdSRaKStkTzxKNFVNK1huYiJTP1k4KmhRdUkzZltMUjdpbTBDLGtrTnh6R2tGci4yI31oVTRHWUghJVJEfFYhdVhufWVIT29LNnBwbFF+'@;
put 'KGREVDcxeUY8I2FAR3YvUG8yIjNFRyMxPl4+Iyxnb24jYilFKFM4WjQzPUcpeEVSYiI+RjA8OGBgXT0yPjNqKDptMWB+blFpbjhScjxLMyF+OFs/dzRYUzF1L31XdjlRbl15ekt0LEdHNlFMTylvR0tZNGllNG5Jd10wPU5Pc0hQSDdSbGhoc0RFei9HW0MkaiwifSJOYyVZQmV3XmN2XytLaSVR'@;
put 'fEA2ZUFGT3VGKkFEIT4obVBDX0JefTIrOHkoX2lCXjcrOSsmRSh6RlJOOzk4b0FhakkvMGlmVCMhY3BVYWxKbiM0LGRrMzY6JHlFbHYqWCR0P21iZFB1Xn14KU1ue3J5SFE/QEY4eEthXXdJZ100OUc8UHNoV3Z1TDJbOj58SShQXU1GXTQjaW5bX0xFbUxHa3xndzhgUkJRUl58O3hKMit5XTFs'@;
put 'Uk5dcVYzbEZ8JlpCNSE5bGcxLE4me00sUTJBLDdgb2pYbUJZSF42XiFLYWF5PGM0Ym0lYmlsND53ZjRuUThyQSJSVGQ4ODpMdTssO0ZWKHY9SGBPTkh1OSNHPl9KMkF8R2w+QX5PbktSbyI8JDB3fDhVTSgpXzl8ayp4VEVFYj4uPmR3NjFndHBIMUh8OmxvZz5vVTpuTEt2VzVfUzBrQ2BzakJ0'@;
put 'NGh8eDZvTD5sLlQzVF4hL0xBXXNvIUdRbTZaM3c6SCM7YCo/SVE7RFhSYWgyJFFjRixSPSRDOXUhey9dZSUlXTlpKjNPJW9STUNMKFpaRkZBQDB9ZH1yUGt6Y2NZb2peWE0vI1N0Ni81L255WFE0OUB3Z0JxZk8/YjVNfis8XkM4XUZdR0FxQX41JFIwMyZnN1FbQF18dlVVPnYxRX0seWI/QFFN'@;
put 'eHsld2RSYGlJLiF4UkYvYTsyN092YVlrTnlncyVTYEttayNhYDR3WzpSIncoZnY1OzhOL2ZMNDR0dm16e14oSE9UZ2hIIWUsM3lBU0owXndjY2NmISVmfCxkZ3xjLiRwNWouMWk5ZHhtOXQmQnFCZk0hQy5CblhPQ1JTKDlkSHpFbTQyayQhcyJNbDFvOkwzZWprQU5hJG9DVURUOz9IOjNOSG14'@;
put 'OStbZmZEdF5SdUIhTztROldtVnM2NFFScTteZTZdNWxeekxvK3NkeXQ0aXtTTS9QK19Jb0BWWDE0X14kMXsvMUxLXWF3dk0pQz9IXT0yUyh+Wk9CWmxARDc5ZG5QfippWSp2TSJSZ3VdW3xMdEddZTBlW3VgTTgyMWhpTWNhMWswNlhoaE00fnFtd1BIISQ4cjBQeSI0UlllV1llJnsyeWwiMSk9'@;
put 'YGJiXU5tKk5nQEBJKl5bWE49XmFXXUckSFRnTkJjZj5RVk1EUHlnZjBqTDs7SSo0KjYoUW1XQlE2dUlRSkw6YWZ4QV9qYkEhQ1hgWjxVekpoc040Ij9se0g9MHVPPHhGfD14YnY8bHZ+QTxWX1dMdW9oOit3Ul4qMVJabXNSbC92R3ZZbEp7YXB0TmlpbFUpVEpiVUErQ0ByUDwmQWBzeUdPaiYv'@;
put 'I2lNQn4vdE1PQE93cFo5JD54PSJVTV5xbHxUWExPcUw5bHQ5JixDbFI9TEFEOUZ3Inw4bTl8PG9JQ29sOVJUcy40fixIU3JBQFdvS2kjL302anRrRnJ1Z30wdlg1PGlocXp1IXJsZGRBezlBQDN6ImVRKDs6cGNRd1lNOz5lOzpJU1JQKy9leytrajtxe2xrbyxnWWBbUSFzSmRXa3c1dG83ejxR'@;
put 'ISkibyMwTjBVVjJVOlZddlVxTWlBZV9LeCRXVkB4UStVLF5HVlB7XlAxJXdJViFKV24yeHo6QUFAS3srQnVUJlc6WTJ0QH5jMk14fThXP3B9UCtwMEJUVHxNLDRiSyh7SWFDOCxKYWhYSSg3eUp0Qn4/SlM6eiFLS350R3dYIXRNd0dXTXZncV4jXVdgVHk/dSFiLH1LM3plVXczdjFrd095Qn00'@;
put 'ajF3bDtFQ3gvMlo4WE1xVTY3c2RsITYoeSRbTDZeeDs0d3QpNVRCZ3Z3a0prXz57IWBkZD96VkxNcC9tL2ckMTsmdnBiOjU0MHYpXld8VF9XSllYOGtoO2FLO2FUVXIvPmF6LlpxKz1MNFphKCUrbnVuRy9fRlpUPW9GNF9zcnxXcStab3tRbXc/e15RMDNTUSlLQW9hRGlIKyxbeExLVHAqVk8+'@;
put 'b1BTdSJTRCZJVDZOX0smS2k7RzdbXyxGaUJ3bWQlNENIWDlSRD5iamVzOSF0OVlMcUlNKHBMXlJjVlshayl8MURCa0JqZDRsYGkuOlludHBqMms/U104aF5TSDN9LiJwTHt4Zk0+e110OkM6XUZxUmZdKiZeJVM3QWU8On47PGshNTt8SD48cTlpTSU4bSVhPEZxd3RIaDV0NGNSLFtreDk0dElE'@;
put 'VngzNmQsdER4PVR2Jj4kIlV8eVo5PHgpQn5rKkE1K3MvblBYVVhacCNDY2o+aCRBREVDN3Q9VXk1VCw4M1tWNGU+bXltQnYkRmlTZlB2cyU6NiZweiN5RW5ENWk/PTU2em1sY1FsW3VROXRqWlQ7bXslP3E5aUN+ZXUyNmUlISFMLl5wXWohYVcwMjlfUyNnXzsvRW8jZnd3cHhjMFppP299U01G'@;
put 'N3twcUZ3PnFlL3FGKkZSXn1RU3F9bX1YQkMxZDZCdWQ+Q3NCY11mWiE0R2pPNDYsbC9HdUk6I2d4NEc5N0huYmk/SmVkZGZAPDlrWkxsZzN+UWtyQkJlfF1aSntzZVJhUHU3MWI8QjM+dzBQbipiQiFQTExeNjpBJFVxNGE5WHYsaitIOjNUTkh2UzVud2dCJVdCW0duREheN1QoU2BtMV0/ODpX'@;
put 'UzwkZFBGTDlqVkdRZzJSfm07bV8mMU1wQENNbnRKVl9YbiRZTFdrUFI1cmhQJF5XJUlORk0yVnpqTG1ZYV5hcHR0TE9NXXY6RHxGUGQvMVtldmphX2pfZVRdMl1hSzo1PTR9dXVKZ105T3xvMC5zTjl4dz4+ME8pSHxUODx6b0ZYYEIvQ0EpIkc4Pn5DNWwxK2FSL0I/U0dGUik6NmNhRWBNPyoj'@;
put 'b0REd1lpeEBPUUVOQzRxUDdtbEdwP2VbXXQjMT5KQD1xP18hMjEwTnVafThWUjw+UDVROVA0OUR8R1ZoWUBSRng4KGhvLiZDKVdzcDtIV3hCQ0VJTE9PTTcpb1ZxQiJjPTAuTzF8IjxGKUEzPiN0X08xcD9VaDYuPTs7YU1tRmIhMzNeI01HMl5hLHlweWFxMT9ScmN8RWpJOFgmd21UYHJaczh+'@;
put 'Yj4jLz4meVgzJlpSP3JrajJJLkVXRC5sL207YDNCbmR7M0cxLEpCL3h1ZUpndXgqZVEieXpAO29kSzpmJUl6WnUqe013a1JsRTtSYUtbdWBZfSovSm9yTzZBRiJAZCh2ckY9fGpKPmhSamQqWFdiNkBoVnFYeW0oLnw6Xk9IN1hzZVRHPVJyNntLY14rbUVjYll5Pm9HS2QlVjs8Smt5ei9+WF5A'@;
put 'JERSTnJ1cDxoSWx3bGklL01LdHVFTG54PXFsZmErQT08JjQrK3lbQ1QoXmM0OktzYj9rbjFLXmtzLitVdjlmbzt8dzQkZ0VrQ2FUKHh6RWwhdiVHZTU/KTpFRjp2NFE7OmZEa2tVfW82Wj0oWkJWV34qPyhQbDFkK0QoNUtEcUpDWnxkcngkUjdabFF7K3V1TmssaEw7Vnk6cDxAYGJETEVYcChh'@;
put 'PChkWyIuNHpmLDleZmk6W2JzYzpKTEVYLG1+W3RSXUwhU2xwTGkoQCwlP3NgaV16RG5XOXlrK29Mc00sbE5La0M0O358VGB5eSUobnFLKTYrRUg5M3gsSGhrXzw7Il5TIU10e1JyZ1dOLmhVPz0qfGpzQjVHWSRKVU5xWVJlLl1EOj1hOyt0RjhmVzQ6PFIvUShLMklfa19aPUN1dnBhNEtme2VI'@;
put 'R1FgVT5Ofig2cVU8TGxWa0FDKzhNbGhMck1hZ1YiVkVCbG1hbk5FaH1HInFsTkQ2ZDhRNk1OWjlxc3JOc1pUYEl2RkNOVihhKDYhfDE1W3wlfktkbT9yW3x2eD5dQytNTldJLCZWLyg9bkgrYXJkbUJebT0uJDg/ei9DI21FNVtFWHF5PlpKRTJJMnxOeiY9dkxpWl48Ql1lKG5eMypwRzpIIW5l'@;
put 'dmBqWHZjTHBDXzVTeFZyOXBVKyVPVGlCZTAzU0t1W1gmWmtnfjx2Olh4MjVyIWRKUz9AOjlLL3x2YVsrLyNDcDt0Ym8xYH5oLkQieTMpSChSUlgpYHk2XUVdPClPVEsjO2hQRGFGQXhSfnFrYkIqPDtQSiZycHpMMStDPCROQGgsQ2p4MjUsXnRnRmh2NittfVFpamMiKHxodltZRnhoWC5PS2dx'@;
put 'NkR3fV97IyJdKjxjQXFvfWR0bX5qNUZvTFcjJEcobm9eZm9wZzZlITQpUj5XKSRmJW5zNmExcWZGSF9YZDBNZlgzRFE3LyYzRTBNJjJpeWo+ejQ4MTdmbiUjXVhQYmZENCsiPGdyPVJZNEdWXl5gRFt9LG1pVGswWD11c0RAd0BBcnBuXlJyTHJVY3s2elhbaF0jJHtPTm1dK003WXdTMzd9d3xd'@;
put 'M05KeVZ1Z1heTnQ2NiQyYkpqbGNQLjx+XyIlYlQpdGB+WzdJb1E9SSZUbVptakJtLjVgMEJpRl8hJXBFTiV1MlRMZXNMfX1KTD8pdXdFSSFFTEp+ay88dDZzfnJbP3M+dy5eNFNZUVJTajc4MjAlWGU+SlohMEc9ZDlWMCFkcDxQWW4/KGN4RnwpWiwzUWhQa14uLjtuRClFVylIWG15ekosPnk3'@;
put 'PCZAWVN+U0EucTM1bVsiUnJZbFp0Pn57ISkzUDZIJUpuPCgxLzNKckp9Y083U2ZzT01bc2k0UEp9JUFweShKP1AlJmR3SlIxaVUiL3xbV1FEYXc/P15wV1s5Mz1kblA2T1ZQekBWW28wVmJtL09iZj47cmxYOlNiOXxlaTIqIn0kXSNFbVZmNiwkN2c1L358K0RAdypFJUIhWEdkN0RsPWJPR1p6'@;
put 'cTRlaUN5dnlQYFZKSlUhMWJ+Tm1WVT5YbT9RXTZZRjA1TnVzd2d6enw3e303YSs9SktlNzUuPjxrUjxOQ0tqPFY0IklVM35xcFQ1QDlsfGFYbXYpPHFNcXVQXlMlTHVZSHg0YVNqK29vXWVva3VgW2N5PVtAWFpNZzQpOnskcCosbCttfmR+L1ZXMmFAJmZgOU9+LiQ+Pi5LVGJXPFZ3T3c0Z1J4'@;
put 'LFIqKldZL0hEPlJkLzFsRTMrVkIrbTk4WWkwXWpOKGJmbDM0SmA/enMzZnltcUImQj5jPG5HSDU1e3spUmg/Y34jRmxESU1SOH44dUUuc0ZfezZ2QksrYW4xRkNHZ1MqOE16cnkpb29INDl2PD5bYlNTc1siaGFzRl5IMHEmLkY6RHVJTm0/cngjPitRWHhJaHNlKWVhbU9ZakhoZCxqTiVoP1s9'@;
put 'TzkkN1AldElsNXh9X3pqVWF6ckB4L1orVkppTFNGNnsmKkNDTH4uOHVhSmo1WT1GIV5nZXtrfEFyOytMRHRuKUt3RHwvdlJTZjdIbi91MU8rbWM9dDJSMkU/a1pVbGxtajJaaSNne3dofTc8IU5eO2daJjNLLEdoRFV4ZUFEZS9hbjIpPylKNzNTQDF9K19xJGxydG8mJW5mK11mcCVROzFtUT1n'@;
put 'WTtLUkpzeTtjRk9sJTpfaTgkdklfXnd2OD9QOEZlIUNxcnApUD5gPlZlNVk/Jl9wRDEhbD9nJFFSRGFvJFNxckw6YFE+ZipfL3ZzYlhzWGA+KWgvWWtbOThFVFUuZn1GaUJDakQpMlMuTHdzPSJOTUJLJFVyY3RuaXE7KFpUVG92e3wlc0VKLDhhU2YlTE1ZZTVQUCpNdloyNzNiMUwpR0ozbE56'@;
put 'N11PQXMpZjleP1hvN2hgVSNMPW1gNi5gfHwldnpROkc1JHx+fD9adSUkW284fWNTMURrbHsydXJQLnlSTlEzaVEwJCwpeFZHKT5LPE02dH4qMzQxdFIoYClERjN2JkVBQFppc3dZO3t4KUMkQjhDeyw7ezBNWiFtRTtuUGUmfGlMNUlvSHxjSnQsNSsjZT03SUh1TENxenB0TSR+NUd2ZytHXWAx'@;
put 'Q095WCxCTGxyVmpiQ2VwMVZLKixyeTdyX3lnJntxJEckcXtwN2FqekQ+JCVJYzYmaihRaUpSaCYhQyMyOmlTUSN3OiU6MzB8LzR5WkQwUG5mZUFyOUtfQFNyMTRwTltYMF40fj9CfCpHRXx5NlEmLD93eVMoP350fihLVWhzZj1JNWcqYjldQCUzZytGOjRLWjdKYChqbSkoWn1PdlRaMTAjJVo+'@;
put 'eUA+Xj5JNWhkSCpRY2psdGhvbHRCOkY9NyQ1R2s0VSFPfEM5MkFdd2gxWChCR1IsNT1bRCJvb01aMXh0NFdiYTFgZEB1MXd2eF81US5fPHxTQ2sjM3NzRm1nK3VmbDJ5LGFGNEJtaztna3J6LmZSPU9aVio9SGpncSFPWlZ8On43SmBXNkArYHpdMHJObmtQR31bXnlVIypWemk/R10zZDxzR1A8'@;
put 'cSRBcDYuXmopN347bVZ6Lj5jK0YrMjwwZEhqYnFtfn1PNWBvKjU/QEdlTnBPQDhEZEZXcCo1T3Z7ZC8wfEByKCVMRFc0Imk/ZDZ+dlR7Yzd9dURuQF9JITFuJFdxIiZOY01gMkw1UUBZN0pPIldwdF5MZ2pxMURublJEPFFjVDhdQX03a0gqTW51ZiNvVURqKWIlV21WcXRtaWVbSSxDIXUhdk5v'@;
put 'R3Q3TXVFSixoR3FLSyxFYjM9T1pWWmo3Jig/YiwoQjlTVkg+WWkoT2g/VmM7OCtSVFEwc1NIJDklL1hPen1xUnMpfEF9fkApPEZuN1liZV1TeyZGeGpwTWU6OT9HMjxpeSlweGtVZzg1aU56RSMvMn5rTEhUKzhfPGBvRS59N2l8OnNBQXRRQ1VwISMqdDgpYUYuNmEwTCpmMENpNUY2KHcwV2Ay'@;
put 'QUxLU0xTRzshP3lYPG9ddXBvZUtweCF3V2RDTHk7eyk1NT5jLjJUSnVPODFEZzU8YFRVbXpmQi9Bcm5NdWh+IWVKey8jL3QxYTEjdENgOVA1PzVHSiwuJDpHY2U3PVlFby9xMjY+SCJIUnNhTj9ENjdQOzlAZFEwX2hqeFpFWjwmOSVFRn1AQHRbUktKQnBvLGMjenBQM1pRTzFIZmxxT1A3Qi5I'@;
put 'U3JLX3tHQ2MqQmNQQ11AdGE9cmEhXXlqJnlVRGdiUGI9MmJrY0x+LiQ/aTRFbEgsZl9bU09PYkpIQmV8QGtmWCg7NDhjNitIdSwhK3NYXmZwJSFjQTo7VmdlNzBVR24hMT1OUEgmdj1JTF5ka1VaZnZlakk3Vz5tRlhWZm9VdDVZYztydDZ3Pm1TUU4mRlsjNE8obT97dldSNlk3bjsxMnBYUm4z'@;
put 'PU0rVlIudWk0VTYoLk9HUjZJfDV7Wk5wRX1CRGNQRGk5MXpNU2M5YyxnciY3TVl4UHglJDRBfUpmTmRDfitMJmtQdEhXLnlTWUluWFdkY1k9LCsyJG1mcmZ7azNZOzYzJlciTU94Zys/Y0lQcUJdK203ZWl3MUBjNnVRaUlrZXtES0RaPXl2bzpiRnlLSjxlZnlYJjhxYGhVVTwpR0cwOkYwSFJO'@;
put 'cHM8QHpmP0Vgc1MqTktWLyskVztXU2l0NGxMb0whKHFEfFVxWitaQV04WHEwZ3d2YUdJfUcsa3lkeXA5TkJQV0QyZFVxV3xRSGREQEVjZyQ0dmhWYFApPTFkdkguMzFUXXUyZWlVRyRkWDNaayxkfjBLJl8zWkJ8Ok5ORG4wTVNSSz9VZCVOS3VIWEpYO1tBMVBnfUtEI1RKelo2a0E8ZnNjPDFk'@;
put 'YTFnIVticDBXODM0UFoiQEsuPkJxaFJOZ3x4Ki5yeWQvTXxQOT9YXXUqR2dacFdVPixBNUo3aWF9al47QzpybzVpOS5YI08iajJaQS8jKipTV3Z4NF5eSTwlXWcmYkQ4Q2s3JWIiI0xVSTFlcHgsQzx4UilHWGRYN3w0d2t4ZXBwMVJwSnp7MS90S0YsTlRnLzE/bmlMblclOWJ4dE9xRzNPUVhR'@;
put 'OSgscih8aGFqS2BPVjV8NmlPRy5pSmhEd1A1SH5vV2g+azIrO2ReZiVzNi5jfXomJE5nbWxuZy8hS2lKZiZXZj5LdSQ8a2IlcnV2cHlvTD5KbHsrSSZGPSlrWm1TenwjOWpvTCwmcTMvOWtkNXVycE1WJSFGSSVaOFcyeXlnbWwwVzh4QGk6YlQ0bFtgaz9sP0M7P1EoTlg9Z3NEREZEUFpYS1Y7'@;
put 'fW8ybWM8Rn5dT2pAUmwic3JofXY+LlBXfkEqY0dkKSNtYyQzJW0zVTQlbWNWNzg3XTRXdyFVUzJ3fkxybzJIPlM2SU94c09iekdRMW0zYHRURERHenc9RTBoL2J3dyNMc0k9LDIxQDNbVFpnSjdTXmhVSiQ0W21lblU9UX5qYlo0WDY3QWRgN2dkQHVVY3pjMGNRN0thNCpsdEZgTnBMMUpgckhh'@;
put 'TkY6bllnR3l9d0pMemprYWdWYklnUW1CKXB2VHkqY0J9L0BrWy5uPltzajgrSnpRcTxHWE55RDs7KT1bSnpUaXl8I3F1bVJmbEdXblU+dGk/NDRRNUIpTUZmZ25YNT1DL35WOVIkTzksYjNhazx4Mz1lPD9GfXt7Q1pxQ15wXkc+KiVFU0guaHJ9MixIRDwod09gYGZyRzteZTBwdH1PbFg1WzFk'@;
put 'JnV2YiVCZWtUY05wT01OSERdSnFdT2VdKm1pNFdveXEjRDguNmV6Omh3LE1xT1BxTUc4LjMxN1ciNUkwLG5EIzBkZlpDflY3UWNvPSRXI2R7TiNgaCk7Tjp2fStBb1koPFVYUkU2VWFAcXd8e0dLZFsuRnt+aE1IbVpnemgkTUVWekxLLlBDbm41b0g/ajt6IS9YS20/bmFBMmJoRlBYY1doI3k9'@;
put 'MDxsTjlsTzdGZzFUV2hga3kwLjd+eUJGS3VWSGNwZmBwUXp+Uj81W2NOMHFofW1rKzZPQih2PUIqLzM1YTo1V1YjWVZML0tqU1FAek0+TSpNWURBcjNzTDspIV56YiNXPUgqWWFLQF9HRDtgTXJ7fXUvVX4rSDVUKWdzL1JfSGNsdGthXypEVzZ1JFJKUU15NFF7bixVNkJgaDchMVB5YThIKTg6'@;
put 'YW0+TT9NJmFteUpNQjxaZ2c5c107YXsmWV89Tn01SjVRdm1vM2dISypKK289UFlJLzo1RUlHWmMsIVViS1NYdWk/YnFUZyU5fHg+IW1aPHhIW0VwSjN0KTdgX1ZyczdwSmRZTlAlekZVaSJOM11PNyJ1czcmXWMpdFN1UW5YOyx1WHFCNGdNQ2d5O2FiJm0kTSkrST4pPDxbeHtgbFMkSkJzcUIu'@;
put 'TX10L3RYP0tvLyRKPVYlIl9sTCYheiZIUnx0XTZNaWUiXy46TSJOOWNnJVMpXnFUVWFvNFteeTwpUnciYDpReHNEREs4Vyt8RWVwbVdjIUF4VyomfUJWLkx7OHRbKCpmOSFmMDN1REsjOUpQPE1Ub0V7WS41WClofGYuVnxPNURpXXJAITs7UGdCdikvb201PWo1SXhJeD5wLklnNzFKTXwvOy5e'@;
put 'LFVqOT5IfGVtMDQsLzs/a35KZkM+cD09bzxYcWtzQlBTaExmSj9rTC9VfVtQV0pHTzxyPipec2s/IUQle11OfEZZIlhbWChncnc5a3RlcEAjIWR7eFdmN2ZOQi5SfDBtSSlGViV2OlJARWdNZmo1UWl5Rll6KHxMXXBdUGV7W240KF5UbSN+Rio3bkRrUSF2d1d3S2VJbERYX2lEcmBeZSombWhu'@;
put 'QztYaENJZSF1LEEhckx5TmwwTT5TNz9OTGQoQ0R+ez97fXBGQGYkYVJke3p4NHFtMmwrMkdwIWNoSUlMZCxmTCl8cXRDMysmU2xULDshYkBjNXx7aFZgckVgQERbXlJKITlrPllic25FfUtzWSwsJXN4fUxKLmZ1R1g1YjNiRyh2OVJsb1pDcCo8SGtnbzd5U11AWldjaSQyTUpiSEZGe1IocElK'@;
put 'PmRMJSlDUDFHaFEidnlgLkZMZU9fLl8pZkAzWU49Njlla2NlMiYpYXQkdVE3RUs1KDlMYWpHKjBAWiZiRzh2Tl03QF0sS3wyaT0iR1gyMjVbQCQ6d1VIWlFpckpDO3ZmTC5CY3UxZnd1c2AlLENIeFVydnZzfFY0SVI7a0xWISNJOiJpOClFPTM1VzV0ZXM8U1pnfitCfFdfVi9ySUBRajhHUEhY'@;
put 'ZyJ3UXtTKGlmTzdnMVg1OEUoU0hYaWJ+V0JyfkdjIVRWZDx6cWUyNF5RSF50Kjs9NFI0TmsibG9reyJsbEZbIV40OG5MSHxVRldrIVI2XkVZcWhuLlZpNlt6Pmk8N3UmNCl2XSF4YEJvYkhwc2FXNVQwNWtTWlNrUmBKYWdeMDgoXnEqT2xsKSk0cyFTRTYyN0hPWDlpcXxjV3UrNChVUE9WeGQz'@;
put 'PUsheDkjKHoxeFYlRUxjVy5MTmBgQFlPfiEvYVVHYlo9e2BAXyEzMzBVZSlMN1VOVjdfTnpmTWYpWksuNT1MLj8xVHdab15pS25aUkdePS5yUi95eTEwaHFvLzE4Yzh5M1EuWEFvfCRVd1E/bVV9UmNJbC9AKFJSZ1BWRDQ6ZnlsMGtFTT9rPWFtdmcjd3dYQkA3W1lFbmhAdTtgKzlCNywsJUBs'@;
put 'aXB4eStnYUJ7UkRlYzZ2eFksMXh8LjhPXik2Xm8oTmY6USMrXXc3R3dQT2Y3KyNfcGVfSFJWRHNqZVhvTjZLJCk3cntAI05kRl4sSktwTipyXk5xNjlLdGBZcVBqOkAxUiI/O0JAcmZ1Mz9geF00QldpKGFEdnxYJkE4YDdPLklrWyJSe2ddTyZ1cDEpYWlMUnYsQiViXj5pV29jXWRCcTkpRWZ0'@;
put 'PEg0dzZCWnV2UlBLN2phPW8kal1kbSNRUXQoR197M1FhdytbXVZXM11CK0Q1aXpJNE91K3w2VUhiUTY3PyZyPl88Zkp3eFh1PnEjPjV3TUgwLi9yT1R6cUN1LCxRcmNJJDEwcyVAVUg8IWxbZ3pPWXtgMVR8TmJPMTlJKnJUI1lqczcqYjswQyZxYSFFWH4+IVtOZztFX2RAMTliaiFVMjJeIlki'@;
put 'dyYvJGpSaEVNcyF3Wz00SHppUCVFL3YofkxDbkVSIVosaSZEN0Z5PGtLS1Yhfk9sYHBCfml+TVs7eGk+QmBXVz1bSVh4fXsyOjlkPWVTSmZOe1ErNHA1MyZiJFIkTGpyfk1xXi5WRiRYcXI+XiFpTDw/aFtpSixSbj8+R1JfWmJIJkkrdywseC5ya3RQRSFmJSwsO21TLihmQUo1WWhPdyw5Skh8'@;
put 'fi5TL3MmRDJoPjdMe2BXTV1AYTxKUlBZM3RLdzViakcpamw1OztoZjskMWpCQj8/OzI4IWNrYmxfPHtWU1JUQ3RtSlAqUkRHJm9pUU9kWGR2YDFRMHBYOj5db3tvWV4yb09mPzF3TUQoUSxZMWFuL2J2Jk1EWkl4ZW94IW5VenZTKiRJYUIydnF6PypVLi8pZGlQKTJ5M0N8VStLY2Foaks7ej9L'@;
put 'KlMxand6YiFyUkp9MEBFSG1ANS8scnw5bUxgbn02WjU9a1IpOlYlemIhcjY9Tl5AJCosNz0lfWswUGcjfWF8cVZxP2d7JWR3WV5AWEB5RjRWI1l7YD1XTn1uPipZdmRHfGd3VVIiO1tOLERoaWo9fHYmbldaZ0dLTH12QWl6ZEp6aDQ+QSgqLCwqMntRa3k9RG9bSmBTInpzdypnJkQrQDxMcUxK'@;
put 'aUVHQCh6aEtifkRKblZbXj9dLHBZP3s9PSMlbTtVSEtZKHxweXEleXNgKnlxT3JvImA0Z1gzMCR4UiNxMmk5SywpfGhYTj8qdE5oI2xDMDpfKH5bV2l0JHl1NF58XiZRNXt8KDd2NkBfZD4+VXxXSDU5SH1AYndUczpMXmtQNEszdmZ4dzFzOWdiI1l+RGFaSFhrO0p2MF9mX0EuT3FYLCZMY0VS'@;
put 'Xj1zPHw3VUY7LmJ7eGwodW9qL0R3QltgXX4xQC9oQ3NDPD9uS2FjKkF4M3Ypfnx1T1RQLz9jXitMc1BMJXM6TSQoIklqPUZsWCgzfnwsRzVGODc2WXpXXXZzOiI6a3MmVSxWWF91YDRZdFBZVncrU0UjO1BzYEheXUFSVDJxJVtEKW4qXyFpTjw0JXlSIW1lPFg4XiE5KzBgdDsmT2pweihPaVdf'@;
put 'MSxlMDFpLCw2KVEpIyxiLiUlNUxwcGlbbDx0TlVGV2wxcD5BeDNWImBQNl8sPTlmXjQ7Y0MyZyp5akExMk5mMkxTXTAjbWhVXVJPSGJGaWdAPVNtQmZ8LCZoODJQeF4lP2BDMml4QWB1VTpHO3ReYmdMYmNKXXhhVER8TCFLdVVPMHZ1W05oVipkK2N6KEZdcX1lOixlN0RiKywvbmVNRXBzbiIw'@;
put 'MkorP18qJER9bHIqaUZUJlBEVkVAKFdsVSJRT181d0s5dlIsKTFfcEI8WEsmJUpKXVVoOGMrcVkoXnFlMHV4KixbTVBpS0skM0peXyNGRzk8Q2lzPnZHeWpSLiR6cWhOM2paNGdqeSosRHtPQWwmITUyZS9hcVFbI15WMS5ZJUhNUXYlejhZVjhZVSVrRWU7MTRmNTspdnFveDZLMls2YktoTi5m'@;
put 'MUQyd1I6aiRUUmFFNDVlRzFEN0BAckpdS1VsYEpIWkdTOG9zfFMufHk7aDIian5qTixGRkoxOzowLDZ7LGpkcixqbUEsai9uNG9dMTdLZEJgQ1pWVVV6K1RRTWwqLFV3Yi4uemtyeEI3OiU2dHI7MktEUDxfIyN6Jm54cVFeRyp4PmxWNUJVc0pGbVt6KGtCKndzaFtMZ1Vrbn53K0spTUZaMkJ3'@;
put 'N2dmeyFwPlFbZCQzQmxLLjw0TTxIeExRWTl7V2khNTwvbS42MW81a0l4ZGR6JkF7RGkkMnBUUHoqYFBMT3s1RHRkWCVEWmxHdEcmXkNtRiQzV2sodGB2e3YpXzA7U0RednM6UWNnZ1MmJCRpcVg3T2JuN112UGZAQyVfQiVrXz5uSUdpYl0vUFhNTWxFO3ZyQWxYI0RQMjpnZkZwP102c2spcHEv'@;
put 'OWkoR0dvOWdge303KEZDSHloXkN9KFYibUteUlVjV1I1fWV1Wk4/TTRrWDdPYk9XRjdETkhMQEZ3dylMclhhZShfczQoW1V1bkpWfXRaRSp6Kj5WIW1ARlpUNm4vXW5MUjEkYGlUK3MsdCZ0OndLemd1aDFwOndmLncmTDJLMzNMOTdIVU0ocEwpXzlXV2BKKH1wZHJlXnZ7dioySkA7dXEmR1U7'@;
put 'SkBGelM1XnVxOlRiOThPaWghWXJHXkhpdG81c2Z7bzx8fWBZOFlYJHg4cCl5Yig6OExaLCwkL2x5dzwjY2BMd1hDNC85a19gLmhUOV50P2xvbGJVYyZMQ219Q09uSj1uPjtKQ3tkdzlFTmZeeTEzZ1MkWXNwPk9tek05Y1JWL1ZKYDlRKyJ8P10mTHVBQyZ9djp5aWdvTHs4IzdCKk1gaj9nI0xR'@;
put 'QnRxVypMVDE8WDVFZ3xoWUclPlUsPihvVj1TWCIsdT9uOlFbX11EdDtCRkFEKyNuRDd3d0FuUDEsX1N5SiZZWFcjZyp9UEZ+K0BDOlVVdnwlW0xLdj1UY1FSX0pJRm9HLCk2YFQzRkZAVlV5NTF+bCpMME98WT4rZ1hnWk98XVtzeGEuJCNOSj5kS0dKKG9YU2FoZWUrLi9RWz9XJXBtWkhAaSo+'@;
put 'KHt5fGBSNSlrJFRzSH0rUWtmbWs5JmwjWEJyUjUjLzlkNjFITGM3biNBazRjdiRFLm0weU56Nl4yNngreVQ4PUZgeF1OMUVZIkJmPE0lSUw+cGRqWE5ESXxPOT8/d3RsTTJtPiosPj1IWF8rOShVKSNiayNVZzA9NChjYUsqXTZlO3xjTEFrL2plaWw5LiVvbSFzUjkjIkd2WW8vJmBnP1VFV004'@;
put 'IWxbbzFXUnpZWUR2MF90cSpQQSxVeX5FdiRaIVh1e29nIWQhcyU/b0VRbVpYSjB1Tl5kOHo1WjJsdy8sTCtOXjE7MzF2eHhranhfYjQlLiV6ZiVrWF5sbFA5clU0Oz96PHtKSiR1OCg5IzZodj9UYVNyJXJiIkRNUHJTU2t3PFsjP1omY2ttKWFzMyQ7MS97VWMwQStwPHAleXArOkx5eTlUa2k8'@;
put 'REBaclptSXx5XWVJKFF2PmcvN2RGJWV8bVFELlZzVmhOeFIlTEE1L09nWDo4W1h4YmVuenFuV3hsKGFDTGduIV07ZEl+azB1LCY4X2A7TEF+OlljSj1QN1k1aWVNKTtrRG0vfDo1VVReelN0SDZVIV16ZzE5YEs/dnNJQC88Y35qdnhvIWRsUlpxWF9vRHshZVNhbC8oZ1NOcm1wWiosVkklW2k5'@;
put 'azBdTV9pfChGVj52OGFHTngjMCFYZkRTeFF8KktgZ01mM0V4MyhHOFZxQkdUe20/aEczfH4oVlZlUENbQkdyTTgpJWJ3Jl9UcCE/YWRmdVgkJWQ3VUtYfDl6NUJyczY8SW5nI35SQSNlLD0/aXl1NTFxWVBtfXx7cCx1NnxSXzgqN3BgZU52JTNFPGw0N2RTZWtGUjoyJEl9IylhUzU/eUtTL0pa'@;
put 'SjY9fEZIbUFTVndtTjVpNjUzdVgqfUddYjl+ZVNeZCJaZTZfanlHNXxrP25kNi5WYSZ5SmE8cX5jSmJlbH5hVndzY1ZYRWFxSTd1bX5UdDxxKHRPYz5iZ0xfaDxxbkdremxaKlpEbk5+ZHdtTihnN1pFNl9pX28hMWNAMWQjfHhHKkpKWjcqO1pbPCEkb19DPCgreEV6WTh+NUJla2RIZ3N9V24m'@;
put 'OWtzb0BNd0Mkfm9fQFtNKkhZWSo9LHlxIk1CLFdVRml8dEw/VWNhISN7OUtsUVdKMURyTCMsP25mSzUrYk5AQ1FzJCYrUStRQyFGZUpWSUJAV05DJVJ5SEFMRV1RUn5GVWdMZEdCPzFCY3o5cDdGLGIma3tYIWxgcz9RTUZeUVJNeSJlTU1kYVNqdzZBX2hxQnF8SzxIcU9FIih+KzZdcEBCbUFU'@;
put 'SCsoI1A6VmEoQlhpU25mVDZOaEppc3V+LmM2Q3hxVVEyZkd2KUhqcDYqcWFlZn1YJWhrT0RUN1hoLjRBIWg3Zys6eDp9MSojR3R4U0gremg2JitJTnJYQXJsPk5feVIyPXVGSWk4KzQhP15ASyNVfkJAYjclUX0oSFBIJkt0THNmRmY/fTU0RkklPXl6Zk5tTm9gcDsoQXVyJCFUJEB9LDBSVl1L'@;
put 'LjtrVTJoOWlvXnoxJC58KzZkITxLUm8zRjA0R1pWYDM+e2JMLFlaJmBkd2xeVEBAPmw5RzNSP2c7Zy52TipnT0RuejlpOVtYRXldMmtYX3wzQiNOX2VBUkJncE5tUk5ZVGMpKVh4KkhkOTM4fG9Nfnoqc0MkWypyZUBifHlQKCUoP35CX19OTjlkfjZIWm4mblFFV3Y5ZE4vSXhpPTZxQCR2dG83'@;
put 'NHlkJE80NjFIUHZKJTxjPyxuKDtINSFYKFdNKmV7IUZNKkdtNkpScG9QTTB9WkovY1QweFBdMDhIW25dc3hBQkghdXlYalB+QEorciJ9MWVFLE19cT5UYHMiQTdbTDJVeG1zODJAQkVdcldVfiJ1Zi8iVCticVNDYVI2eFp+SVBIdlNTMTV0Yi8mYlZVIzQoTmU1NmR9WD8/P3U+YCo3czI5dDVZ'@;
put 'OVl5LzEzYlYpNGB3PyFgMVl0PWAjTk1fSnNtKmZwfF1FXjM7W2NnT31SdjxjfnZqW1oxe2xHPlt8PE1pWUEsXkFHXnFUNGNjXkguMlh4Y2FVI1RIeX0jKyVqQzF5NmI6KEJ1WnZPYSp2K2FXNSYrVj1NKVcyTkVEZ3w9T01DZnZkNWYzb2s/IStTVVYpfUZGIltCMDJ1KmNfcW1MZjd0JUZLPE8w'@;
put 'MjRaZiVyUEh8MWo/IUJSMFMvPGw1L1lCfncvNEQoUy5mP1Q0eDFlN19uaUVdJUVQLENLPERJckdOWyYzJCpDfTE6Kig1O3MyaEA0WDJoNmBTTERLVE54bF5xaSNVVDdXPilMN1s2LD5oT1E+SkRuTn08dzlkS3xBV2xLRGBMRXlCIXsvRlo6cmRDPiJKLHQyfUlSakFVPVZKekRTNSp1V0MyeU1p'@;
put 'aldafU0rL0Z2Xm5ye3Q8WE8ma0t6RG9BdC57R3NYMT4pLG4iNHRtNV9+KHozZU1fTSpReGNdPjlBaW19PXwyPzNXWE83L15NY1FbZnA1V2QiU1tMMUo/P2dKWHZxOGxpPF1ffjBjKUk6cnRebXtwV3V2Ji9CT0NON0J+eV9gU0hBKGVpeTBBRzIoaXtsT2xITGw6Uk0sXkNsTW9PWSFCPl5NY1E7'@;
put 'QnE1V2RQVF5sUiskdGl7L0Vgeik8RGJILlJ5d3xUZWFEOTx3QktVVXFvJUZiKTwmcUZvRW4oTlt4TlZRbDNwYjM3ezNeKG9EYEc5VmYsLE9ncVVDZ1RpJk15Z0lwWXolUmJEQ3hUQ0A0cVIjRzNSaC9wV30rWTw2eVFpJXleXVFpL3leXT8hbCtpezZwLzFFV2gpdCVNc3AlKTc/TF1uXi5maklM'@;
put 'LCFjfWlTfSFbSH1tNSxdZ147ezp3NlVlSnNUSXwqaHo+LCR0JXAsLE5BVExLekY+RGlXVXJkWyRpSTwuKn5WcFlIN0ZjSl49dTk3fk1HPyt4ekJ2LzAoajRaUENdbF85V1ZEZkRTWH0jNWEmJkJ1QndIWjVea3BoQVMiST5NVFFCYnEqc1NjJl9rWFApeVdfPiwxN1VXRlg5OmN6NExBMmdkdDti'@;
put 'dDRlN1BAbndRKXo2UDEvP0poMXtVdzlUbiwhQ3dHJWxvSFNiNGA4eHZCSUIuNyxnKV9DIV07M1A6TDdWOlgzbFI5YyV0aXhafWhVM09VMUlbYUtVdEB3PUplbFYpNUJmcD5IfXEvRVNyPGlZeWooS3ZWO3ZuMlQ6I0BbNnZuS3tKJSYze0B9ImBrL1NuT3NyWT5CQW09Tl9hQD80dTBEQ0JEKSJx'@;
put 'WnpreURUbHo8b1o0bGRES05GcmttXl8oZig8K3A7b2YpJW9vKEklTVh1Iz4uMUBVMlRINC8yYTojTlBWJnFVMzlLUipDV1soIiZwdGk/QFZ4Y2JHTlFFbkpNJnN1UjokMWRbWl94ZF1hR0ZFak4wMSl2dWMlcF9xOnQrJVs8YWxWKW4sVkBgZ2hIM2svRz8rMVQ3dkxxU3o0Uz5KJix0OkpofHBV'@;
put 'QiI/KTRSa3A2TVNRblhGPzxubnh+U3BSbjFMUUVfdVtISzsraC42d1hFNTs4RCx7WyYlJjZpQ1pze1V7ZFs7Tjg5TGxsUnlXWjJkXzBQZ3IqcWVdQk1meFZBZG1dNGdoaUJydV51MWQpaGhiOX07TT9mXnFOfCNzfntkeDA4OyNae0RYe1o5MTdkenYrKmFLS1FpeXBeXTJPRj4yTUQ0IlElJiIi'@;
put 'I1ttVmh9RC9jJG12RDpydCI8PklOUiUmaT46enFvQHQ3LyZiTm86bWNOaWp4RSk5N183NlYlWnNpV2VXbnZoQywsfFNKaWQoUTMzQnImNU1zPm03fUlzXipDdnN0ZUVqTHB9cWI4OH5UdipjNzFoSz5TQTVXPmQuUlBZUS9KLFo+UX59cjFMU31MZmNlO1JuN0pWKVlJZUw1aHVONW4+YDg5L1Rg'@;
put 'W2JSbV56QWgpfnBXMC56aiZ2K2gpfCx9Un1Hd1k0YTgrOFNEI0cmJD0yI0I7TVsrN0pUSnlxSDN1TDp2e1IzbDxPcDwpI11MYD01aCZHNlhvVXIiUFFkM2BuV2owXlYld3QoNE1Me2Mpdmw7ald3dHBbT2JzTzdncjkmYWMlezpfTVhAbGNsZz5VfWVbPV40P1FkO0BQI2VyJls4e2k8Rl1pPmI7'@;
put 'd0hNVXhrcFlQWj19ZW1ZI052RGRib2J2Q2QwaiZqQlR4Jll2RytEQERgdXEmWzhYR0AufFkmJk0ueUdUQl02dC8vQHouKT4uUGxWTiVaTGgmKyUxSjpldnI7Km9WKjxvRmh2LiVHdjdBXUJkfUksXShBPHB2fTE3blUvQjlrJWVHPipqSnMwYldYQiJEc2IvODFDeU1bODdbIkp5MUN0dzc6fn5E'@;
put 'NFRyMS4kNXU/a1V0aEJdPHRddHVGJXokcWwpQWluNW1lbGw4fiNoW1NUJWxvfDx7Kn4pXSE0KzFsNTlpK1N3Y0NndmdhJmtFIntxKUtoczViY0JLI1I2WTBOJnlsc3F9b09PYjdNemdtW05GOTJWakdpcGhRLjw3NyUjT3ZTbDIjSi4ybClleEFFVDFJM2FiNSlJP113VDljSjt0bD8hIXNxUUtN'@;
put 'enJSdkxmcH48VT5maWIsPGo2eFllQHt5TlJRMCpRKXpMSysyKHU+cWx1Ln0sRGJAYSVmfj45O2lyXilNcm89M3hOQzpBMks0b15WclVXZFdqcjdzeixrRl9tPVkyd3thbmcyKCRVVT0kfC5wNiFGSzFEPFVac1U0bkJEVns6Nj1gSUJ+RWxwc2wpWTVxcVZxZTlUVDdFRHlNWztMN3ROUVAueG93'@;
put 'fGpsOWcvNiNzanBHTCsjTz5Ee0tzfipBVmc2bHs3bWVPPXJdI0N6NlpPSG1QX0R5cFAwLDZUVFI2QWM2UnYyKmYhPzwobSVMJlgxTnltNztMLHFpJUklLFVSPDtdaDE8VXNtNU09SHM6S2Z9XUpXZ0QjaGY1NnwyS0R+ZVU0QGFvXkxacWxxMTRCLG1JK1BfPk87e3c9XUZYTDU3YWxPVS90fnlQ'@;
put 'fC46TlJMeEw+Sjo/S2EzcCRvVCNJPzgxNFt8V0N9NFE1TWo3clNCfmRscypHWmtneSNSRy9NVlU4MVhFWnV0fXZ8V3BUckg2OTZDez5CJlhucCImbnQ+TD1RX2dPLj1hYShDX0E7KWdAIVVpNT0/XTg8eypOc0RTXnAlMHVvXmM0azVXUT0hb0tkXWx+MlBBInt9bWZEMkI1NStRcz5beUNFLjND'@;
put 'T19DbVpJPldjQi81azttZHpPKEYjQGo7eEooQS5oSDN3UGc0MkIkNTJAamwoXyUqTDtedUBXbn4yU1M8eEJjOyxjO2p0MHR8bUwyVkVrXncpKWp0JE5ZbHBCaGJkbVJ6MCY4e2tkMXd6b1g5ZEhPJCxJbUJlRCx1SVAjWyw5d0lqOG0lSWM2S2UoR2suO3c1IyZrVjsobnJ6Nm1Idyh8Ll0/Wkk+'@;
put 'TUcyUmBPTkRpO3MqPmtWJXohYXFuMF9tRz5hNlI+NDE0Vn0uPDshMTR6eFJHdit9cGp8OUx5ZV5WRX0lTEJrd1hTTzI2biVwKXhNMXFbamU/Yzd6TCw+KVYwcnVaZ1VUZDloI0FTWGEiW2czYDNXMCszN2xnaiUwIU1eNk02RzBSYnBjcS9fPnduTj0pczouaChBWDA6UXpRUz5+e3dVRVJ7RnJU'@;
put 'MFk6OC4+VT5OfjteNm0oOGVDLjFxc15Nb0VqNn5CMHNTWDJMU1dvTmQkQ15AeF5nWVZydGxkI3BvcWYkZHtSSHgkW1JZc2FUXn5VRUQvcyp7MClsSypKLCh4JSpkRjBucERDfjN+MSs0biIzJTxTWF8+c2M+MzovLCwmWEh9eCNWR3c9ZWQpQVF4UFExQWJsP2ZWbW9mVkQlKFlJPDIpdU04WyUp'@;
put 'YW10RC8pMUtjdCEiK3QhIk4yaTdqflM6I2g+dzBvS0srMj5MOTdQcVFSOz1LKldecDw/Nn1PQ1s1UVU8dGh3TXsobiNJLClnKDh2MGNlK0ZpdjJZbDgwLkpzOix+VU84PUlgOjQ+cWFTN3cwbFhrRnpvSk49JCQ1UiQ/ZCFXdUBKRkFwdUMvRXgpa1Y+UTJKPVpWNj4zSGVUfVR0eSFDRmV0UUZN'@;
put 'S1lVdlR7bUcsSD5NOE53cDU2PmNGJEIma0JBLHUqNEt+XkNta0BvV3tsPE8rIntNNjRrLHNlWEZlSlRyaTFKPTpeOnYwYS54R2IzcjAydXF1RSJjc0BDeiNkMypSX1MqOUFXN3FgIjR0SjY3Y0E0K2RNUFN4XlY+TX5bQWZFRn0xQExpQSEjKFFWfVdLKiwrJTBZakEsKW1tLH57UCYsOCQqJipg'@;
put 'dmwxXmQxZDMwZkkqYCN4XWc7WH0jcmlvODkyUns7YlQoV0FTKko1PTc6Qyg0OiZHay5KfnpVRW5SZHRLcSpZclkzdlQ+I1pHcV5kUHA0eDFHdm19I3g/antGemJUcT5CVjB6b2EuTmJBMmp6KyxdVTZ4e2xmYWJEWGlHeSV8eDB6cHhVS0t6ZVZJeTtGZXFgckNWLnUlR1RSQEk3b1tzSW9MISh8'@;
put 'T0JrJDhDMlZdKyNLO099a0Q4Lk9IRnddKWRHeHclVzJjOkJRY0JNRVU1fkhYdW99c1RPXix2cVNoUHUuPHF7WEhwTkMzSixmVTczajdAL21bS3FBOCxYWyY7LnpLPTopbjtFJGRgJGhMMD0lKXlOVHE5XU9YYnVkRCpKXi52Mnk3SFhxI1hoPG4mW0kzOFlbVWJlSjNaaz54aTdDMk9dY2gvV31h'@;
put 'ZVp0fnVsNztLJThMWlFDJXhrPVllLGlvL0ldRF8wJGt2MHNfZiF2SEk6PG5qXnZqTCFNeTRVfjMqeXxxMU95RGhTZypTMio4OV1del10WkJCQmlZIjhUfXFgZ01saGZARkAoY1o5T0AuYUN0Sj5UO24iXXdeQFNpZGpQRGpMKyV4SWJPU0dFQG5hcXlYeDIpWXgiPVojKEBQXyZzaS4iSyl9Xl9d'@;
put 'KWpJdmdWJVtfXSlESTRWL35JaGQmVSF8K0VIWk1eV0V8OnI4X0MsZGV6dWklRzozIUlpejYlUnxRPShvb2wpSXVEcWl+SCImbDExbFtCenJlMFZrayZRc0lPSTldLlVLKj5jWUc3eERNWF97ME5SOj9XYz5gXi5oazgpe10sYWgvM29jakJ9TXJHWyxXQXtjYkt8MWk/JVJ5V1omV25ZTTh4Y05q'@;
put 'THwuLk1aMVs6SmRCNn1JIkhLUkZ3LHZ4YVQoO1p8PEVITj5bWU9gZ1lpeSorMCRScnsjZ2B5dXtiSHIpemszRkttW2FtJDpWbSl0ezl0XktseUZHRHFFJjUsOTJwe3NNVGZIP2IzdUYzUEpmZltTTTxnTT5TSS4xVEA+VyxlfSpeSzsrRyNsenM5bkM8ZVApK0tue1R2fGN1WjNmcG9Cc019dkI9'@;
put 'aXRWIWF3aDU9QV1aMV5la2AuMz83LDdCSGJuZiRLUnJ6Ll0wMTlxKTwsOjI+Kmg1TSY8M1c8eUs+QiouWHpJMzg6KGchPUhxb00pY11IR3VqbHs9KDVaaDVKLnwpdmxzK0pJTW5CR3dpcld9Smc9VVk5KEp9dXx2MDBxdXE9YU04eyxgWUloOyN7NmxKYlF+XnpEUU03PC8sNHQ3I0ZqaDcqazQ9'@;
put 'LE5SQCZkaXhJOTZYYFh6MT15LnM7Y0JKMTspTmBaX09QcHoxNXtKWnEuOCsre1VDZVAuRHRQPWJnK1IyPCU0RWtqXk5eISklVzhNJUVPMWgiWmtXPCxydDVsJV0oV3dmQjAwWjh0aXZIWEdUTjl7KCQkTFEmWyFQTyNyWG5VT283WnlqQEg3ZF13LDA5bTdDWzk3Yk9JaTUzdjlWV1Vzakpmczsp'@;
put 'ZzxhY3p7UFZpUTFFW0dlPENUJmxIaitYSm8rMkg7WEMmXkgpaiJ3cXtpdU5Sc1klVjtNXjUlJnJfYlZyaHMrSUhjYiVxaDUofmIxPnIhY0J+SW4se0lhL2oxVGcpOkRrTjB2S1J6MWA8IXVJWCwlZnkpKXwsdHZAO3xXS2FoYmRgSSNOdiZWTUgxREEvMlFjaXwwbU9bS3s+O0lYcWt6ZDhxMWhl'@;
put 'XUAia0ZUeyZhayQpWWNmOEkhYyZNUkNleEk6SyRCZ1dqKW4lZV9sRU0/QGVQUGx0MT1ueWdLREsuXTMxeHVrJT5nWUMzYCRyXXxAd2ZNIXRweW9IKXc2OCo5ejFSZUgub1lGQ2tQUkQ1OWx7bEVWXjlMeXN2ajswLEtRO3VWOnd5IVhaK0FRfTA4dDxAMUptSkAhb19EOWNkdyk0QUdKTGMocU1u'@;
put 'M1UrMDRwe0tLKio1XXRrP1lpNURScFlIaTRLeyMrUGFpWmY+TjpQP0NJNV1xUEthb2BUK2V7aGJafiUhcGRVZThtaERQO2dQNjU8bzM7Oy5AZGgkL0k7cmV6XXg3LGZwY3F+Yll1UksuUjEpR0VLXislUWsuKnJoXWdbKkI1O0twe1N7PSY7YGwpLHdqLzJ1cSQmVHkoazJUQ2BqPkpaUy9oW1Bi'@;
put 'RE0lJTk7ZUpbOzd0fXwsXUx5fElYSzVVM1VJXUdhJTdVTW9ZZF1bZFhoWDx7InJYXnl1Q1ZKKkwvUVZLMFF1dXRQWFdBXVQhPGBKbSEvNWI4WXVUYSF8STJGeWl3NENtQDtDalQsUz49TDtAQjtLUkZGUn1CPz5EbDY2JXpGRV0rX2prR014alpEb2ooZEM4JXIyJk52cFFwKkVJT3FCUW5oQGYu'@;
put 'I1pqKGRDOG4vdV9CUDNfZyE/Qktmb2orZG5OekxHSXdrWlYpdD93Z31gTEkmNH1fKnhwMnY5QiUsK2EhPm1fWTFZMyF1KWsxciF1UnReR3B2YXE0MTM7UTxHRSIhXj5EMm81OTElMV09b0UhZzdwSVlSeDhpSTZaPHtYfDBgOWJ3fTdFalN5cGNLdXkhOjNKKi5JeHlCLntDN1F2YCNDOk5uT3Qq'@;
put 'KztyS3Qjayt8QChjIm97PilGNklHN31AZSRyWmg1QDg9VzJDX11YMVVmT0tDPDMmKigiR0J2LCwicTUvcFJbO1J1JXdBYnxddikiJk5eaGI6bWRAUSRqeDxdUjVPNGx9QFlqOUdLMSk+K2hAYklGLGZtK1ZQUjBJcXBwTV9deyUoSUBwLGgrcFEwfTVnKklkT1o2NndIekM8dl5aaS9LbU9eSyxn'@;
put 'SzpaImYuaW9PcE1lOmM+ZWZVeWY9TzZUS3tUdzR2U25FOSR6ZigvIiRKK0JsOVZoazFwKEV7QkNqOTFBUig4WEssSCtWPFJIRW0kT3RHJkwsUHo5anpqPiJBclROZjdKdDxmNn08dWFkPSYrLHxoalImJHRSaV9jPzN4WjBYZHBveU82ZTtaUzZoW3JWMn5zQCZDPTdEallGYGhVJGJ9fnZLaTdi'@;
put 'TEc2WSVAOzNgOXJBXyhXe31JcSFCOnxQdCZqXjw8UWxmT0hOZmFfWUcxWEo+LDhCRjYqQCNiUWNzd3woYjN+dGFaMnVmMjBwIUkmdXtAQmolYTZZI0N4NF09KXpUMlp8Wkp2LCg2VVVxNThwNithPmFwTFNSXiFpLFkzc1d1LnR+RXlWOU44aSlYSEp1YjhZZ3pLRms8aWBEd2VlVk0yLEgyY0JC'@;
put 'fltaPGx4Ni9VKll1VlI8ezMuPzlkXSM9LlR+I2Z5VyV8bHJoIy8+Pyo9ZiNmUy9AJUlrfmFPZC9IJEpiS2x7WThmamVHbTVQKjhNeDtnWk0+WXgkSTU8cWBAbShEJmpZX0FmR2lCdGcvQWBTXzVrbzxraGV7OThJT0YmK1N3UE92TlFlNVUhTj0pWSZZOzhfLjFWQyl8KHkvVkokbnAlfjI6PE0s'@;
put 'PClXQ0xleU9YXkQlXWl3Tig8JjxXUywuQ2s7NmhUMHgoZiMvTzRsV1Z3ZHd0KWdJYEQyKWFpK3tbdzdWSzp5cEQhS3l1UiRuQFVYZj1URl5XVXp2KkMhIVU5O29CRm0/OiVPQT81STE1NSkmTTpOUWBFUkw4OUtYKiZ+a215LHVnXjApTV95WE9YUXtYcG1uI0ImOF41dCp6UGFBRW1dQCMvOTFi'@;
put 'JHBKQUpiQCk4b3BIKno5MSsmMXJZMjAiMVBQMWosaVNAaygzZHZ7PUJ7dFlNKmpVY0I0MiVPPl01QzY0TVQrSGdYKUwlXV8rSmpxaUc7YEI8IXlsUyhfKio3ak9eWkk6alBtUXIpdEs5SUg4WUtHTHV4ImApK1lQOGo1eFEhX09dZ203WHZ4Olk5NF9IdGddQGVNRyZEdDRnOGNdLEYkPD1nWmB3'@;
put 'OSZlbCpAa3pfRF1EaTB4bE12MSluZmEwK11YZTV1cHBfVjFgUEd3KU1xQEFbQD9wOCIjYkpCNVkoT0hlNXVbW3lCeT8vWW87azxsNVdGR11qbCg7KzhmNUVlKF8/Oz9Ecm1TK2VIfTE+JVF0aDVkOix4djt0ckB3dkZ5XTNscUZTbz4oWU1hKTdRZ0BrdXdpMXVRJVhoUSZkUEQ+IV49e259e1dX'@;
put 'MCssdG9dI3pEb29AazsrVlZKSDptVUAiaitBRStPMkhMLEJGYFdROHt5UlBKRkRxWmE+W0NjKn4wQVI1YXFoPmpke0FHbUNwYk4+PCU9b1t4SXd6LzdmKTR4dTNbKkpgRTF0NTU+P005YzBSTVRhJE04NGR6NzRuVX0iISZ2SW9VVEkjZk05K1M+LDs/a2ApcXN4OyEselRuJXtkPipZfVlkOkxs'@;
put 'PiEjTCVnIlZSXnRtbm5QI2hMSnN+YnNvPUs6S1pofFBWXTkjbTxeKC9FLmFyKz1AV0hDTCovYmhmRDY3LE95P0Y0JFFhOEBDPlUuSSJkQE8jR1pEZmM6PlchXnolLzk8VDNTYXRtUD9rKEQhXlYkelt1KzRMc0k2KCZmMy8iZS9SazVHN0ZhKHNLSDtkJDhrcE9FcVYwMjwwV3dja01gcGU+YClz'@;
put 'e1k4aiJ+Rk04WkxBcyFDPlo6UmJYS29dQV9NLkhuSGZZOiZFV2JiO0t6RH1KO0tLYUZTRDl9ZCxdeWN5TixdcUhBOiVkajFKUjsucSkrYWAsU1d8UWkpRlJtQl16JVJlQ0wyRG18K25nO0hmS1dYcUhrQiEsKSl8VC96b05ZMDIiP0dkbngxSjJ2NTRiTnMhT345MUtaZngwRHB9TyN0cXBOUEhd'@;
put 'YWVebER3WndsPTVULGFFY0BlKmEke3Nhe0BSO019c2ZQd2NuSXNfWWF4a04+cVcqXmh6WG94OjBrXj8xWEJzfkRyVVVtd35nQX59P1VpNSwiazFmTWJIOCoxWmU4SFFPLyRMdHEjaEQ6fTM6M2UycT0vOzpHUE0ma0pmZV1APWo+WiticFFJXz9vIlAxOVImUFFxI0FPcmlWSUJSOklAWUd8SzI0'@;
put 'WG54U0MoLyQ3cUZ6TmwzTl5rZStGX3twN1pWKz4oIW5MUGVCLFM6dyYqcUYpTjFyUDsoc3BqKyo2Om0qMlpNNFk0LDVCLkIqZGZrVEAwVS82Rks4MUVlRVdAPCsxVmM/STcldnB2SCRDcTsuZGRobHh3XW5FQiMuaUJDX04rLDNBdHh4Z2hGQyw4bihVc1tCQHk8blBTPDosQXxpeUB1UnpOU3Zi'@;
put 'Z11yX3VUYDUkRyo1Q0poSEIjZktqNldXRFpvUU00ZEx4TC48Wi9YfGN9UE4uRn58fUQpNENuKyVbQk9bcjR6QkduVWM8QnopOjZacjlWPyZxKnBZc2F7aVJxQHh+RTUsSFErVTxicG9RUmY7VU5hT2JeV0NxWTJhMjExPmV3cWBeKmkpMyN2SHFeazpbIWtacnVrfVBDa1JkL2N3JXVXOzJodm50'@;
put 'b3dgIkBfTyQwVnNnM3EoW1dLczA6RVJSRiFVYXVCYixhbig+V28yI018JXpPais9fEM4b0x2ezxYWFJGRC5TSFsyTWlYVTBMQjZbU2YwYGcuejZOeCh+bnJ+Yyw+bTclKnhWcTRgIT9JMC5YZF9ofVM+a10xfndtNz9yImBmQ3tIX2hFbXN1a3tvI3tZS3k8ckUuWGdDMncrWWksW0ghUGtrWDJC'@;
put 'UnRGPUpOLkwsI2NHW1tvdVtOfCJrOnJ5SkJrWTQhaFg2I012PHIhJSNdPVtQeT0qajModS5qc1ZvTXdnO0tAd1ZeKjBPU2tTYjdmQCslP2Iwc0VEJDBFbFJ8I0MxdEZ+fXVPSURxazRBV0Z8aUJrVSJqZC9rRi5QRVhQeVNaXWtjN04zKnd5OFo1WmlSJFIxZDFfR2M6JVojdy55VSs1dDt6eWNo'@;
put 'RTt9c150UlpqPE1YSH0vOTJqY1clRGVORUQpWTwzezBEREAwQjlYJTJVRXVJO145Y1guZi9AR09JNVlyRUE6bjAvLnkxI0UoZzBXWFdEKXkmUU95aUkvPWE2bHlDMmhnKnh3eW5xWkE7SlB5Yzp+ezQoeyNValpHT04oWmFwMFRmbSVwb1N8XjxGJGN7MGRUdChkIzwoazZbLyx9SGojYFI4SlN0'@;
put 'RXUydSx0VmpFOkNGIiJUbnlXJTksPj5GbVpkWzpXP0JkTTQ4QCt0dS9GUnZMU04oJEcoezAmYnNNX2UsaFovTG1ofDpJKjZGU09gQUUpZUUxMF9pfUVqNy53ZTw/WGF7aG1GSk9Zb0xXa0hEdT9oX3k3IVlwRXlOIkMxKStoWkVJOzNJb2JLazRFOjR5SUdfZ1I8MyZII2cjWXF8TUEjX11XMnVU'@;
put 'akRlOE1FLD1BPVRVOTIyJFR3RVU1bmFwXltnYyNdeTsiSTB3TF1Ic19YTTtBaUxZJS9YV01tMkxMU1MpW0VHRiwyRjopKThOSHZ5JiI/YisiJiUwR09jXSJ0ajVnek1uO0NFdnBeQDNxXTg5L2pTaDkldVpvMUddPGBvb1F8TkxKbkgvMWoxQWtnPCF+LER8dm92TyUsWH1+KnBfdnVJUk0/WHxu'@;
put 'N2VRNm9gUSVkUEQ+cGBATTtmTl50PH1QI1l4bVVIIzBRJUBtciZtfCxPNFpIOHVDdDV1L29vZHQ5Syl2T3UldyhXOFJnOTsofFhrPUlYLFh4L0Z3eCpZV0IqJik2dXQhSUd+P2ddZFh2REFxK2FwX2k8eVg5TUMoQWEvb2hVVklpNFBfNHJpXWxxV0d1bGApZiQ0Wlt5KHdNa3NCTV1GPFtkfDwh'@;
put 'RmYxSzwhZGpDNS86M1IxW2JDNUZlNyhlQ0FtLER8LDZbT0FDKFYzeyJdUmZvfnllcmhrUWV6d0IwXXZ0SyJsfGk4d0xHJUJDYmsrUX4he1dRKTlkQjh5QWdDK0JZR1JGOUQwcWRFWEZ0QVtBYHhzIUd4NEFBVFgqRXtDQiVtXVEkeEglNVp4P2hvYU1RbDRvT2ZhPGxKIjhYY218eVNgcyU+TElg'@;
put 'a2JLZXFSd3UmVCF1bV1dYWg4aHRTKH03Y2F4TT42fDtXSiZXRFJSTnpEflF5e0NNKEJfP3JuOXliNzlScFlren1yR0gmOlFbWk91UzB1PzRgdW1PJlNLOjA6MmU/RGAoYmVmendAdlRYWTdTS1YxSnApeUx+fEhKQHVkL1BZK096ejsqblh9WHBqVERjQ0B2KV9NVm8lcUY9YzZZYFFdRGd3KmhH'@;
put 'bXVsbiM6YFpjPGN0SzhdclBeLC9CUFhAW0laKkp5WU9AYjlmP2Bobj0iJiJ3KiVkUGZvLzFiS1llZkVXRU5sKXl+YjlZJnBtUWZORSFjUTw9NyN9fEApaSksUCExPDFnYkp2fWpBUy54N3FuTiI+dHAiSyQ3bm9EeixeTUJYdW1+VWE4ZFdDVzVCenFsUWpLM3A4X0xDcmJzUktKbFJHQls7T3c1'@;
put 'U0VRaiwsTnY8Q2lfWityOSliQlRFQkY4Yj9HUCM1NlFAITlqTGkuNHozKHVOKT1MenVvZzc8JGFqTlNea3AqNT5MMml6ODJqbE9qWWRmUy9ySHA9bzNXZzdza2h+byErYSlraClDQTprNWgzUWokY1NUWFN2LnFuST5oQi9gVjpmay5JPmRfLmNPWjRiN2J5RHw4MlBBKjV+SiJKP0tEYHR3dUY2'@;
put 'dyJnQHdBcTFFKVM7eSljP3JFWDtbRklqWks4NVtqbT5QOFpRWD9rVFtyNDE7aGU1PWNCJUo3PlYyY1NVU2xpNF16NjF4Pn0hNXZmNnN5Q2V9LnYoPn5xcGlNdnQ0dnVla3JIWms9OUlhaEB6UmM1KHRDYTx6RE1EWi4seT5xWi40b0VmNT1PPnY1em53NGJCTX40OGVOcDBocXs5L0E9b29maGha'@;
put 'JFV5WGYzMFt1MWk3KFJKUl44LCUkWVk1RDppKikvZzVmRzw5PUN9UXF8IVFjfD1bO09pQmVpdnRFOFJrTzdtQlJ7RFshKy85eSV+cUp6S3xNXkh8NlM7Y05SV15UNEw2XUdUSX0sMHIqTjh4ZT1WKTp7JE1HUSwsYnUlN3ZMRTE0aVJ9UXg2WSUwLGV1SWhzbSl8dHtTLiw2S0VAYi8ibXxjWkg5'@;
put 'OmV0Wz4hKGVnMkEzYjI6PH45TWVjMFpkWGk+Yl9RWyZUc3V5WSFNd3M9Xy5weXtDfVFYb3JnK0YpeFp+TnpLOHkhWztDIURlInJQXWFzZjx0Zkx3OzlCZ3t5SltXLEVbVyNVOSE8UElnP1NuemUiclQ7aDF1XklhckRtOHclMD1MPkNBejFCOVdgUlFEbVo6YSl0NnVxdW1hWHwjPzl5OWtBPEAv'@;
put 'SXp5V2UrZk5SVlQ5dFojTDVGKHRrIjhuKXl9fkFnK2hxPkYsN3EjNTMhNVo/Sy9dNSF9XV1JSTZ8a3NTKyZXT0pTNEQkVFpTNW1sMFAxbWhNX31QSm8+emZTY1EvZn1dJlFpJlQxQGNfUDAyP31kQWR1P2VTLDBmViVNWDArZ2FiUWVRU2ljVyhBOyV5ZjJPaW9aVUl4PyxrIV5ZeEsiRDg6JCI2'@;
put 'KVYxSUxkQ15nUXlNWkhacSZXREVmeTI4cE9dPUBHLlEjZFV4dj13Mi8wOzRkPXRNKl9ZSHd+OSNNTl9ROilDOV9gVHcoXX4sZlomdTh0eW5DIWlWWXsmelc7Wm1IO1NobX48PHAuOTchdVghekdrJmxIY1FeQ3BRXj9GNSVHOiVPTzkqQTk8ZG59NHdDMm06eE1lOU1vej99Y0NTWmouKHEkLC5j'@;
put 'bChMOUxVbUFYKFV+QyQqX2RXMT51VyFjczwsJmpNU2k8dyl8KFJoQmxDTlNYVWRzeTtiMylEe1B2QVh8aTVIO1VSSnNPUyl3dk49KjsvXnkpZ3BVeDgoWjwqSlZMbmopZmlQWnZTPTk4KixiN0gsdWxzZS9PSTpHUXpXJVB5Vmx+UkB3VV5dQDN4cnhYPC4sInAkeiJ8TmclL0BOaj1yPzs5fWlN'@;
put 'Ul1gN3xUMHRhQ3MoOG9AR1RhSVd6L0lXVUNATjxANH5hWEM4L0pYaS9hekU/cSVuUyQ9KmVKUHpyP2FTaihyTCYudU18WnZwUSMpakBALyJZTjBFNU5PdlRuOSZvVXFedz4qaGh+I1M6PXw9TVhebGxeLk5wMzk6c3NKRHk+VVpXTzxsJU9ZRzFMdDdgIy8jZ2ZxOFFkYEAmOGFBSGZeMl5nV290'@;
put 'LmNbQDdjajZAKylyPjF8QFYlb0h2PVVnKWNwQGZsamM5QHwlQVUmMG1dfWhoPSlBMGFbRXxKaDhoVlRwblRnOnopX2k9N3g7UEdLYC5Aen5zQFprTDFCK3JvLHNdImJLMF1wMGBjbFI4VHs0Sktha0wxRVs1Nyw3YFFZZChNKHdRcGRSMHpzbnhSTEUoR0IldW5TYWpmamN8YXZUckQ9R0xJW3lP'@;
put 'fSxPTXgkO0NSez1lK31dVm5aZylzQX1kW3tWQHJTV1dzcDM0VTV6cDN5e1hqMXU8VG03JiVbQD9rPD46VHshN3hrWFZvRTdibCk6ZVdIWTBVQWQkNjUqPkVsL1trYE8xZzI0akRleSJkWDojTk05WnA9XmU5Sl4/WylESDN6cDlkclJPaDUqZDMxTVJbKmU4eSEsWD5+MVZVP2g2KUBqInkwaCw4'@;
put 'N3s4IXBPPkVHWFUpcVA2Unx3bFM3c2U9d3cyRGFrOzFncCw9MzZ4cGk7QXIpQXc8PCgvez4iWXlAZmdYTFtfLngxZWZFfHl9X2FTT2YrdG9+TUpUOWR3bHFvcShINEtmeHF1Tlg7Tj5AeXNTO15fNk4/ZDslVTBZJXE/K1FqNTg6TVhVPStvb3V5V0NxdHZsJFtMNixAMiEqYnk5KTN2JXFrXUZe'@;
put 'M082MFtZZiQvSzx5OTpybV1VMW1RbU1TfTlQQSgxcjNzWXk1OkwsZTVBfVIxUT1dSChbYkgqQ0V7JjEmMTt9YiYrQX4yZjd8IjV4cXtIcXlQZSFKdGQ1LE5HZiZ3eiFESmp5UG0pZ3EhRzUpcDU9aXlkMS5HdChre308S3NmT3V4SnhHd1QvIixtTyJaRSolNTZ8KyYjcT09S1pDQ3B7NEptXzVK'@;
put 'XjlYelgkeitFKDE3OVkzXmIxfWFTajZGRlI4XT9gSj1dSHtgI2B9S3Uvfm0sXU9bP2BWendMdiZMd1JGNl5rLFFHRnt8NiVOOHdLPyRbMFdTI0hgOmMxRE0sbyRhI3E1PXtKPFgjN1glPkNNdEpnfWgjam0mal9edGFnT0s2Ulo5VihjTlhXbjBRY31tIX5Kbk9tM2tSaUJgaDgyXkBmMUJSOyli'@;
put 'VDosX3Z9PEdPTWJTfmZIUlRELj5VWnA0KDdnP2c9SGV6IytJfGN6JXdwaXtJI3BTbCQrZGtBLG1kNlZxMnh3Z09aKnR2eHFPbTRWWUNLWGd+bD9LZ2Y/LykuWUg8ZDV+eVQ4UTBxRSNLbWVQN0R9ZzcoO2UkP2IjfEEmTGsualV3emkzMXRtJEdOQygoU2FlIWJaRWA6OiwxYWViTklYJltiVytl'@;
put 'UTY1XXN7Z1FOJjVZZ1FCMHd6Kns2Lz9bPjhjdlhuRzVUTSplemojSW1ndVFGLF9odFYkcTpmdVFAQ3pEOi5VSVFgWlhEfk50elNPNl58Uj1+M255M3MoJT1aZDFzcHBvOEcpbSZ8fTVTMmBPQ3dCLiJnSnApP3xOTFNvZl9CbSR6dSZOSk1kMDApQi5wNUV2XUBiP3pdXy93QXJCMC5PVDhaIiJ2'@;
put 'UEd5W2JGZW1IMixAa1s7MjVNPHRWbSRIbn5vJF9oJD4kdFYrKkhrb35BS3s2eTFIVjBQdHQjPiE8KkBVNms1bzJvVWheP2Q6L3dYYClgZ05sQmB0b2BZWUZse2w7IWN9PHxaQ0xhb3txdnhATktaR3ZmTmhlSFk7QCp5QyZ7dzk7WEZZOVY4QExVL2BCWFE8YlN9elBdUmhHXyoxVTRbYEgmSVZh'@;
put 'JldGMil8IzBmVlVaPWduMGliNFtqKmQ9N2piY0tHJWJDNW9rbTtiMXEkdDZYNkZqSzlrZVdGKnFXY31aemwpayIjQnV8KHNZQ2dZRi8oJGghMVhVTVtzZ2JzcW46WkJAUF1mYmI9NlhKU1VkUjYiUiJSSDZjOTxqPzNQdnwxeE8/RWdWUjxBSkZsTSRzUSFxaEk5dkYma3R9TXk9QzJ6MURAelhT'@;
put 'bGZ3bzpfaXMyI1BpWnJWfjtbWUVRTlNAJVM+ZlNmRnpQW2FpW0wxfnVoREMzVHdqJHNWfm9iNltNeyZbUkRRJGJ2aTJRIzZGezs6dG8rfF1PW284Ti9qOzVSQ2dTbVBKWWBPZkM3YXYmLlpsYVljS11QWjs6ciVVR2ZDdjkvQD9bdUhGOndHfjMyNlpzPWxVZlticlEodzN+UTIzU2tmQlIyXkJH'@;
put 'SEdlaHRHaUEyPDNRYiNkKlUsPGkiOCJUQmtKTT9zX3g9eVFBd1cjd09DRURNZ1okNDhGPTRYMlZAcmcqMnVMcWomIWpmUlBpYXNdOzZUNmtDRHl5RTVEeUR8JDIhMWtbQEtmM3FKeDk7QGRkT3M9TCJyST5+eHEkK3tJSVM/IWRyOSNpWSlsYD5sfjp6OCg1TV15UndncWoiSShHM192MX02L2I4'@;
put 'TmRGbF10fUJ4ezp3fEBAOVp9N2kxenhYKjl7SiFUOGQhTThaVippdmxHVCwsMHFwODQrTnJrYVRXLFZ2ZkBrYnNyM15gbzdCanhuPEx8YXZUX0o/aUlRQDhIaTVmUCkwfUMhTWldVUVXVyUxNlJ9WFRweHF5X0BLfCtJfSJscG8oQHJ3fFRfNyVnbm0kaCgpbzR9L3RLaVFDcG8wanJoYUV4MWBV'@;
put 'LF48PyU8dntoc2o2SHF2bVVYTWl1Ll9fRXVUeUNzUDI6aVIoSkNJUmo+WiFAMTliOVNzbzc1UlZPVEN1amh2KyVqKHBEMUZSVDh5UFssL3dSKVZVR2Zoa19pbkBpUkUjbU5YMlhXQjohJkozMjFgU3VyW0UvQCVxN0RRWmZwKyxOVGVLL2xxVGI2ODtTfVM3I2tBRSpnKkp+eXZobHd0bUxKXztO'@;
put 'NGJXXyVGR2Rtcjh9NXojdWgkTmBAdT5VTDJGJC97bVBLI2FeKSQlcFg8SXxXTDMoK11pV2dFbE9udkpXL3hwNipialdJZGNwJjBSTldWKS44UFEkUDVZfjwuXWVpcFIzPDB3PmxbK3lpaGU/KFtAXUNbQzlTKVNlOFt2USNXOTR4SGwzWn1rTDxdRmQ2OmxyTj4xYjF1T21PQG1HVlcpU2kmVz1O'@;
put 'flFUOF5qdW9XcDosfCIvRmFrIlo4Y3s6YSE4ekNIJChifnpvUEMuPEJscXp9cEwzY0xVLmEoSGx4bD0sUn19ImA1Kjp8USs8aTMkcHIyS3YmJVlpflMiM2s7bmFiRztnKGNDNkNJST1Kd35dd3t8MXBrdmt0TWo7VV5fK1ZkRF5CMXkke2h5JGA1b15Cbjw2XXd3QCQkWSomT0kkdlFeaVhhcVQ1'@;
put 'PVUoS3xtTSVSMUQhd1s0QVdIX2BILkcodWArYD86dXBvRyg2Zm1HNXBhemFpO3JVNj1wPGt7JlRGdyZOeSUlMTQiSy4jLnQhX1lLc19MNV1KIzNdKWtVLztYQV5RQXZJZy9rUj1SU0hOfD5zOFQvKyNmQiNQWDA7S3F7Rio/OSxOTiZwJCwrQGt0RjVZYld0MT4sSkBKUW55UDAiciNXJSNHfmhy'@;
put 'OkNPSWNkQlFfTTY1dWprXytPUUUmNDdzQUdHKH5dPU9RRVY/Xm9wSy5oP3VDWG09cSZWX05zc1lWOU4zPEt5L3VWdEZjJFg9SmdUe0lnJGRteGt7Un1fQFo3MzA/JWJ7MDgpezhocUdXMXhtPGFsTDN0MmdnbHF6UVJaaX5pKlJSRzk4OCEmPE4kYktAJS9hXzY3UDdhLDFzeXR0W2hyRiE6Mm9n'@;
put 'dUlyS2Z9aEZJTG17ITs4dzw1SGc8alJxNXJTL1QrYXswN1IoY3FrS1I7XjZLXTx3L1V7YnwrRW1IInR9Xk5obXYwZnohQnUoPzIrM254MXU5MGhlciV4LyJQd1svTEh9QyhROFozMEc9JE05Uj0sdzE8I29wfWpVNlhFTyNvT0NbWVM4IWBSbUljVDFJUjxMPkt3Xi9MWilVM01dOFhgIXUiKGZj'@;
put 'T3hxT3s1anJFN0RqfC5QQzZZOGF0ZVVqN2NOPW1gIlZ0PjdgU01UKXFzRVtUWmZsQEJfS3BtI3tKWlU8c3h2cCpIJmp1U0FKNzpTMkQ6T1MqQC4vKUA8eGt2cG54MUU/byNyKT4ifkBdZzBWJG1uZm4jWWppTighfl5tNTJ4RyEhS1tuQmsieFEkSDFlRHp3KENoV3ZCdjhHayxCd01HYE5YWD8+'@;
put 'fTxjWTpAYG9vS11aems+aWI7XjxpND49Jj8kbHYoJlFILCt+YUVBYDF9VCRNOWs6OkcuVUNYPEBRWWpINiJ8ViRjR3xDRzZOXyNDRHk9PEFLISolQ0VuPGckOTdadV9AakxLVkc/eTByOEklMSYxLEU0anldaSM6ZmJjPlMzcE9IVlNtTXp4NitseUBLYyEmYlcjdkh8JWFpPyFOaDxOenEsXXdd'@;
put 'KFtyJGU1SHQxTS9LISw6eyRHajl1KSw4b0txXkllX2I4ZkBbT2ZYd0FhPjshLlExTUxWdzExTTw/XUZ2T0ZvbzQqVHZXbDQ9X24wYW9yNWg4W0tKYGteLkoySFtBaitZZkJdM1YyRWZIMkZCeXwxfCx7eXJibiZ5YTFBMipnJF12YGhRXmsxRCVnV0klX2ZrWGBdN3A4JFJ+NGRdWCVIP3JsIlpG'@;
put 'cHpaPGs9JT9tPmRqLitLO2lWZ2F4ayNKME9JTi5eSTo7OV5vUWphd05vNT8sI0dCQDUiR0QlN3ZMTjxob3YwRz1DWyMwZXdBU1sjPUh8SjI2a2NsL2pjLlt3TldwOy9CaDNYcU12Tz9ydnQ7WzYseEksa0wlXXYxR2x4YEQqUUg2QlpTd0BjTm1hVFptZDEmMSguREx9MCF8b1lgbDtLKzw2V2JZ'@;
put 'Ii9DMStBMURBPHpHUEhUTFFCPDRZcjpOWUUvQj9rPzBXTiMpPkU/aXN0WlBUNWVTc0g5NGxTZGFFaT5uQyRdUSxmUTJQNjQoQk5OJHlRVnZqMl51QiEkUHxPblpuUiRFdGN1Skp1TllTZFp2Z1IuaEFJUDVJMFhPYWF7YV9IWW1Vai5jZkd3PGB2NDpYUH50PWJEIzd1QiRETlhQe3RPTkY8czZB'@;
put 'ZzpGakVPdVN2N3FRMlJDdk9lZnhMbUhqTE1dK0YkWi9GVF5zRU1DVmNSdmYhYTskSVVZN1c4KkBRZ3U0cUAybFJNRXEibW5aSW83dXV6Ijw3S1JNT0lqbGErYzksOXhdZCxEaUdTLk1AcGImd3ohJiRQVCwqLldsNkdHbC94ODBFdCldeWRsMHdWN1FqL1tfYFpXSFhxK3h4a3VvT2RYMVo6N2Ba'@;
put 'JkQjX0VhREg9QlFSRiQ7SC9CWUFnTUopJjx4elgrIihTRz5rVER8U3psYjdbXXlqRUUxanI2UlBiN3dmeWQ3QiQvOENRfXx6fSF2YigqW25XdUQvPURET0owc1BYKDhbQWRtXTU9M082PjZYPUh9JVBWfn0iTUVXJXZaMCNQbnRybGI/OVs1YUd0OD9XdElONmtHdCwheX11SXdEZDUpVV8qPF43'@;
put 'UC9EZDVacmlUNWExSnd8QHtbRF8wI2szVHtSV1dnXTV6b15XY3A7XkI3U3FKN21naTVNPCxmOj5Xbno4QjIxcU93an1lLkM6W1paTHlvQGg6TEhVPXQpNEo+PyRGWz1+QFE4W1FrQm9adkdtVzZZM1Nxd3hsfEc6fEhCImgjWUdMTnQ/YHddNT04UDpRcm9JImR8X3FIY29aX3w1TXIhdDghKEFk'@;
put 'T0owJCIzRzNZfS9CWj9ORX4idmtFRT00fVhga3hGWCorVEBKXjJYPlpEYFZHR28ldW9AUnIpQmRZOjtGW1B+e3lkSFNaej08eTB2PCNHJT5HOUkye15LN0g7TmklTCxmbmdiKHg5YzZKMlNSKiZ8bEhmaGslXylSc0VoN1R5dEtTaGVMRGk2a2xKc3Z3TEdjdjFsVS8wYyM6NlpyfkIyLztNZVIh'@;
put 'fk9zY3ZScXt2XnEiQj80NSRlNVpueTE2dlpCWF5AU0RbKjdPT313MXImPDFhKmcwUU8iMzdFKG88ckljWGJzd2Boa2Fzd2A1PGJPQX4uMih6QWRARj1NTU9WOi5MW3kuOmRzTVB3NitbKCVyTlA0dEw3fTtHZnZGXkBPPyZIPzBQTW09WHNtaDVSZnhxOD8lRyM9dihiejFxKEVKVn4oRml6RzVC'@;
put 'MjgzSU94dWlSNTYrZGNPWmQ0UX1IentUPDQoP3lLNDZYejssej5PfjB6SHZYbTBTZl9nRWIkVG4rc3h6WkowXU83cH40WFo/TG96bjh0aT9aNmlVdlQkVWZRO1V7LFs8MClEJSVVbm9RJnJ7SnNPUVlGWDZsO2NeNFBgSVNucGpASitkW0l6YkFKWGRlWCI5XU5OcD9aTUhrSTtPYUswRzZLUmhd'@;
put 'JERPXlAkQkgqPFFBYFEqKlY3UltLUz8iLnRIeCs/WHR5WmdbM0VHNT54VntgdXxFb2d3QSVnKGxZI0JBS3RiR3toJnViX0B8ZHxhaGFLXz9HWFVwfjVIP0dEfiQjI1kvNU9ifiptYENVIjFzOilzQGJJUkI4VihfYSl6OCM8UXMvZm4/WFMlOUtMfWlAJGMoRyVxQ3JWKlFbRjoocywwa3xuRDQ9'@;
put 'LyREKH5bPltpKkA+SW57NWJjKTJQbWx7Xj4wVHZePyJoaUB9Sl93N3BEP31Uez5Cck1VKjVHO19pQHdEamJVdFpnPTdpKVR7XkNwdkkxdltXS1B2fXI8Imk/U3JzaXQ0SmZuOk0zdlBEVHlxViV3YklFPSlLJGRObUApUGllfi5XYEFZS1FLKXQ/PTFDc0k+W1JRbnBSM1d8V1hPVFIjWGV3OHk9'@;
put 'T01SRVA6XztBUVouZD8xLCE4ZFk+N0xLeHsvNyQ+bUsxT3Z9Qyx4UzVjJiVzaClGMTFESD5NZ0NTcEgrMiFMKVcoOCRzJCZ3Rk5YdyNXOjJjcGt4SmBPUHRseWUiPnVqa0pONlUhJW08InxpYz4lXzQ7TlUxeDxmZTdlTUhZZTpkRG5yUj8+amUxMllEeWcmdF47alojWEVYImpacnZIQVg5Mj0s'@;
put 'I25ZPitoKTJBM0xxciRlNTQ0a0VmW1k5REQ7JSFAdUN3Qz9SOlkwI0VNYUdxIXNiPyxgVE48KE5LZ1VZbzVzYlUkb3dCSTAvJS8kMF9mVip4KlNWeThtVVhtLno6UW1YJUdwdTJNRFgqZk1hZyo6a0l9V3BiPXxSMTdHUTVwaT5IUVFpNjMuKj1bdEkuWWcqMEhYXjpWIXRGTm9FXVcrO112ViV2'@;
put 'eSouSVRgTmV5V0NRTnVFcVhjOzxGay4mRCNONSg3Z2EhcGg6WVRxV3wjNFZ9eV0+QlVCTTFkWmM2VXdJPUYhYGtvLDpJT1E6MDhRZ0xQJDdMWURARV80W0IiSXRgM3dsaiRrUW4lWTZ8UloxKyMwXSNSTDM5MEJ2MVdoSShjR05Sam1xVXlabTYqOXxKJDR2RjdONksqMyRZWlJWcUo6KyJmb0Jz'@;
put 'QGNsclg/dUY/KHVGTnBeLC8xdHREPWxFYVpHUmBIOXYpZiRxfGR8OjtDeDBnRyM8RWV5bzslfkEqZ0kmTTksaC9AIlhRZW9eNSxEa05lQj1UV2Qxck5fTjpSW31TYWdWMW4oR0cvXTQvMTJSdlVgJmxvOU9LRUFIMVJRak9ZdlA3P3lpcUVIYHUqM3pgWXpCOTgqQ3tlI25Qd3B3P2BBYSRFR3Ry'@;
put 'XXVZKllidUdQZ3xqVjVZX15fdCxZPnQoUnlsRysuYVYyRlQ5KUJsX2lHb0w0bGs3QmJLd0wieTY9IURkdEVmJiY8UVZONXRxQ3xhSmQ7PHZAZ3NhT0dORU9wMiJMaE8/SzptOCFbY21jQTZOP0g0dX47aUdVUndiWnA0Rz56M3xNQTNxJklNSkhfRz16UFZtJjJFUWw/ITxaXT1CT2BAQytsK3h4'@;
put 'Sm46LyYpOFtjR2cvcmx2NTFObFNgOnU1ZWk7MFRxNUdwZUsjYVMxdGF7fTZVPFs8W3dSOi48XT0mIyl4PlU6S1VUXW4/eGBYOW11RDU7KHBIJGVgO3lGX00qc0MpZVhKVTYwJD5JeVZhK01sNk1IJHomRWQhTU12VHVCSXR4WCZgLzg2PGR8dUVUcDBnLjlVLjApX3UsY3dBUmtwfSFyQCg9bU4p'@;
put 'cGQwSHxXKTlmV0lgMmtnYWJbQF1TZmNWbSJRZFg5ZF1QeElmU3pidzRAMUhyOzZdLzg2dDZqRjFEPF9JUkk7T1NxZ3hvX0A/OTVbT0oyMVdiaXVCfGZYQl9EPkNdZiZZa3wqQS5pQ3BnRVJKenkqMlZgXyt4VjxXJHNScmhDVF0+amc7SHBWQFdmaUpUSElmY1g+L00iX29ZSFV1PExTcTd2SVNa'@;
put 'LixRcnp6LF1JanJve0ViRyMhK1Q8Tz5IbEt6JmB7Uz4lMUsoUFIjSjFadCZPOTRdfFI6YlpJaW8wTjFtaW0+IUt6MyY0UGttTzV9fE40XlROY3tPNWhaMEY1ZTVXZ2RKOzkqdUxQVUVmNUAxKEAuLGRPQW5lKStqWSJjezRTSTp8ZmZ5eDFtNVJXOk9ZZjtNJncsWVl2VUZQemhMMXdgUm5CS2kv'@;
put 'TjZ5PU8zc1M6WmI1PWw2KSU0NVMkeyEkdmZQeyZePDFhSls3VXVWZEheNVNwUFQpQVRfLk9idSgvekFQYTE0byNgYVg+e1ZRNUBwQFJXemJ0NWJlcGQjfHVQP1toLkk1JiMuT3khMjZQY1I6aixdQ3JfZiZdNjxIOFpSUVIhaC59QyFpUlF+MFV1Zno8cmZAJl56VXdIXW1hVVMuN0kyPE5TNSh3'@;
put 'KSJlTjBMb2EpWiozWlZuOVIyX3tkO2dUWDU9dGdEXTx7OXRtL0xRaj5Jc29OW01YTHV5b195LjEsJTxNXmhoU0dRa21CbjBtbTRBVWBsUnxkLjJgLEdERXdtTWc1cFE9Qmg6PDk7bVthXVJbYVUxMlFbPzRwK0NUcyFhTkosZzxPfm97KmQyc0tOdSVtTiRiX1NyTnlsMSt+UFQkfFt7OndqQ289'@;
put 'YWV5bEkoR2A8VkBoSzA/dStZbXM1NjsxVCtjYlNgU2xldXJnSkFLM3lZJj4uXnFAe3VxMGJyVmQ4V1h3IUFwRDtyMTYsYSwzMUZlYWcmMHhbeV49JHNacDBWUEk8KzxUOjMlL0R4e1lwRTw8Z151WjxJO1AmVHlDfG1nbWwjKihbKkJeZDJKJVRXSUFlOD5WWlZVUWhVSzBdTzdgQntDNGdoP1p1'@;
put 'Tjd6bzpOey97X2x9Z1QmKCsuPTxxcD9nZnNdO0dQX1NbNVRpTHh+TTFsPjtzUSwpeDtAfkBlInI0VUgsZ3MoIzksUWRYQDNoQl02akgubDIiLDJ6JixRJHxvfWZofW1dVzgiVlhaTDhPMS9nYXA2NS86bTlVUlU5X0VHQitkMlhUclZve1N1d1BLSks/K19Wel5EbGhhbksmMGtTS1BRVlkqUXlb'@;
put 'TD1ZSC5pSjp3VSh5MEVTaDg+fXZbWmFGZ3YrJS9XZGkjRV0hYjRtPTchZjJKMSxePHE4QCtfVjRtJXxEamx7bkQ+SUBYVCVtPElkMHZSNk1dZTN9XUVwISEsRmJdS3lRWkF8alZIbGhnZ0ZRW0YwWyY6YltAJT1mRjRtXVtDJSRNNHZGRn5eOW92dmIyeXlRe293VzwmT3FLSUY1XnR8eXsoW0tx'@;
put 'NEBta2w/KHphY3VhOyVFNWUuKVZEbHZFa3J8IjQ8aCRDRmYuP3d5cXdva1ZRZno6Zm13I2kpPTo/WDE3RT9tbF9lfj5tbEFvVj1PWDlhUUZnODohPU5oVUpGTDZ8dXJocDBsWVc6TTU/Y2xzK2QpR1hhaDh5MDR7RncyaS83LkwsYVRpRlRCZDcycUhzZDE5OnpiTFJhQW9XVn1tZVBmKz9jdl01'@;
put 'M2NUL3xUdFZsPCxob05LNFdVIWJUQ0haVmdwOmFWLDgyMkQ2S2E9IVNyKVE6VnVfdSI1U3ZicHRRYkUzXVhaaCZlIXJONGpGOHt5NyUuSixaSClgKHZQd2xGUTlWW2VuUUY+VCpoRF9WTDttTkBLZCF1bCowXTR3I2p9RzxINmBkKSN0LGtgS1szUWt4TTY6d1prVGFNOzIkblA9ciI8OSZTcFoj'@;
put 'SD09Oks2ZCw0VXs6emAofCU7fmlJfiQ2cmhYNnJaTTs2JXJsW2U0anBtPHB2fEYjUTZve0dka3ZMfjN3TH48YSpyPnpXMUJ8IX16NCx7OXJoMk92SD09OjxzYSF7W0R4TltuXiZVTWhebHREfEd7dyFkKDlyJSk8SHJoL1IuRVlUQUFBXXpBQXtRe3lqWFpZXXdvTkdwLCVHSF5YVlJ7MVRQemlw'@;
put 'TG1YIypBd0FBQUFBQUFBQUFJQXohPm9nRCwuZGsyYG51NW5+cmc3IXhJL0ovd3k8LCliNHdOO2M+OS9YLFJmYSFVbnZVVG5JIjlSeVZdUHkkW0s8NmE1OXVrV1B7RSp8PythYT1CYWd5W0xqSD4yYGVmQmR3dnFYVnRCNGh1PHczYSN+SDA3NSl+KEFYZHQ9NHIzTzU3UG0kdmdlQ1dwYiZdKGNM'@;
put 'I2p8PThMUDNVeFY4c21DfTRKVXNLe2Y/TylGaXxPeU07SnJNXUNSQlRvME51VWAzOW1yRUh2VHg2XShSZyxLQTZrYEowOyhddUdTJSZrMHFxJDBQfiRec0Z5OEVZe2whOz41ZlArP1V6R1NWM3g/T2Z6UHdFY2JHRWB6L3FYQXlES3dEQ0BgKlFGRGAzQ0RwXkg+bUtbfEZNcH0zc31deztEJlol'@;
put 'WzsxQnNRV3EpTj5XLEomJiFHfS91Y2EpZ31NUnNwfmQqdEZKME4qYFR5flc1MD0wWFpFfkE4PF1JWG9eLnp0cyppaE4jKWFBO3hZZXhDfWxhS2hYSyhCNndfPlMyOEx6e3ZYNERRP21tMGM6SntUR2soI2A6Wj99ZF5GL3woNH0kaTZ5bCo7R0J7ZFJdWEpMS3pQRngqNDY9Z004R28jY2Q5Wmd8'@;
put 'XVBAcVRtNGFBT1EmOHFKdCN5NkQhNHRbbUBheWJPeGdkaz1UO1hJaGgkXmtXYEVaS2N3V1VCUW1vTDI9JmNXfn4kNzpMZDVbRSFYOzo0JnJ0IUUkVUcwWHk9Rkdfbzo1cnpjQExmK1Uzdz0lL35MTCtLOzgyMDQ+Iy5QLltndXdwQmhYMFFGK1lSP3RCVF1HIkxyIURIW2tRYU9GRzVbfUkkclsj'@;
put 'QVRPS2ZGQnw2d0Ymc1p8Y2gsJSo3SV50JC9uWkx6Jlp0TT1keDU5WGplITlMP3klWzZDXztqamAwQHVReHBwW041bnMmPFZON0RJUW9pfD1SfDllKUt2NjZqVzxhIyxFY05XUCV1TTA4MVBIKTpkXi5xUzpuO05hcmhgWUBbcy4mLjgvdnd6TXVnYjo+YXRdbjxJXjBoeVNnKFQyI15GK3A+eGg9'@;
put 'enBRNk0mR1RLeyJeIX5LUGpKYnohXVB7azZUZC5WS3VHQlZbInc0O3JoUlB7R0N3MHdyQTxgVzxdd35jI08vYXZ1X0JjbDwxUU02PGRjYm06RlJ0PipMVG52fFM0UXhpW09zfWVWZ1RydHQjem9LKEw0YmB1L1Y2InBGcC8lfkRVM1d4NyEiOkEmQFhbcmZPflMsa2xGa2JzTzQpU15aXTw/UEYx'@;
put 'c1ZhVDYvZ1t5dz5zNEtMXUsrW3gkIVRZVVMwPWlFcCxyeyFiJlZeSVhnXTJgKSxvVWlYcCteTWxBaHpgdnxJVDJWPCFnYilgSXVyLnVJcW85aU4uJTJKYmQ6IlhEV34rKGlGVyZEPC9pKlB0ISZyRX1KU04obyF1bzZ5aGl8XmtaZD5pRTdvcSFicktWK2NTamBpWy5XL1BbVWpXUnkkY1htUjIp'@;
put 'UG95MC8zaT9LTThkak0vWFNqTmBuISJGa0s0O2EoMlVPPVZ4Z2QrVGVPJjwjUXN6IkBhWWRSfi5CejwqZz9SLH1NWFZgNFJibXxtL0k1OCMqQDhDK3gkVHIjdkohWTQ3RmtVPWBfUlhrXigmV21TSz83VTVRcT5aODZ9PlEocV00UW1seyRnKmpoMD0xVis1S2kwUSw8fkx2WF1TRiY+MDF4NlBS'@;
put 'ZnY1OXgvX35fd1J0RVh7eUVvejFoJk9rUE5lLzJYRkd3aGB1Qy5vWEc6Q1kub21obWEscmJdMUE9aDFuQkYoSDBjQXkmKk1PZE5XTmhOOmxWQjpWKW0/aDMqdkdGV3YzVWxqP0VFKkJjJUE+bWMjLCF2W31eKkJ0dkZRclR3T3hyNXg3NitwRXwqJWJoOVJDMVtpU0JvUD5pYXlHUGUzeHJXQDJH'@;
put 'clB4T3VKQjRbSUh2MHgiSUZ7MDBHMnwkaCNCWix9fXJzdVBTRFFHOTVZNzwjYkdsT0JkKiVyanQ1Ti8/X2NTOEZYJWhjMT5dTnZbKFFSSn1XZ1tJe1E0WCpfMGI0KixdbDgpSkVoeEw0KXJlakhBKHZHM2U/LkddVShIJT98RCNpZ0xKWG5CbHhZOWlGVXBMa0NQa15CJilEJSE/fWZdI3xuU1pz'@;
put 'VDEpd0gvLmZpWVBGQ3hMSUlfW0lOKFozSyY5S0guNyNibntoRG9PdGcuKSRDRDdSUW4qUnc0TV9yUkVLS1F6bVMqPi9XUiFRMmlEfFMhLnRGOF0jT0NmUUhzTVZMXyYwJl5YS0Z7ZUlxYnVyV2M8JWdJd3VeKEJ4Omo/NTs8OyxROH17TzJte3ojWnc3JklFYFFWcC5EKEdlPHMuUSI9UHQ5SiFv'@;
put 'Ji5lSTxvUyhtLFdCVDdrQUk2RTwpOzVFPypkNER2SzwrOW8vPy9udSpXfFY2VUlocmYjdC9dWSUucGA6Y2A9Z0lJYkVTaUAqQXdAMy55bXV4ZHhxMUhoPXtbbHVheGR1dH4vWmVhZT5yXmxrRDExKDFKKFlhcCJWd28qKEZ8M3cmd3tJWFdmb2xaR2BvLmZZVHVFMSExXTFBUiJxVEQ5OmQ0KjBu'@;
put 'MXRQXX5NeCl3SW1LKnlZTFRLXlE+XWZvRipsZUp2WDxLKlYySTA3KGNmY3RWOk16VWpgUFYqa3RDLCxvOit4UWdYayVzWHZ1fTFCU2JIPC8wW19lUS9fImVXQ0xucykwNHQ7RVBPZTZRaDd6Q0JwMV5WRWxQJjVzVVZmV0RjTTZFXXJ1UDRCaz1dN3k1SSF0IWlaRXBiTUZIJjdDSGNdX1gwTUN0'@;
put 'cj9lQiFpJDEqUG8xcTk4elBKaS4weVBQQz5TO05mWn55d157UDJTV2s3OCY9QCY8dipyVDN5NnkyWyVXcV50S0h0RWplO2V1Qk83Rnh8PzRPIm9Qc1JgRF1hd09NZWEpfkIwa2cpUkA+X3g1d2ZHT1luM20+cXYkfDYqJCg4alVAO3VtbUQ1Ozc/IlM+XzFfXnd4KDRjPFt6QW96bkVNMWFjIX5I'@;
put 'NXZLSExBNDBsNE99Y1lDQEppNDJVYDdPKVAlXks+Qz5oMyM7KEImWzVqOSxoV1M+UW9WMkEpWT5NeGE1WCpROmhwPXBORChIaFgiViN6c1poRG1KNSpZWyNVdF5jNGF3I19VcFpqb3BDQHdwcT48P1JPP1olbj4+YVowQlM7QzgwQ3lmIVF1dmtUSmh2KUJzVSk5KjM0I2M5eGl2K341UWRjJDtS'@;
put 'Kk5MSVM/aU89LyovaipYQT1KalpxL3dbRWA6NXB9VyIvRFJ8ZDNgJCRdfH5yMVhBOCVmNGk+elc0MjNdKEhlLj8rYCM7NlZmczQyKWhqOlhWJjQiOUYqUjoqYFdzNDo5cF9aJjUwe1tbaj5BVzFLKkhQYTA6MlVXQmt4OD5JWENtQmZhb2EwUF5xX0gyJC5Ga0lweiJ5cFo3bVNiZz1le3p9cVdP'@;
put 'OkJDYXsxdj4zaHZ3SUZKOElQNSNsd3d6d2JHNzwkS0xZMS5XaWRxfjFvNFI3aUQpQ3B1dy5IbiNkWkgsS2wxSTA+PXZXfjREN0t5bUw7WDx0Z1dyTCoyQShjJj5HXXUkRipIK0ZQXzYlVH1hRysvUFdEX0w9PCZFMFU1L31NTTNZLjFqNiJHMzA5MUB6bUtBMW16a1JBZX5BP0kyWSs5U2RXP0A0'@;
put 'ZFlsb2lMX0AoKUw5Rl01OipedSYsJX0vOi99clNMWVE7InFVOVVbSGkpYzUxMG9iSzJKNzdobit2PXtiKHBmQiEsbFc8cjhic1khYVMwZCE7UHtCe0s4P11UL2tSMFlJayElT3csJUx7WEFyeE9HV00ybmVMMU12MFlZQiJ9RSRIRn1PJnU4KHp8dCpAMXwuZXZaNHY1ZzVsWEo9ajdRWT48SVNZ'@;
put 'YmpOKlJARlBMVVQjOl11YzJLemw4QEQ2KWhZZkY2e2UmamozPWBqYWtlSnM0biNjRjVhbEJnejJIPCxLUyY3SzY2e2s4JUZuc29XZnIpXzV7QXxweGFsdzsqOyplb0NTSjlVNWNIOEpqUXhLUSVzTSJoVD4/VTBBeFUjOmEsczd3ZnQ7NippXW1kZHBEKWF0bGUmISpiVTxhKjtpbFtfJmhIMVJ2'@;
put 'Uysvb31QbjdJMyszZiRRWVokLDdLemBCTFJ1ayIuYip3WlRVakRla2o5Pig0SWM/UDFOPjVzKFNDdGlwVk1HZ3dHWUBvMGdASFpzPzptdiU0PypBY3xpN34xbllvXkl5QXl1Tn5QOV1IejpPSCIkTE5rSXwwYDZTWmxAWXFbIihFbFdYZm17NGxWLkw/eFkoXyRWO2NEMGI0KCZ1X2RxZjw8XTJn'@;
put 'YTI0akhYJn5HdnBtdjQxd1o7NXJodil5cmI3UWA2akFNInJhSlNpe3xkO3BwJUR0VSI2KlZ3N1F2UXlCKmd+Wkp7bHQjI0BgWz1OL1ZLZ0ZATG5IWFdDSmYjXnRUOnlKMmlQfV9xWTlLLzhGNWosJGcwT2BhaDV+ZXQ0UHs+KXJ5U0ZbJWZZYjMzdiJKfldoQFY1WihRVkFWKTF2YElfLz8qNlRg'@;
put 'OX5+el1ZfXdnTFNzZ0VvZTVkfmxaNz9INEcySj96WCVsPX0hR15IMltJQ0VVJmRieCZGe1Rgem03JCg7b01xe0wsX1hLa0ZGJS5wbzpsNVVqIX55NEtSYHtSSk81KDhhI1dpLkc5cUNIMmd3Ni87YzxzL2hDQG0/RVZ3OnlPb21uRzltLFpsMytrS3IjKjRaQCVqUkhQJUViM2BAQVsoPW5iUSFz'@;
put 'W3Y1YERucVB+QikrNiJ6TiRtKXUuKF05T0wyI05NOklyZyE1Qld8WCtLWHBCa0RJbmtiMG85N0J9ejtEMy4pK0wlMmVLQEVeOihWM1VzQWZAVjhIXSpvNW5ZfixDT146bSUzU3VXSlshcG8vOWBKS155V3hEbFgwWSlRKysjKDpIRTUyJSpGZkJBWV0jXzV6VlApbVg3IyM0RjNEZDNYTUB+eVBl'@;
put 'Xykuak9CSDBoIzVyOl9lWVs0VH0kNHpvIlY+Q3ZMUmlZWVhLZTBaW0Ioei4+XzdSZjErOlFHQ1gkOyEkSHIkMXxvbFV6YyRFLFB1Lmdffj4vTmI4MjFObSlPR29gWj83M2B4aCpYQGc9eUVgYi8wbzRAZnsmfGswVHgpOFQ2SGVOITpBU0UjdCI6TU15dEw3dklWVmczOCltZTk+ZXYjdVsqUG8l'@;
put 'TGxwI19heiRLZStrfEpCQkgzY3ttZEA/UiJRKVIyV1hKZ1NKaDY0JFdoQGp3Z2FiPSJGYGM2TG1dZWYuIyZGKFJUb3lwSjMlajBkPHlJTFVpPWwlcDchTTEuMkhDYk5dZHwvKU1pQkErckleISQmXTkpWG8kKlc2NEtJK2ElPSlrU2MxSnQ6MllhQEEocnVdZTk4MCF8ez9GT2hhRHQxajZnRXBl'@;
put 'PjwiKE5EOV9EZUZDNmchOmQ7el08eXlgLF0yaUJqNFphQkROd1F3WnB2RX1rQGFVNk4uVXg1Tl5VKE95TX48X3NveXBmUFJ5WUl6ZGl6eCldXXUkaC5SZ1J9NjR3K0QvTnk0JDVPbjooSGc5QVpfcyNlLCE2dXx2YWpsNitpfk1BND0+fSwrMTMuK3B3d11hYlVXalddblFgX3h+PXRkMXdMazpX'@;
put 'eUh6eHJzVCF8MlYhSTxATyZtVzZFdlpsVWFJeD5xUXN0b0wlZilES1hye2ZpSk1zXWFeJjlJVTx3UFRIImpycEt9MzI1JWF0JiN1Mm5yZWVEYkYvODF0N0xnU1RlZGpjQmxVcj9LWyMwcUxfZG5NZkw2Q1hqZkclVkRQKykyOm01NHlPKTJVZGF9elghRVEzWHtRVShbTSh2MylqfXtKJmAhV1li'@;
put 'eDB1SkQsfm1LfFNNXk10TlFfYHxgeTQ9bTBgRHAoYWAuREMkQ1syOlImQ04ze2FSZjFrXikoalpRQl8vNEtRNz1wIXUuUUN7IUc2ZUMpUWlYeSR7ImtYciNbbSlBJG15d3UuY15DIk5RNThociMmUGlCYkw8NlNgXk15fFFsSEJzMjR8LjNMIXxtWWRTdm91d3d6aDl8O25+L1BMR2FoaU0vREhk'@;
put 'U1Q5L2dXPSVmNyxfU2o0ZjB9bkhNeEFdQnR0fk1TUX1nJGUlQFpee1lUSFk9PFNBKSlhdiV1Y113eXo2YCJuOkZnMlNwK2ElMygjakBPeDJfMmAjLiM4OXJZWTJdYHJqQ313Q3hWcFV6RH1NNSFmZzg5amdESkszKWV+XikjaDwlIX4kQUtfIyNpSyJEKSYweCJSJDxvfUZQSXV3MUNhcFNnSDVv'@;
put 'UThSezpyKFVEQmhAQD9mIjFHLFFQZFNXXjkmP3dHfWU9a20zM0E4cyYzNk1UQjkydzQiVFVpaEBld35jfS4+NSluWk1WfDVGJTk+Ny5JL1kvdU5nIlklJlRCNEVQW08/eUNoUy5sMzlAKSR0P19dUilUPX11YltGYTFudVJNcXhPISZLaTBzUix1JXEhSDFUczcyd1t3ciM8TS5GSllzI08/L0w7'@;
put 'ey9xMi5yMiNLOE5JISolImFtKCtJY1tqPng9SF9FXyQjZzhkaT5XYURzLjMuInE5ZUBgSExQPyp+b1BzTWROVUViazVGYnNbdkN3ZkU5V0pFcTk0OENIPH5MP2dpWTtMXllUTUI3d3lAZyU2dCgyZHpPXkZyNGtCLF9VR0BReHRbaHxOQStDeVNWaiZvSmlmODVRWThiYCpoOXUuTHFBYVBFXnk1'@;
put 'MVkmJjowaFdpQCZrdDM3bnZpTHNVZypDek43XzZhPnwhJT1UODZVfj1dKTxeR0ttWj9PSEg7WmYmLDBAaTFZNDdAT3FueV4xNGBCZjllR2swSlp0MXEmP3EobGVmXUNjZFMhTkU8YCpdRlEzPyhbO1s5KjRyQHdzL21zNz1NKl1oLmQoKUJuNmBAVndGel8lYzlJJCxHJlFaT0JxU2xMUTp5bVR3'@;
put 'IX4vVEFMem80cihLXWdeQi5SdXIhOl52QEhKbDppck82SD1DfWUkQzBtUHUjIlF+SEReODg5UEBHPFomZEpUQCE/cFBHTC4lYzBQOUp5ZUQ5QCI+aFVkSUJTZSFjMD5OSjdDRmNUTWFtfTslYSVARD0iPnt+PGkxeW5SQjlAMTEwXy5fLm9bbD1fciIxKTUvbj4vOFIzK1J0cWZNYitxZTt6MlBd'@;
put 'I3w1YT9Dfj5kQktWVj53SnRHVGBLRVV4Rn5JLHRubDs0V0NUSTY+VGJZJGFZXVQvN1pVVmdZKj4wYy52aigkR3pEaDomRWhQST1dUUMpb0tMQmFObDZQN3dLa2wkdWRvdT5dRnNNTTdIWGFEUz47YGRlSmp+KFglRzouKnQyS3xCJnoyXWQidStkMXVsX3c6bjBVQmBZWSFEaURmdk9jOkE4VU1C'@;
put 'JTlrNFE0Z0IrbjAvR1F7XUR3M2QwazAiS2ZMWT0uLjNxOSpTVXVVfHRhRCJMVEdmND8zL20iaSwyOSFLPElyak0+aTp1eDhSc0YrZlU8L2dFWiNVK3wmPk5CSSM3I0VeXkIxLkpOPT1idmtJSjA0bWZfPFZxUEd8TzE3bjEoaFc1bH4iIlMmYDA9bCI7YkQ4MWZIVV9NZmFua2tNUnZEL3QlJXhg'@;
put 'fShmYVRNITNmfnBCOTF5QEU5YCUhYjRSM0YvY0QpVy9pM280PElMMnNGL1VENXdPdFp1cSVJSzI1RjVoKz5kOkBlIXdeUlZPdWRaNyQ+NyV4Jj5zIU03X01jZ1YmYX45NGdPJE5TR2YvY1NpeTohVkpyJnsuZzdnKn1kVGhgMHBRZ3JmZyVkUkUmZC9sXW1yUWhgR0s/V1o4OmcuSjlnT1BgcjlG'@;
put 'YihpQjIwcmRpQFg0ImZjWGRdJSJBLllOYCRCVDg4XVVPfl9XR2p8ZjA5UkEsUURiSjg2K09EX01aMjdBZyJ8KWlxTV1VfShIe11AL3c0QF1WZkd1VXZ+LFt6bDRpS0I8d0lhaEpdbDlDPCQmPjNqVTN9R2RSfiFwST8peWEhcVIhVVdIUFlFd2VNIyg0O0Q7N3QuYDM2I0ZsTSEsdnU3Zyw5KDpM'@;
put 'ZTFtQ09CdjRgK28+OykqLC42Knh2KkZUIVBkeW91Z3c/fktAJmA+Kj1KZzgiRF0yK3gkN2FzWDE6NUlrIVkrJjojOSNuX1liJXRkczxsVF0oR290fHdLJkVgfGI6TD9RSjh6OjZxZWxvKS51W299a25qZzREekAkdUEyV0YrYCxmUiNBO1ZdbiFgVzIoWl9ae0JbMDVZPHYiRFd2Lnx3RkE1Wmko'@;
put 'IVZgZGIyT2JHSUJycDwrcVF9bi40TzxrUXhbXVRgOWZncUYoZTk6ai9UKmN5cHQqOmBRc0k5V3klKGx1T0N9ODFLSlI/ZWdKUERKSnRIRSoyQWVvd3VdalBxRW8wS0x9MHt5alNaelB7ckNFcEtfOEZdWzA5MH1LQ1pVcmU4PU57JGdxL2tvZGNIZTxKcVI9KERUYjt4NkdMQzVnRz4vME1efj0/'@;
put 'YzdaRmBsXih4T2VTXX1FMGxgXjBkJDN1bk82ZyNDMzVCVkleZzo5eGpPdFIxYmZgSVVPaEFSYz01I0JNI2xLZGZSKld5QmFGOktnJmI6fk5DfSNfW21pSTVBNGc+SD96dzI+Vl8zJmZMdGBmalEiXixEfGJQPl1pMXwwZVBbYytkW3A4Mk9RYFBMKDNBMmoiL0AkI2FzWFlqaVpoR1Ymd2ZsWWUz'@;
put 'QjhAfFU3enlYfSp3TzQ+PXNWYTYuQloieypJX109XmYjZmpDdjlSVnNJPUBeKmFuZmg0K007eWpwKS53UEFmUnJSJXhweGFIZkxFNkxGZkpHXUdVRWomI2V+ak5zQ1dzMU9FckssPHRXdHBzNSpTUzwzcUN4R3tvXThJe1d+YkYqQngudllrfWp1a2ZwekZ9MlosdSVeRyMreVgkTWlHKyY3KDV9'@;
put 'RShtOlttenFxRH13cVFEfnZOQVVlMiVgMyF1K29sdUghZng9al5YUXc5MUJCfVVMbHJDKUJLKXRde0JKNWYuNzV0Nz19S34qYDNEb3pzZVIjUjdXd3YsRFQ9KUxefVEvbUgsJj9leGh9YEVpeFRdKiZQMHtoTEpvbV4/RW1uVWZJR085O2Y+PVNwMllfKz41KUlgLz8kZltYZEwwd2trfE41MDt3'@;
put 'NXloUCp8R0o9VSsmdXdzbTExKUxvWyZmdWIwN19PV0ZvW197OSxiJDxCVnE6fiQxNV9nQjV1aHtDcy9oPXpnfXYkUWlHTVBUPXFqLDNEWS5nInJ1RnZ1cXdJPD4wQW88M3RkX1dTfChzMlgpN2Z7ZkN7P0F7ST5FK3YjZyVAeiZ0QFNMQlo4eSkvSHFRam9ldyh1Sihja2F+NHMoLyRmclt0Zl1z'@;
put 'PSFdbkBVezYsQ2VQNzo3dTV3WGh1Tl5xYT97Ukh9bV4ydV5wZFg6O0U1Zjd8fW97c0EiYnM0JW51P0c1KnZYait+Ql9Vazc+Ok9rZTdRLy5BI0c6VnA9Kys0TkJyL2IrVUJ3WEByd2dpTlAscTtQOH1RdFQ/R3Byci9HfTBdVWM2KHBEQztdbC9HSUtlVzI+T34kbz1AeDMlR3BGYH0qaXIqWFJY'@;
put 'fENkWWR0R08qJmhGYFI5Nj5YbjxXLzhLWW9rJlpeJVBRKHk6UmAqPGdGbUE+ZXdveCxgam8vfUA8NmQjRWs8JCpoY3Nkc0V8TzFJdWI5XmtvXVpYakdxdk0pcVh+IztOUjN9QVF+WiN3JnZXP3x8YjYsfUxkRWVYXyF3az5zck4xKmxmYTZHJlluYzsrUURbfjxXLklaRHRDKD94RikwTDQ5IU1u'@;
put 'emR3aShEXmhFYVczfnlhJH5LTHtzNUhUKkVfRnJTS0twPlk/azVOI3heZXBlPFs9NEZFNnw7IStMVVc3Vz4sJTBDXj8/bF1zfFdZX3ljIWJ2fH5ua1lvQ3RbN1kvVFlAPy8jd1svakQrPikwQntmfFdeY3VWVURPTS8rfiJ0RmZQRjZSK1FVeTtFdH1UVV5xRUlwZG1aUDxgNUVIL2tqVFpRIkIz'@;
put 'PFN2R3tdWWhjQT9pOzA2NjxnKj98UFdabXtHaW8mRmM4YC5nKz5COCNQJUlqaUlxNVV7dXZ3NmN6ez1HMD9WPChyQFBtQ2dOcntMfGwhXSYxS0NZZnQmcV1eWTsvLyQ8I3BVRzRzLEA4dm0zRXxhRUl2KVUqY01kJW45N31PKXQ/eSY/JCp9Kmd9SlpiQWEubWMhK259aEljTCwqNTs8flZmWyJi'@;
put 'I0JtN3ZTfixOOU92aG8kXVRTekMsMU4/PSQkdWtuMUZ3fmw2O0cpTTxHMkskQ25ldCo4fVB0M0RWPkdDLl84bl9rd2BZd0o2aHhRdHd8KUchXVBQPXxfQkJXUjM3I0dodEduNEpKVjYzWHMxaGpoQCQySjcldCpMcztxNzk9emoxXkw5MmplXl1ZPHZkcCZYfn17REcqYkV5P2o2O35Xe3t+VHdq'@;
put 'fmNGNVBLWTQ5MGBkNVpgfUNOK3hXS2MpKVNUNSYyfiV2WCl+NE9UKnwlUlFiKiQxV21NVHpyRmFyPUY0IUR7UChYL11gJjtsMkNDXzVXUy5UU14wZyMwWzdyQTt3ci52cXlKPkpFUDkjVUNGXzAxSjBwRWZ0VSpxZEkyNSVVRldVN089IjdCemtwel1yS0RILn17Tix2JCJ3XXFGJUBNdGZCal1Z'@;
put 'OT8sTnE7W0E1OjlXcGhneG5fZTFbRXgoblV5N1BqYFI1MyptMGgvLkdicDU1Lz0iODJfYTtJP2BjTk4+JVRKWEhUTVloaiUmQHkuai4sPFU1cV5kfWZZRTpaaGp8RV9LQ1sxVkBYR1QyQ2VsSU4lcE40TWZOe0tpJiVaeEF+IWtGZk00UlYxUip8WzxxUnlUc2k9Pz5tQCZHLEpVaE1sSSVpIV8o'@;
put 'ZExkP0VGcnhteT1fUXtNTCVVPFJee0l5KUI1ZHdVcTgvdHFDVUAkakYxLzdFLFtlV21oOlJkeW5pPmhnZzZZL3dvfmw/V2VXImsvQnxbKEljVUs7O0QhYWBkSjdQK05CN1o+TVo2KWxNdUhucWpTN3FdJlohPXBpMG1pdHcsUHtlYnBKOVg/TEVlMi5vPCNCQTFTNDx3JEBqJW5MJUlHL2c4IU05'@;
put 'enghUkU5RS4uVSM6PWVDbTE/NXZaVXFiO2wpYSI5TC96MkV7ZVErYFE6c19kMHpXKVd0RShhfjdoXlRVeGJwe15SJU1qXz9ZNSRHXnBiK092XzN1fTB2NFd4Nl9JdVo8TyYwaVRQZG9AZkNBXjQ4S3AqYX5Tcy54cSsuPT85elRxXz0kcXQieFJbe0JzUUtfQ0ZoSFFDLnBSKyF6ZzVGckZQWyVG'@;
put 'Wjc5MEQ9SH1KYE97VzdObXU3bEdGeWNILEJBM0N0QndNZTR0VE19XTJofUpRcV8rWU58ZzNyKSpoQEREfEhjbEwxMEozezkvWDhXKn5JcnBxNDNCU3BEUTtCbXc2PjozS0lkcWVQNXMsTFtJVF5YQXl3WkVtaUNHViVdS0JUXm1BLDdWRlVkdGMyIS4wemVFKkNebnR4aWJxfFVMMnt0XnF1NV9F'@;
put 'KSxrNGFdUGJgQ30oeXEpI3cxd20zJE0vNVU4V2hCPiZtPW59QSR9VUFAZ2dZdlp1U3tCLlpiJXViZmphb3lRRiRWWVN5c0p2UEMiQ3Zye11kVmNaSVAzb2d1cVReVn02ZmZpU1F0NUg3OVI/I09wXSh4fjhNMVM3NlFrRUBZcExqcSRoIkhKJjoySihGSVZ5Wj9SVUFMSjJrZypIQy4iayY6dWh6'@;
put 'MWtJWHhdSGNsbVh8R3E1Jm5vZ0xocTNnUiVseSsiNH4kQ3EpYGk5QyUlIypzWj48Ny9bbSp1WDxIP2w2d1MxbFRPLC5IKTNxQ1M3LHo1WyNPQy5RQjwlNVgvOl8mbkwhVVtfNVJ4UiFpW0VRITF8NjBscDg2Ozs1QjhoPVIkODt2cD5Mc1lVTjtQaWVmfk5HRFNWOmxaX0duR1hgYG49akZfPjhE'@;
put 'MFdIUkJjM20jTXslSCF3Q18wNHh5Lk8qJGlqTyFyK25bRldkQWJtdkV1akRlT3pXfT9iJThWbjRbQH1ATWU1JEd3aik7akY6WyEiOS9oSD8+ISRFSUtUbGB8IVhzPlM+UGFMSTRIS3VgWV5icU57K1o4XWRSTl1SfHgsaEYxKk0pXixiSTN+cTduImNmI3slUX5NXShWS2pMRlc8JElWfU9rcTld'@;
put 'bnJJcEpke242OGgxdHxIe0ZXMDBTcj00SihROzxJL1V2eEg6SFoyVWJqeip7dTUvbXU7byRab0krLHhdPl5uQ31bY201UyU7TVZ5R0dtV3ljYFRGRjtURCNqcz4jOTMpMUwjV3t3UCUyPzQ8QkdTMSRxdzFlIiNNJjhoeXFiPGQlRUc0cTR3NWxSPU42S2lhc0ZyN3AyTVhhdSJ5SDRBZ0QxLjkj'@;
put 'N3U0YEtbTHx8TzUvYldQWk1YWWIlTWE8RyQmVk9lOExXNXZJZH1jW1M1Oy45bEU0cStBNDZVeltfZDdhPm9YbWJfZTxJbXg1e1lAKXkhck8ubndnfTYmfj4jRTApNj8xYCpRLHA2WX19KWN2JWR0Z1V7VDJVUjg8QEBNYlhjLEl7O1BYckh3JjsidmgrSnlePERUSGNLKlJIQTdSeyEpbnNzZ2Rv'@;
put 'an1Uej5eSzBKSmkjVzhZUTw+ejA8fSN2Zzd0VmlLd21HWjN6V0BsVGdEODw3MSlmeGw1Qk4oS3c2SUN8dDprJjRASWYrWmF+OXc1Xn5OW3pXRFRpYXowVlprTS45U0x1Rz8vI0lIcCMufnUrQ1hJa3FRYnhLQCtJPms+U3BtOC5NYjQmNkhGJlt2amBudywlM0Z6S34lQjQxLCl0dmljJmVoQ31B'@;
put 'Z3AlVyY1VU1gJmhER0tSN0BsNlJKQTQ+dW9YXTF8MjQ4TnVfYjdEUSpSSjA9QCxNMmZFTlt9X3UmVXVCOn5eYWdRSj81KCMrQlRjZ2dTYEcmNn5mMF8zOjxNeXVCLEpXQG8xd25jT2dZNyJMT005fCJ6S2FvXkJ+SGs5W3VgK2hhQ3paMmk3V0lTOF84Pm9UISQoOlQqZiFoTD8jJkpPVGReSzht'@;
put 'RH1zfWFQYnhsUmpVT3Joc15oSEomRl55SERLWHI6S3g4dCE3a1AocTZoS0VOezEuVlVVfj1lV2xPamJxYCE6ZEdweWkzKzVddT9vUjA6dy9rcToxd1soKVY7fG0yZXU5P1RvJj4+RGthJCw9JEBLRXcsKUhwRmFsRSJTRkk7dilzR3NQSn08KDgiRDhkfHtGa1Vzb0luR0lvcWx8S1AhaEZhRSt8'@;
put 'TiElWjpOe253eT93fDVzZE1CVDUrbyxHS1hVbSNeKjVeQSVUWWJMcXM6eFpXaUooLjVHLHhTR2BrfDFJImxAejt8TyNyY2FFYz0saX1dKXVhR25xY09JWSt3cGJsXVU7WFVtNCt3V0kyWHw1WkBWVW5TIyhjZjIkX1djQi8zUDVfVDpJRiRmcHdOInpXcTd3SW99U0BZX0EpPXBpN3Y/OlhRLnZy'@;
put 'Inw2a0xDOSFeI3pkYlFWbzxPdEw4djVIK0g+elBTcnBpbkBRQGY3Q159PGs8OU1WaEciXnM9PlovJm8xWUxEPFAyTWFOLHJ6eVN4Zno1dm81SjBjOjpgJnlILzUuVzd6VEduOiZJSzdZZGJjQHwlenppLyU/eGY9e1MxT1pkL0c3U0taZDZ9XVZmUEl0ejhMe1J9Z1R8QT5jXkhnXjR3Nk9nWU1X'@;
put 'TDJkR05OUnJPJXZoW1dTZG1idC5zS1txSEpZSnY+K14iWUtPQGR2STs7IlN6cXMuI1EwSXxZbCs1NDUwXkJXVl9XKWIqajd3end9JH15JXRffEVHXipFTEM0bjxweGMqYlpBZ2hmUyF1S0ZhWSM7SUt9Kl5LNTQ8UGJqNl0/Sl9xbnxbPUVyJS9nQ0U/OylLZjdkal0uWGkobVtDLGl7dWVgXmYh'@;
put 'IjYqaGk4VkBrey9TVXl6LHFUcysuYXdyQkxxT0lCakJeNnt4dV5OKmh7LCtUJl53dGZ4UGpBUkg2NHJwQUM4bl56X2dTXzdhW29keWZXRWRVTF48ZWkkNjk0Wi8oclJveSl4MUBHWWIrMk40dyt6Vz9TZ35Xaix7TFQpQTpUSDJEPmk5Nl02XlA2RUxfRjIvMS8sRHhtTyReP2ohNDVyfUBmRm9a'@;
put 'dENYcip4dH41ckJlU043ZU1bWTh0SV0hQ08zeTI4Y2VfQDFHTF10LnI8MGg+fDVPVCkwZlk7RXYzNXo4SSJSelJXbUlJVXR0TSZUL3h+LkhrelZ4SURydFl3Wzp1VkdiI0p8RUgvayVzc1VhRStwU0xQISErWiZ1bj55blZfU3YpdGFHOjojelFifE5EaSYlZ0omVjI1PCNtPHVuT1VlUT0qRVpf'@;
put 'YXRqanIodkRVZDI9VklYQChaPiF3UjRdOnRUb3NSalRZdE9DbHZTYW5OfEs9cW59fmhuWmNiZENtSigiNzw3L2k6cSpQKVpfTDs8PF5HbUVfYjd9UyM2JXg+Nmd+LGdMKUtXMkhidjkiMG0uPEVMJG5hJktYNV9bN2w0cVA2I1sxPjRCT30oIUdVV0czeTZ0aEBjeik7UV5mJWBJbGxlWyVFU1BG'@;
put 'dTJ4SzJ2NSNZJXBuVjIxYmNvUSwvVEpteVdVQFdEblI2TF12U3I/InApZzJPSE5rPV9iYDJIL3UufTlvQioxLE04QS4iSjR7MH12a3I5d0kuODZEK1JYO1RQOH4sX1tCfS9hdXMvfmtzJCk/K0R2NEJ3dztZfCxbOy8sRkFeYzgvRVE5IT4mODVdcC4zLjh+UTlHZ08+Pl1OPW5KeHtfTUNjLE1K'@;
put 'fHRUZlcoQz07VWszfD5Gek80JVglTWdDaTVsR3goK2MpXU4oQnEoP30kdnArSS9TUU8zNlduOjdVOD1vIkMoeF1Iay9YPnFWfTBYY15teVdUUkExPU1eMSs2VzRhcSpsOFJabyZta2NJMi4rcmFUNDQjazMlOkN1Ll5ke0skQ1BJN3ttfC5HfDM3ZWF5XSlJL2o0bmsqfSpsWTI1Ynd7QmtzKWx5'@;
put 'dkdxfW9JQkUmPkk7TGZ8Vl83aF1bW0ckJTcmQGVQSXI4RWk0bFgwPmcyPEtBZ2x7fjlCVylPQiRfLihMZ3JZOFdKcyk6YlFfUlBMe1oxYihqKiFVVi9QaWBsPmJYa2BtQiZ7ZzU7ZyFqXUlAODhmJmcuUzx+fF01Q2I9T29PVEBDaipsPWB2XT0uX0RCcS8oOFlELkVQOzVaU3RZNVdncFlkaSRH'@;
put 'UzFnLEwveU5UN2o1N2VEbyljSDBLb2pQMmR7RklBLmooPTs1SkJjNCwpY2JzSTckcnl3LmshdDJhRjwwZUc8WDooOENQTnFWNzdxaSkucHFDYEp6SEhmfEw3UTNrIyw2OnN0RDhNQmZ9aigmKU9tRmYrVTtfI3s0SDQ/LF5GPSlsaUBYTGZjaEtVYVBhPEFHQCo0KHl2NH5DZjIuQktAfElfZDdq'@;
put 'ND0yb2M6K0BoSz17UGYlfWM2cl0icnRxezRvOEBseFpQOH5NcGxlelQ9XmVJOHtLcGVmfkkzVEthdSMwfUBgLmNIUixPZnUhS15FXzlIPX5kbEheRnA7VmsyNk1menIje1k9L240QFtOMENDaT05Ri43Xj92IzdZa0RbYkRqbjIsaHQ/Sys3QzBWYkMofD9zRCN0RzBlU3dVQ2hafHxYSGQhUER0'@;
put 'VW84RmNYfUpOaitINVZCbz5qJDZxJkJgfUgjSTNbI2syVi9vYCZePTpURHY+Q0NLeGYxbGcmcXlCRk49O0l+bDlVVDw2WU47NFdAeCM5OlEhYjkrPVsrNHp0aDJQJTYxd3Y7TXZobkFIVDR3UkNlP2skXX57Vno9YDd4TCZPRSo1YGQkfUF7KSE/anNTISJrR0FHMU1TYnhaVSY7XlBOVT1odkxk'@;
put 'SDN2NX1paTNpQ3NeUmxxdjU3amsiV301P0tuI3dqbDh2cl1vRHE2M0U7KltZUzlKcG4oJTovNGh9cWRiMjFiU0hMOGZkTW52KmNDfjhNPltiJDYzcU1VImhIJUgiP1VtIVVyW2JyX30xYkRsLDFkKmprTUkkUVlJSGcyXitpSVtYSHVnZTNBSE99NWlMPTMrLChbeUIqSH1iIjVBMlpCY3RLU2N6'@;
put 'KC5ZOExAdmRLSWpjeUQyQS48K1FGRlpROTMmVmwle1N2VH4pUzB9LzY3Nj96OmVzcCpGeXMjRHgmJCVkR2B1OkRhTGFVfltNbCN1ND5ONVN8cUFwN3A/Iig+Y05yNzdYa0pELmdLVEtqPERxWGxkNHFUSnVed1krdzZOI21QTEBxSFttTF5WZ2UsdWQrInJZT1JaTlNhQDRQYDZKMFYhRi5NclRj'@;
put 'RWNZWkdYfVlWMGtjNShMNFlOc2EsKmxXfF0lcyksMTIuU2JKQmJbPTlZTzRVMkgxSlYzM31hUzR9NWpkcGRQV089P1s/KHdXU3gqTD5PeW9UIW5ePDR7cjd8dGVTO3EqaTlAO0U6THA7dU1SMzJSazMlanplfWd1bi5vW3N2eVIvNStPQHFrWzZhQ0hfPzdkMDtkfjp5WUJ9Nz9geHZSNUdnMVYz'@;
put 'Q0olZE4xJF9pVS9fMGBwUyN0LHUuYCEmNiZOezBQOEBuI21CMks+cH5lY1tzdFFBaWRDUFZ3KV9AX0IwSCg8anIoR04pMzpfUismT2pveV5rXVdEUzJTZVAqXWRNXWQ4RnMuP1ZBcnsqVnA2QzN3M2xRUl5YVypYcXA1SikmKkhONFFaZWd3V0JmVzlOaWhuNHQmdjxMeT5+MylKaSI3WiM7YjNW'@;
put 'In4lZ1sxWC9CJkEmQUl6fiM8PTdXZjU2VEYyTERecztZXl8qfClqZFUodWswPkN0VUZhMW9jfj5JWSNOOWRybGhmcm50cHNFM1E4N0gsKURUTEs1RWB8dF9tenUobE9Ua0k/V0xlQkhuIjQvdldQOHUxe1dxRmA6ZDozVHV+JjdWcWlvfjNCSm1EYDEybmwyVnIyOGBHYlZLb0d+ZEBeTncobT1E'@;
put 'ZWdjQW9rTmdITzZwVGBle0pIfEchV2N3dV11e0hVcyNFJlg3YzI6MG09N3k1el4hdXcscVp8N0tnLzZjNkkrQTtLaDNaXVRYQGlaTCpwTFdlPCZBKVRRXnJMNWgpWjpQXVJ0WDJzOV1hPihJOERZSCZkdDNJM0N7NTY2cFUiUipoLmdEb15ocWRNSTV4QWdpW0NvITI8aD9vdHM/blRaMH17SlVF'@;
put 'KDwyYmgiUXMrUTksPV5oYld8LDlVVCkqNH1MJFhSOWBDXSJYOyVnXlFiczcvVmhWTV1BeiReR1VgR25+cypZY3s9PWxVfS8mc1VvPzxhWlNLUXU1SFEqbXlkXTZlVnxkRDs+XzIrNFZSJC5EKndBWTFhMUJwT0Q8cSZII2ZuQT1YVl5FXj46RXV3MD1sKz1TOyV+Lkc+b3JRSXxoejFreVc9d2d1'@;
put 'dF5eeTZLPHApPkJgb2tnNj5kL08rR2Y7bWdrMHxXTWxvWCozU3d8VkNvNl0kJDp8Zio5JTk2eDtCU2kqS0N2ZT42ZWJYWCJNVyJCSCh7W3Z0YSQyKUF3LnBJITtDPkQxMz53WkJGTH5MIVNIZi86aV9hJnpvTXgoXSJEeSlmM3FbYHBlcCV+KksyOE9GYGhuYmt0d1MoMD9XOUlNZ19PZ2R2QlBb'@;
put 'bT0+b3JITmZDVG18dTskdVpfTltwSiVSVDE4al5HNU5aVWdhU11Dc2oyO3dFc0dJQjxFLmJwX3EjN3trTlkkUXBfezNxcn1VYFIqNyJkQmhxNU5NLksyR30oXVcldyt+NTJxZFl2Vn1LRkt4K25QRDA+YHJ9QmRtOyowZ2pAZXU3S3BxMyZkJn5DI3s4M3hjJm0vJGRLNDNjVEhZTilsW2tCS15v'@;
put 'SFY9ekl4fXgsQER7dEszKGQiRUdFWG1lOCVWMm9HQytAbm5KMjllZ1NMa1tde1dxOENRXypGX3xzQ0g8SDRne2tEQV1ldHZDQU4raW02X2d7JEtOYkRPZ29gLFdDRk9nKWZgekhaMVRMRGRVenA6eF0+XloqdmlSc2ltPFBmXmFCanpbdVZdUFBvKT4rT3JHTVB4e3s7JHp8YnssNjF+WWppdzVz'@;
put 'c0RMOHtrZTB7dm04TyxbTCJRX3A4e1lvUmB9XVhPS2FQTVI0KVBieDR0d11eTmAkfjxWXlUmRkQjJnhZI0tMPm4xbDN7e3x2VmNvNUp+T1UiVTQlfiVtTTk4KlkyPVoxW2ovLDEpbWU7aiI6ZnBNY2EySkZpbTxfSTJDZV1ie05aOTdFKFgiZWQ4Sjk5KTslTk83I3ZseFpGL2FCLmtHZk52JWU4'@;
put 'ZiE9Jkh1IUY2WVRpSGRVKWtVZDoubHcsUHA5cWY4UUJXQVBMbVtUIyI1QyJ1YSY5eT9YaTErN2Uzc0V+NGxkWXI/UnlfRlgvNlI4e1MrVkAzKlVgO1s+bTRpNzV4IzBGbk5EKVNyWFJQVE5EMzoqKjYlL1tJYnlEcz5uMSsmOVgpSGpTLyNXZFF9P15jc35IUjZoPntWIytkPF1VcDFaRVlDPWJE'@;
put 'TC5tQ0lDODo2YjhpY3BjL3Q1YExKSmxpMiZpTzVUJiFZZC5jbDMhWXNzekkodnA4fDYoWmc1WklgNV9HPV9+IXV0T3c/cjEwLz8qeF5jKFdFZEs/UnVBeH5jVEUwLCh3NlJiTEo6OjUjSnFyTUdPQHQqMDt4TSIlKjgmNEwxR3IlS2suNTRObUtlYHNULmQ1TC5GPUlOOmJ0KlVbNTxBIn1ZdE8j'@;
put 'MHQpVUhkZiVPQkNNb0wlOFtkbTNhRzFsYG8lYksrZG0xIz9weXR+eFVrPGZmR2UpT2h+d3cxQDF0fiVwQDVYd3F1cUxzfERNRF92ZlI/Nz1IYWcuNE1pVmlRbU1Te0RrcVRnWjQ3T3g6Nn5eezJ9d01fNC9MSnRdKzY2SHVxZX0+JWUmKmpWO0hNaWxpcFNwdXVqJE1NU1dPZnxeTSNDa25MR0Qu'@;
put 'ayswSUdeaUt1cE9NQzVSNnMzZlJJSzssMEVXfT1Ma3JmMl9XX3d5Z11HWVEpJnEwOiJNKWFwaCh1bSo1TSZdUUI3a25hRUhDNGNQJENPO2g3Yy9eOnJpN0RkaGh7eTA3ZWV0Vm0oaUo2MS5dTkRYdjB2XkUlZyFHbW15Q0ZvWzlXc2VRSFJLRWcvRTRzVD9YfXkid1V3UmMpQlFGTWpLSGAuQSVe'@;
put 'IzhGV2BfT3lSVDJESmhtN15aJF8oPHBkXjh+YytkRDQrdG8iY2x+RlpaTWRDa1c2aV5xTT5YVUd6Q0V1NlNNWUVCVV0vSyM4REB8eF47IXQ5e2RbdjVjPypRYS4maEU/K1BVa1B1RiV+OEJrZ1habChyTHJabntKdzlSYyJyIURsLmpwLD9DS2ghKHFRViF7YV9gIj45bll6Sk4lOGpmJF1QR2JX'@;
put 'NUU6XW5tJD9qUlVmTDIwQmtCL2JjTDY2T2dAUnQ5X2o6aUdjNlNgUlB4VGE9NGZIUV90Pm8udFJlbUw3OiwyMzdNQShFVlFzQ0dPPl0+MzwufkwzMjFeO1dbSVBlXl5+fmpuS2VieUlZOVg4Im5MZn1jTWo3T0x0UElIfTlrJUZUZ20yMnlzeEhrQSlLOnNAa1QqcyEyJmVUMXFtSl81OTJ+V0JS'@;
put 'SUAuO00ja09DX1gqJDZiRmB5fF1GJWwkdyM5OXxucXQjMUw3Ty42Xml8JFlNVE1EenRZVGwhd0Y7VnRkMilhdVkxKipmNSpJVkViL0RxUkApdUtZbiE1SjBpOGhDOyM8L2VFXlB0ZFB9ZXhybmhzU0Y+UiR7fHpfXlUxfVdhQHdXRWVMQDQ6byYhP0BReFZnISJ9UENNUTMzbkN1KEtCPU1mQzRS'@;
put 'Y1RfYWVVNXc3L1d4JiZabVVWTCo+aFtGOWVgbFF3K2pQOEFXclUjQC9TWCwzSCl+Rl0rJTg8KyRqY0pAfTQuOUV9WlB4KSF+cEV1dXhrOURXOTsvJUsuVT89UjFtfW1XUDNqeDgyTE5iPHZ8NFBiZEBIWXNjaH1uNnlJMUQjTSQ1I3ZkLlI6Z3NdenkwUDFOZFJxMmJQamxIP1ZzR1RYU0deT0pq'@;
put 'byg2aThaLiopTEZAcEMvaWpzKWZTSzgrdV19dXg1Qi9PV2UjZDRLWkkwbmUhJFhWV1ZbLiFINkdKQW82aylORVp0ZkhOOHUmbi4/V1ZleW5QSGs0YC5eMSR2S0F1aGV4fkAuW3NKXmdsO0JvdU1XKn1xRDdaUl53Y0ZWeyslU3wjXk45QHE+cU5JfFdecVVnaDZOLHhmXTE4Q2JuaikpIX55PGRR'@;
put 'd3VpTz1zQk1LRUpNQjI9dnR2PS97TnN9KiFXITpZJEZubl5eZ0U0JktuX2xudVBKIkpETzdnWU4rWkY9cWsjLy5+ZFFIR3diIk4xUmtrdykiXTVyM1peb1FnY1pzUCI1cU9iMGxUSWhjaHJuVkZ9ZTg/YCxBeGN3PG5RP0JgMnMySndvMl1fRUs6fSVuSHlqfSUsbyl0QFBse2V3WipTPjhSbTd6'@;
put 'QiZWe0NucFl6WiMhJiFVMXUiV0tvY09eR2F6UXZ3K1s0TjwjUVVSQFdmN1tAcUcuSE1MI2NRWV5HI0RmZHJhbXF5Sk9XVntrSmdHPngjbk1xeSJdYUJRfnR7Ni4qKlJCb007eH0hYn09cX5tcnQ5PC5IdlhpbDM1STNeOmR0czBHIkhjYnhlQkhOdzcrLigsT0JnfiteVV9OUGt6M0FgT259M1dm'@;
put 'IUJgR1JfUWRDOHFJYjtZRFI4JiNzNnlxcF1tYTBLX3JGOFZ1Z2B3PSg2XWZPaEB+eDN5KkkvQ3g+V3hxdz9pZGVUUSRiMnN7eEp3dzFbNG1ZX3w7UWRNLCgkdCR1NU9jSVNDSGB8SFR+dDIxKEVoVEo/a1peRE1hZko1IWFVdUJlfEkuST4zTDFLe0t0VSJhdnY0SjdCJW9VaWZQfGltYlh2dHNG'@;
put 'fkAwNklWPntQMUVPdkdCRkAzSjd7VmRuPjs+UT9wLGZwQm87Km5yKjwwWWs1OFdpSEtmcFs6fWlAXVF5ND9VfHBRVllaZn44OysmQFNEWWFiL1FXakJ6OnordWloclk8O0ouIkg6OGB4IzBmcE5YQ1t5ajMxT29TVkEqdSMlRXxNfk15TSY2UT1Na3wyTjYmPzxHJj5aMzkuMHp5VE1tZXZnMHRN'@;
put 'Yk1jYSJDIW9XSUNxYENII301dzZQS3wqOTA6JnV6djNWTHFzJW1AQGt5R3Q3U35fWkJ4KX1+TlV1KkZXQm8qfSNERikkZkQmenA1N1UlKSNQdExSPERmQCgqOXUjU25JPzxGJDc3fVsuaD5KZy4vIVomX0p6WzBmNm53R1o6MCFKI35qKzxmUV5NQzBPQk0xSCJ+M18/PWJIUzFANThGM0siLHYm'@;
put 'bWFRbDAvRWh8WDB9PkczeksuWltYKXVTeygiQWdqTlNzQjxYPClpYEAwR0EhTlg0P1RTWEc+Inw0YnpYOFVvPnB3e05UczBrNWdwZ3t4NF0yal5DMj5wUy82R2t6VGxrLyZsfkNNflp+fjFvU0x6NjBtWToqaWw/N2tzImAmPTs1aTIjelVdbEtbKG8pIXF8dGdefiRoc0R3VSIuUGtrXT9FaUlL'@;
put 'JF1ebTVvUSo1JnVDZzYxZX1HWT8mNStzbVMrPHI4W2NhVzZOXj8+S04xYGVuSH5AdUBELHFnJT5CI0hzKWRRX21pKkFKVzxkIjs5MlswSF92QSN4b3YhcjxEKit9STk4LHVEJDlVQGBDR1NgRT8yV1Mvc31mWVREZm09PyxAY04uZl4hUSNSdGdOJVdTKmNXeSV0WCtuWCxtYT88eSZFfTdPYEB4'@;
put 'YigyOztCKVRYYmYxTEF5JEBiSHh2IVtTO3dWVmJmfE4maWVNIko0V3NJaiJtdD8kS0FhekJgaHw9PTg/cTpJK3V8amR9VFN5NkR3Nk9yQXMlTEJ7KE5wYy5vOTNuKj9JKEdNLHo+TkgrOFFHaH47MlR7MXpwSn42bikhaE07NGRIQzlfL1hRZX0xcjJMSWgjcUVQWClXc3FiN004YnIxUSMpUElr'@;
put 'QW5bPS4xO0ZYfVl2VVFNYyElMig9KzIkIW8mXVI2OlgwJT1iVlhUYnxkSTA+aDFiIyIiVnx7YkZwKj9hQVlYYCgvTjRXRFRlc1M9WCUrIlBDNUxDb18qdGAlKkI8cz4rQzEpQHclLG9iYlBiM0xeJjBSYVdhX21dPn1XKngsZWV7QSNPPCI9eSNTWHJmRjUwPzZjOyRkd2NkZihBc2FOVFBOaERE'@;
put 'L0svfmMsJmBxRlFyJHF0bkBNMlEvTnhVellvaj82XTleZ1M9el0/XXoke2ZFI0hnOlNjb3NJOTEzamMoZjB4Wjl6TFsxSjF7N0NES3JueWlCfCw8eHVYOH18PmZ8LGN5d0UkYU1SLjhZSnlUOj9Fd3hqKW5xTWd+cX5JeiV8bTFud11NQFl6cU4hfWk6UXdNdm1RU34qZl1gflJhVm1sSDwwYls0'@;
put 'QikzV2NRcl5vUGZqLFhJYWNVeU1mYFFyIlB9ZV1nNUZ+dFZYez8waSs8NCtYbmM0blVRdXJ7NEJXUlk0Z0BiNFtnSk1+YEw6ZWUpclE6W3VBeklAKFFlUDF8WHkzcl1ILylZMmdnL19LMlk+YDVXYSMvOyZVU3B6Vjh6T2V3fCtnfUhvKllXVl4+Z2pmLEFvRWciJm1oOz5CdSRXRFQoSTMxMmJy'@;
put 'RlFkO1QvYXttV24scDNlTkZtb3NJdF4jTS9NcTQvMCQ7YFAwTFd3WkhuZiVDQTYjRlNLR3I+P31bPDBpJmZKeThkTmN7OjJMTGAuI059SV4xTDRrdlAxOH09T0J6OWgqbX1qUzE7WUE7QDBFOF1uUHBIX2J+QCQzUi56IjYrKCR0cyMmPW5CMGhaSlFOI0w9LG86QSE8c2BaMXdTbChQV2tDOSQ5'@;
put 'dj80JUNjN2BBOk01UysjMlYrPkRQOn5gJU00QTQ0TktpTWgjK2dnNW1uamxFJGRrYntOKFNDWCYoY2tbKlcoczEhNyUmVWMoOV8sIXE8YipBMEtnT28+Q3k1aSkySywrbXh1MDk/QFdCZUFEZXhRQEN+OiVtVi4zSTxpVFFZZUpCIXsoOn1nTVA3WTxLTmxsUGZ1LDdOdDZeR0U4PmlqaW9MIilr'@;
put 'N3opO1RZNVJNTSE3c2whI0dXWF1WJX5jT3l9YnNQIy8oZCtxPVJfKiNqPTRHKmRTOCFnLlYwMUxTOXlYRmpYQjssent2YUYlRmRHaUU6b3g8LCE7N2A7YGtNd3U5UmNKYVBvJTtSN2RSW1BEbnJIZjNEd0puTllkbXsmSiRiYXttU0YqQ0opME8raltqOUY4enhCO2UvMDVUWDVbflFLIms/Z3Bk'@;
put 'OmV7cSp0a2dMeH1HNVUxK3N0cVtJYSVdQ15OSGE1VV9pSTlpVVlHcC4xR0pKLi5tLmxiU15+UWZXPWJTamZEKXIrPCNXMWIhZUsvcy5JXiNddUR+fGBBRFg5OzEjeSVOYltpIkFjPHltVyxLMnEjLyxJN2I5fFAyQ0RbfTVzbl5DN3lrYCpFclt2eiNtZTpoWDAyT2RmRC81aFkidD5OMWJyWXpK'@;
put 'bi5IbT8yXUZDdE5sV2A0e1l0Pz4rXyYkNEp1UjhpVGxoe247b19ZenE+M1ZUV1dDK3IqSCwpTWdOeDF5Zlt2bGRab1AodCZORk5XZl1PNWJISDRGTGpEdzNOXXlyPW1ESCo6XkA+fm1VUVs2UFZQbW99Tjh+WzpkI098bHlUa3tTJldFb3RDcjE8VTs8RFBLZGRCQyk5XmZ1Tm9JTFVZNlZzK19f'@;
put 'LyRGOUk+dHlJUW5EXSVDOkg5dkM0PXlUMytLNn1uYDZYUGpTTlpwNHplZUZCejNTP3FDZGpVdWdEcDtoRk1kVjFdL3JgXzdoQlF7NzYmbWMkR1lDT3FCfEVQMENFWCVlP2ZVLntFKHNOTCtkbEZqKVE7VnMoSG1HQjg2b1tkfDwlXmMzYClsZGsrfmZXZndOKDB8SkBbOi91SnFKLmkmSmgwfCsy'@;
put 'L1E/I3d4WyokQ2JtYCk8V1Z0YCJxVF4iZ2Q3Z0pIUW9NWF9YXjouU3cybSUldVtlbCk7PFBzfUphfWVVOHBlfGpdUX5oVTRwYSR7fHhvdTU+a3RWezF1SDkmdnl7KzozIW99eEgyKGBnOEssQ0JMOnBQW1IqNWs5VGczSkl6RF9Wd3Z+KikiekZ2elU1XkteQjZMSisjM3h1ZlhrNkQ+JkdZWH4/'@;
put 'MyklfEdIQEwvN1F0OVNHTChCcntkZ29gJlk7bmdObVdBZGwqLi41QGNkeWFqfTxOdkVYazU3VUJpZVFre0tlSW9STCF2WHhIYUIhV2kwXzR5OWRydTMqMHJXQ0sxP2JMTF9TbGkzSXdafEJvfEk1engzWWVLaldpQ11nSiVWWU51cT5qSTYrPTx8NlNwOk9GRD4/fnhvfWRUYTdCYDt3JVFpJHcl'@;
put 'OyF7OzMxaGZ4JmNtYX5HbXw0KCN4aDZVQXhYVkVwWUU5RDI5Pk1OVlQycmRGSGx3bnM6Kl5yNWQ6QE1qN3lSOXE1WDZhLDFIVDhsS0EuOigwVWZ2ZzV3emxFcTAxVHZxJXx8WmVfIm1ENTMjZnU2WX4vXzFDXyVYcktKT2pKVHpEcFhCNTVPcU5WMCojWWZrV1VRVWpeOnlmMS9JOyFDX217LnZ3'@;
put 'eTFsSDUhQDN4UmxdazpGQkIjZltqaXhWeC4xd21rJHE+cEVHflkuRCRJJiZyWE5WXzduO21DKEtaWVtuSk9RbU06b0FQLGRVQWlOTmp3OCEqOEYie01Ebl0mL2lLMjYlUCh+ezY8TUcpOX0/Xm19UkNnUmpdUTtId2k3c1Q/U1lCVGkjOlEqNnRlWCwiKVRnNyE7Omg1ajdYLl88TWBmNEBUYEpR'@;
put 'aSw1YTtxP0h1RGAmRjpbS0MhWjIqQ051Sz4wNmtzcDtrV2NOJTVJU295Q0FyTl5CJExVL3M/bEFCTT8zOk5EdEYmQTltPF4+LiVbbDpEQzB6d0ciKWlUXnU2V2x0aFA1WUhiM1VzRUo9VWtwYWUuQCtfazEpfVB9RlZYQFhzKEV9d3RIbnNYP2NkYiR8W05VJjtkW1kjWiksM3k4Qiw5QGZfcE8p'@;
put 'YTx1Zl40dCJBPzlbPWxoYXJqRio6SCs6ITtCcT0mZ1Zucj1HTnpiTV80bmlSeE5pT3dxKGB6fWJILHAzeFVdQVBgcjBoSkQkYGt7bklkYnApbGpaS1tPfWA3YWZ8X05waCg4WncyV2lhKVsqL1RxdldJekRlZCQkJVsvTSIvKGdHN2Mrb0U9WS80WXEwVX5QKkw7NUxBaCNjPjssT2Jbb2NsNzBr'@;
put 'OkUxb0o8KSNUKFs7OHkpVCV9KnI0VmZmW2VIS1orVFREND09YnFiMzp1N2ltcUE6MUVMdkVTOD1mUDg9MT8zcmxWR1YleDZ1RD8uXnZHYSgscHdwPG5WfHlwVEsyMnhAVDErZChEZmA1aDF5Zj1AR1JZdV1CZEBJWVpAezJdX34veUBBPWNmZlszK2BISzU4Pk9edTQlUThqU3ZIeiE/TGlDYX1C'@;
put 'WCV6RGYzT3JyNiFfbzRRaWJtVCxiR11HNUcoOn0jW1tEa2ZbMFNYMm4lc3x8ZkpnfDVNOHtMS3VNQ29obzA9WSVlR1VsZ3dVeEJjWj1JNzBqOFZbUytvXXxpSmFmNXdhbzVdPyQ7JjVSJD9SQiUpfDIwanduPD8vam1EJHxkIXJFJm9heXNOTGFVMWR7bmRTczFpfjwmOFs+fjpYbEZ8UUw0WEc1'@;
put 'a0VuaytVSG43IyZ7bXVufkVpJD04N3VCZFNPeyF6SGkkPm9EUUx8Jk8mSEBQLCtXMGsqJHApOFpYUldFbHlFKTk/VXJ1e0NZfFtzV0xhTUEhRk9jZTJ4LHklOUtNRCw7ZjRbImAreVVeJVpMamU4dG5POV06R2src1Z8dmBMTXkxK05rPXg6SiM3JlpdSmhXLmtsQi96XnpJVTo1IlUqJTkua05r'@;
put 'XnhITkAhaCEsWjZWZER1Y3UsUntjWHRxKXc9OVpkcEt2dEg7dkIufkZJWFJAIk5WLH0mTG88LEB3b1hlNTNXeT47XV9pbEVhWiF0bEw/WXchRmAiLDs8fipGYCkzTUxIdDBrZS4wNFs+fkc8b1dvd1g3amdOISViPEw8N1JOay5NcylrRE1abzVgUD4mei58XS91NCMoVmQvSmxbNEQ/SyVOb01B'@;
put 'RCYpP3FDZipwKnRjdypbNzMkcG11T2wxJChdXU4lI1N8Z0F8VDMwIkpubldlbVFMaSlCSkRNW2w2OVJ7UiJhVCRFe04uflIvNkwlb25aK11kXzIpPzQ0ajFmWlE8bHpDa0UhREcockpAeHhSRnVZXTB1IWpQPjhyYEZULz5nQmNRXXg2aV9GXXpMbmJLKlJxQks6OHEhRnZVX1RhVlRRNzA+c0JU'@;
put 'JldgRlUwZSZDcHI2Qj59RWghYkBTK3JHJnkyRSVQRzBFMzdRezQsKVBwdm4xT0dmei58YlsuMmMyd0ZmLEhFWjlEIjs4JE9oKip5P1gvJl91WCl0P2BvWyQkR29GXiUzWD8waT8icX5eSFB9OVM1cDVyOkB6YEFqKXFfMndua2Jyd3pkSlImN35OX0pHPkk0X1k/c0N+KmdON1cxdyo5QjJGdz4o'@;
put 'VTk9TEBSeXpYLnh+RX16VVBeYThQZSwhcGxfQns7QVVJLHk4UF1vPnxqaFAlYGU5VHZZVE0zPWB5XVAmUH1hS2Rwa3wrZWU1Vy92aiVFJn0rODdPRzQiO3JmPXErMj5xVGo9a35tTCsrZmZqUz4raWZAW3NRI1hfI0A2az1vZXdFS3wlQz9WIkNzK3NvYDg4cjhGekQ7T3JMfGVqfGdDUUMicl1L'@;
put 'e3JMQl94KClmKTomIUJjVDVgRzJtMyhWe1FCVzQmNVIjRl1iSWVrPVV3VXsoWmN8aiFyPHUyeTNMO2ppMXouY0hBNkRJTXE2b3Y3QmlMUE1lUkQ1JXsqRTZUflFfem5nJWtlUzUsOXZCM1FvPDYrKVEjXTUqQG9rVyFgRlZ5bFQ7O3lFNmN0JG5mbkc3dHEsK3ZPRD5pZXQ3OXB2WU58W0gpImIv'@;
put 'e0coOnBEP2ZjUlE9c05mbklMZyhna20xRVFVem9VWjNhPWBdK0RGTnVTWiJgM3Neem4md0RWSlYmWjBbZ3xOUXlhWm50Y2RgfT8mSjV9SkVDaEk/TXtPXT8+PkpeVmNySFpCJkEmQGRaUWYkdVBXeV5hOTxJcW9mYVluaGF6RjdlImcsWSh3ailQcnZEPztLP2tgL3VBKl1Lay85S1F6O194Nlpl'@;
put 'KGc/Z0haam9pNnwsQTxEVXs+aCQ1NmtnP01FdU9SIkMwV2N4S3BxQERpeVEiNlJLYE1XQHw2KjRBJHBaVHQsKHkyfDVkenhDbUAxbSN+RXYhdVVZb0BoJFROMip3S00kO2BWRFVyITdRJmAsNDUjPTJ9USJKcVhyeDZ9bio5eyQhezM9USR9KSJZRFMjTUhwYEc/OF1ZSFsvMDRlM3skWyI1N1hr'@;
put 'QEY9S2dgezdZMGBuTy5NamVyZkVvd0R0YldXeUshLCJ4WF9Waz0qMENeQip8TTtNRC4pVGpabUMhN0leVk06aT00YEQwQF17RSROKF5oTl9UfFN4KmlYcDFbO05RdF95UkArb3tYVHk8eE9LXy5+NVg8JThDdXZbKWd3cWBoakp2az9meVp9MGA8Wz1TLGBSRmN9I15BI2ZDcigsOSNFK09uWS5J'@;
put 'MllHWihqaUJaNyp5YFVRMXFZWU1gMGp7XyIlNmVVd2NSKzVyPUUwVV98Z0pKcjBhVFhDZHdVWmUrUW47S2ZhWHl5X3RiM2tXenlLRUlaJXEvdG5wPGxyQHleWW17WDhePVY6RXhIRDhsQCFCbTU1M3tFIXpjOilrMWgsVWolMUddPFB+WU91bWt5OWEkWDllSihIY2lFa3M8In1KS1oxRGhVN0RV'@;
put 'Zi5HISh5SEVwTjBDVSJUbnJxME9EMjArIV1ncTdJeVkwQU5HPzMkeEAsSW1bVl4wVHpNUTIhVzRWMD86JXlyKytTL3RyLmRITysmYF8+eHw/cTdNJnRLUDR8Q19BLEptYnsjLiNucUo3cj9DanFgUUtTL0d8dkcjTFdmNkUyXU9ebkNIN2FPN3I0ZTQmZkxKM3phJXRtPEhLWEdLWS50Png2TFUw'@;
put 'bkNOMExFWjgjQipVPTZAOmkzJjtQJjRZJWJkVFVvWyQxP2h0MllVRFBgeUhUT0dtcD9CXWx4RmQ1c0JYPS5VNDEyV3NiWVh7aj5pJVRVaGwmanNkJjh0cD12emlROV9DdF5ycTYvVzZbPjs8Z3k2IiV+TnJdL1ZCKltBdCl3LzNAXjo4O3tQNTZ2MkZWc3FUSiFVO1hbRiIpMzZiJXhxRHt6ZE4l'@;
put 'QiRmV3RQamorZDp2b2RjVnQ9ZnBeaEdYaCNEeWteTTolcz1UOH56WEtWTXtRK3xbbVozd3BmPiN3fjc6N0B2eHIvV2xNXSx2aEx5alYiSGFrVmhXJnZ1aHsyXTVPQ3clNFIuMClrOUsielg5el1qXlBvV3dWYXU9aWFrYzAyRDNGRzNeJjIhfHEyS0tyQnBMVitJa25mPmJ1bmF1WHxoP0toOnwx'@;
put 'M0RJUG0kL1RjKi8rfDR4MFo0PTBDaVtlPXFWRkVrVFI/O3Z1M1dNPEsue3x4O0VmUFQ1a3V3Z0AvJDwrPz9IWU0pPmVaLE8pbVlGRU8sKEpDOiJKW1RsRi9sLzlTRCF3MkVoQmRYTjM+U09KKEBvQ3s2JGY8O0FqPGt1b29SOTxeNVYxN21YUXFDJGVuVGI8dFN8WExQMERGM1RrR1d2YDN4ayo9'@;
put 'PHMqSzc0JkJicSRqYyozZDk4LkR5aGQyOmRESHMxeH5RcDslYWQ2VHAqRTprfGV7XS9RUmczYnMlNk5bW3xOVSQxamlHYDB7KkhpV3Q+N3ZoeyJicTtARHVZbj5WJj5TOTAvZl5bZn5CdyxNUFZzWnVHLHh6SDt3WiRTfFhtN1c1c2hqYT97X0lMSGNbJUojWmNsLyplPjVsV3ZyOkY6X186UnIj'@;
put 'NDB5aEdSdWw2Vzp2VzUuOk1kRG5rRFlddz1GeztmJShNZmAhL0lZQFcrM2FiISRgbSV1WzxUVk5KYUZmL1Amc3FDcDpFT00kMD9GRFN+UHYsNmpPUzMrZVpUcFMsUFFxMXZzUXc6bEluO148UDAiNEshWz96a1soIl84YWc/amlxdEA/dXAhIzl0cTRwbFJoNVgqQ0R1NENFRzl7PERdKSYqYEll'@;
put 'cixIfTpmZmF0Y3NWOFopP3dtYmR1ejkvKiRoOW5VdiJVdDRVODF3PVErKktnSmlEdChQP1FfNCJTJjlPeHZXN1dnR1AvMiNbX0lhM0J2S345VWBAfihpNjtnMihkfDlVSmhCSmN3KHdUaWsvS35Iencual9AOGRWTzRnMGZ9NHx3Z18mZH5tT2tOQEF8QE13SDQlaVY1UHU2QVEmIiZzKGQwVmky'@;
put 'YEcuVzhnJmdyWmZ2KCJuPDhNbkVMMkQ9NioxN1JhK2BWWjs5YlYvRyZVfXYkamxzP21fZXFgcipzeVlkRnJ9JnwiYGBgJXxLJEM0ay8rdzdqYWtteTlia01hN0lAKDYpbXlqJkdCYSUubkwsQ0RNP3VRV1d4V09IITxxRFExXk4+L11NMnUvKCMiL0w6MmM1P3syXVV+TUwvX2pXeSw5ZDBPNylO'@;
put 'Ojgvdi8jdT1mWSZDKnJhZGN7ekpQemc4amFGfWFgRlJSSU9IbH04ZlEsdypAKj4rYnxSaC4udEJ7QkQ8XnluajVhaSJjP314cjguYzQoe2hjWH07TTZ4RChlb0VLVV8xZU1ZYWVwdkgpIlB6eylYQzdVcXZFVzowKjZILFJYZXAmN0hTXTIsdzsoXU9vckAuZkhNPFsoOSswQF4wPF5GaEtIZ344'@;
put 'ITQ+Qyg+KW1NU3hDUWJMeFE3S3shWHhEWyFCdSlTKHJ8dUZvPWgwSyg0ejZpOnVRRkl0I1ApSnlgdXk7IlRFYkYjN2JuP0A+aFVAd2x2TD5iWyRWSEB1U0pDeVl5NktqIVNGcDJiTSlXTTp4T1pZVDZRYDAraXQ8OCM0NzlXOFU1ZStuMWE8dnRQKlRALDcyK3AxUSxyXiI0bGU3YDcwQDx9akdo'@;
put 'e1lsX3x4JFF8WEBeKmY3eHdZez1uN0J7YkZEMitPUnBTOjJJeVYqfSZHUS95JiReIWdEI3pPRGZaNkdtUUJHNUZSeks3MSRYens2KURPOntRe3J2PVpVNHx8NTo9WmxJRmVJWUpqbmx6JTZTcCVrOCZ2c3J9YGxucWYxa2VhTyZ7cFBTfkN+SHVeJVY0NmFxSS53IW9Gb34/YjJGWU81dFt3ITBp'@;
put 'fV5TWFgzcyhTdTJyeFF1VnozQj19LGxuVlUsM1gja1RecHtqTj8sdH5oRW1yZml3bSE6InpwcWBpSzNsRlFtRm41MkJ2NUJ5PXc5RnJQUl9pRXM+fUlgcWcrbip1aEhmKihFOmFma2lCei9Yc1U+LkZKdWQzUVppdWJuTTVSKURhcTdYYTxVRkJDYSs9aWZCISM4WlNDIzNHQWRGZVt5TC9eTT0j'@;
put 'aGh1Mz5GXXg+I0grYi9AWjYkbSxRKlt2ampackhwS3Q1fVYhW3tndXwpU0tPVmlOKCtCTTpHV3VeVV1fOWdmS05BVnQiLj5hUkxGbXtPfnZeMl44P0UpRyk0OnNdbm86eV1zX2dNP259InVfdEVYblAvQkhKXnFrRiE5b2xGUWgyViUleGZmLjV9JUtnd2lVO29abGs0dHFrLntNKXc/Z2AlMSxI'@;
put 'UixRaFtPKGo7aGU/U2RpMERYKHZ6NWdVflEkcElOOVZ3Y2ZGWDNwc31MQEJwc1RZMVYud0BWcCNZSStbSSMoPE9nNTEocH19NnBaMXcobj96LHo1KE9uKFIqRFFqcyZdKWRgUlZDJUdDQ01sfkE4bE4qZ29OR10oY3Q9aV8zNm9eKjd9RXhreXosQlR1QkY0bG5tNCElMnljOEdtQ0V+dnFabH57'@;
put 'XlpvaFA2KCJJLDduOkg6fmFNNnMvZm5WL0kocXU8aDhOOjZ9b1o3WkFbaSljNn0pV14kJnpxV00uUyR0RlVSZF0veFE/fmArYGFoTkxaRG52NGs+TWt0bXRXIVRnRXo/X1IwSlFoZ3glXm9OMnZ6MC5gNjJCJDtdV0Uje35wMllqTFJxR3VTYmooTU9gVC5UVERxblFINS8/M2I4Jjx9OTwkSios'@;
put 'MypOKj8/JUo4MFVBIT1ecSwlSFBiYko9fDhJOjpgZFNARkYyZGBDJixPKGJVRGptbEcueyJualNbbGI6OlRoWD9NfU0/Sm5odyY0YCt7ak9tKCpNfnZINyVQbjRVJTRTc1UiNyUvS2tDemp6Wjw7XU95b0MxT0htW1QxOSssYXl3eURDLDNbezZUVilvKnF3KX1Jfit3QTVrSlAqUU1GYzF6OCJ8'@;
put 'YTVJIXhpK0BNczRbZGpkcSNtVHdzRHkuaTJTKFc0enliPEc1N2E6TTB7VEBWbWx+N24rTGU7bF96VC5MNnl6dHl8WCF+PTUkcXw3Q0I9VGMhImdSe0M2NyhGIU1lc3kuaC5TV2FNNkRueGxIKWMmYGU0QipKVmpSKFMmTjY+WWc4IXZpLFhpSzgzb0sqR1M8MDp7Z0taXUdGZWBodGZIPE9wLyI0'@;
put 'UHlXKnglSy86JFRoSVBbQGE2YjxQOEMwVH0kTGwpPiZiP2dMWDA6WU0iOUNLQHUrN01tc08wRiVmczM3Olg/ODN0V3ZuWk1DQ0pVQ0NtTUxfMlcoUmwwLkJiLD8/eCIyMVZ6SXpYc0oxPHRKUDkqbU5aTCo4UXkhMXo+PSwiUE9LRz82TldsPXhsWEc2dlh0fm99K0JHLERYe2Q7SmYzUklpN24y'@;
put 'fXlAM0hFfHVLPFd6IWAuejp2JHxKbHlgMUQ3QnRnU0pvajAkZ31bMD9+TkJzNlJFN35CMHx3flc9aGN4Kj9xNjFnSl5pIWBbMTN2Tj1AUSFKRmA1MTkudk1DVT4zYD5eP3VFbnFILl5RQSIkZ35dWnB0KlJVTlcpfGBQVWs2PXlhNFBkREsrNTddMyU1KENZenc7RkN8QEZ+Yys3RTdGejkuPjxx'@;
put 'YXs3IlhzX31fayUkcWRIOm87TmpxVXR3LCt9fmt2Kk1ddlpZTW1LYCUyPUAoKk12WDxSeUtrbF9DVkMwVkAzJmRIajxQOyl1K0RsfC47SVppMUBTZD91RVguNUBSJkMobV9Wekw5MEIlb3F3LkA7RkQrKCZKTTxMVCxsLkR1W3dVczdHJXx4XXVxYytUU0VtUD1DNFcjcmp6KklhR3wsPlp4KUBR'@;
put 'Y05QVU94PlY9ayFtfSxfXUReaFltVlRTR2gsd3lvJm5CdkBePE0iPlZYQFYycnBBR103TTJpYyJXbnU4fE0lRD10LCVrUTFSIWNNM0tlSH5OeU8hbiUwVEsqdWtEUVFWdHUqTlEqS2FUfVl2QFQxTFtleyo3RTthJCQ7LmR9TSk/aTYhb1s8cnEvV3hJVmJQO1BseDF1fEUqN1VJPlBEfEpnJn5h'@;
put 'MmF4IWopZW91eTdNXzopeGBwdWY9Q0JqIUpUeEoxaGRab287IUl+TF5edWA5cGFMP3F8WmhITT0ien1lMU92TFslPEgpNjFOKG0uJmBlRF5HelgkY2hFXzdta10rJi8rMHtpZnB5T3NJSWhjJGY9dTxlfkc/YWdDTW9NTGdGIVU2cylgY1BNMGpRZUJrOUNTSGFiYlckdyQzUVskSHIrK35kOWtF'@;
put 'c3lNLCJRKip+Rn52Vld6dSpMclo1NXNFPy9MczZlSj5fYz57ZGQ3ZS9wVmtqP2dgdEl2WU9XblddOlV9WXtmSHMuSX1LJTxgTjZdQGJPKHVnZTtxIUw4VjpsfjtIYClfIUpLaHBzOmZoRXJua3k2MH5BUlp7IVlYUTFQbFJUKTE2cmdNK31LKDVANlN5eFY1XXhUVXxESnE+Ry9iaWpSIlMjY2gx'@;
put 'bnJ5M1pUKntQIzA/L307Jm1qKD1zfGY7cndpW0wjOUF6MHgxWmI+Oypzfml5LDxoUktFT0BjNz9fTSNJTCU6e2R1eV1jdGxEPnhLbGNXZUoyVW9CNWBVTVdZM1JWOlJfLnFsTFBGfiVkcS9DNVgxTmJXO0FeRGZKMUlFbHc4YUxaYDA7TSRHVnk/PjVBP3xRPkU/RSZ6ZDspJC5XRCM1Pjk0UFE0'@;
put 'WitRRGpkcktxPGtnVl47fF4qPWkjd2FbQGplJTxqMUBnJnt1czcoQW94Ri5IUVRtY3twO3BqMzRjWUghKShlUit5cXJ0SjBbWmplVmZzYyU0TiUhKDgjSUduQ25tVzZ3KXxqZXQual9WZlhyV2lDS0wweEAwfGFEbX4yMlh0UUxjIiFBVDo2SVNTXV5TdmtZRUI2IW1SU3x4b3YleUxZPFdaaEtN'@;
put 'WzZwc2F4WyZkKDJnMHImNTdUNjxydWAlK08kQHdgRSxYRCNldERyW01RdDVoO3dzI084RX4mUDVVe1dqaEdtOjtIMCJkIyxOQ1hzPkZ3ejsxZms5RCp5XmFTUWpFNFIjPTI+LyVKOm8+fTQmXmJsYXpLc2xDWjxVYDliaVNtP3tCeE5ELkFFUDIoW141WDBQVDMwdGwmOUIzYGtgblo9RHRsd2ht'@;
put 'NXAyeXVVMkU2NVdoNiQvWShhISkqX3g4WEQoRmpEYlFPO29AfW9BWm8raSE0aStsKStJUjZxL2p2OTpCT3RaI080SCY7S3Y6Pjw+TkZ5Nlh9P0xqIywhcXAqPE15VWAjIX5CJWZVa3xYT0pAJSlPTV1ycFAuYTFZeDImRTdZST9FM1JCWm83fVR0aCVnRzlRREpmK2VOQl49fm8hT2VneUdkQSgr'@;
put 'VXdgWjkvR0xWYkZgVWNWSSRsSihkUDxEZFk0RnxjPHdtVk9XR1gwNTRJLCQwVWFmbXgrSCt9WUx3NTY/WVt7cnBCOChDVmhpTWN+LjpqQmpMWCo0ZkYiQGV0P3FeYD5XbF9Hb15Ma0wmQ11FenNsYDJeNnYxaD0rYHQ8JHNCYGx9XylYRTdfIjIyfFd+PkpifFVXQFQ2VyZ1bmg3JDE9bF44XWpS'@;
put 'eS9IKFFTLCplNytXSnZuQjtpVmdPNTV7aGBvK1YuTnZyaltXfGNzd1c8UTokXjM7T0VCUXNfZ09Ldk1wN04qQ3NYMFVbfWY+cXYlPSMzRlJvWExxMitwZWpHQykpMWxlNntMfitTKSJDYlY+TmszbV8vNyxLOzFPKkRDQ3hKIjp+el1rNW9CWFlsZGBXW3hGZTciNyVyUy46N3UmVS84LHEueUw4'@;
put 'QVJ1b3R1Z2lPW1A3NGw/djBZLiM/Ji4xdGE2PUpRO0w+aXFsd2pqbFo9cF06IyQvfWE0Pj9FSjZTfHskU356TGhpTD9oTmM/cyI3flB6Sj9QfWltQ09yeGEuYHUvdCklTTQ1cnt4OGRKZU9VdntbOzhALjFnfG9FLm0ycjY2NUBhV0JEfH1VVH1ET0VjbSJSSS9lKmtZbiFHV0R2IW9qP05TMkU5'@;
put 'I3hdalE8PXRyPnleYU5wP0daLD0scTB8RGp3Olg9RWx0OzZBQkNEeHs/K30ueGMpPDg6Y3ZwJiRIKW9eLiw2XkRIb297fmQ2TmFvdTYhLHVvZ1tqJFtpOUVybTZaXUVnSzNHU0V7VnhmYzAvQHVna3RzezEzYHVFczVATU1xKkFFbVMjJVlxQjc6V2dFWDIhazdNKWtpNzlhQFJteHhAS2oyfjJE'@;
put 'Z29IbSw7cyhXbkV3Vmh6bXRDYS5qfEl4US5TJVg9Q242UVtgPGg2TltiRnNEQTpgc21TcElnMW5Cb0Bed1d4Nm9aeWVuP3c8ZSN7YU8+ImtlPCtReGdKISVYJFc4bWJCQ0Qla0JVTFRqSG97Q0JEZkErI3Q+JFZpaGFLZXVifUlRXSJvWTJUWFEpZDI3PFR2bmBBQ2UkQUxUU2VOJShMZD8wK1U8'@;
put 'Z0RXRSswRHh2OlBZPDopI3QrWXhmdXZlPH50Z2xmV2pIfT9bTnReanU7cjM1WFp2fCpILEVwVSV3M0hGVl9iUU14eEw+IUZ6Kj45S09mVXhqLk1Gd3AvNEBBVD5ySWwsIyNrZ088IT9uQnBYLihYSmIySUlQcUJ+aHlVR3UjbDUmaWEvcVM5WFdRZkxlODgxdXVrYyxFOEdAJWB4JXlYR0h5b1hl'@;
put 'bFFePFVucldQeWp3UENEKGxfL3h3JjRsLjRRUDxfays4aTVER34mSDxoTHZ6JHI6MmFafTtDYVRFbEUqdjV0ezp6SmQlUyRkfFlVJDhLTUJ+TVV2bFB8a0MpRj1MXTZXSF1nVE5Ra18yOm81RFN4NDx+blJlQGQ3JT88T0p1dnxCIUope3s8MH4jQiFANk52dncuOmtnd25bYVtTMy92bSwhYWdu'@;
put 'NSpweGorMFM4dz4oPGZwZ2pCeFtqVmV2ajJPKHJUSl4+cS5fcEZxRVheKEI7V25ONUkhVnRIcD1yZzI9TX5BQzt0XyQoWVBoR3M8ditjKUgjZ05Pey5FcilEIUt0fF8sL1RhSnkyT3s+R3UzKG56YFNqQVB7M0dAfml6aDpgYVEmJWBbOm1rZ0pQMS83SnJDaTxYL3dQdlteIVRwOVlzeXcudSIl'@;
put 'ailEVldbKGdtW0RWdEkkQnd9VyN2VUJWd2I8VSNGIUBHTGdMb2hncTUoe0ZJLkpVVD5YNHUsMUVQNyVkezVRYU05bno1eTgkeSssZDdDfXZwaEkheGpRU3VqInI/Sms7bS9xbypMIVZ+JVpgRko/cTk9M1k/YUcsTEs3MkZ9XlF4Q1RZMWw+clZBU1BrXX1vdmlmJDE0d3ZuLlNAU2dWYnldZypq'@;
put 'Z2xVQTpBYFdpRTdnOzswTUtLJGBGLkszaUx4Wmk4bVgpKUg3ZXlANTVea1duTkI5LHIsMVZQXlRfVnNgY2EjU1cxMHY0PEZIVWc6Wit7UThnKn5BSWtUJDhYZSxEe2pBYkN1V0BWJnRjWHFwYVQ1OHR8OklOTXVIUiR8WUhQSThbalomOiJUJCE5R0FWJklDb0lzcG0uNC9UUFh4R0x3WkJwXW0v'@;
put 'd01qMFRhcig9N3tPfV4hTDg+cV9sMTZ5SD9+N04+X3Q2X2kvOSNydzgjPm4sXVZyRSRLJmk2Y0RyUFh6KE5lOzsmMTJZIj1pSjRTeHFNQjhEOUBeZCN2Yzd+YCtQJSgvaXhGYmBHMCl5V1A4Xkl8LDIxMSFYI1M+WU9Ld1FvVl40c08jO3xJPWpRe0U5TEJxXSNbTnVBTVRgNkZZKFloUzxkW2cj'@;
put 'SSQ5YCt4dmg4MixKNW5lMmpkaSo0YjR1T3N6NmZNVDlYbjRbKU0+U3lMJnN1aCRvKHFQREYxSE1IdE4jVzF1dDBXdWVtSkJMMX4rNVl2UWFbLFksMzg7UlNAfU5PZGVDV3UoK0UsX2k7QzdEOXQ3SFtPO1FQMj19fTwyU1dNe212YX1FYV9jX0U2Z3IoVkYvZzl+YXlFdmY2cH0wRCYwQCVfUkhx'@;
put 'JkYsIUB7eSZdL3ZsbCE8SEtSNVhgemY8QUhaK2wwOzJLOTdyMCNfLHtAYFdUbUNvaig6UXRNWFJAcVpnbW93P04wMEBuRS90KFZGcSQyTGZgJWdwPj9ZXjFbWnEqWVhKVzkkXk5jJiVYdltseT1sUCEiJTcvPzNULlBgWXQ7dGY1dSYsPz0/dUN8ZlNjVFV7byFeJEFObXxIMFMsZndRUUE2USxt'@;
put 'M2hCfUNTKyhQNjN9P0N6JSNaclReYCxXTSRUWlUjfXVnSi5VYURpZ01ScEdTezBLYT1TTWYxMzxMdU4meXoqcCtITnFxJF9bekg1KCw4RHEjfkA+dDoxckIlLDBVRDVgfWpiSzteeURPbUxLZTxgSV5zMXVXOlkuNk8+ZzcvW0BLUSEqamd9XWlLIW5nTnQzMmxfNncmenVvXWRZOHxefCQycl9L'@;
put 'Tnx8S049QlVJTkl3cm9rcVtrYytsSTgjX2NXVkVxSyReZG0zTGl7SS85VSsvOXVrS345SHQqRDN4YmVEcyRmQT4qPTU4eTRMWUI/OlE8Wm5GL31HV3czc3UydT4mRDN8YFJaWk5mbGJCRV45ZFZhNyJYZGF7PnZTaSFnQjY8fShdOXozY1JNPmw0eCZgSipySypjO1BMPVV3YTBuayNPejFmOFFv'@;
put 'NFMxQDNMd0F4QyRbR2doXmtnVjxbb15kLnBnaGE1TVhHaVkqZHYqUGtrQ10mcmZgQkx6NTJIdHtBQkt5aHxoS2BiTDldKzVPWys0RC9yaSskRCh1W0NOIT07MVRON0lRblZOVkI9dFJKUjhwWXc3Ql59UVolZHk1M2ZGbVUzNSx0WlltMGRRN108a0BoT1pYRTlFaiNEVGlmUzoxNCpoRUpnRXJm'@;
put 'eW85KCE3NSU5a0J+W0Vdbio+cjw5XmJ3YHYhPjdNTFAkVUk5P3IxLDdmcjNTa2MjdU9bJS5BNXQkV1dQZ3ZjQXZkfWI8USlkYmR4UXV4cHwiYkwrWkVpcEc4dkopMipwIil8YUhIIkQpNiE9R29CaCxIKT1BaSMjemFLRF5XJjFLL2AxYlY1SWkjN1lsOzIoYXJmdCY+TUwyX34vbXMrbjYpbDkq'@;
put 'P08lOUprSnh9LnVwfXVXTkBdKVspVFU9QV1jeiNUWTNuJFFeblouczh6UDo1UkwuSVlwWVE0ejIwYWQ+K2ZTcWtoTCozI3E5dmEyXkp8K0FNLl18RkBDa3VBRnEsNi8wP2hIKm4iS1JfdlE6QDw5QTtMTCYhPU58TkI+anZGRGQ0fVNKWTh7SGkzV242KDlyMUZHMzlrO2Z9dzRgY2FFLEF8TClN'@;
put 'TCtUdkByfDNha1NIKFR5TGErQkRIMjZpfHwrOkF1LiVGTS8va3I9b35GIVtjSGx2XV51TUA7dUpHVHduRE9LamZaWVBjOnApcyFkPTh9PTlfIV08XjtHYXh7dDdkbSQjLGkpXjpDKXBUW35VOj86M19+TGQxa3FkPlhMdT1wKF1JPn0jZE5jKFl6ZF1GIXYuPEM7YEZBe1M2dm5Va1IvZTIzM1lI'@;
put 'UFtvUkAiUGU+ezFRYzldK1BJUnFFUUYwQ318VTJ5blN7aS5JKDZHS252VWc6Zi5ofEFSU0tOJHVidnR0XSttWWpXTiI1SEZQdWZXRUFnMjQ/P0YrSTFSfmdOUnNSSj8pfG5ffFEzX1dfMXEjMHYxJGl0MmpCIUlDIitsRWtjX29MWV8oKXJId2xASEFIK2U1bixnaFspa34uTUBGYDYyZTVqMy5f'@;
put 'fmQ0VDd9S34ud15HcTpiUGwpS1J3L3owM1ZmYC5jbCxoT3g4RyRmKnsxYWRlP2tjMX0zfnQvXUZPbnliWyQvfUxuYXtpTj4rfmpzZ1kjTmcrN1RZKERka3gyY2pMNk8oKHFfMEZfMHRmR2g0RSZ6JEVlSHoqbEAlQnVLVClBYilrQ0skKVM3Sl5KZkQzM3VzRSlxfUFHe1JpYG9pcl9HQjVvdkpx'@;
put 'YG82TjsqKEMhR3FlckAwVVppPk1+OFNAXi8wTVJQbVtoV0dzOUZ1VURKLHpRZXVmZDZUeWxrSThuL2poI3B2YCpMMkxLZ0BpLmB1SzpWJXs8Q1R2JippLkVYSE5ea0kzX298fX5mfWddTjZVO35Xe1o4NiY2UTxeRSYzaSEvOnghL3FyOl0wVC89T0Y9QSZrYmNGNylFQ2V2fXo8YWlJYUJoa2tU'@;
put 'PEpMUHFKdXxIcWA3KVZFTVUhR15gbThuL1dFTXIsIig6QyMkeTFzODVxdEBxOjAyeHhQOlpzPExuLjArOTFoY0x2OklhZmQvPDZoVWdIb1RtVWBIdkk3VkF6N2JKKGZOWV0jU0EwMSt+QSpdZjZia15QIXBKdFowTiVdP1lRNyV1eDNiUDh4JU5aX3JaKSxgNGg+QGA0Wyk7SXJLVUI6R1RmenQk'@;
put 'b34+WyZmJGFtIms4fmh0N3xdP0VSfGhHQUNBdTt3aT9LVz4xNCQwSjxHP1NOSUdpJilna2ptMipmVzM1LG40JStJLH5eV3lUPmMhKHw2K15BK3UpMCRWL25fcVliWy9DUSVgO1p5XkY4ay4pekYlcjhyMTlufSYlaTVlIip7MSxfcHg1dzEqcHRUIXA7WEN0WXRhZy9wTz5sYWF+eWs9ZlRKPF5F'@;
put 'cWMkSExWe0VoXjZpc1U2K01ATzlgT21gW0hsT25fWFo2OyVoWn1FNUVbT0ByXlUucHReWGg7JnBgcX4vdnZxXT4wSz9GKzEyY3NiNCsldjQ6aUIpNipXQH05b3xEXX0oY1tITnA7NXlwZSRCbTx8K1ZjaCRqVmZAVDwvL15XKlRWV3opIWFRNmQ1cVo2Pnw6cVE3VlNCNHY0Yjg/X0tgRiU0KWV+'@;
put 'Ti80ZksvSlRvYT5qQGxobk8layFSSFkxMTYhdUVwJGcoZigwJUFYIlk9ckRzV3BAI2JNdzxVcG1Ael5HMiFYMGVbRF94T1J2Znp+bTpnY2UzWFRuKV9tTTY7InAvMWtOYD03UkZ9JmEqZT82QnVzXXlQd0FCWSZpRmpFWDQubjwuQ1UqWlI4KmJ0SmhZckhicExDT1JTUUgkPnJOPDtIdlB+Rmdx'@;
put 'S0JdMzhCL0RCRjpSfj0yR1d2KVpuJmQ1ajl9Pi9PWlFlW2JTK3ZBR3lLbCNfekxpO1BWOytJXnpQUmQuMVtWYnpmNWJlPDBGfj9US3NzLkBuT0wvSDd5NU94cHwwdXwoaCpEP0dfdjZUJFBOZ1Q1dFReaj8rUiI/ZjMjRC5vR3d7OjMsK2N3L0E2LiNZaGRCW2lYelAxUWw1S2VzNENTMHdjKWZZ'@;
put 'SXU9Sl10OEp1NzB+aShfSHlBZFc1cG87ZjN1Im8qMkQ7IjtnaFt0ayhOamIjbXFJV3wkYUxNNF42YWdlNGE4VDFfIWdqV2JgT0NvcG5taDErcXZ7OUE3VE9ETVV4M2B2Wn5JemJoRUF2PjdQayQ0eVRCaW9SJEhWQ3dJPX4obyMoQkl+cFBnOiQ9ZV8jXUlvIW8sYE1QPmYmdXU1MkNFdGYsJm1M'@;
put 'LGt5I0gpYzx8KHs6TkNpSm81Ti8rXWtFfixWaUh0XmVVVF5dQjRjQnp6SjR1QkV9Jn0vZzwwYXFvRixkYWRjMllscy4rKTtAfkxzbihuI0xWVGYxJHtedXxmVllMUG11fGovVDVaeG5hOD9DRG8wPTkxTVM3cnE9fFt0MTkwUSQyZ1tTajZWeysjX0F6WzspYXZETWk8N2ltcT5INW1BViVIOmF5'@;
put 'I0QlMTZkTXh1RUdkNzt+VyZ6L0UiI2tSMlcrNW47a0dsTChwJi43cndAJTZYXj5zbDRvZW4zfV1NcnNoPURZT1pMYDF2VzN1fk1HWUBVbXkzYEE5JHk4YUMvaitsPVRTdyV6aW4vRShMc0NOdTBQUD83XWooSkl6JHlYdyZCfSReKlYoYTBvWFtVXVUhMkxNTGJaL1M+RVJXZDROKDUwSWtaUWh1'@;
put 'Kj40bGE7WDpkUHNaWlFhIUUuXUsoV2Nacll4fUhzRUBwSGAzQmxvP3NSUmVpalA3PHRjLltjPyUiYF5lZ1F0N2lwNlhWWFcoQF8iZlVeIWA/WUloKVU0WzVLT0E2ejpGblJ0IXF2fnJCIWxRY1EuVy5GMERQXjFId1NyJEUpV1ZkPHIyOil6NmxvQ218XSJlMm9WXitNNGQkcU57QD9TYixgU1Ix'@;
put 'XTRsNElabEBVcSplRzBfcCJ6bmFZSnBWaXZsZHxZaXpLIzF8fEleQDJ1TztwZWdDLG0jVytqL3pLaixPSFhQPW4+YCNyayF9NDc/eXkmeyJzQG9WaTlhd1hiJigmQj0pRXk0cV9BYWc+WERVOzJeUlJ3YittNGR5OGYoZlg5Uzl6IS4qL25MS0VAYmBeNm92NU9zTlg6VnNtWHVpKF1vRDpZSm52'@;
put 'WkEpbVl0N3BXayp3ImxrdFd4Ll9TcUB6Nls8K2IhMzJOd1lUOWBrQ2lBXjA8a1teLG1mTTFYe2pWdm55cz1xZ3pHKyJbbCt7Yk5aNHk8PEJhcENLfX0jNEdeNyYudVk0M2Neajo9VzxGSUJqeShhZVJgQj9VdCkxcmIwQCxlVSpHJlRjIm17fnVyVHxDXjl9Q2Q9P3dRcnFyUiMlWVQ4c1IwdEJ3'@;
put 'c3skfTFZTUt1LnE9OD5NUSQhMSMsKTxlQSpEVl95ZDFvMHUrTEE7cExxZFFOMUhAWzBkcWIiaD1Rc2shJSM3dmVtQEAjPH55SUx6V25CQ2wqcGlkKyhwW3NAIm43Uy9FTiF3fVkkSSpWO2l7Oj1mcHQ/emtIWHBOTiUheWZTWXFEVmtTI3BvIU0+JlNBcyEpMGZvZkdIXnJSW3kud0tSaVlHPnpz'@;
put 'WGBVOkwoOkMrTmpRXmRTZHwhfTVBSjk4S1UkQWV6ZEJbT2goKllSU2NFRThZNUZSRDlFeD4pR0s5R2pDOjRFJHVgSCpman02NGgqSTBjMGUuInpzUFt6Mjd7P3V7KmNFIyt0e31JOT0rLF5weCtURHx4UHNjZXc3Lk9FPj1DX2RxZSQic2koW2hSdjR1RSlfJX4ub1JNeHZKZWlWY2M3W2lST30q'@;
put 'TmlTXypVR0U4PURnYUdKcHJOc1lGQ316eWF2czIwRCxBdlNVMnRBblhrI3U2NSozM1E4Z0VCTDVISz9IcXF4I0pRRUpJNz1xQHcuKU5Aey8+RCokN19uZFd+bXdlIXBUTl04eyJOelcxeyx0LjxwVjpIPCY1ZW9FXkYoYk9FK3opZ281MiFpVW9vIWVLfnsqalJHZCsmRHtLay5+dlRDM3JwZWhb'@;
put 'ezRJdTtndiYsZ09dPFZmbDh2NHxNOEZVXXlYUSkuY2tBOD8qM0IhQktKd0hsc3hbX2I6TSR0Oz8uJFlGTHd4QEA1eH1veFghcmFIe0FUS1csVnYmXWxNP1deYVJ4UWBtLjBRKXc9YUBNPTh9YmBdVVVuNSFabTNLNjdGYj8zY34iUVg7Km89RiFLP0lBQE5eZyRXIyg0TzhZdzUsYStNOCRgW2xl'@;
put 'TXh9UzM5d3JoYishKXN4aE0rQDZRMjssSV5gQ1VhZldpWFJwRmV5Tnc0ZHtOSFRyTH5XV09kXmlULFVhXUhyNGlRd1AyVTt3MCNXIzVweVhgPDRwYGFFIyg0fD1HZksrMVN8SCpCTUlzKmVJfkM2T0FAbDV1JnY6KDFNaTpyaEsyVWsmI1lxemljYnBDJlJqLFFsaj1dZGZFXX06THw2UEx7VltA'@;
put 'Ry5Be11RRnJlTSE3cmFqaGN8RiojS0ZjTD00dVkrSHdTWVB0fSNxbTZaNmUwRCFhZGVCQlt1fXlvTHtTJTk6T1lsKF9wJD9UOFFjJCxLNzR0QE1iOD41ZV4+O0QwO0dPTnxOanEmayhhU3MjOkVAPDR2cnllMm9MOE1mNlNoWWRoSSI8IT1tIThrdDQxMl8wMkc3IlpaNmY3ZXk/M3tdb1ksJG9t'@;
put 'RnwzMWY0OCZCRkVZNjhNcUJoY111PyI/SFchQExFQjI7fEkvclBLei5De1olUGt+YnV5OHVJVktIKDlPKGF4eypvUnl+WD9+QC5SIT1VV3wlaj0rfSMqNjp3MDgjV2pNLDhONnxZbnM9UTk0Zi8/cjx2fklAeTxAMDMpSTR9MEddaS5MQyluNDExK1VFSEh0aCJiejkoL0kuV1dJISNrUUApPnRm'@;
put 'aC97Oko5TiEzc3pkP1JydHpjelJaVmtoZExKImM7em90PzNhPzh3JExBYi83eXVoMUVYdGNyI0Z3PHt5LChXZDVQPWJ6P2hlQFNgbSN4czFAZldPfm49YDtDcDZOQFlJM1YqN1Rbe3xWdX1LUzM1LFQ4I349OjRsTFd1JVIyN1ZTe3YwTmBoWFdtIkxUQy5LNyFxY3IwcDBxMHF4Knx0UWw6ckxo'@;
put 'Pkt+YT1tMURqIVRqP1BZZ3o0fTV7Szx6S1hDRWg6MV1tTDhXU0FkRT1YWCRWaVQlIzI8O0lURlBwbEdAKThqIkkwSmVCTHloOEAqU0YhPEg6N2B0MFFDSVJ8RX1sXUZ4VExsVWhfbCJDUjJUeVklSnMjUGwwQSV3PFt7JTYjW34oa1hFZzdNIVF4cmJdYys9OT9hbXw5TTksfkJkUDpZJUxmNCVo'@;
put 'QF8oN2dfT3JQUTpyIzZsUWM9XjhQM1lTN0BrcU80UEUrdXg0RmtxRXt0fXxyYiR2L0g/RHghNWhdSSQvU1dURDNYQCV7IywyOVs6aHgzczlJZWw/WGw6U1gwZ0lEQiNjU0FVL1klaTd4aS8oL3xpIkRne3w0ZyVsXStNK3pWYGdbcUtWfjBVQj57V0ZzKTgkOFJ9fSIudmhpPUU0ZH4qb0BGfGVD'@;
put 'ZDVqb0lpNk0xfExdbmluO3twfDx6JlRPdTVta05WM0AqX09+aWRzKXMxSlVtbzwlRml2WTlfcHN6RSM9SUJTPHl1ZSZdVUIyRVlJQUllM3NpWlVINEc/XnE0aU90e0RkLiJBM2soejR4XV0pIjwkdD5DYVZpWEFCVnxXejk1YTh9czRLdDp2ZWghWlQ/S2RTZy5MIVBfMSpSTFErJklIZElJSDA8'@;
put 'WmQpP1FxfVJFcld0OmQ/M3JnN04xMXl8YiRjek4qUVRvQDxvQEcxPltCJjJ6Sj1oMW9UIXBwRWtiMHRKZWosNXt8OEZoPD9uPjhJXzpMPiJgSHl1Im9oTj9eT3NSbE1eQl0/L0RKPSxhJDtgN3loYGxyezUob2ZRP109fGljU0UiSG4+QmUydjFFPXQlfVZxclF6XWtUdkxEMC5ncn1bbVNIaEo/'@;
put 'WXdoUWpdRXN8RzRQPFtedCteXTVHY3A2TWB3Ij1rfCs0c2EwdkhAXk1wLktkZzlCRCMpYmdTZ2orPXtvd35OSjB+TnQuYT1jLHxRMk0ufTpjeS8/YzF3UWI5NVU+dnkzPCsmVGYja0xRQGYiQ2M9Mm4mdVckNF9tWiJPUm5EfCMqTzw6KW9sdX4lRWEhYGZdS1FoTW9QMW1zSXBEaEZrfnhCOk1m'@;
put 'PXhVbXhHZkt2ZXptNVgiNDwoOVlrPWVFSGouKSJCIj40W31AbE55UnllPmlEKTlLciZRNWMoJjhLTzZhLHtpYmQqZ3ZnfVtUdEZYPnUjNWA2NHh7OlMreG41b3BvZEBnOV1LZHk8LCw9NlNIIkohVkd5bGgzISJZdyhFUUV5KzpEYitzMWBPYkc6ImIkLFZkZTJsTFJWPH1EMTNleXQrU1pqfG17'@;
put 'JWElbysmMCQvcGcucyRjPnZJXjZpIX1QT3ZlWlsyO3VlIW5TMVojdFoxNzRiZlJOYi5tS11DLFU0e2RmSl8jWWNSISVRTnhdeGN0R25TPENzVDV8dn1NY2g8WTpDJFFgUTg0Jjo6XU4xNH5weChHfiVIK2RwTT05ez0zajtYeVFpPnhbYntHfmtrS21AYiVMNWdAL2IqSk9gIiZ7VWVDQSs+P140'@;
put 'NFNJelltXzIjWCN9R115cF5hYzpDKy88Y1ckQE08Xzx9NUFDVX4pSXk+XmdhNlEkNGtxWUlobChITHhBOyRoJkI8MkJ+ZyFhVyl0PXVvQTFBcVl3Pi8lXWkmYWckXkMuL2daR3ssciQuMkpVOFlhTW1DYTsqT3lmckdlcl49akU8IVN7dXgsVFM7SlJ0ZWpmeVRSaDslZktjfDh4IkpqWV1YMW5i'@;
put 'dT9JZTU3TC9uenl1XT5NZylpenFeQStFO00rTks9cEY5QngxJWg7XkU7YU5NZjEqMl5SWXFRcX1tem07WnQ2V11IfXNfKEpARkU6XmVYdTdqMnBANUhPR1gzVyZXQmBYUyR8OFcmW1JIL0NFPDV0WVF3SlQ2Qk1PRCxfflIyUCJOITIuQWZOSmBZMT8oVjE+PmlaUzBEVUNCbmV1V08/U1tlbS8w'@;
put 'WHxaUXJLWDJ+a31SI1RBeGEoTVRxMjQ9ZExdR1s8QixUOlNSUSVtX0l2c208PGxeMj1nUUtHU0tQZXVfOXtAVHBqZnI3N1hdUVpvV1NARW90Mmh8JChSYkVObFo1K3E+aWcjZjN4dyY/bkRMbjRheVBCfiZjMkomd3lAX1VBKGcpOlchZGZAUz9dTTQkeWNZWEhlWmJyQks7KkglT3Vpb1dxcUdN'@;
put 'SEolYF1KaFRKOXpuNVZAZkYkQFcreD1VZ3pramFxQjFEQmltKUsqZmoobTRpSnQiT0JHPEt7Ql13XUBjQ0AofmIwYnolbWxhJWkxOEt7PipeXV9jP0tmbiNyVEYpVCY6NyYybFU2aFQjWUNwQmdfLEI8U1R1T0EiXTtbPFduLi9jSzB6eCkoUmpbNFVtPyw+N3kuKWIwNSJXcjI7cEwyXkJ5OUZC'@;
put 'M3orTWE9Onlxb3JVdU1eNlpSTjRhQm91PWkzR1RaO3gmL1pyZFJbQXhlfXs8VjdDXj1hSzVhamIqekN9K3E0NDtEKG5fPD9AR2B0ZUQ+UiYvR2l4USlyRERUfHtKQmxobXJRPGF2YS5lIXF3VCx+KmlPQi9jUyN1YSV4Y3VmX2xzb3E3MEQ0TlQ1KElEczBicXA5NjVlMWtBIWJgZ1N1RWMyS2B2'@;
put 'aVcwbk5WVyYyMlYqK3RKQXRNdE0wbyIvfTc/V2JVfTtnWzNLZlVWb2ovPU9CP1dlKD11TzsuK3FKUnUrRzBqeH5sTW84b0NeemJuQE4vR3oyM0ZNPVBAflRrMFVockx4eyRdfVV7JlcpfiY1VH1XPDV4e0xuQGpkPTJVKiJQe1EmR2RbLD5CRXdIR2w1VT1HallIL0xUajpGNG5sXkhifW0xPils'@;
put 'PCM0fElrY152YmZkdnoiPkZIKHwvZCRFSE5rfX40In1Nb1FOXVNMPD5IaFVwVE0oX3NQIUErQ2N8a19GcVVIKXB7SWE+bXMiXUdUa0VaTzBDOSY9PSFxWzg2a2w8NylbIndRfkFVNFZ8cXFdcHVgdyxtOlM6S2E2Lig+XVJqak4xLjpbXy9iK0ZoalR7NS57RHRNST5PUDFhQy9qKnRdbjF6Z04s'@;
put 'YnU/RkY2Wm1EUUJYL2BiUXsrKFdYMjdVX1tLbmYmWnAyeEFGfUEjI1Y9P2RCYkwsR3FnU3FYSU5mKHklclEpblpYW0IoJm5xRjxgI019KCFScyVjTihTdGpve2s3aXJWSX49TjhuVXIvRTI/JDo8JjthVmIzeFJvNDN3fTx5Nj1wY34iSS8wM3BwTmFCcVdgYTg8K006bXQ3V3M/XWoreipKQGx6'@;
put 'UUExX0A6OXd6QklwUUkmS3JVXT5FISZ5VDNVR3RCZ0A0eFMqK190WkhKXX1aN2A4MDJfW0R8RSk8VD8/ejxwVXR0PGhXfF4paHMqZDxTQzJFeitGNGZsZzx+YFF+PD8mNFgxdnxbM1JhWjN5cTw/OS5kQ1Q/fkpMcV5tODpDVTlRSXg1UT9+XURJTV91JnY+SkRsTGNaNVYkYlE7SWlta0VZeGIv'@;
put 'dGU0aSUqeShgXVAwOEpQI3BIZi87JXJRLHYhJkpjKHMxIkskTmope0FSTlYmeHErNnhOeV4jKm8yJXtna2FzSWVedVIheXR4aTQxK35iSzxObTo0XUEwKmJObCRSSlRbWnsmXVZPIX5KRn5FVSVrejJfdzd2MyR2K0hoO1IhbW5yTClRTmdxTlJgKnlSOH5RXkRMYWxLOXQydFVWViFHKEUsLyQ0'@;
put 'WkRDRV5PfWV1Xl11N01YTSVeMH1TOXw3KUAjI0BARV03XjhmeCVJWGxBOyUsN0V6U2ZCJUhTMiY0SS4sfGxjVkBvQ0s/LGhxTz89NU13OkZOUFZKXkQ+LzglRTZ0O0BxbDtDb2RFXXYyfWZ2QGVrcSxEXWFdVUQkLFlUezJpY3RpI2opV1pJckdyQGV3fFYxVzY3X2VAb3Z2cjo8aFZxQnddfmNw'@;
put 'XTgzUUEjUEdFaV0xaiZmQn5wTmksMCYvRHkuO14rYzcpRVBCaWJFO1BqdVZGNX1TLD02bzo3K2RtNWpgcmsxIypBNSZodDt7WUhrbDoqP3BgV1o6Kj5iW25SKm9CWE1FJH5fOWAqeCFuZFp2VUZhZnNUdTJhaUxCS2Qob1ZdYFp0X08zVz07eD48NSkobnhPKmRIdVl2dypSMjBpPjZObnQ5NH4i'@;
put 'SkV+O0VSTU5zW0A8a19aRDQuWiNwKzNuISEkel5NLnl6b3UwfVdlRjsqRTREV3UiODQhMT4qSWopaXlDbUdtXVFrMWRkaVhKfTdXSkIxPyhgSj9yO1ZnPEdRfiU3VThqSXdvUUwlNip1ZituZzkocj0rRTc+XnJDeUlCNyh3e1UsYVlndGh4Y3J3bmQjWDRULGRVQVc3eHB6THcsIz84akdDRk9l'@;
put 'ei9ncjpGLyJPIyYhK3pOWEtudFhmIVI2cCQhfTFQOXR3JD53WE5HdmRSTD0hcnx0QS8mTUd0MithfX0oNjgkQ1d8fCJIJHFCQ0BtTikldH1NQFtaInxtPj85JExOXnxNe05WRVlXdiRrQ31HYjpXdm5lPDlYKzhXdW11VSN1KSJrPEVZTDNHN1V6ZT1Pc25pN0csMDt9JThQMz0vQT0sTCwpaVFB'@;
put 'KlRwImVtaXQsPl0hckVSVDcrJjxfe00qKDMxRGY/P1VyLEx2fHU3SUV1VHp4Y1NYJXR+bWQoSll7LDVldkxBa1g+OS5laDd7MXp1bVtgYnlAVFMraXZySVEvLEc4UnRHeGEzJTY+S0AxU2BAVldFejZeMDIhMDQ4clA9dWYxPTZuaHRnPFk6dWRPNU1kOGVNOGEpK0QmYEZkbFtzWk9lSHt4XU5y'@;
put 'NXtNKEJbQjtYYk51bkgpbVgyIlgqLz4+fihfNyosIVMqMz1iNlNIWGB8P2lVUlZ5WGdaTiVAa0B9Iyt7Ml9QWkQoM2pEbV9val41QDsoUUwkcChTSC9DKURwRSpGc3F0eXlAXn0hPyQlN3wlKj4+bTslJnNSfUUod2IxNGRQZEBuQjgoSmFRZT1HNXQ2aH1QNkY0PnclRnA1PyRFMTg4NHxEXmw8'@;
put 'NHxYR35ULj18RTVJNFM+dVo1fiR0JnN9L0pHdV0ydXNmamNoZWYyKGY2TWwsdip3Ln13djZ8I2MoKy5zL3lfdi9BXXFqQjp1TX1+cVc+N15Bb305djxvQnBZamJ2bVhyP1BMKGgxMiQ9RlRDfF1AQXFaLnozJS9XUUN1VElrRD99bj4mYjJDZWJ2Lnc7aipVRn5AfWp4MXVEeC5CX0J3MEUzK2s9'@;
put 'ZGUsI3gkbVBvOnBbWVlCJSs1ajlbezEqRyE6RnNWYVdGYzVuTCxFT09zTHtdfF5UK28kSVc8Pyp7Ll1xUXUwRSkkbSpfPUxjQzRFdyFsW3dLKyJPXS9gdjoqPD1XR0opJC95bEAmeldxOkJyUmRAVE9uTjs9fkUyS19eOWglO08mNTZEJThEJF5LNlRTMlBwe3s9L1goPHtrRXg8NFY8ZSUyMSZT'@;
put 'Kj1fdGphJC81I3htXVtdeTtedF0+Pn4vKzYrK0tTYCooQzkwRWNfRDNNNXFuZk01XnhMaC4pOlkye1A0ZntRdGNBfUpYNU5UQExCbDxGam1eRjJUJlJLZ3d+ZilzR0thXyFjZFZQIl0ldyMqQlJaI1tvQiQhKlhvaX1SSClnfCI1I085UjN+Vz99UUJfOmBKYH1sWWFsPzhFOUJGKmgxZjwvWX02'@;
put 'Mz9IZ2I3dy9wazE1XjVSJkxedCU1eXJSM3ZjPEI3S0kvPzg7NUFsZlplJTQ4cXNjMEZWKyElPXc8ODI5Vm5oekZSelRMLm4oR3w0Mzp0fEEvcEpXKztELnVeYHZTRUprUWc9e29KaE1GLmNyXjZ5Xm0+IXs3W1VXNyI0NFkze304en46LnlpMntVdV9GSEgrR3deM205WUlQQUd8LnZxcDVMLyRs'@;
put 'ei5PJjEleERNVX5ZK2o1YFJHT0UuLzZERWd2e09bQz1DYTMheHRqYEB9OT9LZl9DWn1TTiIvVCNIM2d9PlhAdGRQeE5hVWl0NjNCdXsqeG9xLDowcUdSPlAkL096M11eb2JVR3U+Z0FZQis8cG9fZ2xmJWRYTGN7PTdQbmU9SjVhYSxfVmtqe3FjSiYiWFMybSFBZl9ofVNnWSMsUm1iSGhMN24+'@;
put 'ZW5ZV2pxZiEmbUQzaENAVk0kd1ElJjI0SHVfLzBwTG1idiUycV1sT0ZOOFIpfC5IXls+YTh4Uk1NbiN3YzNXZUUhLkcjKSM8TXNNU21YJHw0O3g5UzAlSm5wdFsyXjsiKH5EX15afDI5OSxjdkJHa1NbeThsbTZuQ1FEMlY/VzVULEJTZ1ZlMUp7VmxFMkJhY1FTfipmdzh3KH5tPEUpe08xXnMr'@;
put 'QSRFOTdQfEl4T0t1cytyK0NUbWJZNH4jW3FyY3t0bVVyK2YlW3ZYTyVDWGpHeUsya3FiOVosZkAzUjxiVmVKaHtpLF5+PyIocFZFY0xhNnNWWHBgYU0/PG1ZclVHJkJYenlHSTRtdz91dmQxNnlue2woSlNsUj4+UThIe3JqczhZXVMyV1hyXXV3X2pMUzNmIV1OMy4kYnJNJmBXYV0kQ1BHYCFi'@;
put 'cnhZeUQ1OCFEKSI7cylXZ0oyNDt0dFB7eiQkOGJ1UW97d1UpdXl0MT5HUjhsWm9tbmV6KyZ2TGxJTSxvPixMSzNWKlNvL10rOGB5ZHhhPyVsXkJSN28+WjJOdlE/WyxWMWtZZ3hRWUxoWDJSTU5rcjhIMm9hJFVbTF4veU1rMG9rK08ueFJJVlIiMFNaeWxgMT5LUCxFTlg6OT9PS08vVmB3Wmsp'@;
put 'PkZ3WzN1UUJsfTlXUS92TTh6ISFpakI+JE8iI2FzdHRaaTQ8UGBPZSR9PDBkb0NjN3k7Z1ouJSJrK0J+RywqUUQrZXZSRl59U2V9RVFQezF1UXEqZ2pBN3tbMHJ9dileayY+WWBoOGsjNyltSUl1XmJefH04LFBFclt4TjJNQyZvZEx3RXF9aF1PLkJpZmx+PEppYj9pKzYkV0s5eS9rV0NXdHtY'@;
put 'Y0hdfGgsKlRKR0Y4Zy5CQTxOSzNGUTgsfkErXiRJdU8rdjB7RHUuUno7YXhIcik5dHhTX2JdUUF3ZUcuSUgmYihEUmFoaCExWGpbUFVNaGJTY3lfIWQ7a0hCeWs7T0UmKXJXYGBsZ3l3bkpXS2xVKlhLITg+bHQlP2U4dl4hM05AdlR0KG12aT4lYSxuKHF9RUMrIix4T31ISHNRUH5dRTd0NSM+'@;
put 'PF14SndYPWhxM2BSSnN5TkImTyg9LFtwK0tHejVaY14rSmJkVClgKFMpWXFDUHdteVpnbEJobiFJImJHNyIoQ2BuQV1Uc2J7bipsJE95eFYjNzpIX2kwRVd1JGsmZVtGP0pie2x4cGZyel9pNnFXcjxlYTlgK3pqUEl6cjZLY2pkbC9iMmVyRCw7XUB4cC9LejIsMzQhTWxbLCVWTHVMZVNPcjZ7'@;
put 'R0NjS3FjdHt+WzhZQ0M5X0hiVGxDeCJDZ1poX1ddUy5tSlRZIVJRSEYhMUt7dk49Uz5ZST5nUyo/UDdXZi8lUF07RkNHYyQxI2lIYFczaCZobl94OzQ7JW8pbUlpcnp0dmk8bWZVZmgvdnxEMDc/OisuSmskOi9BM3BMT3AjZzx2d3JoX2lUbzc6SndNMEA5LmNwZWpvOlQ8M0wsdmErKFp5d1F8'@;
put 'SWRsPmhqVG53Uk5PLFEoOlZneXBJSVcqRCJ3NSxdaEo2ZnEka1paOk9PMTc2TlpNWmB4a1EsdDhNI2deQWZdNXU/d0RfNFd4KCg/cXhaMS5NOSguYXwmfjtsdXFaKl5YJEJ6RU55fVZxWktZOztTQSV3T1ZfRnprOGxgLDtUK2NYPjgyIzlqVzB4dTQhLHd4SUZzQUJXeUpTRE5hd3J0YSlGfGtF'@;
put 'ZE5HVT9PdXB3WmNAKUVtUGE6PkpeNH15PjZAR3J7NXgvZk9VfC5rfndSe1J8ZUVhXzBFXkc9QCp6SzdOamchczh7Kz93RXUlOld3MVl9O2crU2toNXpgOllXIVkrSVtdSEx+KTp+MCtjUk4+SGxmJnZkeGp2emNnJT1Lb1Y5Zz16InRnYSJjS1JHdSgue35OREtLdiFEWXEmVipAWlUxQHdxfCxg'@;
put 'bzIhaVd6eGZKOyZlMixndnFobTd8XkBVWjVieWVYQER0aD4hS1pESHxUX2l5OExXJXgoZ1NEe2w9T1Rlc0Q4V2c7cFgkQXBSKkpvMkl6XmxRb3VgMTl1PypCdW9ufXhleSwqKSxML0wrMmgzazFjdUJrMUovTjc+d219PWIpZChoc1Z8MDs1LD47WSFjPHY0emlxdXdRQ3pWUzJTWSg/c19XMiU8'@;
put 'MCFqT1RGZVlaMEJkTCtQWXQlQUx1cjMyWC5WZF5vR1c2UGZWXm94Wj1De1crLiglIiYmPzUkWXE2QjllY01SOzQqWSpTZE5XK347WlslcCl2Rj91MUYiTC9xb1BAXioscF9mPzxhb2RAYDFROk0+RnAva1QvdlF+Q2BGI1V3SUdCMXIxcll8YkU4bEJKZTd6RHRxMTcrSllefCFJM1UkTHxvMEpp'@;
put 'LEMsYGFaeTs/JjtPPUd9W2BHPnhAQWtrYWkpZCZdK2lfZEBib1smSDxRJCZUdEVtVFlNeS5IRmFkY2F+SWlOMTw0fiNMbHJ8ZERgeDFKfWlkcnYvIW40PnVHNVsxYHZ1PEJTPStCO1pQMS5jSlA9QFlxfFlzZks6ZFUkR3p2YVosdUdMV0IpVTVmQ08uTXA7SkxnJVVDJkdWRUxgVCNARE0kS2M+'@;
put 'UU5oWmRxOzpkTC9Pe0w5b3g9a2U1KHJxYyZBT09rYHd9VUM6WHRIPXVWV3clcUh7UjNYa3hOd2wjN3xbT05tV1B4a35tcmNkc0ZlOVZzSStkX0JCTlVaVk5Vd0M9Uk4qYiVyanB8aU4rTD53Wlt4dj82RFpwI1ljajpNdFhGb1AkQHosSzpRdm9zfUgkRm06LFlHcUtoZmNgLy5LNE8qWDw3OVFG'@;
put 'dGtFJT9bXVNAfF5Gemhwenhvb2N8Vl59XWRfXnhwKGk+L2VNMCoofkdIMns+Rm40NGpoblVKPTsoMDlSc2dvZU9pIWVBSzwhSUVRZmQvMTw7ZH5lfEQvK3JQTngvKXdfeDJxW2EoaWt0OkhmTlN0eVB6eXk/Y0lOK3o9SSZ+R0RAc2x5VD87RjtCSl1+YWRbRX1SZGRZKGQvQ3IseV0qbl8jYz0/'@;
put 'TENCa1BndU93MjR9LlFnYEIsLHxiI0UifEN0QFN8SmpSY1JbQGBLOltpfXJpMWBWUldQQEdEakdmQyJNQ1hKMGtibWZNXTNdZkdRfHhVKDJRVjNFRGVwQkJBVGdtZFhOYnxHRlVvJXBgP3dAX3xyQ3B8N0hSREZOPS8hbzZ2Ql8iV0VMOjhpZHckUSRoOjVGK0hxSFt9Wy9VfjVgKHt8Tz47KSV8'@;
put 'emomMSFVcnIqaEQrJTBwSndbaDFJS3FwcCI9WUg+ZGJQPWxmaW0vRT03ZS9RNmJbOE43VnZXK19lZTthTn43XWYwVl0qZmZ0JlIpTDRdJHYkNVU4YXNXRGc9e01gPDFDTVJYfUJ4eWxAam48YyY4PTtjZSVzQmtOLlg3P2w2ajU4Nm5sXlcyenFzSzo5TjZRXXkpa3QmeHFbKnZQWFZlSjg4MUwk'@;
put 'NUJLL3xpNlcsJEV2ITh1WzNPPDhYJl5lKnw7QH1+Qzp7QD0+Q0duU2E4S3open14TzpJa01HT2A7aFdNMUpuIWBZKzguRSpqSW0lVG8rO15AUSYrdWFHQFZmUWBhdV19PXFxbWV0Ln5BOXlFPDJ7MzBzY0kzcz5TXWh3YUxzQFcsflRMcntCJkt2OW47fTF6QEFwNWNLYWpjeFlzcVlzRnJPTmBj'@;
put 'WDtCR1JhRGUjcHgsUDJzcDxMfHp0UGxYNjhEUzVvKlMrTHF+Z1FPSTNwI2c7IXdWfVRgekkjbCRWRWlbXW5qd1NFMkRTRHgwPi5kRFdOUmopRmt3Zy5va3t+Pzt6KmtXOExnfl1ZKiI1NWdnfV13UVNrWk46cUF0bGsmYV94RlByN11DZHdjPCJ9bmo3UUBAOlI8YltVcVVRIm9RIm8uJlErbUoj'@;
put 'Ij13RSt6IyFDbypfWTtlP2kyTnl2YHpjRnc+Jm47S1ZKTjk1SU8ydTZsT3RnVilVIkU+cXVCOCpmTEttXlsiTnNELHtLakw8QlV7UlkhJl1DYkEuQTRtWkc5VjRyRnU4aV16NmZnTlNdQUJSQngwXTJVa1BmUzclNiJacCVee3M8WCJIZS46ckNhe0Z6akkwUSxoSnVaaml4Sn0+WCQ3XylbcWZE'@;
put 'VzgsbVMmOXZmI05wTU80bnVHaW1heCE8U0ZGeT9BZUhDZmN7KXZXUWc7b3ZHZHEzSXlgNG5ANFswNmdbc3Z8SjVHJGhIaWlpUGtpSSw6PSExZHdvWk5mM3tbamc5bCpGVDdUWyw/KjAuTHA2ZDZtLlMjfEtTQGs2V0hnXixkNHZGdShVfjl1L3wjPGtibk9zTUEvTnMjYDY3VVZzbTs1P15xZGZ4'@;
put 'T31FVEtHSWwrSiQ4QiU3RVRMO3tCMDhBVGQmNXEzZFM7b3p1PT9qLjQ4VDZzXls0c1JwTE9mLDV6aXpBdXxaNXxEUklGcl9IQT9qOWJHd2JUe3s/NVdwYUlfM0o7entOMGtmbzcxUDY/ZyI9JH1xOm8+cy9GWWU0UiRPYV94Oi5+NSwlbzdiMlFRSkliWjJHSiI1Yz1qVkU2M0tray4wYDhSWEA4'@;
put 'JHgoajs2IU1nK1h9ZFJ6LHU2S3UrOCpreEZaQnxLWGJXRVROYVgsVEZybSRSSix9b0Y4dVY+eXs1MmdzOzB7RDEldUBWYzc7bnEuST4ycXcsN1BdQl1HNSVENGd+XVdLI1lzU2EkNXhfMDJMJHJdUT0rcylxYn0wMjtQU1lwUm9sRE48Sn0lLzZEWH5OSEhAcWpyckZVbEx7QkomYCtWRUZ5NGFt'@;
put 'SGBlKG1xXXd3STdSX2hqJThsM35CLnY+VGtMMUF6OHJPXUZmdHV1Sn5nKC4rZGFEbXhnZ2tOJCJ9Wl1dODFqZ05SUiRvNmwrL2x9eEh9PmIrNXdJMGQhWzthYy9iOz5YOXtzfjEwUUlFfDBZIVMhMy9OPGZoakU/VHJLUDAmQEB4WUJDfmBQU2dNeUNCOl04JW8kSm5fe0tGJEtXLFtUal0jPWpk'@;
put 'fGx0UnBFa2w/SGJEW3MsQm5xMHo/L1NDbj1vO2Z4MkMyWGwlcSpITyFYcGU9Ll1vfD8/Y1c4fkBnfmFZN047O3FiXVUvSzp3ZVBMWWVzVHVdejA3bElmS3NpJnssbnp5Lj1XemxmJExbfToyZXE2JDd1NnpGQXZiVkROdVZ5UitBTz9sTH1teEpKcWlyWmFuaTdSUCFyci48KnBZMTtSOSNfZU9P'@;
put 'bWtHRGNaSmA9cnBOWSNXLltKSWBrKX5rUSw5eGk7dmleb0w2YXxrVmpTelJkbm8sbCt4Zzs3QmooNCx+ZjgiOXlReG1TX11JTE5WakReQGhXdGgkXm9uVktGIypDd3giRkpUQFVMTSlaLk0xMHZ9PUw2fF00cH5lJGY7RCxjWSUrfCQ1WnFqfStPNnhjOjp+VH5BWDYvWHNwI0lPQU5WTGMoSnhW'@;
put 'U1M/ST1WT3grZnRSISYsbXp+YmtQXlRSPn5Vdz48Yy9tWTd5VXNGTEZRdytDaklNZzRofitlfVBMYDRddmpaWTIyPD40RWooSllfWlZOMHc9QmEqQ1ZRNWYxamI/MS8/fENkTWtbV3VkS0FlWmAwUUJWVHxVb2lKNUdeQjJJRDkmQEA9cixwX31zd0lzPiNuK1IvU2xTansjUyZJO0RzbnZ2cX5t'@;
put 'cUM6dT48RTgrYzZGaU8pQWoweEkkVj4mdUc3O0N1e3pXejY8JFM0SSwvLG1hMk81LyxIZm1dY2U9ckc9S1F4a3tZdjRDTmJBNWp3W2dHaCRPT1FxLmkoJTlnWHBGbU9HUzRHdjgkS2BjQEhBWTJNQU86c0pvN2IuQEg+K2szOmtjdGEjeyh1UEZ1dUoydjQjKktqe3coRWAjanFlYDN8Kk9uU3dW'@;
put 'TGUoPkBlTj59ZSl0MVA4Z3w0VDdGZGU5TUtzOXx3fmghYkk5JGEkIlpKZ21dbkBEbV9EXThwKzBDOFU+JTZUSlJ6Qkl5O0tUP2JUPCEwP0pTZlYwWXtXLis/ZD9PT1V+ciVgIkllQ0dXclVIZm0+OnFNRGV4TkRgYkNZJD14PC5BbmA9YWcoSEV5VVh3JStKOy5CNz5ZWl1OR0IwOlpud1goPkpi'@;
put 'RH1vPD1Xd35vMlV1WHJjW2gkYFcrbCN1QyNWUGhMYE0/LClkM0FaJjQsZDFOezlsOjVSSVIwREljNTwueD0xRi9dNytFR2loLGx8cDwyVGtlMXBbcHdyZDEiK1B8TUF0a0dKUC9SIWh0Q1g4JTZxVyw3WzxvWlhzclVoTTFgKGV8R0tYfnBYJXczZVcsOSZvSVFxOC5WP2RoSDlBLmtPWWM4cGBo'@;
put 'aUtTQzQwbCpCM2FCWmB6aWpzJGRwMH5zI2RBbFlGPyxpXVJhe11hRyg8dGchXkVMQ21kRzJxLEk6RShCYCJ1ZUJFTyRXKDB1RWxWYzlMMC5eT2ZJNEtAUGNASEk5fnpqPl4zdHV8M3BgJEZ2WDM0aCRJSndSS3Y2SGV3UCFJLFkyMnI1SEQvQTsiSTpBckplPHlhZX1YZXBoRWxqeHwiMlBrcGFY'@;
put 'bzlPPTMoP0RIVjkuNiZ+an0mWERbLHFLPmNWQz8qfTJ3PToyUFBNeFJeblgxbF5CIlpHQGk4cXQ6SX1WRGAjMWE2ZUlhYEtSO1sidjVuSSZCNE5UMkpHTU9qWildbHdtITpOMX1BfC9YMT9FdEI4Ul1yNmRNOGhFc2l3Z0RUWiR8PCtCRSQqS3k1NXNQVjkrWTo3QzJ7V1ZfSWkzP14zd0RBU0dW'@;
put 'eUtEe0xGUHRXZHZgfUYpKkFnVFB+fkY4aUlddGB5LGE3dWchLEF8LDJMUi9QPTBFIzQ7MHEvUHc3dztpTXhRWylpMXh4SX1aNjAjVGdtbT5YSVJXemRMPygqdFV0SFNqRk5bbnUuTFgqNCZkTXV5fXpmYXd3LEFgeFc7M1NOTmtzSXIpK1BwTV5jTjFnSjU9WHUyIUU2RHNNOzFLRiYpM3E7Q2Qz'@;
put 'JkVwQGtwbVJWUXt4ZjQhbis5THlyOl5IaUlEalpgVnU4KG59WW5YclZ6TD5oOXNsbyYicXZEXkNpNHxsb1k2Kzosaz9oYnk+KUsvV1ohNF0+ZDwoL0xzKmlvKz95RSpeTjIhIVcrUTRwYlUrdGNNPUdAd2VTdUghPn5HQFd6KVovQ102bTR6JGolQSFJOyUwYXE4UGc3RHUpe3lvYHZZKyVeMkNL'@;
put 'a1sqRjw0OUxNW0haTlV5S191JTlwPmpQSV5dcTosP3JHZS5oZ2FFWW86S0QoO0wjYk9LR2t8biIjT090O2FbIihHN0s9PSpYSjBGen5ZQj1hWCZNQTJwPSQxRml3aDk2RixqQFJpZ2Z3Q1pEMk4+LEQhckcsYXhOX1dfK3l3Oys/L2loV2FWWDszNCt9ZWRIZT5IKFc7JH1sMC5wcE5oW3Zvb0lO'@;
put 'L0ZQRSxNNjt0OCZpZUJMUSY8XXY0L2s7cz5lbSo+WzByQDhuVmJpRiFyOlR9JkA2cEMuQmN9PkJzaFA3TTAqK042KWRWNVZRek9FJlhxMGlgOEt8OHpHVXdpW1ovaHhOTTExImhOW3I6aGBmSEMqVzVbWExAUlNlXmMqNDQ1anRJU21hUk17bWQ3cTlnWEtCXz8/TnNUWEtsSE5zOiszU3Qxe1M9'@;
put 'TFhXVks2WkNIdVo/X0JNTnk/PClaKkVdXVV9In4iOF92JTMwZS4mdW1leDluPzMlciQua2tWTnpwb0tLS0M4PFZpNCZ9ST9ENGhld258RShVU2d5Tz1aNWJWJWtqbUNefXRxSjFeWDFYdlAhTWFSKyRRVkZzKUttMSldRHAkYl5aaUxILDJoY1ZAKFNuWFFpMzRDcDBKXl5CdHpsfXVZT3YhIjle'@;
put 'K2hjY1lrdT91WU9+Z1FbSGFnOnMqc2FhPDt3dHslP1hrPX0xKm0vcHN7S0kxLyJnRypDR0hOPFBJQXBhZH45STQodGA0NHd0TnBxdEo5REAjZmxxV3t1KUVjW1BDOXN0YHpuX2VuTEVMT283Uj04PGM8WC5ec195N2ouaGhHTDIpcThZWmV5K2BFT01Xe21VZGQ+ZEdVUGguKCt7aHNwJXIiZSsh'@;
put 'PFEhTzRJNCh0IVlrQXNwTiVVTHM6d11yMF1bJiltRnxOd018W3BWZDNoOTNscyt6QzheZ2Z4Sz5DYjE3aVMvMyVYNnhBYFM5UWBgci9iSl9Ed3s1R0JJfUs4WmVdKXRadEZ4OlhrSV9NOytXJGRzdzErZSorS3RTK0N0XjNhLChiQCkvfXhzTDdGbE9NN2VlIiV9dEchZ2ZDYFosP052a00wQ2Um'@;
put 'PzsrKVNnY0s9Q01aOUp9ckpHL3VTX2l9aE8saGNlYXE4YzdCR316SVpiTzFxWzZBRjQoZGN5P0dgPC5AVjB1WnpZR0haPmdUUl9OaUgvQFBNak1tfFFgITs7LiM4YlZ1TTEuTz5oRz9yRXMofDZpV017S3dCRW1DYkMpW0haVSk9YDl0bWY8NFZ7TVIrXUs1MyNNZylhVW5qcXlUamVNPyJKODty'@;
put 'ZjY2S0FNXipDSkd6fVRTUlIzTmlraTl+TTAySWE2OjppR1JpL0cwIT9hUndDaU1LZnxNMHlhNDdTJmh6KFIxWmMrfEM3LDxONn0lfnE4cGpwVW1ZYyxsMWAhPTBMSWNpenAjODU5Kz9vJD5AYGA0eCRxVyMocW5wQj5AciJwNjFwLF9Pdll5MW4oPHFYbTBGV2c7cGIhQ1IlaTUhUHFGVFE4U1I2'@;
put 'dkxtQDJTJl5hb3NNUDNSLDFIb3g/Rk54PyYyIk12aWd5T3g9Wm96WXdCd1ArX1k1KnVgaU9vemp0SmphTXYlIzM4WSZ1aClENS4pT2VgSVI8aXhKMkNyXkc0JSwxQmVtXStjMHBwb115MSNgNmVYP0M1LEp1XSRPanQlMCo8KmVDfDwxdHl4aVZdZj9NQW1EIUJVOmYvXisyPWMoMXxbQzN2K3hS'@;
put 'RE03fS5pLDVDO3Rnb2RyTkt4WDMsLCpLXjZ1bFdHWSQ9eSNdOmd4QHI9PjVHS15PRTdEa15uMVVxSWt4Ukl4TT8xUTpJLEthXSxzYDViIix1YHd+Rm5lTWtkX0lNcUt2flEkcXYlOj96bWlpSFE4O0o+dl1AUERELzFePzdhQGtPN3ltI012VHVNVWJ7MURLfi5OXzJ8ekl3eXkhX04uOU0oS3xI'@;
put 'O3E7UnJRVC9KSFpoSyouUEU3JD1xMWAzbCl2NWZfVklXSDRyZDQ0fm1hWntMdDM8cDs0NnNJck8hKW0oPXg+KkxdaG9gRiFDNy58UW5dYHpJRC83aEUvLEhafXNZXkVpcnFyX1ZDL1ZMWzpaPm89KWpPWyNdIn0rcjVWWHM0JjY6QyhWcmlLSSxwOS9ZeTVxcnBpJC81S3BOYGYkQys5Y2VQXU5h'@;
put 'X0hDK09uUEhVOXYwY2lXRCYzWSZ2LyNEQzY6OyVVcFFVN0EuKVV7O3lHJkQpXUhzJGBCdCZgNUlOMXlEW35VVSZLKFdDSEo+NyNSWFZgQCI8LG4rQy8/PlluWHIqRkZjejdfUVVgYlgmU28pejh2KHF8eUltKlhOPW5xZyVpLElkalteQXp9Lm1hcj5MSnZLcD5jXyYuUTN1fVRkVC5uVl5bJHsh'@;
put 'Ji5zXlR5SmFiUmZUR1JNU2V2Q21yL3VLL0o9PnhdX31wRE1iNX1ZZE9SVktRLl1uNloqIX0sdCEycl5VaHtvOyhPSz5bKnZJSE5MPVFTazVFVWhmWFRSPjBvYWxqfCg3IT0wXm9BVCVIX0NrVEJpSjByOlRVPHtyOjdjYGAqL0FaQmM2KDoxWDJIZ3RlYkt5UUJdaGYvMmlHfWpZMHxgbXlSKFYy'@;
put 'OFZpO1dHO1EmWUtzLGBUKy8jNWlKQG04TUsjb2dkKyZLfHJCWTlMTzJRV3N1Um44I09FdmcqLHZgW3trMT40Yiw0Rl41Z1ssPlFpUEB9I0pJL1lrJkcjd112I2llPnsqQWFjKntdTTFXZExbR3JjP0x8KHtVSXZkZ2ZeSzxbd1t6ZH5gLCFbNSxNUnovLn14dSVYRz1jfm49P3doZ2ZDWj17aFFv'@;
put 'NSZvTj8vWWE9a3pjbXh9M1ojej1NbS58MCpHNks+PXMpUXROKGheWFQxQmlwV05hMTUsezBUOjJUL1NRODdsK1pCcGphOWwqPzZSJjosYEBEZDRyNFk0QGNgWHNNa1hzXzFSImxaNEIoXz85YyZlTmg6c3xyQX5fU2k8InN1RWRxP2BUKGgiMTRvPiV3el97bHtvcSUiR0V7Q3tNSmE1d34zcG88'@;
put 'fHFZS1NfX1ZARHNKYCJLfjo2I2pZLmMyTnd5IVhpNlYiPCN1THVgQHZQN3VddzNLVEksI3hITWV7bVQwaSkmKT9SMVA9O0l9UEIySFslTyZ+VUw6IVZORmZSIihuTlp9XkJ1fFNzYDJTW284ank8Tmx2YUdIZlFgWmlgSm1rZWpROzMwbzwqN2FJQWl0KXlFVFJkNDJzM2lAQiZpfDQrVytlYE1q'@;
put 'dSorVFVFcWsrLyNvLFEmS31ePW1BZXxbSFJPZCsiZWtFRFFCdlFrQHdrNzFxPlRYKVduYjNrOEZVRGhXVlhxfUx3Q01QPTJVdD9PclIuJXF7dk1Ze0pFXkEsaDtpS1NDK04iZS42UUtBVyVEOS9BQ1hTZSQ0SlUrd3tGdHZUNz1JKiZOc3o4XVF1V0daVEk1ejljS3QqVGBRfTl1LE5SZkhZQUIq'@;
put 'S1JVQD99UD1zMzp0T3FDPGttNGNjbyUmcDg9MFsvZmF2OTdaSl8ibzdwMklbRX5sV11vflRCdEphMThvUEM9fEh8QGhVUn0oTCp+TTRfIlFRcCFPbSJPUzJpcTxgWXI4IixYXV5CImJ5SHU5IiFQN1VScCl0Z01mW300OlVASj88RnNZYHVZMHBQZ0x4RUU5aX1PXW5bL30xRU4+Sl9vTE5wIVNi'@;
put 'SihFakw/NjpsI0lTKF1FU1VVJUlxV3pxa1gkUClqcmIkaC4jRDtsZklYS30kOilMdlZvaH0sZSkrcE5fOVtzVC5TXV09a2pZPHElayp3WTYsZmE7JV0hfT92NUN9eTtKWDZKZCRUdUMuYCEiS2BAK2lBOkZ1Q0BzZ34kX25fNW5rPHNPU1JofXwibHghUDAkUE1QOCw4NWRpP3p0QkNgTnprY0xS'@;
put 'SmBvIVQoQkI4LElvc0pTUypsbiwyLzF8RDx7STpqTEZZTERrOSN5NDlmY2ZlXkFhKUhBPCozTXtMLGNkT24lPyIqRSR0UV45bVdxb29WPHNgMlMkMEhDWEBAJn0iZ0siXzR7KmJdTT1fWS8jemQzaDk2LkNhTX4iKDNeOygvUnYuK3RtaG17Q21zU1hBP1tEMmAsJUsucHlETlVne3pWNUtDLyp5'@;
put 'd19KMDA2REBVVj42Sl4yJkh2SUZVaCwxNExVRTxvKGdMfElsRHdTYV9KPCgpXS9VbDswNURZMD9OW3FxPSk9W0AlOG9dbyNXcj0kV3ImcCUmWXk9Xj8lbyReJWBwRGpse2xIZEdJRzUrP2w8cHNUIy9pckI9V2BaSXpZSTM4TzVeSWJBKzBJYFFYQEEjYGA1RE9NenM6WT9lQXI3YUIpMT9UbUVH'@;
put 'JmBmTz53RSt8RVNWVVI3cXZPY0MhLHIkVm1ITHd3cnRYfFo0REhNQGJONmUrdUUiYTttUFI5Tnp3OUEpak5wcW9ZMVZ4VmssKkhhcz1JdW81dHplRztFPFZNJUB1TWlxPjd7QzgvTl8pUyI9OmdSbnU5RVBEZX5qK3AkbH0/Ny9VQkNMbUxJV0p5PEt8VkZiR2M9ST1gSV1eQFN7L206P28kfDpQ'@;
put 'L1UlYysqSGBxLmpbd3FWeVVBJSI/W24zZDUyU3oyMWE7XT08bWJANm8kc1twSz5+T1V7Jl4hbj9gYi4uJG1yTjFFTix0OzRqUlhxXShtL1VkTlorJnBEY1trRlZzQEVtKC86ZlswPmtsbFFeQG10OV9QW3V7SUQrWV02PiVOJk4vMmxZZDo3I0g5XVU1aGFJaFJeMil2UixCIl86IjtSIyl6N2Vj'@;
put 'SChjWjJ3Ukw/KG9+JkJfej9dOjs/Z3dFT3g0SmI8Q21GVVk6OGhyUWJEaC5aVSxfQEtqTSxpPl8wVllxUGtPRlo7XWRsaStEWVpVNXFkMGl2ZzUsKC5EOGozYUtAUV8lOiksUERfIXE6P01UMTFMVnt5WSQwKiZlY1I9Jmh1Wl5kUXhsM291cH1TLltHWGNzM34yT31DNlVpOCNHdjhEL2ZGIzE0'@;
put 'bnV2LG9WQCxxNDlZbENCV1NiS1gsVlp8KD0+YG4oOCIoeChkNV9gMV94PnhsJjd7e1luQj1BcWd5QXNLS15GQzJKYDxZU1N0bHxtMjA9Lz0ja1J3T3wpN3xeb3RVeHUxQHhwQmY3LGp4ZDFtdjp2R2ApOn0hJnsmaj8hVCQlazFlT2FdXVdmWXJSPHlsPD1fP2dMYEMkaj04a2FgUjtSJC52NEpe'@;
put 'QEBXUDtUY2VqSyJhR3ZfcmYpeTZWMXs2VEpxQl82K0BiN1dVPWUhUDlkXTVuVG4yc29CTW9xODc/cGdvJTp6TnltPDF9JVkzMiFaPCZPbl04N1hrXlBBJV1oYjxfc2VZSStdRmRrdXNXVEA2KnhVcG8qeD5zMH5uISV5UUQpPUxAcHxxYz14KnJaRUM2LmBubVAwUTRwdVIjSkJxQSVXRiNPUXp1'@;
put 'fE5tb2N7Q1YxR2hAamomXTB1e2lXO1pKWjNscCw5PSpzamJJTnppcCxnVVt6NypLezQvakFlT01JbWk6bXchQSl7QE9TMWpwfkNfKE9yUm53fEtsOyp9Jk0wVms9PXhPfGYqbSl0VHRJJTFQPyJoV3dlOHtbVVU8XnR5QiV9ViojNFN2R3ppMFRLT1siIXQqIWxNYFh4NWpWeyZgOlJjZEYsJDpf'@;
put 'NVRjaWsmT0tFL0gkLjZgLERdWXteSk5HJl9SeDdjKz5jczpKI19dSW5WQW1ZI2EsO3EsfUA5VUI2aCNIWDkvK1BINSxHd347dWtqUGJuSlZ7NXxUIVZtWnt1IzJZMiFoJGEjKGVxNFpeIWhCJUh0Ui91bHdjZl9fZU01TzFPcENZSiRYJGguRTlRaip0PXQ+dClIW0JvPmslR0t2RTFMSWwsMzp2'@;
put 'LyskQyhXaURAWVVvI1FeOC84ITZuKTVCVHxRP0hTTy5raz15YEg/ZEREPHQ0KlJqOHtrRzRjLzAxXWJyfT9YRnl3W3NgdEh9PTQ9VF53X3crVlY0QmQ6fGhGfWFEOGUicCglPGNbcUo6L1B9eGpJcXs1OHdVTl4rS1lTTD1fPzJtJVRUX1gieWM8N2B4ZXwiaCMoX0lEOEx1ODxITHA4SV41TG9G'@;
put 'UVBTLHFma0UoWExLYEZYdjJifU58VShEcVlveTteITNSZ3NmK3h5SEZRIlcsZWNfWWVARCI/aHFUK0Q+d1k3K1gmZW51S0pIIm5MU3BbYjF3aDArc30lajp1LFNJKHAsVlEuPW1hKCEpfCV2elF1byI5aGZpW1B0cGp1a1dUXiVVaH1bVU9MakhfbSFCKTxLPXpPIVl9eF5jKDEueF84O0V1b3p6'@;
put 'JjY3MyVlcnEkQSZBYUQ+aUhLY1ooSmIpd2dWan51TXQhbVUxV0hpZExzUEF6NypRQzQ1aDd9JHVmbjZrRnpReFE8LE1MQ2hqZ1toQD9OfiFkaUMmPV48ZVlVdyllWFU7ZWM7UGsiJXpddj1yOj8zODdgcHEyWmpEUiQ2Sy5DSWt9enpefSR4T3hGRSFIVD5WO1ZgOilqci5SdVV8NSpRNXhRc0E2'@;
put 'Uzs4ZzcxUW5IU3RtVj9wLGE7NHlfNjFtMXtCPCJoeSRoNnUkPjlDZlIhPEs+QmFjIzhvam9gQnImfShWREI1L0d8THQxMUEmQmJ4SiwoX28qM2R9amZtZ35ZUllBfkZZRE4kemkkezZ3VkdKV3AkYzZwdVpqUHBkNT0uVWVFNGc2JSV7PHF8X08rVnhGUU5ZSTVLb1prOy9FJT9XVV1ePF8zIWhs'@;
put 'Q0tfV1smdTNdYDw5KzlTNCMhWGE1XkAmZ19sWlRrPD9qVi9mdGEoWDNHTGBLbTE9PiJbTzpzJVJiY0I5elp2OCxBUmZsNSM/SThCJTJSSHVvaik9anUvSlh+PFhdQWgoMXlZRl8/aldhTVJEODV2KkgoPXFbP0hybzhlW2NMLHNEN3dmaVQzQn0qNmMxIltwWmxrWT0hTzp4RXBTZjtMUFJWWGxt'@;
put 'QC8jJkU6aTlmeDNpZCk4dFsoK2NpeDVnJDgxTktRQWsuZ3tBcyxFZF5+MixZMV5qNnU/amM9aENAeSZQS1BiV0NCKEBaTTQxdTkyTS4kLjs5OSJuNjs5ZX4qIj9APSZUIml4TkFANXRbdU5yajlMdTRUIzlvS0FiQj4zQn1dZ0tNan5ZWX1idmAxNFZvcEtCdjhZMDsrY2EmOWJAOGZtfE93Knso'@;
put 'O0VqKGc8RTNteV5TPUBIQzxbLDxSMCVEb0xAcls3Ny5AdWBPMUxIQXo6OnlyQT5QdnBYKF5EezU/cEhfLiFwOEs2M0IvZFJ8SjImV19WaXIrVSV0Om4oampQRSx5bm9IJnZ1X0p8THFydiU7fXYjM2lGKzlMJmolWEQ6YF4rZU8/Vyp9KkNAWz9+aT5iVUJgXThgNTZyK2IpLm9dJjZzPF1TQTE0'@;
put 'PGZdY3MwdyFzUHlbOD1ZflQhc3lmbz1JNHB3L0g2bSZZaVlJXiE2dyhTeD5wZl4hPzBuJkdxQjxEbypnNzMpeCVoamIjZS45Pm5NPjBwcDleLE9PQk5FPUU+NUFWJXxZcHUoOUchXU06NzxIJUQkRXJUXU9WKUNEciJAOENRU2E4Rz1TVkBuMlkqS3QwcjRWdDN2bEtySjxrMytVaVkrJkExYFBx'@;
put 'XTpBYV8xKUojKSVraWplVlIzT0whJmRBPjlMU3I4KX4xP1owNW5jeD5sTD5xRXFMP1AwQ1FINjI6QGN7RUBAbVY3TG0oflIzQl5CI2YwbWEuSSl6LkFnWjk9dXskXUp9clAjaWk/bXtnO18vSDc1NC9dcDlRcWtsXV0qOWNbOE0rMWdhVmw/Kk1wdkB4enZKQ0Zudj9ePXVVbjZLQz1jcUZZY1t4'@;
put 'PlRFSTB1O0J7UFRtcz1qaWBUM3o7MkJUVCZMRnxNSWFZUXZJU2N+LGgoXlgyWSxlXisuRkwkfVNNfV9pMSREJHhxUmMlfktNY2NgRGV8fkRIKGd+MEFsKiFHW3B5Rk1aMj1xLitXdWlLJCY3dlJ8OSx8cHM/ZlI5JCo0VX1eTCpZJHB7SGo0V1creER6WHp5eD9rZk0hPE9GPDlTRihie2VGTVoz'@;
put 'RkNEImFXaE9yV01zJV0hfD0+VlBmQ3tuZiguMSx2KVZYcVEsTUBfK3BOZklXPXMlVlRbfTM1JiRRRlcoLnxbWT9sWnB7fURhWHlpel5Cdjc0N1V8ZU4jOW1mQDpzRVVPaU5zMX4xfjF7M35LTD8pNl1bKlJSdyp2dyFwWylRQzlLSmA7PHBvez1XfU5+IXA7fnN2fDxsYnkpZ2lhckp2Yl5ZRnhl'@;
put 'RXROIzROfCp8Sz1NeX1WazRRRHtzOTY4IktTUntUJGIuX2lNWD5nJU5pV043KnI5WVdvKFdWbEpdRH4jOkJeOzxlWCE3TyIlY0UobyJBfD9LPExxW3k7Vi9mfmxfSUJ2dzBEej42UVlidD42YUlwP3Z6T0Q6SVVDSlhvIX0hWihafSRAVEIvRHJLd3IxWkBZdyhlTDRkMD5jPG01e3UvUnt1VEU0'@;
put 'R3x0R3RuOyxrTmM0TXFfUiFQb003MlJpZT9PSlZkelU7fXF4dk9NZWpwUSFFMXBOfFZeUSs0ZCVEWip+ayMvTGFDPUw4JUciSzYxYDtsYVFUfFs+PzkuLDksTHVDW3c7aTNbZFNfOW85UH0jencsQDZiZFRpV1JzL3dhUVQmUUdzNWRjRj0wV1s7akVNNVRFezVWISVRTiFJR0xkWTgrMjRaIlly'@;
put 'Xj1mIkJ+N3hGMkBXPC5RZk9OdS49Sm9fZ202e2JqM1s2OzB6UVRGPTd4TFYuMDhENVJRSWg6XkYofllTa2dvVjheVGRpQWhEO2J5dVRYS1pqYUNtL3hsSkNFTUVPRS5HcE1KLD89bFlnc3lpd0VyWFtmVjV3TldfIjgyZFtNJWgyMSpsIil+dipoRUNVKnYyfVVaNHUzakJTMXRpSi4/REZnN1k/'@;
put 'L3I+NCFtZU8pLmQ2VlNrQXlHaGR8Z0pCIi9MWjM3YVhLcV89IUhJdHlbP31fViQqSi8obFl+SU96NS5IOVdRKlNHSSp9eHxmcGBfXT9mcE1KP1FDTEdWPFFTaz0+YF5fPyNfI1I3SldubXtgeyZpNFFOaFpwUmd8bn5Ub1AuKHM8UGpaeGtpLlQsJXZ8cWt5Mk12e3AxSVglKz02PUdwQCo6U0po'@;
put 'L1U3e0Q5MmA2fXVQREp7bkJSTlpHMWxyNkZad2pxLiohbE0+O1YvSF1WPSZqenI5L3ozNTJgRFZCOTh0XnVlOUpQSShrWE1zYUR5cVE6aSNeT2gzMSFiUCRATXNgNXI4NUlkfVYuMDh7bi5gWXA8Q1p9SnhYe10/en4qKnpHfGVGSklHMHQ2NVp6fiRRJiR7LipZVigkd3VKOloxXmpEelQwenMx'@;
put 'KU1aNHxxdT4qKGswMyg3MFlDe3AvQyE5JE9tTmFLMDJ0TVRdQT1CPWU9eEs7c1A4LkVedEJtTzx1Pl9mIyNEdEJqIjtWa1JGd19RKSVsI3w6RiJ3eyswemEyNmouPnZ0VFE7RTxgX0NoWFJ7cGU+WGJQRHF7R2kuSnZrTDkjUEU4RzpXKDdGOXtvemBweD1QNnN0JCxhUEBnKXY/fH5LWlR8ST1o'@;
put 'SzI5KUp4dHxoN2M0TmhAakFyVT55cVhHazpEJkUkZGcoQ1MjJEQ3YiQufiVKOkxmVTxYITpTQT5obXgxZitTQ0QoLGtKIUtdOylwUmozaEk5OUdwRDxyVkZbMW15Ly9JN2xybU14fUkrVSxIR2dOITl2e3BPMk5dRCl5KVQuQyslbWI2IThGNCgvWCF5eixIUCV9JGAxK0l0bXpoSHlkaixOTHl2'@;
put 'cXdKcDVDXVczPyVYPEFnZn5zUENeYXFIfEB0NSQkbEByYmdYS3FfI1IqT0U3WV0rMHVwZnN+Y3smQSg5MGRqKyQ/XSw9LillOjJGQzReOSRrOzhrWWMwZDE0Slg6e2cjUD9hcjhmcXppPnd3TX1yO2p1NjZjcSVaNXZ0KnZ+ZzcxbntwQGN5dmFCKSQ+a2NoS2R7dl5LL3NaVX5zWitXXk5pWldn'@;
put 'QWl7PilgOSk+VF9sUn5YcGI1akJfKipIe3w2Xl9EPFVpfGssQV1+b2MjRnF9VGIpY0dIKnk9NnBwKHV8M2xOZTVaT1ZUcldFTTtjfWREKyVOfHJibUNaKVdBNnJ+KngjV3x2ckhZPShlSjlqd19EcVJNYD56RHVTaGd7Rz0iRzxfS3Zta3NGR2FWNWAwV0hPVytESSNRdytnNWtmSFtlSnFja0RJ'@;
put 'MHErO09vMDExPnAqRGIxNHNJeV11XkY+K1spO2JLPVtOP0A8aGQ/QnBmSVVCVzslKHR0PUkoMHBEJT45bDA5dGlwb2kmUktpJn52c0RGO0A/WyZEZDw6KmBFOyRVUHpedlYueG9YIiVFQ0U7JEZodmI4KFZFY1hWL0d7LmkpUypXTy47YXlaKX51OlMuRkA5QFJsNVBxblQ+Sy5hQm9+Ryt5YDc9'@;
put 'X1t6M3RQcC81fkdlOjsuY3NrQSEmaU07VixMW0hdbHBpK3JVQVFXSWgyWmFLd2xTeCYmMFQ+Smw1fGEye1UpJSVSMiovUj82JDhwc3xHUkczSV5aXjdMNEo8VG1pcz1GPXlCQDBtWEUwOUFjSlpEa3B3b1VGej5JNz1XPEsrJDpGW0IqPkdIW2NkOGxfUEYkPmpgOEAjdDs+PGFBdXtkaUN0X0Yx'@;
put 'fkFBQyJtRiRGdyM1Ojwwbywlai9MbzN0bDhqOkNTTFFLJWM9KzgwRjAyQm1bMTVpeSVDS2NZJnJlX1YjY01WT0FPQSJHb19ncSpyYGpXQ1c3ZUpKXXYmW2ZDTDJvTXAlJmxGJSZZc0BAbW8oPDJwTl03Uytlekh9Vl5KVi59a2VuczQ7cWMkT3VEMDA5UGUuZ29jZHQ8RUFeISgqNzNlNHhUSjo1'@;
put 'I2xqIW1ReCk3dlNSdy91SVZnN2gxdDlvTnNgcH5eVm5DKXRgR2k/IW5mRC88WSRwPms8eDUsZ30mazxLIzw0bD8/dmhgTFFTaUdoOntFVmA2bVNFa21BXlFoJUt3S3JKZFNBYTVlQSZqSSI3ajo5aEBFa1NAaW82dD1XaDVlaFMjakImKDBSUUhUNCtfZzY9fWAieygrbHh9L0R1OkBxMTNFS0c+'@;
put 'dyxgO2dCVjApfiVqMTFYWSpnNjJZQSZsL2MucnxNSUI1aXJ5WnpZXzx8XVBOUVRPTlskbHk7YWd2dG0sQl0qfTwvaW1HNkpIQz4ub28lOUQ8MitpWFtXX3UxXUEqKCooIXcvZGImaHlgR2YrcWJXQm9CVTBlezNHaDoqQyNkU2Z3aTxUbTxoU2luP0A9I11NR1BGYjAhKihpR1tJKWtSLEs3N25w'@;
put 'alAyVjd2O010SyU7JnFqM0FeLFpNP2NtVS9xV0ZWcGZwaUhbOV9SN19gbC8yUzpIfmQ2ZyZfIygoTk10W3RgfW46SzNsVFNjUGJbXjBLNXZSRms4RT8iWzdeXj1wfWNtS3VsMm9RaHl2NC47MXh9JCs9Uyp4fnFobHF5LzY5QCpBQHQqeFJlaE5dQUBrIV5VNSw0KU80OF9nUF9EM1k1LGhZUC5b'@;
put 'Z1lkQ0creV57MEltekNjIyxiNS48YVtIeFU2ZzF+I3Q7XUkvOns5aCheNU1kJCxLVENTJC5Ddn5wMz9DfSpKTjNzeyJ3RSskUUA2Szl8NG1wLmNDK0Q4OzhMcW84cktKOTBjancoQCxqTCtEQFolNS9OOTwoRWA2Z3lzW2xHdV8pOj9PdCFtLnZNWn5zZH4mbFsmJlRgOW5EYUx+aGIpbGNeL2t4'@;
put 'QGdDQC4mWjJsMU46eEVaJigseCVBfiEzMm1IRV5jMTB0aXU3ajNdUyZ3entRT0s7InZWJH53KHs+RWE7JiVHUVdyXi91bC88TTthPGxISFhmdCN0UFMxXiFfTl5xZ0ZeO01kOXZKXXdfOyRYTnNWPEEqJlVBJn53fSMqVXYxODV6JCwrfWV9Xj5nN19JbTcpMTFUc2clVH1CakVsVHYsWFt5TX5T'@;
put 'KzpOfj8hJDRHUTtuOmk8SlhLZE49JSZXeko9dWhUJDFFeF9VQXFwR15WbHx+SmxsdGY1anI0KXJeeVRQY1dseVU3UUNSN1FmO11wKUh7VlF4d3ZWQEluJSZ4Vkk8eCIsP11HNT56citFelEhcHBgOFlxSURgIThyZTJtJlVLKno0TnRVPj0wb3BgMk0/X3d+TXUqKkgiNCFoZ0B8U0Ivfj1AbWxT'@;
put 'bypVZ209JiE6Ujl7VGQscTpURWFgVVImc0g+TH59X2w6c18pQlV0P2pqSUU4LGMkc1RAJj1RUTlfbmdqTHc2WUY8K046JWM5eW8pfDlLOVl1SXZdR0V6UU1SLz0hfmBVP2pYRnllQzwjfXRrYkVLLjRhXS90Xl4lPCs8JXtnUlMkYko1P052WjRVRSRrbXhHXWBgX2gmbUNLIlJGRDh5N09meXNJ'@;
put 'QHE/MDcwKXA+QHpJXWI7N2V1JSpsR1o+OVVoaXA/ZkxAdVIqS3A/TjRlSll6cmQhdFp6JUNJJjU2WjFfQFg+JW1yfUZ4Z01YbSliSHxfVWc1QHJYUTVXSClOXUw1TiteKTJGJCp+ZUEoRDF9fEpUX2AiaHFZTDgjUEBlWysifSFFLk0zZzs/TFVIMURrV31UZHxfLihCbyoiRkFKeSIkOVJSTH5o'@;
put 'VUo9Ljd2Ozp0ZVkmfTNnNy47fVZTJj0+RT90YCoxfklmNyIkUW8zU2NHcis5aCxOMFFUKVJsR0AsVjQ9Ml99cFdLan5wQnZnPyhldWx4RUYpXlBBYzhDRk1LQCNxKSE+UHVrT3lJLDhxRUcsYVtnR1IwRjwzODFLcW9lTzA7OFl4R3pxdVJRSzxUUStzRkEodClfd3AlUGUhKjhicDpqSzlYO0xU'@;
put 'NV9gMSMla0xIaShDIk4rfXBjJEdAcWkrXlF0U3lzS2t7blNgTjI7PCphXjxFU2hSOnhxS0xXfSM6MFAzOEY/c0VgNDA2PGFiPk8xNGl0b101ZDljOl0hRUArcUYuKnJBU0RgZXQ9dXVnWFF2VU1TdjhPUCtrZS4yQ0o/NDtKdW5nLk0wfkE6d186KV1TQEVqfm5EYjpMKDFtTC5UMmo0ej5Wamkz'@;
put 'PWxaJnd7NG1RS1AuQn18I25NIytvOjtjTWRUYkx+dX1IbGxyU0NtO3RwNFNWJTlLbFd7TFk5KCpaWWEufENJc0NARkp8WywqcDtwL1RLU1hMTDZjW0Z5Ujs3I0dqSlZiTXhCb2hhSEFEOC9kOXRTeV0kN2lkcCJnajdMW3w6TT55TFZqdnxhVHFmflpqfk0xVzMmUEN1aT4sRH5EYVhIZSY2UDp8'@;
put 'OSNiWXhve1grJHBXXnRRS2pgeUUlQ3lHenA3R1BlLmBROz9MLk5DKzVNW0hbbmdNaEZAWTZwPlRLbFdeNHV2eHhGW1k/MEViWDY6SlsrcT1edWw4MlssZ2VCM1VXQm8xSSN3dnxGeWhlWSYzS2dGRlZ4e0AmaHp0cTFZI185ST82cVFRbTJycXh2WXokaXViRmIlXT53NE56djNPSWsrLnUxM2FG'@;
put 'MFpQbHRSK0k4biFuS35KLmtgT3gyL0FkKz5rUiExUkNzQilXYEZBITw7V30kUjlPLko8NGQ4ezxlPSxPd0wscVlUbFdDYEdHfjttN0JsRjs+JHBHNGhzK0QrdkMhbT1obUJ2Rkh5Okw0PVVmeExQMnU7LD9qRF4rc1AuQmJ4dUNfcit4RkVdXjs/WSVTcHZJdCZLb3R7P31gd0V1M3U0NXNQMFEl'@;
put 'MkF+aEpgVDMxR2J9R1BaeFNiVXdhLnwqVUVAdlp+b3F8VXlQfmNZSDVBaCU5WikhSi5nOkgmaTI/MHosIlF2e1lzTU9CR0FwdU54aSpxVEphQmohU0RFNGQ1RlsuUXpFaXQvMlNdI14ydUEwJi5hVEVZMyNoZ05eKnU5XlgucGcsLiNXenx8bU42L11bbCRfJCtgNllFcX1eYS5+JWIoY2hvNVNC'@;
put 'ImI5e1UxbEQ0Sjh4QV5jOWhXTFJQQGxCWlh7dVV2N0A/aEdyWF0ycWIkK3hJPTFKczoqSzUrXlFYXUBiK3JbKjd3bnRMPCsyRnl7YD1MfE5BV0UkIWddaE0qQXlGNm9UZFE5cCp2Ui4rZTd4b1lSYDY4OC9qRzR2eH18Nj95XjskcTRnOCxFN1AhSShnR2AuQTpxWFJeJCxoM1FSMEk3R1M8b2Bz'@;
put 'TjkkQkNaMmAhWm49d1ZpcXtDKU9eIU1JJDRyWiQycEhQfCJzSDRnNGcrLGtGb3gzcFBJSzNHazU9OChBJFExUHlMIzNKdjxuJFg5Ji57YHZvKnNTR2gsTXtEfkQ4M204VSZ8WzZSPVFFcnNSTWNUNDFOQy8pUlImLGVJLD1Me1o+IVNsejspblhoWDd+XnAmPlhGWD9WaWxyfTkyMSJeTXA3ZT9E'@;
put 'KHMucyhMQXBwcVpkXz5EUyhMa0AvOS9qfHZPVjlWXUtUcngwSDJWX2tLLDBmb0QqS2tWUG8hPHI+STFafWl4cXZeQ0lXaSQ2XlFqQWlyQV1VXitGSUtiRUFwdGE5Slg9S2lxJX45ZmVVeU44WGI+Z1JTLGR+JS8uSmRUT0Y8Kj1sSWAqQXlMZCZ5WGw9WVtmUjwhO15neHt+fUVeRT9MRyN0aCkq'@;
put 'dnc2ZX1hd2pxLFlbeFV2R1ZAVz1ufVk1WzVkRjUkbFpUPVN0UToufChUYD9INnoralE3UmpjZjouNzskKj95WWR2dUk8YDlicU1zdik7eS5aeVhzXjUjQ1I0LmNwPmh4LGx0e1olbj42cFh0dHlIc0t5IW93JjRMdCgpKUZ9SWthOTYlYSFCe3ZwXz5tTUVdUV5VVlFafVR4ZmtbOkVVXXshI2xS'@;
put 'UCN4Zl9FYTVQcyZpVUBmPWQjN1BGZHt1dVQ0SE5xOWg/RyJfeTFLbzNydiRMbT9JTFBidVhKQWY8WDIveGZrLG1FZSojZT9IWTZKelppYlU4QGAhTXM8dGpqIU9yQ0lpNyk2IUohNVhedSU/P0MqUHA1K3tyYzIoPUlPRFlCS0teTSQ6Qz1JNGkjR1VSNSl7VHQiQVlOOndweFt0JCxuIVt8XkhI'@;
put 'NUFoSmR0M1VPSE9wX0JFcFopVHFrTj4kcmphd3E6YzMyP0RvMSZibj9YYlo7XTluUWBXZkxlTEJxIl1XI04pSGg9RU5We3lgdVg1Kz0lay89RVQ9RHgsRHB9ZDI6SFtLRiZtcyk9an0kVyolbXtwInJDbXUzRjUvMS87PSMsW0QjUSVaNTBJJlB9YTNZd2Y4dHZlT2ghJCosan1KIXkuYE1neTss'@;
put 'PlIxKT9ETGhxLmFpej0mNk5DWUJ6YTNCIjdsTUMzS10ueHN4R3gzbX5ZPk9LTkY1XUopNCl8KmtyQ3VucT1JQmdmU28xWjpAenk2c3U9cW9mKXN1ZD01P0gqLGxGYVssPWhIY24sL0pWXUM8dUx0ITc4ZE5iLER8cj57bUtdKWVJeWx4Umh0bzspQVdGRENYfWFbeHZueFAyJll9LDFfMXhhUVtD'@;
put 'WjVnenh0JVUpP012IW1XfHo2bEYrXSEsMXd1Uz1uNj4relhLS3J9clEqWEksbE0pcSFLQm1pYlA7K2teTjNha3dJPCxIbWJaUV5jZHEkMmtzVnxUeFEjVk8iT3U5Vk9HdFl9JkBdWCZfWXpdeTYoRl04ezZrcX1TXUd8KlRHeDRDdllkdSFpQWZsWjVFPCNBSTtlbj0oPXw2SnBCNFl9a0t2e0Iw'@;
put 'QiE7c11IY31HLn45SDRCXlBzMFByYSVFNn1BRFVqVWp9fiIxaXQ3dlZLRk8iXzFnUDcyYEUkPkQ5NHs+cV1BPDtUVSQuRFY3cHtOZj1mVjg/RE8maHR9M2EhcXskV0Rhaz9EcEh3NjlIKHlPLkheUlg/YDhyWFRQVTVtVShIcVU3XXw7bWZiKkhaOmNsRztAXkdUfnkxLm5JPGBMR0t3PlZpR0ts'@;
put 'X345WTFKfVBCWDBpUDVnVjgre3pRe0NzN1UiO2Z1dXErZVpeTFtdZHRDdV15I1JeTFRKdEJ2TCJEbEBXWVA/RFYxVCRqVld4TGJAQHJtYFQqWjFBYy5DeE87PHFKUyNXX1BCUHtmQ0IvKUYpRUdOfmRlTWY2OXQwMDpLdUJhVmVHaXkmMHRiYkZKYXdUPEtScSYvWUwuc2lHdissME5obzQsfW5f'@;
put 'eylGeThCeHxzVmIuUVprK2A6cU08WHBpa3JdN2x0UWpoaVN3Q2wwU2owNTlFPz4lVkled0FrJVNgbW8zJi9yVSw8U35ve1QqP2spOHskYVAuM3kvfXxJLEdzYzd9ITE/VnJYMWQ0bkZCdyhTallUZEFIO2F7QmpeTHpNcVl+K3BdOz1xXml3OTdHNjFOdiI1WE1hKXwle2xkcj8hX3BSfWN2enUo'@;
put 'e0o8azUqaVB3JlVCYSVLUUxSR0VoIzBBZVI3P3Q0fHJlcTp1TGN8Uk5XNyQ5MVMye0NoQTxmKlp0fVB6bSNEITwueE5EI2AxND49dntXPkpkOTlzWXZeVjdndGlWVjw6TX1oN3R7cENdY31sZypIZmAmfEpSdFF3cGxJKUdQSCQ1V25uY0ZiIU8kI3Bqb2xHIkVzPH5PZF4oP3BWdWlYdyhIbzFf'@;
put 'aUtyTHVIX0x4eGBaZnJzOk9yJUhrYT5xYnIhZSt7YVsqNiRXdjdZX3soQCZ1fTpWbnRreHxMZDJeQyhHJX05TCYoKitfNDkvJiM6X0NzR1d+cDAwc0x0fDZCX3s1PUJUa1MjbFdRMnxAfVBwVCgrfmgpYXt9Lj0qdEMiZSZ4OTpObX1uSVI9Nj4jJW17M3YpKCpweVN8XUllN1NEd087QnQ6U1tp'@;
put 'QiV1XVp9LH46T0M/fD14SntTaVQ5I3xXK1ZXKTRnOjVNTEk3Zm4/aSEwVXM2KjZlfEg7YkZSXW93aEdqfEB2bFIrQ0Ngfi9uP0osWGUpbXQzM1IrdUgrXUZ0NjZIdkNFMSh5ekE6bHw3d1ZDYElgTF1EflFYdFRrZTtNQFRtQ01HZylLfjh3d1twNikqMiVFZjA4ZGske2dEQ1Rbd1pPaylkemhn'@;
put 'aERfezJPbjhSSWsocEpMXVNpOmtQLCo/ND0sMnBmRH5PUU95W2pPcHdrc3hPLCpIKVg+SWRPTmk0altqWCtnOEo7bTZ2OWA/RTF4PUUxLGhIfUhmbT9CX2s6Xz94aklfM1NCSEosUyYrenouVEZSXW0/eWt3QyMvPmx8LldRWVdvb0dWRUkwdTxzdmApZD9LOV5IQkMpODdbfDZsfjMjPldmIn5I'@;
put 'N0M8LzZbU1l4UnpMS3k1PHM8Mn4xQzJva09nclJFXixpeUllTiMoVHIxUCZNMCpPM2w7WTdBMkZMSiFLZmczZ3chdV5HaShGYEY7SFVEaG1dKXZrRCt2dC47Zm0qTTg5SUo5IjckO3FIRHg7cURgVSVfbnEqUDBXJUdzP0c4MX1UQzRnKC8mLjY+SEl+fiRhS3V4Snt9VD07Z1Y3cWNZLzlBaDB4'@;
put 'Y2BRLzlLZHkvQFE4QiI6QD0/LkNXe14xMFNrIUUwV1V3WlUmKjw0UmphYFgsQ3smdzptaFhVTDRAcVgiMERCQ0h8JTFfbmtCPl1eMU1TbD53QnIxaEsjO3pdJXUrUjZJeXRDSFp2WnQ6cCo7Ik1lMTZ0PHIrPUYlZXxdUn05aXBUMkMjN3c9RD4leyxjMWA9bFk1T0NoQmw+alAhZGwwaWE+QSNX'@;
put 'XmRQI0BSZldoRmV5dXU4b2c7aHxneHtab2FpW0x4bFdVKnhgY0wmaiE5dSZtNyYvdjB5Ik5KZzBpO0RFITB+PzpKaGRjR2V+QFV3WzA+VDNsXWdVLEx8OCwmO0g6JkorQlordkNEeCp9U0x+aDRWUHA3XSRVNF1CX21FS15CX3VrVCVGe2RFVktyZEpKYF12UkxQLjF8ZUlqMGloJEdXX0lXR0Eh'@;
put 'RHtGZmllcD9gWyRJSCsuNEczSSJHRjo4NmVkIXo9QHR2JjxjViM3WSt4ajAuPXRrNlpeVmxBSUR3cF1YM0ZAcCo7aVtvNXE/NVVwaVN2UnVwSmBvUTsxKG94cUpuU19dIlFdajFhekc3aTxid0d4dH5sPnJrb0ZCekE3JDYqQU5dPiUlYX4+KVpBX3tmeT5fWVgvQCJ9OiUpLmIsNS8lNVMkITVb'@;
put 'XkBBaSo1SH4/QlhQJVRgPjdZc1FHNHBUeDI7bXdjMDowQXFzb1cmY0tBPHA6e1dUb252MylnOihWUilINTJgU0U+MyFVTWsxbT1Se2lIKEF4dE8hWnk4RC8pbHxpVERuVTwjUVYqMGtFInooXyI1JCFLPHU7c1Bvc2doZnYjKUdfbmI7cXZSQVtuWHZeRWlnR2VqUHBFRSx0T1Y+RkgjNClrNTp0'@;
put 'dVZBbXI4NCtzOWYvL1p7P1hdcDA9Y2JpdDNhRX5HcG8kaiZpeiM6alRmNE9NITQvPU5yWCJyaXVQMUN4JCxGLFhwMihWQEl6P0RoSyhCU1hGXlV2WWdKTkN2SCkvJGtzNzI9TDdVZGNUeF9aIl0pYGRmZTgsa15hNEJdO2g/WGUhWWx4O3lwb196PUxOYi5VWkkkYkJ2bkV1YDRVbGN9aUl7eyts'@;
put 'an4kTnMpUnpZaXhaQ25eNkZYPyg0ZkxsPip8Y0RkQGspYEkjQF5rQWlKJmVWXyNqJFZtK0hMQFBmcWJ4ZykhSiR9eTNXUWlePTxpIXlVcUlCQzBfL0peLjxJfTNgP0w1NV02SXBueChjWl07MmspWGx+WWhGSlRweCFoMmY3Zi4/K34oI1BqaSwpaTRiJDRWfmZQJmdkfX1wIjFqLmtPUWVmOkV6'@;
put 'Tnd9XSFXcnd0e093Mi9HKWFAV14zX0BXOWRaVk9BOzRDPjcmSWdpdmVOQlRIPXRCcn1EZDMvO09BWTYselEiUVBZImBAfWBRN1VrcTR8UkMjQGFJJDAuMDYvZmE0MDpKUTltS2thflB4XmUzRFtaZk9zUCwmR2BEJU1rPnx1MnVDb2pjQSFHVzNgWz92cG05ZjpDWHosPnBbTVEwNXYqKTwiKn1B'@;
put 'a2dnWSVVLkZWWVl9Kj1QdjUzWCVYT2FwLDJhcnF0NlJ7OSt6M1Z8OyspY2BuZXg/ITQ3R1J4eEM7RklIWlNSSVF9VHdhcV86ZlUuRHYlaldDe3cydzpbJGM4QEtCS0Q6ej5hUWwmMjlqI3oqcUFmSCF+W0FiSWwpbVVkVHdnKXsxe0lea0IvIW0jdVpTI01VfUw3eTI6Y11bcTtIcGxxZmZ7MTxH'@;
put 'cFokWjNNQEtMLzI7aDpeaVc0cz0zeFJ7QU9HMDo/WmNRIW1hLl1WY0IuIVhnZnJiX25JZlROTU48NXV3LCtMTVRgViZCLmZpZGN8bFg8Iyk9UEllTFNBVlAoTCgqMXArfHBkaEBwTSIqfmlMKEl8bmJTZV8hRmYvPkRTc2tmKnV5K0A9UnszV2ZlcU56Old9YzROMShCUSVRalZXTjNEV3p3aVAh'@;
put 'T1sqcVg0Q3BGcFlpQ2NQfkI4SFt6WiVUQyZMIXZvKG4vIWMpKDIufSUvKztea1grYUg0ej8wYmJVdiJwNmkpZSohaXc1JHQ4cnglc2AzaGlQP31db2ImLytSUjs/RHtPWUdOQ1IpNF8kcXslSnNidiJvVzdHQVtuWzEsTWorMHVaYUBHRS5CZHY0ZTprbV1EKTBqJkhrMVg6KVJiR0RjN1VgVEhg'@;
put 'ZXM/IygsZlR0PzFXaVVxcGl3IXlQX0lwXW54PyRNZSoyTF81YX45YnVEbER+R3ZGVDEjMk1zRX1icSVNKCt3WUAzXjdhMWM6QixsMCNdQUZqR35RPVJ1SXAsblR5OFBWfnpCTWBqWXlgYzB3cD06PEk7LkVhMUBiYUJvSkJtLl5iWXpRWnNpLCxPPnVteVkkLElLPTk7P11YSUMwM2d+XmEpWmFY'@;
put 'VSh1ZSoyYmpVNmxeYVRZeEl9Tjk2cXcqK1h5QiQ5bDtkRlhXOE9mZTxqUyYqKWNCcG8+PSJYR19aey49KDdoVllZYE09QHd6K0YpIzF6fHB3RXpPfGJSUGRmIXhUdWQwcFhyV1taRmt9bVJAImRuMWtqPDJmeGlgV3QpMVgqTzB7cXhie1MrOjNwZkZ+REVBbDFCZiVlWnxEbSJGUk07dnhNcDAo'@;
put 'UHg5Yko5QldTKD1lMDgvJFg6XT9JRVt1UF1ZZU44eCllOlJJfUBWXiw9JD0uKlBDZHZXNVYuS0Mke055MHlteSx9RG1Xc0N8fTNJU3UyKm9neC4oOHtMS1c9ZnhMb3wrI2ojYihJR25wQU96WC5OOVttOlF1Oj5GWUp0XXhAR2ZCOTRuT1BsYT1iNCoyI0d9NjlNNVg6RXJBSHN6LHN9KVBwMCgu'@;
put 'dXYyNVYjNjFTVT18eDZpYyRzTUxyZnhFWyw9WWhnVENXTDRPZ1dHY10vNlFwXV4yYihQW20xM2s2JCo9b1tNJShdRkwvdm57UFVeR3JTN0xLVCt8Yj8sLGpDW0Z+KDhJd1UzNHlwcWw6ZTNrY1R4YlVBdjZMNW47QipbZTNZSXVSYThjfGdNK2dweEpwazY0N0Q0eFkzK29zdWt3OjIlYUskenJw'@;
put 'PyZjJVNERjhWXTRsQlgpc3R3RnpeZz90WmpOeVQhcDYlT1AhMD9PdGQ/THtNbnchKzNXOmhPc3w9T3ojaSl6ejxCPm1oW2UzMDBeSVpdTU9NTnlCIUkyMENlYlE1SVEuX1l1JFosLiMyJD87dHtmYWB6Wz1zbWl3dGohUFFILHhiMCprLHJrWGJUe0pLOiIvNyp2NT1LIzJGOzh2KSFOQVM7PV0u'@;
put 'Ym1lRl5EeUope3E8XWYkQiRnaEZlIj5YPC9zJWM0VndhRnB1fnFHPjk1YjcmR31ORW1iW0l3aG03fURlLDMzSG4xe3wkL0lUSTkwU1ZKJGRodWtaVGR0W3hXeiw1UUk6L0RaKUlrP08hdDlVZGt9TGFCJm5ycmRURV5aXjcxYiUlR2BWbD5PeT0/dTY7Mk9NRVF7XjZKIW4rKmYuX2VZQVlgejF1'@;
put 'eyJ8KH14OWhFbEgwL0lWKDtod1NqfmYyNENRKnwhfiVsWis9PlZOeXl9ezYsWWJoVjszLDE6bEk6S1ZZRCNbYX4jSn0jMllaLENXbzJYN3E1dF9qXW0yRnBURTdTTHh+MTo1NG02eiVZJWNjVGRlPnp3KjxJRX5HbilTImF4bSUsXkM7eGZEYSYqTl4iNDZMQzZHQ2Exe0IqVUtQYlRyfVhxYyEs'@;
put 'LFMkOzoqSGUsbn0iR2J3JXVbMjsmO0hUfnR9SD0lbkMkJSpfZUEqYmZ4KCRNS2hNTTcyRyRbeUdNNlcoTSJsP2hrd0FJTTZ2SFM8PHlqaywybVc5fjU5N0cuWFR7RGFxP2lSNkdxR216TlBQQ1BeaUZQSFZKQWw3M15KVWFXQllaRExDNH5LdUY2SF18Pk1aUDU7NiNMfj4mfEtdXSF3SGpbZkw0'@;
put 'WEg1Mk97N0slfWBWNi4lT3hsej0lcn1zfno2elZtTiQ6X3g2aFZfd282OS88MW0qdVMjaCt6LmF6S2FjNUo/ZzdaRnpqPmJdITNUME5tZyFZMUJWVzBIQTI1KVJWWDRjd2hqYncwZE8lKyV8VjFlT0klXyw5Omdqe3I5ck95TnAiZTU6eGcmcVpIX3RoSkhZITRAMzkjbXF7M24ocD0kbVg2IUUo'@;
put 'UCJtSmNtPXc6ZEhiMUtNJSFUYCIlO05jWSp6QUdiPFooeXR6NTFrOG5GPCo4YUBudXpuJlNDJGc9fHh7Pl9EQEsiNDIhTkxwWiRxLmpEXnZGWlFHVyRxNVFHV0J+VlF0e2FAZlpdUX1WdSZwW00xSyhNfVhKUDF4OiJGd1RXJWNncTsxSTR8Wk5DPCk1TXhPJWJUWm42P1lyJVprKVUmOCx9Wyp2'@;
put 'XS9MQE8xLkg6TjcxWVdecERdcVk2WVRhSmF7ejYsd2g+Z3BmUD81blVAYDM0PVRXVTtPMS4pSnBqXTg6enZnKFJSZE8zZ3YjNGc6IUJ7aSZSNylGTV05dlgpJHFJUjExWDYiX0k2OCpTKEAyYlY+VGBRME9AL2FSdGF3alE6OnQpWEpHcyUuIiksWHh2dyh4U0NVTmtkQXxLYShQLChELG95MnU0'@;
put 'ekxDQE98TkVJcXJ6KFJbfCQ+S0doZ0k6P3dCXSUjJnApSjw0bCFpejxCaXNoOEoiX3NmeVlpMEQzbF9SL1dQQjlFfnNhYVkiKmcoZS4venFrJTwqcTYlInpnVHVAX3xleE90SEZrX18+RHAvcWVxVUpvNnxddFZlaFQoZS5EZjxdTzxYaGdtVHZaLk5pZmV+QDFsNFJGIUNsLDh8QlRXSz1PNlRP'@;
put 'QFZ6OUVVM3E1dCpoMDQiaVBDKn0+KjspeUk+RnBjOTZVNUYsUmdqaj1ubEAiKixhNTp4ZkN4RUslYUkpMilhaU1XUE95Vy9EWT9dQ29IbX0+dVg8YHZMWjdyNndvXksibUNPMHR2e1pOUiskb2oub0tzKz9VVjcsfDhpcGUxcEFfLCVxSDl+Z2pXSm8xJk9hLEZ6MDhIcnt8JSpTXk1DWF55dG48'@;
put 'Yyo9eVpbXTxJNFg+X1BkVj9eWy5MZTltc09vbHp6YXJPUXo0OEMkMU9oWy9AdUY+VCQmT2hpcU84LFVETkBWUWE5Nn1wI19vR1NvU2V4elhoN0tKZj9PXXpiQnFMRylWM11QUU5aVHxtSFNZV0kyLFY8MiIjfCZCTE1MIjEmdzArbG82e0xoW2NEeWgmZGljP1RQdFFrYW1rPk8lbjZTZEZyVXNG'@;
put 'SDVGZS4wSVI9UkJdfTN2dHIsJXFAJGMlall4QEx8fWdzYkR5aHlSZXxOQ2BBb1U1d3pIXyZeejExK3gkfmc9WUR5SEFpUCRPQ2ByP191YmErfT8kVml2elMoJl5sZmpAPzt9Z3FsREtjSmo4IWRdPEkwb2giZ2VOTVVZU2o4Qml6XVlYQ2BLcVs8RktbOko4QWErfXU9QVBQVWw3UmVoMHVxQSVD'@;
put 'O3dAS3FqODFQQ2BEbzJ6d3owOUBwVndKVSxWNX44MG5vfVd2OCpGfW9QUHJaK1gqUSxlLlBaZ21mP1ZIbWU8TF8+MCZZPmgqISk6KXAxWXpDMzlhI2plOyJLQyVtNip8PVNGPSk7XXZmfjNFVXJjdG12Kkh+c10pMm02PmdSeXVWXWY5X2orKDh6elRCKiVzU0tgX3pjKygraklWTSNIP0giWjB8'@;
put 'X102cjhjbUtNMyU1bj9Iems3eF4/KUtJJk5GcWgzUVpzKU8yWVVTYWF4UnpvOFIzSVBqTCNkWXFhOTowa29pXUxDIiEuazFTbj1RR3p4QUhWdk9CO3lEVVs8WmpHbHpIJmBEIStYNSEmZ0kpSDVCJHc/V0I3dndnbys6eD1MekZRZ2wjIkZteTlGXX0qSCRFSDJKISNRRDhGdUxZMT1JOnhmLmZE'@;
put 'eX5jbWM3NSJGQzJkYFMibSssLDtmLl86X29ZaGJ8WH1QT2AqWk1hPkhLKk19XkM9KXdPR19hflA+MUQ5SVtPPUlyYFoxQ1gmL3JmQjt6REFMbmBifl95dTNadlFZZSsheVZGfCZRZ1dHaGoiZCh3SllGJE9rVl5yWnZ9Sz48LFNGczg4W3hSdUswSW9nL1NiR290YHA8ZiN2N3BRTUJ6P29Td31f'@;
put 'SUc9dldJW2V9anR0Kyp9ZXVAL0gsZGd2ejxJIUMxJEAmKkNxKXVZaVB7N0g9cXlZRm5iI0JXUzhhcURWKXJPZD9POmw0eFRyM1cofnl1bzY9WFhKJEdDRCFRQXt0MyVQbHY0czRwXUc7WmhRSTUiakBvP1BTO1dpWjUiTCo1WVE8TU4qNFFbIV8xfT90Z0ZuQU1dYDV7bzlrOWp0OG8ibzZTQDt9'@;
put 'PU1ycGg1JnI5O0AzfmdZbUo1TUAwYVo8W0FPeHZAakNwcnxRaDlzYiNySVU9QUczTzNnazFEViQ7ZzZbPVl5bHIrJkshOXVpUjBJWjZhSF93KmphL3xiTXMmLDwmQ0trZmBJe25EUDlNPVJ1SlZPZl1CT0ohcHlpfCF+R0I7QzkmOyV8SXlIJDl8TSZxM0YjOD12SHV6PV9oQCRNSmE/aXwlNVEj'@;
put 'Yitnc0JgNG9OJlQ9dHdnMGBwQ1EiWVtLKHByPVhdYzJNT1J1ejFsPnlyKmVGM1tdQG9RPzhpLnl2en55K3I1P3g4ZV1QN3N4OHlleDdGS3FwYXpaMVoxOlMwRGQhWXhPY2xzcGY1a29CemNzITtme1hjVUlCTFBudnk6cnJ9dHN7XklpbG4rYGdvW0R1dF5XL0ZON0dqN2VuKnYlNzpYd19GMH56'@;
put 'SFhDPXZNJXhxb05aTDFfOUpNInoxR3J+Y1VSYnNELzwxX1JzdGFqfGleSDsrVmxoRm5YOHxHJW0zc3VRenxGKFVMaipIK0k8RGQsXUovNEJwfCRKTyY1YHBbQUV0PChxInVSM0k6aEdZVkV0cH1HRVpQM0JkN2RVZjp6RlU8LCtILEsxUk01InV8dExPMUthVUFsYmNSVUMqTVVtKj9IYENUWVIw'@;
put 'O3pWLnM+WX1qViQuLEQzaEMsYHIoe0VmRVRCQjJMOWl6RVg5bnFHdmYhSiosK1EreHpINj05bk5ibHs6R0U+aiJ5LkUxOm13TG80Tzo5fT9AY3AsTFBnKl1ALyEkKHs0QW8jJXRaa2cvPnx2LGcmQlRgTTFIa1o7YzQsdiZUPEV6KV0sOE1mRH50JGRSaVowaXA4UHd6JkJTb19+REI8TkpNN1Uz'@;
put 'R1hgPElDdHEpbCNkUXVLc0VedV9obzcpVUFeRnlOKVt5b2BxMEd5SGZUUCI8MDQ5eERkQTZ5e3AuWzRNP0lRLERTRilFcDd7MzFPZTNabWA5SjQvIUw3eypUbjE/SyUlNVBoZ0BWdyREKnxNenA4NkpWN3Y6TSlBYTpRWD96QFVJQHlEeEdWWEt5PnEsWX1+ZiZqezV6Kz5fKTRSZiNpazJZRGIw'@;
put 'TFAqRXZ7YzZ+JV97NjtCc0xQOlAmRDk5cGFBXld2XnR6RkwrJkUjMGtEMEdLLHBpdHAwMl4wY1QqKUouYktDWHcwNFhRakwhUXwufUFqYzBySnk4YCxkRENjMi58RWhrK3ExKTtrfHlUK0RoSm1NUGFfLy9uN2pjbllbd1RlQSFCS0lZNDQwaCIuUXNma1NbKmgwfVhwfTB6UFY1RmpZSSQ8P0RP'@;
put 'Xk8pLjpEIUA9T2huUW8qLi5uZ3ltUzZVdTp+TGEpSFJlbVJDIVArW3RiRVZ2MXowemZXdT5aQ2pZOVtpZUNmKFB1OUhoXVdpSjtCX3tKPShmc0V5XjhPWVBiUndrfkNNO2JycjIuYTpucnAwNjhmM3Yscjx9OCokSTlyMmgycEh3TjhZQXRFUkEvSk1aWz90YWtrOilEXXlfRjgiQ1EjOHlnVk5D'@;
put 'e1BzSzNsLz5Vdk8hYjlkfEhXYE8hOk1pI19zTXBYaWVObjdQS0x7aWBfYysvKVpwRGR6TDglYCJ7XVczYixbLH5sMWVrJH5ob1hSVUhoLyp1cDY6PmUvW0ZpNTQ9eWw4IltXJjwxKVZfTG1vP3dTfTtsfGBiRlBKOmwsd05COnl8IXlXM1hBWV5ZcEdxfSsoRTNBJmI+MSoyV3t6a1JVNyJsM0hH'@;
put 'JStMd01YWCN+SkhaQzsrWz07WUsldDJwP3hSXU97dCY0JXdMKC4wW1czJlteTHsyPWI/JWlDcFhjJm5vOCpAWXVfUTRXRWkmV2clRkxSXzYxIn1AeClwTEAlcit5SzNBWlQsd1AzSCxTWFRhSjR1Uzw/eUY5ekhHMlhIJjpvK11de2U/X3spbnkpZTE6ImhyeD1SeEpDPG1XelB0UTlEYThDfVlZ'@;
put 'WlRrekpoIVcudnpiWFJBW1JWWkNlfFg+R0hLSXdnalRSSEhaSThLPk0qfXgvS145MFBgbk83JiI0emJlQn1Ybnt1JXlyRSh1WjBxY05ZcEM4LFJgPXAkQE5LSEg+VG5oTllrcWtxV0d6QDtfbDFmLD5HWGpMIXE0W2QiKDozcGNKbS5WQTxVUHxecUJCXjw7c350dmBnaXg3NVNMajh4VW1bP3VF'@;
put 'ZFFAcixpYXs5Y3AlSCNgcGgjMGxJQzBgIS4sY0ZKaDQ7Pm9wYkdXeS9xSnBEdXw2LF9OYzleNSxlOkskakVJJHlxYEs4YmlHR2NpUnYlOUV8dSVLO2k9V0UjKSY3VXZuWCtAOWsiaE1wWX12dTM7UmQ6N2JWOFdxPmcwTnhMR1kwX0pBNTljSm8yKDRLLz9LfEF8RUVLSjZaIyFeKjRfQVkiZ1pS'@;
put 'RncpVmQ1InljMCJKeVpbeC4kXUpQe2R3UyZRRGA6YFpvb0x4TVlCaFteUG4vJGVlWz1DXjZuOHIxVVpJPSFfKS9qVWRhSTBZZVt+VTxTfisqJWtITmAseClWWHlpZm5gNCk3JDUpYyQ5flVQZkp6Z0U9PWZBKjB9ZUcjTXtAKzwmY1pMN3ppKzB9M0dYS0U0fUYzSXNMR1dqRVAkYCxVQiIrKDlT'@;
put 'YVQobF8rK0h2W35oakIqLlZBfT8kM005QF5Weyh+TFQ7XkRtN000Tlp6dyJwNm89RF5DJCNTaHUuMGF5Q2guLDYlKW94cCVKPSY6UC8jZDpZInE6VFF1K2Y0UTczeGVnJUc2RnhLMmVTWiRJUFI0QmlqMHZYQkN9L29gPjtUdCZnLD9gSHpVPkBETlkxWGsoI15aeD9BbVJAMGE2WX5vW3lsYD8v'@;
put 'bG9QQHVNU1VYV2wlQ3VrQix8LmQkP1NoUWdIb1pnRylVaEdJO15oKHNRUWwudjAkS3VZKk1RQ2lPeX1ZLFRWWEp3W2hBOn1SYU5mR0ZKekZqeXZ7PCxBSGs9UUREP0UlPFFHV1UlVWg4R2s9WzJiJlAoSThvWUhed2ImZHVOUS5QMHhSRExUSSVoR1dHTiE1dil3S31AfmtweEM/O2ZMX0tGYUlZ'@;
put 'M2tJSDMkLy5qd05+ejJ9ZFF6P2gkKD9VdzhIPzRlaSYwamEwSX1DOT5pYURDT3xxczswPUloTUNQZ3xWWEFud0VEQ2ZrUyZZfV9PY30kSyZMbmMjREJeOFRuNkJnOiE2diRLUDdJPEdUJFM9aT80fiV3SThJS2xHZWY7VS87an5vYG1gdE5oP2h1T1JqMTsuUTJZcnAhaklSMlJkOVQmN3k4JFYr'@;
put 'LzN0ak1IYEQpTXZaKWdCMWQ0SkMza25WJDNZYSU/dUk4QHgiMnUsLEJ6YkgqI3lpUjcyOCszYm9rYWhjRk10LkQpeD93T3QzeUM5LEFSMlA4aUNIS3hQb1NFO3h9UGddeX1ELCtofnZSamtnIUpCcmtvYClUJFh5LCwqLFZNNi55MFVJe1smfC9tSypATVMxWGFsUFMxfDpiL3B+ezo4V3ZPWEBz'@;
put 'dmhxP0wuNX1afi8wciJaL3JSUWl3aTVAaHZ0byFpWypMNkp6em8uN15VXW1yamJpQX1nMXN8LC8rVmFsdkk6QjppUkc6Iy5uZiJWeC5qUnVKMHZaPXd+MntpSUg5RCR8SXpDNH5+cEY2PS80Mk11OltNZD9Eb1IvWS9xZVgrIU1AUmp9cGZoZ1RNZ0hAdW1wOkc2SDlUdSl5MjVaQipxdXxzcjAw'@;
put 'ND5JUlZqaVJiLjJ+SlBEKSZLSG5gTUY7WWk8WDsrRnI1ZyRjeT9beldJSTxMN3BxT2FFdVR2bEByQ01PVFdjaUlRclhyWEkjW1prLlVkYzBJSXtwPEZAaFg3TiFabzE6SjcpVERCTWh+KkptNzI6S3ltOjt2QER5VG9dcC4waWhMQ1RXTXdNZm9aJkxsOik9M2lydCw/enBkUSJnfS9ZaVghLyoz'@;
put 'fj1gKD1hJTAwfWxvJUptSGlwJiV8U1YlUWRFall3aTosY1ZnVzlqZkxuPztIUmlBP0slNTdqL0Q4JGdDKyRVYzRiT3RpTkBVdT9qSV5APzYlRX0mO2NMbzlOYSUlWS5kVWZpaChmUncwamxCZmUhZmhmaVQ7YklIeylpakt3cHkvU1IwST5MXyFaZVhlaFQoJWo/JWUpfSsmYWlVXlpsbGNWalRX'@;
put 'eTRJdTF9L0pHdVUhITp4KCw6S1FMPE1DaVpxPztwIj1JPWs/ZEUiQnxFRSx9eChMPmg5el9KJnQlXyFqIyEsMSNCfXt+JWFyNHQ3bnhgR2hVYVl3NTQwdTZURTxdXmVLR242UTAqa0B4TylrU0dhXn4oTnZ+VERVXUJnYUp2O0ddPWFRP240fFVeXy4lZUBOLiRINihKKUZRdkdkZ2YyKTcjSHZn'@;
put 'ejRQaURrfUEhRyhLLnlHd1IjSHN1Sj5SNnQ6T2AhT0FpfXJ2N3NGSyo/ZmtsfUlMaXt1Sjx9ZTszfkpyIlA1TEN+bSRHOXBYZU83L1NSYjM9djJwOXxCUFdGfHJ5Smh4UV8sKGdSWiIkODFsS259Yz0rZWhxWWpadl0xdGAzRGd6aSZpXkMvfCovK2FHbHopOC9VPHlZKiYuK2BqKmw8OUhJNHgm'@;
put 'QztXOlVobUA6biU6bTZ6Ki9bNlZlWX5dX3R+MGU2Ln1qcDs+Ji8xbCNzOz4xd3MzRVZ0Zk5DZWltSnVjRnoiWnFoUk5AbSlxNHZbbFMmdEgwb3h2fkRgXWJgImlufjwiejlZJjVMIXxTd2hZL0d+JVsqJXR+YV11KyZncV5HNyZuNzdtOm9yNFZmXVBOOHdROTA2Vn1DMEl+RDFEK3ZrKVd1KD9k'@;
put 'RUtOKU1mai4wOHR1K2tSV3E7WyxNfTp9L3lGbGlJM0FnWX10ZmBONzE9I2o9a0VLTE4qWjFmLDVJPF9gbSRCdTl1JTA9OTxleFl1fWlJaW5dS2BxYmp1dHdUaS9fcnx8PihGYmshSEVuU1BpeTxuQ1ByUjNIRGI/XlIoQ0JdWm5vZE9CR2U9eDFSTTQ3dWJ0SGt6V24xSTcpN250ezpnPHAwQnRU'@;
put 'YSwpbSlWKHQ2aUA0ajhhaVgke3VzcGh3ZXkvM0tYKTtEKy5WcEg7UW42QXVdekNFIWNQcEhIMjNsenoyR01wdm9DO1F7aDlVU29tYFI8Zl1pU0FpRVJKTjlEKTF+RD9GXmNIanpIPzdVaDcrZGxMZXd7bkN4TTw7Jl9ldFgqOih6aCZXcldoWFZSfTBoNnBedSJjdStgbnFgV28+Zmg8YTBYVkpP'@;
put 'KEtFWHw9YkM7Wkl0LHZ5T1RqTDtUWUVAQn1CWUV6VXV7eVtFI2hgbGNbXSQ4dTR5dTckKClmJXFpOz0xPzVWMFM6Sy5mQT5QbT9uMUczTypQJC55PyR5Q3dPZWUiMX1LUkpba1U3XTMzSjA0Q1p9d0d9QikkeDhHVTAlfkFfXU1HOVJMN1Bmdl4jRWh1PkJCRElZSj02aX5OMV57ZTQvcWV7dS9G'@;
put 'c2ksV3JfWE5BMFN9M0pre1tnXkR+KGlCc2FsQyRIZXxvTmV7ezYrQl9sSFRyd1JGQkNdd2phU3xJV1B2VTxQMz15cWcwTUpkaExVeUo7SDtLKWZgO2IhT0dhdEwhfClZSDtLRnUwXjFibmJeMjhGaDkwNXZ6aX5iVmRUam9eRHV5aEFhe3ppWH51eWg5RDNILlFwaTcmVU83IXNSfGg0eiIqKExQ'@;
put 'Z1VAWFEjSmR7Ml1dV18jZSovPzZNNWZJSz9GRSF0eTNvJiJLOmtvOzd8eHZecWkhXmIyR2h7cE9SJDBANjFzbXZ8ISZpKFAmZyhQWCZoMiMsTGh3enVsQUtrWnElbUhSNTtHTm1rMS50ZWRxdE1JUSp9JHJPYXc1R2VKNHpJOjIvLk1JQSpCLnhBQUtPN25iWGEqfHhaUSFuZy5TSF5YODhKekNP'@;
put 'WkVBdTlEOkYiTENBQUFBQUFBQUFDIkNoM2xrfFg5TGhENWQwZjUrPCJIan14TnNrdzBqMCFHJk0jWSp0T0AoaUtIZFdtLkBZJDNNOjo5Jms2NTwuO1NfeWcva3xIQjhKX2FjdEJWWCFabXI/MikuPWF2WD8vVnNNRz1IaTgwJFdpdChGd19CUGBoUFU9WCIsSntjdEs+Mms5L1U/XzM7YV1LUkZn'@;
put 'Rkdtejp0Xk4rMEZOcE1VOGo7UDBGU0tjWjc+aTJsWFVbRjB1XSghOW0wJig8Rnt2Mk9iKHckTXk4Qzc7c3ZDdCE9UksvTmxhXnZHMlFJa1ZiK0pGXjY1PFs+Sy8iNjJMRCFAWmUqZD1QX3ElLzE6c1plOkNTUWVtYnxNZXUjNjhPYSNSLnt7Sk4sSVI1UExbW3A5RjJoJEB5clU4eH0oJEhbRG5P'@;
put 'd0t5d2ZYYUgub0lDQjlzZ3x0JnhpcVhucENDcmZ+U0BGZXlCT009MV5zRzdJVTVMX3gmSWtbX3VoMF9UZ0Q1JSIvSGdHQ0xFRFJMIlRiVjpuNGlHTTc0LCtKeXNkTHFZZ3YwZEVjJTxQfnUxTi8sMjFLKTxtOWREL2tRdlFxezlMUyhvPnlFaUF+SFcyO3FIVHQ3V3IiXih4NChFa1M+SWo1P2hE'@;
put 'ak15NGtDISI8VklCX0BUUFB5Kn5VfmgqaipNcHprKXpoOyltYCFudS9CV2AyYnp4SixiM3NWZjNZaCt4dFAobTNxZXF3emVbMzJQajxxJFlxW1t5XTcuPltiP3U1QixGb0hKREdNYTtpakF1YlE1U0pRSUxzMF1AQHN2c1NsL3tBRWpSR2Uxc0VrdHY5YjVLQkoieUxiIUJZbXhefUUoTC5YMSFG'@;
put 'L0NtMDUvczo/PVB3ZjpDdmV2YC8+UzdXL299WEAmbCQmKEtDT3NeLiliSzZRb1Nhe2Q7Wzx8MmU/OFI4dTpoYixnSWBaQ2ErPEo0YEcyeXJVI0dydng4eG4reV5gTUMwN2RSQm8jM05VPSF1M3JjdktpcjBwanxFJHo7ZXt1RHE3ckV+fHQmREkyJmtNJHZVKUkqM19eTl9VIXF1bGQ6W3MuQ3tH'@;
put 'b35oPXhIRypDYTtkbFQ8PTBYbjc6WUlWaUx0c1BdK2owX0ZwM2RzZERvI1A/SWFQMHVuTDQ1KHZZaUY1RS5+SkAkKGU2bV1gNURVbU9HOmQkVjVrMDRQVkBlP1szaC5KZ0VyYHFue197Rn1rJDdOISlXcDx6aGB2RFhCKSR8TkQqYDpBPSxZJiYmXW9nXSROWy9fUStGMGlUWTJVamhVRDFnLGZO'@;
put 'TWRkXkUrVDxGV1ppWj04TU4pTkchVGVHaD5rTz5ee3xZe0tyYTJxe1ZaaHBPe1UuITVeOyRFKixDM1JlZFcjKFV6PGQ6QFY5V2hxa0taRmkoTyY8fHBMYkhZWn5jdCluI3U8fk08PnxzezVuaT5zXm9OfGxDQGNdKXpUaUFrQUtKajZvJi5YUSZEMjspdThbLFs1fF9vSSFCdlcyW1RZMCpeK3E/'@;
put 'b3EzVUgjLHtJR3U2di46MChDdVpDeyhoOGNrcFszJWF8azAxIldoZlMpcW11bzdTckpRcHJ0TjprMnR4Wn02QnY8XUZLYTU7Q2FndF9MJWImXkNrJnxQYD1UM0o8R0k3M3U4dj0pW25SNGNkW2wkRC5ebDNWZ3x5QyRCRj4sOCxnUFQ/fDxDX113Y21dfEpsbW19XnAwKklUNFA/XTwvVGUpQmJ9'@;
put 'RlJbaEhGfFVCbDw/QUY3XUdtKVJnQWVoKjN+KXJVLnNxdGJ2PDNxOytiMl49SS9zQWh0XzszQCh9U05KKEV1bzt+ZC5tJF4kbFZaXX0yOCowTUJ6a28zVC87RTM8SXs9MldIMDpdNzBpUkpdYF1iSCl5Kj0zMHt5N0s3a2RxZFlmM3owUFJpNyVCRkhRYlJ8bWlDR04kKSJWYyI4Lyx7MlRve19d'@;
put 'QF9lVFYrYVpeQHNWJXl4aWY1NkxaZzFndkhjKn5oQ3o3LH0iVmZlZFA2QzgyYEdKdH04Yj1MKDI2UVV5JX1fVDI/Ono9XV0wOT93bDNvbVFWelo9JVUvdFssMD9hNERybWYlSn1kNjlqfCZpWiJ6VT0vZFFmJCZLLEgjTjYlTVEzLGFUXSgqTmV3RXwibj9YYExHKzxMVCtRNnh7QixCSTcyXXkq'@;
put 'TzdUK2BuZD8wKCswUEY2ZDA4dV9SNWJwYD50LDtJLH5rK2tSKjBYOShdZkYiN15CIWw4YH18K2pWVjFjNko9XU9aZl5UOWdKYzJOQjlrcWlFN3Q2XiwyKyF1KjhaS2w8WGZoL0FjVlNIY3c4QS4wUFE8RVs7UCNkTGZSeSlyVHJsIjU6dz17Y0xYZCVPXTQ8PktIQDFyJjM2NTFnZDdgS3FmQjZ0'@;
put 'ZDJzRGMzYC5eI0lfaVdPLENTS3BIcnk7JFd1JDE/TFtIdTVCNH09PjZ4JlJGTD0hTUA4aEdlJG1HTkA1PFRpIXx0MHxmUFpOfCF+TihzVF4kPHclRlNdYT4hVjo1ajJLYUBPK0V7KngxSitRWy9SVDo5RXJwb0xZQWZHPCYoSWI/eS8zTCZlPE1HbV1VXWpXJEV9KE5LJF5QTnB1aEQ9cVt8cyJT'@;
put 'bGBtP0BAIlJFLzZuKlUzUVFWS0B1JHdvdEpwWEUpLy97NCZdMjNWWXhjKH5YPkNGJm5PNHFueT8qRDVOL0BhQFF8WWE3MXApXWc5elpsYy9sXTlIUS5RdWRpKXJoRms/eE5SPCU0dEZ3SCRia2NzPzhJdDRkblB2Zy42WWY4Slk8YCpLOldMNm5qbjReZTohNj9HUnJwI2ZGVnpWRjd0ZVdfamZw'@;
put 'bmE9V20lP31vOUR9YktVandFTm90UzYjfjN5dy5ralkkajs/PEdkQk4mX0g/Ii93S01jZSpXZH1sJTRlPD9Zb0QwZ3UjcCh6PlVWM3R8QnlqMiNQP2FxLyRmY0RuOmpxQVtkWDpiKUozal42QndjTiE3XVNvY2dLaTJMajIjYEM3Rl4wRHkyaXBLKE5DUDB7PkJ0ZU8jV1dvZ208LD1OPG1GeyVO'@;
put 'PD9yb1ZGZVlrYXs5RkBIPSNiWD87bEp1JDEibFZCeFFeOW9maEwrSEtkWUVHKSYmd1ZhV0E5NkxObEpVdHVwPGtPczI7UzltajJ6WVRvXlJ1QGhdbShnRSV2I2V1QiUpLkJRaW5QJFBjVGp+VSVpaiYuNFI1MCJqKkZwM1lNdzl5dGl5eiFxRHcpYWIlSTc2OmtIbzU1djFdIWlWZ3VjRDZHNXYu'@;
put 'LDVbYHMudj9rfT1TN2p6eVdRU0dTcDY6USRobWNwPUBCKUdMYjEqRVR5QHpbMX0qd2E7KE9kPjRHOVNyQC5iJSFPdX46ZSJJVTJVVDB0Q2VeU1M8RVtpPEB8e007eCwqbk8zekFiaVo2YCt9N09GdkUoPTJZJklKQFNzdSlXSXEkMiIkMSF4QUg2KyovSFMzfkw3PS8+I3o3ZGpVVmMuO0NDcyxd'@;
put 'elQsXURqMSU7aFg2TjM/QnRGWW8iYW9PUFNDYncwUENdTURITWh8fWRGKH56cWNVPHIxYG47bkBeWWU5dSFZNFEkVD81KEhaRGt4Qj0rNE9iVEBfK0tjaGV1cixJZnFSRVRTJkM5I2dHcjJuSCMsRXspVSpVcD1feEBOQDZUTWoxb3BHazh7Ujt5YiN4cU1SfmtWUiNPMnpeWWkmbTx+RGhudERe'@;
put 'LlRqM1k9dlU8YEI2U3V1SiozeWo/Y1s1UT4mIl8vcH5INCJWP0EkRXtIQGJWYV1APUlifX1RYzNlQUpefChYdGJ5UVB4QiFURkdVOE5ea0lDKzpyTG9pO3tsWFAsbnRPQnVVfllFNEZJfEpBe2J4V0pYa3Z9U2NOdWhldWs7VEpeZ1FzYlNKPWBYUF0wZ344Sm1KfFo+ZXsjOCR7JWl9bFRtKlVV'@;
put 'IW57OlZ4KENlMWMsbFB5TEBhcHBuPGxqTyV2NHBKXzQrS3U1V0NZOX5DSVRxXXZndFRYZWUxOCQuPXR6PEB6XztWKyx3YDhKQDRzXmNPMVtzSGZkUFZyOTJHKSxXRTssQjV5QmddQjNwPDQwXW9+TzFFZnREa00mOl8zN01XemdHcD87TVZNQ0xoe1B2K09UTmtRWjtlXVVIYkhMPEl5KC9gKWBZ'@;
put 'bjx7azomd2xUPThydXBHRD1ZaE13c3pGVyJbWzBPUCJoSiNRXl1wST1lXVckSyNVTUgwdmxVVXQsZl17RisjKjxTZXFVQ2ZMbzcmP2p+fVU3YT5EYWIzbjNrbnJRV0dvSStdQ2oiRTwjNik+dWFdMG54dCJVY004I0RXSURwWmx9O3V1WzA1akpNUUQraC5JKnQhdHxYUn1EbnVoZCkwYDxPcHQ+'@;
put 'e21CKyIwMFdDMD15UVI2MVFzc31RM2tecEwmS3xWVVlKcjd8NUdMfGhUKGNmOjg0a1RBcDlFMXM0ajsxUjhLZDtaeHp7aE94YVBDOENROiVwXzUzWz9UQERYNnQ7d1Q1Z2J6N0F6X3tBIU9LUDBqPElRSFZERD4uLFlVKV1MVy4hbko1aW1xSjgpTkVrNGNvfGgmQ0cpa3AlIk40ZnVhYUdkbyUz'@;
put 'KUFqX2woOlYhU0s0RTkmeXE6NGtrNDhfKmBrMTVhc2VrUUc5TWApdlEhTjM0Ij84YmlWe0VlNm8iRF5tUEhGPFdAK2k1RV9iLnZlX1FxdFJVSEpsL31icWFVVXAkNXhnW1R2Ry5be1dQIlNAbURvYD4uZyFqUHxrUHJCdXlJRyF8SC9CSXtwM2d5JGl2NVJUcyF0dUp8XXc4OF9Ubl9VPWh+YiJj'@;
put 'SSkwaDtbWVtRM24qW2c1PShbUTdHTmV5aEFDVTJFPkVefVBIODFSbypnUSMvJSk9QHxkTFNyOzc1Kz9GS0JVJUQxUFNANCl1TyREPVNjSks5S2dlXV10PTVbMV5SMWs1OnAhNSJXdmglej1YfGgjQCRwMnU4Qm9xJUAjPEp4NCk+XihgLGpzKHsvRztRT2djKV5YTltdIU53bDp9U2whOSV7MVtq'@;
put 'L3JRVFQsdHR3WXM2N1EremRhIWZTU3tyZWpsZjdSKD88XmlzUWltam9Xe2dVRHRqe0Bga2x3MUIpU3t3bV9IMDxkQGJ+citdaUwjKWpOTj5ye29yK1NzYE0xemIsK2R4fDJEcUZaMUl7JEF5JHBrKUVXMylKLnc7OilVaSVZaXthSDN2dyMsMSlSUWorNDBYK19FTkVfe1ArMnNyL3Y2UF4ld1pF'@;
put 'MFNdQU5IOm03Vn5+RU85JCQxK1RaXlt5NlM+IkxTaDJEYEN6cEc3RSpWQk1MWTJYUSo6YVVgN2w9MFNQZFtwOmsrW0tobElJNUlkJiNdLyZUZilHaU01e3lzTUhVa09td3psd25Ibn1WZ0RrVUZpNGBZUEp6cFdITkg9TjR8d1FmOmc6fUd+YSU4Nl5uczh8JGlPWEk6U0ZrN2p2Ikt3Yzx5OyFi'@;
put 'eiRXZjdHNzVbbV8/TGJaNDRHVHdbe0ZyKmklbXUsY2NrdyhKd2ZTPTRUNTMkKGEqdTA7b3RReSgvLkBLcms/K29gVC5vcmtlMiQ7Nmd4ODdbJjN2NkFpVXhNZj1mI09rYV5FYjI6aCVPWURqVmplbWJPVnwhOEt2bUx4SzIhQ2hSXzJkfSgybE9KckY0PWAqMGM3RVNDYUB0KShAMz42ODhmRU9I'@;
put 'VV1ZV2RJO0dOKS9jTWYrQkBxWEV0OGVxVnluMWptNWJAZH0pISFzRlUyMzJ5am04Pkx2NjtUZFZsIUU6RjsmOyE8ViRtb0prOC5gQnlFUUhNeTpwLis0USRreiZaPFklL0gkY1NDel1QUGliXVltVyZ+a1AuUD5VMmRPXU48WjEoQH1iOiR7V2txJjFjcj92TixsM2YpJXN7STB+XVJvQj9Tb0Y5'@;
put 'RjtvZF9QN0pYNFEqUCk4bjwsaT9aPFs8JCpVekcjTzNVfi5XeVJjfGVySFt0S1QhdERzUTZzWkssfGkkR0w/LG1tRD8xTGwyNShoUnNzUVNYUl9fZ01ATVd9PnQ+b3I0IXBGRWlqVnksWlF7O0xlc3R9Wz5bdWhKJi99SFJjfipVeV04eFtOfiRvYlhRcT1lJj9oTSJHZikrd21nITw3ell7Y21K'@;
put 'TjhwfD8yQGcqaGY4QTciNlgyREp0UDhQc31bOjsvNkh6PVh9e3hrZUJ3aDI2fXd+fkQ+WWZ+dTsofEhvZCQ4dmQkaSl7RlZ6YHlZIVRwOkYzbUBIMlpgWklZUTZ6OVM4SHRxXXRKYjtgJGpMSlU6RzVlOy5DLCx2bTNoYT9APm9JPk4vOXBefW4mPV9gc3BqKnRlS2JlYk14TygqVFlEZyw4RV0x'@;
put 'NGo2ay46VmJaT3ljXSxeLCQickA7T1swNkJIOjcwZ3tzZyg/Rlo3bm0vZzNse21xMzUxNmE2LGhxKSg8KGxmMFM9LyRaJnYsKUl5UkxAWX5pRWdSImkycHxzWTI0K2o2KypxS2ZSaCMhfjUhXWRqRk9dPz5wTnx4VlksJT5JRW4sKShyZ211dlZSZiFMeTI/VkAqaEUmazNufncpKEZ1cXkhVFNu'@;
put 'UFFyWzYuTkhnXmtTQG1JWTwyQkd5P31lO0AoQk02Q0VGS0lme3FBTHxkMmxtRWoua0B6KGBLT2srSERUZC5mZD9+PldBPSh+R3ZaSEh1Sjk/K3ZWKXJCUyxBMWZvMzg0cy81XTw5XnduVWZVQWNsMGtuQGtze19we1RxT31pdjg/MDZ6YEVLT11pc3FKTENheiwkMFB5W1V0KlY6cWd3RmdCL2Mr'@;
put 'PFhjOnxAQEU9dV1mQ3t9Nzt7dHwwPkZqezFxKmssKCNzWmMkczddflIxYkBoaTRwfjxiUGxXKEN+K2BWbW5iPnQ8Q2JGbz5WSG5ONzJKWzE6JldPWHFqdl1dZGsvfD9PPG9oL0dWQ3RWWlZdV3F8Pjt1PzBCUDJwQlprPHdaRTZNeFYoT3NeNWhHO0Vve1IsJWhbSW5iM0cyaUthdzhnZGoyeGNF'@;
put 'VnpqRUZHWnA5QiJtKmlBITBrbTw+aTZkJFBNRCZOZGQhfV8ubzNAST4+ZDlpQGRZVUgsRikwXVkhR2R9djRaJVphUD8vfSRIVS8+TiJCPEImLmk8Y3dLKiwsRFlvRXd5PCRpM0lhP19HWXZUfTNedCY+a2QxSV9CaHQ8MHp5LmZ6cVhubEAia0k3JCN2MilQKiFFemJKKVJNPzoqdiFJXW1ra3oy'@;
put 'Jj5GTWVffn0jdXVwJCZMay5IZEFMWFVDLzV0dE5PbXJYJFJpNzFlTH0wZGVCI2ZDKmc0Ij1FSl9yQ2R4PCxNSmM8QFQwN1YoajVuYzV2Xy9gdEZwO2tZcHRzLjJ4UDNBM0JwbSp6TE9vR0gmcHV1PXtfez5Raj4vJCohfGxmelMpTUJMcnomaWJpXm40SjE2MWNtXz07JX5MVy9fIX5vaV1DN11g'@;
put 'W3BTJEJJelBZOl88JkYlbyRQRiovRkt7MXg9Y31ISSJJIz5SeSoqY0lkQ1g8KzwmPDloKH5CS1EkMlFyMSpkPHZ7U1owOjdZfmV8QHU2biNjSj9GRVRaSzt7NXBZOExjRF40Zi8vIVhIRVAwOHE4UmhoU2JIOlFFdVIzS3V4JihdT281YTdGcnlYWDFPN2tyPSR1ciFSNmk8X25naSgkKGM9MmBY'@;
put 'WyNmVXc/cSpLYjdOT0hkJjtSK3tuQ1N0P2VPXWlPO1pHXWpoNyo8anRHZWhfQ0JxMkU5RWpmNSNiMm5YZllKYyI4dzE1IjFhSVNfLj4wViY5cy97Pl06fX5mNnExMVVQbjJwI3R+ZiwuWHspLC8yISlrbVlOV1B1OCo4Mk4jTy5zbT4kQkBwKUEqT3lodldnNlpYcUg1I18rQ0FQSk80V1ZWdUk1'@;
put 'akxmQG1eY1MuUFEiU1VWdk1FeExMWm5ae0Jyb2EpMH1ucGl2KFRnSlZOPW12ekgvPiRgXWhaMi5eRkE9Rk54ZV1jSkJEYmQwZm1RYHIoeXYoXyVEYGp3WE5WL3paRyx8UjtNNlNiLFROL3w+XU5FSlB1Lzd2VHYrN0YhKGhnU0Y6XncoOUw/JV9TLnF5NCFgS0Uid0w0L24/XzZxKGtgMCRfSyRv'@;
put 'LCpfaWlwK1ciU21aJDU0dzZWNkJNaEI9ZTRJQihARSVZOE5OOFRFTVtyOCMhV18xWFIjLE1baHB+UXc6XWtkYHV9azNeREMjMGEyeDdWc29bZTxZVX1WUHFQbSkpOlpPaiFeSW8lb3B5SmhCNmBOWj9kOSNsa2RBLEZDLjoiWmdYMFJ9WFpeRSVOMCUjLiNCUnZQP3RFeDAyNVk9U0JdT0ZRdlZE'@;
put 'QUQ9O2F+dmZLPUxrdG1he2pySkQ1aG1AY01FQj1zbD5+Mj5ZRGNBKTNoOzAybyI2OUA8bDc/UCNVJlJLLmlJV1hDVmhsLkhQfVZTOUIuQjtBQlJeRDkqTTBpIXFJSHNadHUrRF4xcVNZeV4lUER9alNAX0VCfjl8V0k9Q3hQYnlBRDdbXW54ZCxzQnA3YFF4cERnTi9wUF1nTH55U102QmFncGJK'@;
put 'UVgqXzA6THV0JTAvJGNZOHB3SWBCQSFRP3s3fGxjcC5EXSZjOyg0UkkoaylTTGovWys2e01GZjV9YlRfSVJIcF9oLGQlTGZrc2BpLjV9aktKKWFMS0R7W3ImVkN8cH18QShoVSVzKWk/djs4V0kxZmxzSGQ2V3MmfEdLWD9keHsqPzEqYE0yIVBlQnskMitbNlQ8O0dvV2s4dU8xWVhmfCJlJX5n'@;
put 'WVF7JUlCIlQ+YVBUe1E8On1IOWRUUlFzN25MK3VNXWJwciY+WVFbZGJ8bjRzW2hCInBCOTNzVzdraUsub2tNLDJwWGw5R0JgYmNeeCNpQ2ROYXA5Kzcjd14+MWl1O0ovVEN8VVFKRF96TDxmP2ZtTW9ac2BjNF5zSVExUDJTMT5bTV1pSGZuT3t9Skc4ZnomajZqaXN7azM8LD85PEpZbTohSnpb'@;
put 'ST1iSUV4bDxsNzhVWlQ3bVc6ZyN8bXVhO3FhPmwjVD9QNWpHVi5FSWc8dSReeW4veS5XJmJHWSZ6cnEqZGhlI0JwYDMxOlFydF9bSmJIRjImYzpUJHgoWDBZRnV0MkJLPDlDKG89R0B7ZUNncURAUTZaOWh6O21iS2hfb0VuMk5TPi58Tz5Eeml4aF9NLHoibzIiPmcmTG5WfHNaJSRASypEe2FT'@;
put 'YFtfQlI9LHYqZzQoYTk6QjdqWjxYdztgIVp4amE/Q3A/UmlDW1BuWlV9THRofmhdUSRlK14+UyxRN2oxWyFsLiRvRltOdk46K2liSSNzXnpqNjhTWDBnXlpbWWZpc1V0ckd6U14hSyoyIVl5e2g1RCNoIStwN1QsJC9RTmFkM0xZaXl6fFZLYT9Oc0t7X1dZLD0kMGEsVWZWVCZfdmRIQ0hoWXZN'@;
put 'KDk4RlNCYldsOCosMCJDbyxkNF94TnAjQyxgPTVdaDBIZHhRVV5TYH5nKHQ7LHMjdiNfJEJTSW1rVHl2eiMlcUg1Pk0vJXRrN1ZGM09BREIzSXoqblt2SzUkZkMocmM/PDVkTDUmdCUsZy4rUTl4ImkreVgoPzRdJVsxI3xadm1mQSFPYy8yM3hhKn1nTT97L3MlXWQsMDE0MihbbDghJXJQWCgj'@;
put 'Tm9kNz41KypLV003cG5PMklDPGA7YEcwNkhgWEsuWiwqQ2M6KUs9QkpDdG9JIVlLbGl9djw3LGZzOzNoVFZRKXJDVFkmWSJgYSJARDBqSC5LcCI1b2FvTzY1Q3gjRHZDYkQ9ZlB5W011NywxQX5RNj87dlFYVSRAfXpeZDdyTyhOXnt6OyN1b2RaRmFFTTlrZDBlbEhAT2F2OVcrJjU1QUY2YHNR'@;
put 'IjVfSnM4SHZ1PG96NGN4N3JzcHBXJFcoTF89S2QxQ3NpRnR6aWpJbGtsUyJWbEZwJSZDSF10XzRqMk1te0lbdzM+PWhlKVVvYiJqXz1XZTQuVkFAVlkqMCVrbDxLTW1mPF8qcCo1amwmJm8zQVZMOWs+fWgxY3tNTm88cUhBPGwuPzR2Q3lUJipJOSMxPnVsfnpaWls8YCIkK0NULnY/b0l9ND1r'@;
put 'VF41als3dyo3TSxnTT14Vm50NEtQS1h8TCwsckV7N1dDJHNhPWpGe10jcEp8PVFLPSJwZ2JSN2pILCpbPGYwMzt2R2hpaGJgcVo0MVRpSjNsa3EmMGlyeDReWmY3OCo0d0l9Wn5nKUR+di5aPSRFaEJYZExFZSJATXpLd3VVe29YQnVOeHg7P0szfk9fImM2LilIczxOeX03YkVYbDZNVGQrekJb'@;
put 'dDtNNURZNzRvI35GL0FGP1RJXUIrYz1rUFVgWilAKissd1ltXUZvP0ZzOz5mMFBkNTZMU3srS0l2eC9pd0lIRjlAXTJvLDo/PlNfbSRmcWV9JFdmfWpfezIhYGp6eFUsVW5MX2FFYH1URT5hZGQ9eVs3N3tRJl94LmgwKmErLlIzdXViL2NiUTdEPytaS1AlJGZdbClsM2Fpa3UpJEF3c29kIU9D'@;
put 'UnwyMFZBdVpkNl9ubCxaN2gvTj4ycVVqfl97JjlWXz1yWEQsJWJjVEsqVUdpdX0vK3FSaEBLOjxOJWNvKD5ebG5jYV1iKjh0NXkxdiZyZHEzcmVLUGBfO1slJW0lUSRdbyMkQGd6fV1tak91e0puXTJ6MWRPY2RpITtoLzQ8O3BtcjB7Jm9rdSI3aUxQbH4rLzV9KUp2YmN8dWQhajd3TVsqI1FH'@;
put 'LzpURDMsN19oNHh0cCQmLChDemd0RFtVVX01Ymt2IXo6RjxdOjgqcW0hTFNRemsoOEpSQG9fYF9YbFk/I0hwc3U3YVkhXVomZjVeLkVAbm50W1Fwb2x0K0UlIXElOlM5NkBtYU8yUCt2ZWZmRkArdSZ2Zm80ODNlJnRNfHYjSHUjOSpfJFNHNGB7eiw5ZSpsW1FHQDYxfTtoYDwjfkpxY1RSbCF6'@;
put 'MiFSciQjaEtKLl44YV9PYj1xVSk/QE9fKGV+M1B2JGd2aEF7c301dTghc3ZRbjQwLmd5eUpJI1k2LC89eDpudFtPZkVMeyYjfDdEYyNpN15FPXwqdTc1cHlJaCopYGZCSnUkbkdJVCU1WG16JmYhNTxHcERPJk5XUyslMytnN3lwX0tGQEtadVVwMSJ5b3c0ZnswUW42cTBNUWQ1Wi88YHl1ZSo7'@;
put 'K0oiZDRaWVFAI2xmdkMkOmM7YWIlJG18K2hNOX4oSVpPd3BKd0Z3QzlUMixYfXxlcUQ8ZiFtXyZATk0qLEolVU81bWFXbHh0Y1lhLkxhJVNnZ0VSKEtXeVcqRTwjLmlNdEUqfWhrPCVpVkJgP1tgRCNRIXx3TkhJO2tCaFF9cV0pWEVieldFO3ZLL1RwN2pZYSEwflFtKWgmOjVVYndIYHk3Nz5D'@;
put 'b2x9b1NbVls1aXxTLjB7U0gmYSJTSCNiKTtqNEpYcy5Bfl5oI0ZWNCE3OXk8ZykyOiRmKiRJS1c5e2ZDK25+IUZvYVYid2IkL1FeeD99XlRUT0hjTDtbeTsyWUh8UUBCX3JEQ150ZFQqLEcvM2c0Zzk2fSVrSXpKL0xEe2JzLHt3N1NncGp3eyxeRF5+Jkp9bF1VXUhYWGZ4NmVpb0sudztTTX5X'@;
put 'UzNFXXJvbXRxYWtoKHg+S2ElRnhWSVI5T0JvOk0ocWZEdX1kVW9OTzkhTSZ+OFRwXUdEP2d4cFAsKVd4OSJxZ0F6en5UNDxDfEpEWWlHZUg/fnZ4YD13RG1JfXRbQzBecGI1aXlpJkRRXnhRVmJRcT9Iezs7W10rMDMpLExFeFlVImA2LDl2U0tfZEhOZFRqOl16SDUqTz8yNnBqSSNgeUApP0N3'@;
put 'PnoqcS9JKUkvNC5rTTJNMyx2dy43VVAxVWR3OGhUMn1+Yl5vfSNWRjJCOEZyaSFXST85IzVXTVtrOi8yTC8vU317Q2J4S09QV3A2bz1tYG58fnRMZGhwbj5KemRbRkNXO0V6Sjw4T3Yifl4pJkg1K1NvNzpdNVVkWWNgQnRfZlBnSD16Qnc+I1dxQlBWZTR0O1ZAW3tvWUpkSENeQVUpS31NZWNU'@;
put 'IyNCOEVrNEZyVEpAV1dXJSw0fml3Q1trOGd9VWtGLzZafHRsLnRFTUM/KXVnYXpKMl5LJXZoW25CakdjXSMoYkNAKz55SWZ9aD5qeD41d1khXUYhelZGO2AuJHVuaVVVUDxGSihtSGhaYiJKZkFuamoyYERmdHt2JEROYn1ILHRwQE5TKkIsRl18cV18UEd2JiNRKTZFb0ckKEZdUXF+L21pKSQm'@;
put 'OUhMTWNnTktfQUJ6cjpLTz5xQVVwangybzUoWU88Z3t5IyM9aWxQUmB8REV+dTBOd1JSNUgjRkEkMUc4Zjt1W2dOXTBffWZiez5sYHFBVDkkaCM5XSg7QltuMHQiPTZhRStCZ0E4aiVhYCliYlQ5JFpyPFVFWXJaLlRPfVJuV3sxbjBPVHtmRDNwakN2IXp4M20yPS5JYTNbNFlMOCRTdXl3MF87'@;
put 'eHwoOnRxKCo9R140XyVeZ34yM1lGKCx+ZltlSVZ2aHRNckR3cn4jdVR+I0x2U156KyJCYlQ8TSZTW1QwKlZ8KihRYkpWPUchfTVBdm99OCU5VGkvUX5Pa0VPMyFjR1Y9Y30pTU9bIXJuUUZTNVBlS3pSOzQ6RChxWSleS1RwPH4oVllWSSs4TDlGO15MRypGTiFwVlJ1UDxSQTRiNk00NEkiOVIs'@;
put 'JiopUHFEclI7X1IkNEMzUkFHP05ueHIxVm99e3dFNlVHfVkwe10+PG1mcyxlRzR0Q0xVaXx7PCpDTUN5Q1AoZkdeWU1daHs7UXdqJXFeKk5JNHRkY2cjbGwpQUBeRmJKd0FET2AzN2BxPXt1bDkmPTRpeyI8SWdvRkN8IVkmKlBZTn1+OX0xcFZyUDRhJSh3d3hpYjJxK25aMGNXdHduUFdfIltw'@;
put 'fGJyYytWfFd7fG9GPXZVb0dxb2I/UWVmM2F1WUhjPDdZcmQ0TntoOSYwZHlFTXl7MlBKV29kTyFhO0h+dCY/VjZ0YzovdCtVLkJubz1xKDZsQ1RMSEFYQGZaeCovRldyRHVJbElQT01wRVhuNzo2UDpHMDZWOCElZihgPXtQdygsbSZQSWFuWy8mcis9M2tgP1c5OShLOmBJYUpSWi58WTpqaj14'@;
put 'WiNPZzpMNjkkPVZBJlZmM3JTNWR8XnRjOlI4NEt3Ny5zdTZSWzJaV243ZUtidk5WRzZqSCI3NjI3eHZhRWo2cmltZ0hUSzFkOyRwTktFI2ZlJj1NTnJ9Kmtqa0I1eHVCPW9OSyZHekNOXyk2NywpSGV9XVFKdF57UlApLn51SSN7LzM5MGNVRHpoRXddVi5UbVJITnliKE56ZVYoUXw8czlFeFpb'@;
put 'W0JRTTJDMGx6W35fcE9dbVIuJGBGbFpzWS5ATmVvKjU2XXpFTyFoJlVzO3gyRTleWEZ1O1J1LnElWkxbVTNwLyVOdm1zJiIzcm1TQCt9NioxPmF7RT9fc3xsUzR3eyxQeU9oenNEen0iWFg6MXdAVD5aY3tiJF10OklvJlFMNFVVLm9wUVl8WCtsW2dIXlBUeyQscTZZfmQvJng0NyNNMnkwZVBK'@;
put 'UHI4YGJGXylmUHt5aCghOlAyIytrbnJpQFAwXUwvX1l2OSlfdj48YUlbQGtfe1AhUzUwX11KY3hOMl4+VktRSSxGR2tmSzBQQGouXkU3XzhbTFAzKCxQWEVUdDVWaG9aVDdwM0U/KDIlXSpsaldlQmApWXdtP3oqfU9beF9beDtZJHo2Ky56dEc7MCNBTV8rZT1vTU9jKGR6WX57L01DREJiYFtr'@;
put 'MipjIiU2VCZRanhGZUNkcnheUn5LYXpRamc6clEuMkJsU2QrayxibHR5MmBFckUxTTM1NDhGckNSKTNVYUQxVV0vTz9qe08hN14xN1tFXiImfXRsP198T2s6aG5SOileN1FNKXllcXowZjlmVFkjKnZkXzcvXlAhbm5afll0bnAuNmtUQHglcWFmKlAhay94OS5fRUVGSXBudjF3VXhnKHFpY29l'@;
put 'QnRWelRoR09tWEw4RjR+eSt2MVNWY0NVVVJwfG5QYyNSUm5CUk89cHRwV2ZLQyIpRm5tZmZpVWpfNUpEN0NFOjw7LmBOWFl0a1V0fUlqLlY1ZW12cX56MXYoYlk3V0wmbzBGeztvYCR8eXopUXtpcjhSTUlJQW02VXsydT4ibm9wK3khbXIsO0swOmM9SnY9aXRWeCZwZX1oYyVHIStwKGh4M0hj'@;
put 'eSJbYFtFdFA+ci9mNW5ISE92bmhDLCJMPihVfntIenoyLCV4dWopZlRJO2IxJShgMU1tWVp+an1YSX4mRW5PZz1bfVJIVCFKLEFMLn5tNngwYm0rTnM0MVZwNVg8YixzIj9Xa098Pj82UVN0SGgkX2lQKD9hUW9vSExGVS85V1p3JChoKGVAYmhgQlN6cUg1OVAiejlPKTopdTw+eTsza3l6UWxK'@;
put 'S3pjYW1uZyJnezxLOl15LyQlYH10bTA0LFtReCJgd2Q3SVkqUz4pUF5TbntMU19McmskKilLWEUpYXFfcD9uXXM8cThCIjBpPyVVSVpMRTQkOntyOFIwYS93IXc6Ll97LEpYOVF3R2tPPnUhSldkUmArQ0FNP1tRP3I2KTYiPiZpWil1Sm4yY05id3FyUVo1WkNLNzMxQS8hdkE/UENlIXpsSHIx'@;
put 'KzpRPT9OYUhFeDA9Q0N5bFN2Lk10SEB0MkkjLjN8dzhWZV13dWZBU0dJOUNmNjp1b0xqKTZ1SGRATGdFKih2c3VxaUlbKmdedF5QYWpRX3RwWCsvL0NaU3VXV1VBMjQ1ez1hI3B5PDhwI31MckJHJldSRiVnK2FMWl0+JTMoSWcwYHN7RDFSZiIhSzRzbmN0UTpVMnM1WkVrZCNxPW1ld0Z5Mipq'@;
put 'LHV8SkddYkgiUXN2Klg8Jm93WH4rdD9ua2lHL0U2blkkKUhSREQ5cHJGSzAjSG1tOWssREAhUkF7dXl2T0IrTzlFIWZ4IiUudkV9RlY7XntPZXkiWHZaQjRuXWgvWTppIzh7dWciYDY0OSR+KG13MjhubiMrVENtdCNTfVs5ayFhNytrIj5eRTE0SGo7MUR3fHFxN2JpXUg2USZbPGRfQFNmfiRj'@;
put 'WzU2LG97NjBQRTJTdTUjJkdFKmVVMkNNalFXfkNsK3tjWnhkMmhAeHNWQThSdSl1NChEI0YoWzl2clMkZ2UiWWNLa19RbzRwbWRyMTlsfWFKRipHJFF2ZT5bNlVsa0NNSG9DM05uQz83bjdtUSFwR3FJRShQOzskOCpIMzg9K0Q5bGtabFtYSFo2VVU1MjJHSzkjXUcsancvR2ROPDR4Z1o/amdI'@;
put 'QEx7fjQ0PU1Iay9udFhBKE1pJmVHKVtxfVR1MTVbX1JvUCxEPy86Xnw3VCE9VH4xbH5fR0dPJjAmK1hfMll9SGhGSCwiLH07STVwI21mRj17WXVCRVM/aHJyKyVde0FqZFlrTUR5UiwpMW5TPjpsNUVkWW5MTl9mJD9JdGx8RnFRZGpMK2A1c3lXdzE2aW4xW3JmfHwpfmJnSXw1QC5KRld4e2ok'@;
put 'SyIlJmFUbixxIjlPOUlxZSxtVmJ1N1lRKnk3a1FzRnA3T0YiT2AyIlltLH05N05uKShNP1NGY2dSZEsmQ2A4VVg/TWVxZEg7M2EhKWF9X1MucVNkUXpUbkZ8Mzd8W0RrOFQvY0NnUzRUJmNFKSp+am9zWFBPOCR2cVUjIz9gPyR6PkVWcWl5VWk3akNhT0NtZ1F4Ni5qMD1xUHpia1ciP31GQGRE'@;
put 'Xzk4QnI2OU9mXltVMDk2ZGZycz0jN0NpWmpwL21CUjhaWSwic0FuLEVaZE9VbytyPX4rWXZ7UzhpSFZeaSZkV3tbKVMranxjbiVQd25jZC5jUEQ4ajYkPHxYPEI/eHpzOUxPWWh2OWxaekpBcys2ISFATGtOaF9IVldpIWxHb29aT2UsPVU7KlNVN1oxaUMmJG9ETGEseEp4VShEZUpgYTRdPC9L'@;
put 'LmlbSTwhYi4yWDlXZn1Ja1hfP183YlZNaE9CaTdfN2ZeYSxjRjZAZXk5IUlEKWcjIkwpdjhVbVRbfiMmPU1rREk+WzUqRWo4a2Bkc2J7OmVVJnwvXWl4R3VfaSQrdDJgbz86ZD83NSRtWU1uWktvLz9VdFc3JWRtTz1FQ0plXU8kbyNddFpFMS9DeW4zXjlJUlZ1Y1VXdTVFM0Rzej8vO3g6JHRM'@;
put 'RzM/TD5ULFpKZDdBVStQUyUxOE0vXjl3NCFpUShAKEZNWTFId310Z0pMNDQ4bThXdCM5SmxrZWh+aDxYR3guTypfX2NyaH1hNU5NNlYjc2xQaSF3YHJhaHVXYjRLPi4kZig5eC90VGRRIyROWDg9KVovL1EjNywjIVk2VzYpZF1jSW8rfShCOHskSlchTzNeNnF3d1YyYkVjc0ppWWs5ZjBjV0Er'@;
put 'RCI9eGw9Mjh9RE9MXltnbzRbfFNfS2h7KU1Ic1VgPDNrWyhNU2UjcF5qInJObGkiTFkpKUNWVCtJNnI9M207MGZlQzFJeTYjPmVjayF+QGJzVWtTL3oqJSZ7XTxhNC5vY29wIjVxMSs1dTwxenFvJWpbUmVoK3RzQGBGRkQ/KiV4UlU0RXkvRzNGeiVfbTk+d0AsMENFe3ghZmUsUnxLRjhHJHB8'@;
put 'XVo/bTEqO2VLenZ6I2BtUWhnM21ufV8wXVkiSjwrKkZHQlZbXV5GTiIqVysieWQ4SEY9e3EzUGdWKVsxKlZmZXIuXmBLV1diJWhKcjArQjpvXTIoSUdXd3FhdHluN1JJPj1RcjJ6aSwoV3NmcHw1aCZRTXlRKF9Le2Nifk5nKUAoLGJvfEhlNHVGInozeXNqdEJEUi9tYVVLVyNXfWVyfn4xWnwi'@;
put 'Vnw5TDFVVEhWKyg8JWZ4fVBkZC9IOjEzbHFRby8sREs7eTpKeGttQVFWVTx5bnM3L0UzMWEzMSpFPixYdzRlOjlpZzg9Y2x1XTlMUF9TKncxZDx0TFthT0dHOnovUyo2bHAja2kvM19nR0VIdCNPYFN2fHQvZltVT3E+USp4Vng4IzB9VEpYSXwuNjEifnpqXihZSm4sWmlOWW9WTGUpQ3xkKDRC'@;
put 'TC9DblBDZ3A/d2FTRVY6diRvbzojZXdDSmY9LFFLWUgmTFh4YHYoQ0dUYks2ZFh1OX1oTEhwNkx+aC90clR5dDx3Mzc8KElTbWIuMFdHTFg+Q0dOZkJxflJISXhlfEdyTytpblVNeGY/R3BNP2JbSUt4ZFBdfCJWSj1MeURAKyEsNjdFK35ici9FfmghR0FPW1JkJGJxQHBONzVDdygxVCFBXmxt'@;
put 'cCw9KWwvNVpHPipwMl1zOTpQJiE/ditdeXdvRG0kNUh9bDkwMj5ANlE6JEx9aDIwPGQ4ZSFsVixJZ1FeUVlrLkpMNHBmSlF3SXFVcil7R0FHPjkoS1lXdmZvKlM8TjkmKlZzNHdiRH5uclpQWHw3Y2g9N3ljQnx2TjdqVmQlIiEpczwuMF12R3pwNFhCJWozOnRqe0AmZU9sTG1QImdBTXhQdGww'@;
put 'dSVISEVDKylna2pxJS5sY3VRVU9QT1JRd2cpW3VwQlB8MyRWVzE+QixzM2NwVV4jJl9vLlksLmglWSFGNlJedilTI1pSQyVmRCUwP00wKFM8PDIiTGJ+Oj5LQ0Yub3h8Qm9PP2wxbnRnVVcwOn4lIVBuMFM5Q31jZng8QnBML3MiUl8vYzZiJlhkISlQJHw4WU9XZH4xSztkVj0iSFFMfXIuYWM5'@;
put 'Nkp3aGtPTHU+TylyKTw0P2VHcUFddSxwdzBFWmkja0VOej9EfXYuYkklfTlFc1YrK3BLM34oZU1qP0gxPHsyQFE5fTdCW2dVQkYjXVczYkh5aUdNVjgwOmE5OlJdJG9wX3k/JndQKkFtVj9UTCNfNjNXaDRBRlFWR0RPejVxRU5RJGE3N1UxLDJCL21KeEhzcmt5Y2koek4zIU1NTjpvPiM7ey4+'@;
put 'JVo6TTNQelU5Qls2TnJnInQoX2A6LEROeUkyIWdYdyl+PSleXldbSCg3bCRoOFAsOzN1IzZxPFo7KmRUVSkvInwmXWA4K3ZFKDFYT1pmYCgqOEpKK1J8R0VsJkoyLFtPcUspPSVJMGZrWkU7R2RfS3dyVVtBQXUqczJKWm9XOil4R2ksfThhI0hZXU9CXy8zd0FTWTx0NCNKJnh7R0hlcjxrZ3Qm'@;
put 'VTtDUE9uK10sTkJtZngoJkZITzU7NnRaKyw8dERuYFk7c3FAbVpKWlM/aks/fjkpbUIqOnRHeHdwd2RDT18yY1hUcH5xez8jciZDSEJ7OzQ2JGd7aUBjZWF1e3BePiR2WUlzfmlRbkVtWHg3YjpbRmM3SWRwfnQ2LyVNLzBbdSUpMDpYWXdzTl8uRiFkJktGSkkveV07TCRVKlRxfTZeNVo8WlJr'@;
put 'O3tJc3QmJFNUSExZOzBiXjZpPzpIdl8kYT5hZ34jJnlyXT55JWRRaUI3RCxlRVtuWFh5SVJARm9aa3VQKU9eUmU+UXpiMiNkRVp5OEolWUpUTiVVaDkxP1tLUUxJQDYick9pTEQ5LkV9eERtKkN8cz9zQUlWNjNVQHhEazxPaUdtRTxdUW5TeixvdipsR3cuZUgsRW8zPH1JbXVNWio2bilESXZo'@;
put 'dWViKC82bEs5OTlYeEpOQV4+SiwjIVVLRmlVXltBeXV0NEs+PmlLY3dXIVNZNld+U1h4MG0hPy5CNS9ScWdlTiYjIi8kIXk8WV1DWVhSNyFMdUU9aVIvZHJYRlE1Y3N8NTxgbEg/MUJjK3dVX1AmXTJTR1RTV3AqKnJVcUwiJlROPEJeNngrNGNYdlU5aFpgSkFDWERheWleV1l7NkJvQTVbTnFI'@;
put 'R21QNUpAXTB8OyhPPjRTUzpRcDJ8eEVmdWFOQ1BNYTB9bDI4d1kzUENra2UpYTd0Yk1lKWp4ezVJNlR1emN+a3EkRF5SRjU+eklKem9eYmEuXiI2el9YJnlLKDxNWG8xaVVINltLTzk8YlhVZyJofkBYJGJ2JGA+JFVkPkpXOzpjdnd3czddUENRak5gQDVMUmVCfXVrSj1zOEQmUTI+THo9RUJ0'@;
put 'dSQud3xSdV0xXlBweS5YJUIoT2VlTmdsKjY2L2s7Z0AlaSM3MTF8ZDVOSU99YkQ2KW9eXV1hcTViU0BXNkk8QGM6ens0bmwrJDxJJStzeDE6ai5Rd1JHW1dpJjBUbHR1d2JDKyJ6KXBpZ3pgRGY0amJgXzJ2Kkl2al4seVVjMHtmbTU4L288fkgmXjdtbmdUbUhwe0dbT2B8MyowMTA1O2p4dz92'@;
put 'NWo5bFdfTUlveCw5a2hmZncsMUIzfGEuZlZqO09DZHNaRkVMOmdlIT1WSlZ8O3EwO1gua3J8QUAlYktRZ2tpVXIlXWQoNyFxbilDUnlLPkU4QlM1TD53QXN3UVhJNX5iNUlncX5lfm9NaENMRU9tdUpYMVUpIWh+KEJ0P0deP3F1K2ZtPX0lWHFdUkRdbEk8biNLdk9VKjhAJXAybmFxeGopL0x7'@;
put 'SGE1XndQQGxiPEEqXyE8cmhmIyJbUFVKaSp5Wj48Qlt+PjA+V1FgZyRhbSNbbjo0RzIlN3RoJTp5bTo1OSk1I2dKY2VRd2dXV0dbVFRxS1R3WVsudks8Ilc6e0NEPk0xXUs7amkmXVJqfUdoJE5mITlOTyhITjd6Xl5TbChBSTAuQDNqXTEvTXVDPFJlRDxkUzpxUVE8M3NTZ31pLi81VDhMTkNZ'@;
put 'ez9EdGxYUCMzcGRXbyU3O3QuKTosSHF3Tkd5MGBSP2dKWGI6aSZXVD5fcipiWVh+Lmd+dz1gJG9GeGNSXUVQTkJxeixLezRSZkxfZClnKE07ZGpEc2skMV5hNHcrPlZiLkkyVVBLbFUjRkdUSEs+XiIkW1ZoNFpiXV16aUhzZWVlUF80RzMxdn5ONjpkX00kcnZteG9qKldpXXwsYzNdTU1kUlIx'@;
put 'MmtRaXl5S2Y1MCtycGxYZFAkR08oZnZZcGxLMmJ7YUdLZF5GK1FzdUBTYlM5NEo1cXZ1ZW15LllDIjlHY3U5eig8K0AqU15vM1VSMTV0ZVA1UiNpYjAuVmRxQl9oXllKP3goZS5Za1JwZy5JW2NrbWpsJlgzT3pdXnJZPWZMVEF1ZVg7aCY9UFtQclZdVkxGRWwmKWptR2hKNDRXdStwe2dQNTNu'@;
put 'KDo1VX1AeTgjaGQ7PFI4bUdINmVLY3NAWz1NVGVoZ0lFUUJGeWRvYXJRS25maURmUlgxPVNKMmUvSCU0KXNHeChKTV0qSTUxU3d2XXJ9Oz4zcV0rWkVidnJ+ZDtybj5iR3VpNCNrU2pEKFBEfTgwLGlYbEE3JGxKbCxROnksNU5EeWVgITxASVZ1Zyg7aUpYMC80VHxPTnVfNHRCb2g7a0IjWVNf'@;
put 'LHFzNjopRXxyXUJHLCQ9Qld2JlpwaHkrPyplMCE+azt9QF1QY2YrPzB8S2Jnej1RJGVaQjhJfW5VflZEOlBZY3AuZ3c5I3F8TjBwVWlbei52Qk90MChHa2FNKXNVayszTm5MNzdhLyN0dzxRPCs4U2MwOEtIV1dCIVdZPmp5WFNZTXEhM0BAcThCTjlwTTx1eSJvc2h2IytQX1BBPVZ9I3kkVF9O'@;
put 'akw7PGlIejJGPi5EZ2EsO1M5c0VMIz98bVBlNE9mQU8/UU5dSlE2P1ZEd3IsSURnNzJBMUVoaHVfdz5zT0NgQDghLjsxWT91PENMZ1BPMHtkJTk0dnNdLENePUZtdylDLms0Y35dV2oiKnRsYm99Vl0sTGMqR2RoMXZVTjFlZXMhQ0hgKVd2Xi44ZnI1Tyw9dUF6PDlBdiNodkopYV5hd19WVG9l'@;
put 'eWxUQHEvJkM1VnYxXzE0QXVeb1o+d0E/UGshJjxeWGIkWUtLWUhYKGY+VERCaDU/Vj5vKDJuZ3NiSD8yWi9GQD9kM2hOVWhgMU40Wj5iR0lHd3ZeNzMvLkQ3aE9DbWErc1YhI1NKRFZkVjhdZlJkeC9QfSpDOVJEXzRgaT9bLCVOZG4+TChSVDM6SmkvWnluT35+eG1mSzcscUpRVnxWMCwzRmRS'@;
put 'YXY5KFB3JVhGSDROdVdEaXovZ1FCem44Snd3ckRLR1M9eFs3e25jWHIiN3tlLmpmcGViWnl3K0N1SmJMY25iUm9COklRTnFhR1V9W0QxUFpFfHpHSz55VVEqdVZlRGIjNVZHPjE/P19aYVdmTjtoLyU1MUQyRD16fCxQIXlnaXhneW44PnooZ1Q0LnhQZXEyMk1TbUE7aTxrNE1YVj5AWl4ydHt4'@;
put 'ZHxRKF1vdGUhNjtPOCNHdCljMWFkWksjYU0rSmBhW1BUdDhiSVc3YmgrT19Vd2U2S0BCaGBETyNHWT9vflYiSTdTQ0FaRm19dlFeXUdBZyUhZn5BdHo+O2k2Pn1nVDAsdVIlQF8lU05IYDI4O0Q+KGVmMnl3N3QlSzVSaUFzdC5LODw3cTVRMCVQYX47fDtKaFMjVV9hQHhtS1JDWHBEdzZOdzBz'@;
put 'Qj1VUjoqfD5rcSQwe0pofW9ZdF5NNndiWCVzfmd6ZEYufGp4WSY8V0pYUTdaKGd5ODlkKXNsMWBeYW81Nm1Hb0s6KTphXmZTd3hhMmEmN2k/L3BTYlJ3OVR0LCg0X2daVnRDPkk7S11sOmxKc2U+fWV5OXZveUFHaTQvdmopK3hPbTBJamYqWWlWTlJ6amBzPGM1WXh5RHpFeGkiIUN3XyZFPVEx'@;
put 'Vzdtdnt0NTVlN241SHdxVlFlN0AvJkJmdyE3YkAzPjp6KH4mSzBSLGUvMUNqOWZGX0Eie1I5bUdhNH1nT29fKD8+JTNETjMrTm9ASDMiaGs9RCwxcFAkQmtJZUYlZ29hUjhsQWZoTjZQU1FJdCZGVTFuRHI7Q3BoMUJ6JmlnMjd9RUlvIUUiT0peR0crTVl9Llk3cVdabmh9cmUpbn46Ui4hKV1Y'@;
put 'SUElNTpJJFtVK3Q5WE87MiRKYn0jSkZKMjBwdU9hVFFUbl9RamZYa31ody92SXdyPGdgeH1uWkJhIW5HcmteN2o6djtXQ3h7Qyp+QTQ4fChBJXVkbXFfcHYsUllfMERlOGReakwsSGhWJnFncDI/XkhiWyh3JWQyfSlsQ0NEfGk9NjQyUTR2UXFaX2JZNWR7UnpLant2QH01c01bVF1EbkQ5VCtq'@;
put 'RDlMa1sjOzYqN1csMCVmdnt2Pl9FJXZbej8vLj99KTZNblVkPHx6KXElS3hGX2F7MFNuT0VaeGlNdilLTn0/PHpwS3khJkV6c0cxclk8Q0RHejh9NlZnSFNXYz9CSmM4MWdLZil4Y0Y/UDp2ezI5JWskdVg7S1ltOTV5XnVRY3hydVBkNyZFZVA3UUN3ZkV2RmFvdnEyaHF5QkhybzQ5SCQkRk5f'@;
put 'Q29eO1FIJHVFXmcwakN4MntBOGZURyMxKVJmIj9vRDtuPSx5QlApVTxVQWJlcnxueGA/fF8hOyxIPHg/ajkvVy5OOzBwJlBLaWhNWkJ7IklJbTRaWSIselBDP2NjMldbZXxib0ROQXk9PykhNjcwUGMxYTN3ZFRlTTdub24sV1QmbW42M3t9Slt1azE9Imkpe0ZPeUxOK3Y0KSkuPi5Bd01sZkRu'@;
put 'MW8lW25pZF19ZV9xcD5wWVRHWmtGSCs+Zns+PzM6Iz9Bbz1xVWd6bHFhPi4jekoydGh5bGlEdD5MPVV4MlZmeFdjakFQJUh7OzNzbjN9SSxpSXU8U3dnOzAjSFBTVT1jWz51VXEkWi9lZzkqPzJVaT04SEgyWHlAR0JZM2xGQTNaYHtGNX1xQF5xLn12dEkvZDB+cSloIzFaTVBCaDZmLzA0L3px'@;
put 'Z3xQaUhfMnhWb3R8MF9gKThAQEhyRz1wcVMvaktwTXo4fDQ1SmowWnp1JFd+cGN0WDl9QjRzQmB7bTsoUkNxMT1wdShoRW8keXs9Mm8/aXB1cG06N1d9SlhYU1pJQSV9OVNDdXBRdVYsWHBkS3M8QWV+Sy4yVGhPfUNqR1lHPk9bJWA5Zm1tYXxpZygwK25rL3lhUyI5Xj85UU0/WiVGNnwvY01T'@;
put 'JllfKTRrVSZYSEV1PVg7fTpyeyhoejBGIStGZzpObGVgJjtVMXh2Mk0iTTMxQ1s0dDtZYWJQIWcxPilMVDtIdnwpdH17VlImXmdobVIyfFpMdU5GU2Vwa2RQQ2pqUzVZK2FYODxyLDBrJHhGP3k7O0JLX2dIe3JPejJeTl9HWnpINk8xelJEYi5LbyNndXhzO2gockBbUjtKITpERG1KeyZzZipr'@;
put 'bjl7QWYkVk5FT2NmPCl8eHcoOz5AakRqc3Z4dU1NQUYyZVlXNH1GOXZVfFZaPGFJVDZ0aGx8ZDVkPER1VVs9IkMpKDhKbWtGVjFTfitOOVh2bDVka0Vjal95e2lzciV8eEZdX1AwX0BdYlU4TVMhJj5VQHZ8YChQdEc6KGYsWFppKUExdlNwYFd5Vks0KDo5MU1hbX5gTEhOTVh9XVhKbDArWVg9'@;
put 'L1YlLD9UOXA3RD1IJlF3THhwUSxGOkIubWpOeyx8MU97M24pTDgoeV9RUDZeUkJ9MD41e3s1d3gsXl8iYHRdKlsxYVQpKShAVDpFe3s2WnhFPzU+M1ZCWHJrW0Y+fjFQJTgoX2hqWCZAYHZLQ0w/fHI7LDoxYWVibSpZNlJsRVc1fXojeVlITyE2XlJsendNKUc8K2A3dGxPeT5+RE9KWDNbRHRl'@;
put 'c2xoaHtDJVdHd3F7SlpyNmB1TWI0UHR7ITdGVl5hcVJoYCVATn1SWmMsPm8ydyNsO3lUdF8jNUVoUkd+Rm19fFJ5azwiL3lnUlUvM3xrTDRoM19rcHFZRHl8cFs6QXJYS01IWTg2QHxEPCJ8TlN0K3pLMFQhLyZHKyJMIj4/aD94NXdea0o4b215fHVgPFdsXkpeMzF3YFs8cUR7dyxicldXWVBm'@;
put 'aHlUYjU7c3IiayxFSUsvTXhGJWp4XzhxRiJeciZaPGxJJURnXTAmZWk7cz1vdCJsSldKWHJGcGVGTXtAXVZQLnM/QFZ5eTIjNkBOe0pmMj1oS1NlKGgrYCtgIj9PYzAhITQzJmI3SzRuX057a0x8JWYhaTtpOHdjQTpRc0hwRW1GdUV4IXlVb1FELnh+UyFHSGJEMUl2eWAleko+WSppV281MmxF'@;
put 'InFUTzBbRnQjTWZzc0M8NXB+L1JtRFhuKlsjdXxEfCxHMkZQKGZ2dm1xXVpEOVdaT2IheGhGdmNhOkBxfmlTVyY0Wz50cTBUNiMkWUl6NGdDNCM9Q3ZZOSl0M0hSRCFgJmdbc2JhXntGaEVsczB9aVtCIiF+KFs7SnxWY19YKU9nXnY4PlV5LzZoSyNQS3ExezE0RXpeNVh2NXZ3SE5GMUpyNFMw'@;
put 'aHRncVU+Imp3Pnw7U1BiNn07PndRWk1SOWM+PTtNLFdSIjd1WllgJHkjZy4mOmkvPlhXfjQ+WC9ZVWVQNDg6ODxdVTQqXldbZmxVWiEhX3VLNVpoJS9GYChfLltRfm9HIUphOSFIfk9FWWdGXWpObz5CNnJqP01tQmNjc3cwJSZkRF50NjpnJnZdVSJRQnJRbj5ody99RjhkUUZCMTs/NnFydCFN'@;
put 'ZXhtSyshYWchc1tWdzRuR2whT3YiUSVOVGw3YDgoVVZmTWI+OSpZa3JMNlNrbUtOXm49VFhxYFJkJFdle1QsdG9WWUN+YzEqeTRlOikwSjJnR1ZEcnh5UFZMN3g5KF1EUEMudlREZWRQckFYUjNxYWRATnUze30vJV49V3lSNUBbP2M7fFp2eT5FOFI2fkQ3Ymc3RC4zTC4mW246NEcqcyRXfXhA'@;
put 'ITx+ZGFYOGM6YiZbT1V6enFJSz8yZzshPTBNIztWKyZnY2QxL0ZkeUYrWExzPn5xTH4wdWxrcXEiSyh7WD4wSFhKfEMkenVXfXszQCkmUj11UUQ1Zmd9Y2YoYHI2N2xOWWpAcVdmaC9LWjwkejkqWWM8Pm9tNjdFI000WThVdTpSYDhxVmlGaiJPO2B5SHppeDV9UTJsUGQ/SXJGPDNxb0FnYlg4'@;
put 'Q11VT0R7cDo0aS5FSDlHWDgjPWYzdUVnOXFsZnFaZnR1ZmAxaTVSWDFKOjtfPmFZRkpOIXFOdi5ZeTR+LyhRPSR4K0c/S21qTk5ZYyI7UjRAfEYjX0ZDTiYkcGpLTHooOSpuWVl7K3hxbzpVPk4/MEw0JDxqKl9oVm87Mi80K2BwOUw1XVtCQ3JHYV9bOykyb2I+dT5SMHBFK1lwOTVhcnN6TDZd'@;
put 'Ok9MNi56PTVyL3B4ZnBbISEqOUZAR1ZfQ215Ono4N2NEfWB1ST15fCssdExDQWFoJT4xcXBOS3tUS3oxYFp0eDpsTUk+YSQwYiN6Smo1YUVCM295UFExYUNRc01mWGMqSE1AXX5OPjQkaX5pSlYhUUl8fTkzKG0kJjxDPCF1S19oP3tkcT5nO15ndnBiQ10jNjpDUWJ6WVZZYDlEbk41PisjeiVH'@;
put 'fnB5YCVLc20uP11ZY2tIQCtWfllXfCNyej0rWSoqYXJ1PyIxWThLPkB3NCN8anZ4d0swalB5SWQzMCkwa11Bcn09N1R4QDVdMX1AWUFSQGVoZWh+dHlZKSpEKVFBezl3LEw4M3tNJSxlLH49dlpOM19BS20uNCFeQVgzNVhSKV9hRnJXa3JnWz9QLmw5bktZaXt8VzRkYFNpWDl+SzAobEElU2ts'@;
put 'JH5sWntFbEZnTmVOVW9mKzZEcFdQIXk7dlh5czNJIUFiVHQ5SFA6Vmw8djVqWWA/WkcsZzZEfERHc2FLSyUxa3JSTjZKVUpOVn1wIzt9ZjlXNXQlalpXdDRtKDdqWUVqcCVsQmd5aFJQWSx9LkM2ZEA2aklyZGkjbFFiPiFRO08ldlQ7QzZ9dEhzI3w3VjAiUEpJcWhAJXRaJUVvdCt9M2FXTjdg'@;
put 'fT9RREZDZjEvTGJHKmdjWHtRalooPD45fDg3VVNKcG8xT2lxfDBhcFsxfSxTJENdU29jJDpDRkEsQH50cSplbE5bM2p2QGs3LisiP3YpaFQ+TiZpQSNzYElITlhSazVNInkhKl9HR0ZSUT41PkwuPUxxOEZ9OXF3VFNXREMrKiFeemVLbE1xJSl4fDJlMmZGfHtvK1toQChGeXY/cFdOVVRiOXQ6'@;
put 'Ol9eNlhXby40Uj1DMDBxY2Urdz98ejtUbERiNWd2OUcvIm4/Zkdpd0ciTXZtfU1deGd6bitbUVBnUFBVWiksclN7UTs7M21ZbiI5SX1ZTFF2d1ZlbEs+JEV0JXs8MUBPI2tNe15ddjt0K0B0fTVGQGBmeHM7QnowQ2opeWBBT25pTzZAOV8xVUtEWVhQXzFaZGR9V1ZRVX5kYEtvLDYpOG40TWZr'@;
put 'NSExR2lzJD8vdWxza28rUTsvTV9TUTopc1lgMWYjOHMqbjhROHk2bi5qSngsWlpdT1EkUndkTXAkfUQvVXVDczEuPVFYd0RoInVUXywqZTZBd2Uka2lVXipYW2hdXzo5R05nQ3c2XjV3MTZYWTBVP2NgVT9QZDVkUEBpSFEmImNeIUNvN3RvL1lUS3s6ZkR0SzYvVzZgLEJvK2hOW28zR0xaTXNr'@;
put 'NTFVK2xjOjBJLjMxRUVKcFFtTk1MfCwxSjh5eC5zelsvbFtfUi9OYGQyMC5lcFV1TkY2ZXRfbW14M3haW2ZYaXUoQy96NnNkMyZkeGNgbyZuQSFwbFN3JFlmPE9Eb1MyWzFvRn4qL3tKbnRYR0xod1gwXUlSPyFDdiN1UypwKTtAQSRKJHcsdVdndl8wbCNTVkI2TDUpMXgqdXk7X3s+fl1dYXFX'@;
put 'P1tXQCYjZjgkdVY0bChXO1pKSDxrIzBTfVhJMSNsZz89cjwqRENKMmQsMCVbUXMyfElCNl1fOiZsXnU/dzVzcmNlRzFiXlgyNTwoeWx7L1ZiaGhOJFtWaDptX2siIzU1ZWBMZEZxRD54cX5pXX4kY2l8PHljeyM/RUB9dWFyPy9VVUJiTndAV0tSQ1M7N2Jka2w+JTdFTj93UjllWlh4OCFHe0dZ'@;
put 'ZmlOeGchWD9AP0k8ZjgvN2QkWFhmSUheSVcjTHArOSJhUjR3V1h2RyQ+K1t6dkY8dll8NVNCaXpSfkBxdmVbdnNxaUAwdSx0cmJvV0IhPVhUVmtwUExnR2F9bDBoOFF+Zmo7QlJzfCJyQT0yPTJrYldRbiI2JClATElyOChyI3E/e2YzVGp6bDJLdnZANkN6UmNqKn4wblFrLzVPMDohXkU2TEFK'@;
put 'VkVBXmErSyU4c2BGfWNUOTZWYUw7UiwiOz8jRHFsMyVoUnxudVNndj10UWshckldYzgmTkxIfTROfWlCZnY0ZmVuVGIjTCI2IjFHTlJDO25gSzNdeTo6YiNHViwmOEVXMDpUdUtOb3E0TzdYbmI0L1g0alFsakFdd3VUODIkKzhMdDJFciw5fVtIakBpWEk5bEBjWH1iRk5YNG43Sik2WkAqIzVq'@;
put 'dXt8Y3lFQ1ZUOmpGV0F+TzF4ZFc7fCRrKWpmYDsrRFc2KllsekBxej44IXR2Qm5fRVRyKkA4S3toQkBqbEVOUUovKmEpV3Nqdk0waV5RbS48aFVJcjRgWlJWZExeX28wTi8vbzd8dnk6a1Y/SGlOJV4wdnd8VzxaWXhzbE41enhXeT9tTXMsWGlRPF41UyU7L24zKGExRGVVVWBuUDhOUn19TStd'@;
put 'SlhNKmg+byFWSXI0PUNjJCF3ZX1NZX4qbkkhekY9QU5na1gsTkRuUnBVbiw/MnhTc2BqZGBUWV5EaktjY0NSemwvd2BrW0VTZjk3RVZHTX1hTWdqaSQqMl1WZjIvRGtGcmIhLndyfVB+MGEvOEgzOXJqTnt3UiJgZWEyMkMuJUQkIWI3SXRjd1BeVmordkh5WHN7MT1jaFkxemAmPmxsI18iLHR4'@;
put 'cz9JSWFHfFtbK05CKUReKChbaStaRE8yPk1PQmBuRVdlZ0RpLDx2VHwkTjFEQEpLVHpDKXN4Y3xCTW4lTyg2PiR+YyNsQSZEb048LjMvQkNjb085Y242SV86V1EkSWpQYyZqPmIuSEVmYjtIKkJaLH0saylqS2dSIzUqc0d7YiVyNll8QSQ8bH5jcHAzJCF3JEBsTzlBdT4wJDxqTl91cXFLdiNb'@;
put 'WSNeRFlkXmEoMTgsfUMqZkVeZ1pZPVIxLiJFNmlfeCt7fSwvXzhqQm9Cb21eV19WW3cremhSanY1ZXN3dSVXdC46N3AhcCJ5SXtlPV5jLkZ9NH57an00O3xNYCpMRV1RNHRmalZVfWk3UkF9eEN9djR6eW89TyYkTUtpVClbJTgxRkF5WWEwajtbUDNBaFkhWzRHbmwuUTJPRC5JfVFze3p3RnJp'@;
put 'T2lpQHMwZVgufXtkPTlOPVVDJUh3JnQsO1FLZ3pGK05weHFDcWlPZ0tGTEVKeDxqYiZzbW5bVHVlKGZBRFp9QyEoJUZgcVU8NGljUj58R0BXVnUlLzQmJE03aWFmbEN0UHhoNkpzcHVzc1clMEtselZ7WkA4OSJMKCxHN01OQz97YXBoaE09JTI2VXJDeVp9VSM6MyVDaCFKVn0/bmV3YS52MjI+'@;
put 'TzdtMjdxLlVQNiY8ZHluLkN0Q1dIJjZfPmpqPiZhTz9AK045ZUdBR3A8YWJxaHBNfFlrL3t8I2RaTFB9Wng1bXBbOlJdI2xCeCZJUTxQeHMqOSgmcGw9WEEoWz5DI2xXeCtScDB9Ii9UPXNSe3dAOk5xU24sZjlROGtfeVZPfW43NDRJT0d3Pm51KzByazBFKG9oUnxCSWEpMyM1XmkxcHFlRyFp'@;
put 'ZDQ9PW81bkZoXl1QcShETF1SIjlUXXg2NmZvZ2VUeyRzP0JJYih8Ty8kNS4+MnE4K3tVUV5nVVcsbT54TCMpQVA8Lm0laF86Q2RadmlaUlNQYUJnYGZNYCo6LyM8ejheRlI/VENWbTdGVlFLZk1idlU2Ui8hMHphTllnejVre0IjfmJJdlg1ZT5XKzpHKHpUb3hnXlFhRGE3YXlIOGRGflszcXw8'@;
put 'dmRETllpYFQqSEdvPnMuKS4yMlVeJmhPNzlQMWdoclIlITJ1YUJ0RE5hQ2olJERvKS5nTywmcV9iVCRzeyhGXUFJcWQzMEdYR2RhRkdsKU5aLExNLHdEO0hdQ3dbNDVQZW5sIX0+ciUqb3pnOmtvdVMmY2M8PWslZSw3MDJkNmdiK2NtZFpbOy9SVFpuQEFYNCxDN3wqbnR4RmhVQl01dWZMOD4z'@;
put 'MTMkQDRofWp6WiM7Y192QnI2eXhONzFLbSg9XWN2QiUoT1AmQXVPfml6ZWBJdlskLl5sSF03KlVMcVo3SVR9VHFoNVp6LGYjYFMqa2tHc0kqUGdDQ257aWRVdFJiPlojWTxrdTs7ZFdLK05+LnovVyp6bjZBZGpkeklIWnc1Oj1xREpHcnJAPlYyemNScD1WZ2VeTylbaDMld1gqJXdre1hpSSx3'@;
put 'MV5qPyVyJGlVbnZQcl57blkzNEBCLmJeYVYkSTNafi92fW5XaSF5OVB0U19dKDZNcHR5aW9QeHg3O3wuZWhyQFI2V1B6al53UXAmQkNtOjs6NyRJVEwiNGg0KXldd0YpejU1Izc/cSVBIiM/Zj9OcDxAajhhYCJfdTskKkYpST5MOUxLdllCaW5vS3dYUkNWeDhJMGl0bGd9cGYlNlppcGF6I3th'@;
put 'MFIjVUAmQTdrbkZMdVkqRXtVPzpYV2Mza3NVOFo1RVFTfVpNSz4mRzo+Vzt9TlQ0XUM7KW81SUpfMmpuTyhwImREYlJrYGpsUmgoIVlGN1lwfjZdRytWTCg9LCpGeCYwa2Rpcm5LMzRiZSRqL3QxNEEudl43bTcpLjk6R1cuXk1fU3VsKDh4aldVWH0vbHEqcy59ViNIRVBzRG1Me3woVy8ucTdr'@;
put 'LEpqQE5DUlNJWUk0PH1EcjxYbE9wRl4pQk4melFPYkFHMlEyOixxclB7P2ZSImJoKXdlc0hiInhNO2dCT2RdKjhGeHZDO1JrZFpGW3hgSmpJaF0+XTQiJHU9SihvYCN0fGNXMGw4dVI+OzRUL3dIVXE2UDB0UENOaT5AKmx4XV56Wm9IXVYsT193aV59fEZvdmd9VlhgaEh8QjhNdURSUjQkYlZ8'@;
put 'PmxUV2hgQn5tQF1odz5WPU5acC4yYUwqI1BaOTI7a181NEk3azxgLllXfS86VVF7dUQ4dCNFWV41RmZmcW1GaylwW0t1U20hJSg7NkI2VzNnSVk1TU8kUGVKLjApMUBwS1kqZnV+VCp5NFgwSm59PVowfjtIaGYobkl7eFJqM2o1QTtKU0VOWU9gP1tNMDZXR21wKWFXRXRWYT94RjM8clo5UWAk'@;
put 'eUBiRDg/UWVHVWMiIjgmbU15VHFUNnRuNShteSMhc2wkVWVRbldDZn1NS3M/ZEQwKVlVfnciQ3d9RGZ8Uz4yMyk+XVJZXTAzSVR7XyQ8a0NAVWRWS3V0bjtuRkdJLlMpLmFoTFs3JnUma0NhOy9HTjM6d1hicjFtdWtbX0hRUWlQZzpYcm8pXXlxRm1WZnZkW0kmd3ZMXVlDW0k6dyZfZi4jSXs6'@;
put 'ITEwWiloYFdRfVpFfnJmcytVP2Rdc113PnBsOmhTLz1QcHpsJjNMZFJkKkV1PF8kITYseVNfRnwmO3peeUdZcXluZW5ZUHZBQXYkXShhVilrMXBjWEEyRXh1ZT13bDNUSCwlbT03PWI1Z2ZYbC8mV3pZY15jOyRXe0pbIjphIWZWd110NSg6Kl8xMT1SVFMzQExUej9CMWohclROUipLdEEhTHlF'@;
put 'NVksSEttLFtpcD19UE1eflBifUZEZjBPV0A/MWYjP0tmRWB1fk8mO0khYEBiM0BeaFY0JkkifUVhVVU4S2dwQmosPlVPLk4kdS9hNkBDKF1XLmZYXWN8VCspUkgoS0lwUkRXR0xgMHNfdXlFMF87Ojg/fkBMM3RCY1U2JF1MIld1K0JzIlpMaVcyVDwpdWdLK0IhPiMiR3VEbD5WNiwsbyNvYDVT'@;
put 'NDk8U0Y2RTF2Vm93Lyh2d3dxPVlhPXpZdTMzXm0xdF0sYVhYVVpuPCsmcTgxVk13OHY4cEN6WWw5VWVrbTh0eXlEVkxZVnlQTG08KFtpfjolQzRHZDN6dW95Ul9lYFUiY2xoXThJVVpvTF9JZnA7a0I6I2tLOXY+TUUkJTR0eFVFSSRicFBKcjVXT144filHalUmJHs9O0FBYFBtelJwd0w0KiNJ'@;
put 'JkYuZi8+VTJGOX5ZfVguX0c5SDlvaEA4T2FuMnVLTlc8YkR5YGcuJCtzak4xM200PlBidmJtKWQ9TFYwLH55VCNNNWRkcDN4MCxBLnw4THdsKHx5LHR7bl87ek9+U2pDUkdpbUtVPSllMDlmPUNuTGdCSSw0SU1wZ0pzI3xlYn0yNCY4N0Z0cF8oUzYvMHZHKVE/akxVeUB1eTlkKmlQSj9rczNU'@;
put 'TXJmIWI5UFQ/bEBaRH1aRlZMYDFIMTRZM2hbPDNfZmosLClXWz4sZnJ8TTppIitNPExwSEZ0LHZ4VCxmdVQ3WmRGQTx8VDk1fXJLVFg0QjRAMVIpRlp4UD1JNWhZNkhiR3g3IitgakdIXkl0ZWlZJntVZXd6YDdVfEM5KiZdSE9ZVltkTz8uRFAlLGphaFlYXWlpVXVnQjlXdHFVQkwpTWRMMlsx'@;
put 'QGVVY11NQ1QhRj1KczV7Tk1fRWthQCtqO0o3dUYxIixbX2tMfFdjd0FUN0gsKEVFNC5SV1t1V1QvUlRfSyh2KlhjYE99M2QuXmhEXlB4eW1rfn43M1BGP2R9Yz1XZFNHK2wlODo8QSlWVGBxMEM+SDcjJGhVO1V6dSFKWWcuVW1LTU4+MkpKI1dYT0lHbDdXSGQuaklrL3guaVtZeyVUOjNIXmwx'@;
put 'NWAmLDl5az5Uem0/aEpPJUpfK0w+XjxRaUhOamVkU01RVHBrQGIjRCF3NCZVVzApPXNKajIzZnJweFA+MEg7RWFydFtpdkVzUCR8VD93ayQwQ3lzQy5kNiViOyg9ak1xQlt5aWJ4fjVZcDBqazc4ek96RkVfWjxCYTRlVVhuajkqPTJDd2U1SSxbeWt0eTE3Y2ZMYUkpSCpSPyhVZ2Q8OWVtP24u'@;
put 'OExqSURLSzd1cXtOOzV2RGN5JmdJIUpVeEJ5U0tORlZIMlVEZSlGJkYyTlYvYGlGT2ZVYFJKPFdrKWFYTzE9VCRtc10+JGErd1EmUXF6ZWFCcn14OlAsYDNUVmF0QHExOFNGL0RwaXd6R2dwajhUX1toTj0/SXNVenJEZFUsRnorUSM/T1dGfldQQWw7KjxURClSJUx1eEJzbCVgQk15MHd+NkhE'@;
put 'aiFfZ2QsJnVsbmhgJHxaRTdIJU1xIkZbV0xpNz92WHE2ITJMMk1sLiNqUEREVD54W2I7STVSS0F1YF1ob1tGLjk1W2p5JS5mKD1NPl17IUp3aDh2YTtDQyUyTDwoU3s3JXE6RnBdQT9tVG56WGdPYFZqQ0c1Nyp5N2JEdGRaSmlSZWN9eTMvKHFpKStZZiQvLm9ZLm1lX3xgaCxLd29SPXI3X1k0'@;
put 'Y1JEYSRdaSxbJjp4VCVJP2ZRKT0hM0I+Yy4yWUZ9clEkfDtnUC5DKi83PjtOQEZoWTBJdEZQc0BDLF9kVXx8PmJZYEUiazVGQGM4MlZwejFDSS5EKjlFMmt7T2VQdi8jclprM3ZSOjoxanpUV0h+Rn57eHxAQVsyU3UhIzxFX2p9WUw5e1BgZUI4dSojV1cpIzxvOzlkTSV4djlQQTo9I3ckeGd5'@;
put 'X3NMYCopeThleXQmbD5KT2l4Mn1pdGBtRWprVkUqJnZFW2I4ZS9yUElTKUtMZnFpYSFQS3Q+WGxCYyxbem16W0t0TVgjP09IVCJLfEo8XlBENWdsQXY3SDg9ayJaMk4xU2M8ekpYQXBgQzRGT1IyW2s+V3JPTXNWLHheW2hValY/QTRxPDEzTF9iPytxJUdFbHIjWTN8Jk01TDZlfXdmW25RbllF'@;
put 'ND8rPUlCJmpSfCpeY3E2fTxZLmMrJDZ6PiQhIXdZaHNAcEZ4Q3VPeThXKDxUSzo+VS9fV0FhJUIlR0xLNDppdyVtOzZvXVBQNEx4K10zV09ROjY2bT41LiFAZEIwbnNrYmpGcE4lQSJddlhZJjZmRE8hNTNPTi5dZUEpKTE6bGx9eEpeOWIjRTprQkh3SnFXSU95czF6V3khLHQqNyE7eWtvKWl1'@;
put 'Qj5LVHopKTU8PEljZkxFMjFCMWJaZHtjIy9hQDczTD5SMzVyOH5efXUwJDdYTV4sQV1yOnQ4Kyk/c2NAVSIyQ1pJTF98TEB4PkNeQzt9bV9tW0g3UTtqYmxSYnhyZklJQlhKdiRHNVUhSktydmtJM292NixkbC5sNT9zYlA9aCpuZDJsZj5CZVtDKSxqRUYoRzRDO1lxXXhPKDdlNk1zJlcjLjU5'@;
put 'KzNgXkh0LFl3RH5JWT05ekQ6dnwxVytxT1tqYWp0aT8sZmUpMDdMUDopIjo3ajpwbSl9IzNhe2Yhe05KKF1mKUFRQj4uel9oXVNhdilUX2QsV0NNcmRFd2RmJSlhKWFWWiF6Ri5lcWxKWkFPV1hSVDh3PTVIeSxnWCtUfnFFX159YVFieDgmVHg1LHw1SjQ5UHxeNSxyQGlMQyt2SSE+YkdNKVpH'@;
put 'Yi92aWh6Sk94Zkk+WUp8Pjh0PVN+bClBQGoiTXQmV3hxUDpjdik9XnhXRzlrJVlNQ1g+RH5uaERqeHkoaktCSGBqPFlGUnU3MyV2a2siaX1XIUQ9dC8raV9+TUJTZUlpVW1gd0NgTXt+U1Q9QypWJGFqditDSjViNjlMckpLSy43fmoiaV5zJTZfeUF6dXUpamxPNGxzLis9TFVaJUhlZHQkfDpp'@;
put 'I0ZjO0pFQy42QE4zL3ZUfHMhSU1JTzl4cHV1TEFOSD5AYHtzU29wJWokUVV3RjxFRkIvKEVHZGIyfl1kPHM1PHY6dmdvSXdxUSp0UjZmNmpoSiZgd0JJO01LdzZaMSFPIiFvTU9iNFVtVE55LipKP0FFUXg4a2liOkJFelZacCgwdlJTNXZsZF09MSlwZkF2SThWP3sjdk4hLko4NmMkaUBffkAj'@;
put 'KnkuX3N9RjMlITBNfklrX2xvfV1RKXMzMTdwVkhSfmY4X0xeNTZ6dlovcUx3TFY+eX52OjwmJHNLWWdbU0ZfU243UllsJnNFNFhiOWdANzViXmJZKV5hJnEsOkNjT3NYIkMqUTJ1XlRDKzMuPHJBQ2goXUlRW3J2cVdbMHNzRS9KSX1mP0svdF1SNHRGNU1gayVjd3V9WS4waCt+Sjk6Ql8mNGNJ'@;
put 'b3l7JDBgeiVtQiREWDROa21IfHQhNTMjKUBSY0koSzdhVkg0V08kSFV5P30lejxzREBKNGNWNihYKH54Kng6WlVJK2VYcytaQ2A7IUVgS15KOHxYW1o4XWUvNjRvWnMjTUpfPkxXRjF9VSpJUj4hKjYsOjIyPzpZNGFaNyYveXBUaDRHMWcrO0p4fHR3PDJDOkp7Y2QpPzp1cX5qV3oqQ35wSWVy'@;
put 'Tk8hZ3FwJUg/cjh4dHw3eHJBWW1eUSNVNzgyQz19d0taRFJVSzV5QXooJThpQHI/N3oyayVhdnIuRWsxPFVnKD1LbDJxJkcwT1tLRSwjKnhHb0BzS00yTDdEZC9XalU2KVFCbjQ5IzpKdTdPdS9DWGtUMiYoN2ZwNWgqNyN2ISNrZ3VgUDNQRV0oO2M8Ok8/MkhOOyFUdkZ8VUdEQH1uOEpZamk0'@;
put 'TiM+TDliVGxaYWxtYzcwSH42VlU3RVhIX0U9SGhwfGQ7K3JgNkFPNUMqTlthQyohPVtUbXB3SDFaJTVSYXFCbjlyJWZsZmtVTnguRTkyITpzd1BOcStRJVojeEB5UW1dYzlXQV9IX2x+RkI/Rn5heUx1QyllREFWLiZdeil3cVgrMlRhWlBvLj8jX1VzWDguOixGOT5Xe05hJl1RbVtybmdTSSkk'@;
put 'Y0Y9RzFhOFhZa3NaKHxvKWshNFB1WS8kd188RCNvZj56bWR7SXY1WnV2TV1YU2dqZylwTUFRJDdhWFM3JTw7RTRefj12bV5eVjRJQXg8UV1ILj8pdGUmeXJ1SWYzJExDITpSc2N+ZzxUSVVYOkFLKzVBQzElOHphL34xelNbdT9YLDJwWSFsP0J9YDs/OEtjMEp5biV6fj5xL3ghLjkmcCNRfmFI'@;
put 'YTwzNVBPPk93eC5qQj15SCsjWTJzRk5RQHJGPnhUdEI2SjlUYWZCbyV3IUxAUGs5VWhTM2czaGxhL0xrb203eTI+Wm4lMUI7aDo8dDtMdXIsJkxRKWVhSVg2aUA2b1UyQ3xzVWtOOFg8bHcrTjB7QSVCTFYkeExgRitvWnpCOXlme2hoPzA4akI0eXIldHFiJUpMbTZ6WGBeVGwoZkN4QyM+T1Y/'@;
put 'ODZ8Pj9uWERlKGExMSpFJSg/LjFMdSVNRX59LypnJCtrZlBBRkcjQWcjWWFqRFU3bkxQcylvTFp7TkYvSzxIITIjbitZcWxgTl1CWzAlWDNqL05sN2s9aD8rSUw3OSpFV3wxTlo9V35banozSkAkdEs1YmReL2VqSSU7Qk83TFRpYH15Si4xWDkzQm0uNX0sdXZLeWdWaTFVZlNpMyhpZiU6RDIy'@;
put 'WDdYYmNbQCFtJiNtRmU4LmApNj5SMSNqNypDd2sqQGMwOHMyUFp1UlROTTpEeHp1QiM/Ui5WKTdWaD4hOjxxX3owOH4pS3V0YSI7TVhuMkxWNSEpNzBbbGBNfCpLL0VCP0VUdkthQSs3NEFzeV1qRlpWUnMsTzZLUTxMZT9pVVFaTH4uUTclcT1US21+UWxgLlVxX1dBRj15Skw/YCUvNHVIRkMu'@;
put 'ckYpP0QsK19wUVFnQ3E+WG9qZGxHM3lNaCxEVjVGaW1vKjROdztqZ180VXMhK1EqJihyQFZ1UD11KDkhanI8bHFRNkZ6T0ckVF14Lz5tUVJDKUxbYE5RXm1BNGd6eXYuLmNmIU1lYmpuVFl8TjFsK08+QyRQOFU2Q3N1Py59U20yd0NLdiZ6WSpIaEo7ezUlKHB6ODZLNCpfRyssL2FSeltTLnVY'@;
put 'LE5dMVhIVUQlWTdqYylYeXdWTHpiJUk+OEx9MFZ3UWRaUiNTcXl+a1pMSys7PXhaZ1FzMTpdNmhaPFZsYTU0ZnV3PGxOcDg8fn5kJVc4RUJzTmw0bDVRWE1FcGBGSCR1WVNFKWR4VGJPdH0pZyEyLkY7KF8lQjZzfk5lZmI4THxBS0tbLkdBXjV7ams3d2BJZjs6WEYiZUc5OH1gSGNZNnouYVcu'@;
put 'fHZkcVB2PHFZRF5zRyx5eCx2RX4wZmQsfnxNcDY7OHNyWXxUUkE3SkVFUGMwM1d9M0oxOS9jV1VZV1NrVmpwZHQ+R0RVX3g7UFAvVCRNM11sWmNwPENjIn1PaXMjO3UldWc5Y2JyZlp1TXdndTE3bCNvdW02O2o9Lkp8c0JQX1NaR2Zack03X3p2ey9IRCZifTNdNU5sLjApejN5KEFQNFRkR1Fq'@;
put 'aD1nI1hlQV1eMXQ2UyFqbjJLdyNwVkovUzR7MWJQNE8yQGYpS1N0e0w4aCxkNkNmYFZpRGBQeCkjcHk+YlEubzo4VU9hLkVOWzkzS0tmQWZsXW5NMWNFOlIsW1d0M0JaSDhLdFN9JixPRzdkLzZ3PnhoXkFeVUdoV3x4SUkpYHk2aUorMnljUTdeZHBOTVlgd0pdPzU9RTY0Wi9qNDtlSV1YLlQr'@;
put 'I2UoXk1rPF1UT0ddT2kuW2J+TSR4ezg4XUMmVDB+NG4+IWppVik6dDpeQ0VZVzFRcV1DRCtZYU1GTiU1TyhsTWRvQVIqI0Rufm1hKkpRR2gsQU1yYyRbbCNATXkySE44YUZsTDsvST1Jem9XIXJNYEhlcTZEYXxwdDpyJX4zLk83V1NDTjhIKDN0NlE6eXs/RC5eU3J1RkszcW90Wk1lIUsyQiN9'@;
put 'dHFvUCZ8cyNMLlU0eGZYYzQ9UVJbY100VElOKlZuIz5nYm44eiNKI2Mrd0YldnN9eCpzWFBuIW5wTVlpal8pJFJQP21PRmJ8OD5LaXlpeC5xX3R8UTZIOktVUDVdLDQ+MWVbV1l4JCFdbSs1WylyU3IraC4qQXFqZzJXNEx4ayEmb1lCU3EpYSk0UlRJJTFvXXw7YDhvTWg9W0FJWzpxVFZUWFZm'@;
put 'TE9hZCNYNDtXNHFmK24lYyl9PWYuejk9VzlsbSk/PXdrRHBxWllQaVhJQ3p1Mk86eU5XJSNZYTI4IiIxIm0rdDQlbzs2b05KJEZBM0VOVFhZPFQ9PDltSk9NNz9ENUZvIildQEpicyJPKzxCfntsRTFBbk1sIyN4bSx8bylEd1ZlbTQySTFvI2JsWDJNezdaLjVoamx0Q1hBWSh2fktUL3Y/dmVt'@;
put 'UVdOKC5AMjJZaC4/b2okemgpVCRrKjElYyxmem8sRVYreHlAfCk0S0lmY0lARDsjPmdZcC5DNCxYUEJhQy8obC47PyZIUzhEKUg+JVhAbTkkVWkpd0R8S0dPOXAvcDdVQUsxaXNWYC90QnVfKGB3dl8yfjY8JksjSE9lZy9KfGNsUCx+YWtNL285YFhjRXJ1VGNeVn5YR0s+QzV8VTpwQ31nTlQi'@;
put 'SjooU2ZWYDZJQEwoQ01LcHxPemk5ejJ2bnlOeW1+d14wSlIpKVZQWk95YzooPkdKfU10NV09bFNXO3JLOS91U1dpVkE/RDFeJF19fi48UXJMK05rRS4oMTVCN1JENyMoSDNpU2NpfFBYZmdLMjlAOW1mOGJhUyxNVVByQHFCJnx+JUt8Q0duOEcpTl1aciVJWVB2YC9LZnQjaEIrSip7P2RSVClU'@;
put 'YmZPOG1uRUgscFg+aFg+Y0xNNW13KHdxflclQmtlVUc0aXNISkRSODdQMWxBditWc2BMWDMlOlhtVy98b1ZXbCptN3JwMGxtKGJDUGw/JGY6dnJAbSNHOWUmcU9DSXZeOmw9dCNwV1NXJjloeT8kQ05Vbz48ZF1jOU8qUV5MIV8yVTkjZzo3Nm5DemxiRD00OH1qSUN6VnFjUDxuRHp1V11EY0ZW'@;
put 'd1c3SXhCRDJPeDB+MHk+fW9pTXxpVUI5KHNwe2pKLkxUKWlwNihqe1p7dF5uNSVPT0BNVmtjYSVaQzVyPmdGWz5saHN0W0kkSm5SSz83UzteKVV6OH5HeXc3IyVhVHwvV29PeEY9ej4xezQuRmwuWTlVZVUhYVQrRSpXLFcuX1hta190NXZSKXY9OjdiWSxGelNOLihbcXx1aGtgel0sXU1QWGw6'@;
put 'LFA/aFlTMig0c2BGeV8lYGZWQFczSTswNFdnK1lZZzN+Tzc1azk5cFZ1JFl5UXkwMVhQdTAlWV8jLm95S35Wfi41LlZ8W1hNQlR8SjxMYVlMbVVjTn5GI0x3XVlNelQ6O2lRbkI9TVZWI0hPSj52MDtGWkVwe0RVTHwqMil8bzxReEs2NExlLDdWYkheNUsuU2ZPXSJHTkJJb3lmZkxfVXVfT2F3'@;
put 'Vk47UWpkSjtvUStdPzpCKy5ze0FwW254UUglJnFrNEh+NUI3KyM2KXt8ZGl7N3EsTjR1KV9fTGIxMDRgeSljRkg/XSp0T055ZiphI2EiY3FSVGlRPSYvSks+UFFjK2QxOkFtYkU8PyohRjBbVzRpZFs3emNbNWBKMDhIeFFaeEZOejkzbWx3Y3IuRTd1fCk5a148fGQ7TkxaLEphOWMqU1NWeFRB'@;
put 'c15HUWhLMzh9bkd6SVR9QDVtSEBKWzokZGJGTHBdY0wpKnhhZTdlQihyNGxjZU48aW50UUheVzRJPkkxKVs3V1JeQVNpaGZnZChQOVprRWJ6OGtjPVFEOEx7TXQ+MHY1TlBycTJJeF5AYjdpMyQraDQjRllgK3RaZm43clAzYGtuQnZqdXo8NSQpZVlJfUdrTzdYL2pQKlUrOGcqWTJyT1UoZCpq'@;
put 'VV0yOVFLeDYqYDRFOE1nOHhmbFU9YD89I15OQHRqUGNIYTFUMSFLcXl2anhEUXduez5oPn1ReXlQXzU+UitORDFtWXh4dDZZMU8hTUVOJnVIQigrS1t8YWk5Ni4jJHViNGxYWCglR058Xnd7My9iRnlHXX5zRzxLfjNxcEcqd01uN15ISExbSldyMk9TUSV5RHA3L0AoOWMoMFYzc3xMNEghMSgj'@;
put 'KXw/QyN1ViYjMzE1S0MlOU9yX0JHcnNjc1tSQGo7PGF6am1lb2kyd0t2QURXI3Z4KlVDMz4wdFdLLz11NDNJb20yejc8PGhDXTBSRFdwQ0l1bnBHRz5idThybUA0M1pFRjB2WkVVP1dtaD1gbyRqXmBmelBYfkZkaFlubjl5YUh6PHBwflNFd31nUSE3UTlOP0xmbU9WcnYlQHRpaCNoXTdBZW5+'@;
put 'JXBsVlpbNCY6KH5VXkl3W202SWNZRWRoe2RvTD1AelNrNEdGdUxbcTNaVD8uTU4/JXdmTSYlQzNddFNGQVd2dEM7aEx9ZHtrZ0d+Um8mfFsoTGh6MDg0ZzdfLyo5SWd0d3dxTmBFWUpSZlh+RSM2eEs+YDNMcS5+P3V7QF1wVU1LTHt9UDpXMlthVGJffD9qLiRESCxIT3h4QGlkPkBWZnJSKyZm'@;
put 'ITw4bixkKDVdKnFtMFUzSVZmZUZxJUw7RmtMYWQwVStiamp3NGEwWixRYHRyPTBXLmhnWFB6bkJeZltNclpwcyNeWlVpczA9b15gOV94Omx3SSsyfEBUWm4+JXgyPU5LNGFsbTF4QmE9UUI2KlB2QF8+aCVbMzJFVyEvSFJpZ34vdjYse01ib0A2PVBIRGdieTZpTSJNJW9pI1QvIjl6TjtDNXBu'@;
put 'bkBoUH0/SGJKbUVIUUNbTyljdkVnZDNTPX5VIW1FPykuOFJkKFNFXTB3QSkqYGYjUXN8bWI4KWB1VDhBRDs/PmgqNTh5XlZRKDNjO2s3Pi9KNWQjOm45UTdSdG8rbTtuXXN7bnNyUUk/cSQ1R0lBJW1lbF83NyJaZj9kckJTRWlhQXJrSm1LSXd4MHRFX1hYcnR5LnliLn08LnJ3eEg3MEJsKnAq'@;
put 'R010I1U3M3s9N0ttTStWWll8YFpYWFg5TEJUend8X0w1X0A4e2xBNkdUKERJRls3REksLGwrOlFSeXJ4LE5mUF9RYXZsc1AiTDxFOTdZUFlLMnl+RH1CJl9+OCx7YlZWX1VyZHBgSk5CVTJGbD5dWF1GQ1VHRnB9V0RXYlVFUEt9WVQufmd0UyFyJGsoUEh3S2wsOjBXMEhiLm81QTAjWXxMQ1t+'@;
put 'MTlsXiEvZSk6SSt5QnAwVH45OCIxXkgpZTAuMi5iYTduUFNOaWc0P2hnO21yUUVMPUYzXUYkI144OiZ4Zj4raDdPNCE0RTB7dSUhK1kkdDI1RkgrISw1MmNwbCY2biFGWF8/VygiJn48LkJoJktvdFRIOyI4V31nbSxPXi4sRit6ZHteUCtYck9xbCNqWlY+eURsemJKUUh2KXlINH1xRVtERD9w'@;
put 'PWo0Zk5mallPcylQJFRZNz5lOHM4fHdvJS9sX088VS5yZDhfR0sjVigodHNrS3ZbM2NdWCpLXTZdKyRPRUZMfDIzcCVpMCsxY3NqSVE9TzE1IV0vTmo0KERRTj1WYG5bRkc9YSxoRC5WWU17NUVibVJQXkJqdXA7OSlLdGVYam9gcGs8YUZdUURzdV9MaVFrbDUic2NpT3ZLNTkvWkROcSpIOGNb'@;
put 'ekYxbnokUC5ROTNuOWxeaUBRXllNXV9DV2RkU20qc2E/TzBvfTR6MChpKE8oeERIZD44XzBNVUB3M1J5M2gvTDVtKXIqc3BUSnNNaGVgZHdFZUgyRnhCbVFgYUxITlY+MG1oI3V1QzY2eDczcFEhXyF1KSZSM0taQTZNbSVfWTAra3BCYSgoR2g2Q2BDRHhHU0szX0cmTG1LNGowNV9XY0g4MyVK'@;
put 'aXNDPiRmciwobTxQYTFSamova1pAeFFANHQiTDV8c3A0RHV1JT4uZTh6USNrS2xLNS9ETXc6cWlOQ0F6MUpYTyowfiE/biUzI3BpJVM5VzNXUWxmWFIzSD0kK2l+UzdoL3VUcldUfUZKalhgejA7UEEzbkdCZittWDNAaz0qbEEpWjV7P1VbM1lKKThzSzBXQVA0ITdwO30sa181X3p7MEI7Vml3'@;
put 'VyFlR1NdYXptMkYxViUlYFtlKnwwVWc/TnghNGI9alVeMylgQkdCQUxyUGQ+WHozN11uMz00LDAsMElRYCo6djlOKmJJdXVEXjxZNHpzXkMhPkcwTSp4bzptQjYkPytjNyYpNCR6aFZDfEwmPHY7bFdRO3JdOiJtTlB9TVRnXUkwLjZ0ZXplQU4ub0EoVTB9LiVbVGF2UWwvSUBHYDxoUHBPLmVw'@;
put 'OygySD4uQVhtQ3tKeF99K3JYL3x5LnpaSVd9ViJQKjs8RXBSM2hVajRJYD8sUF9RRy9MZWtROHNMQz87S1RCSzNLaSxUK31XS25YanlUIWo8MEUkeT5dUDVDOFZYSGIvTUJ1NlluVDpheUZKZS93NmZ9eC9PS05ZKDpgaCU8R0A0TDdWT0h4cjRHVUcqOjssbjxjTnRMR1NOS3xaO2MpUDAqQ1JD'@;
put 'Wk1YMjpbWiNTXkY3e1FFTXRCTkV4P2FzaGsoI0paNl8zY01RUmJzMFdeYWBzbWMhOXdOP1l9P2YsIygzfnovfjNuOUwxXmZEYmlrJDtIWiRLdzclLm1dWSs0eVhMdUdAPCtJRFJZYyxNb1tUR2glVF9FOGV2UWc6SCx7O3tYN0phXi4kfFp1Y0ZpYz52eGxIUCNCM0MzTDYxTjN7Km1MMiltPTRK'@;
put 'TThUVkl0KFJVW0ovWHtdayE8OSEsV2JeampJZ2NxRyg9YX0xRDtTJEdzdVNGV3NMXW10P2pWInd0JmhAbUlzLFREKDllLmJGezJAQEp3fXAhey4pIylyZnpNdXFNSy9pNWF9dCw5RWNkS1J9M3BvRWV5dkl3Z0V9dmpYaDdCbkRRYHVMOFhGYGpCPTM+d11KOypAU311P0VeOU80IWxrR3ZKRCZx'@;
put 'UXwjb09HKCh0dzFiX15teCMpayloWEtkPFNNSlcke3BUMUgobTtwXiYhT1A3LjtfQyh+fD51IigqbEd6WTlJRmtpc0lyIUBPTilJJX05dFNbaUZrbmpgbXRQbVc3ZkJNQDcmMDp1fUFgOCRTPV1UZVF5L30uMCs/aCQ8VjJEOVRHPjpkZj1Vb3szRGF6K2FgWDFFZ3xNOThJWzAiNm5EfkZALDdX'@;
put 'On5BcygwPXRGanFiPTkqPX1IZnxVdyVPfClMODJWXkZiUE1dV3RbZ3Mxej58Q1YxOXdbbGh0ZF9wUms2IXo6YzdaXiVSamlFSG0+NEx4ZTciZUxmVGY1KGBELmp0aDZAPSNPMFMpRW03KlA/PWR7PW9jM1gpZlB3dVp3K1MkXT8jdjV2dyZmPUpRdXQqQGcvTTg8TEhUXWZiU0tNOlQ4UyM+RXtn'@;
put 'TjRNU18iKkRIfTVvIXozOz9WKGM3PGplNW89QnI8NDZaOlMqPyg2anlxWGFuTGNEbzl3Jl9ST25IbzB1LCUoS1l2RjgzQTY6ajVRRTNrVlZobCs/JVtCSCF6djhJa2xgMVFlSUdMOGl4QnhzfDI5Z1FgXlhHTS8/WVBsX3FQOjRjKi8kMmBodV9mZyZyPiU+XmdsVE9WR11mOU01LyFtdF5tQ0M4'@;
put 'U3huP3RYZmZUJlUyS2lkO3I2JGoib0Y0bm5VaTAjM0w3PWhbIXNCflJxc1dKLCJDI2RhdjUpSClCUj03dVh5PXo0TEY6OFRoZnkyTEZtRWVPfWxPQl17N21yd1ZNc2JpcnY9UVR3SiwuLmFvO01nfjUlPVMvVERIb2U4eXJ4UE5mU0kpbCRbSmQ8VjRzSnM7ciE6NHViQEdxcXRvYEQ7aV9GeGdS'@;
put 'M1tNW0BuMVQkQT9tSUx6VnJIbm9YYSU1fCIhT3ZocWpENH4reGZRRyk+WXdEQGJ6WTlUdVk9VDA+NFdZUiFkUT5WX3IxfC9hJXcrWDBaYFhFcy5xZ195c2prSyJDTE1ibHBxK2RXImN3M3JCR0RNZG8kbGR6R2U9RHdQRkVybXhje35eRWdrZilfWUV9NkZTaztbKCNYTDZ6U1p6UnRsZkFfd25m'@;
put 'MSx6PWFYYiQkUU1+Vm09SSQ2T3o5by82O2Q7dHhWOWBMPDVTOWhjMCRGTWk7T20wbixgSVF8UVZBXyFvdzgqfDxJNm47SHdDLnNnKGRtJUIydiYsWTlfbUood19oKVJdLHZoK3FaM00hR2B0bCVpWSw1bXt2MU5oLCNVMjBlO1ZpZShUMVA2KFcycEhNTXdPKDozWFg4JFIrUk0lPVs2aTlSYlgu'@;
put 'Pl5UQTozSXpxUW85WyxxXy93RiZESW0zKVNkdmQwUlpDaWM5SFMzb1AobShuJFdMP0pvTiF+OzVMZ0dRRT4kM1hgTTFdU1M1YSR4ajxPIzFgY2pIMktiImpeY0lmYUQpV2xiWU5SdGcyeVdpYXg2aTRnIT95e2psMntgT3NrRj5TMyV0VlkjNy8xUmtCV3gjRlU+NWB2R1p7RXsrMEF5ZjRad3dM'@;
put 'PiFAclQ8K0toYTxQLiZsbztEOUhvckowb2thej5YeTQ1OCZPTUZYMUQxeUBhUHRAP0ZjcUMrRD5bYWtGKip3e1l2JHhSelJQVl5RZkk/IntibGF4cUQ7QE9RRVk4W0pgelhSTyhKa01ZXklOJXNrcjQvTF1MJChheDxzfUBBKXV+PXpwTkYqdk02bnViV3YiVChjUGxmeno3YkB8UmAjbUhFSTI8'@;
put 'aVZ3KSNPKUMqdkJWUmBBSj0vV0lQb2VmbC83YmA/NnwuK25ZdV5rdGpnMWVwOV0zUzIzc29UTnRuKiRZQjY2fCg6Y1dCbi5QNjshVHRDNjVNbGd4MH0/SWgufD1fan5ycGZWbiRrVUdUYzwkRld3TFImJSpaa3M4N1A4PXd8TFo5aSNwJjRaVVMrIW4/IiNjKT15alRAIylqI3dWRFlAfV85ezFJ'@;
put 'ey93RihqOCVALl0mOGNJZURgWHlEZ2hVVUNxJXJkZktJTUAhamx1OTgrUkZQb1M+WzVMM0tXcSNQUHE1SVlWV0RdSjIsenIwYmQhJExGdmNNIyIjdlthdFY/PWI6ayQzIk4wTU0ka2BEVTwzSVVuI2l8bz1VKiJeUV43OyUoT0hfXzY1aUxMUzN9bTxFdiMrL19kfSIkM2lqdDIkSWhYSDIrWzNX'@;
put 'c1JneGd4amlucU9fU0NeRjF4XXFaJU17M1EycDNMZi8uKUZQSkEiT3l1UDBabFJ2SDFUWTt1KUkyezlPMHxjYmVrTnsrZn1+Mi9ENXVZekUqOn1ud0JAdU9TMEsxd25aYXRHRH5bJEJbSls1c2IpWXVQI25CNmM4dDJ5b01GIUBQRFhwKiYsKTdPPUk/dXpeSUEwMjdTd0FAP0M7eCozVWApTyVj'@;
put 'fDY3OEo+JTttZkAqRkdhZmxPVFFmQlNYVGB1M2ZmJC4oJilnJlJ6YDRLbUVxRWx6QkRWcE93Y2E2UWhiRylYK1o8RTY8WlZKIltfOF0zMH5lNF06R0BMM2dWWXFJLzo6UX1bPlJYPyxPc0tpYVchUmM3anApayJ5MDBWcU4pP2tsdS5KOzBRW1ZYJD5nSy9SUipuaDk5amZfbjs9c18lK05EcyI8'@;
put 'YTpNK302ZSFjQlkzKT5tbyxBUilBODghOHdmJXYpUD5YI0g8SkRHQHo3MEdsYVcyPllrVntjVDtGfCo9UF5rOGZud2ZNOXRoLHZTJW8ifEpqXnRMSVY/MU94RWp8S0oxdCp4biFISEdUV2dbY01EWipZfXQlQi5tVEt6UExGO2BYX1VfWjpYUGhtTmt9UnhwWWNnRC9yMC9OT15nZmp9Zn5DRnA/'@;
put 'eENDZW1lRlRHfWxmSj15aVUodmE4YGF4YEJKbklONnxAbz9Xe0UpZFJtOGJCM2s9REplWFpWZGtGSV46OSoqQEphOWYqflFbYFpac2p8fFpeMSY4VDYvXWx0b3lQRyJIS2JzNkpEMWYuVDVwMX56SHFfO2BPRGUoPGJ4aHZ8QnhBdiV9QjNWZ0l5STwueEkkUW84MGNxeyE7dFBwPFdPMEZOLlgo'@;
put 'NDk3Ykk0QGlYPyFjbjgjQWpxfngmdn5AKCQmIT5kTHZeOiRIMjszSmBRXkRjZUwuN2tMUkdIdyZuek1Qa2Y6Ok4xMzE4b3JaWFZtVCQqPEMvVmJjc0g/JSskNnlQKVAieXJyVWZbTWdwUHhqRU5ONXt6c2JpeTVaXlQiJiRgLCNJUkpqST1qcVhUX253MWlpK2o9ZFs9JWp3RWJ2U0xWMUNXcyZh'@;
put 'TXV7NkFUX3pURn00VjtQWTFiMipIcEk8WXJYVXopSzk1XkxhXXUxOExBZ2tZYVtSQkUuMjNVUCZIN0hxPHorXVVhKFdXeTNRYno4L0I3I346WVhNfm81eTlEPDxCSGZNdDo3YDoibGZJPjVzV35RIUdpRiZsTG8pTVgjVXE0WSU1KDY6WXJhMGtSNG1KRytTRDJTaUF+fkoyNUB2dn0/YHg2W2Rb'@;
put 'ODZqXyU6dVFOJjMrQz5GS1BvVXxIJWhebTZ6L1srY0FRX1AsakBTfXFzNEMyczJnV3UkNGtOMGNGLmV0WiNHdD1mXj8+R1tRaHxvbyNvSXhTPCF7LzVKODc5dF52fUpGJFVfdlUjVktDezwmcmFrVVVMYitoKTxmflUxWmorbzs6PSRqN2gscyRoVVRRRElqOHpGcTp+Q3FnbG50YVtUcXlwXUli'@;
put 'W0JXKntCO1AxdEJvV3tANlojJW4rYmlmaSMuSEkmYDwseFg3S0B7d3hFaHA6JDQrNjNMQlI+fDdHMWcuSVYvJkhAVU5WIiNzJiMhKlN9R3pQUCF0SW1tNFZ5cW4wfntOQV8iWn1MLmhkM1ByeixGPmVPd1AiYX1nK0AhYE5NXXh+LkJuXU9eRCwiYXp4InlURlpZM0IwfDp1bXAiZzh5NEJ0P08u'@;
put 'aU1UQldlTzFYfihIOGY+Lm0kZDp7OWtkX2NuI0JbYUByR2ldVjheOzQ8O0xmIi86KyU7OlNsO3RJI0x7aiI9JVtbfUE9Z0kiOHFQUjAzbjVPQiFNVCFYYmpDdCNPRExVKW0uWG1PeSh8O21lcyJWMH5LfTs/e14mKjhGLyFCPis1TCxYRnRbTHNZZn5wIUgrZWZUIWUuRnliTEZ3OkxYNmErRWNf'@;
put 'TnFNcF9+aSZCMGs/TiRqUExmTTUwKk04bnIlTE58SX5TWCNYRSNZR2JQYitPP2xGUmZJcz5WPX1oTHs2JkB7VSVUT0B4fHc1RTxUPUcsTlo/U1laNXg0IyR3X1QlK0tJJilJdylsfXRrI2k+Y01dO2lVVGh1SCRCSXQpeXMsJHQ8TlhLRFhmY2h6VjpdS3FdIlskQ30yK1Rqbk1oKEx1bD1wZFUr'@;
put 'MW5kVlMsbz5TUlRlUGYob0gzeyM0TyxiRmNveVo1cz1bRXkxQl1UWiF7ISosMlpTVCVXdD1BMGI0Ji5mOiU9K21jN11RPyZER09eTWt3dVVWQj5FalNmaUslVDNFWD0uNCh+Vm10QlZzQDkyUDJsbkd5cHtWJE13PlQ9cTt9OGhxSWYrTXxsNUgrVWk9WV9EOi9oeSk7OXspIT5STDkrdituMiRC'@;
put 'P2RuWDNSSn0qOHhkRiglNStSZjJzIT1hPFt6KXpKJEUqdGJpZ2AucE1RIjt5V3piSkJ7KzRXQzY1cHYzOjUmP2pZXUpaOkBqX0Y8RU9iMClXUUdkRHxmN1JiaFtTcENHK0dmVGMmbEsrNSw5cWsmcDFveCp2PywwRl1WbzNeXkwiYC4/JGQ9SEohOEkwUF5sfCFXZHM4a25OSiVgSSMlbEV5JE0s'@;
put 'NUh2emNwNmR5UnlaR2VqfSROTXMxa10wKSskMl1eTnxkcHNpLDdzbV5PMFNEVDB6MFtGSGc2S2B5VjlBQTt2TDskcTM6WWtpKndwbmtGMiUmJFQ3elo/V0shR3t+L1dyMTRLJm9lTHFvPkomT2NpW0NJXjdiQlllND1uYCZUUUh2cmQpWnw3dT0xOn0yXnRLPC8uZTd1V2A/KVtvPmJndixMXTVo'@;
put 'QCQmKEdnXVgjXjtUWG45MmZqe1U+RHJubWNbZihEOT9laTtZKD4zfWhqd09pV3NUekBkXlI1WSNMWVB7Uyx6YHByOi5NISVVM3ksSlpoT1cxW2tBZTI1bldOZzkuSEFWO0luVWtYZV45aDlRLjRvO0RgIy4iKWVdUFAvbWxKWXh8aD9PNVpgT3s+STBoTFRKKGZ1fV5XWiN4UkhYfnpnfkR9fEEy'@;
put 'e3E8Y1VFeUd5MyxmYWA9Pl1BckFsaSFOeUMhMUlncT1OR2V5JSV3bFpzcC9AWmQ/MGBHWz1aKzdsc0wydyFLMyN3bjhCS0J8bGpBPG1uTDdLMCVWc0pxV1p1MyoqLjV2cXQ8Xnx2TiFmSjdpIUNRdjErJmY1QlYwTTVNKFlOVXQ+fis5a0BmIl1+NWcxezFZXjJhLykoJFh6PklFTDJ3dkc5PihX'@;
put 'LEJlZXk3PC5McV5RfGVrJXMrL042KykjYUhoRkVEW2Mme1p9Vyx0UiNFWHE/SH1QeVQiViZMPUg6XjJHJCRjSXhmIWVPWmFjYThgdFtjflR8Rk5iXjVgRSZ3KjRTbjZ9O2hXVlJOV1I0TVFzfkJfMHpTb2FrNH4wdFJgcnpxWEhOKE00NjJgMmxial8uIzUjOXEsdEwuWmtZezZbfE5fZUVgWiVh'@;
put 'aX0zTiw8dDRrWUtsOm5vdSxNQDxzSGl+TG1dLj41RkNaa04kTFMzdkdtJEJHQXp4U1ZYc3xBdyIiZncqdDJURUNFSWhzYWEuKz0jdzJZeStGUiJFK0dQQlR0djIhVHlIcGE0QGN9Li4iaVluI2QwJEBAPG85W2JbSi9MV188TGVkYWpqVz9hJVFiIzhzUFRxI0cuQCNDcF90LEUlL2dSayhsUjh1'@;
put 'ZnVNLmlPJk55b3g/YGUqMHsuaGAhalBkbiU5WGpxdXZSUSVnKFQrRlhBXSQhdyRXdkRwd34laTo9X0w+cWlXbnZ0K1dqaUAwfDpQI0c8OyhkPERjT1BJfHkkXn5VNCtCcmY9Ynk9SjdBd09NaEFCZWRLQVhFQ2pjKm5qNG5SRHpQQD4rV21JPlM5aX5+Y11gb1l8PmpwWHdoOT1fZT1ZVXM7ejxN'@;
put 'ZXo3XWNJTGpVWjdGQi45SlZNNHQ1Xkl+NXlKSUJGWiMjaUtkQipVRGZdbCQqIkJVOjFwfigvOyxHcix9P01zX2Y7dz52MllVWVN0QiEoc01tTDpxQXpXKTVsTlhDQGVMUT1DdUVUNnA6enlLTThrMXd6NDZ4OTJzIXN5bzhpfmpZfmdbcVg3b0EqUFpuZHxSSHJCam42eGw0dU4ifH1KaGArKyVr'@;
put 'bVFTfjkjRF0/MjEiQypzK0t1KFJjdH5BN0x1e2AwZ2ZiIzc/fiVpK2FBTWlITEBPSFB5Zz4uO3t6QiEkMG06KFtBWD5pYls5SltANmIkYktpIW9PNyhCbnteeSI9cjw2VHJtUTJ7QTxbQyg2N1tuR1BQSzxbQUtFdX46IiwyamxSJlQqKigoR2VlJlpVemdXcnUveyo/PXpISkdDZ3UsX2Uxc01w'@;
put 'QjNbL05tNG1XY1AzUy5ROXpxeCpHJT80RjE4ZHs5QzJzRS5FYFRsbStdLClzbjVhPjJfUVNQM3E7c24sODM0bVllT3NkOUphVj5WaylbWnkyN2slcHFzIztIKGVocypsbTpyVGMoVzcpVk8xYCgzRUlvTjNmUUxrflZrYS58XXk6KkYwKWc+PF46cUN3b1tKNH1iXyoobjc2SnF1K2FGbHpQazow'@;
put 'OmlEVmE7JlJ9OnUrPk95aEtEX3ZuKU1RSCl6NndKUitRT1IwRGNEUEs8RWsody5LbU1NKWxqaGchZDFKNUlYNXp4ejc9eWtELD1HVHxrOll0VTpqTls6WSFGQzZhMGw2cFZnJXJNVU9LJiY9SE9qU1I9MlV7O2NxYyEqfWZVLmxQfStCSkFXV0hkKkdMdTEpeVY/WVt0b3gkXkF6RzZdej42a3Es'@;
put 'STVWXXt1VihyejRKTlg6bnRuJCgjLi5MbmtrMHtJPEN4eVFZRHc4Q3BOPnVgWjEsVTpTL3JWaFVaZTYrQytvU3ljeStya1gydzFwKXxPOldjO0EzVz9WPSZFcUlCNWJVLyhRRTZhQyppOTM8Qj0pR3V9Zm8+ZzhYJEoqSkxSNTVvJms9ayxEYGxZW2V+TWp2d2VJTHp3MEw2XnA2UnUsPnpeYGNb'@;
put 'XkdraDQvP3pNYHpfKzZEVW1ORzhPLDhLQHs/NFJDc3k6Ul0jNW53NkY6dlsqbS8jbSV3XmteUCxNVTdgfkw9Z0RfJih8I3M2dCgqdWVSWj51amo9VzkjWHkqKT5FYXAqcXdVYWNyYFVwI2tKKkRAd1pqMkhEJSFuSnN8I0VBdm9QLGRaTyUuMz5kPkshajA7YSMoTEByVkxEbUQwX3JSdH5wLjox'@;
put 'PFVVbUI1eFglZ0E2ZCY5aClzNEUkWVl9K28wanFoLH5NPDw5bEojTlI1PmY6TypWIz94MyheTTk5ej4vR31iaTZjKiE2WGU6QFY2dHdsZ3VzWksuW3ZlJF56Q3Ejb2xbNiJSQUlTendibz4sYFpWezJYalB1eTxWWSpVPjV6JTIyeGs0U1J3bCM/JVoscCFRNyR6LCtWVD9eJFEkcERyR1N4NkEu'@;
put 'N117NkxkWnt7fnp9Vn44RFZvek5TQmo5V0tZT2QrIXVJKkFscmppNy9Pe2loMz8hMElZSmVzRF5Dc2VoUERCWExGTkRSL19pM191TVVUQlN8fjBtPXhxSX1hPEdmP3s1Ils9KTJ5PSlWZmclUThPLE5TJCo2YVN9e3xTJlRMeXtSMndST0FaKDBkSCNkZVRtcVF6OmhpQ3xhfkxYN2tvJDV0PGlL'@;
put 'eyxzLD5iYjRqVzR9fTw0OndGM0Z5OXc2Kz1GNF5xWlFlJER6L0FMYm8vQ1I3SEZFO0I3RjsqSHJ9I0BASWR0ey4pSF1eJU9keFNnN2lVLGp6ejg7bWwqZCVPfmg4RyhmdiJ+P3IuNE9fdCkuJmM9ekBEI0FnbX5sbmRIJCRFJn1Lc35IZkskbVVMXSticV0iQ2p1IzB3R2khJURlUl1+fW9bUVJG'@;
put 'ejUxNXZWdzBPaDdUKEVbVH5qIUFIVWNRUCtfL3x2VWs4WSk0cnl0KT81Ry5lZEphTF9oSn1PWE9mdE89IjlrLjhUR0hteVVXN04xdTZRcnRhdFN1eSYsVXN5PSw7WXp2Z35DTkFVTVhdclh1XkA5Q3xtNSs3RndqamIjU0dsdXopIWglISEpLjQsOEouYkQzPGl4JV9INHt6UGN0SVhEbnIyND1L'@;
put 'MkdTO3YwRUsmSjVJMWM8QFtPZXlZUEJ0M1R+WW85eUBSLyQoby8+YDJVZ2ZrUntUbVZkMXd7UkgkTkhySXx3bCFWfi89SCgzNEllSyVTJVgzZS55cXdVMnsjaEAmPCJEQ2FHOzQqJCgueVtELEBNWEZKTW5AcDIxYk5mPzVYLl9GV2A6K3hBL0lYKDVoTmZNc0pDWF4vRUklRks3fHNyeiZ7ZmB1'@;
put 'dGUyUn4qIWBNUFtYaUJDMFJaMk8kKnJ4eXR5QEN1Y0hsQnVRJm8uYy4jPGd7flZ+R3J4ZTtudSlRO1M5XVUwVURnPGpuXWBqdkc6dWo9WCssOWQ7RTUlQm8/Zmg8YUx5WCoqMj9kKSxhVT49JV9YLl86N0FSS1R7dkhfXz5me0ZSLnpLe3lodW85flgxcH4rY0l0U24uc24/Zk9AczgmQ2Q7aWxC'@;
put 'd21GX21MLlpUR3h4fiZYW1ZbcmZCZ05GWTF4VDwyZVRbQjtrP3N+e2hYISt7R1U9NE9PfXVyS00xdHV6OChjfUczPEt4Ym4kKiJ4RH5YUFBle28qQVJwNTg+TUlhJEJ+Rk9ATkR2Iz14ImFqZmdDUjFofH1CYjRbVz1PdGhgYzU4Z3B9WztpMW58MClsSyFndTZWOlQ2Tl9MXUxoRG9NaUdJXjtk'@;
put 'Q2F5TGchblNdM0paPTw1OWREWV5OQiwjSmlmdkEmQHB9YEU9Q1koMXFyMX1KNllUSi8ubC8sYmJ0aTFCcT5VdWhtaEgzWyJdOC4uTmdUITRge2FtZWk8d3c/S3B7dndDKFo5RVB1e2FXSF5RYjxjKmR9aDVrN3ZkVnxlbj4zYGtCdHl5QlkwXTVfIkMmejR4RWYlMzI9XzosdDBhYWBhX1prLCRD'@;
put 'dUBSYENHWntKSzQ4cWxRL1VBIXAlI1duJGNZUSg4ZEA+d0oxNEgreisuQCRYVD9COFNAR0RVcVNmJnptKWpac1sjOjtoZEVyeGomOnJZWTspWGJbTVJxInJdfT53RzljRSI2TVtGVjg2S2EkPylbcSxDbWYuS2dCP2BMP11iW2JGQCEzXll2akdEcT50THw3WXc0Y1NrXWBeOXUmSilHeCNmTn1u'@;
put 'dW4sVSVCeVdCXnZGIm9bO2dPREJeVDVnaUNpajU1bk5ZRT4lJV88VEYvbTdDNHtEW0thdT5mfTdfbiopKG1yPUAmUGNReShzPlQkdyxUYGdaTkpgPj56VEhRUjlqMCFWQDJzX3oqWkZTIkVJPHF6NFk7KkUyWks7PDpyM1UwT2omQCRATUdLKzUxPC9YKUNLeGgmS09jYWE0bCk9UlZtOHxVO2Ax'@;
put 'aVRUfXBvN2VdTDhRcCJkYWRRXSxxeClod1MsT3hOS1ZLfmBWUUp5cFtTWDEmIkxtcHpUeDtBInlNRVo8dXg2MzMuSSpTdHFJXk1XYnQ+R3owK0hrUjp6IWc/JnlXTS5yTCVEYXdufDc7S3Z5YTEpQyJPNF1XKGJUVEtva0FRTCFoenI8JjpRVEB8aC96OHhKYWJyRUVLWiZ9U24yN3lMdmVKMzRf'@;
put 'XXpUZDxbdVNlKmVNK1NVb009IjYlOHNVTFZVOEUhUlhnYERSSiFgPW9xSFk7Jik7cCNJfGI1KjNObzhMSWU2bjchbmthJVNXR3AjTHohdCtMRXFbJlNpKk5bNzQuQ3NqJFFYR1s0Ulk/fFRyfj8kZDBjMHx3UCxLcTcuSWt6ZlhPN3MyU2lWYDRjdlQvRj8wUX18NW9kbVA1PHteVk9aOCRiSUVX'@;
put 'Olk6KzN5eUZGLjM7NT5bQjUhKmRWYlEodSRQMHxrUFVRaj9zSk9rMX1QW2gzc0x8UXRdc0o1SzhjSGB4OFJAOy9NeU1sVk5eVFFCcGtgL11wVFY0U2cmfjtrUjFVY0d+fTg0S2h9QGMjSlI6fXt8KWJ3NCtgOThzbmlhQTZnZjZHaVV7THF3TDcwRHFiLER3ej57enpYRWVrQXY9Tmc4PmQiJTpv'@;
put 'eyR3eUwhe1VQTFRaUmN5ZTNKalUsRHpgWDVnLyhaZ35nZ2c/VEdRVWd3O0hSY0kvVld+cm5xb3JNUWVERUhlP2kzNStUWTswRVY3TmQqYU8rKGB3aW9tbTJFWXVoeURNZW9NdjhsOTx1KkpqP11nXmpUX3JUT0grSl9ZPGFWVmQmanF0ZF9dKVVdcTJ4W1ZGLkV0ciksRzI4MCpHPD83OU8mRGJF'@;
put 'fmJhOEcobDxRe15HSTR6Wjxmc1B9e3x4OlRBZ3xEfS9oM34ycVVvW0c5QEZfLnNQRFhwOXVOJll9cChqUlFFd2lwUyx+Ik12L2F5MmNGUTpWLFpEUWlVI1YwJSl7YFRET04hKiNROVY+MEE2SU58Uj05PFBDPE8qIj13X0h1fC40RCRMdXtgWSpEOiUlayleNW1TI2NfbTFhInVvWXhbNSIyRSJn'@;
put 'dkg8X2VgW2dSN3tEU15BRWhZWWNGT1VOSHZfO3JMIUltWV5vbkFDdXdJQnVSK3VoKHVPcVheOmVLXX18KHdaeHpZNix2d0JHRmdpWG5qbCRIQV9UdTRkYmohVXwiRSFDNzc3TlRjNiw/djhJYU1oOH05NXVaQGBiOXkwRSRbazwmRUBma1Z7YTVWNV19RlhdU3hDd3VsSCN9Y2RsKnEkK1R4Mzdu'@;
put 'KF19bylnXU5qOU5NeT07Yy57TEgxUTs7RGtCJCRraWpyXSohbTJxREh+O2EhKDxYOEI9XXNqd1l1fHE7YnNkVnIpWzAuZE1mciJSMHN9aEVtSVVKTjNFXkNSQS9fYUxoSytgPTgsQUBGMyNrfXs7YXRZazw3MmNzWiZGIVBPMD9jKzI1OWpOPHwuRFF9PFhUWmB3Qm82dSQzfHk5TGlxSjJ2PTlD'@;
put 'YG57aUZIfTskd1smfD9NY0VsO1JPYl9MJTNgVF9AeiZeZWlqQGB2UTIodC5DaF4kSCNBfUI+cVRmdU0/eSw6bWsyfm00LkY9LyJWTShJR155S3hfR1VbNlBnZ1ZjTGc8dDtvI3JHO1d7eFgsOnAwUXx6Il1ucyZiJHBgd2UkYTBRU0UoKTIuXjZOOC4pb3xuZF0lQnJUSVpmWlNZKmNkV0d9eT53'@;
put 'LzlQZjRKcHc5MGQxamBaQVQiY2liL3xNKERSXmIqcSg0S2wpIz92LipNWUldYVlQL3hjcC8yRlV9fFJWSnN8S3smMUhbKz5Lb2pRfndJXWF1fl07djxQWTZQJnFqK0wpKmQsNyoxKk8/NV1kdy55WypWaWN7WzwuVkR7SFpYTkBfIVt+UV47RiR8eEg1WXpxaEJjbzBCaGJtfVVXKz08VWw9ITg0'@;
put 'bFF2aixxI29XaGZbMDtNcFlgTipmQ3FxbENHN1siMSgpVnAqO3NOX3xPT2M0KzxtUlpheC9vJShHYXN4OXQxJnU5bUtJcXBgXzkrR14zRlssT09NOmVwWjcrKGE9JlZ9dkhbQX1IPz1Ma2kyK0QsREBlK1Uzal9fMiZ5eHYrPHF7YVBmJmY3cCN0W0h3Z1NuXiZ3VTI8VDImcjRrSmtUQ3RjSSxT'@;
put 'LFRZNitKP3t9WzZqLGJIVDBVJmxqLyVIUGJSfkJKTnw7V0tlMC9xKTRQP2hdQElDNUw8c0wyQnd9VlQ6bXsqZH1fTD1ZUDBoQl5ufH0rWywlPlouPiYrLEZXaClRflVZYDhyK10kbl4jI0BCZHRKMD9CVlQpPFYwMXM4bjhoOjE9cnU2Z2g0cn1qUD1qb3ZaWSJRPU9nKih2V3F+YT80YzorWD5F'@;
put 'RTlhdDE0ez5mSGcjYVolZiM8V3hhY3dJdVZnZ1htQl8oX0Q6cnJPR04uZEBbY2BpWSNnejhWYDpuUGM9bm4jXjVZSD1vZ3Q3RDJ1PWpAe2BqLl9APzdwaVFNO0xbIUZdYC5BPXNfU0YwRj1DL0xKRj5+Okh7amhLPEoyZF98bGZWPCVOc0M+biNTO1RNcyZ0RDJ8bkp4Yk0waUQie0FzO3RqMkMv'@;
put 'X1ZZWyghK19RYT5vUXMhdVdGJnNQRVdGYEhifV5CT0BKQT5zeCQ0Q1NvfG9GUk5wMzpiUlY/IjxDcXYrOXp2bHtMW04jaHdsVztvci9NSHtsJiY/dWE0YU9dbm8vPU1obDxASnhmb2hOckdvbjV2YjtZb0U1QVlDV1RhcSl7PExYYzg9bDxOPDQ3KT5ZU3c6JEVWWiokOShHej9xdTpDRjNiJlhO'@;
put 'fCw/K05WInYvcmBqZXhKNWkrLFdLKFR+KCkwWFA5QWAzL0dmaTxJdXhbeip8ZEpXdCkidCt4Y31xYCR3I2M4OD0vNTldQW0wR1VIaHVMSU0wYEd3fVhXNyZ3S2IrTVtIdWpdKmU8T25Ne2dnfHZxZ19tTlh2RlYmT09nOmN5RkUlVSpkOmQrcV9qTiErTXojTUZkNC9sMSY5cnhtZytZSl88biM4'@;
put 'SWhbby8qVWhTNm8oXzpTZHBYT3U8RDxgPX1PY3lmeFVgTUYpL3BEVXI5MnAyOnBUcnd4JmF7JDxFYEdQL2BXO2Jram1tK2YjdUJjaG5gdXojcHtbdmI6bjdsQ3oqc3xqVFpoVVNSXnhIPFl5MHVGNkNyMnpKXSptdDRHTz1PSmwrWSosUExdQiVydXNCUU9gUnFyVFBSMGBPITZKb14jdnpbOV44'@;
put 'P0d+bTk3TCFfTzZfO0tSO3xBbSpVZWw0SDBoNmJBWkBBUVRXcng1RFh6KEN6NHcqcj88eltSQixxby5RNGwjM0pIaCxoQCY6d1U3Ij9oTk5OI3chIVlRSCFIcyU8UVltZnRgL1BLOkltXnt6YDFZVDMmcDE6Xnt0RGFxQ0U0MV1ZRldOfTJISCR8cjhVcCxVW2dxQmQpRTBnaDZAUG5BfkRqR2Ev'@;
put 'VS5kRzVVXUg0bExRaXd0RWBiNUMqbH50fUoqditGLEojVXpOel5mJUtbZmY5OFp7OjxUREI2VEgselpoKVpFeWQlcFRNfWNAbSomRXhINixjcWdgNz9OTi5Ib1MpO2pdNFYoQ31OXz4jY11VK25JOHd1MzQzZzIyMi46Xkx4em5Ye0BsRnYyT0wqeH5ERl09O0ZhflAoVXE7TmxKfD5NKk4mTGwm'@;
put 'N3o/V2RXbS4lM3FhbSh5QTBed09rOEgkdUY9MDNXNSwpejcobiQ0Q0hZdiM1Rk0sV21oRW5fYnltQ3YoaThjfmtpSXdNRV1gKj0hWEdKcUBWQF0jbnE9OEg6VlRhYklZYmJPSTJHNixlelg6OiVIRVptUT83YmdmQEp8K0pWNX1fQCN3N1RFSEhrdV0kbCx6Oi9FYDdqfjpRKV5FUXMhIVAhS2xh'@;
put 'PF9XfSkoUGB6KixxfSxsRThBdSopaF5XPFZVIUVUNTZIfmpXJkVUKC42Ol9PbiEva01sU3MvamJyPU9LSj52Pz9lTSFkayZOe0k8Kjt1diJuMWh3RW13UzEjVCRIaC5KanJ0IlpCa1lrdHxCdS5oQyguREdOQjNTIyQ/Mn0uNC5OcUZDLlJZQ3Y7WWI1M2MxNEdmenM1eypSN3djdH5CRG5sMDMl'@;
put 'QG0sQG9oKjNLRSN7Sz93b0ROQFJ3NSJVez1hOmQ0Xl14Pz1XO1plPnNYWU0mTG1ha0YwM014O24qT0khZDRzOTdub016LHdFRUJ8ODttMU1nVyUrWX1SRmJrLkRAKCJTZGZpTW8qJURYWSg1dzJCMWBRfnVNYzw2UHZ4SiVsdmhFVH48biRGal0oLk85Nzp1NE0sYTNDKiU+Tj1sSzkub1MmYk9K'@;
put 'NXJ2QyptZS8kQiVMMDVBQ2o6THhgbTcsZWRXZk83cCQxRUw2ZzdVcGhSR0pNODZjdDdDU2Apfm5BQG5Ral95fUM8NiMhQ1VJVFUpIXVIQTUjR1hzKng8R00jKTdkPW5rXUM5N3FFZiJ4eDY7IWlTRERPYDkxcF5HV2RzVTheW0Z2PnVIPnFbaXhkNi4mM3Y0SStgcTQiWikkaFBMNWFsPGtMLFA9'@;
put 'P3oiYjVpY3d0c1AhI3ZjdiFiXVprOjIsSl5NUWkqQHdWNk08PUJbSFVROmUxMF4/YCR9WStJR2c4RVJDQiZ6OUNzN25NUkhFOm06cW0wZCNjUTU+NVlyLjB9X30jbEpQT08lJmxIVWthUE4waTBgdjw+NjQ9RmtpKjk3O2lQOXpBckEkOlA6d0FTNiUkT2hjWSpBaSFhMDV7RzU0UnVCLD1NYUxz'@;
put 'b0ZGIz9FWVJMJkNYXiZjPy9JQ211NUssL011NlEsKTdsP3ZWVn40MzVWSCokJlVia09pWGRwcDcrUjdDJj9HTi5IXWRaMkEuLnI2KkpsM1ZuUm10RCptNnRYXWg4QE5hRXZLPEcsJkVXVTxtdVB2Z29LZnswWnNxX0NRY11mbUZoTF07UkwqJjo0dVUpKj46b0RKJVl9Vz9lYHw1WlFwaEVaZmFh'@;
put 'fWpAL1EueE1rU21XZ1ltU1FPK3tlTnxbVDc3IyxsPDZWPnp2R1ohXjZrOWhQW345fH46OkQ6ZmdYSFR+bXw+dzdrYnFxaS4rRnZuMkRKOiwzMXd8YDA9WnR1OG9mT1UkN0ZuW0RUPWRwdVA/MypAQix9UnE1SSJiL0wzfiF5NiFKbkBAcWs3dT1CTVhVJWp3P1gqKSlFM1RUJTlKO1dURHY+bTI4'@;
put 'UVJEc1pZODhgckIkRiVla29JKSZ9YHUiez9XZkBuLnkld312WUdLXiJpLnM5MiZIdl4kRk0iUkBfIUVZVWllbXtFQj14YndVKWZ0d3BCZHIkXnYsIz5iRGZaUWNhV21OLjhDbEJxQiVENHsxLmJ7cTcuYiUmWHUrViZ+S213dTV7JGVRLEIhIndlS31odyt2YXJ6aSgkaWFbXUJwdFZ9VyVgdDxu'@;
put 'azheKV97ckx+UGA9fmBISkhlUXhDNClFSFBASnRdfGNyaCYpPDY4QDJKWSxQaC9SKSEzWVRYeFgoUi5iRS5yRnJAblU5W0k9bUhBcT0qbj5sfVVPaH09L1VBaWF5VlYzQVtgRHJsS2A+NHNmY0tiJjkvPXwmKW1YJFB6VVZ8UiZTP11uYFojdUk1NU04T1BveV11PlshWytWZ1g9V09reEhuTVVR'@;
put 'a3w6K0JveE9UUEgrRGJPQGc1fVJvR3tdcVRySGZuVFs8MmtZZkZ9UEBtLG8oe0JBMnprOlUwP197VCxTVyomW2QyfShrQVpGYlp5aGFma1VYcCVoOXFxaEx7Q2hrZks+L3I7UnJWJldET3U0KERLKl4/RzhNfFU9XW4/V2tNaXA3I0c3UDcxYEgqJV1AOSxqOkw8X2tkfW9dakxneHx3eTU5bCJs'@;
put 'JSozIitAUHh9UGo2THNZKXZgdjBrKyx+KUhlY3ZxSXo9XzkoRyZkY0lnNmojJnheOVI2ezAiQU0lRG1QRnN5RT4+dVguQnhGfUdjLmNnNmhbaHQ5eWRsd2VMYS5za3liTXhIMWZWendCTHxuVzFIQ3sjZFMpKHYmMX1mdHs+NG9qK11pJWxdYGBJNkEzR3ZYaSpkLitnKG4kViUxYlJ3M01uPEo3'@;
put 'MF1mfWYjJUVgellrKTRbfGtPUU5xLygzWFdnekZLN2dMKWl8NWZYOWtzNSUoSiQ2MEMpWXdNdGRiPVdnSltmTnlSb3A7XnM+LFYpcGtJW3doc3x5PytdTThYR3JWLyhZQm93dGM0bSJHOmZ4eXFOfUteMzA9eHJwJVNOM1hKb2YuKjU2cjs8ZzhHe1A1K2A2T3d1L0VUbG5rTzMyZ3VAQHhzNS9B'@;
put 'RkVfVHtadSxgXVhZYTNFWj5eTVUkZVlIKHpgKTowe2B4KyRwLiJOIUAhTiVFQXRZRUJVQSFlV3M7aXZwUn42fEQ/ZyZtY3svJHomTl12Xy5gPy4lQixtSHFHQTMqVnlbbXx2byU/LiR9R3NINXFxbW8rWj00dyNiL1UxcCRMbEllVGUpLFhyWG1+ezlBQmcxc10pTT4vSkJVL2BtPFdtPXZnOVEr'@;
put 'dS93Vk45Slh0MCF7Q1A5cy81dzU9JF95MG1GNDN4TDB5ZmFVcyt7T0xHJDNHOnxjQVt4eyZJPFJMWm5de1E1PkBDJEYmbDV3IUE8bnAxeC5GMmtxSzlxTFZjPndufDhJI0F0VEBHTWlmW3RnLkJMM15aaiRlMGExdWtpPDY5U11dfWZ1OSo+Mndfa2IpdmQxRW9yLno0QmJnJSVQYEFZfjBVJiU7'@;
put 'I2U3JHtgSmw3dVtVOWYhenQ+PkI5N0F+NkYpI05wQH5jVWhUWyw2dVZzbnZmPmZ9VUFHej05Z1lYXjV7SyxOLFVXS0IwX0NuKC8xJGlVQTgrSjopLHAxcikuJXs9aHZqW3QrNC5MblU1RkN+ZlluQ3JFOyg5eGxPOHc6NXlxS1hEMyRxcixgdyYxa0V6Z1R8KyM/WTY6Ol9oZSp9KSx4a3chV0Iz'@;
put 'P3hyMHxOUC9XQm9tWkVmS1Z+MGNTeHFaITBtPG48Pkt6MTVyS3k5KHQuWXA6VEssb2V2P1oubiZJbV9YfD0pTkdpVTBgcHJTK1dPSHQhZG1wJUJKYGoyLF9Ze0VHJjA2Vz4lLi5nOyU4V09EPl56cmNgXUEkQ1YjMkVgd3koUm47cixIY1N3KCImenA1ZSlsWE55OllwIWV+VXVmeCo7ZkhebypZ'@;
put 'aTJbek8razZqQEhTSHV0eEJlcl1eW2hQZV8je1tgK2gmWEdrSDhMKkllaj8+d2wpQls8bW9VWTU7KVlXY1lHXkFYRUgvWmBeNEtZU1M/Pio2MFcsJHF3fTdAYlFRRCt5ZWRmR01HV0ttY3h4cWNCeEs+I1ZFLko0ekR4aW19enUmVkNySyhBRyNRai9JWCZxQUlVLEIvUj5SZytLbihwdnwjK2F2'@;
put 'L1k7Q1BETiVOYVF+dWVQWV9qMEdvXXVWLHlgKnAiMnhofC9PTHQjSzZCO2M7dmlsYjRgRl5AWUB7M3NlKzhoW1Ard1tdeVg6MmolJC5pVkkpSCM3LE1JUTFkQ09DQ0g7d2x1VyF7M2QoZzo1LEx1WTI2OGpfYXdMZE42THplfGZrMENPSlphPGomfC9iR31yOyZhZSt8cSYhXXlMLFtmLllaVDxo'@;
put 'TloqTDVlVj9FJV9DUmpOZVtANFV4RExQdlYmPVo0Xk5mYmt6Y2NxQmohayQreGp6cm0uIzMiXSlZZDpNXkJbTHBNXi8qb3NWKC5SM3hWX1hsKW1gfHMle2IpIk1IbUIja2lqNll+JFNWfTtANz1uP1JoO2Elakc2WX1SW3xnWWNbW2pqKkZ3eEslfDdKT0JYbmI1NnBHY1tHdER3ITpqeEVeRUlb'@;
put 'MVhLZyNtcD0jemszITBAIV9nWWo3VntXQ0JMImJGSkl2WD42U3VWO3hdOSorUHpER34pa2hpVChYRDQqV3RMTGNlemZfMzc1JEBHOz9fSlo7fkY8fCNjVC9DdjNMeFo1bDAwJkVpKjI2UFpsJDxwXnpvPT02Z0RfKEVtPDcrazUqK0FsKDxacVVGMm9OUEk3Q0MzLD9vVXltO3gqfSh4Ijl0KiFS'@;
put 'd0Y5Yzx4WzQ0JTRrPyY+JWZFQmRpTjI/RG4oMzhZZnI9O1l8Z09uKG1Ra3cqZjJnPS8+Ki47KVMhPm5XWiYsK0cqMTgmQ3c8fjBgMENHSEQzdSJ+QEhKNDM9K1BYWD0mVVR+MSlSa3pMY3kie0U4UUVHVT5AUX1MJW9qQGdBRHEmdHxyUDosPWcsbT1jfUU4IUAqczg4MFtBYV1PW1N3dC81ImJI'@;
put 'YHRePkpXITBMVmxiS15zNnk4KWliWk1kSUMmTk86U2BWMihOZGFIOkQ8KyI+KD9KS0tkMjYmV2QiKWttT0NedjVMIiUqL0BaUXFQY05JJXtdVypxVUtAMkU4WHBCUF56XXxKcGNtUT0+W0teKXlBcD5XI2RdVnZeIS42c19vfDhlQ2ZEeFtIXVUrSHk3cn0wYzohS30lcEdQU3U8PDYqODl5YH43'@;
put 'OHFaKHdiOCtUWT1WXkNZTzp0fkdCPHdOZzNiWmZ8eDBlNHIvY1V5US9ZLipdUTs3d31PY31fYW0+X0xeNXk5RSZuI08ibkhwdEgsRmUqXW04bntDRn5AUnxbNlFrPmsoczxhfERZNWwzdH0rfnk+fUJmQldWK29ISSYmSXFgT1dob1suODBUST5EVVU5SnAyMnJWdCs2c19bJiYlO3YkbEpXfWdZ'@;
put 'cSxESzRxPW4xWUx0bCghdDtqVEN9Smhbcit2QV9qM15XQnQwbDZjcDF8Qmg4W144dnwxMEdUO3t8dy54djY9MG8pZGt3PS5je3ZjYjoyZEtYMXhhU0Bpcnh4JUB1SzdxJk9LQmZfSTAyWk56aFFnTiIweGxLVF9BRyR7PntpfmNYan1UU1h7X3lBWDE6Yip6XmojI2FhdEJFUVhMMjRbKGk5dlla'@;
put 'b1lYUm1mNUJGSnRGKTdQbX1mOUtfYXg5I3NHYTFkL0NMb25YPkQ0eCtgL1AjO11JJGJ1W35ZP1BhJndJU24uTDFQRTJRZkZeKjQuM2U8bUI1XXg7Qno3NWJhOHNEak5OITQrcDFSNFRjZU91JUFWZnw1V21QOzkmaXs5JGwxans4Y3koWzFnPyJeTz8/SUhIeUpDcT9jWDtjUndZdyRYTTJoWEM1'@;
put 'aFNxfjk8ciYmbFsyKitfbzMyXj5BKlskRD8wdm5FVVE+ey80VHExITtMUXkxdXA5WVAmSE05Yk92OlAlKyhOa1pGYVk0KVQmIXtWRFRROVpIbW43WVphPE9qNj82UUd3SCoqengmPEF6Y1UkaU18Oi8qd2pFQSpzOWk3fUU8eVFyREZmYy5rOyhldTd2Mnp+NzBsVjdKb1VXVGJiYmF2NFc+PX1e'@;
put 'SmBhZTYqUGhFS2ptITZlVVB2NH5Pej18Xmc+PlQvaGtySTg8VnNuLnRQbHc0UEArJGJpdjg2OmpjJUIkVEh6RUVnNks+e0FROUhibih6eTRfPl84MFpAPG98ODdxOCY+dXxyOGxTVjxxRUAwYk1CNz8yeWsmVzxhJUFqOD81Pm5fXyJ3Vk5+VDFPbEVsKihnNENvVl1LMzdlV1cqb3okWUN0NFQ/'@;
put 'cSpYNnZGZmgjV0J9Q0skJlpCIng6TkYqaiFad2dbcXo4NU5YWEpjdlVbI005O3lnWF1DZDxqbzVDMnVUOW58LnVbT2lqeU5+YiJHJlgxTVl3aippRHF2PWY7N3lReFkiT2NHRlRvI2RGQT5Xe3xCIlQsdUJzR0s5NTtmIzRbPSZGblJwKmRScltBKDhAWExBZk9AKFtLVH5mUG0mdSswbTczK2Bq'@;
put 'KyVgWVtoNWVkdn0zejVkZVhhJmJZY0grdTtoV093PzQmZTNXYFEhPDBGJWJHR3chV2AlUkVUX0RYdmdDV1VFJkUwbCkwKzArYVt1e1dlT0JlcjdCXXNjOUdgJFdyZ2tvTSp0aFhiT00/fUxPP304O2A/eUtgKk9YUzs3Nl1ALENjSkwhZzBSKjc2Yjp5bVhGKiVPPV5aRClmKkcsQkBscHdxZGRu'@;
put 'P2BqRW1vOSVlOi9ZITxuN24oJWVsTFFpWTVabHxgekQiWy9jOEJ3Zj9mbzUjNUpnRkorNCMmIyI9RFBvVHddbDZQYUw0VG5iYkxxRFlFaTolTGUqIV9WSjUqbnpTNjZdKTttdTxuPk4pSV0hRyhTPSJaa0g+U2QpT1kreSJKYnFmRSouQWAmQ09DZTJueloiVl1zX0k3REtqcnFvT1YxUSwvI3Ew'@;
put 'SSxfYChbRGleYDowXU4vanN3PndieCNSfFJEPFtNdW83dk4qRkZ6L0Rie0tjLDJGQ1s7bGNkVml6eW01dW9JNDAuTW97LFJZMXpIMiRvTzA3fnYsNzU7RmU7a31JN2xKIWpdbHM4InlAWSlyVU9SVjZqKTZZUXV6S3cpeGhDKU19bll0U2B+YjROMjFfU2lkQE18SXw1U1ZPPC9sQStmeSVxSzIr'@;
put 'RyVTIml6UTQ9JWlXdS9tLz43UT9ZKmMxSGJLJnMhaERCMCtDWnxTOiZ6WCl6Ol9XJU90VSVwSkNaImQiayFzPEkuejpfcHR9TT1fPmNOKl9aI0NXMDZZNnVYZUUscnohN0MyJUdEU0RTb058LFMqIT1NOHtTUyo4LFp8cU5UaEZ+SGEvbjEla3plYDEsWW9XKkc8Tys0aF1Ufm4sTWkqTzFwUyxH'@;
put 'c0ohYmwqV1ZzezEoIW5jQSI/IX0wVyNfKCgiVFEiOUUuUCFuSyUuLmh+MShVMyw6JThMVm18ZFVCXWVGUThtPihEWWErd3BxQCR+IT5YfEo9cnRjXms7dV4hcWc3S1hEKlN3ZEAqQSZCaTshKyF1JXRuSmY3Syhed2dbYj9ldExvMD5DRVAiRyVPfiNwN28qeWc0b1JwTzFra0g5JFFpLEJUKjUp'@;
put 'OHZpemZYSzNdIU9aenIlWjVTcm8rcEFWWWgvQlFDKlJdflk3bGVNYCF1ND99YSFHTlswZT1xTm1STl1ZKHEvPUsiVXZ4L0EwSSpeRmZ2T2VaWDt4R1p6cEtzOF5gamBlbH47QjFdT11Uemkjc31PXVQwP2dXIk48WzI1ZUAhM3Y1dUBgWF1UX2Mkfn5neFU0akErMVFrZC9ufD8pK35EeixRUCIv'@;
put 'Sz5meUlOVCoheGsxPnw8bytHKVpbZj9qM19IIV9rc2kmPSZOOUJSV0crTXteP0hVSjd4aUZ3fUc0SmYuLHdvY1pAc2pWUlBkPyhRe3NuYk9uVWJZeDBnVl0kU2pUOyg5dlpBc3dAeEJeSXdjKmY5RGVkLldSKUd9SE1EU0ZVR3RbKlVtRylXenpPUmAjWkRRX247JkhtO05hYSo8emRna2IsZTws'@;
put 'WnhQJTBfTTFDfl8oMnh6VEgkdHNxXl9AIV17XlEzUTdEdjJRWmBJKF5qLFchTjcrWmhKYSFHemdsNHFzJEZyLDp1dkRtPXhlaCRkYiRXLFRuYXVCOF44bjdQPHRUOU5Daj1bUyh3TD5oLDF7djR0Uil0XlRGXlF1bzBQQyFeVT0zUkBULDZHMDFKdXBJQ2oiJElCcXczZjhDT3xbNnttc0oyRDw7'@;
put 'UFRWcmB0SzZWSysxdF5PKVFsOCxsb2M9UT1lb1pePl9JZkd9YGBnbERaI3dMR2VZPzBkbn08SDJANmQkdFRJc1ZeVHBuLztCNjx8XXIhZD1vLEltJXhzcV5dbF1YY0tYdGx8JER2Vm5Zcy5wXWpYbW1DfTdOOnswLDM4VF8iUVtDIXksJil0VDVkaEVtXT1ocmZ9Yk4yRnI9a3gmZF5XZ21Yejlg'@;
put 'WnVQeHYiPSNqelhfKkM+UDh9ZyMwQHQ9JDdpRXwmKUI7YS4/IVZoVVdGKVNMOlhiJWN+ZnkhOyI7PX1TK1U8MGRNKW1EcmxOXT1VXz5ULHZWcnI6RXxRTFRhaU5SMElhRU92MSk+In5VLChTN2k3UDd8TVlYU1JRenI8Mm1SUnZZdmYlUCJqendzVkdle1J8SUhecnl2ZSxQPzBvLCxqXSFuZiVQ'@;
put 'PzAjaSVuVG5Yfis+fTV3VVMjemo6QFVtM1BPIV4uPE9ELl5VNDxMMXc1Im08MG59QWxndXp1RTg5OUZtLHdlKmZoUUswSit3Omo1QzRBMmx2XU0pc1JKOFI1ZmlPbTtFQUthfFpYdyZicFs5TkgsJE93fmZyZDE4ciw0ViFzVkI+WDIybkZFcnEvOyZgOGcoJmFsfVI+cnsiOzdTOFhkWTUuazpU'@;
put 'QFRdMnM5UyVYNCVbbT5MV2wicXtYS1s/YjVRU150UVhDMEN2MCUwNFRuLFZeeThsbTVTPj1yXSRpMnpPTmRhNjBYUC8rSX0kIVhQbjdQPEdlQEsyb3MscWh4TW9wNDxoazN3M28lO08oSiYqVS9+ImdnZTZwXkUlY2VFO3JCXnhSMEkuS1IsQUt3MEM4bz5Lez89djwzaio2RyN7JSIvVCM6bD80'@;
put 'S19RQ0Q8T09wYzAqP2IwcHxXV0lRVVtlYE47Tm86Nl4lbTc4eElvVVpUKi8/Sk9LfCh0KTAzRHFtO2s+NXhZPWFdXipET1dWQDxLald1UHlbSHYpaGk4OlJMaFtffWdHZ0lTQ1R7NDE/d35nKlUiPzBJP1M+WXpVL0pnNj8hMVYhQzsobDBWXlNUL0opO3k4bUV8WT58JjxXfnZIKUp3OUIzTUYr'@;
put 'd1tLdVR0YjJaSnVYWCFCJSk9bntRe0xafWBhZi48Rz5lbV8mKEh3UzpZIzgrUXdDOiZPL3hMNmk2OFg3NiVlfldUISs1XzNLNyw1flljISQuS0pxbn01JipUVF1US1dqOk1yMHA4Pyw0ZmBYaz07TCFhVkAwVClZTzkpdWVYPjBtV2IiXWNiLGhjcnI1YCFuVE12YyM7RX0qOzs8KmxMRSF9Mm9U'@;
put 'QG8qJUs4e1FMQGpxQUQxRlQmUV80OjRFLktEUHMkYEUqRCh3dl1LXUdlaylTSjR6b10qJmphJHgqWmpzQTt1X3k4cCNpTVM1PzhabkkoXmpxLDBtKkl2RTAmKkt6MjQ1VFRzUlMxREJXanZMLC8pVUMxdGRjemxzKjU/VF1NY2xMeS9iUm85TURDSCMuJX1xKT12L281WmcsfDthclpINiRgTzx2'@;
put 'Q3F1SVRlSk8zXmgjXXsveE1XNilAPGVSTD9LI0Aqc0QoKUtdN2kja2xhSCEhWEA+RlR5RkYhMjVlPDEwNi9KLllJNiVpfXJtRWVsazxlaCNPazNsbVp9Y2VlNUNlJXA0dHxtKGQrU3dHXUZjeVJ2Pi5gcnNMKmEhVzdWcncsT0xtPCRtVXBQekplSlt0bUEjYClkfnRIP1t8I0suKj1vN2tHSn1a'@;
put 'a1RHK3t2MW1OZVsmSWlxajZNb0pNMEdmXitAY3NFNnJLeX5BfD89a193MCFpbCl3bz5BfSZtKC9qOllLQUZoMDE4LnI9NTxNW09lcCI0YE5gUCxpKTE+JUh1NyxdcTYhVGk9Ty96Rlg5eEJrQkxCPWhCdHE3MlEkYzl8OXhDUTo7VU1OK1AqdXNxaVIoYG9eZGNKJmJyZDFCe1IrOXdbMVZqVyxl'@;
put 'aWZ5eVJTbTF5Q18vJU9DQXVDVS8oOyVkSTVOd1J0d2NedD9zRS5FW3VlNS5nKV9gej9gUys0YHs5RXxEcmtJcmJudD5Mb0Q8M2EhM0xBK3I8TzBeNmExW1dRYUddcVJ+bXNxXi5ZJS4oV29+JFEyeWxaRjc9W2g8SjF0QSNreUZ0NnBYSiFDMmxBbDUqa1tIZ294Pnd2Rz0jWSQmTHd4PWk+N3t5'@;
put 'YixjbUNGMFBRbG9+O0xrTDdEUyUiLzt2bkp4ITl2ZGtXdiQ/UV5KZUVJSD0jPFBWNXhsbzJ0MSU8IT9JVWYhdyQ2SE4/d3dPaE1IQCJkOz1FKEhsNigsViRZdlZKQzk/OTY+WGpzWXRsQHpjTCJOJHI2QnJGdE9GXy94JEx5e0pwPHhmaktyQE08bXF0c0hCWmt9STZLXVp3cGZKcFdoc35abGtP'@;
put 'UUlgLjh6PVZickYrS2J+WTVdcWFITnJbNyN9IjZldXhFIkBYSEVbaE0lIlVTKHFJV0lpSC42bVdyTXNhfXkmeGg5V097OnsuVX5daiZaSlorQ15rRiVDZy9DTzxid3k4UlJ6Tjg8Li4rLiVCQzFmPDhQS3t4V0gjYHM5R1YvdGhHdFFwVEhWITx7PT51PzEmRXIhXWIjQWxrSGBhXUBiKDs+ZiNB'@;
put 'bGtuYGFdbWgsVmpLPylyRXNOPXElVk5POC49Wi46Lk9PPDJAek1LXzxtYjs3M2s+OnkqRkl4d3dCciYwQE8raFJXJipsTF4hbGs2L30+JigkLiFiY3h7RmhQOWN8Uj9TOE1OPGhmK2hgQGIhdlZSdjVEelpuamhiMWo8Y0krXlU3ZjdDNl1vakxscV5UOzA1R1FhVG9qYCNIa1FkPTNvdjUwezta'@;
put 'YlhAXXZFckUxe2xJR3JQdi4vUmAxTThUYlV7OXhKez18eElPQ29rT0clZipELzQ/LmUpYyVJSzUrYy92bTFkLC9QN3EhTGt9VFU8X2IwdWBOYVhGSEE6P2h2UV5fYXk9Ol5+b30hNntnYHJAMSEoZmZsfV9WRS9jQikrNDJzfmN5UitVNSo3LiomXj1yPGw8bGY4TEIxPEx5TmxrPzwxP1A/MFdk'@;
put 'd0crZGNIPT1RbENNUE9pTjd6UkpNNmRgNHwvckROVzFofEBvLFh4QGk1cnBUNWc4SWY2aXlkJXc9TjxUKzRIclcyZV5AaVQ8QzUlKylTaHQkanY9fE96TUxac2lMWjoyOzNyTDcuNVNjW2wpLGYyX0guTjxvT0N7WVVCXV5hZkhrKGNLWHA0P3wjQS9qOCI0fDImbn03e2NwUzZgenchb0cqTXEk'@;
put 'OjdJayhXM0hjbi9RT1diX31jOFtEcnpfXjh9djFRODxOd2p6czlvayl6cC85QnJYKndEbjwiXlciOGJvUSt3QU5eYDpbdEwpeyxDeFZEOW1WYy4sLkdySWdYc3FpKCFRWi98USJtMjk5a1ZlUSRAS3NLVCNxLkYmSm0wfDJtOSVyQCg4NlBpWjB2akErKnomPHMuU0ldWnY4YXpVP3NTTSNLUStF'@;
put 'ZW9iXVImc1U1XUNlJGIhO3MuVVZ7eS9uODpgcTh8VUhHZnc7YGJ0Pm5GNksuWT4iPHNlK1hbIyF0cGcleyg2TUVCTllbUShEclZQRzpJd0dwN1Q5SEdjSUR3VlgqNTkqWHouSTdZTCo3blFEZWl6KEtTa0FZSDJSIikkSTdGYj9XV0tDWT9eUXN3fnYrd1hCNHdsTCNDWmk/TTYrLk9DekYwUyws'@;
put 'eUpJWmpBd1d2UnY8W2NFeHthSTc1eV9wT0khYnBbL0M6QCgqanVVKztXM3dUbnAmJVVfTUdqMj9DYj1eTjU+bDtoQCFyc3I3OFF6VXs9PU16VXtGXiwxRD4+RkooWzdGJiNdcT94a2lXWU03XV4qbzxNVEVedExaLHMyW0VPOD9iTyU0PTFROmlMKWU8NjRNNlNQQ21+NCJrNTlQISguVEM6dDt7'@;
put 'bn5oJENlSTFvPSo4eHMwa0dLdiZaamxOeSVkU0V5Ul45SWVhWGJBITcmUEtgaHxnYUVHUSU2WXxIPShTaix6KUpecFtkQ0pMOWxXYltlMDRlLHYrcU1+alAkJVV+UEI5YjAiRDImJkx0dGB6NkU9M21oQj1QezxlXU5qekckSHdXTz1CVUtQR2svaUMkeS80Nko4X3xYa1gmNVBEYyZtRz95YXhE'@;
put 'LF8kdXUlKllJY2xdaClJaV1dJnc7bEU6ND9QLkJVW10mK097cWVNNVJGTk1eS1lpWS4lPWxrUyRDVTskLkI1XWlARjhTaFA7JnZ7Lkk3WVc8TSo3bnIhU0QlL3ttcy5daThCM1RkaFh8QzxBKiRJX2kleSEjOmsie24+KiV+dlc8LHc7KmpCS2EuJWxMciElQzgve21ANXpwSD9GaXJFdVNdc1hK'@;
put 'ZW5EdnRRL0pzJGI1TnN7SE1eQWM2JlZ4WXRMeUNGRHBXL01FNz0pMT8hWnUxJEokSzxRSV5GPCY7eWtCYFUkIkxffWl3Iyk7Zj08SFA8OTYiYExqKVc9YFR6a0B8aHA+OERqXWZkPGNWPklVJGZsKFQ+NjN5Pmx7e2ZhJSE9QnFmODBGUkI3djdnWTJ9Tz9xSTpGRkxaTlNXeTNUQmd8NTJqRFo9'@;
put 'T3ApIz9BK1l8UlAlOXRlRXMwVD87UjdEJUI2fmdtb3d6aWZeOik9aiR2MFgyKzVEV0hJTWIkXypgezFpdzJIR3I2PGxoPT1IYS9uV2tdNzElL25PU0FNSktTKjddRnFdbFhbIXJPUS9SdTVBL11NND9pV0hJTVU4XTtbNEg7PSM1fDIjZCJrb1M2YFksTS53a3Y4I0FkN3kzMUNvOFRzc2hhYGFT'@;
put 'OWZ3Rm0rN3BldFBHaHhsaD09dGVlKDxoTWYsLmVCMypBPi5ERSgxJkxlZDpod2xLRCVdLzBmRS98XVImdV5KRHg7RkIkSjxwUldWTEhRailmV2RwWH14UVFNPSRaYXN+SXRWem49I112MHwyYXNDL0BlKC50dHMhLnpObC9LMCpYZURmW2U5XipgZCVBJDI5TEVgLmFuPj4wOEBqImVFXlBCejI3'@;
put 'JH1gTVNqRTJvVW5ObEdzMzlXMjpxcVs/fGBsek5UaDw0O2FHVnF7bHN6ZntyPHp7SnZAIWUubkRaPU9OU2koKmUoRzQ5OWciM01aKEdAVk5wfi9mcjlXNFp5XiEiWUc5KVlGNWQ0RVlLWDdWSiJzZStRdWdZYnQzaD8kdil2UitYNUdVMCk+VTdiZF0oNWo+O1pifFUjb2IkIiMzNU5iUzskdWoy'@;
put 'L0REfGZeWzhjfFUyPGVVaDp6eis9RCVwMT4pSkhWcDp1b007PzdhNlksQD55b25lQzNdK3woeX1NJD5xQ1FkWyZgOmkydDk4Oz1BQGElNTFQRTppfW4iMGdObFlodU05O1d4OyIxOjdrfmg5Xl8kZVEpSzo4KmwofWswUy88Xk1ePlVJX0lsMWpefS9eTSFFeXJGJDNOIltEM3JhcyZ5O3p+ZF4z'@;
put 'ZGsoO3JJJGl8JnY3Z25KXWVGQTVWIkp0OiFPNURYMDUsOHtgKWhEQkVGaT5qSShESSwrMD56TkpBcUJFLkFmSytMKkhDfTZKV3A+YSZDW3F5WityPlhRWCR1Sz1DbSwlMEVUVjteREptVX1BZ2RAX29xPkhEP1tFXWpDN0gyRiUvL0oiVS9taGteP3Q5PFY1KkdKaiVQUVVGczMoQEl5JXFRSWBu'@;
put 'VltRPH1JP1tYK25QWnYrJFNpaG99R35UR1ZgVWN9S2V9JXJhOCY2aX48fi9vfSlTfmdAKDI8T2xeJnIsRH5VTGhQVmVaLmpBMTVqbk9JeGhPbnw7Ul4jX21fTnEwdDB8cjlyMjowc2x+OnpeVzp+UERTaFNNWyFXSy5CLmNaYWtneXIuQkJQLi4zOiNOY0BdUHxaIVZ1anJBZzp7cn5BMFltcl5t'@;
put 'YEZDPU5Wb3gsZSVoIXxRMG1pQ35WaDxxdiU2K3UlbXl5QnJFK181SDJxZD8ocVhbPSRRfHEsKSwlKHRAIyE/Zl5mKmB7Pz9GQiNffGNrQlFubF5ULkVdaUIralc9PE9yO3tnU15PJG57SzlNciFgUWpYW2AyJlg2JEwsKGs9Yyk1cVg6U2YkM0RyJDwwZUhJPDxLaHdXcjFwSGZDJFtaTntDPHpO'@;
put 'Oz80RU5uLnpMS0w4MC5TPmxUXSsuMz9BaGkhM2BOam5SMkpIR3RvL0I1blZsbkQkQ2EmM0RDNl5aLjl2TFk+OS5tS1RALDFDKGwvMWppX0AmITVacW9pPGl8Xks4cFhTK3p3dnc9VG15c3V9NVpPfXVVLC4mYDZ3N35IXldNbUhhcG8mMDhhblFNYz5iSWJ7Jm5YIUp5PVY/fTlnTF8vd3Brb0Zh'@;
put 'S3lxRmhqQWZ1XntldDgiQjZ5Rmo+bGhAU3Qqd006T095QiM6Jm9NRCFjQjsmJHdJKSNkNXgsUStDL35VTGNjZ2hTInt8d3BBYll3bTJueXhxM14+cGVYUmE4T2t2MDRzMXRtKUUmdkAmVHddTEI+I0VOWl1FR0ZhVHtkfDpVP1ptYyVmQEc/fGpeJG9XZSl+MD8uXmN1NF5WIkBuSzZLbUQ4WChy'@;
put 'Im43ZTFtR1A3MztTXzZ7cj0lIltXWDhNZmZ6ay4rfUhjeXh7SmtqMk4+KzpSUix8OldQKm00UzMkSSttZV8oKjQrJnpRKV9pNUN8JXZgK1cyS2phMWl7QE9oNDFpcWJJYzM8PFFXTyR4W3N5ME1GbDlFYkxQRC47QyxeaUxjbkgzZylMR10vfmBFZ2wjKzc9RDAjPEtMUSRxciEqL094fGNGJXUm'@;
put 'ZD0xOmQyPDZ0P3xmK3R1KUBAWE05cGQ4K1B9XmNfUFtNT3Y3cCZGaCtNNHg2VS9hLldyPz9yQSUhJXNOMShgN0MhPD4lbnFSNDV0fU5vS2tCU3BNQFtPaitWOl18JmlPXnp0WCRUdnw1e3B5RHZ7dnBgOkwrYDsoSi9reyN0U3Z5Z2h6PDZWUmUiLytLcEdBcVdfNC9aPC9TSWBbIix1KzJCRS92'@;
put 'ODFVdVZoblopRjUzQGM7aURRQzk7cl1qOihOLD5hcDVHIXpuVmE5SipKODkhfGFUMU0sYEJQYzxgX3RgOWo4T3pRUjgzOVBqP1tLVTo1NlVqYWBTfSF2cGZdc2BnXXlWI3csY3hQO2NZNGloeHwsPWhlcCwibEo5QzgiUzs7RGQmI3VISUs6WGl3bTJfRm9SfD9mTSNkQzxnbU5qbmpkaCJZZEA8'@;
put 'ZCJTZHoyLFBTbkJdbkgkOjx0aUw8OkJwWygoKlo/IzxjaEhGU1UoalYpXl4sKUFgZ1toMjlCbUljOHowQXRxXjVSQUFtQEUhVno7Z3J8Xk8jKV4iKWReVykhJTZKMl5iJHU9L1VfVT1MZi5EZjAwQCo+dHFrdCs4cHJ1MiMiOTs7SkJwMjZaW1B1Mz83Uz0ubS8qbEJwMl50T3RQNDlXeSZjWFhl'@;
put 'WDA1LyVEOXhtO0RUejt5JDI5KSNJek15W3lbNTthTk90Kj55MXB0MjlPbHRZZjZIeV1NOC85VG10RH4jdltIPHNoIWJ8WHJSMElHIXFAPTdGTTlNUGx+NHdVQ21qPkp3JXM7QDgkPFRNODJuVVtsPUxdfDtAe3RUU21eaEVsckpwd2xsUWZaT3RtR1M2YGEuNXh6VkV3OmsrSWgpTmdGUjAyfTde'@;
put 'bV1UMXcrJUBCa1ckLjFlLlgsVG05P1VHZypdN24xcytzW0VPYUhjZWQ1NVVaXnIibjA2QHB9LjgiQG00TDtCPE4iVXFWX0xnekR5VzBUKjRNciFwT0N7Jn1wOUdtVWNEXTYvX2BwW2ZBL203Lyh9ayZKLFJJY3VhSiRBdHRgW1l9MC5+aDF4MGt8azN8Tjc8S19YeUhqWTNdMDNMWWt1MTVFQjxX'@;
put 'dkhiPWUufWlWJDRUNltFJHpFfTRRLDhJRyFubXcrMilBNEs+dk4wMFFGUiE+X1s5TjhxS01mQlUsN0BsdkA5dDI9SSwmLlhtUWZmczRJTUZNVFQpcEg4bG1BLChwVUo8ci99N1ZKZWduPDFKUHV9ZnF5WTBbaXtPL3U1Y3JrTkc2LFNpUDBFZ2Rjc1EvenZgLigmNCxaKE4iLnlFIyxBOkpKXXZ4'@;
put 'VDNiMTk0cnlsIXVsUlZlNHheUjNwbFNuU194OkRldWFrVDJtUEhJdHN3SzhfVkM9YnVeSCt+PzV4VVQ2eHY1SV8+VGM1ejlHLzNvWVN6ZUhsKUV9P31kUmJQM18mLGdSPi4xaW8sVC8ibC5kPVpiejguRjIjNWFrYjw6UWc+WGxZdCFCOz5JLiVfOjU/emJfXXY4KWtAfHFxfGdYSkI8Jj9GWSZ8'@;
put 'Jj97YGlUPlZNY20zd3EhblopaUtYa0dLXV5aPDpFIjJqd1hHanUvYyRoWjMxJlQyfl03JE4+eSN9JVMxR3xYS3ZRKEViYkNpdm8rU3ZvKXcjREokZXIjeXwyeF0rVlF4eUNjWTJLIUJwUEZ8WDVdV2pASWc1a0VRQ3teaCE4dipMR0tOezJnQFJwLjdVNHpGbSQ7amVCcjsjUGM4fDtBWDBqQmRZ'@;
put 'OVkiaXVLNkJwWmx8S1VGIXxbJldhRylATC93aktYOkc4IV5GTktuVGAybGVyXT1rQFQ2SV92K1t8R2BlYFpHUDVXMnlNKlhkWS93bCM8amt3eWROfFZjM2tAWlhfOyhMR095WDJxIylOTG1NX35bImxlQnleaj5DeF1QWiRKcVs2bmNDY1JkUSUvOi5tR2NSQyUjR0V3TWozblYiNC45QTNLbVRd'@;
put 'I1ZddHFMRV5kSmZdL28maUlPJnt2REZRWzFpWEN1dFJvSHpWbGJtVixkWHkiYVs7VCF1eUoubDBLLFdlck5PZ214eCFLYkUlbFlHSVs9KTM8Yzo5PU5tUiMqRjZLSjJtKVZRPUtLcjd9eSNhKVghOi4rfWV4Ny4wfjlta1BUYixZaDcqdCxaajZWKk07Jm5HOiJYfGpaaFowXz50SERKUWdvTnVJ'@;
put 'SkV7PWZUYn1xI3VadmcjS1VKOE5mYixRQmxpR05OPns+ckIoL145Li9zUjIhYlZAWXY0QWVgS2AqX08kI1hAMj9hYSgkTGFORVVuNFA1TSJxJiN0Sjw6TDRWLF1IdGl3RnpUU21reT4vRi5WVns0NFQwd0pTKClSbVtManU5YHZ7cSRNdSx1WW9VTGI2eCwwVyMvImpHcVBaL1NgV2pbS3k7U3tt'@;
put 'TGhkXXB8IXM6a2I1YnBNb2swKixBJDwxdHkrUE1hImtldTZqVkthdGlHX2h7ZntbeFYoMFF0RERMNlgyfCt+ZUN6dj9hRUJaNUBPLGZLOEpZZEk6a1pjaU9CVkN4ZX4wK3U9WjdLXW1dVCpRdVRNcUFPeiYqSFZdbjxgb1VdS0pWd3Y+UXNRUHZQKTJNQ0gqOSR1Ty5fK2NuWjVaUG5LI0QpREJX'@;
put 'Z1skXmNUJnw5JFlDbmMmNTlabzVCZX1BbSoyJDxIQ2khWTVyVFcjWTV2THV6eFloRX5sQ3tmMlB4KnJteSlyWk9rYEhlT0V7WFYyUFE9RCRiW2tYSnpNfC90cDt0bH0/RlowZSlIKj9WW1BdTCJBLiVZLHFLQnV2JilrTklFe11rVjtDZkxxSEIubWNSYVlFYXYjW3hXbG9CRGo9P0pecHxwZCtO'@;
put 'eThaRkxsPyhXUFspTT5qLG9LelloL3pUYDlRRyw4JiRDKSRpImAmSlRrLFZBRVU1anl7Qj8rRio9XmJQbzoiaF5SYDk2YFVnVGIwWmpOaS9nV3JOLyU3SCs2fik8PDdpMk40YS5fZ1gjT2hFWzkwN09KbnFzViVKc2A7I2FHOW9OIUxET1AiZkN6Z0NsXTM9RnYsJElKJClOe1kkLF4pXUEkJikl'@;
put 'KSxVezlFczE2UDpSIVYlKyZqYVA4dyxudWkwOyFPNFk7I0o5TUtZMF9YJnl5YVguMkxvTnhCZD4lfFNLU21HJV9mb2IsYWpBYE4kYWdVPCI3YzldMVZuYiRiZSNHZiROZ285bSx1PWosIj0oelJJfSFhOk5sWWZDWUxFO1MzKytdTHZVJWJqc29oTTtJb2ptKSxgbnArai9rYl82c08oR0wvbWNx'@;
put 'NkxbbFpdSSx9RSpGdzkhTkUoQjo5cCR1eEpBPGQsb2BCbTlAJXxPdG1oJjB9QiVbKDklYCRVVSNsa3J0b34vO0wwY2w+Nn5ualNucHNqNV98JkJLfjkvNkNqQEQ6SzZiJUtVNilwNmJfcDZiYTNRMkNfZ09zRGVxcCgyLChqNTZkJHR6bXhLRWcoI19PMW14YmoqTFFdeHZAJXQ/dFQzLEJBQUFB'@;
put 'QTgwL1JQdXdYX0lZbyw1Wz1xY1FhUSIqITdgcTNzVFByTSg3YlM/UHJsIWk/MkEhP19sd3Z7eVU5TTxRJkAyNyEuWkJFWD1dalRzMjJ6cEwhVjpCdyZeLEV8I3Y5OmBxbykxXkA9KEQ/TWNJdHR6b1B6MS5KVlRETUg8Z3xHNlRuJCl2Q21LI3NQU15mO1p+eEIhaCpdMG8salhqR3RwfkQ7NE1k'@;
put 'dG93VVk8fTMzP3Z2JSsoLCw+QWxdZ0l0UGJwakE/QCM/d3MiT1tMdjxTLEshfC45ezpKPiomTyx0T15rUSV9OTckZlgpLlQ1ZmBXSjE0O29KRkQ4WDIuU2A/aCFqeiMmezFgVDRvV0c5fCtSNkIrRzZ1UCpyZnsucU0wPkJsOE1aJSVLbDYlR0Q8ckcmKzY8ZWxfMHdGRC9MdzIrYixMcmxEbVhq'@;
put 'c1EpfCZgY2M1UV8xNyJTUmFydSImfEldJUx5ZjNWTk9YRTZFQFIwOltaRUx6SCE8emgjZWV+OV9iPnVVIyZyX3BZcnQzT342PHMxbj5sMjQ+VyhESEVASkVCTDpxTnV4L19lS0UpfFlDU2A+MHE1QV5TMTUpKEJVK244QjwmeilySmN2VlE6eXJrYm5WNmJnNXxRbiwzJn10RlFPW1R8KlVdcXAy'@;
put 'bG1UPjJmUjl+bEprc2kiUUFtTz0rcW1PemZROCZwMWp9VE95TSM/KDcqR0VjW312I1N9MSR4djVSNXR8TT0/eU9beylARkAlMUF8TzksS1AyYyp9cj4ia3ZwW3k9MFl0YHorZ2lxV0VxQilsZTF2Inw0e1Y2KGRtcX41KGI8cCZNfCskdTtUfDEzRjRURVRmc2BFejpVK2wpcFUjKzF9cXJaPSpv'@;
put 'YCIkWzxsMj1OaFs9VXtZJEV3Iz5bOS80L094In1uZChVJGwpU14qez8oUU5HR3l2W1hpJXQyQVFCbjNwUj1RXjNrfSxSaj5vWSNhQkBnNm5wTWRLU0t9T0Fmdk9BX1cpYCpWaCsibH01JlA0cG9ge1VQYyZOWklxb2M8NnpTUnxzY31CZkYkKS9iQi9PSU5gJj46YXUudTR7QCVpKUNQUkdvbWNA'@;
put 'XWgzUWpRXX0icWp1VSg3SWtdLzlkX1B2SyE/NS4pT1tSIWNlUUszSVR9fjlPbyQhN35lPSp6WzdYMmIkOjJ3biYsK2Y+ITBhWU45TUNdRyo2OW4vVEt0U3NGTzgjbGo3V0pPeVlmIThZIjpyMkRyen1IJU5CbnIxRm4kYG04fjp5Yjt0PnVzKTszPSp9UTdEd3x9UUFFNytJRyRnfkJ3fGhXVlNo'@;
put 'P1pjPG9ZMC9iSXtBQz4wbU9HKyUqTT44Nmp6JjxWbkRQdHEzZEx5aTVBI05KWkIlTjcrWnpnSHhGcTl6KF1Mb09XQzhZTWs/OjtrWkRHZSVXWnhvJmUmVSklfFViZW5zOSwzNUJkeW5wX05kc0lic0phYjk3YCRnI0huWSR3NlNNPWt4cjpPJmo0UCNraSFoI2Z7XVAyT3AwJGM2N2M3PW99RU5I'@;
put 'RVptYSx6U041QF91ODBnT2U+Sk4zLz00dixpI2A0Nng+eDRROXhBMl0sNjg6WStTI2BnUj5qa1RfNWFjSlV+KDB7aVhLeS43aHdZYmcoPXdTOEhPTDMwPSRYWDwqdEQ2anhgX108YHcyRzxQbXJpUiMqXyUhST1pU1cjNWEkJEkmPypMIVk6TjhAVy8hJjlnVEpdKHVHVHRBZ0NRfTxQSDdbPVAo'@;
put 'MFUyMSlQdmZWRl5Pdlp9UShkIXdeO0gxOEQ2fF9mYFpYZ1o7TThremgkLlVgUzExeEUrOEQjcTJjJVRRYWU+SzA8WnMsPk9zXnFZJjouZTVyS3IyTSQuQCVPQVJRbGJ6MXk9Olk7UyhqQkpMNXQmYlBuSmdQW2hzPzp4PGs/MDcke2B6XT1xNisoNGN7ZC5fd2I7bUNeaGdvW3ksXiRvQGhFPTJI'@;
put 'WjVVNW88MFFNdWkrVkVucy48UWEzSmpENytSbWRecWJ0KiRROk04a1pRPTBhZnk6bXFbVk1XSV9xNDFVKVVCVCZFdnE1LGlzbng6THxYWEZwUVM8RGQzRExtOVs/Pj5ge1RtJX5qSyFQLyY9RVVoRn50JEwxV2Bxelp0THVEflhvTEllWXd3a2JPcX1yNGokQi4/a0cwIVp6V2BrRytkZXpba0xm'@;
put 'I1Y3TnU1dlBkbHJBd3RGPS90Xm0pPkxjIzp2Syo+TGJTVHQ6QEJMT0IiTiVOe1s+NCtOdkMwYmdHNld8ZWc2M249UC5gWiE3NEBBOXE5bGNrWGUpXl0mVmRkSjdJMzw/djxQWnVdNEBQQDNSd3FoT0VOc2tSKylSUCtVQmFMNHwqWDJ7cio+ZWU2fnJbTXJfUkVxWH1yNXJ8ayZAcz4lSixAcW94'@;
put 'biMrYC92eXArO1lReCZXKSwlWmkkVm0oTm5JXyN8MGAlZjBmMn1LWzN1a1RmZWdoQnVVJjwhIm0oXnxxYyo3SG9ZN1IuezNnYFMxLGt6OTltWzxzK3U7I3hDYmg2bEdLMGp2aVpXKFUwaG8qITZAWyYyZj1+NmhPWEtydzNPcUpjfnNrZjgsKT5GJS5uPldbPX5LMH5zIzVadHJdfmhXcnJ7PkVW'@;
put 'Rz1UOm1Mcl1tYnJ7YDUmfmY+eGdvNT1wPTIleGd0XlBwNnZVfHh7cF96OD07cVddPmliKE5rP0osIk0jQDFCJSJyUG9JXlFrVT9zd3Z4SWNTLEQwWkR1anh+ZilqMTFmVHN3bkxuVS4ib3p3OC9WYDV1Qj1ZTFVnQUokKW4kVDxjT1NtTEREJSgyV2xBYm1RRFl3SHA8UGdeRDMmNDI6ZSsreWRT'@;
put 'Ym12R3dFUyUxRVJCZSlgVDNCcSJeKCNrL0wyPHo5WmlFSHxPcmkvbF9xQ3k2MWtBKldMVVkpK1VyQmI3d1dsPUZISERMdFI/W29NUyNQYVlxWjVyUER+Qms1Tk80UjEoZTREUVRCbDQ/YjJHNjRESGw1Nlc8dmd3RXB1WWMvfHEsYiQobSUpMFk/az0kUSlNKHIqQjNiYWNRUXAlKXdRdEo3c2NW'@;
put 'Qis8MWthXUJaW3YvYlFBM2klcis/Mk4+KTZ5Q2EjWExVVnRkYyRKfFdPYE03eHdLU3haP0Y6b0FDJURmRHE2VC9XSlNNQzIrVz1oOVo1NUZLfmhWcVAyb2cwb1ZIPHN8RCFXYi93YiNXd00/MV9BQ2Z3dlE/OiRPQ29jZGtIS0FDZGl+ajwpZEx5SUA0dC4oVGNrdW50TXx2IytJdVIhbCk7VH1E'@;
put 'eShxX21VQExUTktBIkxudC4kYWxMIXNJY3dGWExVanowTj4rOFBwQjQhQEFZIUhMVlhMVVpgX11OdGlOayl4bntlWUxTKSV9a1V1WDNwXUNjQHxYP0dMZTp5JldvSSgzL1dMVW0iJFlhU1l3OFdgdlNBQnYjeVRAbV1Za0MqVFhkeGpIKXZ5IkFtJkMqI2ciV29oajZbQEE3Y2xOPyJCPHU1bHRK'@;
put 'IjQuRkQlbV48aWcrR0dpckIkZzFbOE1PSi9Oa1orPDRMUHpnL1VAb0VtRGZCJihMVTNiTDVnRWshVndGKkFnd0UoQTdaPjc0NEZLbVJvbnpqaXZ1LzljK3Mhd2lLN0RtKntkbFVBQmd8NUx1R0BXKlc9byp6JDBTNEVOZkRPdFNvTi8jWypOOz5lWn56RTBQajQuNm19UVlxdTI5eTQuIzE6b1lJ'@;
put 'Slg1bjpYI1lSNlZMWCIvPlZEVGhLQ2VVeUFPWEB2Uk5CTiRbZU83PkN6JDVBVStCUEJAImEiOm87UjBEXkwwRDZhOVs6bTtFb1k7M2dHQWNOd2AkPFtTeHtZYilRYUFOclFDbW9kZVdbJWxDdFp+Pz5rX2wmTyU5W209bFReVSUxQXJ1entZdHBpW2dmTzt6LlV8TitwZ3VtRGJUT0JoSD1GcGk/'@;
put 'Lnw+OyZ+ZX10aiYzdUQsT1hSWCtLTU5DVmFPM2NhbncwPiRNKXJ0YkkvRWx3U15YaFhjUDFGRD1Mb1NBSURYM3R1dCkwQ08vP3xqMz1qPVAvSS4zdzohbD03Wy85Y1J6Ujo9YDFfQFphSmt+aEg2cD1kPFpYeDEvLyM5I0NBX05Zb2gpUnloPW18OVIsL19NWVd5ZUtBZjBvfFYqMHp1a3wwTWJD'@;
put 'Nix0eEZRdUhDXlVGYENmYGtkMDBUPnNpTXNiem4pfG15bjt0fGgzQDFuPHQ9fX49W196Z3RmfFhhMC5DYFVFYXUveXx9TF5ofGFhZVNoKHJGYUV6RHQ0YVRDJjFkem5Ye1hmMHJoM3hfSUBTWyo+V28oQHJ6YF1HQEUsPHBRWFF8P0gzKGQxQHhaZGZdbHk6bFJTZHs0eXZIV0E3fm1IXj9yWzFu'@;
put 'Wj8qPy9vWl9tWD4uNFlhY2k+P2h1MFchUmhbUU5FaVtJYmtAaHdrW09VSDIhfFV3bHVeYD1YUjVvODtCPTlnfGhoLkY7Wj0lVShIYmdtTzUsQ1g9JStrKVkqMHB1Ik5bKlRnK2swRTJnPCZOMEdNZnVfN0Q8ezNaOyx4aDhhK2BxdmFEI05VTkk+dlt2KWNiOzh3P1QheFovKGpmbTAqRyJoMEZp'@;
put 'Vm1OYHBSWER3IUBaMkw/KkJmQ1ZSYUZnRCFhSWsmbypPVU8xfG1LVDsrIitNRGtkWzEwZ1V5UV8wMFQwc2kyTH45ZDFCdW1Wfj40WlNpfk07Tyx1LHlWYmkzPlMoKX5gI2N3K0IjeVMqUiV5cjlBRXducjlnSEVHPX1HVWpSI1k2eFEsQk1lMjdyWCtGVzhYM1VgMyxRV0RLSSt3VTpxWVdEezBK'@;
put 'Wjl1T3VoZiNCa2ppXTBVPFolcTAwOFdPIXJ5RmsiO3E6KF83NUZUM1loPmBzUVk8JTYvcCxZTkRvMGBMbTU5OCpWPnJkL3hQLyZ9emBrS0tuYENHM1I1SE5YfFZuVHwhYUh0JnxHdCVxenA6UT57Qyp4Y1djeFZCWkgobUwuckszRnEofUxhVi8hM1YvOTp2dXtGb2s5TDVyfClxT0AoMSxDRDJn'@;
put 'b0NnRDYxdGlvQ1doTVcjKyFzPikmaXVbaWZbI24rYCgzWGAvNTJuOGFrQGd8QFcmRDRHSmhbUzt3RVIjKmB6aW5vamtZJF1nWyNfaXtMS095WWZmSXxlR0hHUiFfTVQ0dy44dDVSR0t3XURZPSNXNjdwIylhNlNwdHJDNkxfS3dPaXxVJityVnF2VGE8P0U6Y2tfQiV1NE1kSzVObmo8djoraUxO'@;
put 'U2U+MHdZQTorOUskanVbWy4zSUpZRFRDWU86ezBMbjUxe0MoYFpjNTF7Q2t1YUBvPEEvM1hKcF1FQUdxWylbRDt6NCluXl1McWVlcn5vVEx7W3Y0dy44KkJnRCtbRnI+SUo3JHBzLz8hS1hALy87QiZPSmlRN1hlbzQ1NXYuQEhYZlhyYktYNSFzU2hgSDFOe1loc34vXn1vTXgvbWhiTm85YiF8'@;
put 'b1Q3WHk+b1A6WGlvKUN9dlhdfCl8WEZwZFNXS1VIZ2oiJXU9eEBSTkkxQk9ubCR6WCEkMlV1IilYRi84Mz05TC5EV2NidispVV01UkdLW2ZhTTlQYlJOdUVidXVrYipHTj9UPWQ+VTNKX0d3bWFwUH1uRFlnezBhLl8jcj9vMmc4MilNSWhqLG9DbXAhMC9PJCt0LHpHTlMwKVckcXIzTjRRLkQq'@;
put 'Z3JpfkxmZnRGJXpNP0x7alo4K3dFdHJnYFpVQ15VYV13VipbcipaVj0kTVNiKEJZMm1PR1pqZDxNaFkrd0c6TU1fYENONV9lZmQxVHYrKSRHMS4pVVdVUVprMkxQTVAmR1tZO1s7R2ErOjRSL3Npa3cyUGZOOjRDdC58R1VxKjBhLl8jTFc7bTJJNCgsfDFFJG1kQCVTTTphKnR2I2lMXX4/WDxH'@;
put 'Km5ZVUpPJiUxaT93RkRhUGhMNVIyYjtDXyxiTy9GRHF5RkR6XW5yYTwiOThOX3dbYT1Tc0xNcGFdNy81RHc0SVc8TD9bU1RVc348QCwpQENfUlhaP2FHUXw/aiRaPCxTck5CWj0qPzEkd3JoXlY7SWIpImVoW054SUQrd0NmXShpWTlKJihTeShtY1RCUDw5Y3JKRXMkYi5zTSx8TTs6O2JlLFNF'@;
put 'dVl0NS5gPUxQcCJ8NnxYQ115IjpvXjk6bFJGbW03Sncjc2VlXU51dkpFUElpZ3IqJXdwPHZmaXU4YS45Qk1HVDxCaS4sPShtb2lQMGRjYXg/LjVkUFd4SnUqaFpJNHBpMEEpKHp8e1pfVnEjZTRYUi5Cd2FydVhBM35XSGUrUl40QCt0SituOVJEaT0uM3d8dmN4aztEbVl0NklLcm58Ukx6IXZ0'@;
put 'ZGdtd30zRm1ffUlMOShbaDFRYDo8dzR7OnJlYWA+Yk9pfDhXbSpPL3M8fmU9cmJeQV5kLloqOTNDZkNsemQwZyQ6RDp0Knx5Rlg4YzcxPTh0RD9GcVssVyp4TmcwVy5MVH01Q0RnRzY7MEFmI1B8aDpbO3VZcEhmZmpFOlhtLilDPHVOe2YpdkQrYWklVTBJcitBbn5XaUkiKX43c11+P1UwelJN'@;
put 'KUFXeHBnRXEland7OnwhJk9IQnlQaj9pdW40VzUwV2Jpajk+cmpKZk95UHdpPnhCdlJUTGlsbyFRMXhRMEY2ViFUJVUlc1FIUWBHViM0fS9CJCkwTVM2KSssWnAjUGFuWV1IfDc1Slp7Tz1BeTtAOjF9cUoyd0kvVE0sQyMuQkR9MyYxQTsjUFclbDhwOF49KiMqRHc8byo9JDppP01BQV5lVkFN'@;
put 'L0pzJD4qV2VvPEtKdG5UR3FeT3VNKl1XaEw3RjB1MVFsLEUuJGlpUjVRaSxhTSJrXj1udHpOIyVTNkFGN1g6el9BbVU4U0pmS1NHdjhqSHd3d3tKYnZnQ3UxeDF4MUU8UXYqbk5PeURMeCtCIzBtVnB4dnUrQkJLfENWMnRSTkhNIitAdDR+bCsrVWpLRnE5dGp0a19WMjdrd2c1fUhXTyJBVDUi'@;
put 'a0JsNTFkNCI1Si5SOT1ieXE1cCkyS0NjLCtXXW8reS4sNF9WRSx4fXR1U3ZMKTExZEpqelhbYGhTQGhVP0U6V3laYjtzcGA0M1sqVmkka0RYXm89dFBuRkpOWD1MYTd2dStYeipqWHlQKmVvNkVAfUU6XmZFImUlLkQsJkxGQXt2NT86KDM6UTxGZjoxeDdTR0JlL0VyPn0pUixmUixVJXZKU0pm'@;
put 'LjxKZTkzT1RVZipGaWEmMzNSamJAYlBnR3JUVGV7RzlXfDRlY0lbXTRyYWgpbHleUHlqaVVPXlJLUnk8OkZiLkUxNytPay4iekIlY1I/KDVHJHcsKDVpNXtQfDt6XmE0dGBuM21MXj9hTSo7PlpLYlA4Tmx6U3UyY3pbPl5xZjhHTGA+M2N4Q3paIiVLLj1MWENPcEU5JFBuREZUMCF8OkgkNEdV'@;
put 'OGQpfXFXPzpEfC8yaDMmdDh0ZFUpYSQrQzJLVm5oc3l+cmFkRCNGYy8rfURrVGtKK1ZdOkI0az1lNDB6UGNjMU1JZTF0KDskcHVlLERnUFljekBAaFU1ZXpMRU1Od3RUKEdIUX0rM3FRM2QhQl1Jamd3fE57JkdsNkVAfkcub3xkbkw1OnFxSH5UKEJSOF5WajkrXmkqVzpaOXUldHojTWdBaCV6'@;
put 'X05uLkFMS2xKQj1pKXIhezZtI3sjIypJIVg/aUlmakJiRjFWVDZvO1FzSjJ0eGo3cnUpMS5GNFldaU1+eGdla207T2MyJFVHWUQmdUkqJS9OMl5PY1toJUpnZ1dVK1VXcy8uV1ghb0JMXVBuWVRBJl5qJCpuL1FyI3hCc0ljbnRBbzE+PiRUYHpReW1PNz1fIWl8T3pPM0hYJktPcU9JdC9ERktX'@;
put 'Uz9MeHprWmxNYiw5aU5SSTwpO3dQPFpbJCkhQHBQbjYqIiVmXUQqeH0wYD9LKCZaflZkX29EeUlLWytebCUkMS43Mzc8RiZ0bWkscWhHfDV0PDc1Q0d3b3B+bDhqQE1paFIwKj1IQ1Ilc0pDWl1Wdz9XfGQsRj41ckNWUWg0dE0oVCp6JlJgZDhYPVBzfTNYMjdXL24rXThWSS8mP0g2NlpGcis8'@;
put 'akcrMyR7azlbJCxNUiU9S1VkcjkkO3U+WCYkTDEwbElhdGp4WXUzMytwVCxUcWh3c0p1KzFIO0slImMiVl5PIn5RRTJBXnpCZy9kY3ZPI0wzZzQvZExxWU5tZjUqJSUrflgmQEVSeSNCSlt2Z1M+eSJYeDhZS2o3TzEqbnhCPUwidnFKXUk+NE86d2cwdzhTRyR6OWkvKzRNR0FsQjZUUml0VSwp'@;
put 'eDQhUmd9L1g7NGRfYl42TmJmclE4QnJzaUhlRl01S3V4R3pebzx3MnRkMHVldHB7NCg4QnIpN15pIm4sVFE3UCFBa2V7QlQvWCl4LEM5SWJveHhhdCZbZ1BpYXE1cFZVK0srdWNIJXxyI0Y+fF4uRmo/KE89UyUiP0NvKGJ1cFJrQzRORTpedlR2Uld0UjAldkM1cSE1NDteUkBYTl1DdnFkVWJh'@;
put 'd3wkSTlaQ2U5RlcsZGZ4cncwUCFBdSp3X3pdbyg0aUddaCFWOztESzk0fEhqT347RDNORiIzT1A2IWJ1LDpBVHBoQ2Y3YXYifmwkWUkrWEBScDFgZyxHJFNCOEBJbkF3QU5DVEJacmFNLkUpSzBrXVE0dHBSMz4mZkdFbCVEelJII2JJOEBXcCFLfGoma3ZZQlsxcDBmZGp3YE1sQFpXU0wwIUdO'@;
put 'U05OIXVMbURqKWw1MCN3aUMxOF9xezR0WXUlL25scHQ+bFpIdzR1cC9NLnk9RVt9b1A6bHdLcnxGTyR9JWg8O1AwQ2oyQzIsWHJYT1M2eklFW2I4aiRsND44OmdsdT17W3pkbSEyKnFLfGRbYXA9e1tmWnVMNXZJRTNsPk1DQiY4eGIxTmNqaU0+NnRGWkVubn1NSW4oc35lOFp7I0EhZVQyVl80'@;
put 'ez1UZj5mMW0pe1JaM0k5ST40KWs1U0YwOHRQcXBIYV4zdGNqJThqLG9Qc0ciIWFpJFZwSFs9SmBlTGwzXitgSmc+Tz04IkgxO1NgZnE5UiM2RTtyWnJUXmloaTUiMiUjYTpeYWFXYGI+VUMpN1YrMUcycVBAeDdgV0pTfSFje292alNUQ0lCTUVZZTB4fFpiYD9rRFQ6R1h3T0JhOlA6K24jRDdJ'@;
put 'Ni9eKGYwajt8UWFyNEF3VXpZY0deVGNKLHtHO0tASkNlez1Cb3tsYXJfcEJ8bFhvPlRzcSh8N2ZWSnt0JCRZKmNyPUldfFlxW0pfeiE1M298eClHZTdPUE1hYEFFW1pWd2Z0TVtLJlkmbkgmUntpKks+WHxsX3VJZUw4KEc+WztyQnpfMFMsemMqZm5gSWJoNXxLKXV9MCtyPmgzMmd7TmsiUCJs'@;
put 'UThMdiVrZWtpfE94XjRuVXEocUtCL2c6MWM+STx5aSJNOTY4LnwhVStXSlQkUktUTyxVbXU0bzZESSpsTTpAUVVFRkIrdS83ZlU4eV5hVkZYR2F1ZCMpVWcrSmslRi9HZis9QkhNNDYzcFt0dUt9TEI9P1MuPl8oN0o9aWI7YkQpe3RATGcocEhmUGh1OEQ3eykrODZNLzpbV1Z0SkRpQTFJZDdg'@;
put 'SltBQFBTeX5GRXMrMHA9OkYoXmZ6dVVve19Xey9ATUFESmRlSkBwajchdz9ZaElaeDZJNm5LeF4xRnVYJmtJOEBWdyNiYyFiYm97Wj48aEdyZ0UqJVErYSt4cm9zVGJdLE9eVithK0ooJjxkZkdVdUJVR0BvUUY+fUprK14+eEElUnpAT2MsJEw+bmhfeVVjSGFhTWlCOEp4dCVFT0h3WERDOF8h'@;
put 'TnFhdUg2d1ojWEZQTWVYZS4zamxARm9bOCQsMElHWyokKix3QiQ6YzJ9UGp7en1oKUU4P1khdGN8JjdhKUo/fWQ0NiheaHhQTWcoOTNjNDR2ODhUQzhXRXgjNEhYe2Q8P1dUYlByIUkkKT1nQWBeT3NzfUd8TTA4eVY2P05eeUNlbiRmUWJ2QERjKWFHcGxicXRSOEZqeSU9aGJ1N083JCFQPzBu'@;
put 'Qyl7YTVbKltPL3ciU18hYGdaK3xFfTVabyhwRFFKMTM7UiV8NC5TPWdCXmROPkQ9cjdhZWY6OTd6TjAvRnE4UzFkTVVXZmA9TjhAeTNEQ0R3cGteKFZub04kLjZEZDh0SUNtS3FyV0RYbTJLQ0M9RzhQX1ZFUXt0IlYpXzJqelkpUl18WC9ncmNaN3lCcXZQeCNGJFgiU2BkajkxR154e11WOGVt'@;
put 'TXlNWH5kNSNwbkshQFQlcHopdU1mNUEkSiwoM0AkK24leWt5dl4oVmFgW3tIIXk/U3ZYXT9SPlkmWWEwKzpxZUxrflBnKlpPQEd6T2cqPGY3bD9PODp+YkdDVmQreEAqNCt2NTBVWiRZJFkkInUrPXNeWFdQNmM7QWYjT1hnSjNVTUNCdS82Ymt4bGldSFJmbFJLa2wkaDxtZlRdI28uZmMsZ2U7'@;
put 'TGphOXhtMiQ/QjM8Z1lJdUxqYXhGLD9iMS9TIylBZjVffmU0L2NEPXJBPG5eLmU6U35sNWFmPHsuPCtEVEU+XmhkeSlEa1d8PSRiKnBIdUdFVnpFdlgmaVZTRFVHSyt8WEdwKExyO0BPeThYPWs4X0dSN2BKbWZbZVkiNiZPKXlzTD41KDZiOi9iSkM3JklBaixhXlA6T11CU3JmaHtaVl1rI1si'@;
put 'fmJxbUhKbzliVFZuPiEjSi4hfmxSJCxoRn1xTlBhVFpjXnlTfmA/YDwreDhmNG4mTzpBIWpoSWpAWVVQMHMqK2QhamtQLC5SfFI5WUxEbWB9UHwuYVRka0E8Sk4wc2F2eDgzdiQla3pIPH1WRWdEPGZRVylzXngifDRTJXA8YFc4fHw5bk9vSDJQIlcjXjwhOyhCbnVZJEBwQypTYWo8Ylp1JjQ7'@;
put 'NVlfTEJmRSRzPXE3OnJaMiZbO0JYJEBiaXxLVXY8ckRNXUd1OExqTyJsQFoyTVAmNVkyR0IlcDghYyYiWT06Z09kTU8wRzYpVkM5JWNUSGlacUpLaERqQE0kREI6JWNUSENaZmFSY3RjJjJILEFwb0hATWFkNDBTYUlkflkmdTxuVmQhMCFraWckfCJjanZpNyxMU3B+Y0NwUlF5WWgvPXZyNzp6'@;
put 'STZNMTtQaW9+UXswe2N0LCVPIi9dWkN9XmRbNSlnWDA2T054dSZfU21aYjUoeTs1OnpZWSJRSU9lXXw1Yll+WW9TbDlBcklPKXdYdzRlNE5rRGcyW1pDcHN6YlZTZFhEMyVBXUdORnh2ND1sTXlQRDw/Q3lfU0JZK2kqWntxajlXSkhaNkxdb0lndFMjUDlIPmFIZURGSlpUJX08fGVFcT4wZlAr'@;
put 'V0krb05sWmNuQVdsTjNDI3EmZHElV0UjTGQjRTAxLyJoNVpkcXU1Mi8iaCIrUyJ1c3pOMVp9dHlOKHQzJVgyfEw8RExoPERiLDgjWXMyeF5CQVpvdU1VM1I5SCpGTjRrd3lAX290SWJwVkYxbDgsNGA/cHVlYj8vekx+XmQrWXcjPGg1InNeRWFve1hjSEcwWWkjNmhTYSlKdFB7aFl2ZVZqRUk6'@;
put 'Z1ldNGJ6dSRFXiVrfG1HPEIxOmVPK2ZSRD4sL3V7Z1NuRVFoYWA8RXU5fDlFOjtPR19BcEBFWVA1X0pocjd+KSVjNllaYVJhRTpzaUVlRiM9KGI5PSped2ZXYS4kODxDRTh1bChEdEt8UkheVTguTzBeJXZNYWc7bU0kTk9NRUQoMT0qV3UhKks2NDReVnA7VGZrTkQ6SjQ3K3A3cjs0XSJ4KGoo'@;
put 'WWRrRG1RRk84bjMiOVhKQUhnaXcwKXt+VjtQPERzWUdUa0U7JmgkJj50WUtySGBeTixLOlcjb3FYO2J9ZnlWfURERFdBMkgzPWk1c31RQzZ0KHVQVCFYPi9geGhpWVAyRHo0Rz1Wbi5dIUNTY18wLmZwQk48T2tGUng3RypeYVYqfTxHQlNNeUY5OklCU3dHIS5nKzF3PHQwVmI0TnFzVjV0XipY'@;
put 'XVRXKSY8TGZkeU8sNl4mKkJAIy9Day9aUWBiMiJ1cjM9ayozK3U2XWFOailLMEM6PTNeanJaTS49a3RlJGplWkAhUVhBVE1ZbThPbCZjIi92Pzt6MD8/a2NpVG41OUVEQGlyYU5hVFEzZytTa2pdWypZaSwhNTVsKTxUVEVzLnhCa0E/d2p5ZkBOSixKI1lsIz1iezZNI1YyTlgmJl9UJWNoV3tn'@;
put 'KjNJM3BFOWxWIV9DQnUjeGg5ciUyZ0w+UyxMUl1iaU8hOTpzLklhOW1UWlEuZ0gxMWdHUmJFaWJsJGJSd2Bae0hgUGFibUw9bS9HbSxJZkoyRCxkVFh1TDclS0NKX0MmTVgsQClNdV5vQlMkOlo1filzNClrQl80L0NVX2lzISksfVJDWDJOM2lOL2s5SCUucU9xYDl0fFUrSTgwbWIzeUosKXMp'@;
put 'aD1KLiUhUEpUK01aTnA+THExanNETXh2MCxjZHNjVXhnfCFSUSMkMCgpKmkyMz5FcF1ZWGNUU2VndTx2MUs6bikpRXJjcnoiIm4wMSFqKE5fe3BgYk9ZT3tFX3huWUIwWWZXZ3RdRGFkdWpPUGZZYVR7dkojWC9tPEU4Nz0obTRsN3gmKiFCV0pufCZjK045YHtBSXFvOHNyYigxfSkjdWozMVFS'@;
put 'JWp8bGd2WSNyaVlvUEt8OExsREF4MmYsTiQ0KkwjKmVOcThEc0FtZ2IpQigpQkhIfGZmeW1lYWxaTlJ4cDJCR3lVXWpHQWBpJkBLdUpAOn5nbHRmc1plR0ksTDAmO2UlWEAoQCI2UzVpZ31rSXx0Rnlubj14dFNVJWg/WDkiNTZWcFQ6QDpAWm1zOF05dUYrNSYpakc9SyszMklKS1EuQ3oiTDM9'@;
put 'Uyg8em49PUxEaCE0dWlCa3toI2l8Xj12bS9VS0oyXU4kMlZodkwpOnBkT0poW3pTSTdnMGU6ekJlKnRKXmwsKzoufVZjVmd5MWx2T2Y6alVlMWY7Y3QrbzZRdjIjKldeSFU/L3IhU0xLWiNxe1tqYDwvLjpLKEcuOm5bc1M4UDtyUTZEM3IpfUZjaWZ0LDdLejdyTyMqcjVVQUljM0l4aXpYWSUo'@;
put 'NV9iKUNJLjpuMnRWfig8MiVhPDpHN1VzZytjPUNXVzFXOUtiWEBTU3xDIzhCbmFYX3EjKH4vNmxQZzxYbzc9K0MqOVFgXkFhb1UqW3xaViZ6K0xwUWkxTGpBV3F5YVovSllSaWVzOFZrR2QjRlJgTFVzXj0vVCVfPyRePCEqS1tWPC5Mdk0sVjpYdj9INXhfMF0saEBUT15nOlZ8WXB2el4mYGZt'@;
put 'YDFEa3JvW3MrKV1MT15bIWMxNEdSVnxlOHczVltVdjhLK2NVN2V5IU4hTmVmUGQ3Jmd8dUJlNiYqeGVyamFtanVuT3hYSFo1UFZlSSVQY2U/enYra0B5elNpS3pyeT5MVStIRGQjXWQ4TVo8TiUpd2VAV0lqW1ZyNig5dmZGNytuVTxXUHY/SE5HUThXZVsqS1UoZ19CMyVHTkZ4R0RmKkNUbSVP'@;
put 'LmBxN2F+byZ4flRtJWx2PmhrTiw3eVdwOE15RiVGdFZFfm9peD9JWF9hfFtvR0ZNWDUzeyZzL0JBW0JsamZQQj8iWTRQYyIxT1VVTk4oa0k5NDV6QnhZLEFwRnhWZi5VPXlUfnhGIllWfU8rd0YmcU9PQnVXZ29DMyswS3khNyl2OFVRS04vKS5+WU5TKzB6NV15ZiM2bSYqYUFFIlE+QWtjdXBL'@;
put 'Yn4xeDErRjI9d2xnOHpbNU9uVG57R0Y4MUNOR2djQVtWO19UVmx8aGgvSzgoQUlBdldYTEZLQyl1dmN0LHhzcXphR2ZQbFAhJjFwaGhafVAoOz53S2h6R1BIJUVhR3tKeDVVQT47ZH5jUTA3R3RUNGZPM3FLcTgqRjRXIVh6PndeJSh0N0dlcSI7YmQ9RGw8cCo+eXxoLkhII2lhbDklaXM2MVpj'@;
put 'aG5PcVh2JW1ZSEA5SGw1X0I+azQmdWNsUDkzMHxxOi9vdT1JdzZMR1FYN0BiSWA5bHVrVWtGUm1gTSk/JWdSR2BzQ1BVS2I/MU1fLiwkOk0oXjlpYkJkbll1U2k5ckhQJVdrRGpHMzRiMz44RFRNYks0VHIpbSN3Z3Nve3VgZmUqPypZL11laDwjPzJGKVtwPkZhKEM2cmIiVG1ERnFlOCgzaCVA'@;
put 'dEpnNUYhWHg+XVZjLjI9QFMhZ1RGQVR7PDRLMF54a14xUCo1QSMyZURhO2V6LDU4Zzg0a3dyUV09V1Vudzp2Y15vNWkpKkM4YUV0cT9GV3ZAIz1EVT9GaWRNMmh7N3hSSCU7Jm14WkdxKntQP3dsZzxEXURkLDJ2OC9aYmFPPnVZMDJlUU1odi5CTU4uQnVIaFllT2c1WTBhMV10UzVZIUpIKUVD'@;
put 'ej51eEF7azVPJClFOTB6SnZiT3UyNSF6dktZY2JwKik6fjlxKkwqMVBwQmkhV0sqKTNwLkh9LyI0NSg/fE9mW1paYUBOZG56YzhrV1I6aDIzP2hMMXtQKFVoTTFXa25xcVVLb0dXOWJIYSZqRFh2QHlxT3MsYnc1RDczJVkibypaRChtaGJoMlJqYChkbnJ0TSN4U09uZis6fDYxUDVkfHVzIyxI'@;
put 'UTU+P0gqJFpbWDMxbWBZYTlINFsrYGo6W0NQe3Frb1E3blJlWGhKfWkmPm50PX40bGpqWH1Ndnc5fEBPOGtgai9EPGRBZCQsIl9oUWpXNHcrMnhwLFRfY1kibU1JanZpKHdnVncrKDxHOHJ7RVE0QDtlR1tLUFUmIyxHZmJZQ3JNbzRAZk5+Jm8ydy4iJixCXk5BQyxlSFhbY2E7SWF9PWl0LDpV'@;
put 'Mk15P1lyeUlkR0k4MzBoXzZzZyp4VXJyTkVUWyM9Q3RjOkZmWHRLdD9qdW5gSTxGd0ZyWmtJLD5QfFBtU1JWdlBCSllVRSMvPS9uX0tVO1ltQSEyaEBZQzAwIk15L0psYk9oSC40cEx1bSM7W3A5fkpXTjZhMTpmNyN4SjRNUmNdXSZPWyUydkwsdD19KlBlWSp7U0soaWtTdHtPNyF7M1R7YWsm'@;
put 'MWQ3a1VlL0pNSyx8KFczVGJtJC5bT05FQmIiNCZvfEUjX01UbDJtTC9KRyV2UitQOVFPL1JbdCxqLjB7SlpnNz1vNDhJXkBIUzZzLFN2Y2V2Wk9ALko6XkY1dE5neDtkdmcmSXEwYkYrKmgpLFpdbDJ0W191diR3c0RmMFgjOFdPUSQ+TmhCSWdrQ3grSUg2STlLK0BnIzshcmFMNiR5Mld9UUBk'@;
put 'czhBRypNUGchZyFtVExONU5eNTtPRU5aQzBULEtDTz9BI1pRJkAhNj1mZlRuSEgzKUB0YXA3Jkl+TlBUX2QhMU0ubzF1ZVlbJkVtJEU3RyUvZypJNGose3FUK0RYfS9jJnZVe1kpPGxFWGpUPmBKcSk9X21DdUhJSEtkSGVpZXo5In0+Vlhfalk7WV5lY0AkSUluPVZATmwjT1c2YV9DJjliRHBM'@;
put 'aHd7ckdlUzYobjBEMmdYeHRQbipQTFQoXmRAUSMvKSR1QG1fTTBMMWM5WEYsclpkLDB4I0REQkQ6MnJGJm9yNDovYnZiUUh3JnEhP3pxJjBiNShaTjx1dCojMVhnaXxDKWpuN3lqP18ra0JoLFckZUQ1bGRwPzVLUCx3YF1pWWRvd3pCdHVbTFN1QnghIV9LIjc3T3lxNn1bLER3PUc5UE9Rak47'@;
put 'KygpPVBpYCpFbSMzZk1kKSpzY2NkcnklX3ZxKyNTNnUpWE54IUksK3J2blM2OU9HdDNdU3k/fXE3UEdiKTJpc2NmdzRVI3JaRixCOFtZKnRsN2U9VyRye08yb2p2bUshXncuITN6WGpZdUZOKk43cnlDW11yfDRnVmMhXlVCcFZXXz1XblU3PV9UV1ZDRWxRcEQuSUxiNlR7TDw4O3gralNAUUFn'@;
put 'RFRoUnhJZWZObDlaVntLYm93Q2xwYk9hY3grZjRyfHZmazhAQEozZ2N7Onl5YnBbaVslWyVbRTo6Nm5CSWxJZm5KZEhYUGJgd2dMZFVoRGRKUXl5PTM5QEczakFUXkxNP29CKkJHKDpBJHZ2Kyk9UEJUTyl9e2JPUS9lZnVaR3dTT3lQaUlnanB9NVUvRnImM2lNe0IlOE4hdVYvfiY3OnZ9fW9p'@;
put 'aGZHU1Z4YipeRkRyWi8oJGl3IzlJK0U8PXJHTlMhdXQ1WDFTeWxzTTAhR05TU3l8ZTE4QyFLV0NQdVB2fXY/MyVLXnZudUhhSWB3fGVZbXJhc156Wzp3ZDxwKlpDc2UzTFteciJ0WkUvT1RHalQoOFFDXnt5JEx5LiF1NlFAJkFDYmpDVllhQSxMPHFnNWV0X3U2UGU+KTIpWUZpcX0hRls+dnhp'@;
put 'c2t2YEJ4cF5tX1MucnE7IlBiTS8jbigmKlN3NWU4JHdQPG5+JkY7aT5bLEovUCwuQWRAfnVwOFFSZEw0Vy5tL0pbUEtJdVVUKnh+cTU7OkYxLiImIiZLe1FadW9zd0F9LlEkfWZycz0jfCZ9bG59U2tqWUNXPXRbdFNNMz04eCRzUVRFe2w2KDI1UE9WMmNYTjN4Ljx5PDpuI2BsNVdqMWJWLno1'@;
put 'NltaRWQ8WypbZGN1Y3FYOTNadGkpKEtrWEliYVlyVmRILDVkP15RUzl0VFFCUDM9U0gxekxeMkc6bj9zW3A6cEVKaUVmfHBXeTdoPGMqZnRvP2AqZDdKc1osOm9reyg/Km42TUlReFVhQyguQ1M8d2dOUztMPGU4STFsYj07dmtEaEx8TjVpbWBKS1pHOFNhZHYiWTdbLmBSIldiflNQdypbPShf'@;
put 'MmlJNVtlTXNrVD1GblZ2RlA3JjVHdlJMWk5YfmdXWX4qNXswOU8oO3A2PCVNbktwc1RQSG8lPlFXIUwuUCFCQkl1dFBHWl15SXtyIWNMSE5kZEB1WzBOOFh4IlEjU19EJUJ1JV8wQSpoKmhNOjI3LDhQNDhfPHtyMH1NeHxIKzBTZnxRLEtnP204NF4vNlNwRHtuMzpZaFcjUUIxJls2JGk2KGBs'@;
put 'OjMlPjFqbE0yL2tLOXosQUJtdylubXBJO3kkfHZPUiFZM251ODM9akgqRWtZMkFGcUArLDltJF02I1NRNW1oREhaejB6cyw+U2s0e1E3O1Yuez9rWn5XRTQmaEw9IyZWUTBeeWtJPSZ+bDoyVSEmO1ddc1k9Rj4iSjFwNykkSWwpbTk0T1kqd2chQzNeW1J+U3dgbD1ZRThyZ3N2K3Ujem57P1pS'@;
put 'a3FGZiRyZ3NOaExgZD1IdWt3KHB5enFTNlgiZng4Zkh7ZGtIVjxENmcyQSpdX0dSWTc6U0V6PStBbElPfnFoTU84JHVKN2RlezxFSCkkUnxyLyI4ciwhSHJJKWdQOGZYPCx0RV5TNlhqeXRaeVlZI04zN3lHSntNRVlpR1EvTVMzR3dtbClzOFssbS9Qa1p2dzp8OVBadFAmdlBsPDpIUmIrJWtN'@;
put 'RmVDImkvQE10eWJzM2lNTCpyfnlNQUhBQjdbKC5QdmU9fHtoMXAyRG1Haj93M3VLY1MvZ197JjpoKzxtYFkiMTVJfkNhR0dVMlhRXUVmalIrS1I7QCIoa0BlRjJeVjUpaz1AMUlpTTZ3R1R8JjRuenlnL2NrTEV2TD0wNHArZyVIV0ZSdDM7ckBlRihrLiZqTWQzKyMidW1SRC9kRWleZGN0Nmg+'@;
put 'bHR3b1FLWF4rV0QmYiNRLnJxVDAuVH01a2BwckRFRFBCNn5AazRqN1lqPHkwdTZPU283bCRmRiwiJEllYWtLcTkwIz9ZRVtnbylhWEZOVSV4ejx4OSF4eiYsZWZ9bn5oWDFMNCEyZ3drY3tvQ1dTQm5jN35hK0tue0lvTUt6cD46aDUpUUB4NzVpez9bejFabikwaURsXWNsOkI9YyZ3Y1dqI1N+'@;
put 'dSVUUUJPS04zR3BkRSNxOWlwMUZwND0zLFdQa287b2syM3paPnJGNDsvXklPbStHNUJJWGIhIWlvRVBkZEw0VGBKW0MvPE4qIyJsXTBROHpIQ0klIWcobj9vOFNGcixfNUslPmA4WGFYNmVPOlMkL0Z8Y09oTlMsdktZZj5AUShdUyt4LDtHU1BZUU5HUlB9fGcmdjF1R3ciOFAxKDpoUThKcjk4'@;
put 'WXQ5OFVdZyhjbmtuSzl0KVRocDd3ZGJTQUN7aS9AalomQDZvK3VQVEExWlI3KVRFa017IiVjPyxlfVZ5XWVBX1gpIXU+VSshQUJqWj0jTjNDPTFbUE1hayZDVE55IzVDNW1oPUB1Ong/QCFJZHBQZTEua2s0JE0zO2kiUyRsV0diUWhddlpwKnIvZVltQ3tQT0sxeH4wPShVUFh4c20jT2l8W0Eh'@;
put 'JWM3PW85JGo0c1JZdDBmSSt4MlJ2MSlQQjpHITh0fC5HTkNzZU1pOiVJaVBTT0BhRmhFW2VtWGFidlI0ZE1pYVIxMS9NIno1ODAveHUyeEQmcDpIKTFERyU9Pz8kZTxsLiMqLkl1K3QsekBeSU5xMlFJYCpsNjJlaiNLU0tiKUNrcFJqWnc4P3wvK2Ewek5sMkQwPmhNLnFYP3J2RXlObTpjQURY'@;
put 'entyZE9Dbys3ZV5gZT5gOTkhX2lgbTc2O0lfa3dXakt7dW1gc0ZOVERkSEIldUlmT0pNeUVeJVJ3OVEqYkU/dGNWYCMpfUhqNzo7M3NeRlpkTHpSSkwscmxCI3F8PCkzN29RYCg3eWA1JEJEKTFxdVl3YjVnVl14N2RtcUFyLjJOYEJ1R010e1hIVDUycVdoe1liMXNwb2U0YSU5eH1jJldofXFD'@;
put 'Wk5PKEZtKVYzPm9gYHhiSkEkJCRRWkJOYDNbPVtISzIoTHRzU0N7SmhEajplTW1CdDpMUlBYYm1VfXF3djxiS01INy53Q1gjWUt0USFIMDp5aVJVcVUzZm93dSU4bCo3eCNXI1kjQE9Dej8qRjN7Tm9HKzU5I249Sn1nPXYvZEgrNTlffVQzNXg7aUtDUnBgYEV5V3YlW0hLQylsNGZNanRPIiRn'@;
put 'LEQsdFV8Lm8pczxvMzkrWyVjeEI4QiZrbXlsaEhhPVV3K29+am5hWUNsd0ZYaltVTCpAVnNoI2I1LHJvZVJ1RyJbRGxOPXtGSXUkbyxaNThlenF+UUNqdyV3bGdUJV8pTmRfVDA6Rls/V11jdlomeEgkQHZ2dnd1JFVqNndTQjc5blB5IXRmJnRzakhbPnJGaF5TbFIubFddUEc5a2NfaFQ+NEx4'@;
put 'WDM2SyxpMnZEaldMMnUmI0AvaSNAIm1OeWtRXjxZSzFPRV42OVArLDw4PF47SzdAJTh8SChGJiNfOG8sQDcuIzZKals4JDlKUCpKSjhsOGFgQzcub0kzbV40Q3hmXWU/PC9mdF5WJjQ4N0NxfVUvT28yS004SDIkMyhKbVA5JTNzem1gNihhWCtzMi5FYVdpcTZlWVp8U3ZPUn47d1s8X2drQ2M+'@;
put 'ez1XNExNUC83PmJfRFdgPTAwdHl6flZ9eHBPOXEpMXIpPDYjb216bSlOTThNVE5+RWBQbmJlLF1Zc083P0taOVdFRWhNOSV0UGFPL0U+diNdemB0KHArI19GPWhwcEddSUNkQmJvKCZKezFAUDw/S3JRTX5uYmIhUVVSaC5obl1zfWY8Tig0ZVI2NVtFXW0qXWBoNGg4aSVlVW9vJEIhS2A8JUhL'@;
put 'QmRmPCg7ciJnPlhOa0QmLzxgKyosJHRYWGFiY1oxNk9CaWBVXSZCfCUxKGJQY3txNGtMPnx3O1hGbW5NMHUxWUJDKjBQKThpT3NjMFtVJF1RUnE2ejJGPWgpZWR+TjlVTDwwRGxtTFJ0djtqPmRnWCQxKmd4LGNJaEN7QVQxKkxLPHRYeDErc1JwOG5qJmkvTikqdjY5K1R7YCZ6OVA7eSJULlht'@;
put 'dG1QK05ATjA5Zl9sXSsoel03PWEwU1NJMFo2bltuUypvUVtuemFPSWBhMWpNJW9ALzcjNm1vYldFNzJrVkluLFFCPHdIc2tdO19ZUUJ8KE1LOj48MzhNKH5GQzdIaWFyW3UzUlFsNDB8TnM7a3VyTUlqciRFZ2NOVTYySS5VOlEpcC5eY0ZMcDNjOCgxMCF8dV9+fFZRTTh1YWVXN0IoW0s/PTpf'@;
put 'eU5LQnlNKSsqOW5Nd1syaSshKjluOHMqYEhtYmdlQlFSSWFVQlRWZThEPkFtSFcrQHVMRD1zVzNUNWxROD5pL0NXXkF4ezgjZWAyW3lCSSshNnRWaylwVWBhS1hoLiRoTSQ6IyV5QFNGP31WdGdCUkBye0tINFdSUSFISlsmVFolKEkpWDF5Q0krIWopenE4fGJuYVh9UEM3VGU1RHFeNiM0VjEl'@;
put 'STkrOyxYOjNKTyZYRSs5bnJqJEVtXjNofG85cEc0aDQuRWFpfGBefm0+JFlhIXJmNllmJkYqSCFAVnlxJDU9eSwoPmMwd0hyRzA7Iks3UG1qblc3fm91YHhXYmI3eXZjVSI5aWskVjhtVkc7N1lNJSNgPyU7SD5mfGYhZzI2IkclTzYkOHFleUFqX3RtZEdlQHNAdnNVRSw9Xzd9dzgoRiMsKVI2'@;
put 'UG5WQGpCaT0qKHpBbWU6PFc/KkxLTCJER1ZCW05BIz8sN0RKUV1YUHE9ejdwb3k8cC4mUEIhdGpoSzlebVEofFUrXj17Mlt7RHIsaG9faz1FfFJJeC9pNDgqS3xRQm4qaWh4IlRrUn1TRylIakJbSmtGXitLLlplZUFXeF1sczoyTElFPGZ1R2RzPF4ucVooUVNKI1gxel9PYCQ2cl4sQlsmeV01'@;
put 'aX06KSRJbnYoYSIlUSlUS0pUbmFwI2NnJk0/MHZZTzdEaWlgSjN1KVAvZj1DMVs5L0pDcFBxe2dCT0I1SGYiU2AwJEJTJX0vLlBYKTB5L0Zdd3I+N3l+cHtEI0w2VVB6RSp9Vl5YanEwZiV8O0NFWSw1Wmt2IUAoaChWRipAQCthUWFlK0NfUTFJRyFwK2I5MSlkY1N6MjQ4NWUxWDtyaTNFRj14'@;
put 'eG8sZWZTJUB8OEZ+Xn5BTjdqfjdgRE0+IkxmfW4qdTZHPWFSfl1wKGZdMC9TQUJoRG9gOEYmLnA2dGlJSTZ1enBjbC5GKHIicH18fDA5RnBKZlVwUGpOL0Y3UT1lakJuQiFHd1BLWCVxOl4rLGtJXWE2Jjs+fW9pIUZgc0ZXLjh5bHM7WDJ3LCg+Yyx8IilsQnteTUBuUG4uWVZAVWQ7MjpedDI0'@;
put 'NVFINl5aVjRpNGY6W35AYkNHUVM0M0pEN09mNlhIbSssfGN6PCh6UEllNW1DUmclOmpLcWxEI2ZyP1QmOWZOcV9nOlNJUDdtVTQ5XjpdMUJbJCI7JnBbaExNai8sZSM7Vk49dSslc3dyWHZyT1hwdj9vLDlHeiVbb1dnU1ZeI2ZhS2R6JGtiZnk+UC9BTT1hJkNzIUh9YiNMNGRSInUkUUpXMUgl'@;
put 'Z3NKe25bWzkqTGFNLH1NQnlCK1ZVe0laZGdSL2d0MitgSG11Uj4hc1F7UkIyZWh+RTxndzpaNjc1R3okWz9SITAwLyNbLjJ2cCN0U2tWMUMjN00ubyZ6Ilp7UTJPN0IhPyEzIU9gSXs/IjFCcjxrRzZhPkc2bDdzJWw2JGllLzNTKDM1W0FeaU4rTD0zTlJ+JWhPNEJfVix5VmIsSW5NNEJuY1Bs'@;
put 'SXBbbWMwdCtrbU1GKmp8MDtTYy4zaF42Yl9PfEFEPnx4TzFRT0ZdNDpYUWhVZlZLK2NgSnJMSzM8LEIuPFo6VE4qRS5OTnZwaHZNKkNpZWZNUzAwYFtwSyYxTWd4RnZsJDJEan52dWZwW1h1PUczOmMxY2VaN3V2IUdxd1VCaWNHWFhleGYhKWZLM1FZWytsLGBeNks0cj8vdmsjNTV2SGAmT0M9'@;
put 'RldXWmJ6QERrO1VCPG8+SGRyP11tJipXbkxnRzc5SUpMfUYzc0ZkNFY8UzsqfnpdYUoubXVBQUBRZER2KCpCOUYrTVBmNS8xNXBiKDhRdENBOH1ZZSFrTGJUMCtYJSouSWsiQUFDQUFBQUExQlM2RlNHc3lsXTg/fC5NZV9Oa1BULHMhZEJFTW4pPWMzbX5fdkFOVUwhcyZ5ekVyeCRaeWNkJX1z'@;
put 'OHRdTW9JWzhXdEV8M0NXPnA7dD0xYigpbCM/Ly92UEJPNyldPm9rWGE4emg0UkBuY3F5PT1EfTZ2JGdlYzY3NH1OS0V8Z1ssaSN8Sj92LGl6QXMqXWpsZiUuZjo0NzgwQGo/d0hOdWJsbD93b2YoR01Xcix0WTk1PjpfRCs4LE19UiJMdXM8elRvSz8uMVhYKXVxZ0ZHVWNKfiUrfUlrcUJ4V2Au'@;
put 'Km8oJUh3TU4/R1MpUl8ySSQmRmV8aiw0MzNHVFd9dllSRypnc0YhXjd7T2BnXmpteFE1WVhyP2x3OTJXVjdjQD1YVnI0NS5nc2k+bm4oJTkpQW1IVSUzYCJZWylJRWFDQ0s/NTF2P1NEXipBLipmaXhIdGxvL250KFlDfSQ0Wig4KW08MSpdNVlMMFBiQldTZmYvW3clSV1bemhzbCREPmgxUExq'@;
put 'dzlyMk9JODhJQCQlfDY3PygsZ0JQYH0raTNOPS4kamVSUj44fTBSayZHVjAqKkhJZl5Qa3QpUF1xcU1ybkYhI3pzVXE2UnhlJTdeLFFZbER9XixyWjk3c05qOkhxSDJVejFRJkoiRkcxTyt9UXk7U3hQR1p8dlZwJSN6ZXhnK3FkOk8pVENebFBESjxKNlJeSE0rU111SzwqUV9rI1cxOTJodyMq'@;
put 'JlUzYFUkPipTQ15rKTt+Ty9ORXRweVVgWGVvNnttODdsMVJyMU1hKVZjclpaYkYxPiRpREgvWUFAWEdFckFIUGM1bjpMXmNZJmBSb2hRcis+eSZkYnUlWiNyfSJ1JWomRHo2eCF9dXkwOStRMnY9R1ZZZkF1cW1sZnwrNTduLm4uPEhLLyYifk1gTHRuKnBSRW04aj14bFl0OVBXQmVvLjBNIzVG'@;
put 'XXAhUGtEN01pOHRQLEVdKEw1NVcxUz9uekBWbztUOE0pczlCcUNoc0BRaVY1TD9TJjw+V0RKcWkuK0s1L1kjUHgwSUV6SjdpUmkzfHFYZT9udTllOGA1flFickM9fjJXbWJfLjR1fnI7bz5ZUixTal0sZnIkTUMqKFA2bTFrRHNMRD5qQlpvKkVLOld8N3VoNDtiXnF2T2lAKU9KcVteWUZ4cC9m'@;
put 'Snp6fnhWMlEzbUJaRz4lfFI9WXEwWWlaTytuKEIodCl7K219O2wuODJnJCoudzVbKU4ja0VkRkQkMWBFQWY/Ty4+R3pbIjE+SixkWjF0IXRTOS5mODUsSkV1ei91VC9gI2xXbjRCJjgmdzkqIk4mfktxWnBMJHgyPGwlS2gvaEohLDE8RSF7QmtxVnVtKX1YPStUbmEhZCl8YmUjV0VhKSJsIXs3'@;
put 'WUp6JWlJeFEhUTtiNnQqWjd6TyMre2Q4UWdmaGlZdT5MYF5FVUdLYHRzVW4wXXZ+YDpRQ1BKKy40ZDFbdTVHNHchN0NKVDRVW2Qhc20uNnhgdTNxZWxiPSopeXB0fX0jQ3BQViI/cyVHKT80XVIwXV86ISsiY2w+eTErQXJfOE9aeDlWfmNwcTNlciQ2X1ZYJWYhXSI8NU9rdlFhWjQ2WCsiV3Q0'@;
put 'd1lzJVdaajc6dUx4OnhYKHJddStFIT18TVFZZSk0UyxnUjJTYCt2dkJ5TyRGeVhaZjs7RGcoNXYrKmtUIUREQ00vT1BwXkVSOFREdHQwKHZLUlAoTlssVmsrW0lTOWV0LkdoQW9GY1lOVC8lUlA8PFshfk9jYE02IVY+YSt2NElDcCEuMnEzLG4mQjt4QUJmN3BgR2VdbXNLVmRkdlIwcFNLSF58'@;
put 'XWJmaU1HIXZNN2U6T1RmOGErfXljfGt0TURvKnc6QGtzMnheY3NiYy8/InpMb05YPWRNYDR2c3V2bSxedFB5MUUxRXleanEvWkNYMltAZmdBVU82SDkkRDJVRVlnY3wvZzpgemwpLmB3djxwY1YhR055L0x5WSo4TWBlKFZ0X104T1ozYC5RYSJuSntAY3QoNyVOQkVzbExrO3gzYmoqInVOOVtW'@;
put 'STg4W1taKVZ9VDlib04yNTopbS5IdzNqZz1MMmJEOnRQYCl+YiRdOyopPkEwQmxEISo3dGsyPEkydn5nY0lVRCwwTnJkb2FaRGdRbz5uQHdFPntHMVIkc31bOkcmfmpfTWNyMXVvbX56I31ucUwjKCJCJmk9alk1PUBtXXYqeVR1RUZLbCREN1FRNCtvOyM/ZXBmNXNjZzleUntgXmRiOWdCMjBX'@;
put 'YCsxa3dhbiRHUDs3cTlWcDlhP0A3RiYmMGs4dUw8RUlXKjVQUjlERS5wUzxLdEk/O20mbEAqMj9pUXk5dHIuZCV4eU05MkpfLFBdMk9oQWtGaXgrY15PfVVIdjNuQyR8RDh3PWxYfFNvYnY2QGdtakpsaWJVPiZoIWxlOzNZYFkpODs1IWl0OU4yW3wkP1o8SS4lPCxuQFQqJExTcGElK0ldaEV+'@;
put 'X0Z2dk8we09HKkJCPTpDVyN8RiVqM0hCPCokUUAqUntkOmdbPCYvWEtQfDJIOEglMCt0aGYyLE5OWyksbDA2T3x5PDJVcFd8KEdoOy5HWVJeNjRaPTxmY0R+dXd+Q3YmMihDYGJFRSRqS3xdQ3s1eUMsZVU8Lmo3Si51Qi48MGp5TTRMYnghfl1xNVNUX1pGdjJwKFlXblFjc3BOQjZLdzJrI2Ur'@;
put 'V3VJcWVXNC89QCVnd295d251UzBtczp4PW8vflp7ZU83T05yfmg8dHgwMGBoWGh7fWBHc3YjYVMuazNzRlkiZ3IhZTJ+OTVnLmxWdmZiODlAVHo3QmNIWUQiKF97Z1JFdmpoWUU2YWd6ZGxeTXB5cjVFX2JEYFhyM3M2REhQOj1lYitLOldjRi5PcU9DU1VVP2ZdWWZlY2hsOU5OOjdtfl5WYnpn'@;
put 'TCU+TzAkN2JVIVFsKDRTNnBHUCNieFpqNC5ROV9jNmJtQiYqZno7bzo4W3pUN3BmZDhXUDdnczcwUF95PTZZPHk5fiFGU142bHIhTkJ2YE9pXVhsOiEveTJvKHFHSyVNYyxmbkZrW1QsNXhRKnFIYnUvZWNrays8akF4UXlJRnp7R3hzR3hwcF1BRjdGPGNnUFlDcSxfO1dYPXZiRUV2dyZiLn4y'@;
put 'YEhoTmZEc1Q+ZSt0VHgrMXpYRG5IfCU+UUlPcnJXcWAsWGNqcUg4ODo7Qk8pYE1HejZUc3JucWowb0xLeX06Q3poezZvdkUjbkZMWD8/ZGBaZ2ZeOGVQLHtKfEYub0o6YGwvJVB9QmZZVnAvQGI8fjxANSo8bzw7d3BvTHg/eFgxNnVtOG03WGc3eExQOUpSfUI0UkpQcmxCczlsMHRJZ2lfIzcu'@;
put 'YExZMHp4YTY0Y1Z8bGU5W0YpJEs9RFFefFtlck5+IV9BME1QOGh2QDk9PUBdTTdmN3pASkQ5NXJma1kzRGYvVVJ7emBAeDY+RUduVVYwYmR3XVI+aFRRRiNdN21Pb3VONE5NSXZZTzZBXUUsXXxVTl0iLlFJaW9zO0l7d2hDQGNXT35lTi8rVzYwci9WRF5hanMjMnklKjRUemE5PX1qbnZEKVVu'@;
put 'JFMpZiJNIWJMK3BvLzJFTiRxRm0iWFFScERSbHZddlZCLkB1TUU0cE8zJHZAJmNvej80fltuImEwIXYwJS8ueUF3ajR4bWtEUyRaLiJJSFldW2ZMKm50X1JAfitONnY2ZWo9VWhDaXlNYEFkNVlKVmpwaDE2W1RuajFKTUE4JUM2Z0JuYGhNV1VrS3Imeko0R2hEYm8pQS8/PFdMYCMqb2B2Visy'@;
put 'UWJ7K095WDZuVXRYIzUkbFVlPFsvXjVETTpIWCoxQHtzdmlMeCpQPy8xfnMlNXlgU1o8RX5+L15wbV04NWRnKSY1PVNScSpyU3d1TypMZVNAOElwZ29IXnc1YXlwZFpMbkIybEY8KGVwVEsja2BpLyQoIjkuOG5sbEVxLzB9eCZgeFJsPDghbHg4PDJoOENiSzRpMXo9JlFrKGVXO3hKdT1xMzdD'@;
put 'PFZmXndoa0lUQmAsYS4oeCxId35YZEZoPGh5eT9uInBOOFROSCVUOl4jREpoKlhYY0YhZiNSPyplbV4saktGcUszJCVbTW9ZVGZMdUE4XnMpXXY5Kl5qfFg8JSx5czc8T2lnaT08RUJgMGZ1eGFAfG1aUjQ5fmArbEBdbl5bOEpJKVhVM31tRFojV3h4Y3ViV3JbOEV+QGIyeCtFOWkrSUNpWitD'@;
put 'd0htVnh3Zj1fXXlFb2FfV1UiKEcwZ0FrS0g+c1F0WXxbIk5QfE46K28oZH5Md1RgSVJ8VT9WfFh1TCpuIyQ2e3w7Sj8jJnN9LC9nWFEoXXJgaWpUU2YoaWA/UiooY2lgSHFEczo5RzNaQyZQM2RGTDJbWCNjNjFnc08uQV8ocGttMDp4TTB8czlZIz1TQmo6d0dPOXN7JEM8bGRlS1N4UFc4OUZt'@;
put 'YUohYVlPRVA/cTxGQ1R9QSRFMXE/ZWQjXixAIUVVcTdiJFRIPiQ2KyI7KS5Pcmt6SEJeXVFNaywqSTdfYSRILG4uU0VWS152e1tFbDFuJEhwU18wI0JtelIrKS5UTC9CLmsxc2NhNn1WKXVXSjYvKzMoSF9ySmc4SVlsK00pdmRBUEpQa152e3ptfTklQFd7LzM0PG91PE1qMlYva0pKd3swZzJk'@;
put 'KWh1LjFbelZRQFdmOGJZVXhmPk5wPVE2Iz0mc1QlK3EjZTR2eyh1X006Xi85KEZPREc0aXI7cntqOXJweHUhVm1EXXZ0YG1IaVMkMSpeYWUqM0I1dUxbelh7VG5RJFkvMFU6WSF2RF57aGE+IXJCXkQ1Six6R2lMWTFjSTJLT0ZeJk0wczxCKGZMSiUoLk8xa0s+N0MwMVApKiVsWzt9amk6SW02'@;
put 'ZTVXbjhHP1RIUCNdKCN+Ly9yRHRCKG98ajQ1X2orU25aV1V2eH1LUkthSjl5RlhSOzlJb2krIipUYGBnJCNKWHhqfitrUzg3e3tSWTNXMFN1IVJLZCZUMDR3N2o7SDBZfWheIkFtSExTbDV5IyMjJWhUYFpee2ROSztVb2w5fk1bbUwsWCxHZ1YxZkpySTZvPDlYaSQqY2hybiJvTjNsTl1JXk8+'@;
put 'dEdCVG0kNExKRWlDd2RwYkMxI21qL2BPdGIke2lJcSU6QTFFKEQ1VHYxUFpbKWhDaC40Kk80Nit0K2NjbX1tQEtUT2lLIXl6RH5NNW9POmIkUVdGSUlXUEYyU0w8bnJ3KExCOGVqS1M3WWV7bmpeal07WXsmWnA3OnR1eC9OT1FebjcmWC9BZXIvYDg4Y0VVamRVW2N+QFIwJWN2cWkyNGtKWUJB'@;
put 'KE19Rj5DX05peEtyVFAuKGpyWklQZ31GO14uT0RrMyUuZClaI1NsZn1vMXd8K0pZTWFXRFJQTVNmX35kIkw5N2xNKDI/OS9ufERGMmA1UWopUmA3Lj1XKnBdZDA7dHNhX0pzM3Z7bF1XXSp3VFJYR3pYcGxTSSh6UjYhWVNSc0JZaCNNPkQjU2JSLG8yNTJNWEBVSThGNCgrYjVlPHJoa2t0bEkm'@;
put 'WV14L2VSaSk2bWc6Ri8jMHwsKDkkamFWW1ZIbm1MVXJGQDcjLyZpUmtoRUxgZVghNSRwWlFaO0xodyhRdVtaOkd7aihZcUVINT0+LFU9SDhJIWlAUE1XZixQSW1GKFI9MSlYeHBiZllQYzhLJXk6QCJieU9DTFVobSJrXVQhdUdSdHwyaWkjW1A9VjhWWFs9R111Kkw3fj8rdXQzZjozNzk4S1l2'@;
put 'OmxMOkMsVFVGNF53YHUqWUF6emoyNTwoJSpuZSspSllkdF1Ed1p7UDgsTU9QKChEd3t7R0VgS2lXVnZYNmtvbnw7ViRsdDFpRF8jLiFbWHBzcVVwbDFrKHI9PVN5N0RqT0FpUntUSDBZNkdsSzk0KitLIT1oVDdyMWFZWlhJc0tPW2VtUCQ/V0lUZm9ZZ144fGBwK2M4NnI7eURdWiF6P0heLnB1'@;
put 'NT0uS2IyJlJxPFtqRjRLLnlVRWUhcU5iQytsUG4wan1YTzVkYj9mS2xfMGFwY2xFQHp5RWluUFJPRXtuUStvaWFzbkY6akU2O0xXIlU7SiEvOC4lSXRlXWV9ISVrN2g4VlZqcC43Xj9nbmcxV3o3QS5Ven05RVVwfGo/P3VdQmJIVE9hYW5FWzRNOnNvXkRVSDVndVdiZSxRRFthdzprVDN6KyFV'@;
put 'ITV0WkZpPzpRVDgqMEleTyhTQ3xtKV1qPl5tPWROVzxPMitZRUdKViFvd2JGVU9nNlM/ekR5fHZlT11wNDZYR2ZueUJ+e0J2cFZnaHBBPn1ufkBSJSRjaGtZIT1AMyFvOXEoRll0Sjg1PTsoclIkSU1KIWtYRGJObHdgPmswYiFwbSpGYHwpTkwzdkxeZTRAOzlTbH5NM2ZPTWVCdDBadUhpVWR4'@;
put 'K2FaSGZMbCtIIl56RGxrciMlJW5tLzxxb09nKCY7WSw9O2IxKiNsLkVHKCJ6Oy5LNixQZ245MSN+JXFJQ2BBM0NJRTckeEpieDxBQnpeMkRmOEQke0JPWnptc1JneUdtUHRXPFguPSlXWFsydjE0VE88Lj1+RVM3UHt8LmdLSj0rP2Y2Z318a0dNJCpBUGZhQTo/R3RuSG5XQmZmcVNpc3Ztc2VO'@;
put 'cmAzQkB7XTE6WGApRSFrNnVNZyMqVjFtQkd1aSgrdj5jNmw6JTdBKyVyVSplbExVRHZCVG5URmFDfkdyWlE2YVV0WDBpaVREIml4KUxJTzY2eDRpbjglTG9SP203MnQ2Jn1GRW84ZUpKR21uVCQxTT9xSy9sZj1xcE4ybD1lVClKQzA7SyVoYmYsQikhMy5hIzdEOWN+KV50PC9IPHRDPnNIZ1Aw'@;
put 'NzFbImEjKzk5JX5GRzduJm5lVn1dNjBmeWx0WWMoT3RMZyFrYH5bYmlvV2g/T0lNZGx3ejl+Z1YvRnc9JXBecz99RExhbENfYCVAYF5FK2A1O1U0eytSM2VeXkdMfEo+X2lVbEYsOFhmUEp9MTZNeXAlSjgxJjl9Q1Q4QVBNPz1bUldrSHdoI3sobFltKFc+ZD5sM1pUJmRDO1BScHFCbH0sI2U5'@;
put 'bnRpVXBWfld5dSZdM3AiZCJPPEI5U2VvMThaXXh3PzEmYmFVbkkpMjYjK2VZWklxQXg9VHlHKH1ISXYwPlJaPXdUQDpXMzkmOCtXQjA8JjhVciQobkY/SHc+Pzt7PncxUDM3cTRfejQ5OEt3PDNONlFoTihZYW13YztCbDtzalkmW15kdW9ufUdTLm9QfV06InxfYlh6Ll0uLzZpdDxybVdQfDUq'@;
put 'RDtZZiVdQ3N7SXFWIyp5eTQrLEhLVlN2eSF2aD99TkF2W2RyWyhyNV5xd2k+TWRII0BvS1ZtWmUzJTNjU09DQEpBfk4ybWoqUFNZIUMucX5uYTgoJDwleGxtblgrInVzeSY9Ujc8c2VUbWQ9OSloXTlkZnlya1JAYWRnbzUlcEpJUnNmOC8sSSU0W1koZD9wQElhUSlkTE1lNEUuMjA0Njh0JktJ'@;
put 'X1pIRChTVnlDaiZIQGgjZTtlNDcjdzJqO2IrVWNLe1diaD5PLEpUfEtFakw4WEQuUUxtOy5+Q3ZbaCN3Om50enpjcW4kfSE3fjpqY0x5e0NxL09KWiZwejVoLlBqe0JSY3dwV0lVI0JRLkBkJVNDWjxpOGZVUWdnSlZTWltkclRofG80XSUsR2JPO0dqRGR6a2R6L0BDZmd4elJzTUlZLy5yWktA'@;
put 'LENTaHx8alJjU2piNz52OUBPSVthO2U0VTZsRWhxSGB7RlciMV9PbzNxIWxffH5QKF0hTHlkTExTV3k3RX4jRTIyJXVXMlNHckFqYVt+aSNuL3QqJEhVPE1uOSt8XTJNVC56Lzw+eTQ7YGQpNGxyOD5QIlVXSFRpMnQkPUNqdDEiZFE2fUVraWFNKGlhM110Ml1yWGc9JFIjNT8iRVE0IkxhZDBJ'@;
put 'TTpsfUQmRWFsamVieyhFYlkqZ3l+MEAmP2FecjxkRSZNWmBiMl1iI3lDUjU4emNFIkFEI1F3UjNDOmYlc1l5eENONzMsdF5JYHRbTCEiZDFPNj4rNHY+QnB7ODg8fGY3MFdTVHp7KjYhfnhTNS42RUVpYj8lYXxpJEBWOmdOV3N8fShsdkJbPE1tMyljMXMlSi9Wb3ozM2lvR2xLLE5aImo+KDhB'@;
put 'PFdYT1dgSlNCZDJ3VFskNF5YUEVZZDBJVUZVNUY+VDVJaFRSaUoxLlhINH0sd0RXPkwpNT06KDlbRy9NKWVoOHNheCZfeCwxRzNpZmFWJFhDQWJmMiwzZTJ7dEdALkYodEA6Qi92fTNYLzw9VF5UcXVzWCNOUHEjTil7YVg/SyFEaW1DOEsjIVoiY0tCNGcvSkAyaVltd284MFt6M0hWUXFCQ2RO'@;
put 'UD9RcCFwJFREd3thNV04QnA0Z0dSNTxtazxlUEAkLF1TRjYlKCswKEtKaCYrRnBDRWhYOVovXSkpRG1fI1VNTDplbjpaZ0FRL1JxS1osLlEvI0BwOVhBfWVsV0hHdHFWYVl4RFdbLGN5OXxgSnRpTXMsQDE1SkdSZktaOlU6bUAqdVE4USY+PV5jTi9kIndGenBAc3o0e0Y9dkNZPF5nNWdNcT1x'@;
put 'W1U7QnQpSVokKDI2TTV5KCNeUlBJWHI9MUR1Q0lHOlVnP3cwRlNZZks7c1E6aEdvQCVTZSxLVUNRdWZCRCNWbDwuPjMsSkQzVEdjaXl6Y31RTl8zRylQRCQwMVRMUHR5fih2cUs9YDlEO0lhYHlNZTRGWXtzRX1ZPWtVKWFHdEN+UDdnNXt9akRIWWxJUGBlbzBkPWU+aSQhLyRiKzNAKjErTUVl'@;
put 'aHd1fCxbQmUueUt4VEJTUTFFOWdBZXxUZVd5O049XX4uZ019O3hyI31KcFA7R1lPZyRmT2p0Yjw4KE9VNV9IU1I1P1RBSktEL1RpJkVtSVlEKXI3ZU5BIi5Mdm5adSohRyh4Mj18Q0JqdHBATGN8RD1YSTxHZTdVWHw5fkk4dkhsJnh0K31BVyY5filGbnZXL2QocnRQRX11OjpHXVk7NTBvRVRI'@;
put 'X0h7b3cqWEUoVns6M25gInQxWCkwMmZ3Zn4xWnhgO21jX29EKFciOipCVjR1M11OSyxnbCgkPldoMnJxR1JKc151SDMpNSxtKlYqalBsRkVtM0QvYUIhQFBfUXJDJiEmQGF7alBLaWdRfSJDOEY9bzJwMVFpMWBtK2cmUkdsNEpeNTtyLjBRaXV3WUJ+SS9PV2ZuTkZHRkBwaSF5Qz5LfngzKXw/'@;
put 'ZT88blAkVTRmT31JNU41fFQ6MXd8bW8+UUBiNSRhVXcyPWRsdnQ3KG5MIlM9KDk/LitCaylnQXAiNjRoWjJTPjlCSCU0bDB2RlNUV3htXUsoO0Fwb0dxekZnNlMwMlZESmBrdTIxNGc5KEwpdExkUS9YYzAsJF1iYX1NX2AoYHtYJTd9NX44IzJPbjdgTXJWNWY9KlFFJnBbJm9NYU5DQis5LilZ'@;
put 'ejYsT3klRF1rfC9hMUJwPyVmcGl5Y2I8VSV7YGk2bldIYy9ONSVTLzlSaSUzXl0kZVMqIzV5Q1dSJEdtXTUufXZqYz1pYW5lInsmbmJeWjtaS0dRUmJ0ZjVnTyJsVCJRVCFTSngxNyQoX3VTWHxpNzBIQjNCYTlCfHNwdk9iT3ZPcndmTD0vajpnXisrWSNmPGFYMGRkeGAqVUMxb1RuOVZoTyZm'@;
put 'bn1LaCR9fDl1dWJbYFhweTFaRkBZO15OZVJ+OjUpSl9wRC9aMGUuNyg0blZ5Il4pfUl2Qk1MNVNkSDdifSRVfGA0R0c9QFJVP1NUQn5sI2ZCayZsSkBJRGk+eX00Mi50anE5LEReUFg7YiVwTGRXP28kSWtJVFRDbTZJdmI0SyhyU1RufjVIYkxZMXxiRmZ7bitsPUFHKkxaT2QoalEwSU07fTIj'@;
put 'IUI6NEE8T1dxc3IySiUvejJxVXR8fEFJbDpoQk1TUXhfXiR+VVZ+VGomRlN7QnFaYyhBSj9KOXdAMUlwb11mZ303Jkgza3REUkhZaSZiSkV4R1lWMWJSciJmVHQre1dBVn5+Yy5bO1IjVGwpWX17KWZybHJmSHlSPWcxME9tMFdbeUpkO3hZKVd+bnEwP1pSfEApJUxUcX1UNFkzbDdzbiFOKz5k'@;
put 'UVVSL2I8cDYrejdgLmhfVWJjNTBwbHd6UUxjaT9VKmFVJFoqa2FhKWhZWXU+MkckXihwS31+SEwkYko0VXEiZUxVTTFRVjdWYyFZalZ9dld0QFR8KH44blR6NkJVdnQ5XVFvMjx3NyZUQixRayg1S3dsPWUpbGk2Uz8rTXs8Zj9iNFFXX3hie29UO1ldWTo9N3M8Xn5Dc0tQYXFTSV9ZKy9tSlQ0'@;
put 'RVIpZ2lzIy85bzMyWjwjdHJ1TE1mdUVJcT9ES201eHZTQTtqM0MkPXJpciU0K1BVZV1EZ0dZNTo8eWFLK1lWQjBkMkNzMXtZSXljTSQsaj1mayxkeDo7fHlrZmokLkMkZzQ/biNqMkhZTzAsfjZ6OWVjZnZ6SH1yOE53TUhibmRVSjJmUyEuWlUkYGdRI2NfPUNvRjZZSUtZRmZpaG9uTn5dUlB5'@;
put 'SiVeNXBBTXVnN05+QV5rY2F5eDFyIUJoOC9tV118bChvOWZPQFgjYlFqWll4MHMvd3c0KmdXZy5UKXQvLHl2SDclQE8vTkJjXTAwKjlZPSheQkt3Xj8hNzxwXnQqJklCLll0Z0R1ey5HPixmZCNfYURdLzJ1VF9aelgyREBDWmFDQ18zMVc9fih9Nnx3P1pKNmwjY1kmbUZZamJKRkxNPW5VSWNQ'@;
put 'RWV4PGwzMDQ0UW8+Q0wzTzVQJC5TNSIhW01HeEw0QGlFK2F5WmUuaHg4dGBmajZZfHFrRy9WaTxgYihzMTdOPnZkRS9zJUhxXVRfM350Sm9odnZyaVgwb2NZb1J+fmArOHJodHtzQ0F0ND8wJFdadyhuSUEwaiFUTX0wOlk/fXJWLnQ6NklXQVUxSU18YGVaXyFjJEZLOkMvQkdhQ0NNInlGek1w'@;
put 'ISVTVkdXcTcsQFJnYmdnLCY6OSRnJjpvcWxPU087RCoyalBYeiZMW01yMCVMTEJ7bXVmZnkpdVhacmA5Ils+Mj5PVVNyYyM7c09ROn4mKHN0Py49L3leaVpyS35XOUclOSRDMTQqSX5SU29WeUNrfFgvOUB1anJnVDtVYUkpKVRFajYuUzQ/XnY1Z3Q7R24mVCFod0FTKHcpSVk+JkpmY1YxLC4w'@;
put 'eTN9ZDlmMy82JltAXjguPWdaPCx8fmlIbkVrOntVRDZgb3A6MXB0fCtfX1deezlyM1QvUyozR2Y6fmssVzokdl5jRFg7P0QsPUZ9bCFzbHkoWHMzRiNhRCR7cUllYVVXIVZSNDZpQSY4JDNCSShfXn5XM3doT3RKfmwoKWc0cyVzeFhxT0ZvKEhDbGJjQlZEXVRKKi4/VzIzJWEsfEJXWiNINEsx'@;
put 'RGh8L2ZOdz4zeGwhPmJDUFU7ZzpPZXlrYT4haGlReUBnTmlbQUZ6R0BSc3cle1B+eS84YE9eS1IxZT1YaHZwMV5gKURgayIwQiNWWEpgYT08cDxJMENLXmllLzNpWl5tYndLY0dgLkBgLGVaL31UaGdFWUF1ZzY+OkQ/ezAsIkg+bCtdKVE7bjdbTjojeE5lYV5SSSleKCFWaHE4QTFzX1B7Qm1k'@;
put 'LGM4fj5jVzVrMEZXXkZKOHEraXRkNlJwI0xbZTUobTw0WkJaR3kyMyFUMD5DOERsQlVJWkNvOE51e1IxI29qRDl+ayltYTVfZiNRLDNiKT9teXR7Sl52LDVoL3w0e3tzdlBKQX13fFViV3Q3Q1RUMWt0fCJAcj0zaENtdCZaJXZoMUduIlN4NHF3IyN1TSl7P0V4MHZLL0Jwb11sZ3lHNFIwYjhR'@;
put 'ZihXWE9BfElQajVkYVFrL21pfjUmLiJvU01DNmRabEZxPX15OzkkbSR6N0ciTGtMRU06WiZ7dzNRYUklfFMzNytjbitJXlE1Z14rIVM7Yjl4JHw+RT1FVXY9VFQvJWg6NlA5Ql47UjBDXXRYJi9xZV14b01oN1pEc2JCMzhedmJdZzpJJHJ+QiZ0SXNpeV5sM09PZF9qcElPOSp4QnVVeEs1dm1n'@;
put 'WUAqO0t6bChtPzZtfV8hcXE+YzRbbj9qVF11VDxYaS4sNERtc0Q8WE15T3JeVyUpNH5BZWF4XmtwVkVKUzhkVHVgXW94NjFsJCZ1cmVGQGJYb3c3OmgpJDpCK2poY3IpeH1MQ0kvNXYwVH5hVkpaVGt4fihRM3JDbCh0SykkQlQ5LzUiX2JVJU0laH1mInwiU2NeTyQkKCo8eSh+YUN9LC9LeX01'@;
put 'Wm9SPmJYQWNheGNZKSx7MlM6fCVHOEF2JE4mWW4hM3IpPjpSWT9FYlpqSjRma2RNa0NaP0piajNSNF4+VXYuXj5vMER0ITgqOWJrcGhWcCZteDN+a21VTFlqSS9KX04yMVcpXnNxNjRqWUNIMkpKWDNsaSZVbklmbSlVbXY3bigjRHQlM1JLXmo4PWk5Z0p3VyR1bUsydUpgKGFxZ0lRdDZGTXkj'@;
put 'WnBWOmhZLHFGb0dgRUE7M3ZSXkMwRUV0Q0NtZSZKe0FzeFglQztyS1E3ImUxYG5tL1NKYm1LdjZKUXUmRiZRL0RSMjg3OGlOOGAjYmRWU2hUcFJBVXUrVUkqb3cmMUBEaHk+Lih0ZlVab3w8VXhhMCVlT1JlQlFyN1JVUClEUUJ6eTJObmRzIXFNMX17R3NlR1F6X3EsQUssW00oPHE5Q2dFdlJ0'@;
put 'SyI4Zy99T0dgOVVjQTYkZ0d9Xzx3N3RIb2IlMTFNTntAL2xyTjwyQyMlc2cvUHhCYDlwZCFNOFFAa3h9L3FzemAyfkU5X2kyOX0vW0xSb2toLyM9elJAbV93RlJdK0BmQ3F+dC5EeD1eSCwlW2xFQ1lgcHYuPjl0NTw2Wl8jW0dldSg9dTk2MWA2ZlpqVzE+a0dBODFNUHMvUltVW0k1cEttZ2ws'@;
put 'cF5Qe14iIXlgc1Y1RXtRQUx8fHJDNTxiP0hXUGwyZyt7X2ZkfjNadT03VWY6Xz9mZixQW0ksIXgiT2gqajc8aldMbmxTe2NoSkRbZiM4c0s8c0kse0gjIm0/UiFVIi89Ims1OmQ8TjU2fVZKO0NFc2FsWSQwQXdhRSY3PmNaZTRMRnNZQC9COFRVdEBoPlMiY0NxejNBdktNLmFAbmY0RV5CX0pw'@;
put 'O1N2byE1c3xPWE1OfGF6V0xiNU80SEpRUXt1IUg6RitWIylHbiQqVS9hbiQkRnMlbVJnRUlUPTVyNnR0PDxSS0dRakBUUX0jTXU1fGd3cCVWW1F0O0ZDTnk7flVvNyJXZmEsRTo9UkZ3eWRHKiwyRHpDT25gekU9QigkNHE7by94bEdXQUJ+WXdDRF43dkFqVm81VC9bZlpTNkNmLEQ/fClXK0Q/'@;
put 'OCxjKUd1TXxLZU95K1FLaipyVW1oTDxZTFF4PDIka10jTnk5ZTxbSEIvIWJVTyx9SW5mSzhDLER1M1ZiekFYUDpIdkxHelZ2Tmw0eUNbVCF9WHAucnpjW35GYVoyY0x6cHN2YVAhfmBtQDx8TFFUL254MVN7JHpRQCopYlpdcHBAang0bWEjUSRoZlEmZTVlT1E0TEQuTXJMfV9DUz47ayojdS40'@;
put 'UkEvdGRaUj9rUFZ+TWRGcWUsJjlyb2h8KyIrNFQ/QHxyV0VefUBDJXNFJncpMlEvcTl6JjI0IWYmZDQocEMmUilkd1Ehc1JlZjU7cUpQTzwvV1IqVXF7Z2U5PTtQPHA2IVFJKHdQWWl3Ozk9L2A+KVFXZTBdWy9HSU8pVjJCOWhdNVhmQntwVmEpQmU7TVomcC5QVlBHZ084YG1LIXhwfmdyNSFN'@;
put 'KjpmNiE1RUFpb1FsTE5oV11eazFGIkQvOmxTOSEkdz5pbEJbV2VKYjAhKzlNXnxJaU0lKWxrSTclU0JaYzRkbEROM25LV3hdVzZdS1A8bzI8VkJhPj0lT31Ya21hbSFvQWlTaH1+NC5ee0JDNEs1RWNuUSI+c29ESEFLWkVpTTw7Zl8jbTk0O05bRCYpXygkU2xkZWRgd1BLKkw6IXNEXk0hdTBS'@;
put 'PS5pJXUpaix6MUFPaXpncSkqKVNgM1dSSFVLczEiZzhARU1vdjxDRnVMJGE9QypMSzFTUUkxfCN9bm9sQ1R+InEkWnt0WzEha292VFVTOW9LMj0vb09hVCk4Smd8MX1zcSpdPi5ESVo+eSl7Z2tAWHdZPWBrKU5QcFAhTmdFbDh2dEN3bUc6cCM1cSFHbXg7flYqX3F9elZFQDMlI2orbnUrQlNh'@;
put 'JmFSODFILFRIWC5iUldJNS84MEAkUTNPZFBXX21DM35NWHtDTDUiIkMuVkx8NTZNcVNNSXNSPGBGO119IlN9TUxvQk53IUpAaThBdlo7NVsocVNlX3giTyo4VVExQll7bSM9Q19RekMwRGVCYG9XZi8zfnNhbiswPkooKytLXTYvMWZraC9wWUdLW3VfN1BvPWgjYUMvU1JfVk15MCFJVnBsNXBu'@;
put 'ZVFPKHJtJVpILipIbjFGPDgoYl9yOHc/W1YxR0BbTXh5PW5MeCFwbzV9S1FYOkB9Smh0ZnV9aU07VVVCYVcqTDJmSl4sKD1BIlgqQ11fK3dqVDNWdWErPEN6S01LKTZAS0VYemB5Im56Y3okdXF4WjFteEtmLHBANHxqYS5oUH5sUDZWNEVBNmk8eSxCUz1hYFNZe2cvcktXM20ycyNBQGhCSzdt'@;
put 'QF5XPFFSR110dmtqbjttdyJtJk96aXA7fEZseU12cU5NMWhtYzRAMi59MzJmQHBlNSpBUk52c2k/ZUA7ZUlwQzdhZzNmaFo7PFppIj87Ni95al1+PUNrU1lGKkRnYjFXU2s6fntNdEJCLG9CPkBTZjZ7LD88S3MmI2lKR2w7VWRSb2s2YnY3SFd2SUNYUGxpdnI2cWV7REFyQEBXez10LCoxK01E'@;
put 'WHNNR1ZaLGxTTyJxWnQqbEFeY3Z7LmElPFliJmVFXTthMkoje2pPbmdEP0M3S05UVGZobzFnPkAyPzU2JTttKklpND9yR1U5S3crPmBFPX1LMjh7KDAyXTc2elQjUj4kQS54dDkodSJvdWhRbXRgK3ZJPHtyOWx2WDcpXVI0cmxSUTcvaj5VSUd3NEo9Ti8qLy8pKENsLypoNC5rXjBnYSFtNipy'@;
put 'MXZiZltUMndzWzhFNF9wJjFJI1Z4Y2dmVG1vKHRLPyg9aUZgJFhKLiYxLkJQQV5VY0I3LHwuSlVmJDhSOjRhZnchIngue1IqXyMjRihfQyxgbmQ9cmxUQmExekEvdDFWamF2TGVvIWBZeTt2Y0BpQ2l7Y21NO2JZK0tIP3JwPVZhUVpQX0guIUVEOXQqdDw1aiZ8V009OXZ4LExbJDNFSzYhMTU/'@;
put 'XnxaKFpMUXdUS1ZKWWg5L3A4Ojl1Ln1gWm99b3phfjR1ckB4VyNFPzRqQjhdb01iS15nOzJWaGlSQ0MufUlkX0o8IyVgZyhrZnBHJlcyeWpnO2s8QkdARDRkbzFEOEQpNF0uTSU4XTd6XVVPSFVNTGsobFBVfUo2cyghTFd8P2o9VkRyJH1paDhqWERNRDYxaFEkPmxfbWZdRUF+YExjfFZAMzM4'@;
put 'RyJBWWhNX25eXyo2WFQvPkJALm1hNyMmVlUvemY8YFF5SVF7aWtAajlEVkUjRn50L0pxYGUmUEEzakA2I1tmX31VaTFGVmxOL0BiKkJlPm9fSz8zQ0ZLcUU6Slphflh0M2JiVCJ2WHcoPWUhO1lqMlI/JlZ2Z083OixSeUJCWEgpSiUhaWtDWW1KOzJwMWs1al5IVGdDeXtWekw0ZUVLVW5tSCRI'@;
put 'OXNwUUldIlBHRkpqISQoL2dlZzwzcnR9O0UwI0VgbUNgTkYze2Z2REhdOCpSWUZhOzlqTm5TYkBqb0BuXmw6RjE5RzBGfT4yRlsrVGdkUVhxXUdVTyZ5NFtXeXx+cyF6UXo3NkE5K3B8ZFVPdlVMSWR2QHNCQXtKX0A7Oy9pfiN1bTk8ImV8QllURXFeKEN4U2owbXVFaDpZU3cmPylgb0h1PGQl'@;
put 'cWh3dDptIylKTz54LlRKfl0lRDh8JGlTPF56W3FSPGxzSiNufmh8cXpfZCt4N00paCs9bEtkaDRWQH5pYlZwX1dnczRAI2J4QC9jdyg+YTBqPXBBNj5bKWZIempyNkZ9VUksYlRjXyN4NGY7KjljQ0oodndiaWByZWosQXtQU3o9QjUqWHU1L2ppWi9SM1lRNV1MKHtpYFdBbmkyKkp3ZG8jKigi'@;
put 'WywsK1V1YlI9eXQ5dTBXbml+YD5VRnVjdytOKFlSd2dYQzNlJXRVfEIkdF5NL1duR3MmfF0mZEh0PVh6OUdaeWZ5fUUyWTAsTXk/L2Z9SFYkVVVxNF0vVlFLMkJBJld1eEkua21FMGV4OTdsSXRETXlRZi8xfC4ofj1NYGM/UXdTMyEudCtbO1lKOCs4aTw8ITd7ODNbL3c2cyV7UkJiVmVdXThh'@;
put 'KXVONF55PjhCUnsmUGVkIl1xMHUhMipxdnFTQH0pUUtKZSVGKUUqaWBANEsmSTV1PH12UkJkVm0pTlVFfGFscnFNQWE+ckkvQ3wqIzxDd28zOD9EWjxoSl0+OmtoRUdEdytbNGg9dl9Tb2JTaXcjdDxEWCY3dSRhNCE4THFfY2BYMiFoNzdCO1gjYDhGOXhjPUVZPDA+QDN6QGpMIy9Gb2pNI2RS'@;
put 'eEA7ZVJxQ2JgWSUvfGImMENqc2N2bz5udVltSUs9RlFWc3I6LmU1MUIsPF1YSGlhfiUiQX08fDVWeS5TJVl+XjIoKkMpdC5APCxPNUplZ2dUXkg+UG8+JTNgcFRRRTAkfnljNX5BdHFiaWZqdm5rSiYlYzlPKnU0cDhDLENRbEFUPXolJiU6Xm46SVVgXXU2S0VOKHtjV2lmWmIkazNfWV9OOGd8'@;
put 'UmguJXt7a3Z2JTRKeDQ9OyZ4Sz1HQ2coRChWNUg7enQrTj5zQ2pfKj95N0NlWkdufkZ1MFZiLllXRXFOISNKdjkwR3BvMmpXMTs6Z0U2O2RGW3RpME9qRUBAOWE+OD9rYj1WSVJwRzlaVGBQZTo9bHJ9W004M1FgM3wpaTFYJnA3X1E5OF0lblI7bzk2P21RfGNiRSRAXVVOLy4yI3VYQWZRYF5D'@;
put 'VCtneCNiW2NnVSs8biw3MjlCSTBubXA4UU83SC8oM2hBUXR1Ji9fQWlLW2hkRl5QXV4hPUEqTTdbPXMiYy9lPT18TFVOUlR8fip7LiFfRkpQRDUjOTRoKntTenVbbygybWRHSH5yJnVMSjJBXiFzMUszblR0X0JhU1F8NTdoJGA1K0BvOHg8ITEiRDdQQjNrXiFsI1lZMnAubjohPm9sR3RweTtM'@;
put 'dyVYWlM3WlJFbkM/QDIofU9+Z00pcyRvP203YHBIOVZIUyNQWHRqQ3V2OnxkKkVZQnZjQ3QqTmQ0XWFGYjJUeCEjcDpiOX45YEk5K3FsUltePXxMZDwzKlcjZl9genMrZkxRT28wNTQmIkE8R3YoZzpyLGxrSHRUWytEXzIqX0FsazxwI2tIUVNSN0xXTSYvPktbSnUkQlc3ZTMuc2FPSjpOTTFH'@;
put 'LnU6KyJDKWBmOyReQGBXcDxxZCNGVGYsaSMsaHcvcGZxVF0/UT9je35WWExoUCxdZU1dd2ZiZD4oI09JX2B5PTUzTGB3fCZzQGk7OHUpYFc4JStwQ1lTUXBCJikqaG80VFsvYD0oO1t7KDZuUD47JGo+Si4pQlZ3fT8+TiRaSTlRTTFVTGtdTzRKJlA9KGVMVyxwfkNyZGdKI1I4XV5ZRCZpTE06'@;
put 'fWpJKX0jcVBNTC56NWdoNmchbkRePypXYjJlMl5HejgyYHk6Uno5NjVGPlNjTmNKN2trYGpmeFJmKlZwWm5jTzdaYkgubGx8KnRZbildaDw6eXQkKXlTOFE7LEcqUS9fS2xPUEhTPk1FQ0AhOWIiWSw5bSh3Xig5ZTJkJXwhST0jPWhNP1ZpMnIxfUBwJGZ2fCJGbD1Ud2g6MCkoYChpbXZ0L0lj'@;
put 'UUljVD0ufnN1NCQsW3Y/eUVBPlFCaio1aF1dQmdIY1ZET0VAQWd5PjBydTk9JlUhQEQmWG4jYk1IPXltdzAoKjFHUHJUbkpLVikiaSIvNHJRSU5LanFgbWwmeld4ISgrUVA7ZXJJK0s2TklYRUQpcC5eKnlpXWl4PSFocS5GJitEVlpDKWVUe2B5aUkwVzM1bUNCbS5MWkciQ1tMa10oKHkrflF2'@;
put 'cVBlVHxxRGQ8UTIyMVVpWkNmQkUsKm5MTiVVWy5pQlgpP1dzLl5nTmlbXk1ycHJ2QFtvbVZSfjtIODpdJnl6XjIrUjtfPzJOdUMzY0l8TURuaywqWDpJfE9NL29AcE5NVyU2fFRjKEw3e3lXYV1rRXo9OztIMG8pMCttIkheYkJ7XTY4IWJEdkMpcypNOnNsQiRhI1B3R04qWGhkMS4uK3UocU1I'@;
put 'UH05NDFBazZub3c2R2F6KFhIPkZgTkZOfikuT095MHI1TylPJWRrYmFhLjJsR0ZRIkhtImtMPkVvUTVXWSt4PV9MYnRNWHdQYHFVNHlfX108T3BKODMzR1Z7W0tuaWU8Unx5YEV6SWdpeldjOk9lITIxLDk5Ym91Uz1AdDkmOGskcE00QC5LaHgvdVMobiJLUyNyPyZIZypgQlZASWJzc2dGYChS'@;
put 'Vio7eGV+MzNHcTM1R0hWYnRqRSpsS1gzYlFZbGZTZVB3SDJBTCVRIWZOWzJIPltfeCRBMWQibHBEIVl7RCEwTTtgTCs7RDN2VzYwJFB4bF9vLD5GJH5keXE6SHVMTjU0X3RhJGxUPXFjUjI3Q3VnYzlDaXxQeDV4ZTdGVDZKQTJZdjt8XU5zbHdBJSFtclR2IUlFV1s1QTFEPlpqc0hkZllTWEx4'@;
put 'VkkpWSRZXjU0eiNlOXc2ZVl1Kyg8eCpkb3x9VVlbSlIhciFQYyN9bC48QVtnNEdNTGhlSjQ5RWo5UUBRZ0FbWmQpTVIwKjlWbmZmSz40V2JaWHUkPVc8P0xLNldCQjIwWD8yXzB6bjVjSz8wcExPVFEuRkVlJmh3UiN2SCUxVmwjc25FejpfcWF3KG11Z1Usc3gjczFpa3hNeFdLJDdBSVAmdyUs'@;
put 'MEQuNE1Jd01EJjJKRX4zMmQ6Xn4uIz5IOWkveXpAQlZEemYya15QNE57eUoqSWZ8Rl0xJHQ5MUleM0JvZDluI3xNSVtCfnpGMFB3VD5BJlBxUGlHbFJOPW5aKGVhVVtpayF5SkVRVmFNS1MyfkFKOCUsKXdpcGFtdj0wb2glZWcwIV8uN0EiO0BCQ0RVezNZdkhmZVJaSHl4Vy5ze1lsLDlMZmh1'@;
put 'M0VTUmA1ezVpblJ0aS5PXXhLaShzcShOZUg7SWshb1F8cGIzaldSPTVXQTtJdyhxTCNqPGZZNkJkLyp9JlI0W0t6TmFkTFdmSiY9LzwyfHx8cXhWcClCaWVgRVcxZVZHN1t3Ylsld2wzU0xIQntYNkNiQkA9U29majMpbVh3Vz5dM1Q8WjBOYGxhQCx9MX13QilCcV5YdSVzez9LTEpMdXNWSmAh'@;
put 'Zzx9XmwubEApT3c8R1srQTYzKUk4O3lNNzU4c3htNFo3RSJDTnxdU21eRUMpczRyNTpaMTVDUDdfUlM2VGdiO3dkWFNGYm1PUT1QN11MSFY8fSxfZGdEKW9+TTtQdHJ3VHR5WDt6VmFgOUxac0wkSDM2fD0wKlJAVyNmeytGbSFoTGttRWVveEtOM3FKKnRYKDxzTzpNUjhJRHZVKjxiTWdfK2x0'@;
put 'aT1WPlFZOmQsUUQhd0V2UC9ZcU43V3lCW05ramtEPCx4UCxDcGhwTV9aRl5LWk1IY082JVVvRFQ5N2NgXndyZig8LCtaQU82TThqKCUvUGxjbSUqX1ViZWUsJS9DbiF1Y2UjamEhUmslZXVETiwkKV5KXmhOIUdGT21rcHZGdWpmVVczfUVfUTpyZjlKTF9aek43WDgxUn1mSCk8PEZGM2xpe2I0'@;
put 'S29mdztdKCJCZEV5MF8yb2lWRCZUUl96PnQubyN8U2t8T0UiZWViQCg+fE41V0IzYlBnOlNIN3Z3XjxzNUs8UX5bZ3JGOEJkXmFjdj8/KW5RLjF2OUh7TSk4T2M9N3RvYypPezB5JS9zdlEkQ1h3d2pCUlQ5RD86ZD5BRDsoaSsmW3QyR2xmdiF0JnteN10yTGtGTkFmKHhDTShYZTg6YlBqenw7'@;
put 'dGUlKEx7KFVkRiFhXi9DQEpGfGVKVW9aKWI3I2I4Z2VYVHEsJnFBQ3whVTBzLDgkcDNRTUkjJlghTEFrJHchZ2pzbENWa3MrXVZCTElRPGc6JU42ayoxYTpOMm5SUkhKXTJvOjM+TjFDfnpycS5sQCRYfDl3WEplOXUkZlRgR2kkNEhzKTlaYlFnc01UWlIsNkFjQE5MRUUjZ2cmJUlvKTVDWWoi'@;
put 'PHNfQSpfOmZyRHtpS2RKdXwsLzY/W0FoQ1BaWi83Q15FOWVMcXNScUt7aDshdzMuTlBbOCpLRH4/UkE+TVBNcFNMd0RnfnZAbDRAWzk4a0pnWHVRdiR7U0k4M08lOn5aLmxfTEFWKjxnVV9CKElvek9yIjJReTpqcCk6a1hIN0F1M0I6X0U+RGU5UjFQO3Q6eDdTZEZOMjY5Jm96OiJSUjAwfXda'@;
put 'MXEyb3gwbVJkTFtMKjsrR3w5XkMsPFolKjRhMGZtU35GVmZgRE0ycTdFWjpeUShCJTkiX2UpTjVIR1M9RXB5el1tNUc0QENzT2dteEpYNjkhMFojTiIhN11tez08RFA3cHlNSXtgeCtmPT5aa19ZZC5dYkdHWFp5ZipyNz5rcHIsN2YrJn0lWD1LPWNqZXBwcCFNSVBHbDtjZkg2aSl0bDs1cnZT'@;
put 'MjRIVzBrMCV4NCFXWiJ2KndWanB1Y3JJWjwsbWN6OytYP2B9QDhjLFRIX2ZMdyF+dkQwIithQVFySmJWcy5SdnReR1pgQHM5SV1dcHd0VXUremdefGRwd05vVjM4JkZMcXhGbk5sTj1fM09eS2MpOFVBPCZGIkxNYEQ+flk8PmJ1SENUdlpIbSJZeSlmUz0kMmJCMkglNGZ8ZVV9VVArUDM9XkYp'@;
put 'YFhncnY8MFU4NX1LI3A0L2ZiZCsoQFQkPTt5JWkxVUsvN1dJJjdJYTFrdmRfJmFYSGEqZmZEZnlpOiIrIlokJURTVGBtVWhYeiR9YXBecnI3Izg3TENFbV1XR3x7OW5ZKFpVODEwZGBqNns2eldzVjFbN2sudSE+WlU+VWFPJE8qbFtLN2UhSns7cFZ3cEd7RjM0cTBbfVAqVSIqdH1dTHU7czdl'@;
put 'JGhzTkQsN1UhMmA5JjYsbX11MVcqMztPYkZncShjdG9GUnhSMyU0SmB+bkMmJD4lQTd6OEIpdmhCSWhKRithO3ImZld0eExmX3haIVdbNUxPMGl6KUUrOzkpLGlFQDsmeHp2MDEhVjNVYnE4OHhASl98YUwoVCosYVA8JXAlTVUyRnl1aWdDQTI4I1s6JjFZTihXLEhDVCg9U1lfL30vQ3k+djFn'@;
put 'U3lYYzNmIT9qYD5zVVM8Q0IyXkokYVU5WGdqTy5HJk5yb1JKdlV4MzNxR2lncVpTIzkhanZqVz9Vby5ib2V+X2BSaVJSY187MHlBQHpWTn4vQioxMmxEfGp+X1IsUUVmV05BLmVFeDIsMFksWH11NFV9On5+ZSJ3MFduJjlFWil8NXwpZV5Wcz9PS2VxUjJ1JHhhT1dKRXZyZ3dtYUIpRFl5SnI1'@;
put 'aiU3e3s8X2pCaXhTcWY7USN1LF9XWjp9SytsLC5ZS3dRLkN+QkkiSDxANnhGfS5sY3wleERiN3twV3ZGUk5SWkJwKEA7ZV4hN3EvJFJCeT4mSUs0Oy5ZUVdgPVFPanpFeChiN2dgQlg0RTh0M0R5JiwwOlFyVmYpSElxZi8vMT1OVjV0VWNVeklKRFJ6NDZmPmZNSVJzIVhQUUJbTDlpeElqZGBW'@;
put 'YkNnOXlbPTVUcjYvYExLbFA6OWt6N2BDIihIQnF+dUN0R1FOdz9tcHI3Iz5tRko4YXx3IUNPfkhQVUhiJDJwUVVAXkUsLEFZQGQjRk9dQz9vdTJMNkdRTjdea0JWSTMvbV00THExPlYmNWNte3twWyxtbHBXblZLLCRSKXNbfXspKyVuSEcuTWtSPlNFaTZ5KmFkRGVkcmxwJilIXnQzVWo2UkRI'@;
put 'N1NDdEdCRHN4aV8pV25Xakt9R1MxWGJzVWtyaVsmVC5fOEw8UUo9TUY5dGUyfSkrSXFvNUVLfVNsNltVVDowOnMvb1VKajdXSVpPMntfIVZdZ04pVWxDNG8pcnczIkMoSWBPI0lHVVJTJTR8YjVlKzB4Nnp5WypLRSFEMlFvdXJoUXcyX2R+JSUiY21aR35zJjZbeWt3bEZOUTtQcihTNHE2eGw3'@;
put 'XjErY2hkQjZ6cDYzYUwpWDkvZmN0O14yWjlqMjc1bVZfU2ArNUt5WVN1dEx8SD8yUWp9OlRMRGwoZWckZkwxcU16S1d5d31Odiw8b0E9SzpycW00L1BnSkY3ZXh2dmciX2Y/JC5UaGR4JTszXyY9SHIpazE0PFM0YSRYImY8aWoySDA+Nyo+Ky9GQnlEMyg7ZVsoeW1nXk91WV89b2laaCtUODhd'@;
put 'Si48SzA2U19+Tnx9bVtFNzFLWTZGSHMiUmQvSVh8NFQxLndRd0Q3IWV4JDI9RmAuPUNkUnx2Q1VmOl5KKmBYXlAxeHlXTntpYCN1W2BORjkpPENjJWZ7TmV5Yn5YeFkuPEo5SE5rPENePDl7MWw2eUMjdyhwI1k3ckRVXSN1Wk9rNkQxISt1UjA6Jk5ZSlcsRFh7K2k4TWppMWMuZUUxTSVbXUlE'@;
put 'cDVfbVhxU3swQHEuMjpzSD5HeEFFV3NLMWQ+XkR5dU83dW4pdl99PShEQz1pSlB4VCgyYW5hP1t1akVzemQmeTN1dHc1OihqSFMkeyhnSH5TUFZkaDwoS1laOGxxR3l+V2FzNjR9TU9VJGxoXj9Qd0c5bnJ4KSRNLi96c0MsbU8/JF9DZV5jUVpAYyRmKTJefXFneUkrSWFOSltTWXJ5Sjw8RSRJ'@;
put 'cCJ7VXRsfnVka3xHLGFxdHRTIXFIWjh3cVlRYnV+fEA9LkV2KWlee2Q/MnMwPHRMZm1KPiYmOkFuUm9CNFIzaXUmY2ZjS0BjJDlsV2o6TE00YzI8Z34jMEB5SiZJMThQKzx8QkBpfThrOGZ4byxkaGNCZUx9TVBwXitWe2xjJT52eUYyeVlzckxkZkZ6bGtNNztaYGAsS3t4JD5+dEYkNF80d012'@;
put 'c34uOE8yKU5pR0AqJD5KZyg/SitScUw8LCYoIld7eXx5Kl84KncoPT5WRGZ4fStqOFtfdTgkWXxuUTshbmlbQmZBYyQ7az5Xdl1Fd2JjMH01OltFTUpZPD5HMk1jS2hXT0BjWiEpaTwzZ115OH0lczd+TDVIVyg4VWBLcXhbW2MyS0AlckB6YEwuSCMsMkNfXTtHT043PldjYFNEYVUyOiMqOC8p'@;
put 'd1k3K05pTGV9dTpockM6RSUyOEdRMnhGIXteZGhhfHMpVDpEWH5+fExwPzZDZklwXi99dl9ZVzxGXmJsXT5OYGFHLnkwMCFkPnxefmxtMlkhSks2W1RiSjVBcC4ubDUiZj90QkI7aHxbU0JjbCNHNWx6PT1WaGt2XWEzTzlKQTg3d1guOl1UckZXZ0Bvemw4M1RubGdkLzQqfWErOH04Q18oeFd8'@;
put 'KmZTUU97Z3ZFKnxYZU4iZzpPRWYyMVtGd118NnYoKCRyQHEvWC9HMXFfUkgiMFVBJXdONU5tcHV9cVpgeGBNcSZCMWt5d080RFdoSl81Z2gzakxKX3FbeltOUkg2bmp8QmhOJXUwV3BfJXtrcmh+IVVUbGo4Q3xOXV9tS2N9NXp4Z1FEKVgrdUhDXXZVTzJxS11IPixOP3UpYSlYVkRLPDdpOTRW'@;
put 'IkkuJj0yW200QnZnbi8lW2RwdU1LdUt6VCo2VFkuYkFJeUVOWH5gNj8qdXNmWkw/UWN+bElzIVk1eENoekd+eFUoeENgQW1pIzojOU4+NnVsUn5vVCZhMHNSZ3AxYHZ4bFZyZEI5VmVufC5IfHI+THcraiZFXyQ9PSxSKnBWejF9ZTx4Si9EaElRYk5GKkQjMTp0R1ZiUSNVZFg7PjckQGZQaj46'@;
put 'ImEsP1dPUldofHV4fEEhRmVKWCVoNzFmMkBEMndpWG1pVVp8KFdJLFgrNGJMbVMpUCxgQHRCJDU6Sjx+Vj1IOFBmUV83a1tFMjZCJER4SFBPXnIyZGBheUJVLixqY2clVDt0I0RzLnZlOyF2WmplXzZeQHlxPmE3NS5RRD1DNHt0T1hzdFpGdi5nfUVtMW5Eby9ZVGBXcmFFVnF6aDVwNVc7YF4j'@;
put 'WEg7cXBkM0tNZXpjTl5+UnxBWD9xLl03InxoUStpRUdBR2YvWDc1NGxueE00ckVXJnApJHdWY2Q/RyxHZW1+fDFlUXkke3hOLmZSLj5KfH1TRHF8IztaVF1FM3FYUFNeJileUXI0a2MsK0hCOWNjRkZWQzJLa1ZYRWMkSmMvdC5YflU2fig5e1d5ZUZdY18+fDNHOXdJeFhBXk9JSF1dPVNGKGQ5'@;
put 'PFckKS9odVsjaSk1Nm4pTzBWV1JuNWBRdVkueTs/ZGZDMXMhQXxeQEM3MiM3KFQ6enV2Sl5aMCU1d1pbU2BGQFJTMjN8dnkmbDQib2FmR3VUQUNQbmxuJURwPUEhVUUsai45ZkhCZS89Lzxxbnt9QHNpUFtTeFt2KFd0NS9wSSQ8LiJUeFY/bWRxIjFOSVtYYHA5dXpHdkhVYzs/VjwvemI+Ji9N'@;
put 'THpmOjAra0FZKTQibz5Vd1FnUVZnOSs7XXlYQ0Q5ejpIS0FWS3p3IjlzTl16XntSRUFKZHZidEI/X35vYixxeVgmVTA1M1BtJC5xTklFWjhLQnQyNmRafkFJZlgpNU47NDdWelpMQ01lXVIsbl9DZnFYMWZWPV1qOURMSyV7K2FScCxQMWs1I0hVPEQ9KHtVY3FmSU82VmtXMk5UNis/K09IWDg0'@;
put 'cH16Pk4wfGAzXjgvVV1+aU11IltubiJSNTFLPWpgV2RIbyVYR1tdSSMuW0s7IywjU15ySX1+dSsyZnFZb3s3WCtFNVhHKFd+Y31ZI3J9PVJIV1RpZE8+dFI7ImlMSXM6ZnBUciszWlRMQ2Y1ak01PStda2V9UThucF4kVmh7QDlYdClvWTJkOk1TNzBtNmI3R0IzJS4/S2V1dmlUKUxdfDxTdXRN'@;
put 'VyhETTlsJX1JMSF8VH1RQWdkTT5nbjFdWjNAIyx9aj4yVWRlL19eejpAZGA3aH1CZzNra1hqWTRTNSt6PHxLfCl+WT9sdThoNnVVYS9oYUhrI1JWbnRpR047Yj9yNV9xYGw3YG9oREk8OzNoSlEsKEJXU3QjXkc5THhHeDJpUVo0K1JXd3pXVm5gMnJ6VkluVXA7bVh7OXBqcWgldDcxMEk6dmdC'@;
put 'ME5wTzJVdkpqd3NuS346akM6bl9XOTJ6OjReKiF+OjhIXWRIMSx3e3Qxc3hrRTRzQEMrVnEyaC9KQkFDS3BKIVNDfVI1OTw4WXA4Jk8kb0J3ZDR4QkBpV2RbfWJifjF3RHpLMEZ9aEBRekhlKUwxfDluMGhXcSx7KCFsbGAmPDgjZnA0ZUtUKFpgMWBwXmskaGF3Zm12PHRyJTN1PiY1WStfRTZV'@;
put 'PTB1XkljVWM4QSRiVToqVCpHbGFMPVBnTUxxKUcwXS4ofFl2fnJTQVt8SixXIk58ayZaIUYuTFdjNzg8UllRNnkzcyFmfXVRXVg0eCRWVldpfkY+bGlmIjE1VUl9YSZhc2VzcEI+aFttfD1ET3ZgKkJjYEwlMndZdDBUX2QvQi8wJkJiXUx9XyN8RilxeTs/blIvQXJWbH1vbDQ3dixyXmlwfUdx'@;
put 'QzJadFEuWGRvOmQkZ0dzSW5KZXhbYkhSMjJZMCVxeDBEXnd8bDM/aEpzckNRZCpdMm5gdTdONjRTJlY4TjJ4fXJBbD8uJHY4aF9ISExgSCQ9JHtVQE4pfkhYa1Y4U0xqcENKTStPb20rMGA4Q2FQa1g5QTRDaXVoYi5zNi8uJXkoTnx4XitTbWpGdjordjdIZj1pZCp3cHYvdWh4d3tgVGBqXygy'@;
put 'NUFIPGxsJkB7TiMqWiMoZEBSNmVYWFVmSCJHW2cvQEJTUVhYWnIsJG9WMjF4d3w8SjsySyFja1JhPG52cnNqbyV7U1lNPnNTUUw1W3AoSXY0PDpqYn1sdnhOJTdeL3lFVXhPNHhaLyV8eDVGYGshRmE7NE9nQChrdC9aKitXR2czTkJRUiFvd2p+PDlIK0VlRFkvfmplLlBPQ1pRVSRHY2hDbn15'@;
put 'fmwyb0FoYHFlUyx8OVV8bzEmeEd6PHJsIV8zMnFYaX1dSzFZMXFVRUoxejVTMUN7RkpfdTQ9emxyaUJafVR8bSY8bDQ/WTAmZV1XNiQ+d2N3Zjp0SHZGWy9LbnI7Wz8+PyFWYzI2S3omMiM9R0R0SEw8RjpaJSFPclhyTmdySU4sUEJKM1NmQEQpd2I7O1NMI04yfVBURm17bXs5dEQ1JnprN2gv'@;
put 'dk8hcGBiPS8lS1ReSjY7amM+V19MPDlCe1NEOTNifHxlPj5tTCxialQxX1o+JUhUbSNmQUUoYi9RQ2lbdDZwNjJfYX0jRXVddE9KZHY/bURtdngyeC5sVjVJLjpSPVQjbCkoKGIiaDhjeytqaElBUk8xJjEwb1taVHY+aWY4XWEyKmxqTzxjaD1JJDNzaE01VGVuemNZa2JkazBZZER7ZHYjSFsy'@;
put 'YVNJOmZ6VURuXzxOTk5bdm1dYUhCLmp7RCFwNiVOZzFMallsYnpsa0UzZyJ+RTM7cEhkYzM5X1ZCUiR0SEkkeWsvZ11+NGxbV0FjOnFKWUczfCkzJDpXUXlxR2RnYzFJSFRYZENHKSkqcGx8U21oZGd8JH0vYXhzcz4wVGNrXTFwTlJ1Nkl1aWF8THdKZld1VElUJExPMyY6Ml1YPExLcC5yYTU6'@;
put 'aDU6ZVFIJm5+SihZY0E2U0JDXSZfZnRPKXdvVWd6SSYxU056P0grL0A+OCIsIT59OyUqPWFvbipYNll0PTMvS0ZLZixRKl8qU2JMYThWamxOPSNVOnd0Ymx9Q3RvYWVAISM/ZHUyPThOMjFFUnVga18+bT4vUUMxYF83fVpVLjFVKjV3MGQpbXRZeW17VEchNGQ/WlA3THxTPCN8UzMrYzkxSTVJ'@;
put 'MFZme3o3blhSNykuenMvPSlsYi5DbE1nMktda11gPTZuL3t5TTdqKlUlSVd3NjEwdSoxOzRAOlpHRVkxMSkpTV5ARGBYT0teYll7Q217VWBKWUlHKVpXRCJ4OyhYZ1dRJHEpMHMhajIkdSFKS3Bmbz1rOSxSdTssQixZaUFnV1RgSlp2cX1gXWtCfn5YIj5BYTxZL2lRPCMsaTE/WHooKD5pc1Mx'@;
put 'LyFxOD8vSVNpdkpjPjt4XiZOXjxxRlJPJWt6YEBUdGNBd2EuIlRuS091V1NMNSVGb2BaWCgoLD0iUiJ7MGdFKlo8VHZ9L09NOThKQzBsayowYzBzZz5IOjRlLldLNHVpNGZSX1F4di5vKnxTWysjVERaRG5xQjlJOlEqaHM5eyM1bVYzdFtCekw8UFoxKGtWM3E1O2pkVCpuS20pXlsrUisjYTZx'@;
put 'dHpMVF0lVzAiR3x0XmR6WSZlV3xfYSpieyp8Z0gjZW19Wk4qU2AjalZ6VldLQkoleEAwY20pfTkvck8vKit5R1pnWyxTaUAlTkBibD4ofihVMiUoXT9lMmt8eU0vI19yb1A/fVFnQDJlX0FiYUslenpbR2YuR2hRUTIrYHtJfnFfOThtfHw4XW92KE55Nmw3UlEzZC8jOFNbIWpaQjpROCRTYkxJ'@;
put 'Rnk5UWUwfHY6djdqWm8/YlFAQCM7S3QhQkssYU0kMEIwLD0lSi4jYi96SFAqSV1uQ04ub2s3ck9GTmxjeVNOWDkhWilZVClQO0xORW1gKE8qcXBkfmo7I1hfMz4pRnMlT1Buem9OUDIuRCtNKUlgRlRxOShyfjsiRENVWEo8PztjJnVzT1d8Z1tgejJVKGtFVlksSmAyWl1MRTYjR3xmQipdWjY+'@;
put 'LnpoZFRYa3tMemdNVjpeQGtFbEJ+KSY8en0jXXVsaW9bVDVoUF0uOUpROFFTJWxHRllfS19sJDRmOU02M1oiY35gVlBfOHZFKXphWHQ2eVd3e192W1FwZCQvXTR3KE9tL3gvdD9dNkV2TXEyQz99UTZ0PUlNOkZLcnkjU14lan1uKUJ0d0kjS2xlc053U0BBYUckK3F1IyNUPy43cjM0JDJmV1RS'@;
put 'OXlaIyMvL0pEQEJLPmMxSz9hWFR2M15PRFtaZiQuUEo7Rl1nXXklOjJPKmdXfXV0MExaWD1Xb1JxRjtVI2VfaHhtdy98YkI+MFYpaWtubCJQIllbRnN5KmY6TCYqZjVxVUFEM1VVeXxBYm1vQCtsdyIyL18wZ1l2bShXMltFeHZoTG1Wa0oyfXMmdGoxNj0uVH1MLj1ocHMrKT4zRWdRSS5RVTcj'@;
put 'MjpIYGVCX2s8VnhLIW0wUiFBZk5HdFBiOGBeWGJjKzBZU2l9P145WzdyeiQ5SlsxZyFFPDt3fnV+dExWTz89UEpQU1B6O0kyT3s2M3E2Y05VNSF2OkYmb2k+XjYxPGVbZUUmV2ZTLHlpUWlxN1s2b3NPRl8xbHB8JTJeWkdDbFpmfmNoZy51WWNFT2JVUHpCSzY6fXs6JURBaURSe258cztAMztT'@;
put 'KisrQCt9PzdaViQpTVpvb2ZyaVF8dUBDPW5geH1nSGtQW1htPzg7TzFNP183UVQuJTVJMjRGbHRFMTxWZVoxc0xiP2FPU1k3SjtYXUZ0e0w3VSEwMi5zVWdgSD0uN1diOXtZWlRnMn5UNENRfl00Ny8oZF4xbzd0O0B7bXlPYTF+RzQ5NXkoNGppOW1WVn0ic0BpRHVmLiVGNShraUZOUVpVN0lY'@;
put 'VlR1VFhIamBSMG10eERQbXRfQ1tsOH5uRVp7ZH5nbFpXMkBvJmZWd1U4NFQxUVM/LCEzVzF9P0IuN3J9RndRPiR0L2hETENFVyFzWmIxQTE5PUxyODFfVXFjWkVWaG49WVZPcnBAaSV7fWVmUW5kY0Jaay8/cj9qODVTKTZoOnxKeXxKcnVNUyE2djFXa3ZaVG5dbSNPezFoPHR5SzZzUXZONzNP'@;
put 'QChma0hZMW5IV2tSMXdgVFBuMnlndz4iNlkoT14sZzs3PEgvNGNhVDkufGl5WVY7K0Q4WTYiOixdNHYrPWoyP2I1Sk0+LmZ4OFkpOy9EVFlELj1uaG1zWHtLaT9FeW0zSmpyeXhfaj5wJEBMc218KFZCSnRSVkl0Yz8qe3hFdmN1SltZPXN1UGpvazZAMlMicFFDfkBfS0ROTz95VyNze3gzT0pu'@;
put 'bzYmczBQZlpwTEB4ZVFoWSU3SnpeLnJZWSt0K2VTI2tyeDA0UXFUJmUxbFk/UCJqUkZUM0clUl5BRnl+KlkoQEppRjdTcHJxbjh2XmMvQ3FKK0R+T3J5dGlBbTtrcm5IOTU2YVdKRnV1fCt9Wi9UYlo2XnVKNCk7bFNQfUxAXXlwcSJNeDVeP2kwT3BePUF4RjkuOj8oTytLKH4pJlAuREY5N0FP'@;
put 'XzdTdltIcUosQ0x8UTBZfGdgXURmSyRAdiNlLmssdyg7U2B7fDdFVjNOVkIsMlNWJSJUeU83W2RfSUJKMS9RdUpiVjw/eXJ2TT8wVi9aMWRRQG47bn5tMjVKOzZgYGhmQF4mWHZ0bW1nNkwmR25KX218Ik0pVXhTN31tX11RR2NbSTlgTyNCSSphUGlgVnJ+dFpfUHU3ai56R1FrUHFFRWxvR3pj'@;
put 'MHg9QzVzNnYhXy9Te1p5Uzp+eTBFUmF0JTlTOlY8TTVdNTRqZXNTUEpDczR2JWciallLT1tNeSEiL1tyZlBNR2NNbXhkSGJSMV1JZ3JjciVWcE9xNF4xQXFCTl9RemFLUChFcHhYblddamM2PTd+bVsyY2E6Jj9geWxuOnIufS98ckdbKyQ9SzdLLi99ITVwInx3cGNOdlIxUWs+L3QzIjAvYHUz'@;
put 'ajwuYU9XKSg/QG9QRkphXip+SiVlM3g6fTs0R0pYQ2NgIUJUUiMxdl0zST97KzFkc3A9JCRTTSJgaW46RTRZXlpXNkpsXyY3ZFhnRU1ON3c3fU59KVA6a0Nja0tDWE4wYHd7eiV+byxiaFl3QldnQn5UdzFLS2d9aFFJLiUhWSEuXWdoeCQvYUklISZ8Lz9dNCNxVEAqIVptK1oudERJLHdGcl9K'@;
put 'RmZrIXNwaldmSUB1TjNwPz0rZGpfNDF6djljc1tNXUVQKWRqdnlydFljYDtJJV4jfXw4aFRfN1AhQmUqW15NJktvJjlWNUM+RWYkbEpfc0crSj9qVnZCW059JG1pZXpYSSFLWT04QV1rfEF6a2dxPXRCM1A9U11RW3QsYER3TlYqQXE1PTNBXmNddEx9eCVhSSRfRjNKQ143Pk9wXXc3Z05PTWJ6'@;
put 'dT1vZW5iP3tgZWlBUUljTGZ6cCZOdjBfYWM4OXF8dF1NTmBNOitZcXprZlhseyZyNHNWaj8pOF4yJSZSRWJOLGg9NzVYbVNyZyR6OUpjQVRxd1tMdXxxaE8mMlRNT3hIbVBgOWtrMFZodUBofDU0MTE8JD5oU1A8PExyPDgsbU4vWlYsPldCdTdSWl9FbjpqWlFjIUk3TmcxUW9bakVRWUdPMFNJ'@;
put 'ZXspT1FDbUV0VGUoLFBzcSliRiMoRkcrJWJOI0xKcTMlaE4vazB7Vy4xOGhReypGfVd0U0Q5ejg9aDAhMGJ7ezhGeHMiJEg4fG1zfDVuWXE1ektHNXZ2bnppZm42N0I0Zz9kaTw6JWd0ZiZ4TktwNSFjcWQ6Sn1XVkpDdE02SmUmY1E6Wi5ORWpEfF9YLHU7Q3UyTUQlPDhCS0tBNEldeyM7SlhX'@;
put 'QzRQRWJ3ZUY2JDNdb1tVZkx4M09GSGZmZlUyUF58dkhCMSQ+ZCI/S1JdTE9WT1ByMiNZbGd9YzpWXXdfPyU2bkUxdW4lfjpMazhzZH02YFEvSWx8KWU/WklkX1lESH59ZkFKZGMxfDJwdGFhaC4qN2NoaTFidCp5STcqUiNKPnt7Ymo3RTplbztpQXBISWwqdX1WcnBWS3dVP2ZvU0xFMD1IW0s2'@;
put 'YEliRj8mPFlgSXJ9OlFyY2RzLzcjfn5JK0ptY2R2S2sjKFBKJGcxLjwkM1J3KkwqSjtUMXV2PH1gMUhYTiFtIkw1KWU7Vnc6Q2dqPU8rPWtHdVQlJltBKCx0WD49PGZZJVltK1Blc05YMShub3FbUDRIPXd8LEJfRlFTOzU0dlloU0FmN3Z0PF57PClHcn1ARVJXeUVnbSsvKXIlUHA7fnpNakcu'@;
put 'LDxreCp9bDtURjZxPzMuIyZQUi9WNSRuNlN7eE58RHlSTXZyeCZFQTBHNGl0O2x9fCVNc05PeSFRbFEpITgyeTMvTXV2OH5hQCJtQjRFSnp1cDBDRzMwQSoyZ3d6c1pNdCU+aHlYM3dIYS5OVkU+fVo/UClwRHgxN2ViTll4QzR8PTlKVWN6SW08aVgrYHBTN3ddP0t5aylLc0kuVFQ/Q0VDSVdE'@;
put 'dUp4e3VfZ3h8VSN7W2V2Xys+U0J7IWcxUVErOikqK0ldMlMuS2J3K1Y7ODgqQC9YVzRIUW0sd2dSXmJvVXopQ1R6JVZ4c0wrZSV6a2lkYzxGWiMlZHFFO3JtaF4wL2Q2OFZre2NaUXBQW3thcD1MRF48QFVxT3JpMiluTCZSY0Q1ZFZHaTYhOEV2bGJdK0xrOUo2PV5pKGhMZXcjVF91PVdyQ1tO'@;
put 'eERZVFBnPXVYSF4hTUMqNHhYLk54IiN4NSE7c3JGJS41bkB2Nm1LPHQjVCJDZEx3QSNNdkdSQ3o+fHVZOXBBcXshNVhKTEh9SiNHI1plRXNnUCNdbmcpPitoSzRnPH1hOWZtWV5ATDlIeDF0ai5MaTlIfmt5W1JiSmloY1R3b2pJNzZLSVdMci5RQiJCOUgiR2VdfkJZfCUuKSFuVjYkXmovZ2Jj'@;
put 'OXskL2FXQVojbTFRRFBneT9LL1F5WTQ/Mn4yOS9aN3YrUkkiJDJzSEhkTXpzRytzRVR+MitgNUB2RmlCOWRXPERwIy9Eb09XZ3pnVz85OjN5Jk5+RixdQkBELCs6SlgiP3dGS2RLd31nL3RndSRubmw3N25udkJLeiRTSjIrI0NXWks4KSxXaX5PK0wqSEtGaXk2ezAyR2Jza3gqXjQ8fkg+Kko8'@;
put 'Y2Y9WWo0ZVMsd1VaN2VLcW1ReSEydVddYXV2XyF3OndaUUxTYHB0b3huNG02flEhWFZkQ2k9KFRteWBTc2tfbkxEUFM2Tz1oNjszbUhtcFRKUjB0Q1ZkNWR5O0FUPV4vYUksfWEmdGpUekkyeFBbNStKbF9vKFlCVCxKOzxnNj5lKG5LIltqSkhKX3dpJHUqbHpfSm99Yld6blszUyxoPV5rfj8h'@;
put 'KWMyeXdJRzhKQE8kOGI1YUR3fCVncyxWUE9gMys2SSh2KFZ0STlHdjBnclRnZFpadSRwSS92W2tfZmI7cEo/Tlk+QUpbZ35UUCEsOU0rNGwwZ1BkUG5FaDt1MzsxO1d+ekVSYTB+UD4zaiI3e04xP0A/LlUiLnNVaWMlVUtMcC5KWkohV1BeLFIoXnhkSy5EW3tuRlZReSFmIlRDdyU7ZGEvNE82'@;
put 'cmNnIzB+SXtzXV1ANntGfTIwcXo+VHRqIj4yL1dfW0FrOz5LWVppYCtiNXdFeXdpTHJAaHo4ZCg9byolVj8zP3U3UTc6ZyFAZCF2RnZwI2lWPCN8WkUyQEQ+WEZsYFJuI2g1NVtsIzAhRyM2LkMldzIsRnlxc2ZdJiM3WnRuenovT2Q6MFpie2x1TjtTc2RHdDRtJlRrT1V6SiVdLiFSQFVXJkIq'@;
put 'PiU0ZmE1Ti9NXkNvN3lyOSNLKTYoTy47USZeSWIxL2VLZyhDL1ZmLmFydzVgZWFbLjYkU3RRR3MrWFhDakhiVUJ0REJ5RzpXOSNWNVVqI1dZIWpiODV6QzFPI20zSy5yWkpLbkghdGVAMkMlTkckUV8qRzp3OjwrVTh4PEtpS3FERyxfeTRCLE50STgxX1M4UG8sQnQ8MEVRTmUiJnkscHtQX11l'@;
put 'VnklW2ByJXJ5KzlNKUNxWVVUREV4fStjYFF0VmN6Zj1xRCxHX0QvekUwOkpmeDteT0RjRDFPQHtGJHciKmxSSCNEZVBTJldAPmopTSZte0wiWCh2RH4rJXx3TEdiLDU8TFhMOHxzfUk5YkpSdUo5KF5STlRdQFV8Ty8rVyo8PCV6TUhAbi9KKXxYM1opdjZ2ODwqcjNxW09UWDh4X084TWcpL0pQ'@;
put 'SWkxfGc8REBJIj1UYzRTVXM/PW9+Yl0qYl1bcyh8bixkX3lOcmM5QlE5dC8iNE9FPEdmVnM2Nnl9RyxBMSh8TWZ7WnIhY1FreWooWntUVz99SHR0ekx9QS42YDkuVkc0WGkwY0JQYWF3ME45YC5rR3ExaCo8K0AqOGNpfXpKa3c0KyFNO19PSjdJfUppRW1pTnAjIUY1ey8jV18sbzN6RFg0X3wz'@;
put 'fV4hKylzTkJQW0tKaXNWMn5fYSNWR0Q9Nnc/YytWaTJHZF1GbGBoWnh0V0RMdDEjfiQsZzdGPU9fV3xwMjw5L2w/QHdMe1Y1fn1pbDBVU1V+Q2NJflk0fFouaFBtPDl1ejdJZCJIUHEiZHNyQl9FL3gvUjlCJUY/JSx8W1NkJURJVUREejt8N2B6OFg5X35RXWQ5cVhFcXFHYCJRU1hIb0kqTkYr'@;
put 'YlVWMm18REsqeUBoeUNWUzJDdGxwJFJZbCIiPzVXREdlLHJ8LGRoMi9IJXdDaVU2Z2pVbDt8U2NgTTNQTWlvLFhbTGRmPyZlMXx3I0VYN09hXy8mL1JGS08oXlgqRkFoZmhwRzZ1PHtkcylUeU1dODVlWnBIMXN3YU1iWC5VWD92bj1jfEcmaD1jdVBHXWdxeldeYlNQYiNSeGtlImMvOGg8fF1q'@;
put 'ZjhRUX09Sis3b0dKR3RlPVtHaGtqWGBbQFZhKDk/dW5BYzFobi5zKHMzL2BQJSpFaSMsWkY1ck5aelhqWWsiRXF6Sih8cl1Wb3cwXkkmUyN4Pk10RXFbQFFbRmJnKEVHWk1vYEVAPDYra2RxalVwK15ZPDF1ZWRrcVVGeVA/M3huakg9d0g3QjBFM2A2dGhmOWw+RDxaRD1UXSE3WCI8PHUzQ1Ui'@;
put 'Zn58e3c7b01eUSRac0pNWDh7YWtKXlV8LE9GV21AfG5LSCJ3KVVeQiFKTio3NFNgd3oxalJHTWczcnU+cTtJTVBdcXUxfHhEP1lnayxxdyhUSFtvcUY6YGRMZntQX1gxQCNubH1jez1HK3A2NFNFNTYhYDM1LiwqX0t9cEJRUXkyOCh5emJlLkR3ZC57TmltdE1XIWU6eyNQMVE4PSRjTV1NODk1'@;
put 'SU9LeWw1YF5GJFNjMzc+ekJ6TVczclc0USVSWig9JFF5eG5rajpTfCFYJX0xOzdKbTdgOS8xYlE5ZjJBIkFGMFtMYCRhUytfcmcrfk1IRm5GSzU1elNZczkhal9GMnRyNi5gNjxHXUkhNCgxd2pEb1FqU04hI1Zybil9OXkreW1fbEFFejdkOShaekp0fmhPYD04X1JASnZfM0dJezYwWGBvSiUx'@;
put 'IXJodTJ2PnE0dzVfW24hQ1UobURZVVtgSjtsfnIxNWRgP11gNUFEXyFRUVszZ0hRNmwhNGNOYTlAWnxSL2Z3PkJhb2hbbHtJUCopQCZDPiw2WDpYbjJXL3BmIn47KEY7cDJ+TVRCY2xxQChha2Q2MSFJRFt0dD4vZnB5bHcoOG8pXWBvO3tEUWUzTGsoRDcyX18qcy5fO091ZSw0PnhvVXlWSD0r'@;
put 'akJJLCR3NHM3c20mQWklQFNrXjBbPzF0SSI0JVRCQHQxeUpBNF9IdF9zb0M/R3gpNVo4fTZJO0FrUllzOSE6IXk4NUR2bUM/VVA/NzVkWm98RD9pXjlEfEx2enxSLDg2aiY0KmllLj1kdltnNEMwYXNabjBuK0IjRVY4XTBtSFhMNl5BJCNlKUBAMUxeK3goYXFiaFJjU0FXWyx5a2ZpQVpqK1Q4'@;
put 'Ynh2U1Y0QSN+MUZGSHs+OGJTMH0/PV92M3NqLjE4JT8kKXZrWk5wfGs4ZWkpSSJlRC9NUjlBTlp9TldTSHhpcit1TDtRQF82Zn1wajV7LD10XmlmaFM3NjNTfDkkdUMoZF05cyUmYz1zPUdyeGt+V1puMXB+TSg1KnY3SXVWL1I8cTVUXz5lZ0xBNTB8PV57R2Q6YSRvMDdQc0dub282M09QRWI6'@;
put 'eSNvO0lbWVl1PzI8fGtdaVJvZUo9Z10oWClUaFNBUHNtNnVjPDdDMkpiSHllfjUwZEhtMXY9V1ZkQTVSP3FLNjZbKjJraUt7bmYqXVgqUER6Ll53ckN0LH0wa2dHbDp4P3ssODVGVDRTUVBmWzhhIV8kZSlGWGkxazRTN0dNdS9yLEheeGVlYmIxfUh7blg3bmQvbDBkZVdnflt0fHxgTFsvZF5d'@;
put 'fEM7LGZpZCxXQ1R3R3xHLG9nfFdlM0tzXl4zdSg6TWwiRC5UaEN9YHwsKlhdc1kkWT0mYSZgZHlMbi82U2Q8ZSN+a2NJZDlXbVBjdTUreypVPDpxZmwwMkNgO3xoQ0NMQkF1N35vJFk5d1QhVC9+S0h7TkUuO2x8cW9OVjF7eHZkUCQ/dyFSWHAvLD8sOUguJW04I28qPzdzd2p3LlFBYCRrJnFq'@;
put 'eHVKUWpKNS4+SDB4Szh0fTxSJmg5WE9+ZFlZMD8zdUM0Xyl0alBjN0lLflJNM1Q6KnlNNXYxYlN7MikjeFp0MD8jQ0dCOnlkdT99XlchbGN2Xm4pXiF6KSFwL1hPdjNkWGtUUWo4MEEsJlhgO3hFOWc1L2ZTPHZ3UmNmcCVDM3teM05pXzh5Sy9KZX5KLE5DNUV5VERyK1JNSnRnVilFKkUwd1RW'@;
put 'UigyWzpzcVFwdD00bn5ZMyFqT0xyMDZ1ZUQpWGkzKWVVSGBXUV1ddHNWaXBkOyFjdGpPJlRRODskSm1KYEVBIl0iNj9OdDEsTC9aOmh7Q0BkMUsjXWJseTo2PH55OHEza09Oe1RucyZSe3QqcFt9aW5GLDNeMXh8RmkiWjU8LltBcmNkUjZ5dXw0Lk9OfD5ENH0vLk58QyxSQ1tBbi4/Z11KQGYk'@;
put 'Qk01WUxLOVJgb0ZKLDVVSV9JMkJnMigoe0s7VkxjcDNFI18rOnIiIVY4ODZ8aDRRIj0mUWtWOSg4QF5ST2N7V1FNSSJGZ11vMUEyZkxnPXgzTig+Y05+K3hFR3Vwc3pbLjtFamc/RHNrdWV5MSZwZSs3YmgwLENTLGw7NnZ9JG9VUGsuM1EzJXdgdTtCSDpHS0VTT0tzQV1oPGlzejlObj1WRURH'@;
put 'KE9RLEVTWyUlUEY2JjR9NXlbPUJKSnc8LkVXVzB5bFAyczIuQ1ArYzNqKWx0YXVjbH4vTHE2RTRyNmZrbjlKZDNCLjd1cEo1aDRFY0l3NThmNnN3OGRyP3BPYixdN3JOPj1Sdl1RVFN8dlpAKWBKcFojOTI1PEh8K2I/WCI/ZnQ5NUo1LmtUMDxNYyxuczdUOz9gKiYrVFhmdmMwMVdIeVVIUU0r'@;
put 'I1lQW1M1QE5UZD1CWSYsTGl0LjB4WUUxOkpaPVUlbixMa1N6eW92cnEwUHgzckF0ZSxua1ddeiRPWVJ4Ln1+fTZdYz8xW10xK2JUZFZ2SHskalleYUM6REhHQHk4OypAMjsxJD9XMz9DajNBTzZCJW4vbj4xSCh+YXghQ2Q+Q1pYVCJjOCwxL3VCZTFNd3NxZWMsOS96UygwZ203dU42WD44XjAq'@;
put 'JERDSEEvN3Z2UG9kcjdMakdCeyUvaVRgUypRcG5yXnY5UEtxODNMWG1EVTdrfjQoQ2leWT1NK3ApdS9MY3JCMFpOPyhiOHVTT2VoPnRVfGpwdVFYXkQ7eXg6JD5+dSNGP2lNbXdjdCxPIik2MFkxMmA7QE0icGV5VnwkRm8sdyZxQmwjbTE2IltCdVpyTykuVkVdQmRbMTg6RSR5NWp9ayxbbnVr'@;
put 'UD8hcj07eHhec19IRW13S2szfSUsT1RxT0ZtNysrTWhYKVBxPV83WEg4KF45MUwiZ1E4MT52M2NEQCQ2SzhGSTpnbWA9SUgkPHp0R0k/UWx6KXdUa0pVbmg6K3lAYGJKLjBPfjxDW3BGSXp5RVhuez07TWloOzZUOjorYHgzI0ZiKX41WEJFbGVMXTNbQ0lqNVpkcUkzJmVPcXVyfjp0fEZfMCpB'@;
put 'Q3w2W35xJWFtWUY5Mlo+U2BxOnVdVEJnV1h2MT5qTU9BZHchd0R3YH1JXiZ0OyssbDlTNUdoeEpTSVRKcylZW2VlWnlJSmkhJktYZnpvZFYlQ1RYYSsmbmA3Oyx3NTEmVlZdPDM5NTs1X0pXaUlJVUJlRWtlNFNnImA5fnZ4PUJaRmQzRjc6O30veCZDXTluZ0xUT2ZAcmxHRGF6U3xKcCJyPl5U'@;
put 'fWVHSH1nIilXO3pFUnJ4Y1VxUGh7Y1BeSlZpSGYiKyI9UkJkJGxGelJXNU95XzEoMSROOEtgWlUmPHMxRGU1UnFAd3V8LGJmfGljMG0sKDE7TCghWHxRXy5bZGhPYTNJRTgsbilQOCJBciVQdz1kOnRrXklteyt8Yip3d1tGZmJNSWdQY21uNWZVW192KHAoMXRbUTx7NUdaaig2Lk9jTU5UcXkk'@;
put 'Ty9qRnltVGM+XzpMU1FBP0ckKDU8NHg3IiNhNkE8WzBpYXxHRjxHZ1pSL3JjbGFLZmVhOkYqTU9qNTtCTiRhUj4xLEsxKkN9S2lJYHswT1E5JHpDbzJQZGlJVHtfLlVVW2gvXXR4VDVPQiVabHRCIVNXZ1UjV01gPzNBOXBLdmZlQlNFKTdReVNUbGtJQnVFVHlYPixjQCgibTkoJXlyNmZAfnIq'@;
put 'Wl4wbj9hdExxaFdhJipJQD0qKVhIU1B7cElfWF0pdnI2NEhRSnZYS2JlMnovfXVGYUQkUWslRyp3fUxfcjJXNnJDXy83Yn1CamNnRVQ3NX1lI3dQe216NWl+TDZjUS92XyRXNzxJI0cvY1VKWSJJaztFKiVmRit9VHJUYXRjUl9tL0QsVipJWHowQ1lnQ2NDYCY2XVhNW1pEZz1CV3xMSVtLIW5l'@;
put 'b1F5W2lFMj47KE57RCZ9clIjOSgwe3IkNVF3amRjMTtMYlVLYSxPT2JjO2RBWG53NEV6VEM7I0trT3JvVkRATUZgOD95RWBvZWBfKGVPTU88LGYzNktHWU8mMXB8JnV7JCouTm5obj9Jc35GI29+dDxHX3xvPVtraSQuYmo0X2x0OG5QaHFlOVEzWz09SDJ7WnhzXys+MFlhYDVQOmcmLHcqLioz'@;
put 'VF90bkYraS5GJjZDaW1bN0U9R3x9KWlAI3srKSRIO1k1KVdtZ3AvQ0YyYWRCW2M0YFFAXk48WGdRVSZlTEQsWlZCQz5xdjFxXlBqYFRUdmpMKHlqZnVbdVs+S0dgcGojR21VVk9zN1IhRUVnfC9XW0NZOSlGRihKIU8kWi5uKyhlJVNdbUpIa2Rydn4rdTRVaXJoJGlXSC8/ek4yaUcpYkhYXmUp'@;
put 'aVI5QXh9M0JIWH1rJjkucEEiflZOfmllTSVHVEZwfUBwYVhYaTZ3Kk5vd199d1o0UlBqJVJIfTIkSiUwfXN9SDU+Y3U6VH10MVFWKztiOTA5SDlWR0ZCVCsoIV1wOSE1STN3eiRvNlhVNzkxeipwNilxO2tdXVtjYmlnUHlrQDBXa3t+O3d3SnpCQFhgND4/IkZhW2IrUig2UWIjJDJgXXd8KmU/'@;
put 'aGdTfihLYG9IUkkhL3xMUHBwa0dsdGs5fDY0MS5pUHx1MCFPSSVxN290NHlvJXQ1OSw2U2ZZSTM2JFg4e2QjRkNQNERLQisrakhVVT5rTiQ7NVZbSjsyeEVfQV95NUxIPylLIXUqcVlqMDd2RGchcUJRZm02Zz1LVU1HfHVkNFNFODtYOj8yIkExLz9NUlpIXXteYHYwfHx7MDxoL0ZtMmJfQjBV'@;
put 'Nktba0UuV05eI09tN3g9YCVhNTNZJXdGTCFwMC9jYDFlQmE7RFEreDYwZiRrdmUsOU18PTYoOitRMC5bUUNra31jQExiaXA6ITdDeFF2VUIxJUMsZnw9c3s6KitKdn1wYntlMFhYZEtpUCImOzhLM3k0OjxSYyZNJTlwUGFCbVlgS3p7MF8uWGE2ay5hIjJjSDMsOVZhcD4vKzAqaWBsZVQ6M2Ro'@;
put 'R3JQPXd6TXA8dUQuSUtwYEJoP3VDaWlLeytLQkMiP2RgWzJOfkc2R1pFaSleYi5MNXBVIk9aSzJ5Jk1PSEppKEA0R0x+Jko1RC9PMFo+ZDFZXVNMSUA0NmgqNHJ6TUNmNX5uN2FrX1h4M2w4bS9pPEcqa088V1tsbDI3YCEmXmw6RT9WY3UhZT9hanE7TXdNLyx2YnNtImZuWUglJChmQGJkIzJk'@;
put 'aDBGdnhCYnIzaDxCe0k4ezVaWWxRKFYkQkQhZyMkOSh9eHBWUj1hUytsMkpaKiJOdXk3P0U/UEtPcWBAKi5wTnNAT2MiVWlLYll0QnEjTWJdIVFPPyxPaFFuK2t5UUR1c1hCNloxLlQyIz54YT8ieGRkXSwyeCg6SW5IcyIkQ094dGVeRVl2ZHdnKmpuND1GPWUjODViPUYiakx2Om4yclY6ZERH'@;
put 'RE0jW2xdUkdfKHxELztSZkRpQlNHRH4kTDBhXWRGMnE2bDJJO2pkQyZDLGh6XmFxRmA5TTRpb0B0TCRoa0JbLEhzNVFybl5gekVFX3gqZVhJUE89fmpaK0cleWpUYWJFcz0mdT9wO35XOCtfJGllO3lEdEk1PEI4SWZFcWNLNFI0NnM4TDFgVnVgekZOcSlISEsqbDteZjVTZVFZTUlXdSY8aVEz'@;
put 'eW9bTnIrJHNfSVB7eDAvRzM9ajtEZWlxd1p7TiRKZlc4VGthNXx6bHtDMFdMfTlIKmgpTSFEeCtLSTxLb0FyJn1HbHpBY0VOUHc8P05CT0wwLCRFJUxNNnR4RnJoLlVVVnZqelY/cW8+NitqNkpdX0crfF5SQE8mOEVOX3B6K09SdGJUOVYlZnB+S3VWX3Bfe3p0NTslUStEaSNaPU1vVTdEcXZr'@;
put 'eFBza3hEZzhabWRvXiNMJjIpTldoL0hafSRNY0ZeTXBDYFgmNUcqbDpDNnVrfVdLOE9WSDU2LkkoaGppdGBecnMpIltwcUN5U1NKMTJvMytJXy5tQl1bKjR4QzRuQnZqRHBYYiEpR3FXcl9aOXphXWBIXkIlbiFsK3g8ZHpxKG5dSnl8ZXZXdjskdStyeEdldmp6K2N6OGdGOENAYj1JfTZjPG14'@;
put 'VXwjfVJ+SWYiYl9OQD4yekd0TWBUMmpGaC8kKCx0dXAuUSh0SmNITjR7RiRpT3JkMylOOmRmSTtZelFNMjw+U0tRUDNdLGAjR2pAPmtseiozbkFiUyowRkFGbiJvRHdRNSt7NkomNzwvcSR+byZXRCM1Rnc3VURsMXluTFVsP2IjUVBEd3M6UDIsbFk4JVoxPjAub14sQ3c3UGlkOGdhciI5KWxz'@;
put 'Y3cuWk8hQmMkenspVDlzLCsqI0wmWCxtPyVDQTJedV8jW1l6Nll8N3BefFFzM0pqS2poe3AjN01UfW0obC9IZWhiblE6anYuUDp5MCtJbkhXOjdKIj9UbEpIdEE/Slo2RnFpUEtEUDNfUEhBNUA8XjE0enpYL0lORVN+cjJqcWZ2TmdXcExYckpSaDZ2YkgzXmZLaUxVfWM8bkh1bl5jdSoqR1FK'@;
put 'Q3dWPWRZVT5iTE5hJWd6W15SLF8yRitCXzx2bl01P352UFtgME8uTm9hbnwrRSUrNX1ta3x+ZjdsZTVCe2pMXVkpJlZPYEs5NXExLGt1UEYsfEFFb3RjTGBETkhmMGByTTReZFhKOlRFRzh8RHIsJjRjbFh3TSJ3Qn1QflFkblhJbilVSi9TY0lsTHVDZHJnIjZpPShua2FjY2Ihen00JXd9X3l0'@;
put 'fCtCWWMvSDl7XU0zPXg/ZShWJF9uSHkoTDJKfUFFSHxWbVgwPW99W2tnL0BJRmlEaHBwdCgwW0F7ZyVAVSxiVDsrMFNPckdqKHFlRWAyckdgXTxXfGpNYEltUlJRMF4kPipNSm0jWSNwfjQuJls4SiRhRS9MZSpGQF1jUWo8TmsoYjtwOytrd3hxSFNiK0xxQStkSj18ZD1QYyVjVHU5SSxjWitQ'@;
put 'NEV9ellybUIkLE9AJTxqP0IpZXgoeFtYeTwjTEFBa01QfjI6VXh8Ql16YEMxRT5HIWghNWg0UUQ3OVYmKkl3PSEiYEp8SlQ1RyE7RGMsK2BoYXNBKUZeUzsyIms+UX50THdDJWFnPyZOY0x2VVJdcX5daVNpbFl9UitOKzJRRlEyOElzW05nJXAqPCFzXlBkMUx7anNqPjFjY2o1UmRYemosZCZH'@;
put 'c0Q2IUZCNEU1T20zMXFWaW5sI2cuOipXIW5DfUIyV0peWW5YZmVGcGJ6ZmxlNG5GIixbZjlxIktPZzQwZDhnd2J9SG43ZlkpZ21EWTN9PFBfckwpOXZqWlk1MihvYj9iZzRhZShkOkpqRlovbmpZL3FRRT1EWWx6QF9aVCI9K1I8bnhua2R+UV1EM04mVHtVck16MntuKiFSLyglYkg4I18iS2Jg'@;
put 'O3M/XXw/Kl5KUlpvQkxKMSVKNTYxIz9oJVoiQFRBX1AwOTY5Qnl7QyEwckJgXnlkUVdsbXk0cl0veWEsS08kK09BMHRsfExMIVl9SV0vRXhCfUdLQXFlayxMcWB9d19zV31TPiFLJSF8ZlkxN3x5Zzh9VnI9Wm0kPm1JbFF3NiQrc1JuVTJbZjZyYWElfndGb3VAZThsMmV+bl5edlhbdEolLE0k'@;
put 'P2trdnd1YzhiQGc3dUgjdHZdMFtCYD9iY3gkJUNmPjlqbkozV35XbzdEU3ZvbVZYVUtLJFJIJEVUSHUhISgjeHI7KkhQbjlQI3g0MV1iT0NEOVkrYmZkVn5MOmA+VXdJbVJ0LE5sfShNdlkoZ2puMSlUP2RgLmAoeD1XbXw/PmBheGNdUT1zUWBjQ3MqRFI2fkxgYUdjKk0kRDVuMEBFUS8yTVdu'@;
put 'cHFuZl8jSjo5TVcrUWFXamNieUY9Iy9hdnVPX34vMkRBLEdNOSQvej1wOzApUUM5dylpUSo/Zn1+eF9rLnJOcmN3PHN5Ym1xbytxWFdbSjw5eXQ4a1Zqej9jR1AyYlZwKXpPOnFATEYuKzE+Nj9LLzp7Jmc0ZDpnYFJ9SXVAemtMSzQ7U1dndyxITldtUWVnTm9qbzFqZnpSUVI6cTxafEFGQkVb'@;
put 'Pi9ydjYzc15mPUxMLEJPQXE3Uz1GJHRgQGouRikwayFCNU54aSltZSh7KyY4MD5BZ1ReKEgzRShRVig0TFR9RHpIcyJGLHRMNVY6SHssT0BXK2ZiZDQpOzNAQVpsSHEySz9jfipbXmdGMnlAPjE2QWJnYikxQkklbHhnQGlNajdWJjdZVnc6VUVjS2J3eW9PMXtfQztMV09vInsiamRzMHtER2Re'@;
put 'LkJIPkRNVWt4QixrISVYMjhveWtHKUspditeWXdVd257PipmPkJ1TEVobmdESUo/dlN6RytjNG40clFFfig0b0JOYUdrS0hsK0JTUGU2W3k4PjYyRFp0TVdUZy9yVHcsbi5aLHcrNnA7L3Z2dl86fVBhTS9OJTI9QCRSVG9oREJpQ2BOUSopK1clc0B7Jl9XfT49ZmJUenA9e25CKntLMG5NXnht'@;
put 'YVVlUmN6SSlycT17PTFxTFlKang3fXs/QWEjbHJgSlFnO206N010XltHXnA7O3ROSFFOVUcqdHNpb1IoWX16ZFRSZ2RbNXUrWndOTmBdVigzX15PPUdhTHAseU5uaDl7aER8S2lJRUlgMmZ1S0VMMChmZnMlZ3Z8alI+T204WEYlaEU8YCwkcjZFVHImUlVJRD90d3lYcFc4bmlALHNMUXAjL3s2'@;
put 'OyQzfExqTztzMkNMZiZvIT9ocjs4b0lHc1ZCaGVlNVd9PmhXQF9hMCZae2hwfCRrU1hTfWR3T359VEovUHd1SUcie2d1MVpEeCs/fjlOc2tLY31sUkhYS0h2cmM5I0lVPX57Yj4wP014STsxQTFMY0dmMSFOInxTfXNNNHRzY3xYPkhMSjosdCpeNG9rbSIhL2xhVDMiMSEwNSlsUFBgTG94O3lI'@;
put 'YX5SPD0jT0JYWWI+JD40YFlLaypUe1dPQyVjUntIP1pJUWshVldfbWxpYVs2LChjMDt2VXNKPWl3QGwoUCJoOkdZPEFzbjVKYUEmRGRrdl9iI35XMVlyNHxzL0U1bkl3Ol8hNXcxKT1mXXg0Mkh9XnQyWjMyWzJlVzd5anVjemNPdi5CclZuTyo5WWssWV1oa1s2Q2UoKzo1WFBYUk5fPnh+Kywj'@;
put 'NU1VPzFHJUxfcXd5cF4rOmMkKkN6dmViMW52VU1PSTFzLnZTbyFmPTxeY2lSfEBKcDdkbEp0THQxWEM2KzRHOy42VCl8VC43UnU4ZnhJQjw6OCVbMyNyP3hCPCVec2NrVlN4TSZ1bDtkaUFleysoayZNSyEjVWtLSXB3RV1xTVt1VH0wQVY6MkhKbGRJNkNMW01PYFd4cF9UL24+bjg3Tlt4Xntb'@;
put 'PmVHVzEuWzdVOU41PWs9QnV6dH1eMjowcSxbZCRgNipfaixUOHZUSnE7dEwmJFZOYSZJTWk4Vm84fSRMKlNUcEhJZUR8KF1aKlNncSMmLDtxMmV0Wm8/ayEiQXYrZFk2ViJUVW1+QmRZQDJETz8hXUpjTGF7e2RPJT96fSl8eipCODZXYlF9ZkNjKSFYbTIzZVNAcilFUkRRO2IjST8xM1NtSW9N'@;
put 'MHdiR0ttPkpVWVBoRH1DLyJbOGVxeWRdUG9gUVV0eVVvfWc9InxjIV9aZkdpVEBYVl5Nfl1GNTlBKykhKE9saEQxZzNPPm9XK3hqbkJQRSQ9Ojw9ZzE+Pls9alp6QFtzRkkhdlE1NEVqPEkxQjdRSjxteSEiWG1jRE5BKWBdWHsmfVZlZm48SlNRLDs9UCxNXlY7K1s1aitGXz1YdmFDR2R8OyQz'@;
put 'Q0N1SGxVKj9lKHRPWT94MlQrMjdQP21saGk0Uy9qdmJIK0k9JWEsR3MiP0UsYnZrIzlkJkdUPERwOXNqZFF7IlteeGJlcHNAWXZUOE1kdVVRdnZpbkZJJTlZP1h3eSQleiNgKzVnUURuYDQudGNPYmAiaDpHQSxnXTtQJiF3ZjNKJTp+I25oJmolbXpWQTdjLGlaKWQ7fTdvQCx6SmRDOkZ+Tno6'@;
put 'U0NQelE5NGk0fmU0KWVbLDpJWzdyeTosUGFpP1NLanxOOU1zVmJASj8oWWdXQTQ2YF1rYDMrZEAmaVsjYExPfXA1W0ZJIVcubl5AKzt6YWl3e2JdYFJ1Z1tsLkFBQFsxXms3OiVLMWcvRzt5UGJEXS9QRkBSQywycyozY35NJFRVWiZEL1dFZHJscC8lPntWciR3Z0NkQmxkbyw1Xlh2d2A2I241'@;
put 'M09fUyM4NCVkVDlEZ1teRzx7SWtbVk9bPVUmJWRCXTZROHFlLnIwLzFEQG4qIyMxSk9xWVl0YmpPcEQ0SmxbSF1eOV9XMXdVQntQaDFmTmEiWT8+LGkrbT5zZkdPaVArJjpxcXV5bkxSOSEjNHJVU1UsbmclVDghNExJJlpQPy8xRi9CaEhxJXgsV0BjaSFJJlQ8cUhiPzQ4W3BKejA+anlISDF4'@;
put 'UlZoLEl4MFpSQSFNLDBNQnF8dz17NTIxUD07MXEoRGlobWR7Kk9BRHVtSD9seGkkMztUNUlHclsrKGFpMnZxWXFqSSFobl0lPXleYmssUFVaZWQjMVMyPFMuYld+P1txTGZQbHVFRyROIj00dChQY05ESGAkUktVTm9IeXo0UkdEVno2b2FXcVhuPClmeW1IMD5YJCNQL1Z2dmhELGolZEAhXTIo'@;
put 'V3MvMj57TTt7d1gxc24pIjt2LzE3bDkxKG49UGlCaEhvTFMldXZRZnV+U3t9eiZbZ0g/PWRLKW5aXiYqWylyfHZra0QhVWNFbDJ0SW8lN3EiQFI9eGMxUmYpY2VmMnVVfWxkJCgoZUlAN3NZTEdXXXhqV3psKjN8QCwvWyxmV2dDMmNbSFMibXMrfkVOJmU8SnlNWShVOSI6KCV3NEtOTGE2M2B2'@;
put 'RWRtbjdsOiU1TlQ5JmdXeFhCQHB0VHM+bXc5XThpN1E+Z0o4cl9Ma2RdeDc1SFRaLHloQSxDTCt4ZF58cHtxSnsyKUZiTElHZSYwKWx3eW55KSJtQlpHS2dZOGtdfVBmTW4wSUNLKWhmbTRlLjc2cnEoNkZnMnksVHQmMltSdlY2Rmh7Nzl8Ryo4SyVld0QwLHF7eHZbTE09O2ImZUFbJXJAOkBH'@;
put 'PXBkbzkkJCxJe1MxSU4rXUtEcVVCRFN9Mm9fczxVTUgzJEMhYUpvSi9ZYzhifDV6e095bGlhLCIpZ212MXgrQVZOWV1+MjckIi5EPDIrSWI6N2lUc1hMZzsyI1pEI1AlfjJtYk5XP3J5MXZBTEMqLl90e2lMPlJMN2w7bTFdPyZAOV9SX2gzJD5wdnt9amF6cHtJOGRnJCUuKnglbjtsXWhaZkEo'@;
put 'Wz1CSDVWX3QrI3dUfk9xezxMWjdbYCtsVjphdlRSdS8jJStpUzA5TDo2LypEPFRrW2Y1NzJqQlcuSCVMMGQ/My5kVXQ6XmN8dUdYX2lTS29uUyxUKT9TTG1ob2AoRjYwWFpKaD1wSCNNOmI7fnVwcF5JKXBvPWl8bWFZaVFKRCxgUzxUJHk+UGdTQ08jXTx2NTRjVjx3O3VFcHh1VGU9JltNJWVQ'@;
put 'SzJpbzBuPTpkJnNkTVRFSCFjTntII3k3XnlFPGMybjV5fDtJQztxblJRUX4rR00wJGFGelFWWyRicChsb2FZamhfMjIkcUthWWh8OXlLeWt7JndNQkd4ZH5PYnYvR1IhX2YhU2NIQmszb2FvYGx7LFRoYlJgUWA8VSxjOEpRXVRpczQ5cmhoQD87TywrJllAYDYjU3FXSyNbOTRrYWJqNX53ai90'@;
put 'eFldaChfXjViQWpJcyZOU2grRERhOm1+cVltXU1OcFtYakQva3loIztCTFN6Rk4qR002L3ovIzw9e1skOGx9WTpXVDEzTUA0RGokb21jTlpkJmtXUFUxPj9jNGMiPmQkYTA/OUo+ODUoWFNJdkF1Lm1zVFJVOHVBSlM6QUBjamN4fTkuaW9tcH5uKip4bCMhblpfRTljWkFCP1g1O01tVFJQJU8k'@;
put 'cCYkb18vW0xsaD1XU0c9RDdtcCV0VCFXWXcxXUVscXJNMGdZJlMyOUleRSF4VlAuTT0oV21FQy5Jakl+RD5mXn1bKEoyb2tVbXtaIzRmNUA/Q2c6KzJgWTZxJj8lO3t2eWB7Rz9GJT5BUzpfRmFZIzVgOU9gUTsqaWJiaGNgaltzOHxAJlEoJVFrfm5AeHwsMTklLDR9ZFtMSVk4c2pDYERnUGxK'@;
put 'QWdbWVE0K21tNGJ8PH1TJG1mPElFV05DKElMYFJ5JTZNLH4sJS5CKClySl16KHU0SSVjPFAlP2RDX1QmeHV9NkQoRlMsV3AkYmVCakplcHghNDNuRGFMLj1KelNUKUB8WSluaT4+IjNLd1RaaTx2dV5OZ2EoUERiVTZZIj1WWnxtbnttOH1SVj98OV5fRE1HLDZOLGw0QkFOR3Y/KylLSCo3Y2lV'@;
put 'e2NScDBxV3tNTXcoUCteOyNUfHpWPjFIenw0YE15byI2aytgTkUpPG9nRFZ+ODkvK01SMldGPiU7bVpJJDg8UU1vUTJ5OUgsIkxPUF4rbkwiVExjZT1iJllfKVc8U1FkPy5vdSh0blYhSjBKU3A/fDZmTEsybiI6MVBAfSpuPGJ4aHN3YVtycn5VQ2svPnh6ZV5uOChePWhuUnk7eHNtRGBrLzI/'@;
put 'bilCQnQ6RFhRPFgrdm1YQzphTXBidk1eTkhEdHhCbnRkclZdUjVJayNVLHpRTUJ9QXk3Rm5xYEtLOWEyMU46UkFMajhAZn4+JXtFaT1vYzlTZWlEUzxoYWI6S1o2RDIhbkldQC5pXiN5bEdLczc3UT1nIkUsOiZVQFNnL19DTn4sXzlZSVYiKF1JNmZESnE6JHxXWDwvJGZoOihRS2lESjBXZSkj'@;
put 'PzJaKyllOyhuVCJlOiU0I2UlbChaIW1IKGJYUnQ/fis3dTkpPDtIYFNiN2sve3FENXpnN2YwSls8cFRGeG1Ie0Npdnp5e3ZvPGAsQzlrUCJQeThqSFE+fCs7bD04K0lKOVMvR0glRD9AfTVoXXR0Vk1ZNXE8PWNHaWBpN35lMk93dlFEO1tWMXYsTz1GMjJqUTdqaEJONTJweFt9VjN+LixhJXQ6'@;
put 'ajp8L11zKiQpRkx0O1ZiL3B6ejY5MHVXVzAxa1cqKG9pbihpQnZaOH1kP048eyZZVld7Q041eSM2Z3xxK1hHRSFucn5yZTV1VDRBPU5vIjsofHtUXU5wQDZdOnM/RkNpYDBqPnUmcUxHUiFLaCxgT3tPYkhUa3ZEbHtCdDQpPixKWnpAPHJuOHdiQ344Xk0uXkB+aClIOmlGT2tETE9JVmtWXVRP'@;
put 'JEMhZS5JLlQ8dillZVdQciRWLFRpX3VicitWQktQTzJGeU17NV9YaE57LGgiTnRDOENsLD9LPjo7UCEkMEcxLjR2clA8T0grKX40YkpFcS5iO1pDWG9OIiJDTk4sMnc/LjArTDc3TkJHWmkpflRRPltOeF1qUHwhJGM4bDw8TFMyI15YcUk3dDxqRERgNUNNSkhdVylxMlpDSXBrVS93W0EpfCNu'@;
put 'Plc+TThUcDFFXkIkN193UjtWREAvVkVJSEN8UiNCPipLTVM/T3l4UXhTKE05MXxhQCQoYmxXKjV2dChCPkddJX5FQX1iZT5PVnN3MHc6STpvVHV6IldEeEpgc2lFIT9XUCtEdlo+NkViNyh8Y0N8d2RGQ1tbYllfSE8sak9rb3RPcXUxWFsiaWUlZEc7MnU+a3orcWxCb1ZSPlltX09ZOENMSShl'@;
put 'MTNFJmAyJj9uLzU1aTorXVJZZ0lnZWxrTW9hZ1R3fmtbcz9MMjZvfnJYYm8xPyN1YUsmb15LeS5IelZDUHVwd1V8YmUhPk9IRy9wb3gkZWRjQSVWaGYrXzgqJCs7XXZXUSIhdGRMSWpqVFRxWFpLYlYlKUk8SHVCWmh5fnx1S19rU2VFZlAxMEp2WHNXXmRJZ3xYVH5TJlQsSiR+KkZwSjkxUFNM'@;
put 'XURMKls4LDBmJUVmZTZmdXp0UXcsNEJCQSo7ckRjWjFRNUAiPkgkPCRnVXpXVHRMTTpUNmIicyliXzNFU293ZFQ2PF9yMkBZcnwicHtXODhuKjlXJWQsW2AmMXs9SmY0blJVZCNxInI3S21McisqJmBAUyo3Klh4KnUhdFhobS43RlJ0fH5MRCZXb3BALntFMDYoKl8wTik4WG9YVl8kPHc9QEtx'@;
put 'O1ppdXcmbD5wUzY/OCh+NypGSXksPFZtaj8yIld4dHZfPiJJPiZVLlVeelprKFE4RW8wdk5yZHsuciUrTyxbQTQ+NF8kOjFnXVZXV3lpSV49a2NmKD9ibjRSN018KXV+YURMa0wxd0x4akc9QVpIQUF+QCU1Zjw+Wm98YXdTLms8OUJXO153LyRuY080TV9PM2lKfF9ePCtNcXVGIWN3YzE0OSQj'@;
put 'LkB8bUludXZsU2AhTko8aGNrUW5mQG5mKT0lWmlbMFcpNjwjXUhUVjEscFtPMFRvSl5pT3l7WHc6SSQlMSF9ekMmX1kkUH4lfD5OT14zQVFgcUE5dSVRVSxjaENIJFJlQDtpNCxAfTBOY1piY3FraF5QJSgwb1k5NlNGS10xezBYelRSJSl0Tlt2TVYpY0FAdXV4JnhXUWZlNSRNeG9hSD1IYXEv'@;
put 'XjZCJVdpd1txYyZ1NV8/KVBNU0cpek4lJiE6YHBoPlg4VHl5X3xFODRGZ2B2eEp3dS5hJFs/QE58O25eMVRvK35UQEtkeGohPEMoMz0jOi9PJDhCWTtiK1FJPFs4ZTVXT0RXMHc3U3hVcjR6WyVrWjFOemB4IWYxYTUzR1RLaixpUE0kbyw/O1NiX0I+Um9SSkAwPl86V3VHOmt5fU5RLEpjMD1T'@;
put 'TVkmd2dbMUcueGVNRWxCUF1XMXxgW1s/VV4/Qk9RQnx1NVB1MzZvTypIYiNheDpgfU1OZTdQN2hDY3tNSGhGc3F+d0pNNCJ7T2F+YixPUiEyWkV+cSlMK019NXV8c0Y7dF5wdEVVQz87WCk4cDs/SEs3JnksaU4kZzdCKlZhRjd3ejhkX1dgTV5XQVEmMm1NS1dhWVReISgyLCx0emdbaDlERFNX'@;
put 'VEM3V3RoTFY2UTdpJiomSytFRyhnI2Jdc2JMQl4mQlo0Qzw5TVJ8bz5YKU90KzBoRV10OjFLb10ob1VZKHxgOCw7cXssJnM8Q1RadjElZUtbViQyMnNdLDBjQmpEXyxDKkgpZ3p+U1hyRFdEQWN8Sz1be29hcVI0emFiP1BdcSJLZGd2PT9JdzlUcShFV0k6PEIyVD8+LFU+cTY3dERlJlteNkdb'@;
put 'QmNRYVEhK1JrQ2cwYUpKVypDUHw4em8qNjBjWntMeXFQVzskdmxLW315VHl3TXliKnRCNm5TfEU2L1laTHh7OSskKzQ8M1laTXM8QjxJN115OCsoSGA5UE9be0MvMSIoV25rZV5yXWBEbyZGfFg2T1cmTzsrYEN2IjxWYTkmOEldJlJMS3A+WVAvWFcuNlcmVWBnI1RKT042WlJUUDFKQE9SJkw3'@;
put 'fG00IW9jW2RjdHhRIyhHWVhUMlVaLlMsQlJTYFBmbGB4ZnJoImQ9V0FwXjZRNlhPKygrdjtsSjkmQ0M/Yk42LldNcC5ARFZHfFMjcWt5M3oqc0xXW2dsTSF9bUNRT15NaVBbNkhRe0VYbnhrayRZPV1sRWNSXnM5R2hoNGZqNCVPNTwsQldRSCNRMFBwPVFbbzBDZCh8alJWZyh2NShtODxjdVgi'@;
put 'UTRFdSVKcDNzTGhxNlB9KEFBSXRdXno2M3VbS1BPdF0vPnIkRH1NX3xaOkhOeSkxdDQ/Skc+dEA8RHM+LFJnIT4wXUN3cTJdIyxaaixxKUEhaU09KlNUMnAjVGxbKVtbRyFZPkNeeih+REV4cmJ+MzhqIX05SXFtbH1aWkxlZX10WTU6fm9TK3t1X2M2LjdQKj1uKGBiejt8I0QxSEFhRD99PHZE'@;
put 'UllzNzpqWnolRXM+fmdHXldsSmEwZWAhWlpvUnw/JUVze1dpL11aPi9DJlUzSEZhaX47OmRtbHIkUiJDcCRubHIkdnddY2MsRWBKJUlhTU1ObVFAZFUvcytDY2VzNV1tNXxoZFIsKHVpTCRyOj0jI0Z4WjJKSXdkTz9bS35WcGk1REU2K19JTEJId3FXYU0vaG58UlVSbH5XX0UpTTQrIkYxOUU2'@;
put 'dDFOKUtFbCs8MXskIklUMmJqVWYiaVBWKkwzOEtOIXlFUjJwblsjSGteIlA8KXxJVVlufC9jZihsPSVbUCFfbF9VWE1DfnFxMjxrN3FxKD5kKUw1UUVWIXhDZ0J3OGI2aCkrVWh9MWh0Ky9wN2x6TXtkZjAlYnRpOGNZXzNeJjplL25IbyRtUDdQaSh4OjRpKnJQX3Aua0MrWDB+YnIyJCNqU0da'@;
put 'O20qPXwle0g5ck1fdzdOTTRVJUcocCxoN0I1ZURVR15YSW51PyN7a2E1SSVoZ0ZxVTBYVyt5Ji9SZ2JpYWxWWnVjeVEkfGE3ITBGRypQdmZ6Pz1RaDxpaTleZ1h9KlU4RGlXVWpbIyZFJnd0NSR5cnVnY1lURUoxenhNc08/RERJUF56MTBpRCRXd1E3QGRNVnx4aHV4RWsxZDVYKjh3U2RdNmV6'@;
put 'VmZXJTZQSHRbRl1bV1clOzdvNkg4M29obnhNWVRObDFpK0d5bnMsVyhfNW98KDpqQ2k+RzVodkI9flErKH1UJC5wPnosfHQrUUtSSytJWExmPF9fUnxyPlpEQHg1dV1QNEcsWUApRSI6fGVPV2F2Xz1tQjlDRnsxSVtQIVpYQXIlMEpjTVRydWIlQzJYRkMuUmNzbk1MamImP3Q+RGpWRE02dlNd'@;
put 'V3g4fndkMixSbVJAU0t+YFNUaTBuTjxdXXR5fUJDVkJ6SURUQlNvVSYmWnFdSVZIYlQvOHZnNUw7eW5tcSh+Sj1hVVFBbntuWGdHbEQ2X0dibmRnOXssZmsiKEVjcHJBLFpKalMuOFE9U0ZHIXdZQDdSTFpeWkNEOzQuRD8wTlBzNiU0MF0yaktvT1AlZD05RmwrYCRfU1hgUCl+Y3pBNGtWbX4w'@;
put 'WX1FcH0ufXtEJVFfKzZyaU1fbilYPFo5bThfJWZPcV1lY0c8blA+MHlkUmZifTI4aFsoRHJ6blkwfFlWRE08Wl9lUyt9bjlqPHNVXiFaZHg5eENJZHt3Q0kvLy5gMm9gJTl3PDtJZUsmdzRoIX0yXlNhcHxXYjclX0dBP29iIWFKJEIuOmUze04heSZAbE1AVGE/RDc4SGl5QnNLeWtXQmRfbXA1'@;
put 'X2I5fkk7KE1AIm5TTUxYYEtlNUY/Km4oTTRKKF16dS9uOCQjaGx0YSVvJTg3dk45L01+R0tneUQ8ZVJAbkAocjNuVUNBeCsmJUhtc1AoNisyaGU5XjFqTkJ1WyJxNmJWakl7SDoiflpCTDYsUFtkX2xCTmFlKnNoKkFMNHRgPHtvJTJ0RnN0TXE4aWIzSkI5TklDS016QzE3QG9kUCVFdz49ImRp'@;
put 'aXxfPzRwL2w1Y3hyJk5VfDgqI20sXnNGKnA8Yyx0UylYdCJMZ2p7ZUthcng/bD92Tyk5LjVLIl1lW0RhT09XMEF8XSxnbU57XlJUL293SE9lfkIvcT1MfGF9XVlXRU1JXWRtdDNBP2YsRlc+RUxiKXEhJitrUmd6OX0zTTptNzFeOVpwI1QiXSo9XTM1cWZPeGJIQGpLO1EzV30sdGUzUEB6U1pO'@;
put 'WDxLeXdja3UyVFJsaUZjYy9ZJVhAXkwhZVtoNUtVOE9Ha09RbiQudnJxXTAsS1k0c0oqQ1VIS2I8ZkdzcVdYa2JBLnVPREJXUztqT3hxKEdARyRnbSlsdEJfJCR+fX19VFVkb2p9bykhWTRDMTNyWSNnfjxkMVVxRnczaDFybjImaHRBYl1WTD8/UH44MGU4Oip1QlBaOSxkOiRzP3wmMlBWLEV0'@;
put 'LyYoZUE+Im0mIS5hU1kiXSQ6cWJ+cV5WZE1rV3lbUUV+R3QwUkF2Q18yOylLezU8dnc6L1B6RUgwJnNRdjpMPHRWbStBMzsvUVhvYnhJREN9W3VMRUZwNElJUlAuUlFkSWF3Ln4uMmVAYz8hXmdwSTFQfDErWk17JUkxWCsuSXAhRnRadEJdS0pRfCpETUJwZCVnNT54SVlKe2YldFdtX3BjTHFI'@;
put 'N2pXUnR7eShGNCxWPSUudyR5JkRLT2BFRCZbOFZzWm9WQGE0LHtyI29GL0l9VHpoPnw2KD9iYyZ2YHNlUz9tMX0zJSsvRCZacUFbMnlnMzI4IXFVMi9dTTQzLEBkLiNwVTh6blNnbiFRTHUoS1FufUM2M21DNVNBSE0xKGkxcUoxPEkkeVE3aENJOVY/bWFrdWJjfXUiZT1sIkRIX1lHVD9rVTso'@;
put 'V0pkS1ZSaGklamhzc1VAOWtMS1dFQnY1aj9UQkFUU3lSV35lTSt8PH4rXmFXIjRYcjw/UTJNLnpxO3N6ZXxuYEFla3VSNV12dlc5QWtlOVl8fjxyfE02Sm4lW11hPDBHO3F7NUlUI3BIYmspQWlRKUksOWRme0d8SV5XJkh9eVosLEMkSHAje1oyXygufksoIjV1Kl1qIk5rfVpaSHo6elRBNiY6'@;
put 'QHx9PWNFVXY1N09efTM9dFIhL25MRVFpKVphWD12cjx7O2ZJTmZbYmg5R0c/QzNOeXQlL21LQzNLJTxlfXtnTEVgfUMqck8sQj4wJTc6Vzh0Ols6Z2R5TnB7UD5JT3tJe1NVVSsxS2orK0QwOVshMT0iOFUlUGZlLDZZKHhGT1M6PiVdWGVvVVlLNyZee0ptMjE2b0dBU15SPlByQ24pcVE8dXVQ'@;
put 'd04kR0l5RUQucnhxIlt3SnteI0xvLk5KWFAlSHpIeVJDZjBkdj8hWC9NNWcyR2VZNF40XU95PTN6dGRGUUhSIyxKb2xkentmU25HX3RVWnk+L1BGNkxvZHgzKnN7RkBbJkVEJDdvWCVGcDlFbSY0OmQuU0d1OXE5SSROSmBCWzI+JSRRcUdxX1VIU3M5RXZ9amFiQngiclVlTG0hRzZdQGxgeVJG'@;
put 'X0Y4JlpldF1gV0BCfms8bE4/K3w5aThFPCl0TFksbysqSm4zZEoyYS8xJVM6c0l2dnZqVEpUanAsdHBnUjkvI0pNcyU3IUl3OWtBJnN6REIxfit9OUx7d25ZRTorOE5pKFFxNCF7MDU+NDE0cyxAM3U7MzpAVzk/QFhUOztKMi4zPDl8R1FxWFtBOi88dSlaIW92QiZ8Z0d5VGxdNk0icUF7azFf'@;
put 'XzVxSWNOUTVndXkmM0E7Q05aN2JdWU0jV3VLfGUkSDBzdy9ZWiNsdW5zUk9vbj9URkdvTkhORUdHYlVSMHs2fkwzX2h+Y35ecGksdUU9Yn1AWiEpPF18S2NrbiE7di5jSz41K15ad1ZUNkFzT2NlVmRfPVpXdmk5KUBESj5tKDFCLDgqczFZZSU5Z0tyJWJKXUpNa21TUFFQPC9fNHNSY3ZYX2Bn'@;
put 'QFZEN1Z2YXNJTnlxbT9JXTxmTCwwP0QiSihuVk9+LD5EYE02WHUldXFtaWd6P15COCE0TGVFPEZCYH1rYHtqSjgyITlAOGlXUSVIdjldTW4qV2twa3kmSEF8b11IbUkkP3pIclt3fVRleTFbSWBwTlgmayRqcFc/eTltK2ZdKUV9K1Z9ezkxcjQoX2RLPXNlOWMzXnE2YCt1Xjtydm9iI1JFVTIv'@;
put 'ekRaTFdIWT07IWpXKltWYlhzL0MhI3RrUzF+TCgqMG5oJHt0d0Q6eF8zbXROOnZEWkQiXXcoKUNbMiEoZ3MrUWpFfj1JbDhEMHNWWDo1KXJqRFA+a1NUWDN6ZE0kfXUjfSRMPiRYZkxkfCphOkluPU5Ob2F4dyNhUlE6ZGVPeCpzW15zUDAheUUrbTdXLGRwOG4vNmI5TnBwczIiUkJBaF4+Rl1V'@;
put 'OkU1aEw4X0Ndd3dPLF4pM0JXWzs9M0NyJU1ZcFRRWE5Na1EmUmp8KjZeUmYkcTR3d3Ixc1Y1I2dmMkx9UjpvcHc2VH1lLkNBP1ttY31eZDYlcC9rc1AlVCNrSXEjKj5URGY+aGpUX3pPeXosZklERlooUDhTe3w5fTdgVU44V21gM3FOMSRseXBERzwmJV9MSz9YflBncHNlbXl1UlFab1M5Tn5R'@;
put 'fGJAbkRydUNqXnpmJVJIYC9TaSxzMmNvRTg5JTcmMFA5XltnYGBJcXMlWjFiantoPyZAMXNzaVdkZ25hc18oY0M4WldEelE5bipuVkg9T1NBI2hGcCohSXBsXjxhfDEuJTVlc20obnJjQz5AYzExSXEseF43MTtGV257U0RvezRUXlBDLDxeZnQ3Y1AhQlhTclt+NWMhI1Z9JWkmNiJAcW8sNzkl'@;
put 'ZX5gSWNSdzVHUyhXOnVjOGF+YVQ9LlUsZkImaXBlNmI6dCo5eD97YlJPZ3VndVlLK2c6JmVCW180KXJ1Q0VRPGY1aHQsaGFoVGFFRkNIUUthU25RKmZ3VEUwYSEsIzFYJEZKR1d4W25xM11dXWZ4I0lbbjJpXVZOYU9hWWwoW0NOWGtHJUw/NFQ+TGRxI2FfQC9fSm1iMklLXiRMP0lpbHZjcG9h'@;
put 'Pz9uczQ2bnNpUUU/M2g4V21HfCxTZFAyc3tka10qViNfeWI2VSUiRDxQNzwvc0ZDeSVrZ0VNUipma34rekx3QkY8XTcodHI4aXp+JjYiSlVTR2NJQDA2OEdGe2pKRz07XS9ONmAmMERkd2U1b19nZ1kwMHoiUyU0SVJxd0BAQHdDNmNtS2YmSm9vVG5QeklaZUA6dztva2dgSEY1OCFCSzpoKG9E'@;
put 'R1lhTkRodSpnOEc+clhPQ1UyXSVCSj9ZQllwY1lEUC5mMStDVW5PXWxbRU1TfTk4W0hQdyhwL3B6IThmZWp0WzQjU1JwcGI9MGRJQERJIW0+e1R8cjssYl1ba3VGKCwxRVhCI3AiO3Y4bXp+ZSxxXVc4cyR4Nis4Q3hdQEAubyxGY2tBVTUvRkt5UF1JV3oyfF4zRlRPZDg9aXM9WUhtIzclXTd4'@;
put 'IXFYRF94IXFDZyU5fFYzWmlXX3ZXVnUlPXkiJGsyP1B3KEZ0NEs4VGhOaTZIQXZNWVMvUTttcFQ9JkYzI3VdZ3VrWVVpUFo4UEFEWjtqTE5yMSFmIUxLM1RvUXFhTnZfUllvb3txSX11Nz06IlcxTSkhYCpBbGF8Vn0rZ3t2O19kJkQ2KmM8Ml4lbHpPMXcxK25CdFhHb1BecF9MIyo9Jl0wTzci'@;
put 'ODxkS0c2fWNwfEdEPm5bZF1UVXlbe2Z6XmpjPlt5JTBQTjNsLDdlVUtzOUF+XlpdLCo2YkRpfG1La0lOOH5aS2VdZD0oVFI5R2Q7PiYxSXNlQks0bW1YPUtCVXhwOUt3a1MhNiIiTTQsJnpgISRxfHJzVWc5N3RYRzFZIy8+ZXk9bSZ0OGdlbTNYYDI9ZlY/IXJ4Wzoxb21VIkxqJXJDVk5HKSVz'@;
put 'K0pGPHZjZ3xlWWNrVGM/XmJJZlZ+UGVqTW1mdT1ZTDglTzlaO0MuW2BTWlFzJl5ocCN5LGNfc3x1MTF1RilHLGo8bjp3Yn14Wm9fMk59TDg1dHFwWGdNJXNnOyo/aVZsNDN3OnluWHJ3eDRRRntdRXx7Z3V7RWEmO0d2XywpXzZhfmw6NzpAPyk6XT9bXmgyKlA0LCV7di8qUEcxbV5Uen4uZXV5'@;
put 'KVErSW58Ll9tOypiOkpiJFJPXTV6LjtuLGA/VDIjZSNmZEAkWlVwZzM+OjVxQ2J1OyxtUE09OlYzYzpNNzspTl17dTpbNGdZSz1yUCFvQE9dI2o7OTtaWVVCT2RYNFE+NztxaFtUcDFsfm9aVV1PNERDeSFpUE5hK2JkaTl3Y0Z+bCU6Vy81SSZVWW9vUn5DdE4pM0F3NXohNEJvb3xEUUdGKDp9'@;
put 'TiNvdXd2XV9tOmhNP31aXjtgNW8hO0VEYmchSzZ6eCRbP346WS5AbVUjfDFKZkdlOj9QclBGSTVxSCRNKTs+VWg5YikxO1k5YC9UO0VMeX5JYi5QX2EkUlFmPz9LU2JKYXZPMVZDR0VRMkw3MXU7d3VWY3MlTyV4KzNLZzg3SzpDMCV7OmZ8X0ZLZ1daUVJ3NVVVVUYoP3BIIT1kW3dYZFNOVi9h'@;
put 'ZHZHRkhQbVdmS1U+K10/Zy9OaU50Ni9ZeUJ4UkciJCIyaXM+cy90SC9RaGhKRXhBLz46OltaWzhnVDE4YEFMV2s8UzcqLzF+UEElIjJZW1AzQDpkWXI3O1chTlQ4Nk1QOCt3Q2VGITB+VmNbNmVOdXJkK0xoSH55bTo4M3BvaU9UYyg5QnlbKktEO0tIXUc9O1plWUR9Mlpld3Yqd2lXeXpqMVJK'@;
put 'fG1rXkx7R2VwejNYfHwiTXE5RXw6S2k7OEozVz8pfXl0W1clSm4iSDtpMDhmJCtNWzF0ej5wOjlmeTB2NjxpWlFadVZrOmlORis/ZX5JN0h8IWY1cXs/JEM0L3BzVjBhXWdkeWpgT3toVjcqYzhqWypAcEk7aUQscnskKU4qezVRQHgpbmZVLkEmbFJqbG0uZU1NJXN3KGlrQHkpWyVnaFdZQC5B'@;
put 'JjUxLyxaaSRhcGUpMWxOP2dPIWNxPExEXl5mR2U0dk06PCNHQjlCRk45Rl9FeUA4Q2xyZUJMRU1SIVl5OExmfEx6S0UwZDwiQnxIdEBoUDo+bE94eiZxIk4jLix9U3pxelBMPE19WCw0LylXO1R7NHB3N0tWbEx1TF9NVXhYfUhXb2xgYURQKl5XISlKVTZpJjRxaGVXM19uTWsqfnB8czlLPG1f'@;
put 'VTtrYV09Km1TO1opaXhRemNIQSZfRjpRQlg2bTlhQTozZzdQaFYyYThXW2ZfNDI2ViRQMVVhWUtxVHQhSjpxW1JqVHEvQH5AeWdsYHNvNlc4MT1td2VNdGNucXg+ZiFMXjtePD0zbGA6RHtUL1BpeVdmLnw0fGlxPndvOXFwJiVMPyhtLCNnVlFyfXpCQDhxfXomVn1DZm4kUGJ7XyozaW4+a2JN'@;
put 'YTdhOXosUiglPmdCXzRdWzVfdjwsY1JycWVsQGFDall6K1ImWV5dYyYxOUcrZnAiX2JvSWQpZUxgZTlVMSQ4JEt6RkR1L1k6O2I7b3JDQzxAN3JjLEcwVH0+VipGYHIlMilJdlluPUFxMylCalgvbltiQGFBLEglbjwxTEtgfTIwUWZTWGdGKSxfb2A8TWNRKF5bKzA6SHQlTEVVTFdpUiU+ZyVm'@;
put 'OUFKfHolWjRiWGR8JjNnPThyYz0+YGQxVVUkVnVoIzAyQjk7Im5VK0ZbMXg4fkNrNyIoJEZFfEo6S2BGY2xvbyZEIzs5aTF7Sk96ezRSJENWaUB9bD1CbFF5XVVoent7UnVqYHZ6akc+dktOaXt0OnQ9ZT5yNEc/PjRyNHQ/b2x6P09qZl5ESjk8JHQqdjEsb1d4TlhXLilfV2p9VGNzLytXc1Il'@;
put 'PXBUW1cvS3NvYmwmPXZCNUVyck1gUy9oRT5dODlZck1UfjpyJmw6RUx2QkZIZlJzZWNvR2VPXi4/PEt+SD1dbzlsJV1CSUVCVTVVZGgiej46RExJP1llPil1MSFhdil1bmBkQ0lBfVMkVEhDWF47SENRNzNodHVdQF5iTVpmRnZbZzB0OSl9d3Y8JHN3SV15fCZJaTRKP0owUjh8UD9yInZHJWM8'@;
put 'JXxSfGhlLkAmRnBQdEVvWTxwaHR7P2NkNF9UKWdGe2A5JT51W30wc0BENWgkS0NvdykzWyl+Sy9kbFUjcXdIT3pEI31PUFYhYW5gJENebiElfTlMQmxwQ3VfQS9vKk93NT1sQmZDSD1TaEA/WGNdc0IvU3BHUkVbLGhnNlo/PS55RDQja1E6QGxdbmhyL20rKn11SmZWWyFackB8PWcuQ2BdZl5l'@;
put 'b2kvSENKPUF6ZEptO1lXa3VhfmEmPmdiMVVoUFJXMX4zWSRJPE0kQ0JMTGFbYC42IkR+YTQsNFVWWDhWe0BdR2VZdHFzVV9OOFZgUUNCUXJoTFM/Tls6NjBQbF1yeCMsQzJdRDxNPTFbfTgrVT1JRmR+MyUySWZmdFR4M0U9TFYvXil4UDs8X25vR0Y9cj5kdHMkMXBvLD9aKTgkUjwjUilqcyVo'@;
put 'ZT4xMCg2fmh1NHs0Yz9wVEQ2KCxiUUYmWmoxLEFePERQfm1gb0BqWSI3aHwvKmwlbCI6L1hKQ1Q5JUxTbFV1NTI7RGErLyRwQVF3SUE5O29KYlpmdklDWj05YWM1KF1lbG1jU1Usa31+eGIvdjpbX3E+OmM2NF9zQl4jIV5xcVhgVzBacVB8N0RIWzs/b2lCaE06LyZYWjRnaS9JaSZQdmA3OTxo'@;
put 'OGguJkchPVZVLzxDOTZrOSs4Z10xVStzfl4rMzlzPFszVmJpWjx5bT5EKDFmNHtxRVZ3Imk2ODxgL1M9ezpVb0UjQSZ7QDZzJlQzcSZUTF0ueURwdX5RQU09UEYwY2Z1TjBkPU51QnVGZCl9RTFDLzJSbElYMj9ZZTE/WWVQOTdbelJVWzhWUmN5IiVvRT40PElhVShuJnt1UmNkW3o3VXJRQDFN'@;
put 'USRkaF5ieWRmNGAiNCZFPDhzRywqN1ksbnZTZ2xGZXN4d0VqRFB6dj5udSZjNmNTUyhXUyRQI1tTcHEoTDlgQ3p1XjhxTlBMWmQwQXg6TkBZdFlWR2MuVCVmNiZ3SWxAKlhBKS8/PF1oYmgxLHZsVnVVa2cjaTsqNj8zdlR4JThLaGY0MD1wK15ye1peRTs5d1ZDZTZUaW5admE0Z1VsVkUwN29L'@;
put 'IVdxOCw4S01zTXxPRXpualIvbz18Vkp3I1g1Lk9VITl8Tk5TZygrb3M8djhvOGRKTjtASFBxMEpKUWF9XSU3RDkmU3s2XmJuYEVLWE5mKUBlO1s+ZTpLLHkkTD9eNyk2d21YK3VHYihsL0hEIzYmJipJT1oyZShwaHQufjdhKyFpRV46ZEI7bGZ5U1ZldHthK29vWnBORDohOWRJajxMTzNZcGtm'@;
put 'Tk9qJmsrZmQyLDZ1b0BBUU1bencwNjJVN3xaWUAoM2ZWXjBweGw0bjozd3c9XXNOdUNeenF2N2B1eDUzTyl8Y2VtRk8jXV1PZSEjTUJyYCpiNWBtdjQ3ZkJqXiJuYFtVUTheZShrd1V0Uk8hWnczaW0zS3taWWxBW0BMRnc4fWkqIXN5RWU0NnJUUml4ITA+KXspOy8iRjtLWks7P2Z4N2FNO28z'@;
put 'fXs8RmVCcSF6MmtaYSlwRyxjbiZTS1B+dml8YFZRM1g4ZDJ5W2o7NFRDODJUUXNhaHsic3k7M2tAOSxNNmQjdyguZGU0eFtiT00oSkZifkl+TTh1ZTYmYnRITXRJfHRdQi8ya08kbkhmZ2ZHQktLImk6SylJS2Q0UDJrXlpMQ3tgS21CPCM4dmZdUGo0TUt7dytkOkY3TXxIVj9uOW48RyF+KlE4'@;
put 'endycUwjKShObD5GfDI3ZVE2eTVgITMvbXNvZ11JZmBsM0AkL1JGUDBkNWZhRVt1aW9hZS9zN0BHTitaTTgpYzJHPDJwQypEV25BSypYanFYODtmZT5NcmFwcDNxQzJPU14wPSR2IjgrT2I8QXJHUnVENF5eTklUSTdKXXVmLik9QVBdeFR0a1YxNnRUYEJSL040KiRLRyxsN0dhTEJvW1RvbEEr'@;
put 'cGNuPkBATT8+b0JJNDZ0MHNxUXhucTw6ZEo2QiZLTl9iPk0lQWN5YSpxMnQjZENIU0N7P3J1fWh0dyYlT2dyfmBITm1GWkx7fTk7P1huZjxKVWFVXlVwMyY5Ykt0a2tVdCp2V31DS1UyLHY9dDdpMC41LCN8VGlocztufXA7Zm1bO2Q5eStbcVh9Lm8lenhoRjpqeUZmaV9ROm5HUW94dGhMMS8z'@;
put 'UTBHUjRfMj9wO1RVOTRQVzo4d3EkQy5Ec307al45a0lWWFpSN1lCN3MkKURQWFJQVCwrRCYyUkVITk4uOTAjJVd+PT0kZiYxbTswLHtHIWdwVDRCZj0hQjxfOCVRTWZFYml1UChIYylmSEF9I2JsRHQsP009dFc7V0IiLnFTOktbKzFSUytkKjBFeHpgcV53fmh1NHl0NDJKdSp8QyRfaSxpXTo0'@;
put 'bUh5SnU9W109TjVOSkdYSzEsWWJTXmB5cUt4QjUlPnRJXTRyY35RZEROU3NMcCM4U3ZsfUYvT00zVDRoNVovREpHMnpYelFwUkpoW2h6cFJmU2phckJfZmg8YDNnYWNUUDQuYFtePX1oS1BvQ1RaKEt3MnhHKSZhQ2VGfjRicUA0fH1GLHlFNmtALmRQcGB0fkhKeyVoWFpZVmYpZU0kfUJLMVJG'@;
put 'ZHBDZCJVOndfeVN4OXlxVjZHaCkoM2NwYlRmTEBfeyxlWlsvUkNfU2YqQFlWUms1SUZyQ1hCP0o2S180MmJjUFZlOUZfJStXTEUlMFA1PDxgaFpEVXI5PCImRFtKLipGWXxKMH1yQEc4fjsmK2BMO3h3UDo6MD0+SkMrUExNb2NVQGMoN2p5dC85Sk96d3J7UChWZWskYWtyRXwrRXBga0A6aldj'@;
put 'dWslUi9ASDNqMSZ3ITYiTj1hTnIsMmI8UDZ8Y09sekdPT1FbdiwxYTsuP3VlYyw6Mkplfi5rJiVnfV5eM1FJfUJFXVlNL05mNFlWOiE5dlo7emJmTjI7R1JlNCguZj4oKlpjQG9pVy5JPlQoVHxHXlhtaWlASkhbdURGOWEhNSVdTWdNPSJnWy5yP2NbbEQ3WzFeIklZMDFTXSUqKjJKY1RBbCp9'@;
put 'fUpNJml+dF89RCZCQ35PT0Zha1g8XkNyMng4UT1EeUQsb3pKUU9zNklPLFhydFs/cFR+RzRAYUQ1c2BGPmpRPVJmS0ksWmRzN11LUjx9aypIMj1nKy5FXTU1NHA8RjxDMGcpPitRQDtoeS8qfmk6UlJpMmJmVkBNIltJKHp6Ql1sISN+azpOPWJGeUI8VF06Tj1uQnpHY2t3NFNUPTQxRUxte2lC'@;
put 'Mm0vVHZQW3kyVjxNazdSJjw2NnBNQlNIVVFKO3hePjl2MTgrU2pMeVI0MX1gSG1TO1N4JixwXTJVdEA5OEQxSkNLQkxZZntEWWhYQjU0NEBQJCtNPHNEInwqUXVMOEdWRGJuLENma3VzckAjLntMNEopT1s5YmQmImRKc1hyfFhtJCV9S2ZoVmt3a0M8O21dZ3N4VEAwbUhwOFc4czghIiwrfDVU'@;
put 'K3dheFducEtfZ0t2am5JJCU6XT9fPSV+R0BNK1FjdT51OUdMTElRc1htP3IpU0x6W2BFTXtzT3lpc2NDOlI8JTc4JTAwdkJVaXl5fFNkYXtNcy5RNmpFcnh2dyM4S0Q8fXAyLD9DOW9NTEApZG5OWC40MjtgVl9AS1F1THVmdzVeSyxQVHVGSTwqWURPbT99Sjc3R3h2RSFQOTAxW1dVaWNoelgo'@;
put 'OE1DV0U3bXkhZitaKFcqWGU7JnFmPip2e2JkRFN4Mj1FclV8bi5wRGJ7UkEvRzMlNyxYQlgrcTQ4cyM0YTBGW29BMCY5LnVROE0zM211WFspbTt6fH10KnxRSG4+YXl6eUdleE5FMHxAODxCdnFARUZeUH5OWUJBVCJ5SjRYIyZCJUUpciltQUopeF1HVFRmOUYicENrX2FteHM+Zk1JJk8oY3hn'@;
put 'YCUvNkZEanNbR0NrdylIPFJRc2xjWTxPS0FeWnA8UEVOXVZeL1EjX0dGRk4xZXNsUlE7V1RgYkIqRW59cj1tVXQvXSFkWDhXbT8qVG1JNUIkWSxCMVF7VSs+SWFPeHpWa192KER1I29tSEJBSnlKQ0tQXmQ4ZDhURDIob2JkdFlNK2I6VWJrO1Y1fHBLYFEvJWhUNVk0dDsyJlFKKztFREg3Pytn'@;
put 'XWY0bldWKytTLHMyUXk1RDY1Mi5kRDFIcSx8azoqVSlpLHl3OmhQLn5lTEwyP3dONDElcGh5VWpyemMlZVkwfSohZFkwekBaKWxrdzN8eUIrPkJ3R2V0UmJtcD83I04sZ2M+PTAoRllhJFU8IU1bYGJjeSZWWixUdTBwL0BXXl03KnV5QGxROltJZGVwYXwjNGJuV1R3TSF8PD0iJiZUbTBYQGd5'@;
put 'IyVAdXg3ZTYyeSlAQDFgRF0sN2kxZyhINTUjfFA+VXUyKVRseFJJMTBwVFd8b1UoLDU4Zm1vYHkxSX1kYzBvUkArek1SKD8mSHwxcihgX2Mrb05EVVZ1Q3c4NENqR3d8WntULjo/Nil3UERoR05sM11PNkZ6fVEvVU8zcEhxXX1Sd2xMVTdtLzphUTRQLjVNTHkzb212dkR2S0t5fHc4enxsQVVd'@;
put 'MCt2b1V9XTx3Nj59RkNHemcmPW1zVlAuKyFkRmRGSVY4UXJxSGt7VHlVZVIzbTY+TTpgQmM3YzJRek4wXnpaWztHOzpJaztNaWNtUyNiNWQ5ZzdgPVokPHdIO1slLEUzKW5SKnE3KUNTUjUlR1lXRDRONVpbKnV+emZrUko4eHE0dnMqYztwUmFTb2l5Qileb1Q9PXgkKWFqLztiNyltYUldKjo9'@;
put 'Z1k5N0I+OmBkJiZTRDJWKFtSUGRJTjg8M2U9eCZDXWZoNWljYWpta3RLOjYhSltZNi9zSEdeIXdeNyt0endxZSJXdUdOX19FOkpGbF5bdz85IXVCXSJ6d2RCYSk6N1dXaUlZV2pKJC9qZWBqYF1qfC4ieFg2dWVeVmhRP2FMVSpRImRVU2pzI19EOiR9RFFQdXhZXUZdZ3s1e09IYz1VZShxaTtS'@;
put 'MWQkZ3RrSy9FZzR4aFY3MGh9Q3MqIismfGxgOChiUSNzMXhTa0cwP2dSfXYxWVkzQ11JNnZhbmxgMC52WCt8fEtTYWBlaShpT0E0ZFQ7bXV3N11tKS96P3ZXbmxMTEsiYjFPQ2olODEuOyJYJTZpcys7Ik84X1I+eUpbVWAhfWNHZjgiYmt7MS5MS2x8ZHwyMk5NdyM0RD47Li9oXUddQFtba1Jw'@;
put 'OUslMUFNN2lGSDdSYkptUiQ3PjttcFo1MTZQMEF6cE8pXVREQEBAQENLRyFgVE96c0hLVE5HZWJsVEBAfXdpc29lbiJLKjV4SlZnc0Zje1BSJTBZOC5EJkQyT3ojZT0xOSx6dUEsSmZycDlLJDs4Z1RNfk86a3laZiJgZSpRclpyMCpoSCp8dDM9LHIzQXZNMHk1VlFySDo+XXAkYCNAKU1ja2Zw'@;
put 'XVM6T3tHUiElYHlYT0VhWFBZYWFHXzB7bUY1SytCZ2pjRU1ddU57R1t6d0c4fFZ0KF9NWmlvV0V+b3c7VFJdaSN7Z0N3aWp2fl5hWjhkdWE9cF0kJll4L1hIcWFpNlZ3QH5jc3NCOU53Qiljd0F1blcqNXJNcmF3ME5pTlFCNm4xRjUzRnUjR3s+VExdKHVXW1NSdzMyb3p5KSMpemw6a2k2Zylp'@;
put 'aHBHe0gqS11fRlo+WE9HZ0RWcDVaWHY+Sj09Kl5Qc2FwI3pQPnc9WnZLZGNnNnpNTjtWR3cmWiFDfXg/THl8YHBlWThbN1hYK34zSENObFNEYU1aOmZkb1NtSDxCR11URUhqeXl8VjRhaUldcmM5MiJvNm9KckV+IWYqaSR8M2UqaUJ+L2Reb11vbUlzR3RhI1khcyZOSHFqdnEzWDYwNVhxS2pK'@;
put 'ckZtTTYoKU0+eHx2Jj5QPSpLXVQhZUpuNjspJSNVSGYuL2BPbnguM04lfS9VZk81aC5bOD1PXyFldj5nfXxgSn1BeVU2MDUoOlZHWVo4Um5hPn10KkU3PVlCTGY2YWJeITooMUwmZU5fQC4sIW43ek1FczUhV05rdmpsdHElekIwfitubzg8fn1HV3B7alkkWjR2TG53LkY1cTNGWUlTdl47V2Vy'@;
put 'Vik5PTlJfVE9dG1hSCpFPCVHXnl4fC5MR2A8VlZyTUBTWiVTKy9RYks8dEN9O29fPmhgaDR7TFJTYkNUUSppWEovWXI7I2xeS2hxWWM5dCplJEhRUGllPkEmYWpJKWRURGcwSFUrOlJOaU5GS2p5IntwPFFeKjU9b1Z7KkBOQWMoflBuQVtYKHg1eHsrKXE4XzpWKU8rMThyfVNPIVAsYWNyMGZs'@;
put 'Yzx8VVV9LzhsZVEvd08wbFgrUXdYUTh5NlYxK1svd1JIRiZsZjBGTyMqfCZ+TlBfMU5PS2t9VGMsPjBATD5MK1p6OC9JKTNXV3d6bSVmNUdqbG98Jl1IbHVefnU/Zj5JUSt3O3VYKHRRdkhbdTtgfm42TG1TIiVeXj1JQkhVK1pVXU92SGtZX3pmVkoodVE8JHpDMGc5YFJPQ2VDdkh5VHBOIUN2'@;
put 'QCFWJVY7Qi5YI2NkNHliPGcvZCZsWTBpPUs3QHE5WWUoIUR9SlB3e1tuOHtTIXNRN2tFMTxDWCRMIWVMUi5QNnBoSGYlJmRwbEkoejZOekVtbCYuUWsybz1eSiVIcGQpQCtFL09dcTlBKSE3dmA6ZE0raVghbDpERiZBPlM1TFNUYXxjc3s0JE1ke1pMVzJJP08zJm8weXNLKVhERCl+cU0kWVhg'@;
put 'RUZ2IlZebEl9XUNYdSNrSmVBaE17NVZTeV1COFczYiZDPl4xQkZ0Rl94e3w/cTV5QCgvWj55ZEtCMWpvSHZIRnN9WVMzdlg5TXFbME9jZm4vSl00ISlbOlMiWzR8c3MhYDoqQkhjSTl9UkZTKHVCODY0LkFNZG5NUnpGTSxMKTY2VX5qbiVHT3VYUE5ZeyNXeSJCNj50LHFARUwqMDpIeyY/Ol5e'@;
put 'QX1pZk01MXUsT25gR0Ahe3FFVDMqN1BQPTsqMyN4Iz1FflgwUV47Kl83Q1clbj0qPm88flVnciUjWnxfUk1QXnJxYmZFKTYxZFVzeDxaZ2pDT0didTspI2hNOFojeDQlXjdPaHA+I0JHPHQsW1ZzU00xeCR4JV9Je14mZ1thZDo3XUYjYTxFIygyUVVuNi5VMmFAMSJgNUg0UEU4Vmkoe1NGeyNT'@;
put 'I15EQmUyZmU+aCw8YSZNS05aUkBXJSl9P31uVzxja2pRU2JWMkNFS0JLSnQjNiZdQ3k4Y1MyeGksNiY2WjAjVWtoU3cvVTlWX1BpXlV+ZWM9NnVpRVZUYF4/VUpabmtad0c1XVcuUTtXJGkqZT1vMUhfbGV0UTo5UXx3OCUqViI4PiF3MUhUbkU6RzIkWi48dmtSO3cock0jPVRoclZmR2U3bUEp'@;
put 'cko6PW9RNC86eHZQaFQ4LDY9QyFCXjwjQU9HOzBoP3dtfDYmenZIaUJ7WiJuencxO2ArPngpUlAjSnM0WFVBN3hTNmJoIyY3K3ZgSyM2dF5nL1ZjUWw8UHdAIWksbWlPP2Y9eDN2WV9OOHdtSWI8ZEw3clVLaklmOUk4bE8hL0ljYV1WeHVAZjhXTWY+JFhiaHh4b3ZOSkBvKC8vcHNHV1tMNF88'@;
put 'KWxQMXBjcS9AIiplRmArJWBta1BDJHg1TT5tQTksYHpmSGQwe2lAe3dJM3p6QDA8LCRiRFBmMHUhOX0xPUpkRFBkUlFfOUhaUzgyWXloIVZ0a3V9UiZqKSs8KSV8O2RiRm9YNmlFOEsjWnhLRGRibFRWcVhyNz1eeltJZUwxVjovXzNaZmB5NUUiRnJxQzM2YSIsMEdud1c9P0I5fX0xPGxici93'@;
put 'SEQ+VFFHOGtfdmBYXjBvb3hOaGB3b0ozeyslV044VCVGZjhkQHVYYWNQZmFsZXVHL3F2MmJUZjNUPmdWdkJfYjpycmhFW2ZpfTEwaEhee1tzNyJMfURDOE4xPiRsZ0U4SltBaVM1Q3BOOFdLOGE0MWU2L113bTUzTmMpdTYlWVdSaUtSUz8uRyFxVkJiRlBuK3xjJFQ2fD9uQkwkZkcjcSYiaGB3'@;
put 'b3JtaDwwbVhfP1lVMn0qLHdHKTJofGxxZFBaKjtZLHVSdFQ4ekdlO0krU2lsVWlscVkvZD0oelEvcW1WaThKPFQ3I1RtUVJsVF1qbDFsdXNgTEZTP10+TyFCTE1PSE5xZldZMDh4UWV4a3AoWlRFZilMfUUrbEF6LDBnQ31eN3VIL3RhQCM3Mkd2KERAall+RndiPzY9fHgxflB+WDpwKFAxeFFL'@;
put 'Zyl6dzJoMnRyYGVjS21EamJ7NWJKMldzbFNzMlpDWEVgTm5vYik0UyMkb2BGUCorRWZqK2lEfWUrI3F5LztMbzYuXUBMS0ZdYzYrZH17VDZ9cyFDUG0manl2dWgpfT1AWmkvJFZgNTI6Pz1kY3d4LlM9PXRBfC87dntRXUBAfmtQUkNlITt+MHVpX3FNVFl5cEU7I01PJitgc256IXZmb1BQdkhL'@;
put 'UkAqW2BqM2BDezRYIklXY0peeiJ4azBDM1ghOWZLVlpybykrSWB2LyZ6V0kzO0wqKkokTlBQbnx5cSoiYVIrPl98dm1yL2cxXmZWaSlbM1VVQ3d8dysxTVs+e05JZ1tvaVo3QEA2dH0jI1FAckhSYzNWMX5ldC4lbE84V2FdR0RYfG9SWlAjMy9GOjk9OVk+Xi5PXms/aWZOXlVzI3BDOyhWP1ox'@;
put 'bn1WMXJpTyF3X0YsRmZxeDhqVkp7Uyw2QTRWVUdlWk1DZUs8anQvImV9TWlPXldyaCUrWH5xLnlrPyEmWEIiekZgQTFdUFBVO2E3RCtbIjR3WGAlKEJ7SW1jVHBaQD8+RlhFRyZZMyg8TGFMNDhITSNma2kwJDxnQG1lajdoM2EhXShkaiJSSDkmSSgwKGtpPkkrY2xjd3p4USxqS3k/SUZ0dEEl'@;
put 'QUBYUlphRUFnczg1aXArak9aaWMhXUtGPDBfbEVwR3s5aDspfkl8WG5Jc1YvbmcqMSssPkZpVmB2Jig3UlJ+RXEzLEJVaGc7aF1MKHF2SChOKngreXdxbFExOFRvJiR8dnBmfikzV0x1NWhSemdeeV15ZzNhQHVlZXdYJUJyamZyPGdqOVJ9enAhUm0vQyhDZEVKLE51Q08meW9KWDdvfjxyZnZb'@;
put 'VnN4Kk1RYyFzfCZ1KSEhIkU+eUZvaT1sJSw+ajJsOkt7YUNSKX1WUUJkSyxIVTlaZkA5KjwqP1c3JnJsOkNCOTtTVXN4b3p2fm0kKkdDO3VDaEtSOUkvMjZVRlVHYy4yOWslaEBaa3pgLkJBSl1FUWZWSVAiaTpDKn1OYSxUQyM4MD02b18/TUpfc1AuUSUpL2o/QFBqSk8oRSlTPiRoJSMsSTdA'@;
put 'JkQ9eUNpMmEkVDlSb1lbL3pYO1M/QUtsZV8/Qm4jRSNMKnFuMl83cDVjUztvQXE7cV80JV1FZT14WC9ZLyZ8VDtramY4aTgrIW9kSjxWXSx3a1U9WUZMWS97P1Iue2VkOjVyKXV8eCs+TUlwLz1veix+TyE9Rz08YmZGbCVPaV0qeVY7dlNickdpN0dgaWNxcENPQzJoS3RDK0txa3F9dD1CU0FK'@;
put 'b0Z2MHszcH1HcTdqdHhGJnVJK0FKRnFUeWJFL0kvcGRVck9XYDc7bXchQ3NnPWgpMy86IUVlJT81XUtGMjg6fkQyIStsKD8xRjw4Tit+NVVUIW8vKjJdQ1tMSiFKXiMsVHNbK2gvd3Y9K2pDKz5HO2x0IylZcVpuaWZeW0tQMkElLGB6ZUYldj0vR35JKz5yRSgmQW06SUlVIXAzfTxadzpsMHts'@;
put 'ZloxaXYlMGpiZ3NYKCY4fn0qUjxlY3lOOC98Ll1IYDRgKjxqdUh9VSlnISM0SzNGUWZRUGdOOFFlQW9eT0lQOTltKnBuRy4+ak1KZkA6cW1RLnBMIXlvZjVhZFlyLn5yelplVlVsMGJKZCs8YkRaeF5iaWZpOVdDMXFuPSk2aHZGTE5vaFlEdTg1e2Ysaj1bQmIrRGhwQC9sdSt8clRzek8pJW1z'@;
put 'TXBzNjFDUzlUOiVxW0NCUEZxL0ZaZUR1QU1dd044WCUpaypMRmxAaVo5PUg2TGdBb0pgaWBePUkmQldSOFU/O0BPcEA+LFQoOUhZcnhTRktxVGNwQExNQ3xKeW9Ycj8xMCEkcT1iWXY1Ml0/KW9tLCs2K3hAJWJUREtJOl5tQGV7MW9TOHpvWVJhPjhFK1E7USErejVdRWNja1NbNVZ0XW1dNkgy'@;
put 'SWUrajZFK3RkVEllNWBeSjBxMi5kZWhlfFI4TDt9PGhwVTVjQHhkTE4+OGtGdDpHeFFCUChwaF0xMC5IW2A0LDpuVTJNcX0lQHNQMGY1Z25rfmEkYkAxTixmcGVhOi9tLEY2ZTshZmFIMF9CJkh2YCEqI0deJHpSemtlYFN1VDosYVJVWz45IXIhbzdAVWlDWGd1dl1jS3heKVhlPipMQXhgSUlq'@;
put 'aUlNSkMveUVjan5SKjZrYV4/QjJsRS5mSEUqPz8pVFJsZWcxJVIldmE9WXA1VkRMWzY3Ln1ebGFOODAieUN2MHZdTFAzYS9SYl9EQyYub2lfW1lLbGNMaWxvR0xUSjN6ZjlhdFE4ViFPMDU/SHhSc0lII3R8WiEzejJXISV1UktVYUk+TlJzVXNkRyF7QGwlckBeYTZOaDY0KFUlISt2R0dgX058'@;
put 'fVZsanMiTT9NfV1FS3dnJEFJWS5bKEJ8MmhmZihLdW1FRiokVmFnd2k5UFghdk5fR2Y4c0Z8WzZeOWQ9aV88I0Nee3dAQGAyNDZWbDUlV2hAMjROPC5LbjNBRGl3SDk3a3kjI0NiV2xGNHtOX0hEViMjQ1RXJUNNVGxhUiEyTk4pcz0/MT1YWy4mWWQxfV0mZi8sUH1NemRmYXBdVzchWC9VSHpd'@;
put 'SSR0ejlJcHRjV09Afl17fmxgUz4yNEZNVjQrI1Ixd1pbNjg1ViR1OiszSml0WUQ4LnJeREVAfExZXTB2YHEleSJxfEBLX2MmIT1tUXg+KThRc0NeT2QpOyNxMCleTmEvR11XZ3NzTih+dTpfdkhqRFl1P3dHYDY4JGt+cl11W1FmNG8qTyJJNk55cEc1OlViaGVddlVVIS5aMSJqPzRQazB1Yml4'@;
put 'RVUqQkJDeEZIQ29YciJtbntrKSpKPik3fWFrbjF3Ki57e1Z8QVYpdjcyVyswIyRvUHZIJElJVVBIZk8vam14JnFAeFBIUDpoPlBNSHdHcUdRO15FRFNaW29wLzM8TWlMZTI2MS8vdTwwR0JQSFMhWHZjYXNUOkAjL3p1bH1mWTNnYklxYHo9fSNUJV5iekk5XWJwUk1jaSw3Oyk1JHh2RSZPeUlx'@;
put 'SVVkJjNTbTpjeDlkQk1PditZMndmbCp3NSkjenV2WXlCWURWfGRXPHxDe2BqW04vXzxlMHo9VTg/a2ZkVm1JanwsdTNhViNjX1ZbalckO1AhIzMkR2oobEVWNHFnZGVzT0hlZ0deSSsrR10/bzhXbUAmK2F9eHx1Q2phNUF9bFFSN1BvZnpXWzk4aFQjZ1deaXAsdF90K3c1KTFbXj1iS0UhYEds'@;
put 'MjcmWWgpMlo8JWNTTXE0Pm51WjZ2fEV3M3pocnM3by4/fjZDSDsyQzd4OmslOjJReEBzTlArRi9UQHNKKHp5QHNSO1BfKERgTmNaZz00UDJiZk50ZDx4Rm9ZSExIRXE3Zngod2pJNTEkZVI3VT80WCRdJWk3SnNJWHR1dl45L2RVezYvNUIwK2dtbFtSJWNHOFRDKTIpeV4sMEw/PHt8On5vMDJb'@;
put 'c2NaZGgkSEBPdks2d3wvKX5fe3w3VkNQbkh6ZVghQ2NkeG4vbHtFOHFnP3dbXWQ/QFM8Qz9bZk8oRnFyR2BgRTZlU2ppTUF3QEJXMXJuclB1TW1pQTx4bjdnOUZeYVlXYSpGSkMzLHV0KVl2LmtnfVNRen1wVDFlfWFUPCNdazxmTXVgYzlJIyJXZW1QZyFXdHtZc0RWT3MhfFlrWXI1cUhAV2lM'@;
put 'TURIdGl9VjNucn17Nng6KD1RM0pwZHV+Xm1lM15EVGh3K0o1elU5YiNRTWBbMkJ1NHg8TDFlR0xQKEdyY2tebXUwSytBb0wqOmcuZSNebW0mU208Q0puJXl9LyVpe2JaJll5MTd2TGdZR085XmlVMjVxZntQcXZLInlRd1d0OENEWipDRC55KzR8en5xImBOXmFWQHo2MyY0QntHKklifVMrJGBX'@;
put 'JGJJO3goJnlBfX0yfF13clNfO1d6Zj4wOERLKkJ0bFkxYWRoRzdnWV5yYlVgbWdlOVd0PWd5ekpEKkQvPi4/MnVILHB2YDw2WUJfezRrYmpNRzUscntFIUgvUksvLlheUlFFfVJbZyxjbiZTXkVASFtPO08sT09kYzZMbzFOZURwOyU0QkhyRVRYOmAxLGJReUJUSVZmTlAzNSxYLHVbLGg0Jk86'@;
put 'Nl06cC8mel06YmR3PDcpPCtvd1dIKXJCNEdXTGl5XX5qRl0rITZUSDh6OTQsdDNraUc1N15ZR05TdW45dmtScmBeLjg8LCZtTFpLWkJrXk5fSXNUXV4zKy4pJm1ZWVhKYlFMYVdNM1hzaihbSWdeLFJ8W0VYLHZgTFpObUV3Qm9fQDU1TSxmZHpXSyxYMix3dyZnUHhuI11jWkxdaGt0aGoiO2ZD'@;
put 'JCZFZE47N1NQX21XMVs1UzosW1p8QERQQFoicDY9cHRXXyJXSn1mT1dgcDI+W21laTxpNXNgOTJQOEppVDhKaU5ZKTVgSG1ESDN+cT1gOyo1MTBKIkIyR3VkUk5oTTFsWT4uYUhWRFkrWzpJRnhKUkI1bXVBJX5QbmZWaHEyLjRBQFJhVUdUXiUhYjUjcjlXX1hObVYvLzA0UWl4dFYxYHA0bHk1'@;
put 'cyM7eSpiLCJCNj5CUDMsIkI1aGYxQyI1Ny85JWBON0h8S0FSVz5dNi5HM3h3bDxuSyt1SSE7QjZlZEx3Z0wqM2MsTjNIKko8S2FAJjR3e1sxdkQqaXVUPUZpNENSQSNaYDJiKlBaJE9qe0txYFZkaDlqdFF3aGApWShdN3VLaUlhYSgwNG8qekhESTx9KnhPYzh2PmlXb2tYTiFFZkNKQ1p7TGJ8'@;
put 'LEUvY0V0QmRnQkApbnRyaX58Q21ZZSZbcCRfQ29pfWhCfDE3VUZ6bHNIeERdP11JeH50NyJ8e21FRGx5e1lmOCRKbFBZbE4vUj5nTVp8OU1zJjdeKjExeChbcmIudXIlcXVZPkYwVW1Ta1hoOjE1Vnp4OVA9bVZjQGFqWHR1KE53emVGQ35gYSFLU295RTVYd2swZzo5ZVFKYkRmc3AjLCZFVUtV'@;
put 'VXVyVF1pS0Bnd2ZbNllxSU59Lm9YMmljQ3RbeCxALiFdQl1wRiV1V1V8eXYhaSFRTz85PEtPV0VQXyRPWCVNSC5hPHA8Qitvb0JzMWJxOTdPbHpJXUIpTzFRZm8hMnpEfT5pNjgwK1NXRCYqeSJkUGsoTGZfV21YMjRaPV16Zi83OWgidG4lPlckb3pNPkk0e3ReeUd3PEhINHs0NDx0fnx8dl5i'@;
put 'JT9CNS9JaylfcHlGPlQuLEZAX0U9OyJXdz1CTGV0ajZ+PWdZWWYxXVBGe3lnal9xP1hWR1JfMiZQNz49bXRUTH1UV3Q7V2BeRVhiXnFgI2kpay9+RUBmPEZAWnNVLkBlP14uOXxqdzg6TVpKUj0iVUVhXVhkL3ExPFMxeGRmUGNkayFgeGplcHA6XUxdRGs8Ij0mKVhCT1U2W1FxWS9pZTF1bHIw'@;
put 'T3ZqLlBNNV9KZ1t2Qm1GYmdHQF9jbSVwZlEvUjVzYHwoIncmcV5PRSYhaXhFaSFNaCxpPHhwY115ZnJkaC9LOTwoZE1NaTl0Q1JmKUt6KjNQMlF4YTs5emVxOSJbYSlfWXhsbkNoSU9wbU81a3I7OCJxOHgkOXQwd3Yha0c9QDQ9T09aQ11CPW9hey97bGQhb3JbcTJDOnpVPlRNN0guLm1kNEpG'@;
put 'Pmo5R3JrPithNXlEZTFCe2FCK1omOiErOV5oX0lHa15DYWs6fGdkTFkrR2xeYnpEQn49LF9AT2Z0NEEpP0BMRm1LKHxiO3VgO2d7RHd3R1E/Zj5ZJXZjRHNaL0wkMSFKfjYzbWVCRTwpSiE3TD9zen16RVBtKzwkd3glLlJbSyl3LExJMW1VIyNxWyVvUWNMRVBPcUUxR15+bWtgTltwQERKaVZm'@;
put 'TUR3aFhnVEU8PiRSWz1IXS5nUE97LlE2amt0YVluZUFxKCI4bWIwMWsvSz04Ojk5LDx2LFgsKjNsUEhWdlFrciNaNkJSP2AicmttTW4kRilXc1ZYMXYxeVR8LGNddEs3N2smYnAmIj93OHkucz1jJElOIXpjUTlXPlIzJEkoOF5gcXhwSlc/Mil4XnpHVHozOihAKEdGRisjek40Z19ydChTVTd1'@;
put 'TWQ8eCI/JlFNTj5qKWJBJlJlN1hZVS42dGYwKyxjSStMd1k3S2N7akxLW088PXF4VDhyY2FmSWBqODwifEl+W3R8PyExQ0hydDtKVypCREtpcUFofikiIWhDb1U4dDopWGFAcC50aC5pYHY7RjtRcnMkMXsmZ3o4fW1iR0ZmaG0pTTpnI3dtZ3JKeCg5dSZLQzsjMF1rfUBNUl5VYjtJO3BmUTVj'@;
put 'ZnxDPiF8QmloOEYzW0k4aiJgIUFDcGBpOTgqWGU3MjQjU3dLczdRZXROREMvUWheeHlzWnpEOSlfZns4a3JzbUdmbGguKipHc2BjJX5Fdnx3ZT1hKXg0TH5lP2osbiVeYiEuPHI6byRtSzRnQGg4WkclTFgre3ksRVokKlB5SkI5O1M+WSlLYDY1WFYoKHQiS2BpNThJTHo5ejkhVzVmeV1gdjtx'@;
put 'encyM0tmWEt3UlBJfmppOzwvT0ksUnFxe2lmLH14XU5pfGV+eU1MTHNbOEtucF5md0ckOFEvYVdmdiooNmV7OSVxY3s2RH50ZH1xNk93NSkkUVd3Oz57WCpXcXgiMmoxd3BhdyJVMDp1alk6JmI1KWBYTnt1JHdkfGc4V1F9cXd8TUhLMUI0LERqMDMqKlhvcmQyendgW1cqNkFML0lEMHN8bGx3'@;
put 'LH5WPlJlcSM1eGtCOyV8PWRJKmxzUy43XlFFYHkjYW1KZWU9OGMsamU8OGwsLjRlKXk6Kz9peUUhK2pQZ2crZm1hbXgxTWs4PEIsK0lxVm5gQjo9ISNbOCYvU2JETTdqTWs8TFdqI1ZDZlA4T3t7IWhmWCUrOiRFRXQ6Q34zaFA5RWxoNmhrcGw1ZmIxQHVTb0txUShZeCRnQXlPX2AxMVkyJHZ7'@;
put 'ZWpTZUlDVk5jW1BrQSxiayhNNHw3VkczKUYzKzt6MmtPaF9WLHwlKExpNVorLCFCI0RNTExhKVt4aD9oXTBjZ2wvYntVKmd7WnY/bi9YciFWKGhyZT5VKDI6OUVkYyxYKG5LYEFbNTZMLER4MERmaGUxXXNqYEdSZ2tlW35YKkRqVyRdVGhkQ1NeQFQyTWFSQGBLZlRlWmVKOEoiWlgkPXA5Lz5b'@;
put 'YVVEP3d2cHE5MDJ4NGNRIklrN0VMeGQ4RXohZUEsfjdTTHo1YypCZXNFW3VmIy5vSzl1JmxtK3VMPV0rND0ySmVaOzQsKnlGJileeHZWZmp9QENubFloWWVNcWppSzN5aG5RSUNGMiV9TlJNZ2NwSVgjaXFzTzZFY0VzdVszcDc9aXBnV2MhTFttMlosXnhRL1c5OCZOMTx3IV0hZ04sQjNjYGEk'@;
put 'fjAwPDIuP3g8bURadGFPeCNPXnlFRnIyPnl4azZoLG0pNjNYL3xqSiFOeV9QL2VVQlhQYj8xSmIxLl1PdH1IcDd8T0NRL0VqVCFadDQhLlpRJCFZeCpWZypSLE11ZHVMbjJiOntdNHw6KVZqMzpsPmxZMSxSdW8yeXE9LGBWJlhGc29DaDd2IUcxQU80JTFAJHUpRERxPXlCRkNaVm5pc3Y2Wlhq'@;
put 'QFI8OWZZJFpFTFk3YV1OaG1jPjBQIWNjPjJKa3JvTjR6RFQqYV1ZV109bG1nXztTUTpFNCVzQDYmemc/VUp+RzgpS2Voc25QLll2fSN9WWRvdlNvXWghMFUuOm4lZDIyM1VpMGBzQGxSXTFVT2YxYWx3RG5vQGUoN3NmZ1NOJC47cCpaVEJyNzY6N0tiKDxaTF5NYWslUE83RVRHTjpIdTR8VTIu'@;
put 'I0pJU09mcmY9YmwlT1FaL2BKKk1qWG1yYTFVMSg4Lm9FaFRqVFMlQFtvVk1jSzhRJTcicX1CMlY8UWR9Z2M/RnI/O2hDcERQe1dgKTpmQEk/TENhW1RpK2F9WEhuYH0lUSlLN1hYT1d1a3lDOjgpS2ZFZzlAX3VmfjE9Q3drWGFSakVoc1hFOkw4PFdTMVV+Ij1YSG5gaSIhWElJUTpLJXM9bT5q'@;
put 'bEdebipeUXV4cXxTNUdSLi5mYSwiRDxWNU1DU0tZfkJRYWt8SFBuSmIyfW5gaHNNKiojbXJXTFIrYXxZPFUoQWZgQGkjOWYlNDpELixGSFVPKW0/R18pWSU4KFk1RFY7eTxDZytXOToobXVMZk0hR0RSNmgkJiFlViQwaG02MXFxKTRKRn5dQjZkSl1iX3wwfkk2cDErO35oeEU/fXEkVncxSCRY'@;
put 'N2pvSF5lPjl6ZkpSOkJpJiZXUyg5S3JmeDE/b0YwNmxVT3JUVDN1OE9YWmFOcz02Z2NkeWp+TExEanI1STxSdzVWJF1tQ0ZGS0ovLGgkNHhkYDs+LGwpNG15X3h+QT5OSlYmMHdCXzsiOy4vQygibC50RUNTKkp3eC4qWUF5OipAP0Q6LHh2QH1uOm1YSFJafnc0bXtTPVl9bkc/V29ycXVuSXlm'@;
put 'dWNhbFVDL1lnUGJYZT06VzJDSXNsczFpdjliVGgqNmJdcy9XTXFzQmpHNEczYklYdTp5aiZTOz10NjhTOEwvbV1Mel1WaVRpSil2dD18M1hdaUhwQH5uPmE9LitQIWdKS3IrfEYpOT9wKng9OmBxZFM5aGReJH4sd29BcGc7InBaLj4lRk1QWiVQRFdBOkF7RTdTPVh8Z2R4Pmo8ViwyYzNeYWJK'@;
put 'OHhAVFohO0NMNy4pPV9CKEpeciZSSVRVbGdmQDkxYlRUcEpkVD1mUCx+Qls4Uj1SfFM9d3U6alUxVWEwdislKjY/OGc+VSoqVm9Ia0pwM0VPXzZdTXtEUkdiTmU1Q0d8SyspK1BeLmRVcEFAO3wuVD1YKF1bNSxiUWZXVWxqYExkO0o+LkxUXyJLVDpnTS9jWUIybEhPOT0zZ31heC9dajhpRHJz'@;
put 'JCw/S05mM18zZylvVnYvImplQl1FbFtINSpHcylINGdpdkRsOUlQaylPaWh+LGNMbnVBOFNCRG03KCReUThmNmRpPS5ZXkV9I3FwLnc1Ul9eY3VaUHcrV31ZNlVnKGhxazp2Wy8mUGNfdUVMS1lhMTclZXBLdmZqR2w4ciRgSipXMFpPXik2eVdyJHBiakV5O0YkW2l2PF04SG41NkR7VS5jaEo8'@;
put 'NSU+NHg5ISM3R2Y0bzpbVGBbN0p9fUM2WHJ3Q0Y5YDU2aX1dSFdfblshTmcpR1I4YUAqKSZNc3NiUWR0P0YjUk9nY2U/aTpbcnh7dEBSQzhtZ21sYzp6TiIwVHUmKlZhWm1lOnMhK3h6SiFucyEjdV8rNy9SKn5ebT4vP2g+fUpNOU9IOVZDS1UwZFo7OU1LRV03UUw8MyY0TU1OY2Q4KHgsPXIk'@;
put 'RTtmKFhgZl9GI0tRSiRWSVdePHdWKCVCPll2XltBb2orYXI8IlR4Sl1nSm9vL3d1JVlfaTtKSEt5aF5KaVUpKDJed1QhZFtLUVgxQ0tUX3lYZnw5JX1KKFgvcjgscDUoSjldMHtqcGxDenZpJnRFPzR5VF5Ubj9YciZLaHVHYH5WbEYkQ0xAdHFOIU49JltOYn5qcDlVPHtDNixTKlFXIntSd1Mr'@;
put 'TV4wLDV+QEV7YHFkcXVDaERfKFJ1PjBpUTdNNzJRXWxAd2BlQkU/UlhbMWwhcGBHWGd8XTBsUW5iSyhlWF95JFBzO0BFaztNaFtyPGRpTztZVyMqWWVGU1t1YkhQaykiaW4+WUlxdjooNThURCw6V013X3pyMnlEUzU8fG10UjI0ODxhQTRaYE9YSUhyQHFCbXMuUHohP1VAbHpDWDVNXyxwUn1Q'@;
put 'T31pckUmb3BGdUR0e3BbOEtRSk0pc2BLZGNqUjY+PT1IMG9CMWVtd0ZSOn1va1VEaDR6T1o6LDoycEAoMiFXVzMkeG52dGBpeTV8UytoYmc0JEglMj43WGh2bD5ZK3ciYiRiV25rW0VRUHgiX3R+eW48MytRIk4vXVBOX3hHRGtUSnpiWyg9aTJ3UzwybW84bl4hbnBMSzN5NkBsXUBNTnFoY0o8'@;
put 'eWxiRlBKKjB2SF9YRFYsbFE4R1V1YVpgK3ZGRzZLeSFudFNWPUxRJEVGZ24rIVtmL3d8QHJpfUhUT1ArIkciVSxKVD10QiNbKnxGeUBKPmtxaGooWjxWXVprXV9EVlgkeHJQSSh6fSgqLHR7RDs+UjF7T2hZXUJVKjNjV107bzViOk5sXy8qT3M7IWRUZEJHe3syQlFZey84VlFDfElgKCwwP0df'@;
put 'NCl4NS9pWm4/XiRlczt1Uz98ZyFze0ckQXpFeTc+L2tFRVEhbzdFJE8jRURlY2p7S2pdZndrS147PyklIlVqOVpocUQvIj5SPm01JSYvRnR7K3tnRDhyViVrenYqRGksKEh0TXYrT3UiR2Y/Ky9EVChEN147YlVYTVd2cnwrOVorNm54K2J8UzBDa0FONlpkK184L3JfUyEjLnE0S1N3X009YUlM'@;
put 'dy8qYkJ4UzFIcTY6cUQ/OGFqNyFgL1l5JXhZUGQ5fFZBOnkkLkNbVTosb3wqUTBidXlhbjQ9R2xHek4/MUl2O0p6aks5d19kZUo8a2oyJiszVFkoNlFXclI6RH5sTix+UThTNXtRInc8bC41dzRfakhUc3kwNyJZKip5YEVkd0g3NzJ0JXdZVX44fFI/UzhjNGJEMnQwY3VpUSxbRDEoX0J9UkVu'@;
put 'Il81O0xDMWMpMl17XSh8QTRdWytMUHhJeXVXfFghT1pgbHluIURZPmNeOypNdUFoXnlBQUwlSVUzfkJAQmw3QXpNKWNEMXFLTEpSVy9HZmg4LkMsQ15AI3IrVyRjUStORUJHRTN3d3diSWdkb3R2Lj8icntLJjlfd2R0VUgrP1hpZXdvUSJjUCMxKyZ8NFFvM0xqend1I2F9amY/eFE8N3omR0BW'@;
put 'e2NjeGQ7YHRROz1FUCY8UEJ9JFtBbWx6JWxEUFNofjcjXWMvNFZ6L0tpRElaPnE9MnNHLEpBSz8zZzJGRV1CTWFab1c7Kzd2cDQ3TWpRWjdBeGdEeTs1c1NhWGU8QGt9QCtjL2kzOCFMRFhXayR5YWtOX0RjMUxGT3ZbbzRPL0Q1KEtNSHVROz1FUCZeOiolMzQvcyVnXjtuezhbaF1nI043UyF8'@;
put 'Si9xInswZGtfUkBPfWVmdUN0e0p8L2xJckl9R3ouZz1hUXk3TVN3UD9pUGorU0tmRVZmVEc2eFsofFhwYFplV2EhMVFXUWVeSClNSVF2S29pP3BzKHdrS0FiSTtWMWNmeEFZUEhEP1VGRW5jODxycnlJTXtYLjtxYG1TbWgkTX07al0/a0ldX0ZSKGJKOWxeO1FWankwbihYVHdMSDwyb3U9KVtD'@;
put 'RylHYk8vdnIlImJ8PkZrKTUmTExqWGZJPWk2PmVGQkpYYD9fO09xYTciaXk3MTtzJkZHQDdgRXtGWWBXS2U8VHBEN3xFTX11KSVTLHJ8c3I8QnFgdTlFfmQ0OEVMUiR3TUcoR3ohNltNJkh1I3Y1IXBvWilgW3Z1NC9kZisjOF9Ge35hOzBDP1J5fmUrTlllLGkxJF5IdHt8W0hpMzZNeCF8IWAz'@;
put 'TEtpYnt+eygvLHkhczhIXkUkSl80SH1nVkVIQzgmaG02QXZXbHZ7QnY3bSN7a24hZT1PTzVDbkVYV21lSnR7T3hYL15fZDpkbzI6M3ZDP11vW2RSLCQ2N2wrYWAkejldalFiPS8kOUp8Yy9kcywmcWJIT0ksW1ZMKjM8OkwuJWNkZ1EvMnBBYG9jY2Vze2A1eGxNOXhHbCN9SEd2WEpHenVuIVlU'@;
put 'dX19JVJ5W2dVZ0ttREpRd3hLbGcxaDowTz9XcTQ0JCxsKVdjODpFcHxPWEJ8Sl47V3pQNTdCQWRiKkA9YUJEQ187KktqMF1ObUtkfGRzJG4xSXJ5WDN7ITZod0ZvaTgqeF9ENG1gLmloc3NsYjFlczlnQTB7QEcoMklENlMjTDVgelcudSZdVGRZL0p3Yml1Ml9ma21nYTRnQUMpMT5dSkhDfS4q'@;
put 'LClNInd4UT9XLlEmLFdFTT99PVQ6MzxuMVhGZUQwKTlrR189WmdBM3p4ZFZQU2EkRWZuQGgsQkN8RUgxemFTIkQ3Kj9nWnwxJCRXSmVLVmNfJW1ZTDdWO29OYVFpVS93T0tCSz9GV2NCJnhEaHcoMDBQWS83fUlyciNyd1tKZ35geUwhdVRebHxhWVUwdXAkZ2NzdjpAaEZjel1nWj4pWTJmeV5i'@;
put 'Ml9QX0tGOFpufXJPNkJqai9iYj1vdkYzS096clp8KlFCL250aTtLdHA3YHBUaSV9eFhoejleflc5fFV3PlQoWmJoMEBfWnhGQjBsc0gmNEtwWClHPHUoVW40cGJgYCtQImI8R30pbTQ1VWxgQ10zLGhLb09yJHBzSjRHfHR1NmlAdTIqM2MxdH1MRSlmWnU7dSoyIXBgZ1ZjTFZTX2VgLjl2Y15H'@;
put 'dGtrQ1hPVmlEdj9SdTYhQnpQe0d0TjV0SXU/OGg1eHYvZVFxYnt7ZGludyZLTCxsKCY2ZnlbNSVxRHxObSRMMH1KQXUvcSp7JCNCLl8uZSRnKFN4Si8sWko4aVRjaW5uNDg/OHRBKzUmVS9SX2VlMmhIWSg9aGEsT11DQ3MwRX1dfjJaUVMqc0VrQWx8WW5OLkNpSUNwfFEjcnZSI21URypVa180'@;
put 'fS9gQnw0ZkxBUilbel41Z3R+UVdbajM+OzNmWnNwWVFLQGVQR0N6WndOaXNjTS9Oc1FNaXdwclRbZX5+fU86NEpkZDl5VXxadzR2dGI9ZHNYazxGOzJPcVd2M1dKUiQ0a0lkISppaWduPkpPSEhNPyRWR1hMRSkmIU1PR00+ZCkrdV54SSloSyFFNHsuTDh9LEpoNEw1bE54bm45N301VEFmYVIk'@;
put 'XSI0bmZsMWo8R1FneC9uNWhkRzxvcz9BMm1Pb0VKMGNQLiJOQ0IhNCFGeDo5MnZOfUJyJVZ5dzFoMnQ8byEvM242T1NDcilMYlIqc2djSFtCW3ZzP0NZKG51UDdTckJoSGFZQnhsIyhXZDArR3lhP31nQ1E1QSo1XzduTWZMTDFyMjlVMl47TEBCPGdCcGJuR0RsMHt6ZlVFfV0sP0coJlpvUmd9'@;
put 'ZlJJVFs9JV90WXdnRFY4TnM/V2IwIzQhRUV1NHZpWVl5NF45cVNfdUQ/R2pMKjRWbXNddFh9dkJSdVp8VCt9UU11aWtFUl9ueEBhfCpRU0cvbihYeGV7R3NqMmhxQXElcS9aZC85MCVeWEMmRS5QWnAsLltpS21geHA/d3t6V3JfaDt1YENjZlQqNn1VITBaRHVUP2Q+d1pfZkJFeV9pTGFhV0g3'@;
put 'fVB4JClILGkzV2o0X0Y8XUtwOERmSCkjNGhzfHVDP3teKk9Je3NlRy5VYC9YQmwiQnVYM2hHOSVwYixIOHoxSWU5dyZxKVdtcigoMmtdUk1+djhqcCN7NGk8O20/YyZ4cmEzRClQfChycl4pPyljVU45blM/dTFWWlRFMHVmJDdsZ2pNem06SkRGdXwoclFbYDA2cSIqW3hSJEBHKHRzNWhlS0BV'@;
put 'TXhKd3hnOSpnVVBITXZ1OFZaXkkhdl05bTFzVmAkZFpzcGVSRzp+ZylZIiwlTGV8U1p+VzhofFRANHhSMSp9LzN3JGE6a2h5TVB0e25mTXNVSD5qeSIzaHA6JGQvKjkyPkMhMUZWUjdecTJlbWU3WWdoNndkVm94PF9MQVBobSUuJk0zdWYrdSVLZT43VnJ4VjlAYXdTZHQhKTJbOCY1Snk0dkVB'@;
put 'K3g0fkEoXzE/KXopJSpqTCZxSV9CYz4qUm08akYuQHxiYDM1VlJpREBYckRpa1NQRWV+eW4sM3dEcGMxMTA4JEd7eDpGTU45RiFxbEIhM0YzViV3OD16I05bbVhycnFCe0dATThZVSRKRVdGUzpvTzR9d3cseT8/b3lCM194U3o4eXdnSH48JVdec1I7ZiN8UTBHe00mJXRNdUw8cC41TDw0SlBX'@;
put 'SkhKRHBEbk1SdGJDbnBQM3g3MCVyQGtlfURfXVhyUz1KXn1CV257X2hrMTc0UStkXVhEc1lDIW9EK1hhOGVTdHBiS1BmWj4pJGdlXnBJMT8+WEFoLHRYbHs+N30kbUouPEhISEM7ZV5aLyVFXy46OEpFN2VANCxZLmIwaWJwV3UmZ3EjdFAhYXgpIVAiXm9jPlV1Q3FNNVd8UDRHXnZrTjJQamxC'@;
put 'Ykp3UlpvbDIoSD9vWUQmPUwvRSVbbFdtcTh5SSI7JD0uaVV7NjoxaTNoLjg4JXY5eCsveixbU2dMKUtWLEFxVTgrclRCK1hWVUN6aWRYQGN1XU9CX24zSTpYeUhQQStlOmltKFdzJmlQP1VpYERIKkQkT01gOixeQSt+ajJCfjBnaz4yZlI8IXZdMFpmT1hVaSohVHAsMF8vYT9zRTwjQSpgKzZs'@;
put 'InZuLkZVXkZUIUllLitncklOfUZkZVQ1b0ImS0VsS0MsaEtLZ3hjZD1vLF5EbDw9NTBdcEQ6MVtJSjVsRjN8Wkd9LkRpKkY4dz1WIyUyV2o3bCIoK3lIcUxvflheOjM8TEcmc29vW3YqTUVnIio2Jm97TXI4RWlqOUQ0cl5QYEJjPT49ajdGMlIuZ3c6S2xBVDIzW357R1J3KGZIblRaclhKcXlu'@;
put 'SEpzdkJYYiI0RD95Qzhye0doeEBgRi5UejtNVWIpTGBwdypIZiNMKXBaTHBwSDpJaUVSK0hpLm4lKFsxMFNRcjp5Pj1SOzA+Kj5hQWhCTSwqWXA3ZXkpeHhCOGE2JnFzPjswekd3cmgxS35AQzw/OGwvXVdfUD5ObGQ5Ql9VPHd2Zmx+KGFtW1cickIsJltIUjt6XzJuJWNtYlVYZDBBfF1SLiQk'@;
put 'YkFBU1RiIWNnRFNTMjdXQTRHI0k/Xi9lLjgvKk9nYXxsS2tyJkclP3EoVjRmUkduXlUwRDl5ajpSTDBJVXk/MldTZ1BhRV5hKkI3c01+fk9vXUBkL0lfKFBqeDdHRGczQl59ZEFsejlmU3Zrc3BzZXw8UDcmOWIkMXg0fElHZUglbHhQU147I3U0JnQxTVg5VTZnYnlTNCpkZzYveHtVb2gzImRY'@;
put 'YztIe0VEPEJtPjhfRipESVs4VXV4KnchVl5MZlZkdEY7d0VOOFBQa0lmMVVUMXpUVShuMCI4dStkLmUsKyw8QnR+P1BURyR3V0k/LkA7fGwqVXhQfFhyaWlrWEJdRHFQL1RHZUkrblY1SU1RSXA3YE5kVldUJihWL0MvNF5WL0MveyhaclN3azBLPEZNRUhacWAyOVIsXj56fkIuTjksZyxjRX4r'@;
put 'WWAsXjhtSC5YdSlETiQhQj55OUtFWm1gU105dmkpR3NBUl9baFFbNXxvUTJxeTJJc0lsRDJfSCpSaVYkL0huSkQ/UUxCVTQ8UDNGeV9tIjVjKlNre1N9X3l4THNse1k0LHFnT0hHPDpmM3xVYmtWWzBsZS8uazRvUTpIZE9oI3g9OXcxcVQ8WE9sIjh8ZDlbbV0oTSxxfVQ5b0Axd2EkeEdlNHFY'@;
put 'biYyOU41NH06RXRscmdrNC59XzhpT3ExTTFZXkh5fE5WclJBe2k5TH1jLmV5YkkkNEdLOFR0X2JGM315ISYscHtvOW97KW5VdGlXRWp+eV0+eUdvakErJT0vaSkicjZQfHJTUi8qM2cqbXJrV31IPl1Oa2wlY21YL1EjKFN4YlRoOUFvOmRSZ2JeeEtKYntbOXRDZWs9ZWRGITIvLyt8X2MzZElS'@;
put 'N1dSeXY4WVd+fTdgaVZqJXk4O2AjM0Y0LlREZ0NKS3Z1TltBKXFXdXJyTiFRKTQ8OTFgbGEhO2hPPCIsd1BObXIpdTdQWFRVSWs1N3EvVmRsS0FhRkZYQ1lCS0AjKGRLUyFuVHBTemRwZUtJPTt0KXp3JUBofTh9OCw+MTUwcTRSKFc7dCsmO2wrN2UlQ2N8UXxGWiJHM34wOnFCI3hOYVdhRXdO'@;
put 'VyZ4aHhkRFtjRzpMbjh8NWtQYTFoXUVNdmoyYi5tTlQjejwoZys1PW18bCJZRnp0aFtJcSw+KjA0XnI1QUlvTjg5Xj1yN19hY2RSMiJ6SFRFVy9ie2ZMLiwwaHg5a1VOW11zYmokMldTKk15W3kwdU5SUVZlZUNhNn5lJXFhIS5lcGJmPTBSfStpWEgvLl9yPlJNJXlGNUBaNDBFJHNrZi9LNEc1'@;
put 'TjRUcG9NN0RhR09BdXNJJVFBUT9fWihEbGZmPXw0MD9DU3NuTms9SVtNPTgja0cvbSJiMTwiVykpS0xgYCtMfTtqQ281SnVjVUM6bXt6JUZwMjREJUxjX1psOjhMOXBHcz8mPyRMaFsiJF98Kl9VK2xOeigwTD9FZWhQXm1aQlhtKE5UfFJIRSM7Pzw1WVpeUCIvITpraU1RT1QhNWspdjdXI2N9'@;
put 'ci9vRFV2P04hR0g4cSE+Vmk3ODNLZiN8QHMvdT06bzN9SU8pRDtKe1E9L1d6UWc/aj5DVno3fWg4KHVJaXc9Q15fbi5XazBBdWI7L1JgT2AjQy5MIi5VVmNsSjI5PFdLSjdFUi8uWEBXR1UxV3hZJTFfJVFjeCExN1IxRDJyNEMxZW09e1hybzhWL3g0M0YvZT8wQSExMyNrVW5XSVUpSDRzQ0h4'@;
put 'OEpOKS5kcSREXmNfY29Fc3JKLFVxb3B2QEN2RW1NOTlOODElQFQ1WXBCcnVYN3djeGxCfmc8aSh9WDRXIV5tampYVFl5dXJ7Uk1YKGUxQGB6NFc+aVhzfC9ObXlBQys/VzNsRF86akQ1cSpfZUQuSn07eiQ7L09kQXtzaVQhelZ3ME08LFVqcWVHc2VaWDNxRF5dPVYmVlpHektjTy53QiRGTl8k'@;
put 'KV93fG9UUjtgcFMveV9tJkouRSg1NE15X0Qhe3xhL21JInxNX35kKWNFe2opazBUMCZrRF5aQXpGeCxgcSJEel9LRkN2MWk9RnwoY3AyZWFWR2UoQVBXVjBAdURSJGttci9nM0loI0QkNV04PlJHNkMrd305NixTaiZzfFg1NW9aPEhwQWlzY01jWWgjW2lgfGMoZD10VUooVHEyPj47enxJWS9C'@;
put 'MCJ+LzEhL28rRnlke3VmfnVXWmFMSEkmNXd7aEhtciokKiFlQDI1NXd4KF8oS1dkPjRzL00/aGUyNDM/eHl3OGRIUVdIcm5UYGM7WGIwQGA/YEFIKVtxeXgycEEzQmNTcmRneilbLiJjZT0oPEhiczY0Wit4WFheRVJ8Ujd0bCFwWHc0bVksKGMhYng2Kyl9Zk5ZT0x3dV9vJXxsU0VEbSJXZDxA'@;
put 'NVlKLmhheUApIUtaO0VHfCE7MGFpPSxHbEZiMnYjXTklfChuRC56Ukh9Q0ZLc3BtMSYlO1hmYzI3Ij5lRHt8VXUoWCtUckJsb1JWZlFhfmZ7KCY3Mj8pVEtwL155MU9pdFdmTyhkOUBKa2VDOEBKS29NcjFieWlxW2xGXytKI2VLT1d3aEYxfUJoTjdwcTE2N3EvVT5nXn08VWxoTm5OSkZ5TjB1'@;
put 'O1UiI09pVVZxImZHUHU7YThINXo7UCZaWGVHQ2tRZWVtNnFZZTB+Tl9ZVnBJflBjIU9pYFFfQTFbSm5pfkghYWNNR2dEdlgoS01DZXgvaXxwTFVZYGN6SDh+SE9uSC5fcyQuO3oqPn0/eHJ2SnM5SD84djElMVpsZlosR0IpTmZFYXZEX01dTno/V142eD9vVlIjd1pMdE4lLEE2dkQ2KGM0c00h'@;
put 'OlBQVTB2NCxURUhvd3krK09MSGNSNll8ImBYOEhBWTJuM1JDNl9RJXpKMDRZIjJMSH5DI3VEaTV8JSg7LFBZZTRjZyE/fXJVbDAuVUE6JWopbDE5ezs5YC44cyFSd0AmPyNQKltjKHxMNkdtYHt8VHRzQkY4O3F5RGRVbSVUUlZlUi9JIlp5OCY6aiV9aUVud3R1S3RMKlFGSiE5diRLITV2TUxv'@;
put 'aSpFWElCTkl5bXx1SDUjKj5ZYDU+b2lTU0FBQXpiQ0F3NFZCeERJSCJRLDFDdUs9dkZAQXRCOj9SRDJ6MU4jT1VqaHguTEFBQUFBQUFBQUFBQVRYKDQiOXB3YU4uJV5maHBYJV1obWNBSUMxRGlNSENqIjc0M2NhKjpvaUVnT3Q9YSIsS2Y1Oyo4WCQsTVVfLEtva0NLUkpQPkxrbiRwX3tbbVJ1'@;
put 'RzZPQHBxI3NYUT4jKCtzSkBsQnRUdDxuYGpIPXY2Q3NdRG83JF1Hcz9MfW1KTjNgaG5JcHdNWHxkV3A5V1BMMjBacD4uMU5DOCxmaVluKDN0NUZgQ3xdMmdiLmg+YDNALl4jLk5eI1hNNVQ4N29dRlVpRVg0RTx6aUBILH5YVn4uWih+Y2VCbk1kVD9UMHdWTm86SDA0ODJ+NkJ6OiQxPEBiZ3t3'@;
put 'NyxCQkBEIzBmNy5sN25mbSRCclh3QzdePF4zQk5aUl47cUouWz9ka0koUU90V2dTaEp3YS80VkBXPk9mVVFveF43ZD15ZFo1e2U+KTt3Iz46bW1LcmJ4MnpNR3dlYW4yVjprVURZYGBtYSpaMVRNKTUuWClfUyldOGs4MFl9cGg7NGI6fjZURTFVNFN5ZzJ7SGEkKz59UUd5a0thZ1Nwa3BpKVVG'@;
put 'Unc0I0pCaERWUmx9MXcjYU9weWNwTXlNbDgrP20uXi54enVNMkt6PntkcSlhck5iMXNJTzhxKWlfQkIpSyNYVFRMN3N1XkRWMUlZSnxCTW5aRzRVal4pfHlfe11kekBESit1eEFrNXJTPG9UaCRCcSJ+PDMhKnp+XWRadzg3VWBRRCN4NEJMODBkQkxzV2YwQE5EI21ITVdKc3A9alB1dHd8P09Z'@;
put 'ZiZJaHY5dD9bPGszO3hpb2o+Lk9Ecl4rbGhCWFM2PjlOI1NvRzs4JXpoQTthWjgiUnRdOk5scDcmLCR2W05qPlIySj0oS2A4ZD9leXtGMlNSK1NYMlU9L2YyXWk+MlkramhSLzp3VFZScnZIRStIPWA8dmUxYmAvM0ZVKURWdjdqfEZ6VkZkRGcuQX47KExaKmhIelJofnk7V1VUWiY9YjclfCsm'@;
put 'Y2B+WVN+eHZBTksjRVtUWT85aTwvT2xuVDx3QCFaPUBPZU0ifF9CQENNMzUqeWwqTXleZEI8UkovVDZfTXhPdHE0Yj9KWUdHUy54S0cqUnpye184elFGIlNrWlFCKl9acmF1WH0+KHx9K2QmdE9LIXk9M1F+d3VIUzNBYixGelk4OVNgRl5UWHZtXSZaMXR9Wno4REVIKnRwRDY9I15jWld6PlBh'@;
put 'KzRbW1ZLJmgpNjM7WihwOU9PfERbZ2xnbjl7MlU5TEVZSzRkdzVATG9HMm1HPW5KaEAkVVlqbCFmanlGaCxYPiFkTX0mQjg4dlNRZCo7KWMzTyxTWWZxPTtEKykoeEEycG01UW9PQk1tNW8yR11fc2BpM2Y5KWRDOzVlKkgocFpQNUNOZUtXJXxDOEYmWChXdk4rNFlGODtJWiw5U3ZMRiNFeHUi'@;
put 'PjhxdDRnSndHYD9MeWZgIjBjaTx5JGVWRnp1KWUvOFNKX2VPQlZYNiV3THYxL3hnVkhCTk5UajdoIiV9SyYlZGkuJmFjTlVkT3xzVHBUZVc6dXAzPEV9VTczZ0BNKGdDU29heGg/YUBoVWh+d053OnI9WXhJTCFWQHRLNUs8fWJZVV1FXmxNZnduKCVQODU8WjR9Ln1RTjg0MElIUj5YUntkN3Rx'@;
put 'Y3VSSiolPnUzanwpWG9YZ2xYeE88QVExWjhOJE5ZNFFEXiRVUSR0I1grbz1KSExYZVNBUE00cGNpfT18ZHhsfVhLJVtOaUdHfEY4blpDNS4sZW5qRmovYC5rMCslfi9uQFA9YEJSOnQkYzRdV2d8OSJ+Wk5RUyl1WElrU0htKl9RRV91ZzR9Ij1zOCo8RkFwPCFJM3wiL3BTV05Xcy5qUmlUeGMx'@;
put 'KEo0cGxoL1ZAP0xePU1JRl80VX1lJGhiM0VDPiE4JTYxX0wmT0UxL1NeKHQoKjZkUkJQby8mezVdKHNfYkE+dl01L15tNGl2eFt7SCo0VWsjJEAveWFCYng9bXB8NSh4ZUQ1dTJvYTl7KjI7KnJaTH4lMV50TFRaVixePkJDd0IiSzwze0Bsb2BxUyY8KF54Y2o2TVo/eFZiU2o6M0o4XnNFJDZ7'@;
put 'TkdAKC59W19hXUJHekBeWH1iLFs7SjxIKFpTdmcoOUhaQyE4NFl3RD5PW3NVMFFYZyRVWWN+Y0hlL1hQVE55KTEmJmVERnY0SFF3VHt+d0hmKjZOMGFDXTR0NnJjW3tRIytxam5QNDEpYjFTdjc7d319NlE4ejBHdlJuODZxXl4sJl4hQDtsekg4UV5kPUFHeio/aXt4OyFLdGRbU0ImZjNdX2pO'@;
put 'UDB4MiVCZUVMaWROSjxxPmlnNlAwZXo8dnpRQjRUOkVpbHRAUUhjcWd0KyFGPHhIY302aENATE1MJGAzaigzdl9zcGhbUGNIN3BVYl1jIXdDIXRwKylobGBhZDV+KT1yNXd6cUdAV3BPOkJkbnEqMGpTL0Iuenh1QFtCJF1wWCs7XSI0JTdPT2cxY3laZnxOWjBDVVkpOlZKJn0iX2drPE5vNG9p'@;
put 'WnEzb3xPW3V5PENuVmxQJV5tXTtUUiMqNkt8ZVImK307SGFKLzt1VjBAaTxpK0kqQ1owS11nPVhNY0FgTG5jIV85aC9Hcj5FPkd+N0VrJHZ9PC9xNFBtZm8oakRKaHFTIVspaEQ2W2VpfCE2UHU5TFMhSTkvZWo9VmpTPltnRiw8USQqZDExYWpONGp1NTN2XyswV2ZifSsmcnxCNFtxQjZaZGQw'@;
put 'RHcoTHNBIyRNSjgwSHAxTmdlWFZTLkNMPilrUixUZy5DWTQqdVp5Ql16VWYzWDZwVE5YI0EjXnN8T0psXk9jRGBXbExKYiRIV2BgNz59b21bPUEwKFtkZTQ6XXY0TFE+MVFRNlBleDdjJW5HdG5iWn5yKWZ8cmNqZik0RmwlPnFfbyldMUA6RDVdK0dOPF9GT09hXTZJel5ASHV+OklmPz5qPTo+'@;
put 'ZXJPeXoxQWhkbGlXVGJHV3Z3MytSLldFJWJbSGtxUCxUZ1AhU3pMeSlpWEs4bGA/RmEqMlRgcWY9ci9heWowP20hLk4zUjVWdmkhSVpRMlJfNzR7bVA5cDdnY3VMfjReaFhFMGtTUElZQmVJb0BTYUBpKnByT2h8TTAuTDg1UiFfYz9DfjU2amsmMmJhXUQpRGtnRTk2bCUrVjU3SHIsOCJNK0l7'@;
put 'LFlSNEZvYT52bHtqe2Mifnx0enZfam90dVl7SkoqMUN4RlQ+ISlEcnYqamwlWjJ1bGtWLE1dfmZWaGdTZzBPK1FRdio4YzxPJTk+bkcyZDEoN3VbX0h5SW8yRGk/QXBySTB2M2RidFQjfXIjOGZJM3BHKywsYG51e01bRThoRG9nRFAya3M6SmkmVSRfLF9gTWZaaD5UPUtMYUdybyxvYjNsNjJR'@;
put 'TiVvU1olYTw7WD5+S1pSUVpnMVBgQzIyRXIlLD0mb0k4ZGt+RDxPOVpHdEtEbGxZcD54eUswJVh4aF9Zc2V7aCU4XiZMPkdocHpRJnkoN1tEdUVdVCVsRn1tPzM4M0ZiJSFYN2hELFlOQ2B0Z3lkc34+ZXBCTV1JaCg2e3AwNXxDVCNHXklLNDp0eG58Rk9JJCp0KC4lNlZmc0BnI2FdVW9YKXRR'@;
put 'KlA6OjJdMUZHJU11fDxWZXUieWNacHpTdkJPOjF7YTtJNEQ6fHxURTw5YXIrJmpAQiVXYylvKnZxV3dpKSlQOSZEMH5AIzhaNHdLQTBEMVAucVhEXm5JdDxZJV4rVDRVJnttZEtka1d1ZHcxfSJNUHJEdnQ5R2ldX3o9d0sub01hW2BnVSlCfTVBRUlgR3wxRm4kblBXYWg3Pno8TXt4OUZnaj8k'@;
put 'Mzt4ejBpTGpbOUA/Yl5NSC5ZTzJyfSROYmNYOyNqfD0sVTc/PDt3X1RHKmhOU1ZfWlImWklTcj4uV2MzWFt+Lm9fIkBeV2FZSH4kZng9UXtCPFAobV84dGg4cyxPR0EmJm91ZG1TKz14X180KkNgVW03Ll9GISk1ZCpXTHx+YHUyWjw0JHQ7V0gqdi9wOG1dKjxyaVZtRnJhJC82PFtvNyp9VXBY'@;
put 'b2BpbmQkWntSeFNzKUpqISlUVjkoNVgmPzRqOkBtczlLdjJra1AhP0MkOyZEeCM0dExEMjFWMT5GfnVAYnMyfFBjWUxfT1dbPGovPCg1SSRTfFJzYEJ4XSFnWDRkTjg/QCM4S2cwMncsPEgxKFAlTSUrcmQ5OVs/LDFCNDJORjQzWlBVQnswfFVBXiVtWU5kfWc1WjpgPiMpKmQoU1BmNUpvbEgp'@;
put 'OVBGPktIfHZORCNMW0ZAaDZUX2hvIlJrJDtYVyYyPD5INmdCM0RmKG1KN1YxYlJLQ1l5PH4ib2p+SiZCfnZMTUQ/dHAvcll7eWRRV3pOQTs/QylDYjRoO04vQkd+ekYjfF80dmEuNSY6ZUA4NFJIWlMzNmlXaE5rITlbP0UyP147M1E0QlZMbnt0JE9HLyo/fGFtfFpDXi9zS3xgVUYkWVpaNn5Z'@;
put 'QUhKNmxtK1B7UlZaRyY6Ln0uNCo2Yk0/NV9uZ3BndyNNP0NoI0hmOXRzTHwrV1NLbEdFajx+cnJpTUc1PklVO2dFPz17OlZ6K05WNG1OO29QVFlHVElIOGRqTEsudWJgZldSMzIkYiYpeTRPZVo7KUN3ZDF+allTXyV2PmU/TU5DU19edWwpRFU6S0B+LzR1Yzw5MWtiOl1hM2swX3UlVzpgNjQ+'@;
put 'R1lVOUVaJnNTR2Q5PmQ5Ols6eSZIRUxfN0VWMlo/Inwqfis0ODFmeUZTeXZASEMzKls6WjNuOCtBcGM7Si8malp1dndWPz1TInNFc3FfKFYkal9WYURHXkhZZmFBR0hxeXhTP3FySH15O3xUQD5URjMqPTh5O2s6fCRwPkRWZzBTWGJPVHxYO1ZVZT9tU3ZuOFBwek5bL05jJDckSjgyW11AMGwq'@;
put 'ZERZRXcxMy9JSi5dWHYkRFopcT8/SXhbSiROLkwoRVo4LmlgW0Y4V3hNe080bF9xbCwhXXdCTU1gLE1yM0MhaE1SdmIhIz1+UntePlV8YXZrPXN8fiVpVj9rcXA2T3EpYG9+V3BiSVpuQEVJLlBwRkxGOTEldTFHPz8+aDY/L3hgQmFxcURSdTY8Y29QPmFlY1orajtFPEMlXWhsXVVlM19hVm9f'@;
put 'dWNJJSU0X3VZeTFrImQsW0FXKGlwXVB5QV8yTn1aJThRaTo+QntYclJPQX5jOCZTdiR+ejsmQEppUXdWMzcqdkg1W3ohPU9ZJWR3Sz8je2BKW3JCQmdtXmZkcV5xYShrJWJlPXlOR0JJU0BQY3FVcyt3e0xSKWpGInJQfjdEPiR+aCJHMjQlZkBPI2lxaFV3PXE9S0NibXJ2fDJCU0hMfFczKE4q'@;
put 'KnVFMzdvJkY7ZlI0JjZOQWsjU0E6a3xLaHBYWTtBRTxrPytiY2pbY3JDWE5ZfkhsVUJEJmFbdENXSHlHJlhhY2VOIWo7LlUhT00hVFcqRExuWFE4cU5DIWtXWkw+ZUBifD5ne0khcz8jPl5MMFQofCVKMnx3QGtWQll1fjN4N2ZbKjNjMzxneTBXS3BNRXRSLDlzY0Bid0sxX1FvcCFaVGYpJFM/'@;
put 'bVMsLlgpWDVsd01gTzcsTEFrRVVgaX1DSSlPZDZkeDYkQUZ6fnpBTGA4T3xVVDZuS1JBSSU1ZX5UKFFdXTNIQmZ5ZkklaipCbm9kKUtsZUMsRXRqTHMwZ0UuJm8+WSQxOHsjbi4zWTdpOD9xelJTMEUwNnsiXlBfeVNhNEZZQTlwRlRrPmleKCRoaGJ5djlpIjBOdnxSOzdRSFRZcnkxI3s2dmEi'@;
put 'JThYOUtrcWlGdCZPOjJXV0RiazNfOjs8cjgkTkZXWU8zTE0pcmRdOEdsOCwpZTYsQUoxXlFJRG9tbj5LSUM5KUs9X1JTVSk7ZHl5Q0ljfGpuO0MqZ2NpK0hsWERaWE91NDs2Ym02e2ZBN0I4IjFxQEBUci9iQzRQWSJGNEdLTWM6dEQ0Pj9SRm1GR1FJenE9TlRESGBhPFVqb2N0MUt8elldbC9p'@;
put 'a0w2N01XU1VvJCkybiMrUV06RTR7Z2VRbkVqcSFucD8+bFhyQS4kVStzaUMqSEIqLFUrfWNmcylwIWZDJmlFL1soU0p0Y090Zl0wUF96REI3QjdWOz5uPFpFXWNwOmk5WFYkYzN+X3oibUw5UmIpcFh6e3ZBWyhSQGRzbDNiVSU+Ry5ob0h6YT41elRiOy86dmVzOWkibDhzUjs2bT1ebD5KVWl0'@;
put 'dnJFK2dfMWdicCxVeGNDW1siYVp2SjVZWUpZMlQic0tEbDFBQXZIM1BvLEJxYXVSSmVeI2JHaEB5Sj07T11QaD8hQCwzO2BmRlYrfXxSXmp9XTJRezJvR0k7QnJ6dyxXT0VhcFBkez5VMSZZMVc/eFszTWVhanMuO3smUHA7ZDtMQ2V+aiRQK2krRXhpLHJHIzl4Y19WVl16a35aRn4sPEA3Tm1j'@;
put 'PXRubix3Vmc6eEMvVFFOQ15JYnsyJVlOUSpLXVg2Zl1SeHhUX202ez1wdUk1bT90ZWZEQ3Z6LmF2K25Ke0o0UUUpXld1OUI9XUIyeDw8NFopK20+Mytzb3RxV0YmV0UjfDcoKWNjVHR2I3VUI3FoLyljV35HbFJBNHcvdkMhPj5eYXd9VmorWGR5dExsbmY/WFkmdiwqWXpaRSk3anwucFo4RDdJ'@;
put 'SjU/dEtGJUhYOlkjeTc1OixxPDp0U3U5djUqeThwSHpufHBATyNfYSQ6JDBnWDA5bm51InJXRStGbX5+TyJWVVp0NVpsdnpHfG9LJVMzNDxxLzpOL3lFQ1FubGl0PHJ3fU8vdzpFNCFHVG08RTpDTEo7MkNUV2hwRmdlQ3FKMV94Z0JIS048T3xJbkVKeUIrW3F3PF44U3tZcVd5KW1aIXxqNGNi'@;
put 'dXp1Vi5STERUY3ZiM1luKl8rM04yM0pIKkVxR2puITYqRUYxajcwZXJIeT9RazRla05pQFJbbCwyMyYyV259SVdsSEIwblFuYnA9cVYvZlJaMzdNMmQ5dlpKKCYyLmtLVjg/aiJXKVk4cWsjakwrISgyYk19PkFzP3diQF5deyxgPFVKTnhjXnlLLD1kS0xVZ1UpSFp4dllAUEo0ciV4TW47LnIh'@;
put 'JnI+VHt5RHkqWkI2Lkw3aVZpdlB1ZXF5X2JwKSRlZ2YrP2pBQlN5SCZRJlF2bjVeRF1FMkVGYV5QSGM7cDg9aSUhV3AqdHg6N11oJF9bVmZTYGBIZ3NKRVImNnl6dV40RSwqKWosKjJBJlRJLD8xIlIoMnY0RCxeVWtKPGw1WF42Z0svNiltaUhUa1YjNEc/TnZ7XzVfMSx8STFhYVYxdTtfWGVl'@;
put 'VnhMQWxEcWs/OWQ8VlBQJWNeO1A5Ui4rL3kmTXVMWC9xZSFjZTZyTXAjOj9SQktpRD48SCx3V10xY1ozVHpzPUFKcVtoKjkjOiYxTmJqcz1GUEVqZi9KdmteKSFkbUUsKm5ZQFVIQER3cVdFQi9mTDZkWFUlYDYpVFFsdjp9Pmg8QnFUXVVJQDd7U3UpXVd4KjI+dGslOSskXWxFc005diZleTNv'@;
put 'LzdvMjI1cG0sUnpeQGxBZTByQGwsQTIyVkFuMjdacUZIQXVMfUZCUjAhLzpOLGpBd0NjU2ohfXZENHlofmVENzkzZ3dnO0QsfUI6JVZ2QE51TC5lPjxyI2hTVVpvPmAvYW12QktJRiIqe0RfJFVRWCg3JWUwNmVgT0E0NUp5Wls3eSxpYXZwcnE5K25qSHlSRj5NJCE1NVR1VmwycVkiWXE/TGRX'@;
put 'IjFbMCRWIVs4VGhyUjMkbC5Md3F8OHszZzR3PjN2MnU0LkZVO2lhdmphXm5kVERWKkIjPCRkPmp6V2R5aUVVZ0Z5MCYuYko8X21DTSZGJU83VnA4N2osMU5aSVVkTVRoW0k0UTM4MnpobFV9SlE2PVY7bjo+I3lUPDV5dndYNXNJOmU/QD40MFJaZnooc1ZRSDw9SFYxcUptWjBIO2BULjRIV28/'@;
put 'aXFhc04ieXZRJmBAUmJ9dDR2Sjk0TTl+WmpbPHtvZ0Y6Qj8sSyhfKC9UNmQ2IVRUbl94SyFiYUB2TkErckhTdns+M0hpKnhUc0kscl5HUUJtdWJHbW9QOyU2ZFJrJFY8bz9XWjgwQmd8Q34pey8udEVoTHdtTmJoSnwlQ3gweVJ8fi40RHpoQ1RYQFAmfllFIk9IbkZdOyZIdVh9YnB2W3RLcj5b'@;
put 'VmYjXjlMLnFTTn4zXWh2M0N9bj1tbmgqVG8yfG1nJHlbJTBuOGdKNHZvUDJOSUV1LntgUkNSKEpMRHtYQUpzZzBmXXAjOHRUY0xqYVJjSk0vQyEpekZaU3gxbFF2RDF+ISlZbjFKbiluekpITD9UbV1VWTZ7ensuTVk8LkNXIyRlOyUkV0Y5JTxYMVVrMCFNL3FuaHtTQkBfbV46QXxVdHI4USN4'@;
put 'OnVnUGwrMmpJYFNAJlJJLzg8aHEvJlVjRi9hQGdHdlJkeE49LkB6OVRUYTtCd3JbfVN+a11fMlJwZyQ+JnExeUQzaTR1XkVnYiY0bkZkY1hgcypkKzgjRTl1PnxhdWtmcV5kMUxSY0lpN3g7biViOSo1TTM8SDpYWWxRL1hmanxfamZzYyFIdTUoSEAkcmxtbW1lcE5kRXhjIXM9K1dHO1d8fnFl'@;
put 'Tj1VNj9yb0AoRm4rREFmfHAkLlFsRihxRERYRGhVdCRGSCh2RjFYYD81NkZ4JTtpck9ENT4mVWFYKT1sUkwmL3Rya3gqdCNvYS47Sz18SzhpOiF9U3VmdVhXPlVmSWFAWHI6eXNlYWFbL3x2TSMlWzI2azNndF5jR2NVcyYjc2RSNU9nbUY5ajdHTF1WXl5WdjtgRX1oPm4xOjFDOHQ0cCRUcDRK'@;
put 'YVJ0YDVuRSNYOF54JFFeIzB6PW5UbyNSVW1LK083Yiw2fjtVSj1jKyJed186MndVIWZeX20hYVtLOCh7dnYlQzZHZm5aQUYqTTJ1VF5OJWZBRSRgaD84KT4oUX1GbzdmW3V6azdHJF1xV21HZHxES3BoSSg1W1tLZGQpZStbNSNqa31GTTBreilCcDw6PUE/eiVrfTE+VV9iW04vJjl0ej01R0ZX'@;
put 'LDZuaXVTfGRSNG1vSlA/Sm8xLkAhTDZhcW0iKXImQ1R1KTFmT3pIeHh7SVVuLCVUKj15TDR9Y3MvbmdNITo6Y1QuQEska3E+Qyg7LFh0SjtiVlZgRlI/I3hNT3kodFtrO2lxek12Xih3XSlxPFtFaTF7V3AuY2l0PkBQaTF2RVJhOWBpQmRqL0s4YTM7YXM9dXZeeDx3czBzJkBMYDJvYk4sdkYx'@;
put 'ZGs0L3xQMiVAfjR3Q1kuPiV9SDVEQ3EiSFVRMzxofnlDMG5jQnVwUFREYUxJPnxFIzVGU2ljUUkqI0MhX3tsJVtyVHMkVkAyOyI1MkQ5NTBfQSR0eTpnfDJ7bDo+SVpBdXg3N0JKIT5PT0lsWGdMeXBOZGV3XSU+cDdmfk0rJTZaNF81Zkh8SEZfazhYciQ4YS8wcHg+L0FldCE4Qzw0MzEkYUBd'@;
put 'dGwkVFovUl1aJVlmMW9GYF1OYSE2LDtKL21CR2tUKytlMTlec1NzWyhOXnQyKUxIUUUuNEVmZz1+O2RmbDc2T3Z2fnImTSguZWZUekRWNihbcWhxJU46czdJMEUjLilsYmpuLzozT24kK2gkZiJdUz0vdFY8dmNZbytAQEc3XXFffGZ+OH0+QFJvbWJXKFBDfERfeDJUcjApdChBQG4uR2wmK203'@;
put 'KFRMXWpyYjhOVjEvNGhAVERoU0B5N3tSK3ZLRSNUN1RPaHB8TTtaKiY2RCpjMDg0U0gjN1RRVlJ9eS4wTHspXUFLfD55VHJiZmY8JU1lYX0xMl4pTlRJWTs3L3BKTTYpc0BkVTtaZFR0P1p1RkA4KFMkcnklL0VMfD1JdjNERSZzLmF4PyRVZldBeSNTSDdQImhGc3tNL3RQQlJdbF84SGw3LkdZ'@;
put 'IzgxQDZ3aVMzZXI3aDs1OmxbMz84MV1rOzF8eG1PRUVMYml3PllKMGo8aTQxTSpDV2YzMWcoJmNjRz4oellqcyo/VyYpMyJ8ZmhoUSs1NnE8OGh9Z3ZIMmkoOD0pJVRkLmIlaj1ufltMW2JPMCMqPndrUHJ2dXkkbXZSUlYuXzJLdytBWDN1OElYcHt0ZUdqdGpoYDpXK0RDeiQ3RHddNT1iKkcv'@;
put 'VWJwfisyPz52OEdjbl5bJmp5b3d2XzhZS3JJTHNzQnEsZGtiOlk/UG8qLFdHbFh4PGNLUlVtTl1CP193VCtbQUYzUmRBU0B1Y3JuOjUkMCg0S1d5aD8weigoTW1kOGNMUEUkVHpJRVlpLEtLaWw3OkRnSVdbfkQ5PHJFaiUoPnROT1lDenRPemNXQmEqQlNZO0xqZik+Tkc6Ti47cVtqITxGb1FK'@;
put 'NkpFdCF6OFY0S0xMck5pYmtEUW9mVXdkfjpMZCJfVWJGOmNZfHwmImchc15GNip4Vk5WXyVXJk9gb0F3MnlRaU4laWJpQm5kREd5QDZvQTRMfmgyLy5jekUpSn5YK0BpU0U6eCJLSmFtfSVGfS90PCRhNkZoXmA6SlklQit5bEs2aGJ4UDdUWV5HeEVJJitxJjdPZCVgelhCVT9+YkZIZE9IdVEm'@;
put 'UFZaNmJXUXMpY0UrY1pgakxBUVdPWHxxWyhlc09pMD5pKC5hQ2Z3LDEmcnhFTFAoOj5VN31wM0Fzd1I5fVUqYzJ1PzkyQChHaURJPzpeJkFOOH1Mb2ZGTGhALEowaGNsPX1XO1F4PXhfJExkPkNffUBySThZOXRlNUt9WiMrU2ZOWXExLHdIdzM/ZXtIJlkvX0ZIJnZufV4wenR+OXIzfEVbW2dF'@;
put 'fH5LO106YyNWNyFmciF9YnpUTlR8Jm5hMX1kdnMiemZpSG4+X2c3LmdVU0hlWms0MTR4PGRJajBnPHI/XThwMGpDQiUyJG5RW104dm4hRi97VU9neDp1bDtxTDwxZkFrW2RXbWRXL3ZRV0FUam18IS9tQEZzPCl1VUNXa20leFIkQjkqbm5wWShObW58TFB7XkgkKVF2JTpUd1VwQ089W1YqMF87'@;
put 'RiJ4T2dSdVpnZ1IibVZPPz1pSWlKWnVIJXVQMykkSyJDKTo8eiZkKXgsQmhbL1ZJO19xTFBmQ0wxdVBKLGRsLnZleEZQRGEwNChIOFlKNXZzRS56bjM2NHs+WiMsd3JLWyMqbTp7VGYyQFBNYl9jTFdgaDl1VyFWMDEwT2NTOm9hWX09fjlLRi5oO0xyZUlifjRaT0dGZ2o5R0UvOCgifWZme19Z'@;
put 'Zi5ZLkg/YlNLUGddd1FIfGdEX3NDMCo1TSkwUGpGVzo3MWReTmBocGpJLyRsM306VklVJjBXXzgudDR4X3hGVCo7VzBEKVVzMF4hVHpkKlJ0KUlFaEZaUDZUY2FPSkEkd0UiRVIzcUNzNzVBVVhEJlteXiljXVR3MlpmbiElbTsrbiMyUX4wXS5uVXB9Wz5+YjNFVnRifG0hcDwvQithMDNDKkkl'@;
put 'O3QuLyE5Uit+SDhVVyY2aW0yJnc/dTwrTG4ofCFNeFJ1KCE6VV9IMD1yXiE+NnU4cm1KXjlYMko9TlprXV1GMSxBb3JqMEpyTH5+b11tT1VldVRyXWo2LmI7dVExQWtvKHNyTXpYM0JPLz06Xn1RZU5YZz8zWk5TKW4qbz1qVDE4bkJWNFc4RFNpfVVKaTQseHEqMHZSc286VD0lMj1LPTA4SzV2'@;
put 'YT8jeDxkbGRSLC4seUhHbXFbMjJYPCImNlh1M1tNaDVsKjxlbXE0bD9QRlJ5JmkvYT8rZXRZQzh3TkpvZWEuKSNzfjd4V3p3fHY2ISUqVUhaUyU5Wkg+NHE1MFhDRGd7ajJ2R2J+Z2Y+bVRRWWVaMlQhajh8ZElkX1FzNnxCO0M5YT4rXSYzeDd4WVVRTj4zaHNkVFMmRVleWnQ5aH1IQkIjZ1Jk'@;
put 'I0NUOmkhISJ8U0tCdkEjVnlyOChZPnVbLkZPfSwubGAoOip3djhqOj9kR3FnMFo/dCR1MWJkZjE3SDxbNFssNiV9OVRRUVU3OT1ETVt+OHsvYW08Nj5CL1NyemVEXyElXkc4Y0wjaFo7QXVxfCZtSW4qRjxUXy92QiQuMTtMdm9Pa2E+Pm06TEdhPE5neHpkfWhIdnxrQmFDQykhPm5bQ095S2hE'@;
put 'YWwlTkc0RDNXQnslcjxRRnxoUFRbR0UlUHtYcHV7YFVXdyx9TDV2Q0JbJWY8TUU7YkQ2NlVJRnR3Tkx1RWovYD58KjI4RT9CdCF3QzZfYVhsMjFFQHhPRDxYcCNIdEByaVhdQzBQXnFWIz1wQyhhTypzR2dAUiJDbEp5amxBYUVeSns3KUU2Sj03VyxrPzQsUUF7SXZrZ1I6KmddQk5fKVojMlFk'@;
put 'ZGNjZUQhbXpfck8mKVMyZ2x5Yk5HSkQrLG12TToxUGF5cztrMC9yd2BbJHAvTVBkZT4peSJBPzVvcDA8Y2pDbGN6O2FIXzcofmkvZjRBNjU/RTZbPEsuTk0ven5PVE5QTUFlPHkvXWh+XWRRKDJvWSxSdDs3aCEuJlBlPn4zXlkwQiJ6T2QhRGxhVnZGV0c2aGByZ2NrIyxhZ21sfHIjXylwVDwj'@;
put 'VUdYRmQ4KTBURj1fXjJkY0dSaEk3QTRkJU93e1JJUHEmS001IjhRdipra0pGKGRiakBOWkFxOj8oRGQlXiE0KGx2ezhveWFIcEpeVjAzMCk9NWIlWk5mM0ZtKz1yZzhmc182cT8wfW1sbVVrQVdNTXNLfWhCZCledXxKKXxQVDVadllWe2ZuSSFdOzZ0Xl11OXl6b1hRSDRRX2x2OFEuSzMqd0M7'@;
put 'ZDBOWlpHUCYkbk1YOGc/dXh9NVM8LC8xJGI+UTQyTHdpcGs9LDFAcDpiL3Ilc2cqMT0+M3p0KWBwaV1yTTtadCpBPmFLMkliWVUkKUhwJUQqay93TWdJa3B8bDVlfHBZOUMyV2R9MXN8NjojZTt5R1ZMXU9hdVVfZ2s5InZzS3xLeGNrfjhrWCp8YXJBcDZgYW9rJW8zTlp6PXVoVGNAPTY5LipI'@;
put 'NltNVC82ImZuOnlITlE2U1AvSl97a1hdUGx+Jm1KMHtxKVhgPGF+MSJAfnU8SFhkPGM3V1ZeSyEvL0FbPCxiKjJianM3dCNTVXZsajtTeE1bdEJiUihaPWRxcl1Cak88O19ZL09CLkAhVkBZKigxWVYqPFRwOiUpQXA0OzVuJlF9e3wzT3pnJlBTKiRmRiNEUXEjZnVHd0k5NThlbkRET2xvZmFw'@;
put 'eHdAfiU4LyR5Ly56YWNlcXVaV11lSFZQO0J3STghci9bc2YraTFtOn07UmBeQHFAQDVeJW4lJEVXJGd6RSpwSUJrZ1dWOVl2NUZfanZUPnVlfUJPVk9INFRWTUxvYU1jRiZ7XilAO1tyeVR9SCR7X1hlVEI7fGlueFpJR3VNXlpPS15VY2VgWiFaI0tnKGZ0eFcvam94Zj91VUUqZDx+X247KCFg'@;
put 'ZSRxO28yWTtbVEdPNUB5bD1gekB0Tngwa0hWYD5Pd2tHbT8+d21Ob2g+MSR3elBYdnVMcSt9YCNDYHh0fVQxJk5EY2I6UkBjT1YpenpVdnFKMG5SVEphMHt0ZT1RMWJkOThjN1lpQWh5Jiw2dkZeQmVIT2AxN35UPWx9eXh+SEU3OWo6RHxvUE4yYCxDVzZvaGFRaylmY3s9bl41IXFNbyQuQHNW'@;
put 'WHtPJF59fWVvOiZUSjF3PVVsIVE4Wlh6TkxRJSt2bWxpJmJ4Zn51UEN+W3FXRGopbGlLZm1gSG07ImtXTmglPTxMa0J2eWNFclgwbnlqZjFjVFh4dD46YGt2K1prPUwvKUUiYjpSLFhKRmMmIVYpN1VrS1t2IjIiL1FbJWBlSUwrNnFYTWNqWiZmLkt6PVRXUEk4VzxKb1lPJl0vNUx5VWxlNWEq'@;
put 'NlssJCV1OXxQWmZMVERsIi5fNEx9YCJWJmdbZl5KP3FYWTVNNFdRN2xpZ3dua2svOVplX35vaUVQckFFUm9obCRvVHNkUTVreWQ2dTpoYXROZnIqTk9MblUjOHcjIWUvUGpDSjYlI19kWzcza2ZlRi8uaiV8S2lmSzJbdlV3eklxaHBDdl0mZSRTKzVnMV9jTmJ2V1JmNTw0Kms1QjFeVk8wR3Jz'@;
put 'JCtMd0g4SEAoXVd1NUFGVnQybl9PQExMKUlJTVlSPll4WmslTEUrNCt3K2VMbF08XUVDbDZ0QytGXksmRF5DJWsoKElkMkJhRlFIPmVLQTQ0Vkp7TDtWdF0kQ2JTaj9JZDtweHQ/Vl4zWjkmQjtTLyN0bCI1ZXBDNFdqUlZWRVZObnhTIWMjZXUoJn4oKVgqXnVWVFFgNCpTZ0NtOS8xRy5DW0Qu'@;
put 'X2N1c3RGIXohUSJqTE0xND1obkwzbUVUTlEiSWRPaTdFN2oieU1aXm80Xlg6bzM7TVZUS1pAW0BgIW9kXz1hJCVwfloqYmw/YVJnfFAvLz9BKzFffilxajl7ZGNFMSRvZz5edzNJJDM1NHMpa3NXalZAalUibzYrJmgocSQofnFeUzN0Vzc3ME16azR1KHxRek5TQjc+QDQ7M3RmRVdia1toR3A1'@;
put 'ZWQqV3VsNUA1Q3tGRDY1Pnw3aHVoPzI4MncuR3tlJnBCQSZ9azhiQzFkP216aVI/NVgxQDBrTGNZVUAzK21WdlY0OD9DXXFfSll3NXlBcEdRMTMsJTVaTV5fbzUqeWUhcTxwP2ZVQWhxRExFV05+PjVCJXl6cEpJUTxieTNlciFmWj9SeEU1STdefHNFJCFPdFh2bmNiaCVsN2dsdThhYmJxJCt0'@;
put 'NVdAQnc8Z2BibSQ2OVBATj43NFNkUExkckVweEZGUk5NdD1GWkdjcVJGI35bK05bR0VHKHk8JE1pb3J8a0JeK1deZT47UXAjUFdtOXBPbTJBRmlWe2MwO149fFQ1RjgvMyJ1fjJodGNLUyphMklDV1REcS9de1VfMjp3ZipsJSV2bCshYztYa04wN1ozKWB6Pk9Cdis2eXBXWVNnQFI8VShoUFk5'@;
put 'P2YsbUt3VFokTn0xdFVRazBodyhqYHgrcClnPmo5X2o4b1pTU31VPmJKTEdkOUpwSXphcDh3eWJRKVlsW1U3XSQiKFY7WDdiZ0NnSnNvam1iKEgzZlN6fmQ2cnxHNCQ6K31PMj4zaXYxc3ojUUBbZSZJKUNWVytYJS9jJDtnXyNdVWFBMXshfn1HTnM1SD90MjR7alcmS2J4M1h4WEdfel95USku'@;
put 'M3wxXkwzRyFkZktadFlYZ0tSSVdpRSI8YVR3P0VaaXxCR0w+eHxsRHhVSGo7UFpbcFM1XiVoPn4rL3B3ZEl6ZW1xPVg1b1k4JDtzRzpzOmp4OU5BIXQ+Zk9yXWtOQWtxMnhnRSpwUlNMUXM9Smk0e1MpWyRfMzo5MndiVmRidUlCZjtsJjR3ImdrYz1OUGwuKkwme1J9cTkpT0YoJGdNcXVrK1gl'@;
put 'QHBCVHY0fDQsWWlBMEU3NEQreEhTVnhNYlEkMmF3bEFKJGYpb2tAZ3Q1MXE2P25ATHIrdlF1ZU1DbE1UKS9dZlh4RlRLQ0NRdXlRXUJBKnBFayw0R1tCckdCYTI8NFFnOSRJU1hpQDNkWkRgYWpybk1Qb3NfP1VZRT9HT3VoQiRaM2g6PkVHfDkvfUBpfmt2NHhkIlMpPmp8InVwc0liM256YjY2'@;
put 'dkw9PX44fFl7aGVJUT5CO29CdjhINypEfEQ8QU1gV3ZwPHdwNiE+Vk4yQSFGTklrW2wwUllYMy5xKU4rT3olTSxvLGg9cnFyImN0ZDZGQS4hcH53YHl4NlJNdnRDSzF1S1RNKGd8Mmp9LzJbakVvMFdiJml2d3dHSzA/JlliLzwsOHFzbGg+RnEwT3MjRFhGMTIzPTgpM3ZGMkJOX0MiaVFFcHZr'@;
put 'djxNIWVMYE4rN1p7aTxRPDxoKDAoUkhdXTUmeDIuIVM2P2YhUFpaLk5kOFN0ODx3eiRTJEoiNmpqfG5fNTVTcWYmei5aInxPWXVXQ052I1Y9Zj1peSZBZSk2aHpOZkl0X3IsdmoqUittRyJaT0AmcH1iQ1VGRS5+Yl9KYio0Y3dCc3lzcG4ofFl7Zn48fjIrKHk/TCZkTFdFXlZIdjUuc29MdV1r'@;
put 'Q19LTEVyY0VtX0pFe1kiTmZxOWd6PkhPMX1kNloyIXVFNEoiOFNaUUBrTmdiVn1WaERiJkp5Jk5lPThZKlhIIWB6MVZnQFN0O1Vee0BZVGR6OG17Jnc7N0lyaXBgdzZ0NEcsW0dAZX4sPzxKWSEiTGVDcWxMYEVzb0xpbUY1KllZaVdXJmg/TiJpOSNoVjh2RWpLTU5CVEhVcFBGJCVwfF10JWlv'@;
put 'KU45OFdTZVovXTY1VihCWGhJVCZXZ3w+UEByU2RsZixVaSZ0RyJVOz5tSFhIITdkNH1dOG1jRXFYJkp+WEkzPDZLVHxROCpAeWNHeSEiT0VHK0tKbEZ4R0V5OCpuT14mZkpXJGZLPVFLPDtPUk9QNHxfODQkazBgUSRGSzVTXywiK0Y8TiNSSGdeb14xMWY1KUF6NUEsM2wkYEZUPnwxLHldfkcs'@;
put 'LCIyPVF3Z20zO2IkZ3oyazpXfT5jKVlefFJnRlcvPSN9SF51KTFffFtfO1Z7aTgjb2l3UEojUUQueCtrMVJZWEFRb0pRS1IsZkFVUGh3OFRsQ05DQ0lUTHlUZU5uZSt7JCM8OnUldUZSenZ3ND14RFB9bF1QcFtEaW8pMF14JHM1PnI2VWgibCQocGx2U3JuTjB5MmV3QCY5PDgocS4rc3hWY3FX'@;
put 'XTs1Rj8hSXN4bTkkbEQwPkFwTkRoN0hsKEpUdXtCU0ZjQlU2cU0mQC92YlFKZEwyeVVhKncsYytYeGpMczEyJWZbajZRWmN7dX1VNWIxQHVHdUc/YU17S0J4MFJ8Lih9Sj92OlEwX3YweCNkNFh0aGBuWnNpMj0rVVR9TUs9TyFsP1hYMl9qbTIibGBERmpYI0FQXiMjJTIpQFRnbmFNfnImT1Rt'@;
put 'e3N7YEMuWmBGTDU+NkdUbzU+Wzg0U1dacTMuKiNLNUJhX0RXaGFQW21YUltdcy41TXBTSmdaSlJUUUQhTzMxPGVLPHg/YyNkY2dEe251KGsucWgjcC9lLFU/NkMvIXVlJHVyIXFGdWFDZ3h1Km1xanNrUiNHNW51YmBJdkA9XmczakEvQ30pIzFBTW9XM00xWHJkUmNFOjYiSFp1WSZsQFl8Wl1j'@;
put 'XW1uai9gTCFIRjJiOmw5Pl4hQUlzM2JtMlQ+fi4pW2pfTGFVITpUNHEpbUY2SXlnRE9PPElRd11nTnF8bTFraVZ9Zi9tNj8wWHMyPHtYLHRjcmFtWCQxaitxSGo4RyQ3UVJGSEMxckFQY0YyNVl4SjRdb3BPR2w8fCZIMVFzaEUpaFFodkJNOzF9aGVgYUM4Okg0QHApYTloL1ImIUZ3SCNdSiUm'@;
put 'K3JFUldRfSwpcj9ANGN8en54NDRqISRIZFl6cnluRDNxTFo+Yz1lOThoaEBwSFhmQTUvbnBaWXFiKi5YKHRaV2hhdEshVX40dyZjcTZTa3kiJTU2dzN9c3N1X2phOHkreTlGZj8wSk03Zy8yTXxDXlpFTHhOLDRNNkgrbVRbdTxPUD87LC5oQV5idDBWXWYsK2MjRXYiUUEsK1o5XnxXNmg9L2g9'@;
put 'Pn5kRGZ1Nkg1Qzw3Vn0/U3M7a1d8P3A2I19HSHYuT1YvekkoKDQ0SmJqPWIoZUVZYlEpT28wSkgjNzFKMXp1alReflFvS1QwdjQpSClPU0I7ZXZ1VXtAZFUjUzM5aGpuelM/NGBLKFsmOzdpZ0J9Kmh5KHRxRzJ8XjBwem1GdHlhUmpxYiN2alVXMEZLQXVjc05sTTdpaCtYNCRzXSZwLDFzLkph'@;
put 'MyxqZkZtP2c3QU1JImI1M3pGayNQVXU6cWojbiIwQkREaW1XS3RKTTs+Y3FZOi9CQFkiaVQraUh2XS99V30wOFFbeHNNRWxTO3ltIntSYCRUPkIlQiRrczFIZ3gvP3U8ZTdZRVlWc2BLImhVUVsvRzgmZzxmOW5fOzF4RSM1KG5Tb1p7NkJqdXJFbVNDTCJoMUhTVlo6VypufUMxfDRyclgmcUk4'@;
put 'b216Yyo9RGtabnxebDVVUzg+dDpOfX50OFZbZX1TKDx2eiwuRmEiWyx9Wk5FPyU5ZXtsJSNzeVV8cnpyfC92S2h1eTo5dyZYcUo6W1Z7PUFyZC5reWchLmNjWkpoaVN+bD09ZSF8XnM4RGNYZENVT2BMKy94Z1gvcDJ7Om9tcVFeWUN3MDA/UnJhPyM0PkB4MDQwalZpNDEyNTx3SmlXVF9xWCNN'@;
put 'cCNxUlhoaX5lYzhJK1IhfV9GKFlWc0xdTFEjfmZ8RXUrbTNddSkiYjAqKzJtUkM2KjUkMFZralQ9bV9EUCw+VXBXSltYTSolPmlJTTdPI2M2XjxsI3FfMF8/bVIwZSI+THkmcnpbUy9MRmxbYkA4KSt3R1graWApaztlZz9CQThnTUNsUF54bW5FOTo8VmQlNC8/MEB+R1ZtQXc6NG1nM0QyblNn'@;
put 'aWQ/Jj5kZGFCJXMqfk1MQjBGQFZwUkNfSGUlT2dDKHdRXmghR0dAST1DWF9YRSpTTHJ1VjJFV0UpQnBZbEVjSDFXUz9pT1M1P010fXZoe2Z8ZChfRkgrJTpLVE9kd1o7JCs0K15aWHgoakxUemxEdT9tUXFfVlM0SDMofjlxVzpzaXxmSjxVWzdIZl43VUByY0crWmlEMldOPil4VWhrfUxmYkwx'@;
put 'byx2WlAhP2ApSD80QD9IX1E0Ylc3WWQ4NGZkMWFMRik+cjdHK3hNYVU/fUNaeUNwJnRBT10wYSV0KkspX2hTLDMsZj5TO0Z7cnY7R3NKeW5INnlMdnhBW3Uyc0phI3hLS0dTSGVWTll5YHh0SmdRRDBKaWY3KWNXYEZzbGc5aCNJQlRMNm1FbG5MfGl1az4oX2VnKXFwIVRWWnspIXYyT3FfbWJ5'@;
put 'K19eVG5HbSohJENudjlpVSs7LHQ4YXJfQipGY1I7Rit4dExkYX0+OEdGRHUybGQje1IoPEpOLE9QZCxWe2YjdVBqTDNQMFMveWEoPVVFNDpbPF8qWVdUV2Z7IkV1UjdYZWZIeGQqVSw9PVghMmBmZXdqNEd7WzAiWHgsWUs3TjU9aUZmS0J+fkhRTmpMX0VCZnNQZ014O1FvQ0ZNQmBIZ2x9X2pM'@;
put 'PlQ+O2B6YGBjPVtFOkBIQyIqcG5sQjZYSXpoRzA/RW5ORUVRSTIpOXY0L3tCP3FjYCs6XmJeUVckVXd1S1pQP2RFeTp6dktgL2sxfXdtOExBN0UwUEtsbSE5LCp2USJHTiN9eCglJi93IyEzcjshU1lKPTsuQm01dU8iPWorQ2Vnb1JfJXloLDx5IjFrZzcwXlpOclthNV5VS2VkKiRBTVI8Im5z'@;
put 'V05pXWtvflY2WHE+OFYxajNmd3N3clModCR6Oil1KnFrVXFpNyZeJj84cndhKkIvWGolR3JZcnU+c09sKlNvcWNEQSpSJFVVT1NqeVpUITxCJmBgUSUoTUBAYXBrPjxfUn1NcyNuPFA0UVlPQnBGTlk0U3kzYmk9akxobkA8XilhQyZNXSpae31bPD9gaExfNzE2UTApRWRTam8hL3x7NC5LbDMm'@;
put 'TkV5Zl4peWJkLnAoVDdZRVgpfD40dW98fiwpTEtFSXovXlhuSls+YDV9PDdHJjFuTWJEMW9TaHpUdyVUQyNxXWFAOng4OGgoUz1bXzRLKGdnLzticHxfczxDJCZ5e35HZmNQLihHbk8jVmtpKSluXzI7Kl4lWSZNI2xoaTNJcWkuU0d7cFJ7YG5DejQ1ZD8sJFV+eW1INmwmTDQlJHYqd2BWIm5R'@;
put 'JktOMGA+V0B+TEJoZjU4dztrd1dwUFR5d1MuRCh4dDxxMmBlTDIwIj18Tk9yIkd8T1Fva1ZQJXpONXFVX14yd3JaZmU6UyV5PF5ddU1Gc3Vjb1NYaFBGeEtwO15zMGY0WHBNVWBUJTYpTj1WdUtgKSNDNWJaU2Q2ZHBCYltjZVVJR09DUH49IyNpdz1LekFZV3R8YTFjQG1SITx+VyNuWjxVVGQ/'@;
put 'czh4PlBZPE9Qfn5fV3ZtW0ZnTS8jTCojXm9KWCUyPEZ1QDFQX1JgfDArXzJYenswOHAhKEJPPlhyU1UkOi9jem51cCwmJF9LJSFNMldCJClMcn5rPGZGYzxJdFo/T1Z4bDNIIyMvbHA7KGlidjdiV1AuXzN2Nnc2cGdiT0V3JWhEOXA4VSg2U3A0OXYhb3dJQy4kTjNlW25jVCxZeGV7Tjp4bnht'@;
put 'RVdeMCxJS09zKXkzdThzLm9tVVU5QSx8eEAwbiRqImFvKkMsOV1FXjxWY1AyN0FhejZ+JDtJWG5tcj94U2xkSko/YThnJE9nY0wxSjF3QDJPZXFnUltPKlgjQThhLCFtT2xCfnVPamZ8Zzt7bXU+Y3hldWkxR104RjsjVSpOVWNjZFIwOGFKT2RuMCQ/cTooIU1GazhafS9rTTt2P18pKyldPFJ6'@;
put 'WiVfO2R9anUkQlc9SVJVQjRdN1gvQDsjdTRENDcvOm9MRX16cDVzIUZdJFBrYyQvPkVtIk1rJiE3I0FFVHQ2Y0chPStmZ2x1YWlvJCFuRlFBQCl+eGlQU3VvWDgkO2JNamRrMlBwJV4jbTxPODpaNil1KSl1T1BgYiVHPUUyKlY3RkcmKXYke1pIejxFN0cvS0tNK15FMEEuUm8+LyZuZEE0Tmwp'@;
put 'bHhyVnwsOTY4WT5GO1NNbWh+ajppaT05TCg1dkA4WWZNPCM0S3RvdEVZeXd6USQ0bklFeFt3Vi9baWMjVFJGRVpYKXBfNikja2JSU09LLHc9XzRrLiZuSlFhUl5hUFJCJUdWflshMlJKe1BgODtHQWQ6On5nV1gxOGokP1E5emIkTn5QfHxxWn4ldFt4P1lEPCZnLzdXLzp9e1QiM0Vpc2syM2hE'@;
put 'Jl9eYEdUTS41fWt7Rjd1KyowO1M5ZyNuTldvTFl+aiRGZ1U2MHV8SSNvb3ZfLDl3RFhQSTJ0OH5DZnAjV08qdyF2MiYpSi5kXUxMTUB+NGkoYX11UkFaZkRgOk9OenJuOCQ6fkI5PjEpK2peeGZKOUsyeE1bY2ZIdy8iVTU9R0c1WU53XUpaXm8yJTgqRG19YVtTZTI4QUR1NXg9dENERnFjUHg3'@;
put 'MD1SOkVVemFoIlFOPzRVd2lXMlVqcUclQDhoZ280THddeG9RMUJWbWIzTytmVlFXejd0Y1VKMzB7L0RjJTcoMFlubVNnME0/SyhEOy9nPDBSMF0hKFl4Tng2ZlF3Mi40Ny46fUx6JDJbMTJrVTpyeGVkNm4xZTQmfT1EVDthSzdySzUwdyxOXm5mW31gYDp7Q1N3WjJlcTJ6YVguJmV8cDIzbiNn'@;
put 'I0xzJVQ1KCxHdzN3Ujk9UG47OkB7T2Q1ajxYTzdGTFtKRXY9ZldwYkYvR04vTFdLKyxJVjRMVilkSUo+ZXQlJkY6blZxUEN0VmgpYCV5I3p4Sn5NYzNXKXZ1dnQ8emEvbkUmLER7fltve3tIWEVkK1NJUE07diJHPmQsZTJsInxDeGEqKWtrImlKUi5CaygjZUIzdnM/dFRFa1olTGI5bHVsL3BZ'@;
put 'Qy9MaWlXb0NEW31sK3FYa05haSpCeTt6Vz9RSj5JOlg8I3JAXjwuVVNFVWNLMVYyZUczJi93O3x5djNedndvXVV9aWR9aDlLaStXLGhVRFkxR1BwTiVHaisqbz09RXFxXTVma3tKWnE9blAmWXJDJkBFVXAwcSl8dmYxP0tTPj4pMl84SU0lVngoWVNwamtlSD1rOW9qR2YjMnxyI0VMbjFDY204'@;
put 'ekF+TEtbdWlMSC5naUtzVzQyMGptbmlyO3RiTmAsQChiMztMZWU6ciwkTHgxVUljYkM7Iz44akpeMlJNfnJIIWs3KEcpX2dCPU1jKHhyeGxJLmwxODAoLltIT2IkaHlxTVdgQFNxT3FEVn5rUnpxeHVtdU1XaE88Ll8vJWxkVWAxR149XXlgUmd3eEwuOFlGTF9uNk5RYj5SWTUoJntVZGZEeCU9'@;
put 'aXBjIy4lYUcvfCwzMSxATj9rXUd3OEV1PF5UdlRbakp6VlA7QG91Q2c3Y29kM142TzVTLlhTQGoqfHpYTjRWSyklVV07TDwzaFJNO21+RH0+c2R2PXZme3wvM3JTVjd3WWNjUDI0cjJYclNMZks9KHhEQi9KcnFxQS45N2JbSE4+RCxLYG5FJT80b1tQIl1FOis3W01Jc0BDU0d1WVppR2lUZ1Vi'@;
put 'ZGJmQ1VYOEYyP2gqK0ZqWkRfJUZ3OltlVSVVKTk5QVRfR0g1dX56a1huLjZSJX1hKE8yNmBeTkZUQXdKZExXUXZMMFMiNnhvSWU3ZFlFV285Zj87SyN1OD53IyhhYiVwKypUOyRaVmMoQ21rNDBEa3ErcnVoJTZWKEtMYGZkX3BdXXp+Q3NvXTdFel47S0RIJTZ5SCtGVnpbKH0hd3UzTChCSzhk'@;
put 'fjNRMCsrcEVhVC99VERoUDkybDczOmxzdUU2dnw8ezFdY280blA9MixXdGtvdShYVUVPcUouUUE+UEgrWiV5UHhDQHNHViYlRC9lcFB8KUxaI08wZEwiJipne08hUGkmcVQ0Wks9cGQoNVZyU2owYWNpUGlzJEI/aHA1dUVbRlhqbWs6eV8oLCI4bWB7Lm1PW14xalI9aFR4I1NtKy9qc3s+dE9G'@;
put 'Iyt0T2hLbkhsJXpOWVl9a3dpO1g9UWtkaHhuQ1dNe2lmcVg5bU5waF07UXElZjJRRUw5ZEd2eXlRXkhbb0MmNjxYc1JoKC4jVnlLY3BvTEZHYilBd0VoL2lWOnxCZnMhSUNkW2FPamkqNHIpVWt6VzUmMDQxblBNNFNeO0wqWkx8KSVrKksvbTVwO1lbYEgyXVR4JiZAUC9gJC9ATkw6Iko4NnVu'@;
put 'NHpxXVJ3JSw0KFQ1M3Y/Vn5NRzloTytsRTt2QzF6VnIkM0AhTThfSWg/N0dNVFJBJF8iY0wiS2o6Im87RXpud0A0KV1IdXc7bER9IS5IMGx3YmlqXWhUPSIzX2swSmpaaD5ranpRTUJWXip2PVEldDN1dEd4Zi5bLmV1PUUhZ2o9PUJMaiZoPEFWJGZyK2N2IkVpaWQkWTVveiUhJm5MdipSWCY0'@;
put 'dEZHSF5YfGNBRDtHJHJHKT9yOXdoLzV2Ryx9OllAYkxUVn1YfEwqd1JOPG9hY0NzTmU9cmZ7e1J3eDA8VEsufXJmW3lkWjduTG8rdW8uYTd2PCQzVkcxYTI4VjhsM2dxVjlXNEBNPEA2NyV4IzB6Sj1eKUg6Pll9MDI2U1tgTDR4PGdfIXhaamBxKyE4I0c6XkZrYVQ4cUNBTiMme1NGVXFMa1BU'@;
put 'ajtUY0B0Q0ZmbWskQk9DQEYheDVXWXExcDQoLkE8a1J9QDVEPmhQUzRvZldjQ0dmN0NPMjB6andZZmlKREUyQX5QJlhGXzlIUiEkMlZ2N2dUalU/NHVnKyY0ZGdhc3ErM3s6eWxueG9MSHIrbmkpP2I5ITlNJntGP3FUJV1HTCw0XnJnKyVLXzhPSz9TTjd9bjhJQko8XXAvbWZtPURTMS47aGg2'@;
put 'UypYNGp8QkpFKjk1cHcraEBTcGole08rbSx8Ril9UjVYYzh7WHA/OD5zPFcyW0pURCJqMiYqRjFPdChlP3U2VmRhNUVnO3hNOWZIIzc3aXRHLC5NLmFdUHJLbGx0ZkowRzUwa0AsMzZ2Mj4vXU8xR2pxVmEob2p8cDRbJXZhUkw7aGQ9YjlsL0VSblYmXmh8TE80UG82TDBxKDIzK1lCQ21dWWQo'@;
put 'dlhnKig9ZGlZcztPXXAhaFo/e0ZnRStOJUR0TG4qTXxwI0AoeCV2VUcoenNOXyN6UGg6cnFZYTlbbEFXWTQ/cXVbOVE+JG96OF5qWiFPaXVxQ2xALltyTD5ZK140bFZOa0tOeWM9YG91SSt+P0c6bVpESWZ9SG5Yc10zVVhaaUd+KU4+T0UkfFQ8Yy5LXnVJQUUhcngySDclbVZBPFt2KURTS11y'@;
put 'PHNib1tQSVI+KS9bQXheJkpgUW9mZGQzVkNNdW9WIU9FR0gpQHU9KG4lSWJudW8lOiooazZYM2dxaEpsYjkwTEI5TjJLQjB6M31vMHwvWndiajxneWM7X1YpNHRBU1ZEZSl1bzI3ajFeOXpvT3shRVleMm8zeStxTn5XaVErfkUsfmpEQ0R6fjErKC5jLzxrZEVvdiZCKDN7VGN5dGcoT3glXlEv'@;
put 'azRlai9AaHl2Ykw5MH5pJiV1QGAjd00xbj9rQkQoJUEjPkB7RmhnVyE5PCZRLk5TQTtjOVc3dyhuQWc2P35aSSp5QV98NVVtR1FWNSR0NGBoWj1KdDk5bkUkbilHTyZOKn01YSpQZXx0Nz1xVUUuX1tQfj4+aF1RNHxZa007Q2wkJER+bik4cWBlKVJgbEV5R0tYaHR1OjJAPkNdek1YPywvTER+'@;
put 'Wnd9NWBKcDFeRUk5YGo0M1FiKTlpYyFzRDxhMVdYPFYlSlBsaTwkXXIsWiV6Tm41ej9AdlU/U0IvbWNqe2l2bz5yWVY1NkFAa0RSXyFmTUttQD87cmp2TjorNVR5aSoyZzIlUUlKTj9YYGhyUzdoW1lqcGQxPC5wTmZgSVs7amRyNjZEK1BqXmo5KlRoUzw9W1lgOEpSfnt7P3M/b0N8T0N0ITUr'@;
put 'WT9AVlhFcVtJbGg3QytyfTdRSjEqbzxdWU5IX3ByRV0uIUZPaX56ZFl9VWIkU0llTjkxXnVuWSJ9L1ckWW4pZStKcEA1OilALyZLc2Iia3Y+TDV5dGVVSmBSSjJFOk9YbEE/XXtCKF58S2poOXg4PzRSMSViNn1bblQ4Y2N8TEFjRlQ3d0x2UWJBdVp2Y05laF5zfD1XdFA6K0s3LmllYXB3dixH'@;
put 'ZV1GN2k+aSpWdiVkQkFdJHJxb0dYJD1RJSg2Xj1eS01SaXkySEk2cmc7TnpPal1OVmxzPTx9JnN6MmFFX0F7W25dO3k6ajFRUUUzSDpOUj1zNGhuM3F6R1c8Lz1hckd2aFAsSVRUWzchUXNXWk5BK141ZT4ye203b0NvVUlSRmpdaWZ6Nm9IclpUMWFQdTcrdSw1UT4mZyVxTmU3dzxOJm51YjQy'@;
put 'fERFTkNNUz00VT9XPT1qWkJsMDF3c3EuNSp9anpJQUJSKFIkP2BhdVoheVkyQ29ORmN1eSN0cVdmfFIzKk0jQ1FLKXpMZWgzUD5YX3BuJSR+ak5NNXNmQ2UqYF9RP3JNIzxLVHk/fDg2YUNgdWVSKjFUMzVGZFF4PzE/el5JVlI/L3N9UT5IbH4ueFhpJltfVCEkWEUmRElUdGY7Yj5Acz1qS0Qk'@;
put 'cCFhZFUvVSFRKTdhKlk0Z1Z+Ok0vKlJPQy5NKCReVWxsPW1CdCsxKFV0U0NPOCVRNnJJbnFRZXpXSmxsaXsqNG9gQ0VbSSJTdjhfS3U5RktnamklbTxyNDFDQ2BRX0JuenNdPj04cEVdUTpYKnBaUkUrYUNieSo3PkJSITA7V2hlX3JrfEoxSW1zMiJlTkI1Wys5Sl4qR2wvRHZdaER7Q3ZnJDF5'@;
put 'YmA/eFd6PWA1b2h9TXVRMHg1NDA/SmE3RXtNQDY4YDI2aVdVOH1FUnVFaHpILDMkdDtrcSR9eT9AUlsjZ00rZEMpYjMvVltZfWxdYktwQngrZSVEW0E+KjRgSmlPS3V+Q2ZhNDQ5XlBdKSp6NXB5Ozs/KlpaOmBPKVJfXntSLGdLaUddQmdHU3UsUmVJaDMsdURiQXZmVFdBRnVNIXlfSTI0QGU1'@;
put 'OERqLFBLY2R8dzt+Yl08bzgzR3o/amo3OHlMNWYuKWJhQ3gjYFJsZztoSDQlJG5kSEQiLFIubzxHXUYmYHBCV1dNPyR7SXJ1W3tbRXppSmxxLEw7KG1bdnN0VzMydjBxKG02T1Q0QDNjaSp5WixIc28laUkwfm4oJFN8KlYzVVVvTiRLeUdkdnV1ci86PjtNOih3JXE4aTxRbE9vX0RwUiFscFJF'@;
put 'IyV3Iylmd2ZHczpAYVBoI0pPU1hhT2F3bENGWmNVTmczYkR8Viklb3MsPG9xaFJfbnJeTU5wLDkiNW8vOVN8RkNUYDVaa1lTNHd0fkJ+R2NrOUU0cHleRWh+dXcoOTtlfjRecVNIVHoyN3cjckdjbExdLiExaixjP310R0JheTNpYXxVYURhdDRKXXJuODxnbEgvbDpsL2Rjb3l7KEJ4VUxeUF5d'@;
put 'bzRiOztPXjU8UTRYUzg5OCYiKmY4MTlTKzswMWQ0emozR2VmdWZHUERPcUBjdkUxZmFgVFZhc2o2VERfRT1zclokY35ZUy9YXnBnPkBuVzMxSzUmWUhkN2xXV3RxY3dvRi49aUZ8X087K0IjSFlpQDpWenhDJmhEcGhTNzxyfEVFVl1MWylDQj9TO0lPNmNvLiR+dG0qN1VtXV9tLFhHUixePT9n'@;
put 'QGV6SGdoUExNUStfJm0/SGd9MlZAPE45WkMiTkxuOWlOfndXSEBRLzRbTGxPdmVZfVNuOWsvWjVFUlAmVVooeHVBVmMpdzltQzY4bU9zYHJsND0jJGwvMHksM1JhTCwyZEN3OyMqRSVscl42IkNycWVUYFB4LF86KHIkZntzRW9JVSxGWSE9NjBrNSFrJVQraWtqLEJlaTtiPElvc0NTUGNlXyFX'@;
put 'WEZjLjhDZ3RkZk5CPG1yQktxajxueHQxaGpAdTp8MD52IzRQUlU2OEk7cEdpSmwsenRvfElCbzwoZ0BxbWwxZk86K3MjZ3gmVUxhenF9VDlnKX0oP146PFtPYXNiMXl0aEBzYDg8bWN9KVZ2cGNKdkw3QklNKkxBfDkhcUx4TUM7Tm1xW1FwRnk9VkI/V05QV1FAPmNUIn5KPmxBYFhkNHlZdzJJ'@;
put 'b2ZtIlVXQ1Y5PkxKK1pKcU4iXWF5PSVffU1nfXJ7RFpEXzM9a3ZaXSMxVSkpQU8odiV1RS9YU3FjNWEvJjwsViVfaEl+O15lQzdjZGR5YXJXLCFwLm1XMTwzSTtAIXdUZn1xS2kqL3t9Ty90MXtgU3NaWDc2TEdWanBwUGo8SU9jRX1vWWojOj0xMntFYnw2VUpPYlNQNmB6SnwzQ0g3fmB7T1FH'@;
put 'XSRXKmdPQDEhTFVRakt4YlNNdnN5Unk8TG1tay5WWE4uNVkvc2R6Qz9jb0pQTVEoTWM/eUJEb1ZQfl4ufnlMajJnOXh3UzZgMW86eX1nTEsrLlgxOy9sI0tYInd+UDl1N0pURGl9YGV+eVUkeV0+R10sTS42VmxJbGNeUD8rc3NTK1pCPk1tInlIR3hxZi4vUDdvU3tNUGZHJT1pPSxJN3BiTzI6'@;
put 'VDsqeyxUelN5P1lwJl8+UXxMU3YxJWNOMH1FbXRZO0paMHQ1Q0dPKmxlYCh1PXopVTxwaFVwe3xzLzx9ayJPKERpXXlRXzRXcFJaRHlqa1RTdilyfCJuRVN8e2trblloTzokfGhUM0Npc198QSR6fXBWTnpvWj0+LlRwJC5MNG1jS1p3NkZdJFh9SDpHQiYlRDxnTHlFK0pmdSlHW3ZFfnh4X3xt'@;
put 'N2cjMXp4PkpjPTU1eGVDKzZVLGZCeUZLbGJ1K0dFITQsVShCOTc+WnssImMvQktPWj8uV0FVXnV0e1I9PVI2bnRsOSJSLiJHamw8VmZec310UUMzLnVQJnMkVCxhWi9rMXNjUSYmbWVHMl9wbnlrLlZIcUZiLzR4YyNlNl9tXVd5NlouXzssN3lpO3sxYmJZeWF9UFF6UCU0KyNyWURAfXJmcyZu'@;
put 'ZHtaemthajlIVXtGZlhoNG19W2FEMkhiW3JPc0QvXUA5SGpaajNHd2VYJmtaTF1aWWFQfDpuLmxBZHpeK2ppP0c/ZDRnWjQoT3d7IV1SY30mO2QrTz9KSjFnJnpnTTNdZzI2Q0RlS2RBZDk/SDhoTCs4K1Ypal1Iaio/bnZATWRtU0IjS2Y4clQvJFV3VkorbTdFMTd6NG9wZ3JadT95VFhZZVg8'@;
put 'NDd1KkJue3RRQFVAJjsvY2ZTQjorS1VoJUVKNzptenV5YFVXTDpULzZMfCl1ITsqfWhjWGl+bm0lODssLjYmaCI5aWlIVUtYOyQ+TiZERGt9YmImb0BLVTAveGFSOCFzaU47KjdtTkl7dC5mPnAlVX0jdWlyazZNR0RFdFI8NV8+WypFK1RfWyg7JmVCKWhmQF88LiU5WjFKV2lKZV8jP15uXV4w'@;
put 'YjVtKTNpc0BdJENGN1NbNCo6Pm8vfjlFOl12LENqYGtFejpKZWs5Pk9+UVVNPV86aUU8OVQvNmA3M0YjfG5wbHRwPWVVZzxNNWB2Ny86NWhIRUNMT0koKHRaR3dqPzVLZWN0Kj9NeyZzYF1Ae2JeOjd6Z25UYktlLCQvKksrNDtNRCN2PVVyX2VeY2o3W29qb3BQekA0YC5UXkBLX1RWbSooK1t8'@;
put 'eTNoI1JMREVTJSQrTVNRUW9tR2kzem4kY2whQnVfbGxLR3lkc2pYRVpGPGYycjNmLn5MPlEyNjJgWElqYUhHUkJSZlAreUJJZlFRdU1XYDVXWGRZRihmc3VARypXIXtmWF5eZ1dfa3tOMkpIb2lxUDwwRE1HLGNzTTZIaFkyQSVrR1hGXWJWRFpqeFBdTjVdYEc9NldlZnd2NHhrKEJKOUJ2R00j'@;
put 'bytMeE1Kc2ZrKl5dcldYTVsjZyNyYSNoTFlVQGA8TkwzZThNbHNHR2FBM0FGWWlAJEUkJDN8fklkY2BCbXJ1RWo2UXdsKk9Ddm83bjkyZjpkTHJzPDc+WzZsXWs8Y0hIaUR4Iz1TZXs/LjlYPSQoS3VgUkhRYl5sLHUhVHc9NixCMyp1czUkZXlle3J1QSRlUCFdN2lVTj9eNl5TdF5tK20kM2pU'@;
put 'R1lDIll0WDkkT29fZlV4eEFdKE5gcmhiaXR7I04rYFpkcVdQQlM9bH5iWjg+cFtzQV01akVeKiROcGNvJTgjS3kiNVVsLz02OkBgKEJ0M1RqWVpjVnppW15OQC8+VGEsNExxNUM0eV9XLmhVQDNjdkVhdW5IOjBPfj9xKT1NZiomJnlZcE42KGM2Xz9NNV51QX5kVDtESit7Ml9JfjZWL0YhcUs1'@;
put 'W15XP1kjV0R4NkdJKD5KOnpGYT5CPUR6RmFrRzNgWFs9XT9pM11AVnh4akN8MUIoWjtgZ2IrPyEjLkQud2k5Rj0kQDxuX3R9Sz1tMjhHaDl5VnFpamwxKFRHQ1N1RzN9U1dhJjRoP2IkWzQ4X0pHTVt7RTRQY1lXJVlZR0h1OCg/cipjQyY2PGM6Uk0+SGNvPWxjRUVFaEJ8ZCRmK3lrKUc9cilA'@;
put 'OGFYRkNiKjAsbSVCMG1zano3YH1fKW5FI3xeZHlDdjI/bix5d3NEWUojWikpK2UhP2NeKnklWk9YU0BVQEVAUnZDUCxyOXo2VWMja1ckRUppQXxma3VuUjxkI006TnB1JnVnbkJkYTlxPiRLaSMhe3pFXW1KYTpdaixGQCE8VXhUYFZSPmQhPnJGP3AscHwpfnE5Sy9RJlghN3ZkZzlVe0BtW0hQ'@;
put 'Xi5UZl1WL19dbiNjTGgoPkZLeUhyezUkZVZXRWN9TXZ3aGMoM1VpeFdQZFF1TUlQMzxeUy9JcjhUMURwQFdSYz5BLzZNTCIwfmZjMFdYcntPX31LbFhBblJrYCZnO0ZEV159eTZFaXsoTHNhVSpvUkxOY3VKNktAZX1OR3RTRD12YDU1Smo2QHNzX2QmfCt1eEVVVDZea18pJV48OlRMdHwrZiZm'@;
put 'P2FyUnU+cjRxJSQ3cXFBTzpuKSZ5RD1FYGFMVUVpUj8qV0M3Jk8wLlFgKkoyJnBHMnVWMnB0SDxHS1txOSQ5LFYhMk9ZWDpSR2R3aTJRcHF+TzpPWW9iUVkpTHpzL0BWJnZYfHJeIlcwfj86Wi9lXWk2Rz1dd2hqMiZRfSFMR01LbkhIZEdKbWMvM3oxWWRtKVtIa0YhPFloWVU0e254SEE4LGFt'@;
put 'UigveVZtL1sscj0od3hEYkclam03S31aaHhUa2xqe0dvRFt9eE4+UmNuSEB7PkVbaUZgZW9OcHldKyNrRSp4ISY4aDgiXTtMXyhXfW44Y24iTEohfiElOkpJO19GOXtYbFJaPzlPUGcxLlYvOFI3JV1de20lQy86OSJ9RTUrMTRreShhOW9CYSx4I3teJHBPWX09JkM4JlhEM1thY2d2RiNKT2Rx'@;
put 'W285L3FNSnFNe09bYGhUW19TYjc5LlgqZD03JEgxfCQ1QTd3RFc5b0oyfSYiQX4hJlQoRzYhfjU1RV9ETWRMRlVVRks/KkZFLCFEWVQ4ME4hcDhnS1t5WkEzNkksVzFXSiIuW0hpPGBjZWdmUStQRlVgajh1YlFoekw0SSlIfD44XmpzRX1pYForJjpkOH1hVjx+d11pa2o+aCxsW00ySl9UdTp7'@;
put 'Onxre3c6VTFzRFk0a2IxcjVGcy5iQm4iV1NueDpIPUhIZlM3Kik1bSZQUzIoL19FNl0vQWkxZzBudSxLbGhdQylwUDJOa0hRZG00eTRuVDU8MG89a2Y3KSVWbzI6YWQ+TWNMdUM/eFt+Z0grcTN6KFUsNVF3JVZje2BYblN4X0o0Uy88bTpqPyZFYHpvN19ZRVlBNVZNbzZiTFAjOjdpJml8fkY4'@;
put 'VWROTmAyanYzJFtJcCs5XkBUVmcpT1pgZyM/cjBja2dOZ3t9OEY+OG5zLExXKVg5dD10PklnSDRNQ0JNfmBedmlCVDEyTUlpV35QZFBVWFRTS2BldC8vaCVnTUtJLjZ0TkM7P1RlW002IlFyc2NiKiJ1Wm5iIUNaTlMxOjRiY2V4WUkvU0RwYDlGVVk3RWdAe3ZNUF1KYmwxK09gfT9hdTY8Kn5x'@;
put 'S1lAQnwyISZzKGpITn19VUp+fVB1IjhgK31mPT0wUHFmLEJ4aGFMYHJ+RlJLPihoJWdrZSkyWl9dRGQ4c31uSHhCQEF9IVpMVzhzKFFnRmdkWzI+N2R6bH05TF5KXmFuMWYzNSl5ZmRwUVRbeGxVTVJANyQ/RVlrPDUpZ1JddkdQZSViPzFZLkAhRExSaD1pWVMoeEEuNSZuKHIsWmZ0SmMiSXtG'@;
put 'bkFxNGF3e35Ibz51aT9jQXdgU09pSV5uSXRwOzwqPTA2LFt1WT9YIWhxX0FTI2hkYj80N1NnKm90NWtCNXszXTJkcSZIemY+U2xQKUhSZGdIdnJnKWBfO1BRcHVbNnViZlAyeX4oZCs/ZGFJaGNiVmQ1PmFMbz5rQ2M+MTBOOjtKRHQ6PSFQN0NEKmF9WiZ9bF5TU09eW0BBWTlpdmsqIWV3MnRS'@;
put 'SEJUb0haXywuU0x2LmhwUFVRMU5aLytzOl1Wb0hdL09QYzZVPmM0NDU7NVhoeHReaEpyQnpke15fL0lXaWl4cGk1Iyk6Ii48c2lGYyJbVkxxIXNhcHtDW19HdUVJTiM7JnhxLn46S2YkRm09XWovIT13K0BibEZbOWpofTljUmVFTUl4PEg4eF8sYjtOJkQqPl07NEQkSUVbWWhBLyV5ajU3Mklw'@;
put 'Qy9uciV2fHEmUyhaezVKe0xLTyVLNTY8fH1CSSNKYGcvYXFWXXQsRCgqIy9qVVZUbDo1U29PTzhpIjBSVHI1PHJuV0ksbUNCLCpyMS84KHN7NjsscDpKMDJQfTRZMDM9dWZ9dzxqQWIvaW10RHRvdDFqOTcvd10/Qk9ETkQlc29VaWVlcUhDU3UmWEB2MmdRUS90XmEwciFZWkY/LkJGdHRncWZ2'@;
put 'YH4wN0dzfiJHZVJSUXAoOUdXYkM7QzRlLGszTVZmJUJjdjBLWDZLNFcxNSxmMyk/WUczbyt0UmY8SHYuSFJoXnhwejhjU148RTgmdzdUPCQ3e1k3LFBDPzNnfGEmdytTb1pEQFdpOkReQCh9ajo6eS9ESmp4WmklaCE5K3omdDhXaWtbfGVxP24uRj0+TCx+YjZ1cEF4OUVxRz8jeC5MSFtJNn10'@;
put 'ZGEuSUR8S3lCO1dJVjFdJFRsIiNNVXokSk81MyJVOTleemIzREpsQEJ9PUMhfD1PJiEqY01QJmM5JkZxS3N8RyZFRVtDRm9lSS9kNjYuT2trP21LXiV+N2RgeVt1UzJPSk0jd0BGOXM7alAscD9gJTtbbWAsay9mZGwpPHEpPm5qb0xKRUp6M0IuMnR5SlM7S0AyT05Gc2kwfSR9OT5vQU9YYlQ3'@;
put 'bilte0QzUiN3aiR0YzgyV0BsV2hiUXx2dXErdWs+djZnIys5OCxyWkw5MEt0byspRnQ9QzopWSNYY0lYVFBqTjc9W084WExmJVE4KmNqOUxkQzlRXTFLLHQrIlc6WltJImB0SjBDOCtTXk0/PXlDZHNZc2AiSTtjSnV4eiEvbUpNOENkQlFvIyV2Q1BNTTtJTHVIPXdEXlA/UStvaHEkXys8TH4o'@;
put 'fjljR3JSKUohajNeOjw5UnFwZi57fmY6YWdONEJ0WV1qTXBlNFhtRWFNLnNYaE1YSVMrPkFXLkdPbEJsbEhTYjl+V2MxUH1FfU1aYSl2NmcxWFtbRComT0VBSEgjYHJOQyldbmI4ZUc9ISJnPDwvaHQ4SCwyO29KUTdJNVd0TT1ZamtSY2g+fiw3WnYlXnYoMSN3MEdPXllRcHxkVSJYQ0p6UDo0'@;
put 'KmM4NnNXSTZKa2MmaHQwMTNCYj1qTUU7M1ciTGx9bFRrP2lid3pTNk19X3xFfihIOGwkJXRCOzZtfGE9QDFWQEU9Mnl2RlAjQiw+JVM/bFU0ZUI4cTZTdU8mOkExfTxSP1Uwem1NRDNHYnddd0NdKzNUOmx5ZDltNCZwdmZAOUlsZ3pHYiQlWDZdIkI5MENUSVhKQXdxfjRySTdnRVtqIlZQLGJb'@;
put 'M1dDIl5XMyk8aGQ8M256W1dwMX5lYGN0K254IW1yUzpoeTY0OEgjIiQ1MjA5b1c+OCpoNFBCODY/TntDIkNkaHB5WEldPTFQanRHOWFDJCtPajlIVDNpZ2V4aksvOXNlYSp4SyopQDldTno0eUcrZzRJdUklXUExRWFATXArUC56XTJOdihPa3xEL21mTTNaI2R8SyYoMmsuaFQ8PCwhST8kc3dU'@;
put 'VlE6bSZrYSZra2dyTFNxcTQwe3JFX317Iz0peWpvdVJpUT84PVVsKnsuY2MuQn0hRn5Yfnc4PF8oQl9wW00vK0g0Nlp6eFJEMXViXWxHXm1lV1UkelpBfC5gbXVeK2h2b0lWRVB8TypaXig/aSRkKig4dUBZdUZtRWJYfGwvNl8yQlBeb25oWkI1eTx7QUk6bm4xO08lP0o7MDA0c2A8TCY8KDEx'@;
put 'TV5TUC8xaWVBPzN9X0Fke05iIn07XTt0MUBjakh5VGcpXV1sdTEjQkQ/d3QzMVMuRWB0O05xOXxbQEh+TCZTKiZZMGZYZ0tqZkImejBsRSRtekQ0SE1KeExfQEZzeSsvJkxTcyVPVChEW2M9QlFeYSRSQUE1SmNZLnVGYmw/aXQwUCw1dDFoJDE8fm4uSCN7QkNlQzBIakxve1hjMXt+Z15vS1VL'@;
put 'MmRsZ10yN2ZdeDxQMzg+TGNkUVk/NFBoRmd0SkVfen0wTlNuKHxrflZyTXxFNC8vdEVRJUNCOD5WZHpRdVcxbUBkNkw5U21idikhaDlRQndJayxAUCssJHlDX1h4aUtoVmtobjNrc1J1Ml9JZSp8Xn4ieiRMQWJHbU9EX0s5PU9ydyhLQntTblhAVHtlYEA7MHw9P0xAaU1YVnIhekYweUlVflVo'@;
put 'SkMkRFYoQ09iJUFZajVrYTksU3N1dEVpLGNxdS5KZUg0Qz4xdXFFN0N2KWB5NDdveDUiUGlYSTNWPkFraXQkXzprZ20qaXJSPiM8U34zZH52TStUWlZhXl8lV356ZHlfXWxIKlMxcVFPWlI3NHFrQE8sYEM4IlpRTGkyensvd01RMnFvPWl5cXNhQ3JYb0xOUkgzWCV3IXVONDYqOEY0W3cxQHlo'@;
put 'fXhZNG5TdHJjW3hGPi9FViEqWD1fUE5kc0tTTjklN1tfOkZbOExlJEMpeylIeGs8UXo7IlJmQ1IwNm9JQ3lzfHdqbWtjYlkpUjVSKV9dN1VTM00oVnVIeVpFL1Y2NEdUOWRqMzdZRFh0fE9ZY1B7cXxoLnl1MCJ+bSIiOEwlV2FCZmx4Tz9+cjY2MC5jYEBRT35pOElPYTVjOigycn12VlRJd2cm'@;
put 'IktAIWRgTTpVdUNMelFGWkA+MzhxP2BxV1pqIW8veTpSPltjWVM1R14pam5VIUZNODYoeiR5Oy9ub000dCNXfHFQJjVVWzFoXUZPfV5BX0s/d1FkZEslKiZpZH1OTCRDN0o4TW5RKVo8YkFGLjBoRW49eml8dV44I1M/NyJ3RUslJiZZK0wlXk06b2BeeXQjWVhUWT9ucHNFL2ZiQkc7b15jNGtu'@;
put 'alZvRj5dJS4yOHdZRkAjdzhaNnJnWktQZFlVRUtiJFE5Slt+QDIuRG1HLmNpInRYaCI6Kk1YTEslVW4jdXE7aDxZTmdWLGIoeSw2YzYmMkdESExlMV80KFlMfW9ZLEVTQkVVVS4scGV1PiF9NixxTC9QNWdAamAvelRfcC83PU5ZKlpqOnNhUjciKzFNYjYiODxGWy5MNnMoUmJORkR6PWI+Yno4'@;
put 'a18mVHthNU5AYysoVW8vNTkmN0FLeE9pelo6fXooVXtOY0dgJTNgUmp5NHlxWTMkXnVfT1Axa0g9QE9BJXI+U0AwJlUrLnEzYWZOOj1bJFtuUXNeSV4kKFpTYzlIZSFEY2QiakIiNFFlVHJ1VGhMdTxNZ1g1c0gjI3w1NiV6eXohfTZdNWhDSH1UI1Jybz45QUN5PlVQY0xZPDVoJGZPJSU8ISl6'@;
put 'IzI/dFhqZyY4NHNyQ1cvazJzYj5XVTtyYjVYaF9yeF9SdkUheFNHRSlgOD4mU3EwaVgrK2R3YF9YaXc+Vy87Pix4a2VVSkd5ZCU3SEglSiFGRWtwKHlXd1p2bXUuXXNvKVhkTzg2T1ZZUkxFS3FaInpDMnZ9eHRfW0JPa0gxKyVWXzZWbWMqbld2UFFHdDdpfGp6Ok00UDxiO1lZQDY8STIhNVNE'@;
put 'Ozsyd0M0PW5fKFNPI15mfkUmR21kSGlvNlo3WnopY0RGQ01XKSQ7Q2UlUjM6Y045VTJ6JDU5eHxgJX4+OlpBXUA0WTx8SGhOVnpYL0h9anZIYnldPDNfUmo8XjhUZk10b1hJWDl4QWVsRmRRYyJMTl4xbEwrOD4iVy59WmtQcTtec0BEciVRXyErPCw9PHcqPXU5bWNAR3Fua2V4Zi8jUDBNVF44'@;
put 'dGBjTG1vdiluK346QnYvLnpbQFJ2MDpLZ3Q/JTtoO3Mlekp4LEhQX0JHPDpZciNHMWU+cnFeYSxbbXZZY2lNcCh5OFI3cn09VD9SJGJdMSpqeTRQKTJxWHYuaiRMS2VXWGVUVzpfd0p5M0JRWXo6Nj9QPTFmOmhOYkZvSiwhaExVO1hxK103JVV4Q0IhYXNWTyE5d2MxdGcjMlYlbjFSQFdCNTE/'@;
put 'd1YhZ31ZJH5HWFBxcnAjNlIueFBkWFtQW2k4fjl2cEw+PnVid25TR2orTkhbYVFAVzQmXiMyU2NZe3p8RVZoeVpIamwmW09laWJrWjV1KmU6P31eNk0vbXsoOkw/aHthRzIkOXJvL21RPXA6Lmswa1clMyIwSDYkXzkqLzN3MmdHPFFUKlsqd3BGS1VhKmNXQSRGW20qOzk+OkByU1VKJTgoPm9n'@;
put 'QE1BJStEfnM8c1YpcVBLY19CVG42TCppLF98PS4jaCsrWUxGREVeUXcjSng+Y0hgREcoI2owJi8xJV1wPn1GQURUUVQqWX4/UnRPLkRva2Q0aislJFY8MXpiNFgrNGldQktlbkslMlM1czUuOHZISDx4ZChmaUo8SWIvN0NmO3dCPz8/VD11VyZmLGQhcjxSY0xvZUhBeUNWUy89R0N5QyNRPn1R'@;
put 'M24qYmcoZkIybzA+OG0oMD8kTStmWVk7TUxSY1UuR286XnFdVGlZckNobEpOQTlZe08yJU5EaWY2SlEoNCFgKnVbeiQ9KDZUJjE1UHhiQ2gjbUh1Z3NCNUA+O1M4K011ZzBuREU/ISg+XzJbMHBMRnRGbExtSXpiUHU6TiZLRyErZShoNjgrRV40cFloYSxHfG8peCliMyQ1L0M0THp4K1E1bH5Z'@;
put 'Z2VDLGAuVls7OzU0c3pofmg2PzBiWFA8bXFIPH4+biF0QFlNc0VUeDZKdSkjNCxPR3MsOX5EcUprQFVbaD0pM0xseTg7QGV2Ry82NWU2fUhDY0MxV0BoeFV+TX5LPSQwdXlibDpXUS9SSkE8I317Oj84ZFoyPVNSNnQwUWh2cEppSElaXVl6R3dTWF8xREsjVkhPfT4uNXkjWUBFfTB8Y0E3eV9M'@;
put 'eU90LnhEUWFPZlhINjhZY3lyVmZqXlt2bkxeYEJYcjVeZl1jJWBoN1ZpSmBjd1o0eVFsKltqLG84X3U9S35+SWgmaXlnNTwwN0UqbjI8bkRoMGoqUFNfV3ZXfHFeXzg7eiZwT1E6UX5zIXMkZ0JHUng1K1tgJSpgY3BCcCtUImFzQV5ON1puUShDI0w1Vl1XTC93WyIjYnQ1YD5HM0tAYWkjdUQr'@;
put 'Pjs2XV5oPEo4WTxjazBkUF0zeX5mL3ddYEkkNTZAUnspWntpdnBPM086US9oPWFDL24idHFeKVBbaGJbI2I9UW99PXR7W0Y3NkdFSzNXZThCT1NZJklXYC83aXpMJiRGS3MxLjd8ZmxKOztQZz5WZF03aiVHdih7aWUqLlpDfjosRWRIcD9zfjBscGV+XS8lUSIhLyZyVmJAVWp+LlNGS1dSeyxi'@;
put 'TS5tTUdWM0BBRTtGIkJWRERLMSgqYlQ5KkZMQV1DaiskcT5gaz8xdTIsJk4zPEElVm95blU5SG9oKFoyJmVUSFBTdEU/MVohdW4jXWVEKUsscWE6c0dRcDRwVVYpSWU4L3Q/SEVOLnZHbylPPzo2N2RXIVldb1tCUFo6ZEl+OnFib0Y5MkR3SHI6LzV5Uk44YWZARzNOQjlrX01rUkBMSl80IlpN'@;
put 'NiE/MHpUSTEyQXVNeEk0a304STtmKSQoU0VLakIxVEZPWmUoN314VH1BaVJ6YEBiN0lDIiJCTTRCIWJZM0JwSnI4IVJESXxgdjx2KGRzfWtpbU15cS5bMWlhKFF3KXFqYTVmQXhCWSlUcnxXXkFEWC4zUjZCWy9nRzt3LnIjX1NuNW5CJFpsMWQ0W083WU0wOjxUczJqYS59bWwoND80YyFOPVhj'@;
put 'dGNELiQhVC8vVEU5UyFbbHJ0Omd6dzxrYVdabjwxSW91ZHc6d05gO2s6KD1hMUdzUmNUVDVgeHNmfjNtUVVkaXxnfFBeKilbYDw3NW5hUztSeGNHZFE+KFt0dWpWaXQrZFVBYW9kTVNzJGNULlM+dkFBS0I5ekFCXWtePn5NO1BOSXlsKi8+JVtWSG9tZUF3bzw4PUhPdjdTVHokTXshVm5UYj19'@;
put 'S1c+UDRXMj9oX21xWUdnKnBiMCN9R1oueGE8W2hCTm93O2ZQXjY1dn07VEAzNldnTiJ1WzVWQDxWJFlnNm9iQlJzJD86KHspLnBaaCU0QjteekVOWy93JkkuOWM7SUpPbkJbR0puTkIoVEdRPXxMPWt0R2dSaEspYXJxYVMma25PKDEkR2NOMn5UP153Jjx5KTJRU0ZnPUpQcysuUlF7XzNVQGYp'@;
put 'Y1hTfWdKU3VCPFlyXm9PXjB2TSx9XlFmTjxYWTAkejpvOElTQFIhJXd0RyxWVFhLcHUjLEhUYjhpdUx3Ln1rbilwSSRxbGl0Xjx9cm41S2VvNXBKczhpYTBWaHc2TmJ6WkgxbEEwY0NMMGMoY2N4I3RhLHNTTH1WWGt0a31Jfn1sb2Y3SjpnRz59NWQmX2Q0cDVJVUorNXo3OkFpWDVIRkhuMHVM'@;
put 'PytAPjFKWVQxV1ReNVE0P3k1QG1kNjNXTS40UjxFcWk5UUJgfFdSVnxdOTdJU1sseUgwXiRWcmZFTng8Nj80Nk09Rk1NSEE+YSxja10sRTBtWTFDenpkeGNNR3lAaz0jdXYqQGNYNmssOTMkbiY2aXAmLGZ6b3J5OkJ9YVNAXiI2W2Z4SG53Zn5DIihDQVJBP1ppZHd9SX18SCM0KHZXQjBEZjk9'@;
put 'QDl6TTduMmEmQHVaNC5HOSZnWExnRWN5bD0/ViY8JUV4MUp9fWhwbyFUUzdfZipoKnBWTXxeVkxsdmc3R256ME57ZTpFI2JgVnJbeWZ2JT5CeXRYRUhBTDVUaCFRMEVCNXh6cExCejo1XyU2TytEbyhXQ0xnYmtWYHx+QXVLYSwyeGxOOGA+QXRFJE5RZVBMcGcjL3UkJWI0X0xaSE9yVCs6Ql9v'@;
put 'eFJMO1hOfFIweUgjYHFmMHZUaiRlYXlqc0JgRjppdHNaYmI5WmpmSDRpSnApd2RoOEp5ZUpoOERaKjRuK1d8YUdLOlI8K0o6QkJ0N20uUzpqP3ZGMjgwQSJ1NSVnZyE0Zn5tcXxrNyk3alBpZHRDVk1CJF8iTDQxQkMjPTFgY3s5V2l7OCg4TV4jcWBgUj5UaytIZXAiJDgoUHpbdiY7MDJfYktt'@;
put 'UXp6dzZdMyQlJHFxO3R0Xmo0M3tqdHV4MlN5YTlNdGcreSlLK3t4QFJbOm18VDJTUDssUXU3diw5M1k5QC9BZWs9ezM1JVdhPUVWeD40RGVAYWs0NlJPVkVbODttQDZiezBRVjUzaGF2QWM2RVM5UCZPMXRjUCp4azxIflJfYkRFNCRRY1NATkwoQyZhekordkZNUyxHWXt2VkVLbVosZ2VNYC81'@;
put 'QUgoLkNeQkxVLj4oQ01kaERJPjY2T0ddW0dCd2s7Vz9lb3hnb1ZWUyleXjlvK35MSF5eS0UqMG5PMH1QbGBUR0d9c1s0UkYxMzU6SUB5IVFiYyZtQE14QU94QDYpJiRrczpfPHRsbV4+ekkxQlplaGxmZX0wVUJ1RCtsN2tqayJ5KFp1Uzo3WmV2cEdPczwpOjxkflIpMDdqdXBaOm1yJSIsbzU3'@;
put 'VygmUCxQKSgzSih7MF1QU0V8ekw5eUo0XiVCNVJSY3woXm57bkIqK3xoZjpQSjEpcHM4X0ZZMjYjfmMsSTAuaWZ6L109aWpxOyk+VltobHw7Q1g8PXtdRV1PeT1vdVlsXTVJRiFNSVdZSD5tbD11OXI0OHcyLl1TOGpRNSw5Z2dydE4/WldeOjZfPXlnb1c5IjVuRk57K1BTXWprWGUzKE5xQE5f'@;
put 'eDtNVW9pUGxoS1FfK2xnZTBTVn06dXdtOyEoSz9wOVYhfTpzbnEpMU9aRCwrbCNtTy9oMls1KTtsfXEwRjNPbjowOilURFBJOkwhN1RFeEE0d3Jndig8Lzp8eT57cEZOTkMvTl9YSTxbV0pyL014OW5be1dFcGJKX3JbPUAqNUhgfDowNk81ZlpoNFozQ3toT0RkNlJyfTY3ZUMkOD03TiNsdEFU'@;
put 'O0srfHVeSklPeD1NeVdCeF9dLCtzN1ohL31TMk52Jk97PmpvfWMjQmNkalhkcTVhTD9tNTxIbDpOKnlVS01jViNuQVF5OjUjOS8md3NhKEZ8cjhgSz5XcXtlaGQvP0N7bnM7MD0ydnIvQj5ofis9Y2kxWlBzMzUlcm8iODI+dypEXVtVdFRXakVaYyNFUyMsRFppfCRjKFUpL3ZESzd8az90PXxd'@;
put 'K244WSp6TUNjd1opZFs+UFRaPD9UPXxke0ZpUyR2dGRVZnJ3QGpDZ20xTmdzMihxXns1RW96KXQiIV5kZ2glYWF7OzxmeGhnfWlrcDVgPT4oQ09HQ0NQcG15NT0rM2h1Ij5zOmEkRm53WU5eYm9CTUJoT1Z6bnskcF1RO0wvdERUNnVCdyIuXWR4UyJyLjZIYE5udl5Wc0hDYD8xZVJsPH0zK3Fm'@;
put 'ZF1eI18jJUZrX1VeKGwhUVZ4W1N+KlBeeDlUSXJBPmk+QHtoW19uSWZXeDlxaHtReCw5VlQ7JiNFNlF6eHNsMW9zcCNqImhzLngqQGdsZCRJaDhSTjg4KH4zTlpqVE0qPFR3eTEpKEw9aHFjTit6akMvYD5vKE1TNlIrbjtxQldTNDMkTGxENmQ0VVQldGhTMDsvUkREPCQ6JmYhWitQRio2aCNl'@;
put 'NT4jakI7N0NkQ0RtalRGSDJDM1BaQW1nTCNuVnFVaT9gU2xocXpXY3dfUXU+OWs9b2src1hjM3lLSzVoTEVKLj1lLzVKUyMkYjhuRUkoPFVaclZLNy5JcXlUK2k3OHs+SWt8SjZPfkptK3RxYUhXe209TmovOFtnNHFZYkd+SmRAVlZuJHVfSnksW1dVQTpWKGR+fTspVygpTUQ0PU4pYWM3fHgz'@;
put 'aHJJeV86NWBnSis+bjMxJCJ2XS4oNWdXe3opJDJPRzB3MUxrQmAvZk50NFJPampkYCM5NWZ2el9gU3xfeSF+YHd2Yn41fSpMNj9sJDdCUUckM0k2Lzd8R2JDOSs2KHM2UGZ8eG4mMyZvb3JqIS9pYng/LD5QPyp3e0VTSGg0fjh2NnFmQ2dATT8yRXJtIWZbVixSRUd4Xyx1V0RwWG5oSltaSHpX'@;
put 'S0k7O3Z5NixNLkg2Y11wT3A5Y35NPkVZVThGSiZAdSQvbXohIT1nVjVETypST1JEOlRDZFhrJHddLmFmdnZwTmBuW05JODt0XTUjSWtBIStER15pIyU3MUo8Nz9WTT9mcEI8MT9OTzFVUTBeK2Vxe3x0ez8lNUxjWmomRVFqfVklfmMybnBmY3tnbiNUX1cobilTYDRAYGg1SW1jPVJ1JjVoU2Nv'@;
put 'bG4sXVF4MEV9UCNGPmRoNUg/VXg/KE5yR0AmVCQqQikuSTEsR1JtR01JSUJJNEVndkUvPHUhR0gjYiFARV9nX097bF98KXZnaUtpai5CNnlgRyQzPExucHBZU28rIjRCbWA9SktTbGt0eUI3Kng/JTE9MFFxQyp3anZuTnJzeFpWMF5wMnhWdnZwMHQuZjQyOW5jZUBmY1h5bVQjKk8lOURiO2M0'@;
put 'dllwMFRwSUhGKnc3NWNFWDRaNi9qVG8xPiUxJltWbCtCQ0JWNyMpOERaMTV5VSVyb096NSgqWUVsZnpmenh6ZWF9SSpHdnshUmwjRTNHcXJoInlxQDJSfncrPUhDSiEhOiZfVndYKEBPdlIkfWArYV9EPzI7KzZFKVpqQlJrdWl6RC98UntVXUdnUT4pJkMrRTwkXlFpOGdqQWVNIz9xWUoqMlN3'@;
put 'X3JBdzNTNkgsRV1RbzxUQTNjKW5uQFVqbkY6bXR6ZT0zIWI2JjB9Rnk2S0VvVDNFTEd4bjZGL18vSUBTMWNiVzhNK3ZzbGxLaS9iQkc3KktRdGM1NnFWfVAsJU9BZltKZTwiYk8+XXdrOE43PS4sSUM7SitKP0M5XV51VyxpYHw+OEZQVz1GOn5tODcwcH5Md3dqeVBeJGFLbl5BUVU/ZDVtWGRW'@;
put 'YiRKNFZ5JGh8W3ZKWSFKa2t2b1BVRXRQVF80QVplfH1uP1BUUW9GPWYkdHk6L2tFZzpmaTBlQkMrTTx9KHpOMjwzQVlOdTI9aEgyTSY9eUB7WX5MPGEmVkVab3FNdyVzei90ZFU0blBYPElbRC42NSNKKDtsM0NzV04sejFVSHRbZVAzZSk6M1IqUnwoeVk4MDRKJmZwYT0jTUVTan5aVEpHdiR2'@;
put 'REBwfiV0L3I4cnwiRTBkPUBZJCp8JjZecz93Zzlwa3FaYWEieD5gdTlObEplSWUiXVtSfDkvd3picSMrfVhPYTt0Lj10R2EmM2IubTt+PXBvOX07KT94diIkLy51QzUxKUI1byszXywoRW49bT8lSkxeR2VXZzVwb2puMCVwP2o6NU5dQDN4eT19SigyU1B7O1padjxoRmgwRGIve1QrYjNHMGdh'@;
put 'KFdaXWwxYEM/T3I0aCxsXl5oU2c/Ryh9QzEufGB3SmF3M20jZV02XiMicW9fUDRtYENPfSFeVzghXkt9Pkcycm0wPDVWS0JZNDMreVM7VGR0WFFsNXZLIl5fe3pgL0oqMm92OFVSeHopQTtNeSljOVJUfEcxWzAmcWVEP247WHYrMGxafl4wI0g/Ny89YmdqTWRaQ2BxNyhRQSQzXmFpKGpKb2R2'@;
put 'dixTQ200cFVpcEc2bDVUXmVUOzNHOjxOQW9dZXNwdytnQloxQTV8OENuKGYkX0ZJISQrK3lGUTdbPng/d2g1a1N9WD4+NXAwOiU6YFpAR3tHQC8kWiRTOyFQbyooQDsyN09PPzxrQm96PT4jLDRWPVFQXVY7UX52MWB7aHguWGR8NUF4ZFlSUElZVXFBS30zQWRKO3xDIWxvSHxiekhOWVRufUNs'@;
put 'cEgwMFtDQ0hpOnxpPytnK0NhJjJNL0JOaUprLCh4M3xYPis6fUNHUHUiJExrR1RaWH1oaWQ3SC9zPTxVUVF9NmFmNUhMaDN5UHkwfkN1N0c6ZXxebSVsSzhSXSV3Q2soazJSWCxafWo0W3xARTg6Uj1sUlR7KzYqUSNsUEw1eD0kSTNUUyM8ITN1RTBnd20sOTxDLiJJdElRamoyezwjaGZBNy9Q'@;
put 'YmlFfXQ5eTtFJHA7VThfNzc9SU1SeHM4W1Y8ezhuLDBPRz0qb0MhdiwqYX5vbkw7fjl0Z1Yjd1glQkEjTiksPUpKKTZbUyZudkgud2AhRlMqW30rY1c0ZktaQmkkYUVPM1lXQjFTJWQiQ09xbS97cC8oUSQ/RSkya1lyY2okSDRMViVkaTgrKjwkbFhSR0M5S1EhLzk0NzFKbjpEUXp2ZT87WSNi'@;
put 'OithciZwW0FUQlF+cW9TN045SC4wY2ZAayVMYCthT0dpImZVTDwwKT9acX1KQ0IpVXJtfFtqK3h9Ong1VSk5fD15SFh6W0J0SXdEfU14cm90b0twblpLZ1I/Tjx7eFIkYn45PXlWPWs5SjNPajdfN2ltRUZFaTZtR0RVbGtzfUljRVlzTGVbZ2c2MFllP3xPOlFmWzFkTVVWPWpUOSF2N3xBMFdt'@;
put 'JX5BZlNrfCshWXk+Yjd0P2JnaUxZU3YxVXNLTHYlND56MDVUcnZxOWI0dllFIy5ocWFFenpPUzFrejY5LFk1S3VdNHg9Q1BwdmYrUE1jbHdCdXJSIl9tY3JwY0RoYURNakxHe1RPYypkYmMyW3s6M18xRlJOPVo3dklBfXx0VE5bdmN2S1Q0VF1gSTBkeVRTRE1XMFRfeWBxQjp5Ijc/UzR1eUMo'@;
put 'KkJbW3ZKJTF5aDZ5K0BWUnZxPHhIN0U2MjdTNTUkZDVYeEpMc0JvLHt0SzxEVnEzSFNZTCJnQSUmPiY1UE4zPlpiMmJWQCl3Okd2Kll2P3k+OENaN1hQdVAoIkh9UXdjaXVyfUtyQ314NUxkb051KD5afit+O2xee1R3YS9KSitlLkROMFBucC9TT31penF6Sjt+RzdSRF53dntfb3pmU2F+MkU1'@;
put 'Pmp2MFJSMVssOjk0ZGA9aTROOWMjYHVSXUpGZF9jMH1YWVFKLCp4OlE5ajxeVWsrT0IwRUxhXTNhOE5sNXIpWFMkNVBDbiVTbWRxQ0c8Zy9ib0ZpdXZrJmB5QkBJLCpZcE9FMzs4WHxedE55OVtlWWJ5aFksImk8WyoubmUyZWtSQHpBdyxrY3R3NmAlRCYiQWZrSFd5ZWxAJmswUmF7dnxNfCxL'@;
put 'K3g7QjUiMHgkKlRvbXJ6WCxfTyJEfHBVfGovRl8jOWokPUZSV29pPlVAaWUyXzcoWDApNihtTVEmPmBIfHtKP1o3Uip0ITo4L1ZXRS8yVzlrS3U8anRidUxTOUpJRjZpdXtkQD1vZ3UlKDtBUSVFaWEvKmsocU0hVzEuYWZSOGcmZnpTMU5wdjJ4OzZnbUd7WTEkV1Q0S3RaRCpgOkJeLHZwKCJX'@;
put 'TXFOXzomSDlwak9kI31iQmlAQ0krYDNaXzdzU05+ST18Uyt4bDlZYGV6b3I8U2FvS0dYKjw4LkliUzQiXlYwKi86ay8lWUBNO2JJZzJ+b1V6dCEvc2Irem50Qj5RNV51fVYzWEtgP2VjPGkwO1BBNz9ORTpKTiE1NiJ+PEJESyFFUmVJMVE6VHVJP0pSKjFOVjAjcHhoc2I2Kk1mXTkoI2VFSGhS'@;
put 'eWBdTEYpTnhneGE+ND0mVTVZVG51d1hiWExXWjFnNkUmKUlBSk5YI2ROMVosP3xtK2ldOVhub0N+aD1UR1lRS2o4L15SQGRxYn1mLlUifVdjP3JyUmk9WGpjOC5Xa0Fja2hIbltnbF1CMlQuaWx6ZSVIPCN5UEt3UlNpLGl6R0tGcTc9cjxnXSJHQit+L0d+Pn1NM0Z1bTJyck9ydzxmfjomWF99'@;
put 'Zlh5O1ZKRkFwUz82JUN+aThmUSE5aEp8VCtgJG5ZNG9ZelQseXU4W31QX30icm1BOlRtZmEyZ20hUlpGcFFiczl0bUlAeDR4amBJNmBaV3QzaGEvfUxafiFzcjZ6UClFa3RvQmJtcDJ2TXM9W2pSbVVROXUlO2dJXlhtdCpTekY1aHNrXV1bW31PYDxaJExmbU01W1thND9sNGc4NGFdNT52IWle'@;
put 'InJLcHJFSWZHVHpmd2t1TCFqbnM9RShdUHh1VGR6b1RDMlJ1LDNPTz8kbkR5P3ZjXWhFXktFaSEoMzFFXVg1a3EwQVFFSERIUGo/JmwzWXRdIUtPOm5oPHtqTFVVSU0mTk0pQTdWRiZNX2V+Ukh1bExGSFBESDVkOjdwU01JWV87Y002QHspVjQ9Y11qO25zZ2s1TS5jb257Kih2LyZQfio0UHdT'@;
put 'bUtMSkZ9d1ZycnhtS0YyMFpIclNxb0tSSTl8aHJpX3RGdSNSZTYpOD9NTmlhZmZsfXNxRi55dE85WWskS3lpY10mcVlVa04wbGA1bXdDeG4lQl8+YFUse3xPVGlwTmo1ZntqaVs8PnRwaD9XZ0oveisyfX5aNTpJXl10ODI8Uix1L3xDUilmdUc5RGomUykkMWF1SDchJUdgVDskOnV4dF9Nczhb'@;
put 'MEZ9TTVjY01DR3VUdV1IPnUmWWxLIlhKTG1RIV1DfFRdP08vRzJROmk0S0JlNERZMmBJYkdISiFTKltlWDVyenY4fW9eaDdrPFMuTTU4OlJMd3xEZCxOb3VVaTdUJVRvUiNbOjpGeFJzUWp4KTc5V3oqKUMxIVk/TS4rLkBYYW4lfEQ8ZHN9NEdoZDw2e0YhXVVvPX1vNjNAXnpARWovTkEyOklp'@;
put 'W3s8WFYlRTltJG5zaCssUW8kTz5NdFBwW04zPkk4Lz9uZldlKFpRUj0qJjB4USViQE0oPm9PMHh+PzBKK0VkVXNvSi9sU2lqYlk5JGV0aEpiRCJXbW9QQE8jQGJsOSUpLmtjRExge2hjZVZgPiFdMUtrZ1NpNWpoL1ojQFlWXy9ebEBiNF9gRztIOXlraT0uRHFASyNaeUg4eXl4QDwmekMlRk5u'@;
put 'eTUpM1ZiMGNseVRyYF0vQUYiXlJIbmZzaURoKUtYVTpeUWd2Q2NYIjl0Sk4la2xTNix7Uyp5MUJbeihGWHYjJEdIS3NTanZycFA6RzFxXzokXW5aNmQve1ErZG5gNSRDU1JrVjM0YGRuaWt6S2craXhOQDBTZVBeazh9THQkNT5VNlg3V2NEK2Y3N2J4dlkyM1A4O2cjejZPN0k9UTApbHxzbk0h'@;
put 'QGE4JklFP3JAMH1qNDZHPkVlKig2V1QxbEZYMGBpXlhuOGFkOUN5L2lrNm1ESChLTXFvJXU3ZiFTNzFAKTRLKFdzWzxQJTs0eyNgMjNaIiJufSh7QDxEQk1uOC8oKVp1WXw6Q0VEZEdaPlssc1JSVnkrSlE4N3teRiFeMiosck1nZUdpaDJrfiY7Xkg6QHgwaXNAbmN3SWpkdX5HSkhfMlt9fmFF'@;
put 'aT1yI1VwaWYuMHRnd0c6WGJGP35Cen1YNnsmLmZQZ3U0V2dmfm07I11ANGRvXlhNZ2pSTnQpfDxtO2YhVG1SbHhhM2pTQEVnUmYwOkp1K2BodURRfSxjKnsjbi9UVHRfRl8rPkRGeWhtWUpGeUtwcilXLHI7fEt0InQpaHNAdCtANSY6WnRkPy5QMU5jY0J4MDRuNnVdaVhEYFkmb140JWJdb1Ir'@;
put 'dGpne2gvOyVwVVBURWZzWmJCN15JQ0VCIn48QDl1Z1hfVXtAVk82K3p8V1h8cX5gaF4zeX5vUFEqJWJpImY2WXU7RlZbTiRoaDZbOiklaSlML1pfIVF1Yms0LFk9Q3J1VCYseD5pTUNVRyEsLj9Ka1tFcXBteT9GND00ejg3JWgociJ4M14sZ2xOIkxAa1MuXyQvKTI3ZU1hRjFdXUVhVCk3ZVVW'@;
put 'UEhPYG1qOjh7Yz0wZkBCREBuS2IzTyxSVXlNPzp8bmpabFVGSDtgflFyQT9NJGBiKVZyXlNPQDtdZXJHNVE0U3U/JUJLPyhbV2FfYEJCNFdCLklLSy5ET2FXRWhlZy4hLiMwbD9zUXMjIVhCc0oqfTdPPT5DfVJxK0swayx5VHo5azlfVCZqfSlJenpmK18jRTl0bGcjJFlUYVlRfDJCLzlwcVR7'@;
put 'Kms/LyFqelBpUTQvJE1FNTg9VVhbLjsuUEcxL3N3ZUpFUSV2YWsoVn1dO3tzQz5NU0JjUyx9ZnVRIjwzVUUkPXFpWyY9d3MlKHlONXgrXTkoSjBRTkZWTVBUTiZLOWlaKXEuSX11NUxVOUVrfExIYSRHeyxWeEpiOiJ7ZGhITzYqUy5JRTpaa3dQLkshP31JJFkkPDp6bEs1ZGd1U1JUWjFNTSk+'@;
put 'RV1Ndj4uLn1WZ2s8SDc3cEhxamBHViUvdF11WCY2czJxQT9xW3gpI0Q5ZHpbU3p+cGhIKCpwelVbXU84fm0iaSklWjFdQnV1TXBpcD5yOiJeYXg3M3JsSGg7XzttfjRHN31xdWB2elp8aSgxXj1zIWp0fHI6b05icVsweSIoa01HNkQzW3xIYHA5TUxKbF9+fGNBPmxaQkZsIm92XUJ0TSE2Tkd1'@;
put 'P2ZbRXIvP3Y8bFFoNnVGb1pjcVd0ckpUPGZCU28+fUomWFN5IkxzYmBBLzJFdXR0NyJfR15VeSFjJSRKWiNJXTZkNWxvJVtwOGhBbUokbSl9JmVrPTUzSXYhO2pxen12dGBEVjpMK0d1diI+QmpLLnJxIitmYDxGXUNVO29sLE9WI09QJmhpbzU/Ol5CIjdSVl13N1JjQUdaaD8yVCh9JlZ9aDZt'@;
put 'QjJyYldXe3o4V0A2S2tsKHV6Jm0jRn0rOiRrSTtecHZhdng4dkVFPW9fYEB3cXRoK314K2czXm5aJUpwOl08a3A7eClyeiZwOmFhPTAqdExtbXhSJTVXfnAwLHFkPFlvdUE1LHRQVXVacSNqX35URGV4aUlBdX0sNmhfLClANi9HYj9qO3F+RTFfSFt0LmF1ezF0O106VT8vUFpidUskQGUocEBP'@;
put 'b2l6IUBEeDs5fWZJKCo5WHMqMWMmbEdIVn1ZW2hxQWEoeW1ta2VbI3hmdkopMTEpODE4T1A7ZS94VVVgVX4kUT1MO1QxYFBlKWVeLCohI19xXUpiVV9JeTlhR2c1fF1wa0g2eFdVWkxCXyhYbS92MVpCNlVjXj9SfC55flM2XXUyRjY7X3kiVzNvPTVsNVphLkN8STY0cFYmXztpfT5sOEc3U0N0'@;
put 'ZjB6X2g0KlhyWUc4SVA2QlBUWXojPmFeIyRnYUJjZXJVYzRQLis2cFR0W0ZyKWk1QCZmY2ohRlZeRkhOM2BUREQxc1szT3E2NyFkYmhQRCRpbEU7UT0mQkQuUTptPVdkbz1HZCNpfVJjLkFEIXxCKmg6YWc5PDhCVlBuL3JGSFJpNFg7PHNOLjVfaU1mK3RxbTBkTiVhbjVfNzRPbUA9SVpmX2VA'@;
put 'KzBgQ0M9WShfWV1ZTkArKHM/ZGI1YnBqd2FvXnh2aVMkT0Z9YHtsQkk3X3A5OHFvdFQmaFU0UyRTIkNOek10cGtsOHEiOVtNUCMhe1Y9dmFjV1JqfDB3WC9lQ0hvaHRmNTk2cEVzZDpra1d2dz0yalFLdEpKfDhiOCxQbEJYZTI2WH1bV1ZjckVVRFMhR2B3JGs/X35YRX1gK0pHaiM0ckEsZyVP'@;
put 'VjZfVGkiRygzcjMrJm55ZjJRT2R5Q1IjZHJQfGlvOkdZPD9KLkVHaVopWiMzYiNtOTZNVktJSD5WOWRAe3MkZE9yWWlnV3FgTktWP3wrN3NMfUF1UHNpflphOz03QSpwbld0Rn5SNUh9Tk80K0VdWSg5S11XRkk8OEN9OGR2dVd1MXJqdFc4bEtnV2FgSF9ue2BbV2RMMX1ZM25tan5ScTBCLHxz'@;
put 'RXxhZGcsLDJ8c3EoPWlrIVp4b0pvJkspaHdWK1drZTAhc347N20haDR7VkU1Ql1TJDMkejMsdDtaTnVUV2omeX5FJHdVcXFrb2ltXmJoQkYoaVVtQkZ2cWYzZWZURylCPHxgfmU3VlIlV2Bycm9udC4xZ2hdQkNGMHN4MSZ4dTg+TXAqQ1EsbkcmNk9ZIjcxJnxtTjN8MFBKaSxxLkteMl9kZS9T'@;
put 'ejM2JDFHUTUucns3IWU+I3l2QCtuYUR6SjwqLCV6Y0toQn0qa01nc3U4bXdUN0RjMG1meX1gQj1VTmlEanxbRTNgOl4qN19bLjdbeihOc258KUV+QlBCYiQxam93UmNeQ2VwfFczXj4+TFB6Y1YuRVRPUWFJKil7Ono8JSFQVSRGLkx2MSIoOjpTMSYvVFBKXUdPRkg3Q1A4dktneHttK1IjTzRH'@;
put 'JjFvSCNzIWckO3phR3NlRSVoOjtAISk0e1NlbDhVelVCOyVUVTZMXyMjb1hYPEpSOSNONnp8OEAwYnp7I19afUVSVyMie1BgflM5ZWgvdUZkMFs7b31MenFUWFNWP2p4TjRDfVpqITJmKVU9TDB9endCRnpVMWpFbHBxUnVISzY4b2VIcDVYOChsT3hpak4uZC5rTDNmbzR0aj0maC85U0hFPEx6'@;
put 'KGY9O1A2NE9AUTZwKUk2MTAlTkomW2drQD12eyU1eyowTiVSZllCSnErWihkNUduT24kXlROX0p9TEZEd0M7bStEfXZ1WVB1InBGIj01UXM/N1NkaTxrcCRDRmhsXXgmNEdYQW9VYShjZlp4KCReNlhhfHAyZnsvdDhsUSN9fCJyOEs8Z3M1MGlSZk0hQFNXMkNbXUxkNVE4TjdLdEZNSWR6WEo3'@;
put 'LD0vTDFkaWEyTD9RZztNeDUwQjNaJWNTOGQrfSgxLyZpeiErb01wL2MzXTBxXX0pL0g/SkRzIUh1TUBnejt6MD5NcS88LzcwRGkpcmxjN2I5fSEyYWk2dWpTbF0kQj93YTNRNjRHZj5LT0kmXl8qOlg1ZHN+akpFZUtVJEpHUmMiWTN9ImxKWCVnYC5ZUzBfa0VuPXJpPXp7c3gmfH5FcSEleTVP'@;
put 'TnxqQVNIamN7MVpELjpLTnV9Zn45T00zZ0VLSnc5ZkkyTlFzREdRUTp1RyVBL0opYl53I3VmLyxOfEM6eWtzS3kuZTpycHh6aWJJUC9qJlYxIWlHQjt8PGdLMS9fQGpMXX5vMSY8bTB4WEMhUGkxfktVZ1Z8XjE5b0ppI2gxPkpXfFZVXV1AQTByTGkhL2NHeix9dV9YX2tAcmgoP1MuaH05aj56'@;
put 'WjhjJilYa30iSDRlM3BPJGV7MCglXVhAL3U1aV1zeFgpPSV+ZHplcj1RYWo2OCEzNjk6VT5aYl9HfH5XPj1YPU5QUWAwRitFelgmMXxzJTNDfFshI34wd353NT5eaEN4fFZWP2gqcHFMVSFEUmA3cVpAZmBeNSguOzkjY1o/Ol13WVVPRUReQylbWCxaeHp0fkNWLigqc2R1YlA5WypCP29VcDwr'@;
put 'I1M0eixxWUlLLngpdiRaUzJMTzJ9PFAqSmwkbForb0R3PzxBaDYlMTh8NEVoV2FDWUNUTF84Ynl9KXtMPnJRczBZX0txJDxSOTd1PFNLS3R+KUZdT1dZc141UU8wYkVbfXlqJTsyVmI8W3J2b35kLDghfn43JGAmOHJuKSFEdUI1Y3NlTSJjaz9jWCtML2FwaTBHIm1zbm9hIj5HeVlpdiooLlAv'@;
put 'dzNTc3JfSnIhZDtSVF1meUtHUzMyUV5pU3AyYjR8PiomfigldE1SVWJwZXlPUjljXVFAXURSRylhJFs5JjA5MlVoK2ZpREFCVzlCNk9IajcuKWtrancmL3AjfERCWW44XklHTGkyS0s8TmRaeD8xbHU7ZUFFUjV2VFhHVUg3YSl+WDwjeGN4aG56ZWpQJFVyTG81bHIrK3B5JClJYTpOIjYrOXld'@;
put 'fUBGWl5WT2Bbe2tLa2tfN311VTlyJW9uaj5YJShmIUkpbWBvRWFXJipLZk1reipPJkBSOlM/LGFJUT9ENitzdFMkSmBaNTgyPyw+SlNsVFIpaDhzVzUoNn0+ek5yd0x8cix9b2BfeVE4T0F+bjsyP2chXkRKaGo1aEtqRjNxWTVUUEMhQi8/UCM5TzNhQlV5K1Q9N0x6SSk5ViMjJXN0PzBXLENa'@;
put 'Jm1tQn1De01wdnI6bXckUlhNb0B9TCU1PkMpcXJxdldERT45eDlgU3lWSmYicn1iWGIkKz5UN3hfTD01UiooTGw7STY2RkNNL0xdMDJAaT0rdncpZFJDKXs0L3gjJFlhWm9JJiksNTt1P3BgblEqPXk+YzAsREUlQ2YmPy9TSkEiT19lOTlvQj0vNyk3VH5nJDFAckNKNUhPfDBfP30la0syYi8o'@;
put 'UHtNYkVFVn4mOEM9cTNjbV5tc0hoXTkpe21qZ3NnPysuJV9RMmcwQV9uaktwLkBda0BwTE0kO15pLGtyPS5qLmBgZ1Aoc0t1LiVpUU1zQ2U8T0Z5MjcqV3JncUJybnI9OitmN0pNO2B8dWYiSyI+RkZDVGgsaCwyPXM/ejxYPzV8XyZuQTZsaVBEaDEvXnFXZW4xJCs2Vn5Da0ZASH1FbzpKJG5Q'@;
put 'KVRnaEx3ODNEd1VnJEpBPG8rSG1pSnR+LHVYcGVUantubF58YX1bNj5HQyt3RFYhPTZtKDw/b3sicDJCMjB5PlJ4aE1dV3k9XjAkNWNJXTYxUHI3eVs7Qjo3OUUiQlN2WkIoJVoqUFNNOHM9P3dbUi9DPn07dlo5NkZEXyh7I0tAYzlCMnxvd0lXQS5fXlVxRk1ldH0+U3JScWxRLDs5aSU6YmY5'@;
put 'SmxRPlkmRkYhXktHWyNkO2c/WDJ6WXV1aCwuOHY+XjJKQCxJSFBjP1ZfYE45Pys9d3gmT3k5TXBxNjhFcV1Nd1M0MyZnT3lMLGZrYU93YS9IcF9FMkg7eFgjUGxGOiU9dlR9UCRiZntKWmhyWVMle15TOl00RSRFI3UpRGArUzxtNGk2a0VRcig2MDBNLFRBOmhJJHIvZiVZdCxGbGptc1QyZmxf'@;
put 'bUIxYkJZfU1ielgoTyw6cDQ7eVRuYHtdXlpIWShtSjVRXUBDQWQjNGhWJD1wbzVQQHkjVXNWZTZRKmlUdTtPYkBMKVdUSzlDLjo5NTlwOXoieU5JPG1nbWpUVVtZSTNIJWxtMVpCfiVLaXYpYC5GN2AkL1NFbT10X1RNeExyVGZye2BMRVpxa3heJHQqOjVvS0pwW09qdFBpbixVbVkrPVNSZV1X'@;
put 'RDBOZFtZIjBAa0kpWz5lWFc5RzdeQDsqI0xkPyFsQ1BAPCNGTHF1b21FSTw+emEheyV7LmNfQHYofTs8TXwlN1koZSpiRTJmdlN+cEZXX1twL1A3TEcye25haVFAJU9qbm9LcT5eNiJBSTtbLy8mT0xuQl42fldLJC83by5WSUNDUjRkSylRV3ZhcHV+L25rU0c/PVVbK3glWnFxfWt0cGVDUnM2'@;
put 'fk8seDV1WjtMR2ZPakQyNEo/PmA1cntrYCgmbzxMYWc3VlVONSJrQkFFfCNqJFpvSVB6SihpXjxtUigvVSZMantOOzVPTTR+QysyMU9EQltASnpjW09zfEZPNml7ZDl1Yzt+O1dnbT5HZ35CWzxaR3p0KitDcmMsVCZEQn1UZXs2fCMvV198QFBMYkloeCxgPEZoUSN8Lmlwam1uckUpaHY/LjR2'@;
put 'fGR1LyNleUEwdDdkRT1TIl06dUJgIllkNyxrOEhgIk1jTmRLYSFKakYuazdtQnIiVT5IYmtHQ0klQFp6ZiNNUHBReGtNVUdle0pbd0xkUCZIPD8jKkZJRyV7aXV8WSw9ZVluQkh1M1NpbV80Xzx6Ij4hXUJRR3ltLzA7akBHMWNtKUVka3BMSzAsInxsc0lCNDRvLk1CbGRnLlskcT1lPzxUe1Vz'@;
put 'amxja2BKWlh9KC5ZUyFFamFCV0UrWnJUVDFFTUtoW3ltejc1SGVjUFNxT0JJNCh8NTRAZmYsZ1UrTy96MyVBb0xpZ15vKnR4O0cmV1N3KmdXUTF+KlUxUi5+bXZWWV0xMm54JHdEZklyOC5uNnVXPzRrM0pmaUJ1XjhtYjJZMVIoTlZTcDsyU05BfDxQY2ojfVBedS55X1BSO3htJU8yW1FbOTc6'@;
put 'MT9hIlFtc1FKKVAlOzhWLm8jYmpTKENHVGVrUTk9d3A8PFhjWiVOT3BKSFNGZypGdzE4JHtNYW8jc2pZS2YlZWNuMiE8Tm97THtXJDleM3NlP3RlWGM0fDkxbU8kVH1pJTMubSY8U1ljMTVBVGolQyp0TEkkSGsyNGVQYTNyZVZCenAxYH1jMXtHNnFxPzxNPkZGOTs7VitnQX4oYlMkXVZuMzsh'@;
put 'ekVyNXVQUlQjMFd2eVQ8Y2ZvQFE8OTI4ZyQ1QDg0fXlFKCMpZVR3SHJwUiMlOS51Yyh7W3hsMFBhM202Q0lXW2c6aXYhSHt8QHdNenRsRVpSbGVsRUQmNktMNyV7L19tLmVqW3JmWEptX1FTMnZKdXgiSig7QnIvSD1yNXlpYDJpOndZYXssXjxdfExYTExRVVNFKlheQ05ZY1BEcjRnYGVKSToz'@;
put 'eHFdPmRnTHJnbDQlNFhaOVBjLn5yWXxRL0Z4YkYoTm9tamtGeTw/bDkuQlhzWkZXfERHKj5mI2IyM0k+bldhZCEiTGxvKUY0MUZbVz5hO2YsZUMwZnoqcEVdcDZrIiZfb3kkZVFbUiVCR1dDPXMpZkA2MjlpKCw9U3I6Zjgvc3FkYWVyMT99fH5NaWRfbjFQQDBKXWNxO2NKdW9YOSNkPGZdNyE8'@;
put 'PDIyMUJ7d0hlLGxmYV97XWtWIz9TdUgsfnYocFJ3SklAND0rR2pJKGQ7UW5tL3tsKiJWdypNMGtpI29BcHFyMS83MncmUEN2MzE6MDklOHRnWFFgPFQlU1gjZVUscTlraU0qNitIR2ZvL1J3NFgkWiR4RypGcGleVlBtPUglQzt2fDFiIXB4bFFRU2twT0pSfEJDN01uQ0VBcmpkaSw1NmB6OkZj'@;
put 'cnFodlhTRVpOZkRHUU5eRzplQUh1Vng+OWVmKn0+XzUsR3REL3gyUkdaRyR1P0A8X201TEkxYV1XNTU5PE5PUWd6cyNXWkJ9WUZueTE4blE3fiNUbGt1dkIrbVgjYSMpV307TE5sSSRCeThbWT9ieyFfcm0jPS5paysxMT4qQGBAXn1pKSZ9VnRRWj1mPFc+d1RMZi5XdSUvV3o0dlpfa2Bad09C'@;
put 'Umw2IUZhXnJ1eXsmPWJxWn0vTjU+Y1M6ZGVhaFJDOiReVHEyLnJIIWNRfXEjeD82QUgrTjI0WTA1NFZHIW4lRHxeS0JWKzdYOytVU3ZlXiwpKyl1SD1SZWs5K3hPITE9U0ZoXWxse1ZhXjA4Sz1yXmN4XkslQzAyaWZARFgvbjwzRHsjWmt0TCpVcHdBPU4uJkcrNzheX2o/YHkhL202OG1tQy9u'@;
put 'WzdyJkBJWjtQXSZ6RSMrX01kcm84NDl5VSFJZTRDRWNCQ2c/QzN1TEcpQjlJcHM9JDlyQVZYU1hrL2pne24kaGB1eWM5WSxEOGovIiNSKGE/TEZmaXUuWVk5SFJ4e0Fubi51V1pdakc9TjJ8e3drc2orWD1pU0YrQHFDUUU+PGxqYjBFR1lWQnhfRndNM0p5QDlmcyFabEp7IWlLZypqYyZCKHlu'@;
put 'dW4xLl9CKENuR2ovJll4O2tncSs4ZkFxNktMfXd0ZGx7elk7JiRaTVhzVzVGeHY2I2BRZ0pafUtGWCJdPyZWTWtSK0NsZE1LNmxfTjJJaFs9amVjLHBkTTQzZUIqUzI9OFoqJEJPbEJDO2o2R1J8ODlCNWw2NWlZNElbImtJKGZXTEBkWXR3UChJQVtISU86VU1yfWpfcD5wY0ZkeTRdTVMmPmcj'@;
put 'KnRVRlksWHE2aDd2NG56S2dOZ3orKj19Kl81bWV2cENOcyo7VnUzUTVyR28paCpudilLVSloNUJGe0FZb2cxeGwoUXs1JmpaM3BlXzVzKiQ7ZGVaIUV1bmBYMSp0LF8xey88eFJ7QFhqITV2XnpbbFp5YVMzYXBvXU9MKWFZWXIoUW5VfTooZGgyVnxaN1hlJUNqcnVCZzRYWS5gK3E4K3QxJHhN'@;
put 'ZSpnbCNNU1o0S1MzK1BNcD5sJTxedkt6IT0ud31nalN2ZnBDO2RLPT5PT0E9alFIPlEpI2JvfXl5S2BYRWA+UXRmKkV+ejg6WyVNUi8yLEFKZkpRdl1laVk5LkA6SFhNVEZGbmNrPlExdTFJKHd4Pi92cEZIcEB9PnMlfTkuOmg/cE90PkErfSUqJStvLjhgcU5BImsvMjMzcTdBVCtdYWc5LEsk'@;
put 'YW9efFoqQio2KEtmR1BLdzB1WGo/fVhnSDpoXj5KdTZyODZdPF03YSlodiJEZXA3OEg7OnVKPyszOjZRZWdqbll9RFFIVEhtLl1+M3J3PmpxVUxMci51YkAzMFd2OlZQdCF2cV9EQjNTOUpzbzo9NVk7RXgrOTxzdCVuMWlvImI/PDIxTzw0WzlUcTUxW0RNaDVWIkpaRTYjOFg6X1d2KGt3UTRV'@;
put 'eWhWeFk9KDhOdV51P257aWFyWTR8dUNINW82SmMlJl9+LmosfVFnRk89UCM0XWxMVD5AXyYzTEQ2dC58P3Zea3V9MyhjYlRGdGZJSGw0c0p2MDJSPiUqazd9RmIvNWRRalp3Y1Fyem5zXUFCJWI0LCM0SHhvTl1VUGU3JmRaU3NfdWMpMSVgYlRiImtLR0hVMCVtP2xTbF9OKWoweXJZSCRgXSR1'@;
put 'IixvbipYPX5lZ1hDI31DWGUlIUByditjNlc+ZGt3YGFmPHBdaz9zJXRDVEUldXphT0RiZk8iaFk1MCkrb3lnb3k3aSE5ZGhOJmF2dnQ9eVJUbXdOSU1GKi4wQXNrTjhSelVGNjouWXN7ckMrbnl6ZWRjKyRwNmIrPnV+TjVYTDA/I2c7N3M+fXNgMDlBaztQVmA3U1U/WkJgejl2PjJxOyxeYz1i'@;
put 'am85fj85SlBKUCtbSSRsRFEqem84JS55SFcmS300SDFpT0VbdFt0RVNrcCNCR11eJFU4ZUBVKjMpdHJNUXB0akdZdXxXVT5QPnAsJT0zKVAwZGBgQCNJTmRhNypsWCU2JDZwXmxOLnhnaUZVNF1ba2JCTXhoXXE3WDAxTU5yV2UwNSE6c09WOHx+X3tERU5BJGNNPTQ1Rlk2KlohXUhRZDoib3Zh'@;
put 'MiFwOlgmOCFXKy5kPzJMSU1nKTwjJlF4Pz47OSNCWTlnJilZKSksOUQxTzE+S0NDe2pIO2h0KSkjQk9McVE0cjRVeWRAMzdib0k6RjFvYSEzQERqVlRYPnM8NHU9JXdbNSVKbkI6QyJMXUU8an1JS3FLOz1XRllfWTlOOk1oN2BbOGQ/eihTeT80MjpwSz9qeUkuN3QhdWNnMDdLL2tJXT5uSX04'@;
put 'N1tbeDlQTGF4PjY9cihpSzZYVHVBbyxAeSguM1hKels2PHRMJUpmLDAoYS8iOjhjNi8vRXNbVUZiNEFFZDE3QDRHRzxEN3BROHR2emEhemxVd2g6TT80ViU4LzVRSD56QFsoc1hacnxZcVszI21fPj00LmhIdSNCWypkSzh3QURfVHd6WH0wWjxafEZBa0w7WFRYNE5pNHFDKnBZMmFEYV1QUU0y'@;
put 'WlIhJEZATi89YGlBSHhHRy52cmN6NU8mOWRZI1IpP1chcTpbV2FFN2FWfGF3JkZdP11nQ0ZMSX5XKm8/aH0/XUkjWmZWXmN+bi5BdCtoNT1eQkZEM2JZKU1KcjZlSDNbdS9ZL1giOE4oeWlvMXVlQGgyK1BPVGddUV1QWDBJdSROeX5WbExYTSNMKUwmZGJzd0dOTjtndypEdT5QT1Q4Y1JYaHM6'@;
put 'dDchaHZKO0VrU1lEfGMwXXtpYE1oYVs0XSl0OzF2YUF5YXJJbERqYW4qPzk/RWxQU1I6MXwhdFJTciZyR2A/UCplXmJEJFFHZFZYaiVHNzlCSTYzPVZDPy58bVpQdSFlMU9HN0w9SGF7bCQqNF1KbUpXZERnKmw5VTEocT48TVVCWSQicEU2QWlnYHB7MWhgaWVULDYqYEg0WnVANDZ5empPS0xd'@;
put 'MEUsPjZ7QkA1U1AlTEQvW2QvTGhNSUQkV2FUcS9qK19MRE9sSTlkaXUoKC5yKlo7I0BqKHxLUnIrM0tONjo5elUueFVFbkhtO0QmSz40OmJoaVg7N2FGLDEhMX1mMXp6PixQSHxWTzY8JnE5TG5lcnF1ej5nQWEuKjQ6ajBwRTxMcClhXlB5e0l3c2swL153RFljQT5nMy5ARSg/eXBZZWd+NTtX'@;
put 'ITQxbTUhbmFdRXRNaFRjZjs9KVJoRUtDSEtNVTI6XXdhYCw3e1V0PlF0dGEqalIuU0Y9NCQpJi4kIT49XkZreEI0Zn5JXjdufXZrNH4rdyhYeUFKKVp9Y21EX3ZAezx+RS4wPTluZVZnZmwvbVNuOFErKEQ/IVJGSVMuNzg9YXgmbzFSMkAkbFpMalkhR3FSUlA8d3NOSCxMRTVzQVlQIzdJMT56'@;
put 'NFJzdHx7WCRnQDBnQGwyIVBpeEIkd0dBNEtJe1RkRyY5I1g3PCFlVk92dCZJMDVELm9RaWhSd31GMXZYcXlKO0toKSVJYy9MdnJ0enE8djZHayEmP2hYODU0OnVlKG5pcV0lK3J6eyM1W1ByYTc0OnZ6YS5KanpZW35SLGZgTnI9Wm40UClDUkc7bUpeSE5scCJvSm12aUxFdCYqbDN7UkY7eShe'@;
put 'Rl1rLFd5OGY2TDJwJVJXdko2aDcveSkyNXdBJDwpPWNffGpaKEpvYyojYSU2USh0VlszWnMkeUtaSEA0OVAjPXNnQCh7QjNGKiQ1WzNbdjwubjo2M0UzdUtzJGNeYjIrPl9lY1g+MnZQaisrfE91WzQxYW11bDpKQ3tsLltGZzkrPGtwIiUkZyJjMCFDIWtTfX44VnFGN1JUMjhsMS4oJGJsYitB'@;
put 'SSl9RVF+cVNDXUdVTHI6IjcjJmNwIjUsUXxLOzZAc3Y/SHgxUU1jMXEuWXJ2X0IrandUSENZaXkxSH13cTc5S2hTLi4qSDhHczZPK0pAJTxVZlpMODN7VmtIamc4M2EzW2ZPVjExTCQyQS8jLEpgJGRuVl1FUmx4TjRFJVhaaFtQandyKlE0T2A3LjlMIXU7YSJqLF42UTw7fHg9Y0JLNHgxXz8s'@;
put 'eFtbU21tL1U1JCYqTHRKPXc7M0N9VXxFRzthYFZuMllPRn1GS15dMFcjejZaSl59RysrcVlhN1piSSsyOXExQG0icEl2MjxXWiM9K34iMzcvUiordzYwKX5YQUB5TFglUDZlYytDTyJiQEo6YiwuUyQ1S1c9NlddU1VWckIhO3U+cD9+ITshdzQ0QURNQkQ1YDcmcyF2fWBoNHc8ZHxFIWRlLGx4'@;
put 'LEJiL1puRG9OWzY3TlZdaEhsczJ2a0tmUkciS3FuMWN9I1pvb0NqRTFELGpmPitEZmc3SWEicGFfd2ZIWis/VTM/ZnFSZkxyO2Q5TDRMWmFNN2wpRmo2SCZeeSJJOkdXXjVgcSU/VlNncmg1QlckLFJOOHBfI0R4QGR7WHcuQjN2SU8sY2UxcjZQSUNtVX5LMyM3WU1KWFZPcWA5cSJtJks6LFJ7'@;
put 'Vm46fn4pdkhvKnBwTXJJYEZkOUtfV0x3KDI4SV5veExZYHxiTV1bfGNpLCtyTHd1eS5LZ3ZIT0pqdWdyTU55XkJYZ10wa0FHazlSZGhaflEuREcjOihaUiF5QVM0d2hJKjhfKGxFSUdmKWswXXRpfUVPfVVBc3EsOjFzS28kcDlkfWVoTjB+UilNcTUlejU6OV8yNShLbjlpbl1LO0hlVnFAPj9J'@;
put 'Mk8hQWMmamhSQkFJdmZQd1Y6N0F4eGBnfCorSVh3PGt5O1ZLNXNtRzhjbjp9OkNdZmxMI1ZIREIwOXpGbzM9O2JjUEFqMH0rRSt1e3soNDljTlRII208I3p2OGl5K2A6XV5DPGpPd3ZdS2hLXiZ8cXNLeSIuPTpHbndwVVg1Vy89d0pufWNVLjxwQ0VTcXNHWjtMXXE4dHZOWzJRbnxoQTM+OUIp'@;
put 'RTd2VWFxTSVrPmRbTUVwY0Uwd01ucXsmKnQ4VmFtNmREQTJ7IkNjeGtRRlhtNnkxOzx9MkVwSCpHdn18VyxyUHZhPzRDWCRFcHNuMntjdmVJL1F+LHxQK2JnIWY3fSZ9c1pAb35aPCk8TWpuNm5ZaDl3SV1xU2Q/XSpqVU1uTHc3V1VgaGVDXWZZc2decXspTTwpVHFqeVBoZ2Z6UkBVLEooN1Bo'@;
put 'OzB+bEN6P1RYY3h1TFtYaVJ6UE0rbn1UYnwqZk1UWnV4dzdESlNdMldrRXdFYCJGaT0lPDBPZEM+QDJyaTZWQjByQ3YudUsrMCJoN1E+XiNWTl4/NkI1XXkvbVhsWVBXMStUZDohS3lFd19bd3BrJW9Wd2Z4XSx8aDAxImE4PkZGPHdtdFR7PCNJezByQjZHPld8O2ohSEAhO21zZnVaSkI+QyxO'@;
put 'NmImZWJpT3ssWj9GdElKI2dPcEcjNSpWPitGRyM/ZlhTajpSZ2BTU0h0ZFRkWnJ+OiEjXWFjKy5VXzQ8P2M8W1lycithMS98JDYqWiM7bWIpcEEieiJQPiRjbyM9OCJaU0d6cSFBWUUib3VvWVRYTGFsaEF4OVIpKlJ1Q0V1NHk8Vi9VSChGeVNOMFFETXA8ey5nfTNraG5JYkRNOXJPeHo5Y19I'@;
put 'SGliaWpCKCRFZzY7bH07Sng/NzlzMzFpIjdqKGFFKiF2Xjl8dTJfZHc2N3pOfjF7bTltJH1yI0JWI1F1SjlqVXljfHhiPUlFWEJydERmcmZUfHYjWU1AI08sSF95Nn4xIytZOW4qTj9yKEQkeH06bjJgdFZaSmNSMkgocDRzPzc6UXw8WlpyfDxIdnV+d0g2aTBSNzx4YjksOkE3LmN6NDUhWy9u'@;
put 'cCo9WTdMe3FCXipTfk4wYEFKIU15fVVaeUJVXihxUGIvdHYzeG5zVk9+QnFGR15CdEJwPT1hL2BIdT1+aFh1Vno2PCludmc+ak57Pm0wdH5QdHwrdlJIKSlIL3QzLEs2KTp5b2N3QntUSDFYPXRjQXg6UWMsTiY0NDdLd0dPRSN2PmdoIjIlJjNkdjNFNFg7R2RiaHVdMThyQF5dQm8sQ29laFMy'@;
put 'RyIiLmg4OjxDcnQ3WEY2M2taRDEmUndQX2I1aSh8WyxGTltuTi8kNXklIzlUP2tqdTdVSCRMITc6e0UrPmJjKXVebVpMKVdxXlIueV1meWBdcD0mU29LIlkjMGVYI3xsNHFeX1o0ISxAaz5NZE4sWTBTUTVbVyEpdkp8Ujk4fHw3PG90ZX1dSThmI2Z7ZEJjcn47cFlMWUQvR3VKUGVmYmgzLCNA'@;
put 'Z00lUXBQX3B0X2RzQSN7JjRncW98bSFAXnIsS35dQmorMWosZmJ2OzpOIixmXT9bLH1QVGNbTV1KSGkjVE8lN0lsY2c2ZHhKPXouKmZsbjQ/bWQzTV1lcGk0LipXYFpQJENsY25UZSV+UFJEXUZvXVdNSXsuI1dkTSh2cTkifEN0byE9P305Yi9qQl8xeEU9KzFLTWFhXz0rMT0ocmhZdmU9ZUJO'@;
put 'S1EueVRuRXx2bUduayolJDxbVWdqQHV5YTExQ3xjS0F7bG9wUUAuVVloJkBYMHc6OFY3aCFZcH45cUA+NiRxKzg9KHddImw+UT56KjNtUVY0KkNjZjJjVDRHRHl9TzsjNG5AaXVEd05ZWmBLS1lhRy9TSkN9U0puYCJta0syMT8ra01pRiwzN2c8MEVRRSxHTFRIU3BBXnVvY2ZTJGltYDhCOiNG'@;
put 'OzdBd2JFIWUrPUpNVFJtT2NWaGJqV1U0JEssWGteI1YlYU9GW2dNZFZoUUpxYCpDal48bjJGRWhRSnFgRDE7YCouPHA1YEU8RDZiPXt4XyNYTjdxZWlULzN6Z1NBezl0NiFORWRMY1Iwb3chdHojVUJ5WVs1bUlPInoxVmp1PEc+dkBLSzZvYCtQb057THQzfmB9RilibGBLL2lCLFtEMWJqPlZ6'@;
put 'NSYzNWoscUlnUnp0NEJfZChKI3g5QWgxRztWQjU3R3NUIjtmS0J6cz5VWTcuKXZNMDUkW0x4SCw4QC9+cn10bkZZZzlLIlU7OVk2PlBjLEImOzpRXjR0QHdfWGclJXZvei9+OEtRLktwTWs0ej59WTZtZj4wZ2ZJam9JbCQlXT0lTk9SIXdvbHZQPUUuRXZJYFdTS2VUKSNqcixed1FrTV9DIlB5'@;
put 'LFhxdk03fFBvZWM7bS9mVWA0V0RFI3JlXS48YCtzbW1rM0RmMUJjL2RQM3VVd0Rmc3VtKnFpJVA0cFBbMzpQT1NEQSlALj9OJj9IL0lhbHV6IV9iQXtwR0koVyZVSlAuYy5pbW9oflkkb3VXd2xmRENQOzxAYEM9dFQsMmJzQTR9LztqfWA7LElPQDl0fEhuX3l2aihVYUdYbkx4ak5uKHJrdVh9'@;
put 'cj45UEkwRTl2TCV0NkFVO0pzJnRKXkVFeXdKJF9uZDRVW1ttdSJKOk5JKDs7c307S3lST2JPTCJXNT1eXnxRaXllJWNXOktyJF9CTjUuQCRWaVhuclI1d1JYKj1DT2c5Z2VWPDdNXVk/OWhdNjlIMUAsTG05KzxxSCw3YWhCaWArVnlVIVouJkt9NCVrJD9xIz1uOXIqOU9AVktxb097KXkxTk1F'@;
put 'RzpCaXgpUmNbdUw2VWExQGFdWDFIVXY1Q3diRU1jL0NJSz5kXlVURm5VST8uUHckaV4sNGNGXlU8Oi8keixCJilyJDsuWWdWYD5+bzgsKzxQK25ka35gMUZ9e2FORDptNm98VDYyVHMuXV8pJXMhVWMrZmZHdFRaLCpYRDlwfVgzW15CbkdLYllJUkZXWDVEP2NJQ1N6WS92aSxEZ1ZbZWE0JVVO'@;
put 'YzFEbkJxTy5vYTRTUjx1I3F0RDZVfkF6RyJAUTIweWEjczxgM2F4dHM4VFV5JGdQK0lgVTgxZk4+ZktydWtQTXNJdHxtLkRxVmFmN3FTKXFgMiliMS5peDFlTFBNO1dgcil8WyN0YCk7cXRVZTpAZ1thUjNubzRqVXtCWWlaSUIpeykmSzJZckUmYE9OO0Z3MERmI0JoIS9PdUN3N155LDlae2xC'@;
put 'TXFAYCJ3e0d1V1F3bWQhMGJYNHVJTCMxZWM8PHd3djIlLCF+SHAjO1hmVypocGJ0L3wsNjZ8LEs0UlpnaUdvTyJDKnl6LHd6Mmhhc2dQeX4rOHU/TjlFTV0uJGVwaXkkVDN5VSV3V286citYTTNocndAITYkT2hwMGljVDdvdnsjRVRad0ljfjl9SFtvTkFFa3N5WF9+ODdiaztfNn08bHAie2c/'@;
put 'Lz5XeVJecFl+RkIzam9JMFd4cWFnalldRkQ5a29qNSp8YHlZYTdMQXJbcjF2ZFkhYE5NZEcxWS5xWltqVlYjSzxVRmJwPHA4WWVeJTc7cHVpXyw+S1toWH5NciMzdG96T1E7MjVaZjN5d11tRTplOUZiKCg0NExmI11kSURpSUtPXlZTL1FGXlUoVjtwPlNufXFfbXVLSGVCSkwvNEQ2YX5lUD10'@;
put 'IzU9VjQ2UjUrUHFDbkk0NUl0bmRCZ2RePV9VOEc4QzhMQEsoJURSRCYyMF9iKFdaYj5lM0dPI0gyKXk0KyFXWChzMFhlQmBIeURyI0xYO3AhOGxISz5ofCtPUUlPUzR1cGhqRGk8eiJgUU9Wb1VIfEpCeEdidzVIRFdGSEdtZi8jTndIdnd9Xko3dSNaKEpGZTNZQT9bZWp6RDc4LDV3YERQciN5'@;
put 'YlttRXw7OVJ6Wzs4Rj5aamdKeEBXSDwwWGAjYlg3KlhBa19FdEdPLExpR29PU3tJaDN1NXh5QTAzTUVodjlJQW08cHc8czFoVjJ2UFNCXipxajhjRGkxKUdJbWVaPjhfdVVUNX1jUWtnT01MdmswR05yK205YlhYSFJjcXRKSzhme0MzdWR4aSI5clFBfFdiRUF6RDMrW2tLSCF8REFwSjVYS0Bo'@;
put 'eWlNen1vektndzVYOilzRXUvS3pEM2FGUVk6TDkocloiSCwmR3pHMUBqN1FnKWsoaSx7OyNgeH17aSFldCguaUhMdFZqMXNGPSNCKFNSPENIOERlIlZ+XSpFNWxudHdrfEA4a098O0g1Onx9dEtIPTBmZF58NXQ1OH4weXdAO1M1MVdqVjdnWTRpJl10aXxvOSM1Jmp7T044Q0B2N0paPUhPelI5'@;
put 'Vkl9MDNNaUw/V193IX1hTloiJlFBZjZ2QF1mVjV2b0piVzs1N0RmbUY5MWI4UTV1Ujc4aUc+TWZYc1NidyRNVy9NO3BrYCJAdDx2TzN3PD5VanFqZDIscVBjL2VYO3lnPDg8JkhmeX1LP0peRkFjdTtUTzYwNEgrMThwVi5UNTp6RU92cTB3OHYpR3RQazVVT2FnS0tAUy9bTEszYCFYMTBaZCtx'@;
put 'dEZYZWIqPDpgPmtIPk1eKD49MypkcC4zX2hhT3dIW3U6OGV3XTNBaUpPMzlWOE47Zlk5JHxAaUdZUmVNVGd1NElPKGtyZX1lLzgyMT40RTRnaS4oemVJYDFDTFZePT1STXNXQil7SVRPX013YG9rTnB4VHVNc2dWWyNDYjcrWWkiYTZaSCFJbCFfOEN9ISY6KHApWm01I3V5L0JIL0I/SVVNUkB3'@;
put 'dVBOTWk5OGl6KFs6WlJEYGNwYzVoMGU1aHx0T29TRCxGNF94PkRYXUNmISRJTjYkOG85Ikg2X1BfI0c+Q29xUlh5QyZfZ0A7YkRYMHNyKXA1WmxhQzltJWNnc0Q+OVg1V25HW05vSXYpcUxqWl47Q3ZaP0ZXcXUoZGVTaXRMbG5xMz5ydDo3RUs4a2BxMTI1M2JrfkZwVilRbkM/e3Y0OHx4W01l'@;
put 'VlV3M0ZaPWNUX2tvby9LYSJyNGQ3PkIiSG5mem00NHlZeXxQPVBkeldMK18oI1RWSllGUzZYWitvQz9gfV9IO2gjMVB7QEZ9WGMrZ2NeVnZfOjV2KSM9bVhPVmV9JnVCL3YkPUguZj5ZVWVeUDBUY3VUQnx9UktlYGkkT3pfd2g0d1YsS05VVkIvVz42KlBNOVdVS1k2XkheO2Z1Z3F6JTdzfEx7'@;
put 'UHckUS9UVUkwOSVMJmV0VU9LSkZQRHhbSyJReH1KaitaIih3YG9+cyZWdlchSTxWeTMxSytwenU2cjFpV08wI3dVP0BGcEdhcD1lNXZuQGBpN3xwdW9GRWFHbUlnZm8/TFUpTT9RWFhETGlCRSUsTjFSUSgwL0ZXVkk4alNhY1t0IyxjYm9vRFZ4Z2J+emhQSngmcypzWFBXNn55fnMkP3xzfHc6'@;
put 'MnNuYCZ8ITtmTTRffjx8dCMpKTlvW15geiV0NlFjW0hbX1h5cllVVmpNQH5FU210VHhIPyI9MSQ4MHZAZSQxOHl5ZzpBViMxfF8jeil3byU4UihgbmtqK1tCNHtZOTosem52UX04aUBMVl10UTZxeVY1YUhzNGM+P2BKRUVoLzhXNmJTPzlsREQ3RTA5ZWIoQkY5Xi5NL04xWltRdXRfSHxQMXRV'@;
put 'SFA1Yzs0WW0jRy58UEF1e0FLZDNmVVZIfSJbcXphQzNFR2wjLF5NPCMxdGx6KFgzWilhRmFHIWkoYGJqZmI5Mj4rO1EsN11nVjR4e3JQa3k0U0w1SkxPUnFycGZJKnxjQ3JoJUh7JlZ4JShzRSh8V18ySU8qeCgkRWwiTlB2ZDNrTHBjQkpqVU0kTUNaInFOaSEvUlBBQkFSRFB5QD5CZyl7UzMi'@;
put 'NUxlUjFIJHwrYDRMZTVjNzlLcGdJWWsrYUNtZ0NDV0pdeTlNenRJX1NRPz9qZnxgPyZhQ2hmJkBWSj9ydTVdbkdLOysmUUR6OS9MUipINS8/akptZE1daHAqRGZ5dU9QQUJ4dWFZMGN6RF1oRE53dTF0TUh5d1ZYVXpZT1tBIVkmYSMoYkRdaHhCOUJPQlVOaE49aG91cUlxIlBHeyEyS3kmaCNx'@;
put 'IT9QaXhxOXdTPyp0I3BSUlBHbEddZ1Y3fFg2VDYkRnp6fV1JZ19eNilnVTU4fWI9aTQiKngialVXV2pSNjFbckw3ZUR2bnNoPGlLX3sidElqbTRqMGRPbCVreUo/NVNyZls7OFpeMD56VnoqSyRpLyFJWk1aMWssdnhaTVpLSCwpKkRMNCh8Qns7LFZVclRfMzVoMUhfOC9PI11RRWVzNls+citV'@;
put 'PjliL24+Rig2dX1qbFRFSnp3WEtHTU44Zl8wdmpwSUhdclZ8OWtVVGVlcldhcCEpTkRifFs8Z1ZsQldCNmY9R1o/NlUhNVRjLmxTNVZmWStdL3lyUylZOTNfSVJTN3JEIn0iWExqMmFaIVUoYytSLy5YaHQyLltXPmI+NDR2cSI3aDo7Q2JUWndEWC9WNnZ2V35XdSZ9fEU+X0xYOX1oUyhrcy8v'@;
put 'LmgjTDwsTEVMaXp1Jj9NY2JUandYM21GUn4uc0ZLdnldUEQkOCF4P180PCEvMjkheCZMMzk5RWhteTkheFtfOXRpJUdfMjp6SGZpPGJdeVF5YSJranNtMi5RYlZMclNRRmQkVDE9OzNrdilyU1g/aGxqNzZkQlFKPXx4PSpyU1g/aGw8dyIkNjRjdCNTN2pUW35YNC5GKTouYmUmMDhdOWo3TExl'@;
put 'cilicVI/IWI3WHhYemcxaEJLRyxdIUAmS2VBazBHe25TTzAkZWNzVCs+T1I/QE5pZ3NZaipZXlZBUi9QXndWMmpaT11rViJbai5uJVhpYkVLRjlYbT4xezZrVCFaZktwJEUoO296XztVQFp1cipNfkF+KDlGekBAQihwSlglO0QpQH0qRlYiSyQsZSUwNGppM11nR0F9dWhYOlFDWFcuUHsmX0lr'@;
put 'MiwiTTRjYiRvUUhvO25OJSFYI14lVV1PRmt7TlU9WGFkT3IrI04mJDQ8VSRrVVMxNGI6MXYsfE5MYWlpWzQ2OyJYRiVpKFBVRVlbSnl8eHR7R3xZJE9SdUBEaiU0NXNLZV5uYUhPQlR2IyJAYStYMkQ2M29bXnxqVnF1a3paUnFVWG9KZDxJTXQ0TXt1R3owciJdIiY+NDpLNG4pQzpoN2EyYmtb'@;
put 'TjFZPmtOYjA/Y3UmLnhXUW1WM2ZPVzJdMXolYVhfc1M9R1lEfFIkUC9baCE2aW9FLylZaXdjPj16MV18SituWD18Y0VieTE8Njo0a0FTekEpal5PbmRtRDBSISQuUzc8LEMvNT0wW1lkZTtvdGJOeUxVZXQ1ZjpIVEY9d08qPUMwRz17R3B5T0MzIkdbMU5LZkFeMk9KczQvMWZUeSF5NDwveVt3'@;
put 'YjswLzdALHRzKDo9YH5GVVlsKU9hMV9+ezJTOVdxMWBXWEwrRVR4Kmd+Qj42X0EofVRsKVdSKHRUeHcxaHB5X0p3RW9xWippM2taQ3V0XyY7Wlk/RHNwajQ5WWN8I0NvTFhpcEJQTzAxNTQubj04NDc5ZkRYM3R8PnVuQEoqME1jfV0hUWFDQl1pWj1pbDF5IyRNZ1lRJH1JY11aP20jX293OD1b'@;
put 'WmROSnhpdHVFS243TSpYL0NySnwyK1AoamgrVXJEbE5iWDwhc3VwdmJQXjs7OFU4M0JeekNmIVhIOiRLPT0+bE07InddQ0lJYWB7WGJIV2lZRX1EfGVpUThFezVqS0lKJXpbU09dIzxsMWE3fUg8ZkxgZVMuTGRsbVpOUkYzdjczaVV2WDc4TCh0cnNFRXd1b057QzN1JkNeaVZqa0E7aFR2b29F'@;
put 'WWNEZkcmdTJueVFeSHJ2WDc4TGtgYUxDK0A+I2Z7QzN1K0N5eiMrOnRXT3JCQkdFKzg6Oi5AU156cm9wc29tVjhpR0RORERrdGd8NXY1SlltXXhkMGVBaX5hWEQqRWZFekF3LkwlL3RjIiJ7RnNsJTh+WHwmJWVPKSZUIX56TEdHPzl1SDkiM0RKRkk4T3tPWzlNdHZRMzVCeztdeCpjW3RtLiMr'@;
put 'cVI9UkBpbCMvbTN7U2NeRSs2SzdId1Ixbm9uZnFvRU0+aXtAZjBgXjJlQ1tWbDcjX050T1IxcDosSzpbMTNvNDh9WTo4Q2tnckdQOTVbSDpxOEd3YkVzMDU5blsvNU1aT3JhWHR8cldTezh7b1o9TWU2VVpXJDx5blZNRCF6cT5oSl1eZ3NIJiFCJD9HKGA0UlY8Z2B0aWt1X0pfXldufHk1WGR8'@;
put 'TG9gcTJvRyh+Qig2Wmd6PlFpNCR3bHFFK1BTdltxZ2lgZCJdWTNEc35eW1cqa2ZvV3pFV3kzIjskcGVhTD9xMjRdejo4I109Wjh8IV8zKHxoKn12Un1sKz05fjJTUEZ3WHk1ZGNaMThTQHNJIyhIREQ2KV12dXA8TTh3bmNRY1d7eiVAb21OWVlTYz5SVkcqdng7SXspO0I1SFBINiVCI2xBQ3VH'@;
put 'U2F8eGNRJk1tR2wwJTNRX21CTVVXL1FTK1tuKGBXKEFkdUtQLEl1eVkmJEVmdjI6TnBOZyZSYSV2emdFYENARH0oPVBXaTZSby96bFpIJnNUXXdQY1NKQCpnZ2UrV0pAP2d1NT9AVT1hVWZ7a2U+MyIzVlkjVipdRE94XjkwOywlPT9vJEVbKUxGUjtZS3VlMSEjQ31lfWgmWy5bSGRKcDVfS3V7'@;
put 'VlVWQ15ybnk2UVBiaiNTV1Qpc3VSN3wlZTlbNSY3bjxEWDxeMzZaeSlRPWM0VjR0IWFaWzZCWStWVWdbdSIqW1BoNG1tZTB3dy9RPkRrKGYyMytxQ0BhSD8iaX14dEVxbjApNio+SiQ5T3gmVFN1KlRWQjhbcU47KD5KQDRyQ18+Wk50TXNDfUVEQmh3MF5HaHF3Vmhyc2kxSFFlOU9McXV3Ilgx'@;
put 'ZUxpV3ttWDhIOWBwKXJadXx0SlFPYmVsci8rdSRObyQqd2xKXjhBe1hlRn4sbG05MyYrLHEzJVBTYTRsbDZoRUZmVTUlYVRJRV11fmghTjx+Zn5dans9QklIMz9EY2MqdV81e1QhKylzQ0IqOl5OPUxwen1mOExQVzduVGtzKEowUWU0R1JiSDJ9IyJ9ZVB8SFd3Qj9bUUVsI0lNL1lUa0toUUol'@;
put 'PzI1Oyl3e1VdWDtYX3lLUWUya1I8cHtZNDQ1RS88e1IrZEZTT0x3dyJMOypVbjlfMWA9cl8lLmIpcV9ta19wJmB0LD0uTHVxVXU0M290d1pfaTRFWGlGVU5EYShFe2B2NF55cW8+bVE3dVh6T3dlVDhRI21RRENsfSs8JDlXT0hNSyRFWSJGIWVtUFV3KkJRREVYd2xCR25hVzZiRFNEV05AUHYm'@;
put 'Jl5AeT4rVmZHTWwlW0RUNmFDOSxkNEwzKi4iQGdSWmFATjk8engyZk9GX111MCgiQ31eR2dwRnhSOHZqW2klMyt0bW9INzlgb2grMWQ0bz8+YEArLkVrOlt2dzRoIWt8Mio4aTFOUTxAU242JlsrJHhwdWNvdUhzZW0+YChGUysvJF5DNiRhcyh0cFBmWzUvO2lwJGI4InN9fVt0JGwldXd7czQ+'@;
put 'bn1vfmxJQlZDWilpMzZqUyN1SFZDPD9GQzxEc09ucyVpUiVrMFRmVCVkYzpjZy9jNz59JE95R3FHTzpeSVhfWzFDRFkjZHZjc2pmL0dRPHFoKENOdUBdNzk5OnFjZGtgSlByNVVLNkw4U2d5Qy9VbjlMMDsyZVA2aTZzVH1aL34waUIlN3tCQi9TMzZbO2d8LyRXP1QhJjRkVlBJT0tfQVhDfm46'@;
put 'LE8qbzIwcHBBKWU7Wjwha1lWfjMoZCshaGMlX3ozTiN5QH47eENzfS5laHBtJVVTOzkiZkx7IlBrPHp1UlRyJiRlISRBV0QqJSQjazBFXU84UTMqOEMmRCZEJkQmREx3ZkA/Jj0vJSYiQzlReD9IbElsPFpEZDlhQl1uT3NOMzwhazBFNWlIdV58XTIvMGU7X2YhcSIrY1Z8Ryo0fDg3bkxmcD1X'@;
put 'a1k7QW1FJCpIWnBIakUkO1ZRR3R4fV0odHFAKHRRdWpYWWJARiYyRit6KTphKyMvek8keS41JjlPSFcvLnpDRi4pYThbNmVgIStdKEt4bG00V2FkTVYoWldhPT5iX3I4b1s4LntzNEByP11GZlhjOm1ISEYsVFV9UUA8ODthbTVbWDpbPCx0bmBtOSF8RWpuOEBCNnFrMGIoPTkhNCN1JHVTOCIo'@;
put 'Ymhtc1QhYj5KZyVBNWgidTdzIWh9XUJyOWUzXSwvUjZyVWo1alJJKEtNelRIWGRuW1hVJW80TDN7I2gvakJpLiklNmF2MExifnFsNUNUbSUlJSx4JT1mbVhoK1lDY3NrOW9zO15xXmVBZHlDRHtqMkk0dC5ZJWIvei5zcmxYN2s5YHlLS0ZXPGYjJjttc31mai8uM258NmhaVVNhIXxZblpVaDk1'@;
put 'I0p4P31LcyNgQmdeOl1seyJicC5ZNzRSYSMkNWh1VypEKypfIktFVXkvRmEpVDx1cGh4QF5qZ3RFd0h2JENdbiRDXX5nRXpRfEkrQUJ0PH1APV5SK1FTeCspYEtHWG46WWtLNGhiW29bcX5gVjx9YEhdU3Iybm9VIVRTPmowU0t4Njx1cDgqbHBIcHc0V3U/UmVaVTEpJVdve2FwaTNoRElIMEdJ'@;
put 'fWZFNX4kTy5ncHY/SzIkcG5Vekd2NlIsPi5bUkZRUkRuR1hQM2BybTsmMkxjWTNifEglUHVgYDh2Y3o2clVdPGBLfnIwRyhdfSlLVDlldndlNFR4XyhlfGZ5WiFXLyxUdGh4U0J4UWkieDRxU3M9XjhDMkRzVkRrNUN1bW5kNyE7QHZ7YHtOXzExJVtBWl1tfmJVeTVkVnloc19JbUxpTUwzem1t'@;
put 'OTx4PCY6PV97Ty91ZlA9M0h2QGROWEpiLCN+KHJXZ0pvUDlTckF5dC59bmEpXyNNWyV0fiRaRDZrJllsaG5rVjtmMTV3QXJYZCR0UnxqO0cxPVlFcE4zeVU0VC5ORktNZWVZRWlYd1lzZSYlL0RIPWlDM2ZAUmIqJWUsXT8qXnp7KVNidFpyfVQ0L1hVZncsKmJVRDMlXWFVUnlwRUtjXXJYJVBl'@;
put 'OTtJJndtL0R0dj85UzRwKXR0fmIlMz1ndS5WUyZSVSNhODttV18majs9RlBwczN4dkBsS2xTN09kZj9tSDglUCshPXV5Mmc5JCZOTDsodz9lJV5hMWUiWGpVYy9rQmhfPlpSK3oqZiNnOVA4KzFhdiU3M29kUmIiYlIycjx7SHlMVElLXUBgXWJbNHNIbjJDeHJBbklLSSE7OUxPeXNPe3xCbDoj'@;
put 'fSV0dV5APWs6e3t7USt8Ml1tazglQTQ6XllTRTtfW0k1alZjdX5BOXdZIyZ5Oi4hVWJKZzg5UWU9RFp5KXExbyVRdD0xInRSLmR4W1k2V0cofm12Znh3RmdaZmtocWppLzpbRXhibEBRSnhJYVdPI1FtQC8wWiNyZysvZUR0LnVzI1olfWYvZTEhfCs1fX1lY2UwSjQvaSp9ZWNVR28pcnNDTlY/'@;
put 'KX1rSUV1TUl4WypXejF8fWRmJGFQYnJgNGhiLGVEKTclfWtJJj85dTw6OH1rSUt+ZWMmKHhbSHczaGJsZEgsYDVXL1FxVlp3TntzaSRhP2J7KEdyU04lWmd6MGcrLyZ8cl9rYVE5MiJxT2hsbzdONFpNbSMudylCNWUwQHsoUHoqV0ZjLExaKUNPXXlFNilCRmEzLEB0b0wkfCs1PExocyNaTGFF'@;
put 'MFhZYjEmfCpNKWdGY3pqbDBYWTIwZ0Y6ZTtGTTR0JTouNFslTSMsTE0iQmgjVUU7Kz1QP0BBWCldbHs8aHxEK1dxSUF9cFFBQ1koSTA0Qmx8ZVI+QDl1SFsmfThJbWBlWEJANn04SVk1WVgqT0F5fXVpSERnbDE/XmVPUldRdlI8WFIqT043Y0V+fWYvdVdXV1F2a3w5NC80KX0wSXFgZVhwUSFH'@;
put 'TUovLC5RJWc2TFp8T1JBe2VYMylufE9SLkA5dVFDQj83KV8wOUdCOz99MElnYGVYMyltfE9SYGBlWDBgOH0wSTk/OXV3YWRzYUU4fDk0ZDYjfE9STiplRFdsbXNieH19Zi9XMTl8flE/KmVEOHpNUHVESzAkYTo2bXx+UTxAOXVzR0RPK1c2SXBHbGFCdTY+RUcrV2RuNUU8aXBneyleVzc8KiQy'@;
put 'YW54K29FWWBjWldSQ0BNIVs4eFZSNERHY05pWWpHXTh4JFFnTVhXenUqTGdaWWxDbVBHe29NNGEpTFJHY10obCN3Omc0M1I9YDtZOnlzfGxNSEQkfFpRO2loc0h4RGkodEMwcXo+QE0lRUV1c0h4MmdGY1QlZFBDMGd4OHU3fFpRbFhvc0h4bXFTMXZARE4xKm1zMGE7ZkBuUzFmJFskNVtse11Q'@;
put 'O0l4azdfPk0mfHVSIUA5dTU3M0RqVWJ4c1lWJiYrWCh2U3IsK1cmSUF9cFE+QHcjVFdTdmdWbjQyenxgQ2pfa1NPaEVDflZsSDhwUT5AZUJEe3RLUUN1cyxzamYzc2lFU3B7UnlZP3JYRUEsKX1VSWo1eHVjbnolfUl3WGs0PHdlXnNpQzZ7dnZHYmBJMFRIXldiZWBbeCZqSH5XN2UsRHJ3e19Z'@;
put 'aDtEUSU0ZVc2aDtFY11uJGY5anclL0olW31DSilHckJRd1g0W2NJa2BabUZyeFEjUUN7MmJWaFQ1VFdJdnBxRDY1XWkmeUZMe0hoPDJnWEIuTShaUUZIZUZvTzI7PXEwM35iR2RlMWtkXUUhInhaI2h5LlZsU0UkS3czJF9DP0QpWXJ8UTloZig4c3hRIjYoO2ZbbXc4MkNJUlo6KC4ubWhTVUlF'@;
put 'cyZDVlg8MXBHfk1zRG8le2NFYFd0cF5HS1pzMyZDMC43cCwjLixIZW90OF49eHpAQW48cGAqKE8sXnNAM0NRPjtDcHxIdV8qajo7QyJUKH1TWzxdSkFCM3RUQ19aM2xpRFE1LF1TQUYrPkJgZHQ6VkRAOkspa1FLQVV0WjNtZ1UzNVU5eE0lN1pHPmRebzdgUSQ1U1BVI1tvNFQ4dGlkZTcmNys5'@;
put 'RSw3PW1iVDtKN3NncXk3WSZoSz13TExZcTE+Xz52dn5DYz0/MiRfbnQ4SjllUG5QbzRBeUMvaFI9OWgwSnVxPUNHUnYuOXdxUSE9Rnc6L2Y6QVhtcSZvfWdvW0JGNXllTCRVWDosKUxAPHY+LiZkPXcqTzx4VFV1cTVhKEM5ZSh1eHZPZCN0WXBVOlBZOnRmc0IrZnRpZUFHZDghdE9zZVVtYjxE'@;
put 'clU/PXdXTTtgVCNbcW1Cd3xTTDVVbW93Xj9hV1YkV29KYjB4dkFDLl0/aT9eZ2YvLCN9LGZ7YG8iKyV0S1FiI2NUb3srT21hNGl8VSR6JiNOIlB+a1FQT19sWUdtWiZ3NHUzYDxnRFloeiwsJW93OGQ3SW1BMGtwRDxCJHBUaz85dCE3Ynp4VzhvdXxQbk4lJihQKD54cjA6b1g8WypZQnNDVXB6'@;
put 'MjdOSTRuW0FBKDMyM3FiZ3R2dnpASz5sbz5dfD9tMSNlck8rO3gwQ0FTWnhGWzJVUnBkRSloOj1zfUNyZCQiL1FiY1VoYzgwc3RdflJ8SzNkQU0mblI0aHFzPzNDL1Q8Ml57SWMxZj80RF1YYF5YfXFkRmF7Ok5YPntZZnVVMFMwWWB5PE81Zm5yZz54RU4lbVFlbnBnPSFKSFk4XmZiXkdVdHwq'@;
put 'I3U3W3VsYWhmKFpGYkZYail3WDFLdV94KmVtVFBTUlZtT2hyVDVWYjlmIk8iX056MyRCQFY9ekViRiEhKV9iQiZwZFZ0QngkSk9TSFNKXW9RSVU2e183cXJzIWVSRDhIQXU6SU1jJlsxWE04ZCY7VzI1KjYzcyFXKENLZkBJdnxeYGtYVF10eWh0YmxHUEFVbUxfT3EjcFRpaWJGO3pVXyUjS0Z5'@;
put 'TE8ldSNwVHcjIkRiPXRdbSQoclAsPCU0SzYzIi5wREMzImdJPzQkKX1wREVoY0Y/dmdKTWNrR1VYaVlrPkJfWHslZEw8dH0vLCgpaXVkQik6dCtKL0s7UCVmV0ssdEBlWllXTThXMG5vO3JmKlFfSm9YVGkwaztoOlZnTUw2M3EkLH5BM0lUYnxabz5PeUBec2pReUoqR0pFOEpLLDZYWzZqOVFw'@;
put 'PzxAOEYsaWR7WFt1M2h5Il4qS0JhNWJUT2Q7e2g6ej5wSEcjbEdZLF5WRnhSM2NwWSk1anxLJHFEWVVock97NztbcmU9KSo/ank7Z1VWMTs0aH1mND11Ln1mVF8rVldmZlQ/XnlATiV4VTpXKT8yNTB9R05aPSh2R3FdPHRWRXlFOnpAJDRZbzxXUVJ6eVFBfnN7bXJzNWBaJWRdM0NgN1Jtfnt5'@;
put 'VT09Vk5FMWxpSU5SWiJMJl0uNGoudkhCJUsrQltHSzl4TnlCLiwrRlBwPzE8QkAyXV5VaGQhbGxAQ3l+akVHJGg0X1dlbi43YGZlLHRkVEU+dF4hdT1BTkFwUm4sXypoOkIkSlRTXzsjSlRDX3U+SzxmYmB9NHYpcjJ2Yj12MmlJYVViMyhCcyU4Qz1dTzMyb2hfUikqb3w+Si4hWyR4Vy9PN2dE'@;
put 'SkQ1bV90SEIkR2M2YmN4MDAka1JFP0tlW15Ib2xLT1NQfCFCISRfdT1AI1VtMyRRU3wkU3UvXSV5W0p7b1teNkFgXWI/cjx9e0BvQDEyW34mYCNnV0xoQTVUbXJ3WTNiZTxVeG1rZkAkRjFGOz17Tml7QylSWygjI2I5ezowLl8oazt0QHF5amdzWFN8Sz5nOHw6XVJyYVYieU9GbDltUmZscyJT'@;
put 'cyRYe3IvfFUzZnhySi5XTXFOTWc8fnJ9KD0zRFVPSkF9dSQvdDxpRFtna0ZAZk0pSzw5NiFGOzBRQlAvb11yW3Fmc0RMXilEM2hxVC9pSzN4U29xNTBfPCxoLkt1cW9Ea3ldWXMiI0tSNXFHcV4zKm8iWFM0bjB6YEhuKEU5OENHVkBbMWRpcHUye14pVW90a3hFSU1MMlpDJkVaKzU9SH0pfEhM'@;
put 'YSVdXn17Z35OYWxSKjhkaS8pSjVYYUpLKD1la1A7WXZPRlVsaUN8bWVpLyluVVEsdi9AVyJyUF8oI0tWeXFVKXRZbWlPMmIqNSFSOks9aCRLPDBgaUJqTj8jM0toTG4pRlFwcyhdMHlmQnd7JnIzNkNdSnkuczBWT3MjM3B6Qy55alglVXssMCk3Mkx1Q2NFSHQlblVFRUV7Q0tqPS5xMFQ0fkNL'@;
put 'MWFhXlEvXVtJMytTQ1ZYMDx6bGY0Mjs4dGRgKyp+Pm1yMTI0fTFdLlVVej8sMmI3SnxVXUA1QjUjfT9rQEJ3KkcqenFOLlIvISt6cjZzTmBhPzFxPjY3XnkyfG06OzZVMVhvXS9xZiElY2l6U2IyZDdJI25mRnFbK0IhcCZmJT5nblFFRzwiVk9qODh9MWxfbD9SMEk/fXJPaHV2ZzwoOS5wLFE5'@;
put 'OHtacXdDLCk0cVBbUC9jaGBqTzhUL3xvR2hLUjUjNERIOW5XcD0odnF8P1JOUzEwb3JZNVBvPCJrbWFJIntLaHthOitMa05gISUuOz59NlVmMk5icHVGUjtvc2d3K2JrflRHUz1MTDhtUnAsfHA5bzNpUiFYYGQheklhRVd2NSlhaWxKb2lhYD9tPzBObX5RVnxLS3R2VisoWDMpX199U2FFQ1Rf'@;
put 'bm56byxjaWttO0dJcU1DWndGL1htNSt1WjdGKEd5aix0b1YsaTZFdF90U1BrTlBOJHxefT8mb3VbL3wpbWAqYS9idmdTPUxlcF58WV4scWJpME5+Tm1Mc2cmKmBgT1t4QmZ+ZD1PIWBdenlRYjoyc1U9MkEvZTFGNTxqbmEjZ1ZedjA2W0o8PExUTSNRQ3cweDozMCphcX48K1VbTTtEU29FS01P'@;
put 'd3haKTcwNklhVSZubHA9d2pXdj96OFdLKVZlQkpvPUYoM2hzNUFHLmxBSEQ4QkhEWmFXK0VNNn5Ob10vIUoiP0NjbishfHhKW2orZ21HPWlrb10vWmZMfXk5W1g9VjwhTihLIipyQWQ+dy9LfCMvOyleKDF5XSRSdHJbcWM2RE9SQ1JaYldKejkucF5naG1WWVEzQk8oKU9IJSY5Z2hvSX5BMnNq'@;
put 'dE9+d0BJYSYqaHcjQ3VWNCs3ezdLW1Y/cnplS243VX4mSyY8e0E+LFpyYCIvODVvTmRpb3VKaEhtVSEvdnxANGx2fVh1LG1ER1huUyRWX31HLyspLnxTQi5vPE15dVtAcCIoRGVeJXxaeC5Ffi87YWhJPCpefHJsQyYqdVo3Wy8hRnk1XTApLGA8ej13WnAlP01AZzkwYihHcXtGeV92X3NXc0Fn'@;
put 'NUVwZXZtRigwbVBeKVpva0JVIkowbl16L3tOWldHLHtPWzpFSXF2bFZ8N3p8fCVdI1ZtTFBtVT0wbTg9cz4wbXM9MG1beHpuLDBLPSRPT2Y+eklbM19hcD1adk9NOzRdb281LFgxPUNtLGE/SztuaEhqeng0ZnNRZzlmQTw5SztTKCZvNDQ5JH5TJWgxUXxvXnw0QyN2cCIlLCZac2pueSkwLH1w'@;
put 'Xj8id04/IjltXUNbXWw2IW8qN24+Z1B5RiZeTmlTc3ZsSyJEX1A5R31HcyxON1VKWlplfX1SOEZ7eEFLMnY4cjE3VV44M0AueGVzIXxVdDtFZCsoZUdeYjh4ezk7WnB0ISF1Mk9ea2I4XmcsXnYqdklsJjp9TSl2bzd3V34wNUlGUmd2TVJeKC5Nd2pySF57V2RHYUliRH5fPSM/Pjl3WnB8dDZN'@;
put 'XzxCJTg5KzhNK0spL35sckhnLHdCbj5JTGBEZ1A5a2VfL3g6I3M4elc0ej5Cfi99b3A9KGp0V1gic1ZaPXtiPFoxMl9XM305Tz5VTmwwZH4pM2xzNnNsWl5FU2VhIzJealo8OVdWflYxKjh3bXpmJjI8WzxTOzgjUkppRkFeZD5BPEdMNkZNPUFoJCEqdjtAXilxYFM7SXpja2M7fUZsRWAxKEMh'@;
put 'R1tbYXRGTHcrOFNUUyU9fk4kZywxKTF7bXkzVk1nVCZrbVRqTSVVOj5WZStkekxfe307KyU8cXI/YWMpIyE1NXxge1grQnt9dnNtNldkX3R5OSVrUjFKUGNpXyhDIzFkaT9CW1VkMn1RMSt8M0UwWDhnfV4qT2FHXix3LDkuendGMmRqRlJGbVJBd2V9TkZ0b3g0YSg/K01jMWBfRCNbbSExXW9V'@;
put 'eENea0lGeXwqR0tIOD1vTjU8QkxiQWVvdSQuNmoyMUFtc3BHc31HRlNhZUJ0PHIxb14qW3R+XylpRUI1Ij07N0BmV1s3MCk2V3B+L0M4Z0hyZTwjRWszdGQjOSkuRXhFazxbUzkvU25ecGd9e0t6XnVLYDZiRWtWM1NKSWY1ISxyb2R4cFAke0pmZnxqUnt8Z0NJW1s9dzJwbW00LywrJVZvSzxT'@;
put 'MSU5RD18dDBbYV13LjQ5YS9IOE89fCRNezp4TGx8b0BhZkIrVnM5ZktYbkRaZGs3YT4uPj9pfHc4JD9xcUpAZCZ3T080UyFKXWA0dmc/JCx3cH1ARCFCU3prRnc4e0w2Kj5hajw3XWM6aipSN21be2F0alFuZD9XVUxuT3tGLHtvSzRxfncoVG5hSUtjRlA1cVk+L292SEc0YFo2dmB9fjVwKS89'@;
put 'bD5oeDx3LnNmXzBoTzs5O3EyOUMuXUdRPDFFN1d+P3oiJkZAb3xBckwwSFsjVF0zS2VOUmNXcEZZTjQkVWg/a0BOfSwvcUE9dGpfM0tlTDM7PzFiRlAwLnMxQWpMRlgvNTZAZiRwL3skS01JLDJIM3FqMStGUnkxMGpJblM8MCNqSz5ATn4kSSNAdl40OyRfeGo/P0pKUkV8fTczOEBTIVAwX30y'@;
put 'UjV9fVRiW08pOzoiM3Y8ImtVa0V4azEwLGlDOjMpd0RMdTxXYkFTWGd0QGVQOFdMMnVnOzBQMWhZTGVfTWUmNG1aPGlmXX1ZO1VUZXFlM0ZsQ2teRX0lWGA+KHxyPnwlU3socEs5eGA0WGclKXhSRDArLnQzR3F8cnZWOzlYKFZgQUVleXplTFViekdGVDQjLGNwZTNiXndIbl13PVdxNG1TVUhW'@;
put 'O10mPU1LYG0qU0MjKUxCLyw4blBRbXFbbDQ5ckZsV2xfeERyLGBIKmA7QiRZV14odHg9KUJQPGxUcE9sTCFYdDpzbDh+ZWJpY2kkQnFgcXBAVEQzYD5GIW1yOFtNWEMsbFVadWlHL0tPWCZDN114cmt1Im9ZKihWcFFLTDJ+TjR+QEk3c09UUWU4T2xsUVRja2xMITBsSDhtZn5pN3xEL0dZXn4q'@;
put 'cTtgcjg1dERXXnlJL1gwWmhLLyV2W3F4P3JRUX5DMUo0QVVZVVR1JHxJMzo9czhuODpveWp5SC5zaTMlayExQjwmLDovYyxsMWVQVj1XZUlQfSw5cylgMjAiQCw4UkQqREdQI2AyXS5gLlcxdXRRb1I/bHVqPXMsSy9aQUYxTzo2O3NtJGxVez5pKEsrPzhddzJ7NmxZVmtHMDJsdjxBcCpwKlBu'@;
put 'cykpUH11L1FkOTUkWXAhbyRvT31IZWRrUm97SU1bISVUUmNwcG11K3F5PGdqVysobHJrb0p8Z3d4cDVVMFViaDQvSmlocWFwWFo5ZXlsXltPQH4vR3JHYys3KCpNJV9GUT5ibCpmV1hBN01zL3xaNVlHXjY1Szs9N2hyWih+YntTXiNBZnxMJVdaT2JoeHY8ejA9QFReYVVecUMuL1M1PipWZ2F3'@;
put 'bVlmNi4ib30mYjZ1VE1bS080SyJLfSZhSlNVWFFVMWdHb3M/ZTpdI1Uqc1h5Y31xfiFPeSo0e08zJkJeT1dqbi4vcSw5PXReUT9AIyFfeGJzcEJRKEVGcW42OHBEPjA9bExaVHVTKzAlfUVPPDJIaTI5MjtoeWxuWmNVXTgmejhRPjklR2FXK1Z2N1c7fGFJXURRbEtpM3x3b2BYLCx+alpaJlgj'@;
put 'IV0ySC9SNVAzeipMIV1KIjJSXTFKL3E1Rjd9ZXYreWs6MlklJFp2NkArOTsoeCYxYz9EdHZkQGVbfVNweTJ3JVUucTgsZjtFZn5xSC9GXXFBWFE4VFh2az16QlBwdTFUYjZxRVh8LDZ5fmlheG8rX158Pj18L0Y6K3Nkalh8VlduWzxTZC5vKDZ0eFgxWyklSmloT3xqX1RwYEJlNGEjK08xc21P'@;
put 'RWkvOSomPmsqZWFgcmwhQ3Y2b1FQQS8mMnZwNSV8V1NsIyxrdmA2cl0sUmZKRVs4fDI2fUMoaC9QfTMiJElFeEl8RkUrR2FZVSxOMSxzM3gobDorcnUmJSNpZl9Eb2d2ZDNDJXwmITw9Qy9sZnxMVDRLMlF5dEl+YDpXRC8kZXtQX3xgJkl7WkhpfDl0Wik0e3xMQit6RlFeM29kbTRfS1V4T3Vj'@;
put 'ZTg8Qy9zVSNacFN+MUM2ISNvPkA5N0hVbldzc316TDhSLnUhUWVCe3NbQmo8bXxhV2c8dnR8eW5ibnx2R3lSe3YhQFtwQiImIVJVLzU2X0ZbfU5FPkZWUVcsZDxdfFojPy5DYiIzSUgkNjVDUH5KVCFeO05LUF4uY1s+bDwhXUt1SHB6fDtbKmVkdkBwPTQkUHV1eT1Ffm4oJmdUVCEkb2MsNn1Q'@;
put 'VUJaJms4Z0BdKyV2UUVDO2g9LiF+NWooXzI/ajg1ZVphYyhUfT49W3B7cXxrJThIP1dgaXAxLkk9TyZ0MCV9VzM9T3EjRiNHXnVZUS9ucUQ3bll4Ok5XLEskLk81Jn1yeFE/KHdqV0c6VShOZFJjUC4sWWxSfiF4ck5uLFEpVVFpZCM9aSpLPDZTMT44cT8/b3s1d1E3NHN4dV9UVDpwUjluKWMy'@;
put 'KFIwPz1VaV8iXVZsZnRVMjxYLEN0Uy8sPWIkSSE9SnZKRklkO3V4LzddPD1XUldtQSovWGtbXm04RDgzcEtTNHMqSmY7OF58JGUxNG59NENYRkteRyhBYFVqdjRsJVgha1Ymb3E4Qk9gOjQyRUk5SEApblQ+TTt5RDx9R3R+cU5eOGlBPXlNOVFLXzo6dFY7SGF3YXl1V2YlP1ZsM094dSU0aUZv'@;
put 'cXZmQz1HTm06fVFzTXhIfiVFb3hwPShyOihEazwpPypld0QuRVZjLFJ9ZGtVKUJiR2sxOls1VlY9P2NoOWV1fnFTUDtSfEAiNDxndk4hZTZnfnE9JTheVmh5b11eSTtRcjx4O1dsNHQ9dmkzcDk8aVV9WEBCcjQjN1dKZzgzL1szTntrOn59WXh7SmBbUW51ez5vQjBSPmY5OEhXaXdIPFZ9XkEh'@;
put 'fUdmdWxzaXVYWndGWDR9Tnp+T3shV2hpOENTRFlWKG4wNS48VCwpNEZ0JGtae2RoJGtRTHRObSVOZnMmQHJiNmMlSCV8cEpASWo2SF4uVTNyMTx0Z1ZFV0VgZ3M9KEN6Qk1NPWR1aFB5NjpVWCF2Tn1WUWNgZWtCYkxWUiF2XzJgMHo2Jls9RnE0YFspeSpCO2EuSTlLfiJkUHhpZytlRzVCUE9g'@;
put 'Y3QjJlphbzhyVC9oYEFJU3RGOy4hRmckTUZnciNRL298azQ9TT9XTUhqWHNJRGEydVhkKkFxQCZ2a0NyeSxYR1g3aSw0Zmt4XlkzOEJucDReMjRaPTRlTEBUaXkkc0BJczhFYj95NDZ4JjRdWEFKWzQ0emNPJlo2ZEFJTjxyJVA6RTZPaWk3RHBhMSlMMU9DeE16Rk5dbHEleDhKeF5Nfnd4ekV7'@;
put 'TEFhX35qNWF6IyldYi5BNUt5cGVBcis6O0IjWyxQT0hfTy9mXUplM2REPDFQYys9LzlgdVMoJHpnZkRwd0peRDh9Q29UI2ldLm9iZSJJK2Z7JSwsSnJtXkNPbk47QDhgMU5TLzlveldBaClbSEV3amszIWpzYjlIekYyWzs9VShae01GWStnSyo5ZF8haEdGel4oTzU5d0whW0hGPWxidntGKWlV'@;
put 'VzNPZUNzLyFKZipjfTgxKkgySm9RJER0VkhPMzd+MXoxejFsIzM3UWcoTER4P3V0WSp5KEIoKHYpTVFNUU1RTVEuTWNHYkVUd1o2UyNlTXR3eHxzO1ZNWHgoPzZOZHc7cUtMOUg9bnZdW1d1WCRnUHtzIzspc1hmPDdhdmo+RHtOeEQ2Wz94TjVmMXpWTUNkaXl1X18+KSZXVkRmYGcpYWYlaTdx'@;
put 'QyVoZ21OOFtkTzsocHRiOTVgKT5uVFh4WTU5Om9ObmkiRERtNiVCeCpHJSw5SDosY3BudixGK0Q/VzNxJk1tb3loNFF8d2lmRjt4c3AlVkZaTV5lL2FhcCJbWD5bIUFmQn5tTjpqUjx8W2VlPileQDl9I3g2PkVGT3lOOjJmVXpDKTQvcWBQX2ZEVVMmekVKXkM4YVdOeXdfIyw0P3JgZzs5OiNg'@;
put 'aUpEMmx1c19eaDlMWEhJPGxdaiw4aVJvamJtW1dnYGEsXlloOSlpfV0kIms/UCYyXTVrfkU2UUc5VW9eb3RZYkY3dCNoLzlLQDYzOVc3IyZlTy8jMSsuNlE1OXpER0IocVI/NV0uRHMvIUp6eC5vLzQoMzA1dHNqeyQ/czRLRnZ1fXFuOWN6a0IyOFNnPl1dTEZ4RntdfWtUTXFYIlN3RnV1Yywr'@;
put 'djxDNUM7VHZbNHdzfn5gbF9YdSQxa3x0IVdieDlCPlA1WWdZbU9qSElHKUEpd1psM1dDTiYxQ2lMJltGNllqTD9DRmd6NDpsfF8+cmBTdVBHW3VFJHU/QCxnMHQ2LitPZlp9THhkI1dFRCl3LDdnNHhgd1BHR29ZSXcjbWRKOHchbnRrK3szMUAzS0w8Ly9PTm1LNXgqYkk4djFrVjhaNWJHOChd'@;
put 'X2k0NDpiWy42WVd7PFAlWj1hVUhyb2dOSWlbZGIyMVNQb2ViWURZMkhiQGheI1VdXyM/bmV2aTRneE1BVXxXVlV2Z0xmYztqKkw5NiV4NzZVJTwsWD9vc2dnVURLdiolPFpVSTBpeHgxO119KWZuMmcxbkksfllFUUkybSM9XXgqSS9RWmZeIjcjZFJMbnFQKzBjOyNSVjcoSDlHd2JFfDdXbnZL'@;
put 'fmRbNkUldmMkdldINF93Qi8uQFtrcVdJYHUvIzUpQ3NHOUY7bnRbPXEsPEkjQzs3Sz9gRi4kQ31sQkkkJE9vIi9kXWR2S2hublBMZXZHdSxBKSwwN2QzTDQ1PkVJT09DWEAqbCZwIUt7V0p5T2MrKUtXWVdKcDE5SSR7dFluSF5lZldbSHJBSEVuMz1wNFI7fEBwVCVmIUd8ZWIqN25QZlplblYh'@;
put 'MnBiamslRzw4cWU7RlglPURHUFBuQiYqUX5EWStWd2w3NlVIO2FkW2R1SFBVMEpeRCVlMj5AYTFXM0NRfjU9eXd2Y0RlRUBNJHU0fiY7cXJVXzpxMmJ9QWJzYmQ0OzRwKVdTS2U/LD1HV0I8OmJbdGRQOzU0O3BBJDc/PDo9Ylo4YykqSDJzUVR2aiE7QWo6byouVUQ0bXZTNjRFXVZ5KkZ2bGg4'@;
put 'NzJqdyhDUWFFa0kzZlFHemAmMlBUXlJ5byR1JFVtcW9UJVVSVjlvY19FI1sqWEhPYEddOlpPdFhqYTgkZVFlLFNEODY4cDJzRlgkZ1B7aFshfkQ8c3J2RCFULlBaZHk+dHs8bnQuPkY0aHEiOH1uTGFXIUROP3d2XXFJMG1bLnVKI106Zm0mNGR8cEhAdWZ9JVtxL2VyZ3FiRCxfJjtYQl5sQHZo'@;
put 'KDlCPnJzIzBCPFBmNFc/VTQyckVXXlp3RHQsKSR4UXB+fnFQSWZjVVNPZlMocVJCKCVfKkR2bG0lNn1VOyMmS2RzWVZ1O0RUbV5Vb0ticmhvUHJpTiM9NFdtaH5VI1hMWmg5L2Q5XjEwR0hve11ieiNxKj5aQTVZN1ooQldefDBGMDB3K1FxR1BhOFZqRzQxM2RyUU9bYX59bmVfOzd1ZVI0fShv'@;
put 'ak4qfnlUQGkuJnhYJX1bTEFwMz9ffE0rZVN1PnZOfnQ8RT97b0RfWz8iXktuPGg0ZHtNX3MsQnAmRVF2d3kxUlgjLCVVTyRoZywxWWNxcTxUZyRpb0lkSENLO0w8X0RPOHVvVn5JS0xXZU08bVh9M0dCZlJVRTZ5OmJyJm5WZlA7P3tVRFYka09EPz9TRiRoX3t0PD9eSE4mYSFYZjdTQypkJFl2'@;
put 'KDFBVDJaRkVneE5ldSU1UXBhby9qWEw7TiMiL2x9QVYlNzxBcmZ6ckY7IVpQVH1VNmQ3RzxedXdoJFpsWkRDN0JFR3M0SUZWIkt4IUdVYWhQVj1qYyYpR10kbiFJYyNmNU9bfGNoOUE0XzomdSEidFpgLzhVUUZRT0FSR0c+PGQpW15PczkiPiFlOSt1fEJHSFFVdFgqYysjd0hBRG8rKk1JVSVs'@;
put 'VHYpTWFlKTpBcl1MeUpjfSIraF9lKH4zOCVOfSZ8PkRySF1wL19VMjtYckg6eE8/fCF0ZWx1VUNKJl54OyFLQCE/aXRVQzJyYWZ4XT1zK0l9NUokR3ErQStgS2klLF58UlJ6JkQkUlElSEhYIXU/ZVtCPUBgbWpnalczanxyblBUUCtgPm5tXyI5MjxKdlt8Z3VpQyR6JSx1TUlRdzNnbi56dDci'@;
put 'R3xiKUVqTj1+ci47VnNfKFdyWXF9I21EaltFO2EhT0ZSaUMxczYsJHc6QEwrXiVXdjg6dTlCe2JCTW5YUXxXR05ZRTZVd2hPSmxJfkh3RC93eW56OUZERixvNCFwckRzJCJRIzRQPGJmfldyUW1Lei89dHxBeypQL28sb1VPJlllS2UhcTdbJjBtV3FgUDF0NEVJUHclOjAmYVpjIzpCQkM8byFH'@;
put 'N0I2SVI5QV5jTjdEIVQzZHQqcTErdkM3OVc1alg4O2Q2cW9zUksmNVRuRmJuY1d9JGtfVGU0P1MwKGIiTXw1MUkvWEczcF1DeFFNRUEvcnV7SStMRGFET2ArKy9ANjMxKmtTNXxNWEspRnhaPlsidERYTl9hV0trd3wrZlJzQTJub2JJKEZgKy5vOEZQUGFwPWouSCJZSWpyPy5RPixhMCZCdio7'@;
put 'SDA6SE83W3puZ1dbfGtndWA/KihgKTs3ZUxlLk1GbEVQKVNxSHcraG5sJUVbNTRucXpyZHEpOGxZamt3RkVONyp8NS9uZ1VZe3tvWXViOFRsMTRgaHkrdnR3SFosTVZ6UiR+fVMkKmQpTDlweDclY3lJKjZRY1FtVkpYdnxTMF8hN0NfKHYkeEx4RC5FRFZgVnxSdltSL34mdCgiPi4lX35FfEo0'@;
put 'TiEyJms0Xk0pTy85dCF4MX1sLCt5YSVHem9RNzl+WXhqZn1zIihaaTA1KmgvRDtCL2VlJjFCdl9kUWl5VCYieyl1XUV0PjBweGE7amo4Rn4weWwyZ0xVRW07JUIwQCklOWgxcTM/KFUhaDwxV19xPFhvcGlYX2dzc3QkPj1XJn4lNzJ9V3woT2xrWyhVI3NwRVIuUV5oTHt7O1p9c3oiSE1xR158'@;
put 'JkdeSDFLcVtdJFZ0cGJjJWhtXntUM0hxJW5gbF0rW0I+Kn16Ql5MaHNKdT9GYUFXTVlqeChTRElHNk8zWCosQTQjMm5xLG4rOEBXPF5EWjVJekR9OEooU0JLdX5dVn40K3ZIeztIe25Nd1YiezFMP2pIP1pqPXNDX1hDdUQ2SGU5X1FfYD9nLn01dn1UYEtwfDBMIlVOQD52c1g/Xj05YCxBNEwy'@;
put 'NlluKXVuS29QRHpmPWM8P0dnR1M4fWRdYXxMX11QMCF9eHZAdzFfanxPMi85fk8pMj4oX1F1T14oVj1dX0h3aXArNFQmUGVDTG9AM1creVUkOkMxMltYKnNwdygpeGY/cHwjLlV4NSFUI2RzJDJ4fWhweztzcnxefncrYlJkJHJsRiouazR5OV5WQF1OV0g/LiV2cUxHJn5uUDUjWC8wOVgmZU1h'@;
put 'MGtfXj0/RTAhN0FSWCtoeGRNfF1dJUFQRC5JeGpKRlFfYlBwR0dvKSpTN2hIeDRPdmhpeHBMQjxUIW15S0w8MmYqWTlyXXgrUm42dTwyLEM+UixBPD1AOX5zS1AoVClaalFBUnExS0wzc34+WWJbai54RzMuST1BW3pDeztdKil4TSQ4cFU3Mi9QUVAyfn1qJURVT2Z3VkFbL0t4RlZFflEmS00k'@;
put 'a35bWmBGMHNRRj92MjM+Wz1JbXhDUXB7RWksaDJOYDFhcGxvWFAkYVc/RGZ4ZXohNnM6W2doTzRoOFsyVF1acW4ueH50Z2AqPnZ3cGBWY2UkL2tscmUoeGVGNlN1VD4+ZU1tdW4iUk5NbUk3LnQ+NVI6VnhBc0FwYG8yW1A0QFZMNiNCZyZjfH5HQCVucS8pakx4eF5FdyNreS5tY3VIZEdaYE1s'@;
put 'LDtgTSh7dTRyTiMoa3IveWAuUkNNeDB7IVk/JXFmaHEjKGpsVG9ROXJtQzJeQXFbIT9ha1lrJnF1QkhFWXdHYStjbSNPV2dAI1V3TVNCXjFZKXZuaT4hJnYxKWs+YTtwcHhMNyYmT0VERjE5OyN5ZDZmU2QremFxR2RMK29yS1V2e2FhZERJNkovS3sxMD8wbUEldT0xXiwmMl5CQEFvcDJgbU5Q'@;
put 'TFsqVSxgay5VdEhqVHJHQ3pSJlpYMXhoY0BLPTZnb3tCXXVJak0oPmUkMW0+My9gd2s7cHVyLz4wcnVALzVTM1tRIURtfSQyZkA0N01fdX1rUnxja1Vzb0E/fihEMjxTJi9yKjw6JFk3UlN6dEUxKjM2JFM4NzlFQSx3ODZFcDF4bHttN1J3KUNHY2BtVC55KmNtcy5qNXgxKWsmRXhrci50dkBS'@;
put 'cF0/PkBXbGcwZS5lZDRdb31faXd8Ml4vXW4mcGY6MDd6cDUrKHM7XiFiLkI8Q2djRWtOQ1hkeHF6JmhSISZwSSwhKl8hbzxpSmY8KVppJHQkald4UjRNLHImJXdtVTt6UUUzWGhuUTtRYlFBMVQkRz1rfTZnJUdLekhVKk1MNik7Mmd6KWtyZCROfSJCc05INkEwbSFYTj0kVFI9JDw6bmpqZz8k'@;
put 'QFk1Ynh4WG5DPmV1Im5pVD89PXhBJSFKO0ZvQ0FOO3FXeEt2ISVhaUF5dlUiOTUmaCFSV19EfmpBU2x3P2ttey8qZmxfKzc9KUUxSmdpNFJWWHV8cWRTK11fIj1JOH55QHBoMFgwaUY/NUBtS1NVcVJFeG4sdH1EXU1eVCUrLmk+SX1SRHlxekQrTiw9MVQkQSV9a3MiLyt0dVguZEsiTktoZVh2'@;
put 'd2x5SzN1U0dKITVUcjpAKE9qTXZnNClCQGNAQ1tCa0FTU3pebkFTfU1yeFpXZjdSVWBiPFdxfGZTI0c2JCw6eHhjc15dYGNoeCNRdGJqeC92UmFOflAoVFhUdjUmX2k3el9JdnBNNSosTltUSTxBX19VWDtaSUtrYCQsSm15KTdRYGo5TCRqb2FeXW54cHFbZ15lJUdJfiosIVswLF1XYDZ9WUVu'@;
put 'ckZJYWpobDNeRDo1PUVZfHBOPiwuISNSVHlEVGFzKCwhPXFkT0xrfGdsRzRhe3phfjs8eXBHQ3lYMFM9V1hzdTR+MGE7LFFOTCZ3WVkqeyFPOzU+e3FaQnFbOjI3b20uQGwyLjBvK1lzRUNUbCZFZDdANXF0TWI3aF0uVyFTNis9PCZgXUBsVzRLflMvcU5LOjBjZiNCYik4aThDQU9uOUs6aVA/'@;
put 'VV9DPmRsVDEsZD5GPlFmQigmYi4yL0FfW14pal1CXUBOfnM2YXplc1osdH1gMn02OFNyWmdaUUVwcSxePD1IKSteaktqVDFlKEpZZjlWWj5yOGtXO2FSbSVsYGFYNWY7R28oUkB2QjVmZTg2LFRZSFZkUHkkRTsxSW4xY1pOaGRuZHpOMGwlbCp1L35tal48Iz4qIShPTmslPXJeQG9saE5WYDJ8'@;
put 'V2BvQFImWG5WfE9uRDlVO3ZHa0FrLCpxTXN3QUB1Y3gjfjFLI01VKXBifC89JmJCM0MzUGc5M1BwU1RSUiZvdHFPKF9zcVFTZlZmd1h9dlslWTFaQF9PcVsuPUA2Kj5zQl8pYyMqdU9GNlkwKiFKK20rLDA5YygqJnJNLH49KitTZlNvISElaXtdd0kwRkh0YmM1UmRlRSs4YlpCSGF2T25NJCpk'@;
put 'IShJKFUydyNMfXB1UmwsNUUkcGcsQGddZjFDYCFAcGNwRzJtNnppUCFYUFdmJVBpO3pPRUo9aU9SZEUvR2A1WHZvLHhmVW1IMnl7dl5Qaz5SIj1uYUY8YmN6YHBHZSlWJEAwcUA+bDslbz5LNFUwVEd4RHJHMTZvZjs5bWZaLDVwWndPaF5NeThYOUpmUztCaXBwJiU1LG85VEloeGNoNGwoPX5i'@;
put 'eyNgJit1bWAjKSsrTzlncXJFPD8xdjYsQD0uMHNKNmtsLFI+VSg0WHJ8NT11OWgiZj5TaEx7YkJNcWMxIiwve0QrYUlMXjVxNiplZ2J4OSQ8QH1dSl9aV18hJDhHfCxIUDE8e1lETkd2bUwuMy5oRTFtcm1hO1F2V158dF4sUz5aPUlaKTEudyxJeWBZPmp4Q3pdRmRFKUtIdVddWXxGWyl8T0N2'@;
put 'MldSTUU/MG8sXlJedjEpQVFjT0h1NEU6Mz1XOzZUU09MPT1vc09vNUE6UCtfaz80ZmBuaElHLC5TKk9CJkFoLG0sKFluUm1dQ3hRUDE4fURQJjszMCpWZ3k1MWFYUUNkMSpFUD1yRDc+WXlORis+R0tMfHl9K0lvTjwhRW02SkYvMm4hNiEke3pqbnh4ZH50VG1ZcCglOFlDLGB5Mis+el5NN102'@;
put 'PkR0cjlzfV1zISQzQmpuYEs5dXNyfXNQcTFRJXUzJChAYERaMFE1NVUlJm5VMF5IczR8ckxZRit+XmIlMiFYfUk3TktlLypLYHpVYyh5Qi84djw7RDJRZXJ9cjosTlR+fnhadyZUKGpMU0xYUUo8Onk2cV9BKz9FcD9wViN1fllEQU9mWjxDWy9JLiZKcTxMcHMoLDZ8KXxUY3heW2s6eXl6XSlV'@;
put 'IXFod3xyezw2IVZYMSYzVFt9cHNyaC5GbU16eXpGbVNeXWJMJDNdOGk4fkJPQj1APzo8JVZpLjs7Pk44OyUrdjxCLkFrdlZOeUIydEVFMkIuQWs4ZSIyNHIiVkUjYSVPO3x7TWEoQ24kZCQsXU89MG1yb08jekAwbWNqMltMPUh+UGskJmE4XnMzU3tyZD8wcmBJMyt+UnRVelU4YFc2SnEmYENz'@;
put 'QitoWnw/aD5AZnMjV3BxL00lRCtBVV4lRGI3ajcmSTJWLih6cjYmOz5sN1V6O3tSdkBBczEjfT81Qn1TPHAuc053RWNiSmJVLk5PVFYrQkBpLlhpMkJ0YVRhW0A5MDwwKk5jSCpZZFpDInYoYE5DIndEZUx2WmkhbDU6Kl5EQis8QmVHPndyTmxEfkElYzUxM1IlKltGQ0FBQUFBOkNQajJBQUEu'@;
put 'MyVsY3s8NiEhM1QmQTJod0B+bVE/QkM6RmxiPUg8OmEhMnl8aTNPfjU/ZDAyP0p9e1d7PlV2ajdqZENfPXwvfmAzP0B5dWlZfGczR3FUTVp3ZWpQVEhTJWgyMVUkP1N0JkByPVVmYTh7UyIjSzMwcmRKa2RMQkRmeGFKLkRHTzpJbGh7Umk1WCh3RXIsVDxYIXclUVFoM0tqcGh3KClPJXIyMWJF'@;
put 'b3tVSD5CbDZAQ15AfEBHaEVeNH59Z3NucGNyYjIlJX5AVDoldTNtc280XVRTeCpXTnY0UlVpMmdQWX1ncSkqblckTm9QaTtpUk84V0skUXk5SXlmLztoUTgsXkVOPjhfRlJHPT9rInE9XTBQJGJQITdWSCN1UltlfDd1NjxmTls3ZVl2b3ZBSl48cGZZVGJvRU95fTM3bFYzK0IuPik9OWNWYGBx'@;
put 'SF1eNDo9R3J2LzovPCZQLDR1PEY6ImE5cjB2RE1CNyg9Yno5eERbeERufFE7PyN9dS9te1grSChrS2t2VEdaWU9LO0cpaWNLPmF4NCE5d29xfSUvRD8mZm9iZ2R8LjFnYilra2Nbe2ZrQGpoJUdkJWJkWHs/c1BgLFg/fkohT1QlNW1EPSltLHdiVmBfLkB5MiNDeEM4WWhDNkN5KSpNazppMD1w'@;
put 'cyZya112Z1VPNURmajhve0BjRkB6MVFmNmc0TWElMTReaTRVdVJ2dCptKltdcntnR0ZtISNBY31QY3ZHXm47JUBORyQ+PjVhW043S0dUNVFuXlA3PDQpUyQ/b209TnkzfVEvWG96R0smSXFpK0QmU1tmW298RjpnYncjLF9DcXtucnAjfDguZ085NENIT15HZW97aj0hendXNktheFZvcSpmelgv'@;
put 'KU4mPjJYYVFMX298al5Aa1l7ayYyaHBPKV1fTSlhSmhtVkYwZWU1X3xpZEtOR05pKChUSWBXY1JNLywkIz15UygxZE4uXSNkYGcla0hGUnV9SFF3fFNJcHRwIVMjQHgsSy4yO3dbPFtEMTpjKDBSJlBxInx0RUBsc31aQjB2XV49aj5oaVtmJUxlVEFFSF09fVprUXY+MGZKfHlIfCs/ekAxcGxp'@;
put 'eHNydm05K1g1eG0+MVZ8aktRXSxLdHgvRyReMSs/R35aL0JVM0Fve2B3NWYjNmJOWGpEWVs8X05vTDxlUy92Pz4wO3g6NiZ8d3RrOS9URilHV2s6UzVWbnQ2XUZ4bmEiIWR9cERvXXJoVEVWaGZPIz5eL2Z9MCFmKjFTYEw1IV07aG1CaX4iJS9mMzQhJUN2bkF1eGVzUzRNZTJhelI9Zm99Qy5p'@;
put 'bWl7N1AxLn4mTkByeFt3PWQ0RDFFeFVPdV1xPD1ucEtadEokYVREU3g1KSNLPWc8eCFISn04dDNMXSolbW9dOHN6SmpTY0ZOLzhOP2F5YlpEUyRNXU97M2o3QksmMCx7TCJgVGJ5WTNIYmNwUkJJYlhWNVk8b35GTmN8RiRgaDlnLmNeNmxNd1h6Z1lPYUJGYGZ2ZUltdWpWa1RSbF9qPTYjQEdJ'@;
put 'fkFReUZOWmcvPTZ7WEp8ZTE3WFAjcGNsK0A2NGhNaj1PTi5OdDAqdHQ0eXRMOiE5NiZZdG05aS9lXV85XVNXVls4IjpgcklPZSNaQnhza2F6W2Y1RUBgLzF7NzNue1hXI0JeSXNdPz9nei5dPkMrUWU1KTE7KmAucjozbzMlZnIiUWowbTlGSkRMcGQmTn5meDhmO0o3U1F2bkttenRTelRSbko2'@;
put 'eDIwLGRRVG98JXB0UiVVaWxmUiF5PFhoZVBtUmNWNjlSLD9MZU8rK05baTlCWlppbVgmbSgiNDR9bEdZJnxGd2x3ZXZ0MEZoaHUxYUVUVnU+cDZGSXxJbDREQTo9YlksS1c4TWM/ZjReMnRfX35dcnRqX1hHTSkyKGczels3Xjxub0xHW2JkXXUuKFZdZCVeMz9OOlNeQj9fKWsrWnRKKCN3OkxF'@;
put 'T2VfZU5DUXl6VkVeJl5nM0ZaIzljeXdHVyt1V0x7JG1rSGJaVEMyI2lxYTtBNm86RkgxTDZVSyhEKStjK3AleWwjaXdWSEI+KF0pUm13ezZvSComISNpOT5xYyZaKnZHQHR9ejsraD43NyxdZSN2cWc1Vkc/OT9ebmZ8M28+I2ZKP08vRG4/YyEvJExxeHBWXmhpPzhGW18ody5lai81dyFwcG0q'@;
put 'UCJtUVlDV2YkRDt2djtxa0RFMHtaYHMhdUcldzZaSEEwX25JZSFzKlI2cV92dkNhWG0xUlRXYEQ9eCl5TmFFJVd0V2pwKFZgalFOX1UkPU19a3xTRCskciMzL2k5fWxFbzIxWjZqdkttOXt+d246cSUkOHklP1I4Vzlgel0+aG8wUGtxalZGKCJTNEskVEJhezVHYXx7KDg4RiRNV3ddJHEoWW1n'@;
put 'KFNsaEt4N3UuSVhFR2tAeCg6aV5UbXFtRiN4MnwoUl10b3Z4OmVuYilsPUlIYm4wO0haP2VzbzEpVEpUTzVkOjQzYEd+M2U0bFlxb2NlInJ7WV15OCtVZXVFZ0ImKW41eGFRPE1nJEtlXzNwfipiTmJ0WCZpdjhtbF47Rz1LVj40LzpgKn5qLDpDVDhYVVE4V019NkQ2R0BYOngsXjpxZyZbY1RJ'@;
put 'fjMrIj9nKT1GUTA6eXVnZjpPUGAuUUAre0VUeTAkUkROI3opInEvfjo4IzRySEBNfGovZEdobFhYaT91ZlVHZiFJZE9lWUEmRCNQIzgvaFArVHB4flpZSzwzdCs7bnwyRitjbzt+LjExTX5abHcrRVFtNyJVJHM7YXtAb3tQOU5HRWtLTDF4MmpdUjdnY2BnKH46VipNTkVoIVpudzJpRS4oJixQ'@;
put 'JEFILGxGfmkydENVW00oOn1AXjRoeUVocDtkflpPezpuZjt6ZD9+Y3lQP1E2QTBNRTxXaE0sV0JteVd3OWQhey4mWXZzQjNLUT43RGtYRXoqM3lYVklOPGFiOnthOmtXLEt5JX1WPjl8dThFRnMxQzo8ZHdJNVBsfmdMeSZsQEYqZmJVOT1mS1VnbXJsbkQyUzhrMXRzVFJXc2E5M2l+Mk8lekFm'@;
put 'Wm1mUTU+JCwkMUNtL1twaEZibUd0NFgjKmcsL0JkJHNTSUJ6NSpXei9HYj1xIVRAM1BCUEphKkxVTV9gdlVzSU1ic01RcCI2RkVXQkU4VWcvKEpQRUR0czJNfDQ3WTJZYiNGMU9Palc1ZXc3RXJVbyZdd1Qsd3BIbVolekMhSEc5bUIxJFVZL1dtZzhIWz5sVyZwQXF+SDV6cHowSnBPXituYmtu'@;
put 'OmYvP0NXOEh8bmZxUjBbMzY4TkV7bSUiREFFTmRPWFV4WDRlQiZ1b2I3N1FqOkF2OU56YCFuYHJpdU1+fnREJUpNcVt4aTF4PT5vWXl0d2lmcCVwZUQ1RVBfJkBsOW5ib2YofDd3bFtAUH1ZMEs+dFIibmRhc0JtXyo0VSgqZTJzTCRdejNJZmpvZmdtX0hmXlIxKGp5LmMlTGdzMT99WWdAYk1n'@;
put 'bWAvTjlzd0huQSpiSENqanVCU0xZdDlBekhuS1B2fnxXM1VoWTtyWkw1WEYmK0Y2ZGI1RUUxKHJZZzR6XiY3XkR1S1ZAP1ZzOF9gaWszdSgkXlUsKTJNNUs1XWVsJGBKVzZAciV8dnJIbnlKMUMhdEZPfk96LCMySXF0PC5qTEk7TXhFc2U0XmtzR2ErPWtVal5aWSREQFE2W0l9TXZvJkZmRyVK'@;
put 'V1VlJSNJYyEvPjVGUHQ6UStaP1FQVis7VygvI1NBTTE3dTtxaWN7fnw/Nj9AXXE2Tm46Rn45YSNDQmx3Ky4rTXFLMl8rRz9nTHdsTT1CakUzKXlrNDJje19fSlVTVVlHc0VUSD5mJUU1e18pJCpQPl9tWkZzPUJ3KW07JHYudzRtS2p8bGQlI1IkQ3QyLzd1Wmh5WEhNRCFYIndYLnJee29iKSth'@;
put 'dH00ZXU2WFFvTHlVcD0pWDtOS0wreGdYSVVsYXgsZ05USiRwVi9RIitzaiNHQnU9UDldYVl6aWpbOnVzSTlEKlJIazI+fnQ4IU94RGVkdmk3eSZtWE9obS4uJG8hNUp3STNsMGVEMnlNT3E3VjRgUkAsQEE4Y192MGF4PXYhL1h6M1BMPjVoImQydC5KPz9heEV9OFQwYzBuW09MWV55Vl1NZFdd'@;
put 'fEp1QkEubFt2MDgsUXxqel5ISEBYajMsViZ8cD48R3E/KClgLFsvdl9dZ3prL0NYdiIlT2laMDVfdjA1Zy9GdWQjLzV6e3t4NnxiZEgwWS9ZSSNQSj0+MEBYMVlqP1l4OnglJHhxbTVkWDV7L3o7bV88bmpHfmFmSDF7eGgvcFcjT1ckVUdAfk10NUtLTXZbMUZyRHlfTHhbIytbdHthUV8jImB2'@;
put 'YUZrJEMhRnhIN0BAeyolQkV7ZTpseGZKND5yaCZ1VUdvbzMyMWtoQjMyWkhiMjMrI1dXJVkzY2peOEExMmpnczgpYXF5dXZ8PyxiSEA+ZjlZQFJBWkZJZmxkRWJTcEZ3KWRbfGdrMyNOUkUme0lXUX1gPT8wXilnQytJcG1uMVNPXnZAPGRtKyZeSD9Cc2ZXJX1NLCFWUyZVWy99WWx5VCI/el5W'@;
put 'XTZvNy5vdFBoQlg/enBkNigvVntDWHEqLHw2XkhCOU93MGk5JWM6SDlpaDZIWHEoI15sWGVvYVBWY2x6WGZKfD50NlBgInNmKEtIaGl3YDxpZUVARmlOLEEuaFZRUl9KbDd8NXRRWjBwQnszfm16WyZXfHYoKi9oMyxLVFtMJGN+ZSwwM3psRWpvU31AdHBzVVhiWERLZX1fMlY5bDt4L3VgVU1H'@;
put 'fVpgVFd2fU88Um9vQDRNYXpEPltZKVdSKTtPVjVTJD1UejJpN3s8N1svQko4SlozcCZYUiVaMHZsXU57ZjdWYVJmU3xbOGtuYD1yTEYoQ0o1fjU3YUUyJDxuQ20qTltnZjc3IXwraGZWKSF3bFdkPz4mYS5ZJSNjcyZaJSJBLmgzbTcod2BAQzcofHd1ZkgxaGl0KUowNmE/PG9vPkJnTV5nYSo3'@;
put 'UEw2bklzKmhNel5pbiI3fXZOOEZjKjAoe30qXmlbKHY7YzE/Wj1fViFOTSxQbXdaTk47bnNKe34oUylLbCUyS31NMGIuYyY4ZVE8VWUrST5kTylmO3c2T2w/LEh8dEF8c0Z0M341JipIR1RXLEk4Jml+P2gpc1ZIc0QvY1Jnbnh9XmVEKmgiSGRPTlosfkJjTnIhSD1yUHNVUlkyVFMoeFV6U310'@;
put 'dHw3N1d8RmdIPyFwRlFKaCMjYihdXyouOyt5LjY0KkwwV115Q0tqcDoxRyRkNk5uQl5KS11LME48bSshaGFKL08uV29lR2RnKVZXVks2Sjo4Um4yNSIoMkQ9YzwoSWN8YF9VWHRATWEsYU9hWWYmKCZSOTFaUjc6KjFwIn51ITUsYnc1Xy5lRH0iY2dPdXshVmR3eW1ZZDM3X0NocWZCQGJySXA+'@;
put 'eD4pR2cpa3RxVX5CJmI1ejpzT0ovc3V7PzUvYEh7V2lFQF9USFB1ayQrOVB0R2U3MU0yJUpqNzB9ai5bZkN0MkNHUEEscllINkhwKEowI0h+X1s6PXI3NkhrJj9ZYH1+Z3dWNStdTCp0YDpoIURdaGEjZzRCKFF6cyNKciNZcGdpOUljLCZlOzErcVE/VDVKLEB7SyNsZyxNdzZ4bzhbcGI5Kkko'@;
put 'fXNNLmVwQyt6VChfX3pXVEw4cC4mMXJyMD88KEpdSDZPIjRpNUQwW0U8cyFqTW9MR1NmWD8uejJ4Y0wvZDtrU2B5REZTMVBNbiozczBzYVI0fl5uc11oVGEyZ2tWQzx7cmUiJCtoeTlJbD1qYGlxa3YoOnFsSio3fX5zTGI2eD41TG9FSHpmJmBQKUNFd0VmPFtGfVJwK0FYVkN+UVt1Xl18XSE8'@;
put 'NFgvKzpMaDExaFYoRjgqT0UqckxzbEZNdzNfST9eUE5reHQ4T1ByTml5P259aSpoRG1OPyEkMWNuKXdXI2p9OWVMcFtJayswYkQvMSo8SDowUkczSjpXI0YpZGU0XVJPOntYXT95JT46ZE9tPU1hPih6dEh6c3Q1VUtpOy5eSCl8ZU02eUo5OTZSb08hKyh4Ql02a041MSxdKCNSLFh3bUldRFZx'@;
put 'L3kzfl5ZcSokIklzZjdqWFUmSDxyKyU2WSJgZVV0SSZ0InoiWjIpJHt1VDJuI0A9SGgmX0IiMyNncnBFb0MkZXsmNlZzZHUsazMyd0pyNk9PeGh0Sip6RC8saz1+d1FdKUcrUUtFSUk5RX1tSzNRX2gycT1jSWVSNjVmWzFSbj51W3tyUS5RKVF9SDZoMWJtc2FCbHZNYyY+QURkN2lza0ohe2JA'@;
put 'aTQ2KjN8Q3VRQFFicDdnQSEwWkA+diZfJkRjdyV4JFl0ZTsqdl1xZEBkdyFKeGJnb0puNjBNb25gTz5pO09jY1BafX1DKzxucTdjQy9bQCFZa05Nbj4hWXhtSHZRSHZebV1EKF0vbUJ3e0RxLEI9RWpEPXJTeW40YSVffnIyMVhMWDtuYmFlZFhJPzNvLnpGPzM7RGhSXVpSaUpKdD5nIUwuOko4'@;
put 'WUMiP15FJm5XIlY7NjIvXjx5QzEveFpRcXRkWDs6KkZ7SjRpOkBacUxmbmM8QDMhXzpJMTpnJHpkTjgsTTkpYDJ+ajwrQCwqdmUrd1lBdCJpNDRkdzh2UHwpUT1eSmBkeUhZNH1VbjxZW2FpQC5bY25yZCElfjx6Pj9UZUckREIiRkdCUHgyTTg6LEgoVzlvZzg/W3svOnk0TlF8WksrIT9waCN1'@;
put 'TCxDcVsrcG0ma3N8UVksOCMuZjMzaT08V1NLUThXJSwlKS9wViU2V0BVNk13VWZPPWJ7OiJmdmgyfm5LKWVSUDtmQllkU0FyeDBQSnlJQ1MldXxobEIpY18lSV5ZMG9ScGsqVF45Si98bUNhL2srTVZQSD5tNiExQ0E9P1RqbHYoIX10SUQiWUZMeUJWMDd8alpQR3VQQyQ8OSM+KDhrbS9IKS5C'@;
put 'biNpVkVgYiVfazB6NjVoXU16MiNjX0p+UCNRd21nSWhAZl9iOXVdNy5sdSVba2NzRD1WL0MxRkdjNDEsZ0Ela0pgfVRSa1krbnswJUtHNH12elNtUmYuXyx3RkZ7KXhJWjIpWnp4VURXTFFmSWoqQXFoPSJ6SFRdRlYwZSlddE4xSTdEUGZES2gwOyIhc1QkImU5VlU9eEhoeEZUMm4hX1NNJDIh'@;
put 'Y34iLCYkPnpRPk8kKHVvY0YyMlgqYGJSfVtQWmFpMWgyRmhgJEkwLjJiMjBGP2ZnXkxWSXE7SGVFKy83UHJaTy9eIjMoei97RyNBa0YrK2ojJV1UMztgO0gpcHAhdiNGL2gjLCV6Ji4kRyVENE8/JS8uKTAlPD9RWWxJYUVaVFJgbmZIUDlTU1I4PzIieFZxX3RJKkxedWcmSWlPVD99c18oIWcm'@;
put 'V0BUNmlyYlhgbSwrTys0WzQ4Ik5wOmVRS05PbjVfVEBxV3h2ZEZdI2pxPXQzTTs4Tm80Z0JTXmh4Xj04SG0lSy9BO01fRm5HZyVtMkY9ZkZHUGZKfG5rUHpNbDhzTkRqWURxb3dWKlFPM0QpKEo7RFopMlt3X08pTm8xIjBxN0FEOWtTVj5yPkhbOENPYCgjMG8mOj9XWHdJZSpxWDcoXVRUYjxI'@;
put 'bTEwQGtRYjN4OkcyRUUlQ01BWHNqeVV2IUBSVSFOaHp+ZzooL3xzUFVgbUxnRlRJM2d1PGtkLHU9bWk/SzJ9TVVQQXZQSyhjMGNXKFVOU1kqfHgsT1JkJntCYVZ+UCx9eWw/TDN+IVM+dVBEN3s5LG5RKTpJRFJmQjJsbm1rQkM0P0JTUHZgTDx+NXk3eksxRShWNiZLcCRpWFBYSDAxTi8kY1h4'@;
put 'SjhDeUFEcT9NaURuNEIlOndVQ3NjRE9sR2U5UFFHJT1QRj9rdzRVTG5RXj1RLH5bZjdnYkMmTUpVSGswaTEmXXYxUm14fE47ZiNuZDk6NXlTMTo0JStLVX5BbGxeVV5bYSo5b1YxUmBwMG9sMkBKOSt3X3lXX0BJb3A+flNuO315SExxYyJ0YkdLS1VPcXRtMVpDP154NVNLO1Z9KFBmZyFRb3s2'@;
put 'VXFUNzJdN1Y9PklXfVFvOUk1XmRwbCFNaSZaMXtDTyF6ZUB0Yyw/RFpaKiRvPXdMU0NHOm5JVEwzTyVHTFYoSEEpSVg0OVB6MWN5el9+XXM3NnI1TGdgaT1PZHBBYmElQ30lKHI0Sjc9ZmZbQSNHTjZMeX4peGRDalU9SGNhKT9ZOEdbc2hfTUBLMz57Wnl7QipmRSkwaDlhTSohOXdEYGBHdipC'@;
put 'QE1MY2YwVnVCMnF2MWBNSUdzdi4kcHN1X2heX29BKERsSjluWDxOL3U9ZC4+azhFKjdFJG5tSGJtQzJqYSt1PkF6ZDZpOlAlfEtXbkp8MUJXZFp6ayVTfmd3OmpJV1IyUVp6aXljQzNVYUNAfC5rKFt0bD1seTVHbFRETSxlYCRUeHoiLDBwUHU4YVhMMlokblM/aTp2UzRmaFVJIzFvcnslPkx6'@;
put 'Und6dUB6LzYreD8jTWhKKGF5amlodnI0cUl+MVE6PE8kT3o/fnpJSzBQVzB1WEBUPzFZJGB3OHRYdiZYInJwMT04bVt9bjZdckwsQE4+eFM6UXxIRD1nP1RtNzZxOj5sXk1BYFslajZqOXJ+cjZuLCNyaVp0Kz9pP3NuJCNjZU54TEk0KGBJZS9OY0NyWXY0S2VSTmYqK2p0aDR4QEZWcXAmKnl4'@;
put 'MGgpQ3glelJQRWJzem17eF5bYEp6KG9hbzFwRih8REZfRGF2a008e0Rxb3pMUVZWWkpecHUrQzV7OE5+cVo4NHs0enNba0M+KGV5RXo0OlRCIXdhYy5qJV1RXltobVVdcX1UPStNUVVJMSZPTT4uNkl5M1EweG4yaHQ0NWk7RC48MlE5Z307Vk5fR2J0cDRzTjZJPElNQnxib1J8Qi5xWUZSOiZd'@;
put 'OlZFTGxlW096JGptOFRZLlgxe09Van1zejNGd1BUUFVBazpycjd6bVlhdmVjMElrdWdTN31OZ2FnSldFazBNQGtmPWpuaC5yRjJJQ1csQkNVOzo/Tzh9eUBTbnRkNTxYWlUobik4bCx6PXAwdWxXL0NUdmFPMn5ZQSYrWktSVHZscGFCUWBDMj5yfXhjRFJ6I3xGbCZuK0RrKHwmOC4qZVF3fEcs'@;
put 'QlNEZ3tGMjRyQT4jaUkmJE40YngwRiVgKzJYLmhyckAkRVZXZFJLZnZiSWBeOjdMPkwpfiYzMEdvXjp+OyRINXVeK1kpfiNNeW5JZWRwaEd4QVcsOT9TOiF6QEZHYn5lZkZ+JV15NzxfY35wZUF7NHFDciQ4KGFZUTE2ZlghPGc/TS4jfmY8Vzdbe1g0dTFta3VaOU9pJkRSTjp0JFU0In1XdyYq'@;
put 'fSMpeFdGQXBxXkZPO0JbOlZpdClRfVQ7JWN3TzFePnF6ZE1SfHI2bEdnLj8wbSpGJDpEP11dbio5Oll3cGxzWlEvZTEydDUjeER1JTxdZUZzLzIpSjdmMXZzb1twZWM0NXtKbjxvcTNxcyN2VG0zTndhLiFzZzIxUyFuT3tfM0AqKSNOUlcibVslPCVaPXZCJDQiNEVrJUM8Kj5VOEUxPnxnM3RZ'@;
put 'K3VkfDxUYDdUd3pIX0VaejpyUUJ5JmkyWFRvI3VhRi9MLFRYaTY9ayYyN29HUEooKzJ5TFNJcGJ6KisoLztJOlFqQ11WLiFecCh3LCtZczF5UG4jd3BVOnR9LFp8REZYYn5CZCVeP3hLLz8lek4qUj1AfVcpJC87KUskUDhHe0clTiNSMkRqWShaalc6Yip0LDZOcFZGcFN2N1tkRHtNeUVBKzBy'@;
put 'ZTh7X0c/UFZsX3U6I0JrVmtJPnhiJHYrPis4RGtOWX0xcHkreyw7dXYqdVA4cmx0RU41LFgyPCU3K0FVZztbdiVXPH09bHRbY2lbeV9pQSs8WiV9QTwqak1bUTx3QzE9QTtjRmd3UkZAQD9LRkZufkZmOTZRekoibUdsRW59Zl42ejMxdEtvOk1gKjU7c0A0NWAiSj5qTzs8cU1mNnR+V0smYzUl'@;
put 'LjJgMihYIlA9Xz4rSTpAY0IhUE5vKGNQTkhGK0tFfGpjTX15TW1sTUNkOCgoclNgREhpMVoieCMySUZlUjg7P047T1dGKURMcDlPdSx4JGF9bklVajluZ150d29UfkAiRjAqRSJLIUpfeFRhNktwc3ZDaE12RiNMbnpLV31BU1BqfChHM2QwIm42NEBqZDswfWdWPDwrTTxvXUVkXl50YWltc0dw'@;
put 'XiUjfW53LHxiNXpOb0FtMHp0SUczb3tDTEBpREBQd3NsYTJld290WXhrX2IlR003QU43RCFlOSVdUTBUaix3NjhUfnJ0Snt6JmsvPz8pey9OR2s+ZSNBeW1kY3NffDBmKWZiUCxiMFNnVSN8e29MZnNzRnFSOTluaHJHbVlvUl5xTWhoOH03JTBMdmpyQyhEdD4ld2ZgdVJjOWBeSXo1dSg4ejBg'@;
put 'UU9UXiJVK1dJYUZZYHg7MlpJVGJRQU57SytgT1g+Rmc+QCRQVCJibVVqRExxR3pIdHc2WX11K3dwNHErcixjMVdOO0JyJnQmVXZadGxFSCZoWnpJKjxMOUtuKDxiVT5dQkBEam9ITjNyPWVrTSZXeV09WDN4aGNjO310dGtTNDNgYjJ+Jl19ZXFeO15GWVNVezd1RVcjRSpDPEM/a2AhcHttSyU0'@;
put 'UGJibH5GNHkwPnQ+RWldUXB8XUF2ZWw6UDRUKEVLdHJwM3dDM29KNF5USk1gTmNoTVAueE1JJV02YSFaKk1rc0I8JlBgQEFienMrR11YfjxtJEJibHRmL3c7eClPYyZ6Tyk/RmNLbF5rQyYqUy9tZWQvKk4iaFl1TWk5b1FvLy96RShEampRSzVHL2pQenJpTEtAPCZSd2Z5dnB4TTdFIk0xTDdC'@;
put 'I2BaRiVSJWJoRFpNTCo5US9NVWpiSmhlZnVoc25iIVJPfSloTUE1a1lNTFZVZEpDSnZ5Y340QE9reTcyLn1PQnYlcSFdcENFX2QwSF9xcT5ib0lTKDpEJlo0O1tfP0ojS11rKilaSktlLjhVZF9mI14sQGN6Sl1rT2JIIU0+X1VdLDMkbiRkeEdPI1BpJGVkfEE8V3hRcDg/PWAiYTp2Wk96Ult7'@;
put 'TkthQC5PY1t8ITssJnZvRm9MdEJOZDdCLzxkNnJLWDJoYVsleDAkbz0+JS85KGFOcms+V2F1L1RzdTJMdFt7cTYvMHFBQ3Vue3wkVDFTektrSm4xTU51R2whL0guQ3ApMyY+ST5YfEZaKEQhMCxDLHVdcXVrbiNdQGNXUz5iN1kyKyJ5UVgpMk59Tls9VzFESCt3dFd1KFEvUz5KfV5BUDNdNVlw'@;
put 'O0VQM3tocD5QemJOb0g/JCt5QVgvVk5vOiJ3RSYodkEqRy4keEZfMUs3L0pIdSw5PmsjXjxiUGBXTD9Rd2JTJTxObjFANmhDe25wL3NjbFZGVkczOE5hM19vRH19cTRXVWYuNHZgcWNEZyNAfnpDMmAqez04bkU4c1A1PDEoLHNNRGI4Wm0rUU4wY2AzOWkhQ3Y6KHwlOVRPJGs0MF9sUHp7WDA7'@;
put 'REp7VmF8WT9WRXp1NWNUOXthKVJiKko8NHc6P2xXMkV6ZGIhbVh4JU15dyQiQztSLERlfWlbSHQjWylxIkFYaHAkaGslYFhKaVU7dXZgTip0ekFhYzB0SWR7UGNEcXVbOm9bJG1zJXVzMWJMbSg7ekJDMkRIS0EjVGI/cEBTQW9raGpgUGVHNk9EQlgibj0ybThLZVhsVEYxWWJBUnY2SXM7anhM'@;
put 'Nk4pTj8vYmJgMnk2QWM2IXQkO11RRTMmPHhbQFQiL1I/NXIlZ0BsP1N9RnA6Qnp1anxaSWhDRnhGT1ZSanwrfFBWd1JdMltIWzhBYl5DTCZ4VH59RXdUN2leTD9qKjpNbkMvSD59ME4hRjQ9cUFLO3dLan5iZHFbQDQmblVXSihwdX0icjJCWTRlaiRtdyslNWV5O3spTzY5PylPZjdAL3x5PWhX'@;
put 'MGQzW0sidyRpLilbdXFTMihveH5OT1FCWCV4SjNmMzBkUG82cHY0bTJiRz9IKF08KmBmcDBZWGp7fGFZWjU2cjM3KGRlTmZnbW16M3JGeDo5R3suWHExQ3IsLjB8cGU1Xy4kdj9IaUJsc1E8MGteZmp7QjImOk5ZcGBLSnJkXW9JNVYpXnRjWiY+PzI5ai5yRSV+a04ufiFZLi95bCx8JlQ7Q21D'@;
put 'SkV6eF85OmV4OWMpTitSSmk4OXhEJixnQyo8S3pRTVl3dHIzLilZVE5mUHk1ZFhWeGNQYz97XnlFIko2akQsaFdLU09lM1YqSkN4NnNwR3dTITNncDRnPFtSUHlxNEs7bVR6ZXhKXjBQL29kUE1CVkpxO2Z7OS5iUnpTNFFBIjgwYSFNZiw2aGIjUixscXg7bz1wRHgxWkMxKjcuRHMwXyg/LF12'@;
put 'UUxjSWFpOmxIfDp3QXI1OFtTUm5KIkdfJXpNQSNhNWgwJE8mZHQ0UFElWDciMGkxSzYwQkVxVjVTL19dS3c9fXRgXnFzPyEsUTE7cGhpQXR6X35iMiZ3RlRyOn49Q0l0fGBze0A6YkBWRCpvP2pxfUdzfWAuNih6ZiRpTl5WZ1Y/eEUxXWosNz5zd2xUdVosbDpDS019PVklSihzLnpNK2dVQDQ6'@;
put 'ZT0uNV9bJVM2LEMrK1EvPV9TQltoWGRidjxkR1JrVW48Iy4jKmw/NkxXTk92UWF3SClCVDJgUGBNT1B4OnFJdDJDOk5dJjJCO2ElO2U8UXxYUHBfT3Z8R2BqXzgzZXxiUXxLNSVxPmw9eyp3MWglOi4pW0FYUG9fYFlFU2tUJDtHbDNQXksvIlN3XkJXaHpzUj5eRTZyZGRed2pgPGRxcCVRRmAu'@;
put 'IWdhNyhSTytjUVtMOk9HQkZZTXM3RyYvIVY6UEJOQTlZQjk1JDp+OXx6cGpPT3JCdz93Ym9aRGJGaXVrJn49KnpyUSwpPGohYH5zbVooWVI3eiJkbD5GdDBeRCslc3VCdU9vW0p9RWspRUlmXnZ+ZixYVWxkXWVLREk4KnhuVlo1RUp3fWc5QDsldGpyaFl+IkApR3E2UmU2OEp1LDZpR01TKzl0'@;
put 'WmdUUylTPjtyMEI3Sz5kJn06eCZBL10rS3lSbjVYNzdjPGRxZXpTQU51Zm5+dUVQKyxtcExOTyg8RSFmZmo/PU13JUVFUG4wV3I0IT1DJXxPIkx5NHh2Z09iOWcrTzcjeWJ+SEYsJnsoWlFdcDMiTlZvJDFYIV1FOUVib3tQalZYXkN8YWomPy97aEhUTS4sOjhsPFFidHorWmprWilZSV8oUlFz'@;
put 'O3Y1SilGej4qLmJ+Sjx1fFt3RkJaNEZMJnNxMmwvRlJNbSZsY0A+fVQ6JElROV4kRCshT3Z6O2dTNFVLWlB6Uis5InxgZXVzY0pSSWVtXktYanZOdD0sVTtqInl8cnRSZ0pqZ3pmazZtX1F3PGRRZ0ojb2tgOGJSO29kNn10bWFtMG54JFopUEh4KHlDd2pvRnklI3dIeDQzOylnRFY7KSt7fEMr'@;
put 'WUkmfHh0T01DWHhARUV1YFlSeCtXakhwIUNVQG9NfGR9JE9qXzJpSHM9Nn1nVT54bjxaNk8icmNzIU9jWWNHOFpUckh+JDF2OnV7M3JnNGlpRk9kNU80Ji8pWE1vPT1le3kmPVZ9MyszT1UvRz1RPlFVLyJDJkMjTDdfMXBVYGxuQ01kTyMuaD5wQkJJQk4hSkExI0hrUlEqN0MuUSE4b0p2UXxG'@;
put 'JXwwPSFTNjdyJktfTGlTVixGLENRTmdJVyR+OnokLjdYWnl6Nj1QV3ZpfXQwSns3RnFKeExSOTsmRnQ1XTxxQjhgcmpiJS96NWkuWk5vMjxNOm5JRWdCNENXYzl3dlBnQmg/dmo8VyZjZFI9c3NYMypRTnhicGgzcHosTilMaF5ZOyJrK11ER3l0aSJhZT5ucX1bPykwWTc3eFNnL0oofiVNRFZB'@;
put 'dm1FfmtUZFdWTDxDM0c9NU9IWFdoJiN6aUA8UzdnRUk5P3lDUGVVNH5JV2hGL1JLRVdaP0kwTH4hSSYvK3A5SjgoVUB1bEJsYl5XIUdadXEreTFkQFYlfGA+dW14WWs4S2hIbSsyJjJAe1siakppOV95a0Yodjd9Tjc6d1ghSjdsMFZSPl1jTE9FSCJJZGM6OGB1MnxyMEVnVGRsRl08TyZ4KiM9'@;
put 'LiZOS0NmcjshWnpAT198RVcqbGprMXN1bUJifDp4V35eSmpeQEtUMFE8RXU4KTx0WlhyaT0zUDlnKkQjTGpLT3txPl9tKn1WN1FZQHw+OGl1LFJmTUheUCtdVyQ0bXEvalgpJkldNFBHcD9kMkAsXiRANTN+WkowJFNnSE0pYjQxOCYkL29ualUvX35fYTB4b0JWUj1bVCw0b0tuN35IMj1iYCNd'@;
put 'JnBwXm03WFghayRYfFlPVyQsQ2tDPDNpcyx0OHEpd3I0UjgmJjR2TXReNT96cX5FWURTVmA/bVBKKSRWczR4RCF5K1FRcFl1PG12PHpiYDo5fmpmJjBIPmBtKzNWQ2lhfXFRRiMkXVskX0hzaXorS3xHUihjbEdmVW5jSXIyWUIrYEwqdXJnaih+RHAyZ1NKNWQ6IVBjYFVjKUZVcmB9PiRoaGdg'@;
put 'fGNTRntQS1BicjBqI2U+Sno5Ml4lOXQ+aWlpdF9fKXI8Si4yOzAkJHlfSXgkbGtLY0w0JH4oT1VkOE5RdllDYn18NjU9XyJORUAmWm9PT3hlPCp4djcrSD1tUSVnKG5XYC5rNkw3KDBLJGhzODQkQGQiN0x6cE9bcTlWRHZRMUhCKyRKdiROKyVpZWI6P3dqRm97eHJtPXFsd3UuYzYsXjsyXSFZ'@;
put 'NWtWWikrWFtxYz0/XUdzdDU0KnZHMzxKKCM7SjoqeU55QXtmUjNER1Qpb0RDdzx0ejxpSF9MQGN9OyJAbUFBYExdaXBRSHg0PDI7UXt3OUgqKkxNLHZ5KVszJWFwdyg8IlFxMX1LKGpoa2dtfGN+SyI+bT1pJjw9SCZ6dWZ2LE1NOSo6fGU2IzthSmNibHFGZ3ZaWFM/am9CcSgsKyVDTHk6NEd3'@;
put 'NnIlK249OS8xd1Y+Vzxzdkk8L0pfWCNaXkRFIy4uZ1AkdmBUNig1RUg1d0JNPzUlJTlHY0A2T3JSS3ZkPW9MPHp+X0BLRyE0fDhpSGNnRmtqMFdFPWpZYVk1ZytBNDt6bUZieVpTSl5DX2VaI1YqZX58KnlmTmloUWRfOVFYV1k5MVJ4Lz9FTlVfMCgqMjx1cG1VWGc6Y0tDViJAUX4hRTcsNlAk'@;
put 'Z0BtZmBlJHtnV2IoKX1RTyw5M3hvQ3kjajB0VDc1WnpYN31oRSZbb1JMVllXRWdtYXpqWm1YYUFxUD5uY3AqSFNWZUQ3ImwmL1ZrRj89R2dLaW9FPU8+OC8kbS5EWTojKz0yZ2RAaiQmbXssWWlTcCFtWnhkfGE1Iygjc1pzUlFRSGdOJHZUYihIM3ZBXzt+bVl8RDpPbnBVSShLT0E9ISE5TDdN'@;
put 'eztXbE46RDhNfUdaJjtIQDVCbHVvUXw6UWdabjFoejhVU3tPTXIjbCFGfF0yLFNwRDs4MTMiSSs8WVR5WXJjUUd8Z2h+QmNvWCxaOGpRbGU6MHJNQ2lpaDwucDJNXi84MFh6VDAxXi59JjJWY3Q/JCN+fSRFdDY2ej0uMU5hIkVRNDMuLi51PXxlW3ldUml4S1M3Yy8lfjs8SFo/eiVgJD1QMF1Q'@;
put 'Kk5EcCohWio2TFVpcUFeVEgoMiJFUCxZNWtFZkRKUD9YQStJVVQ1Qmh5UjBTNGh5MVAyT0QuSmVlZlpOZFRwJE8kN05XI257UHwmdWRFYmclezlebF0+WiJQMzNbJmkwcDF7LkkoLG49ZkpsaF5CbmUuZHE8OHlsfkxkbXxrKj5vRD4yS1pKZU1Ufm4/ejw6TDBgMklpQklKWm9HNnN5Y08+aWQw'@;
put 'R2VIWkxXQ243aEh+czpNX3A/PldCbmYqSTJ7TkBOflRHQUh4eXYxPSRVYmJeZkg0OSNaaWZEJS80O0xPRU98fkAxfDAkLHo3OjkhTWB8I2peYXs6cWMzLGpCLzdRTl9LXWozJmNgJThSaXF9KjFFN29kcCVXbEpvU0EmOUdUYE1Ac05ERz88aGYvcDkmU3lNU3U7aFV8P0ZyT3lfLypJT2tiPnd+'@;
put 'UyE2fTxhLjVhY3A7RnlDKWNPelhPdmZTTjY0XTc3YlshM2RfUzxkJm59eEJWKDJjImFgV1g9PU9eb0pzZXVfbikoTXYycEhKZVYkS18qXig/OVsvRHl3SFp3RlJDaHhrTEhbKyM9ZUg3RjF8fStscms1ZkslVk1iJj5SaCY+QGNDQGklN11KOWs/VEtHYjhEWDMldjooWHJhclB5ODkoXzdkWz9L'@;
put 'QSVJdlk7PU1HL3ouNmhUc0dDaXw8YmZQQiJ8KStYYzJ4c0AsOlFBMFZAOzJ8Rz1SdHVrUjBBKlMscXUzWkU8LCtjaUR+PSxieSROTmRfey4man0lc11AKyYuJWpkTG1LR31tW3U3WnJzfDNGSmprVXY5cjtOImEqJUtuVUs/X0R8VXBYYVN0ZkxHOG45I1QzNUQ/TU95ezltYyY7XiFFNFY5d3ph'@;
put 'WWJAI15bKXdyaEdkRmM4MzRCeXxwPSpFdGAvaCE6JkMuK0U7QV0oUXIzayZHYT4xOW85QzAoW1dTfjdoUWNTam43Zm1IZUJia2Vlezo4Tlp7eFRNWk46ITNXX3RiUn5ALDZMZjJVNG8/eExAalJCIVJoTE4oZ2g+OnlCc056VEAzUkgwc1YkU3BQX34lN0QxTmtXVldGRkl1QTxeOk13TUkvTGJE'@;
put 'cDNGTkkzQGJxJXVXZ0gzRnIhXmAmeDVkVltLUiF1QFVGIjZweWpEMndSejUzMyYse3g5JH1OSEw3e3Z5WSIpUyEoJlZIakFgbHFUInI4JHFCVHwxSVlHM3s6K0lZdDw+TiU0TzlDR0F+M3JlTSQ+PUpZIyZWRiJpTi5ka0k0Ik5sM0hiVnlCcDNlZ2RmWHE3bzsocmE2TEJxVjV4blohUikkSVUu'@;
put 'Rz8sXT9lLDVDR3dkVj91aio4eSlTflBTUkF3YWUweXFHUUBBJSgreU0zRGNjLjcyYGU2ZHdKeWRHO005KTl2cip9R3AoMDNqc0ZFZFRCcT5vSVY8dz9Ta1s1V35MQiRncS9TIUxSeHRKSGp0fH07V2E5RFJARWUlMm8yXXRidi4kUFUhVmZRK0JAO2I4JGUxcmhseHhISFQpMzRCJTJQQD9DI1o4'@;
put 'P0c1eVQlUVJeSzFmaHpAVk1PIUIreUBxKWNPVCJVfTNVKUE7MFQhQmBQJCh+X0svaTpEZiMzXlk4WFFEYjFaekhwfSZ5ZmFxSXlmYmltNy5ZRHFGP0w3Uzw3Lit6eUFMZlRuW15qKEkrJVtkIi99eTtjcF8oS0hTc0A4KHRfP1BgcXZGZCZgKSNtPCRDOCMjcXF8PVZ0U117fGk0VjpfTzZjMlJl'@;
put 'X3RKcXlIJl53ZyMlY1BjOW5KaVRvKjp4dUV6cC48TDY6enxndSNtKUM2SCNFYCU7dEckOXE1KEd+WVZAX21URjB8JUJTa1tacDBHbXJ8TFlGQGlaMTNlLlI6Q0J3TSg2KmZKWlZKW2pDKVUwTX55Qz1ga1VhWFRYdWYsL1tLTT1QLFVSdzYiVElsQ3xOQ1I7TVQ3S0l4aFg4emVVbXJuQkVISihv'@;
put 'az9LVz97ND0pQ3hddWh5cE86TzxycihIbWlBdFlDV3I4Pn1JVSFQVFgkRGcrNDFKe09LbSg2SzhFPXt2JipBNCxvWkx5ZkxDOElOTkQwREF9aiFgUStvTzFvcDdzOERofjFVSFsuInVSPXs2a0daeE4+eCE8KUI3L2x+QHBrLjM+fDZjXVNgQDxLTEUlcj1PSkpNVWZDOWI1PEpXa25HQXQlYiM2'@;
put 'S0FgYDJLIl5EbzZ9b1Jkdm90SjB3KEJPITt8OlFuPE5oW2Y0cWNLYX04QFRMdmEqfkxnTTEyUC43VUBgd2V6cihHXylUYShMc017aVZtTzBPIiZ2aC5uIyFEPk9eIVp8cCl8TGVOfVZKMCxxXjZrLCN7Y1NyS3pZU29+WmhKcS82XTFNNHp1R2k4aWJsQH1uVDUmbncuZCk0RyZZdVBicEs+P0tX'@;
put 'NDg2WzchUH5ifnJWbGZaT2YiSWkyK1VtOEgucHFGdUNZaTlsdjIsb1I3b15mQHdXMHJ2Yj8lKXRkZ3RoeFpSdDFNZ0BAdVJaPHRQXVJWakdfd1R1cChJRDcmJCNrLjBtV1E9a0NZeHYrYkpmKFdba0R4SlIlRDMzMyVSZHR4TjMvI0hvXXkiRms3VktdSnZpZ0p7UmppS11pZl54JXtwWU5+RnM7'@;
put 'WGhOVHwuLDc4SSlfUmpWUWUvbTQlem8wZDRdQFNldmxYN2hONldRcWdVN2V4WH1Zenxyb05gW0JpUkosXi9yInRkVDlkczZzeEo1SloqTFUpanx8MFIhcFR7YS9FMitvfF97RklTYHJSPTNUUDQ3JXhyNEdQPWc0TUkzbGliYWtYWkY3LjwwWlk6fHRvYixVTnBuPixZVyk/IyM6VkQoPVVbM3RC'@;
put 'UXNZVm1uXi9mfHV2cnRWe3lyR19LTiZjUXY/OnpvZjk4XmlGT3J4JmlBcVg3PFlVTDZ8QGdzZWhqW3ArQyRRODlvMWVnRitrP35uPyJCc2tgMEJVZE9xYk1COmYkbEtaIUtWfmw3WTBeZT1Ocz9COjIqeU8sOF9AeUhDNVEqbCxhOUorKT5pXW5na0MiMCtdSUVnSXU0UzxTREl1THpjZn5lTURY'@;
put 'Mn4/Vj1uRihrUHMlUS8xQSQoZ3lVQXI5al56S3U3anhHelg3OldeQU1UIiUsRHRRJD1LLEtJJkN1TEBsa0VWcVI+YWkvOzdqSUFmNSsqMGBTSz9McjcoVUVFOTZIWCg8SGo+X0JDJXlzdWFWNkVOUE89d2VFRjEqSCF6YD5+dnxlelE7YGkhMVlaVUdxRkcjeHpbJmtXSko3JkIxeEwxPGVjcERQ'@;
put 'en5xKjh3JCxJcW9pKUA9YW5tfDNCMDNnODlqWWdYVE5DVyxYWns1LCRkTjReZHF6bTE+WnZNTGYxcSpTJFk3bUN9dWcucSFhaHQ6Z1RRZyMxMnB8NXpxXXJbUltQaSpdUjNsZU1DVThwaVdVdHxqfGlsbGBsMHphMFpkNzUjRGpINl1oYyY9ZmI4empUQDM6Q1kvXipkdW5qUnBGJVlFe30/MCxk'@;
put 'PDJlNUJXdD9nYihLdFFNUiErfiZxMHdhSl9fKEBxY1RlfChNW2UjRF1ITU0vayltM09aS2d9NkdaVTBMcVghJiRzbnQrdjdUPzlraVV7MXtpcThRNUN0KHxOa00lLmMkUkwrImluITdiV2c+VkBESmJQSjt1MWZzJHl9elhaWVdOQkgzcSojekM/MVVISFAzTWpdTTxbKW5Fd2JiVHZWb2VSbztL'@;
put 'eixqPjQlU0hBWlo1XTshR3ksX1dUT1ZlOEdJWGcxcCs/JThpUFtYWmdwYiNtbm0zaWJPUDBHcXMyT3AvaTYoWn1QKHguT0ViRlMwZV83RTpPUFJeRDxTTStxV3lWWj51RU9+XmE5XiUiel9AJDR4KmxaVmRYIiYxSixId3VwIkpvYzthUkE5W11+dllIX3tSe0g6ZHdROm5lZFJTMmk7bHhRWXxZ'@;
put 'OEEzOixkbk9oTktWQ0B2U0pjVD82JVgqUSRPLFcrZXgzWE0rbntQcHhsRFddWCRpZXBVdTJgT1piPzE7bjl3dG1UZ2k5KzZbM0hwInJBRWIhXjgiUUhzNGxvYlJhImp6UzBMRjs3aHszPTxOQFU5bnMzN3BPWU98YiRSSGJ8Lil5Y1A8YjtbLlllMSFLa3hJRGchSnIqQ0FLJUxVai99K3tObCw+'@;
put 'bmt8cEl7TkVCc0YpcXs2Ky5iMDBAcHJDT18mbX1GYm1MdkpbPiRJMVs7dmF0dXgmYiZJcndxZ1YqTDtgQ0wodT9TJkpTek47aT5fNjhPQj85eWBHdXlQdHVXJVp2PyErcDg7LGZmYVl7Y2NkQio3OS5kKFd3YXJfRSh+UjFXb2BjWzFTfFBaPkVpSHA+Oywme1ZhbCE5bEs4PDBOMGtjeVJFeGdQ'@;
put 'aD16WGtXV09xSFolemsveDlyVno1YzswUWN7K1ZnV2lHV1M6figsLysiR09DcFYsUXthRDl9TF5DS3QqfTokU2FJb0ppbW17TUlZPFtKSmlCeFlUNVdhfTZ+OFs9NmM/QnZQfHcubDNYY3FQI1c/NF8rajE9PF10P1drailPRSFfUFQycW49ZUZWQElfVjF4Nk1xT3FbYnhycV8lZHBAVjZiK3dY'@;
put 'YEMpVHh5PkpxNi85VipPRzxoNCEkUSh4YlJvKj5MPzQ9K1tsKnBWPTFTVTQyY2t4T3RQQ1AhWWM6dCRZLlgyJig/RSJ0UCZMbihJajNAJDQ6MVdWREU1NzVLalh5cTJVXVdwfVBoPCwpdExTaFREMnQvLGAiQiY3P28vcUgsPSNMakFVXjVMIXg2Wi4vVV5taFhrI3pYbyxffj8xRm1VdU5qVkRG'@;
put 'OCVmbl9QNXxHY1coe3teOklTMHEqTFB+RSklKE5kKHtqektAMjQqfSZseEduVT8scURrYFdPKFZ2cmFILyZuN2EiR30sUDApUGJJcy9xVnU7bWkvdmcjXn44Y3M2anJDUDAmaVFkPjA8LlsyZncmbiF6ZyZqLmU6dzRlWzw5OmZwSiMyQyIlKG5WYFM6I01KKS8/UilxXik1ZnVQcSkvLz86YCQ8'@;
put 'JCE2a1FoOlNYNjZSZjduKzVdflpKU2xOaGlqZTVjYC9bTk1day5mJkY1X2tPNEJDc0k8Wz9Sc0ZtKEt1bD04QEA0ZXdfUWNvZSk5Z0g6Okk+aFEoJCx6WCNQOlgzX01lIzY9WmQrJCFbdTpzbygqTXEyfDtJXTRBSTZwVlsvdyNTRjZQWkYwfj8vK3k4YC95bVB5M1ZsUmtmLil3WHhdei9XMDV3'@;
put 'SXd9NjZBVjpfbStDcVdRcEcjMyRqKSZiKi46Jkk9Uy5LQiw9V0UweiFlJS5SfWZbSjt3IWpXLHtJRm5aMU4oS19HVUQ1LEQvaDp5ITsvQm19aSEsV2FqWHd8eDQ5L0gkPFsxeWA9PE5EJHhtX0dgSEQiZVA8NGZJQDxlRUI5OXwjV30xWCxCQiwmRCQobU4xOVdFUy5gPTBxYzchdDlIWzclSThJ'@;
put 'dG1WNzVgby9TJDNHPF08dTlYSjY1OnEpXSVoQDo1cXZ3Y2AkTyJJe0d2aWlKLzkuUElPdG9ePHEjTEZYQSZiYiFvTm4yOCZdImQqNCF+Tkp7clJ8K2RGU3RDNG4rSVIxfCpOdVtVSS5IeF5PNlRaNDhaTjZMfV1dSUReJCosZSNkUmVwc2hQeStjbVphMlhNbjgqIypCWXxPeCxCbDdCIjx4T0FX'@;
put 'KXkwIkNuVzdmczdVd35id3VgTUY6dHJzRzBOMExUb2kwIkZHZTNAMCM/ezI/WTArZyllNlZRZFo4VT5XTSh7RWgsbjA3NmVjaWlOOHhVUz9QOG9teyFST0c2eC9tWVklYFQxdnhiXipyWCJSRDdNKG01TlYlX3JjLEwveSN5QmVVeT1vYGt+M0ZlcCUpIitFM0ZPdGN4djVKZkRKLG84KkguTV85'@;
put 'RVQwU3MoZkVtejlWQysiIUN6QSN0UFhYOTthZUd9N2goITAyOj15PjNnLzs5MDFHSi9tMjJdYG8kdEV1Lks0P3ZmMCVSNkRjVis3Sm5qKF9rcV96Z0hie0JIUHp1Ki9GZCNWampGOHx8ISFVTTdEKW52TEw5QipeVVdBU3d2MzF2OFdYU3ZVbnhuNFRJOX0oSmldMk1nTWEhe3B7QTxoJCpWYnxN'@;
put 'LCQ9OGFUYV5WWmB3TWM+QjBZOmchfTpnWDVsWCgqVmFhKjV2d0x8amxDJWNKKHVKakhbZ0JbKHd8JixoWHFDRUNGfFFVN3FhWm0keHk9MVtkIitYJF0vRjJ7OVNzS2pEaFZkSU85YVclSTFGJWd0ans4RmswNmE0R05+RlJTOFpYfGJMLEt6QW03Um1peS9ydk5gYjdpQCRmWjg+KUFdQ3FvSFdf'@;
put 'bmlJZSZWXXlRbTtvbkQ2QEE3K3pOJWBkJHM9UEg6SDJ8fTswNCNhZWpUNlVoVi5JTXFvJDVAeE1lXklGWy9dVS4hZ2pCcm97VHZJJEdnOXlgIWBvIzYiLjYzZmQ6Olt3IlJNOlsudXxbZ3JFN0V5amNFLDp5Ult6TS5uI3MyNEREZWgjV1A7V2Vvbm9hTj0rIz1iOiZSbDxDOldiY0AhKjJ5d0JT'@;
put 'eVBRejwmdU8lRXBDMCVQOEtMfnpKfDIqRXZSdDl8amdEenRUJWAlVCNIVVM1IjA1QEZgd3dhZUUhLFs3THIqYkxmTntbbFUkfHMlRFtBXUBzNWd7ZFBtX1JiUndvT1A4Km1pRk48azk0NEx4U2ZwZndDamRPb3QmVSxXaXd8TVBpRTp8Olk7KGopQ31Yejp6YW5aTj8pST15MV0lK0osZWVFeXFm'@;
put 'SGF6PVk6djwuQldiclpdO309OFZJSSNSIjlnSiYwaERIXSNxeWl3eTMwXXt8ZEBuY1oxI3JpSGxsbjVuRWNmO3EpT2BPWHlMQCIxclV+V0VLLD5fW0lBS0tKPFJVPU9ydnZxa1tYUCR9LmVVeVhORFVxezY/YVkqP3U5dlFtW213RG9OTkBefD9AYz5OclE3QXhvd21HRVIsdygkPD5EdFpVaEpN'@;
put 'N0QrRiRHKVdofl9eWVEwKmR2WmYrW3N6bFhdclpDSz5oZ0RwIyQiRUs+S2xKSlBAdyNKenlWM0Z7dzNbL3hGVCRvMCowSDx5eWIzdiJRI14jZz11RTsufDdKVDxZT11BJFcvcmB8T0pwQDJxVG9yb1dwKSs2d21HUUZIWWgkNz1oOkk+OHVse3Z1c3tWLyR0NX48Q2U6MmR2Vno8UUdIRmg4S1d7'@;
put 'SGxSKTxLTkBRXi9WUCR6Nm8iWkRwYWU2WTF5e1VdQjNiQFFxbmB3akE0YkZZK21lLzlWd19YKStgcTwkJHkidjg2NTJIMEhEQkgsPjx4b3RJfjhMcGtodDFTX2hpMUwofFBUcC5aR2cqWj4+bHNAWHNybWxJQ1pDTlBQZTJ0P1pZWl1kMTk0P1tvWEJ1JjhNJVdvOF1GSG92N2c+eT93dU5eND5W'@;
put 'cE92WVRbXyJBTVRNdTxWZD9bdTdSOENNdnNfJio+JURYMUc6P3xVfHw+bGdOcmpHQkMzIlt2RXh9aDIsS0JWW11yZSt0VzA6OWk1emo0S0B5TllKbCFARC4qcmpxLmg9YUVKWEhNdzUodyZgPjlmKC9OZkVMK09jek5AN0g5QEMlSy5OZDhDUUdXKEIuaT5vZkg5V15YSVYiPDE6Wk57UXQkMFpu'@;
put 'YSRBIkxFMiNRcjluRXNtVFt2InZOby4udysxKDcxd3dxMl0oLEtKdiZ1PDdgTm1FYU1nOEopWSJnYjZmLDBYMlhtNUsseUBVcWhjWld+Wj95Ml1xVTheRVQ1UEA+YCxUSDEvN2owRm9oImsjOih6dF9OYXhUKDNzWStNWnZaTDMxQHcyJlY7Pl5JO0lKXXViSDw3SF8qW1RLSm10TXAzTyhNZ2NQ'@;
put 'eyJ+PitKblYhTUxuZEdleUJoJkRvZztealh8eGt9djRCQX4jX2lZJXhiVzkyNUBXQTlwUSlvQmt2Z1Isa2YmeyFaKFtzekNYIm5IUm4sO1ltb2QrazQrZCxucXh4Zn52YUlINmEwWnw1U1k3MzJzZjpCNTJNRGlLQCpYZCp2NGAlZmxUdUtQKFB6Si9jWXZOa31IdzxhWm5WPjE7ZWwuTkZUczcj'@;
put 'TzRZa3FbPDk3Wm43T309QXtJVSsrUHpnXz9raDxzKTtyME8iZEE9KjRwVWlScis8JCJiQno6PHxQeGB0YHl9Zm9SampnKkNhQmoudUJ1THsmW1kqemE1L2p7LE9id3lCYi8xa04lMDYpND5sMFRvSFtTKDQ0TyNnXmgxPVskRDpaR0F8bEspJnUjSS9VPjByKWlXO35ARzRaPnNsZFdZZjkhTShI'@;
put 'WSFVT0V7QmZrTD9BQz1JX0B+KyVMKi5WdC9CUGs0a2EvOVI3WSZORTJoO0s/eSh8OntNYi9da3N3Ujg9QGIrWEQqVW44LGZ9cm95T09RWjlFY3pFOzAkTSU1KDRNY3VkZEJaSHI0S3I6TkxBfj5fbFZXandCfD1JfnFxYDojSGgmfXprcGkhXnM1MixqOEopP0xSJTRXZi4zeVE9TEVgWmI3Q18z'@;
put 'flcmX3wsRF4mYShtZzVSZW4kLjo0XW5gU1A1eGAxeyskSXA9RT5ObXRfNEp1ayU6fE1XK1V6KHxXPkF8elA/QHFsP1ZxRTI+P1tLQ0lLc1I9KDxRb2JdPjN0eW9yXSYqTXhNcUUzfWZpTHMudzhDaEQwWXovZ1RoU0JHfTZPOFcqXi99WFkoKjdvO01iRFA9X0BYQyI/cldnPS5QNz1wU109WE05'@;
put 'PyQiQ1ttNWdkIyNWOXZrSndOKyFFKS9lMjpORD46dk5XZ2YubnopS0s8YyVlcWcraHp2bis1UUojWkdDOzRScHtmdTslUmJbYGtxc2wwbmF2MHo9RlA/PFN7P1kuK2E+UkQxYVl3dip4WFVeVngyKUVrJG5bfEYsM118ZFdjKjpkSGEuRzcqU1s1ektfQ1V4dFtDPGQ7JDFFI0thaFYiOyxfVG58'@;
put 'cXV7Q0AoWm5XUTsyWypqSF1PPUNIa30qMSsicCkqOm56QCF+JVpoT3R+QVQjXyJEXXBiWW8hZXtZKiNWTHQjXlpvV15xMDlWUy5yW342SGI5SkxDYVlsbS5aZCxFIysiOV8rTCN5L0JNcF99fV9tVS5MU2ZlP0hqejs8V280OlhOI1U2NWxlOiYiPGs2RGljTCZST3pjO0J9L0pJXjokdkN7Y2B9'@;
put 'Xl4yY0IkJCtGWD9ddDNZZEFdWiZTY3M9JGRkaEJkITszR3tMSkUwMCVJNE5gQzBKNzFFfXhVcXtwWkwxWVV8eGJ0bElCZ2E/TlNlXUFLYTRxeGYwaiV7RUNEelBdVi9hWSMhKkg5ckJycDB4c0pmb0okNyFDMEI6TSZXcSJHNDhMVikmJUojeHc8Z0x8Jk19eGlFMm09cXg/Z0VNTWU8XiFPPEVR'@;
put 'ZWtnamw8SkZmIjtDOH1hT3Y/R3RqdU5ELHd7PzQmaXpUeEZ3OUlQUzRWT3pWUC4kNnRhcGFQZnB6ajcoTW5vLCkzYEB1QGNLQEdiUE9WNSg2bHxPdDBtTG9kNDFPU0wzREh0NzlWdWF4UkVRS2lNKyxdb1sybj5QU3RGK3VUP1slNy81fnpeP1o6KHErND0qTzFHWF1VdklHUnZHTlFIb3t9eXEq'@;
put 'aXZHLEsveyU1cl8vK2FzQVBAZTMmeysvN29PMi5ibVZsdGkjOHJ6VXB8N0V6fixfSXl7VSlYWiIsNDc2UX52QV5yOl5sXXtOaCJyPlVxX1NCWDkxTVREb1o6OSo7eWVfMDxeVWQzXklQaTZXVz4qJitoRFo3N0sofiI1MWZIaTpfLHxJYXtQXiYjWTg6LjthJl1zNUBMPTdGIVc9eV8peUFyZT1V'@;
put 'SiUhNn1kd35YfjZsRkk0Xz9GJiUwd14sZEgoLzpqZ3xiQTJkMy9GNl5RYClMJHEoakhzV285TiRASStYQnRSQWRxem1ob2M0bSZye34mNGg7S3FCIzQ7IVkiUW5vOEs4QlQhNSpIS1guKStkREczNXZCRHhkfEhzTiU2QkdzQ0JBK1padC40L3hhaElJRmFOSFY2Z35abWVANiJAZ3xMYWh4QmUj'@;
put 'QXUjcm5NLnl8USpjRGQ+cD5qZzMmPnQoay5DSndnaEAqRkJ2XyhQZyZXU1EuRE0vMXE9bUV1eF0sNW9+QEhNfXsxfUppMU5CNUxhe2NmOylVWF4vZXhabD0xaXZAV2tVbWRHKFhMeDZ5LGtBLn51LDVCKURuIyV9XXZfW2BuT1V3YmRyRS4oOExyKTFXU3FYJXBCMk1tLGB7NldXemx2MDYyXnk0'@;
put 'aEkzP2l4Y0QpJiQ6Y0xhXSpyQmNFemBXOFM0ans9UUttRk5ASnFtVUFPZ2NLe1RYKE45S2ZKMWxyMi9YbSJmVEEkOlszXy95QEghK3JZMztJR3lXekI/WH5Nekt6TUg4N3ZHWmI/d3Qsc3YhMH5lIU42W1BJeHBCN2QlfUlBUFRATllMZzJjYD8xYlpEW2RQMHhFLFdSaT4vZG1OLyx0ZEZINWNG'@;
put 'Y1lrWFpCP2llIyZxVHVmeCZzYUNrcEBQTnQmWTBnPWNWcn1rPWVXckBEWW8zfl5MVEQ6VGgrak0hO3BdM0E8LEFgZjkyOzM5dndGVTVGJGRGUDlKTkZTUnE2aHZPcn5gRHZ+Wk1YW3t7Kjp9MSVoRWFtRz1oYT98dnc5aE59cyFOa1d+Rzl9VXRMdX5ARy89Oz9ob1U0QDJTKWIyT1doSkIvdUF7'@;
put 'XVBAb0AqQndgY2QqZXI8QHwrPUdgUGFLaHJGVnN1KStvU0NIdjJ1Jk97Inh6STJxTkk0cms9W2RMOmEjR0ddKn5CSyI9KnpCSj9GbC9BXnA+KyJTPnwqNk4qKUpPNWxQOHhscn0rNz9Ye05FaUZhfS47bU5mOWV+SVJwJChDRmp3PkpHOUE7cjNMcHJeLntORmRoS2IiXnMra20+XSY1VU0pPXty'@;
put 'UilLQD1eJDhaO1tgT2E5OHlyOU5AdX5USFpLOTBQOX4uc2srbmQ1VixYcHJnRzUwd3pJYnQ3MnhbRzVyJWcybEhrUCt9fXAmMFVyOywuYyhJUTdCOSQkfjF+Om0rPXR0byo1Ykw7Z3lNOSgjanplM0E0SS8oRnFXdVk/XS5lNFk0cSJWQDltbEtKb2hDMWtZcD9ra1tadjNRYEpBMDJVWCNNWUFk'@;
put 'P3pLP0c/KSE1bFtRRVtKa2Yqd25eI2NIe3M8ZmRXS0ZAIipdIkxKOVs7SkIkIVFPKl5QenVWQG5Ld2xfbyh9ZTdKcWJSQjpKaiJRU2RnMmE4JUdURipVUDpTXXNeRkNfO2svd2dZRm4zKHxRcnBVRHlCKmJhZkh9Tk05anp+RUVdPkMoSTgldik+bWdpU2lWLn48WFpRbyx2R11hWmdhbktCel0z'@;
put 'cHd8QiYzZyUzUUV9NVFzIkp5azBfZUB6clIsTUJHYnVoUzRJR1EzMSVQLjQ/WzlmVk86NDM+anVFOEdCcnpqWTt+NkgoIl49Slc/SXtDRUBFZEtXVkNiQ0ElOVJ0W3pBcU5vPmo3Vm1TUy8yODpWLDRTZ3ZCZCx1JEE3dX1hVEZyLF0jIXpCNUckP0FjNHgiWEMve2kmUko5YH58N31wQDs9ZSJY'@;
put 'W0gxTV9KXyhOQ3soYWBNVntrRjZQQiNxNitmJXBMQmNqYjtTemslfXh7OywxXkdKRVNpfGNGLCkoIzVAU2ZyczNYImVjOUo6RENoR0VvWyR0UDxLVmVQYXFgWEojU3EyIik3YlpRImF5aCJDNCxSV2ZMTEFtdl9HNCNzLl5bT2ApeCpqJUwrPVtOWXxZdlFecjw8e3RndHkheGdfdHJTJTI2QmJE'@;
put 'OkNmejhvIzljXjBGN3I7QnFsQnJsejZVRm9+Nns+U0pZckh1N3EsYjZ8PUNYTE5AWH1iJFVNX3s9TUJfdWNPJSNrOlM7ZixHJXVyKSh0aXdCJS8/O0xwUmU2Wi9+WVd0UlchMGppdFghOEpZP31yJUE/Q01sRzpPI21eWTRCRjMpUDxLQDdEcyR9TDdBSUh1WkN2Vy45NCYrbms1UXZeKFF9dzdM'@;
put 'S3F+UGtePHV6YmlAQ0lffFl6ZCs0amFjT01vdmx+P1o9XnozQDQsL0EpKyMibzg0M1p6aXUsem17Wj1lMDRES3diP0o9NW5rOnAwMkA3KkhpUmNGQ1UpbiM4c0hAQXZJeS8ke1AlL2VIXTQ4e2JaQXYwTX5tOVhEd1tHaUMkP19KLG97MilTZlpbY2lTe3ZUWHBsd11dR1tWM3slVTplQzN8SGgx'@;
put 'aWN3OV9RNEEiPVA7Mm91eH0jPyIja31WNmBrIUoua1pQbTY6ZWxyPihSel5eSyJWPmVhSnc3RypoU2cuektqM2dGfUtiJGVrYSUpLmkhfHZfensuK2wlZEZuSTsmNDZrSkgpbSIhWEJLR1N2MV9mWlt4Y2NgYGRSWCpEPXpud3skez9HXVFQfElUVSQvcEo2WSU+KFkoTCJzMi47QEkxTXl5L3R0'@;
put 'c2V+QEN3TmNdaXI7W1hBSTRYI1NgVEM5aXU6SzhIJTpBSFZ0d0JANSM5dFBTUW1oI2s0WkcoeWJvYWxgZUhrXnZzJTAzTlhYKCU9MlRjXWRTaSh0N3JgaHE5K3J0R0VjKC9nNW0pJSEjRjo9OG4yTlRxblhgN3hIR2JAYlErQkdJRmxlJm1MXkRpXTpBal9MZmRlcEI9PUF5UHxFaFdsZ2BgPElA'@;
put 'ez13fnFNcjFafl4pS2VPfih2SU5dR2hHPGdbOyomK3pASEJ2PzVNPjcyRVIkRi87UDlpS0V1aU9AXT1SdUJfVD1kUnhOYlF2N3tWYz1mX1hASnNuVFFCdU08Y1VwN1pPZz96YG4uQiNQZXYjKT5VMmcjS1BFcGdoMl0rPXBVe2xMYXs2fXxiUkd1Ok1+RFdSKWRmZTtOWjhQMFApJmA/fjYjaiM0'@;
put 'RTt7WFo5OD9nYmcoVz0/UW1jKUNAJHpMfHlXWDRQfCt+bW5bSjdFVGs9PG5RUW5haGpZT3BdKT1ocTJsb0gqSDZATT1dTl0ubVg9T1QzcVszai4rWHYlSkxXcl9MSjpfMHNpV2d3N1RMQ35XVDs2QmsvIUZDVjtEc0k0JkNhan4rY2FocE1GNXN3IVQhbHdAKyVNQD91dngxSWd2KzpdPl1AfjdJ'@;
put 'XjMmUWlHKXxlQ14/RyEyQHs9ZiIuSiNyYDNwZSFxfS53Q24rQ21MaVYuUztqUypAVm82aFQheTVSRmVxcUtKV3Jua3V+P2RNRzNjcl8uUyo8OmkzOiY2dyYzUEBZMyl0WmJnbDhSMmtLRE0/O0tnYEVXTjtLdGguVEJCKWQ3fFszX01yQkN6b2xGKEJiKzU2X0E9eFg3O2BDd0lkLEpYIllZL0F1'@;
put 'Lmh7JFclOVhWeGAwIkNrJDJSd3smamdWTmgjZz1tQitDKCJ2WTFoSD1malQ6XjtyImtLcm4/WGdUeHxITmNrJGwyX1QwUGojUGpyLkVyMVdHemM0LHw8PFtbK01USEd1TF9iJm9uVzN6ckA4ZDhuaVBpeGteT28lSjNSempIYmQvYEhNTHZ3aGZoMDA0aEV9MktuMVk1ODNwMXBAMWZtR3VDYlBx'@;
put 'Tmp6PGRLczZRSE4uQGBgPkZYfjl9QDs4IllfdSEhcCtSaC5bdi5dV3IuPVp9MWJxZkUxRTthYDwqVFhiYTlkalhrTFNiVnt1bV0kU2s7fCJyQCxyU20pPkYoOF5pYj9hJUxkLy9OP1Z3IUY7ZUdoY0h0SyN8ezg1LEVCV1NbVn18Vml5YEpYUiRLTmlLI3xFOiRdb1sqeSpuWnhBYVhaRm18dURY'@;
put 'RShoZktPMUxmJHh1SUh6KyQ7QWgrdSMvQVA3VntSaiZhUTEoWl5eTzVnI3BpQDZhKUoxXjJ4QmlweT4/VUQyNCxlflpPOUElXzJkUHQzbGI8NTAvZjVUc2AhOFM+OiJJPjVAI2ZCI0k4b2c9NjgpVzJPfmpZTjRUZm44RUY0JUt2YFJkakAwYmhbI2UkVFJgdFQ6WHIwV1tWbzNMZjw/YHoiW1oo'@;
put 'VUgrKj9pNEVRKH5FJVI3azosdFtFImNjS2pmbklNVDlzQ1RWajBTOXI3eGtrUWlSO2Ihfk8xPEopSHUxQ2IyYWhqR0w5RFRUXVVvS3g4ZytPZFVRbWBKZiQqcXRwX2NXJkZ6UG8vO05INmN0MGdTalghZUA1VnQ2TDB5ajhVe2tuMFVncHZSO34mZ3ZEe0hrRT93RXFuM3gvYTJSJn1oZ0d3Xzl9'@;
put 'JUgwIXRvVzl+YT9+L10zdHF8X2YiISs5OzI3aE9NKyxoekN1XSEkV181a1l7aXo9YzZSd2VNOFY6VFAoO1l+KT8sOCFdNlVCOn1EY3RfblNNRkFuJU5iaEtUZCwkNkEmUE0iXURDbkZGMDJ+dStYbGp0JHRHa284SDlvJXMicC5RUDcwfiVkelk6OHcpRXliUGZ3VGhfOWtvUj8wWVtPa25vVihr'@;
put 'SHN+Py8qX15GIjQpbnFybitKNCtOVV9kbiFec0kvQH0lZl4qIXI5NGxCZTxMODZPMj8qRyRgQCpbIXgjdF5dclJVX2A/KndEW2NLSG1JYj5NP0RZLmdydXFifGteKVlWcWYoIkRUK1dMZXlHRWgzaWIpbU9iaU19XzwxXnVQeDJsOV1jWzpbPjMuU3ROdVReMis2ciN2SDFOTGpTN2p+VUM5Sz8+'@;
put 'WW0uVVY1XyE3PSRkLyN1aVArZjQ0TnR1N3tGc25xWmkjaSQvSCRsfEZ5RnRCcDVyLEZlOSM6UGleQ0AwQlQhZHNGYV5fLzY9RjhyS2Q6T24jfEBRM2JXRnswXyNGc3VBcmxwZEw7MUksejo9XXtgJGp8VV1OIVFkWUx7IWAhbiY7Wz1RUkkzR3FITkQ3Q2tba3YmVlB0TnY3P01UZFdaPiY5I3l3'@;
put 'TW96QCpnQ2o+Ui8hOXleJGhnY055ZTAzaChoInBNUjREJiJmQlY/XkBgRkVjJVQxRXEsPEl1fi9vVjcrSVNrfXF5LD44UHpdLzRyKkg1ImhGfDQhKD5tMG82SmQrYUU3WV9jXjorQEttOWZGRStET1VQdERLMFRFdCFEMlU0d1ByZmdJOFYlVnF5Q0E8M1UraWpYJSVwemQ6TiM/eyJ1ZFJVOzBG'@;
put 'TEtyZlRjZHJeU35OYEtXITZvS21uNE5ySGgxJUlbKksoWl9bPD8ibH5WT017YVs3ZEVTSkxILCRQQHxocF5sOVVePXtBdSVYSyJFaDRjdi5DXSFSKCF0SW10Wik4andNV0J0QTkxbFk4N1JdQSVpfXVlOVp4cU5edkVqVTs+SD12XzIrKGhyRGZIQ054I3AsZW4qS14hIUB9UjduUDhhSSh5fkR+'@;
put 'aT5HXUVeO1A0U1lpcCJqOHY0elpEK0twbjgxWzElUjhgMU4oeCN4bjQxWzV3UFd5Omg9Ij5ObWhvKjhDYntSMHp+PEQyVng7MXt0NWJaTSokZkNZZjNIIWopP29tfFRqe0EqQCExeiFsQj8/ekVINVtVbl1HOG4iYEI4USpKd3hhUlVrc19vYEJEezVTamV8KX1yZDlia29+NlNdSXlqVEhYbUdl'@;
put 'SyJSTSxZWl5SbnllTEl9LjFLMTxISyJ1cywkcSpyVyh5dWkoeE9zOHgsTmhySm9aZl9qSihgOVRFOyFMNnQ4QkJJZnAyR3F4VDFBX205JGpEO3UrRGBdUls7XVgzZ0pCN2hnNykrPktgU254SHpaPEMhIWU7RUJjMEJbKUkvN0QybiRLNDxnMGo5WEZTMU1nY2YvQC54e3ZabkBSPihAKGpkOHUh'@;
put 'QUUsMDwrSiRuUU1hSiQ/empVOXRIZHJFM3taS0phcyRtYmw3Oiw0QV5TPSpMWSR5R0ptRChUclRnbFpiYyFKRU5ONCZNQXtaXzhlOiEyfnlRfVl6S1VRMVpCMiVKIXdHJn5vZD9PTXQ+Mi50IUFafCVAXXBXO2tPcXdjbGNLO3N4NyxKe2dFQDdoUjNCT3c5OzIpNk9RKm9be0E2KHclVXg0dWo5'@;
put 'azprTmRyO0tnPSNuMl9pfjQua0FJakd9UUJpMWskT3txUVlPL2w4dnlNPStPSmhAV2BkRiI4VEc1bnpuJjMkTyFyZSRbbztZOntgNHBJSXRWUi5zKz9idyYlNnpJaUtbfFFeL1dYWVoxc0NORWBUKXQhU1A4OEdPKmF7MSxbNUpKUmdROGc8ZW4hS09xb1FGaC5iUmlnOHk5Sn4qTUQ4ZX4rVnEq'@;
put 'ZXgsbTUoKEovPmtZJUlde2NYRVlxe28/PDhtZ34mWndDa0NbVigvJjN4VilRV1ZFTlZ6PkdVSGljTD0xL2EmWHpGSlFROzYyTmZjZylLNytQMHUzR2hYPlEkSyMsYVY0JC9IR3UsOyYqRWI2bnJWYnE8NH1YV2F8P2ZAQFEhJTx6WkksNkMwSGJaRGtsS3pwT2RoQlVtRlIpSEM9SGsrOkNMJjdX'@;
put 'KCo/WGdkMHM4aDc5VVVWKFgzYXtNPFNEJjtgTGhyM0hWIjxnSF5kO3Zwd2JHViM8cWBsfkdraHx6IyRHPm1KQ2NGM2l9bnFJQG9HXW5FJk80e0N4LzZjUVBjSVchdmFKfGw8PF0kXnFIdjxmL1c5Xm0ofCplUCJoa11IKXlsPGUhWl1DZjdUOUNpbnBNRFV7U1VRMFVjJU43ZSlOe1A+Rmh7Pjcm'@;
put 'YmswOGBucChRKj0zfjRoVm0jTiZXNXpCMFhmYUs0fWtySXo+NHg/enJ3KT03IVF5e34xazFyUlV3SEZOK0F2a1B2U0dbI2FBMyNhd3dCWWExPlZVSEk/V142YXYqWVhAb31DbTF9V344OlR8bFAxODlwZXdlejpUdWRnMWhiLGpJSV1FRUAyWD4hekFnJEJgQnRzclIjRFR3KXIuOl4vVlBAXlM0'@;
put 'ZDhXKjYhRjohWFJKZmhAYlshRi9AVD88RSR+a314dFQvISt2JmR6PGxSXVpxYHBNaXNJRihmcWtPPT9HVHJFT0deTjB2OEdOJi9VPFo6RSleMlgzPXlFIUo2ZDhKQmk4WXE3QlAmVUB8dmlASzB+WTlFKVN4WzJLYyxQJkhLfjFlUC4xfkpgZEhvSndicTAmWXkmWHJYP2wuLz1uL35RaWw1K2hL'@;
put 'QCR0fXsobXJZJmY2Vm0qQF09b29jIjY2Yz0ibkA1M2FAamNzbn47YnlLN0opVn1VQCZ5NiJhcCRpS0kleH5XfVcpZyNjYEArXl9zaisvclBGT1E2LzVUQjE4YmJVaWlGSSJ5byN9aCJ8Pl9LOClMblpRNzNyfFp2TF5nXVVnXkFYVD5TT147ZCpQfDxeNjo+RVMhL1JHIk04b1g3XSJDdWNpPTUv'@;
put 'VWV3cXVtRnQhXj5wSEtgSkhXSj1LfmtTODF8Ykw+LFJkLmIwMUNoaltpLjVXTCJGeUV1PSZeRiljKzZTVzB+fVQ9TFMwayV9TzpOMyRQRU08MD1dOnkjMCVVckw4NU0sI1ZTV2B6L3BgYE99flgzQ3lTIXdBLj9zUS4jZHYweip7MWA/ZTlzKSZpNld8aDFmbHRxMkluZENzNTF+TUs3YWtLQ3JC'@;
put 'ZCNWWD15LE8xRCpwKGUmPCVZSSMuOjx7W0Q5TmkhPFBtTl5qNytWT1hFI2ZZM2F0OUBubyl9PEYxWDt1Rj5fUVE7LiRxdSJdan16ISRMczBVT2VVK2UpVm89bkJwN3s8MSUiUTYlfD0lMzVPdXw3IjwvfjZnJDl0IXl1PFR0MUl6aXJXS0RjTUs3e19ZJEJtek5zMkguJnJTVyY0UnNeJkNGO35n'@;
put 'OUszZSlycmVOXTJuZ2Y+SW5kNkZkV0ZNIkNPN3pBMyFZKEs7fE1TfSxBaHlpeEp2Pj07bGduVXQ9OitrPkJscSlQOzRZSV05S3h4d3deM25jM2R6KHQ+Y3NfdWt8LmBMM24mNHxpI1hBNHt+e007VlBSc0RbYj56P0U6dV9YWjZIXkdjQ1VwRmszMHpsezI0WWpjITMqJWw2bnN3JER8d2JMKDwh'@;
put 'c3BtRDc+akE5ckh8M2F0O1BuMi9vbWM7QDk3RHh+eypiI2p7NGImXTdIOFUwVV9pWjVCb3UzLyJKY3lFdyRVb21nRTsyYnVwd0FwczAmaGImUXs7UEVTM3JfWjJKPFM+fDVNIjpjIT8lQzJkPVFTLFUoSVp6JGAjYmRZazcyWXE4fF9oPmx4ITpmcSJjPX5xRk9YWzxbfkNUPHNOPkkyenZ0SG5z'@;
put 'ImZwVTo5ai5aVHxKeGo8NXBeOHhKZGUqYEx1UyJNMDdEL0VCIWJRUFhsO0hab2RTeDo/XiNoNWxAKUspRmIzWXkvQ018Y1czMGtYQDdhJTYsPFVNZ3hqQ1dJfSVpUCNNLFguXTE4QXhNOGdCSyhFaVh3T3IyT0NpQERKaENmJV5rdXA4O2FpS1hOfHlnW14uaSg5TU58enFpI2lEKkBOL0xmUmte'@;
put 'TFAyNGh3KWEufl5YeWMwazZRYlBUKyNaYiRAaSZvajJTc2hqQ0FpNCtrWDJdc3lhUzB9V3QwOyM7KTRFciQzV2padCRLVDkxSD8+N0pzem5UbmJLMjhIK3Q7TlV9azt6TjMiYW4pXXlOcTJpaWhKWkAyKUpWYVRYRGJ4Rit4VVlrVExVXiRBViomcG54fXo9VWI5fHxbOn0lbnwibSE4e2w8KXY9'@;
put 'LFgmaF1PVk4scUBoeUVALlE+Zy9sd3ZPJD9ROWM5MzE6NEdXUkUvUzBxSG1mdGRvSF9xNXk+PV5lODdiIUhyYG86cDE/OExUPU1fU1ssfSYubFJRUnRPTl84cC42fk1yOEwxLFJbYiovXn5XNVMoN1NrSzdTRyE0PXJxVy4zOyV5Sis1eHRyNml3VCN1aFl9OUpzYXhNZ1Q+Uk5CP1VsKmU7X255'@;
put 'eyk0WSMsNlo2dkZrKC9zLzxDOyZzbnM7QGhNPjRPNy5JWGNZL1dnVDA1RV9jNXZuaGI0Q1U6O2NQPHFJPTxrXTcpViVZaHhaNHhzLHt0TXFyVTpuNFNNOilRaiNUUlJSXiRjPC9gPnNAbHwhJFUkT1Z9Nl5qOjNZfUd0dCgyYS9wYmxAO054Tkwrc0s1d1cuO11DVVkuKXwmLHNoUDgvRD0iS3dr'@;
put 'PkRoOD9SMix7MW8zRXc6aT9HL2VCQ0RBVksoQGFpZGtAbTc3bjNHKFQiR2hlOyNJeE9rcDBUQERgPXpteUdsU2FlPFBbVjNWRl8vLiNCLlIzWkBWTSNkSGJ0cSIxJWkrQHJkQmJHO3t6WlgmcUYvY1pjKD02OixAbz5VfEZEPD1EYV1efitvPzpmPXp8a2s2ejYrMmFCLyhXO25jODwzcjVKWjs8'@;
put 'dkZEXjhGTTNIJC5neF14N0h5d0oiNU93ZikyYkoyaS4zcGlQa09TJmNtZDgyQVV4LyFSPjd+VStOUmdKa3BCNkxQQlVaTGA0KzUzRng1Qnd2LDpCOFZ1XndpMVBdXXtpOyZSJGAlM1QiezdhN3Y4KGFsMFJXWXd2USghR3xeUDkxVGRUZ0thSTRddFQpRFA2W0tnaDUhYnAhU1dad2E5KGladHEh'@;
put 'ZXpKe1YzIVk/QHwmdlU2U3opVjM2Nk90b3xPJlY/Y18zWW9udTRhTHpxJTR0R3tHTXczdjojJS86dT14QkhUbCxvKEZGcn1jeCZ3M3liPmwjSnB4XkFQb3ojbnh0LH5MQFZncldROWhqK2M3RVtUTXVkJEVhZWB2SXFZOzI2JXN9WSFCeHQ5alFkI3A5cFVEL3UhOG0vRj1ZUzFnQ1lTLl0xNCR0'@;
put 'Rzhde2d+bzBWMDpuWzI3LDF0VWI6ZEM5elh8Sz9STHFiNWYrZj5aaGAoe1I4MCZ7OjR1allgd3ElemooNWFTLjZGVGtgWnlvdXxoYyp2SGhFbkl4PlEhdjZJNihnS01+cnp4dnlYbUg4XlkvVzFbZGpSXltZZWRyfmx+N3xHU0FQYU59OEsqZW08KyRic1NtTWNuJXU3TjxDPmJKN2IpWjZbVkdQ'@;
put 'K21wKDhlOXhvNyJ1M2gmYyZtYjVUZTROK3RkNkVHT149MnF4VG48Lzdgdy52LGxzRG5xSz9kSWM1c2h3Q2FyX3shSFEvP301OyNuKWslJjgoWkBVWCkycSkmW3pnUFBxUns8Kkg3enhmNFRkIWFgYl9XWy5+bkEyZjU0QHM/fTczOWE2TE9iJDU6b1pyNE9OWCpVJD8ydCYzTTVWY35xYVRnbTlq'@;
put 'VnVaaUs6WH5hVj5jO01CX3gxV1g4LHJtMk4mW29DUHsoMGRSd3Yxe2k0bnxSI2UycW57PDsiY1MmXX5wenVHTEg6bmBDIUU+PXw0YzJ3dy42Ujc4Ol4vZnt3UitediRKYHhtI1ZYUTRnVUpUNlZ0Vm5WYWcyUitKXS9gNy9rLCpZaGglTGxHSTV6LHoyeCltdWJPT2RhTnZmTEV0fUR0fnk1RDpx'@;
put 'cHV6ZWZvQGBMdXxWSCxsbz8qVGowIWNpIjFIMUFqSyEyTH5QUkIyLEUvP0RgYls7V3hPXzFOfkN8KC4yKmdEPyRJbyRbaHFGMF1yaSRIaVZPfio/V2BXYn47UipXensjej43XjdWNFdFSzB9VWJVWWZub1pHaVlJIzR3KW1NQFM1M0JfZUZ4YGRgK2o4dlNvLlNJcDhablNGZyVCMUVlWnJjK0Bk'@;
put 'N3QwWzQ3fHFzbmxYK1l7XUEpOVBAVGBZT2N6JmVya0h0fX55UFl2aU9gYTJtTS5EXik3anh7ZmlaO05hfGtET1ZwKjJscGIrPWA4VE5HT01VKjxZZ0RHSn1Qc18yNGF2W0VJIk5HKTReaihne24wVnQ0bXVGW3xQK1I7IyF0TltkNlZQZ1VhaF1aUGtnPmEsYTgjMV1ie2U2djI8VT8ubEVfVjY9'@;
put 'Sz1nJG9uNVo6cGE/L3F4MT1CMFlVWXE5UCRDSHtDMlh4KCliNHlOKiQ2a3I0SUFoe3AmIU19WlVyVFtTfjEuOkdKKig2USlSJTs9ZkZRe05ZKVJKX1h8OXY3eWA+YldSQFpvbW9ofWs1RmdtVl5VRTkoPkNCSnNnUmNdTFUlOkImX0h0KlJYUVlwPXM5U1A7WV59M2NKIlh1XjJJOmR4I3tdLk93'@;
put 'aFd5VnZfQDw9O2N+LFhYdGxUU2tUJXJNND5WL2dQaWN6TWVyfTYubTByXW54VnkxLEZvIVtZNChNOkJeckEzbk15djlnNCIxUjQoeWUpa0goZjl9SD0+SGxFUFlUQnVAeU0+JEZLVy4ucUEvW0xvTi8jZiVUTnNIZGxdQC5qejZXU0ZRJnslVTZxYklJRSMvcldZPjRGSDksM1I2OXVOUnFnUDQv'@;
put 'PXZFR1o1eFJ4dSRsWURER25XNExkYWN6Vm4hOFokLCo6PSVUQSFDKmxfcWhiQ3prdlsqNDRUMVcmV3xQSWxQYFNXXSl5ZTk/fipSMHxKe18oYThTZy4yX0Y2ZlgpfE1URkRLL3haNjRFXm5eZENDP0dsNUcmRTFPT2pPVz9eY2ghRCY5PGtZZikjK2BDcWFTP0RmRk9vME0vT3ZwWX1RYTg1MVg1'@;
put 'MlVXSn5DaWBCNVt0aF5dRCpPNjgsOyZBWihUXWE9OEkyR0s+YGAsd0dYWVlFTUp6TjUxWy4uTjppNzF6PyE3dSNPRl55NUJ2bW4xZnZia009PDFGUkdCdC97OFBTPHUiaHxxUW8sLzl3LkZFaVV7T2FmOkxnRCQhR3JiRzAvcU1GbXYlSz50dHNjKiVAVEt9TWp5VTNfNkhAblM+RGJgeXp+SjhN'@;
put 'IUJTZS5xOmg+c2hDPWxiJXJ0e3c+UElfNEF2ckxIezVOQnBPfUBhfXJsY2ZUc299OjpRKCs6WkkuaCRFXWsyZkBHQVpiT2d3KDA5NldjS0xlSjF3OylTSXBNWXZhZCI8ZyxibnRjdHRJUi9WLyUuPE0je2U1Nn1zRGk4Kld0SjtZYlg3aUVSbkE/dSVyVzFKWTZLMissRVpzYSkvYT57JXMhNGYo'@;
put 'bEQ1bHh+eVRVOW07aD82XlJjVF18VDAvImo5VVY9UG4rOzI6Jj9nb25XPD1NRXxJdWhHWjQ2LGoyenVQb1Embko+Z1dKbFdDI3hZRlh4TC5DKFExQkFqUVJQZ1Eyc29RW2cleVBXbF4lZkkkW0EyPHY1fGs9WmwmYkBMTUt6PyNhMHNQOC4xRDJMdFopfCMmbDNTLDtCJmo1XV8/dj1fcCMzXlZX'@;
put 'cXt+JWFKS1ZaSUd1LHhpdDlhSU5kNnguaTF8cDUmTkZJezAhdDNpfio7LGhYMGZAWkl6YWVDN2F7IX1mfmd8KGw2VE5kS1pkXTpTIzlvRSp1ZElEQzIhY3oxYGhmXzAsUl1fcEpYaVFgRUs2dzdXWFFpeFImZT53XjN+ZTxUXklkfHdEYXtbVmpJLFJecl87fmlSIVUxO1Y0WSY7KXxXX2lFX1lX'@;
put 'VDN9UTE1SXJuIUI5cHMpfWRsQ3tlSDB6WX5GVHF4TT0mOWxgKU5xT04jSmRbPjshb25vXyJsclF+Nj5uKmJtSX5qajJ5dl5lQzt5cCwyXT80bzc5aDBnXiUvOXFfRyI/c3RWPjJIKC96fERRSE95N3Ixd2lvTDUhMkpzfUQ/ZWZMUVBDRllfNjE5Sl40Yz5BLEhWN2tOcXJVQ0JSJiZLfmdPdSV2'@;
put 'aj9SOnBWZHFTI0xKXzdtYklWI209Z0E7S3thb108d147JDEubGdSek4zMTNsK2xkJD99TX5LXzVNTlhAOW5+WXtham5+Zixga3Jrdk9rJXpmP0REb20vZGBkO0g8fXhFRz1lJXhJLntSN1EpNztZQn1ILGowWG58XUVuSGZadFo+TGZRO3JtdTEqNVZRbixLPjspTFB4VHh2S0MmdmVpckd1d2Fh'@;
put 'L2QiKFlRelt6SVBafVZvS3c4L2hdQnE4QD8wfGkobWB+dTpgOTFRdmVfd2ZsdnhjdWlqOX5MNyUvQFA+ZH0jaylyeDEqe0JmYVUxKSgkYWQlI3V6JkZkOGVhMmQqOF9QSzMyfiM1S0k4VD02ZSZyMjljKkYycjB7UGB3QiorQilPd0QjY2R2WztGak4sRWh5IXAmfH06eDJdOHwoIUE4UyJDZVU5'@;
put 'cyxxPWVCfWN3Nj9EdDdoUEJlJGdBZD0uXzApNjRaKiwlZmFmRndnYjBgbGxtRHQlVGomSXY0NDVPVUMqQn5CWExxUmlnT34hWnlwamg+Il0hdTY8NGEvJnx1P1RGVUFJQioiN0xqVUA6bDlqdlVWbHpxTlhnaUVMMm98QlU0Y3Q4MU8yMjEpU2pnSC4xSndjVjhAOE5LKipTWTAuOi9FbixWMlky'@;
put 'U146KVcvQWE0KHZHKjg5RCQ1KHUzMVs2SDhOI0woQDpQcStwOUAqeTlxdDM4JENTaG4/RztyVTN9OT0mPHFjYl4rWjZEKXxBMzFiTFsyJURJVjZpWSlGS2wrOURuZSk+bi9DTHIhazoiaG9AIkd7YGZUS1B1I09QRzFMSypJeiJvOmUwYkkpMz5qUXVVNko1MChCYGw3cnVYYkkoVGk+fC45L0dC'@;
put 'Uks4Z3h0OntlZUF9LnN5PXs0W195YVcvPm5dKXwlPXBJIU90XUI3ZD45alNyXTwuMCh8LmY9NWVfJjRsYCs2Y2VBKlF1QnFTOG8/c3IlIy9GOmRqal81JjNHXWh0JDdRYDFAT091NyVea29Tdix9KjQ3VUM+Pn04PVh5VTQ+LGQ6PT5FeDBdQTJ1cCpHd2M4PTxJViUkWmRmWlBALHh4UGBEaT5g'@;
put 'NUZWUUhjYkNpWCNiQzYpZSxfaz96ciREVkhdXTBYK3tMK2ldMV55OSl2VmJjXSl9clVNRl55bnwuRDQvfFZ+Qzh4a3FhdH05YiYsRCRLclU2Kz82YSE6RTN0MEVDYVRsZlJ0MGtJO144NFBOTGBCbmBIO3k5R0R+ISs2Z3t5NCx7SUJtYz1OMCIlS2dKUVQyOzQ4LmBZKVJpbGpRMiJsPFtXPjow'@;
put 'MU18XT12bGU4L3wpK2suanpfT3tARDNfS2JIe3gsbXF4QTh0QkMxLCV9WSxuTDNlUzRyJCRXQ1VGPDByeVUjXT1yO2BQRkxPaDp6NVJDPSxRTztHPWYsZGJqXXVednJrKVF5REoqUVdRTE4kMX48XUhHNm8+MEZzfCJXLyM5TU5GMkBUSVlgKjROXWU4WHE8ZXhGc0QqN3kzVn0+OixGaXJpeiEo'@;
put 'TzE/UWcwRnF5Oj02OWxkU14mOEBvVkVzMWM0PDZ9fTV1c2VFTVouPD0sKnNvU0laekIifnRfTCQ7YHglOGUrRD9RTjh9SX11PkZlQjZmQmYla25AWHw8TEhaZDtQaStUOmBMRH4pdkx8cH5sWzZEQkkxcyQ1ZElSVl1MUV1CWiovfHQpT09wVWozflN5OHpDV2M8eGs4MEZdfTNsV0ZkdkdYQ0Fs'@;
put 'UWojOD1LWCJAYGBiNlJZdSxlVEdLOFZJNVl9PkwzO1lVMWZAeCosVzg2eTw4Z1IlKCRyU3BlWzFmT18mTUBKISFZUSEmeU5TZG9yajU+YmkzOl1DNkN+byN3WDFvYj5DP0p4RCE1dUMmVTkoNndZQEdaTSwhd1IwLHs7Yzhje0JEKy4wYHlUVXM3diJGLG94RUUxSjc8JGpyPDFsfm5tU0tFT2xu'@;
put 'N2kjIXZbQ1ZFK3heKTJQdiUsLzJER3lRVSlwLEx3M1VCUEl7MkVzfDhINGteaEdDU002ZDVKaiR8fDxIUnx8QDI+cF4vPUd1MC5SYjVya20ucDVhNCpUU3FxQVRLWGksWWh+eylENHEoZTA6bWhjNlgsQXtLUltSL2BNP31uSHlIWkY1JDAzMTBkKFEpOjwsaU5BYSNpO14pRSY5I21mfnddI10s'@;
put 'OChAZSlZd09wfDFKaj9YfW47X1lZYXFVWUA1JDohTCp5MzklVV4rLnteUX5iUmIxUnJxZipxTmxPZEtvP2xnUmYoNyNyZVZJZVB9OFs/YiE7ZSF3dUM2VGAlTyhKTjdENldaelN5RTt6Kz5wLGRmYX0xZS8yUiE0aUdkcE9ocEU6Kz15OyQvKzJxd2p2S0dfbUsyMF9rIlEmMUlhVmZDe2NidTYh'@;
put 'JSRxRHsjXm81PU87X1g8Z3c/P095LGhZdjpQJEEpPUF6XnprVXcrOGRZZyI3MytkKkJyQF0jNTlFJjxJfTA1eHs/JENEUCJuZVpzIyt4bDlfeVlFMl9zWHt6L31IfXV1IVB0LlNWIzRFWkY9enArOWZONyMzTiwyeSxPPERffXU6UGo3PmBZeDQ7WCJZSDlhfjRrV0YrP2JZTyVhck8vSTt4Tnlo'@;
put 'PWJTNEtAVW1uc3FeeSxJKnc6ayZCNW5TTE1iS3YvPTtFRk8+WHxGbkAqYy4vbkBZRHIqeXZIfCFPeGZaWEwuNDgqYXFdXXMpNFdIMGg/JDM6fUF+fVRoOFNMOkdMcitRdlApJVt6Nz03JWhxUz5qSDZ1QFBMciEhWkQzelY4eUx7NH5Ra2RAUkxBejZXNn0hd2RgQzFrNTRYKy51eHx+KlJiXjFV'@;
put 'NyJfRTV9U3Q2dTRteD5HLHJOOlZhNnpIPlI4WHtNS2phODx8O0V7SiohKGEydTxSYX5danQuVyhBI0t+OmNSMUQoOX1UZnBgOnhdNF9RdUd8QHpzY3crNXsqNGk8UDVlOkhAJUs4Y298Lz9hZ1h7M1d3NmglaWIxISt3JX1HejVuKEVKPENRMVJtYlBhZCJHLGYlI2N8OHJbUFl1fER4Uy84YDkj'@;
put 'KnRMWH5oV1NTW1heeF8zNlNzQElDKz0lbGp8MzklUWE6M1QkN2tWMy8xaE1qT3AyeVpBPTslVHs9Izcie0ZHOShlbGdiUzhpRk1aKE8mQ2pqdithI3ZbbWBVXT9DWGBkZkVRan5KTH18X2MhJSNQLElJNiVpUFhtSTJpdzQsdnZKLk06TX0zOzdlUWFmYkE+KjxtYWhgW1smREBKKjo4KU12bE8v'@;
put 'bzQoYSFJKD09YlhuTCxZSn0raGBePCouIX5EaTg6T0okQ0REYkhkeEtdWDhLU0AkMCVeTH1MOUFDWlNRP1hoeV12Q2xwfi86NCZ6KCpYJXElMzxgVVN9RVowYixJZ0ZKaG5UVVd7UW5CXXM9NUsjdHJ3RVlUU29UNlUzb1EjUGdGaC92fjBteV1XPkguNlVdK3p3Y2smfHZndSlNNE92IzhxWVtx'@;
put 'cE43cDJ9d1JvP2ZgIW4qUWNEMHBXd1U2aURQYiFxQj9sKnwpP1ZdJHd5MlAvRkBxeWhuWzRgVmNsb1F5YDRjbDt4JGp6Ri9WMCxxIUVvP3Qja1s6RDgvIU4xO1hpWFlGXSRqbl40RS9QXnVJWWQ8aSssc3Rmdn02U095Z2Zid24kcW9wYUV7eC58Sn0lYVljbUhLRHtES2w6VG5Yck5bI3lIWksy'@;
put 'QDZeblMwZUY7aV0qS31HZ0hqWyZAZSlPMDtibnVkflNQcUBRUTJde1l6ckg/YWFJTUJkZ0NXI1Qje1tVWT5RKGtDKXsqTGUwanM6UX5abkp0VFskTDNxJDBBdzBjVWEiUFpZZUhebTUjMGFiIjBnKDo7KF0qKEc+T18qK0VzcnZdbzxUeUcyQ2laU3Z+YWk7blg6MHVdc2tgOWhrbmN1U1hoO1Bu'@;
put 'QTR2VSYmbmA4UjloYDFIRmBNQGwxVHcrc2xTYG08UCRoXUFvI3krYDZsWWxVQ1g/MlE3YFZgV0grPjg6SUpWb0ZddEJxTkdMYD5jRHFfJEpTQXx+cnRzYlJnQVB4Vz4kYTFJMCUoPjVvU0pZcGVUSUFtR25pU2hKdy5yfXI2STdEczJlPzdNMDxKcU12ODgpOHlsayluWmZMbXN1WyU1JV5HT195'@;
put 'en1zT31sNyNScy5wKEBbe3BjMXcvTkpdRG1KKlNoUjBAeTBEMihbcU1YcCt0OUVTbjk3P0JxJWwpNGFTcThEPXN+UGgzNyNqdGVDTlRQXT5CciVpKjRhUyZRLCRmI1VaNT01TGVCR2RsTHwwMl5kTjU8ZEgjfSklNnJ8JF1wPlE3TEdmbC9sODF6ZHQvSjBNZ3spOTYjcitwMXJdWGYqMkU3VSVO'@;
put 'LFVuS2xTQUNWQVNqWDp2fEpoKGQ3N2FdYDxTOFc9Tk1JN25aS3BCflJPaylPNEQsIWt5RjptVVkvODBIeXJgOiMkanw+ZWNUNkYhM3wlejgpNjlJb3tMIVh2NXNCMj52b10hOyNyclBAUkBRcSV+MmcjWks3X1YkKSpbI2xnfnU4Rm1IWDZhVVFAQlU2OV88Jkp6fVQ8WkZ4e0w6azksdnV2ZnxN'@;
put 'XldRLzFncE8jckxxL0FLOG9dI0U5MStTKjVGNGJ7XitObU5ydE9qM3VnRTlCYTV5aHIhOGpWbnxRZU9fUENjbWYvbDtMSEI+ZXxfJkt2UnVWJkVFMyZiZVluM0xCYlArMWgxfSs6fD83LjpsXVN6YDFRUmIzMyt+TEljTzRsTi49JF5yVVJMNHNbbHVZTW96SDImU2J7JXkoMjBOWXpEIXYrUT9I'@;
put 'Y3ZjIi9RMnBvMkFsK0JsKGdwdWEwYl4zbDEhcC9uUXEvXmsyVkJsSH4jIUVRZUh6emhWMT9wfWZXb2QwYT1rKHUwSl5UdE02V1cleEw4KiYzNWorcUFHN0IzdSs7dW9Yc2hSdXFNJmMyZUAqTE52V0kwPjpAWnpsbkpxclhtbGlQOnw1PiFmYSlIIzB6bV8rdTFgbzh2ciMlem1IcVtabHo/TjUw'@;
put 'JVV1OEghZUEoVWFbTSZnM0YrTUwxT2NscDVjLGxZNUNpMk9DJkRzTVM3Z0ZFaFFBLDUhUEBkZE9yPEc6OEg2ako9QihqQTk2I2cmVjVDfnpOUGR7bHwsXXdlflJiVndlZC5ffWhVS18kRFldcFErVH1hPmU1UCw7V2xTQ2tTdEBoNWo2bilLOV5xUXoxe15CSn1qUW56KWRxfXVAdVZpWjtAREk+'@;
put 'IVJ4YTBXIXBsNSsya2VpazJkW0xkJTlZUT9ka1MjZ3dVIjw1RCNtaT10fntMejFAK2t4LkpUcEN5THo8LkVSOiFFVF9ARHxkIV9BSExZPi8oMVdTI0ZtUmFSX2FpSCVZYyN+Rzw8fGh8aE1EMCMlJmBRQ2x+T0t1K3FuXmokbWg1cUBdfUkyRyUjTntQeChyT0c+MGMve0IiM1BGQm0rNHIiUyM0'@;
put 'Z1pLTyZ8WCFTSFkzJndRLERpO1c6VmFeRjMmYzYjJFVxZD8iJmZqNnp+cDtQal5kaFgyfCV0VUc8TTJ9TVg4PV54ayp7PFpTcV5TbjFnbiNtO2VyZmcuSS5zMT1gPVArbGQ9My8/PHZSSXpJSHgmWm99dV5XQHA7WyN2XThyMn1EPTJdYn55fHg2Vm9oc2o4Z0BFaX5BX2lyQ1NFWHM1XUQ7RkE2'@;
put 'Z1EkUVs3Z181aGY8ZjFmYEVuYm50dG05Z18/NWlWOSVffkxwV1cwYHhOSF5APF9wNGpjMWkqMEwlaHguPHJ+KEtbdTByZyxvcmM5SlQlfUhUfmhUZ0MlPUJPLEUvOnZXT1g3cVFkNVllKH43PGJvNHZhKG5ncksvI0duKS5BN0cwdypqUXtrMEIkc0xRdkI/by5McE5PIzFNXlA6Q0VlOXxkUE4y'@;
put 'RTIlMz03Rn03V2JMJE8xVzpZZ3F3IVZkY3RoOGhNbGpqZk4wUFZEMngpRTxjel00MUlbcVFSZXZ0OFsjaSJ1eUVQMkNvNXZ2YGtjS0BkQUluKUdFQyMyMUY7bVJHeWNAMnVQQnV1VkhiSXV1WUpVVVMyWDUyOEtCLjcqSlRpJHNuImwoeX5vdj5uUVZSMGtlSSlydjZUZSt1KmFhaU49bm1Xcng1'@;
put 'XT45MjhYckVCM2NPZmJZVVIxUkReWEJ+XTkvdiorI2VBIzdpRm5MeHNDSFlXelE8SytmQjFPSXRuMyY4QyRiNngiKnp1ST9KZCR8PFomPUxBd2R7KDFSVHR1VDVEM3oocDdbMjRTOyYjSVEsZHckJUxlemIsS35GQXU7UVhFfTxOPEo8PVs0R2VldXE7QTAqVjE7OkFSUGZ3b2lWS2UrImZfJDhd'@;
put 'STlrWnRNYFJKQHtiSUs3JHtBcX5JXyFrdnR6UXBiWj9bfUM+TmhyZD8rPmQpfjFFU2tnME5gQHdGejFhTylua1NgV2szLFF0XV9NaHp9IWtsUSR2OGBrcXdMKXJfZilCW100W2xtMVhoWmNaOCVwZEA2TXpEbWp2cigyUGF9SXg+Ny9ZTnZsSSJ+OzQwPkozISVRV0B3VVVTPEwiOF44dTBRPlEh'@;
put 'Y0ZuM1NVODF7aVtdIVs/Kzc1THY2I0JbXXd4ai9mYTZEVn1HUz08flIwKSJZYTlrTShsI2shfklfYDBiQD01Llp9PjpjV2YybU1BXismZX1DQCghQVpzekVDY2pUXTIiUW8rZnYoRSVme3A1O0xjfHdKOH5ITUw+Y2I5PUI5P1MyVWdOQW0vI0JxVjIlbUhkYEhBbSFRa0dSYHJIWjUxRyhGUFgh'@;
put 'RU9OQD4+TkQjaHI5L3NBcU19VDltT3Bje3J1eV9LPWhMdSVGYSgjRjk+WHlYL1YxZGYoSlZwQzd1NmpLdSVETDdefChDe1pxZ04mNVtrVjthW1FKYWo2Sj1yWFR6SHZmemUyOnRqXm1jUF1xNyYrXU5xJGQ6O0IkVzJhYXQ/Yk1YNmUpdysrTVk7NEYhS3RMO0JKVjlQWjJ0PDx8R0ZxJElwMXRD'@;
put 'cj9yZHByMVpBSGttRjQqJStPMzIsI2IhbEo8PSpSNGdofmlbeGw6aktdJiFeLEJEZylPMW9lZDFRYV92MnlPU18lMXJ6SGdQMFNjLzt2fThLR29gQmtCRCYiRFN7YFtJcyRUL11dUUtUPCZKUGpYb1RiZiwmfTZeejksXnRxZSpdZmJwJUciZ1t3clMqMUlreWteTnM4e3RrUndQb31VWnxeRGV2'@;
put 'VDBKPk8mRUA7Uy8yYGA7TiIlU3YzYS5oKENTKWMqdUU4YVJefjddfjMrMChqYlY4dmloVT1pNjgmNFtufWJTVncqYmAmXmd4RGAmSF0yNSZMW11sLjtANDtiO01+NE8/KlRWN1h7NXpGWCF4elFGbTsiQ3ZnaH4jPlheRGdsSng5YlB2e0BNQjs5VSM2I1Z5W2x4ZltNe3M+cUxqTUZNSCRpNXdd'@;
put 'VEtwbGR+IippNGI4T3toTTxIWnFeV1g2Lj1uUjt3MjF4RnpWazZXbEZCRk5hZytTZk9QQFh2JWY/dEl9TUk/Y0FdY09oLklzUSokVllvI1I9MEJsKmJoMkhmNl82N3MlfUxmLyEzZV8lJSl2I0NJIjNKYnZiXl9ndSMsMmVpM3VLRkgka2chVkBbZXdUaGQpZ0s6Xyg4V3gxZmhxcVVNLmluYWFh'@;
put 'XUZ9VDluRj9fJV5HWVR7TyJidX5xcElldWc+cGVnWEBPM2szbk95QWd4Y0ElPUUhcXssbU8wMj1sOE80ZkEqfHYuayIhYFlhYDZ3cVIlVTFQQl1vTEZpezhYYyg2M1E2VG9ScFo0bl5IKXMrK3xjTCxRIzNXNCR2OFg+akciM3g2czs5YzlaPSxFZV8oKm9xYDFsQXhaNTdDNiM5On1JNlQ4KVl9'@;
put 'W3xPVE10ZG9LUmlYflJaNHpYP1pYe2V0dExTTyR1NVAzQ29DL3hLQzVFRE1YIUVyXUlDa0A+MlhLcFdGekhzMm0yajROJlBEYDJSW24jU217PyYoZjBnLnVwVUpRNywjIz5laGg0d3QvP35SKXYzZUMoJnF+OyRabVdBaylpPngoWyUyKDdZMmlORzdnUzYrP3drRTN0KFhlSDtnRzcjM2w2czVX'@;
put 'dUozK09bYmQsKWx7SjVaNnRxI3U0SEheV3d3fVRJQl47bVo6XT4sdk8vLC5AWDJiKnBkNEk8ckBieDkxW2dCfDNpUT1iPGwkVW9FREkqakdwZXdZfDlbKC5nMH1HOX5sbzJCI2d7YT5EKl1NLz5+QXwhRExiN2wzXzVqMyRCQEtKVlNxa354Pjt6bzxWUGx9VytaXyxAaFJyODZObDBTYjJOYjE2'@;
put 'YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJO'@;
put 'YjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpPXTE2MDZiOk5sMFNiMmIlOWEmQkIvLzpzaH4mT2IxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmxCN2I6'@;
put 'Tmw2QH57dDApKmQyTmIxNkd5V2w8OiIzRjp3W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wq'@;
put 'YHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzMjcyN31We3JbfCpgdVtBLyIz'@;
put 'fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfDtyaj4iM31We3JHeUxXe3JjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDc3RiFbXkBeL25LTmV8WjYxLHQya34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3'@;
put 'c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+'@;
put 'ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoUWRFKyhoPDp0PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8SGMuan5+Mn1RfHJvL35RfFEvRF1tQjxDOUZmTCFXaHQmIiYiJiImIiYiJiJp'@;
put 'NkZzMDBveXRUemFnZiwocDA9IiNLYCImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJxdCYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImInF0JiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYi'@;
put 'JiImIiYiJiImIiYiJiJhZEUrXmg8OnNofSU3SH5uPjkoJn47aGhCbSM5cGxMWmElR05LW3VvMkM5RCM3OjEsVStlR3k8KEtpTl5xaVZVYkJzKlk8RUhdQFJGOXQleTdIZHJaRjl0THpweXJfJiJyX3lLPEVZMV1WNkM9KFZxWkY5dHJfeUtkQmA+S1Y2Qz0oVnFaRlVvKzU4QyJnfEtgcEkjZEJg'@;
put 'Pld4YD5LVjZDPSg+dj07KXIvMSxVWS41XzdDVnw3I2t1YUo+ODBWNU5We2ZII0NYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlTOkNXYWFVWioyYTY5UEg/VixMdSNLWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hF'@;
put 'dUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlI6S0NqZDpfe3ZocXI+OSgmfjtoaEJtIzlwbExaYSVHTktbdW9sRl9PIzdydkd5UilnUjF7R3VVVSRDcSpZPCsscW9sRl9DQ2p6X0IxJkNMS2h1VVh3RFdjW3RG'@;
put 'SHM0KkJMT3tXd0RXY1t0RkhzNGswVXtYZShWQT5VUWtqMFgwNzZHUy43NCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdj'@;
put 'U2FMS3AyYiVQfTc9LHM8XikoX3tFaXFyMmR8VVMuek8oU0YyLFUyNjZTTTc6MSxVbDlLS140b3V2IXlEPixqS2xmR3lwY1cpWTxhKlk8K0IsNnV5N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7T0RsQkxPNjQ1aWJOZDxIJDpWLGk1alY8TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdn'@;
put 'WTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPdG8qbFBbNF16b01+YSV+IjxeSilfe1I3XnBpMk1kcmxJUzF7UGJlbDJjNFIxey5nVlVUWj9DQ2pTSCMxYXI6IUtLNDVxdXYhM3d2IT1PUmJnR2JSPEJiNntNck8rWkxhe2N4elcwWzVGTnJPK1pMYXtj'@;
put 'eHooZDw6QlNqUEQ0dUtGT04rMWh5Mlg/cDBZKTJLWm03dUNwa3g4PSNqQiYoPzE/VWFNIX0wYVF8Oi5je2N4elcwWzVGTnJPK1pMYXtjeHpXMFs1Rk5yTytaTGF7Y3h6KGQiQHY7Yy5VO01bV316b19CYiVoQzg9KDQ3PXFsd2FAN2guWTwjU3M3K1pyK1k8U3BgQG9Rc0xHeU9kJmlOXlYscW9W'@;
put 'MTtGJUViNnF1diFrbGtsa2xCKzBqWTBDZHg/YTZRMGgmOTEuJVs1Nz1xeXJ7X11HTmpOYTxZOHJyWUVFaFAlQ0dOazEjMU1lfDVxMXswamk/MCtSVUs4RX1kJkduM15MTjNNR1JQK0dnRXpWaXkyV2lhYVYrVndbTyNHUShIVFEoclQrJmp6fSQ9RThaNiE8SHRyNiEwP1VhNl9WLFZ3SH0sM306'@;
put 'Yno5fUFjMGpNbS88aGh7bCM5flM9ZXUyX2xZLiRIUy5rN15wczRuQnpbLDxDN0ZOczdsVENqWzpmdkd5dWQlaU5eJkRdQEdXd1BFKyo3aFIxe1lEcG9FNHlvOHJENzc9cXl+Oj9tVlNxPiYmPFlvaDlAUFU2Xyl3NXUsQHgqQGRfJkNAeXwpWz9iTzdbWD9vcV1vJEdkOEglZjcuQzJJX3ttVC4h'@;
put 'YXwsRjFXcFI/XVh4aUxwWmQ8OzBkfEpDYHl8OERQb3FXbkIiWSt9cDZdKURLNEZmVnZ8Tm00ZTc7OSY0VWZjd2g/ZXp+ZDw9eHh+Vk96Z0NqZjxuZmFgeFAjWWQ6SSpafixyR3k6dmJqK31YQDVhKys+fjg4V3lSVDNGNHEzP0N5L0M3dXowJTl5b3d4KHlaUGY2M3EsZnkkQThqT30/VHs6Ok1k'@;
put 'Mj1VKzZfYmdHbCJkIntiVl5PVUxVYDc3YTgsPVtiOGFPO3wwMCQpRyMpS0cxX3EpejF8YnhEMFReO2ZiSWtIQHoyTCguUykoIk1OOT0jS1JedWJxI0VLMS8zTyZWJDdIQ01JPiZZUE5OOVo7MVEiRjBlJV5he0g4VmA6UT04dDkoKks0TyY/eT1nRW45NH4wYThoVnk5PFdvaXg3ZVIxe3N2R3lb'@;
put 'KWdSMXtIdVVVdkZxKlk8Oixxb0RMblp4NzlFTEs8OW4qWTx5SCwsT35GZkd5XmUoaU5eMUddQDBzYVJOfng3MjZWak5eSm9gQDpLXVdLS2h1QHd2IWtaIzFhciJDcG9eYkxLeCFkKlk8O1NgQFN5PExDamU7ITEsVXx0VVVGalt3diFPUEdmN0djMURLbWYpQV9GSitnZXMpSHZFamB3diFsYXgx'@;
put 'LFV4IytAezlhZmcsY3lHakVeYmFMS1cjIVNnP205S0tXI291diF7RFFoWk1TO351YEA7MyRQRSsvUExpTl5gPHpkN05RRFA8PiNoODEpOjg9Z1VQTGdzKWBIeSMuTV8ueDt9bzFJbjlGbDZsa01NYFpwbDheLn47aHZMYHR0XWx+Vy9QfklGPD4jI2Y1bEZmeSNxe3BrTV5dMS4lSVlWVUtFVUhD'@;
put 'alt5ZVIwcC9JV1VLRThIQ2pbeUtpTl4odGBAb1FmZkd5d1h8WChZKkxXKVk8JjUrZkBGIWpQK0d2VVV2RksxRVcpZyVtaisxaDApWjsxaEAvaE1AL1s4ZHA8LH5XUmouUXxJTjw7IW9ZSE5UOkZmPSE7SGg/MnohXTRSeThGVTN1Z3xMISRxbVppJmRwUkQsMEB5VVkrMF5HVjxYNnNMdEpsRDJp'@;
put 'WiJRdGxfSF1EPUArNnZYXiNhTmBkZ1NNR3taNj9TNklOPFtTKkZgSUVmZmpZUExnY2w2bGtNMjt3Z3g/bTkvXXc+eDtmajMhWW5jUEVZT1FCR0UxQnd3LEIqKmp1aW9KZyVQVm85ZVFgdS4sJWUhO2Q+ZmlYJCNISV8hX0Boej9oTVkxaHYhXVRWaz5oTWFNSSFMRVQmb1lpOEBsIntwKCNIXXNk'@;
put 'RS9+NklxOT85JitQeF9ZYnAlKyswanEybExnLkQjSmc7eCNnU0hSd3FXel11Z1B+V3FNTW93L1o7Y2pxVEkhNSsvfVM6WnpIbCtsMWlLb2BuSnc5dVU4MWlMPCxLdExSfXIxLChJJGlHN0s7SzlMYDxlPDshWUBkTS9MP1I0ISNFUzFyeFFFbEYlZTF6MyxlWFRSKUVVakN5cFpwaFFKXUZKbFt3'@;
put 'KVl9dUpoYk1VMXkjQlQ2R2BJYTFvSWRQL1oxSCV2TV5hfURLODMjZnBgWztNKihZc3s8TC4oKTBoTUdCIzAiQ2FWJTAsUUgyOVo/ZVkmT1N6NkxkZTZObVBuKE5jUiwyWz15Pncycyl1LG9AaClsTnAiUm1PZFI8T31QUHpaYHo4UDM5cFpvaj9Jd2UpOCYhfisrRGJ7dSpfKy9dbWYlekt6KSV5'@;
put 'OVd9S0BYYCVfdSxNWUx+LntifD9LKDl9PzFIeFMjWjJdfGxRK0FpfnlXYkwleHxfXj1ITVcoOT89Y1RnIkZlUCVaXjdASXNmJn11RCt4Si9MSShRPlB9OHE9K2EsVSpNc2YmLkJ3aGhNeWZ2fV1TRFNqUCF8czthLFE9P2dGLDlIeF97SnJ3VmlpOGV8VjlCakhRSyp4KyxWUmd2Yjh9XiRMXjMq'@;
put 'a18wcWFyYiZWMyVyTVBEK3owPT05QGcmJCtOYGohfl9UI01rIi5dYU1dXnh1ajpSRWZnJkIsTFcpbTA9WG8kTjpyYCE7VVhsZnMmclt6dXFDLD13OiFWYDVqSypTZlJ4V2Z4aHZ9MXBhOyleXzxBNGxxO2Q4L1Y1cFkrbjEqVl46JFZvbGFyZ21sST5xJXUsYFhxPHdeXTxUPCxaI2k3QD1hMyor'@;
put 'an1MU24xdGNiTSteX29mbVI2bTYwKD9halUsfCEpQGIhIiUxfU4/dipxaFtKNCpiLDkmNnF0UUU9ZF4hIVkzPGJzbCMhWE0zK0RwZlJraF1bKmp0UWtoUCtkeVMjIXhrVV42P2EiNXs9ZlZzLypHUj4/IWdVXSVPelQyPj13b0NQJnouUGVqKHEuSDl7fEAyP1dvaXg0PCIlTF4+RWVeNkA/IWl6'@;
put 'e2w+MmNUTiM0WkVfXz05IT9rRGBrU2wuT1FOblV3PD0jU3UzWyVkZjI2bCxfZC93cVRKNWd5QyZiZU8hXnpaaUBwPVtWOzc8XiFKOXk7VCM1K2k4P21ULj9OUShGVFJ3X1kzPDZwc3A4cFhzZSxvZmFuWWJFTT4zemVePSJpV145cn5ubVB3ciZ5WjllbGJuR2YheE86fFR1UXskNDg6M292WEMh'@;
put 'anU5cFhIJT5JX1ooQH1EOHBmcz9LMV1BXWkmaFZmcSF8WWV0Nzp4SThPJi4lLDg3JFQjRG9iVF8/VC5BPmUsRj02bjpsS31zJGZ8Lm41PFJVbW9gSXJ9IntfZisyNTw4Vj9WeGVUPCNaN3p5P2pPSkcxcnpaLml2OVVNa2hwWWZOMXw4KzF8VFJsa3U5O0gyajVtelFISVEoYz9gd0A9X1p5bXcq'@;
put 'cXQ+clVWfXAweigmKmptcFZecGZAXitNSn1XPTFOP1lfOzRmNixVWjJIMUd9allxZH0+OCpNZE5sa3opOTNQJjJFfGwzZmJuIUo5OzJUMCwhPlc5aXN8JCQrcnAkTmZAMT9wKURofiVFeVshdmt8aTcsaFR1cTVtTHNfWWU8Mn1xbWNAVixnfCZlaGB6PHFrcDwrJXwjWH57d1hQY35lfUwlaGlZ'@;
put 'XmJOLmtDYG41cFBVMWJPdlkzOFMqRXFPJnA3I3VAUEkld0c1TGhlcnhaeEhmend6KzMkZ19ZI15nYk1ic3BKY34wISFOXltfdSklWT8lOGBTY245JiYqZSh4ZyRiJX1GditqRGcqSk89IiU1fDEza3EpWnYsWW5fd1I9bz5+JT8lPj1lb2suO0oyNTRwOHI3VEQ5S2xyTnUzPEluMkR8dztdd1Uq'@;
put 'MjE9eDt4eUdQZE8lPX06NUIlezF+cDl9RiM5dHJ6cksrYmJweTMmITl9aygzM3dfNV47eEQmQVF7U21wUE88PTErJThSZUFLVX51fVh+QSZXIkpzUSUhSWdwVE1ROXxmcHxlLEA/YVBmMCkldCR6VHBwUE9XJV1FUFF+ZkRfdm1mbjcsamZBMU8leGdUbXZRK0JQZE9vciFXYG09R0s9K0hWNl9F'@;
put 'YCNKcUUpeD5yNHBtJDkkI0g1JDQkbCp7Xis/ZX0jcXdQQj5xJUV4fFk4JkkwPCEhSDhIVHh9X0IwcGs8PTo0RHlJMUMlMDlrYEdmfHtdJTlHdilJMV8qQ3FDUThALEB7XmcmUzxwNzd6OSRkTkJRbmZLOGQkPilGbDdhT2FgXmFfND5iMVc5cHN8SWFfRXpDUHVZflBoITl9ZU47bChRY0BIMS4l'@;
put 'diQ+SCE5UForUW81ZXxAbl5nRFlhUXghNCxkYmdtUmVSbktrUXpEVFAkV3NyQDowIixOKE9yLyZJMElRemFoYHJmamBPPEE+Yn42PGR8LkBFL2QsVzlGfUxKO2p3XjA1eW0sJVhtNFBKRyglSF9CbEhfO256KUs+NzN5MDE7WjlPZ0BwUGAsZDM2YyRPZTUkbVpFZ1J7dXMicjU/YFlXcjU/YmFb'@;
put 'K1E0MTZ7R2txN3IjczU/cyw8eihxQWBIUUJueWUyYkM+dSFBJTRxNUp8WVosNStlc3E5OmpZWlg9PEUiLF1pZXxUSi5kJjhQOyt7fjlmKio7M1RCdkhANEpoQGBZNztePVlAKnIpPTFUcnBYJm4hcX1RYHV5QmhHYlJDVyoxeWZ+T2VLazYsTzA0TmokbX4oP2VqUEBlfWd8NUt4eSZ4JngmeDRV'@;
put 'OXw0KSFxS35CUXF9M3lNenZHZCs2X1NMLnJeb2k/QCs8L31mWXFlXmRvOzh+X3MlS3o8LzxEfCRdSUZleVlgXUMubWBzJXcsVCg+enNmIVN9cEprYlpIUTtsT1pJOWRxa3pfW01lTCU3bG17cyVueVtScHZ8bzFdX2MoKUhNczk1M2wqIl8xP3xvSEk4NWpJR34mMGUxcmBeNUl8dytwa0RWfmck'@;
put 'aSVSNztOJG0xJW19M1U8RCVZViZyM2Y0TWZobVdYJVV9MUh5OVRyVHlgJnosalRdJU16KHFyPEBeekkvPEgmO0tHKGR9cio6enFmJDA/XWUxS2hteE8oQF9eL2gxS2gjWl9ZXltzbWssKzh5O1Q/c04iUGQmOHFJX1pQX1IsMkxeMT9zTmdOOV5kPikrWyFQZ3RMUGcsOUhRP193LHVTe2ZCI18r'@;
put 'NThfKzd7Pj0xcV07UkUuVmJnaDxOZTJZO31NIWEmLGFCeHBKSG4jczdtOEBAUkZPNy95QEB0Y095ZmNQLGV5ZmNQTCpZLCw4QUkvbiVtNFAyWV0kTShFSndtVUllZzxJYSQkUlklVml5bXteNl5QJXlmTmtPZ3oyRiQoKkYyRElwZiVSWSV9P2FeMHIzNkBIJlU2IXB7JClhXiNhay5QKFRQM2NL'@;
put 'OGsueTJyNkEyNE0xR2JNWVY7bCVRUFo/PXF5JSVsJCZlVlpWYmVzeClPel4uQEswPzhQWCUwbEBde0l9aCg/T2skTkhxO2xjQFBtYSxKb0VnQSZVTVBafD1aKTkhckcwZTgrTSErKThaW3ApP35Va0dhTk9aVkRPdjEpRUZlajEsZUtwQD1mOFJiNlJ5VW9mITwxTmREeVVvbntwTjQ9OFIuajNN'@;
put 'emcsVkArTzE4Ui5qVGciTkckKm0oejZYNHE8Tyh6O1U/WnxkYnkhYSYhIjk7SWB1V1ZiYHhnTHRNJSYpSSxQPTZlVysxKy9NZFBTZSJOJnI5UFB8SiRFNDVKQmFQP0AxQTBxZmlQPEA3Lnk8d1Y/ZVkmQF9kKVtWfiR4OHs6LDNdIVIwOUBGZk0yL3taUSZkTCUpfU4xXj0zYTZxYS5rOEJoNXxJ'@;
put 'VHdKV3pQXy87bWFyel82aWBre21gbz5aPHU5eChFWW4sdkIvR1BkQSZvQl0lLHN6c1BxNE5aTUhJQnFIOklQS1ROJjgmUmUmPEEmeGZuLEdRX2Rib2FqMWlBJUwyNHl0JF0vdmFLWyw1YG5oZWQrNWY5cU5vbDZMZENwN1BGSVJ5XWE+N1kkWFoidVE/ODh3UmU4QCswK1kjMCtMaytlbVF3ZT5p'@;
put 'WWdBJm88QW5DYCF9KDFdITolZCZlaCtKczN2LENfWD1aUEomaWIhc0EmbnksOyYreSl8LnUkV2BPZ0pfO3giSCZyXypSXzYwKSUqMlcmQGNEJlUlQnwmL1kka1lhbiNKMD8mUSs/QHg6IXdQQj5OLC9eS3FbSzxSNixCfHohWkBONmxSWXM1fG8sfiV2KSNRS3ZhLDJoXXAxVkk8TGZ+NCElPkh0'@;
put 'USM6ZCxwMHpZbFRjN2IsYz9mb0YxRD5JOWROVm5ARXBha316aEY9YiwrPV9aNztSbCJATShhP11aaFQvKEJ8UCYhSWBdMD5sNyl1O14iVEJJTUdlZzV8WDEuPlgxKiU7QCMyYUsiUEJXNG1NeDA+NjV7I2tZO2tsITJ7MUE0WiY4RT9UbTNfTEp9cE1eaF4sYUdTU0V7O0hfRXg6fn1TNG1KJGVq'@;
put 'YCs3UDMqbmhAX3B5b2YxbXV4Zm5FP0lgZHFWbSVtOCtGMTJqWCZaUnc7aDAsPU5ZNzs3cVJteTlVKjArWnd1OUV8RW1mSHtaNzs2XyRPZH1+e2E/RD0lfmVzZXhkJGx5WjF8czI5XiYzaEs5OmowflBobVlIaDMpOSpBTXQpbH43RzBpPmVfNjYqbUhwcUc6R182d1FeUUJmLHUqUSVsNzx3TyY5'@;
put 'e1pQNE5JUDxyQ0ApP14rYixeK1lhbWo6emI5YGM0N3EyQF9vRykvUE5gaW5QTCkhQFNrd2ZkVDdUI2VvTntJaSw5QDY4V3lUbVI2e1VJS3ZZST5bMGZtMW9kbzshNyFBSSs1RDljQFtlPzF2WjRPZ2poLHI3e2FoLDc7XzEuX3JOd3hjaEA7JTBaaTI5blBhLDd1WT1vI2FEYVAhako1bVApTi45'@;
put 'TF5HUTpyTzFLaC9AZXxqUHN4YVBnUlNGQXxrWSNLeEQ6WF1jazE1RDpbTkA6QEBeYUAkcERxd15ZVGUzd2FDXiw8cDg8eGBpZks8IUxGaztKOC5YJDRzK2xdeyhFYERkNzckKTpqZnJURntZZTxFeSppPiV1LDlsQyZWYGRLSj54VDdqJiglSHJNNXVBMUgrLiNFP11aZWZUe1EmNDhmLjNOKmEj'@;
put 'e052Rld5YG86aTYlT2IwTCk5JSk/eCQ5XVM4cEsjcDFoal57S2hNI3twN2NvTmtvIUM5cEgyL3M5LmtiXyRwYlhVeVZ9SCV7azVxbTdJKGlsKUpjSD1VNyxgM0MyOnp1ejBxZTt0VHwlRnpGSEJkQTphbyR7cHcoeXIjOnpMcDAlb05iWCViWSY2aF9mWSZYQyFqKDI4dWtLMGBKKmhaT1hUeVg2'@;
put 'c3ciJWZNKGVPJn17T3tdXjs2aClCYjFaNW1rUDMlUi5bL3Jad1J2KS87PTFJNCR1KnVuMy9bQCt2MEY9MTBNeixeQCt2MEVgYWpQKyM9elo5JShNal47ZE9RaX0ydW1LdytOIUNjPnYlNTpwdiMjMkRWKzxBLiRTN15lc2FqemBVMEFFLyshYXU6PTNMSjAsXmY/ZSpNN0w0dmE+PXlHQFFEbVpt'@;
put 'KV4lSCRaOTs8SCtTZ15lLGwkPHoxS1t0JEAvOWo2Uld6YHo8aVNiaVo1bS85dXE8VlJEPVUrSX5HbF4jclQ1eFBlOyxTT15VPGxMUUQ+JWdgNjx9NWBiJnYkTSYrd1I8eXIjSldvSlB3JTUiNXIsaF14WklKejw5JS5kLDBqJFlgJTUhTFZJWlc/bSxxbnpzJnZnPHIlYj9lNUBVMX0kVmA2ODBq'@;
put 'UHNMVz82OGwvOTFVeTw3JGEycEtOOUhQZ3A+cislSE1QbVIwWiRKPU9nMEBZZkM3ZFlyWWZOVlBLUGRZaV5wPEFwcEBYYXltSWRUekkkP1Y1dzNkbGZUeFtSeVZgZ29xZH0pZ29xUVBOKyhWIU5KNWRZeG0uclJXPzZDL0AhL2o2Umtwezg3ej9hNHFqc10uRF0lTDUrdFlqM1E7czpdVWlUe1Ar'@;
put 'PXs2VXIoVn1QTis/JjAwO2R6WTcsQWBWejpwZHc7ZGgsTHokOWYxQzojWjplT2ZxPnVIWE1hLE06KjtwaHxrfUdVXi8lKXgrOE05TklbIV49MUlfIV4/e3dNbzl9aDc0aiNZN0owbDJjVWVzYWtIfT9TOGRZXyVWZjRHXk5DWyRdTjspI1kwXVZBPmhsTzFuZkk5VSxnZn44WDZmcihhVWBLRXow'@;
put 'Ulc/NnNsOVFKbFVQLzp4VHlTXyV0QHAwfl58MWEuN1Z6Q2k9MDc8WTNWTiY6JTlANjVEUkE0YGJQRSxmNl5zOm1jX3x1eSFdPVVIKTp6fVo0YmQkLzt6T2IwSEBtXiFvPUtud0lKeWZpaH1WUyVBSVVgMzhtXipyLnI5czNtdz0mP0RxTVV5IUlobXBqUGxrZ3dSJnFNLjVfOlkmdlpwfGtyalAx'@;
put 'LGlUQCl2MHNmayQ4dlNWLD9waiFKJSEjSmt9UG5RRj1HemdSOz4mSHh4WH1TST5IZ2dqZCRIVEJZSCVVVmsuZXMxUVowPnJlcHd9SUA0e0NxWyFKPlk/cj4+V2FzVVZOOWRgNi9MXkVueSo1X0AhOFM7bGRxL201Z2NWTVFCPkJNaHFuczpyTVBeS3B2RS9PbTMpcDxOQDZAaCRVLnQ5cEZXRGJz'@;
put 'PFMheGVJZHopTUQ5QF5mYF49P1lqVGNQOXZPKFZKVmtGLjshUGtjQG8hL3sxaGw4YVRicV9WXWVbbmVeMDAxS1BWYnI4XyNqYkUidm1pO1godmFGZ1ZlcWNyOF9AIU92cikzS1EmJHFoYHtVfjg4N3gjUytWbC5RelU9YjlDbHEyKyZ6YiZaPFArV11GenowYHc9IS88ZHJrLGZ7KUt6JEE4Rno8'@;
put 'eiR4c3pNKGddfEBMXShxOXd3clM+OWlbMywxPU9mVlJ6eVIkZChxMHldbGpOeCgrYUpKKm9WSG8qPyp6Wil6bWZJOVk6dlpicjdxaW8hSkR4TWIzS1RgR0BvJFVeJXxSZm9jVmFLOHNvMFJrUl1uPlRFfCVWVipZaFtieGJyRFdwVj1WdmEsI2p2XmE8NjN1WkBLUyxhQFg8ZGdMakwxO0guMVtf'@;
put 'dDx7S351Tyg+VnVRNjBGXzhWU2tDUF8qUiYlWVUrTFFCaDFqZHEhfC4/TTY7JVpDTitSIXVRIzgpcjEkW2UoMDBUSn1EcWU4bjx7bEk8SF9FZ2MseXl9PTArRnp6MFomQHJCWWJncHxEcXR5c05GZXQseCRmfG9mI0guanYrSVhEJXdQJFZVPUdvMV97P2ZNSVAmQkRtO2w1e109Imh1JFhoT14o'@;
put 'eGdWVH15Mk1qYCtFekV4T144bWwkMmgjUztsUSVXPUJMZCQmQEQhanMyPVk5SiQ3OG5ILkZYTUhAMTBkYGJlMCEoZDF5TllRZTl8U0liTXhnaT9CYFpqcnkwOWd3QksoKUJANm4/bXJAMT8/bTJQbjBVMXkhLD8hfT4hdTNFb2U7fm0uNT16fWp4K19eS2pZaDUsWWY6PXRgJGpBVnx7WFRZJm1N'@;
put 'RS9WelomZWppP1ZeR25vMGE5SUxXdnteN1Y4RzVAWit3JTx6a3hlST5AbiFAPTVNWHMkX0ArckpkJEloPUQ1LH1wbS8ye3trSTh+Uiw8Wjg1KXowYVE4bF11W3dNZ2VhVUsoKVcxKyE3XWZxN3FjVEYjLko+QHMmVCVPZSk/RmYvbiI5QHs8RjRsaFBJclVUJjBKbUhXUSY3Z2ImLD87UlZyeSox'@;
put 'SXY9RHguWmA9MG1SZ1VmX1sqakhJQl9iUU0rM2dBRUZ5JXFZMV9qe154XmY8WnNPJjkzXVFIbEQmbCpWdyFuK3t2Wm8+cWt4VDJfV00wLGgxR2oyXkpfOF9AIXlRQSVrcHllMD1dWjkmJDl5dXhoLz40WHQoL3B3UGZzVmVWYFQ9RWc+aWcxclF4dURJfEk4LEFxIUpLOSZyeWxZZ35uVVR9JUEw'@;
put 'TjFiKSpTREluezptISx1JFtlcEArPzolI181an5wd1BgIS5wd1AwcEhJeDwwO30kZiZ6cHlwfG1bZTgsZndkby9RZDZvbXkyQ0ByKm1mZU5FPWokW08uOXsjVGZXfjIwNj1zemAhNFVFYDNoVW1yQFUoe2lndFFhVShgMWUsY1IjVlpQWSpHZCJONjMieDI9P30lalVhJSwpcTo5ISwwaE9lJXw3'@;
put 'R2FRRWxfLlQme2RaUXghYFlZaC9qazhta3ted21RfVpOSXJKa0JfUHJNaFd6a11BXSNxSEsjKXdSU2VSLngsKG0+MSJedytpOCMsMWgxQGs4YTEwOWZyYiZ1cWVEa15say8rRG4hJnYlPHpKSytqaE0zZ3U9OFEqbTY9eGhnMTMpJnhFfFFePkA3LE0xSWhZJkEwRnlQWW9xOCw3X1kmfXNCLiR8'@;
put 'c3hgVHB2RCtIaHVvNHBzOT5PZ05ZVmhgY3VoUmVqZD9aYU9zYTlyPCpRaXYkLGVgJlBIPFBZJCtLeixRO31bXjl1NzAoWUZfO1VUbE0lV3M2fn04Z1dAJUkwVjQzbWEjfGc3PE1OOS5KUFpTOV91fGE6Mj4xSHU5Ii8oPEg9L3BJMTcyRVQ+bmIhNGphMSNSV3o0SzlROll3fTk5USZuUztafTAu'@;
put 'ZDRtZz8pO31mNDh9NVEoYj8meEhQL1NPcyslK1BXX0BecHZIWXRUbXgycFY9JWpudyxtL0wiSHYpSHg1KyghKT1NIXtfI3s/eCN7U1FpOCZsQzlZc1dARUdleWVJUSY7VjhWQmt9VlheN09BcnxaKGA9TXxTRi45ens2QCNwU0VieHFBb0NzR2BBQGQ5IyFYMWZ3WDFDI31uWmVObjVhQ2BAKyt8'@;
put 'M2x3LDJvWF17JnFYfm04cHJoOi5kYCVSaVZhYm5SWm1GfC4wfjYycWg6dF9wamRQTUAod0xNdVkqN2hZQW97X2wjZipCOiFpVSw3VnRFVHh8Tlo9IiU4fW4zY2d9NmMlZTh3UDBRZD5mLCJnSGhQaFtAXj0hIXJFLzJuPDhfJWpZcj1dbnAmJT5nbzliP1luO1t4LFM9fF5ZNXhlLDhnSV9QWHN1'@;
put 'Sjl7NXxtJEw6e2FoVEMueDlzJCNIVjx3X3BqNHA8VmFReCE2Um5gT2hhblc8UGg/PT4mPyFibipQUSZgYXtJbWJVdy5eQmA1VEpZPmdGLDwyWVEwKDxkT1EmKUV4I0BXPSxhQnhmZjR1Q3hWYFZuZVBoajNobGpQPU0xPk84cH4lTHRtRD9nak5DRSwyMj5bcDEsYW5lc207TGg6JSR4Z2QuXUBT'@;
put 'NG18bUk5IzIiJX1ffjB5OUJqI3F+MCklfl54ZUs4UShhZ2VhU0BTSUgxNj11JHtfbyE+fW5wIkh8bWpQcipqZUo+RXFkUFNlb15OO2FRWENXYk5uK0o0alZuP210cUA7UkUoOG8kcnE7MlNnfV5fbUhoZCRlXT0hdVFBPnckIUo8MjIwLl5ZJXo+NDx9e0grcypHcnssZEApaTdUQHJzTmZzPHJ2'@;
put 'I1NQYm84cjU1MFk6YzQpVTFZbzIvXj1AKkFdN3d+LEYxfTUqTyttNGVde1FeaTAod1ssfDBVS0ZxVWlyOnIwaFZOVUtSSllRKzhRZ3k8Yl1vTUBQJUJ9Oz4vNGVAZy5wa1hGJC9daChaT2k1KS5CKlVUL2d6QXt3an1rJjUqL24/SHEjdFl2LHdBc0FJa3BSPXc9LmE1byptcXpmJXQmXzNKKnck'@;
put 'RW5mc0ZTPSxtNVp5PCgpdjliVUhUMnUyYkFHMTppMVslWHpnRipWeHxVZDVbY0hiWnpQRjBiZzN0VCFXbVVJUlQ2L1dXRzBQIzZIWWhUem5LY0A+TlZ6TTh4Jl5xMSxMI1syU04zY0cxUDIvVFFWUCU/JDUybWZMRCM4aXpwXXlmIzBVS3shW18kZSpoRXxtcGRiWXh6NT8pbV5ARDFfSyJNUFZR'@;
put 'IzxBPmNiVCpkfTJEb2hURyJeY31ZYWx4ZEdrbSsmKUx9O2g4X0VtLDd3KEs/WG56dksoLHZQVz0qOXdNNzQuTl92YiEsMUkzQkBtNUI4Vz5FLFhvMCFtR1pLMCtVfjhwYiQ0ZnUhWj51ZmNWXX4lI0c0TCxhSipbTmRaOU0/UF5PVzkjXy8vV1ZRQDRAQlBvdGhHPVtpNypoNjA9YE5DbHRQUS59'@;
put 'P20xaC85alVtX2QrcihgOSx2YmBvbGRzRkQjfmdxe34oIl9lS35XNWxXPEJ0KG8rPTFCIls1flpiOTQ4ZnwpWm1sRV1UJDgwL2hnLGFBYHVkODFDPzBQRjlMPlJ0UGZLK2ZIbykuRSFWS1hCVjduVXZNbiRRWip+Mj9TTWZgW2Vdfj1xTi5HTHF+bXpuNGFaYFVBdDE9R0w/fnJ9I1RJYy4oWD4v'@;
put 'S0F0VkQrfVh6XX5rcHN8LkJ+fXteaCs9fmV4VkxYZzskR0ooWmppcFZnfjIoU0UlQHc5a34odWZudE1LekdLO2hlP3R9cm13P1RzJlo8ITIwNlI+KH5CeTM6STklPSNJKENCSE5USTMrQFMkMFgkc3V7Jl9nY2E9eiowW00uJXk5YHclWS8zfVZSekRPdjgufixdPTI7fVd6cyhTdCMkNXx5aHVg'@;
put 'dShvUDR9cFh3P3ElOndkbjRsN0N9O1J5VHx9KiV+dmEpPmtAUFFsc2pJIkptflZ5cihJXlBRYihwODNRPHxedVpbJV1JbXBUInkxPTIrOV9Xfns0SU8iQTRiW0ZtTVFPazdkY1l3d0ZzV1hXY3FqT2RjV3F6REhVWW1OVmQvYEN1PjE7e096blJGSzwoeTdGL0JaKnhXN0Mmb3lkWSl3YndXKmZr'@;
put 'UiZ+Zzk8fG57ZXNJXTxzall4W3UwI2dbPiplYnxoNlRXQTFKJntAYGVUaFpgVEVpcyJQLG8mKmc5M3xeU11+USVGcVcwQEJVUy8vJCUyfW1wJnNgbX5+WztYNH1RTyVXY012YU43ZW0lZnwpMT1YMUJkME1XO0JCIi50Iis2fTtkM2gxVDtaLm1kI2ZxIkprTSRzP1t6eTxPLmNWfmhsb1dFMCR0'@;
put 'cl5vRnp8PSlxfit1Y19ISHowYGV7N0BiZyNSLnpzIUUufWkyNnMjeEtjXVpKNHpgQGRmbSs3O2AhdWh8YUIjfiFQYH55alojM0RFeENtaTleeUk1OFlhQExBbjVsUy9YKyQ8aXYofkY3K0V5KG5ZTFNlRkE0bmdZaTQhbT5RPy9qNXRrNVokL21pbFRzOm9yVHx2Pl8lK31zeCZgVVlQNE94ajV1'@;
put 'eGFralp4Yl45OV9uYCRlfCR3WUVnNVI7dklBKmtyK2tFPTBgaEBEfldTQDRXM2RAZkY4ZSkzNH56aDJSKntLOi9zVjBNLlp4WVRYZ34jYCNgX0dAYHIzVX5fMmNXXyVtVl8lc3ZKMl01WU1LQz0mYmRkR3g4SX5SQEhyWHRIaDdkcy9pUCRudV9HcilDcjp6fXtiIUpTaSpheWM8VjBpM2Q4WTZi'@;
put 'djdtekN1MHBMeiZUOjhXMG9Ca2l8ekYvKz1pX1BEQn5HclM0TXt4NVZGUUpOL2x4O2swSEJ5a18jNC45NE5LPyg2MEBpIldFMkwiJlszcUBNVnooQiJMRj9HS3JAazRpMSlucFs0fiJzKHpzW35wOXliRSpdZGxvPnUsIz0sWFhrYzZNT2hsb11WLno0eDEvTlU6MVQlQFA5USgrezA7I1JwOFhd'@;
put 'TWVdZEl5Q04saFkrKipGfUlvUio2XnhDeix4ZSw3I0c2O2spSGdSc2BnVTtoQ11sZ35CMzhoVnMqPSxua3YmJHdBaTBIbmsoMVpJTnp8UkAsWXcpV2pWMy4kMzFpeUVFMmBqbDFyYntXfVJHTXsvT2lURj1OWD0kdnFFKDFqS002WnR2R0V6RUFJWH1SbkJmW11eKE9UMmspNGRPK04wK20wSnkv'@;
put 'V3dJMERCKWZwKnxKflluaCJfZjBNWSVyP291Q1s2ZVFxTzNRTlN3aztMIkkkM11+dHg6VUo/NGp8Uk1LWTk0ZXZ4Pi5+STxeTEwqWXc1KlllUGQuQ1s7bnRfeyRkVlUjbihoSFc7Mj9DPnBCRE9qNUByXmpDMm9bc1NMLm1TRF9OU0wuRzV0ZytPUFM8PkVAT0tsZDo2U2FsMDYuWUglN1RnUWdu'@;
put 'VW09dVc9dVIsQDR5NGRMQlM6ZSNPQ0ZRb0JKO2huO293KyR+VEFCbkolbFQzYyM+b0h1P0oxNDJ0ekluSiVse3V0Z2FTUm95WGIwSVJwS3R6b0xHPyEpSVRjVWdUbW40TFBZTSlsVW8uWnRDcjRDWkJTS0dPay9aNCMwTHdvLjIuKj10QjZBeCplJTZbZS9DdHhHWkJVa2RbN2loZGhIamcxNDh0'@;
put 'Vl4yVysheD0zbnZ1bkU4RUN5WC83QFBbVTZuTU13YjMyUzdvTyV3K1BDbEwzO00lODQiNF90Ky5JcjAzLE82P0ZKR2JbQXtEZy5YQEhYU1VmLDREXiUlJHBVfUJGR0Nre3hxbkp1IWZfT1VrTmMsYkkpeypHSl0icHRLNl0idyFSXT4yKyRPL3hVKkJzQ3FifChNRCZXTXdwdC5AS1MlUlFhMmo+'@;
put 'OkFAMGRCeUFBPyJGMUFAamcyVz9NRE1jNmMkPF1VM0k/I0JYeUhFVVloUWI5bm5qIktMYHQ2aSVnRkhASnpDP05nJG9BWUMvYG5udVV8VXA+Wz9GRHZZK3orekwpeD1XVVd0KEJEeEVFQTZnJGN0eVdNLGYiM0kqYnI/Q3lXL3lubE5eVntaJF5VYzpXMzA7UVhRezZzK3sqLFd4Q11wMC5uZ2g0'@;
put 'QVtEdlZQeFNETTAyIkluJjo2ZVpAd145QUkkYygzRnY5PD1vQDJWdWd4S0QkNEJOO29TNy9UPy9GTTo2WnY5ZzxmX3xuYk50ZkUvTl9FYjQ3L305UGMieVVGSjkhbW9uTzA7SVMrVEMzNX00e3QjQmB9d0B6PX4+JnVVQzhLbntHRXo9YkBRIj1gUkl7VWo6MGJ7eXhHIkJCYDBVd2dqYyErI0N5'@;
put 'SX5WOFJZenAuLD5IQkhGTjFLJTI0JUcuVCxpe3tKb0Nbc113XWROK0Q5YCZnaExXaGZkRUBkI3dub29rUUcxWXphW3FVOnlnSnBjOjYiWThYPixeYWRqdU1PI2hram9TLHRZVVspdXRifFY4bz1UQkI3ZWtuYz88STVafU1GS0U/ZkJIRlZbbmJxL0VMbk9hMztJRVEpKX5NREs+VHwoQlV8KHRB'@;
put 'c21gcENgb2JlL3NuOkV3YW52MXhkI1o0eVhyKVRhZkhINyEuSFU0QjNDamZQMyNUZ3Q6QXtJazBHMFIvRitGeW89QWprPVUsLE9NVTBueEpARzcuUWNXWEtOe0R7VUhIWUByWl9KOFJ6d0xvTyJHQU9BfVVGJWJ0dGIjZF5TREZQb2V6bCJJJWo/Q0tUVW1vdjNlby9EYFAvPUkuXjpHMCNbdlcp'@;
put 'QihHSU5vV3UhZSVYa1czYXpjRjJUcUs5PjFORkcyYUdPdSs4dmQiSGtPZ2ZNUVI4JDw8OGZvOnhuTHUwQ0FlblFwUkZbPUp8PnFDLEEuZzg8TU95NGs/fmRhM1tkJjZHMz90d0NlaVBJJWdQcCUkUFhsQ0pFdGg0czo2YzJ7eD4yTXVLQTFQTV81WlRjP3l7SCJPRlBpV1lrN2twQEpafT0hcDZx'@;
put 'Z30yU2w6UkBfVzRDW2QoSy5eVy9pdHljeVVCX3FDPXZ9TWQjJGs4bi9oIWsrcHMzQF5zK2ZIdmpdPztQSUosJEd0U0RQO1pRPFRUdEV1eEdKMXMuVS9NdERCKmRWaFQzQFQ7IkQ0P010el1xTy9gNncoPkZPRSEyMVt6V1BBU3hNRl5UOURMI18yRSJpWS5YLlhiVVl3OTBoJE9PXW9SQGtDfjB9'@;
put 'PFtwL29tIn1KMyxdVHxWTzE7XnNuVnV3T01SLmtrKXdEcSVMKXR3QDYmayUuOW58cFosPnRfMH1yW3p2YkglQFBzUjh6O1B6LnFudVV8QSpUO1dXdk1GVX0kZ0dPPls0Q0NCfmc0O3MuPj5GWDBPMGE6YFlvN1VqRiM0SGJdR3hiKys8RDlBK2kkZ0clJlduTWFId284PG1uRSI0XUJKJSVjMlAy'@;
put 'Ty9KLDcrRDpxfSNlMmswVz8wQkdNRHZiWktPL2F0cE8vYFFAcnBDLkRTMjxZUWFjZDdrQEtPI0lkVS5ePUprRGJVOHh9TUZIdm4lVVpAWkI4eCpCO289Ti9UbCkrSlh+e1d+aDdgaT1PMy4+QUVJdFNEKGpYelI5ZDRsdH06OER0d0wvOVVnLmBFI2szNGp1d0NAc3pCLDYoW1s2QDYoWzM0MzNx'@;
put 'IiVESVd+PWIjYy89WzAoJUEyTUJTMDxRU2I0R3U1RE9FI2RoI1ZvYnVXd3FZb1pPTGRbe3tuVVtUZEhjSyp+Vio2YFBvQjBkS3pULyovQHdnWkBpMDd3RjYmJiJub0MwQ08kbiZqOmk9QkRhQkE0fU0lTiUkZ2I3cGF1SDdoKyhDQyldVE8kfTRMUnRkUlokT1ZpMChUXUZhRkhWY2lrdWtiNk9K'@;
put 'TG9bQG1Ac1Vde2M5Oj4yQWlKK1kqTkpvcEx8QTkwZUc8VXwwakEhNnc2N2VLb1UicDJbZXNHcFZGVSh5cXpPOipacGZ7T0R5VG9XWFVKc1VNeT5vMHpHM0NEImdRdnNWd2clW2hCSUg1QiFlOm96em1uN1t6WE83NzRFMHklaD86dSlkcUAmQD1GMDwjTzxvdyw1RUxOczBiXmtVNjw3T3hTYCM8'@;
put 'UCRUYzMoXXlnWz5GWH5QXSJEdVtQYUhTXWFdKCRgV0dEWk05Vk4xIllkP3RGLzxSSUd9MGEvbzRiTVhHQnlZRXMkZzI6V0BhTWdaLE87LFRybCVJS1klSWxJN1AzeChPQkxESkZaS1g3b0BqWC9LTVh4PWtAX011NUs1VElbUlFRVEBEQnJFcn5SUVsyODVVMWhoSjFrbkU/R3lzQElZaitJdj5n'@;
put 'VkIlJEFVWmtkL2Z8W1F3YDJTQ0NiU1VjIldxdDNWSWtSMUZKPUozKDVBSEo0Lnk6WS8zL30sNVF9dyVOKjZ6V0BCREdNd3xyemQ8VFZYZ3ZCdmh0VktDdStPTW9CW1BWNDIhZlRCKk5MT1VPfVtiQixDfmdDSytbRUF7ZGNXKUkiNWFRNWc4ZGM0dCwrQklXfmRefHMlPSg4N2RrTzNwQDZDXVBp'@;
put 'VG1nNG5hfTpJN0cxd0dIS1EyYXAvb1lOWUo2UilXRnc+ZVJQdSVHb0gqUElrL2psMG4lbG5nKTYqdEU/Q3hWLDdNNz9bcFspSTE/SiRyWUVRY0U+RWspRCxPL1F3ZiVtbmtYOkJNTFRUQGtSY0ksUnd9Q1dhe3t1Q09jPHk8MXt5TjFPTytrby9FVXQwfVI4UkxMJGdGJUJ0fUN5bWpkJWdgPk1B'@;
put 'YUphbTRFd2F8eUIycTJhOkhiXXpoayguRVdAa1I5ZC9ZJVgpIUYjUioxYzh8eFQveS95L0N0X2E8UkYrTU1zan1aS09sY2BONjQ+dGV3SE0yYSgoJG46RWJHbEk6ITJvXzB3ZylbMShXRlRGZFBgcUlLOD1jQCZBa0RYSCVOLk5kb11AWDV8NHRYLENdSj9mfDckZ0MzJFhHVi5wMV5OPSRYTVNl'@;
put 'I2U0ezR4M3FvMV5AVVVROF9fV3RgITo2OmhWW2hrODwwOygydV90dU0xa2wrO081S3hpSXhFeTo+MEM2SjtEbCRLbyZMQ1BZemVHUG9Cdnh4YW1Wa3ArM3V5ZW5iU29+QHtBQkVLOUQzaktmSGtnbCtndiw/ZFsjTUhaLmRDUEpRPGxWSylbOVgkcWc4bFUxbk1ZeSo/XnA6ezJaWGxHWkJGS2lv'@;
put 'YTp8YWNXUUlvJUBNcCN2bnE/JSwpLHxXM15LU2o9eVVVdHREUUY6XVVrZjNvTGJTfFFJMnk6cW51b3x4dk4rNl56VUA2dS92NkViMjlESGIvbW9uNXQpQz5BO2x4Z2o0Ikw2SDN3N28haypUVXBfTzZIXyNjVU83d0AiQXFSIkhnfTlCYW19TSRUNSs0RChWe1orL3ZAQy4jQ3JyO2xFMzxbQnZR'@;
put 'eU9nSlFqOWMvdG9dLmszVjpeOi52P3QoYkcrSFUmeW4wcTIsbkE4dk59TSZObitEXVREcUhkJS82UC8hQlMrakNOVHJ+ZzgsL2krK1oqRyhYamddNngoMng5ckc8Zkw6e3Y+WURHa3luUm90LEZ9W1BBYDVgcy5RP3hwYip3THlmaC49bUFCKzY1blA+LDNebiZeImJnMy4lenFEdEBaUD1Wa0Yz'@;
put 'TFg2bXBUOi5LVXZAPElXYWkpR0pzLjtibjNPdSh3XmdoZGlkem5eYitiVyVqcW5Fa29We0t7Z0hVbHMueG5PLlhXQDRRZ2ZIWkk0N0h3NFpOeEcyalRjJXJxfF8+bzBDX1l1Mkh3bmNaKj98cnpPM252JjIwPSYpJmBqRDMjNT93NlZHOUpAJHJxcytATEAxUWFLMWskQyVxLzZbK29rXVciQSVP'@;
put 'JGNVayQhbnMrOEhwSzVeNC5KJWIrSFNtfUB6ZmskLkZ0PF1MRF9wZCVaW142KVQiMyQzImJpdGl6U1RoWD1FciQmYnBVLylaQXl2c0BbR1sydG9YRjpNYCpTUVVRXmp2WHo7UlFzLkolSXZIOGE4KGBsViUkdm4pK2BNMW1FdjNeN14xRkpobXV9RW1HWEo2ayVgJVhRQndfMSkrRGA3Yzg6YGhi'@;
put 'MnhAXjlFcnI/XiF4a2RdaXJyJTNtJTdrKkZQQihWQjAuSiw/bFY3b2hMJUJWa34yaSJ2ZGVwdm8uSmoobC5RbixgWi98VE1SeE0mZn1Ze1U7YC82cHJoRzN0IVlWKSQ3a2QzVTxCbG49NEslSFUhRXBSdHxuM2tkLzZHa092M1F6YCE6eWJkJWQuLlQiS0J5SXJZemA6LF4yezYrK1tPKUJwTnUk'@;
put 'eCwuJm5xP1BCQkNRZ0YlXSh0QS5TMWJoJGk2JUJrSi82Yzg2VnQzbSVNJXo8MD1AW1lDQTNaR0VJOnFkciRDQDM0eH1yLCp4eEdKTlNwdjpvRjp4RX1pOXROeXw8JjYsX1RTUDtkeF1rPT1UUy82Lypfbk4iIVklOnBaQGs5PUBbPHVveWZkRTVlSEtAOVg5TyM2P14uXlFvPnouSntXJTpYY0NY'@;
put 'PUBLMm5rPEBnMGlrLkFhW00zVUpfMiE9bUE7VUlReD1HP2A/SkojNjFibl1aL2okby5HWEMzOlRFWz46VFN7e3R0UVhZWzpNMlReP2k+XXtEWjJ0YGJSbmM4NmBVbz56LkpwUihWKCYuXlFvbXovMkJHaD13VyVAPjojT2lXVXB6W00zM3c2WyYzO3FsVDEvUGFSU2l5Q1VmM3ZvPFdUdjYhVERr'@;
put 'RFhpcGRVLEZPYHMzfDdNP1Feflp9RiEhVD9+T2BFaE0vXX5UfSNBP1Fkfipddnd+fi59ZTsrZSo+LH5ae3BdaDZzVyx+UHtUKS9DQSI8fnp9RzdScXx+RH5aOjN9YH54fCVLWDQkfnh9ZkE1eSR+RXAifiJfNVMic2p+KSpkK19zcnxSNkF0Pn5dX3FQKGgieGZaSG9BPlc+JWRlfjI0Mkghb2lj'@;
put 'Zi8kKDYpXz1GejxvPG8uNHs8VTA8b3lXYj9SJkdjT2NwWzVDP2BqRUEiRX5aJF0mYmkxK2djcGtuenk2IjEuYklPZHZWRTg1dFc+fjpffntCXUIiNn4kWk89O01rSFdSZXFpV343KVpjWCpBWXYrXnB3OkMhfUpAVSRyT1BPMFMhX309NHVKYm12Unl0VzJ8ODV0Vy40PGh5PylofH5LYkEiaXNH'@;
put 'NmBzXSQ6cy5UfnM6c3JlX3NpV2g0X3M1fmFmQiJJY3trUGFrM0hINThlcXp8Y2BlLzh9JXltYkt9YVBmZ0YvRzdGL0pHZE4xRUpvOXJSTDMiN3pidiJTSWgqZkF0U0RjMjJoQUllJHFwcztmcTl4Z00kV1Z7azhSelEoWj5HJWZ2P1N9OCg6ISFCOjpmWV1eOG9VYnErYnpwYlIpZzo/V19MOzRn'@;
put 'ezw2OU1lIzM7Zls2ZkBMXTczPXp+PSZ3T2dnKmFedysoPWBUdXl6aGpUJmQ9PSpRcGoyXiIkNXNVKGR9SmZbTypAJlB1ZnBKTHgpWWZwOFl8QllLNW1hLGE/cWtCfDpfeyNHJCFfSX5AXUxRYEBRXj19fWFiNnBIeShYZyE4UFAvK3dxUmZjX0BzTytJW0dWd3xUSztjfiV2UElWci9dNFY2YFFJ'@;
put 'XWg5TSZjbVsmY0ZBXT96Tl5QVDksKF1nMnxXYjx8aUwxazNtUTpYNHBMZTNLYno1dmwxYj54IVk6T1VNV0QlVyZnWlVsQChqMVssU187MUVgVVNeW31EODdpZSZHOUtEcVFJKH1dVXZmLmlNe3pfdmZ4cTVpTkBTMWZlSiNCYj42cTpePXI+dC8jP0NOXlVHX2VvOUs9PSNxV0Z2S09eUFRfNk42'@;
put 'ZEBsd25nQGwvdyNpcTk7ZFJNWVdBemN4alVFI24/dSFCckkleyQjczVLan52ZE0rRG9ULkkrJXFfQDR2Wyw+LFVGOTlTYlFmTVdIVlpmJCtVRnVON1ZLQHQ8VCRiZGgyXyYjanlmNCF7OXpIWmdBVzRtTSh3ITFfSDVnJmQ9VFROOyxmLHApJTx0dmdNcSxmYyZMYldOcj5ROlBkTzF3S2gyTiUp'@;
put 'LyV6S2xvTkY9ZWBCKCVHITNhMGpPfT9Cc1o2diQpJDolWV8wTVl5TiRTSllzPTtsKl4hYzxwd2BZNnphM1tSQzFeU2xNelU9Yn4rd2J4JFkmSStrR0xiMD5JXSk9OD58K3diMj4lUDJiIi8hL1NNIzolIVpebHpdU3gsPyVpYnche1V8MWwxfWdNIWtbckxZfVp6aWY4SHx8ZlUiPWtdOnAvZkd3'@;
put 'YHpwUEAlUT02YU5yLzZGemExUGdCVl9tI1pwSn09XiZTOikhYyZRRTVtQHI3OlIhZ1JbcG9qdy86PC87TSEmUU82PF0jb3F9O3hUWXg3RlZxPnwrZVIhPyk9azJtZCoxPmVvSTE8Mz4jTzxHMzFgejxHNjlrW1E8eVZvaHBec0BKW3FAM1ZkJDozOnJ3IUVJMlZFfntNL2hpLHZ+SV1zbC5RVm4q'@;
put 'W2kyPW5maH5pRF97Iy48TXVjNXMsQ2JRKW5VUm5AYHQrcGtYbEwlUT02cGo8Lm18JWw9XXs/XWQ6JGBUXXdWI2YodHA+UXxrZDAlTyVNXngsLyN1eU9nJUx6KV49dyprN3JKZCREVjJjQXxuVVZ6XTRfZFdvVSY9OjJSLjFhdUddb1NyKTd2Pmt+bWFoWGckVTJFNFZgXVBaSVJvakNmLFN6MDNx'@;
put 'X1siT3RAMz02UUgmSz87aTNieFJmT3owKSpdXml+Y1d3QExMKnJPTEg1e2w1Yi9vW2IxXVYyRyZsT01lZXMrOTFCdl9wbUcmeTkval49aFBaYmxXSW1lVkYjWi5aVk9fMVplekYxN01LX2hTcXtpZThhLC5SYmFyZ10vX01FZmwiZCZxcXtpZyYuc2FGYC84QHMvMTBnWTY4amRpOERVNilTdk9i'@;
put 'USpLeFByZzVAe14xNiRTWjBzYTYzaHM3OTozRmVbZyh6bV1qa1dOPHBdPGJhanNPKyhbckhwe10vcDg2QlFoMUdIVkZdUyZjbVZBazdoO2tFRVQpZyVtb1ROX0hqSj5YOnBOTzFIPl09ZGIiL0w6YmRoJmM2TShgdz06JUo4YUhnQjs8eTgzfE81JDVOXSpBYDskWFQ3NltsfCVsKi9kWj9PMXRI'@;
put 'JkRgTW4pamt8NkN+MDxqa3xLYVYhWzhJWXkje2pOemBZb1IuImc6WE83TShoYlJwZFBNQEQxUWI4X0FSIXxZQCIlQTh7ZDA3LzYyYVs8YmFPZEIlfk5CLiNxImRwR0kmLzg1QlFoT3IyXzZedkgrUWBJJkY1VjlreE11KVN9QDhIcTZVQWFyM3M7Oy56OV1WY3xXRFMjTXFOcjJfY1hhPEouJilz'@;
put 'dHdlaHNyMFJrS3xFOiFFYjoibzhAP1J3fSw8Q2wwPWZgS1EhJUxhWUR5MUd7Mz1hITBQOmZ4PjFJRWdjYUZncyo7ZC87XiE+QF9nOnIhTF88PnAsZigvPVVwKjVELjt9b1VQKVlwcD00UXEjITBGeS9wentrXk1+XnwxZUs5ZDJiV2xwb3Z2cXhjKDZ6NXNZdzBHQEhpMVBMSDVONk5ZfGtZTkRW'@;
put 'T288Tkw6QiglR15PL1FGKDp6V2ZBZV1lcU4kUnkkIk9RaXI6bWwvelBkUWlyOlp7QGxqTklXQi9PfX5WLi8zXTFOIXFnKU1gXTsxcDVsaiNucV9AM0NQIWM2NUBYTmhHZF8kdVgydz5dWiExRyYsaWYqMCp5IVddWEleekxyUWF0XWZvQzlRK1JkVntYNSRQaCxJK1ZsWWZJaEwkWV9JQF8/W2RJ'@;
put 'OGtbZGJYJUdFNy94MFtnQjVpYFR6U11oOFVkaHM9fV4lNFUzNmRuTisqUEh9T2dsS3pzZGV1bylWbXYsOkAmdlJTLFVeTnw1YyxzZzFOb3csXzZAI0RJYjYuNX06MytVTXJRcT0+KzRnKjohcX0rL00lUU82Ukg4JjwrK0BMUiYuUzB1OSVqN2F7a1UmeCk4OWl7OlhNcSFxdyFYZFkmNzohcXBq'@;
put 'WjFlbGZWXzdATihAM089YkNiSyNaeUpfMFBkMjI5VFYqU1FEYlFJPlNne3k2PSVSLmViT3xpOT4lQEI4b2owYUlzWks7c3pPUGR1cVdkS2ZUOlA9cG0rWiwoPilrZkk1YFE3alZ3OHU9bGojQFNieltuSG1RaCVBaEd8SS47R2p1ckBmNXp6IzklRXhEbyE/O2tafU5eWyxDO1ZiIi8ocTZSXT1h'@;
put 'OWxyQ01rbUc5Oyt4ITYwQ3BTXkJsQiR2Z3R7P1BKUlg9eTBNKGhzYHtSayklUiExMUw9XVNXbyIlUG1ydWtZInByRXhVMlFUeCFdXiVueVJxNFo0ZUY9cGs8PUV6cyVCKUU+KWteQzY4Yj1DeC9wYCF4IUJ8WT1IJmZxb1Q2PF1VQ0VhRHxJSVZ3M0M+Vl54LHchR2o0OG5kWCN+azFtZ195PHMh'@;
put 'WD1IWmFWJG56ey4/S2l2KWhdI3FANyZ8bSk2Z3Q8JX5qPkcpQmIqO35NR1A+X3I9ZihTempNOmZwZiFLKDlVLjl2dDt2YT5JczJ3OGRARSNdWUxwPTw3M3ljNStZaHkzYVZoX002VHJPcVBgQHV9NiZKSzhvalMyKnphVklQcXBhOzh3MD1TZzxqOElxQmghJHBxS2RDXXpGXiRPKzxza3s/O3Am'@;
put 'QWV2JVVHVl5lPXpmV00lUT0/S3txXyk6bVpzc2VLOGsoViZQJHFNcjZrKFJHOzNscTtkSUo7by9iQ155Yng6YzJOazJiOV5XbV8renpqJHxNSDUsLHt3dmtBYSFwYSx2MHowUGs6enpVXiVXbH44QCNWXnwwfnJEenY6QGF+aztObzsjJVIuIiFgTUxNe0koOH1Ac2VeTnJoUigkL1R2ZHdSQyI1'@;
put 'fE1neV92Z3NIQCw1PTw8empoZCQ6elIhSzhRKCMqR29BN1EoJTcjTm1rTW9kZTxTbEQ5UWVxYHA/T2w0NjBZJnlsYm59LHFnSEswNlBpZnF4bTs6TW87OHF4JF8pbUcrLDtpaHR2aGIiLyFqWm5HKFU9UV1+UDNjRHguY2MlZ21Yc3FOMnZrMUpraWBXTTk6RF94IV0mb1dzOk59PG0jRTpeJTt8'@;
put 'YkoyM21aNnpNZER8Tio0KSlBbENoLlssMXRoIlpSdSFsVHZXckBtak5DLj1lXyZXdX5aWytMRVA8OjNSIzIwNjAkPztlP1JZIUFsLHU7ZCpyeGcyOX1MVDJeJkxvS0p9cFB5aFZIaU15aFZaPDpTUDw+P29tWm4qWCkyWUYmMVdgaDhFL3ojXm9udzxVKG0scVlGWkA2YzUrd349XjMlI1JTZVkm'@;
put 'TnFEOkI3OmRZOHkhKzV2PUF5ajlUPVM8eDdKX20yeVZkITYvTjFiZVglaGZDfmloUn0lT2ksZyhwR3E4eTNkcTdxYTs9dGk/MFo+MUw6eSR4IzxmR2N1ejBLKFZZUEQ+dGJPX1BUQnZZPXtXe2dzdkdWQlZnYU9xL2ZfNlg2c0x0SnR8ZXNoRSg9JDhyeiIlbyxiZ1lGTVciREs7MjBZP1soQytl'@;
put 'KEVAKmpmcExZa2JrUWghLl5VMTQ4Qj5dYn42eEcxdUpfXmZ4YnZRPWJNWkxlX1pKW1RxbE9OPiw7QXxmJlFKOVEkMmFLM1lkJnNOSDRlTl5CazEwPWwyIiVtdzohcXhbUlIubUtqbV1lYF4mbEp6dyxseV9WcH1kN31uTytfNkpfXmY4MzxHZlZ6L0o1Ul5GTHU5PFNscVpkXVpJJT5CL105Jksk'@;
put 'OS87clokSTRyTkZlTzwkK1gxS2gsWmFfSChbbkcmaSZoVndxN15KRnIvPnBkX0VrVF5CdmVWYXpVLl9eZFAkMjw7R29sSVlWd3FrNVRkQz4rMHkzWGR2UyExam91SyEzcCxDOzwhW0lRJkQyTlBPKHZRPWIrfWg7NFU0bUNbX3VBblpucEAiNVsscTsuSjJnbzg6eDEwMWgjcWU7YHRbJX5qLCVY'@;
put 'MU0sV281OGZ1PGIwbD9vXV58NTJ9UGhoaTArcWg9aWwkWD1tTW9KKWpJPyRqNTp0bDF8fGxabVZvZURpOyFxIyVdYHpNYXpoPGpSUGc/ZXJNRTFJYnxAZ3wsaWRUZE4wTCwucDhFamNSZm9HVmd7aXl3cXM6fns1bS85SUsmfEReUy5xTSEldSw8d1tnNix5PHMhREkrcFRtMk5qZUBaWXk9IXFU'@;
put 'Y0BjS25ZZHk1S140VjZrKD4sLHgvYldQTyh7MStAcWhfPCtsSWsxR2BvTXEocSttejJoKD4sYDo1UGxeeHBKYX57N3wzYTNxckdwUHE+fE89Ynk+YEApRDl6ZVJGZUVNS3hEb0lSeFEyUT1iP29edihwTXloVmpPQnZKXyFTSChtLFttfFs9anI6dW9yKTtkOV5PP35NRVJLWi93YCZFcVZucW1v'@;
put 'OEducz5AKy9VWihnez9tLE1lODIldFV7WXskRXkkcipATDFZWnhmMCooWU1IZDI7MFtBeSRwPkw+UVBSO01xRHFkcSYlMFRXMig1LzBwLD15WEkjKWAmN1JgQEw+UiFyXk47QXhobG9ta1A3QDQ+TD4uZUk5JF1NKywufFBaYis/eUlIITI+NGVvMFIhPXpiaGhlTWdoI3xeW25BSGk4QSYpL0hu'@;
put 'OSMjSF8/TXgxJGwxJnB4ZWM7MCohakk5NVB8QDJKNGx0cks7Sk1xOWVdQV0yQDUsRGclen1wZnI2bCxkOUAsaWFuRUkvZmBnOEBqUl1lMHBNKCEqb2YvUWZfOF07a0EycmAoIyh9RzFoYjAqdUtqezVhWylKY0g0fVB8MC8pZnloVmYqN14kfVpEc3BIcUFGRl82YXsoI0BUK3FrO2cjNDxqZCRh'@;
put 'Okg6VTEhX1VTZEAvbjA7YEdOcTN6eTN+cDRwSElnPz9ZW3AzPjJwSygkIXRUWiR8I0txTWhzPT1rUUVpO2BpLmlAS0d8Qn5KOzRpdTlCQChlUj5me1ElUCZGYiw4WSRWYGNLZSguc0c+YjlrXTZPR1gpWnMsJnhJZ3whIWosaU42UmZpdnxQSStiKVp7Qk9ObE1ze1p8QEgmI0x1WVoobG9fKk16'@;
put 'YjE6I306cHYpeiRqenNaS3okTnlyOkNuODN0O0NuXmkyYipWek8vaG0/NjhDZkxwTzZDKDVHWWo4QElLRlM0TkVqTHBFKEBSZ2VSe1dmXz1vPGVgOlghLH5QPWE9O3JlPz1OYHplZmYqMmkxXzgybHEwT2h2Uz5uKDhuXjBtWjcob2t5OXg2IVQyOnJ1bHxbRT5hMTFmL2pwcihTUDxnfFh5Lzoq'@;
put 'O1BwQzlQWnVOTns/eWlhNW17XlN7cVQ9Ym5zMmx3TzJ6RjRrYiYpK2JuYHF4WyV3Y0phVyNkJCQwTm81JHIzeGVlO1hdRGxoUEJbMj9AbF82RjZONnt6MEssbVFyMXBQNWlgJFlZcU1oWV19WjhuemVQJSldOUA/Uk1zdE9POlo5WT8jcSZSRFBrKkR8K3B0S14qLDk5S0RxVGckVWheTjs7XmJ2'@;
put 'c0owaiNZZmQkYkJhYGEmdlhkdSwvKzZ7Mll9ez46N1E1TnVOKjRaSCRIKmJ+UEhWT1VXc3Q2LjxrZGwhQCtWd0xkRjlfXX07SGs4XStJUTBGOj9mT285UW1kZDJLK0AqTVV8Nj5Yan0wJFpib2pbJmZsMi9bJipeNSNuMC84X108OzdRL05NcChrWnsjNXxoRClIWEZ1aVU8O14uQ2w4Y0FUSGVD'@;
put 'WFZ7QzIoYCQ3UC5+aDJic0Rsd2IpKSZSM0pqeUB7TTAjUEZSLHlWTjFZKU8sZG5lJmRsPWtPel0mWDooUyM4czpPYUQyfUdtWVAlZDpAXyszd0svay9NZTZhMHZeNjsjIzU9Pml7eikqLGV6T3ZSK3BSNUU7N1F0aDgxX11JfFVkNSZSZDgjLmt4XmdZdGE/bT19I2Q3Nz9iJDd4JnpRblMqam1k'@;
put 'VnsoakImYVJQZTd3Wkh2fCNkQzJjQG9UQSxpI2FWMi8halswSjhpLFhaMW1KIWdfSzZYV0hqcmcudFIydV8veypsWVQ8Zl1vYmNNXjFWSjZCYigqZ3JvXU5fKD01X1BgPX1rN2JEKDB4Sz19VipIa0xkUz43MVEwIWx3Y2lCJl07bjV1KSUiNDI9ZThmP1MlbHc3UUwrcW99I3JnNkJOJnpRLmRR'@;
put 'Zi5dPGFmd2Z5cSs3UV8/XVMrO21sdn5zclc5Kl42ZTVhNTZNOnNTdFN+MHFndUpeTTg7P2ZgLEYxRXBfNzo1YlRFfTtkRHw2PXcqKWxPMUVpNTY9LGBTdlN2UyExPCNFPztreSRdN2lEezdpRCs5TjZ1OS9eXzw7Xm1NWCQvenJwd2dpUHdoKCVDPEQyciwobTFxR2s7bCZMYSwoKVcuXzZiQH1m'@;
put 'L103UWVUJmxhcmhVc3xbRys7Q01+XV42dz11OyY5QTkpeHdzQntfels7RyhRJl5ZNk5wVHVofEBdWnxJUCZpJnUsZWxOUTM5KzluQHMsQW8hTmYyRzFyKSJefEYjNiw9em5UOGIhdGZKNmp5fHcqdUtSMVZTcEN9O0wsQXNkK2lDN08/IWJ8NG9EJWtmcn1HWjAmQENRTl8uOiU4d1ZTcFs3WEAz'@;
put 'KHEhTnZ8NjxCeUY4M0A6Vk4wTHs8ITBIKHV5fHdRI2c2T2lzP3g4X0Y5VHttRHpBeFo5TyxSPU5dZnE6OXBDa0lfMnYmOFBESnBoTGRrajZlPVFQK2FWNU16VXVgXTcrPFc6NE5Ic2NvVm91dTJmRVRKI2VzImR+K205UTpBdlFkajJMKEF8SSFlNmchUmVnKCJPWFNkM2N8e2RzZnh+fjchdTk6'@;
put 'RH1+N3BqZTFhZ3RIPmZVOC9fT0U4YTl6aGpRZGoyZXtCKHEhZndZQEhNfXByTT8hPHo4YTpSdlsySyp3ImlfN2lEWiROZEMkeiZ3TXhhI2k2UVA+fVp0JE8xXSRTJTRnQjt4ZTNsM1hPMS9kOCtNZH4wZk5ZZy5qZTYuK0ckYHdIQE5ZZ25nPE8qMU9Kbjxuel8rcSRAfTcvTih6bGxjIWpiPCxO'@;
put 'eSxAV3cqUG1xMCF7fHF6cz1aMVBQUVA1KTdANmFOfXswWXsjUy5yMWd1MCgleTkwSzswNWpudihZIlJIUV9hXVJeXTZuMkMyX3JGVltoVWdLSzVvQmZEelV4OXM5UXEpc2IpVDtaX0pkMHoxaFMoTVZoYEZqUWhVKDpTK3JacTN2L3c3QG5qWjFdPU5RQD1GeE9YPzE0Xl9hTVchODc2WD1TSThO'@;
put 'OCUoIThBNXYvd2J3RU1rSls6e3x5VnNAKzZ3cThdSiNrYGNOYjdreUVlVCFNeV8rWjw0ZUl3NTlYWjJeW3NsVmhgQzJoYGJCJmBqLDtJKmBTeTlDdysrPUJVT15+VkkqKyYrXjNrK3o8MkhwWClfWn45Myp1M1k+SV5RJkkrK2Z1czJsN2FQcFtSSlFJez9tRyM0ZUA/KWp2UiZYQDYvazQ+N19M'@;
put 'e3VTc3pZbFFfVF01NjQ/NHA1Tk1zbkNUXzw7N1EwcmY2JlI+ODRxKGEpbD0zSWw1JlZycntzKWY2cntfXTw7ODljaDEjRnteJlE6UTpQZHVxMU9DaiNRbl0pOSI9PDlPTDY4flM9ZXUyX2xZLiRIUy5rN15wQWQiWiIqInpXMGkyRC43JiE3WHtWak5eQ2hWVUp8b3V2ISZ2YEBlPj5IQ2p7Yngx'@;
put 'YXJaaVNuUV9BfEtJeWUpYXp0MDpmdi88Qi9KZlBlUEpTZEMrRHk7YzpEcTp3c1t6TU5qVEA0Zlo1KGI3e0JwVT9sJXlQZSE8PHZGKjRwKyMlYzNCSGRiTFphL3RyWnJnanojIz9GakdRQXlXLyM+bV9TY2tYT2UyX3lUYmtDMDB7UE1JZ1hOSj9gIXh6dTE1PVlzb0F2S0B9S2VBS085eExtckg3'@;
put 'TGB8fkRFUF4yPkpsfDdTQz81Uk8rNVJdZj1oWSJLaClrIzpDdW83SEdzelE7Lk9hRHM0aXNQYjlRcWFIKG9Fd2cpTGZSZloxQmFMPWZELjRJTWxeZXArdyhBOihOezZWVC56PS8kQF1mNksuWVkwdHhuNHVJcXVoWWRbXWZeUDBja1pXeD1YQ1JheW1xTkVDaCo0UyFJSjFLR3k3PW02TiNOL1M7'@;
put 'eERrUTZfd3drY2lScU9JZmhMZjg+b25FLCE8OmU3UENDUkhPTTB6ZzxMK1c1R3MxXzBnPlA3b3U6T0c7KDNgal5AbkRabHM1TiYhdTtbSjhRRGFkbG5yQ3NjbkVONXVOSm1GO2UyaUNedUg3NDQqVEV6dWF1JipTVk5eJD0wJDQ3U1NdMGtSOFIkKlN+QixkOCp3LikjXnljTC9mJVF3bDFKRyI2'@;
put 'UGZ1V2N2RSVBaFNPeThnPTR9bkJUVT81cl5QaUVDOl1RbU9GO1lvcUs/Wng7bTdiQyNLYilyT0Y7bjtlNih5VHplN2JDYiV9cmxoY3tLeV91Q2ZxL1VjI0V0elRxPDgoZXNaKnUlZ0V3NzR6SmMyWDtCNlE7QTVMRmAxN1BJNXpKVUNCZTIvUzsqIiliRWI1WTo6JikiQ1M2RToyXUNOJSlGKlpk'@;
put 'KTolWDtQX0RjIzNdZm1aUSs+N1AsN3guMF9Rel5kUDtHLFtkXVlocTNXVm9gKEh0KEs5P2pGJnhSPDM3UWplMndFRjNhaTRCT3I8VWkreF8qVV5YMW9QVkAiZEhkOFdqTmhyQiJLSloxbzxXQVcqNW9nQk1QZmpGT2lwczw8X302Rl80b2h4SElyeyZpUUdmPFlkZWc6T1Z2LFJNXkZFdXFDJD95'@;
put 'Oi9OQWs/N3dWLHdoKj1oe3wpOCQ6ZFtAdHUyTGZQZTYhdU0mTEJac1lhcGxCR08lRTVnQk1CIWovNytSZGFwaHQ4KGFJMjl2L25afUo1fF9LcWVOdSZrRGxvKVJNVEY2M0BRVmBmSnMrUEIhP0xGeEh2RztTNklHJCNTR2kkVGQ1eV9oODc6RE5BLi4+fURnP0lZcWx9UkYlU1l4S0dKZURAUV5Q'@;
put 'WnFqK3w+cnBsd0YqMWkyQWg9PGYoW2BSaHQmfGU4dUI/aTppI2VANFlLUixHSil9LkcpLC59P2ROUFBiaFNOPFNmcWAuR3lCT04+eHkxOVMxNHIxaGx3MWwyd28qKkJmSUVjN1NGS15bd3YvZjg2ZHZiYyl7MjFSRiNGcTlRUip6MH45cGB5MWMrNDozdjNkLnp+JkhQUkF5O31xQClmNyZCTmkl'@;
put 'QHJqZkM3T1p0Jkx+THcuTmNnSmdEckxhZHhmYUpqalR5ci97UlBiMmBbUkQ4d2VGdXtBTkIjfCgzNz06YTJpe2pXQjRuOFlGKjl0Jk84I1FSJjNCU3xKWlU6YTJpJEdSMkl7fn5yOD54QjFXWD9JIVldSjNPaEE5W3BIPyVxYGdVKyEyWUdGJEdPZiJgUVlFckEiUTl4YnN1fUVrLjZWPHJKcD1Z'@;
put 'WlhbYnJJIXwpNjd+YWFDNVVSVS9rIjBXXlB1aVAsaWEkN3YvQS4yZHtYXXVObD1jQjZOI0FaSUdQbWlNek95OXVHaixzK2QjYj8ld0hUWTpMI1djNXhzSEBFd0dxcXhWdFZVSipGRmFMSVlSK1FnYVZLJHZ9QGl5Z0VHRGB1QjU5KCFJI2N0KyxtPmMuUm91R3R8WDxFXzdURiR2QHNJeX4sWWUr'@;
put 'T2o6Kkh2LHs3e1srLzJMTmNTUXk7TUI3Yng0KFM1UnA6aDQxRT4lJCRmPCFFT0IoUzYhM21JNT4ybFpydStvUCtjKWhKLHhSWSxiczlsWmo2OHcleWBSLDVqLzQxJHZ6OHEwMkAlSV9DQEEoY3t2MC5daih2W0NkNklyQkp1b21ZKUw1cWp4U0YjekdRLk1IZ0E/dEI8ZkF9MS90QmZiazFQVVZY'@;
put 'N3Y5TG4wfmB4UjQpRndEZjsmOl4hRmplX3ZkOVpMdkQqNSJ0bGZENld7djJkWHkyc0IrKHF1Nk9jTX50bmVxKVhjbit7QDVMWWV9NDF0OTBub2c6fkhMPXBbRlhxMCg1IVowX1hlZltKdD08N1JEX2puOE1+TGNNRU1jLyEiYjdwTWwmZXIsWCN1czRlRWx9fSlIN2Y6SywmVFJIInckK2BKYWlS'@;
put 'OUskVVJ4QyZXZ2d7MH5SNkN9UTBDbTV3bUFrWl1FSyRhOEZOJShbdHg9T08zZ1VHTUAlK3F6Ijh0THVPeEpUWFNqdSFrVzJTZkx5PT5Xayk1VmJKeUI1RzJ0IzwrdFBMLDNCJjQoeGQ5SnU2NlsvNFd7MGBjYFhIRD5sV29hIX1ST1hZUWZgJE1VR1NacjJML1JKXVFKZ29DRmh8LFVPT3B+YEZW'@;
put 'XUJIdjtmW0g2RjZSRTBOWH1SQnVyT3VHLno6b05PVDM8aGldInkxLn1ZOCkhNVVEd1oxWmRMQXVOWHJSNC8yVW1DaCQxLyN3YCgiOV9kc3M/ckhnaGx0IypaOHkrfEMxVTdgWCxOZnh2Ryk8R0tpeH1DQzZhY2orQ0ZkbHRCSkROJEFTWX1MSX1Zc0xYUzt5MkxhKV1wYj9VMkBBaTchNWJrJEQ3'@;
put 'dCVGbk4/cGFFd0ouUy8qeyYoUWR6cUJ9SmUqY0VKRyNTdStIPTlKbCF9azcoWUBeQ08pW0JQQl0qZlh5Y1ZRJHpddU1BQEdXRGBBLnY7cSZBMVc+JTlQNG9DJHMpTzdhU3Zgakw/RCh2IkMkdzhbZ1deKF1PInk3ezJbK0Mke0ZOOSppSnk2SDdQan4hQlVReiVGenRQJTpMWk0rNm9XcGlGTE9s'@;
put 'a0MuT3dCTnQmdEtBVnt0K3FXcSlDSyRweTxTb1c6bXdvV3kyOSlbKnpibi94QiFXaFhTNzR5QCxVWFBhYmE7QWZ2dSk0Wj0wWVcoYGJLeCl5U0h0V0UpZlF0JmRNSkIyQG90PDl1bkcpWHg0eE4pRXhzc0AmUl13N05vZjlERCJQIl9OeHN7aTFMJVczWzV4bUd+TGxHek9NNzY1YHssKy4xO3lu'@;
put 'R1dTbEFNQGxsfnk/ZUdTQ0ZQdT1rLEdWQld2aX17K3dYd2I6dWZET0cqW2M8cXg3I05tajtZUnwhYil7MSxAeWkleS9PX1tiNklrVmN5OVZ0X0ZiKXFmLE8weDY9USZLb08/STJDQXVaTlZULHViUkhLdGlNTUlMTHp2SUhqZFdacVBJa1JDIz8pMzU3Zkp3Z0Y0LF8xL3UxelltRmpkOGskWWc5'@;
put 'Q2NEZlh4NW5+SWRgXkgwKWZLZSVJV0wwTks/Yy9adzN4bjdJem5lODZNeEIjTDc6WnhzSytXKVR4ZD5ASH5odCJGaGxZT0E7bTQzYk5BTD1OfWMzMiMiQzhMYGRLSGhJPVFlJW9XWFptXXwvblpHRm1sZVp0bFM7O2NgdlIyWFJ9ZDA0PXlUJTEwSX5iSURaSisxRCxPTHtqSEA0ImBIUHEmYjM3'@;
put 'NyU1eTo3IndnfG0wb1d0YyZNYl8vLmMsNnMzLlRkLGBBPnhXVUlAY2RvbTwwVlkpRSZvMnQ8NCRVeVs7T0NSa0gpdXxgMWxzY0tgNT98Uj51TkNpdW1fdVcuU1pgKHYjLk88S31EWiZ0dEwqOSl5VUNaWkEqSEdLUmJeLz5oQjVndDQvTFRxNGlXNVNJN3Z9JmoqYTlhY3wycDEsc2BYQkU9fjZD'@;
put 'JldicGQvW3RxMXtkemQydDJSdjVzODJdMEVUS2EkfGQ1NTh1fF9CQVUiMl1feVNhSU0yRztjKCJBeHlZfGVROyYvdDU/K1ZIUzVIQnk0dlcrdTFneUoocH5NNjQ0YyNXa3R6dU1+bTw2NkdPdUU7KGxsYTp2aWF8OjlHUVtjK2V4RDxFMnR9ekg/W0A6IzJWXm5QMlFqNlNNdFZLZmIlfUw9K008'@;
put 'QyNHb1IlI2l3OENIdjdoTmdTPnZuS0xWNVFTOEpRdzNfcG1nQnZscU8yIXk6Olk3ZD8/SW0vI3pPcXlhY05QMDUwRy9SZCk3Vy8jMlZsNUNGZiY4RURtQHY/V1EoYSRmbHlEQVEwdjw6YFo2VylYZW83dXNNY1h4RktLWDY0REhSTk1iJWRYWFg9THxXUyY2U0xlZkQyZ09QWmFaOU1tWXVNREtb'@;
put 'PXYkIVp4TltaRFpFPiFYLGo5ZUl4WnRCcFZzbzd1fnRkWj81WHtlQ1gpdC8yTDo5ZWNMZmc1eTRLYF5QIX01dGNAcFt+RCZaMnthYWhab15gbyM3ZCw6I1J0XmNxQitpTDdwLmgvfHpGezFsIkZTNjIpL2xQN3NiXz5OO1JqLyNRJDRFMTZzLi86N1g3KzZpJTgxbDoxL2B8OThFVTV6SlEiI1JP'@;
put 'R1dvQXYjdkVKLkFKXlBibmx7IkxzRSY5WEVHWVI5KHZ4NlN1UnNDI0RbYEk4dGNfdlZpIlZdVzFvNENNdFdDRiU5WGBJWERiR1tHPFlTUEZCQVElTndseWk3WFk0NFl3V2FwQSlYWURHNWc8TDpxbU9NWSRXOUU8aFtZMlJYJTlYeT9wSHIhKyxeUHcxflllNG1PY3tlMkxeO0ZQQiRTMEx9SyFM'@;
put 'QCYyXUZVfDIyTEtvVTg6VUxvTk1uNDllKVsoYSN1cCY0Nm9LS0BYSjd8ZThoUzBkRkJBTU5vJXBtVDVqNXc/empZJjJoQyVFenE9KmpnVmxYMkhbSUc4RExhKGQqdCldIVoifEs2OWVBRFVDYSo7JHVXZnFTYT5CQ3pQZSsieD16PVoxV2MyMz1rMT98JkhQUXskelglJk5ybD0pYHBnTTZbUTtZ'@;
put 'KWRNZnRuWk1NSltRSj1FenpRQC5Hd0h8M3pMUXRJe0VJNGtEN29nSk1ZY15Hbz8xQjI2aWZbajEuWlsuRztDTWlXS2J0ejpsQncrc2VAL0hQQUQpVUxUd1dHR208NnVtXjN6Q0ooeyYkXUM5KHFPXWRdeXRvWjtESndXUW52WGFKRUZwdEhKLzNCQSVbSk94PHZUTCxOU3xJLk8xNDB8VVRFR2Js'@;
put 'R0AxWFNzOHdCO1ImZkdxY35ZMjpZK1F2a304MF1jTUJhVjQ0Y1kiYyxFZ2R2cE1jZ1pWYTdra3NoJEJNRiNMSVgpOXx3TU19dlRjKS9PRVFfOHZncSt2RmAxQWV2QDArSG1FP2F3RnhkPHAoSlRgcTpWR0NfQ15DSjN6SXBEXj5tMEpzQ3UlJGxoY3Upa2xgamdSZHVQVCwuS2VPMWReSFdNaEVk'@;
put 'bD9DSUxWUz5PckB4eHE9dSJ4MXtlL3kyLnxlVyxsVGNHQSM+Rm51KT9OaV4qb0J+Ykc9ejE8IzNhLFhTQzdOJSkkLzg0WmI5RixHJlRlY0NJTkomRm5ucTZtMDhqWFhNTyhRXkxTaEIqY3FiS0psVyxsRGFAUyZCSUZEcSp5QkZ3R3RaWUc9e1R2eU9jd1pASWQ0aFhGUXk1K0U7Q31EWSlKVjsq'@;
put 'dVZKW1N2OUJqNzYyQkRDMHhEPDBoUGs/QXk9dFRtM2omck92SVNvYiwsLk9uIiEyakNULCIweW5SKWNCVGppYSYwamdOQj5XejJTXk5FTSlSRCNwOmh2dCR5OTRULF1NeHRFWnB4RkQhbFZCdTZIWjpXejJ5IzJ1c24lNFFzZ0RUek06M2s0amB5VkRzTXwxc1NlREliOC54P1ksJFN6aSIvIVlN'@;
put 'Lm9HVUUpNCZOS3lLJEJsbWlrMXEpTC4hdVJCOWNxMF9iVXZpOTJiRyFsSip0NSU/P3MweFVtK21aYWs6Q3JZWiZGRlcwbEJUbVJMT21KM0dHenRHYExtMElheEskdzR5cVB0JmRLaVVJRXI2NEdhVCw1SHd0SV5BQUU6P2pIeU9HN1dEdGswT052KHJFSUlGWjZxcDM3K182Tjd2LE1iM0kvTj0v'@;
put 'P2pBWChQbkdVY348WCNtVW5CcFpkLC4pIVpxQkhBOmdQTU1Fe0M5NCs8YjBwd14xRk1zY0xrQEk9QlUlV0csRzUyZlVMVkQjMDpHOU53Okh2RG82U3htcVQiZSVmTWw5Ry9JdzR6cERWKU56YyMjRlZXNWNYJHtqVzgyWHd6aFB8NH5YS0N0dFZjTVsrLGI7Z01rRFY2QEhBYFcwTnAicHcifHE4'@;
put 'THZ1eVhAL0EhYTAkOipAPUoiOXo5ey9Mdi4sYzNxIUlJJTt2djxDVSJEfjFkYVMjKChCclNPN281NVlDbC9Mbzp0KmEvREcuZDUlPklmeDZWNXRYKX5bPkN4cHNmMSV1SUBAa1NKPUdEWll2UHJGbSFsVWw5KkVuTzcpbmUpPHExZVp3Unp0WjRzbWU5aHgpW0BlbkomeWJmW0xwVVFwWVBMUGRq'@;
put 'T0d4WmhHS0hRLGU3dkc+bCRMRGxRdXZFcyM6XytPb0FTQTtYcjI+aD5NfjEyWE1LZnp3bkFBcClQcHBNMXh9JE5KNnV4ekRmTip1K1M2VmJYfC8/L2gzYVpUdG4lRCE2RGs+bEtpb2cjQ0h7TD9mWi5iKzRPdD10YCMqcXxVNChkUmVzXkM4UnB3bm4+bEk/VU9XZXJJdiNFKW1oN0FUd1lwIkpU'@;
put 'dns+KzI6eVJQYkxTNzxpR0E+bGN0RSp2LHw5VzIza14ic3N6RFZwOGp3TWllbyF7a0J1aT0oN2w9YlA+bC4obzQlWEh3JV4kQXFGWkI4aSU7RSklPSZvOlYxKSVGL3U3K2BqJTtEWEUqL298MFtacUYlOi9sMToxJTdSMyY/WGE3ZXM+QilYNnkoWGs3NEolV1BveE1+NWl0OF9EInJ8bSJgIyIx'@;
put 'XlgzdDd5ZXZYO0ciUUhrMCRjV1RvYWRHNVJTbC48QWcpMHldTjc0Si9PN2RPaVROamVdNlVpViNkWWw5aEUmRngscGQ6dzkhP3V0Vm0yX1N0ZiRqa3E7Zj0za1lWL2E0NmcyJTdSKyhEUDtjQC86Vz5oZ0p8ZVRGPmwrVztUdix8KX5MNXdwIV1BRik6Z1ZDMyVZIS9fSFt+bDZLZ3klWlo3ZDpU'@;
put 'WDk1Zm1tOnxCPmFdX2ZXbDUiODdEVkphd2V0aHBHL3BzKnhkSy5nbENUWDEuNkNDbFpNcEJEUGFrZzUoeE4mTUckbUF3YWlNQGBLbzxMN1cuVEAuQURHVkhwQm0uVXxmeFlBUnBFTGlPInZaeHR1UWQ5RiZ0YSk9NX5QdzhfRXw+MUlQT2pHOnVJTnZEamQ0Tk52YV01W1pGbVVgaERSMisySTEl'@;
put 'VUd+amdTT0JIenJCcFh0Qk0sMkcvZ2lER28sSF1dfC9He1dSJEVuWl5hcUpAPi9JbUMwOTA2PlZhQ0VvTkpxYXIyX3lLUzYofUVIW1BpSlYua0tDbDk2eD92ZTV4UjU0Szc7U0VIdlZaZDU2NEtYQkxyenZray9pfmVMSDt5Z117PFJaYV5PeS5GN3R0RWdZMEgpN0F4L0klQnVMR0slZ2FBTFZG'@;
put 'QnEyJTs2KVd1YD9FTXBCQ00udjVQPTp4PGVHKSEwYTV1PWN6TDVxWUw+dWAjTVh9VTVdfkZpbXoxfCg8Zn1oNDpQXVs9K0YoNjdacEdfPn1YTiosYWw5OHYpND8oIWtNLnQ4P3prPFFUSTcwYEBqWyN4KFVEIShbRnJDeiFdNWAjV2wzSjtbelhMYjJpOFkiOXtSdlh9Zk57Kz40SSJMY0N0b2Er'@;
put 'VWlZWWhdI0JJYlglSGlhMktLRndmT3pOZTQoeD9UTEhlVnsyPlNnQXtYTkM+ZTs6V04jSjxTbFJJMHJCMXQ9fUZCPXQ6Z1hNcExBXj4sX3E4MyhTYzM1THhkfD0wZ0Y5fHlgdlI5Q0VaTE8+ViwrZ2leMDZJSXNpNDt5Z3lgTmNULDBHWyh+ZVhddXVPZzBBVDw/VGI1d21+RX1JaXRxeiNEZV1A'@;
put 'Pk88IUJUbThjTm88KV9yKWZebV0iVyZFUy5PYkF9QWU8cEZUWGpQKUFqekF9bjdLJGtfRXR9NDJFVkpRYz1jblhRRGE0YS45IWN1YzBhR2QsanwxQigvPXU6ISQjR2heKDlkOCNRQVBIX2ExZDohP09yPVZ3d0cmQS5oOVYxNHB1VSx8ZEBoPUJtTGQvSDVOMVpYQzZtMGdYTmp7dmE1cHU/PntG'@;
put 'ImpPa0k3fD9bO2BIKWI6NTdhI2d7SmJMX0Q6ISxhfS81N0dKJk5uTE1pPDdMVVUsbk5+ejZbN25WSikkJkR3Nmp0KlhGZ15hM1tBMzt1THR3JTNqW1E4N2pyYVlzXXxCR09TaHA1M2lTKUNQVG1HZTp5NndLYSs4WHZMQVNCMVc6T1k1OiJJPFVFRXdtZWVrc34+YUlNM2ojMEt0NEtbWkI6S0N4'@;
put 'blBiPVRjSW08JShRITJSNUVofTFIanBSSVF3NGpZQmArLkRzT3QjcW44WUtAJmxoWHlKYFF3dT03QUpncj9Kd2czKnN6SlRrTF0mSTJuRWYjfkRHZCo3KixVLCNGYnQhKFdYcXVdPmkrTkJGKnVZbTxoWHBMRndYY3dJaU5+MWAob09ANypsWGU6THVJKkhRKE5CQChUKFlHbjBRbnxCbGFoTHB1'@;
put 'aFhwJWZgbEVCZV8rfklmQEZNfnk7QlN1QT9NTTtoMWR8PVgyQ29XQl5ER3ZqeFdxSU1pY1okWFFhK3gwOXkrUWJMe2N9dzVvOiFXL2A5UTIlOFB1KE40Y3VwejN5Y0MxfmRKPyR9RkhedChfbng1Y2Y4MV59VyVaUkNFa2s4fSFzVnM0OGRXNVtEY3wub1VAbFM9QkBqT2lJTihbTDdKWCtscmhW'@;
put 'RXZXfEssZ1V6NjFEPWtqYH5gZU90Ujd1IWNAKlpuQyRHP0VUYFtROz06YTJpW0RmYzJGb1tUUz84bjJwTCRHal42fWswJi5KcD1ZeD8uRkd+QXRFVXoqT21FJTpZQiQzZCR+VzdpJVROIXwyN1Q/T0J7fikjWENSZnt+SmlkdipuP34qSDRMJShufmRhY2V3fkw4KD1XR0lvYEN7L0t4MUVhUE41'@;
put 'Y1t4enJRL1heb24zfFYzKEdiLFhbVn4zfV55ZDgwSyxyMX56b0IsSUpCI3xrY012KnVQeFguPUNnS10pPX1KT3BET3pVPFZbcyJiX0BEaSk6dD5tWXM7NXQuNUZYdUM3TU9BS0VkRmgjSFRXI00jO1QrNl1RaTp5d0s+NC5zSlZPKWZNdE4lYDt2K1FneUFLI3d8LHRTIWxjRzpXX15RSnhoJUVS'@;
put 'KiYoSllkdFVPa35KNzApSDZiRUZFcElPKXhZfUBnTkgkblB8SE4xaU5RJVNtVCspajl3L2FgYTRGbm4pTmsrJFRsbjpMVjIiW1EoI203P34/Y11LV0VZaFZITyMyWkNzND5+WXooQ3VNaHAjbk12O3xsRkpLV3ZtXWc0Km19TUhQeSpxKU8rQlFIYCt5eWlTSEchSGhEWk5VOG5pIi9DWS9YKGk0'@;
put 'OmI9SW9nI1hsW1NTMFc7SktYaWdnZ1YwOXVwbnV2TUt8cUE8RDFadTA3eSQzdUFIYTlKY1N5YXxifDwsKSowd2ZIQi88JGNvZiwuKkkqWFZfPi5RcUJiS3Nha29ObH52T3pMWnFNUnQjLlFpQz9wTC9eL3BwWlpRK2Eibk8iIkZuViUvXUdGMD5xRmY0dlJDeU9fNlFEP1RpWmd7fVdzbk8kc0oh'@;
put 'T0ZCTj5eQzczZXY6Xyk5NUUzVDVFME19MnElfTIoWDJEYzcoOUp3RFY0ekFVKkNmaExPQD9uTGx6Z0tIQk5LSSpLQGVpVGlYSUxdViM5Qk1zVS9xOlhZPUpWXzArZ2duPXV4OV0oNXJwW2JgMlQzaVVgaSlWZkRfYEEpOXN2TjlGMzMxRnFfK24yV0JCVXc0YmgrIz90NHo4WVN6KCZlPzg9JkdU'@;
put 'OywvQHgxbExjJj1HKDhFY2J2I19nLyhheXlhdSRuTiV5MTx4ZVhSeS55VHhpQW1namVdInMqTURdNDUoUTNvZlFgKihkeFojQElpKGF5PUsjKm1fVHRHQnZOTVJdTmlLcT5RN3x2SXRzTCROYlhpcWFWOHIwKG9ENEYocT5LbUMrX3pjNUkwT0I5Q0V6Oz96L0Y1cGdiMkB2dFtKSGpkNStxaXFA'@;
put 'ezYoRFtAeH15ZXVwYFlTUCxAbXNVQi86dmpxfGYwKSNoL3c/VkRmO18vbjxDakU4KGJHJUVRM3VhW2c9aG0rJjUvRHtEci9BJjwzVSshWiF7bXd2ajUjbT1McWlhJF4iOzh8YnZ4W2NpN1s5SnpLJVVyKyozNkReWzFMRyFgczo2SD5xX1d8e0pCQUZHMEgvQClFLlRsWmpRejw/bSx3ZTlDemE3'@;
put 'ak8mQ2NVZytKT21iZXYlIiQ4NE1tbUB6IVo2PVQ3aigkJDM/YD5HRjdHY3dtVmxZT109IkdoNUNfTCNee05kfVJjaDJXenhAbEwwWipjLi5RXzVZbj97NDVraElbRkAyfmN9Sj5KPHZJOTw3K2lSeS5aemJiPD15PEVTQ2U/bzV0RldJZkIqJDMjK09CSzI0UihPTTNfcjJXXV96RGF4KlJCQjA5'@;
put 'RVZyVXR0dDpEUE5wIzlVKkxScmNuQXd7VDJJQ3ReUnF0fUV8S1lxYHlkSiVDeVVJSXMmS1U1Z2BUakw2Pm1YT0FOWkleYShKdzRnSnlYXmBmPHJyeFIuZGtAdn55MlQoUlUjTUlnKz8zR2hhayU1cjl0P0dxejRdMiwkRnxfay4yNCopW1ZZPU56LmRsWFdGQCgkfTUzZz1gWURmNGc/WUdWeHh8'@;
put 'TitqV0o7KnJ+SHIlOyQ9PipmSTsxKzRbZUAjdUZKIkIkcVJ7UVFrNUxpSz5YSGxbeiF5UWlFTVltc1drN3B4bjJLREI3amg9ZVNQK05Nd0RjQj9EXzN8TEQ3L2JASj5gJks8eDp8Xk5qdWxWfGlZV21CPS5bOiNGW1gwR3FiTmJCKmVCb0x0NXJ1YiUpRmpRPUcyeCw7Y1VXKGdUYl4iKFNTIUQ4'@;
put 'QTIzKUF8KD1XanJ6bltLQWsyKU1QMCx8T21PTjJOP1tsI3pEeWJsQihoZ1QzZHUhOSkqMCNET34qI1F7SCg/LG9tOXE3MFdpaExCT2hITnVdPEwoXiUlPUl7JWBKQWNrUUAmU1BLP1QpQV48RUF2Mjkyd3VAaTJYQD5VIU1TblIrbVhVdXFNVDwhdnZjQSswa0Y3XV9nfltRTzI+N3lQP3hwdGwz'@;
put 'PWc3cHJjaHhXXjhxVFJePkBKOEt9LiFYXlQzVHNFVn06Q1dSUlIwQVYzKjwzdkd2ZXc5KythLGl6TnZRcj86YlRUV0s4ZD5Le3hZLn5XdVM5ZytMOjlDeWpLWEN2dUpDWmNSVzo3SCV5dXB3U3xnWk1KTSF3ZHhuRy90KmlramFvP3Z1KSJnS2tsW2t1L0A7ZFpxZz0kay5zWC44TXg3V0ovelhE'@;
put 'eW5oU3tbUSZ2d0J+V0hWeEZVJkk3NHc5IiRQfCtiLHxedmNdX3l8OU1NV3xXTl94aiM9KWEydCt2VDpMRV1RTFN6MXlxUWNKKVNOTE1rOCN2fSNFdVZfTWMxW3chWCg3VmBxS0tnXio0Wi9URVk6L0BPJEljeylnVnxQVykoIiIpNWB8RDsmOm89KmkqLGYyentrIj13RVc+ZnMhdVRFPHpCdX1b'@;
put 'JG9tIUw+dWN3PWNMIlsmKWZwZSJqOVUlbU54eSNyI3d8eTQ8Kng8cUl3ZGhsZzkoOmxaTEAxZWA7amt6WUl3QVtgQU5zc2deJil3QjBvV1k6aSRtUWksKCx7PGkzMXA9dkU+RjdDU0tMW2Z9bH5LM155KisoMV5SNklQKDd1fDJPb1pzI1JAVEpdJVRkdik8e3RneFZzKCFjc3RJRXlgMUduak4i'@;
put 'eSlCWiEoWG14clR6NCNxaFpgQHQpYFdhR1p4UzNuc0A0XXZ4dloiO2t8RnJiYj0iS1F+OlQ0fWQqMT9ZYE0seVhySXN5b0R6JS9bel9BIUNnJVhiYThhZnpbbUxPWj8kellCWnkrX0puQldRP3BYL3RHWSRpJjlqQzxiWClCdDdjZXxQTXxRKnZeSFlWcEJgRT5MQ356WCYkNVBXenN2RGEwKXF0'@;
put 'ODhZZ3VDMzVwLiVydDhhP206dXBvY1JTMjNDSnl7KGdDeWIuclBPKz08ciZDU0Z9Vzx4fSJbQUdDayVCT1FUOTswdjRHaDVrYXI6MUBeX1dtXTtqRmpZPWV7bHM2Uix8cytOU2kzVWRQWEciTmgpc3YoTU5nWEcyd0EifUNNZ280ZWosUWooNmp3PShjVThFe3xUPENdKVh8cW1JPlhAe1l2N25Q'@;
put 'TiZGT0xgOXA+U048cWI0L1ZLV1paej0qck54dENjYjpNI0xzSkZCIl5kbClvXV9wPm4pUTo6WFlIcEZYR0w/S3o7LClCb0lqVSsxL0NfRnszakslZ0xtYStIIUpVNEdKRkJLTERKMT1IeV8uL1BXNk0paUd8RkVYS3svSCxFKlhINEZKWk18YEJiKGNrJFUvNWFDTE1uPCVvTGYrSyRUZkRpSHZS'@;
put 'UFdnKEB0K1dIPktPKG81NG5CI05md3QrbjZKQ1tGJG1yaWMuMlh+MjZDeUZ7VG8yRSYwbiwpSU5KVmNuIyxlJmgjZC82WF1kJDdvTXtHTU17QEdTRiJlYmRvS1dVaT97R2h9Pk9AUEVdZmNze3IxPU8ja0NSS1V3bVtBRDhVYzR7UmJFWWRFX3NQU29GYCQ1Zi47Uz9YelgiMnklWF5zRyU1RW9J'@;
put 'dH0lWHo5XzRVKi5RZkBWNUM5cWF0dHQjOGorY2dGRjt8V0N7SmllbV8hX1hydER9Q1ooYGs1VCpDXSU3UFcwT0Q0Jnd0OUxAenlCIlQvMU53cCJyU0hMOXd7Mj01dV09RzdYIWFZZiZOYjQrZ35fTFZYcW4reE0ueVY3bG4yMy94MTkpMH5wI1ZpKl16R09ORGV9PX4qeCtfJWNtS11INE98YnBj'@;
put 'WXxLISJdYCJLRmlmcEloLFJSLy5nV0E/NGl8ZSgwfkZQS2IsMmJmTU8raTcuImlVT3QqXnlXdCVeW2l7Pm41LkV0XTdqLmRIM0ZoQmRxbUg9X0tgNSklIkhET1QhdDBNXVFnOWdaYltDKV53dSRHZlpDd3VEbWxCZmV3KXV6MGErcVQjN3lGcUk2bXNLWGdsKHRhYElnRTZAbj5ZTkJ0TmpzaVJ5'@;
put 'TWU1VlokUFdsW0Mqd0FJWHdpRUVNaTQ0eWpWTD81PT1IPEAlWmFOajFBemJKYjxgTVBTRWJMbzpJfio2JGY5eXEvSzZlPjshaltzMVlhOEUlL31PN0UhdF0qVTM2ayFwXSwmWktlejFDSzw5eGhxMnFjJiRlc3lNXkdyT0Y2ZWE/UXB5JiteaVcjYSQ2Kz1bJkh8RzJsVndLUiJGK3dyJD5+ViNU'@;
put 'U3FTcVQmPVY0UldJeiJjUD1RV0lCPkw+bz4uUDk/PF81c2hUYTF8endLSEZxT3FYZlNwcHBLNlpYZ3RUelQpLn5tV3owZ0clYj9HKHtpdlFTcn1fdmtiTWQ4MD0wIX5tX2NzbXJpS3FYR2s4RS5HLHZAdjNfOz0rdntWLlVfNSUod3tdRDAifjt9UWA7JSMsNzBLLDtAJXk6RCk7YUkvbDhIXiNj'@;
put 'Z11AaT03fUFGS1YiOis3USVqJWNnRFJNQmJzYl9BP0VgaHVadVorIj9DYGpuZT1dU0o5Jk1EKyVQfXh5WyJgbnxyZzB2UCtza2xWdzZaXWJ+Y0JLP1B7LmdJK1YjKkxkfWEmSyt4K3BTfmZaIkElUTlLIys7Mn5mayZyYiYvOTVdalR7VS9JMWsmUW5pVDw5fS99WFF6cnFXQEtIQWpufiQoclc5'@;
put 'bmhdTlBlfU1zR3tePF9XeW5odjUpY31NNzVfW0poMDVzVkhGcU8qV3JpazhZZ2lPR0kjd3cqTjBZZzlOR0lBZHM9SGpSUntJOHh+ezhnc1E3NUBwcXxBIVh6T0E8eFdQWFNiSj5eP2I9UGY9ez9rIXdNPVEsYFhzaUZQKDM+UmwyUzU/Jm1BNG93SiE/R1k0NmsqKm4rY0V8VD9HOm5FYWE/KE5B'@;
put 'dWJlZ1lyPTU/KEpyPWkpJm0ubn0vdCR8eXo/byRJcFs0cTM6biNMTlVUKTApTT1ZQSs+aEpwUldYXkIyeSFSSEJLMD9gUCs7JHxESGkwSE0sbkNvR2cuV3owZzYjZ3w8TGBmPTglRT1vTGd7ZjE4cm1MbWwja21ed1ckY097V3RJKkZmTCImUjpbM3NAMU5iUihDT15TeXEvVEtZTFFAWkZxbkdd'@;
put 'KW0lbFIhQkFZNGZsYUNALHNFSndwSXkiRDYzc3J3ZW5yM3Z3ISRILj5wJl5yWyk+JiltVmc9aVtfJTt7PHBjbXpkcXlzeX15fn19VDlpLHZSbU0uIUpKIlc8SklKYEB3OUNuIyNEeStMcSo9VUF7Nlc2Ql0sRHNxfklLempOX09Hfk1FI1RGNWp6JTMzXmV6b31qdS90MlJPJld7YEIuVX5aNEgz'@;
put 'NmZCQWVmflcyKEF+Qm5LK1ZoWX0yWUxMeU1Nfm9IUWdlKWQvQlpjVUgmNzNEODRgeElSdkdaMkYrT2VSIjx3dTEmaTdIaiE9UClvW0Q1X1JZe2JPei5PUDUleSZpLGE1Qmg0P15+eG99InAvSXljKE5KNTxveWMmJDc0QkZWUSt+TTU6cSk2fjJAbnIqY0g+bmoqfjJBPXg7dVcyOHJtK2xiKSht'@;
put 'TGd8PHpscW0mUjppZDtnQylOPT8oSlQmXzx9bUZTXT14O1ckWD0yOCwrYmV9ODt5T2d8PG5KJUVsR2khQFN6KzBiYW9zP1d2eDo9fSN3JEdUInNXcH0mM0tudGF4YjtNdnp+Q2NWUTBlTHY3P28mS0x2fTlEOnJaVUY6KGIvdUNHSjdaTVh3bkhMeS86RmxkaXpxaV5KZj1YMDhUdUw4JENRfH5Y'@;
put 'flhDcU9iVTJKKmJXMD9FVj87aDVgJjgwQFN1cC9OSjgpeElSMyo+P1tfeHV+RElzKE53IVQsXyU2Kn5sWXIoQncjJHx8Jlhbfi9YaW4/YDFlKn56dSRNTyVXR2xuIUNfPmZ8QH5ybWlua31QZ3xzejQhVF98REVbfjBXaW4uYFVbKX5Kcyk+dFs5bSR9bUQ+fiNWaW5zP15FJH1gNXJqVDNId3N2'@;
put 'UFY4aTczKUw9UmZnU05mPTJoXkU/T20ySDNBJVZFQ29zT3ZJWEJ7UWI/Uk1YcSw+SiJ5NH5JenRneHlaYjkvPFBWQlJyT1dUImhqUDJaYW8sNFpFbklbbnNPZkl8ajQkemZbQnw1aGhGQmd+P3cwQHZYbXZZTE5VN19HMDFOMjohKUVyKT5dKT0ydCtAflBWaW5vP194I319PTReQiMwQEF1Mkli'@;
put 'WjpARU0oTU8xU01RJi41PHYlX1RrN2tvWzdSbHZ6K35+MkpiLlcwXURhU0ovXWNtVGZKJn1WJVdoLklRazV+TU4xeVBlfUtbMHtjNVAjLEk0UVtIZCZKT2sjRnU3ekYxb3U3ekZJI11zNjBkYWI+L3h9fVU9NEVDYk94XjpJSUEiZTI9OGNUQiNqIlJhbF1edmlUcXZxITU3NDc+Iy5gMjFDdDI8'@;
put 'bjshMipTRGt3eF59TC5AfnRQIzNJKl9ZbSk8T2tlb1N+Ky5UTSw/dUlSLmM+dXxJSzgsTU8xITxRJiZbKy81Sl1Te3MvKz41TmRXMjlzVWdhb3F0WHZJMV4+K3hmT1V1Xj5kPDQxPy5vW0IyQjhCO1RTM2BQSEtubHRlZVZbSU1rdS5ac3BqSTNJOmUxVSYzNylNLCx1IklEJSZgX1lncE0sKHVY'@;
put 'UjZtMjJlR2FKOnhbQ0EieWN1YD5xcjUxWi9eaSs5X1VzI0ZZPDxrRy5XV2l5Zz5MdlY3LEpAfHU1PD52TFUyfksiRnBbfV9VdGQrKCt4YGtZWDVGK0MlLHxDM1FSalY0Lz1bYHNSW2QrKHEiczZ8IjcjM3Y1cVUsL0dbJmBPTnFPKkclKGVXNmpuVlZHb10yMT8ubVIrJHMvRloiMWwpTTZFeWhW'@;
put 'VUZrRVgwYURHU0Vvdz9mLm9bSGE/Lm5rUVgiMWVKKndKLm9bJW99LHR5Pi46NXVgX1l1Pn1jOk1NLl02T0pGWHpRXj81a0VBWCYwRXVTKj86aGFDK01XKjhITkcvTz5pcG5HXWgjMjFfRU4vQHd2WkpJUl1gY0hsJWowTSg+eFk7WnB3RFhSXT1+SUspPikpZmdgfSkvYHNPMyFUPHxfJSF+TVRy'@;
put 'KGd2IVQhX0hJKX5IU3IocC49MmZ8bXI/c2ZhX1MkMERecmdSfTEwaE00R0t6X0l2IVU2RzldbiZsTyFYIW97X0ksZWl2Jl10KU88fHQyYWtGJWV7JD0jJThiRSxmOkRIPGxbZ2UsKDVCL359I2ZzfiVtN2RXVzhfW3pzVF43TXt8OnRaTFF2SVZCfnpjZX5MIXtIL2BJdFJ+I0heS2UzdihATnd8'@;
put 'aDAofkY6Rjc4YFJxckxHRlhMIyRZQEkxVHw2SGV+ZHdvKGRJaG5NdmZncT9ISWp8NzBXVylwayUxPyE7JX1lYUo0Sm0rb08vdzlyfGBTI3MkMVFxVF0rOzp9VXJoKEF4UXFxfnFwZl97PSNRRX5iNVAoRnt+fmUwKWhrP05HNn4xfGcoTCxtSX16M1kufUcqOX1rR1coKDplV3NBL3YyLztNdj9i'@;
put 'PDFzVTpROXpzQElqKEdPUnFKfUB0MHxQKSJ9Z3QsfiwkfH5yaWB+S2B+fl1xInM1VnRXW0ZdWD9EPC86ezR4NHlvYTwvRnRea0NANkhpMTdNcSs5R1N7PXUoPjlxInMufFV4cn5bKD1RcDczWV1zNDdlVz8+Zm4pNlkqXXxCNmh+O3U3VH5sMXI+QlBRLEQuVnoza2hCPz1lanxZNXN+cjwhaCRN'@;
put 'UnxdQ0xjW3RCYXF9OzBUV3JdZiRsc2BaVEVGQkomXSt1RF1zbjQycmp1KWhnfj5EQH4wVjxRVkhVeHVdVDx1fmtBPHNNZ0JIVEAubDxRPixVQj8/TUJdYEFCNXMveVMoIWJgfjhMdShfQG8xe313PyFzeGdsSWJ3QmFHQGI8VnwqTWgoeDwmfDZ9MShpc3BuZ3MqeTY+V3xjXzRIInNPdCloUj97'@;
put 'O2p8RFlqfjpJM2hdT0VPYjoxIXFfeCtrKGVgKDhkczhGY3MmfERFOT8lQ2F+UGR9fiVNdShKW25JfX12aSNzUG1sSVF4QmEwfTpIZHMzeGZuP31dcDI+a19jX0slSEl4Km9GNn1IQ2d+KXgifn5EdSgrezBaVHwuNWtzWi5RNHdjZCt+KExNOn1xNWwxWClVQkt7ISxkKCN5Mz5QY1F8QDIpaFlg'@;
put 'cjhxfmhLI2hOVm1JWXovaXtzQkQ1eUh1WSpPflo4bDFkKVVCMn1IQ2hzQGhTKFRjMnJrdiloPH49Kz1+N3dtSWo6Yk1WYEtebFdUJjR5I3VZKl5zbEMlLDNgZCIufV8hNj5WfDFyY00vJmZbbzF+fipTfn5uNTNZMn1FKmxzZ0RSNH0pT2o0YGxxJXM/RSUsbT8zQTR8ZU4hPlJqUXxZfXMvcHNz'@;
put 'Y2goMzNJYy9ZJHRJLipPbXwsKVVMc3U0bD1+OyEoaDsrYjgpXzQxVkw0KyRkcHN9PkRPUHtKeWxfKnUpfSlzbigrM1FkVn1sZzs5NWU8MmFDMnIhYGB7TExkWDc1NEJpc15nYm1iOXZeTiJuTl9WKUZfaDhZQmBWVz9NZDxaXn1XTEJmPzxIL1NnQWdNPVZYLjJJMVhnd2p+P1MpfSReNzY2Q3RC'@;
put 'cW4+STZdTWxoVjl7VCtfUipROWNydHU0ZEJVbCpSZG1ecGg3d3o1KiNAKnlxWWtgKHRqPDFbe0RAVFJYOyxzRSs3aHgvbXRCSClIZnBfWlJHYD1rZylAVCZnVn5jQV1qdno8V0J0NVYrKklKcTk0Li86bFJfLy8xfTsmdFNHY2p9dVNKbkRNXW5ibXVlSjxJUjIlIlJGZy44TW5ydk19Mmh0cER3'@;
put 'SkhYXUZUSHk8Skxubl1JeDR5Kl9YS0NBa2xHLEwiOUdReGl6UGpFQzZUTzBGRXNYRj1JZE08RSZ9UTpzUGUyYXx8RUMrPmFra1BDIWw2TFI1MkQ1QkVYSEVfdUR6bTs5TVdDcS9ZUlpaN1Z8fV4xPy5dXzZQRTRMOFBHMXFEOjVpKHI2RVY8OFZ9NHV+a1c1ZnROV0dFNWB+Qzo7Vmp3b3NoNVh4'@;
put 'PFE5WmlVNX1lR10pbD92UUhgNk5KbGtOOC4/fXFMQFZAdHpWIUJVOmZ+ZGl3W3ohQGokQ2ZFZ19+bFt8ejBeMUIib2d1R1tMc2M7TyJJQTM3KykoaElOUnJCZkQqeVclP3U6R3NZN1BgU3g9e0RBR29bV3RKNCoqKmBrUnxSdShTXjs/WHxJTVptb01+WUQwIylDRz0+e0pbKnBgL1lOOVhPL3Q/'@;
put 'anRbTXRySVBHRGkxRmlUYnRFNG8xdUcofjJ6LDU6dUhdO0NqUCEjUCQpM1o8YUZWflI1Qi8kIShINWMmMUYvVUQpb2E0V3hlT2J4ZEdkdH4mVCRmbDMzKX1AaXszQ0hYclUrVm9DSFk0My4qSEl3ZjJAXzx0Kl8+UkVjOVN6ZCl9MDReVmA6fE8wekpOVkxOYyMhcUA4d1tWYTFRPzx3MWhQcFtA'@;
put 'YkRaTGh0anZgUk1YVUZTN1VFTDQ9Q0dbSlEsP0Axb3xuIy9nRnZNMGNfSkIqYEZZbVN+LjUvO0ZoQWUqdWpdLCorYlZdaDxoVHxgNTtRMS5sQll7R0pCRllSJEdxfDdZXUk0Ll0/dmpganl1JX1RPUc2aSN+dGVMRSxMfDUkRyV8VWJqI35ATX0uU1E0WWBgemQmPjZZe3I3ZmNNd2l2Kn5DRCpm'@;
put 'fURYIzpXMml+YS8vViV1cnx8YiZiSWNIYjY8JGtJd0RLQHc5RyYrST0vViM6eFZxfHY2c3NoWkdNS2JNNmo/SiFRaGJQPl9HTnZ0KVAjR3goRl4hMVR1UX5yUCtBVTlbYURVWD5zP0RAQW9yakBhd2ZiWD1DcElxKyxlQXFDaiMoJXJ4M2clfFU7aTpJV3VFW1ArSF8oMlsxIkJqQj0wKy8wSlBH'@;
put 'WVI/fmlIT3NyQlFBWUxUM3g2YlNhQyFfOnY2U1dTb0xgWEF3QiIqVCtvcSpdd0IiOj53W3dmPVNkOkIvK2xMZzR+VGtwdipBakRhSDIoXiQ0cGJQfF8xUUJYKlA2TmBSdl58UjBua1c9UntRUmBKd0d3elBZRy99MlhBNGRnJlF1eGdfdFZBQypvOnJiPywkbmJFT110YDgvWlFCciJ4d0IlXntm'@;
put 'OmFMTkpILiZzVFs0MW17Y3gsUkhEU25USH1rZDBJdDtSMy8sYERpa0VHLGVASEk/fDZHfSkoRk9jVn1pdF9yVzRYUmdZK3V6flAiIi5UOm43ZExgKXVEYnxjSFZGKyQiTFh9XldDV2tGMkVfWCpMY3NCMkEvR0EkTU8iK0ZrSXI0T2kxTixIeShuRUw6b0koWHkpS0UsamxzeVdeOTFpPE9wYXxl'@;
put 'ZkJlcSQ9dVl1aVRhYnxreElXRnU3TEZFbys1fVBQWnI4cmgzZi81VTQpVFcpcS9kPjBSL19FS0N+bm9FTmVLNWRBfHIpMn00aXRldWEockk6SVgsTnUqUlUielhwYCIjc2NKWndCZEJMOk9XKW8kW19LQilASG1XeGN6RTNrVEhRITFASTErfDJTWCFvdT5HOn1gaDZyTkxlbFBNOUkpPmFdPy5r'@;
put 'RVJqXzJTMXVEInsiTjtibCt+T1B+cExFL1IpfmBrY0ttOFRvUnJ6NyF2PEVNSEN3bnFZaUNhWXVvaiV1LioqJVsqKnNwak1xWkQ5N0tmNCVUIkNGWEgvVlddSzVmeEomLEd7bFA6JGh0MEQiTDBBYFZGIiVJKlk2OHBQK3Q8fUMxRVg4TTRYQTRWIiJ8Qi9ffUZjJGY3ekZEXnRjSHVbcTRdISF5'@;
put 'cnU+RC8qIjMvJXxVbSNSKGVPWFNxUXR4WGNyX0lGYSlnRjRvOmxIRjQqMVhPPCxHUnd7YGpUbGpIQlN1KyhEQ1ZRZ0RFIn5BWXZZa0d1NlsiLHJgTmtjJVdJd3Z1alAjXkBRWnJmc3hBJDl9cTZhU0YsQyQ3eW14Okl0K0dkcllPQTlyfjMrY2BLT0Q1Pkk3S0I0fCZPU2lVRTVGbD9VeGNPW1c7'@;
put 'QSEiJWs2U2RtTXYqaXpLc0VHN2gqRis6Q2JOQENrRWhuPTBWPmdKZSkoQjoofkNMTj9WWnVmPHtFL0IhfVlNPVYhdl9neUskTXB+c188Vn55YFtbNHB8ND5hMm9WfmVlO1p+OFpkMHc8PVZ4Wj1iT2slWVU1a0kueCxtZmUvMUQhJiIwd1JQX0kraFUpQlNXTVsoc1VvX294LHJRIjJxYCxqfiJj'@;
put 'ISpQV3pFWXZDU2xeQU5BWylUK086Vz5oYFJ4aUlJZ1NLRHZXdGtjR1JKNGs5a14pbjcvb0gua0BHMyp9cEU8Y0p0fixlQjw0aHhTMzpCKFhjI3I/Kk9ZPzIsR0NvaCFHbXM7WmpVdEJmR25CQTgyeSZhe3Iwd3c0K25DZ2huNElNMl9JMk9LN0NgP0EofDtUT1g1cFMiJXNXL30zRURjdk41ai9L'@;
put 'NFRAWHohY0BHSnRQSG1bfkBhYjxEYnx7RWBqWk5CWW5OYFMxQmQjfChGWDs/V2puKkVmUHpwejQpZEZJdEVGIkNAQ0ErPnFsT25YM0wrYVUvMmV1VVYwIjltTmkiSCxLdWF2WEJdVVZ4XX1nKnJuIVJHMFkjNDhAaXpwLD9GMkw0JnRFZiRHaVluflFjI01rRXAmZilLPDhmXj94Q0FNYyw8bz5Z'@;
put 'fS51dV52KlspaCRTPmNLRjUoPnZdMSlGUFN8OE0yb0lKUzcvPH1RbyIzZU5uQl0odjE+czxBNjwzOkxQMnQ/LFhZbnxeTDFbUCJ2NW8oRn0zbUNPdkc7Q2NzZFJfMzVAOX1ITCQ4ZygubypvbkVlMmZoVnhFaH4/RnFdLypnaForfmM0fi5zRGE/biN6a30pY1tPRXpJZjBRcURINjwxVkhSaUx0'@;
put 'X09ETWNfNlZEIT9hVnhvM0dQTlsmYCo6aGphQE1FVSp4P2pXPzN2JEB9UWdzYHI/diJhTWk0eVc1SUYhUEJEV1h8Pnt6ZlRrfClJLygjaTZDb2B0TyssI2osMnFfXVFVPHVaX1liOmJMU0tILi5LSEJdciwsVVJPLF9rI2d4d0lZY0whQ3QoUFgqZn13ZlZiUDRYezM/QS5tJUJCbzl+eSs7OFEv'@;
put 'ImE0ZGExZmd2W3J9JC5Je0B6P31uTCNyY21HbWtkPyxeRTJAOjtlYV9TT0JoV1ZFdGtWUlRRNUZFdDV9fT5DNEJZenx8TDIpNX1NdSIzblM+a35+PStHRG5ENS9MVHAuVkJxRXExJHgwM2xlJEc4N2p5Jn01P0Q9LnksdD5oNW5hQ3lBPUNrJXkuWyNNenx9I1l+Z0drdkx0NVVVR1hZfDJTS2FN'@;
put 'Yl52OX4hSHlAciN2fDt2RWkiVj4sPnFzIWt+WURFMTR0d1FTdU5zK0FnaThZJWxmVzJbc2tkdFtQcnZjITFodFAqbykoc0hSbFkhVGsjcGo0IlpZR2JmOV8/SUQzalVffD1FfUA9bSF9bUNKYF9wSWF0VVJMS0ohJHRpNU8hfDR2JSpaNmN8cVBmZ2tIMyFEPW9oVzpkYHZnfn4lP15VVj1qIkB8'@;
put 'S3U6cFpkRylmPX1yI1Iwc0g/RFUqWnhAdz07UWxXPCshVCFzXjQ7V3Z4YGhEM0pKMytBV3p5an01ZUZqWXwqPntDJjxuaiFdc3xqJFBAQUl8Q0N5LF8qbTN5XXpEVVFHVFhBRW51OkQjdVRrQmwvP1R8ZG4zOiNtMmRoZ0p+cFhvYDpEditYNGkvXXk2akFWOTBLL25nO309eGIrPyt3PTp9IU9j'@;
put 'bkowJn55WClzKDRAVz07TFVnTV4uTVJfeHUrOCQuT21fPkk3NjE9LGVtMHBCZm5wQlQoaGNvTGVmXW0oTVcoZGMrTUUxbU47SUc6b2tkd18xP0glWWJoYWdELl9tYmJqbWlEaTZTYHV2U1dMWkEiZk10TSJvdFZTU2glcD8pWE4xViVMeDhVJjtYTTM/MEdLK0F6RSJkYE5vWE9vXzxdSHU0SCVq'@;
put 'VGZVdzgqTTt0SS4kMHN3KU9AP2oqdEd1VyFuQnJMS35rYXordz16c20mYk5sWmVjQDVpXlBES08xJUpGbi9idlg5RSUlRShYbD9idlBRQXdFY0VVS3REVUxHaDQjQEVVS0JEZkUwTi9idmgjMHw/RzlQem4uQnRVe0VLaSE+MVspfl4sKF9jSHlzQ3U7RHRaMUZwNH12TH1Ya01MRDhEVTlzNHNh'@;
put 'K3JdKm17Y14pc0NzWWIrYl1YUVBMPT53PWRXfSZFJWlXNCZFJUxVZC5DM2ltMHlWOkMzLH1te3l5ZHlFJXd8ajpJTEpLSG9uP0R0R2JKNHdGJltSV3pdWyRLW3V9aTw3d1JXd2FIb0FgKjZQQHw/QUY0fVA7eXk0eEUlLihVdn55IkshNDFFaVI7P3ViWSh2eSJXNnwhYS55LmRDc0pJSG9bX3V8'@;
put 'YEZ9Rl1GPilSJjFlUW9idmdTcSF5eTt3RFVvfHphSUxLSEhvO19Ya1Iofi42bi9fTTFMTH09Qkt1czVaYStdW3VibmdjVyhbIj8pOW12VTwqWyZOeHBbRkt9XnVaWzdIcFBvTkt6YmohXTRUZGw4JGh6bTNYUDZEbz13PVFMWT1+fnA1Rk9Bfj1MJC5vWytfI2dbfmFHTGMsX0BkW35LR0xjK19H'@;
put 'YnxYTS97fCRYWGIsQnRVQDJgSTlUWCFVVGhBMkUlaz9gOlBbfjg0ems0flJtTS9TfnhDcldMTzJ1WHI+Zk15cHZZdjltKiFsRkleZDA1PDxLTDFfJltPMltdfCl+WFdNL1t8WWBgc352RzdqfD5eJkZzZCNte0xHWkojT3ZQUTVkbkw4TVhqT0puL2FDaH5Lclc0cT9aXWd+KnFXNCVgZV4hfjdL'@;
put 'VzQkYCQ9IX49VVtMeDFRZ31NTURWajlfNSJrRVR9WXY3Kih+VUJuaG11W31wWFhCT2E4IX0oI0A1XzM9IThoMFlzZmYwYWJVcVcqKWEjcn5BcFc0OGBqMEB+QEVMYyNfOzghfldKVzRMU0V0Jks7fFMsPX46MjhfTXA1PiFDQVJeclJRcVdPW1JdekNhOiFQSHhYMXJORXBkWWBxVWVsRkVyT01t'@;
put 'ZmVsdyxLek8+a3VtT1JtJVlOTDZBYld1bSh7ZG0hfl5TTS9SfmlmX3NfdUc3aDdITFk2cm1kfE01PX5yRExjM186UCF+bkdXNDZMcHN9dzh8WXZDJGFlM1AxX1hZQH57Q0xjMF98fTl+VFNMY2MvNHIvMX1fOU08aVh1RzdbfW1UX3N+LHdkN31CU19zSEJ7XyhhLno4Um9fcU5ZUiFSVTZ+d2Vs'@;
put 'XVY+blBzZ3goMTBbWXw6Zj1+W0JMY3VfUzM5fmVScEwoa252MmpBIjMze3xZdnd7a2BSMW5LUU4hOHhTbWZhOndlOE8jSXhCTGNzX3tyOX5PUkxjcl9kbTl+flFNLyZ8R3Jgc3p0MFtWfDhwXiJyRGVtN2AjXzJhbUAuP19pOUpaRHFXL0BpP10xU1tXSz91U0pzMi5uMmA9Xz5FJD0/fn0wRk9W'@;
put 'fCVLPX4/SCN8VWhjbj4pUUNxVzlANmYmfn5BVzQvUiZ+dk9tYmBPTTB6a0B+fkBDSDp+VSMwWz9+TlUic2Z+Yldidlp1Im9ISCVqMTVnYF1yZ2BTci9wTjRyM2s/ZU9HWl1pNSkqdT9+ZGBdfHNXNn4rekxjJX5Ia00vQWxYNGR9RXIxfmt+OHhNLyg+IUNxUkdaTT9XdlBJWE82KkBQXlp+a09z'@;
put 'R19MQiJvOUY3aktxUTtpfTBqOnJURDwqTiR6PzBTR1pndEs1fXNAflt9OXsmLG8xdFcic2IsQXQqPiJ+JHM+IyloXn5rfkFgUnE+fiV9VmV5KGI/OTJDVFpOW2t+L0hmZH5XLExjYHM8bnpOTjJ+fjp9MnpNfmcxLn1eMD1+UEB7N0RBdChpczArKDYqWjN3aE5mfCs/TS5WdWpRNHp+O3g6a3Nb'@;
put 'Mkc/SyslT118d25Ac1sybHwmUnJ2emsvfVcoO0ppTz8uJmpoVl4wIX42OXprenNASjFRKDJbaCpUfVZsPW1yUldgK1c+SlNLIW0oYlU/P0wqNztIaSxKe3ljbj56OD5SN0xINEgvbXIpQCt4OVFQTmJUQ245OSNSKD82V28rbDpDPX58SC99eXY3VF55MVRsfjFUU2BpSD9+ajs+em9iPi5iSSQz'@;
put 'M1F7czhdTUpUKFRDNnxVaHJXI31bInFXeX5eOFc0Tn0hRFg0SWBCNntzb10qT11+ITpDSCx+RT8+eipVQSJgNH54ZGJ7SldUL194bTE/dCF1R2c9WlpRVExjOC49RzJgUFlefWlsP3NXVGV6UFtYdy98JTpWKHNteltQWyg8VVdzbVc0MmAxZWZ+Yi44SjFgREFefUopVVdEIW5XQm0lLHUyMFJO'@;
put 'W2JFL3xPKih+QiFkX0FtISR1MjpQTls+RC98e3Rxfn5oS0xCPHFXQVRtYlkuOUcxYFh3cX5aPFpadzJBTk5bZEdefXchUjR4MmxPXn11IWBzMXZaRyhgR0BLOiVrdXx1WitjZlplP0ZNR1pZTTgpfH1FYllHKyhiPyVNR2ZKb2c/ViZFRWsvPjVobU81IX5pJFdLdywwRUhJZmcidXlnfltJZ1RU'@;
put 'Y2dGMXg1ek8xKX1banpwIzdlUSZxK2x4b3wlaSN5KGhGQX5bKGZXay85PDx8YmZXW2MqQnx+VD8jWl8vXVE8VihtdFV7MF5RIWE8UXZHQX1hI0Z4V0tqInhFOUdZTk1EYCk5XyF5LGBudyNZRipndz9LKU5xTUdaSUE2KTBScnJ2fn5bfmA3WTx5Zj1xI1RRd2k5Kl9PK0lleitJUEdwPnlSLmEs'@;
put 'LytoZT81dTVKdzszamJgWDBNLDAlbkpoVk9EUVImMzd7cmNjTSJYcj84QiMoRXk0ZUpgX0YvMShVOT92LnN+UX55M0pmJDNsKU0wSTo4bHNBbHNSQCNPQV1qZllrUExTdHxrW2tIWnVXZllYfktGe296bzJvdHo9eUdOak8kUjhfKytEYitjTFJiPyhLbFU0azElV0tqYTVJeltnL2hPPjVOaVNG'@;
put 'Z358OXxfZktSMTtWbFRHJXloUjd5QCl1ZnRRW1h3YUR7RCxnMFk3NVJ1fUJfWkdKLD01bm4/e3pYRXdFKHUiJj9MVWh5RkcyWEsjVF9YM1ZDKzJnUDNpPypaZ30zO1pbV1M+TmUzOC5YM3BvaURTUn1ncFYhSko/RnZTOyt0WFZLVzQuZ2cyPTxAd1M4enlhb3JBLzgpMmVuVVIlYTFVMShiSjlo'@;
put 'azZvN312d0djNntjbWE7QnxGem92R1A2PTxebF9tJDAjRTNHMXxheCwhbGhNbkBoenowdlFEWXksPnpeWV54SFBDXmdJSGRfIWkhLnl8Z2hiOSN1S0xFaFt3ISRxLDgzVFg9Wig/JjNoOWhJPVouYyRTckJoTyYzUCZ8P05lLF8lQytsUCEuLGxDJnIhVV5KIylpaT8iX1M4KXJJfDpsdXF1Nzxw'@;
put 'bit8bVtwQF5XTSNFXyVmckZAcj5xayNfRyg5e0ZEOik+SERZLiVKI1JQRlRVPSQrZTwmOEZ+QF0oO2RLcFBuPFNRTT5he3M5Y2pgaWMwMGhScEJRJlE/K2AoeFBJU351SGZ9OEhzZ3ZXciJaeD5LJGpsWT04UW84TispKlFSNHBDJmZyel1KOUlLZ05OI0VgOlk4LGwyKWI2MEZfUDY9ent7NkpD'@;
put 'Ky4ycDleWUlTSFEzJTxua0kueVptTitKTXYpVz9hLGskc0BJSyE3Nkc8MmExZV1gXSltNmVrUDNNNzhXel51RW9CaFFFbjw4fSY4LGpKfkBdcyRuZjY5Xz0+PU1UODJPJnR7MWpRcn4wPHB1OXk9XSU1fDhdMD5PfSk7YXZQRFlTIXlFY280N0Q/WjYuUSRpT3UlYmwjX2osX3lAKCkwR043Ukhm'@;
put 'NyUxKiU4KUVdIzI5TD9vZX50ciwhIVpObVF8Qnc7RDBqK2h2JVpxWH5SZm5xQW1uey8/eXBFIyRibiVMQ1smYCtDaDlwRm90SCVoLyFabGdOKiFwbyFjU3kpLmFCTl9INXd+SUMiXURmN2lkcCRNTkdaPWghfVpeKTojTX5qZHlNSyspXX1CTj90I1pgI3FGWDxdQ2UjM05VKSRTa1oiRiN6Sm9Z'@;
put 'MClndXxpeT5mQzpbOXM1ZGxKZlEyJFpteHh6PWxgUyIse21MMCV3Lz5ALlJjW2IrWmAjWFcwdjdXK2N5UCQ/R09bPnpXbEVNYU15N1diWDJXVy88W3tCPW5jRVV0SFV5eXh6RGpden4oeXkuNCU9dnhgOGJJeEJjKGkwPzV4MnVFOiM3OFdhbT1feXN1eE4xOnZSRWB8UDp1eHpEajgxeTl2RiFC'@;
put 'WE85b1dYdDQ5YilGN0ZGQEdhey9VYmN2XjxGbXJ0OkZsaGhGTDZ7SFpUWHEyWStaTDl2eWRedCp6ODNMckE+TzQjZWVeTmB0eHpVZ1NUR1g2UjlsXnRlVS5HIT9XMHZPdSVjYmRKQipZcUdCOC50PCg/bXU2NEBNbkN6eTA9b3doVDFKVTd3NU9DbVkjfXVPdSVtJWU/Tn0wSGtjd1FwQmlXNkBM'@;
put 'dllLN1VDZCJvJDU2KVp7NFJDNTtgWUkxOmBRNkB3d0gzYlBOMD81eUx+SUs4ViFBO0YqcDRsY1FXezZvQy80UWptWmJZekVpP3cyYFFqSG9tfTRuTE5gMFkib3spZSMkUV11PVQ5X0hyb218OzwsNU1obDk1fEAxTFNRek4oI2J4fDdJKW1oWTBYM1F3QHpTR3BMe21odGMvVGFKPkJHIzxsWHYr'@;
put 'Tmx2KEJOQmdFSD0qREtNejB5SUo0XVYhc24vb21CKG5mbH41OSIrYUJaK1pFQ2cyeTk0eWRePUpwaFBvPzhISjsoUERVdGtPJloqV3xSU2VefCRES1o8eVt9QHVVTjx0IlgwWSJvUGpQditEMlcjZEwhK3xsNipjNFgpRml0VXsjWjZBN0MjNDtpUU9pTlFvdz56LCVUe2VRZG1IQGg1ZDlKVFho'@;
put 'RU5nK0IsZHdPdFVlR0NUX25HSCN6M2JeN3oiKWcqNHxjMS8rZWVaWG94WzZYVzZ4VDs9RysvRnFJIXk6MDYpSERgUXApQFFwKTNoZ08mWmxXRVNUOyRBR1JQVmFCKUlAUWU3SSNkT3RnMnlzRS9TODhVazd5QWomYUtDdmhMM1dOUnRiTyZaVldrU1Q7fExrTjkoWzlGTjBXbFF4eFNIPUplZHB6'@;
put 'cXNpa2s4ITVGbS48eTZtSHNdRzAsKDpbZEpOcFlJQzxReilTJSJkMFB3N3ljIV0xPj4hUC9jdilDYmssL2ZFM3Z2XixkRTtBT3AyNnZhej16TlhqaHY/Ji53LkYsITU0fXVHekBEcEJ6Y3B6S3M/dl83KFghKigjNVhldSlTZEd4TjpBRTZ+W3ZbeERFIjs+c1B2TFs6NF8yPDZGbE8hXzBDZVpl'@;
put 'M1hiUEJIN1M/XjBiUDh5Q2QibylvNylkSypOenR+bCZLL2pnbEVme1hHaXxgdU90VTpjZT9PRig5RHlSKmQ0YV1edk9XRFp7MnVPdFVjR2U/T0YqM1pVa0hmYEAyfnlsSFAiLiE/bU9PIV8lOzs7JFkuRHIrSzx0TXNMcmJwSm1rcD05XyU7OE1VMjlXXTB1Q2M3MEwwLnQqc0U3U0locjJmJlMm'@;
put 'cEomPDgjaHhPdVsyYU11JVdSTXY4JUZUITd1MlBHa0szN35SOkdJXWFMTWE1Yk9PIV9tPChSIihZTmxBdTA3ZjdePjIwWjVic19iPzshO0NfPiNHRHV+Rng1VHhkeixuV2VZMFgzY2NlPzshYywpMWV4cF9QV3s4OnUyUC9Aa3pdRyRHZXFUbVN1cXpoWHR0eTkxXnJ6bHIpe0whYlJvdS5HOEFY'@;
put 'WF84XmAjdktkMFkib1ZTYyN1WjBGKmhvR1B5OmQ2U1ppTUZHa1doJVp1TDwpK2VsQ3BobEtpTEZGSERCMj1mUWNBSkssWGVZMClnY2MpTnJpfWVhRi8rM09IIjdMVFQ4ZXwoflFiTXRVS2l3OFd5QXd3Nl5YKy9jazI2UlFeSE9sIVNKQn0pJEV7SF5De3VFKTw6NXR9TVpAd0p2aXxVfG54Y3N1'@;
put 'YWN3YUVMSFBuNFB2dUU6I0VyUlphMmtALGhFSEYiZjJFPFQrPE8vW2lScUJFLmxTZnpdWWp2bzJ8OXtVemxRWVNxMEVEKlFXXzhZRTNDKiwmS0dOfHt8KTt2XmRdKnFOYGlnQXdjcUR7bmBkRHN1YjNORE1MSF99cmA2U2gvcVU+aCxUZUo/X3JpJmljcTpdR1pzNnBIN052VUZOYllzb31kamI2'@;
put 'Wy9hK1lON151JHlvME4vRjZ+W1BaWXZaYUdtfVMlY2ZaNHV8UDo2d1M3RjJRZylJYXsvZnlzRXowfmBJd1l7Nnl5VixwXjpBdUFLbntaSXsvYUYzSTNsfXJQIUtsMWhvN1FiIyhqXl5xPFlkeS9kKTsodFtfa04pNUZUbmRpNncuZE84eURvMjB6dGtIYUF6OnZYI1tES3VAZGxyaj1BdHRpMCpC'@;
put 'JHk8PGRxNFl3dW8jdk91JTFMY2UkTWxOLj5NeThjYDhsNEx6SSI3YzVSb2RINjFuNmxdYV46RkI+ci5JZGVmdm8jYmNsaEgqSmhKW0tVIilJaXFTTWFNeV12OV9+RGp5aUFDQzJSc099UyNTRjJzZFl1VSUpOTREKl9SSjJ1S2k/ZlovSE9BT1dAOXh3S0xdbWhHdUt0d2MvMiEoWmsjW081JWN2'@;
put 'MElpIXkxTjo3XiwiMHxVQTpybzRDSkVpaSU6fio8MGB0e3xmSm48cmlodm5RQF9edkxBPjw3KHJTS0R7a0V3eXUoNGpZP1NSeHFsSCl7PjMsRzxWRlUqIWV8NWhMWHE8Zm0mbEJqVFN4dUVHO35gU3k9W2E6NmomenpXJi93UXY/dU4uSXxxXm1bQmFpe1JTbTQ6ISl7bUEuSm1MWil4KjMjSFRw'@;
put 'OUR4PFNLUG80NW1sXylQbzp1THReWElBeDxRJC9GWnFVWStaVV1WUiJjKEdgL2BLZHg7ZiVwMTo0WTNCO3ZkZnMzPyNEYWxnKFhfNzhTNUF4UT5hQ0s8THhHR2d0IlgpKHVxQE91NUZ2PzdjcHpTVTssK2Uidms7QlpJdFd4U2dmNVBbKzZESDFFWE8mWl9KLmtrOCk1KX5gZWt2RyoyPkNwUFRk'@;
put 'LkJvRExpdW00QE0kbnIzeTl2L0Iic0pfRmBrI11JUnRsdk0jTUVFT05CZCJvTFhZdix3QX1CIixxU04raDIoPCk7Onp2U3Z5P3tRWjBXSyxGZT9STTh5QiI3QHxSfkI6JGBrQThLRiZQQERWIUhhey9QeTJFeUhFM35+S1AkMTxQaylxWl9kYG8sakVmKHY1Y3B6YnBpa2s4WUAlfmBld3ZVQTUx'@;
put 'Ij4sVTl4K30/dlZBOWYrWlI7ZjJ5OUJ6PX0paDQzMW5yQ3QhY0NxZTZYbWtmWkxQTWFqOUgqZXFGd31AQiJFXTpGOEZIel5uOSN2UkRRPCNCNUBNXVsxLytlQndxfm5JOi5wRWEvW01UYTxUZl5oQTNbQ2F7LzUueEV5SCJgfn5LUFM8LmI2ISRQSFg8VENld1FidlpPJlpyVUVTVDt8fEIiUnUr'@;
put 'WTFDPClCcmZ2IWZjPHhXVWQrWiwvNjF5OUZ6QSJZbEEwWVhDdVlVd0MqQC5JP1daMnd1eHomMmJZSWhKTXp8QXR3bkxmS1UrdVFOfjByLnk2JDh3Y3B6Mm9pa2s4WkAlfkA5Mng3VytVaEZlL3QscG8+WTpaYlgrWmkuZjJ5OUZ6PX0/UVNHOUwiXTY6TWZmMl5oITA+YztJWTAqPU13OV8uR18s'@;
put 'QiJMPUZMaEw1OiZjJkxpUitCanpqVzNKc2kkR2R5aXdRe0kqZHhlT01mLmRAfCloJiM0TGJSaHc8LDc6cFtCImEsVXZKKkwmdiFyMEMzRjskWWldfUReQX0oVUN0WVJNRD1LVyVMOiRMYnFJJksudD5MXzRCem0maCNlTUdsfVJVdz86O3QhZEdhREB+KiFFLiQ6Qj14NkYibGM1di8zZyRyOGly'@;
put 'dSZXKXI+QUdeUjdbYENrZWZoVlZKSzM0b2ppKVVJR11sdTQyNHlleExlMkQhJFQ/WCZ3eSYzWXlVYVkvTm5UOElWQ0BPRTY+ZS4ucDFOaUw3U1F0VSpoPDRxY1Z5Z20qRHtrMil4UCI+fXp4NyhNOWU1RCVfYGt7UjxCRDJrMHo3KE1dQHUvJVQrTy9CJXRuWHVdfGVfTH0xLHtGdkFhZ0JHU0lP'@;
put 'TUVJSFV7Vz4xc2dRU1pZUVRnKFcmJGN3PVhzMndbcTFONUxmfj9ySSN3P3Y9WENoOFhXInR1OkhYT3IqNiJZNHFjcj04ck4/MnVxNHB6QXljTW01XkZQa0NhJUd6WGVPdTdsWFlQfjc+b11qQU1rbklZZEJqKlAsQFo7Q2d2SFt4YDQuSDo2WSJCSk0+SkV3OVheUkt6YlYheG1lJUhHdVpATkpo'@;
put 'SmJgPW4/djxFXktzMG1mXyJtZmA6IiY4R3VvYnoxdDY9ZGxuWlJRaEpzOl9ZaHRDZUdrX0VGZzMoSmZdOmNjYFZ1Y291bFo5InhZVjtvLyM6Ymwiem5YSnRfa0BSWiJlJl02JjpuJXBvNlNSejhaUUJlb1UoNCFpZCo0K3F7dnore2t9LndMZ1V0RkF2PkBZP0g3SEhaLFkhTCN3T0hlKjRSUytf'@;
put 'PXhaR2ReRVcwKHdiSDtMYGpWXVAsITlbQEBARl1pJns+ZnkmQHAldCVOKUlnUnJJd2lUTkF2OT85NDVGQElUS3JId2ZfRV9NJWRzaV1yWERydmxtS3pHTD5hSkt6Rz5FSXhheSp5b3VUZE1iIihkJDtPRDY/ZVdhSk4odHdyJWBtbncwYSZSaFdLayxNPyxoY1lyaStybTJkWDhLKG1HbTxDeyh6'@;
put 'Njx3LDRUYXRobndSUiReOGt6OnhCKFk2aVZhP2IueFtGNTpYWDtoKVRtYT9aOzdJMC9iL0R4Qj4vYnYuNk5GQGkhI0xtLnhaRkYqYlgoNGVNe01uUlhYNzJffTtSeE12UzhjQEJnfEJabjd2YTU+O3RHXlZOKX5eSDkjb0V6bV5SM2NhKklMeTlYZkBZYEp7SnptOEtrSmxwWilnND5ZNSp4SXlj'@;
put 'UVtEMl9II3VFOkBXdyNJIylNaXlhJFAuc3V9NCVaNEdxIm80U0pFYDcjVE99SyxwaFQ7bTZjOU8pajZkcyF1Tl9xN04+RmVFXzxbOVlMeEJUbTZvLlc8RnVMUl9pUmAoLmslZHoyeDFHWjl7VyIpay9SeXZuO01CM2pjMSxXR0cwSTd4JWApay5BMWFUbWtbT2BBZylHbyJbTEUheVR+NGEuRlMm'@;
put 'Z1tReXU0KEJ0alhIZTphRmc1Q3pYbHRfWjo7dVpnKntRJDcjWH5JTzV0dE1sSEEiZXJHe0toY3U7TkxedUkpciNpM1opRHk0OEk3OnoyLC53fihUWDM5RUZ+NEB0X1NHUjp2bDR3OChqMTB6V2Z6NCluXUooSFBDKTpHOFhLWU9aQWdYY1BwUl9hV0t0SDcvRiM9Pi8sLE5PUHBTaEhFM11CPEkw'@;
put 'fCV9SU11ImU+bGQyaHV2K1pWVjh0UH00PTpNeV9TOTEjKWtaSlJuJWEzQ2llU0Z4Tlg2MnNCRigieVFnXiU4TSFLK2gwQ3guZUJATHhHNGEsOiEyV2ZNdE5YTWlYRjpVU05XYG1xeElUSikxTlhvYDooZVArekJQVDUoJEJCP2hiSzBAKHUmZn5YNXpVWTE9JVpuMDBVTmgxIlNZcElVQEtJZzZl'@;
put 'YGZxMFV5JiRCKEZlSlNRPkJ3VWUybXRQcEJkPFFfVzFfNEwza1NkTGlNJFR6fVc2Mjx2e2hHMmtFVnQpV0duOkNCUG5UMC5JUj5jPi8oKmNFe3U/R35kRGE1PkVfbk5GUi9IRklONTBXPzd5cUxLeWlkTltDVjYwa1BUS11vTHt0Ky5HSCRTQU1vZn0wTWJidno3KXlMay5jPEZZTExtWiF1dC5p'@;
put 'dkx7dDRTPXkjVzdWLk9JSWp2NER0Rzo3NDRzRXJiRkpLOjcoQCQ+Pls1NDdgKWIlTEgiYEAvRDNuKTJzTi9VNy9vXWpISjVQRWx0LnchcFgkImFsUXd+MWIvQmAxblhKMUVNJlBULDUkeSIsLDUxUV5YOUJha0NGbV8yMC5XXlZnZ0BnPi9OM1E1e0NTK2Y3UkAufCRLLER8ekxbTkE/P0chNDpd'@;
put 'cTc9Y2tMQkJEUFk/SXpqLFUlYz1DYEBVIT50dnVNNTMwUjNwRi5XY0xlLldQRzAwI2ghQzRvfEU2VmMyWy8sY3VHQSxOfVA3NHEuLitfQU4uPyloZWFMaEVuXkAwNm41SHMiPkA8NFNXJFpjMS8uKiM8VmhGcyI7cmtMQEdBRFo2Rms2SzAyKTcvYHw2dEImL0shK2YmQzQobXouNE9jZFdbRFlq'@;
put 'cXVta0FHP01uPzVkQ2FkOGVlP1t7MHk6JC9CUSYhTH1sbTROKERDWSI6JHlFRSZXZzlMLzIxa1pJWiUxW1B9NFdEY3c+dkt9RE0wLlNEcmp2U2ohIkkwKWJCOTdQQHVgd2puIis1N3Faaz5XclpdQltzKy5SWDdIXXoyUWQ0InApRyI1NHlMazVmLi9WaVFmJDs2eVZbOzpaXS5QfFg4Om0rYmVv'@;
put 'b05MPEFWe0FkY0F4QmY+XnZQQzR3VVlDZFs3ViFTaF9RakxgLytATU10YG9ATX09RSF2WXcyWl9rZGAyTHVWLmh+OkI6IWE4WF1YIiQibU43fEp3Y2IrQVtUWDFOMFNkNDBtPk96akE7VDBHKEwxdkxNSTg3WG13MX06fiY/PV1uaVo9In58R0hVU0pCTX1OX1NvJmFhTU4xJjRQTXRpWld4czk/'@;
put 'VFBhQzZNQkJIIyRaajQ4ayZ7Qz1xV0BMWGtFI05QPVo0d2E0OCM9bWhWPk9sVlEsYTQySzF0emVZWiwsOjVFQk9EN1d1bkpJfkYxUGl9NyxvTUx0e0NsXndZQmRYKXJ0LCNUMDN3T1BoMVoleyhaTiVKazdOQC58dklqSExNVjFddlhmPlB2V0Y0UC5eb1U0PkZOLG9NckxPbGRsQjZFY2h0PWh+'@;
put 'azAoV2NJREpiUmQpdjFvd0B3K2RYNGM5KTJrNyJSNzRNeEM6aSpMRDpUdFJPQkduP2dUPHJIWz1PaGJNOkk2MVtCMUYzY008cjtqcjVndDJra2dHRF4sNypFMV5Wbn4uZyZYOnl5ZHJDMldGbVRIZGBAO0pNdm5SZENDZUNBWSNOOjd1OkRvW1JhRkRmbmJeKDx3dnU5fGQqNGB4RFhkWHUubClg'@;
put 'dFZePEVaNVhjL3NQZFhnM0g/eE1YWCplQzcyNT5jTEY3Ok5YRnkvQjYqKHsrQnZveEIrJjcjXmhuYm9MV29Sc3RYM1cyMzxGemQrYypLPWZhdXFecUxqUGt5PD5sMFMwXiwhdzolWVdBPj0oVTNMNTFiNjEkdkJmUGVaXTxQNzwwRzNVbEdSKkBUWUBIfl1dNDQrYWVHZltDYW5zeFdmOTB5ZUtO'@;
put 'dUZhYVhIS0dpS0VSdC5lYVpJPDd2ai8sTlgsRUg0bntFdy5OfWYyMUlRSilPNkAlQmRQI1hsZ01MelJNQ0g9e0JObjRJTzxDXWM5NHlicVhda001NWx2VCU/dXo0OWUvQyRJIld9RlYwbkp3KWMiVyk4ZXprWFB9OFdDSmQ1RU1IRkZ2PzZlMFsjVGhjYDkuYkRsYXl8a1ZKN2dVTGY/XntpTVJ4'@;
put 'flR9Yz5pYCtROzEhb1JaNFtDNlh4RT9oKWtLXStEblRjaXJDIWsjZGlpTmN8dzZ5QEJtNnh8ckZIdFY3ZD9ocXZQOThIUDNMNkY9TGJlLDd2bkFUKU1obStEIWVWWmczUD9hXWQiREQyUiUsYEF2dTNaIjVdSTl4LmI5WEJ0UiRAQitLeFtESENnTmN7KihhTCszIzJsM0xPdGk3KTNNYzEpTHR0'@;
put 'ZlBmUTt3d0J6Tz9CeE9jUVtpIzFfYUhrSjxVLiR2MiExVSRwLlssZy5vOVQvREF1RzJXIl1JfUtvSjl7UkdxMnRGQj5QZ0Jubi43eklYQlE2ITVRO1RYdlAvR0NXQWVhVUZ2UXQ3eXVIR0tTPzpIbzY4ZDBebFhxRldve3Q+TWo7W1pxNCU7PkNlfFhaTDhtT0NLJVlKWX1PQGhdRUFSJk5DUF5Q'@;
put 'PTEkVHhgQTh9S2haO2t7KylEJUx0ZUBpIUViZFpGe0RCLGNwfW9LXXtDcEYpVzBEJE9fSE9pZjhkUyNGVlY8aUpYa0RSLC5CU3tkS2VDUU9hZEtDcjBGdHUvLDEiJk5YZT89TC8qIU1lMm9hflEkTXUyO2dpYi95cmo/SmVKOm9yRGB5YixtOSREQyE9TixOV3s6aX1Ba0s4QCU7bixTQ3U0S08x'@;
put 'JWZHIUdlJVoubTkyeEtSWGs3cmpIJDVTRkpYaHM+bDdNbW4wKX5yRmRsUis0KiRdZV0qSE00O1ZYWmNldGEvQFFHQ1ElSyRUZDV4NkYpTkBma2tDaXhzVG1adExoLEQhIWoxWXYmQG5zVG1KantYdnY7eTdTYFcoOk8iNGw0Wl06dSphcVpsZDkjXj9DOzk6RStBeUNaKkI1JVBQRzt6K3xWJEwr'@;
put 'e3dDczxXPWdVYW5lNWg3MiFpY0VCRXpLXzhBXldHbG9WKFpUR2xndmppaUlJWHtPRm53QVElWlRnZmxDIzU6YTQycWlUajhZOEBMPXVAPG9XLzFpbl54KDBvbXQ4QEw9emojM2AjQVo4RTNrbUZUSUlvem1tYF9YUHpbfGFsRWliRCVsZSxWJCJ0MUxmK3AqKzoyQV9DKWNDZlE7bXdbTmN3TmN3'@;
put 'NSJFWE5sc2o8MWxYPFd1WURnR1R2alZLQ0JCUFBOW0w9eUNqWWttOUppfV9rIU19RS85ZGI5W3w1JCppQ0F2eUtYdHVXOXlwbUE1PTRSMWJhZTJ9UWcrIzQ0aDk0Vkt6S3xCR0dUVHBiXnZiTHZoOEw+WzR2VDMlZC9NblR4dSJUUGVzaV1BIU9Fd083N3VEXzpdbitIUG83emM/VjI8ZzJnTG5S'@;
put 'Z3Q6YEhQa0hmMjgvMyEuY3FEOj5qeilpN2VfdkNCI20xQGFse1chNC9aXmVeQ2NETyt3U3M0WkgqKE9ObXVLUENOcVNedEcwbzVwSClZS2EoLDhlUE9jY1U1c1N6OjxUYVY+SD92W0lRdlkwOzpidm9COVlzQWRTd3FtITBjSlJCM11AWTR2KFo7QmxDWjZ8Z2lwTHJ1a0UuTFJ2MldBQUFBQUF+'@;
put 'bGdBRU1RYXU1WzV4RCZJaW9uOVcoPndrcy99Yzs4Tnk0OSo0PV42UiE8dSFTaEZ0Ul5AaHF6KFl+I043PHxObEJGIXoibVk3bjYxa3BYd0h4QFY7ZE91dzJlKThMMU1GUj1zeSNoYShfNTQjV3BkUUplQjsrWWYyfUo6MEpuK3hmVENlX2BNbVslMldKRTREUVJKfEV2fS4sajlYZGU+KWhSQlFA'@;
put 'ZHlkWCZPXUs1fj9tc0pRUHM/VkY/OExfT3lraShhZk5LPmw8aXVGLC82KjZiI0RnJUJ6c04pT15HaWY5dz9fa0VvZSleaCExRSVTenwuZjRdXj1GPiYlflZdNXNXPitgIj9SITghcTJFMD10dDViZDdtK0V4LkA/aT1LLG1ZRC8vU1NGRFYuS0NRTXl1alpzc34zby8vSzpHQjhzSV5SPFJHWXNW'@;
put 'bGo6VT5WWXMmYXo5KzokYyttXXVwcllHNExHbnNse1B1d3ZVPWVHam50SlhAb3JGZV54Pnx3YDplKEZTJCtkd1NZcjphTXBTNFk+QkVVSnZ8NWJ1aldwYlU1aDMoU3JOT00xL1RWSkMzSSF+ZXc/X3ApbUB8Km1PelR0bDE+cVVwc0Z1Y2lVQlU5NEI8M05Ab2FKK20oMW8mLFFXfTZwQ3cvNlsj'@;
put 'azBuWGFsKHIkSkBkWjtvXyNvUSx1fnR7YmVJRyllKFovQCJbRzJCWVQ7diVoMiZtXkZBSE5mRWR0Vm1nSHpTUn1WVnQiPGw1K20yTzV8dy9ifSh+cEVAUX4sdEJ1di9AXnEsfURhT2ZdL1twRlQlb1E3bEhLS1RRWXpoMH5LVnRpVSZJe0VpYlViYT9qV294UjZmPDJ4Imh1eUlgSSM7SVRmVnp+'@;
put 'aER0Km90VV1fQSxOZH52OHI7L1hnLnpOPXAuQWBETXUzcm59LlArRGl5MjRbX29bfW9GeVtPRSxfc25LU2l0bnM6NlAwRGdlPmBzV2hfNzo1ZGFXQ1UrRmApTCsoP0JMJVIrO2JkczNdOXNlJTZPZ0J7ciNCRTdfP29HdWk9bnVVaEReNmkjU3EmW2Z5bn1vT0J1RWFhOzk8a0lGcnlHaGRWW0ZL'@;
put 'bVVUbFk0Nk5zPERNdWp3U1pdI2pvNzRxMiRRQExTYnBUOElGWHlpPHgpIXVQLlBkQHdfSm17fTIpX2BgP29YRUY3KkNzbitVcWM6bGhgXkIjfnh0ZUshOSghUyxzKFNYX3F6NCZ+VG53JClBXl5qXmB8TWJnTjNFek4jXmd4SlJAN29bcSo7KnIwRWtkS3hkZiF9KUE0JTIvP3F5Tkh+Xk9bXkNl'@;
put 'cT1kdyMzOGRZNiFNQzpsOSZWMGdifmowOltySG1Rd2J6WjJ5blN6NXR1Xlt9O3kwTnpKRXl6LFNsRC5OeDpqNjg2X15Yc0I5QndrYjxUO2RpTjVqRCRnc0Z0JDhUMC9ieW5lTW5IOHk5KWR+SStPbU5nU0J8U1tNXz5WOVp3PUo1KH0hJHk6TFNHTHJbWn09KzszPTxDI1JSaWRSXlN+IyQmeHZk'@;
put 'IUg0TEl9TD9LMj84QlVzbzNQRVZ3fClwPncjYiUqSmFAVEIkdDpXeW8pLjoyeX1yMlBsN3JyNk9TaXB8Sk9TYl0hUm1VVkY3RDR8U0d6Um19NzQ5anNATTJFcSZbTVNMJXxQJnEwakdGLmxANlFJajc0XT56S3FIPmkmKFl0KVEldCtre0k6RyxEJH5nPVIqLmlgJiZUZ0kkdDZhSmopbzJFRHlp'@;
put 'XSU0QHBtKXt5PX5lakdgVGdCT2JON1lYR2gjRXdTQFpLbml0WUw5WHVdNFltTEteK317RC8qfmgpSiptcUpbR3Nya2Q/bXhBSV8xLmJGUzo9JXp2WCp+dF46QDhTY1dOcVJHdzl3dEhmMUtCTzleMG5lO0EsViV+WiE7SDd5YX5aIW0ufTZNQ1dhZVkwYDttYDJIbDVpZWFCY0RIciF1ei90dTNG'@;
put 'WUV4a2V6OnJzJk9rKGxmbHI3KHZRcVRvK0JZKWcmUl1jTUwoZzhqSURWeyg7ITxINlM8PG4memtTSiQwISlqZS8lUiZpTn07V0R2T2tVW0ovdiVJbDUsL2JQKi5qUG1JcmU6Tmd3W189YFhaX2A+Nl5CdUVhW3t8Xmd1RW5OJFheKEQ9eSZoIzwzR1YrXXRGRyt6VGkuI1ltckFXcykoeD5RM1JG'@;
put 'XUlqXzJBJHt0cVhdTnhlLyQ6c19rUHk2LEt7cjc/MjE7eF5sdHhodEI/W1shempfbTdGYGcqQyE1RnByej87XjxBX1gxODZMKDoucEdCVUJgQ2ZXOUlbTjt5OzEhPXRhci94eT8pMWlXWU83MCJqO0QhfVtXIz5VUz47fExveUk+aH4/MiU3MyU3UEJUW0RUYj1hb1ZybFBtQ20mQHwkZ1leYWwr'@;
put 'eTImOTswMFRYOyVnRlpEKEptdCxKfjZycWdeaW14PzBFOXpHXiNETzFKcTFxJTFmMDcpZG5jXnF5S31TTXRSIntCPDAjaTZNZj14LCM4NTRgKEM1V3RZbHkvTTk+cjJEMTIpXlVmb0piL0ZKMD5uQDtnWSNWb2tkM19sX3FAMFR0eSx2QT8rJChDLiUkcnFQcCU6QkwxZyh0PUgocls6SWp3OTci'@;
put 'NT5lI2g7WVF3ZktVTyx7YSl2QC54fnZQO184UXJgUT5TWXBSIjNGTVguOGZwSl19PkBIVUN0WjJBQyZMXlZEfDpManJiWHhCLD9benQ5cmBFfl5MR09CSD9GWH5bLiR6U1Mwe1MzekdrViJ5KHhTNG0mQC5XOi44TypnOE0wIzBVMjAwS3x0JllOVXxsQWFDYGQhTSw9c181bUN+cT9oW1pgUGx7'@;
put 'cXQlQCZkUlcuNWNna1YoYSk1OWw+N2pQfU9OSSxmbDdvR2J0SE5TPyoscmRMbEJSa09IU1N1cjVFbCgsbE0raDghem4xJDRuSnw6WiEpYyRLczNhYkt3OlJGajRxSTJJdSwiZW9kU0w4PkpzOG99fnVKQHpZbGcrKm04WiNrJHR1ZG5iQX1HYGEudHBzKzhpYiM2dChJQSElWzhuRF56Ui88KU9K'@;
put 'Six2V3xNJT9NbjR6OGd5TWRpMTFGT24hOGk2eWhGRmAoLCpNaW1PJCN+UGVROChoUGVAdTE2NTQxKmNtbUsxaFpDRTlUYzdmcyo7Nlg2YXJhVWJxdmBvWz9aKGRLWClgUiNIcWUqTC4sfCVmSDNdRSx0bX1ZWiVgQCh+YkAxL3Eje3lpZHtFSS51OmwxXTtLViR1Z1FIUy5qbXdFMWtIQFV8WHEj'@;
put 'YVBwLEtWS0NvKzY5R0FnLkFdTEgremxtJjchMSUqe1J+QDV8IWE0WG1nN10sO0hbYWs0YEA1KEZWXkJlKyFhOEBFSjUwRl4vWHNjTk12NC9iR1hOOWUyRGQxXTYjW1Yxajg6MjN3cE81LyEpfEx6bWRaPjNzUU4vLyNIN2pXX3ohUmZSSEJHbWZaUTQ2UExmaGJ1em87YHwxT3dVZXpidz1Gfilw'@;
put 'ZCgmYSV+LEl8JiMlc0wxQ3prdkE6PzFJSnhEbiEuVko0I1ZdW1swO21LVUNLWF4/RWxETnw/LnZHNW5dNHAvLCtsOHozZ2BCaHZgVXlIdEhoZXZoVmpgI09MZD4xLEAiLnlzNiQuNSU1K1RkNjVvNylyK3wyPDwsXkgqO1VPLkE3M11HQ0VZSi9AOlFAd09wUXlmXmUiW2RQWk5vX2R6QH0wZm4i'@;
put 'Ok9vd20ibC9GfWJ6Tjg/O3JWaFliYjV2PmhlK0RtP25LMiZURXF8am4rbFMyfi5EWVZ+YHovXl8mOlFJZ2ZjNCI1Yz5mcTM5ZVJbLiZtenE3VCF7XlpiS0xCODBBSXh5VHJdOihvN15lNkpSWk43XmN3SykvXi5va19bKWNOcD8rTFV5cUx8Iyh0dVROaTs1bClHP2xYa2x1JSR8Um13LyxYakAl'@;
put 'MGpzVmY1UzFbWHMsRj8/S0VRbmxAK3RqXVNbQC9zZlU7Vl8hcTYsSz1JOXl+eGd4fWk9fUBwN3w+fFNaWk9SWHJPZzcrbk9efnpjYUVDZ3Q4R1d3S3ZwXz5FcXAkO1speWhMb2BeM2ROVm8yVj92QGtvI3JnXk00PlYwZUdZNUJMTEciempZNUpzW31ZTDh8azxwO2o0ZlV8anRKPDc8KCk1WjVC'@;
put 'fWl1cGEofTVALjM/YjBnQmRAe2MyfnZzKzwsVTcme0VtUWFWY0NxUmEwK0YlVzcyPE0zYEpkVn5UNyUxSnZOdnIqY1dYeUxaR05AaiVuUjBaNU40fjN2fG94ayolI1orQUdUcWQmIm5NLEtPKSk2SEJncUJRQyh3KG1tN3Y3UW9ac3FJUXFnQ0UhPGQyfWRYfDFKLDdnU29XLCs8aWZEeU9VT1gr'@;
put 'cis0WkpsZWw0IUI7MDZCXVIzbVkycG9Gb1tqViFNUGh4dUR0eHFSSHx2O0lYPEpZTy5LNm5XWEdHJE0mc1RifWI3QlQ0TU1QdCVhcHMuRlR+RW4wTUpdMDZfd1Y/Wi9ZO3MrRlhBQX59ZkRifXxzSTVbe0phI1dIMSNUMTRHODVZOUsmdlJUZzB5WlNxQFBBeSVoPFF1SHsyIVFKQm0zbXloRyNT'@;
put 'UEN+ejs2OCtKdDZKT2pyTkBQNnMrK0ZLOmo0KmhmUUI+UFY+UlFwTUx2emhZTmxzej1ARH1EOXg6SG1SYD50LDZjO3pQdVUhNWFoaXF0QWFjYGoyc25OQjU5aGprWjB6MVQlakNYc2lta2lEaEApQy52KlJKIlc6SjNeJVhRISQhXXVtSFRsM01tKkY+Zk5lLHs2dVJRVyEwT0IyRlNvd3E1Q2dH'@;
put 'RVBwTmJfRkFqZSRCUj4jS3BibSxPPEsxLCJJJTleYnszSCtUYHpjMUBbek8kIXlrVUJNMWEsU05wRj86ZDBxZmlpaHFQWzFpfCRrOldMTjUzODMxNCYhdVkwKStgNHBQSn4lQGJpLmF5Xl1aLltQU3xkLltyIlkiZnpQcV1yeGtBcChxX05jVGFtRTE8UkFhN3ppaHYhK24pOzkhbmJOe35xTzV9'@;
put 'Xix4X1leKEtMTzhsPHgsPFhDQncsJXkxRi9sQHg3ND1RRSRjTWNOTTpLRi85TmR1LEkvei41XWl5JmlCM3J6RVZ5JU18Z1BzOH48bFg3OHJxLjdBZFQ4JF11VDY4WzIwbEJpSn00alQpJngveVR5Y2NwPFp4L2tMIVE0eFhEeiV7Pn5pVz1LNXlxaGYrQzhhKyZ4M0IpakY3IWdaZWszT0hTcFpg'@;
put 'JFZ6Kiw+NXwyVmZJRn1ZMEJ6V2hPP1UuTVg9PnJaZmlMd3t7Ly9XP28lLkUrfEl7eyRrO1NSX3pnPGpoUDxLS2hkMjh1TDQ0Mn1sUiVeaUxfUCokPyE1MTE3W1dqZV9GdWpyMGxUfSRfP1kmIV5zOHtOfEROT3hTKjdUNE4jcV11Mk5tMjkrNlZLRWgsMlhSKGQ8LzBhMnN0eFRIdHApeCY/PiFu'@;
put 'PSlJYDt8TnQ5KURMa3QyTWQubFYqdSM1Qik2YD1tfXJpTSFFe3NycTYpVHNgREhQcUtsZk95ajhZc19hM0kxe3hJbGxMdnlKbDwubTkwcjJGLzYhImRpbXU0ZFooNUIhJVEmMD01T0BZVSJiX2Q6dFVQIm5ZZHNSXlhrVTdJX24kP2RCPFk0ajt2RW18TzBuIlk/OTYwWkNyT2RiPGlDVWRXbDpW'@;
put 'Xn5YOzpsL316UXRlT1U3LCRDRGd0cnYiVkgpezspelZWY1FhWixrW0JpZXlhZSFkYjhqdWNDVE9MNnVYW2d7KzdMR2lwXiNKTiVKJGhuUzFyVyRJXSVbcSgzNms+Qi93RDZHMDZwQy4peT1ZPj5lPEMqVjhaYVk3eT41WEh7dldxc0Zsc3ZScnZRM30qcU9yXTgpMlBKIVc7S20xe0MqK2JFeC82'@;
put 'Vz1BbDU2azI8Zkp6e15wYyorbmRhUypNYF9hfkRpImJQWENibH15TH1SWzYkOEEhNSlySCJoTHtrdyVoKXgybGAmKzx0fHFUPFZmYihgW1QqeytjSD4vKD9mMFZrR2ROa305OWdMS1JWPisjYzk2MH5jNmhVbj5OOWRYcTl7Rk9scjwpfSIuPlVJai5DZnVUYGIhWVAzODpLWjRPNVZHZjNNWz50'@;
put 'X2hTQCk4SEQuOnkoVyN2d09vPlJwJn5fNX1TYn0hTUZEIWEjI2BjSUswTmQ9X19ydSU3ODMqdTR8bVtVNnJHYSlJTFszQj9Vd2koVnZfPEo8M0RnJVFyZU9aLkxHRlUlZG4lKixJUVZ4SzA9X110MXIiRVJ7S0UqK10wZXwkX1tHbj1zTUZqLztjNEZyTl1hIVBCSFhtM3VeQHlETkdmLnZBMGJp'@;
put 'YV5DP21VcWxAPlIxb0RTNnElcEczU0c+KlJheUk5e2V6KHp7SEBtRX0wUSR6ZTN5Zz0zXWY+ND09PENzR2FQYCsjW1hiMXY8XT92XktILGYsI3dDPGA5OXt3cFswdFE2Klp9NzZCU0wsczNpSzdjOSxWLmtrdXhsOTRdczRZdDxvMiRRUT09Imw2azNHQiNYaE0uJU9OSmh3R2J9Xy9WXTleOVNQ'@;
put 'dFt8dnpOfGNmU2dCRC82Sy46QT1FMFJxVyYwP1VndGNJbj5JXjN9e0l8c2cidC9rZD1XLnZgO3goNkErKmZSJixAQE5RRzg3azA0aig2V2NXYzZTZHRDKn51Sn1nIlAxejl4PnY5Q2ZialYoNCZSc10hZW5+V09wYGI0TV9lTHZPZVl1cyI4Wkl+RzZNY3ZLbDpZZGNLfGopWVtfbTJSVXU4Ykcy'@;
put 'QS85N0pEXlRRdDtJXTNdIztNL2l+aWJuaX5fdzpEXjw4fHIjeFcrLlJgNktxS3g9RH4uO146VVNjZG17WUFDWCZjUFFgeDM3MjZ8XiopMipZemZHO3hWbTN0YWc5ezQySzhrQm4oLG91OXp9Nz04Syt+PzI0OXtgenQsPm5pJTRdIyNbI1RsZWY1bUlRVzp7WHRiU2Z6fk9ZQiopTCZSQTtWeV5K'@;
put 'KW9yYUxCSEZMKUNtPDF+XjNMNXosWk5sPF97OFp3QTF+YF88WXxnNltZRkYyWjZidHlkc1tsKCZVR3tQJURya1t9OyFuY0JVPmhFcXsmRCE1ZDlsMW9ldH0vSVZMIz51VloqaXg1TX5oW0pgU3dFKXFjIndmeGRdWEkuSipseD9RdT43NVlfWkldUD9FKkN7W1ZrVkZLd3RSM3QyVFlhREpvNFou'@;
put 'bW4kY0NQJVs+RURmbE1iYTIiakw0RUU8LlRBUnUrJXQqbFA1RWc+ci5WLHltcE5BUWduU141ZU19eCVgRDxYYnQ+ZjwhXzNfNEMjal1qU2kmWWU2NX03NlFzYlZHVmk6YVNZRn5bZzNZT3tIVl5tb3QzWCY+Kk45V0JwKkklOFQ5PjZqalhASkkuYkR9TDQqVU9yRUs1YFhCb1JyWktVU2piKEEy'@;
put 'V11LPTV4cyY8d09WMDUzcjg1eFBtTlpBbkswJTNjK3VPRTJUNllpPnpiP3wpcTQlOGRwRVVZMkplKmc0PSEjTTwlX1Z0WzVyT1c7cyM8TVk8M0tAQDpLRmJecjhKLll+eiFrcXUwK2NZIW0peClLSy5fZn4hUigmWHJJJTw7YDNVMnBJbyIscV54eHIhdyRVIzltOzxCS1E0YD9TcTN5Z3V0UDRC'@;
put 'aGtWUHRAS2A1VGxJeGtnYzxdKDpOd0JgNE9DOnMlZUtiRD4mXXNUKHtaJkxMb3YoRkhOTiRRPlU8cyRsPHpidXhJTzB3X08mIkw4e24iLExoYWlIWndffmlNPi8ha2cvfURGajNDRzgqMGN+X1d8SzgzM1d0SUl7RXpUeTNsbypnKzg/ODdNL0g/aHhiZlFWSmwwWCZZYyNeSjNzVVMlTC95fCFC'@;
put 'cSYxY2xjVn1nPXlpcndHVWRXN3ohTkJJMVJPfWxyfTYqTCFMPiJJWEwzRnRkPD53Yi9sNn5aOC9EQ01EbEBCK3pGZmQ4V2NSWm57dCsySzNgS3Z+NjA4X0lPQmRgMHd5aHxqWVQvUy4lXWlfZ2o9ZDg2SD5iJjY8dVgsPUJkYj4+OGN5VjFTJEB+JWJLOSNkRltVV2tiOTNWfGI5QXlrP2o4SCh0'@;
put 'eUtIODVEdH1tJl5vU1BWZDVoS3lPXiIvMnRsKSVvaTVkZ3ZiW2hDdCFXK2Fqbl5SQkdJUldpRGV1LmUzSHtkUmVhLi8hWjpQOGpAYVloJUFudTdoeCk6TE47WVhtIVosWyhVenQoKzU6U1lZSncjd0J9cSk7KFU4Z15OfGx5KmtVOmI7OH5MS0JqbmVqTTRCWmdmczckR0dOcTBfLDdtT0orPWww'@;
put 'ZldqOGE3cnk/aG50bipaeGAlbkxSQiZkTzBCPHxRK1ZiW0t2MiRaTnp3KHI1Pkk7dUIjJDFuQ0ZhVGx4RnJ5VCpFVzkkdVd0PlZeIyRvUDJraHdWNEhAR0AvUHNNdDU1LD1DdUowMj97SVA0S2dDKyRNeGRJUXNBfUUzUDBiVUkoJH1+WzlzdXpPa1I4flQ3MURZcmNQeUEmTVIkS0RgPUlYXWlL'@;
put 'VyVWQTY2VXVHQzA3KFZPaDdVfms9Zj13JT17V2cjL3hOKkdNezoqTHZlQ3NgQkFAUXRWRU9HYEQzZmhIa1lOSnxGdSlaTGxJUCRYfTJoPjdqb3Y+KkA1ND5qMChHLn5rJnRBR0kkUDR3JE4hSUtEPm9lO18mc1soO2YvSW5CRXhtUmdNJE9JYiZwJldRSUk1biMreU9HTkZ0SF9hXlokPWF1dXRo'@;
put 'ZWd6eGgoUXAqPnpFMXp1ZmdjamBeYlBTYjxCUzJbTC5UKTVsQ31bJilgT3FhbnAkY008ZT9tWn5wP3I0fXRJa2p9aiZTUnZNTjoxRHJXJkc3NEBvan1yL21kL11kSUJiekFTQW94ekdZZ25XbDkmI0ZgV3Vib3Z8T3oqVn1+NX11ZTMzOSM5UlMqSTc5aiUseUJ8SGVRZjxtfTREWX1PXmc/cjdL'@;
put 'eD9XKnBJQEpFSGt6WzxsWH1CaTE3M2VmTGI6cEE1LF8pdmRJP0ExcWJFbW1ldVs0OCJpdi9ETC5keCQ+VDZLZXxdR1Q8JjN6NlliJSYhM3M4QmspQCQvRTdTenVHMzZbQEx3L11MOWBqJS9+VDlVWGlhX0dLNllHMUs+ZUhfQlU6d2ZEZ3ZjMSJ5QnBIbSp+TUhwIk14anVtaH5ZMjRmUlFvIS9l'@;
put 'ZXI7PlBsdWY7Kl4pUEAhIylUb2Z8W2ZfMTZBeSRGbUBdRjglQnpwVXs0QjFgTXs0JTkhKDhdQk4pTTRKTk1fbWpqRCVhN2BxWTBMcVAhZCowQ19makRPYHhofmdJJmk4IXhPb3tNO1Z4dCp0bGFDbElSODxHTDkiWSZWaW12WSozJk9xVVNCfTN3U3FUTk04ZVl8bTUwRFRJUF9KInklUTtDQnI4'@;
put 'QWh0czZZRj15TFIqIXkxQio+RXAmUkVhRFF+Ln54S0dHdExEWygrPyVJWikhSmNeVTI1fGtYNXQpfi5XWEVAK3xDSGVDdDZCImAza29RZkleYWRQNG5PczdUM1hkODV6TDxaeWltUT5DWyNGdkZnXTtxcUx6M0hrUnR+UyFXO29uRDUvZylRVj8rOVoiaXQ3TmUjWkJTd242a2hOWnU1YGR3cTVI'@;
put 'KSVkU1RGYHJXNV9nPmRUOCouJXZBdHQwelVfdmFpJDU8KDNfPGtXQy5ZZl1oPlQlbkV1Q2ZEJjxDSnBDMWJ1dEtIKDJGbTg7UXRRWWVQNmNiY1UzJXIkRVFsXl1gSk1uUEhqU0pWN3txY2RJQWAqaChgPV05Xkpfcn5uTDB9bWlFVStrOmx3PGkqVUVPY31Eay5ZWU1FQytKdSNjLksmd2s0ZzVZ'@;
put 'bC5HKyQoYCliNXZ8YGBmQ3laZ2dTNmhbdTltVHUwa0YuPGdTbmUjOWB0bVt1SkovJjZTXz9hOiFSP3BlQyRRLCwre040QUBFd2dpWFByJEtXV29FIXRaPn44bkkyeVZ8TThzWEEhVnBQWD1VN0JPaWU0WnQxZDc5VkpudiIkKz1Rdz1YIWh5blR0XVpGRDJiXjgxQDVlTDtvQXdlOVtwdWVOY0R6'@;
put 'c3E2PWViVE46cm5+NWFLWX1yQ1pZZk5pVlpvMWRjP15CaiU9emJ3UzI1LCN2P0ZVPSlFMnwoZ303SkJBMEw5aUhTREBvKyhnS1Y1RUpLbnVGXiQ1NTN7Uz0kblcqd3UsLi9ncixRKzIjdy51RlN9RiVgbXtVMlQ9fUo/cjBaXihPUiQvSFNvP153WngoUmBbSUNXL31KKXBleHVwTzc9Pmh7MnhM'@;
put 'ei49M2NrVDdWW11IXXB0dWZjRTxLMyY6QjU1MX5pYjNeZERCPXplTXBULiNgWkBudHE3d3IyMEs1fnNvd2tzITo+Nl8hb1ooRiU7XlQyY1l9PjVyTzNBb2g4R3pJcE5wWTVUVVZod0pZRU1TTn5MSm1hZDROazo8YytDRHM0YjdWd2FFIl5PK3pORVMma1J+MGFvJk17ekNxdGQxRH1WMDdobThO'@;
put 'bDJyPS4+NHsmNXNrRVE4MDh3e0A+bj5eVXlzRkM6JmpgK1A4a3xLWl8iVWFWbW1uKTB5Qi91dyV6WXFWNkU0M0heeGxPQ059QVdhYitzdWQ/UCI4LCg0N19FekomWSo2Mjp0Tzwsc0Yob1NHd2h4Knc8W2lAJDEuZjtDcm1QamxAPCZUaEZ9V3Z2NV9xbCI2XTdYe1M4PFghSnF7Q1ksPFRrVTMj'@;
put 'YmEidnpILkRldHxpZENSOWpsN25XSWJhLzBEMXA3I3F1W1tJcUpNOGApaykkR0g8blpHSHdUYz9MPEc/LDF3bV9KOmRiRTRxcmdgLn1LVC5xJWJwSjtmdjZJL11gYDclPFQ9TUtZPyRpLzs6KHF7KHh7UkVLW3hnY0xYfiFGV0tfTEpkcDFyfT50ITpnUCl2JXF6YjRYeE1+a0hMNGdXJEcoPGAw'@;
put 'TFAlW0c+blY4VkB6JU48TlhdbG5hTTxDNyJ4Szw2OFU/V0Qkckd3b1pIZ3N8Z2xEUFdpUlgiKEBfVUA7NUBycypoVCU1RzBfWys9K0lrQD9wQko/Qy5ES1d6cWZOQktVMFA0S3VqUzxZcG04WEpidHU/KDdqQjxgcW9YPDpYbSNyRVs+MmNCLGZtSmEjVUkmRjkjKmE3Kn54Kn5NMWM7SzghYWYu'@;
put 'JHQiel1WTDVQQD9wYUN8VVpUdj55Z09IVlF9dEV6Y2wrQyVxKDYjMmRpIi5aU2AvSGYpajIpd1ZMakNNIyJ+dWJMZHRIRk1SLyhhaytUQX1dUnxiYzpxMHxXUmt2SS5rMiNaaDZwcX16X1RkU2EkSXg/cSklentpWiw3fnMsM2YqSnQ7b3wjZF0jLmxSIlFMWUBdVXp3eVQrWDN+cU48LntiR19z'@;
put 'dTU7S2pzQ0VrMVEzbXR0RXRGfGl8d2w+M0N0KyohKHQ2NUJgNiQjNn1JQHo4eDorfkk7V0FJe14laWM5N25kXmlMZn19Y1F9dzAxamlyMHM+Z2hSY1lXe31OLEMmR0dwKDdCN3ZAeiUuPWQsZEd6IyRZRX5EfChyfVZOeGFzPyV9RkxbaEM/PU9NRHU4YGJQVypfUixBdFooeDZRfTo4RjouM1tH'@;
put 'ZntaZXlqKE9aLlAueVB+ND9+LC5TTnMie3NVS21sOCVCQXR+WldGbU04W0M/PHl4cmU7OT8qemsqVVNxPU9xWn1LcFVrPWhhKmVbRkFWamJbSFRPOFc+aTBKTDVsSClKVjxDfnFhNTB0UTF4P0dBJW5NQEZFZCt1clNKISlfW2FiYzRLKH0saUdFbHZxYCwmL3kjUkB0blJTOnk5SnxVdCVYV1tp'@;
put 'WDkvX0tEOSt8R018T0xiNEBaPlFgd2dgXSZOZ0UuayJ4SltoPGd6fW9xR3g1N2MlakVEZlBDWzhCWnQiQUsoclVVIiswQ20kNC9XaUo/c113I1JRbU59TlBATzpOYUZnUC9rSzI7ZmRaPjQhPUBmcntPVnMyWFNfWm9NX0c/a25JalBEVSkmMVtNJn14WzNjKHZtL1pBJFdiblZtUFR2MWJrM19K'@;
put 'e04xLGF3UXttKiwhX29fUGR1Zn1ucWxAJSYrSV01bCVxOjZWPTwxXXl+eEsmZ1E1cTliY3c8QUJXKC91Q3UwWkJ0NDdRRC9te05xdFdCN2trKnUqKVZLMHtzMWR1b2l0U2kvQHBOV3o3U21wODhecCFOIzo6dX1RQjFqNCMjMH1UYiJLOmVfPmt4LFhoenY3ckl+cGo5QlhLWV0rOTRbJF1xOVRh'@;
put 'aSFUMlFocSRicWQiUEAmbUMqfnJQeFs9K1RLdzxnWH1sYzRBN2V3e3lYa1RZZiUjIyJwVFJ7OW0/LFhIeH1QXmZnKiY8c2hgSH40dWJxO0dvLztdTiYjQ0o2X1pxTFQ/a34+VFRjKUUwTWgjLmRwJk9KO0t9IkhsTnsvQXZiMiZIVn5NWWIuQWB2bFVrOXl1Y3wkLHw8UD8lIkB6OGxUZENXa2Jz'@;
put 'KHxPZSYwfVdtKyxhZ0tlcEZbd251RD1SXntYQFVjSkxZOFswd2dAQ2ooaGpXR3ojKSRLZ3E/U0Z3P3d4fTEzKCp0YWwwNUZLJCx1X1tDWDttXWM/fTFUdnpeLnZWUmxZcWp5cHk2R0Z0aEZFVTlTSlNuMVkqaFBHJDhEc0smPWhhKlM/L1hTYHhwWGRiZkhuWzg1akVxYm1Fa2Y9Z3ohWENbaXUp'@;
put 'L1U+bFd+XXgofXdvKFpjI358OEFQUy9mdEN3Tk9rfGJ7fUtYXiM2c0JPOis3c31+c2tUIj5Scj55TiNHTlUhcUB4eHNQOGZxTmskOHh+RzgiRC5XS15hSU0lakYmclUvYlBEW3ZqSzAzRnd1blRwQz8vVntIYDBRL0MzPDg/YzN9YWRNLDFfK3pvaS5UcGlAZ3BdWHkmYGxOQUY1bEJ1KExyJitn'@;
put 'cld8SksyQ3d7bCIvTWBVaiQ+Uk93RShlaV8sX1RBRXd6Ky9NRyVJJH0mOT9FNE0me1k6Vmt9WWF8UElAJUVteVkjWU9PMHtjPFFFWHcjQWskOW87aCFVd1Zaa3g+JiVeOzkhOlhsMF9XeU9OcDc5eEFIKF4vNVBsI25IYU1dVWJnL092UEpEIThyelBKVSUhVk0mPWhHeVpzRTNqRDNdPlNZdENn'@;
put 'KEl6TFZDcDRjQXE7OEJUTXUhYmpJSEhydTw5XjRKdUFAPW8xZnZtVkpxY0JWZC50XjhVTSxLcj41dUBnJHN2czIvTWk6X2gqKiYuVmYrQmNncCYpfStbbSVwcUx6dDxlRlpNITNbY2J4aWBxLCwhK2JlUlZ7Y2Y4UCJMUCtYXz5CMFhSXX1dR1V5WGEqfTk5aXNbLDhhTEdKPilgOlhLJmBQVE9G'@;
put 'P3tRMzJ3dz0hSEpxdm1lL3A4NWtZPDEwYF0zdX45XS89JVhSJEVVTi4yWm4yM3ExaXNhdEt8VCkkVyx3JiJRaTFMZyFtWnN0TFFvTUglKTJVQyMhPiYxbjcubn0sRS9jKngqYk1PenNnZDYrXTxxbUUsSCMwbURSLjZUZ0Q8TFdCeys5Mks9WXdfbUosY3VWXSxCSn5bblBRb1M7TjpXM0sxMT4v'@;
put 'czxVSTdGX0IkflB7TTc1LypHOj4vSnIvVFVNbzhfZ3cpOTx9ckwlUmVReHhQMDg/Y0RudjV3WX5WIUJNalIqZz49Wmp1aT5GfldHKWpiUXhiUjE5Tjc3P25uelhoeEppOVhZQVlVNi5kOmtJcDptMnxXcD5vMDpFO1FESXkiX2FVbkkpTmVrZXA9UzI4U2xmdHA6VyRJfTEmSWc/WGpUXkRbY1hf'@;
put 'NVImI1t3Y01jUyVzKkBQTzQwPX13RztXJFRLISppQ35oTE9HVWw3bTN7WSEuPGYyNGt9PS5Hfj8vZ3Nud2cuXz08JHNPdSRIInUzSGEvInN4NzZuMTdAcjZpdDZ6SzhZIWsiRXFlQjdALkltcHRoXmZAb0xPYl59RltCYDV1QDVGdz9BVE04Qio7JVcyYDAzcV1KOm5vKz4vPUtkfTs9T2phSjd1'@;
put 'UGE5SipfJSlvME43Z29WUzYjJHJbcT17bTFjeWlyJUhiTzBMM1U4RFMvckM6MzZxL1tgRToyejNMUUQ7OjVsOns3UTFtbGY7e300fD9pIVQ+dn59cU49R2M+SCJdMGo4KGorVFdRfG5zO05yWnppazpidiUrayMqbElHK3EjN3s5QEplNGBpQnBaYy9xcC5OYmU5XWQ8NCRTRXNAflc/V1lVbEov'@;
put 'LGZVJGlNYkwqPCZoI3lwdj8pQkZJQCw7Tlg+bl1qZUxvY3UkeG12R19Re0s9SlYmXit+WDE6KUBpd2NaYXQ2RXtjY05PQUE8TTFbNmJMM20lKUhZcjRDcjJkSG9kKnkrKlEoSWs3ZzwxNEBdakQ2JWR2XnxiUHh4UDZFKi5uV2szKlNDfU82M3VQeXNNOUAhTVg/VG1TPVZNXnNLUzE5XngyZTJD'@;
put 'SVlvYyV8RWtHYD8uMnE2THw9UHZEVmssYGtJYlhzWUN+NEJ5dT47fSl7dkVPOHk9TlssIz9mfFl5W3ZyZHckSVtLPmIkTUZ+bihNez9NO1c4KTZ2I2tuNX1RPT5TeVpWeWNzPT5BXm5pPXtGRik4M1s/NUk5SkkzY11PXSNGQSIqVntrcT5FNjUyMGF1RTlsaHhfZGRweXdhbT4mRnJiKGtUb1N0'@;
put 'NUk7Ql1MUDtXZyRLLDVMQWUrPlE0RzBGInEoP05ZfSFVXn5HTXk4QSx4SjlEeEZPd0lVI0R1Kyl6KSRAT2VDVFRvZkwxXV9JMGw8Lyp7c2JlKG9sTl5gaitIPGlEMH5vMntzfU5WSE0xcCw3PEZEb2YqfXBTWkA0XWR5OWk7UEFtaWBuX15ULHImXUtreHlaYChHUi8rI3YsVFgvR3JPank2RHxu'@;
put 'fSZLYURgWGFwMTRYYnFkYzAja3dqc2BJVCZzXzM/SHF4cmw8bWQsQyFRa2xGIXM5VW8kY01dQC86ZmVARCRYYENZcWdFbkJpd2FDSE5NSS8qWmFwTi8/eVdOT3IzR2d4YSJLMWVdPCEyIVkrPShCcX5oQ3cxXzVqV0BbVCN1NV88LngmbSZqbWUvOEtmeSVyKkdPXT00QGV9OEBRMj1FIiNob2R9'@;
put 'JHtUZylrbnNjKHtbSndXSlA0fDNiWGxBJXNzU3A0dHZ7M2IpY0g+VnR3LFlpRmolYnNhXWIlYkZUVD1eOFMxTUcrZEg7ZmdJWy86SjhGSz5aWDJ7bF5LM3NKKCQkWEw2VT1tQTA6YG1TQk5IKEJsL0QyNj9afWpLfSRvPUtySUNgJCJJYmBERkFyKkgyKmJmSWg6bj0kU1MzMSFHZzR3M1gra1Yl'@;
put 'VyFUeEQpU3wmfmckO11ublZRZ1p3eH1+eU0vJCIhY2dAOHVOSm1TLiMpJDhPaSpVRzpdSisrcihtSFFYRUE3anRJcDJqUWNaTyIkKDMhXkloKmB1YHFDZH1oT2tGSEx6NkosW0lrbzFvQkNvfVd0dktFMF16TkhHInFFOz5CIzVaUHl+ZTl5UkB2RGhMOE5maDRJUXR6YCFpPkQuckc+UlFMb2Fu'@;
put 'cWJhV2MiKmFGM0IxTjQwUiZOfHBnVnR3eyhyTjdrLj59RFdAX2xnbGthJWxqQjUkPEhMfX5EJWI2PXRmZ3MrVWpzQyNHSHIyMzFPayY3WiRNaD8lTCFnSmhLZ2dmSz5MSmQ1TG4rTzJ1bExIVnBfWUQwJHZfRmpPbm4hP2IvUkIiLjdlbmI1QDBtam8kJi57bSZYWDtVanBZQGNWfkY1UHBeN1o/'@;
put 'MiJaWDhPWyttUC54Ikw/KGB0dChqWiVYUGA1I2krKltXZiQ9ek03bDFKWUYqbiI+U3xNcE9yTEp3YHpOSShlRH5qREBQQHF5X1FfYiliMCRSO2BmbHhHZy9mUGl1M2FPM247NlNadTs2Kl9BTWpUWzxAQGhdSSNValFdQFN7Okd4VGFAdmhlKV9SbiJXcjNbcVQ6OD1RX11RIUVuNmJgSS4yKy9+'@;
put 'N2tPRi9qdSpBaTJ6d2VdY0xCXS4uaigkJS85U3s2akpLNVt+S09JeXw2Z0krbWxVP2NfZlZRNyhOcENpJTRheCZWeDFFfF1wPWw5SFcpKyx5cXJdYzxbL3xqfkVCa3BJJFAxNW9eVDNRI0tMMyZaQHM8LyNyL3VLeDB4XnBpcTFALzFEaE5UYzhOTih9Q1Y6SmoxJG14PTIyUyI5RDVAQUowNTg+'@;
put 'QClLOm8rcVh8b0w9VTAlMW5eZnZXZlomNUN9ZFN4Pzt8UjwpKixWNGd5XSx0Rm5SfnFhVm5xKmF7YXZUdTE9ZHpxWzlMfj5YVzJBOW03Tn5JYypgbU5CZXlfVk5jRWFFZU9HfT4+Lzt+NHdXeW51M08yN1oubExxKyFednF+NWskITBKI0xeJTF+RTRqLkZFejhgY3QqIzZPVkdnXzx7OXxROGNn'@;
put 'MFdEQEZpdGUqTHNKdGM9WHJ3RFNUPkpMRmk7IXYlOjFqXmZJViI5XyY+eERXXW5FWE96dFE/amVHbENHeCR6a3NuPCYwPFZvYyghN3xEakxVSEtAeDhgMU9WYUlCJTQ8bmppMkdzWWFaVl9EbSghY30seVBMXjF4MXMxcHgmVE1aTE5HX3t6bmV7ZnZDej1KdE9jdyxKciVFVFYhJHIqZ2VoJn51'@;
put 'Qi82VjxtQFIlOS42Y2E0LiMiKVJKMnx8TTRMOCtRZF8xbS53QmFTN3Y9WlldOzZIM0k5Y2ZUfXlRMXAkUk0vLFU+K1skRWtHbkpBREJbMS4jTF0kayh5ekllbV5vQzZ3RHpJMlRzbmZkV3UzNzFPfW5yfE5TTHttZTNVYHJ9aXdQRmRfVFBNODcqfnk0KVR4TVFdNkc4byNCemQ2cj5ML0c3VDNH'@;
put 'UUF5fWVmQjtBP3VWS2ltdzIqa29hbXNQRk1zejt5UDd0UT90Ol45PzRRQkExWG0qdiFhRH5JXipmdlJDWm5KQy9GVSZXbyRsKEduRHspOGxvVnNGMzhaV1ZzKDt6KklRQUI6d3shWFN7ZSFbdWhYYXQjdCtGYzBLcTNMIWlFfi87VmxeNCppWHx0dHYzSzZhNk9ZI08lNVNyOVNPXTJyPWQobGQ5'@;
put 'R1IsLjxYS3VSSEUhYiZMSTl6bl96fj13KT5UUUAsbUlILjZ8MDtWeE9eUzhCMkVKQFQ2RzNVdkhieElaUFFfeHJ2LDsiPkA1JFVSM0hZM0tMTEE+bUd0LikvPjVbaTQ7aj42SVheQ0EiKy81WyRJKGF9UnZzSmBjfjd3ayR4NG58dGZRUCVzRHR5Ykl+Un0vQnxKSXc1aGNBVXJsZyNPZmEueTdQ'@;
put 'ZUFqY3ptWT0yXl1NPHxSak44T1FdKHVTKHd3PV9eYW1XKV86QjdYJHdAPEI1V1o+bXRrb3RVUHomVz1MTTlZKjtKPDpbJVI6VjczRk8rbXtnOHV7PyV6aClhMTNpXX5EWXtkMENWJHgmfDk2KiZGaXpYTkhYdj84bG1BK0VHTmckdjh8UkNlVGtKaWdNbHF3Zl9EbGZBQUtGYHt3KSw8WDZlWDFn'@;
put 'L1AqUDl2VGxNKTBLX01UIVNTbUpDUGJdKGEqMUozSl9EIV4uX0ZsInBYOVdKL05KP11XeT9PM117Nn4vXm1yRTBkYU46fV5pa0pdKEQlR3s1IS4sM1BFLjFRJD9YRywhSEElb14pQmEsJXEwUXk1OiMwSDVjO3MpTlBEPWN3UVB3cyxZIl0rKT9SXTw1Jm8iL0JJX3VvdnFqRW8kalsvfC9mZ1tN'@;
put 'Km13Q3A9IUolflsrUm89NSF1IWNnbXxrOVNRdXErJCxJfHN+X2AsYi43RC9yb3JWeiZYc1tnbE8xQmRmfE5mO3pWKjApM2NOVnR9RjNIUEN1aTIoYEdCPkNObEdWT35fKX1Yb0clQGIyP3RuPDNXbGJoPltyck9LWlJIV3NnSWI+MUc5WltYJkBPQ3MhJERhKClPLFpMZjdQWmtGOTdvMGZuM1VF'@;
put 'KCJ5IllJUHR0T3cuRHghZDl3Uz43Z2dJYUIkZmwpMi4mMmlmL0dZayh8MV17bVB7MT80dFs4NlF1NlglNjV0OiVRaFd1JGF5T3VJSE5jOSUvKDhqUTUlT1Z6U1lYRDBidVdwdXF9TSZ9Kmd3ZT98c2tPQGZOJWQ/Yj5KI1BCPVZ+VSw8cGpqVWlBbWYzPG1MO0RjTS5lRX1BW0gzZmZmfiRId2dX'@;
put 'Y3xPIU4kZWlgQ3xLJmBGeiZOUW9GJWk3fmFfdy40JH55ck8uPj4pK2E7ITRJSEAoSG5GNUdoR1tlRz80cjxYVClYXkBIfGMybS9zenc4Nil5N24lciNZeipoM0tbYW12VmpqPDI5WTwmXmhHWz9QbHVfMCJfNWImNWRsRy4oIU03MTx4OyspITczRmAsfUlOeEJhL0g/cE05eklveW1jaixYNC9i'@;
put 'WGNDfE4zPDhxRyl5fEkxIklKWFNBUGt7U1pAWkQ1SlNLT3ledyZLKixGKnVrd2U8e3pUTVNoMWtTSk5dVz9VYytfcWpxZmksNH5HVm1LUkRpe31GS2RNTl1JdVE5amRKN0pPfFt6bm8vX3pxNUVtTkNYZVs7UUNGczZsTiYsZ3xpLDlbUjF2b0ZfeS94ZDF7KEg2YUV9ZXwuUXRJYTpxbCZCI0V5'@;
put 'Uyxha1lTMn1+ZFIybmJqU1NzYyQoPz4oWD5pOSZUfj5VVSNHNUg9TSltfS5+eDJDOFZjbUguKiM4YjV3LHhqaEZmPXVVPXxXOlhrRjs4Qi5rYkRvWkgrWTs0aTp9aXRHNntSJDMlTEUlfU13dnkjeFFYVTZBbiokOV9ORm93UjhWZVV8K19NVz9SL2BQemdmJkV5USwsWyxbe3pDb0RGRDpqKWJv'@;
put 'PHxoWnkmRTR7M1pvTGB0ZjhYW1J2KHFHdjIqQHVaKWdRM2c7JDllOEVGfDhqYEpXInI3SzI6L2U+fGgkMUIsYFRoRFMvRT1rMVB1OH1IVV82fmhSakUpIWcuc3BfJVdtN1FoVlpNN2FsYGx4NXh+dUJlQllmcVVBaWxMYm5hfE83YmN6SitvQXtxUyFEWFI7flEyU3VgSikzdSVSSG84a19IPl83'@;
put 'SEVBSl09bGx1NyZXPUxZPlE1VyVAL1k+LylJMmZTRE5ncyY+WFZ8JHIpe0JWNnlCeE97YHdJa1s4eEFjVkA4fUVQQzRkKU90RDU7cF4wNGhJTT5uOi82RGlQfl9GSTd5NktAcF02SXguNHIwQ250Nk1scyl4byt4Szp4e1coazdSXVtgLy53PXdPPlA0NEA9Y2VTRSF7XllSUUNCM0owMW1EV28/'@;
put 'cmRBQHZwK2ZAdUBvc2FBR3RUVSRbPFdIVzghNiU9d28lVzxwflE3aiVlcD90ViFUQklqaGV1O1E/S0BNcmAyJEVLcChIWFt4YDNdKXJVMUJme3xWRmM7Q3hkSyFIVk8ySlklPmxCTXlEXjNxJCpFL1JtaGt8OTRfL1cxVWdpLzJPZGBmVGteanFuUD1xTHpNKTpoajlQM2w3dE8zYSE2QjpCSW1a'@;
put 'cDE9XV4mJTA0ck5mQDoqVFZrSVkzLnBlQU9wL1FgblBLZVZ4IVIkc3E4XVZjTEYhR1R8VUQ1O2hYcEIwbl1zMT1EP0t9QDkxMEs+I34zPzJJZkwxPzNDPTdSVnc/WklxUm0qdXlDMDw4Z3E5c1hUei8uWzhod2ZzWlVdSFhqMSlYekIoQzlGZnJHfnxaaHoqPFREbyspT1R4LGRhRjhEc0JZQjB4'@;
put 'LzxzJSFOOlFFSlh9MTxiTkgwQ0lCVUl2Kl5ZZ1g7W2ErN304V09Rblt9UjhxWypvVFpfSV1PMD13aiVqI0dVWU5HbVAzPyRbKmRmV29JPCRhNkhXQDU8L2AjJE4/dW5PJD07d2pNMXY1Yy9sbCY4U0ZVT0U0OCM5fW9jSCZOdlpufVI6RUtDSCp6Z2Nzfit0W2QwR2QqKzVKT1pARVdvOl5vdj9d'@;
put 'TWpqaCxTWjNTeytTVm9KYCkhdTlIYCVyWDVOa1UzRFRad1h6Uzt8aTxWdHJIZzp3RDVBbE5CMDZ7JH5mZHYwXUV0O3hXPld3OVk2dngzZWZPJmhwcVVKTHwjYCh9dX1QVTprfWUhPEppJipreCxZTnklSio5QFgpK1kkJWhyW154eV8hOkllVzBRe2dnYGpuMjVaKzppekprWiJxUUVzbSs4RHdw'@;
put 'WykyPDhiT0whUz1gYCJCVGN5cyhWPSUsaG1ARF82OWdjVyIwVVhQPDZON2FdQmpGLzMlWXR3cktrVDtxKElYOG8rJllYbyhmfSpeN3o4VWxDNU1IU2Nae2VZYnVHJmJpNUFLV3p+eD8yJC8jY0xIaW9xTkwhQS9LJExOe2lyLmJQIUZec2c5KFlMRXhBMi9bRX5iMTI0OlYrfSNuR2ZnSUQyPksv'@;
put 'IWl7MnMvS0lzazJ5KzVCaEgla284bVJxfj5pYk4mSnQ8cDp9X3VYK0tzfS5CUjFZajozfT9VRl5TRF5FeWk5dkAoLktCT0ZZZiFSaUxCUmNxbHJiNHIvM0d+azR5QFJnUipUentRYSoxXTNEXjR5UHkxSmN4elhTKlgrNUU4cHh4T2duamgsbFo0L3YhUkY6L3QzS1hASzUuPFt6NDAmR1phbzQ1'@;
put 'JHEqPDR6aEVTKF8jNzp5SU1IeFVuKjxZdD9UeDRbRzg7WzVNdGhiOkJqUFFPOzMzYmFfNkBoeClXdGptI2ojRkNMekF6fXFiZn5JXjkjMHNbUmtSXksrI3FrZyQrfWRvNXxDZSkubTA5M1RSSmNwWnkqNSJJV217Qzl6JVs3VSY9dFRDcSZtd0RtfDt9YHcwYSFfKVQmVzx6bG41cT1GdncuUWtr'@;
put 'LF9EU0tDXSY0fkVlRENOPHpLKTV2WT5oPU1ieHlYUFFvbzV9WGYvWTE5VmtDKHcwdD1Rd0FefTZ4OG9HZFosP35TRzIvKkBfK153WH1oIkNVOlsrNy47VmFCcT9najpMTkNVb0xbMT07fmcqUGJ2L0pzajNTOnZVMG0iSj4wVHNmSCxMbyo7LlRXfEksfmFwbVZ+Z2dENXc8Izo9V289VTtDO0Y6'@;
put 'O1I5dUw+R1hldTRBNjYrQypjOVUxZlVMaENHSURhJlQoZnBpO0lOUDA5YztKTGNPLkhAMDJaPjZ9MnpOcjJwYz5VYjxoNHpBMS5IfmY7N3kqKWdNXThWX1k4QjlnQ2J8JmlDNzAuRnRLen1AfFh0M0U/PCFxKVtFMWAlQldUJF9xWFhLXSM7Xys8RS9yOSNUZjVjaWksKDRWPksoYmhSRH0/WlUq'@;
put 'KkhTTj8mRCFuM1REQj4oM2w4bHpmTyw7bD9LUUZMTiVCajwqOlU3JEpPYkooVS5ycHB+IWx2JG1GNFssOylRPEBkVUBmKzlkNiQmZSJONnRydS95WXIze0YvcEZYIlt2LHV5Jll9eHd8bkFye3AsRGVJMWVPX0ZKdXQycX1lS28hQHVRe2YqTml5SXJRfD5BUzlFKWs0PkQwPmNOZUBuRHBhKzN5'@;
put 'ImxgX1NXODlXWGExPEUzNi96ODd5elZEVH0oUjxPYFl4RDFIJnt9PWFXdUBia1ZpVFVaNj0hPio8bnQ/QXF5ZV5WJj4/YSssJW57NEUybmtxNz5SLj5rMCxPSlNfY0B4W0dycy4jeVNiazE3UVM4IlQ+RU57dkAySTdXMz5xeVtMaCtwOUhVZzo7Mml4Zk1wPTRsPWp5RFIiJmxuflAvSXJwWGs/'@;
put 'OWo7MitEYjVoPWxGdF94SjZsTlNAVCFjV09bcn1gJSEpOjNEIytKPEBUZE02aiEhPltTc1d5VUpSOGwlMTBePCN4bk5rOz4pemJCWV9KMSo4JUxtYm52OWArXiomYmNJXzt0PnsiJj9Yb1goNHteX3tQc1Mxd3FZUmBFL2MreXhhcTVLVWRZLD4yTDJ7QVtFRDtGPysma1hDaWQ1TjQlPFs+bltd'@;
put 'VSJkR3A2SWBHPktNLDNEYmEmTSl2ckpreH5eJlR+KUUxQzd2M051aVBCSm1PWDM3O2V+dzgmInNRWDBXSXh3Zl1BJCE3QCt8eS8iSU0xfHdqdF8oOENnNmQjfXJPYV85bkM8Qkp9SnA6Qi5xOjBAT119SEF5MSpkMyxtRnsqM2QjPGQye0s9fn5TRm4oRDJvezZTc21wVStyPXJKJmI0OzQ2VUpz'@;
put 'I0h4WDp+a30rJDZxdFNvYShpa2JpRkBYflYjKC9kNG4jNHdMM0U5KiR9JU5yMkNeIkchSj57WCJYWU9DUV88K3xZL1pQbkdwfjY6eClZcGRaJSJCWzdxJWRUKjVnd1crJXdsIW1Hb29hM2xYNipHekJQOGxqJUBsSGViXXA/aCQhSXJuS318MD00PUJrfVlnQFF1OzwvMWFtSXxjWDlwbE1+UXYi'@;
put 'ZH5eaFk9YFtUUXxUdX1admkwI1V4ZV9CRWJ9Z05UfnMwSGk7JDJCUHIoY2BaImkyNkpseXAsaD8qcCFqTCMlIXsyek1sUFlXOSR+MixtRjxWOD89d1AhdzAhITByV2VJIUg2UyR4STV3fER0RzBFd1dGXU5BWmU3dXxWb3tBdmBdb25qMUFjP19dck15SFZEV21mSTVKYVc/K0sjUGRsdEYpL3xZ'@;
put 'STM1NH5afi55SlBbSS48Izc6Rl1dWnRjUiN2RS58Olk9MUB+PEx4RylANmEjVXAlJilBMEB0V0IlSXJGfnQ3bWFHdjNiOnwzU3lQSHVoPzpmdkZ5IjRCaF14dj5qJFd5OXY4WThiZEhkdy50djZUImNtbHB9c0J2bihYemdJYShVYTxGRDZuTkRwRXJvZyNya20uXyV9MUd8eEBDZiRmOWldSGgk'@;
put 'aUJSeyZ5S19mfjJnWXhAKVVUcDYwJlQ7XzFkb2cmd0omSl9PMCZ+cjhAdC51eFM0W2w5NSZxU34mbzAhajJJUlFydGspZjQxaGxFTmR4KD4wVCxkX2t2Lnh2Vi82OkU/d3M4U0spPyYjYUtwMD1LM35xbC9zUm58NW5+MmM6WkdgKVE5SV9OTjIlNj1UJSRgfXphXTY+N3wvdiFTY1U2RXNWUDRS'@;
put 'fXlDJXEuXilMOWU+ajZqP1NmeEVrYExdJk0hNllTV2J7PV9KOyI2MXdzNSRofVg5e3ArYV5FRCw2MW4/NTNXMytjOGs5WntkT3FRcDphLnYpU01PVj1sRm0lfDU5RjRbL05dQiFBPXt3c0pubnZEUnIuSHtvTk9xZzs9MjdqYWVhMXhLL003aGJVZTM5ciM5fHtELlNebktNazksP1N7cEAlPGdU'@;
put 'eXgleEopelVab2ReTTFPODV1XXFiN2hZIVQ3VDtAUCN8dWNjekt9RTAufWF1eUYjSiUvY10uVTk2elk1WD1yRXBNcEgoQiVmZzd0U3pTY0pESnFESmg5Im1ZRitVMVR4ekUycXpTaXVBTXcuRmtmSylhWUw3KiQwMCJaW2RlaER9fTcvIip8eG1PKkU6K3pHYS9jfTQqOTtzQThDclJZPjF3VzlO'@;
put 'SmRXNllpWXQ0KUpzSzM2N0BOUiwoTGlkcm1ueGh6NytuKDhzJGZfcWtKPUU/W3QvQnphIWJ2Qz1QVC5gSW1eYHAsV3xOOTMlUCExL3k+YUttU20zeGA/QGRrY0srSEJfYDdYPGkmMTJ3dyIjd3FxJXE3bHA+dihbaEFaU2hmKHFWKEk4ODtOT21Rdnl9e2RpcyQyMnhnPWR+UzN3VnFwNldzT2tp'@;
put 'UWl1WTVIPXBiPks2L1ZkPTNBYUZgPSZvViFISWlqR2g9RXZSPk97PmQ2NDxyXnxTNzpqfTdgRltPYzM8Nl5KIU9eZDMiYXc2QS9TOSlNbF5XV1NJSi9uIXFKTT90eT5LYGZMelBIOlQwbVkpY0FrSkVvd3luZWZ6am1DfHRmUmZ0QDg3MCM5WigxdjJTQnksNTx1P2d6OkEmd01XNDtZRmM5JFBw'@;
put 'TVdlMU1gVi90M09YMWhTYT9XZ2N2WH5WVUJ8Nmh7a3RNX3h5NClJK2IhIzluQ1hfZVV8azZSWmpKdlVHLzhrdUZ+flt2SDVOWzBFR0F9fVZgay9wamRUY21AMHRMamVxY3xhTzMwaGZnZ3EoPUI1SyJnM2Evaj1UQG47amExYHkwUFdmYHdoZ3x5fE4oPzwwXXhbem5bZ11AUnM4azJ9d1E3Qm4p'@;
put 'LzxrUiZQRzF8PEZmeTt5MH02WExKfFgmbnlKRl53UV5eeTlWYzdMIlVrTXA5e1YiYHt3UmUwL15nJkFELyxkUmgjLzZFMl5DOGRYQStma0c1X10rK1k5RSQ4e3VEbz0uJTxNbjB3UHt8KFIsRFh4QHJiR2g2OngjY0wiT09nPy96Ul9lRTMsVC5AfT9IeEJlMzRPXWFJbU5LPnVady9sK1hKM15Q'@;
put 'VkF1TU5bMkg8Pkl+c0dxeUQyJk00R0s+dTU4Wz5lRERKbW0hNjsuWGxaXXdWdkElKGF3YDt3d2wpTFJORVsiO1gjO0MzY240ZFowNXVEIyY2MnRfLz1tPCtRcXtrRltJS28oTncrXn4jTkBzNTtUVn1CbFZtfWBHS1ltLHVKaCxiVyYzMWpndkp1L2Q0QHdzQEgheTdoSC9lRSsrKEAyY2RpQzUm'@;
put 'bnxyd3VYUClTaSNhJTpGQnV5VnRWVkN3PUQ4Y14zV3QsWEVAOiU9ZHZgV0lIdWM3dV5xQE9uZHgsfmd0dWQpWyU3TF1Hdl1hdVY4dEJIRSZ6NFdHOkoqR15PendDckosbz9eeWF2UUFSfV93MVhtTlYzZHUkL3pGamhBQE9CK2QuP1UqLCIvQldTUE5uMjs4WjxlIUZGenlAOGMoaGc0QVVNbmYo'@;
put 'XjQhV3sqanBQYkF0e09EKCpQeU5tdEI6dHB1QmF4WiIvfn1pPGBFOnxfbmdbSipOWD0wXntJInBOQmFPPCpKN2I2VFUjPktucEBJdHdzV18iP1J8anhZc2R9YzlqbzYxZ3cqW0JYSmJ+PGohZyE0ODQ5bD9ubWxaT3lRKmAzYkpnWkBpIlQ9bSthP11OSVNmOFt5Y09tTE1tVVZwKz1sIj9ibCou'@;
put 'eVVLdG90aHZyQVc0PVZqfUU2QHppMyhrKS99LzgmZWBXN3JRYX0xckJfbkRuLzhHNlBHM1UsUU51YjZmYzJOSlpNIV9aIlt3Vl82KmdGSUA+JDIrTTxPdltBRDtJSlU8bithYjduZSZTTWd2WkBLI2UkVmBoPm19R09YbmB0Ly5PXVRrKzticVErNDZbMitCQjUjPjVqKl09LkkhVygkQkJVNioj'@;
put 'OjdOWEZFL1taU2FwNyR7KkVDNyV1Uih4KVI3WkRYN206ZlV8dn4wL2VxMzIuL3tqTj1paU8kVEA1IWpkQWZ+OEgiZ3tWeTssSnNKK2NiK0FRP2pWbjchcmZEJVovKD1vZFZnTDcrT25tZExyLHIre1sxeHAxdWlFUHFxfSw/aT5KImcyOVNXbkZhckw3O3s8P2ZDNVJqeX5iM0NzNiZ+MWZEbUZB'@;
put 'emAoRWBRZ0B5TW1KOGl0XX4mSnJ9O356X24wQkdfRzN7Tk16XjBPdGNDPEwxKjVeVzFnKVFhbDZ1fjprR3Jpe28pKnFETykwMjk8TThaNChddjc5QlA/dWxJXl5NPihidUlRdy56ejxVWG4+W1klP19CWnBdbmFWSmhZTSprRGtSJn4jKUR1PVJpIlNETCpKOzxoUj8pfUtINWRXYFUrfWBTYzoo'@;
put 'ZXNuaEV2XiM2fXhbKCh6eG4vMHk9eyN8S2xzTiZrcUs8WEJQV0A5eXlFVXdwP0UuMmAiblRCIiw7WSE9Uyl2ajUoOiJYTERJRztjUip3Z00hSnNWdUBweztVUURzO3lqSDo7c1RSS3dyM353KVl2M3ZmakF1d3NhV0VGTDBDTXokLGttS3YuUkZRb0dQL1FNKms+Pl9xP1VpdFtHc3dCYCh3Zmtn'@;
put 'SSxMVWw4JX54OFVPd25TQz5eS0BoVmw5QjI/ekcoVFZ0ST1lVk96MGN7RDhZUn57fiRTPT89JG5ObGd0T080NC9dOiFdN1ksM0BuO2w5ckt4WWc8flc+QEIlPUk5ZmdgNW4wWCozN1RQbChTc0RCc3FYZ3sqUmg+RW85aFZOZkFlNHUzMEYlZipkKUImJDA3WWpiNGZpS0BPZkZNXTVgeX5oWGVI'@;
put 'K1NEPVI+UXE0c3NKW3YxSyUuJnVUN1JbTnFAJGxhL0NgI1lNSDkmKV4yUWBPdU9kMWtHNXpDd2ZNb1RoN3w2Xyk2JCE/K1BHNGBxdDB2bSNrTV1iR1hdOnhLPTIxdWlQUDZGNjE7NV51TyIiX0tRLnZCfGk5PSMkKmUmcXVYYiVxYmRPamw7VXZBInAzKj1kcXQpMzJzQF5nLlc4S2dpOnQ5Z34q'@;
put 'O2dJd0NIO3laRUV4RyM9OS9OQzhuO2JBckNOY2h0bD5JW3dhajtEYmJ8SmMzUSgsdyFYbj9eYypCWzxDQkcicmZ9a14zV2Q5JkpzRVFedm1JIjpbc2l1Rk1ESGlgQkNjUn1LfkJ9ZXNfbH03OEhQPTkxYUFPJjM1ITxRW1NrfilCbH44JE5xJnQ+I0BnVy9QPG5YJlRLYDFsWTRJWXYxUHpdS2x6'@;
put 'TnNpWyYoQTtFbV9yeiMpbWxFcmwhfktJTVJrR2J3T301d0N8dkJVQ2ZNVVc5cFJQXUtiTy4qM3d0KiJpUXM2WHg2aTRyTTxIPTRSREAuJn4iM0FqP1tPeT1MQXcvU3dqJUwkPEczbVBRbT1bSWF5XmB3UWJ4Yl18NixtdUxAQT5bYnJAIjNIZ3pCUytaO1IiVHwkLGFzXigsUno3WT5neikrdnlk'@;
put 'Jk4mc3E+QExyOHpddE5TQXNgKiZAcT1CUltMYDwzPHkjXns2P1dVLjMjfS9zRTowWktyL1I3PGRDYUtSQzZOOy5YbW4jREY+L2tFVGckO1o1PT5NVzF1fl1ndzF8OGFAdWFAXShQJmZ7I1UuOGApS0FGdTN0c2JYRHk0dCNTPTQkKUs5elgzOCJOZzQ0UkgzTDAwc2N0TDZCfW9wJWN4JDVrMSxk'@;
put 'aF9AX19pNH5vZkEzKyw8SlkwUTVLLj9nQiNBd0lBZ3E9UFhYZDxUUV5jWFtMR2lwQzptSVFaV2ZsXSl+aiM3JihJKk0qX0I5ZzdrRzxFWDtTJV91Y3B+L1NnK0BhMGplZnwkMXpJRGs6ZWZvZn0sNSReZG1zOz9CL1IqLCRDfFZOMlJLKmZVZyFScChQNjtabHZ1XiNxMyNeZypwXXI+TWA/emNC'@;
put 'em1uPDgodD01cl98Z0shfDJUdH5pWXg5Omo0V0p0Tll4Z3FRP0x+QEZETDQhTlhiK3l2eS8pbT06PTk7dS5rOTlTTWhGTWFVR2owSmRVPVsxY2JmZUB2JlJKOG1aYWxTV3krdnh6O35zMilaaTJjbHU5bm9demVeUFlsZCVYcSE5dHxwekxrLiRseX4zMDglWClHT19jT1BgMSNYKGJbK1pUa10+'@;
put 'cXIrcE1+cWlbbEU6UFBmYmxsQ3xeMW5EaSlBOHBVbGF2KDQ3Mz16VlV8YzVPY2lyKlklQzM7Rzg+b3lte2pWTEQwPnIxNEMkU3t3cEEsbkk/c01OZ3JlMn5VM294WVIyTnI1WXwwOzt+USVOZFkyIzRjcWk+PC4qJl9pPjtpIkNFYDBOJDVKJiM2aiNkOGQpRz1IRV8wdn0yTHZaZiVWUDFKZkl9'@;
put 'QFFOLitZbH0rcEVGa3VjT0hVaC98IixtdEw1Vi42O3RrU2dYfnVuNGpZLmEkcihbYF1vM2VQNWpZQVglLys0SlVdUkFAW3ZJY3UwWWNWUz9LezNoOHgjTTRuNnMlQmErPThydl09aCRXeXhzJDZLOjJvbWtIKGVEWGRBNCFAZ2lsfSMhVEQpIm8wY1c+M1BgK01sPEVWd1M7SDlbY3dYb1l8eWYo'@;
put 'IjdSTlVMOmRfTCZHVVRJWm53KWYpcyZhLiwhP1BlSWx5dHwrVWZ0Zn5DYHtWPXo/JnNFSXFZS1BYTilFTDpJI2pefHlTVXR2aig7RnYoX21MR2BvSTgqWHIsWU97b0lxR11FNTo7eTRCRTB6U1hKPDBKKz0mRlFdZ3k2eENFVVJUSVBCKn49TD1UVUJAW3VPPyZbSG5PSEooUU5JYzZAXiJ4THE0'@;
put 'PilYRkx6NTldT3ZNeGBEZSpGJGMpblRyUHtxLFQ1ZGorODV2P2tRR1g7cWoifEk0PnFvWjM2KiF7WUh0QSNoJTB2YEozbU99cCljOmN4Snw5QnpzLE5mNERbQlBCLj1yWTpIbHVgb0xEc3NyL0dYYTVJV3RWXSxTQDF0PGRGPmdVXTs5X1R8bFcuYFVLKUxzRE5EcXZ6dipCYG9OSHppSjt3Lndk'@;
put 'WkNvVGoxYjgqNilXdldUOVJKKkI+MkJlODwycmg0SkhPY2F8PDBNQld4aDtkdEdlal9JRDxjbElLOCx9NzZtKVsxMXc2U3NHZDolMX1pdnRsYWhXVjBbXTYreWx+TjRhayFSJG9kRj9NY2srYj9fSDpbNTZNX1k9YFlrOHt1M0F0ajYzO2JSX2lOJDZPYnN4ZVR5cVkqWkMseUJwKHZ4PUd3Qmhm'@;
put 'ZV49JVFiQFBVdU1Qb2l7UUtoVzg1eUlwUC8oMVMoT1MmWFd3SDY3QyYsaFYqKzUyXUlUMlF7KHI5eVNQWHR0ITdGN3I3QU8uUVhlXW4rbUpxfFYpTU54RW40VzFrUXUyRG1xaSx0JDNLKG07am4pTWlrTnBzX3Y4YSZzIit5elkpcllRJkFTIkxSRERPLDxIY0JTImJyI2NfKnZtfGMhRmh8NiJV'@;
put 'JEcvUGp8ckIoUS51cjlXTS8veFssNnZscmV+aDxlcyNCJnY9PSsvY086KSoyPV5afTNMJUImKmUwPm1BI1E/OmBLb045c0o3dVFRVWQoTnw5TFNWRnw4bHRCZ3pIeiF4N3kubFlDNXhqR2xhVUFfalNvNEQpRThJfjQpMTB3d0w2SS9bVHcucWxOLE01RXosZTRHSmZzaD0xWzMlZm89cFVCQF50'@;
put 'dHRaVF85NHM2UG9dOmEoNUROTk9jRz4pfTtie2AxeFBEd007bCxFeVh1T0VCKmVNRU4wMyFkdUpaSXVQdE4oYkVeQ1QmR15ZVSh1fCo5KzEmYjpuNWQsJFkmPm50X0NbQChePXJ+aXgwRGwlS0Z1c19pLitGIzJrPyJObnRuUTlQWD9PNlkrVGlDfmVPe2t5ejNWQUQ/blglOjxsNmx3MnZIJTVH'@;
put 'Y3QuTz5SVXA3bilHQFlreGswYV5ILGltI087aDYkKG09KGNkLHQhM2h4Nnwpek44JTl9SnxtT3Q8bkthU1BtWGpEL0pDMllqVCpCTDZQRGIhQzJTL3c8JEJWczdBJkFGNFY6Y1FaQ0B0biFPPHQrOig6LnpMLCVRczBpY0ZCNV9HJHp2MCZFNmdHeUFtXX4pTz4vcSlLY0ohI2xHZ3FnakRrQEg0'@;
put 'TCY+Pz9HTlZseHpSXik3bHQiblEsIThERElpa0AzNnxMTGIjbihzS0hke35wIyk4UW1HNUM3T091WXVBVzt5WEl2R2tPMHY9cmxWbTh+cVJaSFl5K0kxIUMzbj0wKTcydlJHd0pecS52RjV6RHBOW3g0MF59MHdrbXExXXl2Pjk9cyliQTAjLlphfVd3Mk9gP05QMlhtc3VqNFFjcFM6Rml5NDxL'@;
put 'P3R4KTxVWkF6KkZVK1Z+UmNZLm1Qe1FkeGpxQ3U9ay5VJkgqWXFHWTpDKzdNJi90a1pCRnt9K09iTWsiX0ZfMCVWYEZzOlc3QUdwYzxDdXp9ZTVqcjVVK1g7Myx1WHFgNzlZNkNXK215Ky9QKUhYRD9IWzdWIkdYTmtaPntfKzJzUio5ZEdWJUtkTipDSWt3LDJ+IyFKbnFSJFhzIiE+ejgxSkxP'@;
put 'OjhSVH19L1d1VkJrUSEoPG1KVipYUXIla3xrSGYwWj9RZTRQSDJ4ciYoeWNCVkYlJEJXbl8sKzd+cElufGNWd2B6Oiw7SU8xZGRSdStgMm5fP2xRaSx4cVtCJGxPelhBT2sjeyt4OUc6UWtRXzBEcUR3LnUreE9aNFM/I1AhVzxSbzhgXXVlWX4vOyxFUSYlVXh0bWZyTW8/bERkVz51eDc+TUpz'@;
put 'JDheSHo3NjdpRFVUMClFZzp1UWdGbCRrNm1ZQlBEJEx2X2t1Z1RNe0R0K0xCeklrRTcyIXlibHhffSVfL2wjUS90SFVgPzImWEFZRiVOVE5DciI+ImppMThwUERQT35LK0ZrLndjbXh2djNWW0Qhem51NXFFNnE+Uz58KnhFN0xqUVlsa0B8IiFZUGBvJWhuJCtqZzZNe0ZvTjgzZSkoOWguUl9I'@;
put 'TWUrbUhJRDNxTWMzTHVuYEZYIXFGTz8lMjx2dFBOSHAhb2lQTHovcE9QKlpFUnZxczppWERfVWhRVkJqV3pVfTBkT21PTWNZTHdyPjUpcWJTIyk7O0VNJVFSXiw/Kyp7dT96LktLR3hwOzVuflA/VWA6YX51K3koI0A0WUlfL2pYbWMlem9GQHFpang9NmtmRU1FZDw8Tkh7PzFtJGtXamRnZFks'@;
put 'YGQ/dF1zJjsyI1F6OThtRWBPVlMrUFByTzUsbU9zfmIwNFtrTUxvSl5OL0EmTkFvX2pbakV7TThra1BqQHYveD5NfXpGKXFZXTQlUWI7UHo9TW5AbzRRMDh1bTlqay87MWolUnNPLGhaMnJgXnw3JV09ZSZLMWx6eiI3PGFpeiZ2OnxLWStqfGpoTWt3VmIjOjtqTk86YVJ1K3k/VyY8ZCNyVSpg'@;
put 'cUpTL3lMaD1Hd1YxTGldMHVNPiE8XiFZXnJAPz55c1tnMF9lMlJhQkJBb0cmOWU8aSU6SS5VWk1xc11iLHdjWD5bQ3BoVyxZVVV7W2piWiVbeDhVL0RmfGhhbk9jQ3wmSTJafShdNmkkVVpna0trOUUre0M1ekhJfnFgRWRiPX1MSV0+TTh8bnVIfEBOeD8zb1ZbYTdnMW9NKm4xXSo2T2hAMV8y'@;
put 'VUlQcWp6cFNyWi5NXiI4MT13NHVhTihPalhvQW1CfFtETkBfOFlvWX1vLj82OypDM2xMRXF7ez9lWVBsNzowWXhHPzowdmddd2pzZlpmZE9aOmltQnArUFlEREl+RlJ7LGlAV0tvZyNhc2NAalpTa296OyQyIXVzWTI2R1hqcj8han5Yd1FfTUwrQ2t+X0l2ST5QbC5lRztsezR2ZkkhezwwVS5R'@;
put 'QFEvU19hM1pqP1A+XVhPPTtdT3djKm5KN30xTHJ0ayNLbE93OF1ra10/NnUuKzhKbCg+Om1SQyhDNEVPSnQjNHVMRExZYWc5Rj5XfExnZE4jZCFzUGB6N2VHI1RNbyNxT1E8PTB+Nyp5ZT9BVHtvJU89X0QxfVR8ciJpLDV5YT1kbEI/Jntpd0psJnosPmd7dUg+S0N7USNqbEQ0UFM5OzBWKUNa'@;
put 'Kj8+PnhEN0Q4RWElTipCWmVObEJSdE5EYzFxK2tFfVR2VF0iSU90fkkqVj5GVHMhIjFVQHJnVEdzJjNuOF11dWt+YkMpdCZaYEg2ZTlUWTlXbGhjT3RTQ2Uvdkc3cTtWP25wJX5fZSptY1J6QWZmWishZWtnUEsyQSRPSjV1VTBeOXM3UVkrUTM9WG51X3osSEcjPjNJI3Qsd0c6OlUmQVAvUiEl'@;
put 'V31lUHJSSmBSTlJ4UTcxfE9gQUMpX3hNe1R2YzxhejcrJiRqc0lMcUxlSlhhJUI1dCFhKm0uVyV5UHwhdEtfUHsyKkAoWD5gQ2NoUmFPU0A6VnE3TXZoM3d7TVN2Sl9UWWI+JTx2ZmdwbmhgT29yeXZlZXcwKmdFUnZfVSJNZlROa04iNls+TDJVQDdLIXd1RjI2VVpBTXt4dkhPVzN1QWpKXzQ9'@;
put 'bmhCdm5WNHtwTyg1PVpGKiFbOWpGW3VpamssYWJMdlheRCpaa1Z9TGN3V0s1X0UsMmZ8QjBmPUhWI3c7d1J0SjppZ3dXPihmSVE0VCImQkpTQzQuSyw2a0F6aGJJMmdsaVRLVW9PVz1WWH1SR19DbDA2Ym9KKjk+LCRPNU9yMTRgcThNV1c5NEVDaCtVX0JxKE1fbH1BNGlNa3AmWXQ4LC90VWoj'@;
put 'IzxxTTl5fSF4W1shUDguOEZiPmZvWkJSNnxyT3dzYDouemd6S3hjOjJyIkszalo/VClYXnI8Olo9eDdBOGAkcltUa2E+MTF5MWVLJWBiMzJMQU1sYXVjail3UGpSQFZzZHEyQkFDUUROZVhNT1R6PW84bz8mTXJed2FoYmU/SlYjQn12Kk1AWTUsSn1MPHhNSCsvT2MyKSJyZDQwYj8rUGI0elFo'@;
put 'PmFwJiNCZHhTWVRaZFdWbHp9KTZYMjw3bz0kJWwvLEZ8O3J2OGA5dnhXIzVEZF1+PjgsdyUhKEhWSnZoQmYuaWAzZilkRkN7N1hJbn0mKGlVM30rZ0orMlQ2TXheOzl4eSlBV3VOVGVQQ0thZiY1W1dbYnEvKlIicFpDTnkxSWheNjhINiZnT2lPLklMejZCS1ZZNzorbCVlPzFLSXBPRytuT2ZO'@;
put 'KndnUEtHMnRsNFIlUnRPcD18Qm5OI31KdGB5aWc6b353P3xlM0csKko3SGlHTFhdcXFmLlJQdCtnPno4Um41Uzh6SzBuQEtQaFpGOVlvJlMqSSxLVFU5Rzg4RmFGMkQ+KSl0c180d1lFNXIkTChXZjJvTiYpYmhvcEpGRWB4NHB5LnE7NlkyeDVgcXhYSD98InwrLkJDQXN+WVErVk1iRnA/aCR9'@;
put 'V3cxJGNKO0lHSjJfIz9Jbjp9KjhtSnl1dklhcUFUQCo6MG91b2xPXz1yaXlEJX47fFFhPjpFZ20+WFhZOnFiNktvU2dJP3RDUz48RjlaWUwlZW5WV0ApNXtDR05SNDt9OEh8UVlOVlNtKS8iKGJTdEw6TSo9SCEmbWhSISV3e1RATUtOSip4VE5QXVVYT3w0QnN9IUUoRj0reUwiXUFFUV9odD1P'@;
put 'cSZtIV0yRipaeEQiIW4/ITRmRS5JfXw7NE5DXWxRaXVTZWZxcjgva04oOmE+ckVtLzgpW2U2QDc5N0hqeWRCb0N7Likic1MyVG9SLEczOVJXbDB0Jj1bKDZIaDhaRjp4aU5fY0I6cjo6TTxtR3BuZCNid0hSIzo5NkhoN3lqTDJVREcsYnB2UXZhdTomWXEjXSZwLmpaKHVvO3AqRWFwc1BaczN1'@;
put 'NXovcXwkYEdfYGQmTDBeLz44a2lHSkRsXXpKJGQqRCRVd1RmRFYven1rQE1zLmFuej0iK1VWPldLJko6SGNbSVNVNVI7X1ZHPm86ZTBuaDQ+ZXhyfEkuSlJvTk59Pkx8YkIjLE5KK0ZKT0c/OXkkOXw4N0BxZy9gUlZeSU9yUWxXPjpHajQyNUY4UUZUSE9VNG90fn5jMjRKTCRKPmNGTWh5I2p6'@;
put 'b1shU1B7P2NMNGR6anwvWTRmUGFqZ1FqfCh2O21JdyE9MFdNWT5KLzR+Vk4vXnBfTUNkY29ddGM/UihnUmtJOldJRT15ejZWZWw/ZSZTaTJeX20jUThkZmxdaXo5OFpKeDo/JS9ZUlk+ME9KJSZBRHlFSmV+K1ZPJmZVa0FbYD5HXXE7UEJGZkAwN0cocmJCaVRpIU1HQU4mJDRvSFZOTHl6cjAu'@;
put 'M01iQnhweipNaHpQO2phYksjflFBQDF1TCZrQCJhSCpkSiFUMyZlKl9jOkJESHBkJjFXekF3fExmbShLZykrLmhnVltTK35yKUNROnRFJFswQ0FXL2xyYDZtWm1OZ0F9dSFkeWV+U0t7azxNa0BWOW9ZX0A8JHIpXVo5eSJPRUs7QUdIeSsuT0lFPyYwKEdnLk13PU5OWC9yLFV3V3h+IzIyMmk2'@;
put 'WTdxVlFZUnh2ZWczKVZ0bHlaP2xLNn1tRld8bnh9Q1NLVDJFfEllaTU0a2FAbWxnelV3bVhiRzldX3prbDFhVDpGblt2MDZXPjdSNk8iNz1jPlQ8L3NWb3VMeXg5Ll5KKmdWdiVudHRQLHZOYFl3a0padj4yRk1yfE93Y0lzTG9ELjJvcUxpRVZhRTFGLmgqSDtNdF97YyR4VlA1N24oLylCZUEz'@;
put 'd2ZCaVtiVncvU0MvezhvMnhWLChbbGlmIitKISs6dlFJPjI3SVlDKm01RXV5Xz90Im92en5MXjMiYTNvPTFoJm1KdnluVWd6YVk6JDhZK3VwZk43S01EW0ttLFs2NTpmTGVTUkVuRHpPZ1BIPDxHRX0hRyhdbWo/bkt9OUFCMHtyRzhPRClxaCMqdHMyamRSOEpNOygjPXY5VndFZDZTXlZCdW1L'@;
put 'SDBUeUdMUDZVUzduSWNPYllDMnlUYF8sZEpVeDcwSUQ3d19NeTFmSmVOSmhCfiZZV1suQDFFMF9KPiY5KCRUcUNpXTxoditXT1V2JSo3ZDY7NmhZe3tHRlgzY2wiV1RuTnhVWEtHb2Z7K3dwNzw2LiliUVJofklpcGxnUVY7cFQ7Zjh4KS8pRVJDfVE6TWJFZH03aXZBODAmNnshRzMkO11ve1Y3'@;
put 'X2s7LFBvQiY8M1YpaC8qU1g2R35lZyR6QVYvWE59bShLZD56JitSOztzfEZxcChOcHtIYyRZcHFKWUdsWihxX2lkR3EsWUE4S3U2UTBKYT97KzlIWzZ3cVpyVVozcEA7Y3NwbHVgaVEqZ35UNyYoNV95Nzl2cURYZD1eIztdLzhWLz4sVkI1VF5jVldPQmxDbC9jZmI6dld8dFZERjlQY1JaQF8j'@;
put 'ekRNTSpLTTkjNkZdUFNvVDJSfC82dmo5cmt3YFQhMDo0ZGYwUFo/aCQjSHhOI2dhRm1II2IxODp5cWdJbitGaC9uQSpoUltdJHJ1RkAsN0wuSzxpPldrLl9tdWY6WE18MDVxUCM2eXNNS014azVAdDo8Kk4uUztZLEVefF1QX3hsRUVeTFdoYlhnR0pMTVdIYHJ5OkxScD01UD53Ry4yeDd9T0Bm'@;
put 'KlZtZFVwdEhIMXg3fU9RI1U1R2FNWXdiaD5ediJDSCElK3Y0dkQmV0tad0JeXTgzIit7SENuODYvPGtRYVBgbD0wOishOH4vKFk3Um5SVW92M1tadFNBcipfXWNjWStNd2ZGSzBxTEN7UWV7SCgjOjl4PmtTdkJoc1ltI1tWMEBCTVhYfFhWWDVRd1c6Q2dBaUBOUW5YMmRMbkhqOTRtQFY0XXxo'@;
put 'V3RocD88VnRkQSRwcHFDXz5UWEBAUzVsSG98SG4/OmMzRGBFcURbMC5SUnZUNT9yYmBGYXN5VDRgPHVySm4vYnYlP0c+UGxTVGVkSW5AREdmKkplRG1aYylCejRSZShzeypRJVpqS2tgSC9ycyxge1ImfFcrQFZ0YztlR3JzOml6PiZCJkI+PzpMayoqPyxSUnFgZnhJdzVJW0VDVmMlaC5RYmUm'@;
put 'W3pHM3NAZ18oZTglb3suS2UoIyw+clNGKXFFdjskRng8NWw4JGZzWXh1ajttUGZvN2VnQFY+UV1dSkg/Vls7ZSw1NHcvW1pzXk5ZYDtiMjZiQDhfKXpxTntuIjkjc3B5NitES3J5L3F2dV52dStEM2B1XnYiQ2ZHfHFQQGpzYStDYjheKEs6LzVlWD9PRnEvVEtlNUdnaz49eEElK1IlYEh4cmdC'@;
put 'Qi4lY0JOdFtRVUVpLGtFXnk2Vn5pOFlGKiF1blF3KWxnX18hOV8hP0RBaVBHRmU+dVI3TDNRbHJhWUpqJjpuKE5AIjJRbi9idktVX2BfVyFNfWdaJjVMfkx1aXJfQEU6RiJGO1YjKFcjbTMvOEloel9aRmZ0fDM5em14Ymp0XyYpRW1qdm9xSVhkUzgpXilOL3ZFXnkvST85bSgiSEEpdFA5eEcu'@;
put 'cTE9ZG04QFBHbCZob1l1Q0VIbStCIVo2KFMxKTt3ZT56SUE4Lkc5cmV2bypxa0o4eElAcXByTik5cGtEMjNIcis+XmUwNjF6SnwrY1VUMltdeG45eH02TGRmaC8wVzJjb2hpNHFTOjVIb3doUnoiZH1bSktnJihfN10zWklgMShKR1khNFovQ0pZYz5UVHZMd0huXyojUkQ2QFFdJVUvSCU/Ry9J'@;
put 'SUt4V2prYnJAS2V2P0FQT2VXfkQmPi4/XzdUPCk7Jk0pYTJsSEZzMlMyKk1DQWVATFpnIkVuOUJWRVgvV2Z2VUd5VGIyfGt4Kyk3SmBCOER4N05wclB6RiZuKmUsTW9JVnRxTXhIPU1vQ1hUUiszYW52Pmo5TCtCeVRfXTouN009YTEldXVyYF4hJW9LSiZMciVrJWtYJFJXOUJOVjYoPGRUYmlR'@;
put 'My9kYVgmLFpVY2E1fnJ0XVJlI3FtUTMvPmJVPn1mPThuT31HOHl0JiNZSHB3KDt3V19mZGxRVHxBXVl5I11FQ14zVE1dMjJFcWZvMChkb2xEVSFxX1gmSk1yaHJnd2Q9UTg8OHJkJT5xdDZuJEJOcmhyQVQ3I3A3cEdjLzU7YzkmWjNVMik6RFEmdl99ZHhNOXI8bFZyOS5SOzVJQHFtYFNFOXBO'@;
put 'dy5iL2R5WnFhVkZMOCRlXntGX297bnFiY347QigpaXhTUjxHVys0Lz9kTUI4Uiptb1pgYFBpcCsxOktObTxgZGNme0h0WDZfPytdNWVMbnhCfTd5LmJoKFIvPz96aDhhbUdgVj9meTNeRXk2fXQvKThCVCNRZmJCODlFbS44JmJ0I11oYnhfPFhDcVRAQSY5RSl1QWdFfHBSb2VNM2o4ZmRUWXp9'@;
put 'MVAwYDJZc0VEYFlLSUIzJUBeNmpMaGx3d1koRykmfU1DaDtPYjhAW3dxOWBPZ04uaEQ1c1t0Lyh0SzB6TmJCRGFQKV8kYV5kXVpOPzIjYzFmd245bkdfM0JTNUNDbFphTj9QTzxFTis6MEhOaVd+UGI1SWJAZldXKFBtOC5Pbjk+YENuJFFYPFdnWChgW3AqNWR4ZyZEdjkmSG40WnxUWC5udkB9'@;
put 'L3RsMV9vWEVufn1+ZGZDeFFtVE1+Rzo5SF9odjFgV0BfTmJTMVosdSZBZT9jZU5hbmMrb3B9P2pWcUxnRUZyT05peGJiOXxsZkhiMXEvay8wLHF+V2xKPmxuOD1vYWQ+Wj5lSDIsdzhkXm11dT56ST4mZjZdPkUxXyRvSHEpZCJwIkxyRF0jdTA5elJrUHNOakJ3P1ghOEI6e2VaVGFYZ0I+U2RM'@;
put 'LiQrTT4wRUFrQDwwLi8kfDgraXM9KzRLNDxOcnZjSXxDLmRMIys9QmxPMjVNN202QX05NUlmaHdSYldCMTdtUj5ga2FlWV4vMkk2c1FqYUs9KzI0OGZPcngqSkVaPEtCbU8jbn4mIlczKyRIUFpteCYyZHFmP3hUOHA4QlhecENQbi9kKi9rM30+QmtMJlV6R3pfLFNENVNJe1picF5HdzpLNjhD'@;
put 'PnNDYyV2IV4uSFU2TVV2OGM3MUB6ZiU+Y1lCOCZqTyJPRVVMenAwKi8jOEtkciVLYE5jSz4vcGVJdm4+dXM2SD9jKmgjcDkpISwqWzxteWBjZiFEUSNTX1duYHlkZ01FTko+WVZgKiVRRzA9aEtpP11XW2xRR1h3Qz05SUZCQDshNEtiR1QoamhYWyR2NFk4IXBMIyxvKWwmOHcuTSxQLy9VKSkq'@;
put 'dTlCLk93JXJUZT0xTGxMdUYyJHFVQk5NMXE6SFhsJEB0NF48SkVncWlpLDtYUXosa1o1X2R1VXxWQkAvJFpgKGZlO0Q4dTNPSXYlTGEicHhzX2tANTN9RSRbZ1FXfFQ/djZ0UUIufGxyWz49eVBhS3NIVHh7Ono9RCZdJkdmbTZ0RjBEciwwOi5ePCQuRSUxIWFuWkFFRXd+QUN8Ojo7MT1mKHI1'@;
put 'Uz54ZiZwUGBFcFAuKWowZT9QWlc6IXNFUz8/IlRBTWBUekJMfHJGTkd1RkNZMThjPVYuKVY8OlUyWU03S1t0L180eUtXMUZ+O2sxSSgxV0kzMk1nYHhgZ0lfaG9INS9JdzxKLyZ8RkIrYWEmYDUxZkF+dk5Od0xBbCxIejFKPmRePlk2VzE3ZWVpR2tTbWFkL2ZHc0okSHs9JkI4VnxNNTRMd1p4'@;
put 'SUtWUnUvZ0YxbzphXnZrbj91PytfbEcrVW9zQW1xKDBjP0Q/OXA6MVtzVHB0JSxRcFQ3JTl5SV96MkJuTk01Y0ZORWA/aUdufVlpdD08PCNVSi5XS089cTo7V3AkTz1odTp3LjVXLHJqK1oiPClPeF5NKEQ6Zy48KDglOTFzPlJkLnF3XSZLQGA4L0Q8TysmbUAlVWtwd0hpc3RlJDA8WUBTQ2Nn'@;
put 'VmhMK2VseiJ7UCRRS217VGRMaWs2QGhEN256Zi5KbiFAMUxiP0Q+a08qQixYST53VUNfTTN8O0gpKnFQPCxlbX1oMypWJClaKyteYChmUWRdRiY0Tjp7JHs/QihOIUUrVmlac29XY3VzNChEJngqVlEyLilGTilFbUQ3eD5PWSs7XTxMdVp8LkZjPXxrKjVZakZ8RVUpeHt5UWZ0XzAzdiwibntW'@;
put 'Oy8qRkZWVSkqQ1F6MkBlQyohZ3EuKG5jMSgkbCNOa0AuMyhCJkYofSRfTHxOa05ueVQ3Z2lzUU9DcWhKX1RAT317OUxFbmQhOzZzR1Z4SyNNcltreyVbX2pGZXNlJDRJQjhbKCUsfnFlWiRwRkFeYjVMMGV+N1VyK3UsSW8manU5NldgSWVISTxgPmdqa1JFJlZyPSwyOCE6WWEwSytodVomMFBp'@;
put 'cHhFUH49LF5sc258NS9nR11Ma05fbiEpVmRtMGBIKkFuUCYlckJWZyYqKyppSihKTWs+SCNeUzQ1NyssYyxTRyM2NGVzOX1kVG4uND9bV2cmRkA+JTpoZn5pRzcsIzQ0YUdIPWooX3p0PDxQQ1dxRXd6fTJtYGd9K0diTWhmYjlCIU8xPzhCcyZIQihINWM+dTYkezJ4eSJrbk5wLmdWKXlrUFcr'@;
put 'RSVjYHIvSHE8enBmfDYzVCQoLmRvaz5gQkZkJlUvRD4pJDhtYUldfCgoYjEjcDlGSDYyNUE9byZ2aE53bnc7PUQoYX4wMlQ0dTZ1QGpPQFZjR01BPWppYDR1b0dTSUhAIXRNPmJfTSttXlk+Kl5JU1heRXY3OSFMUDVyME8ybURVZ1pgVC9wZnIxVih9dFlxT0RZandxfHE5R3NyODFSaVRTdWhA'@;
put 'Sz57R0VhXl9tMDN9OHJKQzRQOnM4W0NqJUMma3BiOFJeaDFxdGIwWXdZTyg6QEJ4fFcrQTJtMVZyWT1nLkYlRUpRJk1UXVsoUHRXTDssYy9kazVYNXsmdlBUZUUlWkdjfS9MQlZ1JklvLHtXZDEkSEt2fUQrUEFscURVbjVORFAqRDxXJilKQ1pyVWQ8IlhqaCteZCg2e1cvRlZZPW0kPj5ATFZo'@;
put 'IkZeZEQ+T1RvcXNbXSVhUyNDMiVSeUorXzsrfThpNjBLbnw7MWZgY21bKzgyVGg6K0hlVFpteTxHbltGXVouUjEpfUJOJlI6QXFiKHgjTEVCISpEbHxGRzRROm4oTkd9eXZmfGFoVDZrYXwkb2g1WGhLRSU7UWV8UDw6ZTJpfXoleWt1YzhCJmJFVkNQfGAoYEExPjx7MVRPckN2djlAckpBPXsi'@;
put 'bH42a10mdFNoKzxUMEx4RGg2X3NHdFZLPTU1TD9rMlNuX1kkJGlOcHI7PnZUYHcyWkhxS252cDRdKHkoQnEqWSZmNDgsR3QxaktnQH1LPHl9YjpLL2pKR0xKWVM6XUtdOCxJTyYyR2FHXl4yNyZmQH1ePmJNZihHfmJxfnM7ZW9iKVIkVmI0fSNyWzk2VSghc3x8ckpOfF8+L1ZXaUVSY3FsNEBz'@;
put 'NWBxP3JFUGhBazEhMyZxX0NWIjZdI2RJZ3hHRCFWNHovSigsKUZebDYvdHVdfTNgQiEofnx9YXxFYyx+JFQuaSZfX0Z+S2MhL0NjfFVbNio2OWVWZiRic05SN1RLOnJjYSN9fGJdI2klUURKMFJTflF7QUcyUU0hT0RocWVwLzk5KTxrfCNsW2BpR2gqYWsucnxBYEZrXnN3c0poJj5oV0IkWDQ+'@;
put 'UUxbTUJDSCs+IkJibn4+dTclc1RaSVZKY3MpWDhITDpvK29TNCIvIkQzPjlNeWszNU5fJTZURWh+SXtjUj07WTI5MmpoMnY/QEd+TXs+ND07ZD8yXnkrYFtNOz4ufXJ+ZjZgNExfS2gjOzx1JlM8P1gpLipde1YkPDgkaVdWNigwSlA7W3A2UiJ2cX44fXppL3RhfSZ7UV1lYXkxKDB4bkk4YEY6'@;
put 'KnVIV0xLZEd9X0xkNGhCO0JheUh+YFdNPFE8KClsMWgiTH5mNn01SFJMKnNkYkE5Y3MucH1zUlpoMn55PlFsW1B9Y1J6OUUoUT1WfF1bbTs/O1EyOTJuaCxzWUZpfT5bIXBtVzV9ZXwjPilze2tnTmdue10qQGFuczE0MVBWeVN8I1ZbKiJfc3V+YHF8I0RbYiRVVyJ9UllyVzplVGFDSDFZXixB'@;
put 'eDBofEVQVFZXVnwjSTY+dH4jZl1lTEwhSiJmX3plJUQ1Kz5zbz90RSRfemRVTlhgZUB9Ryg4KX4kZFQjWzw/KiwoUk92aS96aUcwQDFTZFI3PyFMdlZIKFI3WWQvP2ZsUkUwPlVYbSpIdjgiI0xpdGpESiNbaDQlc1kkKFJxanx8RT95a1I9fSswb19IanB1PFI1Plt2dDc2cS9dK29JJnRhbFEx'@;
put 'RFlncjFoIUg+LjdlK1thITlvLmo7byNjdDxBYlVFYVI4Z2tHai8jN29JbVhhbFExeT0xOipUXzsjO2F5L1g3bntJQ1ZYbjxVeUdCeGIjfnQuSWBVSzMhVn5ocTI5Q1Bpd0N+bmREblciRHRgNkc5dkBJK102R3VzNTlFSHNKZSFbajlwTEhlUV9EaS95fFpEc18+PGI2bCpffDZnfCNRaSFnPjBz'@;
put 'L3IpcH5CPGYlJDhdNHY4a0ZuOU5JOS9Ha1ExK3JJMExnUTFTSD1gOmh+QlJ7LjRZRVBpWio4fSYhIzV+Q2ZmSEV6V0M3YSVZZz9Vc3hwVWhGLkxXUmVGRyxGTVEvfUNIeXQ/NkdSZlUzNVJaWkI5MWEsRD1vV09EblA4MUxJQDlHaltGTnMuQnJXeD9UOXVwVWNrWStwMWhBJihZWyg5YE5NJmVR'@;
put 'P3dzR1hETSZlUWcsa0U9KFFGOWdNZSklWmw6YEt7ZiVQUHZSWURTcTlnJCJAKD0oQEpYQmkzdlUiJnFfZiVIUGpYLnQyLEg6VFFpM2M5VjNVcTlnWnpTJHBwSV03WHt0cCUkTWZRWSxZN2BQSmJkWFsyXTdnPjFmM2M4ajFbfjlYLylTP2Jle01tLGxuVn5hK2RGWm5iY2tUZz5mUTEoU3Y3Rlph'@;
put 'RGVRJERWLChUUFlTWkg1WEp3TWFhcWZ3RCZVZ1ZSYylzMUIuVWdWSVgoVFs4YjQ7Oy5qZ1pMeUZoUTElIyFbfjk4W1tSNVVmUGNNNiRrXTg4VmgkNGxwO1p6MSgzOTUiQ05Rd3dYSE0sKVtKMHF0VkVbaCpCbXBTVUEheERibWE0YDgyLFRhPG9zSSFWeWo/b2R3ZU1PRXZHIy5kWTJGfno9TFFK'@;
put 'ZVFJLChbWlFmUXlEfDBaWXBhW3RvVXspYnYxYUJkb1UhTWZRRSwma3lWUX1sVj99PFlCfXA0JVo2NVZbSzRHdzlqP306OUhMKVZrTXJjalFAP1tMMVYjTFpYfWJFI1VEJlJ3U15uNDtHbSR6VCpwdyMvUlQwMT9HUSNqR3dlSGRTP2xXOVc6VWwre0tiYzhmaDtnZzZdZkdjTSFWWDJuM2gpRHR7'@;
put 'MDopWD94REN0fWoxSGdsJiMrOl9vYlBMejZTSCVEZEpnVEhGO11aYSMuZU5bWTtsbkBoQ21CWGpQTUFgeUckanUvYmw5bVpTIVBQSHVDK0pmQHd7V2FyKkc0WT9IRVBbKGp0SzY+Ukhpe307WWl6VSQrbkdTPGlXazhoREh7NE1PSz99JDo0T0d5XVlZbylUUGhZfi4qUUd0N29nYj5YYkUuU2Ql'@;
put 'MjZsWEMxVltnMjIrNkJRMSR1UDdfMmtsSkxmQlU4eloxaDdLUi8xTHI/Nlsme1QxUURWZmtZa1Y3SCxFdDxXMDZaXnlxdUpPOXl3XjpCJSVsTlF2SSlocTVfeXV6WjNCOn1jfXs5WEhUeygpM0VoRU4/Uzl1dWJZSEhhYXJQbUZNNnBaV1l4RCsvPGZWVnkjQ1cvTl09OnA5Z0xkeTR0T2FsdE8x'@;
put 'a3RuSGwycEAuUVBrSCEpfjZiOiljQyZBZXRJLHEpJTQmR0g4ZjtDJWZBZ11gYzEiQzpGJj0jRDg7XWgwNjdjXkt3RngiITVAdSRERVIkYFRGXThWaW8pWUZTPnxMez1mN1lJLDNCezB6UVJteGJVLjArZyg3Nkh6cUF2MWRLeFZ7NnB4ciYjP10vYitgMVs7PixwJlssMyp4Q18sYT5NN0dFc1JP'@;
put 'YHxZS2w6MjF5SHxxMk4wXS8sUWxIXzJjQD0ofEsyRD5OcmhpKXVLZ35CRGBSXlsvVnRreylYLzJoVEE4b29GaEBGZnB3MyhCNzZPbnFRYjpAaF1lJDdDUG03NlFfXyV1RXF8ImdQe1EsYFs/XVJAZ1toIkdYWm94K1Y5eTc3WyhHb04wVHd4UykkRWVBPEduUF9rTClle2hUKXhxfk9wd2F1MX0y'@;
put 'Yy5lNz5VN05WYzE6N2lQTURiYVNTWVZ9cV5zaGpicVVXOmFKYCFZczomJnFwNCUiUVp7bCxbO2NOfGg1cVlnMWowNlN9W3sxJGVKImR8PncxKnFRLHI7SHFETTNUJTxZMlFsKldYMmwodz1HOzVmOVM5fUlpe3tRNnlXZDpSfDYsRHFCYVFUL3NDWEtpd1Q8RDJaSnFzaGxnSzhJYFRwQnFsYnI+'@;
put 'fGEsamo+bVZuVkQ+JTQiXioueW5TNTlPbUNXMjhyS1AvX0dzSk8qI1FfK05NX3lZcmYpanB5eFNYSXcrLCNRX3ZJP29ufF9hXi9WdG97cSkyVFQyfmRHN0NMIkUoJUIxP11NcCtgRihuUn09Wl19RzdSTCYkSnRTS0JhfEJgWmdZd0E4QmouO0xZPWc6KHpLKEU3W1RLQHszJFh7MzpqaWIxR3Z6'@;
put 'c3BtZjNrTkomTXJMa0VqeXZsc3lhRWAuMjhTMDZnZ09ANyhkS2hkYEE+cnM8Y0l+QG45Z2dpX2pbZT06cCUkUUVrITtWamJ3O283Ozg/ZWQwd2xZN29ePVNVJU9yWmFPeHhzTFtPWk5fbCw0ODs4eUYwOmg+JSZNYip7dWJMPmBFQWUqeyssciZXIyVdYCNScXhgX3lnXnReQmlhbTw6bCN+ZHd4'@;
put 'aXBTaERHODojRjttKGEpNCFELHFFZFN5VHpwfGVgPmVoPGU3cyNibjUscHtXfD5ZKj80OU4+RncjbW5IfUdAK0orbSFBaiFMQjdhNmRxNCVNYkZ1SUxBVkZlLDdVaV9fd3ZHXz5VJWVDaU1AX3IlQ1VJdUlsdXJvZElwekxibTVEVyUzR0l+YjVVN2Y9QDp7NHkuOEVsTDs6YlFuK19wUW8jekZ4'@;
put 'dkhiRSZmZjA2eEFbZUA7cSgsY1ksSi4jVXAjKHg3Q1omP0lXS1N9dUs6SWFkcWYxJF9LeSxrd1l7aGU7Mkh7Vy4mOGEoRDtoeVY+SDIiXig4fUdFR1VxMTZ3YXlYemg/Q1NlYEFwKXg9YlVHPmg4LzgsTEUvZjxCPl85LEx9TnN3P3F4TVB5V2FHQGlUMzllN2I1LitZJm0mQnw2OTJlYCUuVUV1'@;
put 'QksqSF8maE18azZRRHt8dEdudCYiZDIqQih7WldiMCxSOzJQK2BmWzVNOnAyKiozV3VRXVBLMDYwR0pxZ2NVVD4oMzxuOU94WSlvbktxOVo+Znc7MCp+ZHxNRnFTOTBgNHVHZXg/UWY2JEp4Z3IhfEdrcGhHOVYjalJGNE9iKztMeCFYZ3JCVCFHQ0VaSlIwUUklcVlqfS9LZV9AXzc+N09rZD5t'@;
put 'd2hwSHlicUsyRWlrWUt3fGdmTkVyUURVZXhbfEs7Y2Fobjt6PHo5SjdocFNoIUYvUG5zJGMhPU1YZ14kNm5ScjdxfD9lTjh3bFgwSn1oc20uOXFgbW4yNmh4Wy9lRz4hPWJecXx8RzdaaCYxY3lhfVd+cW1mbjhFK2w3L29YbmoveyNwTiVFeDVWPm0+VmdpVEt5KXVZQi9OMEBqR29aM1VSN0Mz'@;
put 'U3FzWy43WFpQe0ZCNVFNdzklK2NGfiE9VDt4R29wZ2NDWD9xRllISEVEPzd0anw4fF42JSlTQDArO285fEdaKXx0YklHP2QxfS9ObGNBQz5fZClEImsqYiMlNCYlR29iRjhRbDBaaWxEdEtQT2A2QGlUUmJJLkZ5YT4pRFYvLkd4YEJWR3EsV31lJVdLTEZOdlchRnVRMl1LayQ2LGlyNyZbcDhI'@;
put 'Xls8WnFObklfTzFLcUg2VTk/NFYrKTF2fTV3Lkp5fSVBQVtQaDxbclNBM1gmbUc9N2ZSdl86aU1uNX5uOX5VUnFNSCEiWyZ8Y31rfEpme0d4SHxCcUFlTXdlMWx5a3BRa31mKmhHYDh7OHljXlh0UX07Jlk0c2cvN1pxbk1+L3FlcXt8eCVkTGUwe25ddzMqNipWLDJfOiI4TF5GPEpfJFU9ZzZq'@;
put 'Yih8eCQ2TyU1eHAyRDgoVjZAbD8mJUE6RFZtSml1NlZsYiQ7cU9lLG84cCpZcF10S2dBLmJRWD5KRTwuSlQqcXwjRCZBZXIsQVNTWDQ8Y0k5ajA2dy9eS3VMTkc0WjVVUmpFUk97QHlgOC5aKSksLjBCPWtmZU4rZ1FuXXtkVFkoNVl7Q0B6LjRDUDY5P2g7V0opVHBAXlQ/Yj96Z2I4I31Ecix4'@;
put 'T3o5SzIhYmxUJkYhMHZXfXpnYm89dVNXVzs6OFkmMnFAdlMqQytUOzpeVHFAQGBRP2ZWOzoxTkIyPkNnLDtiQVNLRiEwVFkxOXc8OXEjYH5SO31oOT5DPGJiUmZHc0QlKGZjIWRoL3t4T0Q7PzllZTBGZ3RVMzQzdm9mXk49MnB+eyttNkhYMnpySU0pfkBeVyZnZVI8YjJRWUhmJTdCbVlKQkxH'@;
put 'ZnE1KWo/dGB2fkkuQEB+QEg2YjZeNDlxeTkidT0hSGg0RCZVMCNCWmZQUz9aMCtlYSlhREJBYj9XOjZJVTMvK2BhcEc8bz4xO3QocUxsMHZeVmpQST9UbStlRykhfDtlX11VXmQsQ2AxMEJZNTBZQlk5M2dOSkAxdyNAb29adGpJOlIzdyN7en16JVlyWDl1O2I+SSREcGI+SUlEZmE/MUAxOWQ/'@;
put 'P3UvND8ucFRQU2BITnhpQ1pbNVhqO1BDQUAxNDhvJSVEdjcrW31qQ05VWHRHcXpmYGZlIk51diZOWDA1diJNPHIxbnZAO3JEZG54aCgvWVRXUE8jUW8lczBZYFA+YndeX3RVfXpKQV9yVm5eRXA6QjQ7ekZ1QCZBT3BAQz9KNFY9XlklTV9wNTdPMj9iVUhBelpMSj9zb2ZKaTk8dWBPKHJzSV1B'@;
put 'QU44V3srfjVDNTVxezMveHV6O3ZfTSI0KVpHLHssdSUjPEtvIkFGKExPMUUiSnZOSzVofm9uP3orWmx1dUAjck9NQixYTGdyP2IiKVdEYDMrQyxUdXgxZD9iRmJ9ejJaRllCOlAseyx5aXtxVkgoUiRaK1tMP3JbLHgrREx9RDl2Ol5bJU5TeiV2bipYbz9WT1JofGpUQnRgYVFve3FmSkIsdW1z'@;
put 'amdHIzR6QSlLcVZ0RUFORW1zaj8vI2d+Tio0b2I5TDpGIlpXY3RqPy9HMUAxVWlxVm9EOTNeNzt1ZERNSjIiKH1We0opcjZYWmRSKi54Qk5PXmk7X35Xdzd0eGZneUIvSUNIT0dgMjB5QHdAKDdoLHNpNjxFdVdfSE5OPT9WQjF+a0FBMFl9e0tMWDZybUVCLExzWGh1akZXREN2QEZjKnxaUUJh'@;
put 'S3MlRDBHb3J3TmYwd29NXUdtW1tmciFlQUdkZSpuWlh7XX5SbnV4O0AxTFBYTzoua3cqVEFiQHchZXVjb2IpR01NITBvPTM8PnJzam50XTQ5cS4kdlNVNFVOfV0iITVJTHdkL3pnPFgwbj96W1l7Vk1NVXFXSiYjMyFybUZNfk5qez9POnJqQCh6I3smS2BzMEdyaiFjLlsufSNdW2dAMV9gOFtY'@;
put 'SmFFMjpycFgla3NuXjs/PE4od3hEdWBWZG9MVTNoRSUzXU84SyEwR1hKfnEkTzg8VEFiPFlpV3FDR3dVZU4rPGIpR1NGZywvfH0rQjVqWD0hL005QDluR3RPfX0rQjVRWG5YYE43NnEyZkZ8Rz5FPG5oYyhaYV1nVT1sUX5KMT44clB7NEo+Q15WRkwhVCZOJCgyRHYrTnohTEp6e3t1d206X3ZC'@;
put 'V1k1eGRmZXd9cU90JEMpMVg4dVlPMVsxM3s0JD8/KjRPay4lRFRdUmpKeEJsdEEuT0lJbDJRK2QzTCwpbWdlWXB1MiYzS1BRbUo5RjN3Il9VKXZleGQ3WDt3Tjl3Y1I5Kll3MnZtIkNJSD5ualM+K1VNL0FlZ0FmMyNXc084dCgjZFAiWkZyamVjdy9uXTI3aF1AQT96Y1hEWU83LihbPmJKKFdy'@;
put 'amVjLls9SCVeYGVySGxeM3d7LDk8d1pQI0Qrfm1+b1p9ejxyNm1PbiU9TSlSNltjLytkQisrZD5QWntfenxXSFYieSFlc2E8KkJKaT90YGRabVV1VkdaUXV7LGI0QG9BfUEoV2h9RUAxbUIkW29HLjo5dihVdEU4WWZQbitUUDVrbixuRHlXYE5JZCp4UGohW2BmeklLKFh2Q3ZWM3FvdGo9eUpi'@;
put 'SDFGXnpLMUwuQHE0VT0lKEt2Oj17OUpNKkZDK0QuKHssTHleJTlDKitQQCZ5e1BYJC5UWVtZd1FoQ0djRVhdSGh9ZDc4Vk0pSWk9ZWE6V14xYlgwUzV4PiskVk1yYmEqQTVZMXY6YD5ObipzVz8oKTU+I1shNzltdnM2Nz17PlU6dCI1R2hed3koZ0ViQmtPcUBndC4zS2hII1ZmKSw5RDZeYWxT'@;
put 'XkVhYjtCPWd1OHx7ISlRYkM0S2ZWRDF+U2h8eUhJJng/T1Z2Ojw2MmRAMXU6QG99fC5bNFJqREAxKmA4Wyh9JFtiXX0rfDNIWHY0NFtrJTl7KSl+QDRTIn13aFRSUUB9SUchJF8+SjF0UyhoUFhJNXR0dkw8QkZ6NHVKWWk8VkQxaG0zSV9WbyN4WXYpN1giaiZtQCZBPGhufF86ek9aIkl6UmRT'@;
put 'Wz8iSEtxfkl2MiVRO0NHTF1uelF8bFdgXV9jUyw/V1R7S09JI3R3Q1hadzU3RWtRe098QH5SO00lZ3pTVHtjeWVCQG9YOlkuczZsPERZfV0mRy5GYnkxNF4ub1Y0L3ZOcmovYi5bIWA2YkAyXU9NRypvRU9gKHI2bEhpOVJKVEpsIm5JKFJOK2kvTlk+UGFEbSsqSSpyc2orLkZfZ0U6QDtUK25x'@;
put 'YnsrbUtENWouZVRXYiFibF5sRk9FY1YwI1JXZzhGYzlCQDFuZD9vJn5pYWh+QHdgUV47eUF3d2lDMHx2OGw0Z2pNM34vXU4vfEdXbnA/WktuaDlVNDRlPlFoa0VPSz9zbzpNVTNoRWRWTTNXWFdXOVZSL30rT0tDNUVSfXpkVUs1dl9faEAydE5vRyEwTmpSR1VgX3pSWXw0Rl1NWzR7LDpMKChS'@;
put 'K05oL2pDNU51Mj5iMkBnWU51RHtSR3JSfDtyNnNAVTNGMGdOfjlLfkspSFNZNnp5VVc5fmJzOH57bkB6fVREWXQ+LyY6O196fVRTdVkmO2JbP2t3TmI/ei5UR1lFSlI/fkYpUyVNVktremdiJmJzPkhIJCFifmpgRks+LlcrVGBVeiFxLHBpd2VlKXUzVEZaYmY/YmdAfkBUSz9tU2k5MyFLKUc5'@;
put 'LDgkNyQjemBhfXhFLF5zW3VDSCUqYTw5W3U7dU9WK3NiRDBdKSNgd3pNVlhte1ghZTc5cWVqRk4+aXluZWZGbVhMXiIhbl1UNURRdzFAMWU6L2FeWm9qME4+RXdQcC57LFpVNWc7WSJLNGhwflh+c313KH5AVCpecT9yMix7LGElbyU3ekAxVWpvWGZYfj5WZGFKaTkhSzZyYSQiPlZkL00lZ0RT'@;
put 'U2RSYks6QF92eiRrWWtbW0NNbyswa05bdXpeOyYmfTp9WTApQCQ/e3ZbIVlSN3lTOEY6c2s0aT4ifXJqMW4pW1kycEl+OWIrVlI0YF9+cS5kfEJ1T1JGSjd+X0NWeEhWNnkiZmNManNoWiwlIXxaMFQ0QkIwYyFfflJxeTBVels8aUN+ITM6U2hnJkhJKVE5QWZoKDZqJl9tUFRgPkBGdSl8WG8l'@;
put 'KT19SU0jN2lIV11lM0tjemZXfCU5R1huMXBGVH1qQVUjcl9YKVB0TjBmQSRAdkkleF15NEZ9a2lKIVQzN3pFI1BaZUQiK34xRzhfVzpObXBseytETCpTQ2MzQnImb3pAMSNhO28pWnRqeUUoNGwiVFMsdVUhWXxNPHBGJjsiWGRoSHM4bXR9XnM6VWRHPmpXYG07JXVWcUxHKnY3dmhDY3xfbnhG'@;
put 'blcrM3RlfnJddn0jKChKIiF+O3wueFJMbHlNTz5qJmheLFFCbD5sVX5zOjIwOGl2QXJacTw7VyErREl9Sl14NCpkSzo5K2lmS0xZNjNObC5TXWp7dD47UmwhbHx+KDs7IjQhenh+cF9rdHlRN1I1U2h8cVtqNnN+P3xyd3lGNFEzKCNJaWgreWwhWXFWNlB4QCxvKmwmTls4bVJyIkk0VEh6VDwm'@;
put 'fSRifCMjKDRCfTxlXWkzMjsxczt8eEgzKixbMy4iTmZASiQiSzFEXkVLe3YyMj5UWFVSU345cip2fF0sWXo5NFhJRiZgLFU0Ri8/cTNPRCpxRCE2QywhTDw5fSZNSExrYCNBMDlWa1hGYV0lInBDa35BLmFNenxmNTd2cSpoQ3BfUSJ3a2ZoZ3hgTHA/eXBQV1VHbCFNflFPKnZLKlAudHM8VndC'@;
put 'enlzaDFEIlBEfUtCcnVXJlpIQFhvX1F2UExIPC9haH5+ZTEqPH05aTN9ZD1yW2o4NzxwJmwvSkomOjFleUgmYGE7SiIqfTpgSGdUNH5OaU5sIVB+NFsyKlJ8OXo6OyY0QDFwJmpKe2xjKUZtRjRPWXhLMTVZLEFsY3MiZXdrW3NMJjRGfThffEBQJmg7ZXZXbCFXc2YwbCFVKFpKdzpSNF5fK1V7'@;
put 'TFFAX2p8MyFZViFhfFhMPmk1X1RkVG5IOEExfX1BMi5peV9eUmdfKHM+XyIzeXZqfHh0aUJmelJxSWlSI3J2VVJjfDdXdEY3d3BDTH0mcUsvTj9ATEtWNn1OeFopandjcz8sbHVsX1RkLmVMQDosZXMjTWIrbXtVUkZoeHtYRmtdUzNwQ1B9KHF5eVJgaXA6JlBWe1NgL1NYKDkoV2VUXnx2XU9U'@;
put 'NFFYOXFmI30+YCFLLDthNDhKWSYkLlNFQUBRdm1oekooRXhfMy9SV3pWIiRmbkB+PGN7O1V4Yn5YeyM0XUs4IWFmalZDMSsmaltKKVRfbjdySnJ8RiEiQmF7Q2cuZVlMIlBAfCpqKnY2KkgubHNgfF5JO1Epc2ptL0Nye1BbentsdSNybWs2TUtdbjZwaz1eN1k/LkVIVzRTNGl0Wnl9RkZ7amBX'@;
put 'bngyVDwvfXByfmYqYEhpdkZjYDswUkprMHdpeyZvWEZCaERwKXZMVnRzdV1GWGRYO1tRV0VCdExDNDMzRFNANXRnU3ZEbmI9KiRXNW5nZ2REKG42eWdHWlY1W2dBZSFYV2pIfXNVMzhiPXxMMWJiWHk8ZGYjUitTL1U3Pks7Rn5TdW43TSE9OCRNcFRlSVdqXj1lRUlYMVsra15ndi9bWz1xPUgk'@;
put 'a248WTB9Smw+Iz5zKEt7fVd3YktuT042UHg+P1krSlkzVmcjM3pIZnpQK1RVKW4mbDBGPjppakI4Z1s/amdzZ29Md2EvRDhNcz9rOjZAMz4/Vm5ZQ1RZKzRAU29UaTxSVC9FNH5dYmxWSi8pSSM4XmJ9Xyh6PjNNWmU0SmdTOiNZP1RhVF0kYWlBV3NAbWlVWFdaKmc7YlJwOGwkXi5pX3p1VnY2'@;
put 'MHFZNHphMTFYbzlMellqYF56eToxKGxqb1FIVXlZPGVFeDw8dHg2XSlYXypTKkpSQXM9Wy88Wl9tJWtGa1hseDQoX1ErRmc9el1zalFjN0FpU09Kc2ppWDI6W3JjYS8ySVt8eVtMd2E/bzZqKHw/T25zeDAwQFFnVHFnOTdmY0NbMS4vKCE5S0NnMiklKVdgKXghT2ZpSFRWamxPfl9ecD9WL0cs'@;
put 'MjBabClKSTY9I0FwMG4ycW1qJERCKXpMJkwuTSNpa0BxaHxTfFBFdV8haXtAY2B0LileZTtAPiI7JUArdSYyeHRbRUFTXm9CdVBzMXZvSm9qLzRBJV8jYV4sanozWCghXWhld3ZTYF0hK293bnYjMjt5bmJzJEtWU0E4Nz1HOlplMWIvQmIwfiM2cDdDZTtmZFBXNFl9cV0pW0VsNyl1bjp8LD5X'@;
put 'X2kwRW1kNSImeyEoSiI7TnFTY208NDR6JjpBQW07dTVRYCg5aFV2P2AkJEY/XzdyRmpwbjdeU2M0ckg2MTFlYylPfUwmRzk1VkEmfDcqRCZ7UjFvO3kzZExxJUAsN11paXQ6LlhQIVt7UExkSFMwJmh9cWJvUVttWV5sL19meylDU012Z3ouUUJEaVs7S1AiQG1FSCNfbCZOJUFlS1ROQ2AudWJf'@;
put 'VlI2IypCalc1Pk8yTnIjWjF1LngoMXczKTwvZj0zZDY8ZHBVQHUsOCZJb3M/aSldZiFwKVNvd0hkVT9pLF1LajJdKnd6NiJLOFFndnBAM2JANz8xQjZ3di4rIXtMbWdpck04OyF0bz1GIVUmV2guS1RDPT9jb0dCZml5ZGRtZWc3cX4hISFQbCIiRD10XSQ/Y0BbblBTRSVidSxbJE9Ve1cqYHU8'@;
put 'VzE+TDA4aXIoWmduL3dCblE6Ky5KJnpEdkZ8TyhLZFRLK0ZFOXg/fGouViUlRypvKXZVJkAhdmB8NzEkJTN2dF5AJG9WKDF9fUlaZT44NDVoV2RXTHZMViU/b29CYUAjdmFDTipmd1EvUndKVjNtKyw7dSRUNShKSDtaJHUqcEBZXnsva0pSQTcifnZaJk52TzlZOEpzSG8yL3xAIlM2NCsieF0m'@;
put 'd2EmeSRoLzZ2LHQsaXcqKCI4R0BbYm9FRGQ9RS9oNUN2MldrSDlbVjZ0Tjd7Z0JCO3pVZFMpQUg0UmlQN3Ehdko6bjcxWyNGJEheYz1hMkdDTXJjfkMrJE0sQiExLGZqW3UzX1M5eVQ0QnxEa3R6NUoqPCYuSHc4YH0/LipfKCxoUlJ4UlhfI15kUzRwTFQ4YD8vVjZdMCYpMHNsZltaYHNGUiU6'@;
put 'WGBCNkEvVXRVPStedGM5e0cxZismWV1vU012OE90RV4/dHEoMDRZR0IvQFtsUEUsPXJGIkgpRlk2SmxwVy8qJH5EIk45fVpuOXxzPHVgc1pbUkx0VmAhakRxbSx5UWV3WFI+cjJjNTYxclZCVV9MVHAoKCthZEdPVk9RUSRZZlpKbiwwYSF2JUBNIWg2O0dOWiM0XlRRaEdLIXw1Pml7MmFjMVgp'@;
put 'JGg9NkxuXXVoJkA/LCVyL3B0fGVTZl04ZlkwdDhXUUZXYUN0XjxtOCM6SndCSHR3WT5+TkN3LkpsV3ZZe3E2cDtmPiUiWmtHTjIka3gmNzw4KGk3UT4xe05oTzQ0OVddbmxlQnlwWGZ0VGBWVFBfWUhsJTwwNDNXW1N8NkY2I3tIS05uS1gmP0NxdTNqNSQmVCprMjlDKjpOKSZMITo+OCghfDUz'@;
put 'NE0vQDlSKkojQWZHcDM2OVRWI2BlV31gaTd4VWk2NChte1pzb1U7QmV2JTheeUt5JVhaQW9xTUhaNFkxT3JhW3t6WyU3e18rLyNaMUZZajBjVXtKRGAhXWVTRGB8L081JC5MLnMzfFMsOUc3ISZue3w0ZH1EMTByIjIzYW12d0FDbX5DZUA0WmtYbmVVWT5eVCQzZUgpMz99fjxYWXorKlcwWyw0'@;
put 'fEMkVTgjVXk6RlNiOTFhV1ZCQnp3N2BXfDtRbzVNTG9mJXVMaT9MQmhvNzQmXmxgdHlBdzVTKmw6aWo5T2ZPazFCVVlYY1JTeSwsY2x9eGlOb1ZmL0JGLyNmVH5kMFZrW3k9dWRCbnZSbTRZRXpXWks0IldrQm56RDVGTzAma01BeGJ5bjAuVUQvNDshcktlMShFNkJ1SX1LSTNXYFd0ITAqVyN5'@;
put 'UF91KjpQXX01O3dWRnJyLyFyOExtdzxCKClgJDRAQGVgZTtvM2heZVlZMShwZXVKe282OUtCNTZ2QmtvJERQK096OXQrU3NxY0xgUSpPY3d2KVlxaG0yd11nW2x2Lm06P3BlVSkrX3IuPHdQLEk/TGl+P2F8bXhCcjFjOW5EdnZpRF1uKUBEcXtAZy9wcXBdOVhXa2xjel1ValF0W3J7SFgmVUlQ'@;
put 'WVNHdzcmelJjP2lmNTYjKm4vZV8pPUk3NE5lPipDKyU3NndFNVZfcTcqJTpJNzZWQiF1V29ZZT0rcD9pfDM8UkcqUXwzKTd0Sm0+ODQsW3soVXlwYlJwTzhIOTdXSUY4by89JGV4JURFOntON35gdTpiRHBQb0wvNXRlbXZIKF1YM08/JUY7eStqbysxWW1BM1guMDFLITVBJU9IWCJJaz8/dFBt'@;
put 'cGB2L2JNbHFqRksrOlkjZ25fYDdKIkdKO3RGMyE+QzRtYXg3bis3P14rUkVAKWFAK2o4QHVtWT1lQWlzNCs6KkZANlcvdGd+amB2Xld4eXBMI3EmdiFjMGYjUVllbXxUJikpTiN1c3U5TXFeIWJmbkBWVk97Sl5eRCJfYUN4WlRDcCVMQ1Y9QkJpUXUiL2pjUWQ6MGFPSU8lfHJKMW89ZEM+dTNq'@;
put 'XnY7W15MJnVYY0IpKG1sbn5ZUUE1c25GMXdBJWs0SVpYJUV7NE0pe3RQPzJCQnVtcVMkVnZPO3M0fWtGRiEsail9IkdAZ1MxeFo6OXtKWTZBfjxfPygrTXkzWGM7SiIzQ1hLX1pkJn42alB8eSlvZWY1WlgwLlVFeWA9LEooI2doVGx6NDxySVo4Oik8dFk5cEcsNldkRmF0YGVeV19VJjk9RFpu'@;
put 'NmVgKW5HeFErQzMsa0Z5SVE8fGRGb3pBXX1gdkJxLGkoUkghTFBIXm5Ib0tINUssbzZ0Iy4sQ3xwP1hxa3wpNXIrOlZbNThoeEAqMllUTDAsYDNZXUQxJmlfdHNKL0dmZktaanIiLHx0PEg1UiFeaTooJDYpPDUjRVY3U2h4PUEuRXUreHZ9LF50UGF4ezt+Mi5WVXQ9ZTJga0YhcWkieV1jI3dW'@;
put 'OHVTc202LjdoUil5bld7e2R0dX0qTFkydV9gempSP3FhNFs4fENlV0krbih3VGsuMllnKi5iTkJDX3lCO31WMiovcilDI1grKH1IRDlGPUx8PzQ9O2M3eDYlbU5AMzl7UkYxaCIuL1lGSmNxVGFtIUpJNDs6KEY8VTRIXU9nLEh0bVVnPTlDQls6O045Q0c3Oy98dUNPajJfSDlUcX5EPHhqd0o/'@;
put 'OTJRVFtObDFxWkNwXzU3UFM/fXMjWlc7X3ZtezpfUlpucz9xaHckbTA+KHxaM01JXU89JHNBXU1oSiMwaGNDSz11X0UuUzcqUmUvM3QjeFl5NmxiNG9HIk0pbVMmSVExPWdFMTJ8PFdaYUxVLHo1e3xOUT89SWgzaElUMzVQKSxaLEMwcCpoXyJeQldyUjU+WHYoLlY3Yl1fMC8ib1MvOG5LOEda'@;
put 'Vng7KXh9I2FWWCl6JmNibkRHSjAofGx1eyVEWmkyUm9reTlTImxFNnBrcTFdUzx8JTBVM1UzXUhtQy9eaUZiNV9dOCgremF3M3lVS0hEZmgvImdgV1dPQWoocCtjMHU6KlhyPC4wM1UoLEdBPmUqRmwuWnFWUFpKUVdYTCxaI244OUN+WUVwZkJZPUkyUCZRd0F7cUtqRU8xXiRyRDFgc25vQkpQ'@;
put 'aDpfMSE1ZyQ+JndneClgdlhaPkAiMkZhUDwqYCF2MFcxIU88c2peQ04zJXFWUX1ELjRlKGRrWlVZXjNXcEtXVUBVK2k9YzwpVHtJQytjJUEpV2svNDk2VFl4fGlTeThQUitDeGUuRj5bd0BgJGsraGQkQU9aPEJyS2A1VDMlbiZzTEQiZUxJUGoiVDZmM3J5ckMsKHtPTF9Hel9jc3t9I31TVjZq'@;
put 'Z0JgJmAlY3tBUz5ud05AYmt1ODBnRDp4N1V0RzJUPz52IS4/QDp8Jj1udDBVZGRAfCN0LE1tWFp8RjExWVZYNWRPU0xBTDBebVRaM34xLHZDbiFATFgkaD1GR2JBNkxoNCVeOXpnb3NMTE5jbldsNCt5OTozeVpabX5bSWgyX0d2bz5AVlJzWCxUbmBTZTc+X3JGL0giey9bamhhcGl6OVs/K2ls'@;
put 'ektieXtNKDI+Zl04dXE3eE0qaDRlL11IKnZNUzp5XnhNIlNUXU8sWkdlK2BiLmBxVzluRDpUIjZSW3F2PWwwcDgwQmhgZno1Wz1HRVlNfTEwQnxBM19+NGJoJkxvWTBMNH1uJlQ2N0x9b3gvcVJYVHtlKGUoSWJbbnthZCQ2OV1qWiFwaDhPOmtkK2Q9Z1c4SFIyRDsiPzRQdjFwSXtWekhBMD94'@;
put 'ZT1PX3ZVXl8zIWpbI1ZYKCUuTGM2c1U+OzF4SSVLbzhjekhfUnk5bmM7MXlNOFkzNzQ8Uk5lWCtQcSJVLCtjfkUub30iVn5TMDh7cWN+NDNEYlA0MUVsVWp8eGJFTGpdWyRATUIvYllGNFBvVjZZZjxlKk4hWT87SFpeTjpgI100TTRSKn11ST90QEBJTDcmdXY1cXl0bmhEeW03PE5dIiw0JCQm'@;
put 'VUd7N01tfEU+NCJYMnx9blA+aXtUUjlPfHdPP1tPSUN0Y3gzNDohdm99Qz9YJTlqOU50YjtlKG48Mz5pY1VYOEJ9KTRnOUIjfFlgdXpXJS5OTkxTbyR9KE5kTTAybSEoKzUofnBZPndWSXdoSV9wNXxATCFUXWMoPW4yW1lNbm4+VWwwfT1nQjhgVyhvZDk6WTVwamg5P0R2QV8/JiQwLyZseSFn'@;
put 'IT1qYCtdPj9sYGQ9YHttSSRLVWh8dXteZVsmOFoyXzRXI305XilNdlh5N2smZU8sLCY5W0FQfXhpSiomTShWIl9wJjBpXztdVDl2JkwzR0NwWTRNKmVRd0QyQGR+S0JXMjVZLlgweG0wfnhfTzN9OW59YTdCNXJDJWhDMk9+REBjVDBeZUNhO35TXyI5QDg9ZX5uISlCaEBVUXJeZXxDVFg0fEBi'@;
put 'VDtTZlVOaGxXdnZZbDhpcXJTM2gpUF5mOUA/dztvcjlrZXxWJHdyPHxCT0YuYSFjVSUoOCVzZkMoMTwuSntzLk04KzRndT1aTjI9SEVISnI4d3JDRkEiZz10d3ksXVZna2c0QDY2R1lGVGd0MGBdfEdlaDk/N2tXLlskbTQuJExFLGo0cChWRURRcX4uIkI7aVlnTFUuN3VSdF5scSxmM2UlUSxe'@;
put 'VHJpZjdyPC40V20yfTMoYGBAKitQSTkoMD9Ke1Aze3ojJGVEQjxmOU86JX1qJSolQ2U+VFo4SSYhLGdCdn07ZHk2dXpsN1pASFoicGI/cjAkZz1IbX1gfGRNYlpYaz16cy5CfWtKY1NmKiMpRDowOEZyNEM8YnJ9ZHs3WFpNVXk6VkJ9NSs3KlNaJl8jWEh8VGJYclZdYU5zVV1vKnFvdCp8Yzgp'@;
put 'I3ViPTNqNGglemI2XzB1JTBLOVprYEtnWzU7SFEhO0JAXl1IMjl+cGdrJU8uZCZYW3gjUW9eKTldYSp2cFcoQ0ckcSI/Pj5sKEpQQEBpVURvQl90cShwU3o1Ynt1KyYqMix4eDpDeipbRFNhXmNXXnJAZVhAUCIjazdMbjhSb29kNFZCNGkya3EsIWtCbTd0V0RAVTo7MV9QI2d9MSo5bHFLZiIq'@;
put 'MFQ/KDlGImIiUD1fLndec19YZzFCbFdbO3klOHw8T1RMakd5ZChxeEpnN3hwIUx+ezNzcntaNXFbe0VJcF1UKVVnY2YmJnd9bHUrc2p+S3d4UGxLM29sOms9KWE7M04mRzJeN0w6dE1QUHokLzMkfEZwUiZQOWpzfTE1M3dUNHlifW5MRno+IyMlaiRJaDB+UGBCX3gsejhoR08xXmZzMHkjVUMv'@;
put 'c1RoMlN+LlsxSCQhJEI1Jk1QeDtCJykpLEN3fHwoQ3c9UEplKHt3YXNtQmluYXJ5OkpVLGxvY2F0ZUZpbGU6dm9pZCAwfSkpLEN3KS50aGVuKGw9Pm5ldyBEVChsKSl9c3RhdGljIHVubG9hZCgpe0N3JiYoQ3c9dm9pZCAwKX12ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZS5HcmFwaHZp'@;
put 'ei5wcm90b3R5cGUudmVyc2lvbigpfWxheW91dChsLGE9InN2ZyIsZD0iZG90IixoKXtpZighbClyZXR1cm4iIjtjb25zdCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKTtsZXQgXz0iIixUPSIiO3RyeXshZnVuY3Rpb24oVyxpZSl7'@;
put 'Y29uc3QgcGU9e2ltYWdlczpbXSxmaWxlczpbXSwuLi5pZX07dmFyIHdlO1suLi5wZS5maWxlcywuLi4od2U9cGUuaW1hZ2VzLHdlLm1hcChGSmUpKV0uZm9yRWFjaChFZT0+Vy5jcmVhdGVGaWxlKEVlLnBhdGgsRWUuZGF0YSkpfShmLGgpO3RyeXtfPWYubGF5b3V0KGwsYSxkKX1jYXRjaChX'@;
put 'KXtUPVcubWVzc2FnZX1UPWYubGFzdEVycm9yKCl8fFR9ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighXyYmVCl0aHJvdyBuZXcgRXJyb3IoVCk7cmV0dXJuIF99Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJz'@;
put 'dmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4g'@;
put 'dGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVy'@;
put 'biB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX19ZnVuY3Rpb24gTFQoYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYyl9ZnVuY3Rpb24gYzQoYyl7cmV0dXJuIE1hdGgucm91bmQoMTAwKmMpLzEwMH1mdW5jdGlvbiBybGUoYyxsKXtpZigicG9seWdvbiI9PWMudGFnKXsoYT1MVChjKSku'@;
put 'dGFnPSJwYXRoIjt2YXIgaD1MVChkPWMuYXR0cmlidXRlcyksZj1kLnBvaW50cztpZigicG9seWdvbiI9PWwudGFnKXsoXz1jLmJib3gpLmN4PV8ueCtfLndpZHRoLzIsXy5jeT1fLnkrXy5oZWlnaHQvMjtmb3IodmFyIFc9ZC5wb2ludHMuc3BsaXQoIiAiKSxpZT1XLm1hcChmdW5jdGlvbihP'@;
put 'bil7dmFyIEZyPU9uLnNwbGl0KCIsIik7cmV0dXJuW0ZyWzBdLV8uY3gsRnJbMV0tXy5jeV19KSxwZT1pZVtpZS5sZW5ndGgtMV1bMF0sd2U9aWVbaWUubGVuZ3RoLTFdWzFdLEVlPTA7RWU8aWUubGVuZ3RoO0VlKysscGU9WmUsd2U9aXQpe3ZhciBldD0oWmU9aWVbRWVdWzBdKS1wZTtpZigw'@;
put 'IT0oeXQ9KGl0PWllW0VlXVsxXSktd2UpJiYwPD0oRXQ9cGUtd2UqZXQveXQpJiZFdDwxLzAmJihwZTw9RXQmJkV0PD1aZXx8WmU8PUV0JiZFdDw9cGUpKWJyZWFrfXZhciBTdD1bW18uY3grRXQsXy5jeSswXS5qb2luKCIsIildO2Y9KFN0PShTdD1TdC5jb25jYXQoVy5zbGljZShFZSkpKS5j'@;
put 'b25jYXQoVy5zbGljZSgwLEVlKSkpLmpvaW4oIiAiKX1oLmQ9Ik0iK2YrInoiLGRlbGV0ZSBoLnBvaW50cyxhLmF0dHJpYnV0ZXM9aH1lbHNle3ZhciBhOyhhPUxUKGMpKS50YWc9InBhdGgiLGg9TFQoZD1jLmF0dHJpYnV0ZXMpO3ZhciBkLFplLGl0LEV0LEp0PWQuY3gsbm49ZC5jeSx2bj1k'@;
put 'LnJ4LE5uPWQucnk7aWYoInBvbHlnb24iPT1sLnRhZyl7dmFyIF87KF89bC5iYm94KS5jeD1fLngrXy53aWR0aC8yLF8uY3k9Xy55K18uaGVpZ2h0LzI7dmFyIGNyPWwuYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKVswXS5zcGxpdCgiLCIpLHl0PShldD1jclswXS1fLmN4LGNyWzFdLV8u'@;
put 'Y3kpLExpPU1hdGguc3FydChNYXRoLnBvdyhldCwyKStNYXRoLnBvdyh5dCwyKSksZnI9ZXQvTGksaWk9LXl0L0xpfWVsc2UgZnI9MSxpaT0wO2guZD0iTSAiK0p0KyIgIitubisiIG0gIisoWmU9dm4qZnIpKyIsIisoaXQ9LU5uKmlpKSsiIGEgIit2bisiLCIrTm4rIiAwIDEsMCAiKyhldD0o'@;
put 'RXQ9dm4qLWZyKS1aZSkrIiwiKyh5dD0tTm4qLWlpLWl0KSsiIGEgIit2bisiLCIrTm4rIiAwIDEsMCAiKy1ldCsiLCIrLXl0KyJ6IixkZWxldGUgaC5jeCxkZWxldGUgaC5jeSxkZWxldGUgaC5yeCxkZWxldGUgaC5yeSxhLmF0dHJpYnV0ZXM9aH1yZXR1cm4gYX1mdW5jdGlvbiBWSmUoKXt0'@;
put 'cnl7RFQubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJ'@;
put 'bml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5c'@;
put 'L1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLFFVLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6IiIsZW5naW5lOiJkb3QiLHZpelVSTDpjfSxmdW5jdGlvbihhKXt9KSxRVS5jYWxsKHRoaXMse3R5cGU6InZlcnNpb24ifSxmdW5j'@;
put 'dGlvbihhKXsidmVyc2lvbiI9PT1hLmRhdGEudHlwZSYmKGwuX2dyYXBodml6VmVyc2lvbj1hLmRhdGEudmVyc2lvbixsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSl9KX19ZnVuY3Rpb24gUVUoYyxsKXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQ'@;
put 'b3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIHpKZShjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lz'@;
put 'aW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsXz10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlv'@;
put 'bnMudHdlZW5QcmVjaXNpb24sXz0hMTt2YXIgVD10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLFc9e30saWU9dGhpcy5fZGljdGlvbmFyeXx8e30scGU9e30sd2U9dGhpcy5fbm9kZURpY3Rpb25hcnl8fHt9O2Z1bmN0aW9uIEV0KGZyLGlpPTAsanIpeyhmdW5jdGlvbiBFZShmcixp'@;
put 'aSl7dmFyIGpyPWZyLnRhZztpZigiaW5kZXgiPT1hKWZyLmtleT1paTtlbHNlIGlmKCIjIiE9anJbMF0paWYoImlkIj09YSlmci5rZXk9ZnIuYXR0cmlidXRlcy5pZDtlbHNlIGlmKCJ0aXRsZSI9PWEpe3ZhciBPbj1mci5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKEZyKXtyZXR1cm4idGl0bGUi'@;
put 'PT1Gci50YWd9KTtPbiYmKGZyLmtleT1Pbi5jaGlsZHJlbi5sZW5ndGg+MD9Pbi5jaGlsZHJlblswXS50ZXh0OiIiKX1udWxsPT1mci5rZXkmJihoJiYoImVsbGlwc2UiPT1qcnx8InBvbHlnb24iPT1qcikmJihqcj0icGF0aCIpLGZyLmtleT1qcisiLSIraWkpfSkoZnIsaWkpLGZ1bmN0aW9u'@;
put 'IFplKGZyLGlpKXtmci5pZD0oaWk/aWkuaWQrIi4iOiIiKStmci5rZXl9KGZyLGpyKTt2YXIgRnI9aWVbZnIuaWRdOyhmdW5jdGlvbiBpdChmcil7V1tmci5pZF09ZnJ9KShmciksZnVuY3Rpb24gZXQoZnIsaWkpe2gmJmZyLmlkIGluIGllJiYoInBvbHlnb24iPT1paS50YWd8fCJlbGxpcHNl'@;
put 'Ij09aWkudGFnfHwicGF0aCI9PWlpLnRhZykmJihpaS50YWchPWZyLnRhZ3x8InBvbHlnb24iPT1mci50YWcpJiYoInBhdGgiIT1paS50YWcmJihmci5hbHRlcm5hdGl2ZU9sZD1ybGUoaWksZnIpKSwicGF0aCIhPWZyLnRhZyYmKGZyLmFsdGVybmF0aXZlTmV3PXJsZShmcixpaSkpKX0oZnIs'@;
put 'RnIpLGZ1bmN0aW9uIHl0KGZyLGlpKXtpZihkJiZpaSYmKCJwYXRoIj09aWkudGFnfHxmci5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1mci5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIganI9KGZyLmFsdGVybmF0aXZlTmV3fHxmcikuYXR0cmlidXRlcy5kO2lmKGZyLmFsdGVybmF0aXZlT2xk'@;
put 'KXZhciBPbj1ZVShmci5hbHRlcm5hdGl2ZU9sZCk7ZWxzZSBPbj1ZVShpaSk7KGZyLmFsdGVybmF0aXZlT2xkfHwoZnIuYWx0ZXJuYXRpdmVPbGQ9e30pKS5wb2ludHM9ZnVuY3Rpb24gZ0plKGMsbCxhLGQpe2NvbnN0IGg9YyxmPWguY2xvbmVOb2RlKCksXz1oLmdldFRvdGFsTGVuZ3RoKCks'@;
put 'VD0oZi5zZXRBdHRyaWJ1dGUoImQiLGwpLGYpLmdldFRvdGFsTGVuZ3RoKCksVz1bMF07bGV0IGllPTA7Y29uc3QgcGU9ZD9hOmEvTWF0aC5tYXgoXyxUKTtmb3IoOyhpZSs9cGUpPDE7KVcucHVzaChpZSk7cmV0dXJuIFcucHVzaCgxKSxXLm1hcChmdW5jdGlvbihFZSl7Y29uc3QgWmU9aC5n'@;
put 'ZXRQb2ludEF0TGVuZ3RoKEVlKl8pLGl0PWYuZ2V0UG9pbnRBdExlbmd0aChFZSpUKTtyZXR1cm5bW1plLngsWmUueV0sW2l0LngsaXQueV1dfSl9KE9uLGpyLGYsXyl9fShmcixGcik7dmFyIFFuPXt9O2ZyLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oTXIpe3ZhciBfcj1Nci50YWc7KCJl'@;
put 'bGxpcHNlIj09X3J8fCJwb2x5Z29uIj09X3IpJiYoX3I9InBhdGgiKSxudWxsPT1Rbltfcl0mJihRbltfcl09MCksRXQoTXIsUW5bX3JdKyssZnIpfSl9ZnVuY3Rpb24gbm4oZnIpeyhmdW5jdGlvbiBTdChmcil7aWYoVCYmZnIucGFyZW50JiYibm9kZSI9PWZyLnBhcmVudC5hdHRyaWJ1dGVz'@;
put 'LmNsYXNzJiYidGl0bGUiPT1mci50YWcpe2lmKGZyLmNoaWxkcmVuLmxlbmd0aD4wKXZhciBPbj1mci5jaGlsZHJlblswXS50ZXh0O2Vsc2UgT249IiI7cGVbT25dPWZyLnBhcmVudH19KShmciksZnVuY3Rpb24gSnQoZnIpe3ZhciBqcj1mci50YWc7aWYoVCYmIWllW2ZyLmlkXSYmZnIucGFy'@;
put 'ZW50JiZRYWUoZnIpJiYoInBhdGgiPT1qcnx8InBvbHlnb24iPT1qcikpe2lmKCJwb2x5Z29uIj09anIpe3ZhciBGcj1mci5wYXJlbnQuY2hpbGRyZW4uZmluZChmdW5jdGlvbihZcil7cmV0dXJuInBhdGgiPT1Zci50YWd9KTtGciYmKGZyLnRvdGFsTGVuZ3RoPUZyLnRvdGFsTGVuZ3RoKX12'@;
put 'YXIgUW49ZnVuY3Rpb24gX0plKGMpe3JldHVybiBmdW5jdGlvbiB2SmUoYyl7cmV0dXJuImVkZ2UiPT1jLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzP2MucGFyZW50OmMucGFyZW50LnBhcmVudC5wYXJlbnR9KGMpLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24obCl7cmV0dXJuInRpdGxlIj09bC50'@;
put 'YWd9KX0oZnIpLE1yPVFuLmNoaWxkcmVuWzBdLF9yPU1yLnRleHQuc3BsaXQoIi0+Iik7MiE9X3IubGVuZ3RoJiYoX3I9TXIudGV4dC5zcGxpdCgiLS0iKSk7dmFyIHZ0PV9yWzBdLE90PXBlW3Z0XSxjbj13ZVt2dF07aWYoY24pe2lmKChQbj1PdC5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rp'@;
put 'b24oWXIsTnIpe3JldHVybiJnIj09WXIudGFnfSkpPj0wKXt2YXIgRW49T3QuY2hpbGRyZW5bUG5dLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihZcixOcil7cmV0dXJuImEiPT1Zci50YWd9KTtPdD1PdC5jaGlsZHJlbltQbl0uY2hpbGRyZW5bRW5dfShQbj1jbi5jaGlsZHJlbi5maW5k'@;
put 'SW5kZXgoZnVuY3Rpb24oWXIsTnIpe3JldHVybiJnIj09WXIudGFnfSkpPj0wJiYoRW49Y24uY2hpbGRyZW5bUG5dLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihOcixSaSl7cmV0dXJuImEiPT1Oci50YWd9KSxjbj1jbi5jaGlsZHJlbltQbl0uY2hpbGRyZW5bRW5dKTtmb3IodmFyIEpu'@;
put 'PU90LmNoaWxkcmVuLFBuPTA7UG48Sm4ubGVuZ3RoO1BuKyspaWYoInBvbHlnb24iPT1KbltQbl0udGFnfHwiZWxsaXBzZSI9PUpuW1BuXS50YWd8fCJwYXRoIj09Sm5bUG5dLnRhZ3x8InRleHQiPT1KbltQbl0udGFnKXt2YXIgUHI9Sm5bUG5dO2JyZWFrfXZhciBPcj1jbi5jaGlsZHJlbjtm'@;
put 'b3IoUG49MDtQbjxPci5sZW5ndGg7UG4rKylpZigicG9seWdvbiI9PU9yW1BuXS50YWd8fCJlbGxpcHNlIj09T3JbUG5dLnRhZ3x8InBhdGgiPT1PcltQbl0udGFnfHwidGV4dCI9PU9yW1BuXS50YWcpe3ZhciAkcj1PcltQbl07YnJlYWt9ZnIub2Zmc2V0PSRyJiZQcj97eDokci5jZW50ZXIu'@;
put 'eC1Qci5jZW50ZXIueCx5OiRyLmNlbnRlci55LVByLmNlbnRlci55fTp7eDowLHk6MH19fX0oZnIpLGZyLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oaWkpe25uKGlpKX0pfXRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dEVuZCIsdGhpcyk7dmFyIHZuPWtzKGRvY3VtZW50LmNyZWF0ZURv'@;
put 'Y3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKCJkaXYiKSxjcj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhjLCJpbWFnZS9zdmcreG1sIik7dm4uYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGNyLmRvY3VtZW50RWxlbWVudH0pO3ZhciBFaT1YZyh2bi5zZWxlY3QoInN2'@;
put 'ZyIpKTt0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcyksRXQoRWkpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMpLG5uKEVpKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9k'@;
put 'YXRhPUVpLHRoaXMuX2RpY3Rpb25hcnk9Vyx0aGlzLl9ub2RlRGljdGlvbmFyeT1wZSx0aGlzLl9leHRyYWN0RGF0YT1mdW5jdGlvbihmcixpaSxqcil7dmFyIE9uPVhnKGZyKTtyZXR1cm4gRXQoT24saWksanIpLG5uKE9uKSxPbn0sdGhpcy5fYnVzeT0hMSx0aGlzLl9kaXNwYXRjaC5jYWxs'@;
put 'KCJkYXRhUHJvY2Vzc0VuZCIsdGhpcyksbCYmbC5jYWxsKHRoaXMpLHRoaXMuX3F1ZXVlLmxlbmd0aD4wJiZ0aGlzLl9xdWV1ZS5zaGlmdCgpLmNhbGwodGhpcyl9ZnVuY3Rpb24gSVQoYyxsKXtpZigoYT0oYz1sP2MudG9FeHBvbmVudGlhbChsLTEpOmMudG9FeHBvbmVudGlhbCgpKS5pbmRl'@;
put 'eE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGEsZD1jLnNsaWNlKDAsYSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2Muc2xpY2UoYSsxKV19dmFyIGlsZSxmUWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCsp'@;
put 'Pyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gZVooYyl7aWYoIShsPWZRZS5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgdFooe2ZpbGw6bFsxXSxhbGlnbjpsWzJdLHNpZ246bFszXSxzeW1ib2w6bFs0XSx6ZXJvOmxbNV0s'@;
put 'd2lkdGg6bFs2XSxjb21tYTpsWzddLHByZWNpc2lvbjpsWzhdJiZsWzhdLnNsaWNlKDEpLHRyaW06bFs5XSx0eXBlOmxbMTBdfSl9ZnVuY3Rpb24gdFooYyl7dGhpcy5maWxsPXZvaWQgMD09PWMuZmlsbD8iICI6Yy5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09Yy5hbGlnbj8iPiI6Yy5h'@;
put 'bGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09Yy5zaWduPyItIjpjLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09Yy5zeW1ib2w/IiI6Yy5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhYy56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09Yy53aWR0aD92b2lkIDA6K2Mud2lkdGgsdGhpcy5jb21t'@;
put 'YT0hIWMuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09Yy5wcmVjaXNpb24/dm9pZCAwOitjLnByZWNpc2lvbix0aGlzLnRyaW09ISFjLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PWMudHlwZT8iIjpjLnR5cGUrIiJ9ZnVuY3Rpb24gb2xlKGMsbCl7dmFyIGE9SVQoYyxsKTtpZighYSly'@;
put 'ZXR1cm4gYysiIjt2YXIgZD1hWzBdLGg9YVsxXTtyZXR1cm4gaDwwPyIwLiIrbmV3IEFycmF5KC1oKS5qb2luKCIwIikrZDpkLmxlbmd0aD5oKzE/ZC5zbGljZSgwLGgrMSkrIi4iK2Quc2xpY2UoaCsxKTpkK25ldyBBcnJheShoLWQubGVuZ3RoKzIpLmpvaW4oIjAiKX1lWi5wcm90b3R5cGU9'@;
put 'dFoucHJvdG90eXBlLHRaLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkr'@;
put 'KHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IHNsZT17IiUiOihjLGwpPT4oMTAwKmMpLnRvRml4ZWQobCksYjpjPT5NYXRoLnJv'@;
put 'dW5kKGMpLnRvU3RyaW5nKDIpLGM6Yz0+YysiIixkOmZ1bmN0aW9uIGNRZShjKXtyZXR1cm4gTWF0aC5hYnMoYz1NYXRoLnJvdW5kKGMpKT49MWUyMT9jLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6Yy50b1N0cmluZygxMCl9LGU6KGMsbCk9PmMudG9FeHBvbmVudGlh'@;
put 'bChsKSxmOihjLGwpPT5jLnRvRml4ZWQobCksZzooYyxsKT0+Yy50b1ByZWNpc2lvbihsKSxvOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoOCkscDooYyxsKT0+b2xlKDEwMCpjLGwpLHI6b2xlLHM6ZnVuY3Rpb24gZ1FlKGMsbCl7dmFyIGE9SVQoYyxsKTtpZighYSlyZXR1cm4gYysiIjt2'@;
put 'YXIgZD1hWzBdLGg9YVsxXSxmPWgtKGlsZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihoLzMpKSkpKzEsXz1kLmxlbmd0aDtyZXR1cm4gZj09PV8/ZDpmPl8/ZCtuZXcgQXJyYXkoZi1fKzEpLmpvaW4oIjAiKTpmPjA/ZC5zbGljZSgwLGYpKyIuIitkLnNsaWNlKGYpOiIw'@;
put 'LiIrbmV3IEFycmF5KDEtZikuam9pbigiMCIpK0lUKGMsTWF0aC5tYXgoMCxsK2YtMSkpWzBdfSxYOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gYWxlKGMpe3JldHVybiBjfXZhciBS'@;
put 'VCx3ZCxsbGU9QXJyYXkucHJvdG90eXBlLm1hcCxjbGU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07IWZ1bmN0aW9uIF9RZShjKXtSVD1mdW5jdGlvbiBtUWUoYyl7dmFyIGw9dm9pZCAwPT09Yy5ncm91cGlu'@;
put 'Z3x8dm9pZCAwPT09Yy50aG91c2FuZHM/YWxlOmZ1bmN0aW9uIGRRZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2Zvcih2YXIgaD1hLmxlbmd0aCxmPVtdLF89MCxUPWNbMF0sVz0wO2g+MCYmVD4wJiYoVytUKzE+ZCYmKFQ9TWF0aC5tYXgoMSxkLVcpKSxmLnB1c2goYS5zdWJzdHJpbmco'@;
put 'aC09VCxoK1QpKSwhKChXKz1UKzEpPmQpKTspVD1jW189KF8rMSklYy5sZW5ndGhdO3JldHVybiBmLnJldmVyc2UoKS5qb2luKGwpfX0obGxlLmNhbGwoYy5ncm91cGluZyxOdW1iZXIpLGMudGhvdXNhbmRzKyIiKSxhPXZvaWQgMD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVswXSsiIixk'@;
put 'PXZvaWQgMD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVsxXSsiIixoPXZvaWQgMD09PWMuZGVjaW1hbD8iLiI6Yy5kZWNpbWFsKyIiLGY9dm9pZCAwPT09Yy5udW1lcmFscz9hbGU6ZnVuY3Rpb24gaFFlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKC9bMC05XS9n'@;
put 'LGZ1bmN0aW9uKGEpe3JldHVybiBjWythXX0pfX0obGxlLmNhbGwoYy5udW1lcmFscyxTdHJpbmcpKSxfPXZvaWQgMD09PWMucGVyY2VudD8iJSI6Yy5wZXJjZW50KyIiLFQ9dm9pZCAwPT09Yy5taW51cz8iXHUyMjEyIjpjLm1pbnVzKyIiLFc9dm9pZCAwPT09Yy5uYW4/Ik5hTiI6Yy5uYW4r'@;
put 'IiI7ZnVuY3Rpb24gaWUod2Upe3ZhciBFZT0od2U9ZVood2UpKS5maWxsLFplPXdlLmFsaWduLGl0PXdlLnNpZ24sZXQ9d2Uuc3ltYm9sLHl0PXdlLnplcm8sRXQ9d2Uud2lkdGgsU3Q9d2UuY29tbWEsSnQ9d2UucHJlY2lzaW9uLG5uPXdlLnRyaW0sdm49d2UudHlwZTsibiI9PT12bj8oU3Q9'@;
put 'ITAsdm49ImciKTpzbGVbdm5dfHwodm9pZCAwPT09SnQmJihKdD0xMiksbm49ITAsdm49ImciKSwoeXR8fCIwIj09PUVlJiYiPSI9PT1aZSkmJih5dD0hMCxFZT0iMCIsWmU9Ij0iKTt2YXIgTm49IiQiPT09ZXQ/YToiIyI9PT1ldCYmL1tib3hYXS8udGVzdCh2bik/IjAiK3ZuLnRvTG93ZXJD'@;
put 'YXNlKCk6IiIsY3I9IiQiPT09ZXQ/ZDovWyVwXS8udGVzdCh2bik/XzoiIixMcj1zbGVbdm5dLEVpPS9bZGVmZ3BycyVdLy50ZXN0KHZuKTtmdW5jdGlvbiBMaShmcil7dmFyIE9uLEZyLFFuLGlpPU5uLGpyPWNyO2lmKCJjIj09PXZuKWpyPUxyKGZyKStqcixmcj0iIjtlbHNle3ZhciBNcj0o'@;
put 'ZnI9K2ZyKTwwfHwxL2ZyPDA7aWYoZnI9aXNOYU4oZnIpP1c6THIoTWF0aC5hYnMoZnIpLEp0KSxubiYmKGZyPWZ1bmN0aW9uIHBRZShjKXtlOmZvcih2YXIgaCxsPWMubGVuZ3RoLGE9MSxkPS0xO2E8bDsrK2Epc3dpdGNoKGNbYV0pe2Nhc2UiLiI6ZD1oPWE7YnJlYWs7Y2FzZSIwIjowPT09'@;
put 'ZCYmKGQ9YSksaD1hO2JyZWFrO2RlZmF1bHQ6aWYoIStjW2FdKWJyZWFrIGU7ZD4wJiYoZD0wKX1yZXR1cm4gZD4wP2Muc2xpY2UoMCxkKStjLnNsaWNlKGgrMSk6Y30oZnIpKSxNciYmMD09K2ZyJiYiKyIhPT1pdCYmKE1yPSExKSxpaT0oTXI/IigiPT09aXQ/aXQ6VDoiLSI9PT1pdHx8Iigi'@;
put 'PT09aXQ/IiI6aXQpK2lpLGpyPSgicyI9PT12bj9jbGVbOCtpbGUvM106IiIpK2pyKyhNciYmIigiPT09aXQ/IikiOiIiKSxFaSlmb3IoT249LTEsRnI9ZnIubGVuZ3RoOysrT248RnI7KWlmKDQ4PihRbj1mci5jaGFyQ29kZUF0KE9uKSl8fFFuPjU3KXtqcj0oNDY9PT1Rbj9oK2ZyLnNsaWNl'@;
put 'KE9uKzEpOmZyLnNsaWNlKE9uKSkranIsZnI9ZnIuc2xpY2UoMCxPbik7YnJlYWt9fVN0JiYheXQmJihmcj1sKGZyLDEvMCkpO3ZhciBfcj1paS5sZW5ndGgrZnIubGVuZ3RoK2pyLmxlbmd0aCx2dD1fcjxFdD9uZXcgQXJyYXkoRXQtX3IrMSkuam9pbihFZSk6IiI7c3dpdGNoKFN0JiZ5dCYm'@;
put 'KGZyPWwodnQrZnIsdnQubGVuZ3RoP0V0LWpyLmxlbmd0aDoxLzApLHZ0PSIiKSxaZSl7Y2FzZSI8Ijpmcj1paStmcitqcit2dDticmVhaztjYXNlIj0iOmZyPWlpK3Z0K2ZyK2pyO2JyZWFrO2Nhc2UiXiI6ZnI9dnQuc2xpY2UoMCxfcj12dC5sZW5ndGg+PjEpK2lpK2ZyK2pyK3Z0LnNsaWNl'@;
put 'KF9yKTticmVhaztkZWZhdWx0OmZyPXZ0K2lpK2ZyK2pyfXJldHVybiBmKGZyKX1yZXR1cm4gSnQ9dm9pZCAwPT09SnQ/NjovW2dwcnNdLy50ZXN0KHZuKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLEp0KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxKdCkpLExpLnRvU3RyaW5nPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHdlKyIifSxMaX1yZXR1cm57Zm9ybWF0OmllLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBwZSh3ZSxFZSl7dmFyIFplPWllKCgod2U9ZVood2UpKS50eXBlPSJmIix3ZSkpLGl0PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIHVRZShjKXtyZXR1'@;
put 'cm4oYz1JVChNYXRoLmFicyhjKSkpP2NbMV06TmFOfShFZSkvMykpKSxldD1NYXRoLnBvdygxMCwtaXQpLHl0PWNsZVs4K2l0LzNdO3JldHVybiBmdW5jdGlvbihFdCl7cmV0dXJuIFplKGV0KkV0KSt5dH19fX0oYyksd2Q9UlQuZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10s'@;
put 'Y3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCBuWj1NYXRoLlBJLHJaPTIqblosUWc9MWUtNix3UWU9clotUWc7ZnVuY3Rpb24gdWxlKGMpe3RoaXMuXys9Y1swXTtmb3IobGV0IGw9MSxhPWMubGVuZ3RoO2w8YTsrK2wpdGhpcy5fKz1hcmd1bWVudHNbbF0rY1tsXX1jbGFzcyBpWntjb25zdHJ1'@;
put 'Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD91bGU6ZnVuY3Rpb24gQ1FlKGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAk'@;
put 'e2N9YCk7aWYobD4xNSlyZXR1cm4gdWxlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlz'@;
put 'Ll9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVu'@;
put 'ZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsXyl7dGhpcy5fYXBwZW5kYEMkeytsfSwk'@;
put 'eythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPStffWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IF89dGhpcy5feDEsVD10aGlzLl95MSxX'@;
put 'PWQtbCxpZT1oLWEscGU9Xy1sLHdlPVQtYSxFZT1wZSpwZSt3ZSp3ZTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gO2Vsc2UgaWYoRWU+UWcpaWYoTWF0aC5hYnMod2UqVy1pZSpwZSk+UWcmJmYpe2xldCBaZT1kLV8saXQ9aC1U'@;
put 'LGV0PVcqVytpZSppZSx5dD1aZSpaZStpdCppdCxFdD1NYXRoLnNxcnQoZXQpLFN0PU1hdGguc3FydChFZSksSnQ9ZipNYXRoLnRhbigoblotTWF0aC5hY29zKChldCtFZS15dCkvKDIqRXQqU3QpKSkvMiksbm49SnQvU3Qsdm49SnQvRXQ7TWF0aC5hYnMobm4tMSk+UWcmJnRoaXMuX2FwcGVu'@;
put 'ZGBMJHtsK25uKnBlfSwke2Erbm4qd2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKHdlKlplPnBlKml0KX0sJHt0aGlzLl94MT1sK3ZuKld9LCR7dGhpcy5feTE9YSt2bippZX1gfWVsc2UgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gfWFyYyhs'@;
put 'LGEsZCxoLGYsXyl7aWYobD0rbCxhPSthLF89ISFfLChkPStkKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IFQ9ZCpNYXRoLmNvcyhoKSxXPWQqTWF0aC5zaW4oaCksaWU9bCtULHBlPWErVyx3ZT0xXl8sRWU9Xz9oLWY6Zi1oO251bGw9PT10aGlzLl94'@;
put 'MT90aGlzLl9hcHBlbmRgTSR7aWV9LCR7cGV9YDooTWF0aC5hYnModGhpcy5feDEtaWUpPlFnfHxNYXRoLmFicyh0aGlzLl95MS1wZSk+UWcpJiZ0aGlzLl9hcHBlbmRgTCR7aWV9LCR7cGV9YCxkJiYoRWU8MCYmKEVlPUVlJXJaK3JaKSxFZT53UWU/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0s'@;
put 'MCwxLCR7d2V9LCR7bC1UfSwke2EtV31BJHtkfSwke2R9LDAsMSwke3dlfSwke3RoaXMuX3gxPWllfSwke3RoaXMuX3kxPXBlfWA6RWU+UWcmJnRoaXMuX2FwcGVuZGBBJHtkfSwke2R9LDAsJHsrKEVlPj1uWil9LCR7d2V9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kx'@;
put 'PWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gZGxlKCl7cmV0dXJu'@;
put 'IG5ldyBpWn1mdW5jdGlvbiBTUWUoYyxsLGEsZCl7cmV0dXJuIGw9LWwsZD0tZCxbYyxsXT1bYyphLWwqZCxjKmQrbCphXSxbYyxsPS1sXX1mdW5jdGlvbiBobGUoYyxsLGEsZCxoLGYsXyl7dmFyIFc9WGcobWxlLmNhbGwodGhpcyxmKSk7Yy5kYXRhKFtXXSksX3cuY2FsbChjLm5vZGUoKSxX'@;
put 'KSxmbGUoYyxsLGEsZCxoLGYsXyl9ZnVuY3Rpb24gZmxlKGMsbCxhLGQsaCxmLF8pe3ZhciBUPV8uc2hvcnRlbmluZ3x8MCx3ZT1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAsLTMuNV1dLEVlPWQtbCxaZT1oLWEsaXQ9TWF0aC5zcXJ0KEVlKkVlK1plKlplKTtpZigwPT1pdCl2YXIgZXQ9'@;
put 'MSx5dD0wO2Vsc2UgZXQ9RWUvaXQseXQ9WmUvaXQ7aWYoZD1sKyhpdC1ULTEwLS4xKSpldCxoPWErKGl0LVQtMTAtLjEpKnl0LGYuVVJMfHxmLnRvb2x0aXApdmFyIEV0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEi'@;
put 'KSxTdD1FdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9RXQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO2Vsc2UgU3Q9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3Bh'@;
put 'Z2F0aW9uKCJwb2x5Z29uIik7dmFyIG5uPWRsZSgpO25uLm1vdmVUbyhsLGEpLG5uLmxpbmVUbyhkLGgpLFN0LmF0dHIoImQiLG5uKSxkPWwrKGl0LVQtMTApKmV0LGg9YSsoaXQtVC0xMCkqeXQ7Zm9yKHZhciB2bj0wO3ZuPHdlLmxlbmd0aDt2bisrKXdlW3ZuXT1TUWUoKE5uPXdlW3ZuXSlb'@;
put 'MF0sTm5bMV0sZXQseXQpO2Zvcih2bj0wO3ZuPHdlLmxlbmd0aDt2bisrKXdlW3ZuXT1bZCsoTm49d2Vbdm5dKVswXSxoK05uWzFdXTt2YXIgY3I9W107Zm9yKHZuPTA7dm48d2UubGVuZ3RoO3ZuKyspe3ZhciBObjtjci5wdXNoKChObj13ZVt2bl0pLmpvaW4oIiwiKSl9dmFyIExyPWNyLmpv'@;
put 'aW4oIiAiKTtyZXR1cm4gSnQuYXR0cigicG9pbnRzIixMciksdGhpc31mdW5jdGlvbiBwbGUoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0aW9uIGdsZSgpe3JldHVybiB0aGlz'@;
put 'Ll9kcmF3bkVkZ2U/dGhpcy5fZHJhd25FZGdlLmc6a3MobnVsbCl9ZnVuY3Rpb24gbWxlKGMpe3ZhciBsPSIiO2Zvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSludWxsIT1jW2FdJiYobCs9JyAiJythKyciPSInK2NbYV0rJyInKTt2YXIgaD10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2Eg'@;
put 'LT4gYiBbIitsKyJdfSIsInN2ZyIsImRvdCIpLF89KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBrcyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBfLmRvY3Vt'@;
put 'ZW50RWxlbWVudH0pLnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiB2bGUoYyxsLGEsZCxoLGYpe3ZhciBUPVhnKHdsZS5jYWxsKHRoaXMsZCxoKSk7cmV0dXJuIGMuZGF0YShbVF0pLF93LmNhbGwoYy5ub2RlKCksVCksX2xlKGMsbCxhLGgpLHRoaXN9ZnVuY3Rpb24gX2xlKGMsbCxhLGQsaCl7'@;
put 'aWYoZC5VUkx8fGQudG9vbHRpcCl2YXIgZj1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBmPWM7dmFyIF89Zi5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksVD1jLnNlbGVj'@;
put 'dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtpZigwIT1fLnNpemUoKSl7dmFyIFc9Xy5ub2RlKCkuZ2V0QkJveCgpO1cuY3g9Vy54K1cud2lkdGgvMixXLmN5PVcueStXLmhlaWdodC8yfWVsc2UgMCE9VC5zaXplKCkmJihXPXt4OitULmF0dHIoIngiKSx5OitULmF0dHIoInkiKSx3'@;
put 'aWR0aDowLGhlaWdodDowLGN4OitULmF0dHIoIngiKSxjeTorVC5hdHRyKCJ5Iil9KTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGllLHBlKXt2YXIgd2U9a3ModGhpcyk7aWYod2UuYXR0cigiY3giKSl3ZS5hdHRyKCJjeCIsYzQobCkpLmF0dHIoImN5IixjNChhKSk7ZWxzZSBpZih3ZS5hdHRy'@;
put 'KCJwb2ludHMiKSl7dmFyIEVlPXdlLmF0dHIoInBvaW50cyIpLnRyaW0oKTt3ZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIEhKZShmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rp'@;
put 'b24oXyl7cmV0dXJuW2M0KCtsKyArXy5zcGxpdCgiLCIpWzBdKSxjNCgrYSsgK18uc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oRWUsbC1XLmN4LGEtVy5jeSkpfWVsc2V7dmFyIFplPXdlLmF0dHIoImQiKTt3'@;
put 'ZS5hdHRyKCJkIixmdW5jdGlvbiBOSmUoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBfLnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbihfKXtyZXR1cm5bYzQoK2wrICtf'@;
put 'LnNwbGl0KCIsIilbMF0pLGM0KCthKyArXy5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbihfLFQsVyl7cmV0dXJuIF8uY29uY2F0KFQsZltXXSl9LFtdKS5qb2luKCIiKX0oWmUsbC1XLmN4LGEt'@;
put 'Vy5jeSkpfX0pLDAhPVQuc2l6ZSgpJiZULmF0dHIoIngiLGM0KCtULmF0dHIoIngiKStsLVcuY3gpKS5hdHRyKCJ5IixjNCgrVC5hdHRyKCJ5IikrYS1XLmN5KSksdGhpc31mdW5jdGlvbiBibGUoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9k'@;
put 'ZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiB5bGUoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOmtzKG51bGwpfWZ1bmN0aW9uIHdsZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBP'@;
put 'YmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksVD0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9z'@;
put 'dmcreG1sIik7cmV0dXJuIGtzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFQuZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIE9UKGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVy'@;
put 'KCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5s'@;
put 'b2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNo'@;
put 'KGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIElRZSgpe09UKHNlbGYpfWZ1bmN0'@;
put 'aW9uIFJRZSgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtPVChsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIG9aKGMsbCl7aWYodGhpcy5fb3B0aW9ucz17dXNlV29ya2VyOiEwLHVzZVNoYXJlZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0'@;
put 'bGUiLGZhZGU6ITAsdHdlZW5QYXRoczohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRnZXM6ITAsem9vbTohMCx6b29tU2NhbGVFeHRlbnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEv'@;
put 'MCwtMS8wXSxbMS8wLDEvMF1dLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LGwgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGwpKXRoaXMuX29wdGlvbnNbYV09bFthXTtlbHNlImJvb2xlYW4iPT10eXBlb2YgbCYmKHRoaXMuX29wdGlv'@;
put 'bnMudXNlV29ya2VyPWwpO3ZhciBkPXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGg9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihkPSExKSx0eXBlb2YgU2hhcmVkV29ya2VyPiJ1IiYmKGg9ITEpLGR8fGgpe3ZhciBfPXhVKCJzY3JpcHQiKS5m'@;
put 'aWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdC93b3JrZXIiPT1rcyh0aGlzKS5hdHRyKCJ0eXBlIil8fGtzKHRoaXMpLmF0dHIoInNyYyIpJiZrcyh0aGlzKS5hdHRyKCJzcmMiKS5tYXRjaCgvLipcL0BocGNjLWpzXC93YXNtLyl9KTswPT1fLnNpemUoKT8oY29uc29sZS53YXJu'@;
put 'KCdObyBzY3JpcHQgdGFnIG9mIHR5cGUgImphdmFzY3JpcHQvd29ya2VyIiB3YXMgZm91bmQgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSk6KHRoaXMuX3ZpelVSTD1fLmF0dHIoInNyYyIpLHRoaXMuX3ZpelVSTHx8KGNvbnNvbGUu'@;
put 'd2FybignTm8gInNyYyIgYXR0cmlidXRlIG9mIHdhcyBmb3VuZCBvbiB0aGUgImphdmFzY3JpcHQvd29ya2VyIiBzY3JpcHQgdGFnIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9ITEpKX1pZihoKXtjb25zdCBpZT0iZGF0YTphcHBsaWNh'@;
put 'dGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwiK2J0b2EoT1QudG9TdHJpbmcoKSsiKCIrUlFlLnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtlcihpZSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQ'@;
put 'b3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBUPW5ldyBCbG9iKFtPVC50b1N0cmluZygpKyIoIitJUWUudG9TdHJpbmco'@;
put 'KSsiKSgpIl0pLFc9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoVCk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoVyksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRo'@;
put 'aXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIERULmxvYWQoKS50aGVuKChpZT0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1pZS52ZXJzaW9uKCl9KS5iaW5kKHRoaXMpKTt0aGlzLl9zZWxlY3Rpb249Yyx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fYnVzeT0hMSx0aGlzLl9qb2JzPVtdLHRoaXMu'@;
put 'X3F1ZXVlPVtdLHRoaXMuX2tleU1vZGVzPW5ldyBTZXQoWyJ0aXRsZSIsImlkIiwidGFnLWluZGV4IiwiaW5kZXgiXSksdGhpcy5faW1hZ2VzPVtdLHRoaXMuX3RyYW5zbGF0aW9uPXZvaWQgMCx0aGlzLl9zY2FsZT12b2lkIDAsdGhpcy5fZXZlbnRUeXBlcz1bImluaXRFbmQiLCJzdGFydCIs'@;
put 'ImxheW91dFN0YXJ0IiwibGF5b3V0RW5kIiwiZGF0YUV4dHJhY3RFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIiwiZGF0YVByb2Nlc3NQYXNzMkVuZCIsImRhdGFQcm9jZXNzRW5kIiwicmVuZGVyU3RhcnQiLCJyZW5kZXJFbmQiLCJ0cmFuc2l0aW9uU3RhcnQiLCJ0cmFuc2l0aW9uRW5kIiwi'@;
put 'cmVzdG9yZUVuZCIsImVuZCIsInpvb20iXSx0aGlzLl9kaXNwYXRjaD1FVSguLi50aGlzLl9ldmVudFR5cGVzKSxWSmUuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBQVChjLGwpe3JldHVybiBrcyhjKS5ncmFwaHZpeihsKX1kbGUucHJvdG90eXBlPWla'@;
put 'LnByb3RvdHlwZSxvWi5wcm90b3R5cGU9UFQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvWixlbmdpbmU6ZnVuY3Rpb24gSkplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIFFKZShjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNo'@;
put 'KHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gZVFlKGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEp'@;
put 'dGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gdFFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIG5RZShjKXtyZXR1'@;
put 'cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gclFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpm'@;
put 'dW5jdGlvbiBpUWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIG9RZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1'@;
put 'bmN0aW9uIHNRZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gbEplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/WGFlLmNhbGwodGhpcyk6'@;
put 'IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gY0plKGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0'@;
put 'dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBoSmUoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0'@;
put 'aW9uOmZ1bmN0aW9uIGZKZSgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gdUplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gZEplKGMp'@;
put 'e3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gYkplKGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJl'@;
put 'bmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9oVChmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249QlUodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSksZWxlLmNhbGwodGhpcyxjKX0uYmluZCh0aGlzKSwwKTplbGUuY2FsbCh0aGlzLGMpLHRoaXMpfSxsYXlvdXQ6'@;
put 'ZnVuY3Rpb24gQkplKGMsbCxhLGQpe2lmKHRoaXMuX3dvcmtlcilRVS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OmMsZW5naW5lOmwsb3B0aW9uczphfSxmdW5jdGlvbihmKXtkLmNhbGwodGhpcyxmLmRhdGEpfSk7ZWxzZSB0cnl7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKGMsInN2ZyIs'@;
put 'bCxhKTtkLmNhbGwodGhpcyx7dHlwZToiZG9uZSIsc3ZnOmh9KX1jYXRjaChmKXtkLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOmYubWVzc2FnZX0pfX0sZG90OmZ1bmN0aW9uIGpKZShjLGwpe3ZhciBhPXRoaXMsaD10aGlzLl9vcHRpb25zLmVuZ2luZSxmPXRoaXMuX2ltYWdlczty'@;
put 'ZXR1cm4gdGhpcy5fZGlzcGF0Y2guY2FsbCgic3RhcnQiLHRoaXMpLHRoaXMuX2J1c3k9ITAsdGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0U3RhcnQiLHRoaXMpLHRoaXMuX3dvcmtlcnx8bnVsbCE9dGhpcy5sYXlvdXRTeW5jPyh0aGlzLmxheW91dChjLGgse2ltYWdlczpmfSxmdW5jdGlv'@;
put 'bihUKXtzd2l0Y2goVC50eXBlKXtjYXNlImVycm9yIjppZighYS5fb25lcnJvcil0aHJvdyBULmVycm9yLm1lc3NhZ2U7YS5fb25lcnJvcihULmVycm9yKTticmVhaztjYXNlImRvbmUiOnpKZS5jYWxsKHRoaXMsVC5zdmcsbCl9fSksdGhpcyk6KHRoaXMuX2FmdGVySW5pdD10aGlzLmRvdC5i'@;
put 'aW5kKHRoaXMsYyxsKSx0aGlzKX0sZGF0YTpmdW5jdGlvbiBtSmUoKXtyZXR1cm4gdGhpcy5fZGF0YXx8bnVsbH0scmVuZGVyRG90OmZ1bmN0aW9uIFVKZShjLGwpe3ZhciBhPXRoaXM7cmV0dXJuIHRoaXMuZG90KGMsZnVuY3Rpb24gZCgpe2EucmVuZGVyKGwpfSksdGhpc30sdHJhbnNpdGlv'@;
put 'bjpmdW5jdGlvbiBaSmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLl90cmFuc2l0aW9uRmFjdG9yeT1jOnRoaXMuX3RyYW5zaXRpb249QlUoYyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIFlKZShjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQ'@;
put 'cm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIGpYZShjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgSWgoW1tj'@;
put 'XV0sQlhlLGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIFdKZShjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNb'@;
put 'bF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gR0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uICRKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBxSmUoYyl7cmV0dXJu'@;
put 'IHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gS0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gWEplKGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24gYVFlKGMsbCl7cmV0'@;
put 'dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBsUWUoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gYlFlKGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCgu'@;
put 'Li5kLm1hcChXPT5XLmxlbmd0aCkpO2ZvcihsZXQgVz0wO1c8ZC5sZW5ndGg7VysrKXtsZXQgaWU9ZFtXXTthW2llXT1bXTt2YXIgXyxULGY9dGhpczt0aGlzLm9uKGllKyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIHBlPURhdGUubm93KCksd2U9YVtpZV0ubGVuZ3RoO2FbaWVdLnB1c2gocGUp'@;
put 'O3ZhciBFZT0iIjtpZihFZSs9IkV2ZW50ICIsRWUrPXdkKCIgPjIiKShXKSsiICIsRWUrPWllKyIgIi5yZXBlYXQoaC1pZS5sZW5ndGgpLEVlKz13ZCgiID41IikocGUtbCkrIiAiLCJpbml0RW5kIiE9aWUmJihFZSs9d2QoIiA+NSIpKHBlLWEuc3RhcnRbd2VdKSksImRhdGFQcm9jZXNzRW5k'@;
put 'Ij09aWUmJihFZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK3dkKCIgPjUiKShwZS1hLmxheW91dEVuZFt3ZV0pKSwicmVuZGVyRW5kIj09aWUmJmYuX3RyYW5zaXRpb24mJihFZSs9IiB0cmFuc2l0aW9uIHN0YXJ0IG1hcmdpbiAiK3dkKCIgPjUiKShmLl90cmFuc2l0aW9uLmRlbGF5'@;
put 'KCktKHBlLWEucmVuZGVyU3RhcnRbd2VdKSksXz1mLl90cmFuc2l0aW9uLmRlbGF5KCksVD1mLl90cmFuc2l0aW9uLmR1cmF0aW9uKCkpLCJ0cmFuc2l0aW9uU3RhcnQiPT1pZSl7dmFyIFplPXBlLWEucmVuZGVyU3RhcnRbd2VdO0VlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrd2Qo'@;
put 'IiA+NSIpKHBlLWEucmVuZGVyU3RhcnRbd2VdKSxFZSs9IiBleHBlY3RlZCAiK3dkKCIgPjUiKShfKSxFZSs9IiBkaWZmICIrd2QoIiA+NSIpKFplLV8pfWlmKCJ0cmFuc2l0aW9uRW5kIj09aWUpe3ZhciBpdD1wZS1hLnRyYW5zaXRpb25TdGFydFt3ZV07RWUrPSIgdHJhbnNpdGlvbiBkdXJh'@;
put 'dGlvbiAgICAgIit3ZCgiID41IikoaXQpLEVlKz0iIGV4cGVjdGVkICIrd2QoIiA+NSIpKFQpLEVlKz0iIGRpZmYgIit3ZCgiID41IikoaXQtVCl9Y29uc29sZS5sb2coRWUpLGw9cGV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIHlRZSgpe3JldHVybiBkZWxldGUgdGhp'@;
put 'cy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBNUWUoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVz'@;
put 'KCJpbnZpcyIpKXZhciBfPWtzKG51bGwpO2Vsc2V7dmFyIGllPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksd2U9WGcobWxlLmNhbGwodGhpcyxoKSk7Xz1pZS5hcHBlbmQoImciKS5k'@;
put 'YXRhKFt3ZV0pLF93LmNhbGwoXy5ub2RlKCksd2UpLGhsZS5jYWxsKHRoaXMsXyxjLGwsYSxkLGgsZil9cmV0dXJuIHRoaXMuX2RyYXduRWRnZT17ZzpfLHgxOmMseTE6bCx4MjphLHkyOmQsYXR0cmlidXRlczpofSx0aGlzfSx1cGRhdGVEcmF3bkVkZ2U6ZnVuY3Rpb24geFFlKGMsbCxhLGQs'@;
put 'aD17fSxmPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIF89dGhpcy5fZHJhd25FZGdlLmc7cmV0dXJuIGg9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcyxoKSx0aGlzLl9kcmF3bkVkZ2UueDE9'@;
put 'Yyx0aGlzLl9kcmF3bkVkZ2UueTE9bCx0aGlzLl9kcmF3bkVkZ2UueDI9YSx0aGlzLl9kcmF3bkVkZ2UueTI9ZCwhXy5lbXB0eSgpfHxoLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoXz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3Zn'@;
put 'Iikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduRWRnZS5nPV8pLF8uZW1wdHkoKXx8aGxlLmNhbGwodGhpcyxfLGMsbCxhLGQsaCxmKSx0aGlzfSxtb3ZlRHJhd25FZGdlRW5kUG9pbnQ6ZnVuY3Rpb24gRVFlKGMsbCxhPXt9KXtpZigh'@;
put 'dGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25FZGdlLmcsaD10aGlzLl9kcmF3bkVkZ2UueDEsZj10aGlzLl9kcmF3bkVkZ2UueTEsXz10aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJh'@;
put 'd25FZGdlLngyPWMsdGhpcy5fZHJhd25FZGdlLnkyPWwsZmxlKGQsaCxmLGMsbCxfLGEpLHRoaXN9LGluc2VydERyYXduRWRnZTpmdW5jdGlvbiBrUWUoYyl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBsPXRoaXMuX2RyYXdu'@;
put 'RWRnZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpcztsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKTt2YXIgXz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlv'@;
put 'bigiZyIpLFQ9Xy5kYXR1bSgpLFc9dGhpcy5fZXh0cmFjdERhdGEobCxULmNoaWxkcmVuLmxlbmd0aCxfLmRhdHVtKCkpO3JldHVybiBULmNoaWxkcmVuLnB1c2goVyksV1UobCxXKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bkVkZ2U6cGxlLHJlbW92ZURyYXduRWRn'@;
put 'ZTpwbGUsZHJhd25FZGdlU2VsZWN0aW9uOmdsZSxkcmF3bkVkZ2VTZWxlY3Rpb246Z2xlLGRyYXdOb2RlOmZ1bmN0aW9uIEFRZShjLGwsYSxkPXt9LGg9e30pe2lmKChkPU9iamVjdC5hc3NpZ24oe30sZCkpLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBmPWtzKG51bGwp'@;
put 'O2Vsc2V7dmFyIFc9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxwZT1YZyh3bGUuY2FsbCh0aGlzLGEsZCkpO2Y9Vy5hcHBlbmQoImciKS5kYXRhKFtwZV0pLF93LmNhbGwoZi5ub2Rl'@;
put 'KCkscGUpLHZsZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpfXJldHVybiB0aGlzLl9kcmF3bk5vZGU9e2c6Zixub2RlSWQ6YSx4OmMseTpsLGF0dHJpYnV0ZXM6ZH0sdGhpc30sdXBkYXRlRHJhd25Ob2RlOmZ1bmN0aW9uIFRRZShjLGwsYSxkPXt9LGg9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUp'@;
put 'dGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZj10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gbnVsbD09YSYmKGE9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCksZD1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzLGQpLHRoaXMuX2RyYXduTm9k'@;
put 'ZS5ub2RlSWQ9YSx0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsIWYuZW1wdHkoKXx8ZC5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KGY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhv'@;
put 'dXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bk5vZGUuZz1mKSxmLmVtcHR5KCl8fHZsZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpLHRoaXN9LG1vdmVEcmF3bk5vZGU6ZnVuY3Rpb24gRFFlKGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVy'@;
put 'cm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25Ob2RlLmcsaD10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25Ob2RlLng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLGQuZW1wdHkoKXx8X2xlKGQsYyxsLGgpLHRoaXN9LGluc2Vy'@;
put 'dERyYXduTm9kZTpmdW5jdGlvbiBMUWUoYyl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO251bGw9PWMmJihjPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpO3ZhciBsPXRoaXMuX2RyYXduTm9kZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4g'@;
put 'dGhpczt2YXIgYT10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztpZihsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKSxhLlVSTHx8YS50b29sdGlwKXZhciBmPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRh'@;
put 'UHJvcGFnYXRpb24oImEiKSxUPShmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksZi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0IikpO2Vsc2UgbC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxp'@;
put 'cHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLFQ9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7VC50ZXh0KGEubGFiZWx8fGMpO3ZhciBwZT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQ'@;
put 'cm9wYWdhdGlvbigiZyIpLHdlPXBlLmRhdHVtKCksRWU9dGhpcy5fZXh0cmFjdERhdGEobCx3ZS5jaGlsZHJlbi5sZW5ndGgscGUuZGF0dW0oKSk7cmV0dXJuIHdlLmNoaWxkcmVuLnB1c2goRWUpLFdVKGwsRWUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTpi'@;
put 'bGUscmVtb3ZlRHJhd25Ob2RlOmJsZSxkcmF3bk5vZGVTZWxlY3Rpb246eWxlLGRyYXduTm9kZVNlbGVjdGlvbjp5bGUsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIHlKZSgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSxZZy5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gT1Fl'@;
put 'KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLGhUKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IG9aKHRoaXMsYyksbH0sWWcucHJvdG90eXBlLnNlbGVjdFdpdGhv'@;
put 'dXREYXRhUHJvcGFnYXRpb249ZnVuY3Rpb24gUFFlKGMpe3JldHVybiBrcyh0aGlzLnNpemUoKT4wP3RoaXMubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoYyk6bnVsbCl9O3ZhciBGUWU9Rig4ODcwMCk7ZnVuY3Rpb24gSFFlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjgpfWZ1bmN0aW9uIE5R'@;
put 'ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gVlFlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpKDEsImRpdiIsMjMpKDIsImlucHV0IiwyNCwyNSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcmllc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsSFFlLDEsMCwiY2xyLWljb24iLDI2KSxKZSg1LE5RZSwxLDAsImNsci1pY29uIiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQu'@;
put 'bGlicmFyaWVzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBCUWUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24galFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiY2xyLWljb24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDMpLGY9VmUoMikuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMuVEFCTEVO'@;
put 'QU1FIikpfSkseWUoKX19ZnVuY3Rpb24gelFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpKDEsImRpdiIsMjMpKDIsImlucHV0IiwzNSwzNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1w'@;
put 'bGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSkseWUoKSxKZSg0LEJRZSwxLDAsImNsci1pY29uIiwyNiksSmUoNSxq'@;
put 'UWUsMSwwLCJjbHItaWNvbiIsMjcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVu'@;
put 'Z3RoPjApfX1mdW5jdGlvbiBVUWUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24gWlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDMpLGY9VmUoKS4k'@;
put 'aW1wbGljaXQsXz1WZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpfX1mdW5jdGlvbiBZUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMiko'@;
put 'MSwiZGl2IiwyMykoMiwiaW5wdXQiLDM5LDM2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBq'@;
put 'dChWZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSkseWUoKSxKZSg0LFVRZSwxLDAsImNsci1pY29uIiwyNiksSmUoNSxaUWUsMSwwLCJjbHItaWNvbiIsMjcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdN'@;
put 'b2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFdRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDQw'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2x1bW5PbkNsaWNrKGYsVCxfKSl9KSxxdCgyLCJjbHItaWNvbiIsNDEpLE5lKDMpLHllKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9bC4kaW1wbGljaXQsZD1WZSg0KTtDZSgxKSxkcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxDZSgyKSxncigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIEdRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5v'@;
put 'ZGUiLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVOb2RlQ2xpY2tlZChoLF8sVC50YWJsZXMpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0'@;
put 'KGEpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDM3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudGFibGVPbkNsaWNrKGYuVEFCTEVVUkksZixfKSl9KSxxdCgyLCJjbHItaWNv'@;
put 'biIsMzgpLE5lKDMpLHllKCksSmUoNCxZUWUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxKZSg1LFdRZSw0LDMsImNsci10cmVlLW5vZGUiLDIpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5l'@;
put 'eHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLENlKDEpLFJlKCJpZCIsYS5UQUJMRVVSSSksQ2UoMiksZ3IoIiAiLGEuVEFCTEVOQU1FLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEuY29sdW1ucyksQ2UoMSksUmUoIm5nRm9yT2YiLGEuY29sdW1ucyl9'@;
put 'fWZ1bmN0aW9uICRRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBqdChfLnRyZWVOb2RlQ2xpY2tlZChoLGYsXy5saWJyYXJ5'@;
put 'TGlzdCkpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3JldHVybiBm'@;
put 'LmxpYj1oLkxJQlJBUllJRCxqdChmLmxpYnJhcnlPbkNsaWNrKGYubGlifHwiIixoKSl9KSxxdCgyLCJjbHItaWNvbiIsMzMpLE5lKDMpLHllKCksSmUoNCx6UWUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxKZSg1LEdRZSw2LDgsImNsci10cmVlLW5vZGUiLDM0KSx5ZSgpfWlmKDImYyl7Y29u'@;
put 'c3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoMyksZ3IoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIHFRZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsJFFlLDYsNywiY2xyLXRyZWUtbm9kZSIsMzApLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVu'@;
put 'JiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIEtRZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNDIpKDEsInNwYW4iLDQzKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIFhRZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNDQpLHF0KDEsImNsci1pY29uIiw0NSksbWUoMiwi'@;
put 'aDMiLDQ2KSxOZSgzLCJQbGVhc2Ugc2VsZWN0IGEgY29sdW1uIG9yIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBKUWUoYyxsKXtpZigxJmMmJihtZSgwLCJoMyIsNTUpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiICIsYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1'@;
put 'bW4/YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSsiLiIrYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW46YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSwiICIpfX1mdW5jdGlvbiBRUWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDUzKSxKZSgxLEpRZSwyLDEsImgzIiw1NCkseWUo'@;
put 'KSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gZWV0KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLG1lKDIsImEiLDU2KSxOZSgzKSx5'@;
put 'ZSgpLE5lKDQpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxncigiICIsYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMF0sIi4iKSxDZSgxKSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLmxpbmVhZ2VUYWJsZU5hbWUpLENlKDEpLG9yKGEubGluZWFnZVRhYmxl'@;
put 'TmFtZS5zcGxpdCgiLiIpWzFdKSxDZSgxKSxncigiIixhLmxpbmVhZ2VDb2x1bW5OYW1lLmxlbmd0aD4wPyIuIithLmxpbmVhZ2VDb2x1bW5OYW1lOiIiLCIgIil9fWZ1bmN0aW9uIHRldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuZG93bmxvYWRQTkcoKSl9KSxOZSgxLCIgUE5HICIpLHllKCl9fWZ1bmN0aW9uIG5ldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuZG93'@;
put 'bmxvYWRDU1YoKSl9KSxOZSgxLCIgQ1NWICIpLHllKCl9fWZ1bmN0aW9uIHJldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5kb3dubG9h'@;
put 'ZFNWRygpKX0pLE5lKDIsIlNWRyIpLHllKCksSmUoMyx0ZXQsMiwwLCJkaXYiLDY3KSxtZSg0LCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmRvd25sb2FkRG90KCkpfSksTmUoNSwiRG90IikseWUoKSxKZSg2LG5ldCwyLDAsImRpdiIsNjcp'@;
put 'LHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLFJlKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KSxDZSgzKSxSZSgibmdJZiIsYS5mbGF0ZGF0YSl9fWZ1bmN0aW9uIGlldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1jaGVja2JveC13cmFw'@;
put 'cGVyIiw2OCkoMSwiaW5wdXQiLDY5KSx4dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nZW5lcmF0ZUdyYXBoKCkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS5yZWZyZXNoQ2FjaGU9aCl9KSx5ZSgpLG1lKDIs'@;
put 'ImxhYmVsIiksTmUoMywiUmVmcmVzaCBDYWNoZSIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nTW9kZWwiLGEucmVmcmVzaENhY2hlKX19ZnVuY3Rpb24gb2V0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1NykoMSwiYnV0dG9uIiw1OCks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5saW1pdERvdERlcHRoPSEwKX0pLE5lKDIsIiBMaW1pdCBkZXB0aCAiKSx5ZSgpLG1lKDMsImRpdiIsNTkpKDQsImRpdiIsNjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVy'@;
put 'biBoLmZvcndhcmRMaW5lYWdlPSExLGp0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxxdCg1LCJpbnB1dCIsNjEpLG1lKDYsImxhYmVsIiksTmUoNywiQmFja3dhcmQiKSx5ZSgpKCks'@;
put 'bWUoOCwiZGl2Iiw2MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITAsanQoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGlj'@;
put 'aygpKX0pLHF0KDksImlucHV0Iiw2MSksbWUoMTAsImxhYmVsIiksTmUoMTEsIkZvcndhcmQiKSx5ZSgpKCkoKSxtZSgxMiwiY2xyLWRyb3Bkb3duIiw2MikoMTMsImJ1dHRvbiIsNjMpLE5lKDE0LCIgRG93bmxvYWQgIikscXQoMTUsImNsci1pY29uIiwxOSkseWUoKSxKZSgxNixyZXQsNywy'@;
put 'LCJjbHItZHJvcGRvd24tbWVudSIsMjApLHllKCksSmUoMTcsaWV0LDQsMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg1KSxSZSgiY2hlY2tlZCIsIWEuZm9yd2FyZExpbmVhZ2UpLENlKDQpLFJlKCJjaGVja2VkIixhLmZvcndhcmRM'@;
put 'aW5lYWdlKSxDZSg0KSxSZSgiZGlzYWJsZWQiLCFhLmNvbHVtbiYmIWEudGFibGUpLENlKDQpLFJlKCJuZ0lmIixhLmNvbHVtbil9fWZ1bmN0aW9uIHNldChjLGwpezEmYyYmKG1lKDAsInNwYW4iLDczKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBhZXQoYyxsKXsxJmMm'@;
put 'JnF0KDAsInNwYW4iLDQzKX1mdW5jdGlvbiBjZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDc0KSgxLCJkaXYiLDc1KSxKZSgyLGFldCwxLDAsInNwYW4iLDc2KSx5ZSgpLHF0KDMsImRpdiIsNzcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgyKSxSZSgibmdJZiIsYS5ncmFwaFJl'@;
put 'bmRlcmluZyl9fWZ1bmN0aW9uIHVldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImRpdiIsNzApLEplKDIsc2V0LDIsMCwic3BhbiIsNzEpLEplKDMsY2V0LDQsMSwiZGl2Iiw3MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7ZHIoIm10LTIiLGEudGFibGVGbGFnKSxDZSgyKSxS'@;
put 'ZSgibmdJZiIsYS5ncmFwaExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBkZXQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLFFRZSwyLDEsImRpdiIsNDcpLG1lKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxKZSg1LGVl'@;
put 'dCw1LDQsInNwYW4iLDcpLHllKCksSmUoNixvZXQsMTgsNCwiZGl2Iiw1MSkseWUoKSxKZSg3LHVldCw0LDQsImRpdiIsNTIpLHllKCksenIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxDZSg0KSxSZSgibmdJZiIsYS5saW5lYWdlVGFi'@;
put 'bGVOYW1lLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lciksQ2UoMSksUmUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpfX1mdW5jdGlvbiBoZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEJ0KGEpLGp0KFZlKDIpLnJlbmRlclRvRG93bmxvYWQoIlBORyIpKX0pLE5lKDEsIiBQTkcgIikseWUoKX19ZnVuY3Rpb24gZmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksTmUoMiwiU1ZHIikseWUoKSxKZSgzLGhldCwyLDAsImRpdiIsNjcpLG1lKDQsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGguZG93bmxvYWRE'@;
put 'b3QoKSxqdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksTmUoNSwiIERvdCAiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksUmUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpfX1jb25zdCBwZXQ9RigxNjY3Nik7bGV0IEZUPSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMubG9jYXRpb249Xyx0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMubG9nZ2VyU2VydmljZT1XLHRoaXMuaGVscGVy'@;
put 'U2VydmljZT1pZSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5mb3J3YXJkTGluZWFnZT0hMSx0aGlzLmZsYXRkYXRhPVtdLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5ncmFwaENvbnRhaW5lcj0hMSx0aGlzLnZpeklu'@;
put 'cHV0PSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLnRhYmxlQ29sdW1uc1JlZj0iIix0aGlzLmxpbmVhZ2VUYWJsZU5hbWU9IiIsdGhpcy5saW5lYWdlQ29sdW1uTmFtZT0iIix0aGlzLmxpYj1u'@;
put 'dWxsLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMucmVmcmVzaENhY2hlPSExLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9IiIsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW49IiIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMubGFyZ2VEb3RGaWxlTGltaXQ9'@;
put 'MWUzLHRoaXMubGltaXREb3REZXB0aD0hMSx0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMuZGVib3VuY2VUaW1lPTIwMH1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9dGFibGVPbkNsaWNrKGEsZCxoLGY9ITEpe3ZhciBfPXRoaXM7'@;
put 'cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwhMD09PWQuZXhwYW5kZWQmJihfLnRhYmxlPWEsZnx8Xy5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKTooZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmxvYWRpbmdDb2x1bW5zPSEwLF8u'@;
put 'dGFibGU9YSxfLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPWQuTElCTkFNRSsiLiIrZC5UQUJMRU5BTUUseWllbGQgXy5zZWxlY3RUYWJsZShhLGQpLGZ8fF8ub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxfLmNvbGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpfSkoKX1zZWxlY3RU'@;
put 'YWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxldXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGYpLnRoZW4oXz0+e2guY29s'@;
put 'dW1uc0xpc3Q9Xy5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxvYWRpbmdDb2x1bW5zPSExKX0pLmNhdGNoKF89Pl8pLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxp'@;
put 'YnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5m'@;
put 'b3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEs'@;
put 'ZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5pbkZvcmVncm91bmQ9ITAsZC50YWJsZXM/ZC5leHBhbmRlZD0hZC5leHBhbmRlZDooZC5sb2FkaW5nVGFibGVzPSEwLHlpZWxkIGguc2VsZWN0TGlicmFyeShhLGQpKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGgubGlicmFyeUxp'@;
put 'c3QsZCl9KSgpfXNlbGVjdExpYnJhcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVh'@;
put 'Z2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbihfPT57aC50YWJsZXNMaXN0PV8ubWV0YXRhYmxlcyxoLnRhYmxlc0xpc3QmJmgudGFibGVzTGlzdC5sZW5ndGg+MCYmKGQudGFibGVzPWgudGFibGVzTGlzdCxkLmV4cGFuZGVkPSEwKSxoLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKF89Pl8pLGQu'@;
put 'bG9hZGluZ1RhYmxlcz0hMX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJLHRoaXMuc2V0R2xvYmFsRGF0YSgpLHRoaXMub25HZW5lcmF0ZUNsaWNrKCl9dHJlZU9uRmlsdGVyKGEs'@;
put 'ZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi5saW5lYWdlLmxpYnJhcmll'@;
put 'c1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1zZXRHbG9iYWxE'@;
put 'YXRhKCl7R24ubGluZWFnZS5saWJyYXJ5TGlzdD10aGlzLmxpYnJhcnlMaXN0LEduLmxpbmVhZ2UudGFibGVzTGlzdD10aGlzLnRhYmxlc0xpc3QsR24ubGluZWFnZS5jb2x1bW5zTGlzdD10aGlzLmNvbHVtbnNMaXN0LEduLmxpbmVhZ2UubGliPXRoaXMubGliLEduLmxpbmVhZ2UudGFibGU9'@;
put 'dGhpcy50YWJsZSxHbi5saW5lYWdlLmNvbHVtbj10aGlzLmNvbHVtbn1sb2FkR2xvYmFsRGF0YSgpe3RoaXMubGlicmFyeUxpc3Q9R24ubGluZWFnZS5saWJyYXJ5TGlzdCx0aGlzLnRhYmxlc0xpc3Q9R24ubGluZWFnZS50YWJsZXNMaXN0LHRoaXMuY29sdW1uc0xpc3Q9R24ubGluZWFnZS5j'@;
put 'b2x1bW5zTGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaD1Hbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaH1yZXN1Ym1pdFdpdGhNYXhEZXB0aChhKXtsZXQgZDt0aGlzLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCksYSYmKGQ9e21heF9kZXB0aDphfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3Jl'@;
put 'bGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczpkfSl9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9saW5lYWdlIjtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5yZWxvYWQ7aWYodm9pZCAwIT09YSl7bGV0IGQ9dGhpcy5yb3V0ZXIudXJs'@;
put 'OyJyZWxvYWQiPT09YT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZmlyc3RMb2FkIik/KGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJmaXJzdExvYWQiKSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSkpOihsb2NhbFN0b3JhZ2UuZmlyc3RM'@;
put 'b2FkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LDJlMykpOnRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKX10aGlzLmluaXREYXRhKCl9aW5pdERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBm'@;
put 'aShmdW5jdGlvbiooKXtHbi5saW5lYWdlLmxpYnJhcnlMaXN0JiYoR24ubGluZWFnZS5saWJyYXJ5TGlzdC5sZW5ndGg+MD9hLmxvYWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbihfPT57YS5saWJyYXJ5TGlzdD1f'@;
put 'LnNhc2xpYnMsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJ5TGlzdCksYS5saWJyYXJ5TGlzdCYmYS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGEubGliPWEubGlicmFyeUxpc3RbMF0uTElCUkFSWUlEKSxhLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKF89Pl8pLGEu'@;
put 'cm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKF89PnthLm9uUm91dGVDaGFuZ2UoKX0pLGEucm91dGUucGFyYW1zLnN1YnNjcmliZShfPT57YS5vblJvdXRlQ2hhbmdlKCl9KSl9KSgpfW9uUm91dGVDaGFuZ2UoKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVi'@;
put 'b3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxkPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRpcmVjdGlvbixoPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlaWQsZj10aGlzLnJvdXRlLnNuYXBz'@;
put 'aG90LnF1ZXJ5UGFyYW1zLm1heF9kZXB0aDthJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMuY29sdW1uPWEsdGhpcy5nZW5lcmF0ZUdyYXBoKGEsZCxmKSksIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIikmJmgmJmQmJih0aGlzLmZvcndhcmRM'@;
put 'aW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy50YWJsZT1oLHRoaXMuZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaCxkLGYpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe31kaXJlY3Rpb25UZXh0KCl7cmV0dXJuIHRoaXMuZm9yd2FyZExpbmVhZ2U/IkZPUldBUkQi'@;
put 'OiJSRVZFUlNFIn1vbkdlbmVyYXRlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVtbi5pbmRleE9mKCJcXCIpKzEpOm51bGw7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFn'@;
put 'ZS9jb2x1bW4vIitkKyIvIithKX1vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIpP3RoaXMudGFibGUuc3BsaXQoIlxcIilbMV06dGhpcy50YWJsZTt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJs'@;
put 'KCIvdmlldy9saW5lYWdlLyIrZCsiLyIrYSl9Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXtTQVNDb250cm9sVGFibGU6W3t0YWJsZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKX1dfTtyZXR1'@;
put 'cm4idW5kZWZpbmVkIj09PV8uU0FTQ29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoKSIsInRhYmxlX2lkIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYoXy5TQVND'@;
put 'b250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKFQsVyk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRj'@;
put 'aHRhYmxlbGluZWFnZSIsXykudGhlbihmdW5jdGlvbigpe3ZhciBpZT1maShmdW5jdGlvbioocGUpe2lmKHBlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIs'@;
put 'IllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcv'@;
put 'bGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcGUpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5hbWU9cGUuaW5mb1swXS5MSUJSRUYrIi4iK3BlLmluZm9bMF0uVEFCTEVOQU1FO2xldCB3ZT1w'@;
put 'ZS5maW5hbGZpbmFsLEVlPSIiO2ZvcihsZXQgWmU9MDtaZTx3ZS5sZW5ndGg7WmUrKylFZSs9dW5lc2NhcGUod2VbWmVdLkxJTkUpKyJcbiI7aWYoZi5mbGF0ZGF0YT1wZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgWmU9Zi5saWJyYXJ5TGlzdC5maW5kKGl0PT5wZS5pbmZvWzBdLkxJ'@;
put 'QlVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGl0LkxJQlJBUllJRC50b1VwcGVyQ2FzZSgpKSk7aWYoWmUpe2xldCBpdDtpZih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKFplLkxJQlJBUllJRCxaZSksWmUudGFibGVzJiYoaXQ9WmUudGFibGVzLmZpbmQoZXQ9PmV0LlRBQkxFVVJJLnRvVXBw'@;
put 'ZXJDYXNlKCkuaW5jbHVkZXMocGUuaW5mb1swXS5UQUJMRUlELnRvVXBwZXJDYXNlKCkpKSxpdCkpe2lmKGYudGFibGU9aXQuVEFCTEVVUkksZi50YWJsZSl7Y29uc3QgZXQ9Zi50YWJsZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtzZXRUaW1lb3V0KCgpPT57bGV0IHl0PWRvY3VtZW50LnF1ZXJ5'@;
put 'U2VsZWN0b3IoYFtpZD0nJHtldH0nXWApO3l0JiZ5dC5zY3JvbGxJbnRvVmlldygpfSwxZTMpfWYudGFibGVPbkNsaWNrKGl0LlRBQkxFVVJJLGl0LFplLHZvaWQgMCE9PWQpfVplJiYoWmUuZXhwYW5kZWQ9ITApLGl0JiYoaXQuZXhwYW5kZWQ9ITApfX1mLnZpeklucHV0PUVlfHwiZGlncmFw'@;
put 'aCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmlkbG9va3VwPXBlLmlkbG9va3VwLHBlLmZpbmFsZmluYWwubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5s'@;
put 'YXJnZURvdEZpbGVMaW5lcz1wZS5maW5hbGZpbmFsLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxUKCl9KTtyZXR1cm4gZnVuY3Rpb24ocGUpe3JldHVybiBpZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChpZT0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9'@;
put 'KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RG'@;
put 'aWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRjaCh0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9h'@;
put 'ZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFwaCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5k'@;
put 'ZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1'@;
put 'ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgVCxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUiKS5pbm5lckhUTUwsXz1hLmZpbmQoVz0+Vy5NRVRBSUQ9PT1mKTtfJiYoVD0iVEFCTEUiPT09Xy5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK18uTUVUQU5B'@;
put 'TUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK18uTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixXPT57dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChUKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhp'@;
put 'cztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCkscmVmcmVzaDpmLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT1fLlNBU0NvbnRyb2xUYWJs'@;
put 'ZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJihfLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5z'@;
put 'd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsXykudGhlbihmdW5jdGlvbigpe3ZhciBpZT1maShmdW5j'@;
put 'dGlvbioocGUpe2lmKHBlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdy'@;
put 'YW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcGUpcmV0dXJuIGYudml6SW5w'@;
put 'dXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5hbWU9cGUuaW5mb1swXS5MSUJSRUYrIi4iK3BlLmluZm9bMF0uVEFCTkFNRSxmLmxpbmVhZ2VDb2x1bW5OYW1lPXBlLmluZm9bMF0uQ09MTkFNRSxmLmlkbG9va3VwPXBlLmlkbG9v'@;
put 'a3VwO2xldCB3ZT1wZS5mcm9tc2FzLEVlPSIiO2ZvcihsZXQgWmU9MDtaZTx3ZS5sZW5ndGg7WmUrKylFZSs9dW5lc2NhcGUod2VbWmVdLlNUUklORykrIlxuIjtpZihmLnZpeklucHV0PUVlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1'@;
put 'dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmZsYXRkYXRhPXBlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBpdCxaZT1mLmxpYnJhcnlMaXN0LmZpbmQoZXQ9PnBlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMo'@;
put 'ZXQ/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO1plJiYoeWllbGQgZi5saWJyYXJ5T25DbGljayhaZS5MSUJSQVJZSUQsWmUpLFplLnRhYmxlcyYmKGl0PVplLnRhYmxlcy5maW5kKGV0PT5ldC5UQUJMRVVSST09PXBlLmluZm9bMF0uVEFCVVJJKSxpdCYmZi50YWJsZU9uQ2xpY2soaXQu'@;
put 'VEFCTEVVUkksaXQsWmUsITApLnRoZW4oKCk9PntsZXQgZXQ9aXQuVEFCTEVVUkk7aWYoZXQpe2NvbnN0IHl0PWV0LnJlcGxhY2UoIlxcIiwiXFxcXCIpO2xldCBFdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7eXR9J11gKTtzZXRUaW1lb3V0KCgpPT57RXQmJihmLmxvZ2dlclNl'@;
put 'cnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLFplKSxFdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksWmUmJihaZS5leHBhbmRlZD0hMCksaXQmJihpdC5leHBhbmRlZD0hMCkpfXBlLmZyb21zYXMubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1w'@;
put 'ZS5mcm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxUKCl9KTtyZXR1cm4gZnVuY3Rpb24ocGUpe3JldHVybiBpZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChpZT0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXts'@;
put 'ZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyLGg9bmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGgpfWdldFNWR0Jsb2IoKXtsZXQg'@;
put 'YT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyO3JldHVybiBuZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSl9ZG93bmxvYWRTVkcoKXtpZihQVCgiI2dyYXBoIikucmVzZXRab29tKCksbmF2'@;
put 'aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXRTVkdCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVm'@;
put 'PXRoaXMuZ2V0U1ZHVVJMKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fWRvd25sb2FkUE5HKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rp'@;
put 'b24qKCl7UFQoIiNncmFwaCIpLnJlc2V0Wm9vbSgpLEZRZS5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0ocGUsd2UpPT5u'@;
put 'dWxsPT09d2U/IiI6d2UsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChwZT0+aC5tYXAod2U9PkpTT04uc3RyaW5naWZ5KHBlW3dlXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCBfPWYuam9pbigiXHJcbiIpO3ZhciBUPWRvY3VtZW50LmNyZWF0ZUVs'@;
put 'ZW1lbnQoImEiKSxXPW5ldyBCbG9iKFtfXSx7dHlwZToidGV4dC9jc3YifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoVyx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3ZhciBp'@;
put 'ZT13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChXKTtULmhyZWY9aWUsVC5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpLFQuY2xpY2soKSx3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChpZSksVC5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMu'@;
put 'dml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChkKX1nZXREb3RCbG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBW'@;
put 'ZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0RG90QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgidHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERv'@;
put 'dFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVp'@;
put 'bGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntQVCgiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3At'@;
put 'Y29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEw'@;
put 'MCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsXz1wZXQoKS5mb3JtYXQoIllZTU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBUPXRoaXMubGlicmFyeUxpc3QuZmluZChXPT5XLkxJQlJBUllJRD09dGhpcy5s'@;
put 'aWIpO1QmJihkPWBfJHtULkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IFQ9dGhpcy50YWJsZXNMaXN0LmZpbmQoVz0+Vy5UQUJMRVVSST09dGhpcy50YWJsZSk7VCYmKGg9YF8ke1QuVEFCTEVOQU1FfWApfWlmKHRoaXMuY29s'@;
put 'dW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgVD10aGlzLmNvbHVtbnNMaXN0LmZpbmQoVz0+Vy5DT0xVUkk9PXRoaXMuY29sdW1uKTtUJiYoZj1gXyR7VC5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke199LiR7YX1g'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQob2EpLHR0KEdsKSx0dChEcyksdHQoSmQpLHR0KHZsKSx0dCh3MCksdHQoVGMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0'@;
put 'dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZhcnM6MTEsY29uc3RzOltbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5n'@;
put 'SWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9k'@;
put 'YWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2YWx1ZSIsMSwiY2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWyJtYXhEZXB0'@;
put 'aERvdCIsIiJdLFsxLCJtYi0yMCJdLFsxLCJiaWdsaW5lYWdlLXJvdyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwibXQtMy1u'@;
put 'ZWdhdGl2ZSIsMywiZGlzYWJsZWQiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWyJtYXhEZXB0aCIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIs'@;
put 'InBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRp'@;
put 'bWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhw'@;
put 'YW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJj'@;
put 'bHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hUcmVlSW5w'@;
put 'dXQiLCIiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImlkIiwiY2xpY2siXSxbInNoYXBlIiwidGFibGUiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENo'@;
put 'YW5nZSIsImtleXVwIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1z'@;
put 'dGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1i'@;
put 'bG9jayJdLFsxLCJmb3JtLWJsb2NrIiwic3ciLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJsaW5hZ2UtdGl0bGUtd3JhcHBlciIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImZvbnQtd2VpZ2h0LWJvbGQiLCJwb3NpdGlvbi1h'@;
put 'YnNvbHV0ZSJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIiw0LCJuZ0lmIl0sWzMsIm10LTIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50'@;
put 'ZXIiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgcGItMTAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJwYi0xMCJdLFszLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1lbmQiXSxbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsi'@;
put 'Y2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMs'@;
put 'ImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJuZ01vZGVsIiwiY2hhbmdlIiwi'@;
put 'bmdNb2RlbENoYW5nZSJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIi'@;
put 'XSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVZuKCk7bWUoMCwiYXBwLXNpZGViYXIiLDApLHh0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LmxvYWRNb3JlTGlicmFyaWVzKCl9KSxtZSgxLCJjbHItdHJlZSIpLEplKDIsVlFlLDYsMywiY2xyLXRyZWUtbm9kZSIsMSksSmUoMyxxUWUsMiwxLCJuZy1jb250YWluZXIiLDIpLHllKCksSmUoNCxLUWUsMywwLCJkaXYiLDMpLHllKCksbWUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpLEplKDcs'@;
put 'WFFlLDQsMCwiZGl2Iiw2KSxKZSg4LGRldCw4LDQsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDksImNsci1tb2RhbCIsOCkoMTAsImgzIiw5KSxOZSgxMSwiTGltaXQgRGVwdGgiKSx5ZSgpLG1lKDEyLCJkaXYiLDEwKSgxMywicCIpLE5lKDE0LCJFbnRlciB0aGUgZGVwdGggbnVtYmVy'@;
put 'IHlvdSB3b3VsZCBsaWtlIHRvIGxpbWl0IERPVCByZW5kZXJpbmcgdG86IikseWUoKSgpLG1lKDE1LCJkaXYiLDExKSgxNiwiZGl2IiwxMikscXQoMTcsImlucHV0IiwxMywxNCkseWUoKSxtZSgxOSwiY2xyLWNvbnRyb2wtaGVscGVyIiwxNSksTmUoMjAsIlRvIHJlbmRlciB3aXRoIHVubGlt'@;
put 'aXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IikseWUoKSxtZSgyMSwiZGl2IiwxNikoMjIsImJ1dHRvbiIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5saW1pdERvdERlcHRoPSExfSksTmUoMjMsIiBDYW5jZWwgIikseWUoKSxtZSgyNCwiYnV0dG9uIiwxNyks'@;
put 'eHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGgpO2NvbnN0IF89JGkoMTgpO3JldHVybiBkLnJlc3VibWl0V2l0aE1heERlcHRoKF8udmFsdWUpLGp0KGQubGltaXREb3REZXB0aD0hMSl9KSxOZSgyNSwiIFJlc3VibWl0ICIpLHllKCkoKSgpKCksbWUoMjYsImNsci1tb2RhbCIsOCkoMjcsImgz'@;
put 'Iiw5KSxOZSgyOCwiV2FybmluZyIpLHllKCksbWUoMjksImRpdiIsMTApKDMwLCJwIiksTmUoMzEpLHllKCkoKSxtZSgzMiwiZGl2IiwxMSkoMzMsImRpdiIsMTYpKDM0LCJwIiksTmUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUpIikseWUoKSxtZSgzNiwi'@;
put 'YnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX0pLE5lKDM3LCIgUmVuZGVyICIpLHllKCkoKSxtZSgzOCwiZGl2IiwxNikoMzksInAiKSxOZSg0MCwiRG93bmxvYWQgdGhlIHJlc3VsdCAoUE5HICYgU1ZHIHJlcXVpcmUg'@;
put 'cmVuZGVyaW5nKSIpLHllKCksbWUoNDEsImNsci1kcm9wZG93biIpKDQyLCJidXR0b24iLDE4KSxOZSg0MywiIERvd25sb2FkICIpLHF0KDQ0LCJjbHItaWNvbiIsMTkpLHllKCksSmUoNDUsZmV0LDYsMSwiY2xyLWRyb3Bkb3duLW1lbnUiLDIwKSx5ZSgpKCksbWUoNDYsImRpdiIsMTYpKDQ3'@;
put 'LCJwIiksTmUoNDgsIlJlc3VibWl0IHdpdGggYSBtYXgtZGVwdGggKHNwZWNpZnkgZGVwdGgpIikseWUoKSxxdCg0OSwiaW5wdXQiLDEzLDIxKSxtZSg1MSwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGgpO2NvbnN0IF89JGkoNTApO3JldHVybiBqdChkLnJlc3VibWl0'@;
put 'V2l0aE1heERlcHRoKF8udmFsdWUpKX0pLE5lKDUyLCIgUmVzdWJtaXQgIikseWUoKSgpLG1lKDUzLCJkaXYiLDE2KSg1NCwicCIpLE5lKDU1LCJDYW5jZWwgdGhpcyBzdWJtaXNzaW9uIikseWUoKSxtZSg1NiwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNh'@;
put 'bmNlbFJlbmRlcmluZ0dyYXBoKCl9KSxOZSg1NywiIENhbmNlbCAiKSx5ZSgpKCkoKSgpfTImYSYmKENlKDIpLFJlKCJuZ0lmIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5saWJyYXJ5TGlzdCksQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyaWVzUGFnaW5nKSxDZSgzKSxS'@;
put 'ZSgibmdJZiIsIWQuY29sdW1uJiYhZC50YWJsZSksQ2UoMSksUmUoIm5nSWYiLGQuY29sdW1ufHxkLnRhYmxlKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoMTcpLFJlKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1kLmxh'@;
put 'cmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDUpLGdyKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixkLmxhcmdlRG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxvbmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHBy'@;
put 'b2NlZWQ/ICIpLENlKDExKSxSZSgiZGlzYWJsZWQiLCFkLmNvbHVtbiYmIWQudGFibGUpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxCdSxXYSxTMCxCcyxPcyxkZCxnMSxEcCxrYSxvdSxzdSxadSxjMixVcyxIRixEMCxUMCxmMSxOZixhZyxsZyxLOCxuM10sc3R5bGVzOlsiLnRvZ2dsZS1zd2l0'@;
put 'Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJh'@;
put 'bnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0jZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5'@;
put 'OmJsb2NrO3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZTRlNGU0O21hcmdpbi10b3A6MTBweH0uc2VsZWN0aW9uLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY3MHB4fS5jb2x1bW4tYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3Jv'@;
put 'dW5kOiNkOGUzZTk7Y29sb3I6IzAwMH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAx'@;
put 'MjBweCl9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZFtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSAuMzVyZW0haW1wb3J0YW50fWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'YnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmdyYXBoLXJlbmRlci1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10'@;
put 'b3A6MTBweH0uYmlnbGluZWFnZS1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4fS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWFyZ2luOjB9LmxpbmVhZ2UtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bGVmdDoxMnB4fS5tYXgtZGVwdGgtaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXsudG9nZ2xlLXN3aXRjaC1j'@;
put 'b250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MjBweH19Il19KSxjfSkoKTtmdW5jdGlvbiBnZXQoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDExKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWMoInZhbHVlIixhKSxDZSgxKSxncigi'@;
put 'ICIsYSwiICIpfX1mdW5jdGlvbiBtZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxOCl9ZnVuY3Rpb24gdmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5t'@;
put 'ZXRhRGF0YVNlYXJjaD0iIixqdChoLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBfZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMikoMSwiZGl2IiwxMykoMiwiaW5wdXQiLDE0LDE1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVu'@;
put 'Y3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubWV0YURhdGFTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLHllKCksSmUoNCxtZXQsMSwwLCJjbHItaWNvbiIsMTYpLEplKDUsdmV0LDEsMCwiY2xyLWlj'@;
put 'b24iLDE3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gYmV0KGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLm1ldGFEYXRhTGlzdCkpfSkoImNsckV4'@;
put 'cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3JldHVybiBmLm1ldGFEYXRhSWQ9aC5J'@;
put 'RCxqdChmLm1ldGFEYXRhT25DbGljayhmLm1ldGFEYXRhSWQsaCkpfSkscXQoMiwiY2xyLWljb24iLDIzKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYm'@;
put 'IWEudGFibGVzKSxDZSgzKSxncigiICIsYS5JRCwiICIpfX1mdW5jdGlvbiB5ZXQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGJldCw0LDMsImNsci10cmVlLW5vZGUiLDIwKSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0'@;
put 'aW9uIHdldChjLGwpezEmYyYmKG1lKDAsImRpdiIsMjQpLHF0KDEsImNsci1pY29uIiwyNSksbWUoMiwiaDMiLDI2KSxOZSgzLCJQbGVhc2Ugc2VsZWN0IGEgdHlwZSIpLHllKCkoKSl9ZnVuY3Rpb24gQ2V0KGMsbCl7MSZjJiYobWUoMCwiaDQiKSxOZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5'@;
put 'cGVzIikseWUoKSl9ZnVuY3Rpb24gTWV0KGMsbCl7MSZjJiYobWUoMCwiaDQiKSxOZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMiKSx5ZSgpKX1mdW5jdGlvbiB4ZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxKZSgxLENldCwyLDAsImg0IiwyOSksSmUoMixNZXQsMiwwLCJoNCIs'@;
put 'MjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWEubWV0YXR5cGVzTG9hZGluZyl9fWZ1bmN0aW9uIEVldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjcpKDEsInNwYW4iLDI4KSxOZSgyLCIg'@;
put 'TG9hZGluZy4uLiAiKSx5ZSgpLEplKDMseGV0LDMsMiwiZGl2IiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksUmUoIm5nSWYiLGEubG9hZGluZyl9fWZ1bmN0aW9uIGtldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzYpKDEsImlucHV0IiwzNywzOCks'@;
put 'eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5tZXRhT2JqZWN0U2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5tZXRhT2JqZWN0T25GaWx0ZXIoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZl'@;
put 'KDIpO0NlKDEpLFJlKCJuZ01vZGVsIixhLm1ldGFPYmplY3RTZWFyY2gpfX1mdW5jdGlvbiBBZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw0Mil9ZnVuY3Rpb24gVGV0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjMpfWZ1bmN0aW9uIERldChjLGwpe2lmKDEmYyYmKG1lKDAsInAi'@;
put 'LDUzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIExldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiLDQ4KSgxLCJkaXYiLDQ5KSxKZSgyLEFldCwxLDAsImNsci1pY29uIiw1MCksSmUo'@;
put 'MyxUZXQsMSwwLCJjbHItaWNvbiIsNTEpLE5lKDQpLEplKDUsRGV0LDIsMSwicCIsNTIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRhYmxlIiwhMCksQ2UoMSksZHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsIWEuY291'@;
put 'bnQpLENlKDEpLFJlKCJuZ0lmIixhLmNvdW50KSxDZSgxKSxncigiICIsYS5kaXNwbGF5LCIgIiksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gSWV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUiLDQ2KSxKZSgxLExldCw2LDcsImNsci10cmVlLW5vZGUiLDQ3KSxi'@;
put 'YSgyLCJhc3luYyIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg2KTtSZSgiY2xyTGF6eSIsITApLENlKDEpLFJlKCJjbHJSZWN1cnNpdmVGb3JPZiIsWmwoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBSZXQoYyxsKXtp'@;
put 'ZigxJmMmJihtZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxKZSgxLElldCwzLDUsImNsci10cmVlIiw0NSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDEpLFJlKCJuZ0lmIixhLnNob3dBY2MpfX1mdW5jdGlvbiBPZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJj'@;
put 'bHItYWNjb3JkaW9uLXBhbmVsIiw0MSkseHQoImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKDMpO3JldHVybiBqdChoP18ucGFuZWxDaGFuZ2UoaCxmKToiIil9KSxtZSgxLCJjbHItYWNjb3JkaW9uLXRp'@;
put 'dGxlIikscXQoMiwiY2xyLWljb24iLDQyKSxOZSgzKSxtZSg0LCJwIiw0MyksTmUoNSkseWUoKSgpLEplKDYsUmV0LDIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0NCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMyksZ3IoIiAiLGEuTkFNRSwiICIpLENlKDIp'@;
put 'LG9yKGEuSUQpfX1mdW5jdGlvbiBQZXQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLE9ldCw3LDIsImNsci1hY2NvcmRpb24tcGFuZWwiLDQwKSx6cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIEZldChjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsImRpdiIsMzkpKDEsImNsci1hY2NvcmRpb24iKSxKZSgyLFBldCwyLDEsIm5nLWNvbnRhaW5lciIsNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksUmUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gSGV0KGMsbCl7MSZjJiZxdCgw'@;
put 'LCJjbHItaWNvbiIsNDIpfWZ1bmN0aW9uIE5ldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIzKX1mdW5jdGlvbiBWZXQoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw1MyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLlVSSSwiICIpfX1m'@;
put 'dW5jdGlvbiBCZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiw0OCkoMSwiZGl2Iiw0OSksSmUoMixIZXQsMSwwLCJjbHItaWNvbiIsNTApLEplKDMsTmV0LDEsMCwiY2xyLWljb24iLDUxKSxOZSg0KSxKZSg1LFZldCwyLDEsInAiLDUyKSx5ZSgpKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1sLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kYWJsZSIsITApLENlKDEpLGRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsYS5jb3VudCksQ2UoMSksZ3IoIiAiLGEuZGlzcGxheSwiICIpLENlKDEpLFJlKCJuZ0lm'@;
put 'IiwhYS5jb3VudCl9fWZ1bmN0aW9uIGpldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlIiw0NiksSmUoMSxCZXQsNiw3LCJjbHItdHJlZS1ub2RlIiw0NyksYmEoMiwiYXN5bmMiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7UmUoImNsckxhenkiLCEwKSxDZSgxKSxSZSgiY2xyUmVj'@;
put 'dXJzaXZlRm9yT2YiLFpsKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gemV0KGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiZGl2Iiw1NCkscXQoMiwiY2xyLWljb24iLDQyKSxtZSgzLCJkaXYiLDU1KSg0LCJwIiw1'@;
put 'NiksTmUoNSkseWUoKSxtZSg2LCJwIiw1NyksTmUoNykseWUoKSgpKCksSmUoOCxqZXQsMyw1LCJjbHItdHJlZSIsNDUpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDMpO0NlKDUpLGdyKCIgIixhLk5BTUUsIiAiKSxDZSgyKSxncigiICIsYS5JRCwiICIpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLnNob3dBY2MpfX1mdW5jdGlvbiBVZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM5KSxKZSgxLHpldCw5LDMsIm5nLWNvbnRhaW5lciIsNCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0'@;
put 'aW9uIFpldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpLG1lKDUsImNsci1kZy1jZWxsIiksTmUoNikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiks'@;
put 'b3IoYS5UWVBFKSxDZSgyKSxvcihhLk5BTUUpLENlKDIpLG9yKGEuVkFMVUUpfX1jb25zdCBZZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bMTAsMjAsNTAsMTAwXX07ZnVuY3Rpb24gV2V0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRhdGFncmlkIiw1OCkoMSwiY2xyLWRnLWNvbHVtbiIpLE5lKDIs'@;
put 'IiBUWVBFICIpLHF0KDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiw1OSkseWUoKSxtZSg0LCJjbHItZGctY29sdW1uIiksTmUoNSwiIE5BTUUgIikscXQoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSx5ZSgpLG1lKDcsImNsci1kZy1jb2x1bW4iKSxOZSg4LCIgVkFMVUUgIikscXQoOSwi'@;
put 'Y2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSx5ZSgpLEplKDEwLFpldCw3LDMsImNsci1kZy1yb3ciLDYwKSxtZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5hdGlvbiIsNjEsNjIpKDE0LCJjbHItZGctcGFnZS1zaXplIiw2MyksTmUoMTUsIkF0dHJpYnV0ZXMgcGVyIHBh'@;
put 'Z2UiKSx5ZSgpLE5lKDE2KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPSRpKDEzKSxkPVZlKDIpO0NlKDMpLFJlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC50eXBlRmlsdGVyKSxDZSgzKSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQubmFtZUZpbHRlciksQ2UoMyksUmUoImNsckRnU3RyaW5nRmls'@;
put 'dGVyIixkLnZhbHVlRmlsdGVyKSxDZSgxKSxSZSgiY2xyRGdJdGVtc09mIixkLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSxDZSgyKSxSZSgiY2xyRGdQYWdlU2l6ZSIsMTApLENlKDIpLFJlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCRzKDksWWV0KSksQ2UoMiksYjAoIiAiLGEuZmlyc3RJdGVtKzEs'@;
put 'IiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiBHZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSxKZSgyLGtldCwzLDEsImRpdiIsMzIpLHF0KDMsImJyIiksSmUoNCxGZXQsMywxLCJkaXYiLDMz'@;
put 'KSxKZSg1LFVldCwyLDEsImRpdiIsMzMpLHllKCksbWUoNiwiZGl2IiwzNCkoNywiaDMiKSxOZSg4KSx5ZSgpLEplKDksV2V0LDE3LDEwLCJjbHItZGF0YWdyaWQiLDM1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLm1ldGFPYmplY3RMaXN0JiYhYS5vYmpl'@;
put 'Y3RSb3V0ZSksQ2UoMiksUmUoIm5nSWYiLCFhLm9iamVjdFZpZXcpLENlKDEpLFJlKCJuZ0lmIixhLm9iamVjdFZpZXcpLENlKDMpLG9yKGEuYXNzb09iamVjdFNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsYS5zaG93VGFibGUpfX1sZXQgc1o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh'@;
put 'LGQsaCxmLF8sVCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLnJvdXRlPVQsdGhpcy5tZXRhRGF0YVNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RTZWFyY2g9IiIsdGhp'@;
put 'cy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPVtdLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YURhdGFJZD0iIix0aGlzLmxvYWRpbmc9ITAsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSEwLHRoaXMubWV0YU9iamVj'@;
put 'dFNpemU9MjAwLHRoaXMuYXNzb1R5cGVTZWxlY3RlZD0iIix0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIix0aGlzLnJlcG9zaXRvcnk9IiIsdGhpcy5vYmplY3RSb3V0ZT0hMSx0aGlzLnNob3dEYXRhPSExLHRoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmdldENoaWxkcmVuPVc9PlcuY291bnQ/'@;
put 'V2koVy5kZXRhaWxzKTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTpXLkFTU09DVVJJfV19KS50aGVuKHBlPT57dGhpcy5zaG93VGFibGU9ITAsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1wZS5hdHRy'@;
put 'aWJ1dGVzLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPVcuTkFNRTtsZXQgd2U9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLm9iamVjdFJvdXRlP3dlLnNsaWNlKDAsd2UubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrVy5BU1NP'@;
put 'Q1VSSS5zbGljZSgxK1cuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSk6d2UrIi9vYmplY3QvIitXLkFTU09DVVJJLnNsaWNlKDErVy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKSksdGhpcy5nZXRBc3Nvc2lhdGlvbnNDb3VudChwZS5hc3NvY2lhdGlvbnMpfSksdGhpcy5kZWJvdW5jZT0hMX1uZ09u'@;
put 'SW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L21ldGFkYXRhIix0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYmKHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEwKSx0aGlzLnBhZ2VTaXplPTUsR24ubWV0'@;
put 'YWRhdGEubWV0YURhdGFMaXN0JiZHbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzJiYhdGhpcy5vYmplY3RSb3V0ZT8odGhpcy5tZXRhRGF0YUxpc3Q9R24ubWV0YWRhdGEubWV0YURhdGFMaXN0LHRoaXMucmVwb3NpdG9yaWVzPUduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMsdGhpcy5y'@;
put 'ZXBvc2l0b3J5PUduLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExLHRoaXMubWV0YURhdGFTZWFyY2g9R24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2gpOih0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9t'@;
put 'ZXRhdHlwZXMiLG51bGwpLnRoZW4oYT0+e3RoaXMubWV0YURhdGFMaXN0PWEudHlwZXMsR24ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITF9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0'@;
put 'YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5vdXRyZXBvcy5sZW5ndGg7aCsrKXRoaXMucmVwb3NpdG9yaWVzLnB1c2goYS5vdXRyZXBvc1toXS5OQU1FKSwiRm91bmRhdGlvbiI9PT1hLm91dHJlcG9z'@;
put 'W2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlvbiI6YS5vdXRyZXBvc1swXS5OQU1FLEduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXM9dGhpcy5yZXBvc2l0b3JpZXMsR24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeSx0'@;
put 'aGlzLm9iamVjdFJvdXRlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLnNob3dEYXRhPSEwO2xldCBoPSIiLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMub2JqZWN0SUQ7dGhpcy5tZXRhT2JqZWN0TGlzdD1bXSx0aGlzLm1ldGFPYmplY3RMaXN0LnB1c2goe0lE'@;
put 'OmYsTkFNRTpofSksdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RPbkNsaWNrKHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdLklELHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdKX19KSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsi'@;
put 'Q29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bWV0YURhdGFPbkNsaWNr'@;
put 'KGEsZCl7dGhpcy5vYmplY3RWaWV3PSExLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9tZXRhZGF0YSIpLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5sb2FkaW5nPSEwLHRoaXMuc2VsZWN0bWV0YURhdGEoYSxkKX1tZXRhT2JqZWN0T25DbGljayhhLGQpe3RoaXMuYXNzb09iamVj'@;
put 'dFNlbGVjdGVkPSIgLiAiLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2VsZWN0bWV0YU9iamVjdChhLGQpfXNlbGVjdG1ldGFEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1l'@;
put 'dGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKF89PntoLm1ldGFPYmplY3RMaXN0PV8ub2JqZWN0cyxoLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGgubWV0YU9iamVjdFNpemUpLGgubG9hZGluZz0hMSxo'@;
put 'LmFzc29UeXBlU2VsZWN0ZWQ9YSxoLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxoLnNob3dEYXRhPSEwfSl9KSgpfXNlbGVjdG1ldGFPYmplY3QoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWls'@;
put 'cyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKF89PntoLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9Xy5hc3NvY2lhdGlvbnMsaC5yb290JD1XaShoLmdldEFzc29zaWF0aW9uc0NvdW50KF8uYXNzb2NpYXRpb25zKSksaC5zaG93QWNjPSEwLGguc2hvd1RhYmxlPSEw'@;
put 'O2xldCBUPV8uYXR0cmlidXRlcy5maW5kKGllPT4iTmFtZSI9PT1pZS5OQU1FKS5WQUxVRTtoLmFzc29PYmplY3RTZWxlY3RlZD1ULGQuTkFNRT1UO2xldCBXPWgucm91dGVyLnVybDtoLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLm9iamVjdFJvdXRlP1cuc2xpY2UoMCxXLmxhc3RJbmRleE9m'@;
put 'KCJvYmplY3QiKSkrIm9iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpOlcrIi9vYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKSksaC5tZXRhT2JqZWN0QXR0cmlidXRlcz1fLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhLGQpe3Zh'@;
put 'ciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdEF0dHJpYnV0ZXM9Xy5hdHRyaWJ1dGVzLGguc2hvd1RhYmxl'@;
put 'PSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50KGEpe2xldCBkPW5ldyBNYXA7Zm9yKGxldCBmIG9mIGEpe2QuaGFzKGYuQVNTT0MpfHxkLnNldChmLkFTU09DLHtjb3VudDowLGRldGFpbHM6W119KTtsZXQgXz1kLmdldChmLkFTU09DKTtfLmNvdW50KyssXy5kZXRhaWxzLnB1c2goe0FT'@;
put 'U09DVVJJOmYuQVNTT0NVUkksTkFNRTpmLk5BTUUsZGlzcGxheTpmLk5BTUUsVVJJOmYuQVNTT0NVUkkuc2xpY2UoZi5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgaD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGYsXyl7aC5wdXNoKHtBU1NPQzpfLGNvdW50OmYuY291bnQs'@;
put 'ZGV0YWlsczpmLmRldGFpbHMsZGlzcGxheTpfKyIgKCAiK2YuY291bnQrIiApIn0pfSksaH1zZXRUeXBlQXNzb3NpYXRpb25zKGEpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnMpaC5BU1NPQz09PWEmJmQucHVzaChoKTtyZXR1cm4gdGhpcy5hc3Nv'@;
put 'c2lhdGlvbk5hbWVzPWQsZH1hc3Nvc2lhdGlvbk5hbWVPbkNsaWNrKGEpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEpfW1ldGFMaXN0T25G'@;
put 'aWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubWV0YURhdGFMaXN0LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksR24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25GaWx0ZXIoKXt0aGlzLm1ldGFP'@;
put 'YmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVyU2VydmljZS5tZXRhT2JqZWN0T25GaWx0ZXIodGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5BTUUiKSx0aGlzLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9iamVjdFNpemUpLEduLm1ldGFk'@;
put 'YXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRhT2JqZWN0U2VhcmNofWdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGEpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3QmJnRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoPmEpe2xldCBkPTAsaD0tMTtmb3IobGV0IGY9MDtmPHRoaXMu'@;
put 'bWV0YU9iamVjdExpc3QubGVuZ3RoO2YrKylpZigodm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW4pJiZkKyssZD09PWEpe2g9ZjticmVha310aGlzLm1ldGFPYmplY3RTaG93TGlzdD0tMSE9PWg/dGhpcy5t'@;
put 'ZXRhT2JqZWN0TGlzdC5zbGljZSgwLGgpOnRoaXMubWV0YU9iamVjdExpc3R9ZWxzZSB0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hhbmdlKGEsZCl7dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xpY2soZC5JRCxkKSx0aGlzLmRl'@;
put 'Ym91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRlYm91bmNlPSExfSw2MDApKX11cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKXtHbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKSh0dCh2bCksdHQob2EpLHR0KFRjKSx0dChKZCksdHQoRHMpLHR0KEdsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWzEs'@;
put 'InJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIs'@;
put 'Im5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9j'@;
put 'b21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJz'@;
put 'aGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vy'@;
put 'c29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0s'@;
put 'WzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbNCwibmdJZiJdLFsxLCJjbHItcm93IiwiY2xyLWZsZXgtZ3Jvdy0xIl0sWzEsImNsci1jb2wtNiJdLFsiY2xhc3MiLCJzZWFyY2gtaW5wdXQiLDQsIm5nSWYiXSxbImNsYXNzIiwib2JqZWN0cy1jb2wiLDQsIm5nSWYiXSxbMSwi'@;
put 'Y2xyLWNvbC02IiwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtaW5wdXQiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2giLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMs'@;
put 'Im5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaE9ialRyZWVJbnB1dCIsIiJdLFsxLCJvYmplY3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIs'@;
put 'InJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwibmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFuZGFibGUiLDQsImNsclJlY3Vyc2l2ZUZvciIsImNsclJlY3Vyc2l2ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9y'@;
put 'R2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsb2F0LXJpZ2h0IG9iamVjdC11cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQt'@;
put 'cmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0sWzEsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxb'@;
put 'NCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwwKSgyLCJjbHItc2Vs'@;
put 'ZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTmUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLHllKCksbWUoNSwic2VsZWN0IiwxKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVwb3NpdG9yeT1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC51cGRh'@;
put 'dGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLEplKDYsZ2V0LDIsMiwib3B0aW9uIiwyKSx5ZSgpKCkoKSxtZSg3LCJjbHItdHJlZSIpLEplKDgsX2V0LDYsMywiY2xyLXRyZWUtbm9kZSIsMyksSmUoOSx5ZXQsMiwxLCJuZy1jb250YWluZXIiLDQpLHllKCkoKSxtZSgxMCwiZGl2Iiw1KSgxMSwi'@;
put 'ZGl2Iiw2KSgxMiwiaDMiLDcpLE5lKDEzKSx5ZSgpLEplKDE0LHdldCw0LDAsImRpdiIsOCksSmUoMTUsRWV0LDQsMSwiZGl2Iiw5KSxKZSgxNixHZXQsMTAsNSwiZGl2IiwxMCkseWUoKSgpKSwyJmEmJihDZSg1KSxSZSgibmdNb2RlbCIsZC5yZXBvc2l0b3J5KSxDZSgxKSxSZSgibmdGb3JP'@;
put 'ZiIsZC5yZXBvc2l0b3JpZXMpLENlKDIpLFJlKCJuZ0lmIixkLm1ldGFEYXRhTGlzdCksQ2UoMSksUmUoIm5nRm9yT2YiLGQubWV0YURhdGFMaXN0KSxDZSg0KSxvcihkLmFzc29UeXBlU2VsZWN0ZWQpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkaW5nJiYhZC5tZXRhT2JqZWN0TGlzdCksQ2Uo'@;
put 'MSksUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxsMSxjMSxXYSxNMCxCcyxPcyxXOCxUcCx0ZyxQRSxVOCxnSCxGRSxuZyxNUSxyZyxpZywkOCxvZyxCOCxrcCx6OCxRRixkZCxnMSxMUSxrYSxadSxVSixVcyxm'@;
put 'MSxOOCxIOCxESixfRSxJSixMSixSSixFRixuMyx1eF0sc3R5bGVzOlsiLm9iamVjdHMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NzV2aDtvdmVyZmxvdzpzY3JvbGw7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHh9LmNv'@;
put 'bHMtaGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmFmYWZhO2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fS5vYmplY3QtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7'@;
put 'anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWxlZnQ6MTBweDtmbGV4OjF9LnJlcG8tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5jbHItYWNjb3JkaW9uLXRpdGxlW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5mbG9hdC1yaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7ZmxvYXQ6cmlnaHR9LmZ1bGwtd2lkdGhbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Lm9iamVjdC11cmlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjo1cHgg'@;
put 'MCAwfS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6M3B4O3BhZGRpbmctcmlnaHQ6M3B4fS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTk7Ym9yZGVyLXJhZGl1czozcHh9LmRhdGFncmlk'@;
put 'LWhvc3RbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFk'@;
put 'ZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0iXX0pLGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gJGV0KGMsbCl7MSZjJiZxdCgwLCJjbHIt'@;
put 'aWNvbiIsMTIpfWZ1bmN0aW9uIHFldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgucm9sZVNlYXJjaD0iIixqdChoLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSx5ZSgp'@;
put 'fX1mdW5jdGlvbiBLZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5yb2xlU2VhcmNoPWgpfSkoImtleXVw'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsJGV0LDEsMCwiY2xyLWljb24iLDEwKSxKZSg1LHFldCwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5n'@;
put 'TW9kZWwiLGQucm9sZVNlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gWGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnJvbGVPbkNsaWNrKGgpKX0pLG1lKDEsInAiLDE2KSxxdCgyLCJjbHItaWNvbiIsMTcpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO2RyKCJ0YWJs'@;
put 'ZS1hY3RpdmUiLGEuUk9MRVVSST09PWQucm9sZVVyaSksQ2UoMyksZ3IoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gSmV0KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxYZXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksenIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEp'@;
put 'LFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBRZXQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBldHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIp'@;
put 'LHllKCkpfWZ1bmN0aW9uIHR0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiwzMikoMSwidGQiLDMwKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMCksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzApLE5lKDYpLHllKCksbWUoNywidGQiLDMwKSxOZSg4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRp'@;
put 'bXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksQ2UoMiksb3IoYS5NRU1CRVJOQU1FKSxDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxvcihhLk1FTUJFUkNSRUFURUQpLENlKDIpLG9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIG50dChj'@;
put 'LGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLE5lKDUsIk5BTUUiKSx5ZSgpKCksbWUoNiwidGQiLDI5KSg3LCJiIiksTmUoOCwiRU1BSUwiKSx5ZSgpKCksbWUoOSwidGQiLDI5KSgxMCwiYiIpLE5lKDExLCJDUkVBVEVE'@;
put 'IikseWUoKSgpLG1lKDEyLCJ0ZCIsMzApKDEzLCJiIiksTmUoMTQsIlVQREFURUQiKSx5ZSgpKCkoKSgpLG1lKDE1LCJ0Ym9keSIpLEplKDE2LHR0dCw5LDUsInRyIiwzMSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMTYpLFJlKCJuZ0Zvck9mIixhLnJvbGVNZW1iZXJzKX19ZnVu'@;
put 'Y3Rpb24gcnR0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIikseWUoKSl9ZnVuY3Rpb24gaXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLE5lKDIpLHllKCksbWUoMywidGQiLDMwKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwz'@;
put 'MCksTmUoNikseWUoKSxtZSg3LCJ0ZCIsMzApLE5lKDgpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSU1FTSksQ2UoMiksb3IoYS5NRU1CRVJOQU1FKSxDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxv'@;
put 'cihhLk1FTUJFUkNSRUFURUQpLENlKDIpLG9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIG90dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLE5lKDUsIk5BTUUiKSx5ZSgpKCksbWUoNiwidGQiLDI5KSg3LCJi'@;
put 'IiksTmUoOCwiRU1BSUwiKSx5ZSgpKCksbWUoOSwidGQiLDI5KSgxMCwiYiIpLE5lKDExLCJDUkVBVEVEIikseWUoKSgpLG1lKDEyLCJ0ZCIsMzApKDEzLCJiIiksTmUoMTQsIlVQREFURUQiKSx5ZSgpKCkoKSgpLG1lKDE1LCJ0Ym9keSIpLEplKDE2LGl0dCw5LDUsInRyIiwzMSkseWUoKSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMTYpLFJlKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBzdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0ZCIsMjMpKDcs'@;
put 'InAiLDI0KSg4LCJiIiksTmUoOSkseWUoKSgpKCkoKSxtZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLE5lKDEzKSx5ZSgpKCkoKSgpKCkoKSgpLG1lKDE0LCJkaXYiLDIwKSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSxOZSgxOSkseWUoKSxKZSgy'@;
put 'MCxldHQsMiwwLCJoNSIsNSksbWUoMjEsImRpdiIsMjYpLEplKDIyLG50dCwxNywxLCJ0YWJsZSIsMjcpLHllKCkoKSxxdCgyMywiaHIiKSxtZSgyNCwiZGl2IikoMjUsImgzIiksTmUoMjYpLHllKCksSmUoMjcscnR0LDIsMCwiaDUiLDUpLG1lKDI4LCJkaXYiLDI2KSxKZSgyOSxvdHQsMTcs'@;
put 'MSwidGFibGUiLDI3KSx5ZSgpKCkscXQoMzAsImJyIikseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoOSksb3IoYS5yb2xlTmFtZSksQ2UoNCksb3IoYS5yb2xlRGVzYyksQ2UoNiksZ3IoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksQ2UoMSksUmUoIm5nSWYi'@;
put 'LDA9PWEucm9sZU1lbWJlcnNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEucm9sZU1lbWJlcnNDb3VudCksQ2UoNCksZ3IoIkdyb3VwcyAoIixhLnJvbGVHcm91cHNDb3VudCwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnJvbGVHcm91cHNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEu'@;
put 'cm9sZUdyb3Vwc0NvdW50KX19bGV0IENsZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT1fLHRoaXMucm9sZVNlYXJjaD0iIix0'@;
put 'aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFtZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSExfW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9yb2xlcyIsdm9p'@;
put 'ZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEduLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5yb2xlcz1Hbi51c2Vy'@;
put 'bmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Hbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PUduLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMu'@;
put 'bG9hZGluZz0hMSx0aGlzLnJvbGVzPWEucm9sZXMsR24udXNlcm5hdi5yb2xlTGlzdD1hLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5n'@;
put 'PSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3Vu'@;
put 'dD1mLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkp'@;
put 'fX0pKToodGhpcy5yb2xlcz1Hbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Hbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLnJvbGVzPWEucm9sZXMsR24udXNlcm5h'@;
put 'di5yb2xlTGlzdD1hLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3Vz'@;
put 'ZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1m'@;
put 'LnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxHbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5y'@;
put 'ZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpOmQrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIs'@;
put 'e2l3YW50Olt7cm9sZWlkOmEuUk9MRVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLnNhc2dyb3Vwcyx0aGlzLnJvbGVH'@;
put 'cm91cHNDb3VudD1mLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWEuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWEuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1hLlJPTEVERVNDfSl9ZmluZFJvbGUoYSxkKXtsZXQgaD0hMTtyZXR1cm4gYS5mb3JFYWNoKGY9PntmLlJPTEVVUkk9PT1kJiYo'@;
put 'aD1mKX0pLGh9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dChUYyksdHQoRHMpLHR0KEpkKSx0dChHbCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcm9sZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQt'@;
put 'Y29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJd'@;
put 'LFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgUm9sZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdl'@;
put 'Iiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZl'@;
put 'IiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxb'@;
put 'MSwidGFibGUiLCJyb2xlLWluZm8iXSxbMSwibGVmdCJdLFsxLCJyb2xlLWluZm8tdGV4dCJdLFsxLCJjYXJkIiwicm9sZS1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUi'@;
put 'XSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApKDEsImNsci10cmVlIiksSmUoMixLZXQsNiwzLCJjbHItdHJl'@;
put 'ZS1ub2RlIiwxKSxKZSgzLEpldCwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUoKSgpLG1lKDQsImRpdiIsMyksSmUoNSxRZXQsMywwLCJkaXYiLDQpLEplKDYsc3R0LDMxLDgsImRpdiIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQucm9sZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixk'@;
put 'LnJvbGVzKSxDZSgyKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5yb2xlTWVtYmVycyYmIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0l'@;
put 'Q09NUCVde2hlaWdodDoxMDAlfS5yb2xlLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNzti'@;
put 'b3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5yb2xlLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6'@;
put 'I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0fS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25n'@;
put 'Y29udGVudC0lQ09NUCVdLCAucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0ubWVtYmVy'@;
put 'LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92'@;
put 'ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NzAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5yb2xlLWRhdGFbX25n'@;
put 'Y29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pLGN9KSgpLGF0dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Io'@;
put 'e3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30p'@;
put 'KCksbHR0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlldy1yb3V0ZSJd'@;
put 'XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKTtmdW5jdGlvbiBjdHQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u'@;
put 'IiwxMil9ZnVuY3Rpb24gdXR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC51c2VyU2VhcmNoPSIiLGp0KGgudXNlckxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1'@;
put 'bmN0aW9uIGR0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnVzZXJTZWFyY2g9aCl9KSgia2V5dXAiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLHllKCksSmUoNCxjdHQsMSwwLCJjbHItaWNvbiIsMTApLEplKDUsdXR0LDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2Rl'@;
put 'bCIsZC51c2VyU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBodHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudXNlck9uQ2xpY2soaCkpfSksbWUoMSwicCIsMTYpLHF0KDIsImNsci1pY29uIiwxNyksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInRhYmxlLWFj'@;
put 'dGl2ZSIsKG51bGw9PWQudXNlckluZm8/bnVsbDpkLnVzZXJJbmZvLlVSSSk9PT1hLlVSSSksQ2UoMyksZ3IoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBmdHQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGh0dCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSx6cigpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHB0dChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIGd0dChjLGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsInRyIiko'@;
put 'MiwidGQiLDI3KSxOZSgzLCIgTWV0YWRhdGEgQ3JlYXRlZDogIiksbWUoNCwiYiIpLE5lKDUpLHllKCkoKSgpLG1lKDYsInRyIikoNywidGQiLDI3KSxOZSg4LCIgTWV0YWRhdGEgVXBkYXRlZDogIiksbWUoOSwiYiIpLE5lKDEwKSx5ZSgpKCkoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMyk7'@;
put 'Q2UoNSksb3IoYS51c2VySW5mby5NRVRBREFUQUNSRUFURUQpLENlKDUpLG9yKGEudXNlckluZm8uTUVUQURBVEFVUERBVEVEKX19ZnVuY3Rpb24gbXR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwi'@;
put 'dGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE5lKDgpLHllKCkoKSgpKCksbWUoOSwidHIiKSgxMCwidGQiLDI3KSgxMSwicCIsMjgpKDEyLCJiIiksTmUoMTMpLHllKCkoKSgpKCksSmUoMTQsZ3R0LDExLDIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIp'@;
put 'O0NlKDgpLG9yKGEudXNlckluZm8uTkFNRSksQ2UoNSksb3IoYS51c2VySW5mby5ESVNQTEFZTkFNRSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19ZnVuY3Rpb24gdnR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMiko'@;
put 'MiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE5lKDgpLHllKCkoKSgpKCksbWUoOSwidHIiKSgxMCwidGQiLDI3KSxOZSgxMSwiIFVzZXIgSUQ6ICIpLG1lKDEyLCJiIiksTmUoMTMpLHllKCkoKSgpLG1lKDE0LCJ0ciIpKDE1LCJ0'@;
put 'ZCIsMjcpLE5lKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksbWUoMTcsImIiKSxOZSgxOCkseWUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLG9yKGEudXNlckluZm8uTkFNRSksQ2UoNSksb3IoYS51c2VySW5mby5VUkkpLENlKDUpLG9yKGEudXNlckluZm8uUFJP'@;
put 'VklERVIpfX1mdW5jdGlvbiBfdHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIEVtYWlscyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gYnR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMzEpLE5lKDIpLHllKCksbWUoMywidGQiLDMxKSxOZSg0KSx5ZSgpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxvcihhLlRZUEUpfX1mdW5jdGlvbiB5dHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxOZSg1LCJFTUFJTCIpLHllKCkoKSxtZSg2'@;
put 'LCJ0ZCIsMzEpKDcsImIiKSxOZSg4LCJUWVBFIikseWUoKSgpKCkoKSxtZSg5LCJ0Ym9keSIpLEplKDEwLGJ0dCw1LDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxMCksUmUoIm5nRm9yT2YiLGEudXNlckVtYWlscyl9fWZ1bmN0aW9uIHd0dChjLGwpe2lmKDEmYyYm'@;
put 'KG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxKZSgzLF90dCwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI0KSxKZSg1LHl0dCwxMSwxLCJ0YWJsZSIsMjUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJFTUFJTFMgKCIsYS51c2VyRW1haWxzQ291bnR8fCIwIiwi'@;
put 'KSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJFbWFpbHNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlckVtYWlsc0NvdW50KX19ZnVuY3Rpb24gQ3R0KGMsbCl7MSZjJiZxdCgwLCJociIpfWZ1bmN0aW9uIFN0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gR3JvdXBz'@;
put 'IFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBNdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsMzMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUkkpLENlKDEpLGdyKCIgIixhLkdST1VQ'@;
put 'TkFNRSwiICIpfX1mdW5jdGlvbiB4dHQoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJ0ZCIsMzMpLE5lKDIpLHllKCksenIoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIisoYS5HUk9VUFVSSXx8YS5V'@;
put 'UkkpKSxDZSgxKSxncigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gRXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSxKZSgxLE10dCwyLDIsInRkIiwzMiksSmUoMix4dHQsMywyLCJuZy1jb250YWluZXIiLDUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9uIGt0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxKZSgyLEV0dCwzLDIsInRy'@;
put 'IiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24gQXR0KGMsbCl7MSZjJiZxdCgwLCJociIpfWZ1bmN0aW9uIFR0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gUm9sZXMgUHJlc2VudCIpLHllKCkp'@;
put 'fWZ1bmN0aW9uIER0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDM0KSxOZSgyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDQpO0NlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK2QuZ2V0Um9sZVVSSShhLlJPTEVVUkkp'@;
put 'KSxDZSgxKSxncigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBMdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksSmUoMixEdHQsMywyLCJ0ciIsMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMiksUmUoIm5nRm9yT2YiLGEudXNlclJvbGVz'@;
put 'KX19ZnVuY3Rpb24gSXR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLEplKDMsVHR0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLEplKDUsTHR0LDMsMSwidGFibGUiLDI1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxncigiUk9MRVMg'@;
put 'KCIsYS51c2VyUm9sZXNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50KX19ZnVuY3Rpb24gUnR0KGMsbCl7MSZjJiZxdCgwLCJociIpfWZ1bmN0aW9uIE90dChjLGwpezEmYyYmKG1l'@;
put 'KDAsImg1IiksTmUoMSwiTm8gTG9naW5zIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBQdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwzMSksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzEpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEu'@;
put 'RE9NQUlOKSxDZSgyKSxvcihhLlVTRVJJRCl9fWZ1bmN0aW9uIEZ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLE5lKDUsIkRPTUFJTiIpLHllKCkoKSxtZSg2LCJ0ZCIpKDcsImIiKSxOZSg4LCJVU0VSIElEIiks'@;
put 'eWUoKSgpKCkoKSxtZSg5LCJ0Ym9keSIpLEplKDEwLFB0dCw1LDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxMCksUmUoIm5nRm9yT2YiLGEudXNlckxvZ2lucyl9fWZ1bmN0aW9uIEh0dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUo'@;
put 'KSxKZSgzLE90dCwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI0KSxKZSg1LEZ0dCwxMSwxLCJ0YWJsZSIsMjUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJMT0dJTlMgKCIsYS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJM'@;
put 'b2dpbnNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlckxvZ2luc0NvdW50KX19ZnVuY3Rpb24gTnR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxtdHQsMTUsMywiZGl2IiwyMCksSmUoMix2dHQsMTksMywiZGl2IiwyMCksbWUoMywiZGl2IiwyMSkoNCwiZGl2IiwyMiko'@;
put 'NSwiZGl2IiwyMyksSmUoNix3dHQsNiwzLCJkaXYiLDUpLEplKDcsQ3R0LDEsMCwiaHIiLDUpLG1lKDgsImRpdiIpKDksImgzIiksTmUoMTApLHllKCksSmUoMTEsU3R0LDIsMCwiaDUiLDUpLG1lKDEyLCJkaXYiLDI0KSxKZSgxMyxrdHQsMywxLCJ0YWJsZSIsMjUpLHllKCkoKSxKZSgxNCxB'@;
put 'dHQsMSwwLCJociIsNSksSmUoMTUsSXR0LDYsMywiZGl2Iiw1KSxKZSgxNixSdHQsMSwwLCJociIsNSksSmUoMTcsSHR0LDYsMywiZGl2Iiw1KSxxdCgxOCwiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksQ2UoNCksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2'@;
put 'ZXJUeXBlLlNhczkpLENlKDMpLGdyKCJHUk9VUFMgKCIsYS51c2VyR3JvdXBzQ291bnR8fCIwIiwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJHcm91cHNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlckdyb3Vwc0NvdW50KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBl'@;
put 'PT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBl'@;
put 'LlNhczkpfX1sZXQgU2xlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPV8sdGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJj'@;
put 'aD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNlcnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPVpjLkQsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2Vydmlj'@;
put 'ZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtpZihHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlv'@;
put 'bj0idmlldy91c2VybmF2L3VzZXJzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEduLnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFt'@;
put 'UHJlc2VudCl0aGlzLnVzZXJzPUduLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUduLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUduLnVzZXJuYXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmln'@;
put 'LnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQ'@;
put 'Uk9WSURFUjpmLnByb3ZpZGVySWR9KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxHbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9'@;
put 'YS51c2VycyxHbi51c2VybmF2LnVzZXJMaXN0PWEudXNlcnN9KSk6KHRoaXMudXNlcnM9R24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9R24udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBh'@;
put 'PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRl'@;
put 'eHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlzLnVzZXJEYXRhPWgsdGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKF89Pih7R1JPVVBOQU1FOl8ubmFtZSxVUkk6Xy5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0'@;
put 'aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoXz0+Xy5VUkk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50'@;
put 'Olt7dXJpOmF9XX0pLnRoZW4oaD0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFpjLkQuU2FzOTp0aGlzLnVzZXJJbmZvPWguaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9aC5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9aC5lbWFpbHMubGVuZ3RoLHRo'@;
put 'aXMudXNlclJvbGVzPWgucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1oLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aC5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9aC5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgWmMuRC5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlcklu'@;
put 'Zm89dGhpcy51c2Vycy5maW5kKGY9PmYuVVJJPT09YSk7ZWxzZXtjb25zdCBmPWguZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpmLklELE5BTUU6Zi5OQU1FLERJU1BMQVlOQU1FOmYuTkFNRX19fXRoaXMudXNlckRhdGE9aCx0aGlzLnVzZXJHcm91cHM9aC5ncm91cHMsdGhpcy51c2Vy'@;
put 'R3JvdXBzQ291bnQ9aC5ncm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudXNlcnMsdGhpcy51c2VyU2VhcmNoLCJOQU1FIiksR24udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMudXNlclNlYXJjaH11c2VyT25D'@;
put 'bGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5VUkkpOmQrIi8iK2VuY29kZVVSSShhLlVSSSkp'@;
put 'LHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2EuVVJJKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57'@;
put 'bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLnVzZXJEYXRhPWYsdGhpcy5sb2FkaW5nPSExO2xldCBfPWYuaXRlbXMubWFwKFQ9Pih7R1JPVVBOQU1FOlQubmFtZSxVUkk6VC5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Xyx0aGlzLnVzZXJHcm91cHNDb3VudD1fLmxlbmd0aCx0aGlzLnVzZXJzJiYo'@;
put 'dGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoVD0+VC5VUkk9PT1hLlVSSSkpfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YS5VUkl9XX0pLnRoZW4oZj0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5z'@;
put 'ZXJ2ZXJUeXBlKXtjYXNlIFpjLkQuU2FzOTp0aGlzLnVzZXJJbmZvPWYuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9Zi5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWYucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1mLnJvbGVzLmxl'@;
put 'bmd0aCx0aGlzLnVzZXJMb2dpbnM9Zi5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9Zi5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgWmMuRC5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKF89Pl8uVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3QgXz1m'@;
put 'Lmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Xy5JRCxOQU1FOl8uTkFNRSxESVNQTEFZTkFNRTpfLk5BTUV9fX10aGlzLnVzZXJEYXRhPWYsdGhpcy51c2VyR3JvdXBzPWYuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuZ3JvdXBzLmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0'@;
put 'dXJuIGEuc3BsaXQoIk9NU09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFRjKSx0dChvYSksdHQoR2wpLHR0KEpkKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9y'@;
put 'czpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJl'@;
put 'YSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29t'@;
put 'cGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hh'@;
put 'cGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlciJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0s'@;
put 'WyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsInVzZXItZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgdXNlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsInVzZXItaW5mbyJd'@;
put 'LFsxLCJsZWZ0Il0sWzEsInVzZXItaW5mby10ZXh0Il0sWzEsInRhYmxlIiwidXNlci10YWJsZSJdLFsxLCJ3aWR0aC01MCJdLFsxLCIiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLCJjbGFzcyIsIiIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsicm91dGVyTGlua0FjdGl2ZSIs'@;
put 'ImFjdGl2ZSIsMSwiIiwzLCJyb3V0ZXJMaW5rIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIsMCkoMSwiY2xyLXRyZWUiKSxKZSgyLGR0dCw2LDMsImNsci10cmVlLW5vZGUiLDEpLEplKDMsZnR0LDIsMSwibmctY29u'@;
put 'dGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxKZSg1LHB0dCwzLDAsImRpdiIsNCksSmUoNixOdHQsMTksMTEsImRpdiIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQudXNlcnMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnVzZXJzKSxDZSgyKSxSZSgibmdJZiIsZC5sb2Fk'@;
put 'aW5nKSxDZSgxKSxSZSgibmdJZiIsZC51c2VyRGF0YSYmIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LEdfLFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS51c2VyLWluZm8t'@;
put 'dGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAg'@;
put 'MnB4IDVweCAjZGFkN2Q3fS51c2VyLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3'@;
put 'YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmF1dG99LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC51c2VyLWRhdGFbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aGVhZFtf'@;
put 'bmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBv'@;
put 'aW50ZXJ9LndpZHRoLTUwW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCV9LndpZHRoLTMzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMyV9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo1MDBweH1AbWVkaWEgc2Ny'@;
put 'ZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCksVnR0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1k'@;
put 'LHRoaXMudml5YUFwaXM9e0FuYWx5dGljc19JbnNpZ2h0czp7aW5zaWdodHM6Ii9pbnNpZ2h0cyJ9LFZpc3VhbGlzYXRpb246e3JlcG9ydHM6Ii9yZXBvcnRzIixyZXBvcnRJbWFnZXM6Ii9yZXBvcnRJbWFnZXMiLHJlcG9ydFRyYW5zZm9ybXM6Ii9yZXBvcnRUcmFuc2Zvcm1zIix2aXN1YWxB'@;
put 'bmFseXRpY3M6Ii92aXN1YWxBbmFseXRpY3MifSxDb21wdXRlOntqb2JzOiIvam9iRGVmaW5pdGlvbnMiLGpvYkV4ZWN1dGlvbjoiL2pvYkV4ZWN1dGlvbiJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIv'@;
put 'bW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJl'@;
put 'bmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoi'@;
put 'L2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOntt'@;
put 'bFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIiO2NvbnN0IGg9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnNlcnZlclVybD1o'@;
put 'Py5zZXJ2ZXJVcmx8fCIiLHRoaXMuZ2V0QnlDb2xsZWN0aW9uKCJqb2JzIikuc3Vic2NyaWJlKGY9Pntjb25zb2xlLmxvZygicmVzIixmKX0pfWdldEFsbENvbGxlY3Rpb25zKCl7cmV0dXJuIHRoaXMudml5YUFwaXN9Z2V0QnlVcmwoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5z'@;
put 'ZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKGFyKGhQKSxhcihlOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIEJ0dChjLGwpezEmYyYmcXQoMCwiZGl2Iiw5KX1mdW5jdGlvbiBqdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'Vm4oKTttZSgwLCJzcGFuIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkub25WYWx1ZUNsaWNrKGgpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLG9yKGEuZGVzY3Jp'@;
put 'cHRpb24pfX1mdW5jdGlvbiB6dHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJzZWN0aW9uIiwxMSkoMSwibmd4LWpzb24tdmlld2VyIiwxMikseHQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uU2VnbWVudExpbmtDbGlj'@;
put 'ayhoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtDZSgxKSxSZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWNvbnN0IFV0dD1m'@;
put 'dW5jdGlvbihjKXtyZXR1cm5bInNlZ21lbnQiLGNdfSxadHQ9ZnVuY3Rpb24oYyxsKXtyZXR1cm57InNlZ21lbnQtbWFpbiI6ITAsZXhwYW5kYWJsZTpjLGV4cGFuZGVkOmx9fTtmdW5jdGlvbiBZdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJzZWN0aW9uIiwyKSgxLCJzZWN0'@;
put 'aW9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudG9nZ2xlKGYpKX0pLEplKDIsQnR0LDEsMCwiZGl2Iiw0KSxtZSgzLCJzcGFuIiw1KSxOZSg0KSx5ZSgpLG1lKDUsInNwYW4iLDYpLE5lKDYsIjogIikseWUoKSxKZSg3'@;
put 'LGp0dCwyLDEsInNwYW4iLDcpLHllKCksSmUoOCx6dHQsMiw0LCJzZWN0aW9uIiw4KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7UmUoIm5nQ2xhc3MiLEoyKDYsVXR0LCJzZWdtZW50LXR5cGUtIithLnR5cGUpKSxDZSgxKSxSZSgibmdDbGFzcyIsUTIoOCxadHQs'@;
put 'ZC5pc0V4cGFuZGFibGUoYSksYS5leHBhbmRlZCkpLENlKDEpLFJlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksQ2UoMiksb3IoYS5rZXkpLENlKDMpLFJlKCJuZ0lmIiwhYS5leHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxDZSgxKSxSZSgibmdJZiIsYS5leHBhbmRlZCYmZC5pc0V4'@;
put 'cGFuZGFibGUoYSkpfX1sZXQgV3R0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGVkPSEwLHRoaXMuZGVwdGg9LTEsdGhpcy5fY3VycmVudERlcHRoPTAsdGhpcy5zZWdtZW50TGlua0NsaWNrZWQ9bmV3IEVyLHRoaXMuc2VnbWVudHM9W119bmdPbkNoYW5nZXMoKXt0'@;
put 'aGlzLnNlZ21lbnRzPVtdLHRoaXMuanNvbj10aGlzLmRlY3ljbGUodGhpcy5qc29uKSwib2JqZWN0Ij09dHlwZW9mIHRoaXMuanNvbj9PYmplY3Qua2V5cyh0aGlzLmpzb24pLmZvckVhY2goYT0+e3RoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYSx0aGlzLmpzb25bYV0p'@;
put 'KX0pOnRoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYCgke3R5cGVvZiB0aGlzLmpzb259KWAsdGhpcy5qc29uKSl9aXNFeHBhbmRhYmxlKGEpe3JldHVybiJvYmplY3QiPT09YS50eXBlfHwiYXJyYXkiPT09YS50eXBlfXRvZ2dsZShhKXt0aGlzLmlzRXhwYW5kYWJsZShh'@;
put 'KSYmKGEuZXhwYW5kZWQ9IWEuZXhwYW5kZWQpfW9uVmFsdWVDbGljayhhKXsibGluayI9PT1hLnR5cGUmJnRoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYS52YWx1ZSl9b25TZWdtZW50TGlua0NsaWNrKGEpe3RoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYSl9cGFyc2VLZXlWYWx1'@;
put 'ZShhLGQpe2NvbnN0IGg9e2tleTphLHZhbHVlOmQsdHlwZTp2b2lkIDAsZGVzY3JpcHRpb246IiIrZCxleHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQoKX07c3dpdGNoKHR5cGVvZiBoLnZhbHVlKXtjYXNlIm51bWJlciI6aC50eXBlPSJudW1iZXIiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aC50eXBl'@;
put 'PSJib29sZWFuIjticmVhaztjYXNlImZ1bmN0aW9uIjpoLnR5cGU9ImZ1bmN0aW9uIjticmVhaztjYXNlInN0cmluZyI6aWYodGhpcy5pc0xpbmsoaC52YWx1ZSkpe2gudHlwZT0ibGluayI7YnJlYWt9aC50eXBlPSJzdHJpbmciLGguZGVzY3JpcHRpb249JyInK2gudmFsdWUrJyInO2JyZWFr'@;
put 'O2Nhc2UidW5kZWZpbmVkIjpoLnR5cGU9InVuZGVmaW5lZCIsaC5kZXNjcmlwdGlvbj0idW5kZWZpbmVkIjticmVhaztjYXNlIm9iamVjdCI6bnVsbD09PWgudmFsdWU/KGgudHlwZT0ibnVsbCIsaC5kZXNjcmlwdGlvbj0ibnVsbCIpOkFycmF5LmlzQXJyYXkoaC52YWx1ZSk/KGgudHlwZT0i'@;
put 'YXJyYXkiLGguZGVzY3JpcHRpb249IkFycmF5WyIraC52YWx1ZS5sZW5ndGgrIl0gIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSk6aC52YWx1ZSBpbnN0YW5jZW9mIERhdGU/aC50eXBlPSJkYXRlIjooaC50eXBlPSJvYmplY3QiLGguZGVzY3JpcHRpb249Ik9iamVjdCAiK0pTT04uc3RyaW5n'@;
put 'aWZ5KGgudmFsdWUpKX1yZXR1cm4gaH1pc0xpbmsoYSl7cmV0dXJuImh0dHBzOi8vIj09PWEuc3Vic3RyaW5nKDAsOCl8fCJodHRwOi8vIj09PWEuc3Vic3RyaW5nKDAsNyl8fCIvIj09PWFbMF19aXNFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkJiYhKHRoaXMuZGVwdGg+LTEmJnRo'@;
put 'aXMuX2N1cnJlbnREZXB0aD49dGhpcy5kZXB0aCl9ZGVjeWNsZShhKXtjb25zdCBkPW5ldyBXZWFrTWFwO3JldHVybiBmdW5jdGlvbiBoKGYsXyl7bGV0IFQsVztyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGZ8fG51bGw9PT1mfHxmIGluc3RhbmNlb2YgQm9vbGVhbnx8ZiBpbnN0YW5jZW9mIERh'@;
put 'dGV8fGYgaW5zdGFuY2VvZiBOdW1iZXJ8fGYgaW5zdGFuY2VvZiBSZWdFeHB8fGYgaW5zdGFuY2VvZiBTdHJpbmc/ZjooVD1kLmdldChmKSx2b2lkIDAhPT1UP3skcmVmOlR9OihkLnNldChmLF8pLEFycmF5LmlzQXJyYXkoZik/KFc9W10sZi5mb3JFYWNoKGZ1bmN0aW9uKGllLHBlKXtXW3Bl'@;
put 'XT1oKGllLF8rIlsiK3BlKyJdIil9KSk6KFc9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihpZSl7V1tpZV09aChmW2llXSxfKyJbIitKU09OLnN0cmluZ2lmeShpZSkrIl0iKX0pKSxXKSl9KGEsIiQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu'@;
put 'ZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5neC1qc29uLXZpZXdlciJdXSxpbnB1dHM6e2pzb246Impzb24iLGV4cGFuZGVkOiJleHBhbmRlZCIsZGVwdGg6ImRlcHRoIixfY3VycmVudERlcHRoOiJfY3VycmVudERlcHRoIn0sb3V0cHV0czp7c2VnbWVu'@;
put 'dExpbmtDbGlja2VkOiJzZWdtZW50TGlua0NsaWNrZWQifSxmZWF0dXJlczpbdmFdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzEsIm5neC1qc29uLXZpZXdlciJdLFszLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIiwiY2xpY2siXSxb'@;
put 'ImNsYXNzIiwidG9nZ2xlciIsNCwibmdJZiJdLFsxLCJzZWdtZW50LWtleSJdLFsxLCJzZWdtZW50LXNlcGFyYXRvciJdLFsiY2xhc3MiLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsxLCJ0b2dnbGVyIl0sWzEsInNl'@;
put 'Z21lbnQtdmFsdWUiLDMsImNsaWNrIl0sWzEsImNoaWxkcmVuIl0sWzMsImpzb24iLCJleHBhbmRlZCIsImRlcHRoIiwiX2N1cnJlbnREZXB0aCIsInNlZ21lbnRMaW5rQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsInNlY3Rpb24iLDApLEplKDEsWXR0LDks'@;
put 'MTEsInNlY3Rpb24iLDEpLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0Zvck9mIixkLnNlZ21lbnRzKSl9LGRlcGVuZGVuY2llczpbZGMseHMsWmksY10sc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijsubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTp2YXIo'@;
put 'LS1uZ3gtanNvbi1mb250LWZhbWlseSwgbW9ub3NwYWNlKTtmb250LXNpemU6dmFyKC0tbmd4LWpzb24tZm9udC1zaXplLCAxZW0pO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4O21hcmdpbjoxcHggMXB4IDFweCAxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVD'@;
put 'T01QJV17d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlv'@;
put 'bjphYnNvbHV0ZTttYXJnaW4tbGVmdDotMTRweDttYXJnaW4tdG9wOjNweDtmb250LXNpemU6LjhlbTtsaW5lLWhlaWdodDoxLjJlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29sb3I6dmFyKC0tbmd4LWpzb24tdG9nZ2xlciwgIzc4Nzg3OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiJcXDI1YmEiO3RyYW5zaXRpb246dHJhbnNm'@;
put 'b3JtIC4xcyBlYXNlLWlufS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5n'@;
put 'eC1qc29uLWtleSwgIzRFMTg3Qyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXNlcGFyYXRvcltfbmdjb250ZW50LSVDT01QJV17Y29s'@;
put 'b3I6dmFyKC0tbmd4LWpzb24tc2VwYXJhdG9yLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0l'@;
put 'Q09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXZhbHVlLCAjMDAwKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGlsZHJlbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTJweH0ubmd4LWpzb24t'@;
put 'dmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtc3RyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXN0cmlu'@;
put 'ZywgI0ZGNkI2Qil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv'@;
put 'cjp2YXIoLS1uZ3gtanNvbi1udW1iZXIsICMwMDk2ODgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1ib29sZWFuW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVb'@;
put 'X25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWJvb2xlYW4sICNCOTM4QTQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1kYXRlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09N'@;
put 'UCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWRhdGUsICMwNTY2OEQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1t'@;
put 'YWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1hcnJheSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1vYmplY3QsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1m'@;
put 'dW5jdGlvbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1mdW5jdGlvbiwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbGluaywgIzlCNTlCNil9Lm5neC1qc29uLXZp'@;
put 'ZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbCwgI2Zm'@;
put 'Zil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIo'@;
put 'LS1uZ3gtanNvbi11bmRlZmluZWQsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVu'@;
put 'dC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbC1iZywgcmVkKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0l'@;
put 'Q09NUCVdID4gLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+'@;
put 'IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2Vn'@;
put 'bWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ubmd4LWpzb24tdmlld2VyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0l'@;
put 'Q09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0'@;
put 'cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0gPiAu'@;
put 'dG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9J119KSxjfSkoKSxHdHQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1w'@;
put 'b3J0czpbb29dfSksY30pKCksJHR0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe2lmKCFhLmluY2x1ZGVzKCIvIikpcmV0dXJuIGE7bGV0IGQ9IiI7Y29uc3QgaD1hLnNwbGl0KCIvIik7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspaWYoIiIhPT1oW2ZdKXtjb25zdCBfPWhbZl07ZCs9'@;
put 'Ii8iK18saFtmXT1gPGEgaHJlZj0ke2R9PiR7X308L2E+YH1yZXR1cm4gaC5qb2luKCIvIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImxpbmtpbnplIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLHF0dD0o'@;
put 'KCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJwcmV0dHlqc29uIix0eXBlOmMscHVyZTohMH0pLGN9KSgp'@;
put 'O2Z1bmN0aW9uIEt0dChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFYygidmFsdWUiLGEudmFsdWUpLENlKDEpLGdyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBYdHQoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRn'@;
put 'cm91cCIsMjApLEplKDEsS3R0LDIsMiwib3B0aW9uIiwyMSksYmEoMiwia2V5dmFsdWUiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO1JlKCJsYWJlbCIsYS5rZXkpLENlKDEpLFJlKCJuZ0Zvck9mIixabCgyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rp'@;
put 'b24gSnR0KGMsbCl7MSZjJiYobWUoMCwicCIsMjMpLE5lKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSx5ZSgpKX1mdW5jdGlvbiBRdHQoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwyNCl9ZnVuY3Rpb24gZW50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1'@;
put 'bmN0aW9uIHRudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsanQoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9u'@;
put 'IG5udChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDI1KSgxLCJkaXYiLDI2KSgyLCJpbnB1dCIsMjcsMjgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saW5rc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saW5rc0xpc3RPbkZpbHRlcigpKX0pLHllKCksSmUoNCxlbnQsMSwwLCJjbHItaWNvbiIsMjkpLEplKDUsdG50LDEsMCwiY2xyLWljb24iLDMwKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2Rl'@;
put 'bCIsZC5saW5rc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gcm50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzQpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmVuZHBvaW50TGlua3MpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFu'@;
put 'ZGVkPWgpfSksbWUoMSwicCIsMzUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmxpbmtPbkNsaWNrKGgpKX0pLHF0KDIsImNsci1pY29uIiwzNiksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBs'@;
put 'aWNpdDtSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSx6YygiICIsYS5tZXRob2QsIiAiLGEucmVsLCIgIil9fWZ1bmN0aW9uIGludChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEscm50LDQsNCwiY2xy'@;
put 'LXRyZWUtbm9kZSIsMzMpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gb250KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIHNudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNs'@;
put 'ci1pY29uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguaXRlbXNTZWFyY2g9IiIsanQoaC5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGFudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVl'@;
put 'LW5vZGUiLDI1KSgxLCJkaXYiLDI2KSgyLCJpbnB1dCIsMzcsMzgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pdGVtc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pdGVtc0xpc3RPbkZpbHRl'@;
put 'cigpKX0pLHllKCksSmUoNCxvbnQsMSwwLCJjbHItaWNvbiIsMjkpLEplKDUsc250LDEsMCwiY2xyLWljb24iLDMwKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5pdGVtc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVu'@;
put 'Z3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gbG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzQpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7'@;
put 'cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmVuZHBvaW50SXRlbXMpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtC'@;
put 'dChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLml0ZW1PbkNsaWNrKGgpKX0pLHF0KDIsImNsci1pY29uIiwzNiksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5n'@;
put 'IiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIGNudChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsbG50LDQsMywiY2xyLXRyZWUtbm9kZSIsMzMpLHpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgx'@;
put 'KSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gdW50KGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzkpfWZ1bmN0aW9uIGRudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsIm5neC1qc29uLXZpZXdlciIsNDkpLHh0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0'@;
put 'aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS5vbkpzb25MaW5rQ2xpY2soaCkpfSkseWUoKX0yJmMmJlJlKCJqc29uIixWZSgzKS5lbmRwb2ludEpzb24pKCJleHBhbmRlZCIsITEpfWZ1bmN0aW9uIGhudChjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEpLGJhKDIsInByZXR0eWpzb24iKSx6'@;
put 'cigpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksZ3IoIlxuICAgICAgICAgICAgIixabCgyLDEsYS5lbmRwb2ludEpzb24pLCJcbiAgICAgICAgICAiKX19ZnVuY3Rpb24gZm50KGMsbCl7aWYoMSZjJiYoVnIoMCksTmUoMSwiXG4gICAgICAgICAgIiksSmUoMixkbnQsMSwyLCJuZ3gtanNv'@;
put 'bi12aWV3ZXIiLDQ4KSxOZSgzLCJcbiAgICAgICAgICAiKSxKZSg0LGhudCwzLDMsIm5nLWNvbnRhaW5lciIsMTkpLE5lKDUsIlxuICAgICAgICAiKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksUmUoIm5nSWYiLCFhLnJhd0pzb24pLENlKDIpLFJlKCJuZ0lmIixhLnJhd0pzb24p'@;
put 'fX1mdW5jdGlvbiBwbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDQwKSgyLCJzcGFuIiw0MSksTmUoMywiIEdFVCAiKSxtZSg0LCJwIiw0MikseHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgp'@;
put 'KX0pLGJhKDUsImxpbmtpbnplIikseWUoKSxtZSg2LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29weUJyZWFkY3J1bXMoKSl9KSxxdCg3LCJjbHItaWNvbiIsMTUpLHllKCkoKSxtZSg4LCJkaXYiLDQzKSg5LCJjbHItaW5wdXQtY29u'@;
put 'dGFpbmVyIiwxMikoMTAsImxhYmVsIiksTmUoMTEsIlN0YXJ0IikseWUoKSxtZSgxMiwiaW5wdXQiLDQ0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZW5kcG9pbnQuc3RhcnQ9aCl9KSx5ZSgpKCksbWUoMTMsImNsci1pbnB1dC1jb250YWlu'@;
put 'ZXIiLDEyKSgxNCwibGFiZWwiKSxOZSgxNSwiTGltaXQiKSx5ZSgpLG1lKDE2LCJpbnB1dCIsNDQpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5lbmRwb2ludC5saW1pdD1oKX0pLHllKCkoKSxtZSgxNywiYnV0dG9uIiw0NSkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmFwcGx5UXVlcnlQYXJhbXMoKSl9KSxxdCgxOCwiY2xyLWljb24iLDQ2KSx5ZSgpKCkoKSxtZSgxOSwicHJlIiw0NyksTmUoMjAsIiAgICAgICAgIiksSmUoMjEsZm50LDYsMiwibmctY29udGFpbmVyIiwxOSksTmUoMjIsIlxuICAg'@;
put 'ICAgIikseWUoKSx6cigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLFJlKCJpbm5lckhUTUwiLFpsKDUsNyxhLmVuZHBvaW50LnVybCkscTIpLENlKDgpLFJlKCJuZ01vZGVsIixhLmVuZHBvaW50LnN0YXJ0KSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLENlKDQp'@;
put 'LFJlKCJuZ01vZGVsIixhLmVuZHBvaW50LmxpbWl0KSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQpLENlKDEpLFJlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCYmdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksQ2UoNCksUmUoIm5nSWYiLGEuZW5k'@;
put 'cG9pbnRKc29uKX19bGV0IGdudD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzVml5YVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuY29sbGVjdGlvbnM9e30sdGhpcy5jb2xs'@;
put 'ZWN0aW9uPSIiLHRoaXMuZW5kcG9pbnRMaW5rcz1bXSx0aGlzLmVuZHBvaW50SXRlbXM9W10sdGhpcy5lbmRwb2ludD17dXJsOiIiLHN0YXJ0Oi0xLGxpbWl0Oi0xfSx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMucmF3SnNvbj0hMSx0aGlz'@;
put 'LmxpbmtzU2VhcmNoPSIiLHRoaXMuaXRlbXNTZWFyY2g9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWd9bmdPbkluaXQoKXt0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuY29sbGVjdGlvbnM9dGhpcy5zYXNWaXlhU2Vy'@;
put 'dmljZS5nZXRBbGxDb2xsZWN0aW9ucygpfWxpbmtzTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50TGlua3MsdGhpcy5saW5rc1NlYXJjaCwicmVsIiksR24udml5YUFwaS5saW5rc3NTZWFyY2g9dGhpcy5saW5rc1NlYXJjaH1p'@;
put 'dGVtc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludEl0ZW1zLHRoaXMuaXRlbXNTZWFyY2gsIm5hbWUiKSxHbi52aXlhQXBpLml0ZW1zU2VhcmNoPXRoaXMuaXRlbXNTZWFyY2h9bGlua09uQ2xpY2soYSl7dGhpcy5sb2FkVXJs'@;
put 'KGEuaHJlZil9aXRlbU9uQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEubGlua3NbMF0uaHJlZil9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFj'@;
put 'aChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9dXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl7R24udml5YUFwaS5zZWxlY3RlZENvbGxlY3Rpb249dGhpcy5jb2xsZWN0aW9uLHRoaXMuZW5kcG9pbnQudXJsPXRoaXMuY29sbGVj'@;
put 'dGlvbix0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlDb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbikuc3Vic2NyaWJlKGE9Pnt0aGlzLmVuZHBvaW50TGlua3M9YS5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9YS5pdGVtcz9hLml0ZW1zOltdLHRo'@;
put 'aXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5lbmRwb2ludEpzb249YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWEuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1hLmxpbWl0fSxhPT57dGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMTtsZXQgZD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGlu'@;
put 'ZyByZXF1ZXN0IjthLm1lc3NhZ2UmJihkPWEubWVzc2FnZSksYS5lcnJvciYmKGEuZXJyb3IubWVzc2FnZSYmKGQ9YS5lcnJvci5tZXNzYWdlKSxhLmVycm9yLnJlbWVkaWF0aW9uJiYoZD1gJHtkfVxuJHthLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJv'@;
put 'cnRNb2RhbChudWxsLGQsbnVsbCwiSFRUUCBFcnJvciIpfSl9b25Kc29uTGlua0NsaWNrKGEpe3RoaXMubG9hZFVybChhKX1vbkpzb25DbGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIkEiPT09YS5zcmNFbGVtZW50LnRhZ05hbWUpe2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3Bs'@;
put 'aXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX19b25CcmVhZGN1bXNDbGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIWEuc3JjRWxlbWVudC5ocmVmKXJldHVybjtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0'@;
put 'aGlzLmxvYWRVcmwoZCl9Y29weUpzb24oKXt0aGlzLmVuZHBvaW50SnNvbiYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkodGhpcy5lbmRwb2ludEpzb24sbnVsbCwyKSl9Y29weUJyZWFkY3J1bXMoKXt0aGlzLmVuZHBvaW50JiZ0aGlzLmVuZHBvaW50LnVy'@;
put 'bCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5lbmRwb2ludC51cmwpfWFwcGx5UXVlcnlQYXJhbXMoKXtjb25zdCBhPXRoaXMuZW5kcG9pbnQuc3RhcnQsZD10aGlzLmVuZHBvaW50LmxpbWl0LGg9YD8ke3ZvaWQgMCE9PWE/InN0YXJ0PSIrYToiIn0ke3ZvaWQgMCE9PWQ/'@;
put 'IiZsaW1pdD0iK2Q6IiJ9YCxmPWAke3RoaXMuZW5kcG9pbnQudXJsLnNwbGl0KCI/IilbMF19JHtofWA7dGhpcy5sb2FkVXJsKGYpfWxvYWRVcmwoYSl7dGhpcy5lbmRwb2ludExvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeVVybChhKS5zdWJzY3JpYmUoZD0+e3RoaXMuZW5k'@;
put 'cG9pbnRMaW5rcz1kLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1kLml0ZW1zP2QuaXRlbXM6W10sdGhpcy5lbmRwb2ludEpzb249ZCx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmVuZHBvaW50LnVybD1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9ZC5zdGFydCx0aGlzLmVuZHBvaW50Lmxp'@;
put 'bWl0PWQubGltaXR9LGQ9Pnt0aGlzLmVuZHBvaW50TG9hZGluZz0hMTtsZXQgaD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjtkLm1lc3NhZ2UmJihoPWQubWVzc2FnZSksZC5lcnJvciYmKGQuZXJyb3IubWVzc2FnZSYmKGg9ZC5lcnJvci5tZXNzYWdlKSxkLmVycm9y'@;
put 'LnJlbWVkaWF0aW9uJiYoaD1gJHtofVxuJHtkLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGgsbnVsbCwiSFRUUCBFcnJvciIpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFRj'@;
put 'KSx0dChWdHQpLHR0KG9hKSx0dCh2bCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbMSwiYXBpLWNvbGxlY3Rpb24t'@;
put 'ZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMywibGFiZWwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgi'@;
put 'LCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImgtMTAwIiwicC0xMCIsImQtZmxleCIs'@;
put 'ImNsci1mbGV4LWNvbHVtbiJdLFsxLCJ3LTEwMCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInNpdGlvbi1yZWxhdGl2ZSJdLFsxLCJqc29uLXRvZ2dsZSIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxb'@;
put 'MSwibS0wIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0t'@;
put 'MCJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbMSwidy0xMDAiLCJsaWdodCJdLFs0LCJuZ0lmIl0sWzMsImxhYmVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNl'@;
put 'YXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExp'@;
put 'bmtzVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGlj'@;
put 'ayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBs'@;
put 'YWNlaG9sZGVyIiwiU2VhcmNoIGl0ZW1zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsiY2xyU21hbGwiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWdu'@;
put 'LWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZW5kcG9pbnQtYnJlYWRjcnVtcyIsMywiaW5uZXJIVE1MIiwiY2xpY2siXSxbMSwiZC1mbGV4IiwiY2xyLWFs'@;
put 'aWduLWl0ZW1zLWNlbnRlciIsInF1ZXJ5LXBhcmFtcyJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiZGlzYWJsZWQiLCJj'@;
put 'bGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImpzb24tYXJlYSJdLFsiY2xhc3MiLCJkLWJsb2NrIiwzLCJqc29uIiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQiLDQsIm5nSWYiXSxbMSwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIl1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDApKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxOZSg0LCJBUEkgQ29sbGVjdGlvbiIpLHllKCksbWUoNSwic2VsZWN0IiwxKSx4dCgibmdNb2RlbENoYW5nZSIsZnVu'@;
put 'Y3Rpb24oZil7cmV0dXJuIGQuY29sbGVjdGlvbj1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC51cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKX0pLEplKDYsWHR0LDMsNCwib3B0Z3JvdXAiLDIpLGJhKDcsImtleXZhbHVlIikseWUoKSgpKCksSmUoOCxKdHQsMiwwLCJwIiwzKSxt'@;
put 'ZSg5LCJkaXYiLDQpLEplKDEwLFF0dCwxLDAsImNsci1zcGlubmVyIiw1KSx5ZSgpLG1lKDExLCJjbHItdHJlZSIpLEplKDEyLG5udCw2LDMsImNsci10cmVlLW5vZGUiLDYpLEplKDEzLGludCwyLDEsIm5nLWNvbnRhaW5lciIsNykseWUoKSxtZSgxNCwiY2xyLXRyZWUiKSxKZSgxNSxhbnQs'@;
put 'NiwzLCJjbHItdHJlZS1ub2RlIiw2KSxKZSgxNixjbnQsMiwxLCJuZy1jb250YWluZXIiLDcpLHllKCkoKSxtZSgxNywiZGl2Iiw4KSgxOCwiZGl2Iiw5KSgxOSwiZGl2IiwxMCkoMjAsImRpdiIsMTEpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTIpKDIyLCJjbHItdG9nZ2xlLXdyYXBw'@;
put 'ZXIiKSgyMywiaW5wdXQiLDEzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmF3SnNvbj1mfSkseWUoKSxtZSgyNCwibGFiZWwiKSxOZSgyNSwiUkFXIEpzb24iKSx5ZSgpKCkoKSxtZSgyNiwiYnV0dG9uIiwxNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBkLmNvcHlKc29uKCl9KSxxdCgyNywiY2xyLWljb24iLDE1KSx5ZSgpKCksbWUoMjgsImg0IiwxNiksTmUoMjksIiBBUEkgRXhwbG9yZXIgIiksSmUoMzAsdW50LDEsMCwiY2xyLXNwaW5uZXIiLDE3KSx5ZSgpKCkscXQoMzEsImhyIiwxOCksSmUoMzIscG50LDIzLDksIm5nLWNvbnRhaW5l'@;
put 'ciIsMTkpLHllKCkoKSksMiZhJiYoQ2UoNSksUmUoIm5nTW9kZWwiLGQuY29sbGVjdGlvbiksQ2UoMSksUmUoIm5nRm9yT2YiLFpsKDcsMTEsZC5jb2xsZWN0aW9ucykpLENlKDIpLFJlKCJuZ0lmIixkLmVuZHBvaW50TGlua3MubGVuZ3RoPDEmJiFkLmNvbGxlY3Rpb25Mb2FkaW5nKSxDZSgy'@;
put 'KSxSZSgibmdJZiIsZC5jb2xsZWN0aW9uTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuZW5kcG9pbnRMaW5rcy5sZW5ndGg+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZW5kcG9pbnRMaW5rcyksQ2UoMiksUmUoIm5nSWYiLGQuZW5kcG9pbnRJdGVtcy5sZW5ndGg+MCksQ2UoMSksUmUoIm5n'@;
put 'Rm9yT2YiLGQuZW5kcG9pbnRJdGVtcyksQ2UoNyksUmUoIm5nTW9kZWwiLGQucmF3SnNvbiksQ2UoNyksUmUoIm5nSWYiLGQuZW5kcG9pbnRMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsYUUsUzAs'@;
put 'TTAsQnMsT3MsZGQsZzEsa2EsWnUsVXMsRDAsRDgsVDAsZjEsakYsTjgsSDgsdTIsbjMsV3R0LGR4LCR0dCxxdHRdLHN0eWxlczpbIi5hcGktY29sbGVjdGlvbi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tYm90'@;
put 'dG9tOjEwcHh9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgIGF7dGV4dC1kZWNvcmF0aW9uOm5v'@;
put 'bmV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZpZXdlcntoZWlnaHQ6MTAwJX0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+bmd4LWpzb24tdmlld2VyPi5uZ3gtanNvbi12aWV3ZXJ7b3ZlcmZsb3c6YXV0b30uanNvbi10b2dnbGVbX25nY29u'@;
put 'dGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDttYXJnaW46MH0uZW5kcG9pbnQtYnJlYWRjcnVtc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LnF1ZXJ5LXBhcmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17d2lkdGg6NzBweH0iXX0pLGN9KSgpO2NvbnN0IG1udD1uZXcgU2koIldpbmRvd1Rva2VuIix0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRvY3VtZW50P3twcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT53aW5kb3d9Ontwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57fX0p'@;
put 'O2xldCB2bnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLmRvY3VtZW50PWQsdGhpcy53aW5kb3c9aCx0aGlzLmNvcHlTdWJqZWN0PW5ldyBiZSx0aGlzLmNvcHlSZXNwb25zZSQ9dGhpcy5jb3B5U3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlz'@;
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 'ZXJzLmxlbmd0aD4wJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNvcHlTdWJqZWN0Lm5leHQoYSl9KX1wdXNoQ29weVJlcG9uc2UoYSl7dGhpcy5wdXNoQ29weVJlc3BvbnNlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIo'@;
put 'SXMpLGFyKG1udCw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksX250PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5uZ1pvbmU9YSx0aGlzLmhvc3Q9ZCx0aGlzLnJlbmRlcmVy'@;
put 'PWgsdGhpcy5jbGlwYm9hcmRTcnY9Zix0aGlzLmNiT25TdWNjZXNzPW5ldyBFcix0aGlzLmNiT25FcnJvcj1uZXcgRXIsdGhpcy5vbkNsaWNrPV89Pnt0aGlzLmNsaXBib2FyZFNydi5pc1N1cHBvcnRlZD90aGlzLnRhcmdldEVsbSYmdGhpcy5jbGlwYm9hcmRTcnYuaXNUYXJnZXRWYWxpZCh0'@;
put 'aGlzLnRhcmdldEVsbSk/dGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50YXJnZXRFbG0pLHRoaXMudGFyZ2V0RWxtLnZhbHVlLF8pOnRoaXMuY2JDb250ZW50JiZ0aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5j'@;
put 'b3B5RnJvbUNvbnRlbnQodGhpcy5jYkNvbnRlbnQsdGhpcy5jb250YWluZXIpLHRoaXMuY2JDb250ZW50LF8pOnRoaXMuaGFuZGxlUmVzdWx0KCExLHZvaWQgMCxfKX19bmdPbkluaXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuY2xpY2tMaXN0ZW5lcj10aGlz'@;
put 'LnJlbmRlcmVyLmxpc3Rlbih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiY2xpY2siLHRoaXMub25DbGljayl9KX1uZ09uRGVzdHJveSgpe3RoaXMuY2xpY2tMaXN0ZW5lciYmdGhpcy5jbGlja0xpc3RlbmVyKCksdGhpcy5jbGlwYm9hcmRTcnYuZGVzdHJveSh0aGlzLmNvbnRhaW5lcil9aGFu'@;
put 'ZGxlUmVzdWx0KGEsZCxoKXtsZXQgZj17aXNTdWNjZXNzOmEsY29udGVudDpkLHN1Y2Nlc3NNZXNzYWdlOnRoaXMuY2JTdWNjZXNzTXNnLGV2ZW50Omh9O2E/dGhpcy5jYk9uU3VjY2Vzcy5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uU3VjY2Vzcy5lbWl0KGYpfSk6'@;
put 'dGhpcy5jYk9uRXJyb3Iub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPbkVycm9yLmVtaXQoZil9KSx0aGlzLmNsaXBib2FyZFNydi5wdXNoQ29weVJlc3BvbnNlKGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChObyks'@;
put 'dHQoTmkpLHR0KEZvKSx0dCh2bnQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmd4Q2xpcGJvYXJkIiwiIl1dLGlucHV0czp7dGFyZ2V0RWxtOlsibmd4Q2xpcGJvYXJkIiwidGFyZ2V0RWxtIl0sY29udGFpbmVyOiJjb250YWluZXIiLGNiQ29udGVudDoiY2JD'@;
put 'b250ZW50IixjYlN1Y2Nlc3NNc2c6ImNiU3VjY2Vzc01zZyJ9LG91dHB1dHM6e2NiT25TdWNjZXNzOiJjYk9uU3VjY2VzcyIsY2JPbkVycm9yOiJjYk9uRXJyb3IifX0pLGN9KSgpLGJudD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKTt2YXIgeW50PUYoNTE3MTQpO2xldCB3bnQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSwuLi5kKXtjb25zdCBoPXBhcnNlSW50KGRbMF0pfHwyLGY9Im51bWJlciIhPXR5'@;
put 'cGVvZiBhP3BhcnNlSW50KGEpOmE7cmV0dXJuKDAseW50LlIpKGYsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImNvbnZlcnRTaXplIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2NvbnN0IENudD1bInF1'@;
put 'ZXJ5RmlsdGVyIl07ZnVuY3Rpb24gU250KGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw1MCkscXQoMSwiY2xyLXNwaW5uZXIiLDUxKSx5ZSgpKX1mdW5jdGlvbiBNbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw1OCl9ZnVuY3Rpb24geG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiY2xyLWljb24iLDU5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBFbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJj'@;
put 'bHItdHJlZS1ub2RlIiw1MikoMSwiZGl2Iiw1MykoMiwiaW5wdXQiLDU0LDU1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJh'@;
put 'cnlPbkZpbHRlcigpKX0pLHllKCksSmUoNCxNbnQsMSwwLCJjbHItaWNvbiIsNTYpLEplKDUseG50LDEsMCwiY2xyLWljb24iLDU3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lm'@;
put 'IixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGtudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDU4KX1mdW5jdGlvbiBBbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsNTkpLHh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLHllKCl9fWZ1bmN0aW9uIFRudChjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDUyKSgxLCJkaXYiLDUzKSgyLCJpbnB1dCIsNjQsNjUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24o'@;
put 'KXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSkseWUoKSxKZSg0LGtudCwxLDAsImNsci1pY29uIiw1NiksSmUoNSxBbnQsMSwwLCJjbHItaWNvbiIsNTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyks'@;
put 'ZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoImlkIiwic2VhcmNoXyIrZC5MSUJSQVJZUkVGKSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIERudChj'@;
put 'LGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDczKX1mdW5jdGlvbiBMbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw3NCl9ZnVuY3Rpb24gSW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9'@;
put 'VmUoKS5uZ1ZhcixmPVZlKCkuJGltcGxpY2l0LF89VmUoMikuJGltcGxpY2l0LFQ9VmUoKTtyZXR1cm4ganQoaD8iIjpULm9uVGFibGVDbGljayhmLF8pKX0pLFZyKDEsNzApLEplKDIsRG50LDEsMCwiY2xyLWljb24iLDcxKSxKZSgzLExudCwxLDAsImNsci1pY29uIiw3MiksenIoKSxOZSg0'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKS4kaW1wbGljaXQsaD1WZSgyKS4kaW1wbGljaXQsZj1WZSgpO2RyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoInRhYmxlLWFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxDZSgxKSxSZSgibmdTd2l0'@;
put 'Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITEpLENlKDEpLGdyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFJudChjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxOZSgxLCIgVG8g'@;
put 'dW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSx5ZSgpKX1mdW5jdGlvbiBPbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw3NSksSmUoMSxSbnQsMiwwLCJzcGFuIiwzOCkseWUoKSksMiZjKXtjb25zdCBhPVZl'@;
put 'KCkubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiBQbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcCIpLEplKDEsSW50LDUsOCwiYnV0dG9uIiw2NyksSmUoMixPbnQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw2OCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCku'@;
put 'JGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIixhLmxlbmd0aD4wKX19ZnVuY3Rpb24gRm50KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIpLEplKDEsUG50LDMsMSwiY2xyLXRvb2x0aXAiLDY2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVZlKDMpO0NlKDEpLFJlKCJu'@;
put 'Z1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gSG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRp'@;
put 'bXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlTm9kZUNsaWNrZWQoaCxmKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDYyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7'@;
put 'Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixqdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxxdCgyLCJjbHItaWNvbiIsNjMpLE5lKDMpLHllKCksSmUoNCxUbnQsNiw0LCJjbHItdHJlZS1ub2RlIiwyKSxKZSg1LEZu'@;
put 'dCwyLDEsImNsci10cmVlLW5vZGUiLDMpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgz'@;
put 'KSxncigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gTm50KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxIbnQsNiw3LCJjbHItdHJlZS1ub2RlIiw2MCksenIoKSksMiZjKXtjb25z'@;
put 'dCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gVm50KGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw3NikoMSwic3BhbiIsNzcpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gQm50KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSkoMiwiZGl2Iiw4MCkoMywiZGl2Iiw4MSkoNCwiYnV0dG9uIiw4MikscXQoNSwiY2xyLWljb24iLDgzKSx5ZSgpLG1lKDYsImgzIiw0MyksTmUoNywiRXJyb3IiKSx5ZSgpKCksbWUoOCwiZGl2IiwxMCkoOSwicCIpLE5l'@;
put 'KDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIikseWUoKSgpLG1lKDExLCJkaXYiLDIxKSgxMiwiYnV0dG9uIiw4NCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTmUoMTMsIiBPayAiKSx5ZSgpKCkoKSgp'@;
put 'KCl9fWZ1bmN0aW9uIGpudChjLGwpezEmYyYmcXQoMCwiZGl2Iiw4NSl9ZnVuY3Rpb24gem50KGMsbCl7MSZjJiZxdCgwLCJhcHAtcXVlcnkiLG51bGwsODYpfWZ1bmN0aW9uIFVudChjLGwpezEmYyYmKG1lKDAsImRpdiIsODcpKDEsInNwYW4iLDg4KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5'@;
put 'ZSgpLG1lKDMsImRpdiIpKDQsImg0IiksTmUoNSwiTG9hZGluZyB0YWJsZSB2aWV3ZXIiKSx5ZSgpKCkoKSl9ZnVuY3Rpb24gWm50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDExNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0k'@;
put 'aSg1KTtyZXR1cm4ganQoVmUoMikuc2VhcmNoVGFibGUoaCkpfSkseWUoKX19ZnVuY3Rpb24gWW50KGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMTE1KSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBXbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMTYpfWZ1bmN0aW9u'@;
put 'IEdudChjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDExNyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLGdyKCIgIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gJG50KGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksZ3IoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIHFudChjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSxiYSgyLCJ0aG91c2FuZFNlcGFyYXRvciIp'@;
put 'LHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSx3NSgiICgiLE01KDIsNCxhLm51bWJlck9mUm93cywiLCIpLCIgIiwxPT09YS5udW1iZXJPZlJvd3M/InJvdyI6InJvd3MiLCIsICIsYS5maWx0ZXJDb2xzLmxlbmd0aCwiIiwxPT09YS5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBj'@;
put 'b2xzIiwiKSAiKX19ZnVuY3Rpb24gS250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksSmUoMSxxbnQsMyw3LCJzcGFuIiwzOCksbWUoMiwiY2xyLWljb24iLDExOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5yZWxvYWRUYWJsZURhdGEoKSl9'@;
put 'KSx5ZSgpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5udW1iZXJPZlJvd3MpfX1mdW5jdGlvbiBYbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEyNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChh'@;
put 'KSxqdChWZSg1KS5lZGl0VGFibGUoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTMyKSxtZSgyLCJzcGFuIiksTmUoMywiRWRpdCIpLHllKCkoKX19ZnVuY3Rpb24gSm50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMjUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gQnQoYSksanQoVmUoNSkuZ29Ub0xpbmVhZ2UoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTMzKSxtZSgyLCJzcGFuIiksTmUoMywiTGluZWFnZSIpLHllKCkoKX19ZnVuY3Rpb24gUW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNCkoMSwi'@;
put 'YnV0dG9uIiwxMjUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkubmV3Vmlld2JveCgpKX0pLHF0KDIsImNsci1pY29uIiwxMjYpLG1lKDMsInNwYW4iKSxOZSg0LCJWaWV3Ym94ZXMiKSx5ZSgpKCksSmUoNSxYbnQsNCwwLCJidXR0b24iLDEyNyksSmUoNixK'@;
put 'bnQsNCwwLCJidXR0b24iLDEyNyksbWUoNywiYnV0dG9uIiwxMjgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkub3BlblFiKCkpfSkscXQoOCwiY2xyLWljb24iLDEyOSksbWUoOSwic3BhbiIpLE5lKDEwLCJGaWx0ZXIiKSx5ZSgpKCksbWUoMTEsImJ1dHRv'@;
put 'biIsMTI1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLm9wZW5Eb3dubG9hZD0hMCl9KSxxdCgxMiwiY2xyLWljb24iLDEzMCksbWUoMTMsInNwYW4iKSxOZSgxNCwiRG93bmxvYWQiKSx5ZSgpKCksbWUoMTUsImJ1dHRvbiIsMTI1KSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnNob3dXZWJRdWVyeSgpKX0pLHF0KDE2LCJjbHItaWNvbiIsMTMxKSxtZSgxNywic3BhbiIpLE5lKDE4LCJXZWIgUXVlcnkgVVJMIikseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDQpO0NlKDUpLFJlKCJuZ0lmIixhLnRhYmxlRWRp'@;
put 'dEV4aXN0cygpKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIGVydChjLGwpezEmYyYmKG1lKDAsImNsci1kcm9wZG93biIsMTIwKSgxLCJidXR0b24iLDEyMSkscXQoMiwiY2xyLWljb24iLDEyMiksTmUoMywiIG9wdGlvbnMgIikseWUoKSxKZSg0LFFudCwxOSwyLCJj'@;
put 'bHItZHJvcGRvd24tbWVudSIsMTIzKSx5ZSgpKSwyJmMmJlJlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIHRydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTM0KSgxLCJzcGFuIiksTmUoMiwiRklMVEVSIDogIiksbWUoMywiYiIpLE5lKDQpLHllKCkoKSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9VmUoMyk7Q2UoNCksb3IoYS5xdWVyeVRleHQpfX1jb25zdCBucnQ9ZnVuY3Rpb24oKXtyZXR1cm5bIiIsIiAiXX07ZnVuY3Rpb24gcnJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw5NSkoMSwic2VjdGlvbiIsOTYpKDIsImZvcm0iLDk3KSgzLCJk'@;
put 'aXYiLDk4KSg0LCJpbnB1dCIsOTksMTAwKSx4dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD0kaSg1KTtyZXR1cm4ganQoVmUoMikuc2VhcmNoVGFibGUoaCkpfSkseWUoKSxKZSg2LFpudCwxLDAsImNsci1pY29uIiwxMDEpLEplKDcsWW50LDIsMCwic3BhbiIsMTAy'@;
put 'KSx5ZSgpLG1lKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsMTAzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNlYXJjaE51bWVyaWM9aCl9KSx5ZSgpLG1lKDExLCJs'@;
put 'YWJlbCIpLE5lKDEyLCJOdW1lcmljIikseWUoKSgpKCkoKSgpLG1lKDEzLCJkaXYiLDEwNCkoMTQsImgzIiwxMDUpKDE1LCJjbHItdG9vbHRpcCIsMTA2KSgxNiwiY2xyLWljb24iLDEwNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5kYXRhc2V0SW5mbz0h'@;
put 'MCl9KSx5ZSgpLEplKDE3LFdudCwxLDAsImNsci1pY29uIiwxMDgpLEplKDE4LEdudCwyLDEsInNwYW4iLDEwOSksSmUoMTksJG50LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTEwKSx5ZSgpLEplKDIwLEtudCwzLDEsIm5nLWNvbnRhaW5lciIsMzgpLHllKCkoKSxtZSgyMSwiZGl2Iiwx'@;
put 'MTEpLEplKDIyLGVydCw1LDEsImNsci1kcm9wZG93biIsMTEyKSx5ZSgpLEplKDIzLHRydCw1LDEsImRpdiIsMTEzKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxSZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksQ2UoMiksUmUoIm5nSWYiLCFhLnNl'@;
put 'YXJjaExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLENlKDMpLFJlKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLENlKDcpLFJlKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLENlKDIpLFJlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksQ2UoMiksUmUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLENlKDEpLFJlKCJuZ0lmIiwiMT0xIiE9PWEu'@;
put 'cXVlcnlUZXh0JiYhJHMoOSxucnQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBpcnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEzNSkscXQoMSwiY2xyLWljb24iLDEzNiksbWUoMiwiaDMiLDEzNyksTmUoMywiUGxlYXNlIHNlbGVjdCBhIGxpYnJh'@;
put 'cnkiKSx5ZSgpKCkpfWZ1bmN0aW9uIG9ydChjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDUxKX1mdW5jdGlvbiBzcnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE0NSkscXQoMSwiY2xyLWljb24iLDE0NiksbWUoMiwiaDMiLDEzNyksTmUoMywiUGxlYXNlIHNlbGVjdCBhIHRhYmxlIiks'@;
put 'eWUoKSgpKX1mdW5jdGlvbiBhcnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJwIiwxNDkpLE5lKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLG1lKDIsImNsci1pY29uIiwxNTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCku'@;
put 'cmVsb2FkTGliSW5mbygpKX0pLHllKCksTmUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSx5ZSgpfX1mdW5jdGlvbiBscnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIkVOR0lORToiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBjcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIkxJQklEOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gdXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJMSUJOQU1FOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUo'@;
put 'NCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiBkcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIkxJQlNJWkU6IikseWUoKSxtZSgzLCJ0'@;
put 'ZCIsMTUyKSxOZSg0KSxiYSg1LCJjb252ZXJ0U2l6ZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/WmwoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBocnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEs'@;
put 'InRkIiwxNTEpLE5lKDIsIk9XTkVSUzoiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlvbiBmcnQoYyxsKXtpZigxJmMmJihtZSgw'@;
put 'LCJ0ciIpKDEsInRkIiwxNTEpLE5lKDIsIlBBVEhTOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3IoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24gcHJ0KGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJQRVJNUzoiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0aW9uIGdydChjLGwp'@;
put 'e2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE1MSksTmUoMiwiU0NIRU1BUzoiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rp'@;
put 'b24gbXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJUQUJMRV9DTlQ6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5UQUJMRV9DTlQ6'@;
put 'IiIsIiAiKX19ZnVuY3Rpb24gdnJ0KGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwidGFibGUiKSxKZSgyLGxydCw1LDEsInRyIiwzOCksSmUoMyxjcnQsNSwxLCJ0ciIsMzgpLEplKDQsdXJ0LDUsMSwidHIiLDM4KSxKZSg1LGRydCw2LDMsInRyIiwzOCksSmUoNixocnQsNSwxLCJ0ciIsMzgp'@;
put 'LEplKDcsZnJ0LDUsMSwidHIiLDM4KSxKZSg4LHBydCw1LDEsInRyIiwzOCksSmUoOSxncnQsNSwxLCJ0ciIsMzgpLEplKDEwLG1ydCw1LDEsInRyIiwzOCkseWUoKSx6cigpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMiksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkVOR0lORSksQ2Uo'@;
put 'MSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQklEKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLk9XTkVS'@;
put 'UyksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5TQ0hFTUFTKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5U'@;
put 'QUJMRV9DTlQpfX1mdW5jdGlvbiBfcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE0NyksSmUoMSxhcnQsNCwwLCJwIiwxNDgpLEplKDIsdnJ0LDExLDksIm5nLWNvbnRhaW5lciIsMzgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0'@;
put 'aDwxKSxDZSgxKSxSZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24gYnJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiZGl2IiwxMzgpLHF0KDIsInNlY3Rpb24iLDk2KSxtZSgzLCJkaXYiLDEzOSkoNCwiaDMiLDE0MCksTmUoNSkseWUoKSxtZSg2'@;
put 'LCJjbHItaWNvbiIsMTE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnJlbG9hZExpYkluZm8oKSl9KSx5ZSgpKCkscXQoNywiZGl2IiwxMTEpLHllKCksbWUoOCwiZGl2IiwxNDEpLEplKDksb3J0LDEsMCwiY2xyLXNwaW5uZXIiLDE0MikseWUoKSxKZSgx'@;
put 'MCxzcnQsNCwwLCJkaXYiLDE0MyksSmUoMTEsX3J0LDMsMiwiZGl2IiwxNDQpLHpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLGdyKCIgIixhLmxpYiwiICIpLENlKDQpLFJlKCJuZ0lmIixudWxsPT09YS5saWJpbmZvKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyks'@;
put 'Q2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiB5cnQoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTM3KSxOZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIikseWUoKSl9ZnVuY3Rpb24gd3J0KGMsbCl7MSZjJiYobWUoMCwiaDMiLDEzNyks'@;
put 'TmUoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLHllKCkpfWZ1bmN0aW9uIENydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTUzKSxxdCgxLCJjbHItaWNvbiIsMTU0KSxKZSgyLHlydCwyLDAsImgzIiwxNTUpLEplKDMsd3J0LDIsMCwiaDMiLDE1NSks'@;
put 'eWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJuZ0lmIixhLm5vRGF0YSksQ2UoMSksUmUoIm5nSWYiLGEubm9EYXRhUmVxRXJyKX19ZnVuY3Rpb24gU3J0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNTYpLHF0KDEsImhvdC10YWJsZSIsMTU3KSx5ZSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9VmUoMik7Q2UoMSksUmUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMp'@;
put 'KCJjb3B5UGFzdGUiLGEuaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGEuaG90VGFibGUuY29udGV4dE1lbnUpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsYS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibW9kaWZ5Q29s'@;
put 'V2lkdGgiLGEubWF4V2lkdGhDaGVrZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLmhvdFRhYmxlLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsYS5ob3RU'@;
put 'YWJsZS5yb3dIZWFkZXJXaWR0aCkoInJvd0hlaWdodHMiLGEuaG90VGFibGUucm93SGVpZ2h0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIE1ydChjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDE1OCksTmUoMSkscXQoMiwiY29udGFjdC1saW5rIikseWUo'@;
put 'KSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24geHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4OSksSmUoMSxy'@;
put 'cnQsMjQsMTAsImRpdiIsOTApLEplKDIsaXJ0LDQsMCwiZGl2Iiw5MSksSmUoMyxicnQsMTIsNCwibmctY29udGFpbmVyIiwzOCksSmUoNCxDcnQsNCwyLCJkaXYiLDkyKSxKZSg1LFNydCwyLDE4LCJkaXYiLDkzKSxtZSg2LCJkaXYiKSxKZSg3LE1ydCwzLDEsInAiLDk0KSx5ZSgpKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsIShhLmxpYnx8YS50YWJsZXx8YS5ub0RhdGFSZXFFcnJ8fGEubm9EYXRhKSksQ2UoMSksUmUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiYhYS50YWJsZSYmYS5saWIpLENl'@;
put 'KDEpLFJlKCJuZ0lmIixhLm5vRGF0YXx8YS5ub0RhdGFSZXFFcnIpLENlKDEpLFJlKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmYS50YWJsZSksQ2UoMiksUmUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5JiZh'@;
put 'LmhvdFRhYmxlLmRhdGEmJmEuaG90VGFibGUuZGF0YS5sZW5ndGg+YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWxldCBIVD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUscGUsd2Upe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlz'@;
put 'LnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT1fLHRoaXMuZXZlbnRTZXJ2aWNlPVQsdGhpcy5sb2dnZXJTZXJ2aWNlPVcsdGhpcy5oZWxwZXJTZXJ2aWNlPWllLHRoaXMubG9jYXRpb249cGUsdGhpcy5jZGY9d2UsdGhpcy5xdWVy'@;
put 'eUZpbHRlckNvbXBMaXN0PW5ldyBlaCx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEsdGhpcy5saWJpbmZvPW51bGwsdGhpcy50YWJsZXVyaT1udWxsLHRo'@;
put 'aXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5xdWVyeUVycj0hMSx0aGlzLnRhYmxlRmxh'@;
put 'Zz0hMCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5sb2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5vcGVuRG93'@;
put 'bmxvYWQ9ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5nPSExLHRoaXMuc2VhcmNoTnVtZXJpYz0hMSx0aGlzLm51bWJlck9m'@;
put 'Um93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5'@;
put 'PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNl'@;
put 'bnNlS2V5OnZvaWQgMCxyb3dIZWFkZXJzOkVlPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAs'@;
put 'Y29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5k'@;
put 'ZXJlcjooRWUsWmUsaXQsZXQseXQsRXQpPT57Y29uc3QgU3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBKdCxubj0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3Qgdm49dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxObj12bj92'@;
put 'blswXVsxXTotMSxjcj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoTm4pO0p0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2NyXSxKdCYmKG5uPWBMQUJFTDogJHtKdD8ubGFiZWx9PGJyPlRZUEU6ICR7SnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtKdD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7'@;
put 'SnQ/LmZvcm1hdH1gKX1yZXR1cm4gU3QuaW5uZXJIVE1MPW5uLFN0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IEFnLHRoaXMuc2FzanNDb25m'@;
put 'aWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0duLnZpZXdlci5j'@;
put 'dXJyZW50U2VsZWN0aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoR24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vu'@;
put 'c2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0'@;
put 'RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSxfPXBhcnNlSW50KGQucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKXx8MDt5aWVsZCBk'@;
put 'LnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLF8pLnRoZW4oVD0+e1Quc2FzcGFyYW1zfHxULnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9VC52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1ULiR2aWV3ZGF0YSxkLmRzbWV0YT1ULmRzbWV0YSxkLnNl'@;
put 'dERTTm90ZSgpLGQubnVtYmVyT2ZSb3dzPVQuc2FzcGFyYW1zWzBdLk5PQlMsZC5xdWVyeVRleHQ9VC5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsZC5oZWFkZXJQa3M9VC5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/ZC5ub0Rh'@;
put 'dGE9ITA6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExLGQuc2V0dXBIb3QoKSkpOmQuc2VhcmNoTG9hZGluZz0hMX0pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCl9KSxkLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0RhdGEodGhp'@;
put 'cy51cmxGaWx0ZXJQa3x8MCl9cmVsb2FkTGliSW5mbygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgpe2EubGli'@;
put 'aW5mbz1oLmxpYmluZm8sR24udmlld2VyLmxpYmluZm89YS5saWJpbmZvO2NvbnN0IGY9YS5saWJyYXJpZXMuZmluZChfPT5fLkxJQlJBUllSRUY9PT1hLmxpYik7ZiYmKGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX19KCksZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxudWxsPT09YS5saWJpbmZvJiYoYS5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNlKCkuaW5k'@;
put 'ZXhPZihhLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEoKXtsZXQgYT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgVyxmPSImdHlwZT0iK3Ro'@;
put 'aXMuZG93bmxvYWRGb3JtYXQsXz0iJnRhYmxlPSIrdGhpcy50YWJsZVRpdGxlLFQ9IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO1c9dHlwZW9mIHRoaXMucm91dGUuc25hcHNo'@;
put 'b3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrXytUKyImZmlsdGVyPSIrVyksdGhpcy5vcGVuRG93'@;
put 'bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgYT10aGlzLmxpYixkPXRoaXMudGFibGUsaD10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLF89dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgVD10aGlzLnNhc1Nl'@;
put 'cnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGYrVCsiLz9fcHJvZ3JhbT0iK18rIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGlicmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29u'@;
put 'dGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwo'@;
put 'Ii9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0RXhpc3RzKCl7bGV0IGE9e307YT1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFbaF0uaW5jbHVkZXMo'@;
put 'ZCl9Z29Ub0xpbmVhZ2UoKXtsZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVvZiB0aGlzLnJvdXRl'@;
put 'LnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNl'@;
put 'LmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgXz1gJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5cGU9V0VC'@;
put 'JHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PV8ucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJl'@;
put 'YSIpO2Euc3R5bGUucG9zaXRpb249ImZpeGVkIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxlY3QoKSxkb2N1bWVu'@;
put 'dC5leGVjQ29tbWFuZCgiY29weSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tFeHBhbmQo'@;
put 'YSl7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllSRUYhPT1kLkxJQlJBUllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhl'@;
put 'bHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxk'@;
put 'KX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLnRhYmxlcz9kLmV4cGFuZGVkPSEhaHx8IWQuZXhw'@;
put 'YW5kZWQ6eWllbGQgZi5zZWxlY3RUYWJsZShhLCExLGQpLGQuZXhwYW5kZWQpe2YuY2RmLmRldGVjdENoYW5nZXMoKTtsZXQgXz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2VhcmNoXyR7ZC5MSUJSQVJZUkVGfWApO2YubG9nZ2VyU2VydmljZS5sb2coIltsaWJUcmVlU2VhcmNoSW5wdXRd'@;
put 'IixfKSxfJiZfLmZvY3VzKCksZCYmZC5saWJpbmZvJiYoZi5saWJpbmZvPWQubGliaW5mbyksZi5saWImJmYudGFibGUmJiFoP2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhl'@;
put 'bigoKT0+e2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2YubGliXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KTpmLmxpYiYmIWYudGFibGUmJmYubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrZi5saWIpfWYuY29sbGFwc2VMaWJyYXJ5SXRl'@;
put 'bXMoZi5saWJyYXJpZXMsZCl9KSgpfW9uVGFibGVDbGljayhhLGQpe3RoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnRhYmxlPWEsdGhpcy5zZWxlY3RMaWJUYWJsZShhKSx0aGlzLnZpZXdEYXRhKDApfXNlbGVjdFRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbioo'@;
put 'KXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/R24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzLGYu'@;
put 'bGliaW5mbz1Hbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihfPT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgVD1fLm1wdGFibGVzLm1hcChmdW5jdGlvbihXKXtyZXR1cm4g'@;
put 'Vy5NRU1OQU1FfSk7Zi5saWJpbmZvPV8ubGliaW5mb3x8W10sZi50YWJsZXM9VCxoJiYoaC50YWJsZXM9VCxoLmxpYmluZm89Zi5saWJpbmZvKSxHbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEduLnZpZXdlci5saWJyYXJ5PWYubGliLEduLnZpZXdlci50YWJsZXM9Zi50YWJsZXMs'@;
put 'R24udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEduLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaChfPT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKF8pLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNh'@;
put 'YmxlPSEwLEduLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNh'@;
put 'YmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsR24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0'@;
put 'ZXIoKXtHbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEduLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsR24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxHbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sR24udmlld2VyLmZpbHRlci52'@;
put 'YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJh'@;
put 'cnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVy'@;
put 'KHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaDtpZihkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4idSImJnR5'@;
put 'cGVvZiBkLnRhYmxlPiJ1Iil7bGV0IFQ9W107aWYoVD1kLmxpYkRhdGFzZXQuc3BsaXQoIi4iKSxHbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihXPT57ZC5saWJyYXJpZXM9'@;
put 'Vy5zYXNsaWJzfSkuY2F0Y2goVz0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihXKX0pLGQubGliPVRbMF0sR24udmlld2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9R24udmlld2VyLnRhYmxlcztlbHNle2xldCBXPWQubGlicmFyaWVzLmZpbmQoaWU9PmllLkxJQlJBUllSRUYudG9Mb3dlckNhc2Uo'@;
put 'KT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oaWU9PntkLnRhYmxlcz1pZS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24ocGUpe3JldHVybiBwZS5NRU1OQU1FfSksVy50YWJsZXM9ZC50YWJsZXMsR24udmlld2VyLmxp'@;
put 'YnJhcmllcz1kLmxpYnJhcmllcyxHbi52aWV3ZXIudGFibGVzPWQudGFibGVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwfSkuY2F0Y2goaWU9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpfSl9ZC50YWJsZT1UWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGliVGFiPWh9'@;
put 'ZWxzZSBHbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihUPT57ZC5saWJyYXJpZXM9VC5zYXNsaWJzfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKX0pLHR5'@;
put 'cGVvZiBkLnRhYmxlPCJ1IiYmKEduLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVzPUduLnZpZXdlci50YWJsZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihUPT57ZC50YWJsZXM9VC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcuTUVN'@;
put 'TkFNRX0pfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKSxkLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRsZT1oLGQu'@;
put 'bGliVGFiPWgpO2Qucm91dGVyLnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoaCxhKS50aGVuKFQ9PntpZihULnF1ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Hbi5yb290UGFyYW0mJjA9PT1Hbi52aWV3ZXIuZmlsdGVyLmNsYXVz'@;
put 'ZXMubGVuZ3RoJiYoR24udmlld2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFQucXVlcnkpLEduLnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJD'@;
put 'bGF1c2UoInZpZXdlciIsVC5jb2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRlckNvbHM9VC5jb2xzLFV6KGQuZmlsdGVyQ29scyxbXSxULiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9VC5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1ULnNhc3BhcmFtc1swXS5QS19GSUVMRFMu'@;
put 'c3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCBFZT1ULnNhc3BhcmFtc1swXS5UQUJMRVVSSTtFZSYmRWUubGVuZ3RoPjAmJihkLnRhYmxldXJpPUVlKX1kLmhvdFRhYmxlLmRhdGE9VC52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1ULiR2aWV3ZGF0YSxk'@;
put 'LmRzbWV0YT1ULmRzbWV0YSxkLnNldERTTm90ZSgpLGQucXVlcnlUZXh0PVQuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhUO2xldCBXPVtdLGllPVtdO2ZvcihsZXQgRWUgaW4gVC52aWV3ZGF0YVswXSlFZSYmaWUucHVzaChFZSk7Zm9yKGxldCBFZT0wO0VlPGllLmxlbmd0aDtFZSsrKVcucHVz'@;
put 'aCh7ZGF0YTppZVtFZV19KTtkLmhvdFRhYmxlLmNvbEhlYWRlcnM9aWUsZC5ob3RUYWJsZS5jb2x1bW5zPVcsZC5ob3RUYWJsZS5jZWxscz1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19LGQudGFibGVGbGFnPSExO2xldCB3ZT1bXTt3ZT1oLnNwbGl0KCIuIiksZC5saWI9d2VbMF0s'@;
put 'ZC50YWJsZT13ZVsxXSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD8oZC5ub0RhdGE9ITAsZC50YWJsZUZsYWc9ITApOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSksZC5ub0RhdGFSZXFFcnI9ITF9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpLGQuYWJvcnRBY3Rp'@;
put 'dmU9ITAsZC5ub0RhdGFSZXFFcnI9ITB9KSksZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZoJiZkLnJvdXRlci5uYXZpZ2F0ZSgwIT09YT9bIi92aWV3L2RhdGEvIitoKyIvIithXTpbIi92aWV3L2RhdGEvIitoXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7bGV0'@;
put 'IGY9ZC50YWJsZSxfPWQubGlicmFyaWVzLmZpbmQoVD0+VC5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTtfPyhHbi52aWV3ZXIubGlicmFyaWVzLmxlbmd0aD4wJiYoZC5saWJyYXJpZXM9R24udmlld2VyLmxpYnJhcmllcyxkLmxpYnJhcmllc1NlYXJj'@;
put 'aD1Hbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoKSxkLmxpYnJhcnlPbkNsaWNrKGQubGliLF8sITApKTpkLmxpYmluZm89W10sZC50YWJsZT1mfHxkLnRhYmxlLGQubGlicmFyaWVzJiZkLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhkLmxpYnJhcmllcyksZC5yb3V0ZXIudXJsLmlu'@;
put 'Y2x1ZGVzKCIvZGF0YSIpJiZkLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxkLmxvYWRpbmdUYWJsZVZpZXc9ITEsIWQubm9EYXRhJiYhZC5ub0RhdGFSZXFFcnImJmgmJmQuc2V0dXBIb3QoKSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8c2V0VGltZW91dCgoKT0+e2xldCBUPWRv'@;
put 'Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO1QmJihULmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVz0+e3NldFRpbWVvdXQoKCk9PntsZXQgaWU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtpZSYmaWUuY2xpY2so'@;
put 'KX0sMTAwKX0pLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSEwKX0sMmUzKX0pKCl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1'@;
put 'ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlzLnRhYmxlLHRoaXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBh'@;
put 'Lm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Hbi5yb290UGFyYW0mJihHbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sR24udmlld2VyLmZp'@;
put 'bHRlci5xdWVyeT1bXSxHbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgXz0wO188Zi5sZW5ndGg7XysrKXtjb25zdCBUPWZb'@;
put 'X10uZWxlbWVudHM7ZD1ULmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gbnVsbD09PVcudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKFQpfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgZj17Z3JvdXBMb2dp'@;
put 'YzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKFQ9Pntjb25zdCBXPXtmaWx0ZXJDbGF1c2VzOltdfTtULmVsZW1lbnRzLmZvckVhY2goaWU9PntXLmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENs'@;
put 'b25lKGllKSl9KSxXLmNsYXVzZUxvZ2ljPVQuY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFcpKX0pO2NvbnN0IF89YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2Vydmlj'@;
put 'ZS5zYXZlUXVlcnkoYS5saWJkcyxfKS50aGVuKFQ9PnthLnF1ZXJ5VGV4dD1ULnJlc3VsdFswXS5GSUxURVJfVEVYVDtsZXQgVz1ULnJlc3VsdFswXS5GSUxURVJfUks7YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkcysiLyIrV10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6'@;
put 'InByZXNlcnZlIn0pLGEudmlld0RhdGEoVyksYS5maWx0ZXI9ITF9KS5jYXRjaChUPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksYS5zdWJtaXRMb2FkaW5nPSExfX0pKCl9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZXREU05vdGUoKXtj'@;
put 'b25zdCBhPXRoaXMuZHNtZXRhLmZpbmQoZj0+Ik5PVEVTIj09PWYuTkFNRSksZD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9MT05HREVTQyI9PT1mLk5BTUUpLGg9dGhpcy5kc21ldGEuZmluZChmPT4iRERfU0hPUlRERVNDIj09PWYuTkFNRSk7dGhpcy5kc05vdGU9YSYmYS5WQUxVRT9hLlZB'@;
put 'TFVFOmQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6IiJ9c2V0dXBIb3QoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubG9hZGluZ1RhYmxlVmlldyYmdGhpcy5saWJEYXRhc2V0JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5j'@;
put 'ZSgiaG90SW5zdGFuY2UiKSx0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT41MDA/NTAwOmF9LGFmdGVyR2V0Q29sSGVhZGVyOihh'@;
put 'LGQpPT57Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoYSk7aCYmdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihoKT4tMSYmZC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSl9LDFlMyl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1'@;
put 'cm4gZmkoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW18fDAsYS51cmxGaWx0ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgaD1hLnJvdXRlLnNuYXBzaG90'@;
put 'LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWgsaC5pbmNsdWRlcygiLiIpfHwoYS5saWI9aCkseWllbGQgYS52aWV3RGF0YShhLnVybEZpbHRlclBrKSxhLm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0h'@;
put 'MX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsR24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUduLnZpZXdl'@;
put 'ci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Hbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5s'@;
put 'aWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxHbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFy'@;
put 'aWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5n'@;
put 'QWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuaG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGEudGFibGVGbGFnPSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e2Eud2hlcmVTdHJpbmc9ZC5zdHJpbmcs'@;
put 'YS5jbGF1c2VzPWQub2JqLGEubGliZHM9ZC5saWJkc30pLHR5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiP2EubG9hZFdpdGhQYXJhbWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQob2EpLHR0KERzKSx0dChHbCksdHQodmwpLHR0KHcwKSx0dChUYyksdHQoSmQpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZh'@;
put 'JiZSbyhDbnQsNSksMiZhKXtsZXQgaDthaShoPWxpKCkpJiYoZC5xdWVyeUZpbHRlckNvbXBMaXN0PWgpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjk1LHZhcnM6MjksY29uc3RzOltbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1h'@;
put 'dXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1o'@;
put 'aWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2Vu'@;
put 'dGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZh'@;
put 'bHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFSS0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIs'@;
put 'MywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImlkIiwiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29s'@;
put 'LXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91'@;
put 'cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid29yZC1icmVhay1hbGwiXSxbInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlwZSIsInRleHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLCJ3LTEwMCIsMywidmFsdWUiLCJmb2N1cyJdLFsiY2xp'@;
put 'Q29tbWFuZElucHV0IiwiIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJuZ3hDbGlwYm9hcmQiLCJjbGljayJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xy'@;
put 'TW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsi'@;
put 'dHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu'@;
put 'LW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMs'@;
put 'Im9wZW4iLCJkc21ldGEiLCJvcGVuQ2hhbmdlIl0sWzMsInZpZXdib3hNb2RhbCIsInZpZXdib3hNb2RhbENoYW5nZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0s'@;
put 'WyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lm'@;
put 'Il0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5n'@;
put 'SWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJu'@;
put 'YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsImlkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMs'@;
put 'ImRjLWxvY2tlZC1jb250cm9sIiwidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xp'@;
put 'Y2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwi'@;
put 'bGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxb'@;
put 'MSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0s'@;
put 'WyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNs'@;
put 'ci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIs'@;
put 'ImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0s'@;
put 'WzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJu'@;
put 'YW1lIiwic2VhcmNoLWlucHV0IiwzLCJ0eXBlIiwia2V5dXAuZW50ZXIiXSxbInNlYXJjaEVsIiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xy'@;
put 'Q2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWzEsInZpZXdlclRpdGxlIiwiY2xyLWZsZXgtY29sdW1u'@;
put 'IiwiZC1mbGV4IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdo'@;
put 'bGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG10LTUgbXItNSIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXpl'@;
put 'IiwibGciLDQsImNscklmT3BlbiJdLFsxLCJvcHRpb25zLWNvbCIsImNsci1jb2wtbWQiXSxbImNsYXNzIiwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWyJz'@;
put 'aGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyIsIm10LTUiLCJtci01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNp'@;
put 'emUiLCJsZyJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwzLCJjbGljayJdLFsxLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNt'@;
put 'IiwiYnRuLW91dGxpbmUiLCJmaWx0ZXJTaWRlIl0sWyJzaGFwZSIsImNvZyIsInNpemUiLCIxNSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93bkl0'@;
put 'ZW0iLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xp'@;
put 'Y2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiZG93bmxvYWQt'@;
put 'Y2xvdWQiXSxbInNoYXBlIiwicGVuY2lsIl0sWyJzaGFwZSIsInN3aXRjaCJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxs'@;
put 'Il0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImJvcmRlci1ib3R0b20tZGl2aWRlciIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIl0sWzEsInZpZXdl'@;
put 'clRpdGxlIiwibXQtMTciXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8gcG9pbnRlci1ldmVudHMtbm9uZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsaWJpbmZvIG0tMCBjbHItcm93Iiw0'@;
put 'LCJuZ0lmIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8iLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwibGliaW5mbyIsIm0tMCIsImNsci1yb3ciXSxbImNsYXNzIiwi'@;
put 'dGV4dC1jZW50ZXIgbS0wIHctMTAwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibS0wIiwidy0xMDAiXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsIm0tMCIsMywiY2xpY2siXSxbMSwibS0wIl0sWzEsIm0tMCIsImZvbnQtYm9sZCJdLFsxLCJjYXJkLWJsb2Nr'@;
put 'Iiwibm9EYXRhIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIs'@;
put 'InN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsIm1vZGlm'@;
put 'eUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQp'@;
put 'e2lmKDEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSx4dCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5sb2FkTW9yZUxpYnJhcmllcygpfSksSmUoMSxTbnQsMiwwLCJkaXYiLDEpLG1lKDIsImNsci10cmVlIiksSmUoMyxFbnQsNiwzLCJjbHItdHJlZS1ub2RlIiwy'@;
put 'KSxKZSg0LE5udCwyLDEsIm5nLWNvbnRhaW5lciIsMykseWUoKSxKZSg1LFZudCwzLDAsImRpdiIsNCkseWUoKSxtZSg2LCJkaXYiLDUpLEplKDcsQm50LDE0LDAsImRpdiIsNiksSmUoOCxqbnQsMSwwLCJkaXYiLDcpLG1lKDksImNsci1tb2RhbCIsOCkseHQoImNsck1vZGFsT3BlbkNoYW5n'@;
put 'ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3BlbkRvd25sb2FkPWZ9KSxtZSgxMCwiaDMiLDkpLE5lKDExLCJEb3dubG9hZCIpLHllKCksbWUoMTIsImRpdiIsMTApKDEzLCJkaXYiLDExKSgxNCwiY2xyLXNlbGVjdC1jb250YWluZXIiLDEyKSgxNSwibGFiZWwiKSxOZSgxNiwiUGxlYXNlIGNo'@;
put 'b29zZSBkb3dubG9hZCBmb3JtYXQiKSx5ZSgpLG1lKDE3LCJzZWxlY3QiLDEzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZG93bmxvYWRGb3JtYXQ9Zn0pLG1lKDE4LCJvcHRpb24iLDE0KSxOZSgxOSwiQ1NWIikseWUoKSxtZSgyMCwib3B0aW9uIiwxNSksTmUo'@;
put 'MjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSx5ZSgpLG1lKDIyLCJvcHRpb24iLDE2KSxOZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLHllKCksbWUoMjQsIm9wdGlvbiIsMTcpLE5lKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLHllKCksbWUoMjYsIm9wdGlvbiIsMTgpLE5lKDI3LCJE'@;
put 'REwgKFRTUUwgRmxhdm91cikiKSx5ZSgpLG1lKDI4LCJvcHRpb24iLDE5KSxOZSgyOSwiRXhjZWwgKC54bHN4KSIpLHllKCksbWUoMzAsIm9wdGlvbiIsMjApLE5lKDMxLCJNYXJrZG93biAoLm1kKSIpLHllKCkoKSgpKCkoKSxtZSgzMiwiZGl2IiwyMSkoMzMsImJ1dHRvbiIsMjIpLHh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vcGVuRG93bmxvYWQ9ITF9KSxOZSgzNCwiIENhbmNlbCAiKSx5ZSgpLG1lKDM1LCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZG93bmxvYWRGb3JtYXQuaW5jbHVkZXMoIkRETCIpP2QuZG93bmxvYWREREwoKTpk'@;
put 'LmRvd25sb2FkRGF0YSgpfSksTmUoMzYsIiBPayAiKSx5ZSgpKCkoKSxtZSgzNywiY2xyLW1vZGFsIiw4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC53ZWJRdWVyeT1mfSksbWUoMzgsImgzIiw5KSxOZSgzOSwiIFdlYiBRdWVyeSBVUkwgIikseWUoKSxt'@;
put 'ZSg0MCwiZGl2IiwyNCkoNDEsImRpdiIsMjUpKDQyLCJkaXYiLDI2KSg0MywiZGl2IiwyNykoNDQsImRpdiIsMjgpKDQ1LCJzcGFuIiksTmUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IikseWUoKSxtZSg0NywiZGl2IiwyOSkoNDgsImRpdiIs'@;
put 'MzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC53ZWJRdWVyeVRhYj0hMCxkLnNob3dXZWJRdWVyeSgpfSkscXQoNDksImlucHV0IiwzMSksbWUoNTAsImxhYmVsIiksTmUoNTEsIlRBQiIpLHllKCkoKSxtZSg1MiwiZGl2IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBkLndlYlF1ZXJ5VGFiPSExLGQuc2hvd1dlYlF1ZXJ5KCl9KSxxdCg1MywiaW5wdXQiLDMxKSxtZSg1NCwibGFiZWwiKSxOZSg1NSwiQ1NWIikseWUoKSgpKCkoKSxtZSg1NiwiZGl2IiwzMikoNTcsInRleHRhcmVhIiwzMywzNCkseHQoImZvY3VzIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v'@;
put 'bkNsaUNvbW1hbmRGb2N1cyhmKX0pLE5lKDU5LCIgICAgICAgICAgICAgICIpLHllKCkoKSxtZSg2MCwiZGl2IiwzNSkoNjEsImJ1dHRvbiIsMzYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb3B5VG9DbGlwKCl9KSxOZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLHllKCko'@;
put 'KSgpKCkoKSgpLG1lKDYzLCJkaXYiLDIxKSg2NCwiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLndlYlF1ZXJ5PSExfSksTmUoNjUsIiBjbG9zZSAiKSx5ZSgpKCkoKSxtZSg2NiwiY2xyLW1vZGFsIiwzNykseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rp'@;
put 'b24oZil7cmV0dXJuIGQuZmlsdGVyPWZ9KSxtZSg2NywiaDMiLDkpLE5lKDY4LCIgRmlsdGVyIGZvciB0YWJsZToiKSxtZSg2OSwic3BhbiIpLE5lKDcwKSx5ZSgpKCksbWUoNzEsImRpdiIsMTApLEplKDcyLHpudCwyLDAsImFwcC1xdWVyeSIsMzgpLHllKCksbWUoNzMsImRpdiIsMjEpKDc0'@;
put 'LCJidXR0b24iLDM5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzZXRGaWx0ZXIoKX0pLE5lKDc1LCIgcmVzZXQgZmlsdGVyICIpLHllKCksbWUoNzYsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWx0ZXI9ITEsZC5yZW1vdmVRdWVyeSgp'@;
put 'fSksTmUoNzcsIiBDYW5jZWwgIikseWUoKSxtZSg3OCwiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbmRDbGF1c2UoKX0pLE5lKDc5LCIgT2sgIikseWUoKSgpKCksbWUoODAsImNsci1tb2RhbCIsNDIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKGYpe3JldHVybiBkLnF1ZXJ5RXJyPWZ9KSxtZSg4MSwiaDMiLDQzKSxOZSg4MiwiRXJyb3IiKSx5ZSgpLG1lKDgzLCJkaXYiLDEwKSg4NCwicCIpLE5lKDg1KSx5ZSgpKCksbWUoODYsImRpdiIsMjEpKDg3LCJidXR0b24iLDQ0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'cXVlcnlFcnI9ITF9KSxOZSg4OCwiIENhbmNlbCAiKSx5ZSgpLG1lKDg5LCJidXR0b24iLDQ1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucXVlcnlFcnI9ITF9KSxOZSg5MCwiIE9rICIpLHllKCkoKSgpLEplKDkxLFVudCw2LDAsImRpdiIsNDYpLEplKDkyLHhydCw4LDYsImRp'@;
put 'diIsNDcpLHllKCksbWUoOTMsImFwcC1kYXRhc2V0LWluZm8iLDQ4KSx4dCgib3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGF0YXNldEluZm89Zn0pLHllKCksbWUoOTQsImFwcC12aWV3Ym94ZXMiLDQ5KSx4dCgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1'@;
put 'cm4gZC52aWV3Ym94T3Blbj1mfSkseWUoKSksMiZhKXtjb25zdCBoPSRpKDU4KTtDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5saWJyYXJpZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcmllcyksQ2UoMSksUmUoIm5nSWYiLGQubGli'@;
put 'cmFyaWVzUGFnaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5udWxsVmFyaWFibGVzKSxDZSgxKSxSZSgibmdJZiIsZC5udWxsVmFyaWFibGVzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLm9wZW5Eb3dubG9hZCkoImNsck1vZGFsU2l6ZSIsIm1kIiksQ2UoOCksUmUoIm5nTW9kZWwiLGQuZG93'@;
put 'bmxvYWRGb3JtYXQpLENlKDE4KSxSZSgiaWQiLGQudGFibGVUaXRsZSksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC53ZWJRdWVyeSkoImNsck1vZGFsU2l6ZSIsImxnIiksQ2UoMTIpLFJlKCJjaGVja2VkIixkLndlYlF1ZXJ5VGFiKSxDZSg0KSxSZSgiY2hlY2tlZCIsIWQud2ViUXVlcnlU'@;
put 'YWIpLENlKDQpLEVjKCJ2YWx1ZSIsZC53ZWJRdWVyeVRleHQpLENlKDQpLFJlKCJuZ3hDbGlwYm9hcmQiLGgpLENlKDUpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZmlsdGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDQpLGdyKCIgIixkLmxpYlRhYiwi'@;
put 'ICIpLENlKDIpLFJlKCJuZ0lmIixkLmZpbHRlciksQ2UoNiksUmUoImNsckxvYWRpbmciLGQuc3VibWl0TG9hZGluZyksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5xdWVyeUVyciksQ2UoNSksb3IoZC5xdWVyeUVyck1lc3NhZ2UpLENlKDYpLFJlKCJuZ0lmIixkLmxvYWRpbmdUYWJsZVZp'@;
put 'ZXcpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkaW5nVGFibGVWaWV3KSxDZSgxKSxSZSgib3BlbiIsZC5kYXRhc2V0SW5mbykoImRzbWV0YSIsZC5kc21ldGEpLENlKDEpLFJlKCJ2aWV3Ym94TW9kYWwiLGQudmlld2JveE9wZW4pfX0sZGVwZW5kZW5jaWVzOltFc2UseHMsWmksbmQsdGgsX250'@;
put 'LENwLGwxLGMxLFdhLFMwLE0wLEJzLHdwLE9zLHIyLGRkLGcxLERwLGthLG91LHN1LFp1LGMyLGRoLFVzLEpKLEQwLEQ4LFQwLGYxLE44LEg4LE5mLGFnLGxnLEs4LGpiLFViLHpiLHUyLHh5LG4zLFRzZSxqRSx1VSxVNyxMc2Usd250XSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVh'@;
put 'c2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uc3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV17bWFyZ2luLXRvcDoxMHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4fS5maWx0ZXJTaWRlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjI2cHg7bWFyZ2luLWJvdHRvbToxOXB4fS5vcHRp'@;
put 'b25zLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH0udmlld2VyVGl0bGVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17'@;
put 'd2lkdGg6MTgwcHg7bWFyZ2luLXRvcDotMThweDtwYWRkaW5nOjB9LmRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh'@;
put 'eTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm5vRGF0YVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9LmZpbHRlckJ0bltfbmdjb250ZW50LSVD'@;
put 'T01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5idG5WaWV3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCFpbXBvcnRhbnR9LmNvbnRl'@;
put 'bnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZG93bmxvYWQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OnVuc2V0IWlt'@;
put 'cG9ydGFudH0ucmVmcmVzaC10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS5saWJpbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMjBweDtvdmVyZmxvdzphdXRvfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAg'@;
put 'IC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfS5uby10YWJsZS1zZWxlY3RlZC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlv'@;
put 'bjpjb2x1bW59LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDozNXZofS53ZWItcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLndlYi1xdWVyeS10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjEwMHB4O21heC1oZWlnaHQ6MTAwcHh9QG1lZGlhIHNj'@;
put 'cmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5maWx0ZXJCdG5bX25nY29udGVudC0lQ09NUCVdLCAuZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LnJvd1tfbmdjb250ZW50'@;
put 'LSVDT01QJV17bWFyZ2luLXJpZ2h0OjByZW07bWFyZ2luLWxlZnQ6MHJlbX19Il19KSxjfSkoKTtjb25zdCBFcnQ9W3twYXRoOiIiLGNvbXBvbmVudDpsdHQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25l'@;
put 'bnQ6SFR9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6SFR9LHtwYXRoOiJkYXRhLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6SFR9LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDpIVH0se3BhdGg6ImxpbmVhZ2UiLGNvbXBvbmVudDpGVH0se3BhdGg6ImxpbmVhZ2UvOnRhYmxl'@;
put 'aWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OkZUfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uIixjb21wb25lbnQ6RlR9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OkZUfSx7cGF0aDoidml5YS1hcGkt'@;
put 'ZXhwbG9yZXIiLGNvbXBvbmVudDpnbnR9LHtwYXRoOiJtZXRhZGF0YSIsY29tcG9uZW50OnNafSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50OnNafSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29tcG9uZW50OnNafSx7'@;
put 'cGF0aDoidXNlcm5hdiIsY29tcG9uZW50OmF0dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDpTbGV9LHtwYXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6U2xlfSx7cGF0aDoiZ3JvdXBzIixj'@;
put 'b21wb25lbnQ6dGFlfSx7cGF0aDoiZ3JvdXBzLzp1cmkiLGNvbXBvbmVudDp0YWV9LHtwYXRoOiJyb2xlcyIsY29tcG9uZW50OkNsZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDpDbGV9XX1dfV07bGV0IGtydD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltoYy5mb3JDaGlsZChFcnQpLGhjXX0pLGN9KSgpLEFydD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIc2Usb28sa3J0LGJudCxxbCxfdSxfNy5mb3JSb290KCksQjcsVjcsdHcscFUsQzJdfSksY30pKCk7Y29uc3QgRHJ0PWhjLmZvclJvb3QoW3twYXRoOiIiLHJlZGlyZWN0VG86ImhvbWUiLHBh'@;
put 'dGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixsb2FkQ2hpbGRyZW46KCk9PkFydH0se3BhdGg6InJldmlldyIsY29tcG9uZW50OmpHZSxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0b2FwcHJvdmUifSx7cGF0aDoiIixsb2FkQ2hpbGRyZW46KCk9'@;
put 'PkJHZX1dfSx7cGF0aDoibGljZW5zaW5nIixsb2FkQ2hpbGRyZW46KCk9PmFXZX0se3BhdGg6ImhvbWUiLGxvYWRDaGlsZHJlbjooKT0+ZlV9LHtwYXRoOiJlZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+X1llfSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+JEdlfSx7cGF0aDoic3lz'@;
put 'dGVtIixsb2FkQ2hpbGRyZW46KCk9PmEkZX0se3BhdGg6ImRlcGxveSIsbG9hZENoaWxkcmVuOigpPT5ERWV9LHtwYXRoOiIqKiIsY29tcG9uZW50Old4ZX1dLHt1c2VIYXNoOiEwfSk7bGV0IExydD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Yyxib290c3RyYXA6W0tTZV19KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOltVeCxiZCxnVV0saW1wb3J0czpbWXhlLGtHLHFsLEw2ZSxIaGUsRHJ0LFY3LF91LEI3LGZVLHR3LEMyLEd0dF19KSxjfSkoKTtSMWUoKS5ib290c3Ry'@;
put 'YXBNb2R1bGUoTHJ0KX0sNTYzMjE6KGF0LExlLEYpPT57dmFyIGFlPUYoMTcxNTYpLmRlZmF1bHQ7c2VsZixhdC5leHBvcnRzPSgoKT0+e3ZhciB4PXsyNjU2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGsp'@;
put 'e3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGVjb2RlVG9rZW49Ty5oYXNUb2tlbkV4cGlyZWQ9Ty5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPU8uaXNBY2Nlc3NUb2tlbkV4cGly'@;
put 'aW5nPXZvaWQgMDt2YXIgSz16KFIoNjI0NSkpO2Z1bmN0aW9uIEwoayxFKXtyZXR1cm4oMCxLLmRlZmF1bHQpKGspLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PUV9Ty5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdm9pZCAwPT09RSYmKEU9MzYwMCks'@;
put 'IWt8fEwoayxFKX0sTy5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uKGssRSl7cmV0dXJuIHZvaWQgMD09PUUmJihFPTMwKSwha3x8TChrLEUpfSxPLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbihrKXtyZXR1cm4ha3x8TChrLDApfSxPLmRlY29kZVRva2VuPWZ1bmN0aW9uKGspe3Zh'@;
put 'ciBFO3RyeXtFPSgwLEsuZGVmYXVsdCkoayl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRva2VuIHN1cHBsaWVkLiIpfXJldHVybiBFfX0sNjc5OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy'@;
put 'ZWF0ZT9mdW5jdGlvbihMLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTCxqLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pfTpmdW5jdGlvbihMLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxMW2pdPWtbRV19KSxLPXRo'@;
put 'aXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihMLGspe2Zvcih2YXIgRSBpbiBMKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssTCxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLEsoUigyNjU2KSxPKX0sMzI1OTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBSPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHope2Zvcih2YXIgSyxMPTEsaz1hcmd1bWVudHMubGVuZ3RoO0w8aztMKysp'@;
put 'Zm9yKHZhciBFIGluIEs9YXJndW1lbnRzW0xdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChLLEUpJiYoeltFXT1LW0VdKTtyZXR1cm4gen0sUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxPLnByZWZpeE1lc3NhZ2U9dm9pZCAwLE8ucHJlZml4TWVzc2FnZT1mdW5jdGlvbih6LEspe2lmKCJvYmplY3QiPT10eXBlb2YgeilpZih6Lmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpei5tZXNzYWdlPUsrei5tZXNzYWdlO2Vsc2V7aWYoIXouaGFzT3duUHJvcGVydHkoImJvZHkiKSly'@;
put 'ZXR1cm4gUihSKHt9LHopLHttZXNzYWdlOkt9KTtpZigib2JqZWN0Ij09dHlwZW9mIHouYm9keSYmKHoubWVzc2FnZT16LmJvZHkubWVzc2FnZT9LK3ouYm9keS5tZXNzYWdlOkspLCJzdHJpbmciPT10eXBlb2Ygei5ib2R5KXt2YXIgTD12b2lkIDA7dHJ5e0w9SlNPTi5wYXJzZSh6LmJvZHkp'@;
put 'fWNhdGNoe3JldHVybiB6Lm1lc3NhZ2U9Syx6fXJldHVybiBMLm1lc3NhZ2U9TC5tZXNzYWdlP0srTC5tZXNzYWdlOkssei5ib2R5PUwsen19cmV0dXJuInN0cmluZyI9PXR5cGVvZiB6JiYoej1LK3opLHp9fSw5Nzc4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYm'@;
put 'dGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihqPUUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEwsayxFLGope3Zv'@;
put 'aWQgMD09PWomJihqPUUpLExbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEwsayl7Zm9yKHZhciBFIGluIEwpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxMLEUpfTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDMyNTkpLE8pLEsoUigxMDY0KSxPKX0sMTA2NDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKFYsQil7cmV0dXJuKHo9T2JqZWN0LnNldFBy'@;
put 'b3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFksWCl7WS5fX3Byb3RvX189WH18fGZ1bmN0aW9uKFksWCl7Zm9yKHZhciBVIGluIFgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsVSkmJihZW1VdPVhbVV0pfSkoVixCKX0s'@;
put 'ZnVuY3Rpb24oVixCKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQiYmbnVsbCE9PUIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhCKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBZKCl7dGhpcy5jb25zdHJ1Y3Rvcj1W'@;
put 'fXooVixCKSxWLnByb3RvdHlwZT1udWxsPT09Qj9PYmplY3QuY3JlYXRlKEIpOihZLnByb3RvdHlwZT1CLnByb3RvdHlwZSxuZXcgWSl9KSxMPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihWLEIpe3ZhciBZPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlZbU3ltYm9sLml0ZXJhdG9y'@;
put 'XTtpZighWSlyZXR1cm4gVjt2YXIgWCxVLHE9WS5jYWxsKFYpLGVlPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1CfHxCLS0gPjApJiYhKFg9cS5uZXh0KCkpLmRvbmU7KWVlLnB1c2goWC52YWx1ZSl9Y2F0Y2godGUpe1U9e2Vycm9yOnRlfX1maW5hbGx5e3RyeXtYJiYhWC5kb25lJiYoWT1xLnJl'@;
put 'dHVybikmJlkuY2FsbChxKX1maW5hbGx5e2lmKFUpdGhyb3cgVS5lcnJvcn19cmV0dXJuIGVlfSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oVixCLFkpe2lmKFl8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgWCxVPTAscT1CLmxlbmd0aDtVPHE7VSsrKSFYJiZV'@;
put 'IGluIEJ8fChYfHwoWD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChCLDAsVSkpLFhbVV09QltVXSk7cmV0dXJuIFYuY29uY2F0KFh8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEIpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2Vy'@;
put 'dmVyVHlwZUVycm9yPXZvaWQgMDt2YXIgRT1SKDM5MDApLGo9ZnVuY3Rpb24oVil7ZnVuY3Rpb24gQihZKXt2b2lkIDA9PT1ZJiYoWT1bXSk7dmFyIFg9dGhpcyxVPShZPWsoW10sTChuZXcgU2V0KFkpKSwhMSkpLmxlbmd0aD9ZLmpvaW4oIiwgIikudHJpbSgpOltFLlNlcnZlclR5cGUuU2Fz'@;
put 'Vml5YSxFLlNlcnZlclR5cGUuU2FzOSxFLlNlcnZlclR5cGUuU2FzanNdLmpvaW4oIiwgIikudHJpbSgpO3JldHVybiBVPVUucmVwbGFjZSgvLFxzKFteLF0qKSQvLCIgYW5kICQxIiksKFg9Vi5jYWxsKHRoaXMsIkludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiIuY29uY2F0KDEh'@;
put 'PT1ZLmxlbmd0aD8icyI6IiIsIiAiKS5jb25jYXQoMSE9PVkubGVuZ3RoPyJhcmUiOiJpcyIsIiAiKS5jb25jYXQoVSkpfHx0aGlzKS5uYW1lPSJTZXJ2ZXJUeXBlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihYLEIucHJvdG90eXBlKSxYfXJldHVybiBLKEIsViksQn0oRXJyb3IpO08u'@;
put 'U2VydmVyVHlwZUVycm9yPWp9LDM5MDY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUo'@;
put 'cS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBV'@;
put 'KGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhy'@;
put 'b3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1'@;
put 'bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9x'@;
put 'LnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpy'@;
put 'ZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4w'@;
put 'JiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1l'@;
put 'ZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5'@;
put 'e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtoZSx1ZV0pfX19LEw9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFksWCl7dmFyIFU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmWVtTeW1ib2wuaXRl'@;
put 'cmF0b3JdO2lmKCFVKXJldHVybiBZO3ZhciBxLGVlLHRlPVUuY2FsbChZKSxvZT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09WHx8WC0tID4wKSYmIShxPXRlLm5leHQoKSkuZG9uZTspb2UucHVzaChxLnZhbHVlKX1jYXRjaChzZSl7ZWU9e2Vycm9yOnNlfX1maW5hbGx5e3RyeXtxJiYhcS5kb25l'@;
put 'JiYoVT10ZS5yZXR1cm4pJiZVLmNhbGwodGUpfWZpbmFsbHl7aWYoZWUpdGhyb3cgZWUuZXJyb3J9fXJldHVybiBvZX0saz10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKFksWCxVKXtpZihVfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHEsZWU9MCx0ZT1YLmxlbmd0'@;
put 'aDtlZTx0ZTtlZSsrKSFxJiZlZSBpbiBYfHwocXx8KHE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWCwwLGVlKSkscVtlZV09WFtlZV0pO3JldHVybiBZLmNvbmNhdChxfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChYKSl9LEU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1'@;
put 'bmN0aW9uKFkpe3JldHVybiBZJiZZLl9fZXNNb2R1bGU/WTp7ZGVmYXVsdDpZfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXBkYXRlQ3N2PU8uY3JlYXRlQ3N2PU8ucmVhZENzdj12b2lkIDA7dmFyIGo9UigxNTU5KSxWPUUoUig3NTY1KSk7'@;
put 'Ty5yZWFkQ3N2PWZ1bmN0aW9uKFkpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLGoucmVhZEZpbGUpKFkpXTtjYXNlIDE6cmV0dXJuWzIsWC5zZW50KCku'@;
put 'c3BsaXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLmxlbmd0aH0pLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gVS5zcGxpdCgiLCIpfSldfX0pfSl9LE8uY3JlYXRlQ3N2PWZ1bmN0aW9uKFksWCxVKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh'@;
put 'ciBxO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oZWUpe3N3aXRjaChlZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPSgwLFYuZGVmYXVsdCkoWCx7aGVhZGVyOjE9PT1YLmxlbmd0aCxjb2x1bW5zOlV9KSxbNCwoMCxqLmNyZWF0ZUZpbGUpKFkscSldO2Nhc2UgMTpyZXR1cm4gZWUuc2VudCgpLFsy'@;
put 'XX19KX0pfSxPLnVwZGF0ZUNzdj1mdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxCKFksWCxVLHEpXTtj'@;
put 'YXNlIDE6cmV0dXJuIGVlPXNlLnNlbnQoKSxxJiYodGU9MD09PWVlLmxlbmd0aD8xOmVlLmxlbmd0aCwob2U9VS5maW5kSW5kZXgoZnVuY3Rpb24oaGUpe3JldHVybiBoZT09PXF9KSk+LTE/WC5zcGxpY2Uob2UsMCx0ZSk6KFUuc3BsaWNlKDAsMCxxKSxYLnNwbGljZSgwLDAsdGUpKSksZWUu'@;
put 'cHVzaChYKSxbNCwoMCxPLmNyZWF0ZUNzdikoWSxlZSxVKV07Y2FzZSAyOnJldHVybiBzZS5zZW50KCksWzJdfX0pfSl9O3ZhciBCPWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlLG9lLHNlO3JldHVybiBLKHRoaXMs'@;
put 'ZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOmlmKFgubGVuZ3RoIT09VS5sZW5ndGgpe2lmKFgubGVuZ3RoPlUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2lmKCFxfHxY'@;
put 'Lmxlbmd0aCsxIT09VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZihxJiZVLmluY2x1ZGVzKHEpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUg'@;
put 'ZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO3JldHVybls0LCgwLE8ucmVhZENzdikoWSkuY2F0Y2goZnVuY3Rpb24odWUpe3JldHVybltdfSldO2Nhc2UgMTppZihlZT1oZS5zZW50KCksdGU9ZWVbMF0pe2lmKFUubGVuZ3RoPnRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJl'@;
put 'ciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihVLmxlbmd0aDx0ZS5sZW5ndGgpe2lmKCFxfHxVLmxlbmd0aCsxIT09dGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9mIHByb3ZpZGVkIGNvbHVtbnMg'@;
put 'YXJlIGxlc3MgdGhhbiBudW1iZXIgb2YgZXhpc3RpbmcgY29sdW1ucyIpO2lmKG9lPXRlLmZpbmRJbmRleChmdW5jdGlvbih1ZSl7cmV0dXJuIHVlPT09cX0pLHNlPWsoW10sTChVKSwhMSksIShvZT4tMSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNo'@;
put 'IGV4aXN0aW5nIGNvbHVtbnMiKTtpZihzZS5zcGxpY2Uob2UsMCxxKSxKU09OLnN0cmluZ2lmeShVKSE9PUpTT04uc3RyaW5naWZ5KHNlKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpfWVsc2V7aWYoSlNPTi5zdHJp'@;
put 'bmdpZnkoVSkhPT1KU09OLnN0cmluZ2lmeSh0ZSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihxJiYhVS5pbmNsdWRlcyhxKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGlu'@;
put 'ZyBkYXRhIil9fXJldHVyblsyLGVlXX19KX0pfX0sMTU1OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihHLGIsRCxIKXt2b2lkIDA9PT1IJiYoSD1EKSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoRyxILHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiW0RdfX0pfTpmdW5jdGlvbihHLGIsRCxIKXt2b2lkIDA9PT1IJiYoSD1EKSxHW0hdPWJbRF19KSxLPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihHLGIp'@;
put 'e09iamVjdC5kZWZpbmVQcm9wZXJ0eShHLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpifSl9OmZ1bmN0aW9uKEcsYil7Ry5kZWZhdWx0PWJ9KSxMPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihHKXtpZihHJiZHLl9fZXNNb2R1bGUpcmV0dXJuIEc7dmFyIGI9e307'@;
put 'aWYobnVsbCE9Rylmb3IodmFyIEQgaW4gRykiZGVmYXVsdCIhPT1EJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRyxEKSYmeihiLEcsRCk7cmV0dXJuIEsoYixHKSxifSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihHLGIsRCxIKXtyZXR1cm4gbmV3KER8'@;
put 'fChEPVByb21pc2UpKShmdW5jdGlvbihOLGcpe2Z1bmN0aW9uIEMocCl7dHJ5e3YoSC5uZXh0KHApKX1jYXRjaCh3KXtnKHcpfX1mdW5jdGlvbiBTKHApe3RyeXt2KEgudGhyb3cocCkpfWNhdGNoKHcpe2codyl9fWZ1bmN0aW9uIHYocCl7dmFyIHc7cC5kb25lP04ocC52YWx1ZSk6KHc9cC52'@;
put 'YWx1ZSx3IGluc3RhbmNlb2YgRD93Om5ldyBEKGZ1bmN0aW9uKEope0oodyl9KSkudGhlbihDLFMpfXYoKEg9SC5hcHBseShHLGJ8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEcsYil7dmFyIEQsSCxOLGcsQz17bGFiZWw6MCxzZW50OmZ1bmN0'@;
put 'aW9uKCl7aWYoMSZOWzBdKXRocm93IE5bMV07cmV0dXJuIE5bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZz17bmV4dDpTKDApLHRocm93OlMoMSkscmV0dXJuOlMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihnW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpc30pLGc7ZnVuY3Rpb24gUyh2KXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGZ1bmN0aW9uKHcpe2lmKEQpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7QzspdHJ5e2lmKEQ9MSxIJiYoTj0yJndbMF0/SC5yZXR1cm46d1sw'@;
put 'XT9ILnRocm93fHwoKE49SC5yZXR1cm4pJiZOLmNhbGwoSCksMCk6SC5uZXh0KSYmIShOPU4uY2FsbChILHdbMV0pKS5kb25lKXJldHVybiBOO3N3aXRjaChIPTAsTiYmKHc9WzImd1swXSxOLnZhbHVlXSksd1swXSl7Y2FzZSAwOmNhc2UgMTpOPXc7YnJlYWs7Y2FzZSA0OnJldHVybiBDLmxh'@;
put 'YmVsKysse3ZhbHVlOndbMV0sZG9uZTohMX07Y2FzZSA1OkMubGFiZWwrKyxIPXdbMV0sdz1bMF07Y29udGludWU7Y2FzZSA3Onc9Qy5vcHMucG9wKCksQy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoTj0oTj1DLnRyeXMpLmxlbmd0aD4wJiZOW04ubGVuZ3RoLTFdKXx8NiE9'@;
put 'PXdbMF0mJjIhPT13WzBdKSl7Qz0wO2NvbnRpbnVlfWlmKDM9PT13WzBdJiYoIU58fHdbMV0+TlswXSYmd1sxXTxOWzNdKSl7Qy5sYWJlbD13WzFdO2JyZWFrfWlmKDY9PT13WzBdJiZDLmxhYmVsPE5bMV0pe0MubGFiZWw9TlsxXSxOPXc7YnJlYWt9aWYoTiYmQy5sYWJlbDxOWzJdKXtDLmxh'@;
put 'YmVsPU5bMl0sQy5vcHMucHVzaCh3KTticmVha31OWzJdJiZDLm9wcy5wb3AoKSxDLnRyeXMucG9wKCk7Y29udGludWV9dz1iLmNhbGwoRyxDKX1jYXRjaChKKXt3PVs2LEpdLEg9MH1maW5hbGx5e0Q9Tj0wfWlmKDUmd1swXSl0aHJvdyB3WzFdO3JldHVybnt2YWx1ZTp3WzBdP3dbMV06dm9p'@;
put 'ZCAwLGRvbmU6ITB9fShbdixwXSl9fX0saj10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oRyxiKXt2YXIgRD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZHW1N5bWJvbC5pdGVyYXRvcl07aWYoIUQpcmV0dXJuIEc7dmFyIEgsTixnPUQuY2FsbChHKSxDPVtdO3RyeXtmb3IoOyh2b2lk'@;
put 'IDA9PT1ifHxiLS0gPjApJiYhKEg9Zy5uZXh0KCkpLmRvbmU7KUMucHVzaChILnZhbHVlKX1jYXRjaChTKXtOPXtlcnJvcjpTfX1maW5hbGx5e3RyeXtIJiYhSC5kb25lJiYoRD1nLnJldHVybikmJkQuY2FsbChnKX1maW5hbGx5e2lmKE4pdGhyb3cgTi5lcnJvcn19cmV0dXJuIEN9LFY9dGhp'@;
put 'cyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihHLGIsRCl7aWYoRHx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBILE49MCxnPWIubGVuZ3RoO048ZztOKyspIUgmJk4gaW4gYnx8KEh8fChIPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGIsMCxOKSksSFtOXT1iW05dKTty'@;
put 'ZXR1cm4gRy5jb25jYXQoSHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYikpfSxCPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihHKXtyZXR1cm4gRyYmRy5fX2VzTW9kdWxlP0c6e2RlZmF1bHQ6R319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxPLmlzVGVzdEZpbGU9Ty50ZXN0RmlsZVJlZ0V4cD1PLmNyZWF0ZVJlYWRTdHJlYW09Ty5jcmVhdGVXcml0ZVN0cmVhbT1PLmdldFJlYWxQYXRoPU8uYmFzZTY0RW5jb2RlRmlsZT1PLmJhc2U2NEVuY29kZUltYWdlRmlsZT1PLnBhdGhTZXBFc2NhcGVkPU8uY29weT1P'@;
put 'Lm1vdmVGaWxlPU8uZ2V0UmVsYXRpdmVQYXRoPU8udW5pZnlGaWxlUGF0aD1PLmRlbGV0ZUZvbGRlcj1PLmRlbGV0ZUZpbGU9Ty5jcmVhdGVGaWxlPU8uY3JlYXRlRm9sZGVyPU8ubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1PLmxpc3RT'@;
put 'YXNGaWxlc0luRm9sZGVyPU8ubGlzdEluaUZpbGVzSW5Gb2xkZXI9Ty5saXN0RmlsZXNJbkZvbGRlcj1PLnJlYWRGaWxlQmluYXJ5PU8ucmVhZEZpbGU9Ty5pc0ZvbGRlcj1PLmZvbGRlckV4aXN0cz1PLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBZPUIoUig1Njc0KSksWD1CKFIoOTg0KSksVT1C'@;
put 'KFIoMjUyMCkpLHE9Uig2MjY2KSxlZT1MKFIoMjk3NSkpO2Z1bmN0aW9uIHRlKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhHLFkuZGVmYXVsdC5jb25z'@;
put 'dGFudHMuRl9PSykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9ZnVuY3Rpb24gb2UoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRl'@;
put 'ZmF1bHQucHJvbWlzZXMucmVhZEZpbGUoRyldfSl9KX1mdW5jdGlvbiBzZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKEcse3dpdGhGaWxlVHlwZXM6'@;
put 'ITB9KS50aGVuKGZ1bmN0aW9uKEQpe3JldHVybiBELmZpbHRlcihmdW5jdGlvbihIKXtyZXR1cm4hSC5pc0RpcmVjdG9yeSgpfSkubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWV9KX0pXX0pfSl9ZnVuY3Rpb24gaGUoRyxiLEQpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0hMCksdm9pZCAw'@;
put 'PT09RCYmKEQ9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKEcse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybiBr'@;
put 'KEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBDLFM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHYpe3N3aXRjaCh2LmxhYmVsKXtjYXNlIDA6cmV0dXJuIGImJmcuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmlzRGlyZWN0b3J5KCl9KS5sZW5ndGg/KEM9W10sWzQsKDAs'@;
put 'cS5hc3luY0ZvckVhY2gpKGcuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmlzRGlyZWN0b3J5KCl9KSxmdW5jdGlvbihwKXtyZXR1cm4gayhTLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdyxKLG5lO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZGUpe3N3aXRjaChkZS5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybiBELmluY2x1ZGVzKHc9cC5uYW1lKT9bMywyXTooSj1VLmRlZmF1bHQuam9pbihHLHcpLG5lPVtWKFtdLGooQyksITEpXSxbNCxoZShKLGIsRCldKTtjYXNlIDE6Qz1WLmFwcGx5KHZvaWQgMCxuZS5jb25jYXQoW2ouYXBwbHkodm9pZCAwLFtkZS5zZW50KCkubWFwKGZ1'@;
put 'bmN0aW9uKGZlKXtyZXR1cm4gVS5kZWZhdWx0LmpvaW4odyxmZSl9KV0pLCExXSkpLGRlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSldKTpbMywyXTtjYXNlIDE6cmV0dXJuIHYuc2VudCgpLFsyLFYoVihbXSxqKGcuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiFwLmlzRGlyZWN0'@;
put 'b3J5KCl9KS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAubmFtZX0pKSwhMSksaihDKSwhMSldO2Nhc2UgMjpyZXR1cm5bMixnLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5uYW1lfSldfX0pfSl9KV19KX0pfWZ1bmN0aW9uIHVlKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLm1rZGlyKEcse3JlY3Vyc2l2ZTohMH0pXX0pfSl9ZnVuY3Rpb24gY2UoRyxiLEQpe3ZvaWQgMD09PWImJihiPVUuZGVmYXVsdC5zZXApLHZvaWQgMD09PUQmJihEPSIvIik7dmFyIEg9'@;
put 'e3VuaXg6Ii8iLHdpbjoiXFwifSxOPU9iamVjdC5rZXlzKEgpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEhbQ109PT1ifSk7aWYoTil7dmFyIGc9SFtPYmplY3Qua2V5cyhIKS5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBDIT09Tn0pXTtyZXR1cm4gTj1IW05dLEcuc3BsaXQoZykuam9pbihO'@;
put 'KX1yZXR1cm4gRy5zcGxpdChEKS5qb2luKGIpfU8uZmlsZUV4aXN0cz1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5hY2Nlc3MoRyxZLmRlZmF1bHQu'@;
put 'Y29uc3RhbnRzLkZfT0spLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KV19KX0pfSxPLmZvbGRlckV4aXN0cz10ZSxPLmlzRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLmxzdGF0KEcpLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuaXNEaXJlY3RvcnkoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KV19KX0pfSxPLnJlYWRGaWxlPWZ1bmN0aW9uKEcsYil7cmV0dXJuIHZv'@;
put 'aWQgMD09PWImJihiPSJ1dGY4Iiksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShHLGIpXX0pfSl9LE8ucmVhZEZpbGVCaW5hcnk9b2UsTy5saXN0RmlsZXNJbkZvbGRl'@;
put 'cj1zZSxPLmxpc3RJbmlGaWxlc0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxzZShHKV07Y2FzZSAxOnJldHVyblsyLGIuc2Vu'@;
put 'dCgpLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gRC5lbmRzV2l0aCgiLmluaSIpfSldfX0pfSl9LE8ubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0hMSksdm9pZCAwPT09RCYmKEQ9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGhlKEcsYixEKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gZy5lbmRzV2l0aCgiLnNhcyIpfSldfX0pfSl9LE8ubGlzdFN1'@;
put 'YkZvbGRlcnNJbkZvbGRlcj1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKEcse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKGZ1bmN0aW9u'@;
put 'KEQpe3JldHVybiBELmZpbHRlcihmdW5jdGlvbihIKXtyZXR1cm4gSC5pc0RpcmVjdG9yeSgpfSkubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWV9KX0pXX0pfSl9LE8ubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWhlLE8uY3JlYXRlRm9sZGVyPXVlLE8uY3JlYXRlRmlsZT1m'@;
put 'dW5jdGlvbihHLGIsRCl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuKEc9Y2UoRykpLnNwbGl0KFUuZGVmYXVsdC5zZXApLmxlbmd0aD4xPygoSD1HLnNw'@;
put 'bGl0KFUuZGVmYXVsdC5zZXApKS5wb3AoKSxbNCx0ZShOPUguam9pbihVLmRlZmF1bHQuc2VwKSldKTpbMywzXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpP1szLDNdOls0LHVlKE4pXTtjYXNlIDI6Zy5zZW50KCksZy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMu'@;
put 'd3JpdGVGaWxlKEcsYixEKV19fSl9KX0sTy5kZWxldGVGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnJlbW92ZShHKV19KX0pfSxPLmRlbGV0ZUZvbGRlcj1m'@;
put 'dW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEQsSCl7KDAsWC5kZWZhdWx0KShHLHt9LGZ1bmN0aW9uKE4pe3JldHVybiBOP0goTik6RCgpfSl9KV19'@;
put 'KX0pfSxPLnVuaWZ5RmlsZVBhdGg9Y2UsTy5nZXRSZWxhdGl2ZVBhdGg9ZnVuY3Rpb24oRyxiKXt2YXIgRD1HLnNwbGl0KFUuZGVmYXVsdC5zZXApLEg9Yi5zcGxpdChVLmRlZmF1bHQuc2VwKSxOPVtdLGc9W107RC5mb3JFYWNoKGZ1bmN0aW9uKHAsdyl7dm9pZCAwIT09SFt3XSYmRFt3XT09'@;
put 'PUhbd10/Ti5wdXNoKHApOnAmJmcucHVzaChwKX0pO3ZhciBDPU4uam9pbihVLmRlZmF1bHQuc2VwKSxTPW5ldyBSZWdFeHAoIl4iLmNvbmNhdChVLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSkpLHY9bmV3IFJlZ0V4cCgiIi5jb25jYXQoVS5kZWZhdWx0LnNlcC5yZXBsYWNl'@;
put 'KC9cXC9nLCJcXFxcIiksIiQiKSk7cmV0dXJuKGcubGVuZ3RoPyIuLiIuY29uY2F0KFUuZGVmYXVsdC5zZXApLnJlcGVhdChnLmxlbmd0aCk6Ii4iLmNvbmNhdChVLmRlZmF1bHQuc2VwKSkrYi5yZXBsYWNlKEMsIiIpLnJlcGxhY2UoUywiIikucmVwbGFjZSh2LCIiKX0sTy5tb3ZlRmlsZT1m'@;
put 'dW5jdGlvbihHLGIpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShHLGIpXX0pfSl9LE8uY29weT1mdW5jdGlvbihHLGIpe3JldHVybiBrKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LmNvcHkoRyxiKV19KX0pfSxPLnBhdGhTZXBFc2NhcGVkPVUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLE8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPWZ1bmN0aW9u'@;
put 'KEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsb2UoRykudGhlbihmdW5jdGlvbihEKXt2YXIgSD1VLmRlZmF1bHQuZXh0bmFtZShHKS5zdWJzdHIoMSl8fCJwbmciO3JldHVybiJzdmciPT09SCYmKEg9'@;
put 'InN2Zyt4bWwiKSwiZGF0YTppbWFnZS8iK0grIjtiYXNlNjQsIitELnRvU3RyaW5nKCJiYXNlNjQiKX0pXX0pfSl9LE8uYmFzZTY0RW5jb2RlRmlsZT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShHLHtlbmNvZGluZzoiYmFzZTY0In0pXX0pfSl9LE8uZ2V0UmVhbFBhdGg9ZnVuY3Rpb24oRyl7cmV0dXJuIFkuZGVmYXVsdC5yZWFscGF0aFN5bmMoRyl9LE8uY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24oRyl7cmV0dXJuIGso'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGVlLmZpbGVFeGlzdHMoRyldO2Nhc2UgMTpyZXR1cm4gYi5zZW50KCk/WzIsWS5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKEcse2Zs'@;
put 'YWdzOiJhIn0pXTpbNCxlZS5jcmVhdGVGaWxlKEcsIiIpXTtjYXNlIDI6cmV0dXJuIGIuc2VudCgpLFsyLFkuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShHLHtmbGFnczoiYSJ9KV19fSl9KX0sTy5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uKEcpe3JldHVybiBrKHZvaWQgMCx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQuY3JlYXRlUmVhZFN0cmVhbShHKV19KX0pfSxPLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLE8uaXNUZXN0RmlsZT1mdW5jdGlvbihHKXtyZXR1cm4gTy50'@;
put 'ZXN0RmlsZVJlZ0V4cC50ZXN0KEcpfX0sNTYyNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihrKXtyZXR1cm4gayYmay5fX2VzTW9kdWxlP2s6e2RlZmF1bHQ6a319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShP'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEFic29sdXRlUGF0aD12b2lkIDA7dmFyIEs9eihSKDI1MjApKSxMPXooUig3NDM1KSk7Ty5nZXRBYnNvbHV0ZVBhdGg9ZnVuY3Rpb24oayxFKXtyZXR1cm4gSy5kZWZhdWx0LmlzQWJzb2x1dGUoayl8fC9efi8uZXhlYyhrKT9LLmRlZmF1'@;
put 'bHQubm9ybWFsaXplKGsucmVwbGFjZSgvXn4vLEwuZGVmYXVsdC5ob21lZGlyKCkpKTpLLmRlZmF1bHQuam9pbihFLGspfX0sMjk3NTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihF'@;
put 'LGosVixCKXt2b2lkIDA9PT1CJiYoQj1WKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSxCLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqW1ZdfX0pfTpmdW5jdGlvbihFLGosVixCKXt2b2lkIDA9PT1CJiYoQj1WKSxFW0JdPWpbVl19KSxLPXRoaXMmJnRoaXMuX19leHBv'@;
put 'cnRTdGFyfHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBFKSJkZWZhdWx0Ij09PVZ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpfHx6KGosRSxWKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucmVhZENzdj1P'@;
put 'LmNyZWF0ZUNzdj1PLnVwZGF0ZUNzdj1PLnRlc3RGaWxlUmVnRXhwPU8uaXNUZXN0RmlsZT1PLmdldFJlYWxQYXRoPU8uYmFzZTY0RW5jb2RlRmlsZT1PLmJhc2U2NEVuY29kZUltYWdlRmlsZT1PLmNvcHk9Ty5wYXRoU2VwRXNjYXBlZD1PLm1vdmVGaWxlPU8udW5pZnlGaWxlUGF0aD1PLmdl'@;
put 'dFJlbGF0aXZlUGF0aD1PLmRlbGV0ZUZvbGRlcj1PLmRlbGV0ZUZpbGU9Ty5jcmVhdGVXcml0ZVN0cmVhbT1PLmNyZWF0ZVJlYWRTdHJlYW09Ty5jcmVhdGVGb2xkZXI9Ty5jcmVhdGVGaWxlPU8ubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFN1YkZvbGRlcnNJbkZvbGRl'@;
put 'cj1PLmxpc3RTYXNGaWxlc0luRm9sZGVyPU8ubGlzdEluaUZpbGVzSW5Gb2xkZXI9Ty5saXN0RmlsZXNJbkZvbGRlcj1PLnJlYWRGaWxlQmluYXJ5PU8ucmVhZEZpbGU9Ty5pc0ZvbGRlcj1PLmZvbGRlckV4aXN0cz1PLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBMPVIoMTU1OSk7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KE8sImZpbGVFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuZm9sZGVy'@;
put 'RXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInJlYWRGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gTC5yZWFkRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0RmlsZXNJbkZvbGRlciIse2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5saXN0SW5pRmlsZXNJbkZvbGRlcn19KSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdFNhc0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0U3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVy'@;
put 'YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmxpc3RGaWxlc0Fu'@;
put 'ZFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlRm9sZGVyIix7ZW51bWVyYWJsZToh'@;
put 'MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5jcmVhdGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmNyZWF0ZVJlYWRTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KE8sImNyZWF0ZVdyaXRlU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuZGVsZXRl'@;
put 'RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldFJlbGF0aXZlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEwuZ2V0UmVsYXRpdmVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJtb3ZlRmls'@;
put 'ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5wYXRoU2VwRXNjYXBlZH19KSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiY29weSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5iYXNlNjRFbmNvZGVJ'@;
put 'bWFnZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldFJlYWxQYXRoIix7ZW51bWVyYWJsZToh'@;
put 'MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5nZXRSZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuaXNUZXN0RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidGVzdEZpbGVS'@;
put 'ZWdFeHAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLnRlc3RGaWxlUmVnRXhwfX0pO3ZhciBrPVIoMzkwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsudXBkYXRlQ3N2fX0p'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLmNyZWF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsucmVh'@;
put 'ZENzdn19KSxLKFIoNTYyNiksTyl9LDI3Nzc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5uZXdMaW5lPU8uY2FwaXRhbGl6ZUZpcnN0Q2hhcj1PLnNhbml0aXplU3BlY2lhbENoYXJzPU8ucGFkV2l0aE51'@;
put 'bWJlcj12b2lkIDA7dmFyIHo9Uig1MzA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHoucGFkV2l0aE51bWJlcn19KTt2YXIgSz1SKDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJzYW5p'@;
put 'dGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBL'@;
put 'LmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIEw9UigxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwubmV3TGluZX19KX0sNTMwNjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYWRXaXRoTnVtYmVyPXZvaWQgMCxPLnBhZFdpdGhOdW1iZXI9ZnVuY3Rpb24oUix6KXtyZXR1cm4gdm9pZCAwPT09eiYmKHo9MCksUj45P1I6IiIuY29uY2F0KHopLmNvbmNhdChSKX19LDE2Mjg6KE0sTyxSKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgej1SKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5ld0xpbmU9dm9pZCAwLE8ubmV3TGluZT1mdW5jdGlvbigpe3JldHVybiJ3aW4zMiI9PT16LnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifX0sOTI3NTooTSxPKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jYXBpdGFsaXplRmlyc3RDaGFyPU8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLE8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgv'@;
put 'W1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIil9LE8uY2FwaXRhbGl6ZUZpcnN0Q2hhcj1mdW5jdGlvbihSKXtyZXR1cm4gUi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStSLnNsaWNlKDEpfX0sNjQ2'@;
put 'NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihMKXtyZXR1cm4gTCYmTC5fX2VzTW9kdWxlP0w6e2RlZmF1bHQ6TH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxP'@;
put 'LmlzU3BlY2lhbE1pc3Npbmc9Ty5jaG9pY2VWYWxpZGF0b3I9Ty5jb25maXJtYXRpb25WYWxpZGF0b3I9Ty51cmxWYWxpZGF0b3I9dm9pZCAwO3ZhciBLPXooUig0ODEpKTtPLnVybFZhbGlkYXRvcj1mdW5jdGlvbihMLGspe3JldHVybiEhSy5kZWZhdWx0LmlzSHR0cFVyaShMKXx8ISFLLmRl'@;
put 'ZmF1bHQuaXNIdHRwc1VyaShMKXx8IiI9PT1MfHxrfSxPLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihMKXtyZXR1cm4hMD09PUx8fCExPT09TH0sTy5jaG9pY2VWYWxpZGF0b3I9ZnVuY3Rpb24oTCxrLEUpe3JldHVybiBMPjAmJkw8PWt8fEV9LE8uaXNTcGVjaWFsTWlzc2luZz1m'@;
put 'dW5jdGlvbihMKXtyZXR1cm4oInN0cmluZyIhPXR5cGVvZiBMfHwhTC5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEwpfX0sNzc1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxPLmdlbmVyYXRlVGltZXN0YW1wPU8udGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7dmFyIHo9UigxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVUaW1lc3RhbXA9Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDt2YXIgej1SKDI3NzcpO08udGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz1mdW5jdGlvbihL'@;
put 'KXt2b2lkIDA9PT1LJiYoSz1EYXRlLm5vdygpKTt2YXIgTD1uZXcgRGF0ZShLKTtyZXR1cm5bTC5nZXRGdWxsWWVhcigpLCgwLHoucGFkV2l0aE51bWJlcikoTC5nZXRNb250aCgpKzEpLCgwLHoucGFkV2l0aE51bWJlcikoTC5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCx6LnBhZFdp'@;
put 'dGhOdW1iZXIpKEwuZ2V0SG91cnMoKSksKDAsei5wYWRXaXRoTnVtYmVyKShMLmdldE1pbnV0ZXMoKSksKDAsei5wYWRXaXRoTnVtYmVyKShMLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKX0sTy5nZW5lcmF0ZVRpbWVzdGFtcD1mdW5jdGlvbihLLEwpe3ZvaWQgMD09PUsmJihLPSIiKTt2YXIg'@;
put 'az1uZXcgRGF0ZSxFPVtrLmdldFVUQ0Z1bGxZZWFyKCksay5nZXRVVENNb250aCgpKzEsay5nZXRVVENEYXRlKCksay5nZXRVVENIb3VycygpLGsuZ2V0VVRDTWludXRlcygpLGsuZ2V0VVRDU2Vjb25kcygpXTtyZXR1cm4gRT1FLm1hcChmdW5jdGlvbihqKXtyZXR1cm4oMCx6LnBhZFdpdGhO'@;
put 'dW1iZXIpKGopfSksTCYmSyYmTDxFLmxlbmd0aCYmTD49MCYmRS5zcGxpY2UoTCwwLEspLEUuam9pbihMPyIiOkspfX0sODIzOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db25maWdUeXBlcz12'@;
put 'b2lkIDAsKFI9Ty5Db25maWdUeXBlc3x8KE8uQ29uZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLFIuU2VydmljZT0ic2VydmljZUNvbmZpZyIsUi5Kb2I9ImpvYkNvbmZpZyIsUi5UZXN0PSJ0ZXN0Q29uZmlnIixSLkRvYz0iZG9jQ29uZmlnIixSLkRlcGxveT0iZGVwbG95Q29u'@;
put 'ZmlnIixSLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixSLkF1dGg9ImF1dGhDb25maWcifSwyNDI3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTg5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzY5MjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDY5Mzk6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTWVtYmVyVHlwZT12b2lkIDAsKFI9Ty5NZW1iZXJUeXBlfHwoTy5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2VydmljZSIsUi5maWxlPSJmaWxlIixSLmZvbGRlcj0iZm9sZGVyIn0sMzMyNzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDUxNjU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhp'@;
put 'cyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihqPUUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEwsayxFLGop'@;
put 'e3ZvaWQgMD09PWomJihqPUUpLExbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEwsayl7Zm9yKHZhciBFIGluIEwpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxMLEUpfTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDgyMzkpLE8pLEsoUigyNDI3KSxPKSxLKFIoMTg5KSxPKSxLKFIoMzY5MiksTyksSyhSKDY5MzkpLE8pLEsoUigzMzI3KSxPKSxLKFIoNTE2NSksTyksSyhSKDQwNjkpLE8pLEsoUig4OTMyKSxPKSxLKFIoNCksTyks'@;
put 'SyhSKDIwMTUpLE8pLEsoUig4NTE1KSxPKSxLKFIoNTMxMyksTyksSyhSKDg5NzkpLE8pfSw0MDY5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzTWFjcm9WYXJzPXZvaWQgMCxPLmlzTWFjcm9WYXJzPWZ1'@;
put 'bmN0aW9uKFIpe3JldHVybiBSJiYib2JqZWN0Ij09dHlwZW9mIFIubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShSLm1hY3JvVmFycyl9fSw4OTMyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDooTSxPKT0+'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoUj1PLlNBU0pzRmlsZVR5cGV8fChPLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixSLmpvYj0iSm9iIixS'@;
put 'LnRlc3Q9IlRlc3QiLFIuZmlsZT0iRmlsZSJ9LDIwMTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE1OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxPLlNlcnZlclR5cGU9dm9pZCAwLChSPU8uU2VydmVyVHlwZXx8KE8uU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLFIuU2FzOT0iU0FTOSIsUi5TYXNqcz0iU0FTSlMifSw1MzEzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODk3OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oail7Zm9yKHZhciBWLEI9MSxZPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg7QjxZO0IrKylmb3IodmFyIFggaW4gVj1hcmd1bWVudHNbQl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsWCkmJihqW1hdPVZbWF0pO3JldHVybiBqfSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9f'@;
put 'ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uVGFyZ2V0PXZvaWQgMDt2YXIgSz1SKDgyMzkpLEw9Uig4NTE1KSxrPVIoNjc4MSksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGooVixCKXt2YXIgWT10aGlzO3ZvaWQgMD09PUImJihCPXt9KSx0aGlzLl9zZXJ2ZXJUeXBlPUwuU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhLHRoaXMuZ2V0Q29uZmlnPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIHooeih7fSxZLl9jb25maWdbWF18fHt9KSxVW1hdKX07dHJ5e2lmKCFWKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUIs'@;
put 'dGhpcy5fbmFtZT0oMCxrLnZhbGlkYXRlVGFyZ2V0TmFtZSkoVi5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAsay52YWxpZGF0ZVNlcnZlclVybCkoVi5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAsay52YWxpZGF0ZVNlcnZlclR5cGUpKFYuc2VydmVyVHlwZSksdGhpcy5faHR0cHNB'@;
put 'Z2VudE9wdGlvbnM9KDAsay52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zKShWLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAsay52YWxpZGF0ZUFwcExvYykoVi5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLGsudmFsaWRhdGVDb250ZXh0TmFtZSkoVi5jb250ZXh0TmFt'@;
put 'ZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLGsudmFsaWRhdGVTZXJ2ZXJOYW1lKShWLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxrLnZhbGlkYXRlU3luY0ZvbGRlcikoVi5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5'@;
put 'TmFtZT0oMCxrLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKFYucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksVi5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAsay52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5Eb2MsVikpKSxWLmF1'@;
put 'dGhDb25maWcmJih0aGlzLl9hdXRoQ29uZmlnPSgwLGsudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkF1dGgsVikpKSxWLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAsay52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShWLmF1'@;
put 'dGhDb25maWdTYXM5KSksVi5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxkQ29uZmlnPSgwLGsudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5CdWlsZCxWKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLGsudmFsaWRhdGVEZXBsb3lD'@;
put 'b25maWcpKFYuZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuRGVwbG95LFYpOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksVi5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxrLnZhbGlkYXRlU2VydmljZUNvbmZp'@;
put 'ZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5TZXJ2aWNlLFYpKSksVi5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAsay52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5Kb2IsVikpKSxWLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVh'@;
put 'bUNvbmZpZz0oMCxrLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLlN0cmVhbSxWKSkpLFYudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAsay52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuVGVz'@;
put 'dCxWKSkpLFYubWFjcm9Gb2xkZXJzJiZWLm1hY3JvRm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9Vi5tYWNyb0ZvbGRlcnMpLFYucHJvZ3JhbUZvbGRlcnMmJlYucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9Vi5wcm9ncmFtRm9sZGVycyks'@;
put 'Vi5iaW5hcnlGb2xkZXJzJiZWLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1WLmJpbmFyeUZvbGRlcnMpLFYuc3luY0RpcmVjdG9yaWVzJiZWLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAsay52YWxpZGF0ZVN5bmNE'@;
put 'aXJlY3RvcmllcykoVi5zeW5jRGlyZWN0b3JpZXMpKX1jYXRjaChYKXt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGFyZ2V0OiAiLmNvbmNhdChYLm1lc3NhZ2UpKX19cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmVyVXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6'@;
put 'ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInNlcnZlclR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyVHlwZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImh0dHBz'@;
put 'QWdlbnRPcHRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYXBwTG9jIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'X2FwcExvY30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImRvY0NvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJhdXRoQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJhdXRoQ29uZmlnU2FzOSIs'@;
put 'e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnU2FzOX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImJ1aWxkQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1aWxkQ29uZmln'@;
put 'fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiZGVwbG95Q29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInNlcnZpY2VDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmljZUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImpvYkNvbmZpZyIs'@;
put 'e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9qb2JDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzdHJlYW1Db25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtQ29uZmlnfSxl'@;
put 'bnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwibWFjcm9Gb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoai5wcm90b3R5cGUsInByb2dyYW1Gb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb2dyYW1Gb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYmluYXJ5Rm9sZGVy'@;
put 'cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiY29udGV4dE5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGV4dE5h'@;
put 'bWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzZXJ2ZXJOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlck5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJyZXBvc2l0b3J5TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInRlc3RDb25maWci'@;
put 'LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN5bmNGb2xkZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3luY0ZvbGRlcn0sZW51'@;
put 'bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN5bmNEaXJlY3RvcmllcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksai5wcm90'@;
put 'b3R5cGUudG9Kc29uPWZ1bmN0aW9uKFYpe3ZhciBCLFksWDt2b2lkIDA9PT1WJiYoVj0hMCk7dmFyIFU9e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdlbnRPcHRp'@;
put 'b25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oQj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUIpJiZCLmxlbmd0aCYmKFUubWFjcm9Gb2xkZXJzPXRoaXMubWFj'@;
put 'cm9Gb2xkZXJzKSwhKG51bGw9PT0oWT10aGlzLnByb2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09WSkmJlkubGVuZ3RoJiYoVS5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oWD10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT1YKSYmWC5sZW5ndGgmJihV'@;
put 'LmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJzKSx0aGlzLmF1dGhDb25maWcmJihVLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoVS5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnN5bmNEaXJlY3Rvcmllcz9V'@;
put 'LnN5bmNEaXJlY3Rvcmllcz10aGlzLnN5bmNEaXJlY3RvcmllczpWJiYoVS5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/VS5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOlYmJihVLmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixidWls'@;
put 'ZE91dHB1dEZpbGVOYW1lOiIiLmNvbmNhdCh0aGlzLm5hbWUsIi5zYXMiKSxidWlsZE91dHB1dEZvbGRlcjoic2FzanNidWlsZCIsYnVpbGRSZXN1bHRzRm9sZGVyOiJzYXNqc3Jlc3VsdHMiLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP1Uuam9iQ29uZmlnPXRoaXMuam9iQ29uZmln'@;
put 'OlYmJihVLmpvYkNvbmZpZz17am9iRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/VS5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpWJiYoVS5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNlRm9sZGVy'@;
put 'czpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9VLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpWJiYoVS5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291cmNlUGF0'@;
put 'aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3NldFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP1UudGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6ViYmKFUudGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoiIix0ZXN0'@;
put 'VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9PT1MLlNlcnZlclR5cGUuU2FzVml5YT9VLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09TC5TZXJ2ZXJUeXBlLlNhczkmJihVLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLFUucmVwb3NpdG9yeU5h'@;
put 'bWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksVX0san0oKTtPLlRhcmdldD1FfSw2NzgxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9Ty52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPU8udmFsaWRhdGVTeW5jRm9sZGVyPU8udmFsaWRhdGVTZXJ2ZXJOYW1lPU8udmFsaWRhdGVDb250ZXh0TmFtZT1PLnZh'@;
put 'bGlkYXRlU3RyZWFtQ29uZmlnPU8udmFsaWRhdGVEZXBsb3lDb25maWc9Ty52YWxpZGF0ZUpvYkNvbmZpZz1PLnZhbGlkYXRlVGVzdENvbmZpZz1PLnZhbGlkYXRlU2VydmljZUNvbmZpZz1PLnZhbGlkYXRlQnVpbGRDb25maWc9Ty52YWxpZGF0ZUF1dGhDb25maWdTYXM5PU8udmFsaWRhdGVB'@;
put 'dXRoQ29uZmlnPU8udmFsaWRhdGVEb2NDb25maWc9Ty52YWxpZGF0ZUFwcExvYz1PLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9Ty52YWxpZGF0ZVNlcnZlclVybD1PLnZhbGlkYXRlVGFyZ2V0TmFtZT1PLnZhbGlkYXRlU2VydmVyVHlwZT12b2lkIDA7dmFyIEs9eihSKDQ4MSkpLEw9Uigz'@;
put 'OTAwKTtPLnZhbGlkYXRlU2VydmVyVHlwZT1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IGBzZXJ2ZXJUeXBlYCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoayE9PUwuU2VydmVyVHlwZS5TYXM5JiZrIT09TC5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEmJmshPT1MLlNlcnZlclR5cGUuU2FzanMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBTdXBwb3J0ZWQgdmFsdWVzIGZvciAgYHNlcnZlclR5cGVgIGFyZSAiLmNvbmNhdChMLlNlcnZlclR5cGUuU2FzVml5YSwiLCAiKS5jb25jYXQoTC5TZXJ2ZXJU'@;
put 'eXBlLlNhczksIiBhbmQgIikuY29uY2F0KEwuU2VydmVyVHlwZS5TYXNqcywiLiIpKTtyZXR1cm4ga30sTy52YWxpZGF0ZVRhcmdldE5hbWU9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGJlIGVtcHR5LCBudWxs'@;
put 'IG9yIHVuZGVmaW5lZC4iKTtpZihrLnRyaW0oKS5pbmNsdWRlcygiICIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBpbmNsdWRlIHNwYWNlcy4iKTtpZighL15bYS16QS1aMC05XC1dKyQvaS50ZXN0KGspKXRocm93IG5ldyBFcnJvcigiSW52'@;
put 'YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGRhc2hlcy4iKTtyZXR1cm4ga30sTy52YWxpZGF0ZVNlcnZlclVybD1mdW5jdGlvbihrKXtpZihudWxsPT1rJiYoaz0iIiksIiIhPT1rJiYhSy5kZWZhdWx0LmlzSHR0'@;
put 'cFVyaShrKSYmIUsuZGVmYXVsdC5pc0h0dHBzVXJpKGspKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIu'@;
put 'Y29tKDpwb3J0KS4iKTtyZXR1cm4ga30sTy52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPWZ1bmN0aW9uKGspe2lmKGspe2lmKCJvYmplY3QiIT10eXBlb2Ygayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBl'@;
put 'bXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBzQWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PWsuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKWsuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2Ygay5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygay5jYVBhdGgmJihrLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10'@;
put 'eXBlb2Ygay5rZXlQYXRoJiYoay5rZXlQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBrLmNlcnRQYXRoJiYoay5jZXJ0UGF0aD12b2lkIDApLGt9fSxPLnZhbGlkYXRlQXBwTG9jPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBh'@;
put 'cHBMb2NgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIWsuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIG11c3Qgc3RhcnQgd2l0aCBhIGAvYC4iKTtyZXR1cm4ga30sTy52YWxpZGF0ZURvY0Nv'@;
put 'bmZpZz1mdW5jdGlvbihrKXtpZihrfHwoaz17fSksImJvb2xlYW4iIT10eXBlb2Ygay5kaXNwbGF5TWFjcm9Db3JlJiYoay5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10eXBlb2Ygay5lbmFibGVMaW5lYWdlJiYoay5lbmFibGVMaW5lYWdlPXZvaWQgMCksInN0cmluZyIh'@;
put 'PXR5cGVvZiBrLm91dERpcmVjdG9yeSYmKGsub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBrLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PWsuZGF0YUNvbnRyb2xsZXJVcmwmJiFLLmRlZmF1bHQuaXNIdHRwVXJpKGsuZGF0YUNvbnRyb2xsZXJVcmwpJiYhSy5kZWZh'@;
put 'dWx0LmlzSHR0cHNVcmkoay5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0'@;
put 'cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBrLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4ga30sTy52YWxpZGF0ZUF1dGhDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNhbm5vdCBi'@;
put 'ZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4ga30sTy52YWxpZGF0ZUF1dGhDb25maWdTYXM5PWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIWsu'@;
put 'dXNlck5hbWV8fCFrLnBhc3N3b3JkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogdXNlck5hbWUgYW5kIHBhc3N3b3JkIGNhbiBub3QgYmUgZW1wdHkiKTtyZXR1cm4ga30sTy52YWxpZGF0ZUJ1aWxkQ29uZmlnPWZ1bmN0aW9uKGssRSl7aWYoIWspdGhy'@;
put 'b3cgbmV3IEVycm9yKCJJbnZhbGlkIGJ1aWxkIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuYnVpbGRSZXN1bHRzRm9sZGVyfHwoay5idWlsZFJlc3VsdHNGb2xkZXI9InNhc2pzcmVzdWx0cyIpLGsuYnVpbGRPdXRwdXRGb2xkZXJ8fChrLmJ1'@;
put 'aWxkT3V0cHV0Rm9sZGVyPSJzYXNqc2J1aWxkIiksay5idWlsZE91dHB1dEZpbGVOYW1lfHwoay5idWlsZE91dHB1dEZpbGVOYW1lPSIiLmNvbmNhdChFLCIuc2FzIikpLGsuaW5pdFByb2dyYW18fChrLmluaXRQcm9ncmFtPSIiKSxrLnRlcm1Qcm9ncmFtfHwoay50ZXJtUHJvZ3JhbT0iIiks'@;
put 'ay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSksa30sTy52YWxpZGF0ZVNlcnZpY2VDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5pbml0'@;
put 'UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLnNlcnZpY2VGb2xkZXJzfHwoay5zZXJ2aWNlRm9sZGVycz1bXSksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSksa30sTy52YWxpZGF0ZVRlc3RDb25maWc9ZnVuY3Rpb24o'@;
put 'ayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRlc3QgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLm1hY3Jv'@;
put 'VmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrLnRlc3RTZXRVcHx8KGsudGVzdFNldFVwPSIiKSxrLnRlc3RUZWFyRG93bnx8KGsudGVzdFRlYXJEb3duPSIiKSxrfSxPLnZhbGlkYXRlSm9iQ29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBqb2IgY29uZmln'@;
put 'OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLmpvYkZvbGRlcnN8fChrLmpvYkZvbGRlcnM9W10pLGsubWFjcm9WYXJzfHwoay5tYWNy'@;
put 'b1ZhcnM9e30pLGt9LE8udmFsaWRhdGVEZXBsb3lDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmRlcGxveVNlcnZpY2VQYWNrPSEhay5kZXBs'@;
put 'b3lTZXJ2aWNlUGFjayxrLmRlcGxveVNjcmlwdHN8fChrLmRlcGxveVNjcmlwdHM9W10pLGt9LE8udmFsaWRhdGVTdHJlYW1Db25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZp'@;
put 'bmVkLiIpO2lmKCEwIT09ay5zdHJlYW1XZWImJiExIT09ay5zdHJlYW1XZWIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJgIGNhbm5vdCBiZSBhIG5vbi1ib29sZWFuIHZhbHVlLiIpO2lmKGsuc3RyZWFtV2ViJiYhay5zdHJlYW1XZWJGb2xkZXIp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJGb2xkZXJgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBgc3RyZWFtV2ViYCBpcyB0cnVlLiIpO2lmKGsuc3RyZWFtV2ViJiYhay53ZWJTb3VyY2VQYXRoKXRocm93IG5ldyBF'@;
put 'cnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgd2ViU291cmNlUGF0aGAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIGsuc3RyZWFtTG9nbyYmKGsuc3RyZWFtTG9nbz12b2lkIDApLGsuYXNzZXRQ'@;
put 'YXRoc3x8KGsuYXNzZXRQYXRocz1bXSksay5zdHJlYW1TZXJ2aWNlTmFtZXx8KGsuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxrfSxPLnZhbGlkYXRlQ29udGV4dE5hbWU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gRSE9PUwuU2VydmVyVHlwZS5TYXNWaXlhfHxrP2s6IlNBUyBKb2IgRXhl'@;
put 'Y3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9LE8udmFsaWRhdGVTZXJ2ZXJOYW1lPWZ1bmN0aW9uKGssRSl7cmV0dXJuIEUhPT1MLlNlcnZlclR5cGUuU2FzOXx8az9rOiJTQVNBcHAifSxPLnZhbGlkYXRlU3luY0ZvbGRlcj1mdW5jdGlvbihrKXtpZigic3RyaW5nIj09dHlwZW9mIGsmJmspcmV0'@;
put 'dXJuIGt9LE8udmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1mdW5jdGlvbihrLEUpe3JldHVybiBFIT09TC5TZXJ2ZXJUeXBlLlNhczl8fGs/azoiRm91bmRhdGlvbiJ9LE8udmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5'@;
put 'bmNEaXJlY3RvcmllcyBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmZvckVhY2goZnVuY3Rpb24oRSl7aWYoIUUubG9jYWx8fCFFLnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBv'@;
put 'ZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxrfX0sMjkyNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEUp'@;
put 'e3JldHVybiBFJiZFLl9fZXNNb2R1bGU/RTp7ZGVmYXVsdDpFfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGVjb2RlRnJvbUJhc2U2ND1PLmVuY29kZVRvQmFzZTY0PXZvaWQgMDt2YXIgTD1LKFIoNTgzNSkpLGs9IntzYXNqc19lbmNvZGVk'@;
put 'fSI7Ty5lbmNvZGVUb0Jhc2U2ND1mdW5jdGlvbihFKXt2YXIgaj1MLmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4IiksVj16LmZyb20oaitFKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIGsrVn0sTy5kZWNvZGVGcm9tQmFzZTY0PWZ1bmN0aW9uKEUpe3JldHVybiBF'@;
put 'LnN0YXJ0c1dpdGgoayk/KEU9RS5yZXBsYWNlKC9ee3Nhc2pzX2VuY29kZWR9LywiIiksei5mcm9tKEUsImJhc2U2NCIpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIwMCkpOkV9fSw1ODE6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLE8uYnl0ZXNUb1NpemU9dm9pZCAwLE8uYnl0ZXNUb1NpemU9ZnVuY3Rpb24oUix6LEspe2lmKHZvaWQgMD09PXomJih6PTEpLHZvaWQgMD09PUsmJihLPTEwOTk1MTE2Mjc3NzYpLDA9PT1SKXJldHVybiIwIEIiO1I9Uj5LP0s6Ujt2YXIgTD16PDA/MDp6LGs9TWF0aC5mbG9v'@;
put 'cihNYXRoLmxvZyhSKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKFIvTWF0aC5wb3coMTAyNCxrKSkudG9GaXhlZChMKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtrXX19LDg2NTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLE8uY2h1bms9dm9pZCAwLE8uY2h1bms9ZnVuY3Rpb24oUix6KXtyZXR1cm4gdm9pZCAwPT09eiYmKHo9MjIwKSxSLmxlbmd0aDw9ej9bUl06KFIubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIreisifSIsImciKSl8fFtdKS5maWx0ZXIoZnVuY3Rpb24oSyl7cmV0dXJuISFL'@;
put 'fSl9fSw2NDU3OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihLLEwpe3ZhciBrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJktbU3ltYm9sLml0ZXJhdG9yXTtpZighaylyZXR1cm4gSzt2YXIgRSxqLFY9ay5jYWxsKEspLEI9'@;
put 'W107dHJ5e2Zvcig7KHZvaWQgMD09PUx8fEwtLSA+MCkmJiEoRT1WLm5leHQoKSkuZG9uZTspQi5wdXNoKEUudmFsdWUpfWNhdGNoKFkpe2o9e2Vycm9yOll9fWZpbmFsbHl7dHJ5e0UmJiFFLmRvbmUmJihrPVYucmV0dXJuKSYmay5jYWxsKFYpfWZpbmFsbHl7aWYoail0aHJvdyBqLmVycm9y'@;
put 'fX1yZXR1cm4gQn0sej10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKEssTCxrKXtpZihrfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEUsaj0wLFY9TC5sZW5ndGg7ajxWO2orKykhRSYmaiBpbiBMfHwoRXx8KEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoTCww'@;
put 'LGopKSxFW2pdPUxbal0pO3JldHVybiBLLmNvbmNhdChFfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChMKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRpZmY9dm9pZCAwLE8uZGlmZj1mdW5jdGlvbihLLEwpe3ZhciBrPUsuZmlsdGVy'@;
put 'KGZ1bmN0aW9uKGope3JldHVybiJvYmplY3QiPT10eXBlb2Ygaj8hSlNPTi5zdHJpbmdpZnkoTCkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkoaikpOiFMLmluY2x1ZGVzKGopfSksRT1MLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGo/IUpTT04uc3RyaW5naWZ5'@;
put 'KEspLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KGopKTohSy5pbmNsdWRlcyhqKX0pO3JldHVybiB6KHooW10sUihrKSwhMSksUihFKSwhMSl9fSwxNTI5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEV4'@;
put 'ZWN1dG9yUGF0aD12b2lkIDA7dmFyIFI9e1NBU1ZJWUE6Ii9TQVNKb2JFeGVjdXRpb24iLFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIn07Ty5nZXRFeGVjdXRvclBhdGg9ZnVuY3Rpb24oeil7cmV0dXJuIHo/KHo9ei50b1VwcGVyQ2FzZSgpLFJbel18fCIiKToiIn19LDMzMTY6KE0sTyxS'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRUcmVlRXhhbXBsZT1PLmlzRmlsZVRyZWU9dm9pZCAwO3ZhciB6PVIoMzkwMCk7Ty5pc0ZpbGVUcmVlPWZ1bmN0aW9uKEUpe3JldHVybiBFJiZFLm1lbWJlcnMmJkFy'@;
put 'cmF5LmlzQXJyYXkoRS5tZW1iZXJzKSYmMD09PUUubWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIUsoaikmJiFMKGopJiYhayhqKX0pLmxlbmd0aH07dmFyIEs9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJzdHJpbmciPT10eXBlb2YgRS5uYW1lJiZFLnR5cGU9PT16Lk1lbWJlclR5'@;
put 'cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBFLmNvZGV9LEw9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJzdHJpbmciPT10eXBlb2YgRS5uYW1lJiZFLnR5cGU9PT16Lk1lbWJlclR5cGUuZmlsZSYmInN0cmluZyI9PXR5cGVvZiBFLmNvZGV9LGs9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJz'@;
put 'dHJpbmciPT10eXBlb2YgRS5uYW1lJiZFLnR5cGU9PT16Lk1lbWJlclR5cGUuZm9sZGVyJiZFLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRS5tZW1iZXJzKSYmMD09PUUubWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIUsoaikmJiFMKGopJiYhayhqKX0pLmxlbmd0aH07Ty5nZXRU'@;
put 'cmVlRXhhbXBsZT1mdW5jdGlvbigpe3JldHVybnttZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTp6Lk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0eXBlOnouTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTp6Lk1lbWJl'@;
put 'clR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdvcmxkITsifV19XX1dfX19LDYyNjY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oWCxVLHEsZWUpe3ZvaWQgMD09PWVlJiYo'@;
put 'ZWU9cSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsZWUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFVbcV19fSl9OmZ1bmN0aW9uKFgsVSxxLGVlKXt2b2lkIDA9PT1lZSYmKGVlPXEpLFhbZWVdPVVbcV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlv'@;
put 'bihYLFUpe2Zvcih2YXIgcSBpbiBYKSJkZWZhdWx0Ij09PXF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHEpfHx6KFUsWCxxKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY2h1bms9Ty5kaWZmPU8uYnl0ZXNUb1Np'@;
put 'emU9Ty5nZXRFeGVjdXRvclBhdGg9Ty5kZWNvZGVGcm9tQmFzZTY0PU8uZW5jb2RlVG9CYXNlNjQ9Ty51cmxPcmlnaW49Ty5nZW5lcmF0ZVBhdGhGb3JTYXM9Ty5nZXRNYWNyb3NQYXRoPU8uZXNjYXBlV2luU2xhc2hlcz1PLmlzTGludXg9Ty5pc1dpbmRvd3M9Ty51bmlxQXJyYXk9Ty5hc3lu'@;
put 'Y0ZvckVhY2g9Ty51dWlkdjQ9dm9pZCAwO3ZhciBMPVIoMTEzMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJhc3luY0ZvckVhY2giLHtlbnVt'@;
put 'ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlz'@;
put 'V2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJpc0xpbnV4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShPLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5nZXRN'@;
put 'YWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLmdlbmVyYXRlUGF0aEZvclNhc319KSxLKFIoMzMxNiksTyk7dmFyIGs9Uig5NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywidXJsT3JpZ2luIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay51cmxPcmlnaW59fSk7dmFyIEU9UigyOTI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmVu'@;
put 'Y29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5kZWNvZGVGcm9tQmFzZTY0fX0pO3ZhciBqPVIoMTUyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldEV4ZWN1'@;
put 'dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGouZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBWPVIoNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYnl0ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWLmJ5dGVzVG9T'@;
put 'aXplfX0pO3ZhciBCPVIoNjQ1Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmRpZmZ9fSk7dmFyIFk9Uig4NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY2h1bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiBZLmNodW5rfX0pfSw5NjUyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnVybE9yaWdpbj12b2lkIDAsTy51cmxPcmlnaW49ZnVuY3Rpb24oUil7aWYoIiI9PT1SKXJldHVybiBS'@;
put 'O3ZhciB6O3RyeXt6PW5ldyBVUkwoUikub3JpZ2lufWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBVUkwuIil9cmV0dXJuIHp9fSwxMTMxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYs'@;
put 'QixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Up'@;
put 'e3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0sTD10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5j'@;
put 'dGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'U3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRp'@;
put 'bmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52'@;
put 'YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250'@;
put 'aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09'@;
put 'c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtz'@;
put 'ZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fSxrPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihqKXtyZXR1cm4gaiYmai5fX2VzTW9k'@;
put 'dWxlP2o6e2RlZmF1bHQ6an19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdlbmVyYXRlUGF0aEZvclNhcz1PLmdldE1hY3Jvc1BhdGg9Ty5lc2NhcGVXaW5TbGFzaGVzPU8uaXNMaW51eD1PLmlzV2luZG93cz1PLnVuaXFBcnJheT1PLnV1aWR2'@;
put 'ND1PLmFzeW5jRm9yRWFjaD12b2lkIDA7dmFyIEU9ayhSKDI1MjApKTtPLmFzeW5jRm9yRWFjaD1mdW5jdGlvbihqLFYpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCO3JldHVybiBMKHRoaXMsZnVuY3Rpb24oWSl7c3dpdGNoKFkubGFiZWwpe2Nhc2UgMDpC'@;
put 'PTAsWS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gQjxqLmxlbmd0aD9bNCxWKGpbQl0sQixqKV06WzMsNF07Y2FzZSAyOlkuc2VudCgpLFkubGFiZWw9MztjYXNlIDM6cmV0dXJuIEIrKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LE8udXVpZHY0PWZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4'@;
put 'eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGope3ZhciBWPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1qP1Y6MyZWfDgpLnRvU3RyaW5nKDE2KX0pfSxPLnVuaXFBcnJheT1mdW5jdGlvbihqKXtyZXR1cm4gQXJyYXkuZnJv'@;
put 'bShuZXcgU2V0KGopKX0sTy5pc1dpbmRvd3M9ZnVuY3Rpb24oKXtyZXR1cm4id2luMzIiPT09ei5wbGF0Zm9ybX0sTy5pc0xpbnV4PWZ1bmN0aW9uKCl7cmV0dXJuImxpbnV4Ij09PXoucGxhdGZvcm19LE8uZXNjYXBlV2luU2xhc2hlcz1mdW5jdGlvbihqKXtyZXR1cm4oMCxPLmlzV2luZG93'@;
put 'cykoKT9qLnJlcGxhY2UoL1xcL2csIlxcXFwiKTpqfSxPLmdldE1hY3Jvc1BhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gRS5kZWZhdWx0LmpvaW4oIi8iLCIuLiIsIm1hY3JvcyIpfSxPLmdlbmVyYXRlUGF0aEZvclNhcz1mdW5jdGlvbihqKXtyZXR1cm4gai5yZXBsYWNlKC9cXC9nLCIvIil9fSw5'@;
put 'ODA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouYmlnbnVtPVIoNDU5MCksei5kZWZpbmU9UigyNTAwKS5kZWZpbmUsei5iYXNlPVIoMTk3OSksei5jb25zdGFudHM9Uig2ODI2KSx6LmRlY29kZXJzPVIoODMwNyksei5lbmNvZGVycz1SKDY1NzkpfSwyNTAwOihNLE8sUik9'@;
put 'PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDY1NzkpLEs9Uig4MzA3KSxMPVIoNTcxNyk7ZnVuY3Rpb24gayhFLGope3RoaXMubmFtZT1FLHRoaXMuYm9keT1qLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1PLmRlZmluZT1mdW5jdGlvbihFLGope3JldHVybiBuZXcgayhFLGop'@;
put 'fSxrLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oRSl7Y29uc3Qgaj10aGlzLm5hbWU7ZnVuY3Rpb24gVihCKXt0aGlzLl9pbml0TmFtZWQoQixqKX1yZXR1cm4gTChWLEUpLFYucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oQixZKXtFLmNhbGwodGhpcyxCLFkpfSxuZXcg'@;
put 'Vih0aGlzKX0say5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoRT1FfHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW0VdPXRoaXMuX2NyZWF0ZU5hbWVkKEtbRV0pKSx0aGlzLmRlY29kZXJzW0VdfSxrLnByb3RvdHlw'@;
put 'ZS5kZWNvZGU9ZnVuY3Rpb24oRSxqLFYpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGopLmRlY29kZShFLFYpfSxrLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShFPUV8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNb'@;
put 'RV09dGhpcy5fY3JlYXRlTmFtZWQoeltFXSkpLHRoaXMuZW5jb2RlcnNbRV19LGsucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihFLGosVil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoaikuZW5jb2RlKEUsVil9fSw2NjI1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcp'@;
put 'LEs9Uig4NDY1KS5iLEw9UigyMzk5KS5CdWZmZXI7ZnVuY3Rpb24gayhqLFYpe0suY2FsbCh0aGlzLFYpLEwuaXNCdWZmZXIoaik/KHRoaXMuYmFzZT1qLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9ai5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiBF'@;
put 'KGosVil7aWYoQXJyYXkuaXNBcnJheShqKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9ai5tYXAoZnVuY3Rpb24oQil7cmV0dXJuIEUuaXNFbmNvZGVyQnVmZmVyKEIpfHwoQj1uZXcgRShCLFYpKSx0aGlzLmxlbmd0aCs9Qi5sZW5ndGgsQn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlw'@;
put 'ZW9mIGope2lmKCEoMDw9aiYmajw9MjU1KSlyZXR1cm4gVi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9aix0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBqKXRoaXMudmFsdWU9aix0aGlzLmxlbmd0aD1MLmJ5dGVMZW5ndGgo'@;
put 'aik7ZWxzZXtpZighTC5pc0J1ZmZlcihqKSlyZXR1cm4gVi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2Ygaik7dGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPWoubGVuZ3RofX16KGssSyksTy5DPWssay5pc0RlY29kZXJCdWZmZXI9ZnVuY3Rpb24oail7cmV0dXJuIGogaW5zdGFu'@;
put 'Y2VvZiBrfHwib2JqZWN0Ij09dHlwZW9mIGomJkwuaXNCdWZmZXIoai5iYXNlKSYmIkRlY29kZXJCdWZmZXIiPT09ai5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIGoub2Zmc2V0JiYibnVtYmVyIj09dHlwZW9mIGoubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5zYXZl'@;
put 'JiYiZnVuY3Rpb24iPT10eXBlb2Ygai5yZXN0b3JlJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5pc0VtcHR5JiYiZnVuY3Rpb24iPT10eXBlb2Ygai5yZWFkVUludDgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnNraXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJhd30say5wcm90b3R5cGUuc2F2ZT1m'@;
put 'dW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Sy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0say5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihqKXtjb25zdCBWPW5ldyBrKHRoaXMuYmFzZSk7cmV0dXJuIFYub2Zmc2V0PWoub2Zmc2V0LFYubGVuZ3Ro'@;
put 'PXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PWoub2Zmc2V0LEsucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLGoucmVwb3J0ZXIpLFZ9LGsucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0say5wcm90b3R5cGUucmVhZFVJbnQ4'@;
put 'PWZ1bmN0aW9uKGope3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3Ioanx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxrLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGosVil7aWYoISh0aGlz'@;
put 'Lm9mZnNldCtqPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoVnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO2NvbnN0IEI9bmV3IGsodGhpcy5iYXNlKTtyZXR1cm4gQi5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLEIub2Zmc2V0PXRoaXMub2Zmc2V0LEIubGVu'@;
put 'Z3RoPXRoaXMub2Zmc2V0K2osdGhpcy5vZmZzZXQrPWosQn0say5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmJhc2Uuc2xpY2Uoaj9qLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LE8uUj1FLEUuaXNFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKGope3JldHVy'@;
put 'biBqIGluc3RhbmNlb2YgRXx8Im9iamVjdCI9PXR5cGVvZiBqJiYiRW5jb2RlckJ1ZmZlciI9PT1qLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLmpvaW59LEUucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oaixWKXtyZXR1'@;
put 'cm4ganx8KGo9TC5hbGxvYyh0aGlzLmxlbmd0aCkpLFZ8fChWPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0Iuam9pbihqLFYpLFYrPUIubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52'@;
put 'YWx1ZT9qW1ZdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP2oud3JpdGUodGhpcy52YWx1ZSxWKTpMLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoaixWKSxWKz10aGlzLmxlbmd0aCkpLGp9fSwxOTc5OihNLE8sUik9PnsidXNlIHN0cmljdCI7'@;
put 'Y29uc3Qgej1PO3ouUmVwb3J0ZXI9Uig4NDY1KS5iLHouRGVjb2RlckJ1ZmZlcj1SKDY2MjUpLkMsei5FbmNvZGVyQnVmZmVyPVIoNjYyNSkuUix6Lk5vZGU9UigxOTQ5KX0sMTk0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4NDY1KS5iLEs9Uig2NjI1KS5SLEw9Uig2NjI1'@;
put 'KS5DLGs9Uig5NzQ2KSxFPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0'@;
put 'ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0saj1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRh'@;
put 'aW5zIl0uY29uY2F0KEUpO2Z1bmN0aW9uIFYoWSxYLFUpe2NvbnN0IHE9e307dGhpcy5fYmFzZVN0YXRlPXEscS5uYW1lPVUscS5lbmM9WSxxLnBhcmVudD1YfHxudWxsLHEuY2hpbGRyZW49bnVsbCxxLnRhZz1udWxsLHEuYXJncz1udWxsLHEucmV2ZXJzZUFyZ3M9bnVsbCxxLmNob2ljZT1u'@;
put 'dWxsLHEub3B0aW9uYWw9ITEscS5hbnk9ITEscS5vYmo9ITEscS51c2U9bnVsbCxxLnVzZURlY29kZXI9bnVsbCxxLmtleT1udWxsLHEuZGVmYXVsdD1udWxsLHEuZXhwbGljaXQ9bnVsbCxxLmltcGxpY2l0PW51bGwscS5jb250YWlucz1udWxsLHEucGFyZW50fHwocS5jaGlsZHJlbj1bXSx0'@;
put 'aGlzLl93cmFwKCkpfU0uZXhwb3J0cz1WO2NvbnN0IEI9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIs'@;
put 'ImltcGxpY2l0IiwiY29udGFpbnMiXTtWLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2NvbnN0IFk9dGhpcy5fYmFzZVN0YXRlLFg9e307Qi5mb3JFYWNoKGZ1bmN0aW9uKHEpe1hbcV09WVtxXX0pO2NvbnN0IFU9bmV3IHRoaXMuY29uc3RydWN0b3IoWC5wYXJlbnQpO3JldHVybiBVLl9i'@;
put 'YXNlU3RhdGU9WCxVfSxWLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe2NvbnN0IFk9dGhpcy5fYmFzZVN0YXRlO2ouZm9yRWFjaChmdW5jdGlvbihYKXt0aGlzW1hdPWZ1bmN0aW9uKCl7Y29uc3QgVT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gWS5jaGlsZHJlbi5wdXNo'@;
put 'KFUpLFVbWF0uYXBwbHkoVSxhcmd1bWVudHMpfX0sdGhpcyl9LFYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO2sobnVsbD09PVgucGFyZW50KSxZLmNhbGwodGhpcyksWC5jaGlsZHJlbj1YLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihVKXty'@;
put 'ZXR1cm4gVS5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLGsuZXF1YWwoWC5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFYucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlLFU9'@;
put 'WS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtZPVkuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiEocSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09VS5sZW5ndGgmJihrKG51bGw9PT1YLmNoaWxk'@;
put 'cmVuKSxYLmNoaWxkcmVuPVUsVS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1ZLmxlbmd0aCYmKGsobnVsbD09PVguYXJncyksWC5hcmdzPVksWC5yZXZlcnNlQXJncz1ZLm1hcChmdW5jdGlvbihxKXtpZigib2JqZWN0IiE9dHlwZW9m'@;
put 'IHF8fHEuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIHE7Y29uc3QgZWU9e307cmV0dXJuIE9iamVjdC5rZXlzKHEpLmZvckVhY2goZnVuY3Rpb24odGUpe3RlPT0oMHx0ZSkmJih0ZXw9MCksZWVbcVt0ZV1dPXRlfSksZWV9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIs'@;
put 'Il9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29k'@;
put 'ZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1YucHJvdG90eXBlW1ldPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFkrIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLEUuZm9yRWFj'@;
put 'aChmdW5jdGlvbihZKXtWLnByb3RvdHlwZVtZXT1mdW5jdGlvbigpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlLFU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gayhudWxsPT09WC50YWcpLFgudGFnPVksdGhpcy5fdXNlQXJncyhVKSx0aGlzfX0pLFYucHJv'@;
put 'dG90eXBlLnVzZT1mdW5jdGlvbihZKXtrKFkpO2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLnVzZSksWC51c2U9WSx0aGlzfSxWLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sVi5w'@;
put 'cm90b3R5cGUuZGVmPWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmRlZmF1bHQpLFguZGVmYXVsdD1ZLFgub3B0aW9uYWw9ITAsdGhpc30sVi5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7'@;
put 'cmV0dXJuIGsobnVsbD09PVguZXhwbGljaXQmJm51bGw9PT1YLmltcGxpY2l0KSxYLmV4cGxpY2l0PVksdGhpc30sVi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguZXhwbGljaXQmJm51bGw9PT1YLmltcGxp'@;
put 'Y2l0KSxYLmltcGxpY2l0PVksdGhpc30sVi5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9iYXNlU3RhdGUsWD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBZLm9iaj0hMCwwIT09WC5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoWCksdGhp'@;
put 'c30sVi5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmtleSksWC5rZXk9WSx0aGlzfSxWLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxWLnByb3RvdHlw'@;
put 'ZS5jaG9pY2U9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguY2hvaWNlKSxYLmNob2ljZT1ZLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoWSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBZW1VdfSkpLHRoaXN9LFYucHJvdG90eXBlLmNvbnRh'@;
put 'aW5zPWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLnVzZSksWC5jb250YWlucz1ZLHRoaXN9LFYucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09VS5wYXJlbnQpcmV0dXJu'@;
put 'IFkud3JhcFJlc3VsdChVLmNoaWxkcmVuWzBdLl9kZWNvZGUoWSxYKSk7bGV0IHEsZWU9VS5kZWZhdWx0LHRlPSEwLG9lPW51bGw7aWYobnVsbCE9PVUua2V5JiYob2U9WS5lbnRlcktleShVLmtleSkpLFUub3B0aW9uYWwpe2xldCBzZT1udWxsO2lmKG51bGwhPT1VLmV4cGxpY2l0P3NlPVUu'@;
put 'ZXhwbGljaXQ6bnVsbCE9PVUuaW1wbGljaXQ/c2U9VS5pbXBsaWNpdDpudWxsIT09VS50YWcmJihzZT1VLnRhZyksbnVsbCE9PXNlfHxVLmFueSl7aWYodGU9dGhpcy5fcGVla1RhZyhZLHNlLFUuYW55KSxZLmlzRXJyb3IodGUpKXJldHVybiB0ZX1lbHNle2NvbnN0IGhlPVkuc2F2ZSgpO3Ry'@;
put 'eXtudWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxZLFgpOnRoaXMuX2RlY29kZUNob2ljZShZLFgpLHRlPSEwfWNhdGNoe3RlPSExfVkucmVzdG9yZShoZSl9fWlmKFUub2JqJiZ0ZSYmKHE9WS5lbnRlck9iamVjdCgpKSx0ZSl7aWYobnVsbCE9PVUuZXhwbGljaXQp'@;
put 'e2NvbnN0IGhlPXRoaXMuX2RlY29kZVRhZyhZLFUuZXhwbGljaXQpO2lmKFkuaXNFcnJvcihoZSkpcmV0dXJuIGhlO1k9aGV9Y29uc3Qgc2U9WS5vZmZzZXQ7aWYobnVsbD09PVUudXNlJiZudWxsPT09VS5jaG9pY2Upe2xldCBoZTtVLmFueSYmKGhlPVkuc2F2ZSgpKTtjb25zdCB1ZT10aGlz'@;
put 'Ll9kZWNvZGVUYWcoWSxudWxsIT09VS5pbXBsaWNpdD9VLmltcGxpY2l0OlUudGFnLFUuYW55KTtpZihZLmlzRXJyb3IodWUpKXJldHVybiB1ZTtVLmFueT9lZT1ZLnJhdyhoZSk6WT11ZX1pZihYJiZYLnRyYWNrJiZudWxsIT09VS50YWcmJlgudHJhY2soWS5wYXRoKCksc2UsWS5sZW5ndGgs'@;
put 'InRhZ2dlZCIpLFgmJlgudHJhY2smJm51bGwhPT1VLnRhZyYmWC50cmFjayhZLnBhdGgoKSxZLm9mZnNldCxZLmxlbmd0aCwiY29udGVudCIpLFUuYW55fHwoZWU9bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsWSxYKTp0aGlzLl9kZWNvZGVDaG9pY2UoWSxYKSks'@;
put 'WS5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7aWYoVS5hbnl8fG51bGwhPT1VLmNob2ljZXx8bnVsbD09PVUuY2hpbGRyZW58fFUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihoZSl7aGUuX2RlY29kZShZLFgpfSksVS5jb250YWlucyYmKCJvY3RzdHIiPT09VS50YWd8fCJiaXRzdHIiPT09VS50'@;
put 'YWcpKXtjb25zdCBoZT1uZXcgTChlZSk7ZWU9dGhpcy5fZ2V0VXNlKFUuY29udGFpbnMsWS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoaGUsWCl9fXJldHVybiBVLm9iaiYmdGUmJihlZT1ZLmxlYXZlT2JqZWN0KHEpKSxudWxsPT09VS5rZXl8fG51bGw9PT1lZSYmITAhPT10ZT9udWxs'@;
put 'IT09b2UmJlkuZXhpdEtleShvZSk6WS5sZWF2ZUtleShvZSxVLmtleSxlZSksZWV9LFYucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PVl8fCJzZXQiPT09WT9udWxsOiJzZXFvZiI9PT1ZfHwic2V0'@;
put 'b2YiPT09WT90aGlzLl9kZWNvZGVMaXN0KFgsWSxxLmFyZ3NbMF0sVSk6L3N0ciQvLnRlc3QoWSk/dGhpcy5fZGVjb2RlU3RyKFgsWSxVKToib2JqaWQiPT09WSYmcS5hcmdzP3RoaXMuX2RlY29kZU9iamlkKFgscS5hcmdzWzBdLHEuYXJnc1sxXSxVKToib2JqaWQiPT09WT90aGlzLl9kZWNv'@;
put 'ZGVPYmppZChYLG51bGwsbnVsbCxVKToiZ2VudGltZSI9PT1ZfHwidXRjdGltZSI9PT1ZP3RoaXMuX2RlY29kZVRpbWUoWCxZLFUpOiJudWxsXyI9PT1ZP3RoaXMuX2RlY29kZU51bGwoWCxVKToiYm9vbCI9PT1ZP3RoaXMuX2RlY29kZUJvb2woWCxVKToib2JqRGVzYyI9PT1ZP3RoaXMuX2Rl'@;
put 'Y29kZVN0cihYLFksVSk6ImludCI9PT1ZfHwiZW51bSI9PT1ZP3RoaXMuX2RlY29kZUludChYLHEuYXJncyYmcS5hcmdzWzBdLFUpOm51bGwhPT1xLnVzZT90aGlzLl9nZXRVc2UocS51c2UsWC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoWCxVKTpYLmVycm9yKCJ1bmtub3duIHRhZzog'@;
put 'IitZKX0sVi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBVLnVzZURlY29kZXI9dGhpcy5fdXNlKFksWCksayhudWxsPT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxVLnVzZURlY29kZXI9VS51c2VEZWNvZGVy'@;
put 'Ll9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sVS5pbXBsaWNpdCE9PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5jbG9uZSgpLFUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PVUuaW1wbGljaXQpLFUudXNlRGVjb2Rlcn0s'@;
put 'Vi5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2xldCBxPW51bGwsZWU9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHRlKXtjb25zdCBvZT1ZLnNhdmUoKSxzZT1VLmNob2ljZVt0ZV07dHJ5'@;
put 'e2NvbnN0IGhlPXNlLl9kZWNvZGUoWSxYKTtpZihZLmlzRXJyb3IoaGUpKXJldHVybiExO3E9e3R5cGU6dGUsdmFsdWU6aGV9LGVlPSEwfWNhdGNoe3JldHVybiBZLnJlc3RvcmUob2UpLCExfXJldHVybiEwfSx0aGlzKSxlZT9xOlkuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxWLnBy'@;
put 'b3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihZKXtyZXR1cm4gbmV3IEsoWSx0aGlzLnJlcG9ydGVyKX0sVi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihZLFgsVSl7Y29uc3QgcT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbCE9PXEuZGVmYXVsdCYmcS5kZWZhdWx0PT09'@;
put 'WSlyZXR1cm47Y29uc3QgZWU9dGhpcy5fZW5jb2RlVmFsdWUoWSxYLFUpO3JldHVybiB2b2lkIDA9PT1lZXx8dGhpcy5fc2tpcERlZmF1bHQoZWUsWCxVKT92b2lkIDA6ZWV9LFYucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihZLFgsVSl7Y29uc3QgcT10aGlzLl9iYXNlU3RhdGU7'@;
put 'aWYobnVsbD09PXEucGFyZW50KXJldHVybiBxLmNoaWxkcmVuWzBdLl9lbmNvZGUoWSxYfHxuZXcgeik7bGV0IGVlPW51bGw7aWYodGhpcy5yZXBvcnRlcj1YLHEub3B0aW9uYWwmJnZvaWQgMD09PVkpe2lmKG51bGw9PT1xLmRlZmF1bHQpcmV0dXJuO1k9cS5kZWZhdWx0fWxldCB0ZT1udWxs'@;
put 'LG9lPSExO2lmKHEuYW55KWVlPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWSk7ZWxzZSBpZihxLmNob2ljZSllZT10aGlzLl9lbmNvZGVDaG9pY2UoWSxYKTtlbHNlIGlmKHEuY29udGFpbnMpdGU9dGhpcy5fZ2V0VXNlKHEuY29udGFpbnMsVSkuX2VuY29kZShZLFgpLG9lPSEwO2Vsc2Ug'@;
put 'aWYocS5jaGlsZHJlbil0ZT1xLmNoaWxkcmVuLm1hcChmdW5jdGlvbihzZSl7aWYoIm51bGxfIj09PXNlLl9iYXNlU3RhdGUudGFnKXJldHVybiBzZS5fZW5jb2RlKG51bGwsWCxZKTtpZihudWxsPT09c2UuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIFguZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZl'@;
put 'IGEga2V5Iik7Y29uc3QgaGU9WC5lbnRlcktleShzZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBZKXJldHVybiBYLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTtjb25zdCB1ZT1zZS5fZW5jb2RlKFlbc2UuX2Jhc2VTdGF0ZS5r'@;
put 'ZXldLFgsWSk7cmV0dXJuIFgubGVhdmVLZXkoaGUpLHVlfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oc2Upe3JldHVybiBzZX0pLHRlPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodGUpO2Vsc2UgaWYoInNlcW9mIj09PXEudGFnfHwic2V0b2YiPT09cS50YWcpe2lmKCFxLmFyZ3N8fDEhPT1x'@;
put 'LmFyZ3MubGVuZ3RoKXJldHVybiBYLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrcS50YWcpO2lmKCFBcnJheS5pc0FycmF5KFkpKXJldHVybiBYLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7Y29uc3Qgc2U9dGhpcy5jbG9uZSgpO3NlLl9iYXNlU3Rh'@;
put 'dGUuaW1wbGljaXQ9bnVsbCx0ZT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkubWFwKGZ1bmN0aW9uKGhlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLFkpLl9lbmNvZGUoaGUsWCl9LHNlKSl9ZWxzZSBudWxsIT09cS51c2U/ZWU9dGhpcy5fZ2V0VXNl'@;
put 'KHEudXNlLFUpLl9lbmNvZGUoWSxYKToodGU9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKHEudGFnLFkpLG9lPSEwKTtpZighcS5hbnkmJm51bGw9PT1xLmNob2ljZSl7Y29uc3Qgc2U9bnVsbCE9PXEuaW1wbGljaXQ/cS5pbXBsaWNpdDpxLnRhZyxoZT1udWxsPT09cS5pbXBsaWNpdD8idW5pdmVy'@;
put 'c2FsIjoiY29udGV4dCI7bnVsbD09PXNlP251bGw9PT1xLnVzZSYmWC5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PXEudXNlJiYoZWU9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHNlLG9lLGhlLHRlKSl9cmV0dXJuIG51bGwhPT1xLmV4cGxpY2l0'@;
put 'JiYoZWU9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHEuZXhwbGljaXQsITEsImNvbnRleHQiLGVlKSksZWV9LFYucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZSxxPVUuY2hvaWNlW1kudHlwZV07cmV0dXJuIHF8fGsoITEsWS50eXBl'@;
put 'KyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoVS5jaG9pY2UpKSkscS5fZW5jb2RlKFkudmFsdWUsWCl9LFYucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChZKSly'@;
put 'ZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFgsWSk7aWYoIm9iamlkIj09PVkmJlUuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWCxVLnJldmVyc2VBcmdzWzBdLFUuYXJnc1sxXSk7aWYoIm9iamlkIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKFgsbnVsbCxudWxsKTtpZigiZ2Vu'@;
put 'dGltZSI9PT1ZfHwidXRjdGltZSI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKFgsWSk7aWYoIm51bGxfIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PVl8fCJlbnVtIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZUludChYLFUuYXJncyYmVS5yZXZlcnNlQXJn'@;
put 'c1swXSk7aWYoImJvb2wiPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChYKTtpZigib2JqRGVzYyI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWCxZKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitZKX0sVi5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKFkp'@;
put 'e3JldHVybi9eWzAtOSBdKiQvLnRlc3QoWSl9LFYucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKFkpe3JldHVybi9eW0EtWmEtejAtOSAnKCkrLC0uLzo9P10qJC8udGVzdChZKX19LDg0NjU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyk7ZnVuY3Rpb24gSyhr'@;
put 'KXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6a3x8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBMKGssRSl7dGhpcy5wYXRoPWssdGhpcy5yZXRocm93KEUpfU8uYj1LLEsucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24oayl7cmV0dXJuIGsgaW5zdGFuY2Vv'@;
put 'ZiBMfSxLLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3Qgaz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ay5vYmoscGF0aExlbjprLnBhdGgubGVuZ3RofX0sSy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX3JlcG9ydGVyU3RhdGU7RS5v'@;
put 'Ymo9ay5vYmosRS5wYXRoPUUucGF0aC5zbGljZSgwLGsucGF0aExlbil9LEsucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChrKX0sSy5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX3Jl'@;
put 'cG9ydGVyU3RhdGU7RS5wYXRoPUUucGF0aC5zbGljZSgwLGstMSl9LEsucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGspLG51bGwhPT1WLm9iaiYmKFYub2JqW0VdPWopfSxLLnByb3RvdHlwZS5wYXRo'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LEsucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3Qgaz10aGlzLl9yZXBvcnRlclN0YXRlLEU9ay5vYmo7cmV0dXJuIGsub2JqPXt9LEV9LEsucHJvdG90eXBlLmxlYXZlT2Jq'@;
put 'ZWN0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxqPUUub2JqO3JldHVybiBFLm9iaj1rLGp9LEsucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGspe2xldCBFO2NvbnN0IGo9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxWPWsgaW5zdGFuY2VvZiBMO2lmKEU9Vj9rOm5ldyBM'@;
put 'KGoucGF0aC5tYXAoZnVuY3Rpb24oQil7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KEIpKyJdIn0pLmpvaW4oIiIpLGsubWVzc2FnZXx8ayxrLnN0YWNrKSwhai5vcHRpb25zLnBhcnRpYWwpdGhyb3cgRTtyZXR1cm4gVnx8ai5lcnJvcnMucHVzaChFKSxFfSxLLnByb3RvdHlwZS53cmFwUmVz'@;
put 'dWx0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gRS5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Ioayk/bnVsbDprLGVycm9yczpFLmVycm9yc306a30seihMLEVycm9yKSxMLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKGspe2lm'@;
put 'KHRoaXMubWVzc2FnZT1rKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLEwpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChFKXt0aGlz'@;
put 'LnN0YWNrPUUuc3RhY2t9cmV0dXJuIHRoaXN9fSwxNjA6KE0sTyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUih6KXtjb25zdCBLPXt9O3JldHVybiBPYmplY3Qua2V5cyh6KS5mb3JFYWNoKGZ1bmN0aW9uKEwpeygwfEwpPT1MJiYoTHw9MCksS1t6W0xdXT1MfSksS31PLnRhZ0NsYXNzPXsw'@;
put 'OiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sTy50YWdDbGFzc0J5TmFtZT1SKE8udGFnQ2xhc3MpLE8udGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJvYmppZCIsNzoib2Jq'@;
put 'RGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoi'@;
put 'dXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxPLnRhZ0J5TmFtZT1SKE8udGFnKX0sNjgyNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Tzt6Ll9y'@;
put 'ZXZlcnNlPWZ1bmN0aW9uKEspe2NvbnN0IEw9e307cmV0dXJuIE9iamVjdC5rZXlzKEspLmZvckVhY2goZnVuY3Rpb24oayl7KDB8ayk9PWsmJihrfD0wKSxMW0tba11dPWt9KSxMfSx6LmRlcj1SKDE2MCl9LDE2NzE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1S'@;
put 'KDQ1OTApLEw9Uig2NjI1KS5DLGs9UigxOTQ5KSxFPVIoMTYwKTtmdW5jdGlvbiBqKFgpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1YLm5hbWUsdGhpcy5lbnRpdHk9WCx0aGlzLnRyZWU9bmV3IFYsdGhpcy50cmVlLl9pbml0KFguYm9keSl9ZnVuY3Rpb24gVihYKXtrLmNhbGwodGhpcywi'@;
put 'ZGVyIixYKX1mdW5jdGlvbiBCKFgsVSl7bGV0IHE9WC5yZWFkVUludDgoVSk7aWYoWC5pc0Vycm9yKHEpKXJldHVybiBxO2NvbnN0IGVlPUUudGFnQ2xhc3NbcT4+Nl0sdGU9MD09KDMyJnEpO2lmKDMxPT0oMzEmcSkpe2xldCBvZT1xO2ZvcihxPTA7MTI4PT0oMTI4Jm9lKTspe2lmKG9lPVgu'@;
put 'cmVhZFVJbnQ4KFUpLFguaXNFcnJvcihvZSkpcmV0dXJuIG9lO3E8PD03LHF8PTEyNyZvZX19ZWxzZSBxJj0zMTtyZXR1cm57Y2xzOmVlLHByaW1pdGl2ZTp0ZSx0YWc6cSx0YWdTdHI6RS50YWdbcV19fWZ1bmN0aW9uIFkoWCxVLHEpe2xldCBlZT1YLnJlYWRVSW50OChxKTtpZihYLmlzRXJy'@;
put 'b3IoZWUpKXJldHVybiBlZTtpZighVSYmMTI4PT09ZWUpcmV0dXJuIG51bGw7aWYoISgxMjgmZWUpKXJldHVybiBlZTtjb25zdCB0ZT0xMjcmZWU7aWYodGU+NClyZXR1cm4gWC5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO2VlPTA7Zm9yKGxldCBvZT0wO29lPHRlO29lKysp'@;
put 'e2VlPDw9ODtjb25zdCBzZT1YLnJlYWRVSW50OChxKTtpZihYLmlzRXJyb3Ioc2UpKXJldHVybiBzZTtlZXw9c2V9cmV0dXJuIGVlfU0uZXhwb3J0cz1qLGoucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihYLFUpe3JldHVybiBMLmlzRGVjb2RlckJ1ZmZlcihYKXx8KFg9bmV3IEwoWCxVKSks'@;
put 'dGhpcy50cmVlLl9kZWNvZGUoWCxVKX0seihWLGspLFYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKFgsVSxxKXtpZihYLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdCBlZT1YLnNhdmUoKSx0ZT1CKFgsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrVSsnIicpO3JldHVybiBYLmlzRXJyb3Io'@;
put 'dGUpP3RlOihYLnJlc3RvcmUoZWUpLHRlLnRhZz09PVV8fHRlLnRhZ1N0cj09PVV8fHRlLnRhZ1N0cisib2YiPT09VXx8cSl9LFYucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oWCxVLHEpe2NvbnN0IGVlPUIoWCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrVSsnIicpO2lmKFgu'@;
put 'aXNFcnJvcihlZSkpcmV0dXJuIGVlO2xldCB0ZT1ZKFgsZWUucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytVKyciJyk7aWYoWC5pc0Vycm9yKHRlKSlyZXR1cm4gdGU7aWYoIXEmJmVlLnRhZyE9PVUmJmVlLnRhZ1N0ciE9PVUmJmVlLnRhZ1N0cisib2YiIT09VSlyZXR1'@;
put 'cm4gWC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrVSsnIicpO2lmKGVlLnByaW1pdGl2ZXx8bnVsbCE9PXRlKXJldHVybiBYLnNraXAodGUsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytVKyciJyk7Y29uc3Qgb2U9WC5zYXZlKCksc2U9dGhpcy5fc2tpcFVudGlsRW5kKFgs'@;
put 'J0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIFguaXNFcnJvcihzZSk/c2U6KHRlPVgub2Zmc2V0LW9lLm9mZnNldCxYLnJlc3RvcmUob2UpLFguc2tpcCh0ZSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1UrJyInKSl9'@;
put 'LFYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oWCxVKXtmb3IoOzspe2NvbnN0IHE9QihYLFUpO2lmKFguaXNFcnJvcihxKSlyZXR1cm4gcTtjb25zdCBlZT1ZKFgscS5wcmltaXRpdmUsVSk7aWYoWC5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7bGV0IHRlO2lmKHRlPXEucHJpbWl0'@;
put 'aXZlfHxudWxsIT09ZWU/WC5za2lwKGVlKTp0aGlzLl9za2lwVW50aWxFbmQoWCxVKSxYLmlzRXJyb3IodGUpKXJldHVybiB0ZTtpZigiZW5kIj09PXEudGFnU3RyKWJyZWFrfX0sVi5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oWCxVLHEsZWUpe2NvbnN0IHRlPVtdO2Zvcig7IVgu'@;
put 'aXNFbXB0eSgpOyl7Y29uc3Qgb2U9dGhpcy5fcGVla1RhZyhYLCJlbmQiKTtpZihYLmlzRXJyb3Iob2UpKXJldHVybiBvZTtjb25zdCBzZT1xLmRlY29kZShYLCJkZXIiLGVlKTtpZihYLmlzRXJyb3Ioc2UpJiZvZSlicmVhazt0ZS5wdXNoKHNlKX1yZXR1cm4gdGV9LFYucHJvdG90eXBlLl9k'@;
put 'ZWNvZGVTdHI9ZnVuY3Rpb24oWCxVKXtpZigiYml0c3RyIj09PVUpe2NvbnN0IHE9WC5yZWFkVUludDgoKTtyZXR1cm4gWC5pc0Vycm9yKHEpP3E6e3VudXNlZDpxLGRhdGE6WC5yYXcoKX19aWYoImJtcHN0ciI9PT1VKXtjb25zdCBxPVgucmF3KCk7aWYocS5sZW5ndGglMj09MSlyZXR1cm4g'@;
put 'WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtsZXQgZWU9IiI7Zm9yKGxldCB0ZT0wO3RlPHEubGVuZ3RoLzI7dGUrKyllZSs9U3RyaW5nLmZyb21DaGFyQ29kZShxLnJlYWRVSW50MTZCRSgyKnRlKSk7cmV0dXJuIGVlfWlmKCJudW1z'@;
put 'dHIiPT09VSl7Y29uc3QgcT1YLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihxKT9xOlguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09VXx8Im9iakRlc2MiPT09'@;
put 'VSlyZXR1cm4gWC5yYXcoKTtpZigicHJpbnRzdHIiPT09VSl7Y29uc3QgcT1YLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKHEpP3E6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMi'@;
put 'KX1yZXR1cm4vc3RyJC8udGVzdChVKT9YLnJhdygpLnRvU3RyaW5nKCk6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrVSsiIHVuc3VwcG9ydGVkIil9LFYucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihYLFUscSl7bGV0IGVlO2NvbnN0IHRlPVtdO2xldCBvZT0w'@;
put 'LHNlPTA7Zm9yKDshWC5pc0VtcHR5KCk7KXNlPVgucmVhZFVJbnQ4KCksb2U8PD03LG9lfD0xMjcmc2UsISgxMjgmc2UpJiYodGUucHVzaChvZSksb2U9MCk7aWYoMTI4JnNlJiZ0ZS5wdXNoKG9lKSxlZT1xP3RlOlt0ZVswXS80MHwwLHRlWzBdJTQwXS5jb25jYXQodGUuc2xpY2UoMSkpLFUp'@;
put 'e2xldCBjZT1VW2VlLmpvaW4oIiAiKV07dm9pZCAwPT09Y2UmJihjZT1VW2VlLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWNlJiYoZWU9Y2UpfXJldHVybiBlZX0sVi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oWCxVKXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmcoKTtsZXQgZWUsdGUs'@;
put 'b2Usc2UsaGUsdWU7aWYoImdlbnRpbWUiPT09VSllZT0wfHEuc2xpY2UoMCw0KSx0ZT0wfHEuc2xpY2UoNCw2KSxvZT0wfHEuc2xpY2UoNiw4KSxzZT0wfHEuc2xpY2UoOCwxMCksaGU9MHxxLnNsaWNlKDEwLDEyKSx1ZT0wfHEuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09VSly'@;
put 'ZXR1cm4gWC5lcnJvcigiRGVjb2RpbmcgIitVKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO2VlPTB8cS5zbGljZSgwLDIpLHRlPTB8cS5zbGljZSgyLDQpLG9lPTB8cS5zbGljZSg0LDYpLHNlPTB8cS5zbGljZSg2LDgpLGhlPTB8cS5zbGljZSg4LDEwKSx1ZT0wfHEuc2xpY2UoMTAs'@;
put 'MTIpLGVlPWVlPDcwPzJlMytlZToxOTAwK2VlfXJldHVybiBEYXRlLlVUQyhlZSx0ZS0xLG9lLHNlLGhlLHVlLDApfSxWLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxWLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihYKXtjb25zdCBVPVgucmVh'@;
put 'ZFVJbnQ4KCk7cmV0dXJuIFguaXNFcnJvcihVKT9VOjAhPT1VfSxWLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKFgsVSl7Y29uc3QgcT1YLnJhdygpO2xldCBlZT1uZXcgSyhxKTtyZXR1cm4gVSYmKGVlPVVbZWUudG9TdHJpbmcoMTApXXx8ZWUpLGVlfSxWLnByb3RvdHlwZS5fdXNl'@;
put 'PWZ1bmN0aW9uKFgsVSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFgmJihYPVgoVSkpLFguX2dldERlY29kZXIoImRlciIpLnRyZWV9fSw4MzA3OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouZGVyPVIoMTY3MSksei5wZW09Uig5NjMxKX0sOTYzMTooTSxPLFIpPT57InVz'@;
put 'ZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoMjM5OSkuQnVmZmVyLEw9UigxNjcxKTtmdW5jdGlvbiBrKEUpe0wuY2FsbCh0aGlzLEUpLHRoaXMuZW5jPSJwZW0ifXooayxMKSxNLmV4cG9ydHM9ayxrLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oRSxqKXtjb25zdCBWPUUudG9TdHJp'@;
put 'bmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxCPWoubGFiZWwudG9VcHBlckNhc2UoKSxZPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLztsZXQgWD0tMSxVPS0xO2ZvcihsZXQgdGU9MDt0ZTxWLmxlbmd0aDt0ZSsrKXtjb25zdCBvZT1WW3RlXS5tYXRjaChZKTtpZihudWxsIT09b2Um'@;
put 'Jm9lWzJdPT09Qil7aWYoLTEhPT1YKXtpZigiRU5EIiE9PW9lWzFdKWJyZWFrO1U9dGU7YnJlYWt9aWYoIkJFR0lOIiE9PW9lWzFdKWJyZWFrO1g9dGV9fWlmKC0xPT09WHx8LTE9PT1VKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIitCKTtjb25zdCBxPVYu'@;
put 'c2xpY2UoWCsxLFUpLmpvaW4oIiIpO3EucmVwbGFjZSgvW15hLXowLTkrLz1dKy9naSwiIik7Y29uc3QgZWU9Sy5mcm9tKHEsImJhc2U2NCIpO3JldHVybiBMLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGVlLGopfX0sNjk4NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1'@;
put 'NzE3KSxLPVIoMjM5OSkuQnVmZmVyLEw9UigxOTQ5KSxrPVIoMTYwKTtmdW5jdGlvbiBFKEIpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1CLm5hbWUsdGhpcy5lbnRpdHk9Qix0aGlzLnRyZWU9bmV3IGosdGhpcy50cmVlLl9pbml0KEIuYm9keSl9ZnVuY3Rpb24gaihCKXtMLmNhbGwodGhp'@;
put 'cywiZGVyIixCKX1mdW5jdGlvbiBWKEIpe3JldHVybiBCPDEwPyIwIitCOkJ9TS5leHBvcnRzPUUsRS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKEIsWSkuam9pbigpfSx6KGosTCksai5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1m'@;
put 'dW5jdGlvbihCLFksWCxVKXtjb25zdCBxPWZ1bmN0aW9uKG9lLHNlLGhlLHVlKXtsZXQgY2U7aWYoInNlcW9mIj09PW9lP29lPSJzZXEiOiJzZXRvZiI9PT1vZSYmKG9lPSJzZXQiKSxrLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShvZSkpY2U9ay50YWdCeU5hbWVbb2VdO2Vsc2V7aWYoIm51'@;
put 'bWJlciIhPXR5cGVvZiBvZXx8KDB8b2UpIT09b2UpcmV0dXJuIHVlLmVycm9yKCJVbmtub3duIHRhZzogIitvZSk7Y2U9b2V9cmV0dXJuIGNlPj0zMT91ZS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KHNlfHwoY2V8PTMyKSxjZXw9ay50YWdDbGFzc0J5'@;
put 'TmFtZVtoZXx8InVuaXZlcnNhbCJdPDw2LGNlKX0oQixZLFgsdGhpcy5yZXBvcnRlcik7aWYoVS5sZW5ndGg8MTI4KXtjb25zdCBvZT1LLmFsbG9jKDIpO3JldHVybiBvZVswXT1xLG9lWzFdPVUubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW29lLFVdKX1sZXQgZWU9MTtmb3Io'@;
put 'bGV0IG9lPVUubGVuZ3RoO29lPj0yNTY7b2U+Pj04KWVlKys7Y29uc3QgdGU9Sy5hbGxvYygyK2VlKTt0ZVswXT1xLHRlWzFdPTEyOHxlZTtmb3IobGV0IG9lPTErZWUsc2U9VS5sZW5ndGg7c2U+MDtvZS0tLHNlPj49OCl0ZVtvZV09MjU1JnNlO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVy'@;
put 'QnVmZmVyKFt0ZSxVXSl9LGoucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oQixZKXtpZigiYml0c3RyIj09PVkpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8Qi51bnVzZWQsQi5kYXRhXSk7aWYoImJtcHN0ciI9PT1ZKXtjb25zdCBYPUsuYWxsb2MoMipCLmxlbmd0'@;
put 'aCk7Zm9yKGxldCBVPTA7VTxCLmxlbmd0aDtVKyspWC53cml0ZVVJbnQxNkJFKEIuY2hhckNvZGVBdChVKSwyKlUpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFgpfXJldHVybiJudW1zdHIiPT09WT90aGlzLl9pc051bXN0cihCKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVy'@;
put 'KEIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PVk/dGhpcy5faXNQcmludHN0cihCKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpOnRoaXMucmVwb3J0'@;
put 'ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1h'@;
put 'LCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3QoWSl8fCJvYmpEZXNjIj09PVk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitZ'@;
put 'KyIgdW5zdXBwb3J0ZWQiKX0sai5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEIsWSxYKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYo'@;
put 'IVkuaGFzT3duUHJvcGVydHkoQikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7Qj1ZW0JdLnNwbGl0KC9bXHMuXSsvZyk7Zm9yKGxldCB0ZT0wO3RlPEIubGVuZ3RoO3RlKyspQlt0ZV18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5'@;
put 'KEIpKXtCPUIuc2xpY2UoKTtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKylCW3RlXXw9MH1pZighQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5n'@;
put 'aWZ5KEIpKTtpZighWCl7aWYoQlsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0Iuc3BsaWNlKDAsMiw0MCpCWzBdK0JbMV0pfWxldCBVPTA7Zm9yKGxldCB0ZT0wO3RlPEIubGVuZ3RoO3RlKyspe2xldCBvZT1CW3RlXTtm'@;
put 'b3IoVSsrO29lPj0xMjg7b2U+Pj03KVUrK31jb25zdCBxPUsuYWxsb2MoVSk7bGV0IGVlPXEubGVuZ3RoLTE7Zm9yKGxldCB0ZT1CLmxlbmd0aC0xO3RlPj0wO3RlLS0pe2xldCBvZT1CW3RlXTtmb3IocVtlZS0tXT0xMjcmb2U7KG9lPj49Nyk+MDspcVtlZS0tXT0xMjh8MTI3Jm9lfXJldHVy'@;
put 'biB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEpfSxqLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihCLFkpe2xldCBYO2NvbnN0IFU9bmV3IERhdGUoQik7cmV0dXJuImdlbnRpbWUiPT09WT9YPVtWKFUuZ2V0VVRDRnVsbFllYXIoKSksVihVLmdldFVUQ01vbnRoKCkrMSksVihV'@;
put 'LmdldFVUQ0RhdGUoKSksVihVLmdldFVUQ0hvdXJzKCkpLFYoVS5nZXRVVENNaW51dGVzKCkpLFYoVS5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09WT9YPVtWKFUuZ2V0VVRDRnVsbFllYXIoKSUxMDApLFYoVS5nZXRVVENNb250aCgpKzEpLFYoVS5nZXRVVENE'@;
put 'YXRlKCkpLFYoVS5nZXRVVENIb3VycygpKSxWKFUuZ2V0VVRDTWludXRlcygpKSxWKFUuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrWSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoWCwi'@;
put 'b2N0c3RyIil9LGoucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxqLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKEIsWSl7aWYoInN0cmluZyI9PXR5cGVvZiBCKXtpZighWSlyZXR1cm4gdGhpcy5yZXBv'@;
put 'cnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFZLmhhc093blByb3BlcnR5KEIpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShCKSk7Qj1ZW0Jd'@;
put 'fWlmKCJudW1iZXIiIT10eXBlb2YgQiYmIUsuaXNCdWZmZXIoQikpe2NvbnN0IHE9Qi50b0FycmF5KCk7IUIuc2lnbiYmMTI4JnFbMF0mJnEudW5zaGlmdCgwKSxCPUsuZnJvbShxKX1pZihLLmlzQnVmZmVyKEIpKXtsZXQgcT1CLmxlbmd0aDswPT09Qi5sZW5ndGgmJnErKztjb25zdCBlZT1L'@;
put 'LmFsbG9jKHEpO3JldHVybiBCLmNvcHkoZWUpLDA9PT1CLmxlbmd0aCYmKGVlWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZWUpfWlmKEI8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpO2lmKEI8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVm'@;
put 'ZmVyKFswLEJdKTtsZXQgWD0xO2ZvcihsZXQgcT1CO3E+PTI1NjtxPj49OClYKys7Y29uc3QgVT1uZXcgQXJyYXkoWCk7Zm9yKGxldCBxPVUubGVuZ3RoLTE7cT49MDtxLS0pVVtxXT0yNTUmQixCPj49ODtyZXR1cm4gMTI4JlVbMF0mJlUudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVy'@;
put 'QnVmZmVyKEsuZnJvbShVKSl9LGoucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEI/MjU1OjApfSxqLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEIsWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEImJihCPUIoWSkp'@;
put 'LEIuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LGoucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihCLFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7bGV0IHE7aWYobnVsbD09PVUuZGVmYXVsdClyZXR1cm4hMTtjb25zdCBlZT1CLmpvaW4oKTtpZih2b2lkIDA9PT1VLmRlZmF1'@;
put 'bHRCdWZmZXImJihVLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVS5kZWZhdWx0LFksWCkuam9pbigpKSxlZS5sZW5ndGghPT1VLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihxPTA7cTxlZS5sZW5ndGg7cSsrKWlmKGVlW3FdIT09VS5kZWZhdWx0QnVmZmVyW3Fd'@;
put 'KXJldHVybiExO3JldHVybiEwfX0sNjU3OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Tzt6LmRlcj1SKDY5ODQpLHoucGVtPVIoMjg4Myl9LDI4ODM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1SKDY5ODQpO2Z1bmN0aW9uIEwoayl7Sy5jYWxsKHRo'@;
put 'aXMsayksdGhpcy5lbmM9InBlbSJ9eihMLEspLE0uZXhwb3J0cz1MLEwucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9Sy5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxrKS50b1N0cmluZygiYmFzZTY0IiksVj1bIi0tLS0tQkVHSU4gIitFLmxhYmVsKyItLS0tLSJd'@;
put 'O2ZvcihsZXQgQj0wO0I8ai5sZW5ndGg7Qis9NjQpVi5wdXNoKGouc2xpY2UoQixCKzY0KSk7cmV0dXJuIFYucHVzaCgiLS0tLS1FTkQgIitFLmxhYmVsKyItLS0tLSIpLFYuam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5j'@;
put 'dGlvbiBMKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVj'@;
put 'dG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxD'@;
put 'fHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoOTUwKS5CdWZmZXJ9Y2F0Y2h7fWZ1'@;
put 'bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShn'@;
put 'LEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5z'@;
put 'dGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7'@;
put 'cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7Imhl'@;
put 'eCI9PT1DJiYoQz0xNiksTChDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMu'@;
put 'X3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4'@;
put 'NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihMKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYz'@;
put 'LDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoTCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jk'@;
put 'cz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZv'@;
put 'cih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9y'@;
put 'KHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5w'@;
put 'cm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9'@;
put 'MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5s'@;
put 'ZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRo'@;
put 'aXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRo'@;
put 'aXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/'@;
put 'dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cu'@;
put 'bGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9y'@;
put 'KDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5f'@;
put 'bm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1S'@;
put 'OiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYs'@;
put 'Niw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3'@;
put 'NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUs'@;
put 'NjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mu'@;
put 'd29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsSWU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRz'@;
put 'W2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStJZSkvNjcxMDg4NjR8MCxJZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8SWUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24o'@;
put 'ZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQt'@;
put 'diYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0i'@;
put 'LSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgSWU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5p'@;
put 'c1plcm8oKT9JZStTOlhbZGUtSWUubGVuZ3RoXStJZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUwoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0s'@;
put 'RS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQq'@;
put 'dGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZMKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJv'@;
put 'dG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEwodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5'@;
put 'TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0wodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEwocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFy'@;
put 'IHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0w'@;
put 'O2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIg'@;
put 'Qz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9'@;
put 'ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhp'@;
put 'cy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFy'@;
put 'IFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25l'@;
put 'KCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwo'@;
put 'dGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcu'@;
put 'd29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0'@;
put 'aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0'@;
put 'aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlh'@;
put 'bmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/'@;
put 'KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9'@;
put 'Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3Ro'@;
put 'aXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5j'@;
put 'dGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRo'@;
put 'aXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7TCgibnVtYmVyIj09dHlwZW9m'@;
put 'IGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7'@;
put 'aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0w'@;
put 'LEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8'@;
put 'di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMu'@;
put 'bGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVn'@;
put 'YXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6'@;
put 'Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0'@;
put 'aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1n'@;
put 'KTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4y'@;
put 'Nix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVn'@;
put 'YXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLEllPTgx'@;
put 'OTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhl'@;
put 'LGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxvdD0wfEpbN10sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49'@;
put 'V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEx0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9'@;
put 'RHQ+Pj4xMyxMbj0wfG5lWzZdLHp0PTgxOTEmTG4seW49TG4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sRm49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5u'@;
put 'ZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChJZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSWUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFy'@;
put 'Jj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChRZSxlbil8MCx3PU1hdGguaW11'@;
put 'bChRZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'SWUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAs'@;
put 'dz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHc9dytNYXRoLmltdWwoUWUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRo'@;
put 'LmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4p'@;
put 'fDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxm'@;
put 'bil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsdz13K01hdGguaW11bChRZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoSWUsTHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxRdCl8MCkrTWF0aC5pbXVsKEZlLEx0KXwwKSk8PDEz'@;
put 'KXwwO2ZlPSgodz13K01hdGguaW11bChGZSxRdCl8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChU'@;
put 'ZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0'@;
put 'KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLHc9dytNYXRoLmltdWwoUWUsbW4pfDAsdj12K01hdGguaW11bChqZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsTHQpfDAs'@;
put 'dz13K01hdGguaW11bChXZSxRdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVsKEllLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDAp'@;
put 'Kyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVs'@;
put 'KGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'UGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsTHQpfDAscD0ocD1wK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEx0KXwwLHc9dytNYXRoLmltdWwoUWUsUXQpfDAsdj12K01hdGguaW11bChqZSxwdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkp'@;
put 'PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmlt'@;
put 'dWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bCho'@;
put 'dCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsTHQpfDAscD0ocD1wK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEx0'@;
put 'KXwwLHc9dytNYXRoLmltdWwoYmUsUXQpfDAsdj12K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsdz13K01hdGguaW11bChRZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4p'@;
put 'fDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11'@;
put 'bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUs'@;
put 'TnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmltdWwocWUsTHQpfDAsdz13K01hdGguaW11bChxZSxRdCl8'@;
put 'MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLHc9'@;
put 'dytNYXRoLmltdWwoUWUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'cCtNYXRoLmltdWwoSWUsRm4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsRm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmlt'@;
put 'dWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0'@;
put 'LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsTHQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKGh0LEx0KXwwLHc9dytNYXRoLmltdWwoaHQsUXQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYr'@;
put 'TWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLHc9dytNYXRo'@;
put 'LmltdWwoUWUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEZuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxGbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKEllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo'@;
put 'LmltdWwoSWUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4s'@;
put 'ZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXww'@;
put 'KStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEx0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxMdCl8MCx3PXcrTWF0aC5pbXVsKHplLFF0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxGbil8MCkrTWF0aC5pbXVsKFFlLCR0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'UWUsRm4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxy'@;
put 'byY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsTHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxRdCl8MCkrTWF0aC5pbXVsKE10LEx0KXwwLHc9dytNYXRoLmltdWwoTXQsUXQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRo'@;
put 'LmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxGbil8MDt2YXIgaW89KGZlKyh2PXYr'@;
put 'TWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChV'@;
put 'dCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsTHQpfDAscD0ocD1wK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEx0KXwwLHc9dytNYXRoLmltdWwob24sUXQpfDAsdj12K01h'@;
put 'dGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEZuKXwwKStNYXRoLmltdWwo'@;
put 'cWUsJHQpfDAsdz13K01hdGguaW11bChxZSxGbil8MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxMdCkscD0ocD1NYXRoLmltdWwoVXQsUXQpKStNYXRoLmltdWwoYm4sTHQpfDAsdz1NYXRoLmltdWwoYm4sUXQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkr'@;
put 'TWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxGbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsRm4pfDA7dmFyIGhvPShmZSso'@;
put 'dj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmlt'@;
put 'dWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9'@;
put 'ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01h'@;
put 'dGguaW11bCh6ZSxGbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+'@;
put 'PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNu'@;
put 'KXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxGbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEm'@;
put 'KHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStN'@;
put 'YXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxGbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sRm4pfDA7dmFyIElvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVs'@;
put 'KFV0LEZuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLEZuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmlt'@;
put 'dWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmlt'@;
put 'dWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09'@;
put 'R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUlvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMu'@;
put 'eD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEw'@;
put 'MjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIEllPTY3MTA4ODYzJm5lLEZlPU1h'@;
put 'dGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0llPTY3MTA4ODYzJihLZT1LZStJZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2Uv'@;
put 'NjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUllLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtl'@;
put 'UkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09'@;
put 'Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJv'@;
put 'dG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7'@;
put 'eGUrPW5lKWZvcih2YXIgSWU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sUWU9SWUqS2UtRmUqWWU7WWU9SWUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPVFlKSx2W3hlK09lXT1XZStZZSxT'@;
put 'W3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKFFlPWRlKkllLWZlKkZlLEZlPWRlKkZlK2ZlKkllLEllPVFlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7'@;
put 'UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mt'@;
put 'di0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6'@;
put 'cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNb'@;
put 'd109MDtMKDA9PT1wKSxMKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNz'@;
put 'TGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksSWU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7'@;
put 'RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLEllLHYscCk7Zm9yKHZhciBPZT0wO09l'@;
put 'PHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkllW09lXTtkZVtPZV09bmVbT2VdKkllW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRl'@;
put 'KEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9'@;
put 'bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90'@;
put 'eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyksTChnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgw'@;
put 'fHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5'@;
put 'cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJv'@;
put 'dG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigw'@;
put 'PT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7'@;
put 'cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFy'@;
put 'IEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53'@;
put 'b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVz'@;
put 'aHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1h'@;
put 'eCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53'@;
put 'b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhl'@;
put 'Jkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gTCgwPT09dGhpcy5u'@;
put 'ZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJu'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy'@;
put 'IEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBMKDA9PT10aGlz'@;
put 'Lm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNe'@;
put 'NjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQp'@;
put 'LGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRo'@;
put 'aXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9'@;
put 'PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8Njcx'@;
put 'MDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDAp'@;
put 'dGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnBy'@;
put 'b3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAs'@;
put 'dGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disr'@;
put 'KXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditT'@;
put 'XSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEwoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0'@;
put 'dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5p'@;
put 'dXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndv'@;
put 'cmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgSWU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYu'@;
put 'd29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihJZT1NYXRoLm1pbihJZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsSWUseGUpOzAhPT12Lm5lZ2F0aXZlOylJZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtK'@;
put 'JiYoSi53b3Jkc1t4ZV09SWUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEwoIWcuaXNaZXJvKCkpLHRoaXMuaXNa'@;
put 'ZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUm'@;
put 'JnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlz'@;
put 'Lm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1n'@;
put 'Lmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1sw'@;
put 'XSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUu'@;
put 'cHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5u'@;
put 'ZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1'@;
put 'bmN0aW9uKGcpe0woZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtMKGc8PTY3MTA4ODYzKTtmb3IodmFy'@;
put 'IEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRp'@;
put 'dm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcg'@;
put 'RSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsSWU9MTshKEMud29yZHNbMF0mSWUpJiZ4ZTwyNjsr'@;
put 'K3hlLEllPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUs'@;
put 'T2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3Vi'@;
put 'KEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0Mu'@;
put 'dW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4o'@;
put 'bmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4o'@;
put 'MSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcu'@;
put 'YWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzsp'@;
put 'e2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUu'@;
put 'cHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53'@;
put 'b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJl'@;
put 'dHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0'@;
put 'aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVn'@;
put 'YXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxMKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1n'@;
put 'PzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7'@;
put 'dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlz'@;
put 'Lmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90'@;
put 'eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxF'@;
put 'LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxMKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3Jj'@;
put 'ZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRk'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1'@;
put 'Yj1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0'@;
put 'aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0'@;
put 'aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1m'@;
put 'dW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElT'@;
put 'cXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVl'@;
put 'KGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAw'@;
put 'MDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgTChnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiks'@;
put 'dGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlm'@;
put 'dCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRo'@;
put 'aXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3Ro'@;
put 'aXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9T'@;
put 'LmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxr'@;
put 'KGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9p'@;
put 'ZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09'@;
put 'MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndv'@;
put 'cmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90'@;
put 'eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJp'@;
put 'bWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3du'@;
put 'IHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0s'@;
put 'SC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtMKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5'@;
put 'cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0'@;
put 'aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUu'@;
put 'aWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1'@;
put 'cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBl'@;
put 'LnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5j'@;
put 'dGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcp'@;
put 'fSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoTChDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9y'@;
put 'KHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtMKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5i'@;
put 'aXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLEllPXRoaXMucG93KGcsdiks'@;
put 'RmU9cDswIT09SWUuY21wKHcpOyl7Zm9yKHZhciBPZT1JZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtMKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLEllPUll'@;
put 'LnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBl'@;
put 'LnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5s'@;
put 'ZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9'@;
put 'ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rp'@;
put 'b24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhO'@;
put 'LEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGws'@;
put 'Q30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku'@;
put 'bXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihn'@;
put 'LEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0'@;
put 'aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhp'@;
put 'cy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDkyODI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KTtmdW5jdGlvbiBMKGZlKXtyZXR1cm4oTD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9s'@;
put 'Ij09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih4ZSl7cmV0dXJuIHR5cGVvZiB4ZX06ZnVuY3Rpb24oeGUpe3JldHVybiB4ZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmeGUuY29uc3RydWN0b3I9PT1TeW1ib2wmJnhlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0'@;
put 'eXBlb2YgeGV9KShmZSl9dmFyIGssRSxqPVIoMjEzNikuY29kZXMsVj1qLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsQj1qLkVSUl9JTlZBTElEX0FSR19UWVBFLFk9ai5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsWD1qLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxVPWouRVJSX01JU1NJTkdfQVJH'@;
put 'UyxxPVIoNTk2MSksZWU9Uig5NTM5KS5pbnNwZWN0LHRlPVIoOTUzOSkudHlwZXMsb2U9dGUuaXNQcm9taXNlLHNlPXRlLmlzUmVnRXhwLGhlPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbjpSKDgwOTEpLmFzc2lnbix1ZT1PYmplY3QuaXM/T2JqZWN0LmlzOlIoNjA5KTtmdW5jdGlvbiBj'@;
put 'ZSgpe3ZhciBmZT1SKDkxNTgpO2s9ZmUuaXNEZWVwRXF1YWwsRT1mZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRz0hMSxiPU0uZXhwb3J0cz1nLEQ9e307ZnVuY3Rpb24gSChmZSl7dGhyb3cgZmUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP2ZlLm1lc3NhZ2U6bmV3IHEoZmUpfWZ1bmN0aW9u'@;
put 'IE4oZmUseGUsSWUsRmUpe2lmKCFJZSl7dmFyIE9lPSExO2lmKDA9PT14ZSlPZT0hMCxGZT0iTm8gdmFsdWUgYXJndW1lbnQgcGFzc2VkIHRvIGBhc3NlcnQub2soKWAiO2Vsc2UgaWYoRmUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBGZTt2YXIgamU9bmV3IHEoe2FjdHVhbDpJZSxleHBlY3Rl'@;
put 'ZDohMCxtZXNzYWdlOkZlLG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOmZlfSk7dGhyb3cgamUuZ2VuZXJhdGVkTWVzc2FnZT1PZSxqZX19ZnVuY3Rpb24gZygpe2Zvcih2YXIgZmU9YXJndW1lbnRzLmxlbmd0aCx4ZT1uZXcgQXJyYXkoZmUpLEllPTA7SWU8ZmU7SWUrKyl4ZVtJZV09YXJn'@;
put 'dW1lbnRzW0llXTtOLmFwcGx5KHZvaWQgMCxbZyx4ZS5sZW5ndGhdLmNvbmNhdCh4ZSkpfWIuZmFpbD1mdW5jdGlvbiBmZSh4ZSxJZSxGZSxPZSxqZSl7dmFyIFdlLEtlPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PUtlP1dlPSJGYWlsZWQiOjE9PT1LZT8oRmU9eGUseGU9dm9pZCAwKTooITE9'@;
put 'PT1HJiYoRz0hMCwoei5lbWl0V2FybmluZz96LmVtaXRXYXJuaW5nOksud2Fybi5iaW5kKEspKSgiYXNzZXJ0LmZhaWwoKSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhc3NlcnQuc3RyaWN0RXF1YWwoKSBpbnN0ZWFkIG9yIG9ubHkgcGFz'@;
put 'cyBhIG1lc3NhZ2UuIiwiRGVwcmVjYXRpb25XYXJuaW5nIiwiREVQMDA5NCIpKSwyPT09S2UmJihPZT0iIT0iKSksRmUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBGZTt2YXIgWWU9e2FjdHVhbDp4ZSxleHBlY3RlZDpJZSxvcGVyYXRvcjp2b2lkIDA9PT1PZT8iZmFpbCI6T2Usc3RhY2tTdGFy'@;
put 'dEZuOmplfHxmZX07dm9pZCAwIT09RmUmJihZZS5tZXNzYWdlPUZlKTt2YXIgUWU9bmV3IHEoWWUpO3Rocm93IFdlJiYoUWUubWVzc2FnZT1XZSxRZS5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxRZX0sYi5Bc3NlcnRpb25FcnJvcj1xLGIub2s9ZyxiLmVxdWFsPWZ1bmN0aW9uIGZlKHhlLEllLEZl'@;
put 'KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7eGUhPUllJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6SWUsbWVzc2FnZTpGZSxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLEllLEZl'@;
put 'KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7eGU9PUllJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6SWUsbWVzc2FnZTpGZSxvcGVyYXRvcjoiIT0iLHN0YWNrU3RhcnRGbjpmZX0pfSxiLmRlZXBFcXVhbD1mdW5jdGlvbiBmZSh4ZSxJZSxG'@;
put 'ZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksayh4ZSxJZSl8fEgoe2FjdHVhbDp4ZSxleHBlY3RlZDpJZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5v'@;
put 'dERlZXBFcXVhbD1mdW5jdGlvbiBmZSh4ZSxJZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksayh4ZSxJZSkmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpJZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3RE'@;
put 'ZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxJZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksRSh4ZSxJZSl8fEgoe2FjdHVhbDp4ZSxl'@;
put 'eHBlY3RlZDpJZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxJZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIp'@;
put 'O3ZvaWQgMD09PWsmJmNlKCksRSh4ZSxJZSkmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpJZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3REZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLnN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLEllLEZlKXtpZihhcmd1bWVudHMubGVu'@;
put 'Z3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dWUoeGUsSWUpfHxIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6SWUsbWVzc2FnZTpGZSxvcGVyYXRvcjoic3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLEllLEZl'@;
put 'KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dWUoeGUsSWUpJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6SWUsbWVzc2FnZTpGZSxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfTt2YXIgQz1mdW5jdGlvbiBm'@;
put 'ZSh4ZSxJZSxGZSl7dmFyIE9lPXRoaXM7KGZ1bmN0aW9uKGplLFdlKXtpZighKGplIGluc3RhbmNlb2YgV2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxmZSksSWUuZm9yRWFjaChmdW5jdGlvbihqZSl7amUgaW4geGUm'@;
put 'JihPZVtqZV09dm9pZCAwIT09RmUmJiJzdHJpbmciPT10eXBlb2YgRmVbamVdJiZzZSh4ZVtqZV0pJiZ4ZVtqZV0udGVzdChGZVtqZV0pP0ZlW2plXTp4ZVtqZV0pfSl9O2Z1bmN0aW9uIFMoZmUseGUsSWUsRmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZSl7aWYoc2UoeGUpKXJldHVybiB4'@;
put 'ZS50ZXN0KGZlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgQigiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSx4ZSk7aWYoIm9iamVjdCIhPT1MKGZlKXx8bnVsbD09PWZlKXt2YXIgT2U9bmV3IHEoe2FjdHVhbDpmZSxleHBlY3RlZDp4ZSxtZXNzYWdlOkllLG9w'@;
put 'ZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpGZX0pO3Rocm93IE9lLm9wZXJhdG9yPUZlLm5hbWUsT2V9dmFyIGplPU9iamVjdC5rZXlzKHhlKTtpZih4ZSBpbnN0YW5jZW9mIEVycm9yKWplLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09amUubGVuZ3Ro'@;
put 'KXRocm93IG5ldyBZKCJlcnJvciIseGUsIm1heSBub3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PWsmJmNlKCksamUuZm9yRWFjaChmdW5jdGlvbihXZSl7InN0cmluZyI9PXR5cGVvZiBmZVtXZV0mJnNlKHhlW1dlXSkmJnhlW1dlXS50ZXN0KGZlW1dlXSl8fGZ1bmN0'@;
put 'aW9uKEtlLFllLFFlLGx0LFBlLGJlKXtpZighKFFlIGluIEtlKXx8IUUoS2VbUWVdLFllW1FlXSkpe2lmKCFsdCl7dmFyIEFlPW5ldyBDKEtlLFBlKSxUZT1uZXcgQyhZZSxQZSxLZSkscWU9bmV3IHEoe2FjdHVhbDpBZSxleHBlY3RlZDpUZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixz'@;
put 'dGFja1N0YXJ0Rm46YmV9KTt0aHJvdyBxZS5hY3R1YWw9S2UscWUuZXhwZWN0ZWQ9WWUscWUub3BlcmF0b3I9YmUubmFtZSxxZX1IKHthY3R1YWw6S2UsZXhwZWN0ZWQ6WWUsbWVzc2FnZTpsdCxvcGVyYXRvcjpiZS5uYW1lLHN0YWNrU3RhcnRGbjpiZX0pfX0oZmUseGUsV2UsSWUsamUsRmUp'@;
put 'fSksITB9cmV0dXJuIHZvaWQgMCE9PXhlLnByb3RvdHlwZSYmZmUgaW5zdGFuY2VvZiB4ZXx8IUVycm9yLmlzUHJvdG90eXBlT2YoeGUpJiYhMD09PXhlLmNhbGwoe30sZmUpfWZ1bmN0aW9uIHYoZmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmZSl0aHJvdyBuZXcgQigiZm4iLCJGdW5jdGlv'@;
put 'biIsZmUpO3RyeXtmZSgpfWNhdGNoKHhlKXtyZXR1cm4geGV9cmV0dXJuIER9ZnVuY3Rpb24gcChmZSl7cmV0dXJuIG9lKGZlKXx8bnVsbCE9PWZlJiYib2JqZWN0Ij09PUwoZmUpJiYiZnVuY3Rpb24iPT10eXBlb2YgZmUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIGZlLmNhdGNofWZ1bmN0'@;
put 'aW9uIHcoZmUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHhlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmZSl7aWYoIXAoeGU9ZmUoKSkpdGhyb3cgbmV3IFgoImluc3RhbmNlIG9mIFByb21pc2UiLCJwcm9taXNlRm4iLHhlKX1lbHNle2lmKCFwKGZlKSl0'@;
put 'aHJvdyBuZXcgQigicHJvbWlzZUZuIixbIkZ1bmN0aW9uIiwiUHJvbWlzZSJdLGZlKTt4ZT1mZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB4ZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gRH0pLmNhdGNoKGZ1bmN0aW9uKEllKXtyZXR1cm4gSWV9'@;
put 'KX0pfWZ1bmN0aW9uIEooZmUseGUsSWUsRmUpe2lmKCJzdHJpbmciPT10eXBlb2YgSWUpe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBCKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sSWUpO2lmKCJvYmplY3QiPT09TCh4ZSkmJm51bGwh'@;
put 'PT14ZSl7aWYoeGUubWVzc2FnZT09PUllKXRocm93IG5ldyBWKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yIG1lc3NhZ2UgIicuY29uY2F0KHhlLm1lc3NhZ2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKX1lbHNlIGlmKHhlPT09SWUpdGhyb3cgbmV3IFYoImVycm9yL21l'@;
put 'c3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KHhlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSk7RmU9SWUsSWU9dm9pZCAwfWVsc2UgaWYobnVsbCE9SWUmJiJvYmplY3QiIT09TChJZSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBJZSl0aHJvdyBuZXcgQigiZXJyb3IiLFsiT2Jq'@;
put 'ZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLEllKTtpZih4ZT09PUQpe3ZhciBPZT0iIjtJZSYmSWUubmFtZSYmKE9lKz0iICgiLmNvbmNhdChJZS5uYW1lLCIpIikpLE9lKz1GZT8iOiAiLmNvbmNhdChGZSk6Ii4iLEgoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6SWUsb3BlcmF0'@;
put 'b3I6ZmUubmFtZSxtZXNzYWdlOiJNaXNzaW5nIGV4cGVjdGVkICIuY29uY2F0KCJyZWplY3RzIj09PWZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChPZSksc3RhY2tTdGFydEZuOmZlfSl9aWYoSWUmJiFTKHhlLEllLEZlLGZlKSl0aHJvdyB4ZX1mdW5jdGlvbiBuZShm'@;
put 'ZSx4ZSxJZSxGZSl7aWYoeGUhPT1EKXtpZigic3RyaW5nIj09dHlwZW9mIEllJiYoRmU9SWUsSWU9dm9pZCAwKSwhSWV8fFMoeGUsSWUpKXt2YXIgT2U9RmU/IjogIi5jb25jYXQoRmUpOiIuIjtIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6SWUsb3BlcmF0b3I6ZmUubmFtZSxtZXNzYWdlOiJHb3Qg'@;
put 'dW53YW50ZWQgIi5jb25jYXQoImRvZXNOb3RSZWplY3QiPT09ZmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KE9lLCJcbiIpKydBY3R1YWwgbWVzc2FnZTogIicuY29uY2F0KHhlJiZ4ZS5tZXNzYWdlLCciJyksc3RhY2tTdGFydEZuOmZlfSl9dGhyb3cgeGV9fWZ1bmN0'@;
put 'aW9uIGRlKCl7Zm9yKHZhciBmZT1hcmd1bWVudHMubGVuZ3RoLHhlPW5ldyBBcnJheShmZSksSWU9MDtJZTxmZTtJZSsrKXhlW0llXT1hcmd1bWVudHNbSWVdO04uYXBwbHkodm9pZCAwLFtkZSx4ZS5sZW5ndGhdLmNvbmNhdCh4ZSkpfWIudGhyb3dzPWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFy'@;
put 'IEllPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFycmF5KEllPjE/SWUtMTowKSxPZT0xO09lPEllO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtKLmFwcGx5KHZvaWQgMCxbZmUsdih4ZSldLmNvbmNhdChGZSkpfSxiLnJlamVjdHM9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2YXIgSWU9YXJn'@;
put 'dW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXkoSWU+MT9JZS0xOjApLE9lPTE7T2U8SWU7T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO3JldHVybiB3KHhlKS50aGVuKGZ1bmN0aW9uKGplKXtyZXR1cm4gSi5hcHBseSh2b2lkIDAsW2ZlLGplXS5jb25jYXQoRmUpKX0pfSxiLmRvZXNOb3RU'@;
put 'aHJvdz1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBJZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5ldyBBcnJheShJZT4xP0llLTE6MCksT2U9MTtPZTxJZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07bmUuYXBwbHkodm9pZCAwLFtmZSx2KHhlKV0uY29uY2F0KEZlKSl9LGIuZG9lc05vdFJl'@;
put 'amVjdD1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBJZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5ldyBBcnJheShJZT4xP0llLTE6MCksT2U9MTtPZTxJZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07cmV0dXJuIHcoeGUpLnRoZW4oZnVuY3Rpb24oamUpe3JldHVybiBuZS5hcHBseSh2b2lk'@;
put 'IDAsW2ZlLGplXS5jb25jYXQoRmUpKX0pfSxiLmlmRXJyb3I9ZnVuY3Rpb24gZmUoeGUpe2lmKG51bGwhPXhlKXt2YXIgSWU9ImlmRXJyb3IgZ290IHVud2FudGVkIGV4Y2VwdGlvbjogIjsib2JqZWN0Ij09PUwoeGUpJiYic3RyaW5nIj09dHlwZW9mIHhlLm1lc3NhZ2U/SWUrPTA9PT14ZS5t'@;
put 'ZXNzYWdlLmxlbmd0aCYmeGUuY29uc3RydWN0b3I/eGUuY29uc3RydWN0b3IubmFtZTp4ZS5tZXNzYWdlOkllKz1lZSh4ZSk7dmFyIEZlPW5ldyBxKHthY3R1YWw6eGUsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTpJZSxzdGFja1N0YXJ0Rm46ZmV9KSxPZT14ZS5z'@;
put 'dGFjaztpZigic3RyaW5nIj09dHlwZW9mIE9lKXt2YXIgamU9T2Uuc3BsaXQoIlxuIik7amUuc2hpZnQoKTtmb3IodmFyIFdlPUZlLnN0YWNrLnNwbGl0KCJcbiIpLEtlPTA7S2U8amUubGVuZ3RoO0tlKyspe3ZhciBZZT1XZS5pbmRleE9mKGplW0tlXSk7aWYoLTEhPT1ZZSl7V2U9V2Uuc2xp'@;
put 'Y2UoMCxZZSk7YnJlYWt9fUZlLnN0YWNrPSIiLmNvbmNhdChXZS5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdChqZS5qb2luKCJcbiIpKX10aHJvdyBGZX19LGIuc3RyaWN0PWhlKGRlLGIse2VxdWFsOmIuc3RyaWN0RXF1YWwsZGVlcEVxdWFsOmIuZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOmIu'@;
put 'bm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmIubm90RGVlcFN0cmljdEVxdWFsfSksYi5zdHJpY3Quc3RyaWN0PWIuc3RyaWN0fSw1OTYxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKE4sZyxDKXtyZXR1cm4gZyBpbiBOP09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShOLGcse3ZhbHVlOkMsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpOW2ddPUMsTn1mdW5jdGlvbiBrKE4sZyl7cmV0dXJuIWd8fCJvYmplY3QiIT09WChnKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGc/RShOKTpnfWZ1bmN0aW9uIEUoTil7aWYodm9p'@;
put 'ZCAwPT09Til0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBOfWZ1bmN0aW9uIGooTil7dmFyIGc9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1'@;
put 'cm4gaj1mdW5jdGlvbihDKXtpZihudWxsPT09Q3x8LTE9PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEMpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSlyZXR1cm4gQztpZigiZnVuY3Rpb24iIT10eXBlb2YgQyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0'@;
put 'aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHZvaWQgMCE9PWcpe2lmKGcuaGFzKEMpKXJldHVybiBnLmdldChDKTtnLnNldChDLHYpfWZ1bmN0aW9uIHYoKXtyZXR1cm4gVihDLGFyZ3VtZW50cyxZKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gdi5wcm90b3R5cGU9T2JqZWN0LmNy'@;
put 'ZWF0ZShDLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnYsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksQih2LEMpfSxqKE4pfWZ1bmN0aW9uIFYoTixnLEMpe3JldHVybihWPWZ1bmN0aW9uKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVj'@;
put 'dC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLFtdLGZ1bmN0aW9uKCl7fSkpLCEw'@;
put 'fWNhdGNoe3JldHVybiExfX0oKT9SZWZsZWN0LmNvbnN0cnVjdDpmdW5jdGlvbihTLHYscCl7dmFyIHc9W251bGxdO3cucHVzaC5hcHBseSh3LHYpO3ZhciBKPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KFMsdykpO3JldHVybiBwJiZCKEoscC5wcm90b3R5cGUpLEp9KS5hcHBseShudWxsLGFy'@;
put 'Z3VtZW50cyl9ZnVuY3Rpb24gQihOLGcpe3JldHVybihCPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oQyxTKXtyZXR1cm4gQy5fX3Byb3RvX189UyxDfSkoTixnKX1mdW5jdGlvbiBZKE4pe3JldHVybihZPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBl'@;
put 'T2Y6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZyl9KShOKX1mdW5jdGlvbiBYKE4pe3JldHVybihYPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0eXBlb2YgZ306ZnVuY3Rpb24oZyl7cmV0dXJuIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmcuY29uc3RydWN0b3I9PT1TeW1ib2wmJmchPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBnfSkoTil9dmFyIFU9Uig5NTM5KS5pbnNwZWN0LHE9UigyMTM2KS5jb2Rl'@;
put 'cy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlvbiBlZShOLGcsQyl7cmV0dXJuKHZvaWQgMD09PUN8fEM+Ti5sZW5ndGgpJiYoQz1OLmxlbmd0aCksTi5zdWJzdHJpbmcoQy1nLmxlbmd0aCxDKT09PWd9dmFyIHRlPSIiLG9lPSIiLHNlPSIiLGhlPSIiLHVlPXtkZWVwU3RyaWN0RXF1YWw6'@;
put 'IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsOiIsc3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDoiLHN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVj'@;
put 'dGVkIjonLGRlZXBFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbDoiLGVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBlcXVhbDoiLG5vdERlZXBTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHN0cmljdGx5IGRl'@;
put 'ZXAtZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgc3RyaWN0bHkgdW5lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6Jyxub3REZWVw'@;
put 'RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWwgdG86Jyxub3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgbG9vc2VseSB1bmVxdWFsIHRvOicsbm90SWRlbnRpY2FsOiJWYWx1ZXMgaWRlbnRpY2FsIGJ1dCBub3QgcmVmZXJlbmNlLWVx'@;
put 'dWFsOiJ9O2Z1bmN0aW9uIEcoTil7dmFyIGc9T2JqZWN0LmtleXMoTiksQz1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihOKSk7cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihTKXtDW1NdPU5bU119KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQywibWVzc2FnZSIse3ZhbHVl'@;
put 'Ok4ubWVzc2FnZX0pLEN9ZnVuY3Rpb24gYihOKXtyZXR1cm4gVShOLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12'@;
put 'YXIgSD1mdW5jdGlvbihOKXtmdW5jdGlvbiBnKHApe3ZhciB3O2lmKGZ1bmN0aW9uKFllLFFlKXtpZighKFllIGluc3RhbmNlb2YgUWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGcpLCJvYmplY3QiIT09WChwKXx8bnVs'@;
put 'bD09PXApdGhyb3cgbmV3IHEoIm9wdGlvbnMiLCJPYmplY3QiLHApO3ZhciBKPXAubWVzc2FnZSxuZT1wLm9wZXJhdG9yLGRlPXAuc3RhY2tTdGFydEZuLGZlPXAuYWN0dWFsLHhlPXAuZXhwZWN0ZWQsSWU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0w'@;
put 'LG51bGwhPUopdz1rKHRoaXMsWShnKS5jYWxsKHRoaXMsU3RyaW5nKEopKSk7ZWxzZSBpZih6LnN0ZGVyciYmei5zdGRlcnIuaXNUVFkmJih6LnN0ZGVyciYmei5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PXouc3RkZXJyLmdldENvbG9yRGVwdGgoKT8odGU9Ilx4MWJbMzRtIixvZT0iXHgx'@;
put 'YlszMm0iLGhlPSJceDFiWzM5bSIsc2U9Ilx4MWJbMzFtIik6KHRlPSIiLG9lPSIiLGhlPSIiLHNlPSIiKSksIm9iamVjdCI9PT1YKGZlKSYmbnVsbCE9PWZlJiYib2JqZWN0Ij09PVgoeGUpJiZudWxsIT09eGUmJiJzdGFjayJpbiBmZSYmZmUgaW5zdGFuY2VvZiBFcnJvciYmInN0YWNrImlu'@;
put 'IHhlJiZ4ZSBpbnN0YW5jZW9mIEVycm9yJiYoZmU9RyhmZSkseGU9Ryh4ZSkpLCJkZWVwU3RyaWN0RXF1YWwiPT09bmV8fCJzdHJpY3RFcXVhbCI9PT1uZSl3PWsodGhpcyxZKGcpLmNhbGwodGhpcyxmdW5jdGlvbiBEKE4sZyxDKXt2YXIgUz0iIix2PSIiLHA9MCx3PSIiLEo9ITEsbmU9YihO'@;
put 'KSxkZT1uZS5zcGxpdCgiXG4iKSxmZT1iKGcpLnNwbGl0KCJcbiIpLHhlPTAsSWU9IiI7aWYoInN0cmljdEVxdWFsIj09PUMmJiJvYmplY3QiPT09WChOKSYmIm9iamVjdCI9PT1YKGcpJiZudWxsIT09TiYmbnVsbCE9PWcmJihDPSJzdHJpY3RFcXVhbE9iamVjdCIpLDE9PT1kZS5sZW5ndGgm'@;
put 'JjE9PT1mZS5sZW5ndGgmJmRlWzBdIT09ZmVbMF0pe3ZhciBGZT1kZVswXS5sZW5ndGgrZmVbMF0ubGVuZ3RoO2lmKEZlPD0xMCl7aWYoISgib2JqZWN0Ij09PVgoTikmJm51bGwhPT1OfHwib2JqZWN0Ij09PVgoZykmJm51bGwhPT1nfHwwPT09TiYmMD09PWcpKXJldHVybiIiLmNvbmNhdCh1'@;
put 'ZVtDXSwiXG5cbiIpKyIiLmNvbmNhdChkZVswXSwiICE9PSAiKS5jb25jYXQoZmVbMF0sIlxuIil9ZWxzZSBpZigic3RyaWN0RXF1YWxPYmplY3QiIT09QyYmRmU8KHouc3RkZXJyJiZ6LnN0ZGVyci5pc1RUWT96LnN0ZGVyci5jb2x1bW5zOjgwKSl7Zm9yKDtkZVswXVt4ZV09PT1mZVswXVt4'@;
put 'ZV07KXhlKys7eGU+MiYmKEllPSJcbiAgIi5jb25jYXQoZnVuY3Rpb24ocWUsWGUpe2lmKFhlPU1hdGguZmxvb3IoWGUpLDA9PXFlLmxlbmd0aHx8MD09WGUpcmV0dXJuIiI7dmFyIFVlPXFlLmxlbmd0aCpYZTtmb3IoWGU9TWF0aC5mbG9vcihNYXRoLmxvZyhYZSkvTWF0aC5sb2coMikpO1hl'@;
put 'OylxZSs9cWUsWGUtLTtyZXR1cm4gcWUrcWUuc3Vic3RyaW5nKDAsVWUtcWUubGVuZ3RoKX0oIiAiLHhlKSwiXiIpLHhlPTApfX1mb3IodmFyIE9lPWRlW2RlLmxlbmd0aC0xXSxqZT1mZVtmZS5sZW5ndGgtMV07T2U9PT1qZSYmKHhlKys8Mj93PSJcbiAgIi5jb25jYXQoT2UpLmNvbmNhdCh3'@;
put 'KTpTPU9lLGRlLnBvcCgpLGZlLnBvcCgpLDAhPT1kZS5sZW5ndGgmJjAhPT1mZS5sZW5ndGgpOylPZT1kZVtkZS5sZW5ndGgtMV0samU9ZmVbZmUubGVuZ3RoLTFdO3ZhciBXZT1NYXRoLm1heChkZS5sZW5ndGgsZmUubGVuZ3RoKTtpZigwPT09V2Upe3ZhciBLZT1uZS5zcGxpdCgiXG4iKTtp'@;
put 'ZihLZS5sZW5ndGg+MzApZm9yKEtlWzI2XT0iIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSk7S2UubGVuZ3RoPjI3OylLZS5wb3AoKTtyZXR1cm4iIi5jb25jYXQodWUubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KEtlLmpvaW4oIlxuIiksIlxuIil9eGU+MyYmKHc9IlxuIi5jb25j'@;
put 'YXQodGUsIi4uLiIpLmNvbmNhdChoZSkuY29uY2F0KHcpLEo9ITApLCIiIT09UyYmKHc9IlxuICAiLmNvbmNhdChTKS5jb25jYXQodyksUz0iIik7dmFyIFllPTAsUWU9dWVbQ10rIlxuIi5jb25jYXQob2UsIisgYWN0dWFsIikuY29uY2F0KGhlLCIgIikuY29uY2F0KHNlLCItIGV4cGVjdGVk'@;
put 'IikuY29uY2F0KGhlKSxsdD0iICIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUsIiBMaW5lcyBza2lwcGVkIik7Zm9yKHhlPTA7eGU8V2U7eGUrKyl7dmFyIFBlPXhlLXA7aWYoZGUubGVuZ3RoPHhlKzEpUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25j'@;
put 'YXQoaGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGZlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGZlW3hlLTFdKSxZZSsrKSxwPXhlLFMrPSJcbiIuY29uY2F0KHNlLCItIikuY29uY2F0KGhlLCIgIikuY29uY2F0KGZlW3hlXSksWWUrKztlbHNlIGlmKGZlLmxlbmd0'@;
put 'aDx4ZSsxKVBlPjEmJnhlPjImJihQZT40Pyh2Kz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKSxKPSEwKTpQZT4zJiYodis9IlxuICAiLmNvbmNhdChkZVt4ZS0yXSksWWUrKyksdis9IlxuICAiLmNvbmNhdChkZVt4ZS0xXSksWWUrKykscD14ZSx2Kz0iXG4iLmNvbmNhdChvZSwi'@;
put 'KyIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChkZVt4ZV0pLFllKys7ZWxzZXt2YXIgYmU9ZmVbeGVdLEFlPWRlW3hlXSxUZT1BZSE9PWJlJiYoIWVlKEFlLCIsIil8fEFlLnNsaWNlKDAsLTEpIT09YmUpO1RlJiZlZShiZSwiLCIpJiZiZS5zbGljZSgwLC0xKT09PUFlJiYoVGU9ITEsQWUrPSIs'@;
put 'IiksVGU/KFBlPjEmJnhlPjImJihQZT40Pyh2Kz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKSxKPSEwKTpQZT4zJiYodis9IlxuICAiLmNvbmNhdChkZVt4ZS0yXSksWWUrKyksdis9IlxuICAiLmNvbmNhdChkZVt4ZS0xXSksWWUrKykscD14ZSx2Kz0iXG4iLmNvbmNhdChvZSwi'@;
put 'KyIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChBZSksUys9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoYmUpLFllKz0yKToodis9UyxTPSIiLDEhPT1QZSYmMCE9PXhlfHwodis9IlxuICAiLmNvbmNhdChBZSksWWUrKykpfWlmKFllPjIwJiZ4ZTxXZS0yKXJldHVy'@;
put 'biIiLmNvbmNhdChRZSkuY29uY2F0KGx0LCJcbiIpLmNvbmNhdCh2LCJcbiIpLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKS5jb25jYXQoUywiXG4iKSsiIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSl9cmV0dXJuIiIuY29uY2F0KFFlKS5jb25jYXQoSj9sdDoiIiwiXG4iKS5jb25j'@;
put 'YXQodikuY29uY2F0KFMpLmNvbmNhdCh3KS5jb25jYXQoSWUpfShmZSx4ZSxuZSkpKTtlbHNlIGlmKCJub3REZWVwU3RyaWN0RXF1YWwiPT09bmV8fCJub3RTdHJpY3RFcXVhbCI9PT1uZSl7dmFyIEZlPXVlW25lXSxPZT1iKGZlKS5zcGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1YWwiPT09'@;
put 'bmUmJiJvYmplY3QiPT09WChmZSkmJm51bGwhPT1mZSYmKEZlPXVlLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxPZS5sZW5ndGg+MzApZm9yKE9lWzI2XT0iIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSk7T2UubGVuZ3RoPjI3OylPZS5wb3AoKTt3PWsodGhpcywxPT09T2UubGVuZ3RoP1ko'@;
put 'ZykuY2FsbCh0aGlzLCIiLmNvbmNhdChGZSwiICIpLmNvbmNhdChPZVswXSkpOlkoZykuY2FsbCh0aGlzLCIiLmNvbmNhdChGZSwiXG5cbiIpLmNvbmNhdChPZS5qb2luKCJcbiIpLCJcbiIpKSl9ZWxzZXt2YXIgamU9YihmZSksV2U9IiIsS2U9dWVbbmVdOyJub3REZWVwRXF1YWwiPT09bmV8'@;
put 'fCJub3RFcXVhbCI9PT1uZT8oamU9IiIuY29uY2F0KHVlW25lXSwiXG5cbiIpLmNvbmNhdChqZSkpLmxlbmd0aD4xMDI0JiYoamU9IiIuY29uY2F0KGplLnNsaWNlKDAsMTAyMSksIi4uLiIpKTooV2U9IiIuY29uY2F0KGIoeGUpKSxqZS5sZW5ndGg+NTEyJiYoamU9IiIuY29uY2F0KGplLnNs'@;
put 'aWNlKDAsNTA5KSwiLi4uIikpLFdlLmxlbmd0aD41MTImJihXZT0iIi5jb25jYXQoV2Uuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1uZXx8ImVxdWFsIj09PW5lP2plPSIiLmNvbmNhdChLZSwiXG5cbiIpLmNvbmNhdChqZSwiXG5cbnNob3VsZCBlcXVhbFxuXG4iKTpXZT0i'@;
put 'ICIuY29uY2F0KG5lLCIgIikuY29uY2F0KFdlKSksdz1rKHRoaXMsWShnKS5jYWxsKHRoaXMsIiIuY29uY2F0KGplKS5jb25jYXQoV2UpKSl9cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD1JZSx3LmdlbmVyYXRlZE1lc3NhZ2U9IUosT2JqZWN0LmRlZmluZVByb3BlcnR5KEUodyksIm5h'@;
put 'bWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VSUl9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHcuY29kZT0iRVJSX0FTU0VSVElPTiIsdy5hY3R1YWw9ZmUsdy5leHBlY3RlZD14ZSx3Lm9wZXJhdG9yPW5lLEVycm9yLmNhcHR1cmVT'@;
put 'dGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShFKHcpLGRlKSx3Lm5hbWU9IkFzc2VydGlvbkVycm9yIixrKHcpfXZhciBTO3JldHVybiBmdW5jdGlvbihwLHcpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB3JiZudWxsIT09dyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHBy'@;
put 'ZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyYmdy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx3JiZCKHAsdyl9KGcsTiksUz1be2tleToidG9T'@;
put 'dHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6VS5jdXN0b20sdmFsdWU6ZnVuY3Rpb24ocCx3KXtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKEope2Zv'@;
put 'cih2YXIgbmU9MTtuZTxhcmd1bWVudHMubGVuZ3RoO25lKyspe3ZhciBkZT1udWxsIT1hcmd1bWVudHNbbmVdP2FyZ3VtZW50c1tuZV06e30sZmU9T2JqZWN0LmtleXMoZGUpOyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYoZmU9ZmUuY29uY2F0KE9i'@;
put 'amVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZGUpLmZpbHRlcihmdW5jdGlvbih4ZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGUseGUpLmVudW1lcmFibGV9KSkpLGZlLmZvckVhY2goZnVuY3Rpb24oeGUpe0soSix4ZSxkZVt4ZV0pfSl9cmV0dXJuIEp9KHt9'@;
put 'LHcse2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSxTJiZmdW5jdGlvbiBMKE4sZyl7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspe3ZhciBTPWdbQ107Uy5lbnVtZXJhYmxlPVMuZW51bWVyYWJsZXx8ITEsUy5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFMmJihTLndyaXRhYmxl'@;
put 'PSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixTLmtleSxTKX19KGcucHJvdG90eXBlLFMpLGd9KGooRXJyb3IpKTtNLmV4cG9ydHM9SH0sMjEzNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooWCl7cmV0dXJuKHo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJv'@;
put 'bCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oVSl7cmV0dXJuIHR5cGVvZiBVfTpmdW5jdGlvbihVKXtyZXR1cm4gVSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmVS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmVSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9m'@;
put 'IFV9KShYKX1mdW5jdGlvbiBMKFgpe3JldHVybihMPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oVSl7cmV0dXJuIFUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVSl9KShYKX1mdW5jdGlvbiBrKFgsVSl7cmV0dXJuKGs9T2Jq'@;
put 'ZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihxLGVlKXtyZXR1cm4gcS5fX3Byb3RvX189ZWUscX0pKFgsVSl9dmFyIEUsaixWPXt9O2Z1bmN0aW9uIEIoWCxVLHEpe3F8fChxPUVycm9yKTt2YXIgZWU9ZnVuY3Rpb24odGUpe2Z1bmN0aW9uIG9lKHNlLGhlLHVlKXt2YXIgY2U7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKEcsYil7aWYoIShHIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsb2UpLGNlPWZ1bmN0aW9uIEsoWCxVKXtyZXR1cm4hVXx8Im9iamVjdCIhPT16KFUpJiYiZnVuY3Rpb24iIT10eXBl'@;
put 'b2YgVT9mdW5jdGlvbihxKXtpZih2b2lkIDA9PT1xKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHF9KFgpOlV9KHRoaXMsTChvZSkuY2FsbCh0aGlzLCJzdHJpbmciPT10'@;
put 'eXBlb2YgVT9VOlUoc2UsaGUsdWUpKSksY2UuY29kZT1YLGNlfXJldHVybiBmdW5jdGlvbihzZSxoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhlJiZudWxsIT09aGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rp'@;
put 'b24iKTtzZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoZSYmaGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGhlJiZrKHNlLGhlKX0ob2UsdGUpLG9lfShxKTtWW1hdPWVlfWZ1bmN0aW9uIFkoWCxVKXtpZihBcnJheS5p'@;
put 'c0FycmF5KFgpKXt2YXIgcT1YLmxlbmd0aDtyZXR1cm4gWD1YLm1hcChmdW5jdGlvbihlZSl7cmV0dXJuIFN0cmluZyhlZSl9KSxxPjI/Im9uZSBvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFguc2xpY2UoMCxxLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrWFtxLTFdOjI9PT1xPyJvbmUgb2Yg'@;
put 'Ii5jb25jYXQoVSwiICIpLmNvbmNhdChYWzBdLCIgb3IgIikuY29uY2F0KFhbMV0pOiJvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFhbMF0pfXJldHVybiJvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFN0cmluZyhYKSl9QigiRVJSX0FNQklHVU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFy'@;
put 'Z3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVFcnJvciksQigiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKFgsVSxxKXt2YXIgZWUsc2UsdWUsRztpZih2b2lkIDA9PT1FJiYoRT1SKDkyODIpKSxFKCJzdHJpbmciPT10eXBlb2YgWCwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmci'@;
put 'KSwic3RyaW5nIj09dHlwZW9mIFUmJiJub3QgIj09PVUuc3Vic3RyKDAsNCk/KGVlPSJtdXN0IG5vdCBiZSIsVT1VLnJlcGxhY2UoL15ub3QgLywiIikpOmVlPSJtdXN0IGJlIix1ZT1YLCh2b2lkIDA9PT1HfHxHPnVlLmxlbmd0aCkmJihHPXVlLmxlbmd0aCksIiBhcmd1bWVudCI9PT11ZS5z'@;
put 'dWJzdHJpbmcoRy05LEcpKXNlPSJUaGUgIi5jb25jYXQoWCwiICIpLmNvbmNhdChlZSwiICIpLmNvbmNhdChZKFUsInR5cGUiKSk7ZWxzZXt2YXIgaGU9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBHJiYoRz0wKSwhKEcrMT51ZS5sZW5ndGgpJiYtMSE9PXVlLmlu'@;
put 'ZGV4T2YoIi4iLEcpfShYKT8icHJvcGVydHkiOiJhcmd1bWVudCI7c2U9J1RoZSAiJy5jb25jYXQoWCwnIiAnKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoZWUsIiAiKS5jb25jYXQoWShVLCJ0eXBlIikpfXJldHVybiBzZSsiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHoocSkpfSxUeXBlRXJy'@;
put 'b3IpLEIoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24oWCxVKXt2YXIgcT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PWomJihqPVIoOTUzOSkpO3ZhciBlZT1qLmluc3BlY3QoVSk7cmV0'@;
put 'dXJuIGVlLmxlbmd0aD4xMjgmJihlZT0iIi5jb25jYXQoZWUuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQoWCwiJyAiKS5jb25jYXQocSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoZWUpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksQigiRVJSX0lOVkFMSURfUkVU'@;
put 'VVJOX1ZBTFVFIixmdW5jdGlvbihYLFUscSl7dmFyIGVlO3JldHVybiBlZT1xJiZxLmNvbnN0cnVjdG9yJiZxLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KHEuY29uc3RydWN0b3IubmFtZSk6InR5cGUgIi5jb25jYXQoeihxKSksIkV4cGVjdGVkICIuY29uY2F0KFgs'@;
put 'JyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KFUsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQoZWUsIi4iKX0sVHlwZUVycm9yKSxCKCJFUlJfTUlTU0lOR19BUkdTIixmdW5jdGlvbigpe2Zvcih2YXIgWD1hcmd1bWVudHMubGVuZ3RoLFU9bmV3IEFycmF5KFgp'@;
put 'LHE9MDtxPFg7cSsrKVVbcV09YXJndW1lbnRzW3FdO3ZvaWQgMD09PUUmJihFPVIoOTI4MikpLEUoVS5sZW5ndGg+MCwiQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2YXIgZWU9IlRoZSAiLHRlPVUubGVuZ3RoO3N3aXRjaChVPVUubWFwKGZ1bmN0aW9uKG9lKXty'@;
put 'ZXR1cm4nIicuY29uY2F0KG9lLCciJyl9KSx0ZSl7Y2FzZSAxOmVlKz0iIi5jb25jYXQoVVswXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOmVlKz0iIi5jb25jYXQoVVswXSwiIGFuZCAiKS5jb25jYXQoVVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2RlZmF1bHQ6ZWUrPVUuc2xpY2UoMCx0'@;
put 'ZS0xKS5qb2luKCIsICIpLGVlKz0iLCBhbmQgIi5jb25jYXQoVVt0ZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChlZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksTS5leHBvcnRzLmNvZGVzPVZ9LDkxNTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlv'@;
put 'biB6KGJlLEFlKXtyZXR1cm4gZnVuY3Rpb24oVGUpe2lmKEFycmF5LmlzQXJyYXkoVGUpKXJldHVybiBUZX0oYmUpfHxmdW5jdGlvbihUZSxxZSl7dmFyIFhlPVtdLFVlPSEwLGh0PSExLE1lPXZvaWQgMDt0cnl7Zm9yKHZhciBEZSx6ZT1UZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShVZT0oRGU9'@;
put 'emUubmV4dCgpKS5kb25lKSYmKFhlLnB1c2goRGUudmFsdWUpLCFxZXx8WGUubGVuZ3RoIT09cWUpO1VlPSEwKTt9Y2F0Y2gob3Qpe2h0PSEwLE1lPW90fWZpbmFsbHl7dHJ5e1VlfHxudWxsPT16ZS5yZXR1cm58fHplLnJldHVybigpfWZpbmFsbHl7aWYoaHQpdGhyb3cgTWV9fXJldHVybiBY'@;
put 'ZX0oYmUsQWUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBLKGJlKXtyZXR1cm4oSz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlw'@;
put 'ZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihBZSl7cmV0dXJuIHR5cGVvZiBBZX06ZnVuY3Rpb24oQWUpe3JldHVybiBBZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmQWUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkFlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Yg'@;
put 'QWV9KShiZSl9dmFyIEw9dm9pZCAwIT09L2EvZy5mbGFncyxrPWZ1bmN0aW9uKGJlKXt2YXIgQWU9W107cmV0dXJuIGJlLmZvckVhY2goZnVuY3Rpb24oVGUpe3JldHVybiBBZS5wdXNoKFRlKX0pLEFlfSxFPWZ1bmN0aW9uKGJlKXt2YXIgQWU9W107cmV0dXJuIGJlLmZvckVhY2goZnVuY3Rp'@;
put 'b24oVGUscWUpe3JldHVybiBBZS5wdXNoKFtxZSxUZV0pfSksQWV9LGo9T2JqZWN0LmlzP09iamVjdC5pczpSKDYwOSksVj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sQj1OdW1iZXIuaXNOYU4/'@;
put 'TnVtYmVyLmlzTmFOOlIoMzYwKTtmdW5jdGlvbiBZKGJlKXtyZXR1cm4gYmUuY2FsbC5iaW5kKGJlKX12YXIgWD1ZKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLFU9WShPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKSxxPVkoT2JqZWN0LnByb3RvdHlwZS50'@;
put 'b1N0cmluZyksZWU9Uig5NTM5KS50eXBlcyx0ZT1lZS5pc0FueUFycmF5QnVmZmVyLG9lPWVlLmlzQXJyYXlCdWZmZXJWaWV3LHNlPWVlLmlzRGF0ZSxoZT1lZS5pc01hcCx1ZT1lZS5pc1JlZ0V4cCxjZT1lZS5pc1NldCxHPWVlLmlzTmF0aXZlRXJyb3IsYj1lZS5pc0JveGVkUHJpbWl0aXZl'@;
put 'LEQ9ZWUuaXNOdW1iZXJPYmplY3QsSD1lZS5pc1N0cmluZ09iamVjdCxOPWVlLmlzQm9vbGVhbk9iamVjdCxnPWVlLmlzQmlnSW50T2JqZWN0LEM9ZWUuaXNTeW1ib2xPYmplY3QsUz1lZS5pc0Zsb2F0MzJBcnJheSx2PWVlLmlzRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIHAoYmUpe2lmKDA9PT1i'@;
put 'ZS5sZW5ndGh8fGJlLmxlbmd0aD4xMClyZXR1cm4hMDtmb3IodmFyIEFlPTA7QWU8YmUubGVuZ3RoO0FlKyspe3ZhciBUZT1iZS5jaGFyQ29kZUF0KEFlKTtpZihUZTw0OHx8VGU+NTcpcmV0dXJuITB9cmV0dXJuIDEwPT09YmUubGVuZ3RoJiZiZT49TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24g'@;
put 'dyhiZSl7cmV0dXJuIE9iamVjdC5rZXlzKGJlKS5maWx0ZXIocCkuY29uY2F0KFYoYmUpLmZpbHRlcihPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmJpbmQoYmUpKSl9ZnVuY3Rpb24gSihiZSxBZSl7aWYoYmU9PT1BZSlyZXR1cm4gMDtmb3IodmFyIFRlPWJlLmxlbmd0'@;
put 'aCxxZT1BZS5sZW5ndGgsWGU9MCxVZT1NYXRoLm1pbihUZSxxZSk7WGU8VWU7KytYZSlpZihiZVtYZV0hPT1BZVtYZV0pe1RlPWJlW1hlXSxxZT1BZVtYZV07YnJlYWt9cmV0dXJuIFRlPHFlPy0xOnFlPFRlPzE6MH12YXIgZmU9MCx4ZT0xLEllPTIsRmU9MztmdW5jdGlvbiBPZShiZSxBZSxU'@;
put 'ZSxxZSl7aWYoYmU9PT1BZSlyZXR1cm4gMCE9PWJlfHwhVGV8fGooYmUsQWUpO2lmKFRlKXtpZigib2JqZWN0IiE9PUsoYmUpKXJldHVybiJudW1iZXIiPT10eXBlb2YgYmUmJkIoYmUpJiZCKEFlKTtpZigib2JqZWN0IiE9PUsoQWUpfHxudWxsPT09YmV8fG51bGw9PT1BZXx8T2JqZWN0Lmdl'@;
put 'dFByb3RvdHlwZU9mKGJlKSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihBZSkpcmV0dXJuITF9ZWxzZXtpZihudWxsPT09YmV8fCJvYmplY3QiIT09SyhiZSkpcmV0dXJuKG51bGw9PT1BZXx8Im9iamVjdCIhPT1LKEFlKSkmJmJlPT1BZTtpZihudWxsPT09QWV8fCJvYmplY3QiIT09SyhBZSkp'@;
put 'cmV0dXJuITF9dmFyIFhlLFVlLGh0LE1lLEh0LFB0LERlPXEoYmUpO2lmKERlIT09cShBZSkpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShiZSkpe2lmKGJlLmxlbmd0aCE9PUFlLmxlbmd0aClyZXR1cm4hMTt2YXIgemU9dyhiZSksb3Q9dyhBZSk7cmV0dXJuIHplLmxlbmd0aD09PW90Lmxl'@;
put 'bmd0aCYmV2UoYmUsQWUsVGUscWUseGUsemUpfWlmKCJbb2JqZWN0IE9iamVjdF0iPT09RGUmJighaGUoYmUpJiZoZShBZSl8fCFjZShiZSkmJmNlKEFlKSkpcmV0dXJuITE7aWYoc2UoYmUpKXtpZighc2UoQWUpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoYmUpIT09RGF0ZS5wcm90'@;
put 'b3R5cGUuZ2V0VGltZS5jYWxsKEFlKSlyZXR1cm4hMX1lbHNlIGlmKHVlKGJlKSl7aWYoIXVlKEFlKXx8KGh0PWJlLE1lPUFlLCEoTD9odC5zb3VyY2U9PT1NZS5zb3VyY2UmJmh0LmZsYWdzPT09TWUuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGh0KT09PVJlZ0V4cC5w'@;
put 'cm90b3R5cGUudG9TdHJpbmcuY2FsbChNZSkpKSlyZXR1cm4hMX1lbHNlIGlmKEcoYmUpfHxiZSBpbnN0YW5jZW9mIEVycm9yKXtpZihiZS5tZXNzYWdlIT09QWUubWVzc2FnZXx8YmUubmFtZSE9PUFlLm5hbWUpcmV0dXJuITF9ZWxzZXtpZihvZShiZSkpe2lmKFRlfHwhUyhiZSkmJiF2KGJl'@;
put 'KSl7aWYoKEh0PWJlKS5ieXRlTGVuZ3RoIT09KFB0PUFlKS5ieXRlTGVuZ3RofHwwIT09SihuZXcgVWludDhBcnJheShIdC5idWZmZXIsSHQuYnl0ZU9mZnNldCxIdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShQdC5idWZmZXIsUHQuYnl0ZU9mZnNldCxQdC5ieXRlTGVuZ3RoKSkpcmV0'@;
put 'dXJuITF9ZWxzZSBpZighZnVuY3Rpb24oSHQsUHQpe2lmKEh0LmJ5dGVMZW5ndGghPT1QdC5ieXRlTGVuZ3RoKXJldHVybiExO2Zvcih2YXIgb249MDtvbjxIdC5ieXRlTGVuZ3RoO29uKyspaWYoSHRbb25dIT09UHRbb25dKXJldHVybiExO3JldHVybiEwfShiZSxBZSkpcmV0dXJuITE7dmFy'@;
put 'IHV0PXcoYmUpLE10PXcoQWUpO3JldHVybiB1dC5sZW5ndGg9PT1NdC5sZW5ndGgmJldlKGJlLEFlLFRlLHFlLGZlLHV0KX1pZihjZShiZSkpcmV0dXJuISghY2UoQWUpfHxiZS5zaXplIT09QWUuc2l6ZSkmJldlKGJlLEFlLFRlLHFlLEllKTtpZihoZShiZSkpcmV0dXJuISghaGUoQWUpfHxi'@;
put 'ZS5zaXplIT09QWUuc2l6ZSkmJldlKGJlLEFlLFRlLHFlLEZlKTtpZih0ZShiZSkpe2lmKChYZT1iZSkuYnl0ZUxlbmd0aCE9PShVZT1BZSkuYnl0ZUxlbmd0aHx8MCE9PUoobmV3IFVpbnQ4QXJyYXkoWGUpLG5ldyBVaW50OEFycmF5KFVlKSkpcmV0dXJuITF9ZWxzZSBpZihiKGJlKSYmIWZ1'@;
put 'bmN0aW9uKEh0LFB0KXtyZXR1cm4gRChIdCk/RChQdCkmJmooTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KSk6SChIdCk/SChQdCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PVN0cmluZy5wcm90'@;
put 'b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpOKEh0KT9OKFB0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCk6ZyhIdCk/ZyhQdCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PUJpZ0ludC5w'@;
put 'cm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpDKFB0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpfShiZSxBZSkpcmV0dXJuITF9cmV0dXJuIFdlKGJlLEFlLFRlLHFlLGZlKX1mdW5jdGlvbiBqZShiZSxBZSl7'@;
put 'cmV0dXJuIEFlLmZpbHRlcihmdW5jdGlvbihUZSl7cmV0dXJuIFUoYmUsVGUpfSl9ZnVuY3Rpb24gV2UoYmUsQWUsVGUscWUsWGUsVWUpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXtVZT1PYmplY3Qua2V5cyhiZSk7dmFyIGh0PU9iamVjdC5rZXlzKEFlKTtpZihVZS5sZW5ndGghPT1odC5s'@;
put 'ZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBNZT0wO01lPFVlLmxlbmd0aDtNZSsrKWlmKCFYKEFlLFVlW01lXSkpcmV0dXJuITE7aWYoVGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgRGU9VihiZSk7aWYoMCE9PURlLmxlbmd0aCl7dmFyIHplPTA7Zm9yKE1lPTA7TWU8RGUubGVuZ3RoO01l'@;
put 'Kyspe3ZhciBvdD1EZVtNZV07aWYoVShiZSxvdCkpe2lmKCFVKEFlLG90KSlyZXR1cm4hMTtVZS5wdXNoKG90KSx6ZSsrfWVsc2UgaWYoVShBZSxvdCkpcmV0dXJuITF9dmFyIHV0PVYoQWUpO2lmKERlLmxlbmd0aCE9PXV0Lmxlbmd0aCYmamUoQWUsdXQpLmxlbmd0aCE9PXplKXJldHVybiEx'@;
put 'fWVsc2V7dmFyIE10PVYoQWUpO2lmKDAhPT1NdC5sZW5ndGgmJjAhPT1qZShBZSxNdCkubGVuZ3RoKXJldHVybiExfX1pZigwPT09VWUubGVuZ3RoJiYoWGU9PT1mZXx8WGU9PT14ZSYmMD09PWJlLmxlbmd0aHx8MD09PWJlLnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PXFlKXFlPXt2YWwx'@;
put 'Om5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIEh0PXFlLnZhbDEuZ2V0KGJlKTtpZih2b2lkIDAhPT1IdCl7dmFyIFB0PXFlLnZhbDIuZ2V0KEFlKTtpZih2b2lkIDAhPT1QdClyZXR1cm4gSHQ9PT1QdH1xZS5wb3NpdGlvbisrfXFlLnZhbDEuc2V0KGJlLHFlLnBv'@;
put 'c2l0aW9uKSxxZS52YWwyLnNldChBZSxxZS5wb3NpdGlvbik7dmFyIG9uPWZ1bmN0aW9uKENuLFV0LGJuLFduLGVuLCRuKXt2YXIgSG49MDtpZigkbj09PUllKXtpZighZnVuY3Rpb24od3QsWHQsX3QsTnQpe2Zvcih2YXIgbW49bnVsbCxydD1rKHd0KSxMdD0wO0x0PHJ0Lmxlbmd0aDtMdCsr'@;
put 'KXt2YXIgUXQ9cnRbTHRdO2lmKCJvYmplY3QiPT09SyhRdCkmJm51bGwhPT1RdCludWxsPT09bW4mJihtbj1uZXcgU2V0KSxtbi5hZGQoUXQpO2Vsc2UgaWYoIVh0LmhhcyhRdCkpe2lmKF90fHwhUWUod3QsWHQsUXQpKXJldHVybiExO251bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChR'@;
put 'dCl9fWlmKG51bGwhPT1tbil7Zm9yKHZhciBEdD1rKFh0KSxwdD0wO3B0PER0Lmxlbmd0aDtwdCsrKXt2YXIgWXQ9RHRbcHRdO2lmKCJvYmplY3QiPT09SyhZdCkmJm51bGwhPT1ZdCl7aWYoIUtlKG1uLFl0LF90LE50KSlyZXR1cm4hMX1lbHNlIGlmKCFfdCYmIXd0LmhhcyhZdCkmJiFLZSht'@;
put 'bixZdCxfdCxOdCkpcmV0dXJuITF9cmV0dXJuIDA9PT1tbi5zaXplfXJldHVybiEwfShDbixVdCxibixlbikpcmV0dXJuITF9ZWxzZSBpZigkbj09PUZlKXtpZighZnVuY3Rpb24od3QsWHQsX3QsTnQpe2Zvcih2YXIgbW49bnVsbCxydD1FKHd0KSxMdD0wO0x0PHJ0Lmxlbmd0aDtMdCsrKXt2'@;
put 'YXIgUXQ9eihydFtMdF0sMiksRHQ9UXRbMF0scHQ9UXRbMV07aWYoIm9iamVjdCI9PT1LKER0KSYmbnVsbCE9PUR0KW51bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChEdCk7ZWxzZXt2YXIgWXQ9WHQuZ2V0KER0KTtpZih2b2lkIDA9PT1ZdCYmIVh0LmhhcyhEdCl8fCFPZShwdCxZdCxf'@;
put 'dCxOdCkpe2lmKF90fHwhbHQod3QsWHQsRHQscHQsTnQpKXJldHVybiExO251bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChEdCl9fX1pZihudWxsIT09bW4pe2Zvcih2YXIgTG49RShYdCksenQ9MDt6dDxMbi5sZW5ndGg7enQrKyl7dmFyIHluPXooTG5benRdLDIpLHhuPShEdD15blsw'@;
put 'XSx5blsxXSk7aWYoIm9iamVjdCI9PT1LKER0KSYmbnVsbCE9PUR0KXtpZighUGUobW4sd3QsRHQseG4sX3QsTnQpKXJldHVybiExfWVsc2UgaWYoIShfdHx8d3QuaGFzKER0KSYmT2Uod3QuZ2V0KER0KSx4biwhMSxOdCl8fFBlKG1uLHd0LER0LHhuLCExLE50KSkpcmV0dXJuITF9cmV0dXJu'@;
put 'IDA9PT1tbi5zaXplfXJldHVybiEwfShDbixVdCxibixlbikpcmV0dXJuITF9ZWxzZSBpZigkbj09PXhlKWZvcig7SG48Q24ubGVuZ3RoO0huKyspe2lmKCFYKENuLEhuKSl7aWYoWChVdCxIbikpcmV0dXJuITE7Zm9yKHZhciBmdD1PYmplY3Qua2V5cyhDbik7SG48ZnQubGVuZ3RoO0huKysp'@;
put 'e3ZhciBmbj1mdFtIbl07aWYoIVgoVXQsZm4pfHwhT2UoQ25bZm5dLFV0W2ZuXSxibixlbikpcmV0dXJuITF9cmV0dXJuIGZ0Lmxlbmd0aD09PU9iamVjdC5rZXlzKFV0KS5sZW5ndGh9aWYoIVgoVXQsSG4pfHwhT2UoQ25bSG5dLFV0W0huXSxibixlbikpcmV0dXJuITF9Zm9yKEhuPTA7SG48'@;
put 'V24ubGVuZ3RoO0huKyspe3ZhciBobj1XbltIbl07aWYoIU9lKENuW2huXSxVdFtobl0sYm4sZW4pKXJldHVybiExfXJldHVybiEwfShiZSxBZSxUZSxVZSxxZSxYZSk7cmV0dXJuIHFlLnZhbDEuZGVsZXRlKGJlKSxxZS52YWwyLmRlbGV0ZShBZSksb259ZnVuY3Rpb24gS2UoYmUsQWUsVGUs'@;
put 'cWUpe2Zvcih2YXIgWGU9ayhiZSksVWU9MDtVZTxYZS5sZW5ndGg7VWUrKyl7dmFyIGh0PVhlW1VlXTtpZihPZShBZSxodCxUZSxxZSkpcmV0dXJuIGJlLmRlbGV0ZShodCksITB9cmV0dXJuITF9ZnVuY3Rpb24gWWUoYmUpe3N3aXRjaChLKGJlKSl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBu'@;
put 'dWxsO2Nhc2Uib2JqZWN0IjpyZXR1cm47Y2FzZSJzeW1ib2wiOnJldHVybiExO2Nhc2Uic3RyaW5nIjpiZT0rYmU7Y2FzZSJudW1iZXIiOmlmKEIoYmUpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFFlKGJlLEFlLFRlKXt2YXIgcWU9WWUoVGUpO3JldHVybiBxZT8/KEFlLmhhcyhxZSkm'@;
put 'JiFiZS5oYXMocWUpKX1mdW5jdGlvbiBsdChiZSxBZSxUZSxxZSxYZSl7dmFyIFVlPVllKFRlKTtpZihudWxsIT1VZSlyZXR1cm4gVWU7dmFyIGh0PUFlLmdldChVZSk7cmV0dXJuISh2b2lkIDA9PT1odCYmIUFlLmhhcyhVZSl8fCFPZShxZSxodCwhMSxYZSkpJiYhYmUuaGFzKFVlKSYmT2Uo'@;
put 'cWUsaHQsITEsWGUpfWZ1bmN0aW9uIFBlKGJlLEFlLFRlLHFlLFhlLFVlKXtmb3IodmFyIGh0PWsoYmUpLE1lPTA7TWU8aHQubGVuZ3RoO01lKyspe3ZhciBEZT1odFtNZV07aWYoT2UoVGUsRGUsWGUsVWUpJiZPZShxZSxBZS5nZXQoRGUpLFhlLFVlKSlyZXR1cm4gYmUuZGVsZXRlKERlKSwh'@;
put 'MH1yZXR1cm4hMX1NLmV4cG9ydHM9e2lzRGVlcEVxdWFsOmZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gT2UoYmUsQWUsITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbihiZSxBZSl7cmV0dXJuIE9lKGJlLEFlLCEwKX19fSw4MjI0Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKE8pe3JldHVybiBPfX0sOTY2OTooTSxPLFIpPT57TS5leHBvcnRzPVIoMTYwOSl9LDU0NDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig2MDI2KSxMPVIoNDM3Miksaz1SKDUzMjcpLEU9Uig0MDk3KSxqPVIoNDEwOSksVj1SKDc5ODUpLEI9Uig3ODc0KSxZ'@;
put 'PVIoMjY0OCksWD1SKDY0NCksVT1SKDIwNSk7TS5leHBvcnRzPWZ1bmN0aW9uKHEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlPXEuZGF0YSxoZT1xLmhlYWRlcnMsdWU9cS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gY2UoKXtxLmNhbmNlbFRva2VuJiZxLmNh'@;
put 'bmNlbFRva2VuLnVuc3Vic2NyaWJlKG9lKSxxLnNpZ25hbCYmcS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9lKX16LmlzRm9ybURhdGEoc2UpJiZ6LmlzU3RhbmRhcmRCcm93c2VyRW52KCkmJmRlbGV0ZSBoZVsiQ29udGVudC1UeXBlIl07dmFyIEc9bmV3IFhNTEh0dHBS'@;
put 'ZXF1ZXN0O2lmKHEuYXV0aCl7dmFyIGI9cS5hdXRoLnVzZXJuYW1lfHwiIixEPXEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocS5hdXRoLnBhc3N3b3JkKSk6IiI7aGUuQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKGIrIjoiK0QpfXZhciBIPUUocS5iYXNl'@;
put 'VVJMLHEudXJsKTtmdW5jdGlvbiBOKCl7aWYoRyl7dmFyIFM9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBHP2ooRy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbDtLKGZ1bmN0aW9uKHApe2VlKHApLGNlKCl9LGZ1bmN0aW9uKHApe3RlKHApLGNlKCl9LHtkYXRhOnVlJiYidGV4dCIh'@;
put 'PT11ZSYmImpzb24iIT09dWU/Ry5yZXNwb25zZTpHLnJlc3BvbnNlVGV4dCxzdGF0dXM6Ry5zdGF0dXMsc3RhdHVzVGV4dDpHLnN0YXR1c1RleHQsaGVhZGVyczpTLGNvbmZpZzpxLHJlcXVlc3Q6R30pLEc9bnVsbH19aWYoRy5vcGVuKHEubWV0aG9kLnRvVXBwZXJDYXNlKCksayhILHEucGFy'@;
put 'YW1zLHEucGFyYW1zU2VyaWFsaXplciksITApLEcudGltZW91dD1xLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBHP0cub25sb2FkZW5kPU46Ry5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtHJiY0PT09Ry5yZWFkeVN0YXRlJiYoMCE9PUcuc3RhdHVzfHxHLnJlc3BvbnNlVVJMJiYwPT09'@;
put 'Ry5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChOKX0sRy5vbmFib3J0PWZ1bmN0aW9uKCl7RyYmKHRlKG5ldyBZKCJSZXF1ZXN0IGFib3J0ZWQiLFkuRUNPTk5BQk9SVEVELHEsRykpLEc9bnVsbCl9LEcub25lcnJvcj1mdW5jdGlvbigpe3RlKG5ldyBZKCJOZXR3'@;
put 'b3JrIEVycm9yIixZLkVSUl9ORVRXT1JLLHEsRyxHKSksRz1udWxsfSxHLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciBTPXEudGltZW91dD8idGltZW91dCBvZiAiK3EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtxLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihTPXEu'@;
put 'dGltZW91dEVycm9yTWVzc2FnZSksdGUobmV3IFkoUywocS50cmFuc2l0aW9uYWx8fEIpLmNsYXJpZnlUaW1lb3V0RXJyb3I/WS5FVElNRURPVVQ6WS5FQ09OTkFCT1JURUQscSxHKSksRz1udWxsfSx6LmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBnPShxLndpdGhDcmVkZW50aWFsc3x8'@;
put 'VihIKSkmJnEueHNyZkNvb2tpZU5hbWU/TC5yZWFkKHEueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtnJiYoaGVbcS54c3JmSGVhZGVyTmFtZV09Zyl9InNldFJlcXVlc3RIZWFkZXIiaW4gRyYmei5mb3JFYWNoKGhlLGZ1bmN0aW9uKFMsdil7dm9pZCAwPT09c2UmJiJjb250ZW50LXR5cGUiPT09'@;
put 'di50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBoZVt2XTpHLnNldFJlcXVlc3RIZWFkZXIodixTKX0pLHouaXNVbmRlZmluZWQocS53aXRoQ3JlZGVudGlhbHMpfHwoRy53aXRoQ3JlZGVudGlhbHM9ISFxLndpdGhDcmVkZW50aWFscyksdWUmJiJqc29uIiE9PXVlJiYoRy5yZXNwb25zZVR5cGU9cS5y'@;
put 'ZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uRG93bmxvYWRQcm9ncmVzcyYmRy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uVXBsb2FkUHJvZ3Jlc3MmJkcudXBsb2FkJiZHLnVwbG9hZC5h'@;
put 'ZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscS5vblVwbG9hZFByb2dyZXNzKSwocS5jYW5jZWxUb2tlbnx8cS5zaWduYWwpJiYob2U9ZnVuY3Rpb24oUyl7RyYmKHRlKCFTfHxTJiZTLnR5cGU/bmV3IFg6UyksRy5hYm9ydCgpLEc9bnVsbCl9LHEuY2FuY2VsVG9rZW4mJnEuY2FuY2VsVG9r'@;
put 'ZW4uc3Vic2NyaWJlKG9lKSxxLnNpZ25hbCYmKHEuc2lnbmFsLmFib3J0ZWQ/b2UoKTpxLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsb2UpKSksc2V8fChzZT1udWxsKTt2YXIgQz1VKEgpO0MmJi0xPT09WyJodHRwIiwiaHR0cHMiLCJmaWxlIl0uaW5kZXhPZihDKT90ZShuZXcg'@;
put 'WSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitDKyI6IixZLkVSUl9CQURfUkVRVUVTVCxxKSk6Ry5zZW5kKHNlKX0pfX0sMTYwOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDE4NDkpLEw9UigzMjEpLGs9Uig3MTg1KSxFPWZ1bmN0aW9uIGooVil7dmFyIEI9bmV3'@;
put 'IEwoViksWT1LKEwucHJvdG90eXBlLnJlcXVlc3QsQik7cmV0dXJuIHouZXh0ZW5kKFksTC5wcm90b3R5cGUsQiksei5leHRlbmQoWSxCKSxZLmNyZWF0ZT1mdW5jdGlvbihYKXtyZXR1cm4gaihrKFYsWCkpfSxZfShSKDU1NDYpKTtFLkF4aW9zPUwsRS5DYW5jZWxlZEVycm9yPVIoNjQ0KSxF'@;
put 'LkNhbmNlbFRva2VuPVIoNDk3MiksRS5pc0NhbmNlbD1SKDY1MDIpLEUuVkVSU0lPTj1SKDcyODgpLnZlcnNpb24sRS50b0Zvcm1EYXRhPVIoNzY3NSksRS5BeGlvc0Vycm9yPVIoMjY0OCksRS5DYW5jZWw9RS5DYW5jZWxlZEVycm9yLEUuYWxsPWZ1bmN0aW9uKGope3JldHVybiBQcm9taXNl'@;
put 'LmFsbChqKX0sRS5zcHJlYWQ9Uig4NzEzKSxFLmlzQXhpb3NFcnJvcj1SKDYyNjgpLE0uZXhwb3J0cz1FLE0uZXhwb3J0cy5kZWZhdWx0PUV9LDQ5NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0NCk7ZnVuY3Rpb24gSyhMKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgTCl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIGs7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGope2s9an0pO3ZhciBFPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oail7aWYoRS5fbGlzdGVuZXJzKXt2YXIgVixCPUUu'@;
put 'X2xpc3RlbmVycy5sZW5ndGg7Zm9yKFY9MDtWPEI7VisrKUUuX2xpc3RlbmVyc1tWXShqKTtFLl9saXN0ZW5lcnM9bnVsbH19KSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihqKXt2YXIgVixCPW5ldyBQcm9taXNlKGZ1bmN0aW9uKFkpe0Uuc3Vic2NyaWJlKFkpLFY9WX0pLnRoZW4oaik7'@;
put 'cmV0dXJuIEIuY2FuY2VsPWZ1bmN0aW9uKCl7RS51bnN1YnNjcmliZShWKX0sQn0sTChmdW5jdGlvbihqKXtFLnJlYXNvbnx8KEUucmVhc29uPW5ldyB6KGopLGsoRS5yZWFzb24pKX0pfUsucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJv'@;
put 'dyB0aGlzLnJlYXNvbn0sSy5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKEwpe3RoaXMucmVhc29uP0wodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChMKTp0aGlzLl9saXN0ZW5lcnM9W0xdfSxLLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5j'@;
put 'dGlvbihMKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciBrPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKEwpOy0xIT09ayYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShrLDEpfX0sSy5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgTDtyZXR1cm57dG9rZW46bmV3IEsoZnVuY3Rpb24oayl7TD1rfSksY2Fu'@;
put 'Y2VsOkx9fSxNLmV4cG9ydHM9S30sNjQ0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyNjQ4KTtmdW5jdGlvbiBLKEwpe3ouY2FsbCh0aGlzLEw/PyJjYW5jZWxlZCIsei5FUlJfQ0FOQ0VMRUQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Uig0ODY3KS5pbmhlcml0cyhLLHos'@;
put 'e19fQ0FOQ0VMX186ITB9KSxNLmV4cG9ydHM9S30sNjUwMjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4hKCFPfHwhTy5fX0NBTkNFTF9fKX19LDMyMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDUzMjcpLEw9Uig3ODIpLGs9'@;
put 'UigzNTcyKSxFPVIoNzE4NSksaj1SKDQwOTcpLFY9Uig0ODc1KSxCPVYudmFsaWRhdG9ycztmdW5jdGlvbiBZKFgpe3RoaXMuZGVmYXVsdHM9WCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTCxyZXNwb25zZTpuZXcgTH19WS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihYLFUp'@;
put 'eyJzdHJpbmciPT10eXBlb2YgWD8oVT1VfHx7fSkudXJsPVg6VT1YfHx7fSxVLm1ldGhvZD0oVT1FKHRoaXMuZGVmYXVsdHMsVSkpLm1ldGhvZD9VLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3RoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6Imdl'@;
put 'dCI7dmFyIHE9VS50cmFuc2l0aW9uYWw7dm9pZCAwIT09cSYmVi5hc3NlcnRPcHRpb25zKHEse3NpbGVudEpTT05QYXJzaW5nOkIudHJhbnNpdGlvbmFsKEIuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkIu'@;
put 'dHJhbnNpdGlvbmFsKEIuYm9vbGVhbil9LCExKTt2YXIgZWU9W10sdGU9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiLnJ1bldoZW4mJiExPT09Yi5ydW5XaGVuKFUpfHwodGU9dGUmJmIuc3luY2hyb25vdXMsZWUu'@;
put 'dW5zaGlmdChiLmZ1bGZpbGxlZCxiLnJlamVjdGVkKSl9KTt2YXIgb2Usc2U9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihiKXtzZS5wdXNoKGIuZnVsZmlsbGVkLGIucmVqZWN0ZWQpfSksIXRlKXt2YXIgaGU9W2ssdm9pZCAwXTtmb3IoQXJyYXku'@;
put 'cHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoaGUsZWUpLGhlPWhlLmNvbmNhdChzZSksb2U9UHJvbWlzZS5yZXNvbHZlKFUpO2hlLmxlbmd0aDspb2U9b2UudGhlbihoZS5zaGlmdCgpLGhlLnNoaWZ0KCkpO3JldHVybiBvZX1mb3IodmFyIHVlPVU7ZWUubGVuZ3RoOyl7dmFyIGNlPWVlLnNoaWZ0'@;
put 'KCksRz1lZS5zaGlmdCgpO3RyeXt1ZT1jZSh1ZSl9Y2F0Y2goYil7RyhiKTticmVha319dHJ5e29lPWsodWUpfWNhdGNoKGIpe3JldHVybiBQcm9taXNlLnJlamVjdChiKX1mb3IoO3NlLmxlbmd0aDspb2U9b2UudGhlbihzZS5zaGlmdCgpLHNlLnNoaWZ0KCkpO3JldHVybiBvZX0sWS5wcm90'@;
put 'b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKFgpe1g9RSh0aGlzLmRlZmF1bHRzLFgpO3ZhciBVPWooWC5iYXNlVVJMLFgudXJsKTtyZXR1cm4gSyhVLFgucGFyYW1zLFgucGFyYW1zU2VyaWFsaXplcil9LHouZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24o'@;
put 'WCl7WS5wcm90b3R5cGVbWF09ZnVuY3Rpb24oVSxxKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEUocXx8e30se21ldGhvZDpYLHVybDpVLGRhdGE6KHF8fHt9KS5kYXRhfSkpfX0pLHouZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKFgpe2Z1bmN0aW9uIFUocSl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKGVlLHRlLG9lKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEUob2V8fHt9LHttZXRob2Q6WCxoZWFkZXJzOnE/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmVlLGRhdGE6dGV9KSl9fVkucHJvdG90eXBlW1hdPVUoKSxZLnByb3RvdHlwZVtYKyJG'@;
put 'b3JtIl09VSghMCl9KSxNLmV4cG9ydHM9WX0sMjY0ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7ZnVuY3Rpb24gSyhFLGosVixCLFkpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPUUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixqJiYodGhpcy5jb2RlPWopLFYm'@;
put 'Jih0aGlzLmNvbmZpZz1WKSxCJiYodGhpcy5yZXF1ZXN0PUIpLFkmJih0aGlzLnJlc3BvbnNlPVkpfXouaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRp'@;
put 'b24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlz'@;
put 'LnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTD1LLnByb3RvdHlwZSxrPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JL'@;
put 'IiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCJdLmZvckVhY2goZnVuY3Rpb24oRSl7a1tFXT17dmFsdWU6RX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLGsp'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLEsuZnJvbT1mdW5jdGlvbihFLGosVixCLFksWCl7dmFyIFU9T2JqZWN0LmNyZWF0ZShMKTtyZXR1cm4gei50b0ZsYXRPYmplY3QoRSxVLGZ1bmN0aW9uKHEpe3JldHVybiBxIT09RXJyb3IucHJvdG90'@;
put 'eXBlfSksSy5jYWxsKFUsRS5tZXNzYWdlLGosVixCLFkpLFUubmFtZT1FLm5hbWUsWCYmT2JqZWN0LmFzc2lnbihVLFgpLFV9LE0uZXhwb3J0cz1LfSw3ODI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO2Z1bmN0aW9uIEsoKXt0aGlzLmhhbmRsZXJzPVtdfUsucHJvdG90'@;
put 'eXBlLnVzZT1mdW5jdGlvbihMLGssRSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkwscmVqZWN0ZWQ6ayxzeW5jaHJvbm91czohIUUmJkUuc3luY2hyb25vdXMscnVuV2hlbjpFP0UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sSy5wcm90b3R5'@;
put 'cGUuZWplY3Q9ZnVuY3Rpb24oTCl7dGhpcy5oYW5kbGVyc1tMXSYmKHRoaXMuaGFuZGxlcnNbTF09bnVsbCl9LEsucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oTCl7ei5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oayl7bnVsbCE9PWsmJkwoayl9KX0sTS5leHBvcnRzPUt9LDQw'@;
put 'OTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDE3OTMpLEs9Uig3MzAzKTtNLmV4cG9ydHM9ZnVuY3Rpb24oTCxrKXtyZXR1cm4gTCYmIXooayk/SyhMLGspOmt9fSwzNTcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoODUyNyksTD1SKDY1MDIpLGs9'@;
put 'Uig1NTQ2KSxFPVIoNjQ0KTtmdW5jdGlvbiBqKFYpe2lmKFYuY2FuY2VsVG9rZW4mJlYuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLFYuc2lnbmFsJiZWLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBFfU0uZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4gaihWKSxWLmhlYWRlcnM9'@;
put 'Vi5oZWFkZXJzfHx7fSxWLmRhdGE9Sy5jYWxsKFYsVi5kYXRhLFYuaGVhZGVycyxWLnRyYW5zZm9ybVJlcXVlc3QpLFYuaGVhZGVycz16Lm1lcmdlKFYuaGVhZGVycy5jb21tb258fHt9LFYuaGVhZGVyc1tWLm1ldGhvZF18fHt9LFYuaGVhZGVycyksei5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0'@;
put 'IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLGZ1bmN0aW9uKEIpe2RlbGV0ZSBWLmhlYWRlcnNbQl19KSwoVi5hZGFwdGVyfHxrLmFkYXB0ZXIpKFYpLnRoZW4oZnVuY3Rpb24oQil7cmV0dXJuIGooViksQi5kYXRhPUsuY2FsbChWLEIuZGF0YSxCLmhlYWRlcnMsVi50'@;
put 'cmFuc2Zvcm1SZXNwb25zZSksQn0sZnVuY3Rpb24oQil7cmV0dXJuIEwoQil8fChqKFYpLEImJkIucmVzcG9uc2UmJihCLnJlc3BvbnNlLmRhdGE9Sy5jYWxsKFYsQi5yZXNwb25zZS5kYXRhLEIucmVzcG9uc2UuaGVhZGVycyxWLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0'@;
put 'KEIpfSl9fSw3MTg1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxMKXtMPUx8fHt9O3ZhciBrPXt9O2Z1bmN0aW9uIEUoVSxxKXtyZXR1cm4gei5pc1BsYWluT2JqZWN0KFUpJiZ6LmlzUGxhaW5PYmplY3QocSk/ei5tZXJnZShVLHEp'@;
put 'OnouaXNQbGFpbk9iamVjdChxKT96Lm1lcmdlKHt9LHEpOnouaXNBcnJheShxKT9xLnNsaWNlKCk6cX1mdW5jdGlvbiBqKFUpe3JldHVybiB6LmlzVW5kZWZpbmVkKExbVV0pP3ouaXNVbmRlZmluZWQoS1tVXSk/dm9pZCAwOkUodm9pZCAwLEtbVV0pOkUoS1tVXSxMW1VdKX1mdW5jdGlvbiBW'@;
put 'KFUpe2lmKCF6LmlzVW5kZWZpbmVkKExbVV0pKXJldHVybiBFKHZvaWQgMCxMW1VdKX1mdW5jdGlvbiBCKFUpe3JldHVybiB6LmlzVW5kZWZpbmVkKExbVV0pP3ouaXNVbmRlZmluZWQoS1tVXSk/dm9pZCAwOkUodm9pZCAwLEtbVV0pOkUodm9pZCAwLExbVV0pfWZ1bmN0aW9uIFkoVSl7cmV0'@;
put 'dXJuIFUgaW4gTD9FKEtbVV0sTFtVXSk6VSBpbiBLP0Uodm9pZCAwLEtbVV0pOnZvaWQgMH12YXIgWD17dXJsOlYsbWV0aG9kOlYsZGF0YTpWLGJhc2VVUkw6Qix0cmFuc2Zvcm1SZXF1ZXN0OkIsdHJhbnNmb3JtUmVzcG9uc2U6QixwYXJhbXNTZXJpYWxpemVyOkIsdGltZW91dDpCLHRpbWVv'@;
put 'dXRNZXNzYWdlOkIsd2l0aENyZWRlbnRpYWxzOkIsYWRhcHRlcjpCLHJlc3BvbnNlVHlwZTpCLHhzcmZDb29raWVOYW1lOkIseHNyZkhlYWRlck5hbWU6QixvblVwbG9hZFByb2dyZXNzOkIsb25Eb3dubG9hZFByb2dyZXNzOkIsZGVjb21wcmVzczpCLG1heENvbnRlbnRMZW5ndGg6QixtYXhC'@;
put 'b2R5TGVuZ3RoOkIsYmVmb3JlUmVkaXJlY3Q6Qix0cmFuc3BvcnQ6QixodHRwQWdlbnQ6QixodHRwc0FnZW50OkIsY2FuY2VsVG9rZW46Qixzb2NrZXRQYXRoOkIscmVzcG9uc2VFbmNvZGluZzpCLHZhbGlkYXRlU3RhdHVzOll9O3JldHVybiB6LmZvckVhY2goT2JqZWN0LmtleXMoSykuY29u'@;
put 'Y2F0KE9iamVjdC5rZXlzKEwpKSxmdW5jdGlvbihVKXt2YXIgcT1YW1VdfHxqLGVlPXEoVSk7ei5pc1VuZGVmaW5lZChlZSkmJnEhPT1ZfHwoa1tVXT1lZSl9KSxrfX0sNjAyNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjY0OCk7TS5leHBvcnRzPWZ1bmN0aW9uKEssTCxrKXt2'@;
put 'YXIgRT1rLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztrLnN0YXR1cyYmRSYmIUUoay5zdGF0dXMpP0wobmV3IHooIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitrLnN0YXR1cyxbei5FUlJfQkFEX1JFUVVFU1Qsei5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKGsuc3RhdHVz'@;
put 'LzEwMCktNF0say5jb25maWcsay5yZXF1ZXN0LGspKTpLKGspfX0sODUyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDU1NDYpO00uZXhwb3J0cz1mdW5jdGlvbihMLGssRSl7dmFyIGo9dGhpc3x8SztyZXR1cm4gei5mb3JFYWNoKEUsZnVuY3Rpb24oVil7TD1W'@;
put 'LmNhbGwoaixMLGspfSksTH19LDU1NDY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig0ODY3KSxMPVIoNjAxNiksaz1SKDI2NDgpLEU9Uig3ODc0KSxqPVIoNzY3NSksVj17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9'@;
put 'O2Z1bmN0aW9uIEIoVSxxKXshSy5pc1VuZGVmaW5lZChVKSYmSy5pc1VuZGVmaW5lZChVWyJDb250ZW50LVR5cGUiXSkmJihVWyJDb250ZW50LVR5cGUiXT1xKX12YXIgWSxYPXt0cmFuc2l0aW9uYWw6RSxhZGFwdGVyOigodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Inx8dm9pZCAwIT09eiYm'@;
put 'IltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHopKSYmKFk9Uig1NDQ4KSksWSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oVSxxKXtpZihMKHEsIkFjY2VwdCIpLEwocSwiQ29udGVudC1UeXBlIiksSy5pc0Zvcm1EYXRhKFUpfHxLLmlzQXJy'@;
put 'YXlCdWZmZXIoVSl8fEsuaXNCdWZmZXIoVSl8fEsuaXNTdHJlYW0oVSl8fEsuaXNGaWxlKFUpfHxLLmlzQmxvYihVKSlyZXR1cm4gVTtpZihLLmlzQXJyYXlCdWZmZXJWaWV3KFUpKXJldHVybiBVLmJ1ZmZlcjtpZihLLmlzVVJMU2VhcmNoUGFyYW1zKFUpKXJldHVybiBCKHEsImFwcGxpY2F0'@;
put 'aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksVS50b1N0cmluZygpO3ZhciBlZSx0ZT1LLmlzT2JqZWN0KFUpLG9lPXEmJnFbIkNvbnRlbnQtVHlwZSJdO2lmKChlZT1LLmlzRmlsZUxpc3QoVSkpfHx0ZSYmIm11bHRpcGFydC9mb3JtLWRhdGEiPT09b2Upe3ZhciBz'@;
put 'ZT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIGooZWU/eyJmaWxlc1tdIjpVfTpVLHNlJiZuZXcgc2UpfXJldHVybiB0ZXx8ImFwcGxpY2F0aW9uL2pzb24iPT09b2U/KEIocSwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGhlLHVlLGNlKXtpZihLLmlzU3RyaW5nKGhl'@;
put 'KSl0cnl7cmV0dXJuKDAsSlNPTi5wYXJzZSkoaGUpLEsudHJpbShoZSl9Y2F0Y2goRyl7aWYoIlN5bnRheEVycm9yIiE9PUcubmFtZSl0aHJvdyBHfXJldHVybigwLEpTT04uc3RyaW5naWZ5KShoZSl9KFUpKTpVfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKFUpe3ZhciBxPXRoaXMu'@;
put 'dHJhbnNpdGlvbmFsfHxYLnRyYW5zaXRpb25hbCxvZT0hKHEmJnEuc2lsZW50SlNPTlBhcnNpbmcpJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihvZXx8cSYmcS5mb3JjZWRKU09OUGFyc2luZyYmSy5pc1N0cmluZyhVKSYmVS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKFUp'@;
put 'fWNhdGNoKHNlKXtpZihvZSl0aHJvdyJTeW50YXhFcnJvciI9PT1zZS5uYW1lP2suZnJvbShzZSxrLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOnNlfXJldHVybiBVfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFt'@;
put 'ZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpSKDE2MjMpfSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihVKXtyZXR1cm4gVT49MjAwJiZVPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pz'@;
put 'b24sIHRleHQvcGxhaW4sICovKiJ9fX07Sy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKFUpe1guaGVhZGVyc1tVXT17fX0pLEsuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKFUpe1guaGVhZGVyc1tVXT1LLm1lcmdlKFYpfSksTS5leHBv'@;
put 'cnRzPVh9LDc4NzQ6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9fSw3Mjg4Ok09PntNLmV4cG9ydHM9e3ZlcnNpb246IjAuMjcuMiJ9fSwxODQ5Ok09PnsidXNlIHN0cmlj'@;
put 'dCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8sUil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB6PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxLPTA7Szx6Lmxlbmd0aDtLKyspeltLXT1hcmd1bWVudHNbS107cmV0dXJuIE8uYXBwbHkoUix6KX19fSw1MzI3OihNLE8sUik9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIHo9Uig0ODY3KTtmdW5jdGlvbiBLKEwpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoTCkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIp'@;
put 'LnJlcGxhY2UoLyU1RC9naSwiXSIpfU0uZXhwb3J0cz1mdW5jdGlvbihMLGssRSl7aWYoIWspcmV0dXJuIEw7dmFyIGo7aWYoRSlqPUUoayk7ZWxzZSBpZih6LmlzVVJMU2VhcmNoUGFyYW1zKGspKWo9ay50b1N0cmluZygpO2Vsc2V7dmFyIFY9W107ei5mb3JFYWNoKGssZnVuY3Rpb24oWSxY'@;
put 'KXtudWxsIT1ZJiYoei5pc0FycmF5KFkpP1grPSJbXSI6WT1bWV0sei5mb3JFYWNoKFksZnVuY3Rpb24oVSl7ei5pc0RhdGUoVSk/VT1VLnRvSVNPU3RyaW5nKCk6ei5pc09iamVjdChVKSYmKFU9SlNPTi5zdHJpbmdpZnkoVSkpLFYucHVzaChLKFgpKyI9IitLKFUpKX0pKX0pLGo9Vi5qb2lu'@;
put 'KCImIil9aWYoail7dmFyIEI9TC5pbmRleE9mKCIjIik7LTEhPT1CJiYoTD1MLnNsaWNlKDAsQikpLEwrPSgtMT09PUwuaW5kZXhPZigiPyIpPyI/IjoiJiIpK2p9cmV0dXJuIEx9fSw3MzAzOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8sUil7cmV0dXJuIFI/Ty5yZXBs'@;
put 'YWNlKC9cLyskLywiIikrIi8iK1IucmVwbGFjZSgvXlwvKy8sIiIpOk99fSw0MzcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ei5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihLLEwsayxFLGosVil7dmFyIEI9W107Qi5wdXNo'@;
put 'KEsrIj0iK2VuY29kZVVSSUNvbXBvbmVudChMKSksei5pc051bWJlcihrKSYmQi5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoaykudG9HTVRTdHJpbmcoKSksei5pc1N0cmluZyhFKSYmQi5wdXNoKCJwYXRoPSIrRSksei5pc1N0cmluZyhqKSYmQi5wdXNoKCJkb21haW49IitqKSwhMD09PVYm'@;
put 'JkIucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPUIuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihLKXt2YXIgTD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrSysiKT0oW147XSopIikpO3JldHVybiBMP2RlY29kZVVSSUNvbXBvbmVudChMWzNd'@;
put 'KTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oSyl7dGhpcy53cml0ZShLLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSwxNzkzOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRz'@;
put 'PWZ1bmN0aW9uKE8pe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoTyl9fSw2MjY4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyl7cmV0dXJuIHouaXNPYmplY3QoSykmJiEwPT09Sy5pc0F4aW9zRXJyb3J9'@;
put 'fSw3OTg1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ei5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIEssTD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu'@;
put 'dCgiYSIpO2Z1bmN0aW9uIEUoail7dmFyIFY9ajtyZXR1cm4gTCYmKGsuc2V0QXR0cmlidXRlKCJocmVmIixWKSxWPWsuaHJlZiksay5zZXRBdHRyaWJ1dGUoImhyZWYiLFYpLHtocmVmOmsuaHJlZixwcm90b2NvbDprLnByb3RvY29sP2sucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixo'@;
put 'b3N0OmsuaG9zdCxzZWFyY2g6ay5zZWFyY2g/ay5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDprLmhhc2g/ay5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ay5ob3N0bmFtZSxwb3J0OmsucG9ydCxwYXRobmFtZToiLyI9PT1rLnBhdGhuYW1lLmNoYXJBdCgwKT9r'@;
put 'LnBhdGhuYW1lOiIvIitrLnBhdGhuYW1lfX1yZXR1cm4gSz1FKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihqKXt2YXIgVj16LmlzU3RyaW5nKGopP0Uoaik6ajtyZXR1cm4gVi5wcm90b2NvbD09PUsucHJvdG9jb2wmJlYuaG9zdD09PUsuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4hMH19LDYwMTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLLEwpe3ouZm9yRWFjaChLLGZ1bmN0aW9uKGssRSl7RSE9PUwmJkUudG9VcHBlckNhc2UoKT09PUwudG9VcHBlckNhc2UoKSYmKEtbTF09ayxkZWxldGUgS1tFXSl9KX19'@;
put 'LDE2MjM6TT0+e00uZXhwb3J0cz1udWxsfSw0MTA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlm'@;
put 'aWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il07TS5leHBvcnRzPWZ1bmN0aW9uKEwpe3ZhciBrLEUs'@;
put 'aixWPXt9O3JldHVybiBMJiZ6LmZvckVhY2goTC5zcGxpdCgiXG4iKSxmdW5jdGlvbihCKXtpZihqPUIuaW5kZXhPZigiOiIpLGs9ei50cmltKEIuc3Vic3RyKDAsaikpLnRvTG93ZXJDYXNlKCksRT16LnRyaW0oQi5zdWJzdHIoaisxKSksayl7aWYoVltrXSYmSy5pbmRleE9mKGspPj0wKXJl'@;
put 'dHVybjtWW2tdPSJzZXQtY29va2llIj09PWs/KFZba10/VltrXTpbXSkuY29uY2F0KFtFXSk6VltrXT9WW2tdKyIsICIrRTpFfX0pLFZ9fSwyMDU6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7dmFyIFI9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoTyk7'@;
put 'cmV0dXJuIFImJlJbMV18fCIifX0sODcxMzpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gZnVuY3Rpb24oUil7cmV0dXJuIE8uYXBwbHkobnVsbCxSKX19fSw3Njc1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDQ4'@;
put 'NjcpO00uZXhwb3J0cz1mdW5jdGlvbihMLGspe2s9a3x8bmV3IEZvcm1EYXRhO3ZhciBFPVtdO2Z1bmN0aW9uIGooVil7cmV0dXJuIG51bGw9PT1WPyIiOksuaXNEYXRlKFYpP1YudG9JU09TdHJpbmcoKTpLLmlzQXJyYXlCdWZmZXIoVil8fEsuaXNUeXBlZEFycmF5KFYpPyJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBCbG9iP25ldyBCbG9iKFtWXSk6ei5mcm9tKFYpOlZ9cmV0dXJuIGZ1bmN0aW9uIFYoQixZKXtpZihLLmlzUGxhaW5PYmplY3QoQil8fEsuaXNBcnJheShCKSl7aWYoLTEhPT1FLmluZGV4T2YoQikpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAi'@;
put 'K1kpO0UucHVzaChCKSxLLmZvckVhY2goQixmdW5jdGlvbihYLFUpe2lmKCFLLmlzVW5kZWZpbmVkKFgpKXt2YXIgcSxlZT1ZP1krIi4iK1U6VTtpZihYJiYhWSYmIm9iamVjdCI9PXR5cGVvZiBYKWlmKEsuZW5kc1dpdGgoVSwie30iKSlYPUpTT04uc3RyaW5naWZ5KFgpO2Vsc2UgaWYoSy5l'@;
put 'bmRzV2l0aChVLCJbXSIpJiYocT1LLnRvQXJyYXkoWCkpKXJldHVybiB2b2lkIHEuZm9yRWFjaChmdW5jdGlvbih0ZSl7IUsuaXNVbmRlZmluZWQodGUpJiZrLmFwcGVuZChlZSxqKHRlKSl9KTtWKFgsZWUpfX0pLEUucG9wKCl9ZWxzZSBrLmFwcGVuZChZLGooQikpfShMKSxrfX0sNDg3NToo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCksSz1SKDcyODgpLnZlcnNpb24sTD1SKDI2NDgpLGs9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKGZ1bmN0aW9uKGosVil7a1tqXT1mdW5jdGlvbihC'@;
put 'KXtyZXR1cm4gdHlwZW9mIEI9PT1qfHwiYSIrKFY8MT8ibiAiOiIgIikran19KTt2YXIgRT17fTtrLnRyYW5zaXRpb25hbD1mdW5jdGlvbihqLFYsQil7ZnVuY3Rpb24gWShYLFUpe3JldHVybiJbQXhpb3MgdiIrSysiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK1grIiciK1UrKEI/Ii4gIitC'@;
put 'OiIiKX1yZXR1cm4gZnVuY3Rpb24oWCxVLHEpe2lmKCExPT09ail0aHJvdyBuZXcgTChZKFUsIiBoYXMgYmVlbiByZW1vdmVkIisoVj8iIGluICIrVjoiIikpLEwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBWJiYhRVtVXSYmKEVbVV09ITAsei53YXJuKFkoVSwiIGhhcyBiZWVuIGRlcHJlY2F0'@;
put 'ZWQgc2luY2UgdiIrVisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhanx8aihYLFUscSl9fSxNLmV4cG9ydHM9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oaixWLEIpe2lmKCJvYmplY3QiIT10eXBlb2Ygail0aHJvdyBuZXcgTCgib3B0aW9ucyBtdXN0IGJl'@;
put 'IGFuIG9iamVjdCIsTC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Zm9yKHZhciBZPU9iamVjdC5rZXlzKGopLFg9WS5sZW5ndGg7WC0tID4wOyl7dmFyIFU9WVtYXSxxPVZbVV07aWYocSl7dmFyIGVlPWpbVV0sdGU9dm9pZCAwPT09ZWV8fHEoZWUsVSxqKTtpZighMCE9PXRlKXRocm93IG5ldyBM'@;
put 'KCJvcHRpb24gIitVKyIgbXVzdCBiZSAiK3RlLEwuRVJSX0JBRF9PUFRJT05fVkFMVUUpfWVsc2UgaWYoITAhPT1CKXRocm93IG5ldyBMKCJVbmtub3duIG9wdGlvbiAiK1UsTC5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOmt9fSw0ODY3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IHosSz1SKDE4NDkpLEw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxrPSh6PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oRyl7dmFyIGI9TC5jYWxsKEcpO3JldHVybiB6W2JdfHwoeltiXT1iLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSk7ZnVuY3Rpb24gRShHKXtyZXR1cm4g'@;
put 'Rz1HLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7cmV0dXJuIGsoYik9PT1HfX1mdW5jdGlvbiBqKEcpe3JldHVybiBBcnJheS5pc0FycmF5KEcpfWZ1bmN0aW9uIFYoRyl7cmV0dXJuIHZvaWQgMD09PUd9dmFyIEI9RSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBZKEcpe3JldHVybiBudWxs'@;
put 'IT09RyYmIm9iamVjdCI9PXR5cGVvZiBHfWZ1bmN0aW9uIFgoRyl7aWYoIm9iamVjdCIhPT1rKEcpKXJldHVybiExO3ZhciBiPU9iamVjdC5nZXRQcm90b3R5cGVPZihHKTtyZXR1cm4gbnVsbD09PWJ8fGI9PT1PYmplY3QucHJvdG90eXBlfXZhciBVPUUoIkRhdGUiKSxxPUUoIkZpbGUiKSxl'@;
put 'ZT1FKCJCbG9iIiksdGU9RSgiRmlsZUxpc3QiKTtmdW5jdGlvbiBvZShHKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09TC5jYWxsKEcpfXZhciBzZT1FKCJVUkxTZWFyY2hQYXJhbXMiKTtmdW5jdGlvbiBoZShHLGIpe2lmKG51bGwhPUcpaWYoIm9iamVjdCIhPXR5cGVvZiBHJiYoRz1b'@;
put 'R10pLGooRykpZm9yKHZhciBEPTAsSD1HLmxlbmd0aDtEPEg7RCsrKWIuY2FsbChudWxsLEdbRF0sRCxHKTtlbHNlIGZvcih2YXIgTiBpbiBHKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLE4pJiZiLmNhbGwobnVsbCxHW05dLE4sRyl9dmFyIHVlLGNlPSh1ZT10eXBl'@;
put 'b2YgVWludDhBcnJheTwidSImJk9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSxmdW5jdGlvbihHKXtyZXR1cm4gdWUmJkcgaW5zdGFuY2VvZiB1ZX0pO00uZXhwb3J0cz17aXNBcnJheTpqLGlzQXJyYXlCdWZmZXI6Qixpc0J1ZmZlcjpmdW5jdGlvbihHKXtyZXR1cm4gbnVsbCE9'@;
put 'PUcmJiFWKEcpJiZudWxsIT09Ry5jb25zdHJ1Y3RvciYmIVYoRy5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBHLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZHLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEcpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKEcpe3ZhciBiPSJbb2JqZWN0IEZvcm1E'@;
put 'YXRhXSI7cmV0dXJuIEcmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJkcgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TC5jYWxsKEcpPT09Ynx8b2UoRy50b1N0cmluZykmJkcudG9TdHJpbmcoKT09PWIpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihHKXtyZXR1cm4gdHlwZW9mIEFy'@;
put 'cmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhHKTpHJiZHLmJ1ZmZlciYmQihHLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKEcpe3JldHVybiJzdHJpbmciPT10eXBlb2YgR30saXNOdW1iZXI6ZnVuY3Rpb24oRyl7cmV0dXJuIm51bWJlciI9'@;
put 'PXR5cGVvZiBHfSxpc09iamVjdDpZLGlzUGxhaW5PYmplY3Q6WCxpc1VuZGVmaW5lZDpWLGlzRGF0ZTpVLGlzRmlsZTpxLGlzQmxvYjplZSxpc0Z1bmN0aW9uOm9lLGlzU3RyZWFtOmZ1bmN0aW9uKEcpe3JldHVybiBZKEcpJiZvZShHLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpzZSxpc1N0'@;
put 'YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybih0eXBlb2YgbmF2aWdhdG9yPiJ1Inx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiZ0eXBlb2Ygd2lu'@;
put 'ZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1In0sZm9yRWFjaDpoZSxtZXJnZTpmdW5jdGlvbiBHKCl7dmFyIGI9e307ZnVuY3Rpb24gRChnLEMpe2JbQ109WChiW0NdKSYmWChnKT9HKGJbQ10sZyk6WChnKT9HKHt9LGcpOmooZyk/Zy5zbGljZSgpOmd9Zm9yKHZhciBIPTAsTj1hcmd1bWVu'@;
put 'dHMubGVuZ3RoO0g8TjtIKyspaGUoYXJndW1lbnRzW0hdLEQpO3JldHVybiBifSxleHRlbmQ6ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBoZShiLGZ1bmN0aW9uKEgsTil7R1tOXT1EJiYiZnVuY3Rpb24iPT10eXBlb2YgSD9LKEgsRCk6SH0pLEd9LHRyaW06ZnVuY3Rpb24oRyl7cmV0dXJuIEcu'@;
put 'dHJpbT9HLnRyaW0oKTpHLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oRyl7cmV0dXJuIDY1Mjc5PT09Ry5jaGFyQ29kZUF0KDApJiYoRz1HLnNsaWNlKDEpKSxHfSxpbmhlcml0czpmdW5jdGlvbihHLGIsRCxIKXtHLnByb3RvdHlwZT1PYmplY3QuY3JlYXRl'@;
put 'KGIucHJvdG90eXBlLEgpLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUcsRCYmT2JqZWN0LmFzc2lnbihHLnByb3RvdHlwZSxEKX0sdG9GbGF0T2JqZWN0OmZ1bmN0aW9uKEcsYixEKXt2YXIgSCxOLGcsQz17fTtiPWJ8fHt9O2Rve2ZvcihOPShIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz'@;
put 'KEcpKS5sZW5ndGg7Ti0tID4wOylDW2c9SFtOXV18fChiW2ddPUdbZ10sQ1tnXT0hMCk7Rz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoRyl9d2hpbGUoRyYmKCFEfHxEKEcsYikpJiZHIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGJ9LGtpbmRPZjprLGtpbmRPZlRlc3Q6RSxlbmRzV2l0aDpm'@;
put 'dW5jdGlvbihHLGIsRCl7Rz1TdHJpbmcoRyksKHZvaWQgMD09PUR8fEQ+Ry5sZW5ndGgpJiYoRD1HLmxlbmd0aCk7dmFyIEg9Ry5pbmRleE9mKGIsRC09Yi5sZW5ndGgpO3JldHVybi0xIT09SCYmSD09PUR9LHRvQXJyYXk6ZnVuY3Rpb24oRyl7aWYoIUcpcmV0dXJuIG51bGw7dmFyIGI9Ry5s'@;
put 'ZW5ndGg7aWYoVihiKSlyZXR1cm4gbnVsbDtmb3IodmFyIEQ9bmV3IEFycmF5KGIpO2ItLSA+MDspRFtiXT1HW2JdO3JldHVybiBEfSxpc1R5cGVkQXJyYXk6Y2UsaXNGaWxlTGlzdDp0ZX19LDU2MjM6TT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBPKEssTCxrKXtLIGluc3RhbmNlb2YgUmVn'@;
put 'RXhwJiYoSz1SKEssaykpLEwgaW5zdGFuY2VvZiBSZWdFeHAmJihMPVIoTCxrKSk7dmFyIEU9eihLLEwsayk7cmV0dXJuIEUmJntzdGFydDpFWzBdLGVuZDpFWzFdLHByZTprLnNsaWNlKDAsRVswXSksYm9keTprLnNsaWNlKEVbMF0rSy5sZW5ndGgsRVsxXSkscG9zdDprLnNsaWNlKEVbMV0r'@;
put 'TC5sZW5ndGgpfX1mdW5jdGlvbiBSKEssTCl7dmFyIGs9TC5tYXRjaChLKTtyZXR1cm4gaz9rWzBdOm51bGx9ZnVuY3Rpb24geihLLEwsayl7dmFyIEUsaixWLEIsWSxYPWsuaW5kZXhPZihLKSxVPWsuaW5kZXhPZihMLFgrMSkscT1YO2lmKFg+PTAmJlU+MCl7aWYoSz09PUwpcmV0dXJuW1gs'@;
put 'VV07Zm9yKEU9W10sVj1rLmxlbmd0aDtxPj0wJiYhWTspcT09WD8oRS5wdXNoKHEpLFg9ay5pbmRleE9mKEsscSsxKSk6MT09RS5sZW5ndGg/WT1bRS5wb3AoKSxVXTooKGo9RS5wb3AoKSk8ViYmKFY9aixCPVUpLFU9ay5pbmRleE9mKEwscSsxKSkscT1YPFUmJlg+PTA/WDpVO0UubGVuZ3Ro'@;
put 'JiYoWT1bVixCXSl9cmV0dXJuIFl9TS5leHBvcnRzPU8sTy5yYW5nZT16fSw5NzQyOihNLE8pPT57InVzZSBzdHJpY3QiO08uYnl0ZUxlbmd0aD1mdW5jdGlvbihCKXt2YXIgWT1qKEIpLFU9WVsxXTtyZXR1cm4gMyooWVswXStVKS80LVV9LE8udG9CeXRlQXJyYXk9ZnVuY3Rpb24oQil7dmFy'@;
put 'IFksWCxjZSxVPWooQikscT1VWzBdLGVlPVVbMV0sdGU9bmV3IEsoMyoocSsoY2U9ZWUpKS80LWNlKSxvZT0wLHNlPWVlPjA/cS00OnE7Zm9yKFg9MDtYPHNlO1grPTQpWT16W0IuY2hhckNvZGVBdChYKV08PDE4fHpbQi5jaGFyQ29kZUF0KFgrMSldPDwxMnx6W0IuY2hhckNvZGVBdChYKzIp'@;
put 'XTw8Nnx6W0IuY2hhckNvZGVBdChYKzMpXSx0ZVtvZSsrXT1ZPj4xNiYyNTUsdGVbb2UrK109WT4+OCYyNTUsdGVbb2UrK109MjU1Jlk7cmV0dXJuIDI9PT1lZSYmKFk9eltCLmNoYXJDb2RlQXQoWCldPDwyfHpbQi5jaGFyQ29kZUF0KFgrMSldPj40LHRlW29lKytdPTI1NSZZKSwxPT09ZWUm'@;
put 'JihZPXpbQi5jaGFyQ29kZUF0KFgpXTw8MTB8eltCLmNoYXJDb2RlQXQoWCsxKV08PDR8eltCLmNoYXJDb2RlQXQoWCsyKV0+PjIsdGVbb2UrK109WT4+OCYyNTUsdGVbb2UrK109MjU1JlkpLHRlfSxPLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24oQil7Zm9yKHZhciBZLFg9Qi5sZW5ndGgsVT1Y'@;
put 'JTMscT1bXSx0ZT0wLG9lPVgtVTt0ZTxvZTt0ZSs9MTYzODMpcS5wdXNoKFYoQix0ZSx0ZSsxNjM4Mz5vZT9vZTp0ZSsxNjM4MykpO3JldHVybiAxPT09VT9xLnB1c2goUlsoWT1CW1gtMV0pPj4yXStSW1k8PDQmNjNdKyI9PSIpOjI9PT1VJiZxLnB1c2goUlsoWT0oQltYLTJdPDw4KStCW1gt'@;
put 'MV0pPj4xMF0rUltZPj40JjYzXStSW1k8PDImNjNdKyI9IikscS5qb2luKCIiKX07Zm9yKHZhciBSPVtdLHo9W10sSz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxMPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEy'@;
put 'MzQ1Njc4OSsvIixrPTA7azw2NDsrK2spUltrXT1MW2tdLHpbTC5jaGFyQ29kZUF0KGspXT1rO2Z1bmN0aW9uIGooQil7dmFyIFk9Qi5sZW5ndGg7aWYoWSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFg9'@;
put 'Qi5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1YJiYoWD1ZKSxbWCxYPT09WT8wOjQtWCU0XX1mdW5jdGlvbiBWKEIsWSxYKXtmb3IodmFyIHEsZWU9W10sdGU9WTt0ZTxYO3RlKz0zKWVlLnB1c2goUlsocT0oQlt0ZV08PDE2JjE2NzExNjgwKSsoQlt0ZSsxXTw8OCY2NTI4MCkrKDI1NSZCW3Rl'@;
put 'KzJdKSk+PjE4JjYzXStSW3E+PjEyJjYzXStSW3E+PjYmNjNdK1JbNjMmcV0pO3JldHVybiBlZS5qb2luKCIiKX16WyItIi5jaGFyQ29kZUF0KDApXT02Mix6WyJfIi5jaGFyQ29kZUF0KDApXT02M30sMzU1MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1'@;
put 'bmN0aW9uIEwodixwKXtpZighdil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKHYscCl7di5zdXBlcl89cDt2YXIgdz1mdW5jdGlvbigpe307dy5wcm90b3R5cGU9cC5wcm90b3R5cGUsdi5wcm90b3R5cGU9bmV3IHcsdi5wcm90b3R5cGUuY29uc3Ry'@;
put 'dWN0b3I9dn1mdW5jdGlvbiBFKHYscCx3KXtpZihFLmlzQk4odikpcmV0dXJuIHY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXYmJigibGUiIT09cCYmImJlIiE9PXB8fCh3PXAscD0xMCksdGhpcy5faW5pdCh2fHww'@;
put 'LHB8fDEwLHd8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig2NjAxKS5CdWZmZXJ9Y2F0Y2h7'@;
put 'fWZ1bmN0aW9uIFYodixwKXt2YXIgdz12LmNoYXJDb2RlQXQocCk7cmV0dXJuIHc+PTQ4JiZ3PD01Nz93LTQ4Onc+PTY1JiZ3PD03MD93LTU1Onc+PTk3JiZ3PD0xMDI/dy04Nzp2b2lkIEwoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIrdil9ZnVuY3Rpb24gQih2LHAsdyl7dmFyIEo9Vih2'@;
put 'LHcpO3JldHVybiB3LTE+PXAmJihKfD1WKHYsdy0xKTw8NCksSn1mdW5jdGlvbiBZKHYscCx3LEope2Zvcih2YXIgbmU9MCxkZT0wLGZlPU1hdGgubWluKHYubGVuZ3RoLHcpLHhlPXA7eGU8ZmU7eGUrKyl7dmFyIEllPXYuY2hhckNvZGVBdCh4ZSktNDg7bmUqPUosZGU9SWU+PTQ5P0llLTQ5'@;
put 'KzEwOkllPj0xNz9JZS0xNysxMDpJZSxMKEllPj0wJiZkZTxKLCJJbnZhbGlkIGNoYXJhY3RlciIpLG5lKz1kZX1yZXR1cm4gbmV9ZnVuY3Rpb24gWCh2LHApe3Yud29yZHM9cC53b3Jkcyx2Lmxlbmd0aD1wLmxlbmd0aCx2Lm5lZ2F0aXZlPXAubmVnYXRpdmUsdi5yZWQ9cC5yZWR9aWYoRS5p'@;
put 'c0JOPWZ1bmN0aW9uKHYpe3JldHVybiB2IGluc3RhbmNlb2YgRXx8bnVsbCE9PXYmJiJvYmplY3QiPT10eXBlb2YgdiYmdi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkodi53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKHYscCl7cmV0dXJuIHYuY21wKHAp'@;
put 'PjA/djpwfSxFLm1pbj1mdW5jdGlvbih2LHApe3JldHVybiB2LmNtcChwKTwwP3Y6cH0sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odixwLHcpe2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdGhpcy5faW5pdE51bWJlcih2LHAsdyk7aWYoIm9iamVjdCI9PXR5cGVvZiB2KXJldHVy'@;
put 'biB0aGlzLl9pbml0QXJyYXkodixwLHcpOyJoZXgiPT09cCYmKHA9MTYpLEwocD09PSgwfHApJiZwPj0yJiZwPD0zNik7dmFyIEo9MDsiLSI9PT0odj12LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEorKyx0aGlzLm5lZ2F0aXZlPTEpLEo8di5sZW5ndGgmJigxNj09PXA/'@;
put 'dGhpcy5fcGFyc2VIZXgodixKLHcpOih0aGlzLl9wYXJzZUJhc2UodixwLEopLCJsZSI9PT13JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkscCx3KSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih2LHAsdyl7djwwJiYodGhpcy5uZWdhdGl2ZT0xLHY9LXYpLHY8'@;
put 'NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnZdLHRoaXMubGVuZ3RoPTEpOnY8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdix2LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooTCh2PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3'@;
put 'MTA4ODYzJnYsdi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09dyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHAsdyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odixwLHcpe2lmKEwoIm51bWJlciI9PXR5cGVvZiB2Lmxlbmd0aCks'@;
put 'di5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgSj0wO0o8dGhpcy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09'@;
put 'MDt2YXIgbmUsZGUsZmU9MDtpZigiYmUiPT09dylmb3IoSj12Lmxlbmd0aC0xLG5lPTA7Sj49MDtKLT0zKXRoaXMud29yZHNbbmVdfD0oZGU9dltKXXx2W0otMV08PDh8dltKLTJdPDwxNik8PGZlJjY3MTA4ODYzLHRoaXMud29yZHNbbmUrMV09ZGU+Pj4yNi1mZSY2NzEwODg2MywoZmUrPTI0'@;
put 'KT49MjYmJihmZS09MjYsbmUrKyk7ZWxzZSBpZigibGUiPT09dylmb3IoSj0wLG5lPTA7Sjx2Lmxlbmd0aDtKKz0zKXRoaXMud29yZHNbbmVdfD0oZGU9dltKXXx2W0orMV08PDh8dltKKzJdPDwxNik8PGZlJjY3MTA4ODYzLHRoaXMud29yZHNbbmUrMV09ZGU+Pj4yNi1mZSY2NzEwODg2Mywo'@;
put 'ZmUrPTI0KT49MjYmJihmZS09MjYsbmUrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih2LHAsdyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh2Lmxlbmd0aC1wKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZh'@;
put 'ciBKPTA7Sjx0aGlzLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT0wO3ZhciBuZSxkZT0wLGZlPTA7aWYoImJlIj09PXcpZm9yKEo9di5sZW5ndGgtMTtKPj1wO0otPTIpbmU9Qih2LHAsSik8PGRlLHRoaXMud29yZHNbZmVdfD02NzEwODg2MyZuZSxkZT49MTg/KGRlLT0xOCx0aGlzLndvcmRz'@;
put 'W2ZlKz0xXXw9bmU+Pj4yNik6ZGUrPTg7ZWxzZSBmb3IoSj0odi5sZW5ndGgtcCklMj09MD9wKzE6cDtKPHYubGVuZ3RoO0orPTIpbmU9Qih2LHAsSik8PGRlLHRoaXMud29yZHNbZmVdfD02NzEwODg2MyZuZSxkZT49MTg/KGRlLT0xOCx0aGlzLndvcmRzW2ZlKz0xXXw9bmU+Pj4yNik6ZGUr'@;
put 'PTg7dGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih2LHAsdyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEo9MCxuZT0xO25lPD02NzEwODg2MztuZSo9cClKKys7Si0tLG5lPW5lL3B8MDtmb3IodmFyIGRlPXYubGVuZ3RoLXcsZmU9'@;
put 'ZGUlSix4ZT1NYXRoLm1pbihkZSxkZS1mZSkrdyxJZT0wLEZlPXc7RmU8eGU7RmUrPUopSWU9WSh2LEZlLEZlK0oscCksdGhpcy5pbXVsbihuZSksdGhpcy53b3Jkc1swXStJZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1JZTp0aGlzLl9pYWRkbihJZSk7aWYoMCE9PWZlKXt2YXIgT2U9MTtm'@;
put 'b3IoSWU9WSh2LEZlLHYubGVuZ3RoLHApLEZlPTA7RmU8ZmU7RmUrKylPZSo9cDt0aGlzLmltdWxuKE9lKSx0aGlzLndvcmRzWzBdK0llPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUllOnRoaXMuX2lhZGRuKEllKX10aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHYp'@;
put 'e3Yud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9dGhpcy5sZW5ndGgsdi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHYucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5fbW92'@;
put 'ZT1mdW5jdGlvbih2KXtYKHYsdGhpcyl9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHY9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weSh2KSx2fSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHYpe2Zvcig7dGhpcy5sZW5ndGg8djspdGhpcy53b3Jkc1t0aGlzLmxl'@;
put 'bmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXtFLnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRp'@;
put 'bC5pbnNwZWN0LmN1c3RvbSIpXT1VfWNhdGNoe0UucHJvdG90eXBlLmluc3BlY3Q9VX1lbHNlIEUucHJvdG90eXBlLmluc3BlY3Q9VTtmdW5jdGlvbiBVKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIHE9WyIiLCIwIiwiMDAi'@;
put 'LCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sZWU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sdGU9WzAsMCwzMzU1NDQzMiw0'@;
put 'MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYz'@;
put 'Miw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gb2UodixwLHcpe3cubmVnYXRpdmU9cC5uZWdhdGl2ZV52'@;
put 'Lm5lZ2F0aXZlO3ZhciBKPXYubGVuZ3RoK3AubGVuZ3RofDA7dy5sZW5ndGg9SixKPUotMXwwO3ZhciBuZT0wfHYud29yZHNbMF0sZGU9MHxwLndvcmRzWzBdLGZlPW5lKmRlLEllPWZlLzY3MTA4ODY0fDA7dy53b3Jkc1swXT02NzEwODg2MyZmZTtmb3IodmFyIEZlPTE7RmU8SjtGZSsrKXtm'@;
put 'b3IodmFyIE9lPUllPj4+MjYsamU9NjcxMDg4NjMmSWUsV2U9TWF0aC5taW4oRmUscC5sZW5ndGgtMSksS2U9TWF0aC5tYXgoMCxGZS12Lmxlbmd0aCsxKTtLZTw9V2U7S2UrKylPZSs9KGZlPShuZT0wfHYud29yZHNbRmUtS2V8MF0pKihkZT0wfHAud29yZHNbS2VdKStqZSkvNjcxMDg4NjR8'@;
put 'MCxqZT02NzEwODg2MyZmZTt3LndvcmRzW0ZlXT0wfGplLEllPTB8T2V9cmV0dXJuIDAhPT1JZT93LndvcmRzW0ZlXT0wfEllOncubGVuZ3RoLS0sdy5fc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih2LHApe3ZhciB3O2lmKHA9MHxwfHwxLDE2PT09KHY9dnx8MTApfHwi'@;
put 'aGV4Ij09PXYpe3c9IiI7Zm9yKHZhciBKPTAsbmU9MCxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspe3ZhciBmZT10aGlzLndvcmRzW2RlXSx4ZT0oMTY3NzcyMTUmKGZlPDxKfG5lKSkudG9TdHJpbmcoMTYpO25lPWZlPj4+MjQtSiYxNjc3NzIxNSwoSis9Mik+PTI2JiYoSi09MjYsZGUtLSks'@;
put 'dz0wIT09bmV8fGRlIT09dGhpcy5sZW5ndGgtMT9xWzYteGUubGVuZ3RoXSt4ZSt3OnhlK3d9Zm9yKDAhPT1uZSYmKHc9bmUudG9TdHJpbmcoMTYpK3cpO3cubGVuZ3RoJXAhPTA7KXc9IjAiK3c7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodz0iLSIrdyksd31pZih2PT09KDB8dikmJnY+'@;
put 'PTImJnY8PTM2KXt2YXIgSWU9ZWVbdl0sRmU9dGVbdl07dz0iIjt2YXIgT2U9dGhpcy5jbG9uZSgpO2ZvcihPZS5uZWdhdGl2ZT0wOyFPZS5pc1plcm8oKTspe3ZhciBqZT1PZS5tb2RybihGZSkudG9TdHJpbmcodik7dz0oT2U9T2UuaWRpdm4oRmUpKS5pc1plcm8oKT9qZSt3OnFbSWUtamUu'@;
put 'bGVuZ3RoXStqZSt3fWZvcih0aGlzLmlzWmVybygpJiYodz0iMCIrdyk7dy5sZW5ndGglcCE9MDspdz0iMCIrdztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih3PSItIit3KSx3fUwoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9'@;
put 'ZnVuY3Rpb24oKXt2YXIgdj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxl'@;
put 'bmd0aD4yJiZMKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdjp2fSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0saiYmKEUucHJvdG90eXBlLnRvQnVmZmVy'@;
put 'PWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2Uoaix2LHApfSksRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHYscCl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHYscCx3KXt0aGlzLl9z'@;
put 'dHJpcCgpO3ZhciBKPXRoaXMuYnl0ZUxlbmd0aCgpLG5lPXd8fE1hdGgubWF4KDEsSik7TChKPD1uZSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEwobmU+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIGZlLHhlLGRlPSh4ZT1uZSwoZmU9diku'@;
put 'YWxsb2NVbnNhZmU/ZmUuYWxsb2NVbnNhZmUoeGUpOm5ldyBmZSh4ZSkpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09cD8iTEUiOiJCRSIpXShkZSxKKSxkZX0sRS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9MCxKPTAsbmU9MCxk'@;
put 'ZT0wO25lPHRoaXMubGVuZ3RoO25lKyspe3ZhciBmZT10aGlzLndvcmRzW25lXTw8ZGV8Sjt2W3crK109MjU1JmZlLHc8di5sZW5ndGgmJih2W3crK109ZmU+PjgmMjU1KSx3PHYubGVuZ3RoJiYodlt3KytdPWZlPj4xNiYyNTUpLDY9PT1kZT8odzx2Lmxlbmd0aCYmKHZbdysrXT1mZT4+MjQm'@;
put 'MjU1KSxKPTAsZGU9MCk6KEo9ZmU+Pj4yNCxkZSs9Mil9aWYodzx2Lmxlbmd0aClmb3Iodlt3KytdPUo7dzx2Lmxlbmd0aDspdlt3KytdPTB9LEUucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PXYubGVuZ3RoLTEsSj0wLG5lPTAsZGU9MDtuZTx0aGlz'@;
put 'Lmxlbmd0aDtuZSsrKXt2YXIgZmU9dGhpcy53b3Jkc1tuZV08PGRlfEo7dlt3LS1dPTI1NSZmZSx3Pj0wJiYodlt3LS1dPWZlPj44JjI1NSksdz49MCYmKHZbdy0tXT1mZT4+MTYmMjU1KSw2PT09ZGU/KHc+PTAmJih2W3ctLV09ZmU+PjI0JjI1NSksSj0wLGRlPTApOihKPWZlPj4+MjQsZGUr'@;
put 'PTIpfWlmKHc+PTApZm9yKHZbdy0tXT1KO3c+PTA7KXZbdy0tXT0wfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24odil7cmV0dXJuIDMyLU1hdGguY2x6MzIodil9OmZ1bmN0aW9uKHYpe3ZhciBwPXYsdz0wO3JldHVybiBwPj00MDk2JiYodys9MTMscD4+Pj0x'@;
put 'MykscD49NjQmJih3Kz03LHA+Pj49NykscD49OCYmKHcrPTQscD4+Pj00KSxwPj0yJiYodys9MixwPj4+PTIpLHcrcH0sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHYpe2lmKDA9PT12KXJldHVybiAyNjt2YXIgcD12LHc9MDtyZXR1cm4hKDgxOTEmcCkmJih3Kz0xMyxwPj4+PTEz'@;
put 'KSwhKDEyNyZwKSYmKHcrPTcscD4+Pj03KSwhKDE1JnApJiYodys9NCxwPj4+PTQpLCEoMyZwKSYmKHcrPTIscD4+Pj0yKSwhKDEmcCkmJncrKyx3fSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0x'@;
put 'XSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStwfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB2PTAscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3BdKTtpZih2'@;
put 'Kz13LDI2IT09dylicmVha31yZXR1cm4gdn0sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHYpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygp'@;
put 'Lmlub3RuKHYpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMudGVzdG4odi0xKT90aGlzLm5vdG4odikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5p'@;
put 'dW9yPWZ1bmN0aW9uKHYpe2Zvcig7dGhpcy5sZW5ndGg8di5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHA9MDtwPHYubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcF18di53b3Jkc1twXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90'@;
put 'b3R5cGUuaW9yPWZ1bmN0aW9uKHYpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfHYubmVnYXRpdmUpKSx0aGlzLml1b3Iodil9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHYpOnYuY2xvbmUoKS5pb3Io'@;
put 'dGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3Iodik6di5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHYpe3ZhciBwO3A9dGhpcy5sZW5ndGg+di5sZW5ndGg/'@;
put 'djp0aGlzO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXRoaXMud29yZHNbd109dGhpcy53b3Jkc1t3XSZ2LndvcmRzW3ddO3JldHVybiB0aGlzLmxlbmd0aD1wLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHYpe3JldHVybiBMKDA9PSh0aGlzLm5l'@;
put 'Z2F0aXZlfHYubmVnYXRpdmUpKSx0aGlzLml1YW5kKHYpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHYpOnYuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHYpe3Jl'@;
put 'dHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodik6di5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih2KXt2YXIgcCx3O3RoaXMubGVuZ3RoPnYubGVuZ3RoPyhwPXRoaXMsdz12KToocD12LHc9dGhpcyk7Zm9yKHZhciBK'@;
put 'PTA7Sjx3Lmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1wLndvcmRzW0pdXncud29yZHNbSl07aWYodGhpcyE9PXApZm9yKDtKPHAubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPXAud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPXAubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBl'@;
put 'Lml4b3I9ZnVuY3Rpb24odil7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Iodil9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3Iodik6di5jbG9uZSgpLml4b3Io'@;
put 'dGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih2KTp2LmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHYpe0woIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0w'@;
put 'KTt2YXIgcD0wfE1hdGguY2VpbCh2LzI2KSx3PXYlMjY7dGhpcy5fZXhwYW5kKHApLHc+MCYmcC0tO2Zvcih2YXIgSj0wO0o8cDtKKyspdGhpcy53b3Jkc1tKXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tKXTtyZXR1cm4gdz4wJiYodGhpcy53b3Jkc1tKXT1+dGhpcy53b3Jkc1tKXSY2NzEwODg2'@;
put 'Mz4+MjYtdyksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHYpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHYscCl7TCgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciB3PXYvMjZ8MCxKPXYlMjY7cmV0'@;
put 'dXJuIHRoaXMuX2V4cGFuZCh3KzEpLHRoaXMud29yZHNbd109cD90aGlzLndvcmRzW3ddfDE8PEo6dGhpcy53b3Jkc1t3XSZ+KDE8PEopLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odil7dmFyIHAsdyxKO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09di5uZWdh'@;
put 'dGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHA9dGhpcy5pc3ViKHYpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmUpcmV0dXJuIHYubmVnYXRpdmU9MCxwPXRoaXMuaXN1Yih2KSx2Lm5lZ2F0aXZlPTEscC5f'@;
put 'bm9ybVNpZ24oKTt0aGlzLmxlbmd0aD52Lmxlbmd0aD8odz10aGlzLEo9dik6KHc9dixKPXRoaXMpO2Zvcih2YXIgbmU9MCxkZT0wO2RlPEoubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09NjcxMDg4NjMmKHA9KDB8dy53b3Jkc1tkZV0pKygwfEoud29yZHNbZGVdKStuZSksbmU9cD4+PjI2'@;
put 'O2Zvcig7MCE9PW5lJiZkZTx3Lmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPTY3MTA4ODYzJihwPSgwfHcud29yZHNbZGVdKStuZSksbmU9cD4+PjI2O2lmKHRoaXMubGVuZ3RoPXcubGVuZ3RoLDAhPT1uZSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1uZSx0aGlzLmxlbmd0aCsrO2Vsc2Ug'@;
put 'aWYodyE9PXRoaXMpZm9yKDtkZTx3Lmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXcud29yZHNbZGVdO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odil7dmFyIHA7cmV0dXJuIDAhPT12Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odi5uZWdhdGl2ZT0wLHA9'@;
put 'dGhpcy5zdWIodiksdi5uZWdhdGl2ZV49MSxwKTowPT09di5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxwPXYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxwKTp0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh2KTp2LmNsb25lKCku'@;
put 'aWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih2KXtpZigwIT09di5uZWdhdGl2ZSl7di5uZWdhdGl2ZT0wO3ZhciBwPXRoaXMuaWFkZCh2KTtyZXR1cm4gdi5uZWdhdGl2ZT0xLHAuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRp'@;
put 'dmU9MCx0aGlzLmlhZGQodiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHcsSixuZT10aGlzLmNtcCh2KTtpZigwPT09bmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO25lPjA/KHc9dGhpcyxKPXYpOih3PXYs'@;
put 'Sj10aGlzKTtmb3IodmFyIGRlPTAsZmU9MDtmZTxKLmxlbmd0aDtmZSsrKWRlPShwPSgwfHcud29yZHNbZmVdKS0oMHxKLndvcmRzW2ZlXSkrZGUpPj4yNix0aGlzLndvcmRzW2ZlXT02NzEwODg2MyZwO2Zvcig7MCE9PWRlJiZmZTx3Lmxlbmd0aDtmZSsrKWRlPShwPSgwfHcud29yZHNbZmVd'@;
put 'KStkZSk+PjI2LHRoaXMud29yZHNbZmVdPTY3MTA4ODYzJnA7aWYoMD09PWRlJiZmZTx3Lmxlbmd0aCYmdyE9PXRoaXMpZm9yKDtmZTx3Lmxlbmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPXcud29yZHNbZmVdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxmZSksdyE9'@;
put 'PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodil9O3ZhciBzZT1mdW5jdGlvbih2LHAsdyl7dmFyIEosbmUsZGUsZmU9di53b3Jkcyx4ZT1wLndvcmRzLEllPXcud29yZHMs'@;
put 'RmU9MCxPZT0wfGZlWzBdLGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfGZlWzFdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfGZlWzJdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfGZlWzNdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfGZlWzRdLFVlPTgxOTEmWGUsaHQ9WGU+'@;
put 'Pj4xMyxNZT0wfGZlWzVdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxvdD0wfGZlWzZdLHV0PTgxOTEmb3QsTXQ9b3Q+Pj4xMyxIdD0wfGZlWzddLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfGZlWzhdLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfGZlWzldLGVuPTgxOTEmV24sJG49V24+'@;
put 'Pj4xMyxIbj0wfHhlWzBdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfHhlWzFdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfHhlWzJdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfHhlWzNdLEx0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxEdD0wfHhlWzRdLHB0PTgxOTEmRHQsWXQ9RHQ+'@;
put 'Pj4xMyxMbj0wfHhlWzVdLHp0PTgxOTEmTG4seW49TG4+Pj4xMyx4bj0wfHhlWzZdLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfHhlWzddLCR0PTgxOTEmUm4sRm49Um4+Pj4xMyxuaT0wfHhlWzhdLGxuPTgxOTEmbmksam49bmk+Pj4xMyxxcj0wfHhlWzldLGdpPTgxOTEmcXIseHI9cXI+'@;
put 'Pj4xMzt3Lm5lZ2F0aXZlPXYubmVnYXRpdmVecC5uZWdhdGl2ZSx3Lmxlbmd0aD0xOTt2YXIgVWk9KEZlKyhKPU1hdGguaW11bChqZSxmdCkpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChqZSxmbikpK01hdGguaW11bChXZSxmdCl8MCkpPDwxMyl8MDtGZT0oKGRlPU1hdGguaW11bChX'@;
put 'ZSxmbikpKyhuZT4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoWWUsZnQpLG5lPShuZT1NYXRoLmltdWwoWWUsZm4pKStNYXRoLmltdWwoUWUsZnQpfDAsZGU9TWF0aC5pbXVsKFFlLGZuKTt2YXIgS3I9KEZlKyhKPUorTWF0aC5pbXVsKGplLHd0KXwwKXww'@;
put 'KSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxYdCl8MCkrKG5lPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2MyxKPU1hdGguaW11bChQZSxmdCksbmU9KG5lPU1h'@;
put 'dGguaW11bChQZSxmbikpK01hdGguaW11bChiZSxmdCl8MCxkZT1NYXRoLmltdWwoYmUsZm4pLEo9SitNYXRoLmltdWwoWWUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFlLHd0KXwwLGRlPWRlK01hdGguaW11bChRZSxYdCl8MDt2YXIgbm89KEZlKyhK'@;
put 'PUorTWF0aC5pbXVsKGplLE50KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxtbil8MCkrKG5lPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxKPU1h'@;
put 'dGguaW11bChUZSxmdCksbmU9KG5lPU1hdGguaW11bChUZSxmbikpK01hdGguaW11bChxZSxmdCl8MCxkZT1NYXRoLmltdWwocWUsZm4pLEo9SitNYXRoLmltdWwoUGUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLGRlPWRlK01hdGguaW11'@;
put 'bChiZSxYdCl8MCxKPUorTWF0aC5pbXVsKFllLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChRZSxOdCl8MCxkZT1kZStNYXRoLmltdWwoUWUsbW4pfDA7dmFyIEhyPShGZSsoSj1KK01hdGguaW11bChqZSxMdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsTHQpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsUXQpfDApKyhuZT4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoVWUsZnQpLG5lPShuZT1NYXRoLmltdWwoVWUsZm4pKStNYXRo'@;
put 'LmltdWwoaHQsZnQpfDAsZGU9TWF0aC5pbXVsKGh0LGZuKSxKPUorTWF0aC5pbXVsKFRlLHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCxkZT1kZStNYXRoLmltdWwocWUsWHQpfDAsSj1KK01hdGguaW11bChQZSxOdCl8MCxuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLG1uKXwwLEo9SitNYXRoLmltdWwoWWUsTHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEx0KXwwLGRlPWRlK01hdGguaW11bChRZSxRdCl8MDt2YXIg'@;
put 'cWk9KEZlKyhKPUorTWF0aC5pbXVsKGplLHB0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxZdCl8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEw'@;
put 'ODg2MyxKPU1hdGguaW11bChEZSxmdCksbmU9KG5lPU1hdGguaW11bChEZSxmbikpK01hdGguaW11bCh6ZSxmdCl8MCxkZT1NYXRoLmltdWwoemUsZm4pLEo9SitNYXRoLmltdWwoVWUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLGRlPWRl'@;
put 'K01hdGguaW11bChodCxYdCl8MCxKPUorTWF0aC5pbXVsKFRlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCxkZT1kZStNYXRoLmltdWwocWUsbW4pfDAsSj1KK01hdGguaW11bChQZSxMdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFF0'@;
put 'KXwwKStNYXRoLmltdWwoYmUsTHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFF0KXwwLEo9SitNYXRoLmltdWwoWWUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKFFlLHB0KXwwLGRlPWRlK01hdGguaW11bChRZSxZdCl8MDt2YXIgSmk9KEZlKyhKPUorTWF0'@;
put 'aC5pbXVsKGplLHp0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSx5bil8MCkrKG5lPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2MyxKPU1hdGguaW11'@;
put 'bCh1dCxmdCksbmU9KG5lPU1hdGguaW11bCh1dCxmbikpK01hdGguaW11bChNdCxmdCl8MCxkZT1NYXRoLmltdWwoTXQsZm4pLEo9SitNYXRoLmltdWwoRGUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLGRlPWRlK01hdGguaW11bCh6ZSxY'@;
put 'dCl8MCxKPUorTWF0aC5pbXVsKFVlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsbW4pfDAsSj1KK01hdGguaW11bChUZSxMdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmltdWwo'@;
put 'cWUsTHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLFF0KXwwLEo9SitNYXRoLmltdWwoUGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLGRlPWRlK01hdGguaW11bChiZSxZdCl8MCxKPUorTWF0aC5pbXVsKFllLHp0KXwwLG5lPShuZT1uZStN'@;
put 'YXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCxkZT1kZStNYXRoLmltdWwoUWUseW4pfDA7dmFyIGFvPShGZSsoSj1KK01hdGguaW11bChqZSxzbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDApKTw8MTMp'@;
put 'fDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsQm4pfDApKyhuZT4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoUHQsZnQpLG5lPShuZT1NYXRoLmltdWwoUHQsZm4pKStNYXRoLmltdWwob24sZnQpfDAsZGU9TWF0aC5pbXVsKG9uLGZuKSxKPUorTWF0aC5p'@;
put 'bXVsKHV0LHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCxkZT1kZStNYXRoLmltdWwoTXQsWHQpfDAsSj1KK01hdGguaW11bChEZSxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsZGU9ZGUr'@;
put 'TWF0aC5pbXVsKHplLG1uKXwwLEo9SitNYXRoLmltdWwoVWUsTHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKGh0LEx0KXwwLGRlPWRlK01hdGguaW11bChodCxRdCl8MCxKPUorTWF0aC5pbXVsKFRlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsWXQp'@;
put 'fDApK01hdGguaW11bChxZSxwdCl8MCxkZT1kZStNYXRoLmltdWwocWUsWXQpfDAsSj1KK01hdGguaW11bChQZSx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLHluKXwwLEo9SitNYXRoLmltdWwoWWUsc24p'@;
put 'fDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLGRlPWRlK01hdGguaW11bChRZSxCbil8MDt2YXIgcm89KEZlKyhKPUorTWF0aC5pbXVsKGplLCR0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsRm4pfDApK01hdGguaW11bChX'@;
put 'ZSwkdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxGbil8MCkrKG5lPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2MyxKPU1hdGguaW11bChVdCxmdCksbmU9KG5lPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCxkZT1NYXRoLmltdWwoYm4s'@;
put 'Zm4pLEo9SitNYXRoLmltdWwoUHQsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLGRlPWRlK01hdGguaW11bChvbixYdCl8MCxKPUorTWF0aC5pbXVsKHV0LE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChN'@;
put 'dCxOdCl8MCxkZT1kZStNYXRoLmltdWwoTXQsbW4pfDAsSj1KK01hdGguaW11bChEZSxMdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsTHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFF0KXwwLEo9SitNYXRoLmltdWwoVWUscHQpfDAsbmU9KG5lPW5lK01h'@;
put 'dGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLGRlPWRlK01hdGguaW11bChodCxZdCl8MCxKPUorTWF0aC5pbXVsKFRlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCxkZT1kZStNYXRoLmltdWwocWUseW4pfDAsSj1KK01h'@;
put 'dGguaW11bChQZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLEJuKXwwLEo9SitNYXRoLmltdWwoWWUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxGbil8MCkrTWF0aC5pbXVsKFFlLCR0KXwwLGRl'@;
put 'PWRlK01hdGguaW11bChRZSxGbil8MDt2YXIgaW89KEZlKyhKPUorTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxqbil8MCkrKG5lPj4+'@;
put 'MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2MyxKPU1hdGguaW11bChlbixmdCksbmU9KG5lPU1hdGguaW11bChlbixmbikpK01hdGguaW11bCgkbixmdCl8MCxkZT1NYXRoLmltdWwoJG4sZm4pLEo9SitNYXRoLmltdWwoVXQsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxYdCl8'@;
put 'MCkrTWF0aC5pbXVsKGJuLHd0KXwwLGRlPWRlK01hdGguaW11bChibixYdCl8MCxKPUorTWF0aC5pbXVsKFB0LE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCxkZT1kZStNYXRoLmltdWwob24sbW4pfDAsSj1KK01hdGguaW11bCh1dCxMdCl8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsTHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LFF0KXwwLEo9SitNYXRoLmltdWwoRGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLGRlPWRlK01hdGguaW11bCh6'@;
put 'ZSxZdCl8MCxKPUorTWF0aC5pbXVsKFVlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCxkZT1kZStNYXRoLmltdWwoaHQseW4pfDAsSj1KK01hdGguaW11bChUZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmlt'@;
put 'dWwocWUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLEJuKXwwLEo9SitNYXRoLmltdWwoUGUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxGbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLGRlPWRlK01hdGguaW11bChiZSxGbil8MCxKPUorTWF0aC5pbXVsKFllLGxuKXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCxkZT1kZStNYXRoLmltdWwoUWUsam4pfDA7dmFyIEdpPShGZSsoSj1KK01hdGguaW11bChqZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLHhyKXwwKStNYXRoLmltdWwoV2UsZ2kpfDApKTw8'@;
put 'MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UseHIpfDApKyhuZT4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sd3QpLG5lPShuZT1NYXRoLmltdWwoZW4sWHQpKStNYXRoLmltdWwoJG4sd3QpfDAsZGU9TWF0aC5pbXVsKCRuLFh0KSxKPUorTWF0'@;
put 'aC5pbXVsKFV0LE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsbW4pfDApK01hdGguaW11bChibixOdCl8MCxkZT1kZStNYXRoLmltdWwoYm4sbW4pfDAsSj1KK01hdGguaW11bChQdCxMdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LFF0KXwwKStNYXRoLmltdWwob24sTHQpfDAsZGU9'@;
put 'ZGUrTWF0aC5pbXVsKG9uLFF0KXwwLEo9SitNYXRoLmltdWwodXQscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLGRlPWRlK01hdGguaW11bChNdCxZdCl8MCxKPUorTWF0aC5pbXVsKERlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUs'@;
put 'eW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCxkZT1kZStNYXRoLmltdWwoemUseW4pfDAsSj1KK01hdGguaW11bChVZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LEJuKXwwLEo9SitNYXRoLmltdWwoVGUs'@;
put 'JHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxGbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLGRlPWRlK01hdGguaW11bChxZSxGbil8MCxKPUorTWF0aC5pbXVsKFBlLGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCxkZT1kZStNYXRoLmlt'@;
put 'dWwoYmUsam4pfDA7dmFyIGhvPShGZSsoSj1KK01hdGguaW11bChZZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFllLHhyKXwwKStNYXRoLmltdWwoUWUsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoUWUseHIpfDApKyhuZT4+PjEzKXwwKSsoaG8+'@;
put 'Pj4yNil8MCxobyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sTnQpLG5lPShuZT1NYXRoLmltdWwoZW4sbW4pKStNYXRoLmltdWwoJG4sTnQpfDAsZGU9TWF0aC5pbXVsKCRuLG1uKSxKPUorTWF0aC5pbXVsKFV0LEx0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsUXQpfDApK01hdGguaW11'@;
put 'bChibixMdCl8MCxkZT1kZStNYXRoLmltdWwoYm4sUXQpfDAsSj1KK01hdGguaW11bChQdCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLFl0KXwwLEo9SitNYXRoLmltdWwodXQsenQpfDAsbmU9KG5lPW5l'@;
put 'K01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLGRlPWRlK01hdGguaW11bChNdCx5bil8MCxKPUorTWF0aC5pbXVsKERlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCxkZT1kZStNYXRoLmltdWwoemUsQm4pfDAsSj1K'@;
put 'K01hdGguaW11bChVZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LEZuKXwwLEo9SitNYXRoLmltdWwoVGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXww'@;
put 'LGRlPWRlK01hdGguaW11bChxZSxqbil8MDt2YXIgeXI9KEZlKyhKPUorTWF0aC5pbXVsKFBlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoUGUseHIpfDApK01hdGguaW11bChiZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChiZSx4cil8MCkrKG5l'@;
put 'Pj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxKPU1hdGguaW11bChlbixMdCksbmU9KG5lPU1hdGguaW11bChlbixRdCkpK01hdGguaW11bCgkbixMdCl8MCxkZT1NYXRoLmltdWwoJG4sUXQpLEo9SitNYXRoLmltdWwoVXQscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxZ'@;
put 'dCl8MCkrTWF0aC5pbXVsKGJuLHB0KXwwLGRlPWRlK01hdGguaW11bChibixZdCl8MCxKPUorTWF0aC5pbXVsKFB0LHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCxkZT1kZStNYXRoLmltdWwob24seW4pfDAsSj1KK01hdGguaW11bCh1dCxz'@;
put 'bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKE10LEJuKXwwLEo9SitNYXRoLmltdWwoRGUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxGbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLGRlPWRlK01hdGguaW11'@;
put 'bCh6ZSxGbil8MCxKPUorTWF0aC5pbXVsKFVlLGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCxkZT1kZStNYXRoLmltdWwoaHQsam4pfDA7dmFyIFBpPShGZSsoSj1KK01hdGguaW11bChUZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKFRlLHhyKXwwKStNYXRoLmltdWwocWUsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwocWUseHIpfDApKyhuZT4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4scHQpLG5lPShuZT1NYXRoLmltdWwoZW4sWXQpKStNYXRo'@;
put 'LmltdWwoJG4scHQpfDAsZGU9TWF0aC5pbXVsKCRuLFl0KSxKPUorTWF0aC5pbXVsKFV0LHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQseW4pfDApK01hdGguaW11bChibix6dCl8MCxkZT1kZStNYXRoLmltdWwoYm4seW4pfDAsSj1KK01hdGguaW11bChQdCxzbil8MCxuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLEJuKXwwLEo9SitNYXRoLmltdWwodXQsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxGbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLGRlPWRlK01hdGguaW11bChNdCxGbil8MCxKPUor'@;
put 'TWF0aC5pbXVsKERlLGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCxkZT1kZStNYXRoLmltdWwoemUsam4pfDA7dmFyIElvPShGZSsoSj1KK01hdGguaW11bChVZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHhy'@;
put 'KXwwKStNYXRoLmltdWwoaHQsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoaHQseHIpfDApKyhuZT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4senQpLG5lPShuZT1NYXRoLmltdWwoZW4seW4pKStNYXRoLmltdWwoJG4senQpfDAs'@;
put 'ZGU9TWF0aC5pbXVsKCRuLHluKSxKPUorTWF0aC5pbXVsKFV0LHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsQm4pfDApK01hdGguaW11bChibixzbil8MCxkZT1kZStNYXRoLmltdWwoYm4sQm4pfDAsSj1KK01hdGguaW11bChQdCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LEZu'@;
put 'KXwwKStNYXRoLmltdWwob24sJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLEZuKXwwLEo9SitNYXRoLmltdWwodXQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwLGRlPWRlK01hdGguaW11bChNdCxqbil8MDt2YXIgaHM9KEZlKyhKPUorTWF0'@;
put 'aC5pbXVsKERlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoRGUseHIpfDApK01hdGguaW11bCh6ZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bCh6ZSx4cil8MCkrKG5lPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2MyxKPU1hdGguaW11'@;
put 'bChlbixzbiksbmU9KG5lPU1hdGguaW11bChlbixCbikpK01hdGguaW11bCgkbixzbil8MCxkZT1NYXRoLmltdWwoJG4sQm4pLEo9SitNYXRoLmltdWwoVXQsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxGbil8MCkrTWF0aC5pbXVsKGJuLCR0KXwwLGRlPWRlK01hdGguaW11bChibixG'@;
put 'bil8MCxKPUorTWF0aC5pbXVsKFB0LGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCxkZT1kZStNYXRoLmltdWwob24sam4pfDA7dmFyIHJzPShGZSsoSj1KK01hdGguaW11bCh1dCxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5p'@;
put 'bXVsKHV0LHhyKXwwKStNYXRoLmltdWwoTXQsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoTXQseHIpfDApKyhuZT4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sJHQpLG5lPShuZT1NYXRoLmltdWwoZW4sRm4pKStNYXRoLmltdWwo'@;
put 'JG4sJHQpfDAsZGU9TWF0aC5pbXVsKCRuLEZuKSxKPUorTWF0aC5pbXVsKFV0LGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsam4pfDApK01hdGguaW11bChibixsbil8MCxkZT1kZStNYXRoLmltdWwoYm4sam4pfDA7dmFyIFJjPShGZSsoSj1KK01hdGguaW11bChQdCxnaSl8MCl8MCkr'@;
put 'KCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFB0LHhyKXwwKStNYXRoLmltdWwob24sZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwob24seHIpfDApKyhuZT4+PjEzKXwwKSsoUmM+Pj4yNil8MCxSYyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sbG4pLG5lPShuZT1NYXRo'@;
put 'LmltdWwoZW4sam4pKStNYXRoLmltdWwoJG4sbG4pfDAsZGU9TWF0aC5pbXVsKCRuLGpuKTt2YXIgdWw9KEZlKyhKPUorTWF0aC5pbXVsKFV0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVXQseHIpfDApK01hdGguaW11bChibixnaSl8MCkpPDwxMyl8MDtGZT0oKGRl'@;
put 'PWRlK01hdGguaW11bChibix4cil8MCkrKG5lPj4+MTMpfDApKyh1bD4+PjI2KXwwLHVsJj02NzEwODg2Mzt2YXIgT2M9KEZlKyhKPU1hdGguaW11bChlbixnaSkpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChlbix4cikpK01hdGguaW11bCgkbixnaSl8MCkpPDwxMyl8MDtyZXR1cm4g'@;
put 'RmU9KChkZT1NYXRoLmltdWwoJG4seHIpKSsobmU+Pj4xMyl8MCkrKE9jPj4+MjYpfDAsT2MmPTY3MTA4ODYzLEllWzBdPVVpLEllWzFdPUtyLEllWzJdPW5vLEllWzNdPUhyLEllWzRdPXFpLEllWzVdPUppLEllWzZdPWFvLEllWzddPXJvLEllWzhdPWlvLEllWzldPUdpLEllWzEwXT1obyxJ'@;
put 'ZVsxMV09eXIsSWVbMTJdPVBpLEllWzEzXT1JbyxJZVsxNF09aHMsSWVbMTVdPXJzLEllWzE2XT1SYyxJZVsxN109dWwsSWVbMThdPU9jLDAhPT1GZSYmKEllWzE5XT1GZSx3Lmxlbmd0aCsrKSx3fTtmdW5jdGlvbiBoZSh2LHAsdyl7dy5uZWdhdGl2ZT1wLm5lZ2F0aXZlXnYubmVnYXRpdmUs'@;
put 'dy5sZW5ndGg9di5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciBKPTAsbmU9MCxkZT0wO2RlPHcubGVuZ3RoLTE7ZGUrKyl7dmFyIGZlPW5lO25lPTA7Zm9yKHZhciB4ZT02NzEwODg2MyZKLEllPU1hdGgubWluKGRlLHAubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsZGUtdi5sZW5ndGgrMSk7RmU8'@;
put 'PUllO0ZlKyspe3ZhciBqZT0oMHx2LndvcmRzW2RlLUZlXSkqKDB8cC53b3Jkc1tGZV0pLFdlPTY3MTA4ODYzJmplO3hlPTY3MTA4ODYzJihXZT1XZSt4ZXwwKSxuZSs9KGZlPShmZT1mZSsoamUvNjcxMDg4NjR8MCl8MCkrKFdlPj4+MjYpfDApPj4+MjYsZmUmPTY3MTA4ODYzfXcud29yZHNb'@;
put 'ZGVdPXhlLEo9ZmUsZmU9bmV9cmV0dXJuIDAhPT1KP3cud29yZHNbZGVdPUo6dy5sZW5ndGgtLSx3Ll9zdHJpcCgpfWZ1bmN0aW9uIHVlKHYscCx3KXtyZXR1cm4gaGUodixwLHcpfWZ1bmN0aW9uIGNlKHYscCl7dGhpcy54PXYsdGhpcy55PXB9TWF0aC5pbXVsfHwoc2U9b2UpLEUucHJvdG90'@;
put 'eXBlLm11bFRvPWZ1bmN0aW9uKHYscCl7dmFyIHc9dGhpcy5sZW5ndGgrdi5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09di5sZW5ndGg/c2UodGhpcyx2LHApOnc8NjM/b2UodGhpcyx2LHApOnc8MTAyND9oZSh0aGlzLHYscCk6dWUodGhpcyx2LHApfSxjZS5wcm90b3R5'@;
put 'cGUubWFrZVJCVD1mdW5jdGlvbih2KXtmb3IodmFyIHA9bmV3IEFycmF5KHYpLHc9RS5wcm90b3R5cGUuX2NvdW50Qml0cyh2KS0xLEo9MDtKPHY7SisrKXBbSl09dGhpcy5yZXZCaW4oSix3LHYpO3JldHVybiBwfSxjZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHYscCx3KXtpZigwPT09'@;
put 'dnx8dj09PXctMSlyZXR1cm4gdjtmb3IodmFyIEo9MCxuZT0wO25lPHA7bmUrKylKfD0oMSZ2KTw8cC1uZS0xLHY+Pj0xO3JldHVybiBKfSxjZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih2LHAsdyxKLG5lLGRlKXtmb3IodmFyIGZlPTA7ZmU8ZGU7ZmUrKylKW2ZlXT1wW3ZbZmVdXSxu'@;
put 'ZVtmZV09d1t2W2ZlXV19LGNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odixwLHcsSixuZSxkZSl7dGhpcy5wZXJtdXRlKGRlLHYscCx3LEosbmUpO2Zvcih2YXIgZmU9MTtmZTxuZTtmZTw8PTEpZm9yKHZhciB4ZT1mZTw8MSxJZT1NYXRoLmNvcygyKk1hdGguUEkveGUpLEZlPU1h'@;
put 'dGguc2luKDIqTWF0aC5QSS94ZSksT2U9MDtPZTxuZTtPZSs9eGUpZm9yKHZhciBqZT1JZSxXZT1GZSxLZT0wO0tlPGZlO0tlKyspe3ZhciBZZT13W09lK0tlXSxRZT1KW09lK0tlXSxsdD13W09lK0tlK2ZlXSxQZT1KW09lK0tlK2ZlXSxiZT1qZSpsdC1XZSpQZTtQZT1qZSpQZStXZSpsdCx3'@;
put 'W09lK0tlXT1ZZSsobHQ9YmUpLEpbT2UrS2VdPVFlK1BlLHdbT2UrS2UrZmVdPVllLWx0LEpbT2UrS2UrZmVdPVFlLVBlLEtlIT09eGUmJihiZT1JZSpqZS1GZSpXZSxXZT1JZSpXZStGZSpqZSxqZT1iZSl9fSxjZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odixwKXt2YXIgdz0x'@;
put 'fE1hdGgubWF4KHAsdiksSj0xJncsbmU9MDtmb3Iodz13LzJ8MDt3O3c+Pj49MSluZSsrO3JldHVybiAxPDxuZSsxK0p9LGNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odixwLHcpe2lmKCEodzw9MSkpZm9yKHZhciBKPTA7Sjx3LzI7SisrKXt2YXIgbmU9dltKXTt2W0pdPXZbdy1K'@;
put 'LTFdLHZbdy1KLTFdPW5lLG5lPXBbSl0scFtKXT0tcFt3LUotMV0scFt3LUotMV09LW5lfX0sY2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz0wLEo9MDtKPHAvMjtKKyspe3ZhciBuZT04MTkyKk1hdGgucm91bmQodlsyKkorMV0vcCkrTWF0aC5yb3Vu'@;
put 'ZCh2WzIqSl0vcCkrdzt2W0pdPTY3MTA4ODYzJm5lLHc9bmU8NjcxMDg4NjQ/MDpuZS82NzEwODg2NHwwfXJldHVybiB2fSxjZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih2LHAsdyxKKXtmb3IodmFyIG5lPTAsZGU9MDtkZTxwO2RlKyspd1syKmRlXT04MTkxJihuZSs9MHx2W2Rl'@;
put 'XSksd1syKmRlKzFdPTgxOTEmKG5lPj4+PTEzKSxuZT4+Pj0xMztmb3IoZGU9MipwO2RlPEo7KytkZSl3W2RlXT0wO0woMD09PW5lKSxMKDA9PSgtODE5MiZuZSkpfSxjZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih2KXtmb3IodmFyIHA9bmV3IEFycmF5KHYpLHc9MDt3PHY7dysrKXBbd109'@;
put 'MDtyZXR1cm4gcH0sY2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odixwLHcpe3ZhciBKPTIqdGhpcy5ndWVzc0xlbjEzYih2Lmxlbmd0aCxwLmxlbmd0aCksbmU9dGhpcy5tYWtlUkJUKEopLGRlPXRoaXMuc3R1YihKKSxmZT1uZXcgQXJyYXkoSikseGU9bmV3IEFycmF5KEopLEllPW5ldyBB'@;
put 'cnJheShKKSxGZT1uZXcgQXJyYXkoSiksT2U9bmV3IEFycmF5KEopLGplPW5ldyBBcnJheShKKSxXZT13LndvcmRzO1dlLmxlbmd0aD1KLHRoaXMuY29udmVydDEzYih2LndvcmRzLHYubGVuZ3RoLGZlLEopLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLEZlLEopLHRoaXMudHJh'@;
put 'bnNmb3JtKGZlLGRlLHhlLEllLEosbmUpLHRoaXMudHJhbnNmb3JtKEZlLGRlLE9lLGplLEosbmUpO2Zvcih2YXIgS2U9MDtLZTxKO0tlKyspe3ZhciBZZT14ZVtLZV0qT2VbS2VdLUllW0tlXSpqZVtLZV07SWVbS2VdPXhlW0tlXSpqZVtLZV0rSWVbS2VdKk9lW0tlXSx4ZVtLZV09WWV9cmV0'@;
put 'dXJuIHRoaXMuY29uanVnYXRlKHhlLEllLEopLHRoaXMudHJhbnNmb3JtKHhlLEllLFdlLGRlLEosbmUpLHRoaXMuY29uanVnYXRlKFdlLGRlLEopLHRoaXMubm9ybWFsaXplMTNiKFdlLEopLHcubmVnYXRpdmU9di5uZWdhdGl2ZV5wLm5lZ2F0aXZlLHcubGVuZ3RoPXYubGVuZ3RoK3AubGVu'@;
put 'Z3RoLHcuX3N0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbih2KXt2YXIgcD1uZXcgRShudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdi5sZW5ndGgpLHRoaXMubXVsVG8odixwKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih2KXt2YXIgcD1uZXcg'@;
put 'RShudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdi5sZW5ndGgpLHVlKHRoaXMsdixwKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHYsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHYpe3Zh'@;
put 'ciBwPXY8MDtwJiYodj0tdiksTCgibnVtYmVyIj09dHlwZW9mIHYpLEwodjw2NzEwODg2NCk7Zm9yKHZhciB3PTAsSj0wO0o8dGhpcy5sZW5ndGg7SisrKXt2YXIgbmU9KDB8dGhpcy53b3Jkc1tKXSkqdixkZT0oNjcxMDg4NjMmbmUpKyg2NzEwODg2MyZ3KTt3Pj49MjYsdys9bmUvNjcxMDg4'@;
put 'NjR8MCx3Kz1kZT4+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmZGV9cmV0dXJuIDAhPT13JiYodGhpcy53b3Jkc1tKXT13LHRoaXMubGVuZ3RoKyspLHA/dGhpcy5pbmVnKCk6dGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHYp'@;
put 'fSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbih2KXt2YXIgcD1mdW5jdGlvbihkZSl7Zm9yKHZh'@;
put 'ciBmZT1uZXcgQXJyYXkoZGUuYml0TGVuZ3RoKCkpLHhlPTA7eGU8ZmUubGVuZ3RoO3hlKyspZmVbeGVdPWRlLndvcmRzW3hlLzI2fDBdPj4+eGUlMjYmMTtyZXR1cm4gZmV9KHYpO2lmKDA9PT1wLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciB3PXRoaXMsSj0wO0o8cC5sZW5ndGgm'@;
put 'JjA9PT1wW0pdO0orKyx3PXcuc3FyKCkpO2lmKCsrSjxwLmxlbmd0aClmb3IodmFyIG5lPXcuc3FyKCk7SjxwLmxlbmd0aDtKKyssbmU9bmUuc3FyKCkpMCE9PXBbSl0mJih3PXcubXVsKG5lKSk7cmV0dXJuIHd9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih2KXtMKCJudW1iZXIiPT10'@;
put 'eXBlb2YgdiYmdj49MCk7dmFyIHAsdz12JTI2LEo9KHYtdykvMjYsbmU9NjcxMDg4NjM+Pj4yNi13PDwyNi13O2lmKDAhPT13KXt2YXIgZGU9MDtmb3IocD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgZmU9dGhpcy53b3Jkc1twXSZuZTt0aGlzLndvcmRzW3BdPSgwfHRoaXMud29yZHNbcF0p'@;
put 'LWZlPDx3fGRlLGRlPWZlPj4+MjYtd31kZSYmKHRoaXMud29yZHNbcF09ZGUsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUope2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdGhpcy53b3Jkc1twK0pdPXRoaXMud29yZHNbcF07Zm9yKHA9MDtwPEo7cCsrKXRoaXMud29yZHNbcF09MDt0aGlz'@;
put 'Lmxlbmd0aCs9Sn1yZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odil7cmV0dXJuIEwoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odixwLHcpe3ZhciBKO0woIm51bWJlciI9PXR5cGVv'@;
put 'ZiB2JiZ2Pj0wKSxKPXA/KHAtcCUyNikvMjY6MDt2YXIgbmU9diUyNixkZT1NYXRoLm1pbigodi1uZSkvMjYsdGhpcy5sZW5ndGgpLGZlPTY3MTA4ODYzXjY3MTA4ODYzPj4+bmU8PG5lLHhlPXc7aWYoSi09ZGUsSj1NYXRoLm1heCgwLEopLHhlKXtmb3IodmFyIEllPTA7SWU8ZGU7SWUrKyl4'@;
put 'ZS53b3Jkc1tJZV09dGhpcy53b3Jkc1tJZV07eGUubGVuZ3RoPWRlfWlmKDAhPT1kZSlpZih0aGlzLmxlbmd0aD5kZSlmb3IodGhpcy5sZW5ndGgtPWRlLEllPTA7SWU8dGhpcy5sZW5ndGg7SWUrKyl0aGlzLndvcmRzW0llXT10aGlzLndvcmRzW0llK2RlXTtlbHNlIHRoaXMud29yZHNbMF09'@;
put 'MCx0aGlzLmxlbmd0aD0xO3ZhciBGZT0wO2ZvcihJZT10aGlzLmxlbmd0aC0xO0llPj0wJiYoMCE9PUZlfHxJZT49Sik7SWUtLSl7dmFyIE9lPTB8dGhpcy53b3Jkc1tJZV07dGhpcy53b3Jkc1tJZV09RmU8PDI2LW5lfE9lPj4+bmUsRmU9T2UmZmV9cmV0dXJuIHhlJiYwIT09RmUmJih4ZS53'@;
put 'b3Jkc1t4ZS5sZW5ndGgrK109RmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih2LHAsdyl7cmV0dXJuIEwoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHYscCx3'@;
put 'KX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHYpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih2KX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmlzaHJuKHYpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih2KX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odil7TCgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwPXYlMjYsdz0odi1wKS8yNjtyZXR1cm4h'@;
put 'KHRoaXMubGVuZ3RoPD13fHwhKHRoaXMud29yZHNbd10mMTw8cCkpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odil7TCgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwPXYlMjYsdz0odi1wKS8yNjtyZXR1cm4gTCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9u'@;
put 'bHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXc/dGhpczooMCE9PXAmJncrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih3LHRoaXMubGVuZ3RoKSwwIT09cCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCksdGhpcy5fc3Ry'@;
put 'aXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHYpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih2KXtyZXR1cm4gTCgibnVtYmVyIj09dHlwZW9mIHYpLEwodjw2NzEwODg2NCksdjwwP3RoaXMuaXN1Ym4oLXYpOjAhPT10'@;
put 'aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PXY/KHRoaXMud29yZHNbMF09di0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHYpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlz'@;
put 'Ll9pYWRkbih2KX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHYpe3RoaXMud29yZHNbMF0rPXY7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1twXT49NjcxMDg4NjQ7cCsrKXRoaXMud29yZHNbcF0tPTY3MTA4ODY0LHA9PT10aGlzLmxlbmd0aC0xP3RoaXMud29y'@;
put 'ZHNbcCsxXT0xOnRoaXMud29yZHNbcCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxwKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHYpe2lmKEwoIm51bWJlciI9PXR5cGVvZiB2KSxMKHY8NjcxMDg4NjQpLHY8MClyZXR1cm4gdGhpcy5p'@;
put 'YWRkbigtdik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHYpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXYsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jk'@;
put 'c1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPDA7cCsrKXRoaXMud29yZHNbcF0rPTY3MTA4ODY0LHRoaXMud29yZHNbcCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih2'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHYpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odil9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odixwLHcpe3ZhciBKLG5lO3RoaXMuX2V4cGFuZCh2Lmxlbmd0aCt3KTt2YXIgZmU9MDtmb3IoSj0wO0o8di5sZW5ndGg7SisrKXtuZT0oMHx0aGlzLndvcmRzW0or'@;
put 'd10pK2ZlO3ZhciB4ZT0oMHx2LndvcmRzW0pdKSpwO2ZlPSgobmUtPTY3MTA4ODYzJnhlKT4+MjYpLSh4ZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0ord109NjcxMDg4NjMmbmV9Zm9yKDtKPHRoaXMubGVuZ3RoLXc7SisrKWZlPShuZT0oMHx0aGlzLndvcmRzW0ord10pK2ZlKT4+MjYsdGhp'@;
put 'cy53b3Jkc1tKK3ddPTY3MTA4ODYzJm5lO2lmKDA9PT1mZSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IoTCgtMT09PWZlKSxmZT0wLEo9MDtKPHRoaXMubGVuZ3RoO0orKylmZT0obmU9LSgwfHRoaXMud29yZHNbSl0pK2ZlKT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZuZTtyZXR1cm4g'@;
put 'dGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHYscCl7dmFyIHcsSj10aGlzLmNsb25lKCksbmU9dixkZT0wfG5lLndvcmRzW25lLmxlbmd0aC0xXTswIT0odz0yNi10aGlzLl9jb3VudEJpdHMoZGUpKSYmKG5lPW5lLnVzaGxuKHcp'@;
put 'LEouaXVzaGxuKHcpLGRlPTB8bmUud29yZHNbbmUubGVuZ3RoLTFdKTt2YXIgZmUseGU9Si5sZW5ndGgtbmUubGVuZ3RoO2lmKCJtb2QiIT09cCl7KGZlPW5ldyBFKG51bGwpKS5sZW5ndGg9eGUrMSxmZS53b3Jkcz1uZXcgQXJyYXkoZmUubGVuZ3RoKTtmb3IodmFyIEllPTA7SWU8ZmUubGVu'@;
put 'Z3RoO0llKyspZmUud29yZHNbSWVdPTB9dmFyIEZlPUouY2xvbmUoKS5faXNobG5zdWJtdWwobmUsMSx4ZSk7MD09PUZlLm5lZ2F0aXZlJiYoSj1GZSxmZSYmKGZlLndvcmRzW3hlXT0xKSk7Zm9yKHZhciBPZT14ZS0xO09lPj0wO09lLS0pe3ZhciBqZT02NzEwODg2NCooMHxKLndvcmRzW25l'@;
put 'Lmxlbmd0aCtPZV0pKygwfEoud29yZHNbbmUubGVuZ3RoK09lLTFdKTtmb3IoamU9TWF0aC5taW4oamUvZGV8MCw2NzEwODg2MyksSi5faXNobG5zdWJtdWwobmUsamUsT2UpOzAhPT1KLm5lZ2F0aXZlOylqZS0tLEoubmVnYXRpdmU9MCxKLl9pc2hsbnN1Ym11bChuZSwxLE9lKSxKLmlzWmVy'@;
put 'bygpfHwoSi5uZWdhdGl2ZV49MSk7ZmUmJihmZS53b3Jkc1tPZV09amUpfXJldHVybiBmZSYmZmUuX3N0cmlwKCksSi5fc3RyaXAoKSwiZGl2IiE9PXAmJjAhPT13JiZKLml1c2hybih3KSx7ZGl2OmZlfHxudWxsLG1vZDpKfX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHYscCx3KXty'@;
put 'ZXR1cm4gTCghdi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZlPyhkZT10aGlzLm5lZygpLmRpdm1vZCh2LHApLCJtb2QiIT09cCYmKEo9ZGUuZGl2Lm5lZygpKSwiZGl2IiE9PXAmJihu'@;
put 'ZT1kZS5tb2QubmVnKCksdyYmMCE9PW5lLm5lZ2F0aXZlJiZuZS5pYWRkKHYpKSx7ZGl2OkosbW9kOm5lfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT12Lm5lZ2F0aXZlPyhkZT10aGlzLmRpdm1vZCh2Lm5lZygpLHApLCJtb2QiIT09cCYmKEo9ZGUuZGl2Lm5lZygpKSx7ZGl2OkosbW9kOmRl'@;
put 'Lm1vZH0pOnRoaXMubmVnYXRpdmUmdi5uZWdhdGl2ZT8oZGU9dGhpcy5uZWcoKS5kaXZtb2Qodi5uZWcoKSxwKSwiZGl2IiE9PXAmJihuZT1kZS5tb2QubmVnKCksdyYmMCE9PW5lLm5lZ2F0aXZlJiZuZS5pc3ViKHYpKSx7ZGl2OmRlLmRpdixtb2Q6bmV9KTp2Lmxlbmd0aD50aGlzLmxlbmd0'@;
put 'aHx8dGhpcy5jbXAodik8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09di5sZW5ndGg/ImRpdiI9PT1wP3tkaXY6dGhpcy5kaXZuKHYud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXA/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZHJuKHYud29yZHNbMF0pKX06e2Rpdjp0aGlz'@;
put 'LmRpdm4odi53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kcm4odi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHYscCk7dmFyIEosbmUsZGV9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2QodiwiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9'@;
put 'ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZGl2bW9kKHYsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2QodiwibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih2KXt2YXIgcD10aGlzLmRpdm1vZCh2'@;
put 'KTtpZihwLm1vZC5pc1plcm8oKSlyZXR1cm4gcC5kaXY7dmFyIHc9MCE9PXAuZGl2Lm5lZ2F0aXZlP3AubW9kLmlzdWIodik6cC5tb2QsSj12LnVzaHJuKDEpLG5lPXYuYW5kbG4oMSksZGU9dy5jbXAoSik7cmV0dXJuIGRlPDB8fDE9PT1uZSYmMD09PWRlP3AuZGl2OjAhPT1wLmRpdi5uZWdh'@;
put 'dGl2ZT9wLmRpdi5pc3VibigxKTpwLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxMKHY8PTY3MTA4ODYzKTtmb3IodmFyIHc9NjcxMDg4NjQldixKPTAsbmU9dGhpcy5sZW5ndGgtMTtuZT49MDtuZS0tKUo9KHcqSisoMHx0'@;
put 'aGlzLndvcmRzW25lXSkpJXY7cmV0dXJuIHA/LUo6Sn0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5tb2Rybih2KX0sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxMKHY8PTY3MTA4ODYzKTtmb3IodmFyIHc9MCxKPXRo'@;
put 'aXMubGVuZ3RoLTE7Sj49MDtKLS0pe3ZhciBuZT0oMHx0aGlzLndvcmRzW0pdKSs2NzEwODg2NCp3O3RoaXMud29yZHNbSl09bmUvdnwwLHc9bmUldn1yZXR1cm4gdGhpcy5fc3RyaXAoKSxwP3RoaXMuaW5lZygpOnRoaXN9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odil7cmV0dXJuIHRo'@;
put 'aXMuY2xvbmUoKS5pZGl2bih2KX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih2KXtMKDA9PT12Lm5lZ2F0aXZlKSxMKCF2LmlzWmVybygpKTt2YXIgcD10aGlzLHc9di5jbG9uZSgpO3A9MCE9PXAubmVnYXRpdmU/cC51bW9kKHYpOnAuY2xvbmUoKTtmb3IodmFyIEo9bmV3IEUoMSksbmU9'@;
put 'bmV3IEUoMCksZGU9bmV3IEUoMCksZmU9bmV3IEUoMSkseGU9MDtwLmlzRXZlbigpJiZ3LmlzRXZlbigpOylwLml1c2hybigxKSx3Lml1c2hybigxKSwrK3hlO2Zvcih2YXIgSWU9dy5jbG9uZSgpLEZlPXAuY2xvbmUoKTshcC5pc1plcm8oKTspe2Zvcih2YXIgT2U9MCxqZT0xOyEocC53b3Jk'@;
put 'c1swXSZqZSkmJk9lPDI2OysrT2UsamU8PD0xKTtpZihPZT4wKWZvcihwLml1c2hybihPZSk7T2UtLSA+MDspKEouaXNPZGQoKXx8bmUuaXNPZGQoKSkmJihKLmlhZGQoSWUpLG5lLmlzdWIoRmUpKSxKLml1c2hybigxKSxuZS5pdXNocm4oMSk7Zm9yKHZhciBXZT0wLEtlPTE7ISh3LndvcmRz'@;
put 'WzBdJktlKSYmV2U8MjY7KytXZSxLZTw8PTEpO2lmKFdlPjApZm9yKHcuaXVzaHJuKFdlKTtXZS0tID4wOykoZGUuaXNPZGQoKXx8ZmUuaXNPZGQoKSkmJihkZS5pYWRkKEllKSxmZS5pc3ViKEZlKSksZGUuaXVzaHJuKDEpLGZlLml1c2hybigxKTtwLmNtcCh3KT49MD8ocC5pc3ViKHcpLEou'@;
put 'aXN1YihkZSksbmUuaXN1YihmZSkpOih3LmlzdWIocCksZGUuaXN1YihKKSxmZS5pc3ViKG5lKSl9cmV0dXJue2E6ZGUsYjpmZSxnY2Q6dy5pdXNobG4oeGUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHYpe0woMD09PXYubmVnYXRpdmUpLEwoIXYuaXNaZXJvKCkpO3ZhciBwPXRo'@;
put 'aXMsdz12LmNsb25lKCk7cD0wIT09cC5uZWdhdGl2ZT9wLnVtb2Qodik6cC5jbG9uZSgpO2Zvcih2YXIgSixuZT1uZXcgRSgxKSxkZT1uZXcgRSgwKSxmZT13LmNsb25lKCk7cC5jbXBuKDEpPjAmJncuY21wbigxKT4wOyl7Zm9yKHZhciB4ZT0wLEllPTE7IShwLndvcmRzWzBdJkllKSYmeGU8'@;
put 'MjY7Kyt4ZSxJZTw8PTEpO2lmKHhlPjApZm9yKHAuaXVzaHJuKHhlKTt4ZS0tID4wOyluZS5pc09kZCgpJiZuZS5pYWRkKGZlKSxuZS5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7ISh3LndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKHcuaXVzaHJuKEZl'@;
put 'KTtGZS0tID4wOylkZS5pc09kZCgpJiZkZS5pYWRkKGZlKSxkZS5pdXNocm4oMSk7cC5jbXAodyk+PTA/KHAuaXN1Yih3KSxuZS5pc3ViKGRlKSk6KHcuaXN1YihwKSxkZS5pc3ViKG5lKSl9cmV0dXJuKEo9MD09PXAuY21wbigxKT9uZTpkZSkuY21wbigwKTwwJiZKLmlhZGQodiksSn0sRS5w'@;
put 'cm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHYpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHYuYWJzKCk7aWYodi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgcD10aGlzLmNsb25lKCksdz12LmNsb25lKCk7cC5uZWdhdGl2ZT0wLHcubmVnYXRpdmU9MDtmb3IodmFyIEo9MDtwLmlzRXZl'@;
put 'bigpJiZ3LmlzRXZlbigpO0orKylwLml1c2hybigxKSx3Lml1c2hybigxKTtmb3IoOzspe2Zvcig7cC5pc0V2ZW4oKTspcC5pdXNocm4oMSk7Zm9yKDt3LmlzRXZlbigpOyl3Lml1c2hybigxKTt2YXIgbmU9cC5jbXAodyk7aWYobmU8MCl7dmFyIGRlPXA7cD13LHc9ZGV9ZWxzZSBpZigwPT09'@;
put 'bmV8fDA9PT13LmNtcG4oMSkpYnJlYWs7cC5pc3ViKHcpfXJldHVybiB3Lml1c2hsbihKKX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5lZ2NkKHYpLmEudW1vZCh2KX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29y'@;
put 'ZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMud29yZHNbMF0mdn0sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odil7TCgibnVtYmVyIj09dHlw'@;
put 'ZW9mIHYpO3ZhciBwPXYlMjYsdz0odi1wKS8yNixKPTE8PHA7aWYodGhpcy5sZW5ndGg8PXcpcmV0dXJuIHRoaXMuX2V4cGFuZCh3KzEpLHRoaXMud29yZHNbd118PUosdGhpcztmb3IodmFyIG5lPUosZGU9dzswIT09bmUmJmRlPHRoaXMubGVuZ3RoO2RlKyspe3ZhciBmZT0wfHRoaXMud29y'@;
put 'ZHNbZGVdO25lPShmZSs9bmUpPj4+MjYsdGhpcy53b3Jkc1tkZV09ZmUmPTY3MTA4ODYzfXJldHVybiAwIT09bmUmJih0aGlzLndvcmRzW2RlXT1uZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09'@;
put 'dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih2KXt2YXIgcCx3PXY8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXcpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJncpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXA9MTtlbHNle3cm'@;
put 'Jih2PS12KSxMKHY8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBKPTB8dGhpcy53b3Jkc1swXTtwPUo9PT12PzA6Sjx2Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXA6cH0sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHYpe2lmKDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'JiYwPT09di5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHA9dGhpcy51Y21wKHYpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1wOnB9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odil7aWYodGhpcy5sZW5n'@;
put 'dGg+di5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8di5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBwPTAsdz10aGlzLmxlbmd0aC0xO3c+PTA7dy0tKXt2YXIgSj0wfHRoaXMud29yZHNbd10sbmU9MHx2LndvcmRzW3ddO2lmKEohPT1uZSl7SjxuZT9wPS0xOko+bmUmJihwPTEpO2Jy'@;
put 'ZWFrfX1yZXR1cm4gcH0sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHYpe3JldHVybiAxPT09dGhpcy5jbXBuKHYpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbih2KXtyZXR1cm4gMT09PXRoaXMuY21wKHYpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcG4o'@;
put 'dik+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXAodik+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbih2KXtyZXR1cm4tMT09PXRoaXMuY21wbih2KX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odil7cmV0dXJuLTE9PT10aGlzLmNtcCh2KX0sRS5w'@;
put 'cm90b3R5cGUubHRlbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXBuKHYpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wKHYpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odil7cmV0dXJuIDA9PT10aGlzLmNtcG4odil9LEUucHJvdG90eXBl'@;
put 'LmVxPWZ1bmN0aW9uKHYpe3JldHVybiAwPT09dGhpcy5jbXAodil9LEUucmVkPWZ1bmN0aW9uKHYpe3JldHVybiBuZXcgQyh2KX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odil7cmV0dXJuIEwoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Iiks'@;
put 'TCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx2LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodil9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVy'@;
put 'cyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMucmVkPXYsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odil7cmV0dXJuIEwoIXRoaXMucmVkLCJB'@;
put 'bHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQodil9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih2KXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHYp'@;
put 'fSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHYpe3JldHVybiBMKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHYpe3JldHVybiBMKHRoaXMucmVkLCJy'@;
put 'ZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odil7cmV0dXJuIEwodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlz'@;
put 'LHYpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odil7cmV0dXJuIEwodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHYpe3JldHVybiBMKHRoaXMucmVkLCJy'@;
put 'ZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx2KSx0aGlzLnJlZC5tdWwodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih2KXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt'@;
put 'YmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdiksdGhpcy5yZWQuaW11bCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp'@;
put 'LHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBl'@;
put 'LnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhp'@;
put 'cy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih2KXtyZXR1cm4gTCh0aGlzLnJlZCYmIXYucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk'@;
put 'LnBvdyh0aGlzLHYpfTt2YXIgRz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGIodixwKXt0aGlzLm5hbWU9dix0aGlzLnA9bmV3IEUocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMu'@;
put 'bikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIEQoKXtiLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gSCgpe2IuY2FsbCh0'@;
put 'aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBOKCl7Yi5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIp'@;
put 'fWZ1bmN0aW9uIGcoKXtiLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gQyh2KXtpZigic3RyaW5nIj09dHlwZW9mIHYpe3ZhciBwPUUuX3ByaW1lKHYpO3RoaXMu'@;
put 'bT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgTCh2Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFModil7Qy5jYWxsKHRoaXMsdiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUy'@;
put 'NiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMu'@;
put 'cikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1iLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHY9bmV3IEUobnVsbCk7cmV0dXJuIHYud29yZHM9bmV3IEFycmF5KE1hdGgu'@;
put 'Y2VpbCh0aGlzLm4vMTMpKSx2fSxiLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHYpe3ZhciBwLHc9djtkb3t0aGlzLnNwbGl0KHcsdGhpcy50bXApLHA9KHc9KHc9dGhpcy5pbXVsSyh3KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHA+dGhpcy5uKTt2YXIgSj1wPHRo'@;
put 'aXMubj8tMTp3LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUo/KHcud29yZHNbMF09MCx3Lmxlbmd0aD0xKTpKPjA/dy5pc3ViKHRoaXMucCk6dm9pZCAwIT09dy5zdHJpcD93LnN0cmlwKCk6dy5fc3RyaXAoKSx3fSxiLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih2LHApe3YuaXVzaHJuKHRo'@;
put 'aXMubiwwLHApfSxiLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih2KXtyZXR1cm4gdi5pbXVsKHRoaXMuayl9LGsoRCxiKSxELnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz00MTk0MzAzLEo9TWF0aC5taW4odi5sZW5ndGgsOSksbmU9MDtuZTxKO25lKyspcC53b3Jk'@;
put 'c1tuZV09di53b3Jkc1tuZV07aWYocC5sZW5ndGg9Six2Lmxlbmd0aDw9OSlyZXR1cm4gdi53b3Jkc1swXT0wLHZvaWQodi5sZW5ndGg9MSk7dmFyIGRlPXYud29yZHNbOV07Zm9yKHAud29yZHNbcC5sZW5ndGgrK109ZGUmdyxuZT0xMDtuZTx2Lmxlbmd0aDtuZSsrKXt2YXIgZmU9MHx2Lndv'@;
put 'cmRzW25lXTt2LndvcmRzW25lLTEwXT0oZmUmdyk8PDR8ZGU+Pj4yMixkZT1mZX12LndvcmRzW25lLTEwXT1kZT4+Pj0yMix2Lmxlbmd0aC09MD09PWRlJiZ2Lmxlbmd0aD4xMD8xMDo5fSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih2KXt2LndvcmRzW3YubGVuZ3RoXT0wLHYud29yZHNb'@;
put 'di5sZW5ndGgrMV09MCx2Lmxlbmd0aCs9Mjtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3Kyspe3ZhciBKPTB8di53b3Jkc1t3XTt2LndvcmRzW3ddPTY3MTA4ODYzJihwKz05NzcqSikscD02NCpKKyhwLzY3MTA4ODY0fDApfXJldHVybiAwPT09di53b3Jkc1t2Lmxlbmd0aC0xXSYmKHYu'@;
put 'bGVuZ3RoLS0sMD09PXYud29yZHNbdi5sZW5ndGgtMV0mJnYubGVuZ3RoLS0pLHZ9LGsoSCxiKSxrKE4sYiksayhnLGIpLGcucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIEo9MTkqKDB8di53b3Jkc1t3XSkrcCxuZT02NzEw'@;
put 'ODg2MyZKO0o+Pj49MjYsdi53b3Jkc1t3XT1uZSxwPUp9cmV0dXJuIDAhPT1wJiYodi53b3Jkc1t2Lmxlbmd0aCsrXT1wKSx2fSxFLl9wcmltZT1mdW5jdGlvbih2KXtpZihHW3ZdKXJldHVybiBHW3ZdO3ZhciBwO2lmKCJrMjU2Ij09PXYpcD1uZXcgRDtlbHNlIGlmKCJwMjI0Ij09PXYpcD1u'@;
put 'ZXcgSDtlbHNlIGlmKCJwMTkyIj09PXYpcD1uZXcgTjtlbHNle2lmKCJwMjU1MTkiIT09dil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit2KTtwPW5ldyBnfXJldHVybiBHW3ZdPXAscH0sQy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odil7TCgwPT09di5uZWdhdGl2ZSwi'@;
put 'cmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxMKHYucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEMucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHYscCl7TCgwPT0odi5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3Np'@;
put 'dGl2ZXMiKSxMKHYucmVkJiZ2LnJlZD09PXAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEMucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHYpLl9mb3JjZVJlZCh0aGlzKTooWCh2LHYudW1vZCh0'@;
put 'aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksdil9LEMucHJvdG90eXBlLm5lZz1mdW5jdGlvbih2KXtyZXR1cm4gdi5pc1plcm8oKT92LmNsb25lKCk6dGhpcy5tLnN1Yih2KS5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmFkZD1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2'@;
put 'YXIgdz12LmFkZChwKTtyZXR1cm4gdy5jbXAodGhpcy5tKT49MCYmdy5pc3ViKHRoaXMubSksdy5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odixwKXt0aGlzLl92ZXJpZnkyKHYscCk7dmFyIHc9di5pYWRkKHApO3JldHVybiB3LmNtcCh0aGlzLm0pPj0wJiZ3'@;
put 'LmlzdWIodGhpcy5tKSx3fSxDLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odixwKXt0aGlzLl92ZXJpZnkyKHYscCk7dmFyIHc9di5zdWIocCk7cmV0dXJuIHcuY21wbigwKTwwJiZ3LmlhZGQodGhpcy5tKSx3Ll9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih2LHAp'@;
put 'e3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LmlzdWIocCk7cmV0dXJuIHcuY21wbigwKTwwJiZ3LmlhZGQodGhpcy5tKSx3fSxDLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh2KSx0aGlzLmltb2Qodi51c2hsbihwKSl9LEMucHJvdG90eXBlLmlt'@;
put 'dWw9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih2LHApLHRoaXMuaW1vZCh2LmltdWwocCkpfSxDLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih2LHApLHRoaXMuaW1vZCh2Lm11bChwKSl9LEMucHJvdG90eXBlLmlzcXI9ZnVuY3Rp'@;
put 'b24odil7cmV0dXJuIHRoaXMuaW11bCh2LHYuY2xvbmUoKSl9LEMucHJvdG90eXBlLnNxcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5tdWwodix2KX0sQy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih2KXtpZih2LmlzWmVybygpKXJldHVybiB2LmNsb25lKCk7dmFyIHA9dGhpcy5tLmFuZGxu'@;
put 'KDMpO2lmKEwocCUyPT0xKSwzPT09cCl7dmFyIHc9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh2LHcpfWZvcih2YXIgSj10aGlzLm0uc3VibigxKSxuZT0wOyFKLmlzWmVybygpJiYwPT09Si5hbmRsbigxKTspbmUrKyxKLml1c2hybigxKTtMKCFKLmlz'@;
put 'WmVybygpKTt2YXIgZGU9bmV3IEUoMSkudG9SZWQodGhpcyksZmU9ZGUucmVkTmVnKCkseGU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLEllPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoSWU9bmV3IEUoMipJZSpJZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KEllLHhlKS5jbXAoZmUpOylJ'@;
put 'ZS5yZWRJQWRkKGZlKTtmb3IodmFyIEZlPXRoaXMucG93KEllLEopLE9lPXRoaXMucG93KHYsSi5hZGRuKDEpLml1c2hybigxKSksamU9dGhpcy5wb3codixKKSxXZT1uZTswIT09amUuY21wKGRlKTspe2Zvcih2YXIgS2U9amUsWWU9MDswIT09S2UuY21wKGRlKTtZZSsrKUtlPUtlLnJlZFNx'@;
put 'cigpO0woWWU8V2UpO3ZhciBRZT10aGlzLnBvdyhGZSxuZXcgRSgxKS5pdXNobG4oV2UtWWUtMSkpO09lPU9lLnJlZE11bChRZSksRmU9UWUucmVkU3FyKCksamU9amUucmVkTXVsKEZlKSxXZT1ZZX1yZXR1cm4gT2V9LEMucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7dmFyIHA9di5faW52'@;
put 'bXAodGhpcy5tKTtyZXR1cm4gMCE9PXAubmVnYXRpdmU/KHAubmVnYXRpdmU9MCx0aGlzLmltb2QocCkucmVkTmVnKCkpOnRoaXMuaW1vZChwKX0sQy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHYscCl7aWYocC5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PXAu'@;
put 'Y21wbigxKSlyZXR1cm4gdi5jbG9uZSgpO3ZhciB3PW5ldyBBcnJheSgxNik7d1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSx3WzFdPXY7Zm9yKHZhciBKPTI7Sjx3Lmxlbmd0aDtKKyspd1tKXT10aGlzLm11bCh3W0otMV0sdik7dmFyIG5lPXdbMF0sZGU9MCxmZT0wLHhlPXAuYml0TGVuZ3Ro'@;
put 'KCklMjY7Zm9yKDA9PT14ZSYmKHhlPTI2KSxKPXAubGVuZ3RoLTE7Sj49MDtKLS0pe2Zvcih2YXIgSWU9cC53b3Jkc1tKXSxGZT14ZS0xO0ZlPj0wO0ZlLS0pe3ZhciBPZT1JZT4+RmUmMTtuZSE9PXdbMF0mJihuZT10aGlzLnNxcihuZSkpLDAhPT1PZXx8MCE9PWRlPyhkZTw8PTEsZGV8PU9l'@;
put 'LCg0PT0rK2ZlfHwwPT09SiYmMD09PUZlKSYmKG5lPXRoaXMubXVsKG5lLHdbZGVdKSxmZT0wLGRlPTApKTpmZT0wfXhlPTI2fXJldHVybiBuZX0sQy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHYpe3ZhciBwPXYudW1vZCh0aGlzLm0pO3JldHVybiBwPT09dj9wLmNsb25lKCk6cH0s'@;
put 'Qy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odil7dmFyIHA9di5jbG9uZSgpO3JldHVybiBwLnJlZD1udWxsLHB9LEUubW9udD1mdW5jdGlvbih2KXtyZXR1cm4gbmV3IFModil9LGsoUyxDKSxTLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW1v'@;
put 'ZCh2LnVzaGxuKHRoaXMuc2hpZnQpKX0sUy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odil7dmFyIHA9dGhpcy5pbW9kKHYubXVsKHRoaXMucmludikpO3JldHVybiBwLnJlZD1udWxsLHB9LFMucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odixwKXtpZih2LmlzWmVybygpfHxwLmlz'@;
put 'WmVybygpKXJldHVybiB2LndvcmRzWzBdPTAsdi5sZW5ndGg9MSx2O3ZhciB3PXYuaW11bChwKSxKPXcubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLG5lPXcuaXN1YihKKS5pdXNocm4odGhpcy5zaGlmdCksZGU9bmU7cmV0'@;
put 'dXJuIG5lLmNtcCh0aGlzLm0pPj0wP2RlPW5lLmlzdWIodGhpcy5tKTpuZS5jbXBuKDApPDAmJihkZT1uZS5pYWRkKHRoaXMubSkpLGRlLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHYscCl7aWYodi5pc1plcm8oKXx8cC5pc1plcm8oKSlyZXR1cm4gbmV3IEUo'@;
put 'MCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB3PXYubXVsKHApLEo9dy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksbmU9dy5pc3ViKEopLml1c2hybih0aGlzLnNoaWZ0KSxkZT1uZTtyZXR1cm4gbmUuY21wKHRoaXMubSk+PTA/'@;
put 'ZGU9bmUuaXN1Yih0aGlzLm0pOm5lLmNtcG4oMCk8MCYmKGRlPW5lLmlhZGQodGhpcy5tKSksZGUuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmltb2Qodi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlz'@;
put 'KX19KE09Ui5ubWQoTSksdGhpcyl9LDM2NDQ6KE0sTyxSKT0+e3ZhciB6PVIoMTA0OCksSz1SKDU2MjMpO00uZXhwb3J0cz1mdW5jdGlvbihzZSl7cmV0dXJuIHNlPygie30iPT09c2Uuc3Vic3RyKDAsMikmJihzZT0iXFx7XFx9IitzZS5zdWJzdHIoMikpLG9lKChoZT1zZSxoZS5zcGxpdCgi'@;
put 'XFxcXCIpLmpvaW4oTCkuc3BsaXQoIlxceyIpLmpvaW4oaykuc3BsaXQoIlxcfSIpLmpvaW4oRSkuc3BsaXQoIlxcLCIpLmpvaW4oaikuc3BsaXQoIlxcLiIpLmpvaW4oVikpLCEwKS5tYXAoWSkpOltdO3ZhciBoZX07dmFyIEw9IlwwU0xBU0giK01hdGgucmFuZG9tKCkrIlwwIixrPSJcME9Q'@;
put 'RU4iK01hdGgucmFuZG9tKCkrIlwwIixFPSJcMENMT1NFIitNYXRoLnJhbmRvbSgpKyJcMCIsaj0iXDBDT01NQSIrTWF0aC5yYW5kb20oKSsiXDAiLFY9IlwwUEVSSU9EIitNYXRoLnJhbmRvbSgpKyJcMCI7ZnVuY3Rpb24gQihzZSl7cmV0dXJuIHBhcnNlSW50KHNlLDEwKT09c2U/cGFyc2VJ'@;
put 'bnQoc2UsMTApOnNlLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gWShzZSl7cmV0dXJuIHNlLnNwbGl0KEwpLmpvaW4oIlxcIikuc3BsaXQoaykuam9pbigieyIpLnNwbGl0KEUpLmpvaW4oIn0iKS5zcGxpdChqKS5qb2luKCIsIikuc3BsaXQoVikuam9pbigiLiIpfWZ1bmN0aW9uIFgoc2Upe2lm'@;
put 'KCFzZSlyZXR1cm5bIiJdO3ZhciBoZT1bXSx1ZT1LKCJ7IiwifSIsc2UpO2lmKCF1ZSlyZXR1cm4gc2Uuc3BsaXQoIiwiKTt2YXIgRz11ZS5ib2R5LGI9dWUucG9zdCxEPXVlLnByZS5zcGxpdCgiLCIpO0RbRC5sZW5ndGgtMV0rPSJ7IitHKyJ9Ijt2YXIgSD1YKGIpO3JldHVybiBiLmxlbmd0'@;
put 'aCYmKERbRC5sZW5ndGgtMV0rPUguc2hpZnQoKSxELnB1c2guYXBwbHkoRCxIKSksaGUucHVzaC5hcHBseShoZSxEKSxoZX1mdW5jdGlvbiBVKHNlKXtyZXR1cm4ieyIrc2UrIn0ifWZ1bmN0aW9uIHEoc2Upe3JldHVybi9eLT8wXGQvLnRlc3Qoc2UpfWZ1bmN0aW9uIGVlKHNlLGhlKXtyZXR1'@;
put 'cm4gc2U8PWhlfWZ1bmN0aW9uIHRlKHNlLGhlKXtyZXR1cm4gc2U+PWhlfWZ1bmN0aW9uIG9lKHNlLGhlKXt2YXIgdWU9W10sY2U9SygieyIsIn0iLHNlKTtpZighY2V8fC9cJCQvLnRlc3QoY2UucHJlKSlyZXR1cm5bc2VdO3ZhciBHLGI9L14tP1xkK1wuXC4tP1xkKyg/OlwuXC4tP1xkKyk/'@;
put 'JC8udGVzdChjZS5ib2R5KSxEPS9eW2EtekEtWl1cLlwuW2EtekEtWl0oPzpcLlwuLT9cZCspPyQvLnRlc3QoY2UuYm9keSksSD1ifHxELE49Y2UuYm9keS5pbmRleE9mKCIsIik+PTA7aWYoIUgmJiFOKXJldHVybiBjZS5wb3N0Lm1hdGNoKC8sLipcfS8pP29lKHNlPWNlLnByZSsieyIrY2Uu'@;
put 'Ym9keStFK2NlLnBvc3QpOltzZV07aWYoSClHPWNlLmJvZHkuc3BsaXQoL1wuXC4vKTtlbHNlIGlmKDE9PT0oRz1YKGNlLmJvZHkpKS5sZW5ndGgmJjE9PT0oRz1vZShHWzBdLCExKS5tYXAoVSkpLmxlbmd0aClyZXR1cm4oUz1jZS5wb3N0Lmxlbmd0aD9vZShjZS5wb3N0LCExKTpbIiJdKS5t'@;
put 'YXAoZnVuY3Rpb24oS2Upe3JldHVybiBjZS5wcmUrR1swXStLZX0pO3ZhciBnLEM9Y2UucHJlLFM9Y2UucG9zdC5sZW5ndGg/b2UoY2UucG9zdCwhMSk6WyIiXTtpZihIKXt2YXIgdj1CKEdbMF0pLHA9QihHWzFdKSx3PU1hdGgubWF4KEdbMF0ubGVuZ3RoLEdbMV0ubGVuZ3RoKSxKPTM9PUcu'@;
put 'bGVuZ3RoP01hdGguYWJzKEIoR1syXSkpOjEsbmU9ZWU7cDx2JiYoSio9LTEsbmU9dGUpO3ZhciBkZT1HLnNvbWUocSk7Zz1bXTtmb3IodmFyIGZlPXY7bmUoZmUscCk7ZmUrPUope3ZhciB4ZTtpZihEKSJcXCI9PT0oeGU9U3RyaW5nLmZyb21DaGFyQ29kZShmZSkpJiYoeGU9IiIpO2Vsc2Ug'@;
put 'aWYoeGU9U3RyaW5nKGZlKSxkZSl7dmFyIEllPXcteGUubGVuZ3RoO2lmKEllPjApe3ZhciBGZT1uZXcgQXJyYXkoSWUrMSkuam9pbigiMCIpO3hlPWZlPDA/Ii0iK0ZlK3hlLnNsaWNlKDEpOkZlK3hlfX1nLnB1c2goeGUpfX1lbHNlIGc9eihHLGZ1bmN0aW9uKEtlKXtyZXR1cm4gb2UoS2Us'@;
put 'ITEpfSk7Zm9yKHZhciBPZT0wO09lPGcubGVuZ3RoO09lKyspZm9yKHZhciBqZT0wO2plPFMubGVuZ3RoO2plKyspe3ZhciBXZT1DK2dbT2VdK1NbamVdOyghaGV8fEh8fFdlKSYmdWUucHVzaChXZSl9cmV0dXJuIHVlfX0sOTkzMTooTSxPLFIpPT57dmFyIHo7ZnVuY3Rpb24gSyhrKXt0aGlz'@;
put 'LnJhbmQ9a31pZihNLmV4cG9ydHM9ZnVuY3Rpb24oayl7cmV0dXJuIHp8fCh6PW5ldyBLKG51bGwpKSx6LmdlbmVyYXRlKGspfSxNLmV4cG9ydHMuUmFuZD1LLEsucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9yYW5kKGspfSxLLnByb3RvdHlwZS5fcmFuZD1m'@;
put 'dW5jdGlvbihrKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhrKTtmb3IodmFyIEU9bmV3IFVpbnQ4QXJyYXkoayksaj0wO2o8RS5sZW5ndGg7aisrKUVbal09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gRX0sIm9iamVjdCI9PXR5cGVvZiBzZWxm'@;
put 'KXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/Sy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oayl7dmFyIEU9bmV3IFVpbnQ4QXJyYXkoayk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhFKSxFfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRv'@;
put 'LmdldFJhbmRvbVZhbHVlcz9LLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihrKXt2YXIgRT1uZXcgVWludDhBcnJheShrKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoRSksRX06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihLLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlv'@;
put 'bigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIEw9Uig5MjE0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgTC5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtLLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihr'@;
put 'KXtyZXR1cm4gTC5yYW5kb21CeXRlcyhrKX19Y2F0Y2h7fX0sNDQ5NzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhCKXt6LmlzQnVmZmVyKEIpfHwoQj16LmZyb20oQikpO2Zvcih2YXIgWT1CLmxlbmd0aC80fDAsWD1uZXcgQXJyYXkoWSksVT0wO1U8WTtVKysp'@;
put 'WFtVXT1CLnJlYWRVSW50MzJCRSg0KlUpO3JldHVybiBYfWZ1bmN0aW9uIEwoQil7Zm9yKDswPEIubGVuZ3RoO0IrKylCWzBdPTB9ZnVuY3Rpb24gayhCLFksWCxVLHEpe2Zvcih2YXIgZWUsdGUsb2Usc2UsaGU9WFswXSx1ZT1YWzFdLGNlPVhbMl0sRz1YWzNdLGI9QlswXV5ZWzBdLEQ9Qlsx'@;
put 'XV5ZWzFdLEg9QlsyXV5ZWzJdLE49QlszXV5ZWzNdLGc9NCxDPTE7QzxxO0MrKyllZT1oZVtiPj4+MjRdXnVlW0Q+Pj4xNiYyNTVdXmNlW0g+Pj44JjI1NV1eR1syNTUmTl1eWVtnKytdLHRlPWhlW0Q+Pj4yNF1edWVbSD4+PjE2JjI1NV1eY2VbTj4+PjgmMjU1XV5HWzI1NSZiXV5ZW2crK10s'@;
put 'b2U9aGVbSD4+PjI0XV51ZVtOPj4+MTYmMjU1XV5jZVtiPj4+OCYyNTVdXkdbMjU1JkRdXllbZysrXSxzZT1oZVtOPj4+MjRdXnVlW2I+Pj4xNiYyNTVdXmNlW0Q+Pj44JjI1NV1eR1syNTUmSF1eWVtnKytdLGI9ZWUsRD10ZSxIPW9lLE49c2U7cmV0dXJuIGVlPShVW2I+Pj4yNF08PDI0fFVb'@;
put 'RD4+PjE2JjI1NV08PDE2fFVbSD4+PjgmMjU1XTw8OHxVWzI1NSZOXSleWVtnKytdLHRlPShVW0Q+Pj4yNF08PDI0fFVbSD4+PjE2JjI1NV08PDE2fFVbTj4+PjgmMjU1XTw8OHxVWzI1NSZiXSleWVtnKytdLG9lPShVW0g+Pj4yNF08PDI0fFVbTj4+PjE2JjI1NV08PDE2fFVbYj4+PjgmMjU1'@;
put 'XTw8OHxVWzI1NSZEXSleWVtnKytdLHNlPShVW04+Pj4yNF08PDI0fFVbYj4+PjE2JjI1NV08PDE2fFVbRD4+PjgmMjU1XTw8OHxVWzI1NSZIXSleWVtnKytdLFtlZT4+Pj0wLHRlPj4+PTAsb2U+Pj49MCxzZT4+Pj0wXX12YXIgRT1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0saj1m'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgQj1uZXcgQXJyYXkoMjU2KSxZPTA7WTwyNTY7WSsrKUJbWV09WTwxMjg/WTw8MTpZPDwxXjI4Mztmb3IodmFyIFg9W10sVT1bXSxxPVtbXSxbXSxbXSxbXV0sZWU9W1tdLFtdLFtdLFtdXSx0ZT0wLG9lPTAsc2U9MDtzZTwyNTY7KytzZSl7dmFyIGhlPW9lXm9l'@;
put 'PDwxXm9lPDwyXm9lPDwzXm9lPDw0O1hbdGVdPWhlPWhlPj4+OF4yNTUmaGVeOTksVVtoZV09dGU7dmFyIHVlPUJbdGVdLGNlPUJbdWVdLEc9QltjZV0sYj0yNTcqQltoZV1eMTY4NDMwMDgqaGU7cVswXVt0ZV09Yjw8MjR8Yj4+PjgscVsxXVt0ZV09Yjw8MTZ8Yj4+PjE2LHFbMl1bdGVdPWI8'@;
put 'PDh8Yj4+PjI0LHFbM11bdGVdPWIsZWVbMF1baGVdPShiPTE2ODQzMDA5KkdeNjU1MzcqY2VeMjU3KnVlXjE2ODQzMDA4KnRlKTw8MjR8Yj4+PjgsZWVbMV1baGVdPWI8PDE2fGI+Pj4xNixlZVsyXVtoZV09Yjw8OHxiPj4+MjQsZWVbM11baGVdPWIsMD09PXRlP3RlPW9lPTE6KHRlPXVlXkJb'@;
put 'QltCW0dedWVdXV0sb2VePUJbQltvZV1dKX1yZXR1cm57U0JPWDpYLElOVl9TQk9YOlUsU1VCX01JWDpxLElOVl9TVUJfTUlYOmVlfX0oKTtmdW5jdGlvbiBWKEIpe3RoaXMuX2tleT1LKEIpLHRoaXMuX3Jlc2V0KCl9Vi5ibG9ja1NpemU9MTYsVi5rZXlTaXplPTMyLFYucHJvdG90eXBlLmJs'@;
put 'b2NrU2l6ZT1WLmJsb2NrU2l6ZSxWLnByb3RvdHlwZS5rZXlTaXplPVYua2V5U2l6ZSxWLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIEI9dGhpcy5fa2V5LFk9Qi5sZW5ndGgsWD1ZKzYsVT00KihYKzEpLHE9W10sZWU9MDtlZTxZO2VlKyspcVtlZV09QltlZV07Zm9yKGVl'@;
put 'PVk7ZWU8VTtlZSsrKXt2YXIgdGU9cVtlZS0xXTtlZSVZPT0wPyh0ZT1qLlNCT1hbKHRlPXRlPDw4fHRlPj4+MjQpPj4+MjRdPDwyNHxqLlNCT1hbdGU+Pj4xNiYyNTVdPDwxNnxqLlNCT1hbdGU+Pj44JjI1NV08PDh8ai5TQk9YWzI1NSZ0ZV0sdGVePUVbZWUvWXwwXTw8MjQpOlk+NiYmZWUl'@;
put 'WT09NCYmKHRlPWouU0JPWFt0ZT4+PjI0XTw8MjR8ai5TQk9YW3RlPj4+MTYmMjU1XTw8MTZ8ai5TQk9YW3RlPj4+OCYyNTVdPDw4fGouU0JPWFsyNTUmdGVdKSxxW2VlXT1xW2VlLVldXnRlfWZvcih2YXIgb2U9W10sc2U9MDtzZTxVO3NlKyspe3ZhciBoZT1VLXNlLHVlPXFbaGUtKHNlJTQ/'@;
put 'MDo0KV07b2Vbc2VdPXNlPDR8fGhlPD00P3VlOmouSU5WX1NVQl9NSVhbMF1bai5TQk9YW3VlPj4+MjRdXV5qLklOVl9TVUJfTUlYWzFdW2ouU0JPWFt1ZT4+PjE2JjI1NV1dXmouSU5WX1NVQl9NSVhbMl1bai5TQk9YW3VlPj4+OCYyNTVdXV5qLklOVl9TVUJfTUlYWzNdW2ouU0JPWFsyNTUm'@;
put 'dWVdXX10aGlzLl9uUm91bmRzPVgsdGhpcy5fa2V5U2NoZWR1bGU9cSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1vZX0sVi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKEIpe3JldHVybiBrKEI9SyhCKSx0aGlzLl9rZXlTY2hlZHVsZSxqLlNVQl9NSVgsai5TQk9YLHRoaXMuX25S'@;
put 'b3VuZHMpfSxWLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oQil7dmFyIFk9dGhpcy5lbmNyeXB0QmxvY2tSYXcoQiksWD16LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gWC53cml0ZVVJbnQzMkJFKFlbMF0sMCksWC53cml0ZVVJbnQzMkJFKFlbMV0sNCksWC53cml0ZVVJbnQzMkJF'@;
put 'KFlbMl0sOCksWC53cml0ZVVJbnQzMkJFKFlbM10sMTIpLFh9LFYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihCKXt2YXIgWT0oQj1LKEIpKVsxXTtCWzFdPUJbM10sQlszXT1ZO3ZhciBYPWsoQix0aGlzLl9pbnZLZXlTY2hlZHVsZSxqLklOVl9TVUJfTUlYLGouSU5WX1NCT1gs'@;
put 'dGhpcy5fblJvdW5kcyksVT16LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gVS53cml0ZVVJbnQzMkJFKFhbMF0sMCksVS53cml0ZVVJbnQzMkJFKFhbM10sNCksVS53cml0ZVVJbnQzMkJFKFhbMl0sOCksVS53cml0ZVVJbnQzMkJFKFhbMV0sMTIpLFV9LFYucHJvdG90eXBlLnNjcnViPWZ1bmN0'@;
put 'aW9uKCl7TCh0aGlzLl9rZXlTY2hlZHVsZSksTCh0aGlzLl9pbnZLZXlTY2hlZHVsZSksTCh0aGlzLl9rZXkpfSxNLmV4cG9ydHMuQUVTPVZ9LDQ4NDg6KE0sTyxSKT0+e3ZhciB6PVIoNDQ5NyksSz1SKDk1MDkpLkJ1ZmZlcixMPVIoMTAyNyksaz1SKDU3MTcpLEU9UigzMjg4KSxqPVIoNzI5'@;
put 'NSksVj1SKDY4NSk7ZnVuY3Rpb24gQihZLFgsVSxxKXtMLmNhbGwodGhpcyk7dmFyIGVlPUsuYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IHouQUVTKFgpO3ZhciB0ZT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGVlKTt0aGlzLl9naGFzaD1uZXcgRSh0ZSksVT1mdW5jdGlvbihvZSxz'@;
put 'ZSxoZSl7aWYoMTI9PT1zZS5sZW5ndGgpcmV0dXJuIG9lLl9maW5JRD1LLmNvbmNhdChbc2UsSy5mcm9tKFswLDAsMCwxXSldKSxLLmNvbmNhdChbc2UsSy5mcm9tKFswLDAsMCwyXSldKTt2YXIgdWU9bmV3IEUoaGUpLGNlPXNlLmxlbmd0aCxHPWNlJTE2O3VlLnVwZGF0ZShzZSksRyYmdWUu'@;
put 'dXBkYXRlKEsuYWxsb2MoRz0xNi1HLDApKSx1ZS51cGRhdGUoSy5hbGxvYyg4LDApKTt2YXIgYj04KmNlLEQ9Sy5hbGxvYyg4KTtELndyaXRlVUludEJFKGIsMCw4KSx1ZS51cGRhdGUoRCksb2UuX2ZpbklEPXVlLnN0YXRlO3ZhciBIPUsuZnJvbShvZS5fZmluSUQpO3JldHVybiBWKEgpLEh9'@;
put 'KHRoaXMsVSx0ZSksdGhpcy5fcHJldj1LLmZyb20oVSksdGhpcy5fY2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9cSx0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsdGhpcy5fbW9kZT1ZLHRoaXMuX2F1dGhUYWc9bnVs'@;
put 'bCx0aGlzLl9jYWxsZWQ9ITF9ayhCLEwpLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIFg9MTYtdGhpcy5fYWxlbiUxNjtYPDE2JiYoWD1LLmFsbG9jKFgsMCksdGhpcy5fZ2hhc2gudXBkYXRlKFgpKX10aGlzLl9jYWxs'@;
put 'ZWQ9ITA7dmFyIFU9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWSk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P1k6VSksdGhpcy5fbGVuKz1ZLmxlbmd0aCxVfSxCLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0'@;
put 'aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBZPWoodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7'@;
put 'aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24oWCxVKXt2YXIgcT0wO1gubGVuZ3RoIT09VS5sZW5ndGgmJnErKztmb3IodmFyIGVlPU1hdGgubWluKFgubGVuZ3RoLFUubGVuZ3RoKSx0ZT0wO3RlPGVlOysrdGUpcSs9WFt0ZV1eVVt0ZV07cmV0dXJuIHF9KFksdGhpcy5fYXV0aFRhZykpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPVksdGhpcy5fY2lwaGVyLnNjcnViKCl9LEIucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhSy5pc0J1ZmZl'@;
put 'cih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LEIucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oWSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9WX0sQi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKFkpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBp'@;
put 'biB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShZKSx0aGlzLl9hbGVuKz1ZLmxlbmd0aH0sTS5leHBvcnRzPUJ9LDQ2OTY6KE0sTyxSKT0+e3ZhciB6PVIoMTQ5NCksSz1SKDYxOTMpLEw9Uig0OTQ2KTtPLmNyZWF0ZUNpcGhlcj1PLkNpcGhlcj16LmNyZWF0ZUNpcGhl'@;
put 'cixPLmNyZWF0ZUNpcGhlcml2PU8uQ2lwaGVyaXY9ei5jcmVhdGVDaXBoZXJpdixPLmNyZWF0ZURlY2lwaGVyPU8uRGVjaXBoZXI9Sy5jcmVhdGVEZWNpcGhlcixPLmNyZWF0ZURlY2lwaGVyaXY9Ty5EZWNpcGhlcml2PUsuY3JlYXRlRGVjaXBoZXJpdixPLmxpc3RDaXBoZXJzPU8uZ2V0Q2lw'@;
put 'aGVycz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhMKX19LDYxOTM6KE0sTyxSKT0+e3ZhciB6PVIoNDg0OCksSz1SKDk1MDkpLkJ1ZmZlcixMPVIoNDUpLGs9Uig1OTY5KSxFPVIoMTAyNyksaj1SKDQ0OTcpLFY9UigzMDQ4KTtmdW5jdGlvbiBCKFUscSxlZSl7RS5jYWxsKHRoaXMp'@;
put 'LHRoaXMuX2NhY2hlPW5ldyBZLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgai5BRVMocSksdGhpcy5fcHJldj1LLmZyb20oZWUpLHRoaXMuX21vZGU9VSx0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBZKCl7dGhpcy5jYWNoZT1LLmFsbG9jVW5zYWZlKDApfWZ1bmN0'@;
put 'aW9uIFgoVSxxLGVlKXt2YXIgdGU9TFtVLnRvTG93ZXJDYXNlKCldO2lmKCF0ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIGVlJiYoZWU9Sy5mcm9tKGVlKSksIkdDTSIhPT10ZS5tb2RlJiZlZS5sZW5ndGghPT10ZS5pdil0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK2VlLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1LLmZyb20ocSkpLHEubGVuZ3RoIT09dGUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrcS5sZW5ndGgpO3JldHVy'@;
put 'biJzdHJlYW0iPT09dGUudHlwZT9uZXcgayh0ZS5tb2R1bGUscSxlZSwhMCk6ImF1dGgiPT09dGUudHlwZT9uZXcgeih0ZS5tb2R1bGUscSxlZSwhMCk6bmV3IEIodGUubW9kdWxlLHEsZWUpfVIoNTcxNykoQixFKSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUpe3ZhciBxLGVlO3Ro'@;
put 'aXMuX2NhY2hlLmFkZChVKTtmb3IodmFyIHRlPVtdO3E9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspZWU9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMscSksdGUucHVzaChlZSk7cmV0dXJuIEsuY29uY2F0KHRlKX0sQi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFy'@;
put 'IFU9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24ocSl7dmFyIGVlPXFbMTVdO2lmKGVlPDF8fGVlPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgdGU9LTE7Kyt0ZTxlZTspaWYocVt0ZSso'@;
put 'MTYtZWUpXSE9PWVlKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09ZWUpcmV0dXJuIHEuc2xpY2UoMCwxNi1lZSl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFUpKTtpZihVKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxv'@;
put 'Y2sgbGVuZ3RoIil9LEIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFUpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVUsdGhpc30sWS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFUpe3RoaXMuY2FjaGU9Sy5jb25jYXQoW3RoaXMuY2FjaGUsVV0pfSxZLnByb3RvdHlwZS5n'@;
put 'ZXQ9ZnVuY3Rpb24oVSl7dmFyIHE7aWYoVSl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIHE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHF9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIHE9dGhpcy5jYWNo'@;
put 'ZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHE7cmV0dXJuIG51bGx9LFkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LE8uY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24oVSxxKXt2YXIg'@;
put 'ZWU9TFtVLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgdGU9VihxLCExLGVlLmtleSxlZS5pdik7cmV0dXJuIFgoVSx0ZS5rZXksdGUuaXYpfSxPLmNyZWF0ZURlY2lwaGVyaXY9WH0sMTQ5NDooTSxPLFIpPT57dmFy'@;
put 'IHo9Uig0NSksSz1SKDQ4NDgpLEw9Uig5NTA5KS5CdWZmZXIsaz1SKDU5NjkpLEU9UigxMDI3KSxqPVIoNDQ5NyksVj1SKDMwNDgpO2Z1bmN0aW9uIEIocSxlZSx0ZSl7RS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBYLHRoaXMuX2NpcGhlcj1uZXcgai5BRVMoZWUpLHRoaXMuX3ByZXY9'@;
put 'TC5mcm9tKHRlKSx0aGlzLl9tb2RlPXEsdGhpcy5fYXV0b3BhZGRpbmc9ITB9Uig1NzE3KShCLEUpLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7dmFyIGVlLHRlO3RoaXMuX2NhY2hlLmFkZChxKTtmb3IodmFyIG9lPVtdO2VlPXRoaXMuX2NhY2hlLmdldCgpOyl0ZT10aGlzLl9t'@;
put 'b2RlLmVuY3J5cHQodGhpcyxlZSksb2UucHVzaCh0ZSk7cmV0dXJuIEwuY29uY2F0KG9lKX07dmFyIFk9TC5hbGxvYygxNiwxNik7ZnVuY3Rpb24gWCgpe3RoaXMuY2FjaGU9TC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBVKHEsZWUsdGUpe3ZhciBvZT16W3EudG9Mb3dlckNhc2UoKV07aWYo'@;
put 'IW9lKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZWUmJihlZT1MLmZyb20oZWUpKSxlZS5sZW5ndGghPT1vZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitlZS5sZW5ndGgpO2lmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgdGUmJih0ZT1MLmZyb20odGUpKSwiR0NNIiE9PW9lLm1vZGUmJnRlLmxlbmd0aCE9PW9lLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrdGUubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PW9lLnR5cGU/bmV3IGsob2UubW9kdWxlLGVl'@;
put 'LHRlKToiYXV0aCI9PT1vZS50eXBlP25ldyBLKG9lLm1vZHVsZSxlZSx0ZSk6bmV3IEIob2UubW9kdWxlLGVlLHRlKX1CLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgcT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBxPXRoaXMuX21vZGUu'@;
put 'ZW5jcnlwdCh0aGlzLHEpLHRoaXMuX2NpcGhlci5zY3J1YigpLHE7aWYoIXEuZXF1YWxzKFkpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9u'@;
put 'KHEpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXEsdGhpc30sWC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHEpe3RoaXMuY2FjaGU9TC5jb25jYXQoW3RoaXMuY2FjaGUscV0pfSxYLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHE9dGhp'@;
put 'cy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxxfXJldHVybiBudWxsfSxYLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgcT0xNi10aGlzLmNhY2hlLmxlbmd0aCxlZT1MLmFsbG9jVW5zYWZlKHEpLHRlPS0xOysrdGU8'@;
put 'cTspZWUud3JpdGVVSW50OChxLHRlKTtyZXR1cm4gTC5jb25jYXQoW3RoaXMuY2FjaGUsZWVdKX0sTy5jcmVhdGVDaXBoZXJpdj1VLE8uY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uKHEsZWUpe3ZhciB0ZT16W3EudG9Mb3dlckNhc2UoKV07aWYoIXRlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFs'@;
put 'aWQgc3VpdGUgdHlwZSIpO3ZhciBvZT1WKGVlLCExLHRlLmtleSx0ZS5pdik7cmV0dXJuIFUocSxvZS5rZXksb2UuaXYpfX0sMzI4ODooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz16LmFsbG9jKDE2LDApO2Z1bmN0aW9uIEwoRSl7dmFyIGo9ei5hbGxvY1Vuc2FmZSgxNik7cmV0'@;
put 'dXJuIGoud3JpdGVVSW50MzJCRShFWzBdPj4+MCwwKSxqLndyaXRlVUludDMyQkUoRVsxXT4+PjAsNCksai53cml0ZVVJbnQzMkJFKEVbMl0+Pj4wLDgpLGoud3JpdGVVSW50MzJCRShFWzNdPj4+MCwxMiksan1mdW5jdGlvbiBrKEUpe3RoaXMuaD1FLHRoaXMuc3RhdGU9ei5hbGxvYygxNiww'@;
put 'KSx0aGlzLmNhY2hlPXouYWxsb2NVbnNhZmUoMCl9ay5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oRSl7Zm9yKHZhciBqPS0xOysrajxFLmxlbmd0aDspdGhpcy5zdGF0ZVtqXV49RVtqXTt0aGlzLl9tdWx0aXBseSgpfSxrLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IEUsaixWLEI9WyhFPXRoaXMuaCkucmVhZFVJbnQzMkJFKDApLEUucmVhZFVJbnQzMkJFKDQpLEUucmVhZFVJbnQzMkJFKDgpLEUucmVhZFVJbnQzMkJFKDEyKV0sWT1bMCwwLDAsMF0sWD0tMTsrK1g8MTI4Oyl7Zm9yKHRoaXMuc3RhdGVbfn4oWC84KV0mMTw8Ny1YJTgmJihZWzBdXj1CWzBd'@;
put 'LFlbMV1ePUJbMV0sWVsyXV49QlsyXSxZWzNdXj1CWzNdKSxWPTAhPSgxJkJbM10pLGo9MztqPjA7ai0tKUJbal09QltqXT4+PjF8KDEmQltqLTFdKTw8MzE7QlswXT1CWzBdPj4+MSxWJiYoQlswXT0tNTIwMDkzNjk2XkJbMF0pfXRoaXMuc3RhdGU9TChZKX0say5wcm90b3R5cGUudXBkYXRl'@;
put 'PWZ1bmN0aW9uKEUpe3ZhciBqO2Zvcih0aGlzLmNhY2hlPXouY29uY2F0KFt0aGlzLmNhY2hlLEVdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KWo9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goail9LGsucHJvdG90eXBl'@;
put 'LmZpbmFsPWZ1bmN0aW9uKEUsail7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKHouY29uY2F0KFt0aGlzLmNhY2hlLEtdLDE2KSksdGhpcy5naGFzaChMKFswLEUsMCxqXSkpLHRoaXMuc3RhdGV9LE0uZXhwb3J0cz1rfSw2ODU6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihP'@;
put 'KXtmb3IodmFyIFIsej1PLmxlbmd0aDt6LS07KXtpZigyNTUhPT0oUj1PLnJlYWRVSW50OCh6KSkpe1IrKyxPLndyaXRlVUludDgoUix6KTticmVha31PLndyaXRlVUludDgoMCx6KX19fSw1MjkyOihNLE8sUik9Pnt2YXIgej1SKDcyOTUpO08uZW5jcnlwdD1mdW5jdGlvbihLLEwpe3ZhciBr'@;
put 'PXooTCxLLl9wcmV2KTtyZXR1cm4gSy5fcHJldj1LLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGspLEsuX3ByZXZ9LE8uZGVjcnlwdD1mdW5jdGlvbihLLEwpe3ZhciBrPUsuX3ByZXY7Sy5fcHJldj1MO3ZhciBFPUsuX2NpcGhlci5kZWNyeXB0QmxvY2soTCk7cmV0dXJuIHooRSxrKX19LDYzMTE6'@;
put 'KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9Uig3Mjk1KTtmdW5jdGlvbiBMKGssRSxqKXt2YXIgVj1FLmxlbmd0aCxCPUsoRSxrLl9jYWNoZSk7cmV0dXJuIGsuX2NhY2hlPWsuX2NhY2hlLnNsaWNlKFYpLGsuX3ByZXY9ei5jb25jYXQoW2suX3ByZXYsaj9FOkJdKSxCfU8uZW5j'@;
put 'cnlwdD1mdW5jdGlvbihrLEUsail7Zm9yKHZhciBWLEI9ei5hbGxvY1Vuc2FmZSgwKTtFLmxlbmd0aDspe2lmKDA9PT1rLl9jYWNoZS5sZW5ndGgmJihrLl9jYWNoZT1rLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGsuX3ByZXYpLGsuX3ByZXY9ei5hbGxvY1Vuc2FmZSgwKSksIShrLl9jYWNoZS5s'@;
put 'ZW5ndGg8PUUubGVuZ3RoKSl7Qj16LmNvbmNhdChbQixMKGssRSxqKV0pO2JyZWFrfUI9ei5jb25jYXQoW0IsTChrLEUuc2xpY2UoMCxWPWsuX2NhY2hlLmxlbmd0aCksaildKSxFPUUuc2xpY2UoVil9cmV0dXJuIEJ9fSwxNTEwOihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtmdW5j'@;
put 'dGlvbiBLKGssRSxqKXtmb3IodmFyIFYsQixZPS0xLFg9MDsrK1k8ODspVj1FJjE8PDctWT8xMjg6MCxYKz0oMTI4JihCPWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldilbMF1eVikpPj5ZJTgsay5fcHJldj1MKGsuX3ByZXYsaj9WOkIpO3JldHVybiBYfWZ1bmN0aW9uIEwoayxFKXt2'@;
put 'YXIgaj1rLmxlbmd0aCxWPS0xLEI9ei5hbGxvY1Vuc2FmZShrLmxlbmd0aCk7Zm9yKGs9ei5jb25jYXQoW2ssei5mcm9tKFtFXSldKTsrK1Y8ajspQltWXT1rW1ZdPDwxfGtbVisxXT4+NztyZXR1cm4gQn1PLmVuY3J5cHQ9ZnVuY3Rpb24oayxFLGope2Zvcih2YXIgVj1FLmxlbmd0aCxCPXou'@;
put 'YWxsb2NVbnNhZmUoViksWT0tMTsrK1k8VjspQltZXT1LKGssRVtZXSxqKTtyZXR1cm4gQn19LDE5NjQ6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoTCxrLEUpe3ZhciBqPUwuX2NpcGhlci5lbmNyeXB0QmxvY2soTC5fcHJldilbMF1eaztyZXR1cm4gTC5fcHJl'@;
put 'dj16LmNvbmNhdChbTC5fcHJldi5zbGljZSgxKSx6LmZyb20oW0U/azpqXSldKSxqfU8uZW5jcnlwdD1mdW5jdGlvbihMLGssRSl7Zm9yKHZhciBqPWsubGVuZ3RoLFY9ei5hbGxvY1Vuc2FmZShqKSxCPS0xOysrQjxqOylWW0JdPUsoTCxrW0JdLEUpO3JldHVybiBWfX0sNjAwOTooTSxPLFIp'@;
put 'PT57dmFyIHo9Uig3Mjk1KSxLPVIoOTUwOSkuQnVmZmVyLEw9Uig2ODUpO2Z1bmN0aW9uIGsoRSl7dmFyIGo9RS5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhFLl9wcmV2KTtyZXR1cm4gTChFLl9wcmV2KSxqfU8uZW5jcnlwdD1mdW5jdGlvbihFLGope3ZhciBWPU1hdGguY2VpbChqLmxlbmd0'@;
put 'aC8xNiksQj1FLl9jYWNoZS5sZW5ndGg7RS5fY2FjaGU9Sy5jb25jYXQoW0UuX2NhY2hlLEsuYWxsb2NVbnNhZmUoMTYqVildKTtmb3IodmFyIFk9MDtZPFY7WSsrKXt2YXIgWD1rKEUpLFU9QisxNipZO0UuX2NhY2hlLndyaXRlVUludDMyQkUoWFswXSxVKzApLEUuX2NhY2hlLndyaXRlVUlu'@;
put 'dDMyQkUoWFsxXSxVKzQpLEUuX2NhY2hlLndyaXRlVUludDMyQkUoWFsyXSxVKzgpLEUuX2NhY2hlLndyaXRlVUludDMyQkUoWFszXSxVKzEyKX12YXIgcT1FLl9jYWNoZS5zbGljZSgwLGoubGVuZ3RoKTtyZXR1cm4gRS5fY2FjaGU9RS5fY2FjaGUuc2xpY2Uoai5sZW5ndGgpLHooaixxKX19'@;
put 'LDEwODQ6KE0sTyk9PntPLmVuY3J5cHQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gUi5fY2lwaGVyLmVuY3J5cHRCbG9jayh6KX0sTy5kZWNyeXB0PWZ1bmN0aW9uKFIseil7cmV0dXJuIFIuX2NpcGhlci5kZWNyeXB0QmxvY2soeil9fSw0NTooTSxPLFIpPT57dmFyIHo9e0VDQjpSKDEwODQpLENC'@;
put 'QzpSKDUyOTIpLENGQjpSKDYzMTEpLENGQjg6UigxOTY0KSxDRkIxOlIoMTUxMCksT0ZCOlIoODg2MSksQ1RSOlIoNjAwOSksR0NNOlIoNjAwOSl9LEs9Uig0OTQ2KTtmb3IodmFyIEwgaW4gSylLW0xdLm1vZHVsZT16W0tbTF0ubW9kZV07TS5leHBvcnRzPUt9LDg4NjE6KE0sTyxSKT0+e3Zh'@;
put 'ciB6PVIoODc2NCkuQnVmZmVyLEs9Uig3Mjk1KTtmdW5jdGlvbiBMKGspe3JldHVybiBrLl9wcmV2PWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldiksay5fcHJldn1PLmVuY3J5cHQ9ZnVuY3Rpb24oayxFKXtmb3IoO2suX2NhY2hlLmxlbmd0aDxFLmxlbmd0aDspay5fY2FjaGU9ei5j'@;
put 'b25jYXQoW2suX2NhY2hlLEwoayldKTt2YXIgaj1rLl9jYWNoZS5zbGljZSgwLEUubGVuZ3RoKTtyZXR1cm4gay5fY2FjaGU9ay5fY2FjaGUuc2xpY2UoRS5sZW5ndGgpLEsoRSxqKX19LDU5Njk6KE0sTyxSKT0+e3ZhciB6PVIoNDQ5NyksSz1SKDk1MDkpLkJ1ZmZlcixMPVIoMTAyNyk7ZnVu'@;
put 'Y3Rpb24gayhFLGosVixCKXtMLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyB6LkFFUyhqKSx0aGlzLl9wcmV2PUsuZnJvbShWKSx0aGlzLl9jYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1CLHRoaXMuX21vZGU9'@;
put 'RX1SKDU3MTcpKGssTCksay5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsRSx0aGlzLl9kZWNyeXB0KX0say5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LE0uZXhwb3J0cz1rfSwzNjE0'@;
put 'OihNLE8sUik9Pnt2YXIgej1SKDc2NjcpLEs9Uig0Njk2KSxMPVIoNDUpLGs9Uig5NzE1KSxFPVIoMzA0OCk7ZnVuY3Rpb24gaihCLFksWCl7aWYoQj1CLnRvTG93ZXJDYXNlKCksTFtCXSlyZXR1cm4gSy5jcmVhdGVDaXBoZXJpdihCLFksWCk7aWYoa1tCXSlyZXR1cm4gbmV3IHooe2tleTpZ'@;
put 'LGl2OlgsbW9kZTpCfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gVihCLFksWCl7aWYoQj1CLnRvTG93ZXJDYXNlKCksTFtCXSlyZXR1cm4gSy5jcmVhdGVEZWNpcGhlcml2KEIsWSxYKTtpZihrW0JdKXJldHVybiBuZXcgeih7a2V5OlksaXY6'@;
put 'WCxtb2RlOkIsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfU8uY3JlYXRlQ2lwaGVyPU8uQ2lwaGVyPWZ1bmN0aW9uKEIsWSl7dmFyIFgsVTtpZihCPUIudG9Mb3dlckNhc2UoKSxMW0JdKVg9TFtCXS5rZXksVT1MW0JdLml2O2Vsc2V7aWYo'@;
put 'IWtbQl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7WD04KmtbQl0ua2V5LFU9a1tCXS5pdn12YXIgcT1FKFksITEsWCxVKTtyZXR1cm4gaihCLHEua2V5LHEuaXYpfSxPLmNyZWF0ZUNpcGhlcml2PU8uQ2lwaGVyaXY9aixPLmNyZWF0ZURlY2lwaGVyPU8uRGVj'@;
put 'aXBoZXI9ZnVuY3Rpb24oQixZKXt2YXIgWCxVO2lmKEI9Qi50b0xvd2VyQ2FzZSgpLExbQl0pWD1MW0JdLmtleSxVPUxbQl0uaXY7ZWxzZXtpZigha1tCXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtYPTgqa1tCXS5rZXksVT1rW0JdLml2fXZhciBxPUUoWSwh'@;
put 'MSxYLFUpO3JldHVybiBWKEIscS5rZXkscS5pdil9LE8uY3JlYXRlRGVjaXBoZXJpdj1PLkRlY2lwaGVyaXY9VixPLmxpc3RDaXBoZXJzPU8uZ2V0Q2lwaGVycz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhrKS5jb25jYXQoSy5nZXRDaXBoZXJzKCkpfX0sNzY2NzooTSxPLFIpPT57'@;
put 'dmFyIHo9UigxMDI3KSxLPVIoNTI1MSksTD1SKDU3MTcpLGs9Uig5NTA5KS5CdWZmZXIsRT17ImRlcy1lZGUzLWNiYyI6Sy5DQkMuaW5zdGFudGlhdGUoSy5FREUpLCJkZXMtZWRlMyI6Sy5FREUsImRlcy1lZGUtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShLLkVERSksImRlcy1lZGUiOksuRURF'@;
put 'LCJkZXMtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShLLkRFUyksImRlcy1lY2IiOksuREVTfTtmdW5jdGlvbiBqKFYpe3ouY2FsbCh0aGlzKTt2YXIgQixZPVYubW9kZS50b0xvd2VyQ2FzZSgpLFg9RVtZXTtCPVYuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBVPVYua2V5O2suaXNC'@;
put 'dWZmZXIoVSl8fChVPWsuZnJvbShVKSksImRlcy1lZGUiIT09WSYmImRlcy1lZGUtY2JjIiE9PVl8fChVPWsuY29uY2F0KFtVLFUuc2xpY2UoMCw4KV0pKTt2YXIgcT1WLml2O2suaXNCdWZmZXIocSl8fChxPWsuZnJvbShxKSksdGhpcy5fZGVzPVguY3JlYXRlKHtrZXk6VSxpdjpxLHR5cGU6'@;
put 'Qn0pfUUuZGVzPUVbImRlcy1jYmMiXSxFLmRlczM9RVsiZGVzLWVkZTMtY2JjIl0sTS5leHBvcnRzPWosTChqLHopLGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIGsuZnJvbSh0aGlzLl9kZXMudXBkYXRlKFYpKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGsuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw5NzE1OihNLE8pPT57T1siZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxPWyJkZXMtY2JjIl09Ty5kZXM9e2tleTo4LGl2Ojh9LE9bImRlcy1lZGUzLWNiYyJdPU8uZGVzMz17a2V5OjI0LGl2Ojh9LE9bImRlcy1lZGUzIl09e2tleToy'@;
put 'NCxpdjowfSxPWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sT1siZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9UigzNTUwKSxMPVIoMTc5OCk7ZnVuY3Rpb24gayhqKXt2YXIgVixCPWoubW9kdWx1cy5ieXRlTGVuZ3Ro'@;
put 'KCk7ZG97Vj1uZXcgSyhMKEIpKX13aGlsZShWLmNtcChqLm1vZHVsdXMpPj0wfHwhVi51bW9kKGoucHJpbWUxKXx8IVYudW1vZChqLnByaW1lMikpO3JldHVybiBWfWZ1bmN0aW9uIEUoaixWKXt2YXIgY2UsRyxCPXtibGluZGVyOihHPWsoY2U9VikpLnRvUmVkKEsubW9udChjZS5tb2R1bHVz'@;
put 'KSkucmVkUG93KG5ldyBLKGNlLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpHLmludm0oY2UubW9kdWx1cyl9LFk9Vi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxYPW5ldyBLKGopLm11bChCLmJsaW5kZXIpLnVtb2QoVi5tb2R1bHVzKSxVPVgudG9SZWQoSy5tb250KFYucHJp'@;
put 'bWUxKSkscT1YLnRvUmVkKEsubW9udChWLnByaW1lMikpLGVlPVYuY29lZmZpY2llbnQsdGU9Vi5wcmltZTEsb2U9Vi5wcmltZTIsc2U9VS5yZWRQb3coVi5leHBvbmVudDEpLmZyb21SZWQoKSxoZT1xLnJlZFBvdyhWLmV4cG9uZW50MikuZnJvbVJlZCgpLHVlPXNlLmlzdWIoaGUpLmltdWwo'@;
put 'ZWUpLnVtb2QodGUpLmltdWwob2UpO3JldHVybiBoZS5pYWRkKHVlKS5pbXVsKEIudW5ibGluZGVyKS51bW9kKFYubW9kdWx1cykudG9BcnJheUxpa2UoeiwiYmUiLFkpfUUuZ2V0cj1rLE0uZXhwb3J0cz1FfSw2MDQyOihNLE8sUik9PntNLmV4cG9ydHM9Uig1MjA3KX0sNDc0MzooTSxPLFIp'@;
put 'PT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDM0ODIpLEw9Uig4NDczKSxrPVIoNTcxNyksRT1SKDI5NTcpLGo9Uig3NzUzKSxWPVIoNTIwNyk7ZnVuY3Rpb24gQihxKXtMLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGVlPVZbcV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBt'@;
put 'ZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPWVlLmhhc2gsdGhpcy5faGFzaD1LKGVlLmhhc2gpLHRoaXMuX3RhZz1lZS5pZCx0aGlzLl9zaWduVHlwZT1lZS5zaWdufWZ1bmN0aW9uIFkocSl7TC5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBlZT1WW3FdO2lmKCFlZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPUsoZWUuaGFzaCksdGhpcy5fdGFnPWVlLmlkLHRoaXMuX3NpZ25UeXBlPWVlLnNpZ259ZnVuY3Rpb24gWChxKXtyZXR1cm4gbmV3IEIocSl9ZnVuY3Rpb24gVShxKXtyZXR1cm4gbmV3IFkocSl9T2JqZWN0LmtleXMo'@;
put 'VikuZm9yRWFjaChmdW5jdGlvbihxKXtWW3FdLmlkPXouZnJvbShWW3FdLmlkLCJoZXgiKSxWW3EudG9Mb3dlckNhc2UoKV09VltxXX0pLGsoQixMLldyaXRhYmxlKSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24ocSxlZSx0ZSl7dGhpcy5faGFzaC51cGRhdGUocSksdGUoKX0sQi5wcm90'@;
put 'b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHEsZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgcSYmKHE9ei5mcm9tKHEsZWUpKSx0aGlzLl9oYXNoLnVwZGF0ZShxKSx0aGlzfSxCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHEsZWUpe3RoaXMuZW5kKCk7dmFyIHRlPXRoaXMuX2hhc2guZGlnZXN0'@;
put 'KCksb2U9RSh0ZSxxLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIGVlP29lLnRvU3RyaW5nKGVlKTpvZX0sayhZLEwuV3JpdGFibGUpLFkucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxLGVlLHRlKXt0aGlzLl9oYXNoLnVwZGF0ZShxKSx0ZSgpfSxZ'@;
put 'LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxJiYocT16LmZyb20ocSxlZSkpLHRoaXMuX2hhc2gudXBkYXRlKHEpLHRoaXN9LFkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihxLGVlLHRlKXsic3RyaW5nIj09dHlwZW9mIGVlJiYoZWU9'@;
put 'ei5mcm9tKGVlLHRlKSksdGhpcy5lbmQoKTt2YXIgb2U9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gaihlZSxvZSxxLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LE0uZXhwb3J0cz17U2lnbjpYLFZlcmlmeTpVLGNyZWF0ZVNpZ246WCxjcmVhdGVWZXJpZnk6VX19LDI5NTc6KE0sTyxS'@;
put 'KT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9Uig4MzU1KSxMPVIoMzY2Myksaz1SKDY5NDgpLmVjLEU9UigzNTUwKSxqPVIoOTgwKSxWPVIoMTMwOCk7ZnVuY3Rpb24gQihxLGVlLHRlLG9lKXtpZigocT16LmZyb20ocS50b0FycmF5KCkpKS5sZW5ndGg8ZWUuYnl0ZUxlbmd0aCgpKXt2YXIg'@;
put 'c2U9ei5hbGxvYyhlZS5ieXRlTGVuZ3RoKCktcS5sZW5ndGgpO3E9ei5jb25jYXQoW3NlLHFdKX12YXIgaGU9dGUubGVuZ3RoLHVlPWZ1bmN0aW9uKGIsRCl7Yj0oYj1ZKGIsRCkpLm1vZChEKTt2YXIgSD16LmZyb20oYi50b0FycmF5KCkpO2lmKEgubGVuZ3RoPEQuYnl0ZUxlbmd0aCgpKXt2'@;
put 'YXIgTj16LmFsbG9jKEQuYnl0ZUxlbmd0aCgpLUgubGVuZ3RoKTtIPXouY29uY2F0KFtOLEhdKX1yZXR1cm4gSH0odGUsZWUpLGNlPXouYWxsb2MoaGUpO2NlLmZpbGwoMSk7dmFyIEc9ei5hbGxvYyhoZSk7cmV0dXJuIEc9SyhvZSxHKS51cGRhdGUoY2UpLnVwZGF0ZSh6LmZyb20oWzBdKSku'@;
put 'dXBkYXRlKHEpLnVwZGF0ZSh1ZSkuZGlnZXN0KCksY2U9SyhvZSxHKS51cGRhdGUoY2UpLmRpZ2VzdCgpLHtrOkc9SyhvZSxHKS51cGRhdGUoY2UpLnVwZGF0ZSh6LmZyb20oWzFdKSkudXBkYXRlKHEpLnVwZGF0ZSh1ZSkuZGlnZXN0KCksdjpjZT1LKG9lLEcpLnVwZGF0ZShjZSkuZGlnZXN0'@;
put 'KCl9fWZ1bmN0aW9uIFkocSxlZSl7dmFyIHRlPW5ldyBFKHEpLG9lPShxLmxlbmd0aDw8MyktZWUuYml0TGVuZ3RoKCk7cmV0dXJuIG9lPjAmJnRlLmlzaHJuKG9lKSx0ZX1mdW5jdGlvbiBYKHEsZWUsdGUpe3ZhciBvZSxzZTtkb3tmb3Iob2U9ei5hbGxvYygwKTs4Km9lLmxlbmd0aDxxLmJp'@;
put 'dExlbmd0aCgpOyllZS52PUsodGUsZWUuaykudXBkYXRlKGVlLnYpLmRpZ2VzdCgpLG9lPXouY29uY2F0KFtvZSxlZS52XSk7c2U9WShvZSxxKSxlZS5rPUsodGUsZWUuaykudXBkYXRlKGVlLnYpLnVwZGF0ZSh6LmZyb20oWzBdKSkuZGlnZXN0KCksZWUudj1LKHRlLGVlLmspLnVwZGF0ZShl'@;
put 'ZS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PXNlLmNtcChxKSk7cmV0dXJuIHNlfWZ1bmN0aW9uIFUocSxlZSx0ZSxvZSl7cmV0dXJuIHEudG9SZWQoRS5tb250KHRlKSkucmVkUG93KGVlKS5mcm9tUmVkKCkubW9kKG9lKX1NLmV4cG9ydHM9ZnVuY3Rpb24ocSxlZSx0ZSxvZSxzZSl7dmFyIGhl'@;
put 'PWooZWUpO2lmKGhlLmN1cnZlKXtpZigiZWNkc2EiIT09b2UmJiJlY2RzYS9yc2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGIsRCl7dmFyIEg9VltELmN1cnZlLmpvaW4oIi4iKV07aWYoIUgpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJ1bmtub3duIGN1cnZlICIrRC5jdXJ2ZS5qb2luKCIuIikpO3ZhciBnPW5ldyBrKEgpLmtleUZyb21Qcml2YXRlKEQucHJpdmF0ZUtleSkuc2lnbihiKTtyZXR1cm4gei5mcm9tKGcudG9ERVIoKSl9KHEsaGUpfWlmKCJkc2EiPT09aGUudHlwZSl7aWYoImRzYSIhPT1vZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oYixELEgpe2Zvcih2YXIgTixnPUQucGFyYW1zLnByaXZfa2V5LEM9RC5wYXJhbXMucCxTPUQucGFyYW1zLnEsdj1ELnBhcmFtcy5nLHA9bmV3IEUoMCksdz1ZKGIsUykubW9kKFMpLEo9ITEsbmU9QihnLFMs'@;
put 'YixIKTshMT09PUo7KXA9VSh2LE49WChTLG5lLEgpLEMsUyksMD09PShKPU4uaW52bShTKS5pbXVsKHcuYWRkKGcubXVsKHApKSkubW9kKFMpKS5jbXBuKDApJiYoSj0hMSxwPW5ldyBFKDApKTtyZXR1cm4gZnVuY3Rpb24oZGUsZmUpe2RlPWRlLnRvQXJyYXkoKSxmZT1mZS50b0FycmF5KCks'@;
put 'MTI4JmRlWzBdJiYoZGU9WzBdLmNvbmNhdChkZSkpLDEyOCZmZVswXSYmKGZlPVswXS5jb25jYXQoZmUpKTt2YXIgSWU9WzQ4LGRlLmxlbmd0aCtmZS5sZW5ndGgrNCwyLGRlLmxlbmd0aF07cmV0dXJuIEllPUllLmNvbmNhdChkZSxbMixmZS5sZW5ndGhdLGZlKSx6LmZyb20oSWUpfShwLEop'@;
put 'fShxLGhlLHRlKX1pZigicnNhIiE9PW9lJiYiZWNkc2EvcnNhIiE9PW9lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3E9ei5jb25jYXQoW3NlLHFdKTtmb3IodmFyIHVlPWhlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGNlPVswLDFdO3EubGVuZ3RoK2NlLmxlbmd0'@;
put 'aCsxPHVlOyljZS5wdXNoKDI1NSk7Y2UucHVzaCgwKTtmb3IodmFyIEc9LTE7KytHPHEubGVuZ3RoOyljZS5wdXNoKHFbR10pO3JldHVybiBMKGNlLGhlKX0sTS5leHBvcnRzLmdldEtleT1CLE0uZXhwb3J0cy5tYWtlS2V5PVh9LDc3NTM6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVy'@;
put 'LEs9UigzNTUwKSxMPVIoNjk0OCkuZWMsaz1SKDk4MCksRT1SKDEzMDgpO2Z1bmN0aW9uIGooVixCKXtpZihWLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKFYuY21wKEIpPj1CKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1NLmV4cG9ydHM9ZnVu'@;
put 'Y3Rpb24oVixCLFksWCxVKXt2YXIgcT1rKFkpO2lmKCJlYyI9PT1xLnR5cGUpe2lmKCJlY2RzYSIhPT1YJiYiZWNkc2EvcnNhIiE9PVgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD1FW2IuZGF0YS5hbGdvcml0'@;
put 'aG0uY3VydmUuam9pbigiLiIpXTtpZighRCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitiLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBMKEQpLnZlcmlmeShHLGNlLGIuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oVixCLHEpfWlmKCJk'@;
put 'c2EiPT09cS50eXBlKXtpZigiZHNhIiE9PVgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD1iLmRhdGEucCxIPWIuZGF0YS5xLE49Yi5kYXRhLmcsZz1iLmRhdGEucHViX2tleSxDPWsuc2lnbmF0dXJlLmRlY29k'@;
put 'ZShjZSwiZGVyIiksUz1DLnMsdj1DLnI7aihTLEgpLGoodixIKTt2YXIgcD1LLm1vbnQoRCksdz1TLmludm0oSCk7cmV0dXJuIDA9PT1OLnRvUmVkKHApLnJlZFBvdyhuZXcgSyhHKS5tdWwodykubW9kKEgpKS5mcm9tUmVkKCkubXVsKGcudG9SZWQocCkucmVkUG93KHYubXVsKHcpLm1vZChI'@;
put 'KSkuZnJvbVJlZCgpKS5tb2QoRCkubW9kKEgpLmNtcCh2KX0oVixCLHEpfWlmKCJyc2EiIT09WCYmImVjZHNhL3JzYSIhPT1YKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7Qj16LmNvbmNhdChbVSxCXSk7Zm9yKHZhciBlZT1xLm1vZHVsdXMuYnl0ZUxlbmd0aCgp'@;
put 'LHRlPVsxXSxvZT0wO0IubGVuZ3RoK3RlLmxlbmd0aCsyPGVlOyl0ZS5wdXNoKDI1NSksb2UrKzt0ZS5wdXNoKDApO2Zvcih2YXIgc2U9LTE7KytzZTxCLmxlbmd0aDspdGUucHVzaChCW3NlXSk7dGU9ei5mcm9tKHRlKTt2YXIgaGU9Sy5tb250KHEubW9kdWx1cyk7Vj0oVj1uZXcgSyhWKS50'@;
put 'b1JlZChoZSkpLnJlZFBvdyhuZXcgSyhxLnB1YmxpY0V4cG9uZW50KSksVj16LmZyb20oVi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdWU9b2U8OD8xOjA7Zm9yKGVlPU1hdGgubWluKFYubGVuZ3RoLHRlLmxlbmd0aCksVi5sZW5ndGghPT10ZS5sZW5ndGgmJih1ZT0xKSxzZT0tMTsrK3Nl'@;
put 'PGVlOyl1ZXw9VltzZV1edGVbc2VdO3JldHVybiAwPT09dWV9fSw3Mjk1OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxMKXtmb3IodmFyIGs9TWF0aC5taW4oSy5sZW5ndGgsTC5sZW5ndGgpLEU9bmV3IHooayksaj0wO2o8azsrK2opRVtqXT1L'@;
put 'W2pdXkxbal07cmV0dXJuIEV9fSw4NzY0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KTtjb25zdCBLPVIoOTc0MiksTD1SKDY0NSksaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMu'@;
put 'dXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7Ty5CdWZmZXI9VixPLlNsb3dCdWZmZXI9ZnVuY3Rpb24oTWUpe3JldHVybitNZSE9TWUmJihNZT0wKSxWLmFsbG9jKCtNZSl9LE8uSU5TUEVDVF9NQVhfQllURVM9NTA7Y29uc3QgRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIGooTWUpe2lmKE1lPkUp'@;
put 'dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytNZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7Y29uc3QgRGU9bmV3IFVpbnQ4QXJyYXkoTWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRGUsVi5wcm90b3R5cGUpLERlfWZ1bmN0aW9uIFYoTWUsRGUs'@;
put 'emUpe2lmKCJudW1iZXIiPT10eXBlb2YgTWUpe2lmKCJzdHJpbmciPT10eXBlb2YgRGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIFgoTWUpfXJldHVybiBCKE1l'@;
put 'LERlLHplKX1mdW5jdGlvbiBCKE1lLERlLHplKXtpZigic3RyaW5nIj09dHlwZW9mIE1lKXJldHVybiBmdW5jdGlvbihNdCxIdCl7aWYoInN0cmluZyI9PXR5cGVvZiBIdCYmIiIhPT1IdHx8KEh0PSJ1dGY4IiksIVYuaXNFbmNvZGluZyhIdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93'@;
put 'biBlbmNvZGluZzogIitIdCk7Y29uc3QgUHQ9MHx0ZShNdCxIdCk7bGV0IG9uPWooUHQpO2NvbnN0IENuPW9uLndyaXRlKE10LEh0KTtyZXR1cm4gQ24hPT1QdCYmKG9uPW9uLnNsaWNlKDAsQ24pKSxvbn0oTWUsRGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhNZSkpcmV0dXJuIGZ1bmN0aW9u'@;
put 'KE10KXtpZihUZShNdCxVaW50OEFycmF5KSl7Y29uc3QgSHQ9bmV3IFVpbnQ4QXJyYXkoTXQpO3JldHVybiBxKEh0LmJ1ZmZlcixIdC5ieXRlT2Zmc2V0LEh0LmJ5dGVMZW5ndGgpfXJldHVybiBVKE10KX0oTWUpO2lmKG51bGw9PU1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBh'@;
put 'cmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIE1lKTtpZihUZShNZSxBcnJheUJ1ZmZlcil8fE1lJiZUZShNZS5idWZmZXIsQXJyYXlCdWZmZXIp'@;
put 'fHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoVGUoTWUsU2hhcmVkQXJyYXlCdWZmZXIpfHxNZSYmVGUoTWUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHEoTWUsRGUsemUpO2lmKCJudW1iZXIiPT10eXBlb2YgTWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2'@;
put 'YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7Y29uc3Qgb3Q9TWUudmFsdWVPZiYmTWUudmFsdWVPZigpO2lmKG51bGwhPW90JiZvdCE9PU1lKXJldHVybiBWLmZyb20ob3QsRGUsemUpO2NvbnN0IHV0PWZ1bmN0aW9uKE10'@;
put 'KXtpZihWLmlzQnVmZmVyKE10KSl7Y29uc3QgSHQ9MHxlZShNdC5sZW5ndGgpLFB0PWooSHQpO3JldHVybiAwPT09UHQubGVuZ3RofHxNdC5jb3B5KFB0LDAsMCxIdCksUHR9cmV0dXJuIHZvaWQgMCE9PU10Lmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIE10Lmxlbmd0aHx8cWUoTXQubGVuZ3Ro'@;
put 'KT9qKDApOlUoTXQpOiJCdWZmZXIiPT09TXQudHlwZSYmQXJyYXkuaXNBcnJheShNdC5kYXRhKT9VKE10LmRhdGEpOnZvaWQgMH0oTWUpO2lmKHV0KXJldHVybiB1dDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgTWVb'@;
put 'U3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gVi5mcm9tKE1lW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLERlLHplKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFy'@;
put 'cmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBNZSl9ZnVuY3Rpb24gWShNZSl7aWYoIm51bWJlciIhPXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKE1lPDApdGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytNZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gWChNZSl7cmV0dXJuIFkoTWUpLGooTWU8MD8wOjB8ZWUoTWUpKX1mdW5jdGlvbiBVKE1lKXtjb25zdCBEZT1NZS5sZW5ndGg8MD8wOjB8ZWUoTWUubGVu'@;
put 'Z3RoKSx6ZT1qKERlKTtmb3IobGV0IG90PTA7b3Q8RGU7b3QrPTEpemVbb3RdPTI1NSZNZVtvdF07cmV0dXJuIHplfWZ1bmN0aW9uIHEoTWUsRGUsemUpe2lmKERlPDB8fE1lLmJ5dGVMZW5ndGg8RGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVy'@;
put 'IGJvdW5kcycpO2lmKE1lLmJ5dGVMZW5ndGg8RGUrKHplfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7bGV0IG90O3JldHVybiBvdD12b2lkIDA9PT1EZSYmdm9pZCAwPT09emU/bmV3IFVpbnQ4QXJyYXkoTWUpOnZvaWQg'@;
put 'MD09PXplP25ldyBVaW50OEFycmF5KE1lLERlKTpuZXcgVWludDhBcnJheShNZSxEZSx6ZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG90LFYucHJvdG90eXBlKSxvdH1mdW5jdGlvbiBlZShNZSl7aWYoTWU+PUUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVm'@;
put 'ZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK0UudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxNZX1mdW5jdGlvbiB0ZShNZSxEZSl7aWYoVi5pc0J1ZmZlcihNZSkpcmV0dXJuIE1lLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoTWUpfHxUZShNZSxBcnJheUJ1'@;
put 'ZmZlcikpcmV0dXJuIE1lLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBl'@;
put 'b2YgTWUpO2NvbnN0IHplPU1lLmxlbmd0aCxvdD1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFvdCYmMD09PXplKXJldHVybiAwO2xldCB1dD0hMTtmb3IoOzspc3dpdGNoKERlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB6'@;
put 'ZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBQZShNZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMip6ZTtjYXNlImhleCI6cmV0dXJuIHplPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIGJlKE1lKS5sZW5n'@;
put 'dGg7ZGVmYXVsdDppZih1dClyZXR1cm4gb3Q/LTE6UGUoTWUpLmxlbmd0aDtEZT0oIiIrRGUpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIG9lKE1lLERlLHplKXtsZXQgb3Q9ITE7aWYoKHZvaWQgMD09PURlfHxEZTwwKSYmKERlPTApLERlPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09'@;
put 'PXplfHx6ZT50aGlzLmxlbmd0aCkmJih6ZT10aGlzLmxlbmd0aCksemU8PTApfHwoemU+Pj49MCk8PShEZT4+Pj0wKSlyZXR1cm4iIjtmb3IoTWV8fChNZT0idXRmOCIpOzspc3dpdGNoKE1lKXtjYXNlImhleCI6cmV0dXJuIHAodGhpcyxEZSx6ZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04Ijpy'@;
put 'ZXR1cm4gZyh0aGlzLERlLHplKTtjYXNlImFzY2lpIjpyZXR1cm4gUyh0aGlzLERlLHplKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB2KHRoaXMsRGUsemUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTih0aGlzLERlLHplKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRm'@;
put 'MTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHcodGhpcyxEZSx6ZSk7ZGVmYXVsdDppZihvdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK01lKTtNZT0oTWUrIiIpLnRvTG93ZXJDYXNlKCksb3Q9ITB9fWZ1bmN0aW9uIHNlKE1lLERlLHplKXtjb25zdCBvdD1N'@;
put 'ZVtEZV07TWVbRGVdPU1lW3plXSxNZVt6ZV09b3R9ZnVuY3Rpb24gaGUoTWUsRGUsemUsb3QsdXQpe2lmKDA9PT1NZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiB6ZT8ob3Q9emUsemU9MCk6emU+MjE0NzQ4MzY0Nz96ZT0yMTQ3NDgzNjQ3OnplPC0yMTQ3NDgzNjQ4JiYo'@;
put 'emU9LTIxNDc0ODM2NDgpLHFlKHplPSt6ZSkmJih6ZT11dD8wOk1lLmxlbmd0aC0xKSx6ZTwwJiYoemU9TWUubGVuZ3RoK3plKSx6ZT49TWUubGVuZ3RoKXtpZih1dClyZXR1cm4tMTt6ZT1NZS5sZW5ndGgtMX1lbHNlIGlmKHplPDApe2lmKCF1dClyZXR1cm4tMTt6ZT0wfWlmKCJzdHJpbmci'@;
put 'PT10eXBlb2YgRGUmJihEZT1WLmZyb20oRGUsb3QpKSxWLmlzQnVmZmVyKERlKSlyZXR1cm4gMD09PURlLmxlbmd0aD8tMTp1ZShNZSxEZSx6ZSxvdCx1dCk7aWYoIm51bWJlciI9PXR5cGVvZiBEZSlyZXR1cm4gRGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5'@;
put 'cGUuaW5kZXhPZj91dD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoTWUsRGUsemUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoTWUsRGUsemUpOnVlKE1lLFtEZV0semUsb3QsdXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmlu'@;
put 'ZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHVlKE1lLERlLHplLG90LHV0KXtsZXQgTXQsSHQ9MSxQdD1NZS5sZW5ndGgsb249RGUubGVuZ3RoO2lmKHZvaWQgMCE9PW90JiYoInVjczIiPT09KG90PVN0cmluZyhvdCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1vdHx8InV0ZjE2'@;
put 'bGUiPT09b3R8fCJ1dGYtMTZsZSI9PT1vdCkpe2lmKE1lLmxlbmd0aDwyfHxEZS5sZW5ndGg8MilyZXR1cm4tMTtIdD0yLFB0Lz0yLG9uLz0yLHplLz0yfWZ1bmN0aW9uIENuKFV0LGJuKXtyZXR1cm4gMT09PUh0P1V0W2JuXTpVdC5yZWFkVUludDE2QkUoYm4qSHQpfWlmKHV0KXtsZXQgVXQ9'@;
put 'LTE7Zm9yKE10PXplO010PFB0O010KyspaWYoQ24oTWUsTXQpPT09Q24oRGUsLTE9PT1VdD8wOk10LVV0KSl7aWYoLTE9PT1VdCYmKFV0PU10KSxNdC1VdCsxPT09b24pcmV0dXJuIFV0Kkh0fWVsc2UtMSE9PVV0JiYoTXQtPU10LVV0KSxVdD0tMX1lbHNlIGZvcih6ZStvbj5QdCYmKHplPVB0'@;
put 'LW9uKSxNdD16ZTtNdD49MDtNdC0tKXtsZXQgVXQ9ITA7Zm9yKGxldCBibj0wO2JuPG9uO2JuKyspaWYoQ24oTWUsTXQrYm4pIT09Q24oRGUsYm4pKXtVdD0hMTticmVha31pZihVdClyZXR1cm4gTXR9cmV0dXJuLTF9ZnVuY3Rpb24gY2UoTWUsRGUsemUsb3Qpe3plPU51bWJlcih6ZSl8fDA7'@;
put 'Y29uc3QgdXQ9TWUubGVuZ3RoLXplO290PyhvdD1OdW1iZXIob3QpKT51dCYmKG90PXV0KTpvdD11dDtjb25zdCBNdD1EZS5sZW5ndGg7bGV0IEh0O2ZvcihvdD5NdC8yJiYob3Q9TXQvMiksSHQ9MDtIdDxvdDsrK0h0KXtjb25zdCBQdD1wYXJzZUludChEZS5zdWJzdHIoMipIdCwyKSwxNik7'@;
put 'aWYocWUoUHQpKXJldHVybiBIdDtNZVt6ZStIdF09UHR9cmV0dXJuIEh0fWZ1bmN0aW9uIEcoTWUsRGUsemUsb3Qpe3JldHVybiBBZShQZShEZSxNZS5sZW5ndGgtemUpLE1lLHplLG90KX1mdW5jdGlvbiBiKE1lLERlLHplLG90KXtyZXR1cm4gQWUoZnVuY3Rpb24odXQpe2NvbnN0IE10PVtd'@;
put 'O2ZvcihsZXQgSHQ9MDtIdDx1dC5sZW5ndGg7KytIdClNdC5wdXNoKDI1NSZ1dC5jaGFyQ29kZUF0KEh0KSk7cmV0dXJuIE10fShEZSksTWUsemUsb3QpfWZ1bmN0aW9uIEQoTWUsRGUsemUsb3Qpe3JldHVybiBBZShiZShEZSksTWUsemUsb3QpfWZ1bmN0aW9uIEgoTWUsRGUsemUsb3Qpe3Jl'@;
put 'dHVybiBBZShmdW5jdGlvbih1dCxNdCl7bGV0IEh0LFB0LG9uO2NvbnN0IENuPVtdO2ZvcihsZXQgVXQ9MDtVdDx1dC5sZW5ndGgmJiEoKE10LT0yKTwwKTsrK1V0KUh0PXV0LmNoYXJDb2RlQXQoVXQpLFB0PUh0Pj44LG9uPUh0JTI1NixDbi5wdXNoKG9uKSxDbi5wdXNoKFB0KTtyZXR1cm4g'@;
put 'Q259KERlLE1lLmxlbmd0aC16ZSksTWUsemUsb3QpfWZ1bmN0aW9uIE4oTWUsRGUsemUpe3JldHVybiBLLmZyb21CeXRlQXJyYXkoMD09PURlJiZ6ZT09PU1lLmxlbmd0aD9NZTpNZS5zbGljZShEZSx6ZSkpfWZ1bmN0aW9uIGcoTWUsRGUsemUpe3plPU1hdGgubWluKE1lLmxlbmd0aCx6ZSk7'@;
put 'Y29uc3Qgb3Q9W107bGV0IHV0PURlO2Zvcig7dXQ8emU7KXtjb25zdCBNdD1NZVt1dF07bGV0IEh0PW51bGwsUHQ9TXQ+MjM5PzQ6TXQ+MjIzPzM6TXQ+MTkxPzI6MTtpZih1dCtQdDw9emUpe2xldCBvbixDbixVdCxibjtzd2l0Y2goUHQpe2Nhc2UgMTpNdDwxMjgmJihIdD1NdCk7YnJlYWs7'@;
put 'Y2FzZSAyOm9uPU1lW3V0KzFdLDEyOD09KDE5MiZvbikmJihibj0oMzEmTXQpPDw2fDYzJm9uLGJuPjEyNyYmKEh0PWJuKSk7YnJlYWs7Y2FzZSAzOm9uPU1lW3V0KzFdLENuPU1lW3V0KzJdLDEyOD09KDE5MiZvbikmJjEyOD09KDE5MiZDbikmJihibj0oMTUmTXQpPDwxMnwoNjMmb24pPDw2'@;
put 'fDYzJkNuLGJuPjIwNDcmJihibjw1NTI5Nnx8Ym4+NTczNDMpJiYoSHQ9Ym4pKTticmVhaztjYXNlIDQ6b249TWVbdXQrMV0sQ249TWVbdXQrMl0sVXQ9TWVbdXQrM10sMTI4PT0oMTkyJm9uKSYmMTI4PT0oMTkyJkNuKSYmMTI4PT0oMTkyJlV0KSYmKGJuPSgxNSZNdCk8PDE4fCg2MyZvbik8'@;
put 'PDEyfCg2MyZDbik8PDZ8NjMmVXQsYm4+NjU1MzUmJmJuPDExMTQxMTImJihIdD1ibikpfX1udWxsPT09SHQ/KEh0PTY1NTMzLFB0PTEpOkh0PjY1NTM1JiYoSHQtPTY1NTM2LG90LnB1c2goSHQ+Pj4xMCYxMDIzfDU1Mjk2KSxIdD01NjMyMHwxMDIzJkh0KSxvdC5wdXNoKEh0KSx1dCs9UHR9'@;
put 'cmV0dXJuIGZ1bmN0aW9uKE10KXtjb25zdCBIdD1NdC5sZW5ndGg7aWYoSHQ8PUMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLE10KTtsZXQgUHQ9IiIsb249MDtmb3IoO29uPEh0OylQdCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsTXQuc2xpY2Uo'@;
put 'b24sb24rPUMpKTtyZXR1cm4gUHR9KG90KX1PLmtNYXhMZW5ndGg9RSwoVi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e2NvbnN0IE1lPW5ldyBVaW50OEFycmF5KDEpLERlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'KERlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTWUsRGUpLDQyPT09TWUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKXx8dm9pZCAwPT09enx8ImZ1bmN0aW9uIiE9dHlwZW9mIHouZXJyb3J8fHouZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBh'@;
put 'cnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicGFyZW50Iix7ZW51'@;
put 'bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihWLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoVi5pc0J1ZmZlcih0aGlzKSlyZXR1'@;
put 'cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFYucG9vbFNpemU9ODE5MixWLmZyb209ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBCKE1lLERlLHplKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKFYucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVixV'@;
put 'aW50OEFycmF5KSxWLmFsbG9jPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gdXQ9RGUsTXQ9emUsWShvdD1NZSksb3Q8PTA/aihvdCk6dm9pZCAwIT09dXQ/InN0cmluZyI9PXR5cGVvZiBNdD9qKG90KS5maWxsKHV0LE10KTpqKG90KS5maWxsKHV0KTpqKG90KTt2YXIgb3QsdXQsTXR9LFYu'@;
put 'YWxsb2NVbnNhZmU9ZnVuY3Rpb24oTWUpe3JldHVybiBYKE1lKX0sVi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oTWUpe3JldHVybiBYKE1lKX0sVi5pc0J1ZmZlcj1mdW5jdGlvbihNZSl7cmV0dXJuIG51bGwhPU1lJiYhMD09PU1lLl9pc0J1ZmZlciYmTWUhPT1WLnByb3RvdHlwZX0sVi5j'@;
put 'b21wYXJlPWZ1bmN0aW9uKE1lLERlKXtpZihUZShNZSxVaW50OEFycmF5KSYmKE1lPVYuZnJvbShNZSxNZS5vZmZzZXQsTWUuYnl0ZUxlbmd0aCkpLFRlKERlLFVpbnQ4QXJyYXkpJiYoRGU9Vi5mcm9tKERlLERlLm9mZnNldCxEZS5ieXRlTGVuZ3RoKSksIVYuaXNCdWZmZXIoTWUpfHwhVi5p'@;
put 'c0J1ZmZlcihEZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoTWU9PT1EZSlyZXR1cm4gMDtsZXQgemU9TWUubGVuZ3RoLG90PURlLmxlbmd0aDtmb3IobGV0IHV0'@;
put 'PTAsTXQ9TWF0aC5taW4oemUsb3QpO3V0PE10OysrdXQpaWYoTWVbdXRdIT09RGVbdXRdKXt6ZT1NZVt1dF0sb3Q9RGVbdXRdO2JyZWFrfXJldHVybiB6ZTxvdD8tMTpvdDx6ZT8xOjB9LFYuaXNFbmNvZGluZz1mdW5jdGlvbihNZSl7c3dpdGNoKFN0cmluZyhNZSkudG9Mb3dlckNhc2UoKSl7'@;
put 'Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxW'@;
put 'LmNvbmNhdD1mdW5jdGlvbihNZSxEZSl7aWYoIUFycmF5LmlzQXJyYXkoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09TWUubGVuZ3RoKXJldHVybiBWLmFsbG9jKDApO2xldCB6ZTtpZih2b2lkIDA9'@;
put 'PT1EZSlmb3IoRGU9MCx6ZT0wO3plPE1lLmxlbmd0aDsrK3plKURlKz1NZVt6ZV0ubGVuZ3RoO2NvbnN0IG90PVYuYWxsb2NVbnNhZmUoRGUpO2xldCB1dD0wO2Zvcih6ZT0wO3plPE1lLmxlbmd0aDsrK3plKXtsZXQgTXQ9TWVbemVdO2lmKFRlKE10LFVpbnQ4QXJyYXkpKXV0K010Lmxlbmd0'@;
put 'aD5vdC5sZW5ndGg/KFYuaXNCdWZmZXIoTXQpfHwoTXQ9Vi5mcm9tKE10KSksTXQuY29weShvdCx1dCkpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKG90LE10LHV0KTtlbHNle2lmKCFWLmlzQnVmZmVyKE10KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVz'@;
put 'dCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7TXQuY29weShvdCx1dCl9dXQrPU10Lmxlbmd0aH1yZXR1cm4gb3R9LFYuYnl0ZUxlbmd0aD10ZSxWLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsVi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7aWYoTWUl'@;
put 'MiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTIpc2UodGhpcyxEZSxEZSsxKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7Y29uc3QgTWU9'@;
put 'dGhpcy5sZW5ndGg7aWYoTWUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTQpc2UodGhpcyxEZSxEZSszKSxzZSh0aGlzLERlKzEsRGUrMik7cmV0dXJuIHRoaXN9LFYu'@;
put 'cHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe2NvbnN0IE1lPXRoaXMubGVuZ3RoO2lmKE1lJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKGxldCBEZT0wO0RlPE1lO0RlKz04KXNlKHRoaXMsRGUsRGUr'@;
put 'Nyksc2UodGhpcyxEZSsxLERlKzYpLHNlKHRoaXMsRGUrMixEZSs1KSxzZSh0aGlzLERlKzMsRGUrNCk7cmV0dXJuIHRoaXN9LFYucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPVYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1N'@;
put 'ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9nKHRoaXMsMCxNZSk6b2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxWLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oTWUpe2lmKCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7'@;
put 'cmV0dXJuIHRoaXM9PT1NZXx8MD09PVYuY29tcGFyZSh0aGlzLE1lKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe2xldCBNZT0iIjtjb25zdCBEZT1PLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBNZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsRGUpLnJlcGxhY2UoLyguezJ9KS9n'@;
put 'LCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+RGUmJihNZSs9IiAuLi4gIiksIjxCdWZmZXIgIitNZSsiPiJ9LGsmJihWLnByb3RvdHlwZVtrXT1WLnByb3RvdHlwZS5pbnNwZWN0KSxWLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKE1lLERlLHplLG90LHV0KXtpZihUZShNZSxVaW50OEFy'@;
put 'cmF5KSYmKE1lPVYuZnJvbShNZSxNZS5vZmZzZXQsTWUuYnl0ZUxlbmd0aCkpLCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5'@;
put 'cGVvZiBNZSk7aWYodm9pZCAwPT09RGUmJihEZT0wKSx2b2lkIDA9PT16ZSYmKHplPU1lP01lLmxlbmd0aDowKSx2b2lkIDA9PT1vdCYmKG90PTApLHZvaWQgMD09PXV0JiYodXQ9dGhpcy5sZW5ndGgpLERlPDB8fHplPk1lLmxlbmd0aHx8b3Q8MHx8dXQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3'@;
put 'IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG90Pj11dCYmRGU+PXplKXJldHVybiAwO2lmKG90Pj11dClyZXR1cm4tMTtpZihEZT49emUpcmV0dXJuIDE7aWYodGhpcz09PU1lKXJldHVybiAwO2xldCBNdD0odXQ+Pj49MCktKG90Pj4+PTApLEh0PSh6ZT4+Pj0wKS0oRGU+'@;
put 'Pj49MCk7Y29uc3QgUHQ9TWF0aC5taW4oTXQsSHQpLG9uPXRoaXMuc2xpY2Uob3QsdXQpLENuPU1lLnNsaWNlKERlLHplKTtmb3IobGV0IFV0PTA7VXQ8UHQ7KytVdClpZihvbltVdF0hPT1DbltVdF0pe010PW9uW1V0XSxIdD1DbltVdF07YnJlYWt9cmV0dXJuIE10PEh0Py0xOkh0PE10PzE6'@;
put 'MH0sVi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKE1lLERlLHplKX0sVi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIGhlKHRoaXMsTWUsRGUsemUsITApfSxWLnByb3RvdHlwZS5sYXN0SW5k'@;
put 'ZXhPZj1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIGhlKHRoaXMsTWUsRGUsemUsITEpfSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7aWYodm9pZCAwPT09RGUpb3Q9InV0ZjgiLHplPXRoaXMubGVuZ3RoLERlPTA7ZWxzZSBpZih2b2lkIDA9PT16ZSYmInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBEZSlvdD1EZSx6ZT10aGlzLmxlbmd0aCxEZT0wO2Vsc2V7aWYoIWlzRmluaXRlKERlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7RGU+Pj49MCxpc0Zp'@;
put 'bml0ZSh6ZSk/KHplPj4+PTAsdm9pZCAwPT09b3QmJihvdD0idXRmOCIpKToob3Q9emUsemU9dm9pZCAwKX1jb25zdCB1dD10aGlzLmxlbmd0aC1EZTtpZigodm9pZCAwPT09emV8fHplPnV0KSYmKHplPXV0KSxNZS5sZW5ndGg+MCYmKHplPDB8fERlPDApfHxEZT50aGlzLmxlbmd0aCl0aHJv'@;
put 'dyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtvdHx8KG90PSJ1dGY4Iik7bGV0IE10PSExO2Zvcig7Oylzd2l0Y2gob3Qpe2Nhc2UiaGV4IjpyZXR1cm4gY2UodGhpcyxNZSxEZSx6ZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1'@;
put 'cm4gRyh0aGlzLE1lLERlLHplKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBiKHRoaXMsTWUsRGUsemUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRCh0aGlzLE1lLERlLHplKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYt'@;
put 'MTZsZSI6cmV0dXJuIEgodGhpcyxNZSxEZSx6ZSk7ZGVmYXVsdDppZihNdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK290KTtvdD0oIiIrb3QpLnRvTG93ZXJDYXNlKCksTXQ9ITB9fSxWLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToi'@;
put 'QnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0IEM9NDA5NjtmdW5jdGlvbiBTKE1lLERlLHplKXtsZXQgb3Q9IiI7emU9TWF0aC5taW4oTWUubGVuZ3RoLHplKTtmb3IobGV0IHV0PURlO3V0PHplOysrdXQpb3QrPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoMTI3Jk1lW3V0XSk7cmV0dXJuIG90fWZ1bmN0aW9uIHYoTWUsRGUsemUpe2xldCBvdD0iIjt6ZT1NYXRoLm1pbihNZS5sZW5ndGgsemUpO2ZvcihsZXQgdXQ9RGU7dXQ8emU7Kyt1dClvdCs9U3RyaW5nLmZyb21DaGFyQ29kZShNZVt1dF0pO3JldHVybiBvdH1mdW5j'@;
put 'dGlvbiBwKE1lLERlLHplKXtjb25zdCBvdD1NZS5sZW5ndGg7KCFEZXx8RGU8MCkmJihEZT0wKSwoIXplfHx6ZTwwfHx6ZT5vdCkmJih6ZT1vdCk7bGV0IHV0PSIiO2ZvcihsZXQgTXQ9RGU7TXQ8emU7KytNdCl1dCs9WGVbTWVbTXRdXTtyZXR1cm4gdXR9ZnVuY3Rpb24gdyhNZSxEZSx6ZSl7'@;
put 'Y29uc3Qgb3Q9TWUuc2xpY2UoRGUsemUpO2xldCB1dD0iIjtmb3IobGV0IE10PTA7TXQ8b3QubGVuZ3RoLTE7TXQrPTIpdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUob3RbTXRdKzI1NipvdFtNdCsxXSk7cmV0dXJuIHV0fWZ1bmN0aW9uIEooTWUsRGUsemUpe2lmKE1lJTEhPTB8fE1lPDApdGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKE1lK0RlPnplKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gbmUoTWUsRGUsemUsb3QsdXQsTXQpe2lmKCFWLmlzQnVmZmVyKE1lKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoRGU+dXR8fERlPE10KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZih6ZStvdD5NZS5sZW5ndGgpdGhyb3cg'@;
put 'bmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGRlKE1lLERlLHplLG90LHV0KXtLZShEZSxvdCx1dCxNZSx6ZSw3KTtsZXQgTXQ9TnVtYmVyKERlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7TWVbemUrK109TXQsTXQ+Pj04LE1lW3plKytdPU10LE10Pj49OCxNZVt6'@;
put 'ZSsrXT1NdCxNdD4+PTgsTWVbemUrK109TXQ7bGV0IEh0PU51bWJlcihEZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBNZVt6ZSsrXT1IdCxIdD4+PTgsTWVbemUrK109SHQsSHQ+Pj04LE1lW3plKytdPUh0LEh0Pj49OCxNZVt6ZSsrXT1IdCx6ZX1mdW5jdGlvbiBm'@;
put 'ZShNZSxEZSx6ZSxvdCx1dCl7S2UoRGUsb3QsdXQsTWUsemUsNyk7bGV0IE10PU51bWJlcihEZSZCaWdJbnQoNDI5NDk2NzI5NSkpO01lW3plKzddPU10LE10Pj49OCxNZVt6ZSs2XT1NdCxNdD4+PTgsTWVbemUrNV09TXQsTXQ+Pj04LE1lW3plKzRdPU10O2xldCBIdD1OdW1iZXIoRGU+PkJp'@;
put 'Z0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gTWVbemUrM109SHQsSHQ+Pj04LE1lW3plKzJdPUh0LEh0Pj49OCxNZVt6ZSsxXT1IdCxIdD4+PTgsTWVbemVdPUh0LHplKzh9ZnVuY3Rpb24geGUoTWUsRGUsemUsb3QsdXQsTXQpe2lmKHplK290Pk1lLmxlbmd0aCl0aHJvdyBu'@;
put 'ZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoemU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSWUoTWUsRGUsemUsb3QsdXQpe3JldHVybiBEZT0rRGUsemU+Pj49MCx1dHx8eGUoTWUsMCx6ZSw0KSxMLndyaXRlKE1l'@;
put 'LERlLHplLG90LDIzLDQpLHplKzR9ZnVuY3Rpb24gRmUoTWUsRGUsemUsb3QsdXQpe3JldHVybiBEZT0rRGUsemU+Pj49MCx1dHx8eGUoTWUsMCx6ZSw4KSxMLndyaXRlKE1lLERlLHplLG90LDUyLDgpLHplKzh9Vi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oTWUsRGUpe2NvbnN0IHplPXRo'@;
put 'aXMubGVuZ3RoOyhNZT1+fk1lKTwwPyhNZSs9emUpPDAmJihNZT0wKTpNZT56ZSYmKE1lPXplKSwoRGU9dm9pZCAwPT09RGU/emU6fn5EZSk8MD8oRGUrPXplKTwwJiYoRGU9MCk6RGU+emUmJihEZT16ZSksRGU8TWUmJihEZT1NZSk7Y29uc3Qgb3Q9dGhpcy5zdWJhcnJheShNZSxEZSk7cmV0'@;
put 'dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihvdCxWLnByb3RvdHlwZSksb3R9LFYucHJvdG90eXBlLnJlYWRVaW50TEU9Vi5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgb3Q9dGhpc1tN'@;
put 'ZV0sdXQ9MSxNdD0wO2Zvcig7KytNdDxEZSYmKHV0Kj0yNTYpOylvdCs9dGhpc1tNZStNdF0qdXQ7cmV0dXJuIG90fSxWLnByb3RvdHlwZS5yZWFkVWludEJFPVYucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlz'@;
put 'Lmxlbmd0aCk7bGV0IG90PXRoaXNbTWUrLS1EZV0sdXQ9MTtmb3IoO0RlPjAmJih1dCo9MjU2KTspb3QrPXRoaXNbTWUrLS1EZV0qdXQ7cmV0dXJuIG90fSxWLnByb3RvdHlwZS5yZWFkVWludDg9Vi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxE'@;
put 'ZXx8SihNZSwxLHRoaXMubGVuZ3RoKSx0aGlzW01lXX0sVi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVYucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMix0aGlzLmxlbmd0aCksdGhpc1tNZV18dGhpc1tNZSsxXTw8OH0sVi5w'@;
put 'cm90b3R5cGUucmVhZFVpbnQxNkJFPVYucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMix0aGlzLmxlbmd0aCksdGhpc1tNZV08PDh8dGhpc1tNZSsxXX0sVi5wcm90b3R5cGUucmVhZFVpbnQzMkxFPVYucHJvdG90eXBlLnJl'@;
put 'YWRVSW50MzJMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksKHRoaXNbTWVdfHRoaXNbTWUrMV08PDh8dGhpc1tNZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbTWUrM119LFYucHJvdG90eXBlLnJlYWRVaW50MzJCRT1WLnByb3RvdHlwZS5y'@;
put 'ZWFkVUludDMyQkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbTWVdKyh0aGlzW01lKzFdPDwxNnx0aGlzW01lKzJdPDw4fHRoaXNbTWUrM10pfSxWLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEU9VWUoZnVuY3Rp'@;
put 'b24oTWUpe1llKE1lPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRoaXNbTWVdLHplPXRoaXNbTWUrN107dm9pZCAwIT09RGUmJnZvaWQgMCE9PXplfHxRZShNZSx0aGlzLmxlbmd0aC04KTtjb25zdCBvdD1EZSsyNTYqdGhpc1srK01lXSs2NTUzNip0aGlzWysrTWVdK3RoaXNbKytNZV0qMioq'@;
put 'MjQsdXQ9dGhpc1srK01lXSsyNTYqdGhpc1srK01lXSs2NTUzNip0aGlzWysrTWVdK3plKjIqKjI0O3JldHVybiBCaWdJbnQob3QpKyhCaWdJbnQodXQpPDxCaWdJbnQoMzIpKX0pLFYucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1VZShmdW5jdGlvbihNZSl7WWUoTWU+Pj49MCwib2Zmc2V0'@;
put 'Iik7Y29uc3QgRGU9dGhpc1tNZV0semU9dGhpc1tNZSs3XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fFFlKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IG90PURlKjIqKjI0KzY1NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0rdGhpc1srK01lXSx1dD10aGlzWysrTWVdKjIqKjI0KzY1'@;
put 'NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0remU7cmV0dXJuKEJpZ0ludChvdCk8PEJpZ0ludCgzMikpK0JpZ0ludCh1dCl9KSxWLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0IG90'@;
put 'PXRoaXNbTWVdLHV0PTEsTXQ9MDtmb3IoOysrTXQ8RGUmJih1dCo9MjU2KTspb3QrPXRoaXNbTWUrTXRdKnV0O3JldHVybiB1dCo9MTI4LG90Pj11dCYmKG90LT1NYXRoLnBvdygyLDgqRGUpKSxvdH0sVi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERl'@;
put 'Pj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgpO2xldCBvdD1EZSx1dD0xLE10PXRoaXNbTWUrLS1vdF07Zm9yKDtvdD4wJiYodXQqPTI1Nik7KU10Kz10aGlzW01lKy0tb3RdKnV0O3JldHVybiB1dCo9MTI4LE10Pj11dCYmKE10LT1NYXRoLnBvdygyLDgqRGUpKSxNdH0sVi5wcm90b3R5'@;
put 'cGUucmVhZEludDg9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW01lXT8tMSooMjU1LXRoaXNbTWVdKzEpOnRoaXNbTWVdfSxWLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihNZSxEZSl7TWU+Pj49MCxEZXx8SihN'@;
put 'ZSwyLHRoaXMubGVuZ3RoKTtjb25zdCB6ZT10aGlzW01lXXx0aGlzW01lKzFdPDw4O3JldHVybiAzMjc2OCZ6ZT80Mjk0OTAxNzYwfHplOnplfSxWLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihNZSxEZSl7TWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKTtjb25zdCB6ZT10'@;
put 'aGlzW01lKzFdfHRoaXNbTWVdPDw4O3JldHVybiAzMjc2OCZ6ZT80Mjk0OTAxNzYwfHplOnplfSxWLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksdGhpc1tNZV18dGhpc1tNZSsxXTw8OHx0aGlzW01l'@;
put 'KzJdPDwxNnx0aGlzW01lKzNdPDwyNH0sVi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLHRoaXNbTWVdPDwyNHx0aGlzW01lKzFdPDwxNnx0aGlzW01lKzJdPDw4fHRoaXNbTWUrM119LFYucHJvdG90'@;
put 'eXBlLnJlYWRCaWdJbnQ2NExFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3JldHVybiB2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fFFlKE1lLHRoaXMubGVuZ3RoLTgpLChCaWdJbnQodGhpc1tNZSs0XSsyNTYq'@;
put 'dGhpc1tNZSs1XSs2NTUzNip0aGlzW01lKzZdKyh6ZTw8MjQpKTw8QmlnSW50KDMyKSkrQmlnSW50KERlKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0rMTY3NzcyMTYqdGhpc1srK01lXSl9KSxWLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRT1VZShmdW5jdGlvbihNZSl7WWUoTWU+'@;
put 'Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tNZV0semU9dGhpc1tNZSs3XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fFFlKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IG90PShEZTw8MjQpKzY1NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0rdGhpc1srK01lXTtyZXR1cm4oQmln'@;
put 'SW50KG90KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKytNZV0rNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt6ZSl9KSxWLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCks'@;
put 'TC5yZWFkKHRoaXMsTWUsITAsMjMsNCl9LFYucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSxMLnJlYWQodGhpcyxNZSwhMSwyMyw0KX0sVi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKE1l'@;
put 'LERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw4LHRoaXMubGVuZ3RoKSxMLnJlYWQodGhpcyxNZSwhMCw1Miw4KX0sVi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw4LHRoaXMubGVuZ3RoKSxMLnJlYWQodGhpcyxNZSwh'@;
put 'MSw1Miw4KX0sVi5wcm90b3R5cGUud3JpdGVVaW50TEU9Vi5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe01lPStNZSxEZT4+Pj0wLHplPj4+PTAsIW90JiZuZSh0aGlzLE1lLERlLHplLE1hdGgucG93KDIsOCp6ZSktMSwwKTtsZXQgdXQ9MSxNdD0wO2Zvcih0'@;
put 'aGlzW0RlXT0yNTUmTWU7KytNdDx6ZSYmKHV0Kj0yNTYpOyl0aGlzW0RlK010XT1NZS91dCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlwZS53cml0ZVVpbnRCRT1WLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7TWU9K01lLERlPj4+PTAsemU+Pj49MCwh'@;
put 'b3QmJm5lKHRoaXMsTWUsRGUsemUsTWF0aC5wb3coMiw4KnplKS0xLDApO2xldCB1dD16ZS0xLE10PTE7Zm9yKHRoaXNbRGUrdXRdPTI1NSZNZTstLXV0Pj0wJiYoTXQqPTI1Nik7KXRoaXNbRGUrdXRdPU1lL010JjI1NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlVWludDg9Vi5w'@;
put 'cm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDEsMjU1LDApLHRoaXNbRGVdPTI1NSZNZSxEZSsxfSxWLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPVYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVu'@;
put 'Y3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDY1NTM1LDApLHRoaXNbRGVdPTI1NSZNZSx0aGlzW0RlKzFdPU1lPj4+OCxEZSsyfSxWLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPVYucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rp'@;
put 'b24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDY1NTM1LDApLHRoaXNbRGVdPU1lPj4+OCx0aGlzW0RlKzFdPTI1NSZNZSxEZSsyfSxWLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPVYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24o'@;
put 'TWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tEZSszXT1NZT4+PjI0LHRoaXNbRGUrMl09TWU+Pj4xNix0aGlzW0RlKzFdPU1lPj4+OCx0aGlzW0RlXT0yNTUmTWUsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVVaW50'@;
put 'MzJCRT1WLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbRGVdPU1lPj4+MjQsdGhpc1tEZSsxXT1NZT4+PjE2LHRoaXNbRGUrMl09TWU+Pj44LHRoaXNb'@;
put 'RGUrM109MjU1Jk1lLERlKzR9LFYucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7cmV0dXJuIGRlKHRoaXMsTWUsRGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksVi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1VZShm'@;
put 'dW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZmUodGhpcyxNZSxEZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKE1lLERlLHplLG90KXtpZihNZT0rTWUsRGU+Pj49MCwhb3Qpe2NvbnN0IFB0PU1hdGgucG93'@;
put 'KDIsOCp6ZS0xKTtuZSh0aGlzLE1lLERlLHplLFB0LTEsLVB0KX1sZXQgdXQ9MCxNdD0xLEh0PTA7Zm9yKHRoaXNbRGVdPTI1NSZNZTsrK3V0PHplJiYoTXQqPTI1Nik7KU1lPDAmJjA9PT1IdCYmMCE9PXRoaXNbRGUrdXQtMV0mJihIdD0xKSx0aGlzW0RlK3V0XT0oTWUvTXQ+PjApLUh0JjI1'@;
put 'NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe2lmKE1lPStNZSxEZT4+Pj0wLCFvdCl7Y29uc3QgUHQ9TWF0aC5wb3coMiw4KnplLTEpO25lKHRoaXMsTWUsRGUsemUsUHQtMSwtUHQpfWxldCB1dD16ZS0xLE10PTEsSHQ9MDtmb3Io'@;
put 'dGhpc1tEZSt1dF09MjU1Jk1lOy0tdXQ+PTAmJihNdCo9MjU2KTspTWU8MCYmMD09PUh0JiYwIT09dGhpc1tEZSt1dCsxXSYmKEh0PTEpLHRoaXNbRGUrdXRdPShNZS9NdD4+MCktSHQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKE1lLERlLHplKXty'@;
put 'ZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMSwxMjcsLTEyOCksTWU8MCYmKE1lPTI1NStNZSsxKSx0aGlzW0RlXT0yNTUmTWUsRGUrMX0sVi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5l'@;
put 'KHRoaXMsTWUsRGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbRGVdPTI1NSZNZSx0aGlzW0RlKzFdPU1lPj4+OCxEZSsyfSxWLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDMyNzY3LC0zMjc2'@;
put 'OCksdGhpc1tEZV09TWU+Pj44LHRoaXNbRGUrMV09MjU1Jk1lLERlKzJ9LFYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tEZV09MjU1'@;
put 'Jk1lLHRoaXNbRGUrMV09TWU+Pj44LHRoaXNbRGUrMl09TWU+Pj4xNix0aGlzW0RlKzNdPU1lPj4+MjQsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCwyMTQ3NDgzNjQ3LC0y'@;
put 'MTQ3NDgzNjQ4KSxNZTwwJiYoTWU9NDI5NDk2NzI5NStNZSsxKSx0aGlzW0RlXT1NZT4+PjI0LHRoaXNbRGUrMV09TWU+Pj4xNix0aGlzW0RlKzJdPU1lPj4+OCx0aGlzW0RlKzNdPTI1NSZNZSxEZSs0fSxWLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7'@;
put 'cmV0dXJuIGRlKHRoaXMsTWUsRGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7cmV0dXJuIGZlKHRoaXMsTWUsRGUsLUJpZ0ludCgiMHg4'@;
put 'MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBJZSh0aGlzLE1lLERlLCEwLHplKX0sVi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKE1lLERlLHpl'@;
put 'KXtyZXR1cm4gSWUodGhpcyxNZSxEZSwhMSx6ZSl9LFYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBGZSh0aGlzLE1lLERlLCEwLHplKX0sVi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEZlKHRoaXMs'@;
put 'TWUsRGUsITEsemUpfSxWLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKE1lLERlLHplLG90KXtpZighVi5pc0J1ZmZlcihNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoemV8fCh6ZT0wKSxvdHx8MD09PW90fHwob3Q9dGhpcy5sZW5ndGgp'@;
put 'LERlPj1NZS5sZW5ndGgmJihEZT1NZS5sZW5ndGgpLERlfHwoRGU9MCksb3Q+MCYmb3Q8emUmJihvdD16ZSksb3Q9PT16ZXx8MD09PU1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKERlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3Vu'@;
put 'ZHMiKTtpZih6ZTwwfHx6ZT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG90PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7b3Q+dGhpcy5sZW5ndGgmJihvdD10aGlzLmxlbmd0aCksTWUu'@;
put 'bGVuZ3RoLURlPG90LXplJiYob3Q9TWUubGVuZ3RoLURlK3plKTtjb25zdCB1dD1vdC16ZTtyZXR1cm4gdGhpcz09PU1lJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oRGUsemUsb3QpOlVpbnQ4QXJyYXkucHJvdG90'@;
put 'eXBlLnNldC5jYWxsKE1lLHRoaXMuc3ViYXJyYXkoemUsb3QpLERlKSx1dH0sVi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZT8ob3Q9RGUsRGU9MCx6ZT10aGlzLmxlbmd0aCk6InN0cmlu'@;
put 'ZyI9PXR5cGVvZiB6ZSYmKG90PXplLHplPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1vdCYmInN0cmluZyIhPXR5cGVvZiBvdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBvdCYmIVYuaXNFbmNvZGluZyhvdCkpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitvdCk7aWYoMT09PU1lLmxlbmd0aCl7Y29uc3QgTXQ9TWUuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09b3QmJk10PDEyOHx8ImxhdGluMSI9PT1vdCkmJihNZT1NdCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIE1lP01lJj0yNTU6'@;
put 'ImJvb2xlYW4iPT10eXBlb2YgTWUmJihNZT1OdW1iZXIoTWUpKTtpZihEZTwwfHx0aGlzLmxlbmd0aDxEZXx8dGhpcy5sZW5ndGg8emUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHplPD1EZSlyZXR1cm4gdGhpcztsZXQgdXQ7aWYoRGU+Pj49MCx6ZT12'@;
put 'b2lkIDA9PT16ZT90aGlzLmxlbmd0aDp6ZT4+PjAsTWV8fChNZT0wKSwibnVtYmVyIj09dHlwZW9mIE1lKWZvcih1dD1EZTt1dDx6ZTsrK3V0KXRoaXNbdXRdPU1lO2Vsc2V7Y29uc3QgTXQ9Vi5pc0J1ZmZlcihNZSk/TWU6Vi5mcm9tKE1lLG90KSxIdD1NdC5sZW5ndGg7aWYoMD09PUh0KXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytNZSsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKHV0PTA7dXQ8emUtRGU7Kyt1dCl0aGlzW3V0K0RlXT1NdFt1dCVIdF19cmV0dXJuIHRoaXN9O2NvbnN0IE9lPXt9O2Z1bmN0aW9uIGplKE1lLERlLHplKXtP'@;
put 'ZVtNZV09Y2xhc3MgZXh0ZW5kcyB6ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm1lc3NhZ2UiLHt2YWx1ZTpEZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFt'@;
put 'ZX0gWyR7TWV9XWAsZGVsZXRlIHRoaXMubmFtZX1nZXQgY29kZSgpe3JldHVybiBNZX1zZXQgY29kZShvdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNvZGUiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpvdCx3cml0YWJsZTohMH0pfXRvU3RyaW5nKCl7cmV0'@;
put 'dXJuYCR7dGhpcy5uYW1lfSBbJHtNZX1dOiAke3RoaXMubWVzc2FnZX1gfX19ZnVuY3Rpb24gV2UoTWUpe2xldCBEZT0iIix6ZT1NZS5sZW5ndGg7Y29uc3Qgb3Q9Ii0iPT09TWVbMF0/MTowO2Zvcig7emU+PW90KzQ7emUtPTMpRGU9YF8ke01lLnNsaWNlKHplLTMsemUpfSR7RGV9YDtyZXR1'@;
put 'cm5gJHtNZS5zbGljZSgwLHplKX0ke0RlfWB9ZnVuY3Rpb24gS2UoTWUsRGUsemUsb3QsdXQsTXQpe2lmKE1lPnplfHxNZTxEZSl7Y29uc3QgSHQ9ImJpZ2ludCI9PXR5cGVvZiBEZT8ibiI6IiI7bGV0IFB0O3Rocm93IFB0PU10PjM/MD09PURlfHxEZT09PUJpZ0ludCgwKT9gPj0gMCR7SHR9'@;
put 'IGFuZCA8IDIke0h0fSAqKiAkezgqKE10KzEpfSR7SHR9YDpgPj0gLSgyJHtIdH0gKiogJHs4KihNdCsxKS0xfSR7SHR9KSBhbmQgPCAyICoqICR7OCooTXQrMSktMX0ke0h0fWA6YD49ICR7RGV9JHtIdH0gYW5kIDw9ICR7emV9JHtIdH1gLG5ldyBPZS5FUlJfT1VUX09GX1JBTkdFKCJ2YWx1'@;
put 'ZSIsUHQsTWUpfXZhciBIdCxQdCxvbjtIdD1vdCxvbj1NdCxZZShQdD11dCwib2Zmc2V0Iiksdm9pZCAwIT09SHRbUHRdJiZ2b2lkIDAhPT1IdFtQdCtvbl18fFFlKFB0LEh0Lmxlbmd0aC0ob24rMSkpfWZ1bmN0aW9uIFllKE1lLERlKXtpZigibnVtYmVyIiE9dHlwZW9mIE1lKXRocm93IG5l'@;
put 'dyBPZS5FUlJfSU5WQUxJRF9BUkdfVFlQRShEZSwibnVtYmVyIixNZSl9ZnVuY3Rpb24gUWUoTWUsRGUsemUpe3Rocm93IE1hdGguZmxvb3IoTWUpIT09TWU/KFllKE1lLHplKSxuZXcgT2UuRVJSX09VVF9PRl9SQU5HRSh6ZXx8Im9mZnNldCIsImFuIGludGVnZXIiLE1lKSk6RGU8MD9uZXcg'@;
put 'T2UuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyBPZS5FUlJfT1VUX09GX1JBTkdFKHplfHwib2Zmc2V0IixgPj0gJHt6ZT8xOjB9IGFuZCA8PSAke0RlfWAsTWUpfWplKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKE1lKXtyZXR1cm4gTWU/YCR7TWV9IGlzIG91dHNp'@;
put 'ZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSxqZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKE1lLERlKXtyZXR1cm5gVGhlICIke01lfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0'@;
put 'eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBEZX1gfSxUeXBlRXJyb3IpLGplKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbihNZSxEZSx6ZSl7bGV0IG90PWBUaGUgdmFsdWUgb2YgIiR7TWV9IiBpcyBvdXQgb2YgcmFuZ2UuYCx1dD16ZTtyZXR1cm4gTnVtYmVyLmlzSW50'@;
put 'ZWdlcih6ZSkmJk1hdGguYWJzKHplKT40Mjk0OTY3Mjk2P3V0PVdlKFN0cmluZyh6ZSkpOiJiaWdpbnQiPT10eXBlb2YgemUmJih1dD1TdHJpbmcoemUpLCh6ZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fHplPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJih1dD1XZSh1dCkpLHV0Kz0ibiIp'@;
put 'LG90Kz1gIEl0IG11c3QgYmUgJHtEZX0uIFJlY2VpdmVkICR7dXR9YCxvdH0sUmFuZ2VFcnJvcik7Y29uc3QgbHQ9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBQZShNZSxEZSl7bGV0IHplO0RlPURlfHwxLzA7Y29uc3Qgb3Q9TWUubGVuZ3RoO2xldCB1dD1udWxsO2NvbnN0IE10PVtd'@;
put 'O2ZvcihsZXQgSHQ9MDtIdDxvdDsrK0h0KXtpZih6ZT1NZS5jaGFyQ29kZUF0KEh0KSx6ZT41NTI5NSYmemU8NTczNDQpe2lmKCF1dCl7aWYoemU+NTYzMTkpeyhEZS09Myk+LTEmJk10LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKEh0KzE9PT1vdCl7KERlLT0zKT4tMSYmTXQucHVz'@;
put 'aCgyMzksMTkxLDE4OSk7Y29udGludWV9dXQ9emU7Y29udGludWV9aWYoemU8NTYzMjApeyhEZS09Myk+LTEmJk10LnB1c2goMjM5LDE5MSwxODkpLHV0PXplO2NvbnRpbnVlfXplPTY1NTM2Kyh1dC01NTI5Njw8MTB8emUtNTYzMjApfWVsc2UgdXQmJihEZS09Myk+LTEmJk10LnB1c2goMjM5'@;
put 'LDE5MSwxODkpO2lmKHV0PW51bGwsemU8MTI4KXtpZigoRGUtPTEpPDApYnJlYWs7TXQucHVzaCh6ZSl9ZWxzZSBpZih6ZTwyMDQ4KXtpZigoRGUtPTIpPDApYnJlYWs7TXQucHVzaCh6ZT4+NnwxOTIsNjMmemV8MTI4KX1lbHNlIGlmKHplPDY1NTM2KXtpZigoRGUtPTMpPDApYnJlYWs7TXQu'@;
put 'cHVzaCh6ZT4+MTJ8MjI0LHplPj42JjYzfDEyOCw2MyZ6ZXwxMjgpfWVsc2V7aWYoISh6ZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChEZS09NCk8MClicmVhaztNdC5wdXNoKHplPj4xOHwyNDAsemU+PjEyJjYzfDEyOCx6ZT4+NiY2M3wxMjgs'@;
put 'NjMmemV8MTI4KX19cmV0dXJuIE10fWZ1bmN0aW9uIGJlKE1lKXtyZXR1cm4gSy50b0J5dGVBcnJheShmdW5jdGlvbihEZSl7aWYoKERlPShEZT1EZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShsdCwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7RGUubGVuZ3RoJTQhPTA7KURl'@;
put 'Kz0iPSI7cmV0dXJuIERlfShNZSkpfWZ1bmN0aW9uIEFlKE1lLERlLHplLG90KXtsZXQgdXQ7Zm9yKHV0PTA7dXQ8b3QmJiEodXQremU+PURlLmxlbmd0aHx8dXQ+PU1lLmxlbmd0aCk7Kyt1dClEZVt1dCt6ZV09TWVbdXRdO3JldHVybiB1dH1mdW5jdGlvbiBUZShNZSxEZSl7cmV0dXJuIE1l'@;
put 'IGluc3RhbmNlb2YgRGV8fG51bGwhPU1lJiZudWxsIT1NZS5jb25zdHJ1Y3RvciYmbnVsbCE9TWUuY29uc3RydWN0b3IubmFtZSYmTWUuY29uc3RydWN0b3IubmFtZT09PURlLm5hbWV9ZnVuY3Rpb24gcWUoTWUpe3JldHVybiBNZSE9TWV9Y29uc3QgWGU9ZnVuY3Rpb24oKXtjb25zdCBNZT0i'@;
put 'MDEyMzQ1Njc4OWFiY2RlZiIsRGU9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCB6ZT0wO3plPDE2OysremUpe2NvbnN0IG90PTE2KnplO2ZvcihsZXQgdXQ9MDt1dDwxNjsrK3V0KURlW290K3V0XT1NZVt6ZV0rTWVbdXRdfXJldHVybiBEZX0oKTtmdW5jdGlvbiBVZShNZSl7cmV0dXJuIHR5cGVv'@;
put 'ZiBCaWdJbnQ+InUiP2h0Ok1lfWZ1bmN0aW9uIGh0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sMTkyNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjEwKSxLPVIoNTU1OSksTD1LKHooIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTtNLmV4'@;
put 'cG9ydHM9ZnVuY3Rpb24oayxFKXt2YXIgaj16KGssISFFKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaiYmTChrLCIucHJvdG90eXBlLiIpPi0xP0soaik6an19LDU1NTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg2MTIpLEs9UigyMTApLEw9SygiJUZ1bmN0aW9uLnByb3Rv'@;
put 'dHlwZS5hcHBseSUiKSxrPUsoIiVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUiKSxFPUsoIiVSZWZsZWN0LmFwcGx5JSIsITApfHx6LmNhbGwoayxMKSxqPUsoIiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSIsITApLFY9SygiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiLCEwKSxC'@;
put 'PUsoIiVNYXRoLm1heCUiKTtpZihWKXRyeXtWKHt9LCJhIix7dmFsdWU6MX0pfWNhdGNoe1Y9bnVsbH1NLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dmFyIFU9RSh6LGssYXJndW1lbnRzKTtyZXR1cm4gaiYmViYmaihVLCJsZW5ndGgiKS5jb25maWd1cmFibGUmJlYoVSwibGVuZ3RoIix7dmFsdWU6'@;
put 'MStCKDAsWC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSkpfSksVX07dmFyIFk9ZnVuY3Rpb24oKXtyZXR1cm4gRSh6LEwsYXJndW1lbnRzKX07Vj9WKE0uZXhwb3J0cywiYXBwbHkiLHt2YWx1ZTpZfSk6TS5leHBvcnRzLmFwcGx5PVl9LDEwMjc6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSku'@;
put 'QnVmZmVyLEs9UigyODMwKS5UcmFuc2Zvcm0sTD1SKDI1NTMpLlN0cmluZ0RlY29kZXI7ZnVuY3Rpb24gayhFKXtLLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIEUsdGhpcy5oYXNoTW9kZT90aGlzW0VdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10'@;
put 'aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfVIoNTcxNykoayxLKSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRSxqLFYpeyJz'@;
put 'dHJpbmciPT10eXBlb2YgRSYmKEU9ei5mcm9tKEUsaikpO3ZhciBCPXRoaXMuX3VwZGF0ZShFKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihWJiYoQj10aGlzLl90b1N0cmluZyhCLFYpKSxCKX0say5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LGsucHJvdG90eXBl'@;
put 'LmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0say5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1'@;
put 'bnN1cHBvcnRlZCBzdGF0ZSIpfSxrLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LGsucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRSxqLFYpe3ZhciBCO3RyeXt0aGlzLmhh'@;
put 'c2hNb2RlP3RoaXMuX3VwZGF0ZShFKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKEUpKX1jYXRjaChZKXtCPVl9ZmluYWxseXtWKEIpfX0say5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKEUpe3ZhciBqO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKFYpe2o9Vn1FKGopfSxr'@;
put 'LnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbihFKXt2YXIgaj10aGlzLl9fZmluYWwoKXx8ei5hbGxvYygwKTtyZXR1cm4gRSYmKGo9dGhpcy5fdG9TdHJpbmcoaixFLCEwKSksan0say5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKEUsaixWKXtpZih0aGlzLl9kZWNvZGVy'@;
put 'fHwodGhpcy5fZGVjb2Rlcj1uZXcgTChqKSx0aGlzLl9lbmNvZGluZz1qKSx0aGlzLl9lbmNvZGluZyE9PWopdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEI9dGhpcy5fZGVjb2Rlci53cml0ZShFKTtyZXR1cm4gViYmKEIrPXRoaXMuX2RlY29kZXIuZW5k'@;
put 'KCkpLEJ9LE0uZXhwb3J0cz1rfSwxMDQ4Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oUix6KXtmb3IodmFyIEs9W10sTD0wO0w8Ui5sZW5ndGg7TCsrKXt2YXIgaz16KFJbTF0sTCk7TyhrKT9LLnB1c2guYXBwbHkoSyxrKTpLLnB1c2goayl9cmV0dXJuIEt9O3ZhciBPPUFycmF5LmlzQXJyYXl8'@;
put 'fGZ1bmN0aW9uKFIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUil9fSw1MTA4OihNLE8sUik9Pnt2YXIgej1SKDk1MzkpLEs9Uig5MjgyKTtmdW5jdGlvbiBMKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9dmFyIGssRT1BcnJh'@;
put 'eS5wcm90b3R5cGUuc2xpY2Usaj17fTtrPXZvaWQgMCE9PVIuZyYmUi5nLmNvbnNvbGU/Ui5nLmNvbnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgVj1bW2Z1bmN0aW9uKCl7fSwibG9nIl0sW2Z1bmN0aW9uKCl7ay5sb2cu'@;
put 'YXBwbHkoayxhcmd1bWVudHMpfSwiaW5mbyJdLFtmdW5jdGlvbigpe2subG9nLmFwcGx5KGssYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24oKXtrLndhcm4uYXBwbHkoayxhcmd1bWVudHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24ocSl7altxXT1MKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uKHEp'@;
put 'e3ZhciBlZT1qW3FdO2lmKCFlZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHN1Y2ggbGFiZWw6ICIrcSk7ZGVsZXRlIGpbcV07dmFyIHRlPUwoKS1lZTtrLmxvZyhxKyI6ICIrdGUrIm1zIil9LCJ0aW1lRW5kIl0sW2Z1bmN0aW9uKCl7dmFyIHE9bmV3IEVycm9yO3EubmFtZT0iVHJhY2UiLHEubWVz'@;
put 'c2FnZT16LmZvcm1hdC5hcHBseShudWxsLGFyZ3VtZW50cyksay5lcnJvcihxLnN0YWNrKX0sInRyYWNlIl0sW2Z1bmN0aW9uKHEpe2subG9nKHouaW5zcGVjdChxKSsiXG4iKX0sImRpciJdLFtmdW5jdGlvbihxKXtpZighcSl7dmFyIGVlPUUuY2FsbChhcmd1bWVudHMsMSk7Sy5vayghMSx6'@;
put 'LmZvcm1hdC5hcHBseShudWxsLGVlKSl9fSwiYXNzZXJ0Il1dLEI9MDtCPFYubGVuZ3RoO0IrKyl7dmFyIFk9VltCXSxVPVlbMV07a1tVXXx8KGtbVV09WVswXSl9TS5leHBvcnRzPWt9LDYzOTM6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9Uig2OTQ4KSxMPVIoNjQyNik7TS5l'@;
put 'eHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBuZXcgRShWKX07dmFyIGs9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHBy'@;
put 'aW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gRShW'@;
put 'KXt0aGlzLmN1cnZlVHlwZT1rW1ZdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6Vn0pLHRoaXMuY3VydmU9bmV3IEsuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBqKFYsQixZKXtBcnJheS5pc0FycmF5KFYpfHwoVj1WLnRv'@;
put 'QXJyYXkoKSk7dmFyIFg9bmV3IHooVik7aWYoWSYmWC5sZW5ndGg8WSl7dmFyIFU9bmV3IHooWS1YLmxlbmd0aCk7VS5maWxsKDApLFg9ei5jb25jYXQoW1UsWF0pfXJldHVybiBCP1gudG9TdHJpbmcoQik6WH1rLnAyMjQ9ay5zZWNwMjI0cjEsay5wMjU2PWsuc2VjcDI1NnIxPWsucHJpbWUy'@;
put 'NTZ2MSxrLnAxOTI9ay5zZWNwMTkycjE9ay5wcmltZTE5MnYxLGsucDM4ND1rLnNlY3AzODRyMSxrLnA1MjE9ay5zZWNwNTIxcjEsRS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKFYsQil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1'@;
put 'YmxpY0tleShWLEIpfSxFLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gQj1CfHwidXRmOCIsei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSksaih0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoVikuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQ'@;
put 'cml2YXRlKCkpLmdldFgoKSxZLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxFLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVixCKXt2YXIgWT10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PUIsITApO3JldHVybiJoeWJyaWQiPT09QiYmKFlbMF09WVtZLmxl'@;
put 'bmd0aC0xXSUyPzc6NiksaihZLFYpfSxFLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFYpe3JldHVybiBqKHRoaXMua2V5cy5nZXRQcml2YXRlKCksVil9LEUucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihWLEIpe3JldHVybiBCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVy'@;
put 'KFYpfHwoVj1uZXcgeihWLEIpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhWKSx0aGlzfSxFLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFYsQil7Qj1CfHwidXRmOCIsei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSk7dmFyIFk9bmV3IEwoVik7cmV0dXJuIFk9WS50b1N0'@;
put 'cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShZKSx0aGlzfX0sNjQyNjpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEwoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3Io'@;
put 'Q3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4o'@;
put 'ZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlw'@;
put 'ZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQo'@;
put 'Qyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcu'@;
put 'bGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5'@;
put 'cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlw'@;
put 'ZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksTChDPT09KDB8QykmJkM+PTIm'@;
put 'JkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMu'@;
put 'X2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3'@;
put 'MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihMKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlz'@;
put 'Ll9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoTCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVu'@;
put 'Z3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlz'@;
put 'LndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29y'@;
put 'ZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxT'@;
put 'KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+'@;
put 'PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29y'@;
put 'ZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3'@;
put 'MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jk'@;
put 'c1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUp'@;
put 'fXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhp'@;
put 'cy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMu'@;
put 'bGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWdu'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+'@;
put 'In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1'@;
put 'XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEs'@;
put 'NjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5l'@;
put 'Z2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7'@;
put 'ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsSWU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStJZSkv'@;
put 'NjcxMDg4NjR8MCxJZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8SWUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8'@;
put 'fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hb'@;
put 'Ni1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2'@;
put 'KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgSWU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9JZStTOlhbZGUtSWUubGVuZ3RoXStJZStT'@;
put 'fWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUwoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2'@;
put 'YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZMKCEx'@;
put 'LCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0'@;
put 'dXJuIEwodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5i'@;
put 'eXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0wodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEwocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10'@;
put 'aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFu'@;
put 'ZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+'@;
put 'Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+'@;
put 'Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7'@;
put 'aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5h'@;
put 'YnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5'@;
put 'cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5w'@;
put 'cm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5p'@;
put 'b3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5n'@;
put 'dGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMu'@;
put 'bmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFy'@;
put 'IHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw'@;
put 'ZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9y'@;
put 'KHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49'@;
put 'MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4'@;
put 'NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7TCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0'@;
put 'dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9u'@;
put 'b3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09'@;
put 'cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8'@;
put 'Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVe'@;
put 'PTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBl'@;
put 'LmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMu'@;
put 'bmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8'@;
put 'di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09'@;
put 'PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw'@;
put 'ZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLEllPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5'@;
put 'MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUs'@;
put 'emU9TWU+Pj4xMyxvdD0wfEpbN10sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49'@;
put 'SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEx0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxMbj0wfG5lWzZdLHp0PTgxOTEmTG4seW49'@;
put 'TG4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sRm49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2'@;
put 'PU1hdGguaW11bChJZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSWUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0o'@;
put 'cD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgo'@;
put 'dz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChRZSxlbil8MCx3PU1hdGguaW11bChRZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwx'@;
put 'Myl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwo'@;
put 'WWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHc9dytNYXRoLmltdWwoUWUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxY'@;
put 'dCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02'@;
put 'NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRo'@;
put 'LmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsdz13K01hdGguaW11bChRZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11'@;
put 'bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoSWUsTHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxRdCl8MCkrTWF0aC5pbXVsKEZlLEx0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxRdCl8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXww'@;
put 'KStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLHc9dytNYXRoLmltdWwoUWUsbW4pfDAsdj12K01hdGguaW11bChqZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsTHQpfDAsdz13K01hdGguaW11bChXZSxRdCl8MDt2YXIgbm89KGZl'@;
put 'Kyh2PXYrTWF0aC5pbXVsKEllLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGgu'@;
put 'aW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAs'@;
put 'dj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsTHQpfDAscD0ocD1wK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEx0KXwwLHc9dytNYXRoLmltdWwoUWUsUXQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRo'@;
put 'LmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4p'@;
put 'fDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxm'@;
put 'bil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsTHQpfDAscD0ocD1wK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEx0KXwwLHc9dytNYXRoLmltdWwoYmUsUXQpfDAsdj12K01h'@;
put 'dGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsdz13K01hdGguaW11bChRZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYp'@;
put 'fDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAs'@;
put 'dz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkr'@;
put 'TWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmltdWwocWUsTHQpfDAsdz13K01hdGguaW11bChxZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLHc9dytNYXRoLmltdWwoUWUseW4pfDAsdj12K01hdGguaW11'@;
put 'bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsRm4pfDApK01hdGguaW11bChG'@;
put 'ZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsRm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9'@;
put 'ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01h'@;
put 'dGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsTHQpfDAscD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5p'@;
put 'bXVsKGh0LEx0KXwwLHc9dytNYXRoLmltdWwoaHQsUXQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLHc9dytNYXRoLmltdWwoUWUsQm4pfDAsdj12K01hdGguaW11bChqZSwk'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEZuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxGbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKEllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsam4pfDApK01hdGguaW11bChGZSxsbil8'@;
put 'MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRo'@;
put 'LmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11'@;
put 'bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEx0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxMdCl8MCx3PXcrTWF0aC5pbXVsKHplLFF0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0'@;
put 'LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUs'@;
put 'Qm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxGbil8MCkrTWF0aC5pbXVsKFFlLCR0KXwwLHc9dytNYXRoLmltdWwoUWUsRm4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11'@;
put 'bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9'@;
put 'KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwo'@;
put 'dXQsTHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxRdCl8MCkrTWF0aC5pbXVsKE10LEx0KXwwLHc9dytNYXRoLmltdWwoTXQsUXQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZ'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXww'@;
put 'LHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxGbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRo'@;
put 'LmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsTHQpfDAscD0ocD1wK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEx0KXwwLHc9dytNYXRoLmltdWwob24sUXQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24p'@;
put 'fDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEZuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxGbil8MDt2'@;
put 'YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2'@;
put 'Myx2PU1hdGguaW11bChVdCxMdCkscD0ocD1NYXRoLmltdWwoVXQsUXQpKStNYXRoLmltdWwoYm4sTHQpfDAsdz1NYXRoLmltdWwoYm4sUXQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'b24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxz'@;
put 'bil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxGbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsRm4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkx'@;
put 'JihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkr'@;
put 'TWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxGbil8MDt2YXIgeXI9KGZlKyh2PXYr'@;
put 'TWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChV'@;
put 'dCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01h'@;
put 'dGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxGbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGgu'@;
put 'aW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4s'@;
put 'Qm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxGbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sRm4pfDA7dmFyIElvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpu'@;
put 'KXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LEZuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0'@;
put 'aC5pbXVsKGJuLEZuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2'@;
put 'KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8'@;
put 'MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGks'@;
put 'ZGVbMTZdPUlvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxF'@;
put 'LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5u'@;
put 'ZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIEllPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4'@;
put 'KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0llPTY3MTA4ODYzJihLZT1LZStJZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYs'@;
put 'eGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUllLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJy'@;
put 'YXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7'@;
put 'cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2'@;
put 'LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgSWU9ZGUsRmU9ZmUsT2U9MDtP'@;
put 'ZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sUWU9SWUqS2UtRmUqWWU7WWU9SWUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPVFlKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUs'@;
put 'T2UhPT1uZSYmKFFlPWRlKkllLWZlKkZlLEZlPWRlKkZlK2ZlKkllLEllPVFlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2Uu'@;
put 'cHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUx'@;
put 'M2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5'@;
put 'cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtMKDA9PT1wKSxMKDA9PSgtODE5MiZwKSl9LHNl'@;
put 'LnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMu'@;
put 'bWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksSWU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29y'@;
put 'ZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLEllLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVb'@;
put 'T2VdKkllW09lXTtkZVtPZV09bmVbT2VdKkllW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiks'@;
put 'Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0'@;
put 'aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyksTChnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikr'@;
put 'KDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5j'@;
put 'dGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2'@;
put 'YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5j'@;
put 'dGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109'@;
put 'KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jk'@;
put 'c1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtMKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsr'@;
put 'KW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0'@;
put 'aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tu'@;
put 'ZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gTCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnBy'@;
put 'b3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5s'@;
put 'ZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRo'@;
put 'IHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxF'@;
put 'LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdh'@;
put 'dGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihn'@;
put 'KX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0x'@;
put 'OnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7'@;
put 'aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlz'@;
put 'Lm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9'@;
put 'KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2'@;
put 'MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEwoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9'@;
put 'LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0p'@;
put 'O3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxu'@;
put 'c3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgSWU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihJZT1NYXRo'@;
put 'Lm1pbihJZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsSWUseGUpOzAhPT12Lm5lZ2F0aXZlOylJZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09SWUpfXJldHVybiBKJiZKLnN0'@;
put 'cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEwoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9'@;
put 'OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRo'@;
put 'aXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09'@;
put 'QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4o'@;
put 'Zy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3'@;
put 'fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51'@;
put 'c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0woZzw9NjcxMDg4NjMpO2Zvcih2YXIg'@;
put 'Qz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtMKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3Zh'@;
put 'ciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24o'@;
put 'Zyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYm'@;
put 'Uy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsSWU9MTshKEMud29yZHNbMF0mSWUpJiZ4ZTwyNjsrK3hlLEllPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4o'@;
put 'eGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7'@;
put 'RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnth'@;
put 'OncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3'@;
put 'IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEop'@;
put 'LHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIo'@;
put 'dykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5h'@;
put 'YnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9y'@;
put 'KDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRz'@;
put 'W1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhp'@;
put 'c30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5l'@;
put 'Z2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxMKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhp'@;
put 'cy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMu'@;
put 'd29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhp'@;
put 'cy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcp'@;
put 'fSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90'@;
put 'eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxMKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5j'@;
put 'dGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlz'@;
put 'fSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJy'@;
put 'ZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlz'@;
put 'LGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwi'@;
put 'cmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlz'@;
put 'LGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRT'@;
put 'cXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk'@;
put 'LnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkJiYhZy5y'@;
put 'ZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMs'@;
put 'MTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywi'@;
put 'cDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVk'@;
put 'Iil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgTChnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9u'@;
put 'IE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigp'@;
put 'KSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUu'@;
put 'X3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlz'@;
put 'LmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Mu'@;
put 'c3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rp'@;
put 'b24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2Zv'@;
put 'cihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3Rv'@;
put 'dHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2'@;
put 'KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0w'@;
put 'LFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhl'@;
put 'W2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109'@;
put 'QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxD'@;
put 'KXtMKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5w'@;
put 'cmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5w'@;
put 'cm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIo'@;
put 'ZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMu'@;
put 'X2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92'@;
put 'ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcs'@;
put 'QyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lm'@;
put 'KGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoTChDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1pl'@;
put 'cm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtMKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSku'@;
put 'dG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLEllPXRoaXMucG93KGcsdiksRmU9cDswIT09SWUuY21wKHcpOyl7Zm9yKHZhciBPZT1J'@;
put 'ZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtMKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLEllPUllLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnBy'@;
put 'b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkp'@;
put 'cmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcp'@;
put 'O3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHAp'@;
put 'KSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJu'@;
put 'IEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMp'@;
put 'e2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRo'@;
put 'aXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0'@;
put 'dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMu'@;
put 'bSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlz'@;
put 'KX19KE09Ui5ubWQoTSksdGhpcyl9LDM0ODI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9UigyMzE4KSxMPVIoOTc4NSksaz1SKDkwNzIpLEU9UigxMDI3KTtmdW5jdGlvbiBqKFYpe0UuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPVZ9eihqLEUpLGoucHJv'@;
put 'dG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5faGFzaC51cGRhdGUoVil9LGoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oVil7cmV0dXJuIm1kNSI9PT0oVj1WLnRvTG93ZXJDYXNlKCkpP25l'@;
put 'dyBLOiJybWQxNjAiPT09Vnx8InJpcGVtZDE2MCI9PT1WP25ldyBMOm5ldyBqKGsoVikpfX0sODAyODooTSxPLFIpPT57dmFyIHo9UigyMzE4KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyl7cmV0dXJuKG5ldyB6KS51cGRhdGUoSykuZGlnZXN0KCl9fSw4MzU1OihNLE8sUik9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIHo9Uig1NzE3KSxLPVIoMTAzMSksTD1SKDEwMjcpLGs9Uig5NTA5KS5CdWZmZXIsRT1SKDgwMjgpLGo9Uig5Nzg1KSxWPVIoOTA3MiksQj1rLmFsbG9jKDEyOCk7ZnVuY3Rpb24gWShYLFUpe0wuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIFUmJihVPWsuZnJv'@;
put 'bShVKSk7dmFyIHE9InNoYTUxMiI9PT1YfHwic2hhMzg0Ij09PVg/MTI4OjY0O3RoaXMuX2FsZz1YLHRoaXMuX2tleT1VLFUubGVuZ3RoPnE/VT0oInJtZDE2MCI9PT1YP25ldyBqOlYoWCkpLnVwZGF0ZShVKS5kaWdlc3QoKTpVLmxlbmd0aDxxJiYoVT1rLmNvbmNhdChbVSxCXSxxKSk7Zm9y'@;
put 'KHZhciBlZT10aGlzLl9pcGFkPWsuYWxsb2NVbnNhZmUocSksdGU9dGhpcy5fb3BhZD1rLmFsbG9jVW5zYWZlKHEpLG9lPTA7b2U8cTtvZSsrKWVlW29lXT01NF5VW29lXSx0ZVtvZV09OTJeVVtvZV07dGhpcy5faGFzaD0icm1kMTYwIj09PVg/bmV3IGo6VihYKSx0aGlzLl9oYXNoLnVwZGF0'@;
put 'ZShlZSl9eihZLEwpLFkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCl7dGhpcy5faGFzaC51cGRhdGUoWCl9LFkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBYPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBqOlYodGhpcy5f'@;
put 'YWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShYKS5kaWdlc3QoKX0sTS5leHBvcnRzPWZ1bmN0aW9uKFgsVSl7cmV0dXJuInJtZDE2MCI9PT0oWD1YLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PVg/bmV3IFkoInJtZDE2MCIsVSk6Im1kNSI9PT1YP25ldyBLKEUsVSk6bmV3'@;
put 'IFkoWCxVKX19LDEwMzE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9Uig5NTA5KS5CdWZmZXIsTD1SKDEwMjcpLGs9Sy5hbGxvYygxMjgpLEU9NjQ7ZnVuY3Rpb24gaihWLEIpe0wuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIEImJihCPUsuZnJv'@;
put 'bShCKSksdGhpcy5fYWxnPVYsdGhpcy5fa2V5PUIsQi5sZW5ndGg+RT9CPVYoQik6Qi5sZW5ndGg8RSYmKEI9Sy5jb25jYXQoW0Isa10sRSkpO2Zvcih2YXIgWT10aGlzLl9pcGFkPUsuYWxsb2NVbnNhZmUoRSksWD10aGlzLl9vcGFkPUsuYWxsb2NVbnNhZmUoRSksVT0wO1U8RTtVKyspWVtV'@;
put 'XT01NF5CW1VdLFhbVV09OTJeQltVXTt0aGlzLl9oYXNoPVtZXX16KGosTCksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9oYXNoLnB1c2goVil9LGoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBWPXRoaXMuX2FsZyhLLmNvbmNhdCh0aGlzLl9oYXNoKSk7'@;
put 'cmV0dXJuIHRoaXMuX2FsZyhLLmNvbmNhdChbdGhpcy5fb3BhZCxWXSkpfSxNLmV4cG9ydHM9an0sNTgzNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO08ucmFuZG9tQnl0ZXM9Ty5ybmc9Ty5wc2V1ZG9SYW5kb21CeXRlcz1PLnBybmc9UigxNzk4KSxPLmNyZWF0ZUhhc2g9Ty5IYXNoPVIoMzQ4'@;
put 'MiksTy5jcmVhdGVIbWFjPU8uSG1hYz1SKDgzNTUpO3ZhciB6PVIoNjA0MiksSz1PYmplY3Qua2V5cyh6KSxMPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChLKTtPLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBM'@;
put 'fTt2YXIgaz1SKDU2MzIpO08ucGJrZGYyPWsucGJrZGYyLE8ucGJrZGYyU3luYz1rLnBia2RmMlN5bmM7dmFyIEU9UigzNjE0KTtPLkNpcGhlcj1FLkNpcGhlcixPLmNyZWF0ZUNpcGhlcj1FLmNyZWF0ZUNpcGhlcixPLkNpcGhlcml2PUUuQ2lwaGVyaXYsTy5jcmVhdGVDaXBoZXJpdj1FLmNy'@;
put 'ZWF0ZUNpcGhlcml2LE8uRGVjaXBoZXI9RS5EZWNpcGhlcixPLmNyZWF0ZURlY2lwaGVyPUUuY3JlYXRlRGVjaXBoZXIsTy5EZWNpcGhlcml2PUUuRGVjaXBoZXJpdixPLmNyZWF0ZURlY2lwaGVyaXY9RS5jcmVhdGVEZWNpcGhlcml2LE8uZ2V0Q2lwaGVycz1FLmdldENpcGhlcnMsTy5saXN0'@;
put 'Q2lwaGVycz1FLmxpc3RDaXBoZXJzO3ZhciBqPVIoMjYwNyk7Ty5EaWZmaWVIZWxsbWFuR3JvdXA9ai5EaWZmaWVIZWxsbWFuR3JvdXAsTy5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9ai5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsTy5nZXREaWZmaWVIZWxsbWFuPWouZ2V0RGlmZmllSGVs'@;
put 'bG1hbixPLmNyZWF0ZURpZmZpZUhlbGxtYW49ai5jcmVhdGVEaWZmaWVIZWxsbWFuLE8uRGlmZmllSGVsbG1hbj1qLkRpZmZpZUhlbGxtYW47dmFyIFY9Uig0NzQzKTtPLmNyZWF0ZVNpZ249Vi5jcmVhdGVTaWduLE8uU2lnbj1WLlNpZ24sTy5jcmVhdGVWZXJpZnk9Vi5jcmVhdGVWZXJpZnks'@;
put 'Ty5WZXJpZnk9Vi5WZXJpZnksTy5jcmVhdGVFQ0RIPVIoNjM5Myk7dmFyIEI9Uig3OTAwKTtPLnB1YmxpY0VuY3J5cHQ9Qi5wdWJsaWNFbmNyeXB0LE8ucHJpdmF0ZUVuY3J5cHQ9Qi5wcml2YXRlRW5jcnlwdCxPLnB1YmxpY0RlY3J5cHQ9Qi5wdWJsaWNEZWNyeXB0LE8ucHJpdmF0ZURlY3J5'@;
put 'cHQ9Qi5wcml2YXRlRGVjcnlwdDt2YXIgWT1SKDc5NjMpO08ucmFuZG9tRmlsbD1ZLnJhbmRvbUZpbGwsTy5yYW5kb21GaWxsU3luYz1ZLnJhbmRvbUZpbGxTeW5jLE8uY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWyJzb3JyeSwgY3JlYXRlQ3JlZGVudGlh'@;
put 'bHMgaXMgbm90IGltcGxlbWVudGVkIHlldCIsIndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzIiwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Il0uam9pbigiXG4iKSl9LE8uY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIs'@;
put 'REhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElO'@;
put 'RzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sNTA1'@;
put 'NjooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXI7Y29uc3R7VHJhbnNmb3JtOkt9PVIoMjgzMCksTD16LmZyb20oWzIzOSwxODcsMTkxXSk7Y2xhc3MgayBleHRlbmRzIEt7Y29uc3RydWN0b3IoY2U9e30pe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6ITAsLi4uY2V9KTtjb25zdCBH'@;
put 'PXt9O2xldCBiO2ZvcihsZXQgRCBpbiBjZSlHW0IoRCldPWNlW0RdO2lmKGI9dGhpcy5ub3JtYWxpemUoRykpdGhyb3cgYjtzd2l0Y2goRy5yZWNvcmRfZGVsaW1pdGVyKXtjYXNlImF1dG8iOkcucmVjb3JkX2RlbGltaXRlcj1udWxsO2JyZWFrO2Nhc2UidW5peCI6Ry5yZWNvcmRfZGVsaW1p'@;
put 'dGVyPSJcbiI7YnJlYWs7Y2FzZSJtYWMiOkcucmVjb3JkX2RlbGltaXRlcj0iXHIiO2JyZWFrO2Nhc2Uid2luZG93cyI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcclxuIjticmVhaztjYXNlImFzY2lpIjpHLnJlY29yZF9kZWxpbWl0ZXI9Ilx4MWUiO2JyZWFrO2Nhc2UidW5pY29kZSI6Ry5yZWNv'@;
put 'cmRfZGVsaW1pdGVyPSJcdTIwMjgifXRoaXMub3B0aW9ucz1HLHRoaXMuc3RhdGU9e3N0b3A6ITF9LHRoaXMuaW5mbz17cmVjb3JkczowfX1ub3JtYWxpemUoY2Upe2lmKG51bGw9PWNlLmJvbXx8ITE9PT1jZS5ib20pY2UuYm9tPSExO2Vsc2UgaWYoITAhPT1jZS5ib20pcmV0dXJuIG5ldyBq'@;
put 'KCJDU1ZfT1BUSU9OX0JPT0xFQU5fSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgYm9tYCBpcyBvcHRpb25hbCBhbmQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuYm9tKX1gXSk7aWYobnVsbD09Y2UuZGVsaW1pdGVyKWNlLmRlbGltaXRlcj0iLCI7'@;
put 'ZWxzZSBpZih6LmlzQnVmZmVyKGNlLmRlbGltaXRlcikpY2UuZGVsaW1pdGVyPWNlLmRlbGltaXRlci50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5kZWxpbWl0ZXIpcmV0dXJuIG5ldyBqKCJDU1ZfT1BUSU9OX0RFTElNSVRFUl9JTlZBTElEX1RZUEUiLFsib3B0aW9u'@;
put 'IGBkZWxpbWl0ZXJgIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuZGVsaW1pdGVyKX1gXSk7aWYobnVsbD09Y2UucXVvdGUpY2UucXVvdGU9JyInO2Vsc2UgaWYoITA9PT1jZS5xdW90ZSljZS5xdW90ZT0nIic7ZWxzZSBpZighMT09PWNl'@;
put 'LnF1b3RlKWNlLnF1b3RlPSIiO2Vsc2UgaWYoei5pc0J1ZmZlcihjZS5xdW90ZSkpY2UucXVvdGU9Y2UucXVvdGUudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UucXVvdGUpcmV0dXJuIG5ldyBqKCJDU1ZfT1BUSU9OX1FVT1RFX0lOVkFMSURfVFlQRSIsWyJvcHRpb24g'@;
put 'YHF1b3RlYCBtdXN0IGJlIGEgYm9vbGVhbiwgYSBidWZmZXIgb3IgYSBzdHJpbmcsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UucXVvdGUpfWBdKTtpZihudWxsIT1jZS5xdW90ZWR8fChjZS5xdW90ZWQ9ITEpLG51bGwhPWNlLnF1b3RlZF9lbXB0eXx8KGNlLnF1b3RlZF9lbXB0eT12b2lk'@;
put 'IDApLG51bGw9PWNlLnF1b3RlZF9tYXRjaHx8ITE9PT1jZS5xdW90ZWRfbWF0Y2g/Y2UucXVvdGVkX21hdGNoPW51bGw6QXJyYXkuaXNBcnJheShjZS5xdW90ZWRfbWF0Y2gpfHwoY2UucXVvdGVkX21hdGNoPVtjZS5xdW90ZWRfbWF0Y2hdKSxjZS5xdW90ZWRfbWF0Y2gpZm9yKGxldCBHIG9m'@;
put 'IGNlLnF1b3RlZF9tYXRjaCl7Y29uc3QgYj1HIGluc3RhbmNlb2YgUmVnRXhwO2lmKCJzdHJpbmciIT10eXBlb2YgRyYmIWIpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogcXVvdGVkX21hdGNoIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWdleCwgZ290ICR7SlNPTi5zdHJpbmdpZnko'@;
put 'Ryl9YCl9aWYobnVsbCE9Y2UucXVvdGVkX3N0cmluZ3x8KGNlLnF1b3RlZF9zdHJpbmc9ITEpLG51bGwhPWNlLmVvZnx8KGNlLmVvZj0hMCksbnVsbD09Y2UuZXNjYXBlKWNlLmVzY2FwZT0nIic7ZWxzZSBpZih6LmlzQnVmZmVyKGNlLmVzY2FwZSkpY2UuZXNjYXBlPWNlLmVzY2FwZS50b1N0'@;
put 'cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5lc2NhcGUpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogZXNjYXBlIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmVzY2FwZSl9YCk7aWYoY2UuZXNjYXBlLmxlbmd0aD4x'@;
put 'KXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IGVzY2FwZSBtdXN0IGJlIG9uZSBjaGFyYWN0ZXIsIGdvdCAke2NlLmVzY2FwZS5sZW5ndGh9IGNoYXJhY3RlcnNgKTtpZihudWxsIT1jZS5oZWFkZXJ8fChjZS5oZWFkZXI9ITEpLGNlLmNvbHVtbnM9dGhpcy5ub3JtYWxpemVfY29sdW1u'@;
put 'cyhjZS5jb2x1bW5zKSxudWxsIT1jZS5xdW90ZWR8fChjZS5xdW90ZWQ9ITEpLG51bGwhPWNlLmNhc3R8fChjZS5jYXN0PXt9KSxudWxsIT1jZS5jYXN0LmJpZ2ludHx8KGNlLmNhc3QuYmlnaW50PUc9PiIiK0cpLG51bGwhPWNlLmNhc3QuYm9vbGVhbnx8KGNlLmNhc3QuYm9vbGVhbj1HPT5H'@;
put 'PyIxIjoiIiksbnVsbCE9Y2UuY2FzdC5kYXRlfHwoY2UuY2FzdC5kYXRlPUc9PiIiK0cuZ2V0VGltZSgpKSxudWxsIT1jZS5jYXN0Lm51bWJlcnx8KGNlLmNhc3QubnVtYmVyPUc9PiIiK0cpLG51bGwhPWNlLmNhc3Qub2JqZWN0fHwoY2UuY2FzdC5vYmplY3Q9Rz0+SlNPTi5zdHJpbmdpZnko'@;
put 'RykpLG51bGwhPWNlLmNhc3Quc3RyaW5nfHwoY2UuY2FzdC5zdHJpbmc9ZnVuY3Rpb24oRyl7cmV0dXJuIEd9KSxudWxsPT1jZS5yZWNvcmRfZGVsaW1pdGVyKWNlLnJlY29yZF9kZWxpbWl0ZXI9IlxuIjtlbHNlIGlmKHouaXNCdWZmZXIoY2UucmVjb3JkX2RlbGltaXRlcikpY2UucmVjb3Jk'@;
put 'X2RlbGltaXRlcj1jZS5yZWNvcmRfZGVsaW1pdGVyLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLnJlY29yZF9kZWxpbWl0ZXIpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogcmVjb3JkX2RlbGltaXRlciBtdXN0IGJlIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCBn'@;
put 'b3QgJHtKU09OLnN0cmluZ2lmeShjZS5yZWNvcmRfZGVsaW1pdGVyKX1gKX1fdHJhbnNmb3JtKGNlLEcsYil7aWYoITA9PT10aGlzLnN0YXRlLnN0b3ApcmV0dXJuO2lmKCFBcnJheS5pc0FycmF5KGNlKSYmIm9iamVjdCIhPXR5cGVvZiBjZSlyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLGIo'@;
put 'RXJyb3IoYEludmFsaWQgUmVjb3JkOiBleHBlY3QgYW4gYXJyYXkgb3IgYW4gb2JqZWN0LCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZSl9YCkpO2lmKDA9PT10aGlzLmluZm8ucmVjb3JkcylpZihBcnJheS5pc0FycmF5KGNlKSl7aWYoITA9PT10aGlzLm9wdGlvbnMuaGVhZGVyJiYhdGhpcy5v'@;
put 'cHRpb25zLmNvbHVtbnMpcmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCxiKEVycm9yKCJVbmRpc2NvdmVyYWJsZSBDb2x1bW5zOiBoZWFkZXIgb3B0aW9uIHJlcXVpcmVzIGNvbHVtbiBvcHRpb24gb3Igb2JqZWN0IHJlY29yZHMiKSl9ZWxzZSBudWxsIT10aGlzLm9wdGlvbnMuY29sdW1uc3x8'@;
put 'KHRoaXMub3B0aW9ucy5jb2x1bW5zPXRoaXMubm9ybWFsaXplX2NvbHVtbnMoT2JqZWN0LmtleXMoY2UpKSk7MD09PXRoaXMuaW5mby5yZWNvcmRzJiYodGhpcy5ib20oKSx0aGlzLmhlYWRlcnMoKSk7dHJ5e3RoaXMuZW1pdCgicmVjb3JkIixjZSx0aGlzLmluZm8ucmVjb3Jkcyl9Y2F0Y2go'@;
put 'SCl7cmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCx0aGlzLmVtaXQoImVycm9yIixIKX1sZXQgRDtpZih0aGlzLm9wdGlvbnMuZW9mKXtpZihEPXRoaXMuc3RyaW5naWZ5KGNlKSx2b2lkIDA9PT1EKXJldHVybjtEKz10aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcn1lbHNle2lmKEQ9dGhp'@;
put 'cy5zdHJpbmdpZnkoY2UpLHZvaWQgMD09PUQpcmV0dXJuOyh0aGlzLm9wdGlvbnMuaGVhZGVyfHx0aGlzLmluZm8ucmVjb3JkcykmJihEPXRoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyK0QpfXRoaXMuaW5mby5yZWNvcmRzKyssdGhpcy5wdXNoKEQpLGIoKX1fZmx1c2goY2UpezA9PT10'@;
put 'aGlzLmluZm8ucmVjb3JkcyYmKHRoaXMuYm9tKCksdGhpcy5oZWFkZXJzKCkpLGNlKCl9c3RyaW5naWZ5KGNlLEc9ITEpe2lmKCJvYmplY3QiIT10eXBlb2YgY2UpcmV0dXJuIGNlO2NvbnN0e2NvbHVtbnM6Yn09dGhpcy5vcHRpb25zLEg9W107aWYoQXJyYXkuaXNBcnJheShjZSkpe2ImJmNl'@;
put 'LnNwbGljZShiLmxlbmd0aCk7Zm9yKGxldCBnPTA7ZzxjZS5sZW5ndGg7ZysrKXtjb25zdCBDPWNlW2ddLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmcsY29sdW1uOmcscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lmKFMpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJl'@;
put 'cnJvciIsUyk7SFtnXT1bdixDXX19ZWxzZSBpZihiKWZvcihsZXQgZz0wO2c8Yi5sZW5ndGg7ZysrKXtjb25zdCBDPWhlKGNlLGJbZ10ua2V5KSxbUyx2XT10aGlzLl9fY2FzdChDLHtpbmRleDpnLGNvbHVtbjpiW2ddLmtleSxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7'@;
put 'aWYoUylyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixTKTtIW2ddPVt2LENdfWVsc2UgZm9yKGxldCBnIG9mIGNlKXtjb25zdCBDPWNlW2ddLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmksY29sdW1uOmJbaV0ua2V5LHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9'@;
put 'KTtpZihTKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpO0gucHVzaChbdixDXSl9bGV0IE49IiI7Zm9yKGxldCBnPTA7ZzxILmxlbmd0aDtnKyspe2xldCBDLFMsW3YscF09SFtnXTtpZigic3RyaW5nIj09dHlwZW9mIHYpQz10aGlzLm9wdGlvbnM7ZWxzZSBpZihWKHYpKXtpZihD'@;
put 'PXYsdj1DLnZhbHVlLGRlbGV0ZSBDLnZhbHVlLCJzdHJpbmciIT10eXBlb2YgdiYmbnVsbCE9dilyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgSW52YWxpZCBDYXN0aW5nIFZhbHVlOiByZXR1cm5lZCB2YWx1ZSBtdXN0IHJldHVybiBhIHN0cmluZywgbnVsbCBvciB1bmRl'@;
put 'ZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHYpfWApKTtpZihDPXsuLi50aGlzLm9wdGlvbnMsLi4uQ30sUz10aGlzLm5vcm1hbGl6ZShDKSlyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixTKX1lbHNle2lmKG51bGwhPXYpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsRXJy'@;
put 'b3IoYEludmFsaWQgQ2FzdGluZyBWYWx1ZTogcmV0dXJuZWQgdmFsdWUgbXVzdCByZXR1cm4gYSBzdHJpbmcsIGFuIG9iamVjdCwgbnVsbCBvciB1bmRlZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHYpfWApKTtDPXRoaXMub3B0aW9uc31jb25zdHtkZWxpbWl0ZXI6dyxlc2NhcGU6Sixx'@;
put 'dW90ZTpuZSxxdW90ZWQ6ZGUscXVvdGVkX2VtcHR5OmZlLHF1b3RlZF9zdHJpbmc6eGUscXVvdGVkX21hdGNoOkllLHJlY29yZF9kZWxpbWl0ZXI6RmV9PUM7aWYodil7aWYoInN0cmluZyIhPXR5cGVvZiB2KXJldHVybiB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgRm9ybWF0dGVyIG11c3Qg'@;
put 'cmV0dXJuIGEgc3RyaW5nLCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpLG51bGw7Y29uc3QgT2U9dy5sZW5ndGgmJnYuaW5kZXhPZih3KT49MCxqZT0iIiE9PW5lJiZ2LmluZGV4T2YobmUpPj0wLFdlPXYuaW5kZXhPZihKKT49MCYmSiE9PW5lLEtlPXYu'@;
put 'aW5kZXhPZihGZSk+PTAsWWU9eGUmJiJzdHJpbmciPT10eXBlb2YgcDtsZXQgUWU9SWUmJkllLmZpbHRlcihQZT0+InN0cmluZyI9PXR5cGVvZiBQZT8tMSE9PXYuaW5kZXhPZihQZSk6UGUudGVzdCh2KSk7UWU9UWUmJlFlLmxlbmd0aD4wO2NvbnN0IGx0PSEwPT09amV8fE9lfHxLZXx8ZGV8'@;
put 'fFllfHxRZTtpZighMD09PWx0JiYhMD09PVdlKXtjb25zdCBQZT0iXFwiPT09Sj9uZXcgUmVnRXhwKEorSiwiZyIpOm5ldyBSZWdFeHAoSiwiZyIpO3Y9di5yZXBsYWNlKFBlLEorSil9aWYoITA9PT1qZSl7Y29uc3QgUGU9bmV3IFJlZ0V4cChuZSwiZyIpO3Y9di5yZXBsYWNlKFBlLEorbmUp'@;
put 'fSEwPT09bHQmJih2PW5lK3YrbmUpLE4rPXZ9ZWxzZSghMD09PWZlfHwiIj09PXAmJiEwPT09eGUmJiExIT09ZmUpJiYoTis9bmUrbmUpO2chPT1ILmxlbmd0aC0xJiYoTis9dyl9cmV0dXJuIE59Ym9tKCl7ITA9PT10aGlzLm9wdGlvbnMuYm9tJiZ0aGlzLnB1c2goTCl9aGVhZGVycygpe2lm'@;
put 'KCExPT09dGhpcy5vcHRpb25zLmhlYWRlcnx8dm9pZCAwPT09dGhpcy5vcHRpb25zLmNvbHVtbnMpcmV0dXJuO2xldCBjZT10aGlzLm9wdGlvbnMuY29sdW1ucy5tYXAoRz0+Ry5oZWFkZXIpO2NlPXRoaXMub3B0aW9ucy5lb2Y/dGhpcy5zdHJpbmdpZnkoY2UsITApK3RoaXMub3B0aW9ucy5y'@;
put 'ZWNvcmRfZGVsaW1pdGVyOnRoaXMuc3RyaW5naWZ5KGNlKSx0aGlzLnB1c2goY2UpfV9fY2FzdChjZSxHKXtjb25zdCBiPXR5cGVvZiBjZTt0cnl7cmV0dXJuInN0cmluZyI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3Quc3RyaW5nKGNlLEcpXToiYmlnaW50Ij09PWI/W3ZvaWQgMCx0'@;
put 'aGlzLm9wdGlvbnMuY2FzdC5iaWdpbnQoY2UsRyldOiJudW1iZXIiPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0Lm51bWJlcihjZSxHKV06ImJvb2xlYW4iPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmJvb2xlYW4oY2UsRyldOmNlIGluc3RhbmNlb2YgRGF0ZT9bdm9pZCAw'@;
put 'LHRoaXMub3B0aW9ucy5jYXN0LmRhdGUoY2UsRyldOiJvYmplY3QiPT09YiYmbnVsbCE9PWNlP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3Qub2JqZWN0KGNlLEcpXTpbdm9pZCAwLGNlLGNlXX1jYXRjaChEKXtyZXR1cm5bRF19fW5vcm1hbGl6ZV9jb2x1bW5zKGNlKXtpZihudWxsIT1jZSl7'@;
put 'aWYoIm9iamVjdCIhPXR5cGVvZiBjZSl0aHJvdyBFcnJvcignSW52YWxpZCBvcHRpb24gImNvbHVtbnMiOiBleHBlY3QgYW4gYXJyYXkgb3IgYW4gb2JqZWN0Jyk7aWYoQXJyYXkuaXNBcnJheShjZSkpe2NvbnN0IEc9W107Zm9yKGxldCBiIG9mIGNlKWlmKCJzdHJpbmciPT10eXBlb2YgYilH'@;
put 'LnB1c2goe2tleTpiLGhlYWRlcjpifSk7ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIGJ8fHZvaWQgMD09PWJ8fEFycmF5LmlzQXJyYXkoYikpdGhyb3cgRXJyb3IoIkludmFsaWQgY29sdW1uIGRlZmluaXRpb246IGV4cGVjdCBhIHN0cmluZyBvciBhbiBvYmplY3QiKTtpZighYi5rZXkpdGhy'@;
put 'b3cgRXJyb3IoJ0ludmFsaWQgY29sdW1uIGRlZmluaXRpb246IHByb3BlcnR5ICJrZXkiIGlzIHJlcXVpcmVkJyk7dm9pZCAwPT09Yi5oZWFkZXImJihiLmhlYWRlcj1iLmtleSksRy5wdXNoKGIpfWNlPUd9ZWxzZXtjb25zdCBHPVtdO2ZvcihsZXQgYiBpbiBjZSlHLnB1c2goe2tleTpiLGhl'@;
put 'YWRlcjpjZVtiXX0pO2NlPUd9cmV0dXJuIGNlfX19Y29uc3QgRT1mdW5jdGlvbigpe2xldCB1ZSxjZSxHO2ZvcihsZXQgRCBpbiBhcmd1bWVudHMpe2NvbnN0IEg9YXJndW1lbnRzW0RdLE49dHlwZW9mIEg7aWYodm9pZCAwPT09dWUmJkFycmF5LmlzQXJyYXkoSCkpdWU9SDtlbHNlIGlmKHZv'@;
put 'aWQgMD09PWNlJiZWKEgpKWNlPUg7ZWxzZXtpZih2b2lkIDAhPT1HfHwiZnVuY3Rpb24iIT09Til0aHJvdyBuZXcgaigiQ1NWX0lOVkFMSURfQVJHVU1FTlQiLFsiSW52YWxpZCBhcmd1bWVudDoiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShIKX0gYXQgaW5kZXggJHtEfWBdKTtHPUh9fWNvbnN0'@;
put 'IGI9bmV3IGsoY2UpO2lmKEcpe2NvbnN0IEQ9W107Yi5vbigicmVhZGFibGUiLGZ1bmN0aW9uKCl7bGV0IEg7Zm9yKDtudWxsIT09KEg9dGhpcy5yZWFkKCkpOylELnB1c2goSCl9KSxiLm9uKCJlcnJvciIsZnVuY3Rpb24oSCl7RyhIKX0pLGIub24oImVuZCIsZnVuY3Rpb24oKXtHKHZvaWQg'@;
put 'MCxELmpvaW4oIiIpKX0pfWlmKHZvaWQgMCE9PXVlKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUpc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCl7Zm9yKGxldCBEIG9mIHVlKWIud3JpdGUoRCk7Yi5lbmQoKX0pO2Vsc2V7Zm9yKGxldCBEIG9mIHVlKWIud3JpdGUoRCk7Yi5lbmQo'@;
put 'KX1yZXR1cm4gYn07Y2xhc3MgaiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGNlLEcsLi4uYil7QXJyYXkuaXNBcnJheShHKSYmKEc9Ry5qb2luKCIgIikpLHN1cGVyKEcpLHZvaWQgMCE9PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGop'@;
put 'LHRoaXMuY29kZT1jZTtmb3IoY29uc3QgRCBvZiBiKWZvcihjb25zdCBIIGluIEQpe2NvbnN0IE49RFtIXTt0aGlzW0hdPXouaXNCdWZmZXIoTik/Ti50b1N0cmluZygpOm51bGw9PU4/TjpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KE4pKX19fUUuU3RyaW5naWZpZXI9ayxFLkNzdkVycm9y'@;
put 'PWosTS5leHBvcnRzPUU7Y29uc3QgVj1mdW5jdGlvbih1ZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB1ZSYmbnVsbCE9PXVlJiYhQXJyYXkuaXNBcnJheSh1ZSl9LEI9ZnVuY3Rpb24odWUpe3JldHVybiB1ZS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oY2UsRyl7cmV0dXJuIl8iK0cu'@;
put 'dG9Mb3dlckNhc2UoKX0pfSxZPSIuIi5jaGFyQ29kZUF0KDApLFg9L1xcKFxcKT8vZyxVPVJlZ0V4cCgiW14uW1xcXV0rfFxcWyg/OihbXlwiJ11bXltdKil8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwk'@;
put 'KSkiLCJnIikscT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxlZT0vXlx3KiQvLHRlPWZ1bmN0aW9uKHVlKXtjb25zdCBjZT10eXBlb2YgdWU7cmV0dXJuInN5bWJvbCI9PT1jZXx8Im9iamVjdCI9PT1jZSYmdWUmJiJbb2JqZWN0IFN5bWJvbF0i'@;
put 'PT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHVlKX0sc2U9ZnVuY3Rpb24odWUpe2lmKCJzdHJpbmciPT10eXBlb2YgdWV8fHRlKHVlKSlyZXR1cm4gdWU7Y29uc3QgY2U9YCR7dWV9YDtyZXR1cm4iMCI9PWNlJiYxL3VlPT0tSU5GSU5JVFk/Ii0wIjpjZX0saGU9ZnVuY3Rpb24o'@;
put 'dWUsY2Upe2xldCBHPTA7Y29uc3QgYj0oY2U9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBBcnJheS5pc0FycmF5KHVlKT91ZTpmdW5jdGlvbihHLGIpe2lmKEFycmF5LmlzQXJyYXkoRykpcmV0dXJuITE7Y29uc3QgRD10eXBlb2YgRztyZXR1cm4hKCJudW1iZXIiIT09RCYmInN5bWJvbCIhPT1E'@;
put 'JiYiYm9vbGVhbiIhPT1EJiZHJiYhdGUoRykpfHxlZS50ZXN0KEcpfHwhcS50ZXN0KEcpfHxudWxsIT1iJiZHIGluIE9iamVjdChiKX0odWUsY2UpP1t1ZV06ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXTtyZXR1cm4gRy5jaGFyQ29kZUF0KDApPT09WSYmYi5wdXNoKCIiKSxHLnJlcGxhY2UoVSxm'@;
put 'dW5jdGlvbihELEgsTixnKXtsZXQgQz1EO04/Qz1nLnJlcGxhY2UoWCwiJDEiKTpIJiYoQz1ILnRyaW0oKSksYi5wdXNoKEMpfSksYn0odWUpfShjZSx1ZSkpLmxlbmd0aDtmb3IoO251bGwhPXVlJiZHPGI7KXVlPXVlW3NlKGNlW0crK10pXTtyZXR1cm4gRyYmRz09PWI/dWU6dm9pZCAwfX0s'@;
put 'NzU2NTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXI7Y29uc3QgSz1SKDUwNTYpLHtTdHJpbmdEZWNvZGVyOkx9PVIoMjU1Myk7TS5leHBvcnRzPWZ1bmN0aW9uKGssRT17fSl7Y29uc3Qgaj1bXTtmdW5jdGlvbiBWKFkpe1kmJmoucHVzaChZLnRvU3RyaW5nKCkpfXouaXNCdWZmZXIo'@;
put 'aykmJihrPShuZXcgTCkud3JpdGUoaykpO2xldCBCPW5ldyBLLlN0cmluZ2lmaWVyKEUpO0Iub24oImRhdGEiLFYpO2ZvcihsZXQgWSBvZiBrKUIud3JpdGUoWSk7cmV0dXJuIEIuZW5kKCksQi5vZmYoImRhdGEiLFYpLGouam9pbigiIil9fSw0Mjg5OihNLE8sUik9PnsidXNlIHN0cmljdCI7'@;
put 'dmFyIHo9UigyMjE1KSxLPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxMPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaz1BcnJheS5wcm90b3R5cGUuY29uY2F0LEU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGo9UigxMDQ0KSgpLFY9'@;
put 'RSYmaixCPWZ1bmN0aW9uKFgsVSxxLGVlKXtpZihVIGluIFgpaWYoITA9PT1lZSl7aWYoWFtVXT09PXEpcmV0dXJufWVsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mKHRlPWVlKXx8IltvYmplY3QgRnVuY3Rpb25dIiE9PUwuY2FsbCh0ZSl8fCFlZSgpKXJldHVybjt2YXIgdGU7Vj9FKFgsVSx7'@;
put 'Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6cSx3cml0YWJsZTohMH0pOlhbVV09cX0sWT1mdW5jdGlvbihYLFUpe3ZhciBxPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06e30sZWU9eihVKTtLJiYoZWU9ay5jYWxsKGVlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5'@;
put 'bWJvbHMoVSkpKTtmb3IodmFyIHRlPTA7dGU8ZWUubGVuZ3RoO3RlKz0xKUIoWCxlZVt0ZV0sVVtlZVt0ZV1dLHFbZWVbdGVdXSl9O1kuc3VwcG9ydHNEZXNjcmlwdG9ycz0hIVYsTS5leHBvcnRzPVl9LDUyNTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPLnV0aWxzPVIoMTI3OCksTy5DaXBo'@;
put 'ZXI9Uig1NzU2KSxPLkRFUz1SKDMyNyksTy5DQkM9Uig5MDUxKSxPLkVERT1SKDY1MSl9LDkwNTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KSxMPXt9O2Z1bmN0aW9uIGsoRSl7ei5lcXVhbChFLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRo'@;
put 'aXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgaj0wO2o8dGhpcy5pdi5sZW5ndGg7aisrKXRoaXMuaXZbal09RVtqXX1PLmluc3RhbnRpYXRlPWZ1bmN0aW9uKEUpe2Z1bmN0aW9uIGooWCl7RS5jYWxsKHRoaXMsWCksdGhpcy5fY2JjSW5pdCgpfUsoaixFKTtmb3IodmFyIFY9T2JqZWN0Lmtl'@;
put 'eXMoTCksQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgWT1WW0JdO2oucHJvdG90eXBlW1ldPUxbWV19cmV0dXJuIGouY3JlYXRlPWZ1bmN0aW9uKFgpe3JldHVybiBuZXcgaihYKX0san0sTC5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBFPW5ldyBrKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2Jj'@;
put 'U3RhdGU9RX0sTC5fdXBkYXRlPWZ1bmN0aW9uKEUsaixWLEIpe3ZhciBYPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxVPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVVtxXV49RVtq'@;
put 'K3FdO2ZvcihYLl91cGRhdGUuY2FsbCh0aGlzLFUsMCxWLEIpLHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylVW3FdPVZbQitxXX1lbHNle2ZvcihYLl91cGRhdGUuY2FsbCh0aGlzLEUsaixWLEIpLHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylWW0IrcV1ePVVbcV07Zm9yKHE9MDtxPHRoaXMu'@;
put 'YmxvY2tTaXplO3ErKylVW3FdPUVbaitxXX19fSw1NzU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KTtmdW5jdGlvbiBLKEwpe3RoaXMub3B0aW9ucz1MLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1'@;
put 'ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTB9TS5leHBvcnRzPUssSy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LEsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gMD09PUwubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlw'@;
put 'ZT90aGlzLl91cGRhdGVEZWNyeXB0KEwpOnRoaXMuX3VwZGF0ZUVuY3J5cHQoTCl9LEsucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oTCxrKXtmb3IodmFyIEU9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEwubGVuZ3RoLWspLGo9MDtqPEU7aisrKXRoaXMu'@;
put 'YnVmZmVyW3RoaXMuYnVmZmVyT2ZmK2pdPUxbaytqXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPUUsRX0sSy5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEwsayl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEwsayksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2Nr'@;
put 'U2l6ZX0sSy5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24oTCl7dmFyIGs9MCxFPTAsVj1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitMLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKGsrPXRoaXMuX2J1ZmZl'@;
put 'cihMLGspLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYoRSs9dGhpcy5fZmx1c2hCdWZmZXIoVixFKSkpO2Zvcih2YXIgQj1MLmxlbmd0aC0oTC5sZW5ndGgtaykldGhpcy5ibG9ja1NpemU7azxCO2srPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShMLGssVixFKSxF'@;
put 'Kz10aGlzLmJsb2NrU2l6ZTtmb3IoO2s8TC5sZW5ndGg7aysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPUxba107cmV0dXJuIFZ9LEsucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEwpe2Zvcih2YXIgaz0wLEU9MCxqPU1hdGguY2VpbCgo'@;
put 'dGhpcy5idWZmZXJPZmYrTC5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLFY9bmV3IEFycmF5KGoqdGhpcy5ibG9ja1NpemUpO2o+MDtqLS0pays9dGhpcy5fYnVmZmVyKEwsayksRSs9dGhpcy5fZmx1c2hCdWZmZXIoVixFKTtyZXR1cm4gays9dGhpcy5fYnVmZmVyKEwsayksVn0sSy5wcm90'@;
put 'b3R5cGUuZmluYWw9ZnVuY3Rpb24oTCl7dmFyIGssRTtyZXR1cm4gTCYmKGs9dGhpcy51cGRhdGUoTCkpLEU9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLGs/ay5jb25jYXQoRSk6RX0sSy5wcm90b3R5cGUuX3BhZD1mdW5j'@;
put 'dGlvbihMLGspe2lmKDA9PT1rKXJldHVybiExO2Zvcig7azxMLmxlbmd0aDspTFtrKytdPTA7cmV0dXJuITB9LEsucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgTD1uZXcgQXJy'@;
put 'YXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxMLDApLEx9LEsucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihMKXtyZXR1cm4gTH0sSy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe3ouZXF1YWwodGhpcy5idWZmZXJPZmYsdGhp'@;
put 'cy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIEw9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoTCwwKSx0aGlzLl91bnBhZChMKX19LDMyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1S'@;
put 'KDU3MTcpLEw9UigxMjc4KSxrPVIoNTc1Nik7ZnVuY3Rpb24gRSgpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBqKEIpe2suY2FsbCh0aGlzLEIpO3ZhciBZPW5ldyBFO3RoaXMuX2Rlc1N0YXRlPVksdGhpcy5kZXJpdmVLZXlzKFksQi5rZXkpfUsoaixr'@;
put 'KSxNLmV4cG9ydHM9aixqLmNyZWF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gbmV3IGooQil9O3ZhciBWPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtqLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKEIsWSl7Qi5rZXlzPW5ldyBBcnJheSgzMiksei5lcXVhbChZLmxlbmd0'@;
put 'aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIFg9TC5yZWFkVUludDMyQkUoWSwwKSxVPUwucmVhZFVJbnQzMkJFKFksNCk7TC5wYzEoWCxVLEIudG1wLDApLFg9Qi50bXBbMF0sVT1CLnRtcFsxXTtmb3IodmFyIHE9MDtxPEIua2V5cy5sZW5ndGg7cSs9Mil7dmFy'@;
put 'IGVlPVZbcT4+PjFdO1g9TC5yMjhzaGwoWCxlZSksVT1MLnIyOHNobChVLGVlKSxMLnBjMihYLFUsQi5rZXlzLHEpfX0sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihCLFksWCxVKXt2YXIgcT10aGlzLl9kZXNTdGF0ZSxlZT1MLnJlYWRVSW50MzJCRShCLFkpLHRlPUwucmVhZFVJbnQz'@;
put 'MkJFKEIsWSs0KTtMLmlwKGVlLHRlLHEudG1wLDApLGVlPXEudG1wWzBdLHRlPXEudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KHEsZWUsdGUscS50bXAsMCk6dGhpcy5fZGVjcnlwdChxLGVlLHRlLHEudG1wLDApLHRlPXEudG1wWzFdLEwud3JpdGVVSW50MzJC'@;
put 'RShYLGVlPXEudG1wWzBdLFUpLEwud3JpdGVVSW50MzJCRShYLHRlLFUrNCl9LGoucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oQixZKXtmb3IodmFyIFg9Qi5sZW5ndGgtWSxVPVk7VTxCLmxlbmd0aDtVKyspQltVXT1YO3JldHVybiEwfSxqLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oQil7'@;
put 'Zm9yKHZhciBZPUJbQi5sZW5ndGgtMV0sWD1CLmxlbmd0aC1ZO1g8Qi5sZW5ndGg7WCsrKXouZXF1YWwoQltYXSxZKTtyZXR1cm4gQi5zbGljZSgwLEIubGVuZ3RoLVkpfSxqLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihCLFksWCxVLHEpe2Zvcih2YXIgZWU9WSx0ZT1YLG9lPTA7b2U8'@;
put 'Qi5rZXlzLmxlbmd0aDtvZSs9Mil7dmFyIHNlPUIua2V5c1tvZV0saGU9Qi5rZXlzW29lKzFdO0wuZXhwYW5kKHRlLEIudG1wLDApO3ZhciB1ZT1MLnN1YnN0aXR1dGUoc2VePUIudG1wWzBdLGhlXj1CLnRtcFsxXSksY2U9dGU7dGU9KGVlXkwucGVybXV0ZSh1ZSkpPj4+MCxlZT1jZX1MLnJp'@;
put 'cCh0ZSxlZSxVLHEpfSxqLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihCLFksWCxVLHEpe2Zvcih2YXIgZWU9WCx0ZT1ZLG9lPUIua2V5cy5sZW5ndGgtMjtvZT49MDtvZS09Mil7dmFyIHNlPUIua2V5c1tvZV0saGU9Qi5rZXlzW29lKzFdO0wuZXhwYW5kKGVlLEIudG1wLDApO3ZhciB1'@;
put 'ZT1MLnN1YnN0aXR1dGUoc2VePUIudG1wWzBdLGhlXj1CLnRtcFsxXSksY2U9ZWU7ZWU9KHRlXkwucGVybXV0ZSh1ZSkpPj4+MCx0ZT1jZX1MLnJpcChlZSx0ZSxVLHEpfX0sNjUxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyksTD1SKDU3NTYpLGs9Uigz'@;
put 'MjcpO2Z1bmN0aW9uIEUoVixCKXt6LmVxdWFsKEIubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgWT1CLnNsaWNlKDAsOCksWD1CLnNsaWNlKDgsMTYpLFU9Qi5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PVY/W2suY3JlYXRlKHt0eXBlOiJlbmNyeXB0'@;
put 'IixrZXk6WX0pLGsuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6WH0pLGsuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6VX0pXTpbay5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpVfSksay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpYfSksay5jcmVhdGUoe3R5cGU6ImRlY3J5'@;
put 'cHQiLGtleTpZfSldfWZ1bmN0aW9uIGooVil7TC5jYWxsKHRoaXMsVik7dmFyIEI9bmV3IEUodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPUJ9SyhqLEwpLE0uZXhwb3J0cz1qLGouY3JlYXRlPWZ1bmN0aW9uKFYpe3JldHVybiBuZXcgaihWKX0sai5wcm90b3R5'@;
put 'cGUuX3VwZGF0ZT1mdW5jdGlvbihWLEIsWSxYKXt2YXIgVT10aGlzLl9lZGVTdGF0ZTtVLmNpcGhlcnNbMF0uX3VwZGF0ZShWLEIsWSxYKSxVLmNpcGhlcnNbMV0uX3VwZGF0ZShZLFgsWSxYKSxVLmNpcGhlcnNbMl0uX3VwZGF0ZShZLFgsWSxYKX0sai5wcm90b3R5cGUuX3BhZD1rLnByb3Rv'@;
put 'dHlwZS5fcGFkLGoucHJvdG90eXBlLl91bnBhZD1rLnByb3RvdHlwZS5fdW5wYWR9LDEyNzg6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5yZWFkVUludDMyQkU9ZnVuY3Rpb24oTCxrKXtyZXR1cm4oTFswK2tdPDwyNHxMWzEra108PDE2fExbMitrXTw8OHxMWzMra10pPj4+MH0sTy53cml0ZVVJ'@;
put 'bnQzMkJFPWZ1bmN0aW9uKEwsayxFKXtMWzArRV09az4+PjI0LExbMStFXT1rPj4+MTYmMjU1LExbMitFXT1rPj4+OCYyNTUsTFszK0VdPTI1NSZrfSxPLmlwPWZ1bmN0aW9uKEwsayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPTY7WT49MDtZLT0yKXtmb3IodmFyIFg9MDtYPD0yNDtYKz04KVY8'@;
put 'PD0xLFZ8PWs+Pj5YK1kmMTtmb3IoWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9TD4+PlgrWSYxfWZvcihZPTY7WT49MDtZLT0yKXtmb3IoWD0xO1g8PTI1O1grPTgpQjw8PTEsQnw9az4+PlgrWSYxO2ZvcihYPTE7WDw9MjU7WCs9OClCPDw9MSxCfD1MPj4+WCtZJjF9RVtqKzBdPVY+Pj4wLEVb'@;
put 'aisxXT1CPj4+MH0sTy5yaXA9ZnVuY3Rpb24oTCxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9MDtZPDQ7WSsrKWZvcih2YXIgWD0yNDtYPj0wO1gtPTgpVjw8PTEsVnw9az4+PlgrWSYxLFY8PD0xLFZ8PUw+Pj5YK1kmMTtmb3IoWT00O1k8ODtZKyspZm9yKFg9MjQ7WD49MDtYLT04KUI8PD0x'@;
put 'LEJ8PWs+Pj5YK1kmMSxCPDw9MSxCfD1MPj4+WCtZJjE7RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5wYzE9ZnVuY3Rpb24oTCxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9NztZPj01O1ktLSl7Zm9yKHZhciBYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1rPj5YK1kmMTtmb3IoWD0wO1g8'@;
put 'PTI0O1grPTgpVjw8PTEsVnw9TD4+WCtZJjF9Zm9yKFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PWs+PlgrWSYxO2ZvcihZPTE7WTw9MztZKyspe2ZvcihYPTA7WDw9MjQ7WCs9OClCPDw9MSxCfD1rPj5YK1kmMTtmb3IoWD0wO1g8PTI0O1grPTgpQjw8PTEsQnw9TD4+WCtZJjF9Zm9yKFg9MDtY'@;
put 'PD0yNDtYKz04KUI8PD0xLEJ8PUw+PlgrWSYxO0VbaiswXT1WPj4+MCxFW2orMV09Qj4+PjB9LE8ucjI4c2hsPWZ1bmN0aW9uKEwsayl7cmV0dXJuIEw8PGsmMjY4NDM1NDU1fEw+Pj4yOC1rfTt2YXIgUj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAs'@;
put 'MTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtPLnBjMj1mdW5jdGlvbihMLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT1SLmxlbmd0aD4+PjEsWD0wO1g8WTtYKyspVjw8PTEsVnw9TD4+PlJbWF0m'@;
put 'MTtmb3IoWD1ZO1g8Ui5sZW5ndGg7WCsrKUI8PD0xLEJ8PWs+Pj5SW1hdJjE7RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5leHBhbmQ9ZnVuY3Rpb24oTCxrLEUpe3ZhciBqPTAsVj0wO2o9KDEmTCk8PDV8TD4+PjI3O2Zvcih2YXIgQj0yMztCPj0xNTtCLT00KWo8PD02LGp8PUw+Pj5C'@;
put 'JjYzO2ZvcihCPTExO0I+PTM7Qi09NClWfD1MPj4+QiY2MyxWPDw9NjtWfD0oMzEmTCk8PDF8TD4+PjMxLGtbRSswXT1qPj4+MCxrW0UrMV09Vj4+PjB9O3ZhciB6PVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAs'@;
put 'Myw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0'@;
put 'LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4'@;
put 'LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEz'@;
put 'LDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDks'@;
put 'MTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEs'@;
put 'NiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywy'@;
put 'LDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO08uc3Vic3Rp'@;
put 'dHV0ZT1mdW5jdGlvbihMLGspe2Zvcih2YXIgRT0wLGo9MDtqPDQ7aisrKUU8PD00LEV8PXpbNjQqaisoTD4+PjE4LTYqaiY2MyldO2ZvcihqPTA7ajw0O2orKylFPDw9NCxFfD16WzI1Nis2NCpqKyhrPj4+MTgtNipqJjYzKV07cmV0dXJuIEU+Pj4wfTt2YXIgSz1bMTYsMjUsMTIsMTEsMywy'@;
put 'MCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107Ty5wZXJtdXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgaz0wLEU9MDtFPEsubGVuZ3RoO0UrKylrPDw9MSxrfD1MPj4+S1tFXSYxO3JldHVybiBrPj4+MH0sTy5wYWRT'@;
put 'cGxpdD1mdW5jdGlvbihMLGssRSl7Zm9yKHZhciBqPUwudG9TdHJpbmcoMik7ai5sZW5ndGg8azspaj0iMCIrajtmb3IodmFyIFY9W10sQj0wO0I8aztCKz1FKVYucHVzaChqLnNsaWNlKEIsQitFKSk7cmV0dXJuIFYuam9pbigiICIpfX0sMjYwNzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5C'@;
put 'dWZmZXIsSz1SKDM1OTApLEw9Uig5Nzk5KSxrPVIoNzQyNiksRT17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O08uRGlmZmllSGVsbG1hbkdyb3VwPU8uY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPU8uZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbihqKXt2YXIgVj1uZXcgeihMW2pdLnBy'@;
put 'aW1lLCJoZXgiKSxCPW5ldyB6KExbal0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IGsoVixCKX0sTy5jcmVhdGVEaWZmaWVIZWxsbWFuPU8uRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBqKFYsQixZLFgpe3JldHVybiB6LmlzQnVmZmVyKEIpfHx2b2lkIDA9PT1FW0JdP2ooViwiYmluYXJ5IixCLFkp'@;
put 'OihCPUJ8fCJiaW5hcnkiLFg9WHx8ImJpbmFyeSIsWT1ZfHxuZXcgeihbMl0pLHouaXNCdWZmZXIoWSl8fChZPW5ldyB6KFksWCkpLCJudW1iZXIiPT10eXBlb2YgVj9uZXcgayhLKFYsWSksWSwhMCk6KHouaXNCdWZmZXIoVil8fChWPW5ldyB6KFYsQikpLG5ldyBrKFYsWSwhMCkpKX19LDc0'@;
put 'MjY6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9UigzNjIwKSxMPW5ldyhSKDMwNDcpKSxrPW5ldyBLKDI0KSxFPW5ldyBLKDExKSxqPW5ldyBLKDEwKSxWPW5ldyBLKDMpLEI9bmV3IEsoNyksWT1SKDM1OTApLFg9UigxNzk4KTtmdW5jdGlvbiBVKHNlLGhlKXtyZXR1cm4gaGU9'@;
put 'aGV8fCJ1dGY4Iix6LmlzQnVmZmVyKHNlKXx8KHNlPW5ldyB6KHNlLGhlKSksdGhpcy5fcHViPW5ldyBLKHNlKSx0aGlzfWZ1bmN0aW9uIHEoc2UsaGUpe3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUpKSx0aGlzLl9wcml2PW5ldyBLKHNlKSx0'@;
put 'aGlzfU0uZXhwb3J0cz10ZTt2YXIgZWU9e307ZnVuY3Rpb24gdGUoc2UsaGUsdWUpe3RoaXMuc2V0R2VuZXJhdG9yKGhlKSx0aGlzLl9fcHJpbWU9bmV3IEsoc2UpLHRoaXMuX3ByaW1lPUsubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPXNlLmxlbmd0aCx0aGlzLl9wdWI9dm9p'@;
put 'ZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAsdWU/KHRoaXMuc2V0UHVibGljS2V5PVUsdGhpcy5zZXRQcml2YXRlS2V5PXEpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIG9lKHNlLGhlKXt2YXIgdWU9bmV3IHooc2UudG9BcnJheSgpKTtyZXR1cm4gaGU/'@;
put 'dWUudG9TdHJpbmcoaGUpOnVlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbihz'@;
put 'ZSxoZSl7dmFyIHVlPWhlLnRvU3RyaW5nKCJoZXgiKSxjZT1bdWUsc2UudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoY2UgaW4gZWUpcmV0dXJuIGVlW2NlXTt2YXIgRyxiPTA7aWYoc2UuaXNFdmVuKCl8fCFZLnNpbXBsZVNpZXZlfHwhWS5mZXJtYXRUZXN0KHNlKXx8IUwudGVzdChzZSkp'@;
put 'cmV0dXJuIGIrPTEsZWVbY2VdPWIrPSIwMiI9PT11ZXx8IjA1Ij09PXVlPzg6NCxiO3N3aXRjaChMLnRlc3Qoc2Uuc2hybigxKSl8fChiKz0yKSx1ZSl7Y2FzZSIwMiI6c2UubW9kKGspLmNtcChFKSYmKGIrPTgpO2JyZWFrO2Nhc2UiMDUiOihHPXNlLm1vZChqKSkuY21wKFYpJiZHLmNtcChC'@;
put 'KSYmKGIrPTgpO2JyZWFrO2RlZmF1bHQ6Yis9NH1yZXR1cm4gZWVbY2VdPWIsYn0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksdGUucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcg'@;
put 'SyhYKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sdGUucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oc2Upe3ZhciBoZT0oc2U9KHNl'@;
put 'PW5ldyBLKHNlKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHVlPW5ldyB6KGhlLnRvQXJyYXkoKSksY2U9dGhpcy5nZXRQcmltZSgpO2lmKHVlLmxlbmd0aDxjZS5sZW5ndGgpe3ZhciBHPW5ldyB6KGNlLmxlbmd0aC11ZS5sZW5ndGgpO0cuZmls'@;
put 'bCgwKSx1ZT16LmNvbmNhdChbRyx1ZV0pfXJldHVybiB1ZX0sdGUucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX3B1YixzZSl9LHRlLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fcHJpdixzZSl9'@;
put 'LHRlLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX19wcmltZSxzZSl9LHRlLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9nZW4sc2UpfSx0ZS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHNl'@;
put 'LGhlKXtyZXR1cm4gaGU9aGV8fCJ1dGY4Iix6LmlzQnVmZmVyKHNlKXx8KHNlPW5ldyB6KHNlLGhlKSksdGhpcy5fX2dlbj1zZSx0aGlzLl9nZW49bmV3IEsoc2UpLHRoaXN9fSwzNTkwOihNLE8sUik9Pnt2YXIgej1SKDE3OTgpO00uZXhwb3J0cz1zZSxzZS5zaW1wbGVTaWV2ZT10ZSxzZS5m'@;
put 'ZXJtYXRUZXN0PW9lO3ZhciBLPVIoMzYyMCksTD1uZXcgSygyNCksaz1uZXcoUigzMDQ3KSksRT1uZXcgSygxKSxqPW5ldyBLKDIpLFY9bmV3IEsoNSksQj0obmV3IEsoMTYpLG5ldyBLKDgpLG5ldyBLKDEwKSksWT1uZXcgSygzKSxYPShuZXcgSyg3KSxuZXcgSygxMSkpLFU9bmV3IEsoNCks'@;
put 'cT0obmV3IEsoMTIpLG51bGwpO2Z1bmN0aW9uIHRlKGhlKXtmb3IodmFyIHVlPWZ1bmN0aW9uIGVlKCl7aWYobnVsbCE9PXEpcmV0dXJuIHE7dmFyIGhlPVtdO2hlWzBdPTI7Zm9yKHZhciB1ZT0xLGNlPTM7Y2U8MTA0ODU3NjtjZSs9Mil7Zm9yKHZhciBHPU1hdGguY2VpbChNYXRoLnNxcnQo'@;
put 'Y2UpKSxiPTA7Yjx1ZSYmaGVbYl08PUcmJmNlJWhlW2JdIT0wO2IrKyk7dWUhPT1iJiZoZVtiXTw9R3x8KGhlW3VlKytdPWNlKX1yZXR1cm4gcT1oZSxoZX0oKSxjZT0wO2NlPHVlLmxlbmd0aDtjZSsrKWlmKDA9PT1oZS5tb2RuKHVlW2NlXSkpcmV0dXJuIDA9PT1oZS5jbXBuKHVlW2NlXSk7'@;
put 'cmV0dXJuITB9ZnVuY3Rpb24gb2UoaGUpe3ZhciB1ZT1LLm1vbnQoaGUpO3JldHVybiAwPT09ai50b1JlZCh1ZSkucmVkUG93KGhlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHNlKGhlLHVlKXtpZihoZTwxNilyZXR1cm4gbmV3IEsoMj09PXVlfHw1PT09dWU/WzE0MCwx'@;
put 'MjNdOlsxNDAsMzldKTt2YXIgY2UsRztmb3IodWU9bmV3IEsodWUpOzspe2ZvcihjZT1uZXcgSyh6KE1hdGguY2VpbChoZS84KSkpO2NlLmJpdExlbmd0aCgpPmhlOyljZS5pc2hybigxKTtpZihjZS5pc0V2ZW4oKSYmY2UuaWFkZChFKSxjZS50ZXN0bigxKXx8Y2UuaWFkZChqKSx1ZS5jbXAo'@;
put 'aikpe2lmKCF1ZS5jbXAoVikpZm9yKDtjZS5tb2QoQikuY21wKFkpOyljZS5pYWRkKFUpfWVsc2UgZm9yKDtjZS5tb2QoTCkuY21wKFgpOyljZS5pYWRkKFUpO2lmKHRlKEc9Y2Uuc2hybigxKSkmJnRlKGNlKSYmb2UoRykmJm9lKGNlKSYmay50ZXN0KEcpJiZrLnRlc3QoY2UpKXJldHVybiBj'@;
put 'ZX19fSwzNjIwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTChnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnBy'@;
put 'b3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxu'@;
put 'dWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZv'@;
put 'aWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7'@;
put 'dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6'@;
put 'bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1h'@;
put 'eD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxD'@;
put 'LFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxMKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5u'@;
put 'ZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMp'@;
put 'e2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEwoZzw5'@;
put 'MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtp'@;
put 'ZihMKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2'@;
put 'PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+'@;
put 'MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1K'@;
put 'JjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgp'@;
put 'O2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tK'@;
put 'Kz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAo'@;
put 'KX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUop'@;
put 'K1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9'@;
put 'MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'KTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwp'@;
put 'O3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEm'@;
put 'JjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCks'@;
put 'dGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0'@;
put 'MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwy'@;
put 'MDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXww'@;
put 'O3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixJZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxP'@;
put 'ZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0llKS82NzEwODg2NHwwLEllPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxJZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tm'@;
put 'ZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53'@;
put 'b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygx'@;
put 'NikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1pl'@;
put 'cm8oKTspe3ZhciBJZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0llK1M6WFtkZS1JZS5sZW5ndGhdK0llK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmKFM9Ii0iK1MpLFN9TCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10'@;
put 'aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkwoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUu'@;
put 'cHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gTCh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihn'@;
put 'LEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7TCh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVu'@;
put 'Z3RoIiksTChwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCks'@;
put 'ZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGgu'@;
put 'Y2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30s'@;
put 'RS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0y'@;
put 'KSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRo'@;
put 'aXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBN'@;
put 'YXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109'@;
put 'MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVv'@;
put 'cihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNs'@;
put 'b25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNb'@;
put 'U107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gTCgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0s'@;
put 'RS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7'@;
put 'djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9'@;
put 'LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8'@;
put 'Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4o'@;
put 'MTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWdu'@;
put 'KCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7'@;
put 'dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lm'@;
put 'KHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp'@;
put 'b24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRo'@;
put 'aXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1'@;
put 'cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEw'@;
put 'ODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFy'@;
put 'IHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sSWU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsUWU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1s'@;
put 'dD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLG90PTB8Sls3XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4x'@;
put 'MyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEz'@;
put 'LHJ0PTB8bmVbNF0sTHQ9ODE5MSZydCxRdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8bmVbNl0senQ9ODE5MSZMbix5bj1Mbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixGbj1Sbj4+PjEz'@;
put 'LG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKEllLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChJZSwkbikpK01hdGguaW11bChGZSxlbil8MCkp'@;
put 'PDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12'@;
put 'K01hdGguaW11bChJZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEllLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwo'@;
put 'WWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKFFlLGVuKXwwLHc9TWF0aC5pbXVsKFFlLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4'@;
put 'cj0oZmUrKHY9ditNYXRoLmltdWwoSWUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoUWUsZnQpfDAsdz13K01hdGguaW11bChRZSxm'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1h'@;
put 'dGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11'@;
put 'bChRZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFFlLFh0KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChJZSxMdCl8MCl8MCkr'@;
put 'KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEllLFF0KXwwKStNYXRoLmltdWwoRmUsTHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFF0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVl'@;
put 'LCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoUWUsTnQpfDAsdz13K01hdGguaW11bChRZSxtbil8MCx2PXYrTWF0aC5p'@;
put 'bXVsKGplLEx0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUXQpfDApK01hdGguaW11bChXZSxMdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFF0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoSWUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxZdCl8MCkrTWF0aC5pbXVs'@;
put 'KEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiks'@;
put 'dj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFF0KXwwKStNYXRo'@;
put 'LmltdWwoUWUsTHQpfDAsdz13K01hdGguaW11bChRZSxRdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoSWUsenQpfDAp'@;
put 'fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11'@;
put 'bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01h'@;
put 'dGguaW11bChQZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoYmUsTHQpfDAsdz13K01hdGguaW11bChiZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFFlLFl0KXwwLHY9ditNYXRoLmltdWwoamUsenQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChJZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKEllLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVu'@;
put 'KXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkr'@;
put 'TWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEx0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVGUsUXQpfDApK01hdGguaW11bChxZSxMdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFF0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11'@;
put 'bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoUWUsenQpfDAsdz13K01hdGguaW11bChRZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdl'@;
put 'LEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01h'@;
put 'dGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5p'@;
put 'bXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsbW4pfDAsdj12K01hdGguaW11bChVZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoaHQsTHQpfDAsdz13K01hdGguaW11bChodCxRdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxz'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoUWUsc24pfDAsdz13K01hdGguaW11bChRZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXww'@;
put 'O3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoSWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11'@;
put 'bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsTHQpfDAscD0ocD1wK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHpl'@;
put 'LEx0KXwwLHc9dytNYXRoLmltdWwoemUsUXQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUs'@;
put 'eW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoUWUsJHQpfDAsdz13K01hdGguaW11bChRZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwx'@;
put 'Myl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwo'@;
put 'UHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxtbil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxMdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFF0KXwwKStNYXRoLmltdWwoTXQsTHQpfDAsdz13K01hdGguaW11bChNdCxR'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXww'@;
put 'LHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDAp'@;
put 'K01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKFFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChR'@;
put 'ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxMdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KFB0LFF0KXwwKStNYXRoLmltdWwob24sTHQpfDAsdz13K01hdGguaW11bChvbixRdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2'@;
put 'PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkr'@;
put 'TWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEx0KSxwPShwPU1hdGguaW11bChVdCxRdCkpK01hdGguaW11bChibixMdCl8MCx3PU1hdGguaW11'@;
put 'bChibixRdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZu'@;
put 'KXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmlt'@;
put 'dWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERl'@;
put 'LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxu'@;
put 'KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01h'@;
put 'dGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYp'@;
put 'fDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAs'@;
put 'dz13K01hdGguaW11bChvbixGbil8MDt2YXIgSW89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDAp'@;
put 'KyhJbz4+PjI2KXwwLElvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu'@;
put 'aW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11'@;
put 'bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2'@;
put 'XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09SW8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24g'@;
put 'b2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhp'@;
put 'cy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxK'@;
put 'Lmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgSWU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSks'@;
put 'S2U9NjcxMDg4NjMmV2U7SWU9NjcxMDg4NjMmKEtlPUtlK0llfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09SWUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxl'@;
put 'bmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTty'@;
put 'ZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2'@;
put 'LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9'@;
put 'TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBJZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxRZT1JZSpL'@;
put 'ZS1GZSpZZTtZZT1JZSpZZStGZSpLZSxTW3hlK09lXT1qZSsoS2U9UWUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoUWU9ZGUqSWUtZmUqRmUsRmU9ZGUqRmUrZmUqSWUsSWU9UWUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNi'@;
put 'PWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFy'@;
put 'IHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisx'@;
put 'XS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0w'@;
put 'fGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0woMD09PXApLEwoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0'@;
put 'dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiks'@;
put 'ZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxJZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEos'@;
put 'dyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsSWUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qSWVbT2VdO2RlW09lXT1uZVtPZV0qSWVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1'@;
put 'Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUu'@;
put 'cHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53'@;
put 'b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBn'@;
put 'KSxMKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJl'@;
put 'dHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90'@;
put 'b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9'@;
put 'bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFy'@;
put 'IHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+'@;
put 'MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlm'@;
put 'KDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIEwoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0woIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhp'@;
put 'cy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRo'@;
put 'aXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2'@;
put 'YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3Ry'@;
put 'aXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUu'@;
put 'cHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0woIm51bWJl'@;
put 'ciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEwoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4o'@;
put 'Uyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5p'@;
put 'YWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gTCgibnVtYmVyIj09dHlwZW9mIGcpLEwoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNb'@;
put 'MF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVu'@;
put 'Z3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5w'@;
put 'cm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoTCgibnVtYmVyIj09dHlwZW9mIGcpLEwoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0x'@;
put 'LHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jk'@;
put 'c1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlz'@;
put 'dWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIg'@;
put 'dixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1Nd'@;
put 'PTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoTCgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kysp'@;
put 'Sj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNb'@;
put 'cC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53'@;
put 'b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0x'@;
put 'O3hlPj0wO3hlLS0pe3ZhciBJZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKEllPU1hdGgubWluKEllL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxJZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUllLS0sdi5uZWdh'@;
put 'dGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1JZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90'@;
put 'b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gTCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYo'@;
put 'dj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2'@;
put 'Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5n'@;
put 'dGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0p'@;
put 'KX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3Rv'@;
put 'dHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlz'@;
put 'LmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYu'@;
put 'bmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7TChnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0'@;
put 'dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0woZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0'@;
put 'cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZlKSxMKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRp'@;
put 'dmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUo'@;
put 'KTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxJZT0xOyEoQy53b3Jkc1swXSZJZSkmJnhlPDI2OysreGUsSWU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSks'@;
put 'cC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1'@;
put 'c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZl'@;
put 'KSxMKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0x'@;
put 'OyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZl'@;
put 'PjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChn'@;
put 'KSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0w'@;
put 'O0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYo'@;
put 'MD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMu'@;
put 'd29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7TCgibnVtYmVyIj09'@;
put 'dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNb'@;
put 'd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1sw'@;
put 'XX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEwoZzw9'@;
put 'NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0'@;
put 'aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aCly'@;
put 'ZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUu'@;
put 'cHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlw'@;
put 'ZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBMKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEwoMD09PXRoaXMubmVnYXRp'@;
put 'dmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNv'@;
put 'bnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBMKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp'@;
put 'biByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVk'@;
put 'SUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUu'@;
put 'cmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f'@;
put 'dmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRJbnZtIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFy'@;
put 'IGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnAp'@;
put 'LHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0Iiwi'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBE'@;
put 'KCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlz'@;
put 'LnByaW1lPUN9ZWxzZSBMKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhp'@;
put 'cy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3Vibigx'@;
put 'KS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlz'@;
put 'Lm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6'@;
put 'Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAs'@;
put 'Qyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1n'@;
put 'LndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRz'@;
put 'W3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3Ro'@;
put 'Kz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tn'@;
put 'Lmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29y'@;
put 'ZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTky'@;
put 'Ij09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0woMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcG9zaXRpdmVzIiksTChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0woMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksTChnLnJlZCYm'@;
put 'Zy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMp'@;
put 'fSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21w'@;
put 'KHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5'@;
put 'cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9'@;
put 'Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRo'@;
put 'aXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxn'@;
put 'LmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihMKEMlMj09MSksMz09PUMpe3Zh'@;
put 'ciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0woIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVk'@;
put 'KHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93'@;
put 'KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksSWU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1JZS5jbXAodyk7KXtmb3IodmFyIE9lPUllLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0woamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcg'@;
put 'RSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksSWU9SWUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMu'@;
put 'bmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBB'@;
put 'cnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7'@;
put 'dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10p'@;
put 'LEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTty'@;
put 'ZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0'@;
put 'aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwo'@;
put 'Qyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAu'@;
put 'aWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp'@;
put 'cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9'@;
put 'LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sNjk0ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU87ei52ZXJzaW9uPVIoODU5'@;
put 'NykuaTgsei51dGlscz1SKDk1Myksei5yYW5kPVIoOTkzMSksei5jdXJ2ZT1SKDgyNTQpLHouY3VydmVzPVIoNTQyNyksei5lYz1SKDc5NTQpLHouZWRkc2E9Uig1OTgwKX0sNDkxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MyksTD1LLmdldE5BRixrPUsu'@;
put 'Z2V0SlNGLEU9Sy5hc3NlcnQ7ZnVuY3Rpb24gaihCLFkpe3RoaXMudHlwZT1CLHRoaXMucD1uZXcgeihZLnAsMTYpLHRoaXMucmVkPVkucHJpbWU/ei5yZWQoWS5wcmltZSk6ei5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyB6KDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgeigx'@;
put 'KS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IHooMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1ZLm4mJm5ldyB6KFkubiwxNiksdGhpcy5nPVkuZyYmdGhpcy5wb2ludEZyb21KU09OKFkuZyxZLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBB'@;
put 'cnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgWD10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshWHx8WC5jbXBuKDEwMCk+MD90aGlzLnJlZE49'@;
put 'bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBWKEIsWSl7dGhpcy5jdXJ2ZT1CLHRoaXMudHlwZT1ZLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1NLmV4cG9ydHM9aixqLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigp'@;
put 'e3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LGoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sai5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKEIsWSl7RShCLnByZWNvbXB1dGVkKTt2YXIg'@;
put 'WD1CLl9nZXREb3VibGVzKCksVT1MKFksMSx0aGlzLl9iaXRMZW5ndGgpLHE9KDE8PFguc3RlcCsxKS0oWC5zdGVwJTI9PTA/MjoxKTtxLz0zO3ZhciBlZSx0ZSxvZT1bXTtmb3IoZWU9MDtlZTxVLmxlbmd0aDtlZSs9WC5zdGVwKXt0ZT0wO2Zvcih2YXIgc2U9ZWUrWC5zdGVwLTE7c2U+PWVl'@;
put 'O3NlLS0pdGU9KHRlPDwxKStVW3NlXTtvZS5wdXNoKHRlKX1mb3IodmFyIGhlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx1ZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksY2U9cTtjZT4wO2NlLS0pe2ZvcihlZT0wO2VlPG9lLmxlbmd0aDtlZSsrKSh0ZT1vZVtlZV0pPT09Y2U/'@;
put 'dWU9dWUubWl4ZWRBZGQoWC5wb2ludHNbZWVdKTp0ZT09PS1jZSYmKHVlPXVlLm1peGVkQWRkKFgucG9pbnRzW2VlXS5uZWcoKSkpO2hlPWhlLmFkZCh1ZSl9cmV0dXJuIGhlLnRvUCgpfSxqLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbihCLFkpe2Zvcih2YXIgWD00LFU9Qi5fZ2V0TkFG'@;
put 'UG9pbnRzKFgpLHE9VS5wb2ludHMsZWU9TChZLFg9VS53bmQsdGhpcy5fYml0TGVuZ3RoKSx0ZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksb2U9ZWUubGVuZ3RoLTE7b2U+PTA7b2UtLSl7Zm9yKHZhciBzZT0wO29lPj0wJiYwPT09ZWVbb2VdO29lLS0pc2UrKztpZihvZT49MCYmc2Ur'@;
put 'Kyx0ZT10ZS5kYmxwKHNlKSxvZTwwKWJyZWFrO3ZhciBoZT1lZVtvZV07RSgwIT09aGUpLHRlPSJhZmZpbmUiPT09Qi50eXBlP3RlLm1peGVkQWRkKGhlPjA/cVtoZS0xPj4xXTpxWy1oZS0xPj4xXS5uZWcoKSk6dGUuYWRkKGhlPjA/cVtoZS0xPj4xXTpxWy1oZS0xPj4xXS5uZWcoKSl9cmV0'@;
put 'dXJuImFmZmluZSI9PT1CLnR5cGU/dGUudG9QKCk6dGV9LGoucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKEIsWSxYLFUscSl7dmFyIGVlLHRlLG9lLHNlPXRoaXMuX3duYWZUMSxoZT10aGlzLl93bmFmVDIsdWU9dGhpcy5fd25hZlQzLGNlPTA7Zm9yKGVlPTA7ZWU8VTtlZSsrKXt2'@;
put 'YXIgRz0ob2U9WVtlZV0pLl9nZXROQUZQb2ludHMoQik7c2VbZWVdPUcud25kLGhlW2VlXT1HLnBvaW50c31mb3IoZWU9VS0xO2VlPj0xO2VlLT0yKXt2YXIgYj1lZS0xLEQ9ZWU7aWYoMT09PXNlW2JdJiYxPT09c2VbRF0pe3ZhciBIPVtZW2JdLG51bGwsbnVsbCxZW0RdXTswPT09WVtiXS55'@;
put 'LmNtcChZW0RdLnkpPyhIWzFdPVlbYl0uYWRkKFlbRF0pLEhbMl09WVtiXS50b0ooKS5taXhlZEFkZChZW0RdLm5lZygpKSk6MD09PVlbYl0ueS5jbXAoWVtEXS55LnJlZE5lZygpKT8oSFsxXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlbRF0pLEhbMl09WVtiXS5hZGQoWVtEXS5uZWcoKSkpOihI'@;
put 'WzFdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXSksSFsyXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlbRF0ubmVnKCkpKTt2YXIgTj1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxnPWsoWFtiXSxYW0RdKTtmb3IoY2U9TWF0aC5tYXgoZ1swXS5sZW5ndGgsY2UpLHVlW2JdPW5ldyBBcnJheShjZSks'@;
put 'dWVbRF09bmV3IEFycmF5KGNlKSx0ZT0wO3RlPGNlO3RlKyspdWVbYl1bdGVdPU5bMyooMSsoMHxnWzBdW3RlXSkpKygxKygwfGdbMV1bdGVdKSldLHVlW0RdW3RlXT0wLGhlW2JdPUh9ZWxzZSB1ZVtiXT1MKFhbYl0sc2VbYl0sdGhpcy5fYml0TGVuZ3RoKSx1ZVtEXT1MKFhbRF0sc2VbRF0s'@;
put 'dGhpcy5fYml0TGVuZ3RoKSxjZT1NYXRoLm1heCh1ZVtiXS5sZW5ndGgsY2UpLGNlPU1hdGgubWF4KHVlW0RdLmxlbmd0aCxjZSl9dmFyIHY9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHA9dGhpcy5fd25hZlQ0O2ZvcihlZT1jZTtlZT49MDtlZS0tKXtmb3IodmFyIHc9MDtlZT49MDsp'@;
put 'e3ZhciBKPSEwO2Zvcih0ZT0wO3RlPFU7dGUrKylwW3RlXT0wfHVlW3RlXVtlZV0sMCE9PXBbdGVdJiYoSj0hMSk7aWYoIUopYnJlYWs7dysrLGVlLS19aWYoZWU+PTAmJncrKyx2PXYuZGJscCh3KSxlZTwwKWJyZWFrO2Zvcih0ZT0wO3RlPFU7dGUrKyl7dmFyIG5lPXBbdGVdOzAhPT1uZSYm'@;
put 'KG5lPjA/b2U9aGVbdGVdW25lLTE+PjFdOm5lPDAmJihvZT1oZVt0ZV1bLW5lLTE+PjFdLm5lZygpKSx2PSJhZmZpbmUiPT09b2UudHlwZT92Lm1peGVkQWRkKG9lKTp2LmFkZChvZSkpfX1mb3IoZWU9MDtlZTxVO2VlKyspaGVbZWVdPW51bGw7cmV0dXJuIHE/djp2LnRvUCgpfSxqLkJhc2VQ'@;
put 'b2ludD1WLFYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sVi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sai5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rp'@;
put 'b24oQixZKXtCPUsudG9BcnJheShCLFkpO3ZhciBYPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1CWzBdfHw2PT09QlswXXx8Nz09PUJbMF0pJiZCLmxlbmd0aC0xPT0yKlgpcmV0dXJuIDY9PT1CWzBdP0UoQltCLmxlbmd0aC0xXSUyPT0wKTo3PT09QlswXSYmRShCW0IubGVuZ3RoLTFd'@;
put 'JTI9PTEpLHRoaXMucG9pbnQoQi5zbGljZSgxLDErWCksQi5zbGljZSgxK1gsMSsyKlgpKTtpZigoMj09PUJbMF18fDM9PT1CWzBdKSYmQi5sZW5ndGgtMT09PVgpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChCLnNsaWNlKDEsMStYKSwzPT09QlswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3du'@;
put 'IHBvaW50IGZvcm1hdCIpfSxWLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLmVuY29kZShCLCEwKX0sVi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihCKXt2YXIgWT10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLFg9dGhpcy5nZXRYKCkudG9B'@;
put 'cnJheSgiYmUiLFkpO3JldHVybiBCP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChYKTpbNF0uY29uY2F0KFgsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLFkpKX0sVi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIEsuZW5jb2RlKHRoaXMuX2VuY29kZShZ'@;
put 'KSxCKX0sVi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihCKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBZPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gWS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLFkuZG91Ymxlcz10aGlzLl9n'@;
put 'ZXREb3VibGVzKDQsQiksWS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPVksdGhpc30sVi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oQil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIFk9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVy'@;
put 'biEhWSYmWS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKEIuYml0TGVuZ3RoKCkrMSkvWS5zdGVwKX0sVi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oQixZKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0'@;
put 'ZWQuZG91Ymxlcztmb3IodmFyIFg9W3RoaXNdLFU9dGhpcyxxPTA7cTxZO3ErPUIpe2Zvcih2YXIgZWU9MDtlZTxCO2VlKyspVT1VLmRibCgpO1gucHVzaChVKX1yZXR1cm57c3RlcDpCLHBvaW50czpYfX0sVi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihCKXtpZih0aGlzLnBy'@;
put 'ZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBZPVt0aGlzXSxYPSgxPDxCKS0xLFU9MT09PVg/bnVsbDp0aGlzLmRibCgpLHE9MTtxPFg7cSsrKVlbcV09WVtxLTFdLmFkZChVKTtyZXR1cm57d25kOkIscG9pbnRzOll9'@;
put 'fSxWLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxWLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEIpe2Zvcih2YXIgWT10aGlzLFg9MDtYPEI7WCsrKVk9WS5kYmwoKTtyZXR1cm4gWX19LDExMzg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1Myks'@;
put 'Sz1SKDM3ODUpLEw9Uig1NzE3KSxrPVIoNDkxOCksRT16LmFzc2VydDtmdW5jdGlvbiBqKEIpe3RoaXMudHdpc3RlZD0xIT0oMHxCLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Qi5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsay5jYWxsKHRoaXMsImVkd2FyZHMiLEIp'@;
put 'LHRoaXMuYT1uZXcgSyhCLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBLKEIuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgSyhCLmQsMTYpLnRvUmVkKHRoaXMucmVk'@;
put 'KSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxFKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxCLmMpfWZ1bmN0aW9uIFYoQixZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsQiwicHJvamVjdGl2ZSIpLG51bGw9'@;
put 'PT1ZJiZudWxsPT09WCYmbnVsbD09PVU/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgSyhZLDE2KSx0aGlzLnk9bmV3IEsoWCwx'@;
put 'NiksdGhpcy56PVU/bmV3IEsoVSwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXEmJm5ldyBLKHEsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlz'@;
put 'LnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlz'@;
put 'LnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfUwoaixrKSxNLmV4cG9ydHM9aixqLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5tT25lQT9CLnJlZE5lZygp'@;
put 'OnRoaXMuYS5yZWRNdWwoQil9LGoucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLm9uZUM/Qjp0aGlzLmMucmVkTXVsKEIpfSxqLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIHRoaXMucG9pbnQoQixZLFgsVSl9LGoucHJvdG90eXBlLnBv'@;
put 'aW50RnJvbVg9ZnVuY3Rpb24oQixZKXsoQj1uZXcgSyhCLDE2KSkucmVkfHwoQj1CLnRvUmVkKHRoaXMucmVkKSk7dmFyIFg9Qi5yZWRTcXIoKSxVPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoWCkpLHE9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVs'@;
put 'KFgpKSxlZT1VLnJlZE11bChxLnJlZEludm0oKSksdGU9ZWUucmVkU3FydCgpO2lmKDAhPT10ZS5yZWRTcXIoKS5yZWRTdWIoZWUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBvZT10ZS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oWSYmIW9l'@;
put 'fHwhWSYmb2UpJiYodGU9dGUucmVkTmVnKCkpLHRoaXMucG9pbnQoQix0ZSl9LGoucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oQixZKXsoQj1uZXcgSyhCLDE2KSkucmVkfHwoQj1CLnRvUmVkKHRoaXMucmVkKSk7dmFyIFg9Qi5yZWRTcXIoKSxVPVgucmVkU3ViKHRoaXMuYzIpLHE9'@;
put 'WC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksZWU9VS5yZWRNdWwocS5yZWRJbnZtKCkpO2lmKDA9PT1lZS5jbXAodGhpcy56ZXJvKSl7aWYoWSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8s'@;
put 'Qil9dmFyIHRlPWVlLnJlZFNxcnQoKTtpZigwIT09dGUucmVkU3FyKCkucmVkU3ViKGVlKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGUuZnJvbVJlZCgpLmlzT2RkKCkhPT1ZJiYodGU9dGUucmVkTmVnKCkpLHRoaXMucG9pbnQodGUs'@;
put 'Qil9LGoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKEIpe2lmKEIuaXNJbmZpbml0eSgpKXJldHVybiEwO0Iubm9ybWFsaXplKCk7dmFyIFk9Qi54LnJlZFNxcigpLFg9Qi55LnJlZFNxcigpLFU9WS5yZWRNdWwodGhpcy5hKS5yZWRBZGQoWCkscT10aGlzLmMyLnJlZE11bCh0aGlzLm9u'@;
put 'ZS5yZWRBZGQodGhpcy5kLnJlZE11bChZKS5yZWRNdWwoWCkpKTtyZXR1cm4gMD09PVUuY21wKHEpfSxMKFYsay5CYXNlUG9pbnQpLGoucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oQil7cmV0dXJuIFYuZnJvbUpTT04odGhpcyxCKX0sai5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rp'@;
put 'b24oQixZLFgsVSl7cmV0dXJuIG5ldyBWKHRoaXMsQixZLFgsVSl9LFYuZnJvbUpTT049ZnVuY3Rpb24oQixZKXtyZXR1cm4gbmV3IFYoQixZWzBdLFlbMV0sWVsyXSl9LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJ'@;
put 'bmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sVi5wcm90b3R5cGUuaXNJbmZpbml0eT1m'@;
put 'dW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxWLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIEI9dGhpcy54LnJlZFNxcigpLFk9dGhpcy55'@;
put 'LnJlZFNxcigpLFg9dGhpcy56LnJlZFNxcigpO1g9WC5yZWRJQWRkKFgpO3ZhciBVPXRoaXMuY3VydmUuX211bEEoQikscT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFkpLGVlPVUucmVkQWRkKFkpLHRlPWVlLnJlZFN1YihYKSxvZT1VLnJlZFN1'@;
put 'YihZKSxzZT1xLnJlZE11bCh0ZSksaGU9ZWUucmVkTXVsKG9lKSx1ZT1xLnJlZE11bChvZSksY2U9dGUucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzZSxoZSxjZSx1ZSl9LFYucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0ZT10aGlz'@;
put 'LngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksb2U9dGhpcy54LnJlZFNxcigpLHNlPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBoZT0oVT10aGlzLmN1cnZlLl9tdWxBKG9lKSkucmVkQWRkKHNlKTt0aGlzLnpPbmU/KEI9dGUucmVkU3ViKG9lKS5yZWRTdWIo'@;
put 'c2UpLnJlZE11bChoZS5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxZPWhlLnJlZE11bChVLnJlZFN1YihzZSkpLFg9aGUucmVkU3FyKCkucmVkU3ViKGhlKS5yZWRTdWIoaGUpKToocT10aGlzLnoucmVkU3FyKCksZWU9aGUucmVkU3ViKHEpLnJlZElTdWIocSksQj10ZS5yZWRTdWIob2UpLnJl'@;
put 'ZElTdWIoc2UpLnJlZE11bChlZSksWT1oZS5yZWRNdWwoVS5yZWRTdWIoc2UpKSxYPWhlLnJlZE11bChlZSkpfWVsc2UgVT1vZS5yZWRBZGQoc2UpLHE9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLGVlPVUucmVkU3ViKHEpLnJlZFN1YihxKSxCPXRoaXMuY3VydmUuX211bEMo'@;
put 'dGUucmVkSVN1YihVKSkucmVkTXVsKGVlKSxZPXRoaXMuY3VydmUuX211bEMoVSkucmVkTXVsKG9lLnJlZElTdWIoc2UpKSxYPVUucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChCLFksWCl9LFYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5p'@;
put 'dHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxWLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKEIpe3ZhciBZPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoQi55LnJlZFN1YihCLngpKSxYPXRoaXMueS5yZWRBZGQodGhp'@;
put 'cy54KS5yZWRNdWwoQi55LnJlZEFkZChCLngpKSxVPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKEIudCkscT10aGlzLnoucmVkTXVsKEIuei5yZWRBZGQoQi56KSksZWU9WC5yZWRTdWIoWSksdGU9cS5yZWRTdWIoVSksb2U9cS5yZWRBZGQoVSksc2U9WC5yZWRBZGQoWSks'@;
put 'aGU9ZWUucmVkTXVsKHRlKSx1ZT1vZS5yZWRNdWwoc2UpLGNlPWVlLnJlZE11bChzZSksRz10ZS5yZWRNdWwob2UpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGhlLHVlLEcsY2UpfSxWLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihCKXt2YXIgWSxYLFU9dGhpcy56LnJlZE11bChCLnop'@;
put 'LHE9VS5yZWRTcXIoKSxlZT10aGlzLngucmVkTXVsKEIueCksdGU9dGhpcy55LnJlZE11bChCLnkpLG9lPXRoaXMuY3VydmUuZC5yZWRNdWwoZWUpLnJlZE11bCh0ZSksc2U9cS5yZWRTdWIob2UpLGhlPXEucmVkQWRkKG9lKSx1ZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKEIueC5y'@;
put 'ZWRBZGQoQi55KSkucmVkSVN1YihlZSkucmVkSVN1Yih0ZSksY2U9VS5yZWRNdWwoc2UpLnJlZE11bCh1ZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8oWT1VLnJlZE11bChoZSkucmVkTXVsKHRlLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGVlKSkpLFg9c2UucmVkTXVsKGhlKSk6KFk9'@;
put 'VS5yZWRNdWwoaGUpLnJlZE11bCh0ZS5yZWRTdWIoZWUpKSxYPXRoaXMuY3VydmUuX211bEMoc2UpLnJlZE11bChoZSkpLHRoaXMuY3VydmUucG9pbnQoY2UsWSxYKX0sVi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9COkIuaXNJbmZpbml0eSgp'@;
put 'P3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoQik6dGhpcy5fcHJvakFkZChCKX0sVi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKEIpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsQik6dGhpcy5jdXJ2ZS5fd25hZk11'@;
put 'bCh0aGlzLEIpfSxWLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oQixZLFgpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsWV0sW0IsWF0sMiwhMSl9LFYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oQixZLFgpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRk'@;
put 'KDEsW3RoaXMsWV0sW0IsWF0sMiwhMCl9LFYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgQj10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bChCKSx0aGlzLnk9dGhpcy55LnJlZE11bChCKSx0aGlz'@;
put 'LnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bChCKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxWLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMu'@;
put 'dC5yZWROZWcoKSl9LFYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sVi5wcm90b3R5cGUu'@;
put 'ZXE9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXM9PT1CfHwwPT09dGhpcy5nZXRYKCkuY21wKEIuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcChCLmdldFkoKSl9LFYucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihCKXt2YXIgWT1CLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhp'@;
put 'cy56KTtpZigwPT09dGhpcy54LmNtcChZKSlyZXR1cm4hMDtmb3IodmFyIFg9Qi5jbG9uZSgpLFU9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKFguaWFkZCh0aGlzLmN1cnZlLm4pLFguY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoWS5yZWRJQWRkKFUpLDA9'@;
put 'PT10aGlzLnguY21wKFkpKXJldHVybiEwfX0sVi5wcm90b3R5cGUudG9QPVYucHJvdG90eXBlLm5vcm1hbGl6ZSxWLnByb3RvdHlwZS5taXhlZEFkZD1WLnByb3RvdHlwZS5hZGR9LDgyNTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1PO3ouYmFzZT1SKDQ5MTgpLHouc2hvcnQ9Uig2'@;
put 'NjczKSx6Lm1vbnQ9UigyODgxKSx6LmVkd2FyZHM9UigxMTM4KX0sMjg4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDU3MTcpLEw9Uig0OTE4KSxrPVIoOTUzKTtmdW5jdGlvbiBFKFYpe0wuY2FsbCh0aGlzLCJtb250IixWKSx0aGlzLmE9bmV3IHooVi5hLDE2'@;
put 'KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyB6KFYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IHooNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgeigyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJl'@;
put 'ZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGooVixCLFkpe0wuQmFzZVBvaW50LmNhbGwodGhpcyxWLCJwcm9qZWN0aXZlIiksbnVsbD09PUImJm51bGw9PT1ZPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgeihCLDE2KSx0aGlzLno9'@;
put 'bmV3IHooWSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1LKEUsTCksTS5leHBvcnRzPUUsRS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oVil7'@;
put 'dmFyIEI9Vi5ub3JtYWxpemUoKS54LFk9Qi5yZWRTcXIoKSxYPVkucmVkTXVsKEIpLnJlZEFkZChZLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoQik7cmV0dXJuIDA9PT1YLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoWCl9LEsoaixMLkJhc2VQb2ludCksRS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9'@;
put 'ZnVuY3Rpb24oVixCKXtyZXR1cm4gdGhpcy5wb2ludChrLnRvQXJyYXkoVixCKSwxKX0sRS5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oVixCKXtyZXR1cm4gbmV3IGoodGhpcyxWLEIpfSxFLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFYpe3JldHVybiBqLmZyb21KU09OKHRo'@;
put 'aXMsVil9LGoucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGoucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxqLmZyb21KU09OPWZ1bmN0aW9uKFYsQil7cmV0dXJu'@;
put 'IG5ldyBqKFYsQlswXSxCWzFdfHxWLm9uZSl9LGoucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlz'@;
put 'LnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sai5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LGoucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciBWPXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxCPXRoaXMu'@;
put 'eC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxZPVYucmVkU3ViKEIpLFg9Vi5yZWRNdWwoQiksVT1ZLnJlZE11bChCLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoWSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChYLFUpfSxqLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxqLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKFYsQil7dmFyIFk9dGhpcy54LnJlZEFkZCh0aGlzLnopLFg9dGhpcy54LnJlZFN1Yih0aGlzLnopLFU9Vi54LnJlZEFkZChWLnopLHE9Vi54LnJlZFN1YihW'@;
put 'LnopLnJlZE11bChZKSxlZT1VLnJlZE11bChYKSx0ZT1CLnoucmVkTXVsKHEucmVkQWRkKGVlKS5yZWRTcXIoKSksb2U9Qi54LnJlZE11bChxLnJlZElTdWIoZWUpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0ZSxvZSl9LGoucHJvdG90eXBlLm11bD1mdW5jdGlvbihWKXtm'@;
put 'b3IodmFyIEI9Vi5jbG9uZSgpLFk9dGhpcyxYPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxVPVtdOzAhPT1CLmNtcG4oMCk7Qi5pdXNocm4oMSkpVS5wdXNoKEIuYW5kbG4oMSkpO2Zvcih2YXIgcT1VLmxlbmd0aC0xO3E+PTA7cS0tKTA9PT1VW3FdPyhZPVkuZGlmZkFkZChYLHRoaXMp'@;
put 'LFg9WC5kYmwoKSk6KFg9WS5kaWZmQWRkKFgsdGhpcyksWT1ZLmRibCgpKTtyZXR1cm4gWH0sai5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sai5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlv'@;
put 'bigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGoucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFYpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKFYuZ2V0WCgpKX0sai5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxqLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDY2NzM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1SKDk1MyksSz1SKDM3ODUpLEw9Uig1NzE3KSxrPVIoNDkxOCksRT16LmFzc2VydDtmdW5jdGlvbiBqKFkpe2suY2FsbCh0aGlzLCJzaG9ydCIsWSksdGhpcy5hPW5ldyBLKFkuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSyhZLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0'@;
put 'aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKFkpLHRoaXMuX2Vu'@;
put 'ZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIFYoWSxYLFUscSl7ay5CYXNlUG9pbnQuY2FsbCh0aGlzLFksImFmZmluZSIpLG51bGw9PT1YJiZudWxsPT09VT8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0'@;
put 'aGlzLng9bmV3IEsoWCwxNiksdGhpcy55PW5ldyBLKFUsMTYpLHEmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJl'@;
put 'ZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gQihZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsWSwiamFjb2JpYW4iKSxudWxsPT09WCYmbnVsbD09PVUmJm51bGw9PT1xPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhp'@;
put 'cy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgSygwKSk6KHRoaXMueD1uZXcgSyhYLDE2KSx0aGlzLnk9bmV3IEsoVSwxNiksdGhpcy56PW5ldyBLKHEsMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9'@;
put 'dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9TChqLGspLE0uZXhwb3J0cz1qLGoucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVu'@;
put 'Y3Rpb24oWSl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIFgsVTtpZihZLmJldGEpWD1uZXcgSyhZLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBxPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO1g9KFg9cVswXS5jbXAo'@;
put 'cVsxXSk8MD9xWzBdOnFbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihZLmxhbWJkYSlVPW5ldyBLKFkubGFtYmRhLDE2KTtlbHNle3ZhciBlZT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChlZVswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKFgpKT9VPWVlWzBdOkUo'@;
put 'MD09PXRoaXMuZy5tdWwoVT1lZVsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKFgpKSl9cmV0dXJue2JldGE6WCxsYW1iZGE6VSxiYXNpczpZLmJhc2lzP1kuYmFzaXMubWFwKGZ1bmN0aW9uKHRlKXtyZXR1cm57YTpuZXcgSyh0ZS5hLDE2KSxiOm5ldyBLKHRlLmIsMTYpfX0pOnRoaXMuX2dl'@;
put 'dEVuZG9CYXNpcyhVKX19fSxqLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKFkpe3ZhciBYPVk9PT10aGlzLnA/dGhpcy5yZWQ6Sy5tb250KFkpLFU9bmV3IEsoMikudG9SZWQoWCkucmVkSW52bSgpLHE9VS5yZWROZWcoKSxlZT1uZXcgSygzKS50b1JlZChYKS5yZWROZWcoKS5y'@;
put 'ZWRTcXJ0KCkucmVkTXVsKFUpO3JldHVybltxLnJlZEFkZChlZSkuZnJvbVJlZCgpLHEucmVkU3ViKGVlKS5mcm9tUmVkKCldfSxqLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWCxVLHEsZWUsdGUsb2Usc2UsaGUsdWUsY2U9dGhpcy5uLnVzaHJuKE1hdGgu'@;
put 'Zmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxHPVksYj10aGlzLm4uY2xvbmUoKSxEPW5ldyBLKDEpLEg9bmV3IEsoMCksTj1uZXcgSygwKSxnPW5ldyBLKDEpLEM9MDswIT09Ry5jbXBuKDApOyl7dmFyIFM9Yi5kaXYoRyk7aGU9Yi5zdWIoUy5tdWwoRykpLHVlPU4uc3ViKFMubXVsKEQp'@;
put 'KTt2YXIgdj1nLnN1YihTLm11bChIKSk7aWYoIXEmJmhlLmNtcChjZSk8MClYPXNlLm5lZygpLFU9RCxxPWhlLm5lZygpLGVlPXVlO2Vsc2UgaWYocSYmMj09KytDKWJyZWFrO3NlPWhlLGI9RyxHPWhlLE49RCxEPXVlLGc9SCxIPXZ9dGU9aGUubmVnKCksb2U9dWU7dmFyIHA9cS5zcXIoKS5h'@;
put 'ZGQoZWUuc3FyKCkpO3JldHVybiB0ZS5zcXIoKS5hZGQob2Uuc3FyKCkpLmNtcChwKT49MCYmKHRlPVgsb2U9VSkscS5uZWdhdGl2ZSYmKHE9cS5uZWcoKSxlZT1lZS5uZWcoKSksdGUubmVnYXRpdmUmJih0ZT10ZS5uZWcoKSxvZT1vZS5uZWcoKSksW3thOnEsYjplZX0se2E6dGUsYjpvZX1d'@;
put 'fSxqLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKFkpe3ZhciBYPXRoaXMuZW5kby5iYXNpcyxVPVhbMF0scT1YWzFdLGVlPXEuYi5tdWwoWSkuZGl2Um91bmQodGhpcy5uKSx0ZT1VLmIubmVnKCkubXVsKFkpLmRpdlJvdW5kKHRoaXMubiksb2U9ZWUubXVsKFUuYSksc2U9dGUubXVs'@;
put 'KHEuYSksaGU9ZWUubXVsKFUuYiksdWU9dGUubXVsKHEuYik7cmV0dXJue2sxOlkuc3ViKG9lKS5zdWIoc2UpLGsyOmhlLmFkZCh1ZSkubmVnKCl9fSxqLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFksWCl7KFk9bmV3IEsoWSwxNikpLnJlZHx8KFk9WS50b1JlZCh0aGlzLnJlZCkp'@;
put 'O3ZhciBVPVkucmVkU3FyKCkucmVkTXVsKFkpLnJlZElBZGQoWS5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLHE9VS5yZWRTcXJ0KCk7aWYoMCE9PXEucmVkU3FyKCkucmVkU3ViKFUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBl'@;
put 'ZT1xLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihYJiYhZWV8fCFYJiZlZSkmJihxPXEucmVkTmVnKCkpLHRoaXMucG9pbnQoWSxxKX0sai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oWSl7aWYoWS5pbmYpcmV0dXJuITA7dmFyIFg9WS54LFU9WS55LHE9dGhpcy5hLnJlZE11bChYKSxl'@;
put 'ZT1YLnJlZFNxcigpLnJlZE11bChYKS5yZWRJQWRkKHEpLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PVUucmVkU3FyKCkucmVkSVN1YihlZSkuY21wbigwKX0sai5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKFksWCxVKXtmb3IodmFyIHE9dGhpcy5fZW5kb1duYWZUMSxl'@;
put 'ZT10aGlzLl9lbmRvV25hZlQyLHRlPTA7dGU8WS5sZW5ndGg7dGUrKyl7dmFyIG9lPXRoaXMuX2VuZG9TcGxpdChYW3RlXSksc2U9WVt0ZV0saGU9c2UuX2dldEJldGEoKTtvZS5rMS5uZWdhdGl2ZSYmKG9lLmsxLmluZWcoKSxzZT1zZS5uZWcoITApKSxvZS5rMi5uZWdhdGl2ZSYmKG9lLmsy'@;
put 'LmluZWcoKSxoZT1oZS5uZWcoITApKSxxWzIqdGVdPXNlLHFbMip0ZSsxXT1oZSxlZVsyKnRlXT1vZS5rMSxlZVsyKnRlKzFdPW9lLmsyfWZvcih2YXIgdWU9dGhpcy5fd25hZk11bEFkZCgxLHEsZWUsMip0ZSxVKSxjZT0wO2NlPDIqdGU7Y2UrKylxW2NlXT1udWxsLGVlW2NlXT1udWxsO3Jl'@;
put 'dHVybiB1ZX0sTChWLGsuQmFzZVBvaW50KSxqLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIG5ldyBWKHRoaXMsWSxYLFUpfSxqLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFksWCl7cmV0dXJuIFYuZnJvbUpTT04odGhpcyxZLFgpfSxWLnByb3RvdHlw'@;
put 'ZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIFk9dGhpcy5wcmVjb21wdXRlZDtpZihZJiZZLmJldGEpcmV0dXJuIFkuYmV0YTt2YXIgWD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoWSl7'@;
put 'dmFyIFU9dGhpcy5jdXJ2ZSxxPWZ1bmN0aW9uKGVlKXtyZXR1cm4gVS5wb2ludChlZS54LnJlZE11bChVLmVuZG8uYmV0YSksZWUueSl9O1kuYmV0YT1YLFgucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBvaW50czpZLm5hZi5wb2ludHMubWFwKHEp'@;
put 'fSxkb3VibGVzOlkuZG91YmxlcyYme3N0ZXA6WS5kb3VibGVzLnN0ZXAscG9pbnRzOlkuZG91Ymxlcy5wb2ludHMubWFwKHEpfX19cmV0dXJuIFh9fSxWLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNv'@;
put 'bXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5w'@;
put 'cmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxWLmZyb21KU09OPWZ1bmN0aW9uKFksWCxVKXsic3RyaW5nIj09dHlwZW9mIFgmJihYPUpTT04ucGFyc2UoWCkpO3ZhciBxPVkucG9pbnQoWFsw'@;
put 'XSxYWzFdLFUpO2lmKCFYWzJdKXJldHVybiBxO2Z1bmN0aW9uIGVlKG9lKXtyZXR1cm4gWS5wb2ludChvZVswXSxvZVsxXSxVKX12YXIgdGU9WFsyXTtyZXR1cm4gcS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6dGUuZG91YmxlcyYme3N0ZXA6dGUuZG91Ymxlcy5zdGVwLHBvaW50'@;
put 'czpbcV0uY29uY2F0KHRlLmRvdWJsZXMucG9pbnRzLm1hcChlZSkpfSxuYWY6dGUubmFmJiZ7d25kOnRlLm5hZi53bmQscG9pbnRzOltxXS5jb25jYXQodGUubmFmLnBvaW50cy5tYXAoZWUpKX19LHF9LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmlu'@;
put 'aXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sVi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'LmluZn0sVi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFkpe2lmKHRoaXMuaW5mKXJldHVybiBZO2lmKFkuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoWSkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShZKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lm'@;
put 'KDA9PT10aGlzLnguY21wKFkueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgWD10aGlzLnkucmVkU3ViKFkueSk7MCE9PVguY21wbigwKSYmKFg9WC5yZWRNdWwodGhpcy54LnJlZFN1YihZLngpLnJlZEludm0oKSkpO3ZhciBVPVgucmVkU3FyKCkucmVkSVN1Yih0'@;
put 'aGlzLngpLnJlZElTdWIoWS54KSxxPVgucmVkTXVsKHRoaXMueC5yZWRTdWIoVSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLHEpfSxWLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgWT10aGlzLnkucmVkQWRk'@;
put 'KHRoaXMueSk7aWYoMD09PVkuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBYPXRoaXMuY3VydmUuYSxVPXRoaXMueC5yZWRTcXIoKSxxPVkucmVkSW52bSgpLGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSkucmVkSUFkZChYKS5yZWRNdWwocSksdGU9ZWUu'@;
put 'cmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLG9lPWVlLnJlZE11bCh0aGlzLngucmVkU3ViKHRlKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRlLG9lKX0sVi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJv'@;
put 'bVJlZCgpfSxWLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LFYucHJvdG90eXBlLm11bD1mdW5jdGlvbihZKXtyZXR1cm4gWT1uZXcgSyhZLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoWSk/dGhpcy5jdXJ2ZS5f'@;
put 'Zml4ZWROYWZNdWwodGhpcyxZKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtZXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLFkpfSxWLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe3ZhciBxPVt0aGlzLFhdLGVlPVtZLFVdO3Jl'@;
put 'dHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQocSxlZSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLHEsZWUsMil9LFYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe3ZhciBxPVt0aGlzLFhdLGVlPVtZLFVdO3JldHVybiB0aGlzLmN1cnZl'@;
put 'LmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQocSxlZSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLHEsZWUsMiwhMCl9LFYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFkpe3JldHVybiB0aGlzPT09WXx8dGhpcy5pbmY9PT1ZLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNt'@;
put 'cChZLngpJiYwPT09dGhpcy55LmNtcChZLnkpKX0sVi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKFkpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBYPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoWSYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIFU9dGhpcy5w'@;
put 'cmVjb21wdXRlZCxxPWZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUubmVnKCl9O1gucHJlY29tcHV0ZWQ9e25hZjpVLm5hZiYme3duZDpVLm5hZi53bmQscG9pbnRzOlUubmFmLnBvaW50cy5tYXAocSl9LGRvdWJsZXM6VS5kb3VibGVzJiZ7c3RlcDpVLmRvdWJsZXMuc3RlcCxwb2ludHM6VS5kb3Vi'@;
put 'bGVzLnBvaW50cy5tYXAocSl9fX1yZXR1cm4gWH0sVi5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sTChCLGsuQmFz'@;
put 'ZVBvaW50KSxqLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiBuZXcgQih0aGlzLFksWCxVKX0sQi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgWT10aGlzLnou'@;
put 'cmVkSW52bSgpLFg9WS5yZWRTcXIoKSxVPXRoaXMueC5yZWRNdWwoWCkscT10aGlzLnkucmVkTXVsKFgpLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLHEpfSxCLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMu'@;
put 'eS5yZWROZWcoKSx0aGlzLnopfSxCLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFk7aWYoWS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIFg9WS56LnJlZFNxcigpLFU9dGhpcy56LnJlZFNxcigpLHE9dGhpcy54LnJlZE11bChYKSxl'@;
put 'ZT1ZLngucmVkTXVsKFUpLHRlPXRoaXMueS5yZWRNdWwoWC5yZWRNdWwoWS56KSksb2U9WS55LnJlZE11bChVLnJlZE11bCh0aGlzLnopKSxzZT1xLnJlZFN1YihlZSksaGU9dGUucmVkU3ViKG9lKTtpZigwPT09c2UuY21wbigwKSlyZXR1cm4gMCE9PWhlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5q'@;
put 'cG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHVlPXNlLnJlZFNxcigpLGNlPXVlLnJlZE11bChzZSksRz1xLnJlZE11bCh1ZSksYj1oZS5yZWRTcXIoKS5yZWRJQWRkKGNlKS5yZWRJU3ViKEcpLnJlZElTdWIoRyksRD1oZS5yZWRNdWwoRy5yZWRJU3ViKGIpKS5yZWRJU3Vi'@;
put 'KHRlLnJlZE11bChjZSkpLEg9dGhpcy56LnJlZE11bChZLnopLnJlZE11bChzZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGIsRCxIKX0sQi5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFkudG9KKCk7aWYoWS5pc0luZmluaXR5'@;
put 'KCkpcmV0dXJuIHRoaXM7dmFyIFg9dGhpcy56LnJlZFNxcigpLFU9dGhpcy54LHE9WS54LnJlZE11bChYKSxlZT10aGlzLnksdGU9WS55LnJlZE11bChYKS5yZWRNdWwodGhpcy56KSxvZT1VLnJlZFN1YihxKSxzZT1lZS5yZWRTdWIodGUpO2lmKDA9PT1vZS5jbXBuKDApKXJldHVybiAwIT09'@;
put 'c2UuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgaGU9b2UucmVkU3FyKCksdWU9aGUucmVkTXVsKG9lKSxjZT1VLnJlZE11bChoZSksRz1zZS5yZWRTcXIoKS5yZWRJQWRkKHVlKS5yZWRJU3ViKGNlKS5yZWRJU3ViKGNlKSxiPXNlLnJl'@;
put 'ZE11bChjZS5yZWRJU3ViKEcpKS5yZWRJU3ViKGVlLnJlZE11bCh1ZSkpLEQ9dGhpcy56LnJlZE11bChvZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEcsYixEKX0sQi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihZKXtpZigwPT09WSlyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHko'@;
put 'KSlyZXR1cm4gdGhpcztpZighWSlyZXR1cm4gdGhpcy5kYmwoKTt2YXIgWDtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIFU9dGhpcztmb3IoWD0wO1g8WTtYKyspVT1VLmRibCgpO3JldHVybiBVfXZhciBxPXRoaXMuY3VydmUuYSxlZT10aGlzLmN1cnZlLnRp'@;
put 'bnYsdGU9dGhpcy54LG9lPXRoaXMueSxzZT10aGlzLnosaGU9c2UucmVkU3FyKCkucmVkU3FyKCksdWU9b2UucmVkQWRkKG9lKTtmb3IoWD0wO1g8WTtYKyspe3ZhciBjZT10ZS5yZWRTcXIoKSxHPXVlLnJlZFNxcigpLGI9Ry5yZWRTcXIoKSxEPWNlLnJlZEFkZChjZSkucmVkSUFkZChjZSku'@;
put 'cmVkSUFkZChxLnJlZE11bChoZSkpLEg9dGUucmVkTXVsKEcpLE49RC5yZWRTcXIoKS5yZWRJU3ViKEgucmVkQWRkKEgpKSxnPUgucmVkSVN1YihOKSxDPUQucmVkTXVsKGcpO0M9Qy5yZWRJQWRkKEMpLnJlZElTdWIoYik7dmFyIFM9dWUucmVkTXVsKHNlKTtYKzE8WSYmKGhlPWhlLnJlZE11'@;
put 'bChiKSksdGU9TixzZT1TLHVlPUN9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLHVlLnJlZE11bChlZSksc2UpfSxCLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1'@;
put 'cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxCLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBZLFgsVTtpZih0aGlzLnpPbmUpe3ZhciBxPXRoaXMueC5yZWRTcXIoKSxlZT10aGlzLnkucmVkU3FyKCksdGU9ZWUucmVkU3FyKCksb2U9dGhpcy54LnJl'@;
put 'ZEFkZChlZSkucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHRlKTtvZT1vZS5yZWRJQWRkKG9lKTt2YXIgc2U9cS5yZWRBZGQocSkucmVkSUFkZChxKSxoZT1zZS5yZWRTcXIoKS5yZWRJU3ViKG9lKS5yZWRJU3ViKG9lKSx1ZT10ZS5yZWRJQWRkKHRlKTt1ZT0odWU9dWUucmVkSUFkZCh1'@;
put 'ZSkpLnJlZElBZGQodWUpLFk9aGUsWD1zZS5yZWRNdWwob2UucmVkSVN1YihoZSkpLnJlZElTdWIodWUpLFU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGNlPXRoaXMueC5yZWRTcXIoKSxHPXRoaXMueS5yZWRTcXIoKSxiPUcucmVkU3FyKCksRD10aGlzLngucmVkQWRkKEcpLnJl'@;
put 'ZFNxcigpLnJlZElTdWIoY2UpLnJlZElTdWIoYik7RD1ELnJlZElBZGQoRCk7dmFyIEg9Y2UucmVkQWRkKGNlKS5yZWRJQWRkKGNlKSxOPUgucmVkU3FyKCksZz1iLnJlZElBZGQoYik7Zz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZyksWT1OLnJlZElTdWIoRCkucmVkSVN1YihEKSxYPUgu'@;
put 'cmVkTXVsKEQucmVkSVN1YihZKSkucmVkSVN1YihnKSxVPShVPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChVKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxYLFUpfSxCLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgWSxYLFU7aWYodGhpcy56T25lKXt2YXIg'@;
put 'cT10aGlzLngucmVkU3FyKCksZWU9dGhpcy55LnJlZFNxcigpLHRlPWVlLnJlZFNxcigpLG9lPXRoaXMueC5yZWRBZGQoZWUpLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1Yih0ZSk7b2U9b2UucmVkSUFkZChvZSk7dmFyIHNlPXEucmVkQWRkKHEpLnJlZElBZGQocSkucmVkSUFkZCh0aGlz'@;
put 'LmN1cnZlLmEpLGhlPXNlLnJlZFNxcigpLnJlZElTdWIob2UpLnJlZElTdWIob2UpO1k9aGU7dmFyIHVlPXRlLnJlZElBZGQodGUpO3VlPSh1ZT11ZS5yZWRJQWRkKHVlKSkucmVkSUFkZCh1ZSksWD1zZS5yZWRNdWwob2UucmVkSVN1YihoZSkpLnJlZElTdWIodWUpLFU9dGhpcy55LnJlZEFk'@;
put 'ZCh0aGlzLnkpfWVsc2V7dmFyIGNlPXRoaXMuei5yZWRTcXIoKSxHPXRoaXMueS5yZWRTcXIoKSxiPXRoaXMueC5yZWRNdWwoRyksRD10aGlzLngucmVkU3ViKGNlKS5yZWRNdWwodGhpcy54LnJlZEFkZChjZSkpO0Q9RC5yZWRBZGQoRCkucmVkSUFkZChEKTt2YXIgSD1iLnJlZElBZGQoYiks'@;
put 'Tj0oSD1ILnJlZElBZGQoSCkpLnJlZEFkZChIKTtZPUQucmVkU3FyKCkucmVkSVN1YihOKSxVPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKEcpLnJlZElTdWIoY2UpO3ZhciBnPUcucmVkU3FyKCk7Zz0oZz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZykpLnJlZElB'@;
put 'ZGQoZyksWD1ELnJlZE11bChILnJlZElTdWIoWSkpLnJlZElTdWIoZyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFksWCxVKX0sQi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBZPXRoaXMuY3VydmUuYSxYPXRoaXMueCxVPXRoaXMueSxxPXRoaXMueixlZT1xLnJlZFNxcigpLnJl'@;
put 'ZFNxcigpLHRlPVgucmVkU3FyKCksb2U9VS5yZWRTcXIoKSxzZT10ZS5yZWRBZGQodGUpLnJlZElBZGQodGUpLnJlZElBZGQoWS5yZWRNdWwoZWUpKSxoZT1YLnJlZEFkZChYKSx1ZT0oaGU9aGUucmVkSUFkZChoZSkpLnJlZE11bChvZSksY2U9c2UucmVkU3FyKCkucmVkSVN1Yih1ZS5yZWRB'@;
put 'ZGQodWUpKSxHPXVlLnJlZElTdWIoY2UpLGI9b2UucmVkU3FyKCk7Yj0oYj0oYj1iLnJlZElBZGQoYikpLnJlZElBZGQoYikpLnJlZElBZGQoYik7dmFyIEQ9c2UucmVkTXVsKEcpLnJlZElTdWIoYiksSD1VLnJlZEFkZChVKS5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGNl'@;
put 'LEQsSCl9LEIucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIFk9dGhpcy54LnJlZFNxcigpLFg9dGhpcy55LnJlZFNxcigpLFU9dGhpcy56LnJlZFNxcigpLHE9WC5yZWRTcXIoKSxlZT1ZLnJlZEFk'@;
put 'ZChZKS5yZWRJQWRkKFkpLHRlPWVlLnJlZFNxcigpLG9lPXRoaXMueC5yZWRBZGQoWCkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKHEpLHNlPShvZT0ob2U9KG9lPW9lLnJlZElBZGQob2UpKS5yZWRBZGQob2UpLnJlZElBZGQob2UpKS5yZWRJU3ViKHRlKSkucmVkU3FyKCksaGU9cS5y'@;
put 'ZWRJQWRkKHEpO2hlPShoZT0oaGU9aGUucmVkSUFkZChoZSkpLnJlZElBZGQoaGUpKS5yZWRJQWRkKGhlKTt2YXIgdWU9ZWUucmVkSUFkZChvZSkucmVkU3FyKCkucmVkSVN1Yih0ZSkucmVkSVN1YihzZSkucmVkSVN1YihoZSksY2U9WC5yZWRNdWwodWUpO2NlPShjZT1jZS5yZWRJQWRkKGNl'@;
put 'KSkucmVkSUFkZChjZSk7dmFyIEc9dGhpcy54LnJlZE11bChzZSkucmVkSVN1YihjZSk7Rz0oRz1HLnJlZElBZGQoRykpLnJlZElBZGQoRyk7dmFyIGI9dGhpcy55LnJlZE11bCh1ZS5yZWRNdWwoaGUucmVkSVN1Yih1ZSkpLnJlZElTdWIob2UucmVkTXVsKHNlKSkpO2I9KGI9KGI9Yi5yZWRJ'@;
put 'QWRkKGIpKS5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpO3ZhciBEPXRoaXMuei5yZWRBZGQob2UpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihzZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEcsYixEKX0sQi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFksWCl7cmV0dXJuIFk9bmV3IEso'@;
put 'WSxYKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsWSl9LEIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFkpe2lmKCJhZmZpbmUiPT09WS50eXBlKXJldHVybiB0aGlzLmVxKFkudG9KKCkpO2lmKHRoaXM9PT1ZKXJldHVybiEwO3ZhciBYPXRoaXMuei5yZWRTcXIoKSxVPVkuei5yZWRTcXIoKTtp'@;
put 'ZigwIT09dGhpcy54LnJlZE11bChVKS5yZWRJU3ViKFkueC5yZWRNdWwoWCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIHE9WC5yZWRNdWwodGhpcy56KSxlZT1VLnJlZE11bChZLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChlZSkucmVkSVN1YihZLnkucmVkTXVsKHEpKS5jbXBuKDApfSxC'@;
put 'LnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oWSl7dmFyIFg9dGhpcy56LnJlZFNxcigpLFU9WS50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKFgpO2lmKDA9PT10aGlzLnguY21wKFUpKXJldHVybiEwO2Zvcih2YXIgcT1ZLmNsb25lKCksZWU9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChY'@;
put 'KTs7KXtpZihxLmlhZGQodGhpcy5jdXJ2ZS5uKSxxLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKFUucmVkSUFkZChlZSksMD09PXRoaXMueC5jbXAoVSkpcmV0dXJuITB9fSxCLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8'@;
put 'RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sQi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAw'@;
put 'PT09dGhpcy56LmNtcG4oMCl9fSw1NDI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1PLEw9UigzNzE1KSxrPVIoODI1NCksRT1SKDk1MykuYXNzZXJ0O2Z1bmN0aW9uIGooQil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09Qi50eXBlP25ldyBrLnNob3J0KEIpOiJlZHdhcmRzIj09PUIu'@;
put 'dHlwZT9uZXcgay5lZHdhcmRzKEIpOm5ldyBrLm1vbnQoQiksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1CLmhhc2gsRSh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLEUodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwi'@;
put 'SW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBWKEIsWSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEssQix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIFg9bmV3IGooWSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLEIse2Nv'@;
put 'bmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlh9KSxYfX0pfUsuUHJlc2V0Q3VydmU9aixWKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFz'@;
put 'aDpMLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxWKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1l'@;
put 'OiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1'@;
put 'NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpMLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0'@;
put 'YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxWKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAw'@;
put 'MDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2'@;
put 'NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6TC5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUg'@;
put 'NjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksVigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46'@;
put 'ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOkwuc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYz'@;
put 'MjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3'@;
put 'ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLFYoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3'@;
put 'IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1Yzli'@;
put 'OCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDpMLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBh'@;
put 'MmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1'@;
put 'M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxWKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6'@;
put 'IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6TC5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksVigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAw'@;
put 'MDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOkwuc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2'@;
put 'NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7ej1SKDEwMzcpfWNhdGNoe3o9dm9pZCAwfVYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOkwuc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5'@;
put 'ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoi'@;
put 'LWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNk'@;
put 'YjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLHpdfSl9LDc5NTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9UigyMTU2KSxMPVIoOTUzKSxrPVIo'@;
put 'NTQyNyksRT1SKDk5MzEpLGo9TC5hc3NlcnQsVj1SKDEyNTEpLEI9Uig2MTEpO2Z1bmN0aW9uIFkoWCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWSkpcmV0dXJuIG5ldyBZKFgpOyJzdHJpbmciPT10eXBlb2YgWCYmKGooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssWCks'@;
put 'IlVua25vd24gY3VydmUgIitYKSxYPWtbWF0pLFggaW5zdGFuY2VvZiBrLlByZXNldEN1cnZlJiYoWD17Y3VydmU6WH0pLHRoaXMuY3VydmU9WC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5n'@;
put 'PVguY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShYLmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPVguaGFzaHx8WC5jdXJ2ZS5oYXNofU0uZXhwb3J0cz1ZLFkucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBWKHRoaXMsWCl9LFkucHJvdG90eXBlLmtl'@;
put 'eUZyb21Qcml2YXRlPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIFYuZnJvbVByaXZhdGUodGhpcyxYLFUpfSxZLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIFYuZnJvbVB1YmxpYyh0aGlzLFgsVSl9LFkucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oWCl7'@;
put 'WHx8KFg9e30pO2Zvcih2YXIgVT1uZXcgSyh7aGFzaDp0aGlzLmhhc2gscGVyczpYLnBlcnMscGVyc0VuYzpYLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OlguZW50cm9weXx8RSh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOlguZW50cm9weSYmWC5lbnRyb3B5RW5jfHwidXRm'@;
put 'OCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT10aGlzLm4uc3ViKG5ldyB6KDIpKTs7KXt2YXIgdGU9bmV3IHooVS5nZW5lcmF0ZShxKSk7aWYoISh0ZS5jbXAoZWUpPjApKXJldHVybiB0ZS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKHRl'@;
put 'KX19LFkucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihYLFUpe3ZhciBxPTgqWC5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihYPVgudXNocm4ocSkpLCFVJiZYLmNtcCh0aGlzLm4pPj0wP1guc3ViKHRoaXMubik6WH0sWS5wcm90b3R5cGUuc2ln'@;
put 'bj1mdW5jdGlvbihYLFUscSxlZSl7Im9iamVjdCI9PXR5cGVvZiBxJiYoZWU9cSxxPW51bGwpLGVlfHwoZWU9e30pLFU9dGhpcy5rZXlGcm9tUHJpdmF0ZShVLHEpLFg9dGhpcy5fdHJ1bmNhdGVUb04obmV3IHooWCwxNikpO2Zvcih2YXIgdGU9dGhpcy5uLmJ5dGVMZW5ndGgoKSxvZT1VLmdl'@;
put 'dFByaXZhdGUoKS50b0FycmF5KCJiZSIsdGUpLHNlPVgudG9BcnJheSgiYmUiLHRlKSxoZT1uZXcgSyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpvZSxub25jZTpzZSxwZXJzOmVlLnBlcnMscGVyc0VuYzplZS5wZXJzRW5jfHwidXRmOCJ9KSx1ZT10aGlzLm4uc3ViKG5ldyB6KDEpKSxjZT0w'@;
put 'OztjZSsrKXt2YXIgRz1lZS5rP2VlLmsoY2UpOm5ldyB6KGhlLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChHPXRoaXMuX3RydW5jYXRlVG9OKEcsITApKS5jbXBuKDEpPD0wfHxHLmNtcCh1ZSk+PTApKXt2YXIgYj10aGlzLmcubXVsKEcpO2lmKCFiLmlzSW5maW5pdHko'@;
put 'KSl7dmFyIEQ9Yi5nZXRYKCksSD1ELnVtb2QodGhpcy5uKTtpZigwIT09SC5jbXBuKDApKXt2YXIgTj1HLmludm0odGhpcy5uKS5tdWwoSC5tdWwoVS5nZXRQcml2YXRlKCkpLmlhZGQoWCkpO2lmKDAhPT0oTj1OLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIGc9KGIuZ2V0WSgpLmlzT2Rk'@;
put 'KCk/MTowKXwoMCE9PUQuY21wKEgpPzI6MCk7cmV0dXJuIGVlLmNhbm9uaWNhbCYmTi5jbXAodGhpcy5uaCk+MCYmKE49dGhpcy5uLnN1YihOKSxnXj0xKSxuZXcgQih7cjpILHM6TixyZWNvdmVyeVBhcmFtOmd9KX19fX19fSxZLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oWCxVLHEsZWUp'@;
put 'e1g9dGhpcy5fdHJ1bmNhdGVUb04obmV3IHooWCwxNikpLHE9dGhpcy5rZXlGcm9tUHVibGljKHEsZWUpO3ZhciB0ZT0oVT1uZXcgQihVLCJoZXgiKSkucixvZT1VLnM7aWYodGUuY21wbigxKTwwfHx0ZS5jbXAodGhpcy5uKT49MHx8b2UuY21wbigxKTwwfHxvZS5jbXAodGhpcy5uKT49MCly'@;
put 'ZXR1cm4hMTt2YXIgc2UsaGU9b2UuaW52bSh0aGlzLm4pLHVlPWhlLm11bChYKS51bW9kKHRoaXMubiksY2U9aGUubXVsKHRlKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKHNlPXRoaXMuZy5qbXVsQWRkKHVlLHEuZ2V0UHVibGljKCksY2UpKS5pc0lu'@;
put 'ZmluaXR5KCkmJnNlLmVxWFRvUCh0ZSk6IShzZT10aGlzLmcubXVsQWRkKHVlLHEuZ2V0UHVibGljKCksY2UpKS5pc0luZmluaXR5KCkmJjA9PT1zZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcCh0ZSl9LFkucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24oWCxVLHEsZWUpe2ooKDMm'@;
put 'cSk9PT1xLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksVT1uZXcgQihVLGVlKTt2YXIgdGU9dGhpcy5uLG9lPW5ldyB6KFgpLHNlPVUucixoZT1VLnMsdWU9MSZxLGNlPXE+PjE7aWYoc2UuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0w'@;
put 'JiZjZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO3NlPXRoaXMuY3VydmUucG9pbnRGcm9tWChjZT9zZS5hZGQodGhpcy5jdXJ2ZS5uKTpzZSx1ZSk7dmFyIEc9VS5yLmludm0odGUpLGI9dGUuc3ViKG9lKS5tdWwoRykudW1vZCh0ZSks'@;
put 'RD1oZS5tdWwoRykudW1vZCh0ZSk7cmV0dXJuIHRoaXMuZy5tdWxBZGQoYixzZSxEKX0sWS5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihYLFUscSxlZSl7aWYobnVsbCE9PShVPW5ldyBCKFUsZWUpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBVLnJlY292ZXJ5UGFyYW07'@;
put 'Zm9yKHZhciB0ZT0wO3RlPDQ7dGUrKyl7dmFyIG9lO3RyeXtvZT10aGlzLnJlY292ZXJQdWJLZXkoWCxVLHRlKX1jYXRjaHtjb250aW51ZX1pZihvZS5lcShxKSlyZXR1cm4gdGV9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6'@;
put 'KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig5NTMpLmFzc2VydDtmdW5jdGlvbiBMKGssRSl7dGhpcy5lYz1rLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsRS5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKEUucHJpdixFLnByaXZFbmMpLEUucHViJiZ0aGlz'@;
put 'Ll9pbXBvcnRQdWJsaWMoRS5wdWIsRS5wdWJFbmMpfU0uZXhwb3J0cz1MLEwuZnJvbVB1YmxpYz1mdW5jdGlvbihrLEUsail7cmV0dXJuIEUgaW5zdGFuY2VvZiBMP0U6bmV3IEwoayx7cHViOkUscHViRW5jOmp9KX0sTC5mcm9tUHJpdmF0ZT1mdW5jdGlvbihrLEUsail7cmV0dXJuIEUgaW5z'@;
put 'dGFuY2VvZiBMP0U6bmV3IEwoayx7cHJpdjpFLHByaXZFbmM6an0pfSxMLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBrPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIGsuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTprLnZhbGlk'@;
put 'YXRlKCk/ay5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxMLnByb3RvdHlw'@;
put 'ZS5nZXRQdWJsaWM9ZnVuY3Rpb24oayxFKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGsmJihFPWssaz1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksRT90aGlzLnB1Yi5lbmNvZGUoRSxrKTp0aGlzLnB1Yn0sTC5wcm90b3R5cGUuZ2V0UHJpdmF0'@;
put 'ZT1mdW5jdGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sTC5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oayxFKXt0aGlzLnByaXY9bmV3IHooayxFfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMu'@;
put 'Y3VydmUubil9LEwucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oayxFKXtpZihrLnh8fGsueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/SyhrLngsIk5lZWQgeCBjb29yZGluYXRlIik6InNob3J0IiE9PXRoaXMuZWMuY3VydmUudHlwZSYmImVkd2FyZHMiIT09'@;
put 'dGhpcy5lYy5jdXJ2ZS50eXBlfHxLKGsueCYmay55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KGsueCxrLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KGssRSl9LEwucHJvdG90eXBlLmRlcml2'@;
put 'ZT1mdW5jdGlvbihrKXtyZXR1cm4gay52YWxpZGF0ZSgpfHxLKGsudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxrLm11bCh0aGlzLnByaXYpLmdldFgoKX0sTC5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihrLEUsail7cmV0dXJuIHRoaXMuZWMuc2lnbihrLHRoaXMs'@;
put 'RSxqKX0sTC5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGssRSl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KGssRSx0aGlzKX0sTC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1'@;
put 'YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDYxMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MyksTD1LLmFzc2VydDtmdW5jdGlvbiBrKFksWCl7aWYoWSBpbnN0YW5jZW9mIGspcmV0dXJuIFk7dGhpcy5faW1wb3J0REVSKFks'@;
put 'WCl8fChMKFkuciYmWS5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IHooWS5yLDE2KSx0aGlzLnM9bmV3IHooWS5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09WS5yZWNvdmVyeVBhcmFtP251bGw6WS5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiBFKCl7'@;
put 'dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIGooWSxYKXt2YXIgVT1ZW1gucGxhY2UrK107aWYoISgxMjgmVSkpcmV0dXJuIFU7dmFyIHE9MTUmVTtpZigwPT09cXx8cT40KXJldHVybiExO2Zvcih2YXIgZWU9MCx0ZT0wLG9lPVgucGxhY2U7dGU8cTt0ZSsrLG9lKyspZWU8PD04LGVlfD1ZW29lXSxl'@;
put 'ZT4+Pj0wO3JldHVybiEoZWU8PTEyNykmJihYLnBsYWNlPW9lLGVlKX1mdW5jdGlvbiBWKFkpe2Zvcih2YXIgWD0wLFU9WS5sZW5ndGgtMTshWVtYXSYmISgxMjgmWVtYKzFdKSYmWDxVOylYKys7cmV0dXJuIDA9PT1YP1k6WS5zbGljZShYKX1mdW5jdGlvbiBCKFksWCl7aWYoWDwxMjgpWS5w'@;
put 'dXNoKFgpO2Vsc2V7dmFyIFU9MSsoTWF0aC5sb2coWCkvTWF0aC5MTjI+Pj4zKTtmb3IoWS5wdXNoKDEyOHxVKTstLVU7KVkucHVzaChYPj4+KFU8PDMpJjI1NSk7WS5wdXNoKFgpfX1NLmV4cG9ydHM9ayxrLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKFksWCl7WT1LLnRvQXJyYXko'@;
put 'WSxYKTt2YXIgVT1uZXcgRTtpZig0OCE9PVlbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1qKFksVSk7aWYoITE9PT1xfHxxK1UucGxhY2UhPT1ZLmxlbmd0aHx8MiE9PVlbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgZWU9aihZLFUpO2lmKCExPT09ZWUpcmV0dXJuITE7dmFyIHRlPVkuc2xp'@;
put 'Y2UoVS5wbGFjZSxlZStVLnBsYWNlKTtpZihVLnBsYWNlKz1lZSwyIT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBvZT1qKFksVSk7aWYoITE9PT1vZXx8WS5sZW5ndGghPT1vZStVLnBsYWNlKXJldHVybiExO3ZhciBzZT1ZLnNsaWNlKFUucGxhY2Usb2UrVS5wbGFjZSk7aWYoMD09PXRl'@;
put 'WzBdKXtpZighKDEyOCZ0ZVsxXSkpcmV0dXJuITE7dGU9dGUuc2xpY2UoMSl9aWYoMD09PXNlWzBdKXtpZighKDEyOCZzZVsxXSkpcmV0dXJuITE7c2U9c2Uuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgeih0ZSksdGhpcy5zPW5ldyB6KHNlKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwh'@;
put 'MH0say5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oWSl7dmFyIFg9dGhpcy5yLnRvQXJyYXkoKSxVPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZYWzBdJiYoWD1bMF0uY29uY2F0KFgpKSwxMjgmVVswXSYmKFU9WzBdLmNvbmNhdChVKSksWD1WKFgpLFU9VihVKTshKFVbMF18fDEyOCZVWzFd'@;
put 'KTspVT1VLnNsaWNlKDEpO3ZhciBxPVsyXTtCKHEsWC5sZW5ndGgpLChxPXEuY29uY2F0KFgpKS5wdXNoKDIpLEIocSxVLmxlbmd0aCk7dmFyIGVlPXEuY29uY2F0KFUpLHRlPVs0OF07cmV0dXJuIEIodGUsZWUubGVuZ3RoKSx0ZT10ZS5jb25jYXQoZWUpLEsuZW5jb2RlKHRlLFkpfX0sNTk4'@;
put 'MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzcxNSksSz1SKDU0MjcpLEw9Uig5NTMpLGs9TC5hc3NlcnQsRT1MLnBhcnNlQnl0ZXMsaj1SKDkwODcpLFY9UigzNjIyKTtmdW5jdGlvbiBCKFkpe2lmKGsoImVkMjU1MTkiPT09WSwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNv'@;
put 'IGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihZKTt0aGlzLmN1cnZlPVk9S1tZXS5jdXJ2ZSx0aGlzLmc9WS5nLHRoaXMuZy5wcmVjb21wdXRlKFkubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9WS5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2Rp'@;
put 'bmdMZW5ndGg9TWF0aC5jZWlsKFkubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9ei5zaGE1MTJ9TS5leHBvcnRzPUIsQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihZLFgpe1k9RShZKTt2YXIgVT10aGlzLmtleUZyb21TZWNyZXQoWCkscT10aGlzLmhhc2hJbnQoVS5tZXNzYWdlUHJlZml4'@;
put 'KCksWSksZWU9dGhpcy5nLm11bChxKSx0ZT10aGlzLmVuY29kZVBvaW50KGVlKSxvZT10aGlzLmhhc2hJbnQodGUsVS5wdWJCeXRlcygpLFkpLm11bChVLnByaXYoKSksc2U9cS5hZGQob2UpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOmVlLFM6c2Us'@;
put 'UmVuY29kZWQ6dGV9KX0sQi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFksWCxVKXtZPUUoWSksWD10aGlzLm1ha2VTaWduYXR1cmUoWCk7dmFyIHE9dGhpcy5rZXlGcm9tUHVibGljKFUpLGVlPXRoaXMuaGFzaEludChYLlJlbmNvZGVkKCkscS5wdWJCeXRlcygpLFkpLHRlPXRoaXMuZy5t'@;
put 'dWwoWC5TKCkpO3JldHVybiBYLlIoKS5hZGQocS5wdWIoKS5tdWwoZWUpKS5lcSh0ZSl9LEIucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIFk9dGhpcy5oYXNoKCksWD0wO1g8YXJndW1lbnRzLmxlbmd0aDtYKyspWS51cGRhdGUoYXJndW1lbnRzW1hdKTtyZXR1cm4gTC5p'@;
put 'bnRGcm9tTEUoWS5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxCLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKFkpe3JldHVybiBqLmZyb21QdWJsaWModGhpcyxZKX0sQi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihZKXtyZXR1cm4gai5mcm9tU2VjcmV0'@;
put 'KHRoaXMsWSl9LEIucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBWP1k6bmV3IFYodGhpcyxZKX0sQi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oWSl7dmFyIFg9WS5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdM'@;
put 'ZW5ndGgpO3JldHVybiBYW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PVkuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsWH0sQi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oWSl7dmFyIFg9KFk9TC5wYXJzZUJ5dGVzKFkpKS5sZW5ndGgtMSxVPVkuc2xpY2UoMCxYKS5jb25jYXQoLTEyOSZZ'@;
put 'W1hdKSxxPTAhPSgxMjgmWVtYXSksZWU9TC5pbnRGcm9tTEUoVSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShlZSxxKX0sQi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKFkpe3JldHVybiBZLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sQi5wcm90b3R5cGUu'@;
put 'ZGVjb2RlSW50PWZ1bmN0aW9uKFkpe3JldHVybiBMLmludEZyb21MRShZKX0sQi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDkwODc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MyksSz16LmFzc2Vy'@;
put 'dCxMPXoucGFyc2VCeXRlcyxrPXouY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gRShqLFYpe3RoaXMuZWRkc2E9aix0aGlzLl9zZWNyZXQ9TChWLnNlY3JldCksai5pc1BvaW50KFYucHViKT90aGlzLl9wdWI9Vi5wdWI6dGhpcy5fcHViQnl0ZXM9TChWLnB1Yil9RS5mcm9tUHVibGljPWZ1bmN0'@;
put 'aW9uKGosVil7cmV0dXJuIFYgaW5zdGFuY2VvZiBFP1Y6bmV3IEUoaix7cHViOlZ9KX0sRS5mcm9tU2VjcmV0PWZ1bmN0aW9uKGosVil7cmV0dXJuIFYgaW5zdGFuY2VvZiBFP1Y6bmV3IEUoaix7c2VjcmV0OlZ9KX0sRS5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'X3NlY3JldH0sayhFLCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLGsoRSwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlz'@;
put 'LmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLGsoRSwicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBqPXRoaXMuZWRkc2EsVj10aGlzLmhhc2goKSxCPWouZW5jb2RpbmdMZW5ndGgtMSxZPVYuc2xpY2UoMCxqLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gWVswXSY9MjQ4LFlbQl0mPTEyNyxZ'@;
put 'W0JdfD02NCxZfSksayhFLCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLGsoRSwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksayhF'@;
put 'LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLEUucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oail7cmV0dXJuIEsodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMu'@;
put 'ZWRkc2Euc2lnbihqLHRoaXMpfSxFLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oaixWKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoaixWLHRoaXMpfSxFLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oail7cmV0dXJuIEsodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBv'@;
put 'bmx5Iiksei5lbmNvZGUodGhpcy5zZWNyZXQoKSxqKX0sRS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKGope3JldHVybiB6LmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksail9LE0uZXhwb3J0cz1FfSwzNjIyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUz'@;
put 'KSxMPUsuYXNzZXJ0LGs9Sy5jYWNoZWRQcm9wZXJ0eSxFPUsucGFyc2VCeXRlcztmdW5jdGlvbiBqKFYsQil7dGhpcy5lZGRzYT1WLCJvYmplY3QiIT10eXBlb2YgQiYmKEI9RShCKSksQXJyYXkuaXNBcnJheShCKSYmKEI9e1I6Qi5zbGljZSgwLFYuZW5jb2RpbmdMZW5ndGgpLFM6Qi5zbGlj'@;
put 'ZShWLmVuY29kaW5nTGVuZ3RoKX0pLEwoQi5SJiZCLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLFYuaXNQb2ludChCLlIpJiYodGhpcy5fUj1CLlIpLEIuUyBpbnN0YW5jZW9mIHomJih0aGlzLl9TPUIuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShCLlIpP0IuUjpCLlJl'@;
put 'bmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoQi5TKT9CLlM6Qi5TZW5jb2RlZH1rKGosIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxrKGosIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2Rl'@;
put 'UG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLGsoaiwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksayhqLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksai5wcm90'@;
put 'b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LGoucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIEsuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxNLmV4cG9ydHM9'@;
put 'an0sMTAzNzpNPT57TS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJl'@;
put 'MWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3'@;
put 'MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFj'@;
put 'N2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0'@;
put 'YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRk'@;
put 'NmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFk'@;
put 'ZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRj'@;
put 'OTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1'@;
put 'MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4'@;
put 'MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4'@;
put 'MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxb'@;
put 'IjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2Rm'@;
put 'YTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQy'@;
put 'ZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0'@;
put 'MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0'@;
put 'Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFm'@;
put 'YzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJk'@;
put 'MWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0'@;
put 'YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4'@;
put 'MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIz'@;
put 'Y2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgy'@;
put 'ODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0'@;
put 'MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4'@;
put 'MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4'@;
put 'MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxb'@;
put 'IjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYx'@;
put 'NjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUz'@;
put 'MjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRj'@;
put 'MzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIw'@;
put 'ZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4'@;
put 'MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWVi'@;
put 'OTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIz'@;
put 'NWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQx'@;
put 'OTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVh'@;
put 'MmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVm'@;
put 'ZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5'@;
put 'ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4'@;
put 'YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5'@;
put 'MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVh'@;
put 'YTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVl'@;
put 'NTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAw'@;
put 'YmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4'@;
put 'MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhj'@;
put 'ZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5'@;
put 'NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZh'@;
put 'NTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJl'@;
put 'N2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIy'@;
put 'MGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFm'@;
put 'NjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2'@;
put 'OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhj'@;
put 'YWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMw'@;
put 'NTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTlj'@;
put 'ZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3'@;
put 'MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTky'@;
put 'NThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRi'@;
put 'ZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2'@;
put 'YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYx'@;
put 'ZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1'@;
put 'M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2'@;
put 'NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2'@;
put 'NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5'@;
put 'NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJl'@;
put 'NzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5'@;
put 'MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3'@;
put 'NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2Qy'@;
put 'MmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1'@;
put 'MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2Fk'@;
put 'ZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1'@;
put 'MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1'@;
put 'NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQw'@;
put 'ZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZl'@;
put 'YmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDlj'@;
put 'OWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4'@;
put 'N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNi'@;
put 'YTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAz'@;
put 'ZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2'@;
put 'MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2'@;
put 'MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2'@;
put 'YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5'@;
put 'ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZl'@;
put 'MjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3Yjhj'@;
put 'NDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2'@;
put 'ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUz'@;
put 'NjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRi'@;
put 'MTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0'@;
put 'MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTcz'@;
put 'M2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0'@;
put 'ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAz'@;
put 'MjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIw'@;
put 'NTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2Mjkw'@;
put 'MzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjcz'@;
put 'M2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5'@;
put 'Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcx'@;
put 'Nzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBh'@;
put 'NjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgw'@;
put 'ZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3'@;
put 'MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJj'@;
put 'YTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMw'@;
put 'MzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQy'@;
put 'ZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhj'@;
put 'MWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5Nzgy'@;
put 'OTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZj'@;
put 'NGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1'@;
put 'ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIz'@;
put 'NWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFk'@;
put 'NjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4'@;
put 'MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2'@;
put 'NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2'@;
put 'ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5'@;
put 'MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3'@;
put 'ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3'@;
put 'YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAy'@;
put 'ZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4'@;
put 'NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0s'@;
put 'WyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWVi'@;
put 'OTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUw'@;
put 'ZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBm'@;
put 'YzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRj'@;
put 'NTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0Yjhh'@;
put 'NjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRl'@;
put 'ZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJj'@;
put 'MzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVh'@;
put 'MzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3'@;
put 'NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNi'@;
put 'ODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRj'@;
put 'ODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNm'@;
put 'YTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBi'@;
put 'ZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsi'@;
put 'ZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4'@;
put 'NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2Mx'@;
put 'MWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVm'@;
put 'YTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4'@;
put 'MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3'@;
put 'ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRi'@;
put 'MzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwi'@;
put 'NWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2Ni'@;
put 'YWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYz'@;
put 'MDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1'@;
put 'ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZk'@;
put 'NmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgx'@;
put 'ZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0'@;
put 'N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsi'@;
put 'ODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMw'@;
put 'ODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJm'@;
put 'NWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQz'@;
put 'YjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJm'@;
put 'YzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNj'@;
put 'NTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRh'@;
put 'NjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJh'@;
put 'YjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQw'@;
put 'ZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEy'@;
put 'NWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZm'@;
put 'NTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBl'@;
put 'ZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIw'@;
put 'MThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3Yzhl'@;
put 'ZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsi'@;
put 'NzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2'@;
put 'ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5'@;
put 'NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw5NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1PLEs9UigzNzg1KSxMPVIoOTc0Niksaz1SKDQ1MDQpO3ouYXNzZXJ0PUwsei50b0FycmF5'@;
put 'PWsudG9BcnJheSx6Lnplcm8yPWsuemVybzIsei50b0hleD1rLnRvSGV4LHouZW5jb2RlPWsuZW5jb2RlLHouZ2V0TkFGPWZ1bmN0aW9uKEUsaixWKXt2YXIgQj1uZXcgQXJyYXkoTWF0aC5tYXgoRS5iaXRMZW5ndGgoKSxWKSsxKTtCLmZpbGwoMCk7Zm9yKHZhciBZPTE8PGorMSxYPUUuY2xv'@;
put 'bmUoKSxVPTA7VTxCLmxlbmd0aDtVKyspe3ZhciBxLGVlPVguYW5kbG4oWS0xKTtYLmlzT2RkKCk/WC5pc3VibihxPWVlPihZPj4xKS0xPyhZPj4xKS1lZTplZSk6cT0wLEJbVV09cSxYLml1c2hybigxKX1yZXR1cm4gQn0sei5nZXRKU0Y9ZnVuY3Rpb24oRSxqKXt2YXIgVj1bW10sW11dO0U9'@;
put 'RS5jbG9uZSgpLGo9ai5jbG9uZSgpO2Zvcih2YXIgQixZPTAsWD0wO0UuY21wbigtWSk+MHx8ai5jbXBuKC1YKT4wOyl7dmFyIFUscSxlZT1FLmFuZGxuKDMpK1kmMyx0ZT1qLmFuZGxuKDMpK1gmMzszPT09ZWUmJihlZT0tMSksMz09PXRlJiYodGU9LTEpLFU9MSZlZT8zIT0oQj1FLmFuZGxu'@;
put 'KDcpK1kmNykmJjUhPT1CfHwyIT09dGU/ZWU6LWVlOjAsVlswXS5wdXNoKFUpLHE9MSZ0ZT8zIT0oQj1qLmFuZGxuKDcpK1gmNykmJjUhPT1CfHwyIT09ZWU/dGU6LXRlOjAsVlsxXS5wdXNoKHEpLDIqWT09PVUrMSYmKFk9MS1ZKSwyKlg9PT1xKzEmJihYPTEtWCksRS5pdXNocm4oMSksai5p'@;
put 'dXNocm4oMSl9cmV0dXJuIFZ9LHouY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24oRSxqLFYpe3ZhciBCPSJfIitqO0UucHJvdG90eXBlW2pdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbQl0/dGhpc1tCXTp0aGlzW0JdPVYuY2FsbCh0aGlzKX19LHoucGFyc2VCeXRlcz1mdW5jdGlv'@;
put 'bihFKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEU/ei50b0FycmF5KEUsImhleCIpOkV9LHouaW50RnJvbUxFPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgSyhFLCJoZXgiLCJsZSIpfX0sMzc4NTpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEwo'@;
put 'ZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31m'@;
put 'dW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8'@;
put 'fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig1NTY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9u'@;
put 'IFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2'@;
put 'KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2Vv'@;
put 'ZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJu'@;
put 'IGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1D'@;
put 'JiYoQz0xNiksTChDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNl'@;
put 'QmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10s'@;
put 'dGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihMKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRo'@;
put 'aXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoTCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0s'@;
put 'dGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcu'@;
put 'bGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxw'@;
put 'PTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5'@;
put 'cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigi'@;
put 'YmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7'@;
put 'dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVu'@;
put 'Z3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29y'@;
put 'ZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53'@;
put 'b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3Ro'@;
put 'PXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlz'@;
put 'Lmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNp'@;
put 'Z24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8'@;
put 'Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUs'@;
put 'NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYs'@;
put 'MjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYx'@;
put 'NzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNb'@;
put 'MF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsSWU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9l'@;
put 'fDBdKSoodz0wfEMud29yZHNbT2VdKStJZSkvNjcxMDg4NjR8MCxJZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8SWUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2'@;
put 'YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3'@;
put 'NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyks'@;
put 'U31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgSWU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8o'@;
put 'KT9JZStTOlhbZGUtSWUubGVuZ3RoXStJZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUwoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90'@;
put 'b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53'@;
put 'b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZMKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBl'@;
put 'LnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEwodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1m'@;
put 'dW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0wodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEwocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixu'@;
put 'ZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihK'@;
put 'PTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9'@;
put 'MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7'@;
put 'cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291'@;
put 'bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhp'@;
put 'cy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUu'@;
put 'cHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5u'@;
put 'ZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNb'@;
put 'Q107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlz'@;
put 'LmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcp'@;
put 'e3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUu'@;
put 'cHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhp'@;
put 'cyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5n'@;
put 'dGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihn'@;
put 'KXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29y'@;
put 'ZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7TCgibnVtYmVyIj09dHlwZW9mIGcmJmc+'@;
put 'PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9'@;
put 'PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhp'@;
put 'cy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jk'@;
put 'c1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3Ro'@;
put 'Kys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9'@;
put 'MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9u'@;
put 'ZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1n'@;
put 'LHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlz'@;
put 'LndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9'@;
put 'MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLEllPTgxOTEmeGUs'@;
put 'RmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhl'@;
put 'Pj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxvdD0wfEpbN10sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4x'@;
put 'MyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEx0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4x'@;
put 'MyxMbj0wfG5lWzZdLHp0PTgxOTEmTG4seW49TG4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sRm49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2'@;
put 'ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChJZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSWUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEw'@;
put 'ODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxmbil8MCkrTWF0aC5p'@;
put 'bXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChRZSxlbil8MCx3PU1hdGguaW11bChRZSwk'@;
put 'biksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWHQp'@;
put 'fDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRo'@;
put 'LmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHc9dytNYXRoLmltdWwoUWUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwo'@;
put 'V2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsdz13K01hdGguaW11bChRZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoSWUsTHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxRdCl8MCkrTWF0aC5pbXVsKEZlLEx0KXwwKSk8PDEzKXwwO2Zl'@;
put 'PSgodz13K01hdGguaW11bChGZSxRdCl8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLHc9dytNYXRoLmltdWwoUWUsbW4pfDAsdj12K01hdGguaW11bChqZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsTHQpfDAsdz13K01h'@;
put 'dGguaW11bChXZSxRdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVsKEllLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+'@;
put 'PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0'@;
put 'KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4p'@;
put 'fDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsTHQpfDAscD0ocD1wK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEx0KXwwLHc9dytNYXRoLmltdWwoUWUsUXQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8'@;
put 'MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUs'@;
put 'ZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8'@;
put 'MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsTHQpfDAscD0ocD1wK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEx0KXwwLHc9'@;
put 'dytNYXRoLmltdWwoYmUsUXQpfDAsdj12K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsdz13K01hdGguaW11bChRZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01h'@;
put 'dGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxC'@;
put 'bil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0'@;
put 'LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmltdWwocWUsTHQpfDAsdz13K01hdGguaW11bChxZSxRdCl8MCx2PXYr'@;
put 'TWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLHc9dytNYXRo'@;
put 'LmltdWwoUWUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo'@;
put 'LmltdWwoSWUsRm4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsRm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4s'@;
put 'ZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXww'@;
put 'KStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsTHQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKGh0LEx0KXwwLHc9dytNYXRoLmltdWwoaHQsUXQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'UWUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEZuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxGbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKEllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'SWUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAs'@;
put 'dz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRo'@;
put 'LmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEx0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxMdCl8MCx3PXcrTWF0aC5pbXVsKHplLFF0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBl'@;
put 'LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxGbil8MCkrTWF0aC5pbXVsKFFlLCR0KXwwLHc9dytNYXRoLmltdWwoUWUsRm4p'@;
put 'fDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsTHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxRdCl8MCkrTWF0aC5pbXVsKE10LEx0KXwwLHc9dytNYXRoLmltdWwoTXQsUXQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwo'@;
put 'emUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChU'@;
put 'ZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxGbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5p'@;
put 'bXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCks'@;
put 'cD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsTHQpfDAscD0ocD1wK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEx0KXwwLHc9dytNYXRoLmltdWwob24sUXQpfDAsdj12K01hdGguaW11'@;
put 'bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHpl'@;
put 'LHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEZuKXwwKStNYXRoLmltdWwocWUsJHQp'@;
put 'fDAsdz13K01hdGguaW11bChxZSxGbil8MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMp'@;
put 'fDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxMdCkscD0ocD1NYXRoLmltdWwoVXQsUXQpKStNYXRoLmltdWwoYm4sTHQpfDAsdz1NYXRoLmltdWwoYm4sUXQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5p'@;
put 'bXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxGbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsRm4pfDA7dmFyIGhvPShmZSsodj12K01h'@;
put 'dGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQs'@;
put 'cHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRo'@;
put 'LmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11'@;
put 'bCh6ZSxGbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXww'@;
put 'LHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9'@;
put 'dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxGbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmlt'@;
put 'dWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxGbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sRm4pfDA7dmFyIElvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LEZu'@;
put 'KSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLEZuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24s'@;
put 'am4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4s'@;
put 'am4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVb'@;
put 'MTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUlvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRo'@;
put 'aXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVu'@;
put 'Y3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIEllPTY3MTA4ODYzJm5lLEZlPU1hdGgubWlu'@;
put 'KGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0llPTY3MTA4ODYzJihLZT1LZStJZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4'@;
put 'NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUllLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1'@;
put 'bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJl'@;
put 'dHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBl'@;
put 'LnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5l'@;
put 'KWZvcih2YXIgSWU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sUWU9SWUqS2UtRmUqWWU7WWU9SWUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPVFlKSx2W3hlK09lXT1XZStZZSxTW3hlK09l'@;
put 'K0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKFFlPWRlKkllLWZlKkZlLEZlPWRlKkZlK2ZlKkllLEllPVFlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+'@;
put 'PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0t'@;
put 'cH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEw'@;
put 'ODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtM'@;
put 'KDA9PT1wKSxMKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNi'@;
put 'KGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksSWU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVu'@;
put 'Z3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLEllLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2Ur'@;
put 'Kyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkllW09lXTtkZVtPZV09bmVbT2VdKkllW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcs'@;
put 'diksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFy'@;
put 'cmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmlt'@;
put 'dWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyksTChnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMu'@;
put 'd29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVs'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBl'@;
put 'LnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5s'@;
put 'ZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJu'@;
put 'IFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhp'@;
put 'cy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tD'@;
put 'XTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1'@;
put 'bmN0aW9uKGcsQyxTKXt2YXIgdjtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYp'@;
put 'LG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tk'@;
put 'ZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0'@;
put 'dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gTCgwPT09dGhpcy5uZWdhdGl2'@;
put 'ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUy'@;
put 'NixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBMKDA9PT10aGlzLm5lZ2F0'@;
put 'aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4'@;
put 'NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MD90'@;
put 'aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVn'@;
put 'YXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlz'@;
put 'Lmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQp'@;
put 'LGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53'@;
put 'b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw'@;
put 'ZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30s'@;
put 'RS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgw'@;
put 'fHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+'@;
put 'PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEwoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRo'@;
put 'aXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4o'@;
put 'Uyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2Rl'@;
put 'XT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgSWU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNb'@;
put 'cC5sZW5ndGgreGUtMV0pO2ZvcihJZT1NYXRoLm1pbihJZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsSWUseGUpOzAhPT12Lm5lZ2F0aXZlOylJZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53'@;
put 'b3Jkc1t4ZV09SWUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEwoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/'@;
put 'e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFk'@;
put 'ZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygp'@;
put 'LmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0'@;
put 'aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0'@;
put 'aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90'@;
put 'eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2'@;
put 'ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9u'@;
put 'KGcpe0woZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtMKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxT'@;
put 'PXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9'@;
put 'LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxK'@;
put 'PW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsSWU9MTshKEMud29yZHNbMF0mSWUpJiZ4ZTwyNjsrK3hlLEll'@;
put 'PDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0x'@;
put 'KTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcu'@;
put 'aXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChn'@;
put 'KTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25l'@;
put 'LS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5j'@;
put 'bXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7'@;
put 'aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7'@;
put 'Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90'@;
put 'eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1sw'@;
put 'XSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0'@;
put 'aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndv'@;
put 'cmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUm'@;
put 'JiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxMKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxn'@;
put 'Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9'@;
put 'dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0'@;
put 'aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3Rv'@;
put 'dHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxMKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChn'@;
put 'KX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBu'@;
put 'dW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcp'@;
put 'fSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlv'@;
put 'bigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElTcXIgd29y'@;
put 'a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZt'@;
put 'KHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBMKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7'@;
put 'dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9'@;
put 'ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgTChnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5t'@;
put 'PWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhp'@;
put 'cy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5z'@;
put 'dWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3Bs'@;
put 'aXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIo'@;
put 'dGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVl'@;
put 'KSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxl'@;
put 'bmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcm'@;
put 'JmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1Nd'@;
put 'PTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmlt'@;
put 'dWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVu'@;
put 'Y3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1l'@;
put 'ICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90'@;
put 'b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtMKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1v'@;
put 'ZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0u'@;
put 'c3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1m'@;
put 'dW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5j'@;
put 'bXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1m'@;
put 'dW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihn'@;
put 'LEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnBy'@;
put 'b3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoTChDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2'@;
put 'PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtMKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5n'@;
put 'dGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLEllPXRoaXMucG93KGcsdiksRmU9cDsw'@;
put 'IT09SWUuY21wKHcpOyl7Zm9yKHZhciBPZT1JZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtMKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLEllPUllLnJlZE11'@;
put 'bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1m'@;
put 'dW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7'@;
put 'disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZl'@;
put 'JjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7'@;
put 'dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4u'@;
put 'cHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5w'@;
put 'cm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRo'@;
put 'aXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lm'@;
put 'KGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNo'@;
put 'aWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5t'@;
put 'dWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDgwOTE6TT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBPKFIseil7aWYobnVsbD09Uil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBmaXJzdCBhcmd1bWVudCB0byBvYmplY3QiKTtmb3Io'@;
put 'dmFyIEs9T2JqZWN0KFIpLEw9MTtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKXt2YXIgaz1hcmd1bWVudHNbTF07aWYobnVsbCE9aylmb3IodmFyIEU9T2JqZWN0LmtleXMoT2JqZWN0KGspKSxqPTAsVj1FLmxlbmd0aDtqPFY7aisrKXt2YXIgQj1FW2pdLFk9T2JqZWN0LmdldE93blByb3BlcnR5'@;
put 'RGVzY3JpcHRvcihrLEIpO3ZvaWQgMCE9PVkmJlkuZW51bWVyYWJsZSYmKEtbQl09a1tCXSl9fXJldHVybiBLfU0uZXhwb3J0cz17YXNzaWduOk8scG9seWZpbGw6ZnVuY3Rpb24oKXtPYmplY3QuYXNzaWdufHxPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LCJhc3NpZ24iLHtlbnVtZXJh'@;
put 'YmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpPfSl9fX0sNzE4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig1MTA4KSxMPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsaz1MJiYiZnVuY3Rpb24iPT10eXBlb2YgTC5hcHBseT9M'@;
put 'LmFwcGx5OmZ1bmN0aW9uKGhlLHVlLGNlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoaGUsdWUsY2UpfTt6PUwmJiJmdW5jdGlvbiI9PXR5cGVvZiBMLm93bktleXM/TC5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oaGUpe3JldHVy'@;
put 'biBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaGUpKX06ZnVuY3Rpb24oaGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZSl9O3ZhciBFPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oaGUpe3JldHVy'@;
put 'biBoZSE9aGV9O2Z1bmN0aW9uIGooKXtqLmluaXQuY2FsbCh0aGlzKX1NLmV4cG9ydHM9aixNLmV4cG9ydHMub25jZT1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGNlLEcpe2Z1bmN0aW9uIGIoSCl7aGUucmVtb3ZlTGlzdGVuZXIodWUsRCksRyhIKX1mdW5j'@;
put 'dGlvbiBEKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGhlLnJlbW92ZUxpc3RlbmVyJiZoZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGIpLGNlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9dmFyIEg7c2UoaGUsdWUsRCx7b25jZTohMH0pLCJlcnJvciIhPT11ZSYmImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'KEg9aGUpLm9uJiZzZShILCJlcnJvciIsYix7b25jZTohMH0pfSl9LGouRXZlbnRFbWl0dGVyPWosai5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsai5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsai5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIFY9MTA7ZnVuY3Rpb24gQiho'@;
put 'ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBoZSl9ZnVuY3Rpb24gWShoZSl7cmV0dXJuIHZvaWQgMD09PWhlLl9tYXhM'@;
put 'aXN0ZW5lcnM/ai5kZWZhdWx0TWF4TGlzdGVuZXJzOmhlLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gWChoZSx1ZSxjZSxHKXt2YXIgYixELEg7aWYoQihjZSksdm9pZCAwPT09KEQ9aGUuX2V2ZW50cyk/KEQ9aGUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGhlLl9ldmVudHNDb3VudD0w'@;
put 'KToodm9pZCAwIT09RC5uZXdMaXN0ZW5lciYmKGhlLmVtaXQoIm5ld0xpc3RlbmVyIix1ZSxjZS5saXN0ZW5lcj9jZS5saXN0ZW5lcjpjZSksRD1oZS5fZXZlbnRzKSxIPURbdWVdKSx2b2lkIDA9PT1IKUg9RFt1ZV09Y2UsKytoZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgSD9IPURbdWVdPUc/W2NlLEhdOltILGNlXTpHP0gudW5zaGlmdChjZSk6SC5wdXNoKGNlKSwoYj1ZKGhlKSk+MCYmSC5sZW5ndGg+YiYmIUgud2FybmVkKXtILndhcm5lZD0hMDt2YXIgZz1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3Rl'@;
put 'ZC4gIitILmxlbmd0aCsiICIrU3RyaW5nKHVlKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtnLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsZy5lbWl0dGVyPWhlLGcudHlwZT11ZSxnLmNvdW50'@;
put 'PUgubGVuZ3RoLEsmJksud2FybiYmSy53YXJuKGcpfXJldHVybiBoZX1mdW5jdGlvbiBVKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlz'@;
put 'Lmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBxKGhlLHVlLGNlKXt2YXIgRz17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6aGUsdHlwZTp1ZSxsaXN0ZW5lcjpjZX0sYj1VLmJpbmQoRyk7'@;
put 'cmV0dXJuIGIubGlzdGVuZXI9Y2UsRy53cmFwRm49YixifWZ1bmN0aW9uIGVlKGhlLHVlLGNlKXt2YXIgRz1oZS5fZXZlbnRzO2lmKHZvaWQgMD09PUcpcmV0dXJuW107dmFyIGI9R1t1ZV07cmV0dXJuIHZvaWQgMD09PWI/W106ImZ1bmN0aW9uIj09dHlwZW9mIGI/Y2U/W2IubGlzdGVuZXJ8'@;
put 'fGJdOltiXTpjZT9mdW5jdGlvbihEKXtmb3IodmFyIEg9bmV3IEFycmF5KEQubGVuZ3RoKSxOPTA7TjxILmxlbmd0aDsrK04pSFtOXT1EW05dLmxpc3RlbmVyfHxEW05dO3JldHVybiBIfShiKTpvZShiLGIubGVuZ3RoKX1mdW5jdGlvbiB0ZShoZSl7dmFyIHVlPXRoaXMuX2V2ZW50cztpZih2'@;
put 'b2lkIDAhPT11ZSl7dmFyIGNlPXVlW2hlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgY2UpcmV0dXJuIDE7aWYodm9pZCAwIT09Y2UpcmV0dXJuIGNlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBvZShoZSx1ZSl7Zm9yKHZhciBjZT1uZXcgQXJyYXkodWUpLEc9MDtHPHVlOysrRyljZVtHXT1o'@;
put 'ZVtHXTtyZXR1cm4gY2V9ZnVuY3Rpb24gc2UoaGUsdWUsY2UsRyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGhlLm9uKUcub25jZT9oZS5vbmNlKHVlLGNlKTpoZS5vbih1ZSxjZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaGUpO2hlLmFkZEV2ZW50TGlzdGVuZXIodWUsZnVuY3Rpb24gYihEKXtHLm9uY2UmJmhlLnJlbW92ZUV2ZW50TGlzdGVuZXIodWUsYiksY2UoRCl9'@;
put 'KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGosImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWfSxzZXQ6ZnVuY3Rpb24oaGUpe2lmKCJudW1iZXIiIT10eXBlb2YgaGV8fGhlPDB8fEUoaGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdU'@;
put 'aGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraGUrIi4iKTtWPWhlfX0pLGouaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRz'@;
put 'IT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LGoucHJvdG90eXBlLnNldE1heExpc3Rl'@;
put 'bmVycz1mdW5jdGlvbihoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBoZXx8aGU8MHx8RShoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytoZSsiLiIpO3Jl'@;
put 'dHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9aGUsdGhpc30sai5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFkodGhpcyl9LGoucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oaGUpe2Zvcih2YXIgdWU9W10sY2U9MTtjZTxhcmd1bWVudHMubGVuZ3RoO2NlKyspdWUu'@;
put 'cHVzaChhcmd1bWVudHNbY2VdKTt2YXIgRz0iZXJyb3IiPT09aGUsYj10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09YilHPUcmJnZvaWQgMD09PWIuZXJyb3I7ZWxzZSBpZighRylyZXR1cm4hMTtpZihHKXt2YXIgRDtpZih1ZS5sZW5ndGg+MCYmKEQ9dWVbMF0pLEQgaW5zdGFuY2VvZiBFcnJv'@;
put 'cil0aHJvdyBEO3ZhciBIPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKEQ/IiAoIitELm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgSC5jb250ZXh0PUQsSH12YXIgTj1iW2hlXTtpZih2b2lkIDA9PT1OKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOKWsoTix0aGlzLHVlKTtl'@;
put 'bHNle3ZhciBnPU4ubGVuZ3RoLEM9b2UoTixnKTtmb3IoY2U9MDtjZTxnOysrY2UpayhDW2NlXSx0aGlzLHVlKX1yZXR1cm4hMH0sai5wcm90b3R5cGUub249ai5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBYKHRoaXMsaGUsdWUsITEpfSxqLnByb3RvdHlw'@;
put 'ZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBYKHRoaXMsaGUsdWUsITApfSxqLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gQih1ZSksdGhpcy5vbihoZSxxKHRoaXMsaGUsdWUpKSx0aGlzfSxqLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3Rl'@;
put 'bmVyPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gQih1ZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoaGUscSh0aGlzLGhlLHVlKSksdGhpc30sai5wcm90b3R5cGUub2ZmPWoucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGhlLHVlKXt2YXIgY2UsRyxiLEQsSDtpZihCKHVlKSx2b2lk'@;
put 'IDA9PT0oRz10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShjZT1HW2hlXSkpcmV0dXJuIHRoaXM7aWYoY2U9PT11ZXx8Y2UubGlzdGVuZXI9PT11ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgR1to'@;
put 'ZV0sRy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsaGUsY2UubGlzdGVuZXJ8fHVlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgY2Upe2ZvcihiPS0xLEQ9Y2UubGVuZ3RoLTE7RD49MDtELS0paWYoY2VbRF09PT11ZXx8Y2VbRF0ubGlzdGVuZXI9PT11'@;
put 'ZSl7SD1jZVtEXS5saXN0ZW5lcixiPUQ7YnJlYWt9aWYoYjwwKXJldHVybiB0aGlzOzA9PT1iP2NlLnNoaWZ0KCk6ZnVuY3Rpb24oTixnKXtmb3IoO2crMTxOLmxlbmd0aDtnKyspTltnXT1OW2crMV07Ti5wb3AoKX0oY2UsYiksMT09PWNlLmxlbmd0aCYmKEdbaGVdPWNlWzBdKSx2b2lkIDAh'@;
put 'PT1HLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixoZSxIfHx1ZSl9cmV0dXJuIHRoaXN9LGoucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihoZSl7dmFyIHVlLGNlLEc7aWYodm9pZCAwPT09KGNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRo'@;
put 'aXM7aWYodm9pZCAwPT09Y2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1jZVtoZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2'@;
put 'ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBjZVtoZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBiLEQ9T2JqZWN0LmtleXMoY2UpO2ZvcihHPTA7RzxELmxlbmd0aDsrK0cpInJlbW92ZUxpc3RlbmVyIiE9PShiPURbR10pJiZ0aGlzLnJlbW92ZUFsbExpc3Rl'@;
put 'bmVycyhiKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih1ZT1jZVtoZV0pKXRoaXMucmVtb3ZlTGlzdGVu'@;
put 'ZXIoaGUsdWUpO2Vsc2UgaWYodm9pZCAwIT09dWUpZm9yKEc9dWUubGVuZ3RoLTE7Rz49MDtHLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihoZSx1ZVtHXSk7cmV0dXJuIHRoaXN9LGoucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihoZSl7cmV0dXJuIGVlKHRoaXMsaGUsITApfSxqLnByb3Rv'@;
put 'dHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oaGUpe3JldHVybiBlZSh0aGlzLGhlLCExKX0sai5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaGUubGlzdGVuZXJDb3VudD9oZS5saXN0ZW5lckNvdW50KHVlKTp0ZS5jYWxsKGhlLHVlKX0s'@;
put 'ai5wcm90b3R5cGUubGlzdGVuZXJDb3VudD10ZSxqLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/eih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDIzMTgpO00uZXhwb3J0'@;
put 'cz1mdW5jdGlvbihMLGssRSxqKXtpZih6LmlzQnVmZmVyKEwpfHwoTD16LmZyb20oTCwiYmluYXJ5IikpLGsmJih6LmlzQnVmZmVyKGspfHwoaz16LmZyb20oaywiYmluYXJ5IikpLDghPT1rLmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRo'@;
put 'IDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIFY9RS84LEI9ei5hbGxvYyhWKSxZPXouYWxsb2Moanx8MCksWD16LmFsbG9jKDApO1Y+MHx8aj4wOyl7dmFyIFU9bmV3IEs7VS51cGRhdGUoWCksVS51cGRhdGUoTCksayYmVS51cGRhdGUoayksWD1VLmRpZ2VzdCgpO3ZhciBxPTA7aWYoVj4wKXt2'@;
put 'YXIgZWU9Qi5sZW5ndGgtVjtxPU1hdGgubWluKFYsWC5sZW5ndGgpLFguY29weShCLGVlLDAscSksVi09cX1pZihxPFgubGVuZ3RoJiZqPjApe3ZhciB0ZT1ZLmxlbmd0aC1qLG9lPU1hdGgubWluKGosWC5sZW5ndGgtcSk7WC5jb3B5KFksdGUscSxxK29lKSxqLT1vZX19cmV0dXJuIFguZmls'@;
put 'bCgwKSx7a2V5OkIsaXY6WX19fSw0MDI5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MzIwKSxLPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O00uZXhwb3J0cz1mdW5jdGlvbihrLEUsail7aWYoIXooRSkpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIFY7YXJndW1lbnRzLmxlbmd0aD49MyYmKFY9aiksIltvYmplY3QgQXJyYXldIj09PUsuY2FsbChrKT9mdW5jdGlvbihCLFksWCl7Zm9yKHZhciBVPTAscT1CLmxlbmd0aDtVPHE7VSsrKUwuY2FsbChCLFUp'@;
put 'JiYobnVsbD09WD9ZKEJbVV0sVSxCKTpZLmNhbGwoWCxCW1VdLFUsQikpfShrLEUsVik6InN0cmluZyI9PXR5cGVvZiBrP2Z1bmN0aW9uKEIsWSxYKXtmb3IodmFyIFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspbnVsbD09WD9ZKEIuY2hhckF0KFUpLFUsQik6WS5jYWxsKFgsQi5jaGFyQXQoVSks'@;
put 'VSxCKX0oayxFLFYpOmZ1bmN0aW9uKEIsWSxYKXtmb3IodmFyIFUgaW4gQilMLmNhbGwoQixVKSYmKG51bGw9PVg/WShCW1VdLFUsQik6WS5jYWxsKFgsQltVXSxVLEIpKX0oayxFLFYpfX0sNjIzMDpNPT57TS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmLkZvcm1EYXRhOndp'@;
put 'bmRvdy5Gb3JtRGF0YX0sNTMwMjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2NvbnN0IEw9Uig3Nyksaz1SKDI1MjApLEU9UigxMzgxKS5ta2RpcnNTeW5jLGo9UigzMTgpLnV0aW1lc01pbGxpc1N5bmMsVj1SKDI3MzMpO2Z1bmN0aW9uIEIocSxlZSx0'@;
put 'ZSxvZSl7Y29uc3Qgc2U9KG9lLmRlcmVmZXJlbmNlP0wuc3RhdFN5bmM6TC5sc3RhdFN5bmMpKGVlKTtpZihzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBoZT1zZSxjZT1lZSxHPXRlLGI9b2UscT9VKGNlLEcsYik6KEQ9aGUubW9kZSxIPWNlLGc9YixMLm1rZGlyU3luYyhOPUcpLFUoSCxOLGcp'@;
put 'LFgoTixEKSk7dmFyIGhlLGNlLEcsYixELEgsTixnO2lmKHNlLmlzRmlsZSgpfHxzZS5pc0NoYXJhY3RlckRldmljZSgpfHxzZS5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlLEcsYil7cmV0dXJuIHVlP2Z1bmN0aW9uKEQsSCxOLGcpe2lmKGcub3ZlcndyaXRlKXJl'@;
put 'dHVybiBMLnVubGlua1N5bmMoTiksWShELEgsTixnKTtpZihnLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke059JyBhbHJlYWR5IGV4aXN0c2ApfShoZSxjZSxHLGIpOlkoaGUsY2UsRyxiKX0oc2UscSxlZSx0ZSxvZSk7aWYoc2UuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVu'@;
put 'Y3Rpb24oaGUsdWUsY2UsRyl7bGV0IGI9TC5yZWFkbGlua1N5bmModWUpO2lmKEcuZGVyZWZlcmVuY2UmJihiPWsucmVzb2x2ZSh6LmN3ZCgpLGIpKSxoZSl7bGV0IEQ7dHJ5e0Q9TC5yZWFkbGlua1N5bmMoY2UpfWNhdGNoKEgpe2lmKCJFSU5WQUwiPT09SC5jb2RlfHwiVU5LTk9XTiI9PT1I'@;
put 'LmNvZGUpcmV0dXJuIEwuc3ltbGlua1N5bmMoYixjZSk7dGhyb3cgSH1pZihHLmRlcmVmZXJlbmNlJiYoRD1rLnJlc29sdmUoei5jd2QoKSxEKSksVi5pc1NyY1N1YmRpcihiLEQpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Yn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2Vs'@;
put 'ZiwgJyR7RH0nLmApO2lmKEwuc3RhdFN5bmMoY2UpLmlzRGlyZWN0b3J5KCkmJlYuaXNTcmNTdWJkaXIoRCxiKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7RH0nIHdpdGggJyR7Yn0nLmApO3JldHVybiBmdW5jdGlvbihILE4pe3JldHVybiBMLnVubGlua1N5bmMoTiks'@;
put 'TC5zeW1saW5rU3luYyhILE4pfShiLGNlKX1yZXR1cm4gTC5zeW1saW5rU3luYyhiLGNlKX0ocSxlZSx0ZSxvZSk7dGhyb3cgc2UuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7ZWV9YCk6c2UuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29w'@;
put 'eSBhIEZJRk8gcGlwZTogJHtlZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtlZX1gKX1mdW5jdGlvbiBZKHEsZWUsdGUsb2Upe3JldHVybiBMLmNvcHlGaWxlU3luYyhlZSx0ZSksb2UucHJlc2VydmVUaW1lc3RhbXBzJiYoaGU9ZWUsdWU9dGUsMD09KDEyOCYoc2U9cS5tb2RlKSkm'@;
put 'JlgodWUsMTI4fHNlKSxmdW5jdGlvbihjZSxHKXtjb25zdCBiPUwuc3RhdFN5bmMoY2UpO2ooRyxiLmF0aW1lLGIubXRpbWUpfShoZSx1ZSkpLFgodGUscS5tb2RlKTt2YXIgc2UsaGUsdWV9ZnVuY3Rpb24gWChxLGVlKXtyZXR1cm4gTC5jaG1vZFN5bmMocSxlZSl9ZnVuY3Rpb24gVShxLGVl'@;
put 'LHRlKXtMLnJlYWRkaXJTeW5jKHEpLmZvckVhY2gob2U9PmZ1bmN0aW9uKHNlLGhlLHVlLGNlKXtjb25zdCBHPWsuam9pbihoZSxzZSksYj1rLmpvaW4odWUsc2UpLHtkZXN0U3RhdDpEfT1WLmNoZWNrUGF0aHNTeW5jKEcsYiwiY29weSIsY2UpO3JldHVybiBmdW5jdGlvbihILE4sZyxDKXtp'@;
put 'ZighQy5maWx0ZXJ8fEMuZmlsdGVyKE4sZykpcmV0dXJuIEIoSCxOLGcsQyl9KEQsRyxiLGNlKX0ob2UscSxlZSx0ZSkpfU0uZXhwb3J0cz1mdW5jdGlvbihxLGVlLHRlKXsiZnVuY3Rpb24iPT10eXBlb2YgdGUmJih0ZT17ZmlsdGVyOnRlfSksKHRlPXRlfHx7fSkuY2xvYmJlcj0hKCJjbG9i'@;
put 'YmVyImluIHRlKXx8ISF0ZS5jbG9iYmVyLHRlLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIHRlPyEhdGUub3ZlcndyaXRlOnRlLmNsb2JiZXIsdGUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT16LmFyY2gmJksud2FybigiZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFt'@;
put 'cHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIpO2NvbnN0e3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2V9PVYuY2hlY2tQYXRoc1N5bmMocSxl'@;
put 'ZSwiY29weSIsdGUpO3JldHVybiBWLmNoZWNrUGFyZW50UGF0aHNTeW5jKHEsb2UsZWUsImNvcHkiKSxmdW5jdGlvbihoZSx1ZSxjZSxHKXtpZihHLmZpbHRlciYmIUcuZmlsdGVyKHVlLGNlKSlyZXR1cm47Y29uc3QgYj1rLmRpcm5hbWUoY2UpO3JldHVybiBMLmV4aXN0c1N5bmMoYil8fEUo'@;
put 'YiksQihoZSx1ZSxjZSxHKX0oc2UscSxlZSx0ZSl9fSw4NjkwOihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXtjb3B5U3luYzpSKDUzMDIpfX0sNzE4OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2NvbnN0IEw9Uig3Nyksaz1SKDI1MjAp'@;
put 'LEU9UigxMzgxKS5ta2RpcnMsaj1SKDkyNTcpLnBhdGhFeGlzdHMsVj1SKDMxOCkudXRpbWVzTWlsbGlzLEI9UigyNzMzKTtmdW5jdGlvbiBZKHVlLGNlLEcsYixEKXtjb25zdCBIPWsuZGlybmFtZShHKTtqKEgsKE4sZyk9Pk4/RChOKTpnP1UodWUsY2UsRyxiLEQpOnZvaWQgRShILEM9PkM/'@;
put 'RChDKTpVKHVlLGNlLEcsYixEKSkpfWZ1bmN0aW9uIFgodWUsY2UsRyxiLEQsSCl7UHJvbWlzZS5yZXNvbHZlKEQuZmlsdGVyKEcsYikpLnRoZW4oTj0+Tj91ZShjZSxHLGIsRCxIKTpIKCksTj0+SChOKSl9ZnVuY3Rpb24gVSh1ZSxjZSxHLGIsRCl7KGIuZGVyZWZlcmVuY2U/TC5zdGF0Okwu'@;
put 'bHN0YXQpKGNlLChILE4pPT57cmV0dXJuIEg/RChIKTpOLmlzRGlyZWN0b3J5KCk/KGc9TixTPWNlLHY9RyxwPWIsdz1ELHVlP29lKFMsdixwLHcpOihKPWcubW9kZSxuZT1TLGZlPXAseGU9dyx2b2lkIEwubWtkaXIoZGU9dixJZT0+e2lmKEllKXJldHVybiB4ZShJZSk7b2UobmUsZGUsZmUs'@;
put 'RmU9PkZlP3hlKEZlKTp0ZShkZSxKLHhlKSl9KSkpOk4uaXNGaWxlKCl8fE4uaXNDaGFyYWN0ZXJEZXZpY2UoKXx8Ti5pc0Jsb2NrRGV2aWNlKCk/ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3JldHVybiBDP2Z1bmN0aW9uKEosbmUsZGUsZmUseGUpe2lmKCFmZS5vdmVyd3JpdGUpcmV0dXJuIGZl'@;
put 'LmVycm9yT25FeGlzdD94ZShuZXcgRXJyb3IoYCcke2RlfScgYWxyZWFkeSBleGlzdHNgKSk6eGUoKTtMLnVubGluayhkZSxJZT0+SWU/eGUoSWUpOnEoSixuZSxkZSxmZSx4ZSkpfShnLFMsdixwLHcpOnEoZyxTLHYscCx3KX0oTix1ZSxjZSxHLGIsRCk6Ti5pc1N5bWJvbGljTGluaygpP2Z1'@;
put 'bmN0aW9uIGhlKHVlLGNlLEcsYixEKXtMLnJlYWRsaW5rKGNlLChILE4pPT5IP0QoSCk6KGIuZGVyZWZlcmVuY2UmJihOPWsucmVzb2x2ZSh6LmN3ZCgpLE4pKSx1ZT92b2lkIEwucmVhZGxpbmsoRywoZyxDKT0+Zz8iRUlOVkFMIj09PWcuY29kZXx8IlVOS05PV04iPT09Zy5jb2RlP0wuc3lt'@;
put 'bGluayhOLEcsRCk6RChnKTooYi5kZXJlZmVyZW5jZSYmKEM9ay5yZXNvbHZlKHouY3dkKCksQykpLEIuaXNTcmNTdWJkaXIoTixDKT9EKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Tn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Q30nLmApKTp1ZS5pc0RpcmVjdG9yeSgp'@;
put 'JiZCLmlzU3JjU3ViZGlyKEMsTik/RChuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Q30nIHdpdGggJyR7Tn0nLmApKTpmdW5jdGlvbihTLHYscCl7TC51bmxpbmsodix3PT53P3Aodyk6TC5zeW1saW5rKFMsdixwKSl9KE4sRyxEKSkpOkwuc3ltbGluayhOLEcsRCkpKX0odWUsY2Us'@;
put 'RyxiLEQpOk4uaXNTb2NrZXQoKT9EKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtjZX1gKSk6Ti5pc0ZJRk8oKT9EKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7Y2V9YCkpOkQobmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7Y2V9YCkpO3Zh'@;
put 'ciBnLFMsdixwLHcsSixuZSxkZSxmZSx4ZX0pfWZ1bmN0aW9uIHEodWUsY2UsRyxiLEQpe0wuY29weUZpbGUoY2UsRyxIPT57cmV0dXJuIEg/RChIKTpiLnByZXNlcnZlVGltZXN0YW1wcz8oZz1jZSxDPUcsUz1ELDA9PSgxMjgmKE49dWUubW9kZSkpP3RlKEMsMTI4fE4sdj0+dj9TKHYpOmVl'@;
put 'KE4sZyxDLFMpKTplZShOLGcsQyxTKSk6dGUoRyx1ZS5tb2RlLEQpO3ZhciBOLGcsQyxTfSl9ZnVuY3Rpb24gZWUodWUsY2UsRyxiKXt2YXIgSCxOO0g9RyxOPUQ9PkQ/YihEKTp0ZShHLHVlLGIpLEwuc3RhdChjZSwoZyxDKT0+Zz9OKGcpOlYoSCxDLmF0aW1lLEMubXRpbWUsTikpfWZ1bmN0'@;
put 'aW9uIHRlKHVlLGNlLEcpe3JldHVybiBMLmNobW9kKHVlLGNlLEcpfWZ1bmN0aW9uIG9lKHVlLGNlLEcsYil7TC5yZWFkZGlyKHVlLChELEgpPT5EP2IoRCk6c2UoSCx1ZSxjZSxHLGIpKX1mdW5jdGlvbiBzZSh1ZSxjZSxHLGIsRCl7Y29uc3QgSD11ZS5wb3AoKTtyZXR1cm4gSD9mdW5jdGlv'@;
put 'bihOLGcsQyxTLHYscCl7Y29uc3Qgdz1rLmpvaW4oQyxnKSxKPWsuam9pbihTLGcpO0IuY2hlY2tQYXRocyh3LEosImNvcHkiLHYsKG5lLGRlKT0+e2lmKG5lKXJldHVybiBwKG5lKTtjb25zdHtkZXN0U3RhdDpmZX09ZGU7dmFyIHhlLEllLEZlLE9lLGplO3hlPWZlLEllPXcsRmU9SixqZT14'@;
put 'ZT0+eGU/cCh4ZSk6c2UoTixDLFMsdixwKSwoT2U9dikuZmlsdGVyP1goVSx4ZSxJZSxGZSxPZSxqZSk6VSh4ZSxJZSxGZSxPZSxqZSl9KX0odWUsSCxjZSxHLGIsRCk6RCgpfU0uZXhwb3J0cz1mdW5jdGlvbih1ZSxjZSxHLGIpeyJmdW5jdGlvbiIhPXR5cGVvZiBHfHxiPyJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBHJiYoRz17ZmlsdGVyOkd9KTooYj1HLEc9e30pLGI9Ynx8ZnVuY3Rpb24oKXt9LChHPUd8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gRyl8fCEhRy5jbG9iYmVyLEcub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gRz8hIUcub3ZlcndyaXRlOkcuY2xvYmJlcixHLnByZXNlcnZl'@;
put 'VGltZXN0YW1wcyYmImlhMzIiPT09ei5hcmNoJiZLLndhcm4oImZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2Rl'@;
put 'LWZzLWV4dHJhL2lzc3Vlcy8yNjkiKSxCLmNoZWNrUGF0aHModWUsY2UsImNvcHkiLEcsKEQsSCk9PntpZihEKXJldHVybiBiKEQpO2NvbnN0e3NyY1N0YXQ6TixkZXN0U3RhdDpnfT1IO0IuY2hlY2tQYXJlbnRQYXRocyh1ZSxOLGNlLCJjb3B5IixDPT5DP2IoQyk6Ry5maWx0ZXI/WChZLGcs'@;
put 'dWUsY2UsRyxiKTpZKGcsdWUsY2UsRyxiKSl9KX19LDY0NjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrO00uZXhwb3J0cz17Y29weTp6KFIoNzE4OSkpfX0sNTU5MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9t'@;
put 'UHJvbWlzZSxLPVIoNzc0OSksTD1SKDI1MjApLGs9UigxMzgxKSxFPVIoNDU0Miksaj16KGZ1bmN0aW9uKCl7dmFyIEI9YWUoZnVuY3Rpb24qKFkpe2xldCBYO3RyeXtYPXlpZWxkIEsucmVhZGRpcihZKX1jYXRjaHtyZXR1cm4gay5ta2RpcnMoWSl9cmV0dXJuIFByb21pc2UuYWxsKFgubWFw'@;
put 'KFU9PkUucmVtb3ZlKEwuam9pbihZLFUpKSkpfSk7cmV0dXJuIGZ1bmN0aW9uKFkpe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIFYoQil7bGV0IFk7dHJ5e1k9Sy5yZWFkZGlyU3luYyhCKX1jYXRjaHtyZXR1cm4gay5ta2RpcnNTeW5jKEIpfVkuZm9yRWFj'@;
put 'aChYPT57WD1MLmpvaW4oQixYKSxFLnJlbW92ZVN5bmMoWCl9KX1NLmV4cG9ydHM9e2VtcHR5RGlyU3luYzpWLGVtcHR5ZGlyU3luYzpWLGVtcHR5RGlyOmosZW1wdHlkaXI6an19LDY1MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9Uigy'@;
put 'NTIwKSxMPVIoNzcpLGs9UigxMzgxKTtNLmV4cG9ydHM9e2NyZWF0ZUZpbGU6eihmdW5jdGlvbihFLGope2Z1bmN0aW9uIFYoKXtMLndyaXRlRmlsZShFLCIiLEI9PntpZihCKXJldHVybiBqKEIpO2ooKX0pfUwuc3RhdChFLChCLFkpPT57aWYoIUImJlkuaXNGaWxlKCkpcmV0dXJuIGooKTtj'@;
put 'b25zdCBYPUsuZGlybmFtZShFKTtMLnN0YXQoWCwoVSxxKT0+e2lmKFUpcmV0dXJuIkVOT0VOVCI9PT1VLmNvZGU/ay5ta2RpcnMoWCxlZT0+e2lmKGVlKXJldHVybiBqKGVlKTtWKCl9KTpqKFUpO3EuaXNEaXJlY3RvcnkoKT9WKCk6TC5yZWFkZGlyKFgsZWU9PntpZihlZSlyZXR1cm4gaihl'@;
put 'ZSl9KX0pfSl9KSxjcmVhdGVGaWxlU3luYzpmdW5jdGlvbihFKXtsZXQgajt0cnl7aj1MLnN0YXRTeW5jKEUpfWNhdGNoe31pZihqJiZqLmlzRmlsZSgpKXJldHVybjtjb25zdCBWPUsuZGlybmFtZShFKTt0cnl7TC5zdGF0U3luYyhWKS5pc0RpcmVjdG9yeSgpfHxMLnJlYWRkaXJTeW5jKFYp'@;
put 'fWNhdGNoKEIpe2lmKCFCfHwiRU5PRU5UIiE9PUIuY29kZSl0aHJvdyBCO2subWtkaXJzU3luYyhWKX1MLndyaXRlRmlsZVN5bmMoRSwiIil9fX0sMTcyMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2NTMwKSxLPVIoNDE0NyksTD1SKDM2MzUpO00uZXhwb3J0cz17Y3JlYXRl'@;
put 'RmlsZTp6LmNyZWF0ZUZpbGUsY3JlYXRlRmlsZVN5bmM6ei5jcmVhdGVGaWxlU3luYyxlbnN1cmVGaWxlOnouY3JlYXRlRmlsZSxlbnN1cmVGaWxlU3luYzp6LmNyZWF0ZUZpbGVTeW5jLGNyZWF0ZUxpbms6Sy5jcmVhdGVMaW5rLGNyZWF0ZUxpbmtTeW5jOksuY3JlYXRlTGlua1N5bmMsZW5z'@;
put 'dXJlTGluazpLLmNyZWF0ZUxpbmssZW5zdXJlTGlua1N5bmM6Sy5jcmVhdGVMaW5rU3luYyxjcmVhdGVTeW1saW5rOkwuY3JlYXRlU3ltbGluayxjcmVhdGVTeW1saW5rU3luYzpMLmNyZWF0ZVN5bWxpbmtTeW5jLGVuc3VyZVN5bWxpbms6TC5jcmVhdGVTeW1saW5rLGVuc3VyZVN5bWxpbmtT'@;
put 'eW5jOkwuY3JlYXRlU3ltbGlua1N5bmN9fSw0MTQ3OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxLPVIoMjUyMCksTD1SKDc3KSxrPVIoMTM4MSksRT1SKDkyNTcpLnBhdGhFeGlzdHMse2FyZUlkZW50aWNhbDpqfT1SKDI3MzMpO00uZXhwb3J0'@;
put 'cz17Y3JlYXRlTGluazp6KGZ1bmN0aW9uKFYsQixZKXtmdW5jdGlvbiBYKFUscSl7TC5saW5rKFUscSxlZT0+e2lmKGVlKXJldHVybiBZKGVlKTtZKG51bGwpfSl9TC5sc3RhdChCLChVLHEpPT57TC5sc3RhdChWLChlZSx0ZSk9PntpZihlZSlyZXR1cm4gZWUubWVzc2FnZT1lZS5tZXNzYWdl'@;
put 'LnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFkoZWUpO2lmKHEmJmoodGUscSkpcmV0dXJuIFkobnVsbCk7Y29uc3Qgb2U9Sy5kaXJuYW1lKEIpO0Uob2UsKHNlLGhlKT0+c2U/WShzZSk6aGU/WChWLEIpOnZvaWQgay5ta2RpcnMob2UsdWU9PntpZih1ZSlyZXR1cm4gWSh1ZSk7WChW'@;
put 'LEIpfSkpfSl9KX0pLGNyZWF0ZUxpbmtTeW5jOmZ1bmN0aW9uKFYsQil7bGV0IFk7dHJ5e1k9TC5sc3RhdFN5bmMoQil9Y2F0Y2h7fXRyeXtjb25zdCBVPUwubHN0YXRTeW5jKFYpO2lmKFkmJmooVSxZKSlyZXR1cm59Y2F0Y2goVSl7dGhyb3cgVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNl'@;
put 'KCJsc3RhdCIsImVuc3VyZUxpbmsiKSxVfWNvbnN0IFg9Sy5kaXJuYW1lKEIpO3JldHVybiBMLmV4aXN0c1N5bmMoWCl8fGsubWtkaXJzU3luYyhYKSxMLmxpbmtTeW5jKFYsQil9fX0sNjA3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9UigyNTIwKSxLPVIoNzcpLEw9Uig5MjU3'@;
put 'KS5wYXRoRXhpc3RzO00uZXhwb3J0cz17c3ltbGlua1BhdGhzOmZ1bmN0aW9uKGssRSxqKXtpZih6LmlzQWJzb2x1dGUoaykpcmV0dXJuIEsubHN0YXQoayxWPT5WPyhWLm1lc3NhZ2U9Vi5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLGooVikpOmoobnVsbCx7dG9D'@;
put 'd2Q6ayx0b0RzdDprfSkpO3tjb25zdCBWPXouZGlybmFtZShFKSxCPXouam9pbihWLGspO3JldHVybiBMKEIsKFksWCk9Plk/aihZKTpYP2oobnVsbCx7dG9Dd2Q6Qix0b0RzdDprfSk6Sy5sc3RhdChrLFU9PlU/KFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVT'@;
put 'eW1saW5rIiksaihVKSk6aihudWxsLHt0b0N3ZDprLHRvRHN0OnoucmVsYXRpdmUoVixrKX0pKSl9fSxzeW1saW5rUGF0aHNTeW5jOmZ1bmN0aW9uKGssRSl7bGV0IGo7aWYoei5pc0Fic29sdXRlKGspKXtpZihqPUsuZXhpc3RzU3luYyhrKSwhail0aHJvdyBuZXcgRXJyb3IoImFic29sdXRl'@;
put 'IHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6ayx0b0RzdDprfX17Y29uc3QgVj16LmRpcm5hbWUoRSksQj16LmpvaW4oVixrKTtpZihqPUsuZXhpc3RzU3luYyhCKSxqKXJldHVybnt0b0N3ZDpCLHRvRHN0Omt9O2lmKGo9Sy5leGlzdHNTeW5jKGspLCFqKXRocm93IG5l'@;
put 'dyBFcnJvcigicmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDprLHRvRHN0OnoucmVsYXRpdmUoVixrKX19fX19LDkyNTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpO00uZXhwb3J0cz17c3ltbGlua1R5cGU6ZnVuY3Rpb24oSyxMLGsp'@;
put 'e2lmKGs9ImZ1bmN0aW9uIj09dHlwZW9mIEw/TDprLEw9ImZ1bmN0aW9uIiE9dHlwZW9mIEwmJkwpcmV0dXJuIGsobnVsbCxMKTt6LmxzdGF0KEssKEUsaik9PntpZihFKXJldHVybiBrKG51bGwsImZpbGUiKTtMPWomJmouaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSIsayhudWxsLEwpfSl9'@;
put 'LHN5bWxpbmtUeXBlU3luYzpmdW5jdGlvbihLLEwpe2xldCBrO2lmKEwpcmV0dXJuIEw7dHJ5e2s9ei5sc3RhdFN5bmMoSyl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBrJiZrLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z'@;
put 'dCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9UigyNTIwKSxMPVIoNzc0OSksaz1SKDEzODEpLEU9ay5ta2RpcnMsaj1rLm1rZGlyc1N5bmMsVj1SKDYwNzIpLEI9Vi5zeW1saW5rUGF0aHMsWT1WLnN5bWxpbmtQYXRoc1N5bmMsWD1SKDkyNTkpLFU9WC5zeW1saW5rVHlwZSxxPVguc3ltbGlu'@;
put 'a1R5cGVTeW5jLGVlPVIoOTI1NykucGF0aEV4aXN0cyx7YXJlSWRlbnRpY2FsOnRlfT1SKDI3MzMpO2Z1bmN0aW9uIG9lKHNlLGhlLHVlLGNlKXtCKHNlLGhlLChHLGIpPT57aWYoRylyZXR1cm4gY2UoRyk7c2U9Yi50b0RzdCxVKGIudG9Dd2QsdWUsKEQsSCk9PntpZihEKXJldHVybiBjZShE'@;
put 'KTtjb25zdCBOPUsuZGlybmFtZShoZSk7ZWUoTiwoZyxDKT0+Zz9jZShnKTpDP0wuc3ltbGluayhzZSxoZSxILGNlKTp2b2lkIEUoTixTPT57aWYoUylyZXR1cm4gY2UoUyk7TC5zeW1saW5rKHNlLGhlLEgsY2UpfSkpfSl9KX1NLmV4cG9ydHM9e2NyZWF0ZVN5bWxpbms6eihmdW5jdGlvbihz'@;
put 'ZSxoZSx1ZSxjZSl7Y2U9ImZ1bmN0aW9uIj09dHlwZW9mIHVlP3VlOmNlLHVlPSJmdW5jdGlvbiIhPXR5cGVvZiB1ZSYmdWUsTC5sc3RhdChoZSwoRyxiKT0+eyFHJiZiLmlzU3ltYm9saWNMaW5rKCk/UHJvbWlzZS5hbGwoW0wuc3RhdChzZSksTC5zdGF0KGhlKV0pLnRoZW4oKFtELEhdKT0+'@;
put 'e2lmKHRlKEQsSCkpcmV0dXJuIGNlKG51bGwpO29lKHNlLGhlLHVlLGNlKX0pOm9lKHNlLGhlLHVlLGNlKX0pfSksY3JlYXRlU3ltbGlua1N5bmM6ZnVuY3Rpb24oc2UsaGUsdWUpe2xldCBjZTt0cnl7Y2U9TC5sc3RhdFN5bmMoaGUpfWNhdGNoe31pZihjZSYmY2UuaXNTeW1ib2xpY0xpbmso'@;
put 'KSl7Y29uc3QgRD1MLnN0YXRTeW5jKHNlKSxIPUwuc3RhdFN5bmMoaGUpO2lmKHRlKEQsSCkpcmV0dXJufWNvbnN0IEc9WShzZSxoZSk7c2U9Ry50b0RzdCx1ZT1xKEcudG9Dd2QsdWUpO2NvbnN0IGI9Sy5kaXJuYW1lKGhlKTtyZXR1cm4gTC5leGlzdHNTeW5jKGIpfHxqKGIpLEwuc3ltbGlu'@;
put 'a1N5bmMoc2UsaGUsdWUpfX19LDc3NDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9Uig3NyksTD1bImFjY2VzcyIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNob3duIiwiY2xvc2UiLCJjb3B5RmlsZSIsImZjaG1vZCIsImZjaG93biIsImZk'@;
put 'YXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwibGNobW9kIiwibGNob3duIiwibGluayIsImxzdGF0IiwibWtkaXIiLCJta2R0ZW1wIiwib3BlbiIsIm9wZW5kaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJyZWFkbGluayIsInJlYWxwYXRoIiwicmVuYW1l'@;
put 'Iiwicm0iLCJybWRpciIsInN0YXQiLCJzeW1saW5rIiwidHJ1bmNhdGUiLCJ1bmxpbmsiLCJ1dGltZXMiLCJ3cml0ZUZpbGUiXS5maWx0ZXIoaz0+ImZ1bmN0aW9uIj09dHlwZW9mIEtba10pO09iamVjdC5hc3NpZ24oTyxLKSxMLmZvckVhY2goaz0+e09ba109eihLW2tdKX0pLE8ucmVhbHBh'@;
put 'dGgubmF0aXZlPXooSy5yZWFscGF0aC5uYXRpdmUpLE8uZXhpc3RzPWZ1bmN0aW9uKGssRSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEU/Sy5leGlzdHMoayxFKTpuZXcgUHJvbWlzZShqPT5LLmV4aXN0cyhrLGopKX0sTy5yZWFkPWZ1bmN0aW9uKGssRSxqLFYsQixZKXtyZXR1cm4iZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgWT9LLnJlYWQoayxFLGosVixCLFkpOm5ldyBQcm9taXNlKChYLFUpPT57Sy5yZWFkKGssRSxqLFYsQiwocSxlZSx0ZSk9PntpZihxKXJldHVybiBVKHEpO1goe2J5dGVzUmVhZDplZSxidWZmZXI6dGV9KX0pfSl9LE8ud3JpdGU9ZnVuY3Rpb24oayxFLC4uLmope3Jl'@;
put 'dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqW2oubGVuZ3RoLTFdP0sud3JpdGUoayxFLC4uLmopOm5ldyBQcm9taXNlKChWLEIpPT57Sy53cml0ZShrLEUsLi4uaiwoWSxYLFUpPT57aWYoWSlyZXR1cm4gQihZKTtWKHtieXRlc1dyaXR0ZW46WCxidWZmZXI6VX0pfSl9KX0sImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIEsud3JpdGV2JiYoTy53cml0ZXY9ZnVuY3Rpb24oayxFLC4uLmope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqW2oubGVuZ3RoLTFdP0sud3JpdGV2KGssRSwuLi5qKTpuZXcgUHJvbWlzZSgoVixCKT0+e0sud3JpdGV2KGssRSwuLi5qLChZLFgsVSk9PntpZihZKXJldHVybiBC'@;
put 'KFkpO1Yoe2J5dGVzV3JpdHRlbjpYLGJ1ZmZlcnM6VX0pfSl9KX0pfSw1Njc0OihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXsuLi5SKDc3NDkpLC4uLlIoODY5MCksLi4uUig2NDY0KSwuLi5SKDU1OTApLC4uLlIoMTcyMCksLi4uUig2NTczKSwuLi5SKDEzODEpLC4uLlIoNDAy'@;
put 'NiksLi4uUig1MzApLC4uLlIoMTMxNSksLi4uUig5MjU3KSwuLi5SKDQ1NDIpfX0sNjU3MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tUHJvbWlzZSxLPVIoNzE4Myk7Sy5vdXRwdXRKc29uPXooUigzNTA4KSksSy5vdXRwdXRKc29uU3luYz1SKDk1NzgpLEsu'@;
put 'b3V0cHV0SlNPTj1LLm91dHB1dEpzb24sSy5vdXRwdXRKU09OU3luYz1LLm91dHB1dEpzb25TeW5jLEsud3JpdGVKU09OPUsud3JpdGVKc29uLEsud3JpdGVKU09OU3luYz1LLndyaXRlSnNvblN5bmMsSy5yZWFkSlNPTj1LLnJlYWRKc29uLEsucmVhZEpTT05TeW5jPUsucmVhZEpzb25TeW5j'@;
put 'LE0uZXhwb3J0cz1LfSw3MTgzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDY4MTMpO00uZXhwb3J0cz17cmVhZEpzb246ei5yZWFkRmlsZSxyZWFkSnNvblN5bmM6ei5yZWFkRmlsZVN5bmMsd3JpdGVKc29uOnoud3JpdGVGaWxlLHdyaXRlSnNvblN5bmM6ei53cml0ZUZpbGVT'@;
put 'eW5jfX0sOTU3ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTp6fT1SKDY3ODApLHtvdXRwdXRGaWxlU3luYzpLfT1SKDEzMTUpO00uZXhwb3J0cz1mdW5jdGlvbihMLGssRSl7Y29uc3Qgaj16KGssRSk7SyhMLGosRSl9fSwzNTA4OihNLE8sUik9PnsidXNlIHN0cmlj'@;
put 'dCI7Y29uc3R7c3RyaW5naWZ5Onp9PVIoNjc4MCkse291dHB1dEZpbGU6S309UigxMzE1KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgTD1hZShmdW5jdGlvbiooayxFLGo9e30pe2NvbnN0IFY9eihFLGopO3lpZWxkIEsoayxWLGopfSk7cmV0dXJuIGZ1bmN0aW9uKGssRSl7cmV0dXJuIEwu'@;
put 'YXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sMTM4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tUHJvbWlzZSx7bWFrZURpcjpLLG1ha2VEaXJTeW5jOkx9PVIoODIzMyksaz16KEspO00uZXhwb3J0cz17bWtkaXJzOmssbWtkaXJzU3luYzpMLG1rZGlycDpr'@;
put 'LG1rZGlycFN5bmM6TCxlbnN1cmVEaXI6ayxlbnN1cmVEaXJTeW5jOkx9fSw4MjMzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3NDkpLHtjaGVja1BhdGg6S309UigzNDY4KSxMPWs9PiJudW1iZXIiPT10eXBlb2Ygaz9rOnttb2RlOjUxMSwuLi5rfS5tb2RlO00uZXhwb3J0'@;
put 'cy5tYWtlRGlyPWZ1bmN0aW9uKCl7dmFyIGs9YWUoZnVuY3Rpb24qKEUsail7cmV0dXJuIEsoRSksei5ta2RpcihFLHttb2RlOkwoaikscmVjdXJzaXZlOiEwfSl9KTtyZXR1cm4gZnVuY3Rpb24oRSxqKXtyZXR1cm4gay5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLE0uZXhwb3J0cy5tYWtl'@;
put 'RGlyU3luYz0oayxFKT0+KEsoayksei5ta2RpclN5bmMoayx7bW9kZTpMKEUpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7Y29uc3QgSz1SKDI1MjApO00uZXhwb3J0cy5jaGVja1BhdGg9ZnVuY3Rpb24oTCl7aWYoIndpbjMyIj09'@;
put 'PXoucGxhdGZvcm0mJi9bPD46Inw/Kl0vLnRlc3QoTC5yZXBsYWNlKEsucGFyc2UoTCkucm9vdCwiIikpKXtjb25zdCBrPW5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7TH1gKTt0aHJvdyBrLmNvZGU9IkVJTlZBTCIsa319fSw0MDI2OihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7TS5leHBvcnRzPXttb3ZlU3luYzpSKDYwMDYpfX0sNjAwNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NyksSz1SKDI1MjApLEw9Uig4NjkwKS5jb3B5U3luYyxrPVIoNDU0MikucmVtb3ZlU3luYyxFPVIoMTM4MSkubWtkaXJwU3luYyxqPVIoMjczMyk7'@;
put 'ZnVuY3Rpb24gVihCLFksWCl7dHJ5e3oucmVuYW1lU3luYyhCLFkpfWNhdGNoKFUpe2lmKCJFWERFViIhPT1VLmNvZGUpdGhyb3cgVTtyZXR1cm4gTChxPUIsWSx7b3ZlcndyaXRlOlgsZXJyb3JPbkV4aXN0OiEwfSksayhxKX12YXIgcX1NLmV4cG9ydHM9ZnVuY3Rpb24oQixZLFgpe2NvbnN0'@;
put 'IFU9KFg9WHx8e30pLm92ZXJ3cml0ZXx8WC5jbG9iYmVyfHwhMSx7c3JjU3RhdDpxLGlzQ2hhbmdpbmdDYXNlOmVlPSExfT1qLmNoZWNrUGF0aHNTeW5jKEIsWSwibW92ZSIsWCk7cmV0dXJuIGouY2hlY2tQYXJlbnRQYXRoc1N5bmMoQixxLFksIm1vdmUiKSxmdW5jdGlvbih0ZSl7Y29uc3Qg'@;
put 'b2U9Sy5kaXJuYW1lKHRlKTtyZXR1cm4gSy5wYXJzZShvZSkucm9vdD09PW9lfShZKXx8RShLLmRpcm5hbWUoWSkpLGZ1bmN0aW9uKHRlLG9lLHNlLGhlKXtpZihoZSlyZXR1cm4gVih0ZSxvZSxzZSk7aWYoc2UpcmV0dXJuIGsob2UpLFYodGUsb2Usc2UpO2lmKHouZXhpc3RzU3luYyhvZSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpO3JldHVybiBWKHRlLG9lLHNlKX0oQixZLFUsZWUpfX0sNTMwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjaztNLmV4cG9ydHM9e21vdmU6eihSKDQzNikpfX0sNDM2OihNLE8s'@;
put 'Uik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KSxLPVIoMjUyMCksTD1SKDY0NjQpLmNvcHksaz1SKDQ1NDIpLnJlbW92ZSxFPVIoMTM4MSkubWtkaXJwLGo9Uig5MjU3KS5wYXRoRXhpc3RzLFY9UigyNzMzKTtmdW5jdGlvbiBCKFgsVSxxLGVlLHRlKXtyZXR1cm4gZWU/WShYLFUscSx0'@;
put 'ZSk6cT9rKFUsb2U9Pm9lP3RlKG9lKTpZKFgsVSxxLHRlKSk6dm9pZCBqKFUsKG9lLHNlKT0+b2U/dGUob2UpOnNlP3RlKG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKSk6WShYLFUscSx0ZSkpfWZ1bmN0aW9uIFkoWCxVLHEsZWUpe3oucmVuYW1lKFgsVSx0ZT0+e3JldHVybiB0'@;
put 'ZT8iRVhERVYiIT09dGUuY29kZT9lZSh0ZSk6KHVlPWVlLHZvaWQgTChvZT1YLFUse292ZXJ3cml0ZTpxLGVycm9yT25FeGlzdDohMH0sRz0+Rz91ZShHKTprKG9lLHVlKSkpOmVlKCk7dmFyIG9lLHVlfSl9TS5leHBvcnRzPWZ1bmN0aW9uKFgsVSxxLGVlKXsiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'cSYmKGVlPXEscT17fSk7Y29uc3QgdGU9cS5vdmVyd3JpdGV8fHEuY2xvYmJlcnx8ITE7Vi5jaGVja1BhdGhzKFgsVSwibW92ZSIscSwob2Usc2UpPT57aWYob2UpcmV0dXJuIGVlKG9lKTtjb25zdHtzcmNTdGF0OmhlLGlzQ2hhbmdpbmdDYXNlOnVlPSExfT1zZTtWLmNoZWNrUGFyZW50UGF0'@;
put 'aHMoWCxoZSxVLCJtb3ZlIixjZT0+Y2U/ZWUoY2UpOmZ1bmN0aW9uKEcpe2NvbnN0IGI9Sy5kaXJuYW1lKEcpO3JldHVybiBLLnBhcnNlKGIpLnJvb3Q9PT1ifShVKT9CKFgsVSx0ZSx1ZSxlZSk6dm9pZCBFKEsuZGlybmFtZShVKSxHPT5HP2VlKEcpOkIoWCxVLHRlLHVlLGVlKSkpfSl9fSwx'@;
put 'MzE1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxLPVIoNzcpLEw9UigyNTIwKSxrPVIoMTM4MSksRT1SKDkyNTcpLnBhdGhFeGlzdHM7TS5leHBvcnRzPXtvdXRwdXRGaWxlOnooZnVuY3Rpb24oaixWLEIsWSl7ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IEImJihZPUIsQj0idXRmOCIpO2NvbnN0IFg9TC5kaXJuYW1lKGopO0UoWCwoVSxxKT0+VT9ZKFUpOnE/Sy53cml0ZUZpbGUoaixWLEIsWSk6dm9pZCBrLm1rZGlycyhYLGVlPT57aWYoZWUpcmV0dXJuIFkoZWUpO0sud3JpdGVGaWxlKGosVixCLFkpfSkpfSksb3V0cHV0RmlsZVN5bmM6ZnVu'@;
put 'Y3Rpb24oaiwuLi5WKXtjb25zdCBCPUwuZGlybmFtZShqKTtpZihLLmV4aXN0c1N5bmMoQikpcmV0dXJuIEsud3JpdGVGaWxlU3luYyhqLC4uLlYpO2subWtkaXJzU3luYyhCKSxLLndyaXRlRmlsZVN5bmMoaiwuLi5WKX19fSw5MjU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1S'@;
put 'KDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3NzQ5KTtNLmV4cG9ydHM9e3BhdGhFeGlzdHM6eihmdW5jdGlvbihMKXtyZXR1cm4gSy5hY2Nlc3MoTCkudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxwYXRoRXhpc3RzU3luYzpLLmV4aXN0c1N5bmN9fSw0NTQyOihNLE8sUik9PnsidXNlIHN0'@;
put 'cmljdCI7Y29uc3Qgej1SKDc3KSxLPVIoODk4MSkuZnJvbUNhbGxiYWNrLEw9UigzNDU2KTtNLmV4cG9ydHM9e3JlbW92ZTpLKGZ1bmN0aW9uKGssRSl7aWYoei5ybSlyZXR1cm4gei5ybShrLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LEUpO0woayxFKX0pLHJlbW92ZVN5bmM6ZnVuY3Rpb24o'@;
put 'ayl7aWYoei5ybVN5bmMpcmV0dXJuIHoucm1TeW5jKGsse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pO0wuc3luYyhrKX19fSwzNDU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtjb25zdCBLPVIoNzcpLEw9UigyNTIwKSxrPVIoOTI4MiksRT0id2luMzIiPT09ei5wbGF0'@;
put 'Zm9ybTtmdW5jdGlvbiBqKHRlKXtbInVubGluayIsImNobW9kIiwic3RhdCIsImxzdGF0Iiwicm1kaXIiLCJyZWFkZGlyIl0uZm9yRWFjaChvZT0+e3RlW29lXT10ZVtvZV18fEtbb2VdLHRlW29lKz0iU3luYyJdPXRlW29lXXx8S1tvZV19KSx0ZS5tYXhCdXN5VHJpZXM9dGUubWF4QnVzeVRy'@;
put 'aWVzfHwzfWZ1bmN0aW9uIFYodGUsb2Usc2Upe2xldCBoZT0wOyJmdW5jdGlvbiI9PXR5cGVvZiBvZSYmKHNlPW9lLG9lPXt9KSxrKHRlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIHRlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3Ry'@;
put 'aW5nIiksay5zdHJpY3RFcXVhbCh0eXBlb2Ygc2UsImZ1bmN0aW9uIiwicmltcmFmOiBjYWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCIpLGsob2UsInJpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkIiksay5zdHJpY3RFcXVhbCh0eXBlb2Ygb2UsIm9iamVjdCIsInJp'@;
put 'bXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IiksaihvZSksQih0ZSxvZSxmdW5jdGlvbiB1ZShjZSl7aWYoY2Upe2lmKCgiRUJVU1kiPT09Y2UuY29kZXx8IkVOT1RFTVBUWSI9PT1jZS5jb2RlfHwiRVBFUk0iPT09Y2UuY29kZSkmJmhlPG9lLm1heEJ1c3lUcmllcylyZXR1cm4gaGUr'@;
put 'KyxzZXRUaW1lb3V0KCgpPT5CKHRlLG9lLHVlKSwxMDAqaGUpOyJFTk9FTlQiPT09Y2UuY29kZSYmKGNlPW51bGwpfXNlKGNlKX0pfWZ1bmN0aW9uIEIodGUsb2Usc2Upe2sodGUpLGsob2UpLGsoImZ1bmN0aW9uIj09dHlwZW9mIHNlKSxvZS5sc3RhdCh0ZSwoaGUsdWUpPT5oZSYmIkVOT0VO'@;
put 'VCI9PT1oZS5jb2RlP3NlKG51bGwpOmhlJiYiRVBFUk0iPT09aGUuY29kZSYmRT9ZKHRlLG9lLGhlLHNlKTp1ZSYmdWUuaXNEaXJlY3RvcnkoKT9VKHRlLG9lLGhlLHNlKTp2b2lkIG9lLnVubGluayh0ZSxjZT0+e2lmKGNlKXtpZigiRU5PRU5UIj09PWNlLmNvZGUpcmV0dXJuIHNlKG51bGwp'@;
put 'O2lmKCJFUEVSTSI9PT1jZS5jb2RlKXJldHVybiBFP1kodGUsb2UsY2Usc2UpOlUodGUsb2UsY2Usc2UpO2lmKCJFSVNESVIiPT09Y2UuY29kZSlyZXR1cm4gVSh0ZSxvZSxjZSxzZSl9cmV0dXJuIHNlKGNlKX0pKX1mdW5jdGlvbiBZKHRlLG9lLHNlLGhlKXtrKHRlKSxrKG9lKSxrKCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBoZSksb2UuY2htb2QodGUsNDM4LHVlPT57dWU/aGUoIkVOT0VOVCI9PT11ZS5jb2RlP251bGw6c2UpOm9lLnN0YXQodGUsKGNlLEcpPT57Y2U/aGUoIkVOT0VOVCI9PT1jZS5jb2RlP251bGw6c2UpOkcuaXNEaXJlY3RvcnkoKT9VKHRlLG9lLHNlLGhlKTpvZS51bmxp'@;
put 'bmsodGUsaGUpfSl9KX1mdW5jdGlvbiBYKHRlLG9lLHNlKXtsZXQgaGU7ayh0ZSksayhvZSk7dHJ5e29lLmNobW9kU3luYyh0ZSw0MzgpfWNhdGNoKHVlKXtpZigiRU5PRU5UIj09PXVlLmNvZGUpcmV0dXJuO3Rocm93IHNlfXRyeXtoZT1vZS5zdGF0U3luYyh0ZSl9Y2F0Y2godWUpe2lmKCJF'@;
put 'Tk9FTlQiPT09dWUuY29kZSlyZXR1cm47dGhyb3cgc2V9aGUuaXNEaXJlY3RvcnkoKT9lZSh0ZSxvZSxzZSk6b2UudW5saW5rU3luYyh0ZSl9ZnVuY3Rpb24gVSh0ZSxvZSxzZSxoZSl7ayh0ZSksayhvZSksaygiZnVuY3Rpb24iPT10eXBlb2YgaGUpLG9lLnJtZGlyKHRlLHVlPT57dmFyIGNl'@;
put 'LEcsYjshdWV8fCJFTk9URU1QVFkiIT09dWUuY29kZSYmIkVFWElTVCIhPT11ZS5jb2RlJiYiRVBFUk0iIT09dWUuY29kZT9oZSh1ZSYmIkVOT1RESVIiPT09dWUuY29kZT9zZTp1ZSk6KEc9b2UsYj1oZSxrKGNlPXRlKSxrKEcpLGsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcucmVhZGRpcihj'@;
put 'ZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7bGV0IE4sZz1ILmxlbmd0aDtpZigwPT09ZylyZXR1cm4gRy5ybWRpcihjZSxiKTtILmZvckVhY2goQz0+e1YoTC5qb2luKGNlLEMpLEcsUz0+e2lmKCFOKXJldHVybiBTP2IoTj1TKTp2b2lkKDA9PS0tZyYmRy5ybWRpcihjZSxiKSl9KX0pfSkp'@;
put 'fSl9ZnVuY3Rpb24gcSh0ZSxvZSl7bGV0IHNlO2oob2U9b2V8fHt9KSxrKHRlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIHRlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksayhvZSwicmltcmFmOiBtaXNzaW5nIG9wdGlv'@;
put 'bnMiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBvZSwib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKTt0cnl7c2U9b2UubHN0YXRTeW5jKHRlKX1jYXRjaChoZSl7aWYoIkVOT0VOVCI9PT1oZS5jb2RlKXJldHVybjsiRVBFUk0iPT09aGUuY29kZSYmRSYmWCh0ZSxv'@;
put 'ZSxoZSl9dHJ5e3NlJiZzZS5pc0RpcmVjdG9yeSgpP2VlKHRlLG9lLG51bGwpOm9lLnVubGlua1N5bmModGUpfWNhdGNoKGhlKXtpZigiRU5PRU5UIj09PWhlLmNvZGUpcmV0dXJuO2lmKCJFUEVSTSI9PT1oZS5jb2RlKXJldHVybiBFP1godGUsb2UsaGUpOmVlKHRlLG9lLGhlKTtpZigiRUlT'@;
put 'RElSIiE9PWhlLmNvZGUpdGhyb3cgaGU7ZWUodGUsb2UsaGUpfX1mdW5jdGlvbiBlZSh0ZSxvZSxzZSl7ayh0ZSksayhvZSk7dHJ5e29lLnJtZGlyU3luYyh0ZSl9Y2F0Y2goaGUpe2lmKCJFTk9URElSIj09PWhlLmNvZGUpdGhyb3cgc2U7aWYoIkVOT1RFTVBUWSI9PT1oZS5jb2RlfHwiRUVY'@;
put 'SVNUIj09PWhlLmNvZGV8fCJFUEVSTSI9PT1oZS5jb2RlKSFmdW5jdGlvbih1ZSxjZSl7aWYoayh1ZSksayhjZSksY2UucmVhZGRpclN5bmModWUpLmZvckVhY2goRz0+cShMLmpvaW4odWUsRyksY2UpKSwhRSlyZXR1cm4gY2Uucm1kaXJTeW5jKHVlLGNlKTt7Y29uc3QgRz1EYXRlLm5vdygp'@;
put 'O2Rve3RyeXtyZXR1cm4gY2Uucm1kaXJTeW5jKHVlLGNlKX1jYXRjaHt9fXdoaWxlKERhdGUubm93KCktRzw1MDApfX0odGUsb2UpO2Vsc2UgaWYoIkVOT0VOVCIhPT1oZS5jb2RlKXRocm93IGhlfX1NLmV4cG9ydHM9VixWLnN5bmM9cX0sMjczMzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Nv'@;
put 'bnN0IHo9Uig3NzQ5KSxLPVIoMjUyMCksTD1SKDk1MzkpO2Z1bmN0aW9uIGsoQixZLFgpe2NvbnN0IFU9WC5kZXJlZmVyZW5jZT9xPT56LnN0YXQocSx7YmlnaW50OiEwfSk6cT0+ei5sc3RhdChxLHtiaWdpbnQ6ITB9KTtyZXR1cm4gUHJvbWlzZS5hbGwoW1UoQiksVShZKS5jYXRjaChxPT57'@;
put 'aWYoIkVOT0VOVCI9PT1xLmNvZGUpcmV0dXJuIG51bGw7dGhyb3cgcX0pXSkudGhlbigoW3EsZWVdKT0+KHtzcmNTdGF0OnEsZGVzdFN0YXQ6ZWV9KSl9ZnVuY3Rpb24gRShCLFkpe3JldHVybiBZLmlubyYmWS5kZXYmJlkuaW5vPT09Qi5pbm8mJlkuZGV2PT09Qi5kZXZ9ZnVuY3Rpb24gaihC'@;
put 'LFkpe2NvbnN0IFg9Sy5yZXNvbHZlKEIpLnNwbGl0KEsuc2VwKS5maWx0ZXIocT0+cSksVT1LLnJlc29sdmUoWSkuc3BsaXQoSy5zZXApLmZpbHRlcihxPT5xKTtyZXR1cm4gWC5yZWR1Y2UoKHEsZWUsdGUpPT5xJiZVW3RlXT09PWVlLCEwKX1mdW5jdGlvbiBWKEIsWSxYKXtyZXR1cm5gQ2Fu'@;
put 'bm90ICR7WH0gJyR7Qn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7WX0nLmB9TS5leHBvcnRzPXtjaGVja1BhdGhzOmZ1bmN0aW9uKEIsWSxYLFUscSl7TC5jYWxsYmFja2lmeShrKShCLFksVSwoZWUsdGUpPT57aWYoZWUpcmV0dXJuIHEoZWUpO2NvbnN0e3NyY1N0YXQ6b2Us'@;
put 'ZGVzdFN0YXQ6c2V9PXRlO2lmKHNlKXtpZihFKG9lLHNlKSl7Y29uc3QgaGU9Sy5iYXNlbmFtZShCKSx1ZT1LLmJhc2VuYW1lKFkpO3JldHVybiJtb3ZlIj09PVgmJmhlIT09dWUmJmhlLnRvTG93ZXJDYXNlKCk9PT11ZS50b0xvd2VyQ2FzZSgpP3EobnVsbCx7c3JjU3RhdDpvZSxkZXN0U3Rh'@;
put 'dDpzZSxpc0NoYW5naW5nQ2FzZTohMH0pOnEobmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpKX1pZihvZS5pc0RpcmVjdG9yeSgpJiYhc2UuaXNEaXJlY3RvcnkoKSlyZXR1cm4gcShuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9u'@;
put 'LWRpcmVjdG9yeSAnJHtZfScgd2l0aCBkaXJlY3RvcnkgJyR7Qn0nLmApKTtpZighb2UuaXNEaXJlY3RvcnkoKSYmc2UuaXNEaXJlY3RvcnkoKSlyZXR1cm4gcShuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke1l9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Qn0nLmAp'@;
put 'KX1yZXR1cm4gb2UuaXNEaXJlY3RvcnkoKSYmaihCLFkpP3EobmV3IEVycm9yKFYoQixZLFgpKSk6cShudWxsLHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNlfSl9KX0sY2hlY2tQYXRoc1N5bmM6ZnVuY3Rpb24oQixZLFgsVSl7Y29uc3R7c3JjU3RhdDpxLGRlc3RTdGF0OmVlfT1mdW5jdGlvbih0'@;
put 'ZSxvZSxzZSl7bGV0IGhlO2NvbnN0IHVlPXNlLmRlcmVmZXJlbmNlP0c9Pnouc3RhdFN5bmMoRyx7YmlnaW50OiEwfSk6Rz0+ei5sc3RhdFN5bmMoRyx7YmlnaW50OiEwfSksY2U9dWUodGUpO3RyeXtoZT11ZShvZSl9Y2F0Y2goRyl7aWYoIkVOT0VOVCI9PT1HLmNvZGUpcmV0dXJue3NyY1N0'@;
put 'YXQ6Y2UsZGVzdFN0YXQ6bnVsbH07dGhyb3cgR31yZXR1cm57c3JjU3RhdDpjZSxkZXN0U3RhdDpoZX19KEIsWSxVKTtpZihlZSl7aWYoRShxLGVlKSl7Y29uc3QgdGU9Sy5iYXNlbmFtZShCKSxvZT1LLmJhc2VuYW1lKFkpO2lmKCJtb3ZlIj09PVgmJnRlIT09b2UmJnRlLnRvTG93ZXJDYXNl'@;
put 'KCk9PT1vZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnEsZGVzdFN0YXQ6ZWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihxLmlzRGlyZWN0b3J5KCkmJiFlZS5pc0RpcmVj'@;
put 'dG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke1l9JyB3aXRoIGRpcmVjdG9yeSAnJHtCfScuYCk7aWYoIXEuaXNEaXJlY3RvcnkoKSYmZWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0'@;
put 'b3J5ICcke1l9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Qn0nLmApfWlmKHEuaXNEaXJlY3RvcnkoKSYmaihCLFkpKXRocm93IG5ldyBFcnJvcihWKEIsWSxYKSk7cmV0dXJue3NyY1N0YXQ6cSxkZXN0U3RhdDplZX19LGNoZWNrUGFyZW50UGF0aHM6ZnVuY3Rpb24gQihZLFgsVSxxLGVlKXtj'@;
put 'b25zdCB0ZT1LLnJlc29sdmUoSy5kaXJuYW1lKFkpKSxvZT1LLnJlc29sdmUoSy5kaXJuYW1lKFUpKTtpZihvZT09PXRlfHxvZT09PUsucGFyc2Uob2UpLnJvb3QpcmV0dXJuIGVlKCk7ei5zdGF0KG9lLHtiaWdpbnQ6ITB9LChzZSxoZSk9PnNlPyJFTk9FTlQiPT09c2UuY29kZT9lZSgpOmVl'@;
put 'KHNlKTpFKFgsaGUpP2VlKG5ldyBFcnJvcihWKFksVSxxKSkpOkIoWSxYLG9lLHEsZWUpKX0sY2hlY2tQYXJlbnRQYXRoc1N5bmM6ZnVuY3Rpb24gQihZLFgsVSxxKXtjb25zdCBlZT1LLnJlc29sdmUoSy5kaXJuYW1lKFkpKSx0ZT1LLnJlc29sdmUoSy5kaXJuYW1lKFUpKTtpZih0ZT09PWVl'@;
put 'fHx0ZT09PUsucGFyc2UodGUpLnJvb3QpcmV0dXJuO2xldCBvZTt0cnl7b2U9ei5zdGF0U3luYyh0ZSx7YmlnaW50OiEwfSl9Y2F0Y2goc2Upe2lmKCJFTk9FTlQiPT09c2UuY29kZSlyZXR1cm47dGhyb3cgc2V9aWYoRShYLG9lKSl0aHJvdyBuZXcgRXJyb3IoVihZLFUscSkpO3JldHVybiBC'@;
put 'KFksWCx0ZSxxKX0saXNTcmNTdWJkaXI6aixhcmVJZGVudGljYWw6RX19LDMxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3Nyk7TS5leHBvcnRzPXt1dGltZXNNaWxsaXM6ZnVuY3Rpb24oSyxMLGssRSl7ei5vcGVuKEssInIrIiwoaixWKT0+e2lmKGopcmV0dXJuIEUoaik7'@;
put 'ei5mdXRpbWVzKFYsTCxrLEI9Pnt6LmNsb3NlKFYsWT0+e0UmJkUoQnx8WSl9KX0pfSl9LHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24oSyxMLGspe2NvbnN0IEU9ei5vcGVuU3luYyhLLCJyKyIpO3JldHVybiB6LmZ1dGltZXNTeW5jKEUsTCxrKSx6LmNsb3NlU3luYyhFKX19fSw3MzM0OihN'@;
put 'LE8sUik9Pnt2YXIgej1SKDQxNTUpO00uZXhwb3J0cz1ZLFkucmVhbHBhdGg9WSxZLnN5bmM9WCxZLnJlYWxwYXRoU3luYz1YLFkubW9ua2V5cGF0Y2g9ZnVuY3Rpb24oKXtLLnJlYWxwYXRoPVksSy5yZWFscGF0aFN5bmM9WH0sWS51bm1vbmtleXBhdGNoPWZ1bmN0aW9uKCl7Sy5yZWFscGF0'@;
put 'aD1MLEsucmVhbHBhdGhTeW5jPWt9O3ZhciBLPVIoMjUzNSksTD1LLnJlYWxwYXRoLGs9Sy5yZWFscGF0aFN5bmMsaj0vXnZbMC01XVwuLy50ZXN0KHoudmVyc2lvbiksVj1SKDcwNTkpO2Z1bmN0aW9uIEIoVSl7cmV0dXJuIFUmJiJyZWFscGF0aCI9PT1VLnN5c2NhbGwmJigiRUxPT1AiPT09'@;
put 'VS5jb2RlfHwiRU5PTUVNIj09PVUuY29kZXx8IkVOQU1FVE9PTE9ORyI9PT1VLmNvZGUpfWZ1bmN0aW9uIFkoVSxxLGVlKXtpZihqKXJldHVybiBMKFUscSxlZSk7ImZ1bmN0aW9uIj09dHlwZW9mIHEmJihlZT1xLHE9bnVsbCksTChVLHEsZnVuY3Rpb24odGUsb2Upe0IodGUpP1YucmVhbHBh'@;
put 'dGgoVSxxLGVlKTplZSh0ZSxvZSl9KX1mdW5jdGlvbiBYKFUscSl7aWYoailyZXR1cm4gayhVLHEpO3RyeXtyZXR1cm4gayhVLHEpfWNhdGNoKGVlKXtpZihCKGVlKSlyZXR1cm4gVi5yZWFscGF0aFN5bmMoVSxxKTt0aHJvdyBlZX19fSw3MDU5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9'@;
put 'Uig1MTA4KSxMPVIoMjUyMCksaz0id2luMzIiPT09ei5wbGF0Zm9ybSxFPVIoMjUzNSksaj16LmVudi5OT0RFX0RFQlVHJiYvZnMvLnRlc3Qoei5lbnYuTk9ERV9ERUJVRyk7aWYoayl2YXIgQj0vKC4qPykoPzpbXC9cXF0rfCQpL2c7ZWxzZSBCPS8oLio/KSg/OltcL10rfCQpL2c7aWYoayl2'@;
put 'YXIgWT0vXig/OlthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXVteXFxcL10rKT9bXFxcL10qLztlbHNlIFk9L15bXC9dKi87Ty5yZWFscGF0aFN5bmM9ZnVuY3Rpb24oWCxVKXtpZihYPUwucmVzb2x2ZShYKSxVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'VSxYKSlyZXR1cm4gVVtYXTt2YXIgcSxlZSx0ZSxvZSxzZT1YLGhlPXt9LHVlPXt9O2Z1bmN0aW9uIGNlKCl7dmFyIGc9WS5leGVjKFgpO3E9Z1swXS5sZW5ndGgsZWU9Z1swXSx0ZT1nWzBdLG9lPSIiLGsmJiF1ZVt0ZV0mJihFLmxzdGF0U3luYyh0ZSksdWVbdGVdPSEwKX1mb3IoY2UoKTtx'@;
put 'PFgubGVuZ3RoOyl7Qi5sYXN0SW5kZXg9cTt2YXIgRz1CLmV4ZWMoWCk7aWYob2U9ZWUsZWUrPUdbMF0scT1CLmxhc3RJbmRleCwhKHVlW3RlPW9lK0dbMV1dfHxVJiZVW3RlXT09PXRlKSl7dmFyIGI7aWYoVSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsdGUpKWI9'@;
put 'VVt0ZV07ZWxzZXt2YXIgRD1FLmxzdGF0U3luYyh0ZSk7aWYoIUQuaXNTeW1ib2xpY0xpbmsoKSl7dWVbdGVdPSEwLFUmJihVW3RlXT10ZSk7Y29udGludWV9dmFyIEg9bnVsbDtpZighayl7dmFyIE49RC5kZXYudG9TdHJpbmcoMzIpKyI6IitELmluby50b1N0cmluZygzMik7aGUuaGFzT3du'@;
put 'UHJvcGVydHkoTikmJihIPWhlW05dKX1udWxsPT09SCYmKEUuc3RhdFN5bmModGUpLEg9RS5yZWFkbGlua1N5bmModGUpKSxiPUwucmVzb2x2ZShvZSxIKSxVJiYoVVt0ZV09Yiksa3x8KGhlW05dPUgpfVg9TC5yZXNvbHZlKGIsWC5zbGljZShxKSksY2UoKX19cmV0dXJuIFUmJihVW3NlXT1Y'@;
put 'KSxYfSxPLnJlYWxwYXRoPWZ1bmN0aW9uKFgsVSxxKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSYmKHE9ZnVuY3Rpb24gVihYKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWD9YOmZ1bmN0aW9uKCl7dmFyIFU7aWYoail7dmFyIHE9bmV3IEVycm9yO1U9ZnVuY3Rpb24odGUpe3RlJiYocS5t'@;
put 'ZXNzYWdlPXRlLm1lc3NhZ2UsZWUodGU9cSkpfX1lbHNlIFU9ZWU7cmV0dXJuIFU7ZnVuY3Rpb24gZWUodGUpe2lmKHRlKXtpZih6LnRocm93RGVwcmVjYXRpb24pdGhyb3cgdGU7aWYoIXoubm9EZXByZWNhdGlvbil7dmFyIG9lPSJmczogbWlzc2luZyBjYWxsYmFjayAiKyh0ZS5zdGFja3x8'@;
put 'dGUubWVzc2FnZSk7ei50cmFjZURlcHJlY2F0aW9uP0sudHJhY2Uob2UpOksuZXJyb3Iob2UpfX19fSgpfShVKSxVPW51bGwpLFg9TC5yZXNvbHZlKFgpLFUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLFgpKXJldHVybiB6Lm5leHRUaWNrKHEuYmluZChudWxsLG51'@;
put 'bGwsVVtYXSkpO3ZhciBlZSx0ZSxvZSxzZSxoZT1YLHVlPXt9LGNlPXt9O2Z1bmN0aW9uIEcoKXt2YXIgZz1ZLmV4ZWMoWCk7ZWU9Z1swXS5sZW5ndGgsdGU9Z1swXSxvZT1nWzBdLHNlPSIiLGsmJiFjZVtvZV0/RS5sc3RhdChvZSxmdW5jdGlvbihDKXtpZihDKXJldHVybiBxKEMpO2NlW29l'@;
put 'XT0hMCxiKCl9KTp6Lm5leHRUaWNrKGIpfWZ1bmN0aW9uIGIoKXtpZihlZT49WC5sZW5ndGgpcmV0dXJuIFUmJihVW2hlXT1YKSxxKG51bGwsWCk7Qi5sYXN0SW5kZXg9ZWU7dmFyIGc9Qi5leGVjKFgpO3JldHVybiBzZT10ZSx0ZSs9Z1swXSxlZT1CLmxhc3RJbmRleCxjZVtvZT1zZStnWzFd'@;
put 'XXx8VSYmVVtvZV09PT1vZT96Lm5leHRUaWNrKGIpOlUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLG9lKT9OKFVbb2VdKTpFLmxzdGF0KG9lLEQpfWZ1bmN0aW9uIEQoZyxDKXtpZihnKXJldHVybiBxKGcpO2lmKCFDLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGNl'@;
put 'W29lXT0hMCxVJiYoVVtvZV09b2UpLHoubmV4dFRpY2soYik7aWYoIWspe3ZhciBTPUMuZGV2LnRvU3RyaW5nKDMyKSsiOiIrQy5pbm8udG9TdHJpbmcoMzIpO2lmKHVlLmhhc093blByb3BlcnR5KFMpKXJldHVybiBIKG51bGwsdWVbU10sb2UpfUUuc3RhdChvZSxmdW5jdGlvbih2KXtpZih2'@;
put 'KXJldHVybiBxKHYpO0UucmVhZGxpbmsob2UsZnVuY3Rpb24ocCx3KXtrfHwodWVbU109dyksSChwLHcpfSl9KX1mdW5jdGlvbiBIKGcsQyxTKXtpZihnKXJldHVybiBxKGcpO3ZhciB2PUwucmVzb2x2ZShzZSxDKTtVJiYoVVtTXT12KSxOKHYpfWZ1bmN0aW9uIE4oZyl7WD1MLnJlc29sdmUo'@;
put 'ZyxYLnNsaWNlKGVlKSksRygpfUcoKX19LDc2NDg6TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTz1BcnJheS5wcm90b3R5cGUuc2xpY2UsUj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO00uZXhwb3J0cz1mdW5jdGlvbih6KXt2YXIgSz10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLfHwiW29i'@;
put 'amVjdCBGdW5jdGlvbl0iIT09Ui5jYWxsKEspKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitLKTtmb3IodmFyIEwsaz1PLmNhbGwoYXJndW1lbnRzLDEpLEU9TWF0aC5tYXgoMCxLLmxlbmd0aC1rLmxlbmd0aCks'@;
put 'aj1bXSxWPTA7VjxFO1YrKylqLnB1c2goIiQiK1YpO2lmKEw9RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitqLmpvaW4oIiwiKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBMKXt2'@;
put 'YXIgWT1LLmFwcGx5KHRoaXMsay5jb25jYXQoTy5jYWxsKGFyZ3VtZW50cykpKTtyZXR1cm4gT2JqZWN0KFkpPT09WT9ZOnRoaXN9cmV0dXJuIEsuYXBwbHkoeixrLmNvbmNhdChPLmNhbGwoYXJndW1lbnRzKSkpfSksSy5wcm90b3R5cGUpe3ZhciBCPWZ1bmN0aW9uKCl7fTtCLnByb3RvdHlw'@;
put 'ZT1LLnByb3RvdHlwZSxMLnByb3RvdHlwZT1uZXcgQixCLnByb3RvdHlwZT1udWxsfXJldHVybiBMfX0sODYxMjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNzY0OCk7TS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHx6fSwyMTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgeixLPVN5bnRheEVycm9yLEw9RnVuY3Rpb24saz1UeXBlRXJyb3IsRT1mdW5jdGlvbihTKXt0cnl7cmV0dXJuIEwoJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK1MrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7aWYo'@;
put 'ail0cnl7aih7fSwiIil9Y2F0Y2h7aj1udWxsfXZhciBWPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IGt9LEI9aj9mdW5jdGlvbigpe3RyeXtyZXR1cm4gVn1jYXRjaHt0cnl7cmV0dXJuIGooYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIFZ9fX0oKTpWLFk9UigxNDA1KSgpLFg9'@;
put 'T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihTKXtyZXR1cm4gUy5fX3Byb3RvX199LFU9e30scT10eXBlb2YgVWludDhBcnJheT4idSI/ejpYKFVpbnQ4QXJyYXkpLGVlPXsiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij96OkFnZ3JlZ2F0ZUVycm9y'@;
put 'LCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij96OkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOlk/WChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOnosIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp6LCIl'@;
put 'QXN5bmNGdW5jdGlvbiUiOlUsIiVBc3luY0dlbmVyYXRvciUiOlUsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6VSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpVLCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij96OkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1'@;
put 'Ij96OkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/ejpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP3o6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6'@;
put 'dHlwZW9mIERhdGFWaWV3PiJ1Ij96OkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVV'@;
put 'UklDb21wb25lbnQsIiVFcnJvciUiOkVycm9yLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpFdmFsRXJyb3IsIiVGbG9hdDMyQXJyYXklIjp0eXBlb2YgRmxvYXQzMkFycmF5PiJ1Ij96OkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP3o6'@;
put 'RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP3o6RmluYWxpemF0aW9uUmVnaXN0cnksIiVGdW5jdGlvbiUiOkwsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOlUsIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1'@;
put 'Ij96OkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/ejpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij96OkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJv'@;
put 'dG90eXBlJSI6WT9YKFgoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6eiwiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjp6LCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/ejpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA8InUiJiZZP1goKG5ldyBNYXApW1N5'@;
put 'bWJvbC5pdGVyYXRvcl0oKSk6eiwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6T2JqZWN0LCIlcGFyc2VGbG9hdCUiOnBhcnNlRmxvYXQsIiVwYXJzZUludCUiOnBhcnNlSW50LCIlUHJvbWlzZSUiOnR5cGVvZiBQcm9taXNlPiJ1Ij96OlByb21pc2UsIiVQcm94'@;
put 'eSUiOnR5cGVvZiBQcm94eT4idSI/ejpQcm94eSwiJVJhbmdlRXJyb3IlIjpSYW5nZUVycm9yLCIlUmVmZXJlbmNlRXJyb3IlIjpSZWZlcmVuY2VFcnJvciwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/ejpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNl'@;
put 'dD4idSI/ejpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ8InUiJiZZP1goKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij96OlNoYXJlZEFycmF5QnVmZmVyLCIlU3Ry'@;
put 'aW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpZP1goIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlU3ltYm9sJSI6WT9TeW1ib2w6eiwiJVN5bnRheEVycm9yJSI6SywiJVRocm93VHlwZUVycm9yJSI6QiwiJVR5cGVkQXJyYXklIjpxLCIlVHlwZUVycm9yJSI6aywi'@;
put 'JVVpbnQ4QXJyYXklIjp0eXBlb2YgVWludDhBcnJheT4idSI/ejpVaW50OEFycmF5LCIlVWludDhDbGFtcGVkQXJyYXklIjp0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk+InUiP3o6VWludDhDbGFtcGVkQXJyYXksIiVVaW50MTZBcnJheSUiOnR5cGVvZiBVaW50MTZBcnJheT4idSI/ejpVaW50'@;
put 'MTZBcnJheSwiJVVpbnQzMkFycmF5JSI6dHlwZW9mIFVpbnQzMkFycmF5PiJ1Ij96OlVpbnQzMkFycmF5LCIlVVJJRXJyb3IlIjpVUklFcnJvciwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/ejpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij96OldlYWtSZWYs'@;
put 'IiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP3o6V2Vha1NldH07dHJ5e251bGwuZXJyb3J9Y2F0Y2goUyl7dmFyIHRlPVgoWChTKSk7ZWVbIiVFcnJvci5wcm90b3R5cGUlIl09dGV9dmFyIG9lPWZ1bmN0aW9uIFModil7dmFyIHA7aWYoIiVBc3luY0Z1bmN0aW9uJSI9PT12KXA9RSgi'@;
put 'YXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PXYpcD1FKCJmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiPT09dilwPUUoImFzeW5jIGZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dl'@;
put 'bmVyYXRvciUiPT09dil7dmFyIHc9UygiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIik7dyYmKHA9dy5wcm90b3R5cGUpfWVsc2UgaWYoIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI9PT12KXt2YXIgSj1TKCIlQXN5bmNHZW5lcmF0b3IlIik7SiYmKHA9WChKLnByb3RvdHlwZSkpfXJldHVy'@;
put 'biBlZVt2XT1wLHB9LHNlPXsiJUFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b3R5cGUlIjpbIkFycmF5IiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvX2VudHJpZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZW50cmllcyJd'@;
put 'LCIlQXJyYXlQcm90b19mb3JFYWNoJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImZvckVhY2giXSwiJUFycmF5UHJvdG9fa2V5cyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJrZXlzIl0sIiVBcnJheVByb3RvX3ZhbHVlcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJ2YWx1ZXMiXSwiJUFzeW5j'@;
put 'RnVuY3Rpb25Qcm90b3R5cGUlIjpbIkFzeW5jRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInBy'@;
put 'b3RvdHlwZSIsInByb3RvdHlwZSJdLCIlQm9vbGVhblByb3RvdHlwZSUiOlsiQm9vbGVhbiIsInByb3RvdHlwZSJdLCIlRGF0YVZpZXdQcm90b3R5cGUlIjpbIkRhdGFWaWV3IiwicHJvdG90eXBlIl0sIiVEYXRlUHJvdG90eXBlJSI6WyJEYXRlIiwicHJvdG90eXBlIl0sIiVFcnJvclByb3Rv'@;
put 'dHlwZSUiOlsiRXJyb3IiLCJwcm90b3R5cGUiXSwiJUV2YWxFcnJvclByb3RvdHlwZSUiOlsiRXZhbEVycm9yIiwicHJvdG90eXBlIl0sIiVGbG9hdDMyQXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0MzJBcnJheSIsInByb3RvdHlwZSJdLCIlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSI6WyJGbG9h'@;
put 'dDY0QXJyYXkiLCJwcm90b3R5cGUiXSwiJUZ1bmN0aW9uUHJvdG90eXBlJSI6WyJGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInBy'@;
put 'b3RvdHlwZSIsInByb3RvdHlwZSJdLCIlSW50OEFycmF5UHJvdG90eXBlJSI6WyJJbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDE2QXJyYXlQcm90b3R5cGUlIjpbIkludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDMyQXJyYXlQcm90b3R5cGUlIjpbIkludDMyQXJyYXkiLCJwcm90'@;
put 'b3R5cGUiXSwiJUpTT05QYXJzZSUiOlsiSlNPTiIsInBhcnNlIl0sIiVKU09OU3RyaW5naWZ5JSI6WyJKU09OIiwic3RyaW5naWZ5Il0sIiVNYXBQcm90b3R5cGUlIjpbIk1hcCIsInByb3RvdHlwZSJdLCIlTnVtYmVyUHJvdG90eXBlJSI6WyJOdW1iZXIiLCJwcm90b3R5cGUiXSwiJU9iamVj'@;
put 'dFByb3RvdHlwZSUiOlsiT2JqZWN0IiwicHJvdG90eXBlIl0sIiVPYmpQcm90b190b1N0cmluZyUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciXSwiJU9ialByb3RvX3ZhbHVlT2YlIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInZhbHVlT2YiXSwiJVByb21pc2VQcm90b3R5cGUl'@;
put 'IjpbIlByb21pc2UiLCJwcm90b3R5cGUiXSwiJVByb21pc2VQcm90b190aGVuJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIiwidGhlbiJdLCIlUHJvbWlzZV9hbGwlIjpbIlByb21pc2UiLCJhbGwiXSwiJVByb21pc2VfcmVqZWN0JSI6WyJQcm9taXNlIiwicmVqZWN0Il0sIiVQcm9taXNlX3Jl'@;
put 'c29sdmUlIjpbIlByb21pc2UiLCJyZXNvbHZlIl0sIiVSYW5nZUVycm9yUHJvdG90eXBlJSI6WyJSYW5nZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUiOlsiUmVmZXJlbmNlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZ0V4cFByb3RvdHlwZSUiOlsiUmVn'@;
put 'RXhwIiwicHJvdG90eXBlIl0sIiVTZXRQcm90b3R5cGUlIjpbIlNldCIsInByb3RvdHlwZSJdLCIlU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIlNoYXJlZEFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVTdHJpbmdQcm90b3R5cGUlIjpbIlN0cmluZyIsInByb3RvdHlwZSJdLCIl'@;
put 'U3ltYm9sUHJvdG90eXBlJSI6WyJTeW1ib2wiLCJwcm90b3R5cGUiXSwiJVN5bnRheEVycm9yUHJvdG90eXBlJSI6WyJTeW50YXhFcnJvciIsInByb3RvdHlwZSJdLCIlVHlwZWRBcnJheVByb3RvdHlwZSUiOlsiVHlwZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVHlwZUVycm9yUHJvdG90eXBl'@;
put 'JSI6WyJUeXBlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVVpbnQ4QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSI6WyJVaW50OENsYW1wZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDE2QXJyYXlQcm90b3R5'@;
put 'cGUlIjpbIlVpbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MzJBcnJheVByb3RvdHlwZSUiOlsiVWludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVSSUVycm9yUHJvdG90eXBlJSI6WyJVUklFcnJvciIsInByb3RvdHlwZSJdLCIlV2Vha01hcFByb3RvdHlwZSUiOlsiV2Vha01hcCIs'@;
put 'InByb3RvdHlwZSJdLCIlV2Vha1NldFByb3RvdHlwZSUiOlsiV2Vha1NldCIsInByb3RvdHlwZSJdfSxoZT1SKDg2MTIpLHVlPVIoNzY0MiksY2U9aGUuY2FsbChGdW5jdGlvbi5jYWxsLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLEc9aGUuY2FsbChGdW5jdGlvbi5hcHBseSxBcnJheS5wcm90'@;
put 'b3R5cGUuc3BsaWNlKSxiPWhlLmNhbGwoRnVuY3Rpb24uY2FsbCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEQ9aGUuY2FsbChGdW5jdGlvbi5jYWxsLFN0cmluZy5wcm90b3R5cGUuc2xpY2UpLEg9aGUuY2FsbChGdW5jdGlvbi5jYWxsLFJlZ0V4cC5wcm90b3R5cGUuZXhlYyksTj0vW14l'@;
put 'LltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLGc9L1xcKFxcKT8vZyxDPWZ1bmN0aW9uKFMsdil7dmFyIHAsdz1TO2lmKHVlKHNlLHcpJiYodz0iJSIrKHA9c2Vbd10p'@;
put 'WzBdKyIlIiksdWUoZWUsdykpe3ZhciBKPWVlW3ddO2lmKEo9PT1VJiYoSj1vZSh3KSksdm9pZCAwPT09SiYmIXYpdGhyb3cgbmV3IGsoImludHJpbnNpYyAiK1MrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6cCxu'@;
put 'YW1lOncsdmFsdWU6Sn19dGhyb3cgbmV3IEsoImludHJpbnNpYyAiK1MrIiBkb2VzIG5vdCBleGlzdCEiKX07TS5leHBvcnRzPWZ1bmN0aW9uKFMsdil7aWYoInN0cmluZyIhPXR5cGVvZiBTfHwwPT09Uy5sZW5ndGgpdGhyb3cgbmV3IGsoImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24t'@;
put 'ZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiB2KXRocm93IG5ldyBrKCciYWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT1IKC9eJT9bXiVdKiU/JC8sUykpdGhyb3cgbmV3IEsoImAlYCBtYXkg'@;
put 'bm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgcD1mdW5jdGlvbihZZSl7dmFyIFFlPUQoWWUsMCwxKSxsdD1EKFllLC0xKTtpZigiJSI9PT1RZSYmIiUiIT09bHQpdGhyb3cgbmV3IEsoImludmFs'@;
put 'aWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1sdCYmIiUiIT09UWUpdGhyb3cgbmV3IEsoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIgUGU9W107cmV0dXJuIGIoWWUsTixmdW5jdGlvbihiZSxB'@;
put 'ZSxUZSxxZSl7UGVbUGUubGVuZ3RoXT1UZT9iKHFlLGcsIiQxIik6QWV8fGJlfSksUGV9KFMpLHc9cC5sZW5ndGg+MD9wWzBdOiIiLEo9QygiJSIrdysiJSIsdiksbmU9Si5uYW1lLGRlPUoudmFsdWUsZmU9ITEseGU9Si5hbGlhczt4ZSYmKHc9eGVbMF0sRyhwLGNlKFswLDFdLHhlKSkpO2Zv'@;
put 'cih2YXIgSWU9MSxGZT0hMDtJZTxwLmxlbmd0aDtJZSs9MSl7dmFyIE9lPXBbSWVdLGplPUQoT2UsMCwxKSxXZT1EKE9lLC0xKTtpZigoJyInPT09amV8fCInIj09PWplfHwiYCI9PT1qZXx8JyInPT09V2V8fCInIj09PVdlfHwiYCI9PT1XZSkmJmplIT09V2UpdGhyb3cgbmV3IEsoInByb3Bl'@;
put 'cnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigiY29uc3RydWN0b3IiIT09T2UmJkZlfHwoZmU9ITApLHVlKGVlLG5lPSIlIisodys9Ii4iK09lKSsiJSIpKWRlPWVlW25lXTtlbHNlIGlmKG51bGwhPWRlKXtpZighKE9lIGluIGRlKSl7aWYoIXYp'@;
put 'dGhyb3cgbmV3IGsoImJhc2UgaW50cmluc2ljIGZvciAiK1MrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1cm59aWYoaiYmSWUrMT49cC5sZW5ndGgpe3ZhciBLZT1qKGRlLE9lKTtkZT0oRmU9ISFLZSkmJiJnZXQiaW4gS2UmJiEoIm9yaWdpbmFs'@;
put 'VmFsdWUiaW4gS2UuZ2V0KT9LZS5nZXQ6ZGVbT2VdfWVsc2UgRmU9dWUoZGUsT2UpLGRlPWRlW09lXTtGZSYmIWZlJiYoZWVbbmVdPWRlKX19cmV0dXJuIGRlfX0sNjc3MjooTSxPLFIpPT57dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKHEsZWUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5LmNhbGwocSxlZSl9Ty5zZXRvcHRzPWZ1bmN0aW9uKHEsZWUsdGUpe2lmKHRlfHwodGU9e30pLHRlLm1hdGNoQmFzZSYmLTE9PT1lZS5pbmRleE9mKCIvIikpe2lmKHRlLm5vZ2xvYnN0YXIpdGhyb3cgbmV3IEVycm9yKCJiYXNlIG1hdGNoaW5nIHJlcXVpcmVzIGdsb2Jz'@;
put 'dGFyIik7ZWU9IioqLyIrZWV9dmFyIHNlO3Euc2lsZW50PSEhdGUuc2lsZW50LHEucGF0dGVybj1lZSxxLnN0cmljdD0hMSE9PXRlLnN0cmljdCxxLnJlYWxwYXRoPSEhdGUucmVhbHBhdGgscS5yZWFscGF0aENhY2hlPXRlLnJlYWxwYXRoQ2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5m'@;
put 'b2xsb3c9ISF0ZS5mb2xsb3cscS5kb3Q9ISF0ZS5kb3QscS5tYXJrPSEhdGUubWFyayxxLm5vZGlyPSEhdGUubm9kaXIscS5ub2RpciYmKHEubWFyaz0hMCkscS5zeW5jPSEhdGUuc3luYyxxLm5vdW5pcXVlPSEhdGUubm91bmlxdWUscS5ub251bGw9ISF0ZS5ub251bGwscS5ub3NvcnQ9ISF0'@;
put 'ZS5ub3NvcnQscS5ub2Nhc2U9ISF0ZS5ub2Nhc2UscS5zdGF0PSEhdGUuc3RhdCxxLm5vcHJvY2Vzcz0hIXRlLm5vcHJvY2VzcyxxLmFic29sdXRlPSEhdGUuYWJzb2x1dGUscS5mcz10ZS5mc3x8TCxxLm1heExlbmd0aD10ZS5tYXhMZW5ndGh8fDEvMCxxLmNhY2hlPXRlLmNhY2hlfHxPYmpl'@;
put 'Y3QuY3JlYXRlKG51bGwpLHEuc3RhdENhY2hlPXRlLnN0YXRDYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLnN5bWxpbmtzPXRlLnN5bWxpbmtzfHxPYmplY3QuY3JlYXRlKG51bGwpLChzZT1xKS5pZ25vcmU9dGUuaWdub3JlfHxbXSxBcnJheS5pc0FycmF5KHNlLmlnbm9yZSl8fChzZS5p'@;
put 'Z25vcmU9W3NlLmlnbm9yZV0pLHNlLmlnbm9yZS5sZW5ndGgmJihzZS5pZ25vcmU9c2UuaWdub3JlLm1hcChZKSkscS5jaGFuZ2VkQ3dkPSExO3ZhciBvZT16LmN3ZCgpO0sodGUsImN3ZCIpPyhxLmN3ZD1rLnJlc29sdmUodGUuY3dkKSxxLmNoYW5nZWRDd2Q9cS5jd2QhPT1vZSk6cS5jd2Q9'@;
put 'b2UscS5yb290PXRlLnJvb3R8fGsucmVzb2x2ZShxLmN3ZCwiLyIpLHEucm9vdD1rLnJlc29sdmUocS5yb290KSwid2luMzIiPT09ei5wbGF0Zm9ybSYmKHEucm9vdD1xLnJvb3QucmVwbGFjZSgvXFwvZywiLyIpKSxxLmN3ZEFicz1qKHEuY3dkKT9xLmN3ZDpYKHEscS5jd2QpLCJ3aW4zMiI9'@;
put 'PT16LnBsYXRmb3JtJiYocS5jd2RBYnM9cS5jd2RBYnMucmVwbGFjZSgvXFwvZywiLyIpKSxxLm5vbW91bnQ9ISF0ZS5ub21vdW50LHRlLm5vbmVnYXRlPSEwLHRlLm5vY29tbWVudD0hMCx0ZS5hbGxvd1dpbmRvd3NFc2NhcGU9ITEscS5taW5pbWF0Y2g9bmV3IFYoZWUsdGUpLHEub3B0aW9u'@;
put 'cz1xLm1pbmltYXRjaC5vcHRpb25zfSxPLm93blByb3A9SyxPLm1ha2VBYnM9WCxPLmZpbmlzaD1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXEubm91bmlxdWUsdGU9ZWU/W106T2JqZWN0LmNyZWF0ZShudWxsKSxvZT0wLHNlPXEubWF0Y2hlcy5sZW5ndGg7b2U8c2U7b2UrKyl7dmFyIGhlPXEu'@;
put 'bWF0Y2hlc1tvZV07aWYoaGUmJjAhPT1PYmplY3Qua2V5cyhoZSkubGVuZ3RoKXt2YXIgdWU9T2JqZWN0LmtleXMoaGUpO2VlP3RlLnB1c2guYXBwbHkodGUsdWUpOnVlLmZvckVhY2goZnVuY3Rpb24oRyl7dGVbR109ITB9KX1lbHNlIGlmKHEubm9udWxsKXt2YXIgY2U9cS5taW5pbWF0Y2gu'@;
put 'Z2xvYlNldFtvZV07ZWU/dGUucHVzaChjZSk6dGVbY2VdPSEwfX1pZihlZXx8KHRlPU9iamVjdC5rZXlzKHRlKSkscS5ub3NvcnR8fCh0ZT10ZS5zb3J0KEIpKSxxLm1hcmspe2ZvcihvZT0wO29lPHRlLmxlbmd0aDtvZSsrKXRlW29lXT1xLl9tYXJrKHRlW29lXSk7cS5ub2RpciYmKHRlPXRl'@;
put 'LmZpbHRlcihmdW5jdGlvbihHKXt2YXIgYj0hL1wvJC8udGVzdChHKSxEPXEuY2FjaGVbR118fHEuY2FjaGVbWChxLEcpXTtyZXR1cm4gYiYmRCYmKGI9IkRJUiIhPT1EJiYhQXJyYXkuaXNBcnJheShEKSksYn0pKX1xLmlnbm9yZS5sZW5ndGgmJih0ZT10ZS5maWx0ZXIoZnVuY3Rpb24oRyl7'@;
put 'cmV0dXJuIVUocSxHKX0pKSxxLmZvdW5kPXRlfSxPLm1hcms9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPVgocSxlZSksb2U9cS5jYWNoZVt0ZV0sc2U9ZWU7aWYob2Upe3ZhciBoZT0iRElSIj09PW9lfHxBcnJheS5pc0FycmF5KG9lKSx1ZT0iLyI9PT1lZS5zbGljZSgtMSk7aWYoaGUmJiF1ZT9z'@;
put 'ZSs9Ii8iOiFoZSYmdWUmJihzZT1zZS5zbGljZSgwLC0xKSksc2UhPT1lZSl7dmFyIGNlPVgocSxzZSk7cS5zdGF0Q2FjaGVbY2VdPXEuc3RhdENhY2hlW3RlXSxxLmNhY2hlW2NlXT1xLmNhY2hlW3RlXX19cmV0dXJuIHNlfSxPLmlzSWdub3JlZD1VLE8uY2hpbGRyZW5JZ25vcmVkPWZ1bmN0'@;
put 'aW9uKHEsZWUpe3JldHVybiEhcS5pZ25vcmUubGVuZ3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4hKCF0ZS5nbWF0Y2hlcnx8IXRlLmdtYXRjaGVyLm1hdGNoKGVlKSl9KX07dmFyIEw9UigzNzEwKSxrPVIoMjUyMCksRT1SKDExNzEpLGo9Uig0MDk1KSxWPUUuTWluaW1h'@;
put 'dGNoO2Z1bmN0aW9uIEIocSxlZSl7cmV0dXJuIHEubG9jYWxlQ29tcGFyZShlZSwiZW4iKX1mdW5jdGlvbiBZKHEpe3ZhciBlZT1udWxsO2lmKCIvKioiPT09cS5zbGljZSgtMykpe3ZhciB0ZT1xLnJlcGxhY2UoLyhcL1wqXCopKyQvLCIiKTtlZT1uZXcgVih0ZSx7ZG90OiEwfSl9cmV0dXJu'@;
put 'e21hdGNoZXI6bmV3IFYocSx7ZG90OiEwfSksZ21hdGNoZXI6ZWV9fWZ1bmN0aW9uIFgocSxlZSl7dmFyIHRlPWVlO3JldHVybiB0ZT0iLyI9PT1lZS5jaGFyQXQoMCk/ay5qb2luKHEucm9vdCxlZSk6aihlZSl8fCIiPT09ZWU/ZWU6cS5jaGFuZ2VkQ3dkP2sucmVzb2x2ZShxLmN3ZCxlZSk6'@;
put 'ay5yZXNvbHZlKGVlKSwid2luMzIiPT09ei5wbGF0Zm9ybSYmKHRlPXRlLnJlcGxhY2UoL1xcL2csIi8iKSksdGV9ZnVuY3Rpb24gVShxLGVlKXtyZXR1cm4hIXEuaWdub3JlLmxlbmd0aCYmcS5pZ25vcmUuc29tZShmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLm1hdGNoZXIubWF0Y2goZWUpfHwh'@;
put 'KCF0ZS5nbWF0Y2hlcnx8IXRlLmdtYXRjaGVyLm1hdGNoKGVlKSl9KX19LDI4ODQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO00uZXhwb3J0cz11ZTt2YXIgTD1SKDczMzQpLGs9UigxMTcxKSxFPVIoNTcxNyksaj1SKDcxODcpLkV2ZW50RW1pdHRlcixWPVIoMjUyMCksQj1S'@;
put 'KDkyODIpLFk9Uig0MDk1KSxYPVIoNDc1MSksVT1SKDY3NzIpLHE9VS5zZXRvcHRzLGVlPVUub3duUHJvcCx0ZT1SKDc4NDQpLG9lPShSKDk1MzkpLFUuY2hpbGRyZW5JZ25vcmVkKSxzZT1VLmlzSWdub3JlZCxoZT1SKDc3OCk7ZnVuY3Rpb24gdWUoYixELEgpe2lmKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBEJiYoSD1ELEQ9e30pLER8fChEPXt9KSxELnN5bmMpe2lmKEgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iIik7cmV0dXJuIFgoYixEKX1yZXR1cm4gbmV3IEcoYixELEgpfXVlLnN5bmM9WDt2YXIgY2U9dWUuR2xvYlN5bmM9WC5HbG9i'@;
put 'U3luYztmdW5jdGlvbiBHKGIsRCxIKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRCYmKEg9RCxEPW51bGwpLEQmJkQuc3luYyl7aWYoSCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2IiKTtyZXR1cm4gbmV3IGNlKGIsRCl9aWYoISh0aGlzIGluc3Rh'@;
put 'bmNlb2YgRykpcmV0dXJuIG5ldyBHKGIsRCxIKTtxKHRoaXMsYixEKSx0aGlzLl9kaWRSZWFsUGF0aD0hMTt2YXIgTj10aGlzLm1pbmltYXRjaC5zZXQubGVuZ3RoO3RoaXMubWF0Y2hlcz1uZXcgQXJyYXkoTiksImZ1bmN0aW9uIj09dHlwZW9mIEgmJihIPWhlKEgpLHRoaXMub24oImVycm9y'@;
put 'IixIKSx0aGlzLm9uKCJlbmQiLGZ1bmN0aW9uKHApe0gobnVsbCxwKX0pKTt2YXIgZz10aGlzO2lmKHRoaXMuX3Byb2Nlc3Npbmc9MCx0aGlzLl9lbWl0UXVldWU9W10sdGhpcy5fcHJvY2Vzc1F1ZXVlPVtdLHRoaXMucGF1c2VkPSExLHRoaXMubm9wcm9jZXNzKXJldHVybiB0aGlzO2lmKDA9'@;
put 'PT1OKXJldHVybiB2KCk7Zm9yKHZhciBDPSEwLFM9MDtTPE47UysrKXRoaXMuX3Byb2Nlc3ModGhpcy5taW5pbWF0Y2guc2V0W1NdLFMsITEsdik7ZnVuY3Rpb24gdigpey0tZy5fcHJvY2Vzc2luZyxnLl9wcm9jZXNzaW5nPD0wJiYoQz96Lm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5fZmluaXNo'@;
put 'KCl9KTpnLl9maW5pc2goKSl9Qz0hMX11ZS5nbG9iPXVlLHVlLmhhc01hZ2ljPWZ1bmN0aW9uKGIsRCl7dmFyIEg9ZnVuY3Rpb24oQyxTKXtpZihudWxsPT09U3x8Im9iamVjdCIhPXR5cGVvZiBTKXJldHVybiBDO2Zvcih2YXIgdj1PYmplY3Qua2V5cyhTKSxwPXYubGVuZ3RoO3AtLTspQ1t2'@;
put 'W3BdXT1TW3ZbcF1dO3JldHVybiBDfSh7fSxEKTtILm5vcHJvY2Vzcz0hMDt2YXIgTj1uZXcgRyhiLEgpLm1pbmltYXRjaC5zZXQ7aWYoIWIpcmV0dXJuITE7aWYoTi5sZW5ndGg+MSlyZXR1cm4hMDtmb3IodmFyIGc9MDtnPE5bMF0ubGVuZ3RoO2crKylpZigic3RyaW5nIiE9dHlwZW9mIE5b'@;
put 'MF1bZ10pcmV0dXJuITA7cmV0dXJuITF9LHVlLkdsb2I9RyxFKEcsaiksRy5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe2lmKEIodGhpcyBpbnN0YW5jZW9mIEcpLCF0aGlzLmFib3J0ZWQpe2lmKHRoaXMucmVhbHBhdGgmJiF0aGlzLl9kaWRSZWFscGF0aClyZXR1cm4gdGhpcy5fcmVh'@;
put 'bHBhdGgoKTtVLmZpbmlzaCh0aGlzKSx0aGlzLmVtaXQoImVuZCIsdGhpcy5mb3VuZCl9fSxHLnByb3RvdHlwZS5fcmVhbHBhdGg9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGlkUmVhbHBhdGgpe3RoaXMuX2RpZFJlYWxwYXRoPSEwO3ZhciBiPXRoaXMubWF0Y2hlcy5sZW5ndGg7aWYoMD09PWIp'@;
put 'cmV0dXJuIHRoaXMuX2ZpbmlzaCgpO2Zvcih2YXIgRD10aGlzLEg9MDtIPHRoaXMubWF0Y2hlcy5sZW5ndGg7SCsrKXRoaXMuX3JlYWxwYXRoU2V0KEgsTil9ZnVuY3Rpb24gTigpezA9PS0tYiYmRC5fZmluaXNoKCl9fSxHLnByb3RvdHlwZS5fcmVhbHBhdGhTZXQ9ZnVuY3Rpb24oYixEKXt2'@;
put 'YXIgSD10aGlzLm1hdGNoZXNbYl07aWYoIUgpcmV0dXJuIEQoKTt2YXIgTj1PYmplY3Qua2V5cyhIKSxnPXRoaXMsQz1OLmxlbmd0aDtpZigwPT09QylyZXR1cm4gRCgpO3ZhciBTPXRoaXMubWF0Y2hlc1tiXT1PYmplY3QuY3JlYXRlKG51bGwpO04uZm9yRWFjaChmdW5jdGlvbih2LHApe3Y9'@;
put 'Zy5fbWFrZUFicyh2KSxMLnJlYWxwYXRoKHYsZy5yZWFscGF0aENhY2hlLGZ1bmN0aW9uKHcsSil7dz8ic3RhdCI9PT13LnN5c2NhbGw/U1t2XT0hMDpnLmVtaXQoImVycm9yIix3KTpTW0pdPSEwLDA9PS0tQyYmKGcubWF0Y2hlc1tiXT1TLEQoKSl9KX0pfSxHLnByb3RvdHlwZS5fbWFyaz1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gVS5tYXJrKHRoaXMsYil9LEcucHJvdG90eXBlLl9tYWtlQWJzPWZ1bmN0aW9uKGIpe3JldHVybiBVLm1ha2VBYnModGhpcyxiKX0sRy5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oKXt0aGlzLmFib3J0ZWQ9ITAsdGhpcy5lbWl0KCJhYm9ydCIpfSxHLnByb3Rv'@;
put 'dHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGF1c2VkfHwodGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0KCJwYXVzZSIpKX0sRy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5wYXVzZWQpe2lmKHRoaXMuZW1pdCgicmVzdW1lIiksdGhpcy5wYXVzZWQ9ITEsdGhpcy5fZW1p'@;
put 'dFF1ZXVlLmxlbmd0aCl7dmFyIGI9dGhpcy5fZW1pdFF1ZXVlLnNsaWNlKDApO3RoaXMuX2VtaXRRdWV1ZS5sZW5ndGg9MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIEg9YltEXTt0aGlzLl9lbWl0TWF0Y2goSFswXSxIWzFdKX19aWYodGhpcy5fcHJvY2Vzc1F1ZXVlLmxlbmd0'@;
put 'aCl7dmFyIE49dGhpcy5fcHJvY2Vzc1F1ZXVlLnNsaWNlKDApO2Zvcih0aGlzLl9wcm9jZXNzUXVldWUubGVuZ3RoPTAsRD0wO0Q8Ti5sZW5ndGg7RCsrKXt2YXIgZz1OW0RdO3RoaXMuX3Byb2Nlc3NpbmctLSx0aGlzLl9wcm9jZXNzKGdbMF0sZ1sxXSxnWzJdLGdbM10pfX19fSxHLnByb3Rv'@;
put 'dHlwZS5fcHJvY2Vzcz1mdW5jdGlvbihiLEQsSCxOKXtpZihCKHRoaXMgaW5zdGFuY2VvZiBHKSxCKCJmdW5jdGlvbiI9PXR5cGVvZiBOKSwhdGhpcy5hYm9ydGVkKWlmKHRoaXMuX3Byb2Nlc3NpbmcrKyx0aGlzLnBhdXNlZCl0aGlzLl9wcm9jZXNzUXVldWUucHVzaChbYixELEgsTl0pO2Vs'@;
put 'c2V7Zm9yKHZhciBnLEM9MDsic3RyaW5nIj09dHlwZW9mIGJbQ107KUMrKztzd2l0Y2goQyl7Y2FzZSBiLmxlbmd0aDpyZXR1cm4gdm9pZCB0aGlzLl9wcm9jZXNzU2ltcGxlKGIuam9pbigiLyIpLEQsTik7Y2FzZSAwOmc9bnVsbDticmVhaztkZWZhdWx0Omc9Yi5zbGljZSgwLEMpLmpvaW4o'@;
put 'Ii8iKX12YXIgUyx2PWIuc2xpY2UoQyk7bnVsbD09PWc/Uz0iLiI6KChZKGcpfHxZKGIubWFwKGZ1bmN0aW9uKHcpe3JldHVybiJzdHJpbmciPT10eXBlb2Ygdz93OiJbKl0ifSkuam9pbigiLyIpKSkmJihnJiZZKGcpfHwoZz0iLyIrZykpLFM9Zyk7dmFyIHA9dGhpcy5fbWFrZUFicyhTKTtp'@;
put 'ZihvZSh0aGlzLFMpKXJldHVybiBOKCk7dlswXT09PWsuR0xPQlNUQVI/dGhpcy5fcHJvY2Vzc0dsb2JTdGFyKGcsUyxwLHYsRCxILE4pOnRoaXMuX3Byb2Nlc3NSZWFkZGlyKGcsUyxwLHYsRCxILE4pfX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyPWZ1bmN0aW9uKGIsRCxILE4sZyxD'@;
put 'LFMpe3ZhciB2PXRoaXM7dGhpcy5fcmVhZGRpcihILEMsZnVuY3Rpb24ocCx3KXtyZXR1cm4gdi5fcHJvY2Vzc1JlYWRkaXIyKGIsRCxILE4sZyxDLHcsUyl9KX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyMj1mdW5jdGlvbihiLEQsSCxOLGcsQyxTLHYpe2lmKCFTKXJldHVybiB2KCk7'@;
put 'Zm9yKHZhciBwPU5bMF0sdz0hIXRoaXMubWluaW1hdGNoLm5lZ2F0ZSxuZT10aGlzLmRvdHx8Ii4iPT09cC5fZ2xvYi5jaGFyQXQoMCksZGU9W10sZmU9MDtmZTxTLmxlbmd0aDtmZSsrKSgiLiIhPT0oSWU9U1tmZV0pLmNoYXJBdCgwKXx8bmUpJiYodyYmIWI/IUllLm1hdGNoKHApOkllLm1h'@;
put 'dGNoKHApKSYmZGUucHVzaChJZSk7dmFyIHhlPWRlLmxlbmd0aDtpZigwPT09eGUpcmV0dXJuIHYoKTtpZigxPT09Ti5sZW5ndGgmJiF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpe2Zvcih0aGlzLm1hdGNoZXNbZ118fCh0aGlzLm1hdGNoZXNbZ109T2JqZWN0LmNyZWF0ZShudWxsKSksZmU9MDtm'@;
put 'ZTx4ZTtmZSsrKXt2YXIgSWU9ZGVbZmVdO2ImJihJZT0iLyIhPT1iP2IrIi8iK0llOmIrSWUpLCIvIiE9PUllLmNoYXJBdCgwKXx8dGhpcy5ub21vdW50fHwoSWU9Vi5qb2luKHRoaXMucm9vdCxJZSkpLHRoaXMuX2VtaXRNYXRjaChnLEllKX1yZXR1cm4gdigpfWZvcihOLnNoaWZ0KCksZmU9'@;
put 'MDtmZTx4ZTtmZSsrKUllPWRlW2ZlXSxiJiYoSWU9Ii8iIT09Yj9iKyIvIitJZTpiK0llKSx0aGlzLl9wcm9jZXNzKFtJZV0uY29uY2F0KE4pLGcsQyx2KTt2KCl9LEcucHJvdG90eXBlLl9lbWl0TWF0Y2g9ZnVuY3Rpb24oYixEKXtpZighdGhpcy5hYm9ydGVkJiYhc2UodGhpcyxEKSlpZih0'@;
put 'aGlzLnBhdXNlZCl0aGlzLl9lbWl0UXVldWUucHVzaChbYixEXSk7ZWxzZXt2YXIgSD1ZKEQpP0Q6dGhpcy5fbWFrZUFicyhEKTtpZih0aGlzLm1hcmsmJihEPXRoaXMuX21hcmsoRCkpLHRoaXMuYWJzb2x1dGUmJihEPUgpLCF0aGlzLm1hdGNoZXNbYl1bRF0pe2lmKHRoaXMubm9kaXIpe3Zh'@;
put 'ciBOPXRoaXMuY2FjaGVbSF07aWYoIkRJUiI9PT1OfHxBcnJheS5pc0FycmF5KE4pKXJldHVybn10aGlzLm1hdGNoZXNbYl1bRF09ITA7dmFyIGc9dGhpcy5zdGF0Q2FjaGVbSF07ZyYmdGhpcy5lbWl0KCJzdGF0IixELGcpLHRoaXMuZW1pdCgibWF0Y2giLEQpfX19LEcucHJvdG90eXBlLl9y'@;
put 'ZWFkZGlySW5HbG9iU3Rhcj1mdW5jdGlvbihiLEQpe2lmKCF0aGlzLmFib3J0ZWQpe2lmKHRoaXMuZm9sbG93KXJldHVybiB0aGlzLl9yZWFkZGlyKGIsITEsRCk7dmFyIEg9dGhpcyxOPXRlKCJsc3RhdFwwIitiLGZ1bmN0aW9uKGcsQyl7aWYoZyYmIkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJu'@;
put 'IEQoKTt2YXIgUz1DJiZDLmlzU3ltYm9saWNMaW5rKCk7SC5zeW1saW5rc1tiXT1TLFN8fCFDfHxDLmlzRGlyZWN0b3J5KCk/SC5fcmVhZGRpcihiLCExLEQpOihILmNhY2hlW2JdPSJGSUxFIixEKCkpfSk7TiYmSC5mcy5sc3RhdChiLE4pfX0sRy5wcm90b3R5cGUuX3JlYWRkaXI9ZnVuY3Rp'@;
put 'b24oYixELEgpe2lmKCF0aGlzLmFib3J0ZWQmJihIPXRlKCJyZWFkZGlyXDAiK2IrIlwwIitELEgpKSl7aWYoRCYmIWVlKHRoaXMuc3ltbGlua3MsYikpcmV0dXJuIHRoaXMuX3JlYWRkaXJJbkdsb2JTdGFyKGIsSCk7aWYoZWUodGhpcy5jYWNoZSxiKSl7dmFyIE49dGhpcy5jYWNoZVtiXTtp'@;
put 'ZighTnx8IkZJTEUiPT09TilyZXR1cm4gSCgpO2lmKEFycmF5LmlzQXJyYXkoTikpcmV0dXJuIEgobnVsbCxOKX10aGlzLmZzLnJlYWRkaXIoYiwoZz10aGlzLEM9YixTPUgsZnVuY3Rpb24odixwKXt2P2cuX3JlYWRkaXJFcnJvcihDLHYsUyk6Zy5fcmVhZGRpckVudHJpZXMoQyxwLFMpfSkp'@;
put 'fXZhciBnLEMsU30sRy5wcm90b3R5cGUuX3JlYWRkaXJFbnRyaWVzPWZ1bmN0aW9uKGIsRCxIKXtpZighdGhpcy5hYm9ydGVkKXtpZighdGhpcy5tYXJrJiYhdGhpcy5zdGF0KWZvcih2YXIgTj0wO048RC5sZW5ndGg7TisrKXt2YXIgZz1EW05dO3RoaXMuY2FjaGVbZz0iLyI9PT1iP2IrZzpi'@;
put 'KyIvIitnXT0hMH1yZXR1cm4gdGhpcy5jYWNoZVtiXT1ELEgobnVsbCxEKX19LEcucHJvdG90eXBlLl9yZWFkZGlyRXJyb3I9ZnVuY3Rpb24oYixELEgpe2lmKCF0aGlzLmFib3J0ZWQpe3N3aXRjaChELmNvZGUpe2Nhc2UiRU5PVFNVUCI6Y2FzZSJFTk9URElSIjp2YXIgTj10aGlzLl9tYWtl'@;
put 'QWJzKGIpO2lmKHRoaXMuY2FjaGVbTl09IkZJTEUiLE49PT10aGlzLmN3ZEFicyl7dmFyIGc9bmV3IEVycm9yKEQuY29kZSsiIGludmFsaWQgY3dkICIrdGhpcy5jd2QpO2cucGF0aD10aGlzLmN3ZCxnLmNvZGU9RC5jb2RlLHRoaXMuZW1pdCgiZXJyb3IiLGcpLHRoaXMuYWJvcnQoKX1icmVh'@;
put 'aztjYXNlIkVOT0VOVCI6Y2FzZSJFTE9PUCI6Y2FzZSJFTkFNRVRPT0xPTkciOmNhc2UiVU5LTk9XTiI6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGIpXT0hMTticmVhaztkZWZhdWx0OnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhiKV09ITEsdGhpcy5zdHJpY3QmJih0aGlzLmVtaXQoImVy'@;
put 'cm9yIixEKSx0aGlzLmFib3J0KCkpLHRoaXMuc2lsZW50fHxLLmVycm9yKCJnbG9iIGVycm9yIixEKX1yZXR1cm4gSCgpfX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3Rhcj1mdW5jdGlvbihiLEQsSCxOLGcsQyxTKXt2YXIgdj10aGlzO3RoaXMuX3JlYWRkaXIoSCxDLGZ1bmN0aW9uKHAs'@;
put 'dyl7di5fcHJvY2Vzc0dsb2JTdGFyMihiLEQsSCxOLGcsQyx3LFMpfSl9LEcucHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXIyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMsdil7aWYoIVMpcmV0dXJuIHYoKTt2YXIgcD1OLnNsaWNlKDEpLHc9Yj9bYl06W10sSj13LmNvbmNhdChwKTt0aGlzLl9w'@;
put 'cm9jZXNzKEosZywhMSx2KTt2YXIgZGU9Uy5sZW5ndGg7aWYodGhpcy5zeW1saW5rc1tIXSYmQylyZXR1cm4gdigpO2Zvcih2YXIgZmU9MDtmZTxkZTtmZSsrKWlmKCIuIiE9PVNbZmVdLmNoYXJBdCgwKXx8dGhpcy5kb3Qpe3ZhciB4ZT13LmNvbmNhdChTW2ZlXSxwKTt0aGlzLl9wcm9jZXNz'@;
put 'KHhlLGcsITAsdik7dmFyIEllPXcuY29uY2F0KFNbZmVdLE4pO3RoaXMuX3Byb2Nlc3MoSWUsZywhMCx2KX12KCl9LEcucHJvdG90eXBlLl9wcm9jZXNzU2ltcGxlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzO3RoaXMuX3N0YXQoYixmdW5jdGlvbihnLEMpe04uX3Byb2Nlc3NTaW1wbGUy'@;
put 'KGIsRCxnLEMsSCl9KX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGUyPWZ1bmN0aW9uKGIsRCxILE4sZyl7aWYodGhpcy5tYXRjaGVzW0RdfHwodGhpcy5tYXRjaGVzW0RdPU9iamVjdC5jcmVhdGUobnVsbCkpLCFOKXJldHVybiBnKCk7aWYoYiYmWShiKSYmIXRoaXMubm9tb3VudCl7dmFy'@;
put 'IEM9L1tcL1xcXSQvLnRlc3QoYik7Ii8iPT09Yi5jaGFyQXQoMCk/Yj1WLmpvaW4odGhpcy5yb290LGIpOihiPVYucmVzb2x2ZSh0aGlzLnJvb3QsYiksQyYmKGIrPSIvIikpfSJ3aW4zMiI9PT16LnBsYXRmb3JtJiYoYj1iLnJlcGxhY2UoL1xcL2csIi8iKSksdGhpcy5fZW1pdE1hdGNoKEQs'@;
put 'YiksZygpfSxHLnByb3RvdHlwZS5fc3RhdD1mdW5jdGlvbihiLEQpe3ZhciBIPXRoaXMuX21ha2VBYnMoYiksTj0iLyI9PT1iLnNsaWNlKC0xKTtpZihiLmxlbmd0aD50aGlzLm1heExlbmd0aClyZXR1cm4gRCgpO2lmKCF0aGlzLnN0YXQmJmVlKHRoaXMuY2FjaGUsSCkpe3ZhciBnPXRoaXMu'@;
put 'Y2FjaGVbSF07aWYoQXJyYXkuaXNBcnJheShnKSYmKGc9IkRJUiIpLCFOfHwiRElSIj09PWcpcmV0dXJuIEQobnVsbCxnKTtpZihOJiYiRklMRSI9PT1nKXJldHVybiBEKCl9dmFyIEM9dGhpcy5zdGF0Q2FjaGVbSF07aWYodm9pZCAwIT09Qyl7aWYoITE9PT1DKXJldHVybiBEKG51bGwsQyk7'@;
put 'dmFyIFM9Qy5pc0RpcmVjdG9yeSgpPyJESVIiOiJGSUxFIjtyZXR1cm4gTiYmIkZJTEUiPT09Uz9EKCk6RChudWxsLFMsQyl9dmFyIHY9dGhpcyxwPXRlKCJzdGF0XDAiK0gsZnVuY3Rpb24odyxKKXtpZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIHYuZnMuc3RhdChILGZ1bmN0aW9u'@;
put 'KG5lLGRlKXtuZT92Ll9zdGF0MihiLEgsbnVsbCxKLEQpOnYuX3N0YXQyKGIsSCxuZSxkZSxEKX0pO3YuX3N0YXQyKGIsSCx3LEosRCl9KTtwJiZ2LmZzLmxzdGF0KEgscCl9LEcucHJvdG90eXBlLl9zdGF0Mj1mdW5jdGlvbihiLEQsSCxOLGcpe2lmKEgmJigiRU5PRU5UIj09PUguY29kZXx8'@;
put 'IkVOT1RESVIiPT09SC5jb2RlKSlyZXR1cm4gdGhpcy5zdGF0Q2FjaGVbRF09ITEsZygpO3ZhciBDPSIvIj09PWIuc2xpY2UoLTEpO2lmKHRoaXMuc3RhdENhY2hlW0RdPU4sIi8iPT09RC5zbGljZSgtMSkmJk4mJiFOLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGcobnVsbCwhMSxOKTt2YXIgUz0h'@;
put 'MDtyZXR1cm4gTiYmKFM9Ti5pc0RpcmVjdG9yeSgpPyJESVIiOiJGSUxFIiksdGhpcy5jYWNoZVtEXT10aGlzLmNhY2hlW0RdfHxTLEMmJiJGSUxFIj09PVM/ZygpOmcobnVsbCxTLE4pfX0sNDc1MTooTSxPLFIpPT57dmFyIHo9Uig1MTA4KSxLPVIoNDE1NSk7TS5leHBvcnRzPWVlLGVlLkds'@;
put 'b2JTeW5jPXRlO3ZhciBMPVIoNzMzNCksaz1SKDExNzEpLEU9KFIoMjg4NCksUig5NTM5KSxSKDI1MjApKSxqPVIoOTI4MiksVj1SKDQwOTUpLEI9Uig2NzcyKSxZPUIuc2V0b3B0cyxYPUIub3duUHJvcCxVPUIuY2hpbGRyZW5JZ25vcmVkLHE9Qi5pc0lnbm9yZWQ7ZnVuY3Rpb24gZWUob2Us'@;
put 'c2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXx8Mz09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iXG5TZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1nbG9iL2lzc3Vlcy8xNjciKTtyZXR1cm4g'@;
put 'bmV3IHRlKG9lLHNlKS5mb3VuZH1mdW5jdGlvbiB0ZShvZSxzZSl7aWYoIW9lKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIHBhdHRlcm4iKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygc2V8fDM9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHBy'@;
put 'b3ZpZGVkIHRvIHN5bmMgZ2xvYlxuU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvMTY3Iik7aWYoISh0aGlzIGluc3RhbmNlb2YgdGUpKXJldHVybiBuZXcgdGUob2Usc2UpO2lmKFkodGhpcyxvZSxzZSksdGhpcy5ub3Byb2Nlc3MpcmV0dXJuIHRoaXM7'@;
put 'dmFyIGhlPXRoaXMubWluaW1hdGNoLnNldC5sZW5ndGg7dGhpcy5tYXRjaGVzPW5ldyBBcnJheShoZSk7Zm9yKHZhciB1ZT0wO3VlPGhlO3VlKyspdGhpcy5fcHJvY2Vzcyh0aGlzLm1pbmltYXRjaC5zZXRbdWVdLHVlLCExKTt0aGlzLl9maW5pc2goKX10ZS5wcm90b3R5cGUuX2ZpbmlzaD1m'@;
put 'dW5jdGlvbigpe2lmKGoub2sodGhpcyBpbnN0YW5jZW9mIHRlKSx0aGlzLnJlYWxwYXRoKXt2YXIgb2U9dGhpczt0aGlzLm1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbihzZSxoZSl7dmFyIHVlPW9lLm1hdGNoZXNbaGVdPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBjZSBpbiBzZSl0cnl7'@;
put 'Y2U9b2UuX21ha2VBYnMoY2UpLHVlW0wucmVhbHBhdGhTeW5jKGNlLG9lLnJlYWxwYXRoQ2FjaGUpXT0hMH1jYXRjaChHKXtpZigic3RhdCIhPT1HLnN5c2NhbGwpdGhyb3cgRzt1ZVtvZS5fbWFrZUFicyhjZSldPSEwfX0pfUIuZmluaXNoKHRoaXMpfSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3M9'@;
put 'ZnVuY3Rpb24ob2Usc2UsaGUpe2oub2sodGhpcyBpbnN0YW5jZW9mIHRlKTtmb3IodmFyIHVlLGNlPTA7InN0cmluZyI9PXR5cGVvZiBvZVtjZV07KWNlKys7c3dpdGNoKGNlKXtjYXNlIG9lLmxlbmd0aDpyZXR1cm4gdm9pZCB0aGlzLl9wcm9jZXNzU2ltcGxlKG9lLmpvaW4oIi8iKSxzZSk7'@;
put 'Y2FzZSAwOnVlPW51bGw7YnJlYWs7ZGVmYXVsdDp1ZT1vZS5zbGljZSgwLGNlKS5qb2luKCIvIil9dmFyIEcsYj1vZS5zbGljZShjZSk7bnVsbD09PXVlP0c9Ii4iOigoVih1ZSl8fFYob2UubWFwKGZ1bmN0aW9uKEgpe3JldHVybiJzdHJpbmciPT10eXBlb2YgSD9IOiJbKl0ifSkuam9pbigi'@;
put 'LyIpKSkmJih1ZSYmVih1ZSl8fCh1ZT0iLyIrdWUpKSxHPXVlKTt2YXIgRD10aGlzLl9tYWtlQWJzKEcpO1UodGhpcyxHKXx8KGJbMF09PT1rLkdMT0JTVEFSP3RoaXMuX3Byb2Nlc3NHbG9iU3Rhcih1ZSxHLEQsYixzZSxoZSk6dGhpcy5fcHJvY2Vzc1JlYWRkaXIodWUsRyxELGIsc2UsaGUp'@;
put 'KX0sdGUucHJvdG90eXBlLl9wcm9jZXNzUmVhZGRpcj1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXt2YXIgYj10aGlzLl9yZWFkZGlyKGhlLEcpO2lmKGIpe2Zvcih2YXIgRD11ZVswXSxIPSEhdGhpcy5taW5pbWF0Y2gubmVnYXRlLGc9dGhpcy5kb3R8fCIuIj09PUQuX2dsb2IuY2hhckF0'@;
put 'KDApLEM9W10sUz0wO1M8Yi5sZW5ndGg7UysrKSgiLiIhPT0odz1iW1NdKS5jaGFyQXQoMCl8fGcpJiYoSCYmIW9lPyF3Lm1hdGNoKEQpOncubWF0Y2goRCkpJiZDLnB1c2godyk7dmFyIHY9Qy5sZW5ndGg7aWYoMCE9PXYpaWYoMSE9PXVlLmxlbmd0aHx8dGhpcy5tYXJrfHx0aGlzLnN0YXQp'@;
put 'Zm9yKHVlLnNoaWZ0KCksUz0wO1M8djtTKyspdz1DW1NdLHRoaXMuX3Byb2Nlc3MoKG9lP1tvZSx3XTpbd10pLmNvbmNhdCh1ZSksY2UsRyk7ZWxzZSBmb3IodGhpcy5tYXRjaGVzW2NlXXx8KHRoaXMubWF0Y2hlc1tjZV09T2JqZWN0LmNyZWF0ZShudWxsKSksUz0wO1M8djtTKyspe3ZhciB3'@;
put 'PUNbU107b2UmJih3PSIvIiE9PW9lLnNsaWNlKC0xKT9vZSsiLyIrdzpvZSt3KSwiLyIhPT13LmNoYXJBdCgwKXx8dGhpcy5ub21vdW50fHwodz1FLmpvaW4odGhpcy5yb290LHcpKSx0aGlzLl9lbWl0TWF0Y2goY2Usdyl9fX0sdGUucHJvdG90eXBlLl9lbWl0TWF0Y2g9ZnVuY3Rpb24ob2Us'@;
put 'c2Upe2lmKCFxKHRoaXMsc2UpKXt2YXIgaGU9dGhpcy5fbWFrZUFicyhzZSk7aWYodGhpcy5tYXJrJiYoc2U9dGhpcy5fbWFyayhzZSkpLHRoaXMuYWJzb2x1dGUmJihzZT1oZSksIXRoaXMubWF0Y2hlc1tvZV1bc2VdKXtpZih0aGlzLm5vZGlyKXt2YXIgdWU9dGhpcy5jYWNoZVtoZV07aWYo'@;
put 'IkRJUiI9PT11ZXx8QXJyYXkuaXNBcnJheSh1ZSkpcmV0dXJufXRoaXMubWF0Y2hlc1tvZV1bc2VdPSEwLHRoaXMuc3RhdCYmdGhpcy5fc3RhdChzZSl9fX0sdGUucHJvdG90eXBlLl9yZWFkZGlySW5HbG9iU3Rhcj1mdW5jdGlvbihvZSl7aWYodGhpcy5mb2xsb3cpcmV0dXJuIHRoaXMuX3Jl'@;
put 'YWRkaXIob2UsITEpO3ZhciBzZSxoZTt0cnl7aGU9dGhpcy5mcy5sc3RhdFN5bmMob2UpfWNhdGNoKGNlKXtpZigiRU5PRU5UIj09PWNlLmNvZGUpcmV0dXJuIG51bGx9dmFyIHVlPWhlJiZoZS5pc1N5bWJvbGljTGluaygpO3JldHVybiB0aGlzLnN5bWxpbmtzW29lXT11ZSx1ZXx8IWhlfHxo'@;
put 'ZS5pc0RpcmVjdG9yeSgpP3NlPXRoaXMuX3JlYWRkaXIob2UsITEpOnRoaXMuY2FjaGVbb2VdPSJGSUxFIixzZX0sdGUucHJvdG90eXBlLl9yZWFkZGlyPWZ1bmN0aW9uKG9lLHNlKXtpZihzZSYmIVgodGhpcy5zeW1saW5rcyxvZSkpcmV0dXJuIHRoaXMuX3JlYWRkaXJJbkdsb2JTdGFyKG9l'@;
put 'KTtpZihYKHRoaXMuY2FjaGUsb2UpKXt2YXIgaGU9dGhpcy5jYWNoZVtvZV07aWYoIWhlfHwiRklMRSI9PT1oZSlyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KGhlKSlyZXR1cm4gaGV9dHJ5e3JldHVybiB0aGlzLl9yZWFkZGlyRW50cmllcyhvZSx0aGlzLmZzLnJlYWRkaXJTeW5jKG9l'@;
put 'KSl9Y2F0Y2godWUpe3JldHVybiB0aGlzLl9yZWFkZGlyRXJyb3Iob2UsdWUpLG51bGx9fSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJFbnRyaWVzPWZ1bmN0aW9uKG9lLHNlKXtpZighdGhpcy5tYXJrJiYhdGhpcy5zdGF0KWZvcih2YXIgaGU9MDtoZTxzZS5sZW5ndGg7aGUrKyl7dmFyIHVlPXNl'@;
put 'W2hlXTt0aGlzLmNhY2hlW3VlPSIvIj09PW9lP29lK3VlOm9lKyIvIit1ZV09ITB9cmV0dXJuIHRoaXMuY2FjaGVbb2VdPXNlLHNlfSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJFcnJvcj1mdW5jdGlvbihvZSxzZSl7c3dpdGNoKHNlLmNvZGUpe2Nhc2UiRU5PVFNVUCI6Y2FzZSJFTk9URElSIjp2'@;
put 'YXIgaGU9dGhpcy5fbWFrZUFicyhvZSk7aWYodGhpcy5jYWNoZVtoZV09IkZJTEUiLGhlPT09dGhpcy5jd2RBYnMpe3ZhciB1ZT1uZXcgRXJyb3Ioc2UuY29kZSsiIGludmFsaWQgY3dkICIrdGhpcy5jd2QpO3Rocm93IHVlLnBhdGg9dGhpcy5jd2QsdWUuY29kZT1zZS5jb2RlLHVlfWJyZWFr'@;
put 'O2Nhc2UiRU5PRU5UIjpjYXNlIkVMT09QIjpjYXNlIkVOQU1FVE9PTE9ORyI6Y2FzZSJVTktOT1dOIjp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMob2UpXT0hMTticmVhaztkZWZhdWx0OmlmKHRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhvZSldPSExLHRoaXMuc3RyaWN0KXRocm93IHNlO3Ro'@;
put 'aXMuc2lsZW50fHx6LmVycm9yKCJnbG9iIGVycm9yIixzZSl9fSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3Rhcj1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXt2YXIgYj10aGlzLl9yZWFkZGlyKGhlLEcpO2lmKGIpe3ZhciBEPXVlLnNsaWNlKDEpLEg9b2U/W29lXTpbXSxOPUguY29u'@;
put 'Y2F0KEQpO3RoaXMuX3Byb2Nlc3MoTixjZSwhMSk7dmFyIGc9Yi5sZW5ndGg7aWYoIXRoaXMuc3ltbGlua3NbaGVdfHwhRylmb3IodmFyIEM9MDtDPGc7QysrKWlmKCIuIiE9PWJbQ10uY2hhckF0KDApfHx0aGlzLmRvdCl7dmFyIFM9SC5jb25jYXQoYltDXSxEKTt0aGlzLl9wcm9jZXNzKFMs'@;
put 'Y2UsITApO3ZhciB2PUguY29uY2F0KGJbQ10sdWUpO3RoaXMuX3Byb2Nlc3ModixjZSwhMCl9fX0sdGUucHJvdG90eXBlLl9wcm9jZXNzU2ltcGxlPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9dGhpcy5fc3RhdChvZSk7aWYodGhpcy5tYXRjaGVzW3NlXXx8KHRoaXMubWF0Y2hlc1tzZV09T2Jq'@;
put 'ZWN0LmNyZWF0ZShudWxsKSksaGUpe2lmKG9lJiZWKG9lKSYmIXRoaXMubm9tb3VudCl7dmFyIHVlPS9bXC9cXF0kLy50ZXN0KG9lKTsiLyI9PT1vZS5jaGFyQXQoMCk/b2U9RS5qb2luKHRoaXMucm9vdCxvZSk6KG9lPUUucmVzb2x2ZSh0aGlzLnJvb3Qsb2UpLHVlJiYob2UrPSIvIikpfSJ3'@;
put 'aW4zMiI9PT1LLnBsYXRmb3JtJiYob2U9b2UucmVwbGFjZSgvXFwvZywiLyIpKSx0aGlzLl9lbWl0TWF0Y2goc2Usb2UpfX0sdGUucHJvdG90eXBlLl9zdGF0PWZ1bmN0aW9uKG9lKXt2YXIgc2U9dGhpcy5fbWFrZUFicyhvZSksaGU9Ii8iPT09b2Uuc2xpY2UoLTEpO2lmKG9lLmxlbmd0aD50'@;
put 'aGlzLm1heExlbmd0aClyZXR1cm4hMTtpZighdGhpcy5zdGF0JiZYKHRoaXMuY2FjaGUsc2UpKXt2YXIgdWU9dGhpcy5jYWNoZVtzZV07aWYoQXJyYXkuaXNBcnJheSh1ZSkmJih1ZT0iRElSIiksIWhlfHwiRElSIj09PXVlKXJldHVybiB1ZTtpZihoZSYmIkZJTEUiPT09dWUpcmV0dXJuITF9'@;
put 'dmFyIGNlPXRoaXMuc3RhdENhY2hlW3NlXTtpZighY2Upe3ZhciBHO3RyeXtHPXRoaXMuZnMubHN0YXRTeW5jKHNlKX1jYXRjaChiKXtpZihiJiYoIkVOT0VOVCI9PT1iLmNvZGV8fCJFTk9URElSIj09PWIuY29kZSkpcmV0dXJuIHRoaXMuc3RhdENhY2hlW3NlXT0hMSwhMX1pZihHJiZHLmlz'@;
put 'U3ltYm9saWNMaW5rKCkpdHJ5e2NlPXRoaXMuZnMuc3RhdFN5bmMoc2UpfWNhdGNoe2NlPUd9ZWxzZSBjZT1HfXJldHVybiB0aGlzLnN0YXRDYWNoZVtzZV09Y2UsdWU9ITAsY2UmJih1ZT1jZS5pc0RpcmVjdG9yeSgpPyJESVIiOiJGSUxFIiksdGhpcy5jYWNoZVtzZV09dGhpcy5jYWNoZVtz'@;
put 'ZV18fHVlLCghaGV8fCJGSUxFIiE9PXVlKSYmdWV9LHRlLnByb3RvdHlwZS5fbWFyaz1mdW5jdGlvbihvZSl7cmV0dXJuIEIubWFyayh0aGlzLG9lKX0sdGUucHJvdG90eXBlLl9tYWtlQWJzPWZ1bmN0aW9uKG9lKXtyZXR1cm4gQi5tYWtlQWJzKHRoaXMsb2UpfX0sNzI5NjooTSxPLFIpPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciB6PVIoMjEwKSgiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIiwhMCk7aWYoeil0cnl7eihbXSwibGVuZ3RoIil9Y2F0Y2h7ej1udWxsfU0uZXhwb3J0cz16fSw2NDU4Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKFIpe2lmKG51'@;
put 'bGw9PT1SfHwib2JqZWN0IiE9dHlwZW9mIFIpcmV0dXJuIFI7aWYoUiBpbnN0YW5jZW9mIE9iamVjdCl2YXIgej17X19wcm90b19fOk8oUil9O2Vsc2Ugej1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEsp'@;
put 'e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LEssT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSLEspKX0pLHp9O3ZhciBPPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oUil7cmV0dXJuIFIuX19wcm90b19ffX0sNzc6KE0sTyxSKT0+e3ZhciB6LEssTD1SKDQxNTUpLGs9'@;
put 'Uig1MTA4KSxFPVIoNTQ0Myksaj1SKDIxNjEpLFY9Uig4NTIwKSxCPVIoNjQ1OCksWT1SKDk1MzkpO2Z1bmN0aW9uIFgodWUsY2Upe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSx6LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2V9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/KHo9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucXVldWUiKSxLPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOih6PSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsSz0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgVSxxPWZ1bmN0'@;
put 'aW9uKCl7fTtmdW5jdGlvbiB0ZSh1ZSl7aih1ZSksdWUuZ3JhY2VmdWxpZnk9dGUsdWUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbihmZSx4ZSl7cmV0dXJuIG5ldyB1ZS5SZWFkU3RyZWFtKGZlLHhlKX0sdWUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24oZmUseGUpe3JldHVybiBuZXcg'@;
put 'dWUuV3JpdGVTdHJlYW0oZmUseGUpfTt2YXIgY2U9dWUucmVhZEZpbGU7dWUucmVhZEZpbGU9ZnVuY3Rpb24oZmUseGUsSWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKEllPXhlLHhlPW51bGwpLGZ1bmN0aW9uIEZlKE9lLGplLFdlLEtlKXtyZXR1cm4gY2UoT2UsamUsZnVuY3Rp'@;
put 'b24oWWUpeyFZZXx8IkVNRklMRSIhPT1ZZS5jb2RlJiYiRU5GSUxFIiE9PVllLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFdlJiZXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW0ZlLFtPZSxqZSxXZV0sWWUsS2V8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLEllKX07dmFy'@;
put 'IEc9dWUud3JpdGVGaWxlO3VlLndyaXRlRmlsZT1mdW5jdGlvbihmZSx4ZSxJZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEllJiYoRmU9SWUsSWU9bnVsbCksZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUsUWUpe3JldHVybiBHKGplLFdlLEtlLGZ1bmN0aW9uKGx0KXshbHR8fCJFTUZJ'@;
put 'TEUiIT09bHQuY29kZSYmIkVORklMRSIhPT1sdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBZZSYmWWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbamUsV2UsS2UsWWVdLGx0LFFlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxJZSxGZSl9O3ZhciBiPXVlLmFwcGVu'@;
put 'ZEZpbGU7YiYmKHVlLmFwcGVuZEZpbGU9ZnVuY3Rpb24oZmUseGUsSWUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmKEZlPUllLEllPW51bGwpLGZ1bmN0aW9uIE9lKGplLFdlLEtlLFllLFFlKXtyZXR1cm4gYihqZSxXZSxLZSxmdW5jdGlvbihsdCl7IWx0fHwiRU1GSUxFIiE9'@;
put 'PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxsdCxRZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsSWUsRmUpfSk7dmFyIEQ9dWUuY29weUZpbGU7'@;
put 'RCYmKHVlLmNvcHlGaWxlPWZ1bmN0aW9uKGZlLHhlLEllLEZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSWUmJihGZT1JZSxJZT0wKSxmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSxRZSl7cmV0dXJuIEQoamUsV2UsS2UsZnVuY3Rpb24obHQpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYi'@;
put 'RU5GSUxFIiE9PWx0LmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZZV0sbHQsUWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLEllLEZlKX0pO3ZhciBIPXVlLnJlYWRkaXI7dWUucmVhZGRpcj1m'@;
put 'dW5jdGlvbihmZSx4ZSxJZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYoSWU9eGUseGU9bnVsbCk7dmFyIEZlPU4udGVzdChMLnZlcnNpb24pP2Z1bmN0aW9uKGplLFdlLEtlLFllKXtyZXR1cm4gSChqZSxPZShqZSxXZSxLZSxZZSkpfTpmdW5jdGlvbihqZSxXZSxLZSxZZSl7cmV0dXJuIEgo'@;
put 'amUsV2UsT2UoamUsV2UsS2UsWWUpKX07cmV0dXJuIEZlKGZlLHhlLEllKTtmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSl7cmV0dXJuIGZ1bmN0aW9uKFFlLGx0KXshUWV8fCJFTUZJTEUiIT09UWUuY29kZSYmIkVORklMRSIhPT1RZS5jb2RlPyhsdCYmbHQuc29ydCYmbHQuc29ydCgpLCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBLZSYmS2UuY2FsbCh0aGlzLFFlLGx0KSk6b2UoW0ZlLFtqZSxXZSxLZV0sUWUsWWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfX19O3ZhciBOPS9edlswLTVdXC4vO2lmKCJ2MC44Ij09PUwudmVyc2lvbi5zdWJzdHIoMCw0KSl7dmFyIGc9Vih1ZSk7dz1nLlJlYWRT'@;
put 'dHJlYW0sSj1nLldyaXRlU3RyZWFtfXZhciBDPXVlLlJlYWRTdHJlYW07QyYmKHcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQy5wcm90b3R5cGUpLHcucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztkZShmZS5wYXRoLGZlLmZsYWdzLGZlLm1vZGUsZnVuY3Rpb24oeGUs'@;
put 'SWUpe3hlPyhmZS5hdXRvQ2xvc2UmJmZlLmRlc3Ryb3koKSxmZS5lbWl0KCJlcnJvciIseGUpKTooZmUuZmQ9SWUsZmUuZW1pdCgib3BlbiIsSWUpLGZlLnJlYWQoKSl9KX0pO3ZhciBTPXVlLldyaXRlU3RyZWFtO1MmJihKLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSxK'@;
put 'LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7ZGUoZmUucGF0aCxmZS5mbGFncyxmZS5tb2RlLGZ1bmN0aW9uKHhlLEllKXt4ZT8oZmUuZGVzdHJveSgpLGZlLmVtaXQoImVycm9yIix4ZSkpOihmZS5mZD1JZSxmZS5lbWl0KCJvcGVuIixJZSkpfSl9KSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkodWUsIlJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd30sc2V0OmZ1bmN0aW9uKGZlKXt3PWZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gSn0sc2V0OmZ1bmN0aW9uKGZlKXtKPWZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciB2PXc7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJGaWxlUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2fSxzZXQ6ZnVuY3Rpb24oZmUpe3Y9ZmV9LGVu'@;
put 'dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIHA9SjtmdW5jdGlvbiB3KGZlLHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHc/KEMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOncuYXBwbHkoT2JqZWN0LmNyZWF0ZSh3LnByb3RvdHlwZSksYXJndW1lbnRzKX1mdW5jdGlv'@;
put 'biBKKGZlLHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIEo/KFMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOkouYXBwbHkoT2JqZWN0LmNyZWF0ZShKLnByb3RvdHlwZSksYXJndW1lbnRzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIkZpbGVXcml0ZVN0cmVhbSIse2dldDpmdW5j'@;
put 'dGlvbigpe3JldHVybiBwfSxzZXQ6ZnVuY3Rpb24oZmUpe3A9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIG5lPXVlLm9wZW47ZnVuY3Rpb24gZGUoZmUseGUsSWUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmKEZlPUllLEllPW51bGwpLGZ1bmN0aW9u'@;
put 'IE9lKGplLFdlLEtlLFllLFFlKXtyZXR1cm4gbmUoamUsV2UsS2UsZnVuY3Rpb24obHQsUGUpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZ'@;
put 'ZV0sbHQsUWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLEllLEZlKX1yZXR1cm4gdWUub3Blbj1kZSx1ZX1mdW5jdGlvbiBvZSh1ZSl7cSgiRU5RVUVVRSIsdWVbMF0ubmFtZSx1ZVsxXSksRVt6XS5wdXNoKHVlKSxoZSgpfWZ1bmN0aW9uIHNlKCl7Zm9yKHZhciB1ZT1EYXRl'@;
put 'Lm5vdygpLGNlPTA7Y2U8RVt6XS5sZW5ndGg7KytjZSlFW3pdW2NlXS5sZW5ndGg+MiYmKEVbel1bY2VdWzNdPXVlLEVbel1bY2VdWzRdPXVlKTtoZSgpfWZ1bmN0aW9uIGhlKCl7aWYoY2xlYXJUaW1lb3V0KFUpLFU9dm9pZCAwLDAhPT1FW3pdLmxlbmd0aCl7dmFyIHVlPUVbel0uc2hpZnQo'@;
put 'KSxjZT11ZVswXSxHPXVlWzFdLGI9dWVbMl0sRD11ZVszXSxIPXVlWzRdO2lmKHZvaWQgMD09PUQpcSgiUkVUUlkiLGNlLm5hbWUsRyksY2UuYXBwbHkobnVsbCxHKTtlbHNlIGlmKERhdGUubm93KCktRD49NmU0KXtxKCJUSU1FT1VUIixjZS5uYW1lLEcpO3ZhciBOPUcucG9wKCk7ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIE4mJk4uY2FsbChudWxsLGIpfWVsc2V7dmFyIGc9RGF0ZS5ub3coKS1ILEM9TWF0aC5tYXgoSC1ELDEpO2c+PU1hdGgubWluKDEuMipDLDEwMCk/KHEoIlJFVFJZIixjZS5uYW1lLEcpLGNlLmFwcGx5KG51bGwsRy5jb25jYXQoW0RdKSkpOkVbel0ucHVzaCh1ZSl9dm9p'@;
put 'ZCAwPT09VSYmKFU9c2V0VGltZW91dChoZSwwKSl9fVkuZGVidWdsb2c/cT1ZLmRlYnVnbG9nKCJnZnM0Iik6L1xiZ2ZzNFxiL2kudGVzdChMLmVudi5OT0RFX0RFQlVHfHwiIikmJihxPWZ1bmN0aW9uKCl7dmFyIHVlPVkuZm9ybWF0LmFwcGx5KFksYXJndW1lbnRzKTt1ZT0iR0ZTNDogIit1'@;
put 'ZS5zcGxpdCgvXG4vKS5qb2luKCJcbkdGUzQ6ICIpLGsuZXJyb3IodWUpfSksRVt6XXx8KFgoRSxSLmdbel18fFtdKSxFLmNsb3NlPWZ1bmN0aW9uKHVlKXtmdW5jdGlvbiBjZShHLGIpe3JldHVybiB1ZS5jYWxsKEUsRyxmdW5jdGlvbihEKXtEfHxzZSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBi'@;
put 'JiZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsSyx7dmFsdWU6dWV9KSxjZX0oRS5jbG9zZSksRS5jbG9zZVN5bmM9ZnVuY3Rpb24odWUpe2Z1bmN0aW9uIGNlKEcpe3VlLmFwcGx5KEUsYXJndW1lbnRzKSxzZSgpfXJldHVybiBPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoY2UsSyx7dmFsdWU6dWV9KSxjZX0oRS5jbG9zZVN5bmMpLC9cYmdmczRcYi9pLnRlc3QoTC5lbnYuTk9ERV9ERUJVR3x8IiIpJiZMLm9uKCJleGl0IixmdW5jdGlvbigpe3EoRVt6XSksUig5MjgyKS5lcXVhbChFW3pdLmxlbmd0aCwwKX0pKSxSLmdbel18fFgo'@;
put 'Ui5nLEVbel0pLE0uZXhwb3J0cz10ZShCKEUpKSxMLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCYmIUUuX19wYXRjaGVkJiYoTS5leHBvcnRzPXRlKEUpLEUuX19wYXRjaGVkPSEwKX0sODUyMDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoMjgzMCkuU3RyZWFtO00uZXhw'@;
put 'b3J0cz1mdW5jdGlvbihMKXtyZXR1cm57UmVhZFN0cmVhbTpmdW5jdGlvbiBrKEUsail7aWYoISh0aGlzIGluc3RhbmNlb2YgaykpcmV0dXJuIG5ldyBrKEUsaik7Sy5jYWxsKHRoaXMpO3ZhciBWPXRoaXM7dGhpcy5wYXRoPUUsdGhpcy5mZD1udWxsLHRoaXMucmVhZGFibGU9ITAsdGhpcy5w'@;
put 'YXVzZWQ9ITEsdGhpcy5mbGFncz0iciIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ1ZmZlclNpemU9NjU1MzYsaj1qfHx7fTtmb3IodmFyIEI9T2JqZWN0LmtleXMoaiksWT0wLFg9Qi5sZW5ndGg7WTxYO1krKyl7dmFyIFU9QltZXTt0aGlzW1VdPWpbVV19aWYodGhpcy5lbmNvZGluZyYmdGhpcy5z'@;
put 'ZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKSx2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9MS8wO2Vsc2UgaWYoIm51'@;
put 'bWJlciIhPXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBUeXBlRXJyb3IoImVuZCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydD50aGlzLmVuZCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPD0gZW5kIik7dGhpcy5wb3M9dGhpcy5zdGFydH1udWxsPT09dGhpcy5mZD9MLm9w'@;
put 'ZW4odGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLGZ1bmN0aW9uKHEsZWUpe2lmKHEpcmV0dXJuIFYuZW1pdCgiZXJyb3IiLHEpLHZvaWQoVi5yZWFkYWJsZT0hMSk7Vi5mZD1lZSxWLmVtaXQoIm9wZW4iLGVlKSxWLl9yZWFkKCl9KTp6Lm5leHRUaWNrKGZ1bmN0aW9uKCl7Vi5fcmVh'@;
put 'ZCgpfSl9LFdyaXRlU3RyZWFtOmZ1bmN0aW9uIGsoRSxqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBrKSlyZXR1cm4gbmV3IGsoRSxqKTtLLmNhbGwodGhpcyksdGhpcy5wYXRoPUUsdGhpcy5mZD1udWxsLHRoaXMud3JpdGFibGU9ITAsdGhpcy5mbGFncz0idyIsdGhpcy5lbmNvZGluZz0iYmlu'@;
put 'YXJ5Iix0aGlzLm1vZGU9NDM4LHRoaXMuYnl0ZXNXcml0dGVuPTAsaj1qfHx7fTtmb3IodmFyIFY9T2JqZWN0LmtleXMoaiksQj0wLFk9Vi5sZW5ndGg7QjxZO0IrKyl7dmFyIFg9VltCXTt0aGlzW1hdPWpbWF19aWYodm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0'@;
put 'aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ8MCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPj0gemVybyIpO3RoaXMucG9zPXRoaXMuc3RhcnR9dGhpcy5idXN5PSExLHRoaXMuX3F1ZXVlPVtdLG51bGw9PT10'@;
put 'aGlzLmZkJiYodGhpcy5fb3Blbj1MLm9wZW4sdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3Blbix0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsdm9pZCAwXSksdGhpcy5mbHVzaCgpKX19fX0sMjE2MTooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoMzIwOCksTD16LmN3ZCxrPW51'@;
put 'bGwsRT16LmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8ei5wbGF0Zm9ybTt6LmN3ZD1mdW5jdGlvbigpe3JldHVybiBrfHwoaz1MLmNhbGwoeikpLGt9O3RyeXt6LmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2Ygei5jaGRpcil7dmFyIGo9ei5jaGRpcjt6LmNoZGlyPWZ1bmN0'@;
put 'aW9uKFYpe2s9bnVsbCxqLmNhbGwoeixWKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2Yoei5jaGRpcixqKX1NLmV4cG9ydHM9ZnVuY3Rpb24oVil7dmFyIHNlLG9lO2Z1bmN0aW9uIEIoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe3JldHVy'@;
put 'biBzZS5jYWxsKFYsaGUsdWUsZnVuY3Rpb24oRyl7dGUoRykmJihHPW51bGwpLGNlJiZjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gWShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSl7dHJ5e3JldHVybiBzZS5jYWxsKFYsaGUsdWUpfWNhdGNoKGNlKXtpZighdGUo'@;
put 'Y2UpKXRocm93IGNlfX19ZnVuY3Rpb24gWChzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSxHKXtyZXR1cm4gc2UuY2FsbChWLGhlLHVlLGNlLGZ1bmN0aW9uKGIpe3RlKGIpJiYoYj1udWxsKSxHJiZHLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBVKHNlKXtyZXR1'@;
put 'cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlKXt0cnl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSxjZSl9Y2F0Y2goRyl7aWYoIXRlKEcpKXRocm93IEd9fX1mdW5jdGlvbiBxKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlKXtmdW5jdGlvbiBHKGIsRCl7RCYmKEQudWlkPDAmJihELnVp'@;
put 'ZCs9NDI5NDk2NzI5NiksRC5naWQ8MCYmKEQuZ2lkKz00Mjk0OTY3Mjk2KSksY2UmJmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdWUmJihjZT11ZSx1ZT1udWxsKSx1ZT9zZS5jYWxsKFYsaGUsdWUsRyk6c2UuY2FsbChWLGhlLEcpfX1mdW5jdGlv'@;
put 'biBlZShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSl7dmFyIGNlPXVlP3NlLmNhbGwoVixoZSx1ZSk6c2UuY2FsbChWLGhlKTtyZXR1cm4gY2UmJihjZS51aWQ8MCYmKGNlLnVpZCs9NDI5NDk2NzI5NiksY2UuZ2lkPDAmJihjZS5naWQrPTQyOTQ5NjcyOTYpKSxjZX19ZnVuY3Rpb24g'@;
put 'dGUoc2Upe3JldHVybiFzZXx8IkVOT1NZUyI9PT1zZS5jb2RlfHwhKHouZ2V0dWlkJiYwPT09ei5nZXR1aWQoKXx8IkVJTlZBTCIhPT1zZS5jb2RlJiYiRVBFUk0iIT09c2UuY29kZSl9Sy5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJnoudmVyc2lvbi5tYXRjaCgvXnYwXC42XC5bMC0y'@;
put 'XXxedjBcLjVcLi8pJiYoKHNlPVYpLmxjaG1vZD1mdW5jdGlvbihoZSx1ZSxjZSl7c2Uub3BlbihoZSxLLk9fV1JPTkxZfEsuT19TWU1MSU5LLHVlLGZ1bmN0aW9uKEcsYil7Rz9jZSYmY2UoRyk6c2UuZmNobW9kKGIsdWUsZnVuY3Rpb24oRCl7c2UuY2xvc2UoYixmdW5jdGlvbihIKXtjZSYm'@;
put 'Y2UoRHx8SCl9KX0pfSl9LHNlLmxjaG1vZFN5bmM9ZnVuY3Rpb24oaGUsdWUpe3ZhciBjZSxHPXNlLm9wZW5TeW5jKGhlLEsuT19XUk9OTFl8Sy5PX1NZTUxJTkssdWUpLGI9ITA7dHJ5e2NlPXNlLmZjaG1vZFN5bmMoRyx1ZSksYj0hMX1maW5hbGx5e2lmKGIpdHJ5e3NlLmNsb3NlU3luYyhH'@;
put 'KX1jYXRjaHt9ZWxzZSBzZS5jbG9zZVN5bmMoRyl9cmV0dXJuIGNlfSksVi5sdXRpbWVzfHxmdW5jdGlvbihzZSl7Sy5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJnNlLmZ1dGltZXM/KHNlLmx1dGltZXM9ZnVuY3Rpb24oaGUsdWUsY2UsRyl7c2Uub3BlbihoZSxLLk9fU1lNTElOSyxm'@;
put 'dW5jdGlvbihiLEQpe2I/RyYmRyhiKTpzZS5mdXRpbWVzKEQsdWUsY2UsZnVuY3Rpb24oSCl7c2UuY2xvc2UoRCxmdW5jdGlvbihOKXtHJiZHKEh8fE4pfSl9KX0pfSxzZS5sdXRpbWVzU3luYz1mdW5jdGlvbihoZSx1ZSxjZSl7dmFyIEcsYj1zZS5vcGVuU3luYyhoZSxLLk9fU1lNTElOSyks'@;
put 'RD0hMDt0cnl7Rz1zZS5mdXRpbWVzU3luYyhiLHVlLGNlKSxEPSExfWZpbmFsbHl7aWYoRCl0cnl7c2UuY2xvc2VTeW5jKGIpfWNhdGNoe31lbHNlIHNlLmNsb3NlU3luYyhiKX1yZXR1cm4gR30pOnNlLmZ1dGltZXMmJihzZS5sdXRpbWVzPWZ1bmN0aW9uKGhlLHVlLGNlLEcpe0cmJnoubmV4'@;
put 'dFRpY2soRyl9LHNlLmx1dGltZXNTeW5jPWZ1bmN0aW9uKCl7fSl9KFYpLFYuY2hvd249WChWLmNob3duKSxWLmZjaG93bj1YKFYuZmNob3duKSxWLmxjaG93bj1YKFYubGNob3duKSxWLmNobW9kPUIoVi5jaG1vZCksVi5mY2htb2Q9QihWLmZjaG1vZCksVi5sY2htb2Q9QihWLmxjaG1vZCks'@;
put 'Vi5jaG93blN5bmM9VShWLmNob3duU3luYyksVi5mY2hvd25TeW5jPVUoVi5mY2hvd25TeW5jKSxWLmxjaG93blN5bmM9VShWLmxjaG93blN5bmMpLFYuY2htb2RTeW5jPVkoVi5jaG1vZFN5bmMpLFYuZmNobW9kU3luYz1ZKFYuZmNobW9kU3luYyksVi5sY2htb2RTeW5jPVkoVi5sY2htb2RT'@;
put 'eW5jKSxWLnN0YXQ9cShWLnN0YXQpLFYuZnN0YXQ9cShWLmZzdGF0KSxWLmxzdGF0PXEoVi5sc3RhdCksVi5zdGF0U3luYz1lZShWLnN0YXRTeW5jKSxWLmZzdGF0U3luYz1lZShWLmZzdGF0U3luYyksVi5sc3RhdFN5bmM9ZWUoVi5sc3RhdFN5bmMpLFYuY2htb2QmJiFWLmxjaG1vZCYmKFYu'@;
put 'bGNobW9kPWZ1bmN0aW9uKHNlLGhlLHVlKXt1ZSYmei5uZXh0VGljayh1ZSl9LFYubGNobW9kU3luYz1mdW5jdGlvbigpe30pLFYuY2hvd24mJiFWLmxjaG93biYmKFYubGNob3duPWZ1bmN0aW9uKHNlLGhlLHVlLGNlKXtjZSYmei5uZXh0VGljayhjZSl9LFYubGNob3duU3luYz1mdW5jdGlv'@;
put 'bigpe30pLCJ3aW4zMiI9PT1FJiYoVi5yZW5hbWU9ImZ1bmN0aW9uIiE9dHlwZW9mIFYucmVuYW1lP1YucmVuYW1lOmZ1bmN0aW9uKHNlKXtmdW5jdGlvbiBoZSh1ZSxjZSxHKXt2YXIgYj1EYXRlLm5vdygpLEQ9MDtzZSh1ZSxjZSxmdW5jdGlvbiBIKE4pe2lmKE4mJigiRUFDQ0VTIj09PU4u'@;
put 'Y29kZXx8IkVQRVJNIj09PU4uY29kZSkmJkRhdGUubm93KCktYjw2ZTQpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtWLnN0YXQoY2UsZnVuY3Rpb24oZyxDKXtnJiYiRU5PRU5UIj09PWcuY29kZT9zZSh1ZSxjZSxIKTpHKE4pfSl9LEQpLHZvaWQoRDwxMDAmJihEKz0xMCkpO0cmJkco'@;
put 'Til9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoaGUsc2UpLGhlfShWLnJlbmFtZSkpLFYucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgVi5yZWFkP1YucmVhZDpmdW5jdGlvbihzZSl7ZnVuY3Rpb24gaGUodWUsY2UsRyxiLEQsSCl7dmFyIE47'@;
put 'aWYoSCYmImZ1bmN0aW9uIj09dHlwZW9mIEgpe3ZhciBnPTA7Tj1mdW5jdGlvbihDLFMsdil7aWYoQyYmIkVBR0FJTiI9PT1DLmNvZGUmJmc8MTApcmV0dXJuIGcrKyxzZS5jYWxsKFYsdWUsY2UsRyxiLEQsTik7SC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXJldHVybiBzZS5jYWxsKFYsdWUs'@;
put 'Y2UsRyxiLEQsTil9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKGhlLHNlKSxoZX0oVi5yZWFkKSxWLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBWLnJlYWRTeW5jP1YucmVhZFN5bmM6KG9lPVYucmVhZFN5bmMsZnVuY3Rpb24oc2UsaGUs'@;
put 'dWUsY2UsRyl7Zm9yKHZhciBiPTA7Oyl0cnl7cmV0dXJuIG9lLmNhbGwoVixzZSxoZSx1ZSxjZSxHKX1jYXRjaChEKXtpZigiRUFHQUlOIj09PUQuY29kZSYmYjwxMCl7YisrO2NvbnRpbnVlfXRocm93IER9fSl9fSwxMDQ0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApKCIl'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLEs9ZnVuY3Rpb24oKXtpZih6KXRyeXtyZXR1cm4geih7fSwiYSIse3ZhbHVlOjF9KSwhMH1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMX07Sy5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFLKCkpcmV0dXJuIG51bGw7dHJ5'@;
put 'e3JldHVybiAxIT09eihbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LE0uZXhwb3J0cz1LfSwxNDA1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCxLPVIoNTQxOSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHomJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgeigiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmSygpfX0sNTQxOTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbigpe2lm'@;
put 'KCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBPPXt9LFI9U3ltYm9sKCJ0ZXN0Iiksej1PYmplY3Qo'@;
put 'Uik7aWYoInN0cmluZyI9PXR5cGVvZiBSfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeikpcmV0dXJuITE7Zm9yKFIgaW4gT1tSXT00MixPKXJl'@;
put 'dHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKE8pLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTykubGVuZ3RoKXJldHVybiEx'@;
put 'O3ZhciBLPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTyk7aWYoMSE9PUsubGVuZ3RofHxLWzBdIT09Unx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChPLFIpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVy'@;
put 'dHlEZXNjcmlwdG9yKXt2YXIgTD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sUik7aWYoNDIhPT1MLnZhbHVlfHwhMCE9PUwuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU0MTkpO00uZXhwb3J0cz1m'@;
put 'dW5jdGlvbigpe3JldHVybiB6KCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sNzY0MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMik7TS5leHBvcnRzPXouY2FsbChGdW5jdGlvbi5jYWxsLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpfSwzMzQ5OihNLE8sUik9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDg0NzMpLlRyYW5zZm9ybTtmdW5jdGlvbiBMKGspe0suY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz16LmFsbG9jVW5zYWZlKGspLHRoaXMuX2Jsb2NrU2l6ZT1rLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVsw'@;
put 'LDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9Uig1NzE3KShMLEspLEwucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oayxFLGope3ZhciBWPW51bGw7dHJ5e3RoaXMudXBkYXRlKGssRSl9Y2F0Y2goQil7Vj1CfWooVil9LEwucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihrKXt2YXIg'@;
put 'RT1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goail7RT1qfWsoRSl9LEwucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihrLEUpe2lmKGZ1bmN0aW9uKFUscSl7aWYoIXouaXNCdWZmZXIoVSkmJiJzdHJpbmciIT10eXBlb2YgVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJE'@;
put 'YXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXIiKX0oayksdGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7ei5pc0J1ZmZlcihrKXx8KGs9ei5mcm9tKGssRSkpO2Zvcih2YXIgaj10aGlzLl9ibG9jayxWPTA7dGhpcy5fYmxvY2tP'@;
put 'ZmZzZXQray5sZW5ndGgtVj49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBCPXRoaXMuX2Jsb2NrT2Zmc2V0O0I8dGhpcy5fYmxvY2tTaXplOylqW0IrK109a1tWKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtWPGsubGVuZ3RoOylqW3RoaXMuX2Jsb2NrT2Zm'@;
put 'c2V0KytdPWtbVisrXTtmb3IodmFyIFk9MCxYPTgqay5sZW5ndGg7WD4wOysrWSl0aGlzLl9sZW5ndGhbWV0rPVgsKFg9dGhpcy5fbGVuZ3RoW1ldLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtZXS09NDI5NDk2NzI5NipYKTtyZXR1cm4gdGhpc30sTC5wcm90b3R5cGUuX3VwZGF0'@;
put 'ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGspe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXpl'@;
put 'ZD0hMDt2YXIgRT10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1rJiYoRT1FLnRvU3RyaW5nKGspKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBqPTA7ajw0Oysrail0aGlzLl9sZW5ndGhbal09MDtyZXR1cm4gRX0sTC5wcm90b3R5cGUuX2RpZ2VzdD1m'@;
put 'dW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTS5leHBvcnRzPUx9LDM3MTU6KE0sTyxSKT0+e3ZhciB6PU87ei51dGlscz1SKDY0MzYpLHouY29tbW9uPVIoNTc3Miksei5zaGE9Uig5MDQxKSx6LnJpcGVtZD1SKDI5NDkpLHouaG1hYz1S'@;
put 'KDIzNDQpLHouc2hhMT16LnNoYS5zaGExLHouc2hhMjU2PXouc2hhLnNoYTI1Nix6LnNoYTIyND16LnNoYS5zaGEyMjQsei5zaGEzODQ9ei5zaGEuc2hhMzg0LHouc2hhNTEyPXouc2hhLnNoYTUxMix6LnJpcGVtZDE2MD16LnJpcGVtZC5yaXBlbWQxNjB9LDU3NzI6KE0sTyxSKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5NzQ2KTtmdW5jdGlvbiBMKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRo'@;
put 'aXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6'@;
put 'ZS8zMn1PLkJsb2NrSGFzaD1MLEwucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihrLEUpe2lmKGs9ei50b0FycmF5KGssRSksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KGspOmssdGhpcy5wZW5kaW5nVG90YWwrPWsubGVuZ3RoLHRoaXMucGVuZGluZy5s'@;
put 'ZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIGo9KGs9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz1rLnNsaWNlKGsubGVuZ3RoLWosay5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLGs9ei5qb2luMzIoayww'@;
put 'LGsubGVuZ3RoLWosdGhpcy5lbmRpYW4pO2Zvcih2YXIgVj0wO1Y8ay5sZW5ndGg7Vis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoayxWLFYrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LEwucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy51cGRhdGUodGhp'@;
put 'cy5fcGFkKCkpLEsobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KGspfSxMLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5wZW5kaW5nVG90YWwsRT10aGlzLl9kZWx0YTgsaj1FLShrK3RoaXMucGFkTGVuZ3RoKSVFLFY9bmV3IEFycmF5KGordGhpcy5wYWRM'@;
put 'ZW5ndGgpO1ZbMF09MTI4O2Zvcih2YXIgQj0xO0I8ajtCKyspVltCXT0wO2lmKGs8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgWT04O1k8dGhpcy5wYWRMZW5ndGg7WSsrKVZbQisrXT0wO1ZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT1rPj4+MjQm'@;
put 'MjU1LFZbQisrXT1rPj4+MTYmMjU1LFZbQisrXT1rPj4+OCYyNTUsVltCKytdPTI1NSZrfWVsc2UgZm9yKFZbQisrXT0yNTUmayxWW0IrK109az4+PjgmMjU1LFZbQisrXT1rPj4+MTYmMjU1LFZbQisrXT1rPj4+MjQmMjU1LFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFk9'@;
put 'ODtZPHRoaXMucGFkTGVuZ3RoO1krKylWW0IrK109MDtyZXR1cm4gVn19LDIzNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5NzQ2KTtmdW5jdGlvbiBMKGssRSxqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBMKSlyZXR1cm4gbmV3IEwoayxFLGopO3RoaXMuSGFz'@;
put 'aD1rLHRoaXMuYmxvY2tTaXplPWsuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPWsub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdCh6LnRvQXJyYXkoRSxqKSl9TS5leHBvcnRzPUwsTC5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oayl7ay5sZW5n'@;
put 'dGg+dGhpcy5ibG9ja1NpemUmJihrPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoaykuZGlnZXN0KCkpLEsoay5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIEU9ay5sZW5ndGg7RTx0aGlzLmJsb2NrU2l6ZTtFKyspay5wdXNoKDApO2ZvcihFPTA7RTxrLmxlbmd0aDtFKyspa1tFXV49'@;
put 'NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShrKSxFPTA7RTxrLmxlbmd0aDtFKyspa1tFXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShrKX0sTC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7cmV0dXJuIHRoaXMuaW5uZXIudXBk'@;
put 'YXRlKGssRSksdGhpc30sTC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChrKX19LDI5NDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1Nzcy'@;
put 'KSxMPXoucm90bDMyLGs9ei5zdW0zMixFPXouc3VtMzJfMyxqPXouc3VtMzJfNCxWPUsuQmxvY2tIYXNoO2Z1bmN0aW9uIEIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEI7Vi5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIs'@;
put 'MjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIFkoc2UsaGUsdWUsY2Upe3JldHVybiBzZTw9MTU/aGVedWVeY2U6c2U8PTMxP2hlJnVlfH5oZSZjZTpzZTw9NDc/KGhlfH51ZSleY2U6c2U8PTYzP2hlJmNlfHVlJn5jZTpoZV4odWV8fmNlKX1mdW5j'@;
put 'dGlvbiBYKHNlKXtyZXR1cm4gc2U8PTE1PzA6c2U8PTMxPzE1MTg1MDAyNDk6c2U8PTQ3PzE4NTk3NzUzOTM6c2U8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBVKHNlKXtyZXR1cm4gc2U8PTE1PzEzNTI4Mjk5MjY6c2U8PTMxPzE1NDg2MDM2ODQ6c2U8PTQ3PzE4MzYwNzI2'@;
put 'OTE6c2U8PTYzPzIwNTM5OTQyMTc6MH16LmluaGVyaXRzKEIsViksTy5yaXBlbWQxNjA9QixCLmJsb2NrU2l6ZT01MTIsQi5vdXRTaXplPTE2MCxCLmhtYWNTdHJlbmd0aD0xOTIsQi5wYWRMZW5ndGg9NjQsQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihzZSxoZSl7Zm9yKHZhciB1ZT10'@;
put 'aGlzLmhbMF0sY2U9dGhpcy5oWzFdLEc9dGhpcy5oWzJdLGI9dGhpcy5oWzNdLEQ9dGhpcy5oWzRdLEg9dWUsTj1jZSxnPUcsQz1iLFM9RCx2PTA7djw4MDt2Kyspe3ZhciBwPWsoTChqKHVlLFkodixjZSxHLGIpLHNlW3Fbdl0raGVdLFgodikpLHRlW3ZdKSxEKTt1ZT1ELEQ9YixiPUwoRywx'@;
put 'MCksRz1jZSxjZT1wLHA9ayhMKGooSCxZKDc5LXYsTixnLEMpLHNlW2VlW3ZdK2hlXSxVKHYpKSxvZVt2XSksUyksSD1TLFM9QyxDPUwoZywxMCksZz1OLE49cH1wPUUodGhpcy5oWzFdLEcsQyksdGhpcy5oWzFdPUUodGhpcy5oWzJdLGIsUyksdGhpcy5oWzJdPUUodGhpcy5oWzNdLEQsSCks'@;
put 'dGhpcy5oWzNdPUUodGhpcy5oWzRdLHVlLE4pLHRoaXMuaFs0XT1FKHRoaXMuaFswXSxjZSxnKSx0aGlzLmhbMF09cH0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihzZSl7cmV0dXJuImhleCI9PT1zZT96LnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTp6LnNwbGl0MzIodGhpcy5oLCJs'@;
put 'aXR0bGUiKX07dmFyIHE9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2'@;
put 'LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sZWU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0'@;
put 'LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdGU9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3'@;
put 'LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLG9lPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3'@;
put 'LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sOTA0MTooTSxPLFIp'@;
put 'PT57InVzZSBzdHJpY3QiO08uc2hhMT1SKDQ3NjEpLE8uc2hhMjI0PVIoNzk5KSxPLnNoYTI1Nj1SKDkzNDQpLE8uc2hhMzg0PVIoNzcyKSxPLnNoYTUxMj1SKDU5MDApfSw0NzYxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTc3MiksTD1SKDcwMzgpLGs9ei5y'@;
put 'b3RsMzIsRT16LnN1bTMyLGo9ei5zdW0zMl81LFY9TC5mdF8xLEI9Sy5CbG9ja0hhc2gsWT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gWCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFgpKXJldHVybiBuZXcgWDtCLmNhbGwodGhpcyksdGhp'@;
put 'cy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9ei5pbmhlcml0cyhYLEIpLE0uZXhwb3J0cz1YLFguYmxvY2tTaXplPTUxMixYLm91dFNpemU9MTYwLFguaG1hY1N0cmVuZ3RoPTgwLFgucGFkTGVu'@;
put 'Z3RoPTY0LFgucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSxxKXtmb3IodmFyIGVlPXRoaXMuVyx0ZT0wO3RlPDE2O3RlKyspZWVbdGVdPVVbcSt0ZV07Zm9yKDt0ZTxlZS5sZW5ndGg7dGUrKyllZVt0ZV09ayhlZVt0ZS0zXV5lZVt0ZS04XV5lZVt0ZS0xNF1eZWVbdGUtMTZdLDEpO3Zh'@;
put 'ciBvZT10aGlzLmhbMF0sc2U9dGhpcy5oWzFdLGhlPXRoaXMuaFsyXSx1ZT10aGlzLmhbM10sY2U9dGhpcy5oWzRdO2Zvcih0ZT0wO3RlPGVlLmxlbmd0aDt0ZSsrKXt2YXIgRz1+fih0ZS8yMCksYj1qKGsob2UsNSksVihHLHNlLGhlLHVlKSxjZSxlZVt0ZV0sWVtHXSk7Y2U9dWUsdWU9aGUs'@;
put 'aGU9ayhzZSwzMCksc2U9b2Usb2U9Yn10aGlzLmhbMF09RSh0aGlzLmhbMF0sb2UpLHRoaXMuaFsxXT1FKHRoaXMuaFsxXSxzZSksdGhpcy5oWzJdPUUodGhpcy5oWzJdLGhlKSx0aGlzLmhbM109RSh0aGlzLmhbM10sdWUpLHRoaXMuaFs0XT1FKHRoaXMuaFs0XSxjZSl9LFgucHJvdG90eXBl'@;
put 'Ll9kaWdlc3Q9ZnVuY3Rpb24oVSl7cmV0dXJuImhleCI9PT1VP3oudG9IZXgzMih0aGlzLmgsImJpZyIpOnouc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoOTM0NCk7ZnVuY3Rpb24gTCgpe2lmKCEodGhpcyBpbnN0'@;
put 'YW5jZW9mIEwpKXJldHVybiBuZXcgTDtLLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX16LmluaGVyaXRzKEwsSyksTS5leHBvcnRzPUwsTC5ibG9j'@;
put 'a1NpemU9NTEyLEwub3V0U2l6ZT0yMjQsTC5obWFjU3RyZW5ndGg9MTkyLEwucGFkTGVuZ3RoPTY0LEwucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oayl7cmV0dXJuImhleCI9PT1rP3oudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaC5zbGljZSgw'@;
put 'LDcpLCJiaWciKX19LDkzNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxMPVIoNzAzOCksaz1SKDk3NDYpLEU9ei5zdW0zMixqPXouc3VtMzJfNCxWPXouc3VtMzJfNSxCPUwuY2gzMixZPUwubWFqMzIsWD1MLnMwXzI1NixVPUwuczFfMjU2LHE9TC5n'@;
put 'MF8yNTYsZWU9TC5nMV8yNTYsdGU9Sy5CbG9ja0hhc2gsb2U9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3'@;
put 'LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMy'@;
put 'MTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTcz'@;
put 'MDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwy'@;
put 'MjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gc2UoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzZSkpcmV0dXJuIG5ldyBzZTt0ZS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEw'@;
put 'MTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1vZSx0aGlzLlc9bmV3IEFycmF5KDY0KX16LmluaGVyaXRzKHNlLHRlKSxNLmV4cG9ydHM9c2Usc2UuYmxvY2tTaXplPTUxMixzZS5vdXRTaXplPTI1NixzZS5obWFj'@;
put 'U3RyZW5ndGg9MTkyLHNlLnBhZExlbmd0aD02NCxzZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihoZSx1ZSl7Zm9yKHZhciBjZT10aGlzLlcsRz0wO0c8MTY7RysrKWNlW0ddPWhlW3VlK0ddO2Zvcig7RzxjZS5sZW5ndGg7RysrKWNlW0ddPWooZWUoY2VbRy0yXSksY2VbRy03XSxxKGNl'@;
put 'W0ctMTVdKSxjZVtHLTE2XSk7dmFyIGI9dGhpcy5oWzBdLEQ9dGhpcy5oWzFdLEg9dGhpcy5oWzJdLE49dGhpcy5oWzNdLGc9dGhpcy5oWzRdLEM9dGhpcy5oWzVdLFM9dGhpcy5oWzZdLHY9dGhpcy5oWzddO2ZvcihrKHRoaXMuay5sZW5ndGg9PT1jZS5sZW5ndGgpLEc9MDtHPGNlLmxlbmd0'@;
put 'aDtHKyspe3ZhciBwPVYodixVKGcpLEIoZyxDLFMpLHRoaXMua1tHXSxjZVtHXSksdz1FKFgoYiksWShiLEQsSCkpO3Y9UyxTPUMsQz1nLGc9RShOLHApLE49SCxIPUQsRD1iLGI9RShwLHcpfXRoaXMuaFswXT1FKHRoaXMuaFswXSxiKSx0aGlzLmhbMV09RSh0aGlzLmhbMV0sRCksdGhpcy5o'@;
put 'WzJdPUUodGhpcy5oWzJdLEgpLHRoaXMuaFszXT1FKHRoaXMuaFszXSxOKSx0aGlzLmhbNF09RSh0aGlzLmhbNF0sZyksdGhpcy5oWzVdPUUodGhpcy5oWzVdLEMpLHRoaXMuaFs2XT1FKHRoaXMuaFs2XSxTKSx0aGlzLmhbN109RSh0aGlzLmhbN10sdil9LHNlLnByb3RvdHlwZS5fZGlnZXN0'@;
put 'PWZ1bmN0aW9uKGhlKXtyZXR1cm4iaGV4Ij09PWhlP3oudG9IZXgzMih0aGlzLmgsImJpZyIpOnouc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTkwMCk7ZnVuY3Rpb24gTCgpe2lmKCEodGhpcyBpbnN0YW5jZW9m'@;
put 'IEwpKXJldHVybiBuZXcgTDtLLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAy'@;
put 'NSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX16LmluaGVyaXRzKEwsSyksTS5leHBvcnRzPUwsTC5ibG9ja1NpemU9MTAyNCxMLm91dFNpemU9Mzg0LEwuaG1hY1N0cmVuZ3RoPTE5MixMLnBhZExlbmd0aD0xMjgsTC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j'@;
put 'dGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/ei50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw1OTAwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTc3MiksTD1SKDk3NDYpLGs9ei5y'@;
put 'b3RyNjRfaGksRT16LnJvdHI2NF9sbyxqPXouc2hyNjRfaGksVj16LnNocjY0X2xvLEI9ei5zdW02NCxZPXouc3VtNjRfaGksWD16LnN1bTY0X2xvLFU9ei5zdW02NF80X2hpLHE9ei5zdW02NF80X2xvLGVlPXouc3VtNjRfNV9oaSx0ZT16LnN1bTY0XzVfbG8sb2U9Sy5CbG9ja0hhc2gsc2U9'@;
put 'WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwz'@;
put 'NjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgy'@;
put 'MjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEz'@;
put 'MiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMs'@;
put 'Mzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3'@;
put 'MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcy'@;
put 'NTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4'@;
put 'MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2'@;
put 'NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEz'@;
put 'ODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQw'@;
put 'OTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBoZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGhlKSlyZXR1cm4gbmV3IGhlO29lLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODky'@;
put 'MzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9'@;
put 'c2UsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIHVlKHcsSixuZSxkZSxmZSl7dmFyIHhlPXcmbmVefncmZmU7cmV0dXJuIHhlPDAmJih4ZSs9NDI5NDk2NzI5NikseGV9ZnVuY3Rpb24gY2UodyxKLG5lLGRlLGZlLHhlKXt2YXIgSWU9SiZkZV5+SiZ4ZTtyZXR1cm4gSWU8MCYmKEll'@;
put 'Kz00Mjk0OTY3Mjk2KSxJZX1mdW5jdGlvbiBHKHcsSixuZSxkZSxmZSl7dmFyIHhlPXcmbmVedyZmZV5uZSZmZTtyZXR1cm4geGU8MCYmKHhlKz00Mjk0OTY3Mjk2KSx4ZX1mdW5jdGlvbiBiKHcsSixuZSxkZSxmZSx4ZSl7dmFyIEllPUomZGVeSiZ4ZV5kZSZ4ZTtyZXR1cm4gSWU8MCYmKEll'@;
put 'Kz00Mjk0OTY3Mjk2KSxJZX1mdW5jdGlvbiBEKHcsSil7dmFyIG5lPWsodyxKLDI4KV5rKEosdywyKV5rKEosdyw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBIKHcsSil7dmFyIG5lPUUodyxKLDI4KV5FKEosdywyKV5FKEosdyw3KTtyZXR1cm4gbmU8MCYm'@;
put 'KG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBOKHcsSil7dmFyIG5lPWsodyxKLDE0KV5rKHcsSiwxOCleayhKLHcsOSk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gZyh3LEope3ZhciBuZT1FKHcsSiwxNCleRSh3LEosMTgpXkUoSix3LDkpO3JldHVybiBu'@;
put 'ZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIEModyxKKXt2YXIgbmU9ayh3LEosMSleayh3LEosOCleaih3LEosNyk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gUyh3LEope3ZhciBuZT1FKHcsSiwxKV5FKHcsSiw4KV5WKHcsSiw3KTtyZXR1cm4g'@;
put 'bmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiB2KHcsSil7dmFyIG5lPWsodyxKLDE5KV5rKEosdywyOSleaih3LEosNik7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gcCh3LEope3ZhciBuZT1FKHcsSiwxOSleRShKLHcsMjkpXlYodyxKLDYpO3Jl'@;
put 'dHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfXouaW5oZXJpdHMoaGUsb2UpLE0uZXhwb3J0cz1oZSxoZS5ibG9ja1NpemU9MTAyNCxoZS5vdXRTaXplPTUxMixoZS5obWFjU3RyZW5ndGg9MTkyLGhlLnBhZExlbmd0aD0xMjgsaGUucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rp'@;
put 'b24odyxKKXtmb3IodmFyIG5lPXRoaXMuVyxkZT0wO2RlPDMyO2RlKyspbmVbZGVdPXdbSitkZV07Zm9yKDtkZTxuZS5sZW5ndGg7ZGUrPTIpe3ZhciBmZT12KG5lW2RlLTRdLG5lW2RlLTNdKSx4ZT1wKG5lW2RlLTRdLG5lW2RlLTNdKSxJZT1uZVtkZS0xNF0sRmU9bmVbZGUtMTNdLE9lPUMo'@;
put 'bmVbZGUtMzBdLG5lW2RlLTI5XSksamU9UyhuZVtkZS0zMF0sbmVbZGUtMjldKSxXZT1uZVtkZS0zMl0sS2U9bmVbZGUtMzFdO25lW2RlXT1VKGZlLHhlLEllLEZlLE9lLGplLFdlLEtlKSxuZVtkZSsxXT1xKGZlLHhlLEllLEZlLE9lLGplLFdlLEtlKX19LGhlLnByb3RvdHlwZS5fdXBkYXRl'@;
put 'PWZ1bmN0aW9uKHcsSil7dGhpcy5fcHJlcGFyZUJsb2NrKHcsSik7dmFyIG5lPXRoaXMuVyxkZT10aGlzLmhbMF0sZmU9dGhpcy5oWzFdLHhlPXRoaXMuaFsyXSxJZT10aGlzLmhbM10sRmU9dGhpcy5oWzRdLE9lPXRoaXMuaFs1XSxqZT10aGlzLmhbNl0sV2U9dGhpcy5oWzddLEtlPXRoaXMu'@;
put 'aFs4XSxZZT10aGlzLmhbOV0sUWU9dGhpcy5oWzEwXSxsdD10aGlzLmhbMTFdLFBlPXRoaXMuaFsxMl0sYmU9dGhpcy5oWzEzXSxBZT10aGlzLmhbMTRdLFRlPXRoaXMuaFsxNV07TCh0aGlzLmsubGVuZ3RoPT09bmUubGVuZ3RoKTtmb3IodmFyIHFlPTA7cWU8bmUubGVuZ3RoO3FlKz0yKXt2'@;
put 'YXIgWGU9QWUsVWU9VGUsaHQ9TihLZSxZZSksTWU9ZyhLZSxZZSksRGU9dWUoS2UsMCxRZSwwLFBlKSx6ZT1jZSgwLFllLDAsbHQsMCxiZSksb3Q9dGhpcy5rW3FlXSx1dD10aGlzLmtbcWUrMV0sTXQ9bmVbcWVdLEh0PW5lW3FlKzFdLFB0PWVlKFhlLFVlLGh0LE1lLERlLHplLG90LHV0LE10'@;
put 'LEh0KSxvbj10ZShYZSxVZSxodCxNZSxEZSx6ZSxvdCx1dCxNdCxIdCk7WGU9RChkZSxmZSksVWU9SChkZSxmZSksaHQ9RyhkZSwwLHhlLDAsRmUpLE1lPWIoMCxmZSwwLEllLDAsT2UpO3ZhciBDbj1ZKFhlLFVlLGh0LE1lKSxVdD1YKFhlLFVlLGh0LE1lKTtBZT1QZSxUZT1iZSxQZT1RZSxi'@;
put 'ZT1sdCxRZT1LZSxsdD1ZZSxLZT1ZKGplLFdlLFB0LG9uKSxZZT1YKFdlLFdlLFB0LG9uKSxqZT1GZSxXZT1PZSxGZT14ZSxPZT1JZSx4ZT1kZSxJZT1mZSxkZT1ZKFB0LG9uLENuLFV0KSxmZT1YKFB0LG9uLENuLFV0KX1CKHRoaXMuaCwwLGRlLGZlKSxCKHRoaXMuaCwyLHhlLEllKSxCKHRo'@;
put 'aXMuaCw0LEZlLE9lKSxCKHRoaXMuaCw2LGplLFdlKSxCKHRoaXMuaCw4LEtlLFllKSxCKHRoaXMuaCwxMCxRZSxsdCksQih0aGlzLmgsMTIsUGUsYmUpLEIodGhpcy5oLDE0LEFlLFRlKX0saGUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P3oudG9IZXgz'@;
put 'Mih0aGlzLmgsImJpZyIpOnouc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzAzODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNikucm90cjMyO2Z1bmN0aW9uIEsoRSxqLFYpe3JldHVybiBFJmpefkUmVn1mdW5jdGlvbiBMKEUsaixWKXtyZXR1cm4gRSZqXkUmVl5qJlZ9ZnVu'@;
put 'Y3Rpb24gayhFLGosVil7cmV0dXJuIEVeal5WfU8uZnRfMT1mdW5jdGlvbihFLGosVixCKXtyZXR1cm4gMD09PUU/SyhqLFYsQik6MT09PUV8fDM9PT1FP2soaixWLEIpOjI9PT1FP0woaixWLEIpOnZvaWQgMH0sTy5jaDMyPUssTy5tYWozMj1MLE8ucDMyPWssTy5zMF8yNTY9ZnVuY3Rpb24o'@;
put 'RSl7cmV0dXJuIHooRSwyKV56KEUsMTMpXnooRSwyMil9LE8uczFfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsNileeihFLDExKV56KEUsMjUpfSxPLmcwXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4geihFLDcpXnooRSwxOCleRT4+PjN9LE8uZzFfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6'@;
put 'KEUsMTcpXnooRSwxOSleRT4+PjEwfX0sNjQzNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpO2Z1bmN0aW9uIEwoVixCKXtyZXR1cm4gNTUyOTY9PSg2NDUxMiZWLmNoYXJDb2RlQXQoQikpJiYhKEI8MHx8QisxPj1WLmxlbmd0aCkmJjU2MzIwPT0oNjQ1'@;
put 'MTImVi5jaGFyQ29kZUF0KEIrMSkpfWZ1bmN0aW9uIGsoVil7cmV0dXJuKFY+Pj4yNHxWPj4+OCY2NTI4MHxWPDw4JjE2NzExNjgwfCgyNTUmVik8PDI0KT4+PjB9ZnVuY3Rpb24gRShWKXtyZXR1cm4gMT09PVYubGVuZ3RoPyIwIitWOlZ9ZnVuY3Rpb24gaihWKXtyZXR1cm4gNz09PVYubGVu'@;
put 'Z3RoPyIwIitWOjY9PT1WLmxlbmd0aD8iMDAiK1Y6NT09PVYubGVuZ3RoPyIwMDAiK1Y6ND09PVYubGVuZ3RoPyIwMDAwIitWOjM9PT1WLmxlbmd0aD8iMDAwMDAiK1Y6Mj09PVYubGVuZ3RoPyIwMDAwMDAiK1Y6MT09PVYubGVuZ3RoPyIwMDAwMDAwIitWOlZ9Ty5pbmhlcml0cz1LLE8udG9B'@;
put 'cnJheT1mdW5jdGlvbihWLEIpe2lmKEFycmF5LmlzQXJyYXkoVikpcmV0dXJuIFYuc2xpY2UoKTtpZighVilyZXR1cm5bXTt2YXIgWT1bXTtpZigic3RyaW5nIj09dHlwZW9mIFYpaWYoQil7aWYoImhleCI9PT1CKWZvcigoVj1WLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGgl'@;
put 'MiE9MCYmKFY9IjAiK1YpLFU9MDtVPFYubGVuZ3RoO1UrPTIpWS5wdXNoKHBhcnNlSW50KFZbVV0rVltVKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFg9MCxVPTA7VTxWLmxlbmd0aDtVKyspe3ZhciBxPVYuY2hhckNvZGVBdChVKTtxPDEyOD9ZW1grK109cTpxPDIwNDg/KFlbWCsrXT1xPj42fDE5'@;
put 'MixZW1grK109NjMmcXwxMjgpOkwoVixVKT8ocT02NTUzNisoKDEwMjMmcSk8PDEwKSsoMTAyMyZWLmNoYXJDb2RlQXQoKytVKSksWVtYKytdPXE+PjE4fDI0MCxZW1grK109cT4+MTImNjN8MTI4LFlbWCsrXT1xPj42JjYzfDEyOCxZW1grK109NjMmcXwxMjgpOihZW1grK109cT4+MTJ8MjI0'@;
put 'LFlbWCsrXT1xPj42JjYzfDEyOCxZW1grK109NjMmcXwxMjgpfWVsc2UgZm9yKFU9MDtVPFYubGVuZ3RoO1UrKylZW1VdPTB8VltVXTtyZXR1cm4gWX0sTy50b0hleD1mdW5jdGlvbihWKXtmb3IodmFyIEI9IiIsWT0wO1k8Vi5sZW5ndGg7WSsrKUIrPUUoVltZXS50b1N0cmluZygxNikpO3Jl'@;
put 'dHVybiBCfSxPLmh0b25sPWssTy50b0hleDMyPWZ1bmN0aW9uKFYsQil7Zm9yKHZhciBZPSIiLFg9MDtYPFYubGVuZ3RoO1grKyl7dmFyIFU9VltYXTsibGl0dGxlIj09PUImJihVPWsoVSkpLFkrPWooVS50b1N0cmluZygxNikpfXJldHVybiBZfSxPLnplcm8yPUUsTy56ZXJvOD1qLE8uam9p'@;
put 'bjMyPWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBVPVktQjt6KFUlND09MCk7Zm9yKHZhciBxPW5ldyBBcnJheShVLzQpLGVlPTAsdGU9QjtlZTxxLmxlbmd0aDtlZSsrLHRlKz00KXFbZWVdPSgiYmlnIj09PVg/Vlt0ZV08PDI0fFZbdGUrMV08PDE2fFZbdGUrMl08PDh8Vlt0ZSszXTpWW3RlKzNd'@;
put 'PDwyNHxWW3RlKzJdPDwxNnxWW3RlKzFdPDw4fFZbdGVdKT4+PjA7cmV0dXJuIHF9LE8uc3BsaXQzMj1mdW5jdGlvbihWLEIpe2Zvcih2YXIgWT1uZXcgQXJyYXkoNCpWLmxlbmd0aCksWD0wLFU9MDtYPFYubGVuZ3RoO1grKyxVKz00KXt2YXIgcT1WW1hdOyJiaWciPT09Qj8oWVtVXT1xPj4+'@;
put 'MjQsWVtVKzFdPXE+Pj4xNiYyNTUsWVtVKzJdPXE+Pj44JjI1NSxZW1UrM109MjU1JnEpOihZW1UrM109cT4+PjI0LFlbVSsyXT1xPj4+MTYmMjU1LFlbVSsxXT1xPj4+OCYyNTUsWVtVXT0yNTUmcSl9cmV0dXJuIFl9LE8ucm90cjMyPWZ1bmN0aW9uKFYsQil7cmV0dXJuIFY+Pj5CfFY8PDMy'@;
put 'LUJ9LE8ucm90bDMyPWZ1bmN0aW9uKFYsQil7cmV0dXJuIFY8PEJ8Vj4+PjMyLUJ9LE8uc3VtMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVitCPj4+MH0sTy5zdW0zMl8zPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gVitCK1k+Pj4wfSxPLnN1bTMyXzQ9ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJu'@;
put 'IFYrQitZK1g+Pj4wfSxPLnN1bTMyXzU9ZnVuY3Rpb24oVixCLFksWCxVKXtyZXR1cm4gVitCK1krWCtVPj4+MH0sTy5zdW02ND1mdW5jdGlvbihWLEIsWSxYKXt2YXIgcT1YK1ZbQisxXT4+PjA7VltCXT0ocTxYPzE6MCkrWStWW0JdPj4+MCxWW0IrMV09cX0sTy5zdW02NF9oaT1mdW5jdGlv'@;
put 'bihWLEIsWSxYKXtyZXR1cm4oQitYPj4+MDxCPzE6MCkrVitZPj4+MH0sTy5zdW02NF9sbz1mdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gQitYPj4+MH0sTy5zdW02NF80X2hpPWZ1bmN0aW9uKFYsQixZLFgsVSxxLGVlLHRlKXt2YXIgb2U9MCxzZT1CO3JldHVybiBvZSs9KHNlPXNlK1g+Pj4w'@;
put 'KTxCPzE6MCxvZSs9KHNlPXNlK3E+Pj4wKTxxPzE6MCxWK1krVStlZSsob2UrPShzZT1zZSt0ZT4+PjApPHRlPzE6MCk+Pj4wfSxPLnN1bTY0XzRfbG89ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUpe3JldHVybiBCK1grcSt0ZT4+PjB9LE8uc3VtNjRfNV9oaT1mdW5jdGlvbihWLEIsWSxY'@;
put 'LFUscSxlZSx0ZSxvZSxzZSl7dmFyIGhlPTAsdWU9QjtyZXR1cm4gaGUrPSh1ZT11ZStYPj4+MCk8Qj8xOjAsaGUrPSh1ZT11ZStxPj4+MCk8cT8xOjAsaGUrPSh1ZT11ZSt0ZT4+PjApPHRlPzE6MCxWK1krVStlZStvZSsoaGUrPSh1ZT11ZStzZT4+PjApPHNlPzE6MCk+Pj4wfSxPLnN1bTY0'@;
put 'XzVfbG89ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUsb2Usc2Upe3JldHVybiBCK1grcSt0ZStzZT4+PjB9LE8ucm90cjY0X2hpPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oQjw8MzItWXxWPj4+WSk+Pj4wfSxPLnJvdHI2NF9sbz1mdW5jdGlvbihWLEIsWSl7cmV0dXJuKFY8PDMyLVl8Qj4+'@;
put 'PlkpPj4+MH0sTy5zaHI2NF9oaT1mdW5jdGlvbihWLEIsWSl7cmV0dXJuIFY+Pj5ZfSxPLnNocjY0X2xvPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oVjw8MzItWXxCPj4+WSk+Pj4wfX0sMjE1NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzcxNSksSz1SKDQ1MDQpLEw9Uig5NzQ2'@;
put 'KTtmdW5jdGlvbiBrKEUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGspKXJldHVybiBuZXcgayhFKTt0aGlzLmhhc2g9RS5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIUUucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9RS5taW5FbnRyb3B5fHx0'@;
put 'aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgaj1LLnRvQXJyYXkoRS5lbnRyb3B5LEUuZW50cm9weUVuY3x8ImhleCIpLFY9Sy50b0FycmF5KEUubm9uY2UsRS5ub25jZUVu'@;
put 'Y3x8ImhleCIpLEI9Sy50b0FycmF5KEUucGVycyxFLnBlcnNFbmN8fCJoZXgiKTtMKGoubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KGosVixCKX1NLmV4cG9ydHM9'@;
put 'ayxrLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihFLGosVil7dmFyIEI9RS5jb25jYXQoaikuY29uY2F0KFYpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIFk9MDtZPHRoaXMuVi5sZW5ndGg7WSsrKXRoaXMu'@;
put 'S1tZXT0wLHRoaXMuVltZXT0xO3RoaXMuX3VwZGF0ZShCKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0say5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHouaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0say5wcm90b3R5cGUu'@;
put 'X3VwZGF0ZT1mdW5jdGlvbihFKXt2YXIgaj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7RSYmKGo9ai51cGRhdGUoRSkpLHRoaXMuSz1qLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksRSYmKHRoaXMuSz10aGlzLl9o'@;
put 'bWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKEUpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxrLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oRSxqLFYsQil7InN0cmluZyIhPXR5cGVvZiBqJiYoQj1WLFY9aixq'@;
put 'PW51bGwpLEU9Sy50b0FycmF5KEUsaiksVj1LLnRvQXJyYXkoVixCKSxMKEUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoRS5jb25jYXQoVnx8W10pKSx0aGlz'@;
put 'Ll9yZXNlZWQ9MX0say5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oRSxqLFYsQil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIGomJihCPVYsVj1qLGo9bnVsbCksViYm'@;
put 'KFY9Sy50b0FycmF5KFYsQnx8ImhleCIpLHRoaXMuX3VwZGF0ZShWKSk7Zm9yKHZhciBZPVtdO1kubGVuZ3RoPEU7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksWT1ZLmNvbmNhdCh0aGlzLlYpO3ZhciBYPVkuc2xpY2UoMCxFKTtyZXR1cm4gdGhpcy5fdXBk'@;
put 'YXRlKFYpLHRoaXMuX3Jlc2VlZCsrLEsuZW5jb2RlKFgsail9fSw2NDU6KE0sTyk9PntPLnJlYWQ9ZnVuY3Rpb24oUix6LEssTCxrKXt2YXIgRSxqLFY9OCprLUwtMSxCPSgxPDxWKS0xLFk9Qj4+MSxYPS03LFU9Sz9rLTE6MCxxPUs/LTE6MSxlZT1SW3orVV07Zm9yKFUrPXEsRT1lZSYoMTw8'@;
put 'LVgpLTEsZWU+Pj0tWCxYKz1WO1g+MDtFPTI1NipFK1JbeitVXSxVKz1xLFgtPTgpO2ZvcihqPUUmKDE8PC1YKS0xLEU+Pj0tWCxYKz1MO1g+MDtqPTI1NipqK1JbeitVXSxVKz1xLFgtPTgpO2lmKDA9PT1FKUU9MS1ZO2Vsc2V7aWYoRT09PUIpcmV0dXJuIGo/TmFOOjEvMCooZWU/LTE6MSk7'@;
put 'ais9TWF0aC5wb3coMixMKSxFLT1ZfXJldHVybihlZT8tMToxKSpqKk1hdGgucG93KDIsRS1MKX0sTy53cml0ZT1mdW5jdGlvbihSLHosSyxMLGssRSl7dmFyIGosVixCLFk9OCpFLWstMSxYPSgxPDxZKS0xLFU9WD4+MSxxPTIzPT09az9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcp'@;
put 'OjAsZWU9TD8wOkUtMSx0ZT1MPzE6LTEsb2U9ejwwfHwwPT09eiYmMS96PDA/MTowO2Zvcih6PU1hdGguYWJzKHopLGlzTmFOKHopfHx6PT09MS8wPyhWPWlzTmFOKHopPzE6MCxqPVgpOihqPU1hdGguZmxvb3IoTWF0aC5sb2coeikvTWF0aC5MTjIpLHoqKEI9TWF0aC5wb3coMiwtaikpPDEm'@;
put 'JihqLS0sQio9MiksKHorPWorVT49MT9xL0I6cSpNYXRoLnBvdygyLDEtVSkpKkI+PTImJihqKyssQi89MiksaitVPj1YPyhWPTAsaj1YKTpqK1U+PTE/KFY9KHoqQi0xKSpNYXRoLnBvdygyLGspLGorPVUpOihWPXoqTWF0aC5wb3coMixVLTEpKk1hdGgucG93KDIsayksaj0wKSk7az49ODtS'@;
put 'W0srZWVdPTI1NSZWLGVlKz10ZSxWLz0yNTYsay09OCk7Zm9yKGo9ajw8a3xWLFkrPWs7WT4wO1JbSytlZV09MjU1JmosZWUrPXRlLGovPTI1NixZLT04KTtSW0srZWUtdGVdfD0xMjgqb2V9fSw3ODQ0OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigyNDc5KSxMPU9iamVjdC5jcmVhdGUo'@;
put 'bnVsbCksaz1SKDc3OCk7TS5leHBvcnRzPUsoZnVuY3Rpb24oRSxqKXtyZXR1cm4gTFtFXT8oTFtFXS5wdXNoKGopLG51bGwpOihMW0VdPVtqXSxWPUUsayhmdW5jdGlvbiBCKCl7dmFyIFk9TFtWXSxYPVkubGVuZ3RoLFU9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGU9ZWUubGVuZ3RoLG9lPVtd'@;
put 'LHNlPTA7c2U8dGU7c2UrKylvZVtzZV09ZWVbc2VdO3JldHVybiBvZX0oYXJndW1lbnRzKTt0cnl7Zm9yKHZhciBxPTA7cTxYO3ErKylZW3FdLmFwcGx5KG51bGwsVSl9ZmluYWxseXtZLmxlbmd0aD5YPyhZLnNwbGljZSgwLFgpLHoubmV4dFRpY2soZnVuY3Rpb24oKXtCLmFwcGx5KG51bGws'@;
put 'VSl9KSk6ZGVsZXRlIExbVl19fSkpO3ZhciBWfSl9LDU3MTc6TT0+e00uZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihPLFIpe1ImJihPLnN1cGVyXz1SLE8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2'@;
put 'YWx1ZTpPLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oTyxSKXtpZihSKXtPLnN1cGVyXz1SO3ZhciB6PWZ1bmN0aW9uKCl7fTt6LnByb3RvdHlwZT1SLnByb3RvdHlwZSxPLnByb3RvdHlwZT1uZXcgeixPLnByb3RvdHlwZS5jb25zdHJ1'@;
put 'Y3Rvcj1PfX19LDI1ODQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MTApKCksSz1SKDE5MjQpKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksTD1mdW5jdGlvbihqKXtyZXR1cm4hKHomJmomJiJvYmplY3QiPT10eXBlb2YgaiYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIGop'@;
put 'JiYiW29iamVjdCBBcmd1bWVudHNdIj09PUsoail9LGs9ZnVuY3Rpb24oail7cmV0dXJuISFMKGopfHxudWxsIT09aiYmIm9iamVjdCI9PXR5cGVvZiBqJiYibnVtYmVyIj09dHlwZW9mIGoubGVuZ3RoJiZqLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIiE9PUsoaikmJiJbb2JqZWN0IEZ1'@;
put 'bmN0aW9uXSI9PT1LKGouY2FsbGVlKX0sRT1mdW5jdGlvbigpe3JldHVybiBMKGFyZ3VtZW50cyl9KCk7TC5pc0xlZ2FjeUFyZ3VtZW50cz1rLE0uZXhwb3J0cz1FP0w6a30sNTMyMDpNPT57InVzZSBzdHJpY3QiO3ZhciBPLFIsej1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsSz0ib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIFJlZmxlY3QmJm51bGwhPT1SZWZsZWN0JiZSZWZsZWN0LmFwcGx5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBLJiYiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibGVuZ3RoIix7Z2V0OmZ1'@;
put 'bmN0aW9uKCl7dGhyb3cgUn19KSxSPXt9LEsoZnVuY3Rpb24oKXt0aHJvdyA0Mn0sbnVsbCxPKX1jYXRjaChVKXtVIT09UiYmKEs9bnVsbCl9ZWxzZSBLPW51bGw7dmFyIEw9L15ccypjbGFzc1xiLyxrPWZ1bmN0aW9uKFUpe3RyeXt2YXIgcT16LmNhbGwoVSk7cmV0dXJuIEwudGVzdChxKX1j'@;
put 'YXRjaHtyZXR1cm4hMX19LEU9ZnVuY3Rpb24oVSl7dHJ5e3JldHVybiFrKFUpJiYoei5jYWxsKFUpLCEwKX1jYXRjaHtyZXR1cm4hMX19LGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxWPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLEI9ISgwIGlu'@;
put 'WyxdKSxZPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBYPWRvY3VtZW50LmFsbDtqLmNhbGwoWCk9PT1qLmNhbGwoZG9jdW1lbnQuYWxsKSYmKFk9ZnVuY3Rpb24oVSl7aWYoKEJ8fCFVKSYmKHZvaWQgMD09PVV8fCJvYmplY3QiPT10eXBl'@;
put 'b2YgVSkpdHJ5e3ZhciBxPWouY2FsbChVKTtyZXR1cm4oIltvYmplY3QgSFRNTEFsbENvbGxlY3Rpb25dIj09PXF8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1xfHwiW29iamVjdCBIVE1MQ29sbGVjdGlvbl0iPT09cXx8IltvYmplY3QgT2JqZWN0XSI9PT1xKSYmbnVs'@;
put 'bD09VSgiIil9Y2F0Y2h7fXJldHVybiExfSl9TS5leHBvcnRzPUs/ZnVuY3Rpb24oVSl7aWYoWShVKSlyZXR1cm4hMDtpZighVXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTt0cnl7SyhVLG51bGwsTyl9Y2F0Y2gocSl7aWYocSE9PVIpcmV0dXJu'@;
put 'ITF9cmV0dXJuIWsoVSkmJkUoVSl9OmZ1bmN0aW9uKFUpe2lmKFkoVSkpcmV0dXJuITA7aWYoIVV8fCJmdW5jdGlvbiIhPXR5cGVvZiBVJiYib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuITE7aWYoVilyZXR1cm4gRShVKTtpZihrKFUpKXJldHVybiExO3ZhciBxPWouY2FsbChVKTtyZXR1cm4h'@;
put 'KCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1xJiYiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09cSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChxKSkmJkUoVSl9fSw4NjYyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEw9RnVuY3Rp'@;
put 'b24ucHJvdG90eXBlLnRvU3RyaW5nLGs9L15ccyooPzpmdW5jdGlvbik/XCovLEU9Uig2NDEwKSgpLGo9T2JqZWN0LmdldFByb3RvdHlwZU9mO00uZXhwb3J0cz1mdW5jdGlvbihWKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVilyZXR1cm4hMTtpZihrLnRlc3QoTC5jYWxsKFYpKSlyZXR1cm4h'@;
put 'MDtpZighRSlyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT09Sy5jYWxsKFYpO2lmKCFqKXJldHVybiExO2lmKHZvaWQgMD09PXope3ZhciBCPWZ1bmN0aW9uKCl7aWYoIUUpcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0aW9uKigpIHt9IikoKX1j'@;
put 'YXRjaHt9fSgpO3o9ISFCJiZqKEIpfXJldHVybiBqKFYpPT09en19LDg2MTE6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE8hPU99fSwzNjA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU1NTkpLEs9Uig0Mjg5KSxMPVIoODYxMSksaz1SKDk0'@;
put 'MTUpLEU9UigzMTk0KSxqPXooaygpLE51bWJlcik7SyhqLHtnZXRQb2x5ZmlsbDprLGltcGxlbWVudGF0aW9uOkwsc2hpbTpFfSksTS5leHBvcnRzPWp9LDk0MTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg2MTEpO00uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIu'@;
put 'aXNOYU4mJk51bWJlci5pc05hTihOYU4pJiYhTnVtYmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFOOnp9fSwzMTk0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0Mjg5KSxLPVIoOTQxNSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEw9SygpO3JldHVybiB6KE51bWJlcix7aXNO'@;
put 'YU46TH0se2lzTmFOOmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiE9PUx9fSksTH19LDU2OTI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQwMjkpLEs9UigzMDgzKSxMPVIoMTkyNCksaz1MKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksRT1SKDY0MTApKCksaj1S'@;
put 'KDcyOTYpLFY9dHlwZW9mIGdsb2JhbFRoaXM+InUiP1IuZzpnbG9iYWxUaGlzLEI9SygpLFk9TCgiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsdGUpe2Zvcih2YXIgb2U9MDtvZTxlZS5sZW5ndGg7b2UrPTEpaWYoZWVbb2VdPT09dGUpcmV0dXJuIG9lO3JldHVy'@;
put 'bi0xfSxYPUwoIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxVPXt9LHE9T2JqZWN0LmdldFByb3RvdHlwZU9mO0UmJmomJnEmJnooQixmdW5jdGlvbihlZSl7dmFyIHRlPW5ldyBWW2VlXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gdGUpe3ZhciBvZT1xKHRlKSxzZT1qKG9lLFN5bWJvbC50'@;
put 'b1N0cmluZ1RhZyk7aWYoIXNlKXt2YXIgaGU9cShvZSk7c2U9aihoZSxTeW1ib2wudG9TdHJpbmdUYWcpfVVbZWVdPXNlLmdldH19KSxNLmV4cG9ydHM9ZnVuY3Rpb24oZWUpe2lmKCFlZXx8Im9iamVjdCIhPXR5cGVvZiBlZSlyZXR1cm4hMTtpZighRXx8IShTeW1ib2wudG9TdHJpbmdUYWcg'@;
put 'aW4gZWUpKXt2YXIgdGU9WChrKGVlKSw4LC0xKTtyZXR1cm4gWShCLHRlKT4tMX1yZXR1cm4hIWomJihvZT1lZSxzZT0hMSx6KFUsZnVuY3Rpb24oaGUsdWUpe2lmKCFzZSl0cnl7c2U9aGUuY2FsbChvZSk9PT11ZX1jYXRjaHt9fSksc2UpO3ZhciBvZSxzZX19LDY4MTM6KE0sTyxSKT0+e2xl'@;
put 'dCB6O3RyeXt6PVIoNzcpfWNhdGNoe3o9Uig0MTI5KX1jb25zdCBLPVIoODk4MSkse3N0cmluZ2lmeTpMLHN0cmlwQm9tOmt9PVIoNjc4MCksRT17cmVhZEZpbGU6Sy5mcm9tUHJvbWlzZShmdW5jdGlvbigpe3ZhciBqPWFlKGZ1bmN0aW9uKihWLEI9e30peyJzdHJpbmciPT10eXBlb2YgQiYm'@;
put 'KEI9e2VuY29kaW5nOkJ9KTtjb25zdCBZPUIuZnN8fHosWD0hKCJ0aHJvd3MiaW4gQil8fEIudGhyb3dzO2xldCBVLHE9eWllbGQgSy5mcm9tQ2FsbGJhY2soWS5yZWFkRmlsZSkoVixCKTtxPWsocSk7dHJ5e1U9SlNPTi5wYXJzZShxLEI/Qi5yZXZpdmVyOm51bGwpfWNhdGNoKGVlKXtpZihY'@;
put 'KXRocm93IGVlLm1lc3NhZ2U9YCR7Vn06ICR7ZWUubWVzc2FnZX1gLGVlO3JldHVybiBudWxsfXJldHVybiBVfSk7cmV0dXJuIGZ1bmN0aW9uKFYpe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHJlYWRGaWxlU3luYzpmdW5jdGlvbihqLFY9e30peyJzdHJpbmciPT10eXBl'@;
put 'b2YgViYmKFY9e2VuY29kaW5nOlZ9KTtjb25zdCBCPVYuZnN8fHosWT0hKCJ0aHJvd3MiaW4gVil8fFYudGhyb3dzO3RyeXtsZXQgWD1CLnJlYWRGaWxlU3luYyhqLFYpO3JldHVybiBYPWsoWCksSlNPTi5wYXJzZShYLFYucmV2aXZlcil9Y2F0Y2goWCl7aWYoWSl0aHJvdyBYLm1lc3NhZ2U9'@;
put 'YCR7an06ICR7WC5tZXNzYWdlfWAsWDtyZXR1cm4gbnVsbH19LHdyaXRlRmlsZTpLLmZyb21Qcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGo9YWUoZnVuY3Rpb24qKFYsQixZPXt9KXtjb25zdCBYPVkuZnN8fHosVT1MKEIsWSk7eWllbGQgSy5mcm9tQ2FsbGJhY2soWC53cml0ZUZpbGUpKFYsVSxZ'@;
put 'KX0pO3JldHVybiBmdW5jdGlvbihWLEIpe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHdyaXRlRmlsZVN5bmM6ZnVuY3Rpb24oaixWLEI9e30pe2NvbnN0IFk9Qi5mc3x8eixYPUwoVixCKTtyZXR1cm4gWS53cml0ZUZpbGVTeW5jKGosWCxCKX19O00uZXhwb3J0cz1FfSw2'@;
put 'NzgwOihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtNLmV4cG9ydHM9e3N0cmluZ2lmeTpmdW5jdGlvbihLLHtFT0w6TD0iXG4iLGZpbmFsRU9MOms9ITAscmVwbGFjZXI6RT1udWxsLHNwYWNlczpqfT17fSl7Y29uc3QgVj1rP0w6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEssRSxq'@;
put 'KS5yZXBsYWNlKC9cbi9nLEwpK1Z9LHN0cmlwQm9tOmZ1bmN0aW9uKEspe3JldHVybiB6LmlzQnVmZmVyKEspJiYoSz1LLnRvU3RyaW5nKCJ1dGY4IikpLEsucmVwbGFjZSgvXlx1RkVGRi8sIiIpfX19LDYyNDU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KGope3RoaXMubWVz'@;
put 'c2FnZT1qfVIucihPKSxSLmQoTyx7SW52YWxpZFRva2VuRXJyb3I6KCk9PmssZGVmYXVsdDooKT0+RX0pLCh6LnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIEs9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5i'@;
put 'aW5kKHdpbmRvdyl8fGZ1bmN0aW9uKGope3ZhciBWPVN0cmluZyhqKS5yZXBsYWNlKC89KyQvLCIiKTtpZihWLmxlbmd0aCU0PT0xKXRocm93IG5ldyB6KCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIg'@;
put 'QixZLFg9MCxVPTAscT0iIjtZPVYuY2hhckF0KFUrKyk7flkmJihCPVglND82NCpCK1k6WSxYKyslNCk/cSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmQj4+KC0yKlgmNikpOjApWT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3'@;
put 'ODkrLz0iLmluZGV4T2YoWSk7cmV0dXJuIHF9O2Z1bmN0aW9uIGsoail7dGhpcy5tZXNzYWdlPWp9KGsucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IEU9ZnVuY3Rpb24oaixWKXtpZigic3RyaW5nIiE9dHlwZW9mIGopdGhyb3cgbmV3IGsoIklu'@;
put 'dmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIEI9ITA9PT0oVj1WfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gTChqKXt2YXIgVj1qLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpO3N3aXRjaChWLmxlbmd0aCU0KXtjYXNlIDA6YnJl'@;
put 'YWs7Y2FzZSAyOlYrPSI9PSI7YnJlYWs7Y2FzZSAzOlYrPSI9IjticmVhaztkZWZhdWx0OnRocm93IklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEifXRyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KEsoVikucmVwbGFjZSgvKC4pL2csZnVuY3Rpb24oWSxYKXt2YXIgVT1YLmNoYXJDb2Rl'@;
put 'QXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIFUubGVuZ3RoPDImJihVPSIwIitVKSwiJSIrVX0pKX1jYXRjaHtyZXR1cm4gSyhWKX19KGouc3BsaXQoIi4iKVtCXSkpfWNhdGNoKFkpe3Rocm93IG5ldyBrKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIitZLm1lc3Nh'@;
put 'Z2UpfX19LDIzMTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9UigzMzQ5KSxMPVIoOTUwOSkuQnVmZmVyLGs9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiBFKCl7Sy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5f'@;
put 'Yz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIGooVSxxKXtyZXR1cm4gVTw8cXxVPj4+MzItcX1mdW5jdGlvbiBWKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsocSZlZXx+cSZ0ZSkrb2Urc2V8MCxoZSkrcXwwfWZ1bmN0aW9uIEIoVSxxLGVlLHRlLG9lLHNl'@;
put 'LGhlKXtyZXR1cm4gaihVKyhxJnRlfGVlJn50ZSkrb2Urc2V8MCxoZSkrcXwwfWZ1bmN0aW9uIFkoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhxXmVlXnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gWChVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKGVlXihxfH50'@;
put 'ZSkpK29lK3NlfDAsaGUpK3F8MH16KEUsSyksRS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgVT1rLHE9MDtxPDE2OysrcSlVW3FdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqcSk7dmFyIGVlPXRoaXMuX2EsdGU9dGhpcy5fYixvZT10aGlzLl9jLHNlPXRoaXMuX2Q7'@;
put 'ZWU9VihlZSx0ZSxvZSxzZSxVWzBdLDM2MTQwOTAzNjAsNyksc2U9VihzZSxlZSx0ZSxvZSxVWzFdLDM5MDU0MDI3MTAsMTIpLG9lPVYob2Usc2UsZWUsdGUsVVsyXSw2MDYxMDU4MTksMTcpLHRlPVYodGUsb2Usc2UsZWUsVVszXSwzMjUwNDQxOTY2LDIyKSxlZT1WKGVlLHRlLG9lLHNlLFVb'@;
put 'NF0sNDExODU0ODM5OSw3KSxzZT1WKHNlLGVlLHRlLG9lLFVbNV0sMTIwMDA4MDQyNiwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzZdLDI4MjE3MzU5NTUsMTcpLHRlPVYodGUsb2Usc2UsZWUsVVs3XSw0MjQ5MjYxMzEzLDIyKSxlZT1WKGVlLHRlLG9lLHNlLFVbOF0sMTc3MDAzNTQxNiw3KSxz'@;
put 'ZT1WKHNlLGVlLHRlLG9lLFVbOV0sMjMzNjU1Mjg3OSwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzEwXSw0Mjk0OTI1MjMzLDE3KSx0ZT1WKHRlLG9lLHNlLGVlLFVbMTFdLDIzMDQ1NjMxMzQsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVsxMl0sMTgwNDYwMzY4Miw3KSxzZT1WKHNlLGVlLHRlLG9l'@;
put 'LFVbMTNdLDQyNTQ2MjYxOTUsMTIpLG9lPVYob2Usc2UsZWUsdGUsVVsxNF0sMjc5Mjk2NTAwNiwxNyksZWU9QihlZSx0ZT1WKHRlLG9lLHNlLGVlLFVbMTVdLDEyMzY1MzUzMjksMjIpLG9lLHNlLFVbMV0sNDEyOTE3MDc4Niw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbNl0sMzIyNTQ2NTY2NCw5'@;
put 'KSxvZT1CKG9lLHNlLGVlLHRlLFVbMTFdLDY0MzcxNzcxMywxNCksdGU9Qih0ZSxvZSxzZSxlZSxVWzBdLDM5MjEwNjk5OTQsMjApLGVlPUIoZWUsdGUsb2Usc2UsVVs1XSwzNTkzNDA4NjA1LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVsxMF0sMzgwMTYwODMsOSksb2U9QihvZSxzZSxlZSx0ZSxV'@;
put 'WzE1XSwzNjM0NDg4OTYxLDE0KSx0ZT1CKHRlLG9lLHNlLGVlLFVbNF0sMzg4OTQyOTQ0OCwyMCksZWU9QihlZSx0ZSxvZSxzZSxVWzldLDU2ODQ0NjQzOCw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbMTRdLDMyNzUxNjM2MDYsOSksb2U9QihvZSxzZSxlZSx0ZSxVWzNdLDQxMDc2MDMzMzUsMTQp'@;
put 'LHRlPUIodGUsb2Usc2UsZWUsVVs4XSwxMTYzNTMxNTAxLDIwKSxlZT1CKGVlLHRlLG9lLHNlLFVbMTNdLDI4NTAyODU4MjksNSksc2U9QihzZSxlZSx0ZSxvZSxVWzJdLDQyNDM1NjM1MTIsOSksb2U9QihvZSxzZSxlZSx0ZSxVWzddLDE3MzUzMjg0NzMsMTQpLGVlPVkoZWUsdGU9Qih0ZSxv'@;
put 'ZSxzZSxlZSxVWzEyXSwyMzY4MzU5NTYyLDIwKSxvZSxzZSxVWzVdLDQyOTQ1ODg3MzgsNCksc2U9WShzZSxlZSx0ZSxvZSxVWzhdLDIyNzIzOTI4MzMsMTEpLG9lPVkob2Usc2UsZWUsdGUsVVsxMV0sMTgzOTAzMDU2MiwxNiksdGU9WSh0ZSxvZSxzZSxlZSxVWzE0XSw0MjU5NjU3NzQwLDIz'@;
put 'KSxlZT1ZKGVlLHRlLG9lLHNlLFVbMV0sMjc2Mzk3NTIzNiw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbNF0sMTI3Mjg5MzM1MywxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzddLDQxMzk0Njk2NjQsMTYpLHRlPVkodGUsb2Usc2UsZWUsVVsxMF0sMzIwMDIzNjY1NiwyMyksZWU9WShlZSx0ZSxvZSxz'@;
put 'ZSxVWzEzXSw2ODEyNzkxNzQsNCksc2U9WShzZSxlZSx0ZSxvZSxVWzBdLDM5MzY0MzAwNzQsMTEpLG9lPVkob2Usc2UsZWUsdGUsVVszXSwzNTcyNDQ1MzE3LDE2KSx0ZT1ZKHRlLG9lLHNlLGVlLFVbNl0sNzYwMjkxODksMjMpLGVlPVkoZWUsdGUsb2Usc2UsVVs5XSwzNjU0NjAyODA5LDQp'@;
put 'LHNlPVkoc2UsZWUsdGUsb2UsVVsxMl0sMzg3MzE1MTQ2MSwxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzE1XSw1MzA3NDI1MjAsMTYpLGVlPVgoZWUsdGU9WSh0ZSxvZSxzZSxlZSxVWzJdLDMyOTk2Mjg2NDUsMjMpLG9lLHNlLFVbMF0sNDA5NjMzNjQ1Miw2KSxzZT1YKHNlLGVlLHRlLG9lLFVb'@;
put 'N10sMTEyNjg5MTQxNSwxMCksb2U9WChvZSxzZSxlZSx0ZSxVWzE0XSwyODc4NjEyMzkxLDE1KSx0ZT1YKHRlLG9lLHNlLGVlLFVbNV0sNDIzNzUzMzI0MSwyMSksZWU9WChlZSx0ZSxvZSxzZSxVWzEyXSwxNzAwNDg1NTcxLDYpLHNlPVgoc2UsZWUsdGUsb2UsVVszXSwyMzk5OTgwNjkwLDEw'@;
put 'KSxvZT1YKG9lLHNlLGVlLHRlLFVbMTBdLDQyOTM5MTU3NzMsMTUpLHRlPVgodGUsb2Usc2UsZWUsVVsxXSwyMjQwMDQ0NDk3LDIxKSxlZT1YKGVlLHRlLG9lLHNlLFVbOF0sMTg3MzMxMzM1OSw2KSxzZT1YKHNlLGVlLHRlLG9lLFVbMTVdLDQyNjQzNTU1NTIsMTApLG9lPVgob2Usc2UsZWUs'@;
put 'dGUsVVs2XSwyNzM0NzY4OTE2LDE1KSx0ZT1YKHRlLG9lLHNlLGVlLFVbMTNdLDEzMDkxNTE2NDksMjEpLGVlPVgoZWUsdGUsb2Usc2UsVVs0XSw0MTQ5NDQ0MjI2LDYpLHNlPVgoc2UsZWUsdGUsb2UsVVsxMV0sMzE3NDc1NjkxNywxMCksb2U9WChvZSxzZSxlZSx0ZSxVWzJdLDcxODc4NzI1'@;
put 'OSwxNSksdGU9WCh0ZSxvZSxzZSxlZSxVWzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStlZXwwLHRoaXMuX2I9dGhpcy5fYit0ZXwwLHRoaXMuX2M9dGhpcy5fYytvZXwwLHRoaXMuX2Q9dGhpcy5fZCtzZXwwfSxFLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5f'@;
put 'YmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZz'@;
put 'ZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIFU9TC5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFUud3JpdGVJbnQzMkxFKHRoaXMu'@;
put 'X2EsMCksVS53cml0ZUludDMyTEUodGhpcy5fYiw0KSxVLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLFUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLFV9LE0uZXhwb3J0cz1FfSwzMDQ3OihNLE8sUik9Pnt2YXIgej1SKDYyNDApLEs9Uig5OTMxKTtmdW5jdGlvbiBMKGspe3RoaXMucmFuZD1r'@;
put 'fHxuZXcgSy5SYW5kfU0uZXhwb3J0cz1MLEwuY3JlYXRlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgTChrKX0sTC5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbihrKXt2YXIgRT1rLmJpdExlbmd0aCgpLGo9TWF0aC5jZWlsKEUvOCk7ZG97dmFyIFY9bmV3IHoodGhpcy5yYW5kLmdlbmVy'@;
put 'YXRlKGopKX13aGlsZShWLmNtcChrKT49MCk7cmV0dXJuIFZ9LEwucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24oayxFKXt2YXIgaj1FLnN1YihrKTtyZXR1cm4gay5hZGQodGhpcy5fcmFuZGJlbG93KGopKX0sTC5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihrLEUsail7dmFyIFY9ay5i'@;
put 'aXRMZW5ndGgoKSxCPXoubW9udChrKSxZPW5ldyB6KDEpLnRvUmVkKEIpO0V8fChFPU1hdGgubWF4KDEsVi80OHwwKSk7Zm9yKHZhciBYPWsuc3VibigxKSxVPTA7IVgudGVzdG4oVSk7VSsrKTtmb3IodmFyIHE9ay5zaHJuKFUpLGVlPVgudG9SZWQoQik7RT4wO0UtLSl7dmFyIHRlPXRoaXMu'@;
put 'X3JhbmRyYW5nZShuZXcgeigyKSxYKTtqJiZqKHRlKTt2YXIgb2U9dGUudG9SZWQoQikucmVkUG93KHEpO2lmKDAhPT1vZS5jbXAoWSkmJjAhPT1vZS5jbXAoZWUpKXtmb3IodmFyIHNlPTE7c2U8VTtzZSsrKXtpZigwPT09KG9lPW9lLnJlZFNxcigpKS5jbXAoWSkpcmV0dXJuITE7aWYoMD09'@;
put 'PW9lLmNtcChlZSkpYnJlYWt9aWYoc2U9PT1VKXJldHVybiExfX1yZXR1cm4hMH0sTC5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbihrLEUpe3ZhciBqPWsuYml0TGVuZ3RoKCksVj16Lm1vbnQoayksQj1uZXcgeigxKS50b1JlZChWKTtFfHwoRT1NYXRoLm1heCgxLGovNDh8MCkpO2Zv'@;
put 'cih2YXIgWT1rLnN1Ym4oMSksWD0wOyFZLnRlc3RuKFgpO1grKyk7Zm9yKHZhciBVPWsuc2hybihYKSxxPVkudG9SZWQoVik7RT4wO0UtLSl7dmFyIGVlPXRoaXMuX3JhbmRyYW5nZShuZXcgeigyKSxZKSx0ZT1rLmdjZChlZSk7aWYoMCE9PXRlLmNtcG4oMSkpcmV0dXJuIHRlO3ZhciBvZT1l'@;
put 'ZS50b1JlZChWKS5yZWRQb3coVSk7aWYoMCE9PW9lLmNtcChCKSYmMCE9PW9lLmNtcChxKSl7Zm9yKHZhciBzZT0xO3NlPFg7c2UrKyl7aWYoMD09PShvZT1vZS5yZWRTcXIoKSkuY21wKEIpKXJldHVybiBvZS5mcm9tUmVkKCkuc3VibigxKS5nY2Qoayk7aWYoMD09PW9lLmNtcChxKSlicmVh'@;
put 'a31pZihzZT09PVgpcmV0dXJuKG9lPW9lLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qoayl9fXJldHVybiExfX0sNjI0MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEwoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFz'@;
put 'c2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0'@;
put 'dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/'@;
put 'ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0'@;
put 'dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3Ro'@;
put 'LFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBn'@;
put 'JiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5p'@;
put 'dD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksTChDPT09KDB8QykmJkM+PTImJkM8PTM2'@;
put 'KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRB'@;
put 'cnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2'@;
put 'Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihMKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0'@;
put 'QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoTCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1h'@;
put 'dGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRz'@;
put 'W3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18'@;
put 'PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlz'@;
put 'Lmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09'@;
put 'MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18'@;
put 'PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYz'@;
put 'O3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9'@;
put 'ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMu'@;
put 'c3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdh'@;
put 'dGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro'@;
put 'KytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFy'@;
put 'IFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVsw'@;
put 'LDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0'@;
put 'MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZl'@;
put 'PUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtm'@;
put 'ZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsSWU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStJZSkvNjcxMDg4'@;
put 'NjR8MCxJZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8SWUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8'@;
put 'ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5s'@;
put 'ZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIg'@;
put 'ZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgSWU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9JZStTOlhbZGUtSWUubGVuZ3RoXStJZStTfWZvcih0'@;
put 'aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUwoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10'@;
put 'aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZMKCExLCJOdW1i'@;
put 'ZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEwo'@;
put 'dm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVu'@;
put 'Z3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0wodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEwocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNs'@;
put 'b25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1'@;
put 'NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMp'@;
put 'LEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyks'@;
put 'ISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0p'@;
put 'O3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9'@;
put 'UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5p'@;
put 'bm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVv'@;
put 'cj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5'@;
put 'cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0'@;
put 'aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRp'@;
put 'dmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2'@;
put 'PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9y'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMp'@;
put 'fSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy'@;
put 'IEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2'@;
put 'LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7TCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRo'@;
put 'aXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2ln'@;
put 'bigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxT'@;
put 'Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5n'@;
put 'dGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6'@;
put 'MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9'@;
put 'ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRp'@;
put 'dmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5n'@;
put 'dGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8'@;
put 'Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLEllPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxX'@;
put 'ZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+'@;
put 'Pj4xMyxvdD0wfEpbN10sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4x'@;
put 'Myxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEx0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxMbj0wfG5lWzZdLHp0PTgxOTEmTG4seW49TG4+Pj4x'@;
put 'Myx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sRm49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGgu'@;
put 'aW11bChJZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSWUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRo'@;
put 'LmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01h'@;
put 'dGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChRZSxlbil8MCx3PU1hdGguaW11bChRZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtm'@;
put 'ZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHc9dytNYXRoLmltdWwoUWUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2'@;
put 'YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2'@;
put 'Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwo'@;
put 'YmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsdz13K01hdGguaW11bChRZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxO'@;
put 'dCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoSWUsTHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxRdCl8MCkrTWF0aC5pbXVsKEZlLEx0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxRdCl8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRo'@;
put 'LmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChZZSxtbil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLHc9dytNYXRoLmltdWwoUWUsbW4pfDAsdj12K01hdGguaW11bChqZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsTHQpfDAsdz13K01hdGguaW11bChXZSxRdCl8MDt2YXIgbm89KGZlKyh2PXYr'@;
put 'TWF0aC5pbXVsKEllLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChE'@;
put 'ZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01h'@;
put 'dGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsTHQpfDAscD0ocD1wK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEx0KXwwLHc9dytNYXRoLmltdWwoUWUsUXQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwo'@;
put 'V2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsTHQpfDAscD0ocD1wK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEx0KXwwLHc9dytNYXRoLmltdWwoYmUsUXQpfDAsdj12K01hdGguaW11'@;
put 'bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsdz13K01hdGguaW11bChRZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdl'@;
put 'LHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01h'@;
put 'dGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5p'@;
put 'bXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmltdWwocWUsTHQpfDAsdz13K01hdGguaW11bChxZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLHc9dytNYXRoLmltdWwoUWUseW4pfDAsdj12K01hdGguaW11bChqZSxz'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsRm4pfDApK01hdGguaW11bChGZSwkdCl8'@;
put 'MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsRm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRo'@;
put 'LmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11'@;
put 'bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsTHQpfDAscD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKGh0'@;
put 'LEx0KXwwLHc9dytNYXRoLmltdWwoaHQsUXQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUs'@;
put 'eW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLHc9dytNYXRoLmltdWwoUWUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGplLEZuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxGbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKEllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwx'@;
put 'Myl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwo'@;
put 'UHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxt'@;
put 'bil8MCx2PXYrTWF0aC5pbXVsKERlLEx0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxMdCl8MCx3PXcrTWF0aC5pbXVsKHplLFF0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXww'@;
put 'LHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDAp'@;
put 'K01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxGbil8MCkrTWF0aC5pbXVsKFFlLCR0KXwwLHc9dytNYXRoLmltdWwoUWUsRm4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxs'@;
put 'bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0'@;
put 'aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsTHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bCh1dCxRdCl8MCkrTWF0aC5pbXVsKE10LEx0KXwwLHc9dytNYXRoLmltdWwoTXQsUXQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2'@;
put 'PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytN'@;
put 'YXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxGbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwo'@;
put 'Ym4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsTHQpfDAscD0ocD1wK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEx0KXwwLHc9dytNYXRoLmltdWwob24sUXQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0'@;
put 'KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEZuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxGbil8MDt2YXIgR2k9'@;
put 'KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1h'@;
put 'dGguaW11bChVdCxMdCkscD0ocD1NYXRoLmltdWwoVXQsUXQpKStNYXRoLmltdWwoYm4sTHQpfDAsdz1NYXRoLmltdWwoYm4sUXQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQp'@;
put 'fDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxGbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsRm4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShw'@;
put 'PXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5p'@;
put 'bXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1'@;
put 'dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxGbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5p'@;
put 'bXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCks'@;
put 'cD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11'@;
put 'bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxGbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6'@;
put 'ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9'@;
put 'ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxGbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sRm4pfDA7dmFyIElvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStN'@;
put 'YXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LEZuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVs'@;
put 'KGJuLEZuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhz'@;
put 'Jj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9'@;
put 'NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZd'@;
put 'PUlvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3Rv'@;
put 'dHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2'@;
put 'ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIEllPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUt'@;
put 'cC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0llPTY3MTA4ODYzJihLZT1LZStJZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3'@;
put 'MTA4ODYzfUoud29yZHNbZmVdPUllLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyks'@;
put 'Uz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8'@;
put 'PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7'@;
put 'dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgSWU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09l'@;
put 'Kyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sUWU9SWUqS2UtRmUqWWU7WWU9SWUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPVFlKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1u'@;
put 'ZSYmKFFlPWRlKkllLWZlKkZlLEZlPWRlKkZlK2ZlKkllLEllPVFlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90'@;
put 'eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVu'@;
put 'Y3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29u'@;
put 'dmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtMKDA9PT1wKSxMKDA9PSgtODE5MiZwKSl9LHNlLnByb3Rv'@;
put 'dHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJC'@;
put 'VCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksSWU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5s'@;
put 'ZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLEllLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkll'@;
put 'W09lXTtkZVtPZV09bmVbT2VdKkllW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdh'@;
put 'dGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11'@;
put 'bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyksTChnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4'@;
put 'ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3'@;
put 'KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10'@;
put 'aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihn'@;
put 'KXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhp'@;
put 'cy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0w'@;
put 'O3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtMKCJudW1iZXIiPT10'@;
put 'eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndv'@;
put 'cmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxl'@;
put 'bmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5n'@;
put 'dGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gTCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlw'@;
put 'ZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4o'@;
put 'Zyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8'@;
put 'PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0'@;
put 'aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3Rv'@;
put 'dHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8x'@;
put 'PT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5w'@;
put 'cm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMu'@;
put 'd29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9'@;
put 'PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0'@;
put 'aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53'@;
put 'b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lm'@;
put 'KDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEwoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJv'@;
put 'dG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBK'@;
put 'LG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVs'@;
put 'KHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgSWU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihJZT1NYXRoLm1pbihJ'@;
put 'ZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsSWUseGUpOzAhPT12Lm5lZ2F0aXZlOylJZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09SWUpfXJldHVybiBKJiZKLnN0cmlwKCks'@;
put 'di5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEwoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10'@;
put 'aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVn'@;
put 'YXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9'@;
put 'dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jk'@;
put 'c1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnBy'@;
put 'b3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'ZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigx'@;
put 'KSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0woZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEw'@;
put 'ODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtMKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgw'@;
put 'fHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7TCgw'@;
put 'PT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2'@;
put 'ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsSWU9MTshKEMud29yZHNbMF0mSWUpJiZ4ZTwyNjsrK3hlLEllPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hl'@;
put 'LS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+'@;
put 'MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpK'@;
put 'LGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSks'@;
put 'dz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVz'@;
put 'aHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihT'@;
put 'LmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2'@;
put 'YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlz'@;
put 'RXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'ZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12'@;
put 'LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5w'@;
put 'cm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZl'@;
put 'JiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxMKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8'@;
put 'LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdh'@;
put 'dGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNb'@;
put 'U10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAo'@;
put 'Zyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnBy'@;
put 'b3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVx'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCgh'@;
put 'dGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxMKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigp'@;
put 'e3JldHVybiBMKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnBy'@;
put 'b3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRBZGQg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxF'@;
put 'LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSVN1'@;
put 'YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxF'@;
put 'LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiBMKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXIgd29y'@;
put 'a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQo'@;
put 'dGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkJiYhZy5yZWQsInJl'@;
put 'ZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRo'@;
put 'aXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIs'@;
put 'ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVu'@;
put 'Y3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgTChnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7'@;
put 'SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlz'@;
put 'LnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1m'@;
put 'dW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxL'@;
put 'KFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAo'@;
put 'KTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxD'@;
put 'KXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndv'@;
put 'cmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5p'@;
put 'bXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3'@;
put 'MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtT'@;
put 'PGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3Zh'@;
put 'ciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxI'@;
put 'LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtMKDA9'@;
put 'PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90'@;
put 'aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5'@;
put 'cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2'@;
put 'YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNl'@;
put 'UmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkx'@;
put 'KGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhp'@;
put 'cy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNa'@;
put 'ZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoTChDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYm'@;
put 'MD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtMKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQo'@;
put 'dGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLEllPXRoaXMucG93KGcsdiksRmU9cDswIT09SWUuY21wKHcpOyl7Zm9yKHZhciBPZT1JZSxqZT0w'@;
put 'OzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtMKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLEllPUllLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlw'@;
put 'ZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJu'@;
put 'IG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBw'@;
put 'PVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09'@;
put 'eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1n'@;
put 'P0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcu'@;
put 'aXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hp'@;
put 'ZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5l'@;
put 'dyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/'@;
put 'dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09'@;
put 'Ui5ubWQoTSksdGhpcyl9LDk3NDY6TT0+e2Z1bmN0aW9uIE8oUix6KXtpZighUil0aHJvdyBuZXcgRXJyb3Ioenx8IkFzc2VydGlvbiBmYWlsZWQiKX1NLmV4cG9ydHM9TyxPLmVxdWFsPWZ1bmN0aW9uKFIseixLKXtpZihSIT16KXRocm93IG5ldyBFcnJvcihLfHwiQXNzZXJ0aW9uIGZhaWxl'@;
put 'ZDogIitSKyIgIT0gIit6KX19LDQ1MDQ6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI9TztmdW5jdGlvbiB6KEwpe3JldHVybiAxPT09TC5sZW5ndGg/IjAiK0w6TH1mdW5jdGlvbiBLKEwpe2Zvcih2YXIgaz0iIixFPTA7RTxMLmxlbmd0aDtFKyspays9eihMW0VdLnRvU3RyaW5nKDE2KSk7'@;
put 'cmV0dXJuIGt9Ui50b0FycmF5PWZ1bmN0aW9uKEwsayl7aWYoQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gTC5zbGljZSgpO2lmKCFMKXJldHVybltdO3ZhciBFPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgTCl7Zm9yKHZhciBqPTA7ajxMLmxlbmd0aDtqKyspRVtqXT0wfExbal07cmV0dXJuIEV9'@;
put 'aWYoImhleCI9PT1rKWZvcigoTD1MLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEw9IjAiK0wpLGo9MDtqPEwubGVuZ3RoO2orPTIpRS5wdXNoKHBhcnNlSW50KExbal0rTFtqKzFdLDE2KSk7ZWxzZSBmb3Ioaj0wO2o8TC5sZW5ndGg7aisrKXt2YXIgVj1MLmNo'@;
put 'YXJDb2RlQXQoaiksQj1WPj44LFk9MjU1JlY7Qj9FLnB1c2goQixZKTpFLnB1c2goWSl9cmV0dXJuIEV9LFIuemVybzI9eixSLnRvSGV4PUssUi5lbmNvZGU9ZnVuY3Rpb24oTCxrKXtyZXR1cm4iaGV4Ij09PWs/SyhMKTpMfX0sMTE3MTooTSxPLFIpPT57dmFyIHo9Uig1MTA4KTtNLmV4cG9y'@;
put 'dHM9ZWUsZWUuTWluaW1hdGNoPXRlO3ZhciBLPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBSKDI1MjApfWNhdGNoe319KCl8fHtzZXA6Ii8ifTtlZS5zZXA9Sy5zZXA7dmFyIEw9ZWUuR0xPQlNUQVI9dGUuR0xPQlNUQVI9e30saz1SKDM2NDQpLEU9eyIhIjp7b3BlbjoiKD86KD8hKD86IixjbG9z'@;
put 'ZToiKSlbXi9dKj8pIn0sIj8iOntvcGVuOiIoPzoiLGNsb3NlOiIpPyJ9LCIrIjp7b3BlbjoiKD86IixjbG9zZToiKSsifSwiKiI6e29wZW46Iig/OiIsY2xvc2U6IikqIn0sIkAiOntvcGVuOiIoPzoiLGNsb3NlOiIpIn19LGo9IlteL10iLFY9aisiKj8iLFg9IigpLip7fSs/W11eJFxcISIu'@;
put 'c3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbih1ZSxjZSl7cmV0dXJuIHVlW2NlXT0hMCx1ZX0se30pLFU9L1wvKy87ZnVuY3Rpb24gcSh1ZSxjZSl7Y2U9Y2V8fHt9O3ZhciBHPXt9O3JldHVybiBPYmplY3Qua2V5cyh1ZSkuZm9yRWFjaChmdW5jdGlvbihiKXtHW2JdPXVlW2JdfSksT2JqZWN0'@;
put 'LmtleXMoY2UpLmZvckVhY2goZnVuY3Rpb24oYil7R1tiXT1jZVtiXX0pLEd9ZnVuY3Rpb24gZWUodWUsY2UsRyl7cmV0dXJuIHNlKGNlKSxHfHwoRz17fSksISghRy5ub2NvbW1lbnQmJiIjIj09PWNlLmNoYXJBdCgwKSkmJm5ldyB0ZShjZSxHKS5tYXRjaCh1ZSl9ZnVuY3Rpb24gdGUodWUs'@;
put 'Y2Upe2lmKCEodGhpcyBpbnN0YW5jZW9mIHRlKSlyZXR1cm4gbmV3IHRlKHVlLGNlKTtzZSh1ZSksY2V8fChjZT17fSksdWU9dWUudHJpbSgpLGNlLmFsbG93V2luZG93c0VzY2FwZXx8Ii8iPT09Sy5zZXB8fCh1ZT11ZS5zcGxpdChLLnNlcCkuam9pbigiLyIpKSx0aGlzLm9wdGlvbnM9Y2Us'@;
put 'dGhpcy5zZXQ9W10sdGhpcy5wYXR0ZXJuPXVlLHRoaXMucmVnZXhwPW51bGwsdGhpcy5uZWdhdGU9ITEsdGhpcy5jb21tZW50PSExLHRoaXMuZW1wdHk9ITEsdGhpcy5wYXJ0aWFsPSEhY2UucGFydGlhbCx0aGlzLm1ha2UoKX1mdW5jdGlvbiBvZSh1ZSxjZSl7cmV0dXJuIGNlfHwoY2U9dGhp'@;
put 'cyBpbnN0YW5jZW9mIHRlP3RoaXMub3B0aW9uczp7fSksc2UodWU9dm9pZCAwPT09dWU/dGhpcy5wYXR0ZXJuOnVlKSxjZS5ub2JyYWNlfHwhL1x7KD86KD8hXHspLikqXH0vLnRlc3QodWUpP1t1ZV06ayh1ZSl9ZWUuZmlsdGVyPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gY2U9Y2V8fHt9LGZ1'@;
put 'bmN0aW9uKEcsYixEKXtyZXR1cm4gZWUoRyx1ZSxjZSl9fSxlZS5kZWZhdWx0cz1mdW5jdGlvbih1ZSl7aWYoIXVlfHwib2JqZWN0IiE9dHlwZW9mIHVlfHwhT2JqZWN0LmtleXModWUpLmxlbmd0aClyZXR1cm4gZWU7dmFyIGNlPWVlLEc9ZnVuY3Rpb24oYixELEgpe3JldHVybiBjZShiLEQs'@;
put 'cSh1ZSxIKSl9O3JldHVybihHLk1pbmltYXRjaD1mdW5jdGlvbihiLEQpe3JldHVybiBuZXcgY2UuTWluaW1hdGNoKGIscSh1ZSxEKSl9KS5kZWZhdWx0cz1mdW5jdGlvbihiKXtyZXR1cm4gY2UuZGVmYXVsdHMocSh1ZSxiKSkuTWluaW1hdGNofSxHLmZpbHRlcj1mdW5jdGlvbihiLEQpe3Jl'@;
put 'dHVybiBjZS5maWx0ZXIoYixxKHVlLEQpKX0sRy5kZWZhdWx0cz1mdW5jdGlvbihiKXtyZXR1cm4gY2UuZGVmYXVsdHMocSh1ZSxiKSl9LEcubWFrZVJlPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGNlLm1ha2VSZShiLHEodWUsRCkpfSxHLmJyYWNlRXhwYW5kPWZ1bmN0aW9uKGIsRCl7cmV0dXJu'@;
put 'IGNlLmJyYWNlRXhwYW5kKGIscSh1ZSxEKSl9LEcubWF0Y2g9ZnVuY3Rpb24oYixELEgpe3JldHVybiBjZS5tYXRjaChiLEQscSh1ZSxIKSl9LEd9LHRlLmRlZmF1bHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gZWUuZGVmYXVsdHModWUpLk1pbmltYXRjaH0sdGUucHJvdG90eXBlLmRlYnVnPWZ1'@;
put 'bmN0aW9uKCl7fSx0ZS5wcm90b3R5cGUubWFrZT1mdW5jdGlvbigpe3ZhciB1ZT10aGlzLnBhdHRlcm4sY2U9dGhpcy5vcHRpb25zO2lmKGNlLm5vY29tbWVudHx8IiMiIT09dWUuY2hhckF0KDApKWlmKHVlKXt0aGlzLnBhcnNlTmVnYXRlKCk7dmFyIEc9dGhpcy5nbG9iU2V0PXRoaXMuYnJh'@;
put 'Y2VFeHBhbmQoKTtjZS5kZWJ1ZyYmKHRoaXMuZGVidWc9ZnVuY3Rpb24oKXt6LmVycm9yLmFwcGx5KHosYXJndW1lbnRzKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLEc9dGhpcy5nbG9iUGFydHM9Ry5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuc3BsaXQoVSl9KSx0aGlzLmRlYnVn'@;
put 'KHRoaXMucGF0dGVybixHKSxHPUcubWFwKGZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gYi5tYXAodGhpcy5wYXJzZSx0aGlzKX0sdGhpcyksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz1HLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4tMT09PWIuaW5kZXhPZighMSl9KSx0aGlzLmRlYnVn'@;
put 'KHRoaXMucGF0dGVybixHKSx0aGlzLnNldD1HfWVsc2UgdGhpcy5lbXB0eT0hMDtlbHNlIHRoaXMuY29tbWVudD0hMH0sdGUucHJvdG90eXBlLnBhcnNlTmVnYXRlPWZ1bmN0aW9uKCl7dmFyIHVlPXRoaXMucGF0dGVybixjZT0hMSxiPTA7aWYoIXRoaXMub3B0aW9ucy5ub25lZ2F0ZSl7Zm9y'@;
put 'KHZhciBEPTAsSD11ZS5sZW5ndGg7RDxIJiYiISI9PT11ZS5jaGFyQXQoRCk7RCsrKWNlPSFjZSxiKys7YiYmKHRoaXMucGF0dGVybj11ZS5zdWJzdHIoYikpLHRoaXMubmVnYXRlPWNlfX0sZWUuYnJhY2VFeHBhbmQ9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBvZSh1ZSxjZSl9LHRlLnByb3Rv'@;
put 'dHlwZS5icmFjZUV4cGFuZD1vZTt2YXIgc2U9ZnVuY3Rpb24odWUpe2lmKCJzdHJpbmciIT10eXBlb2YgdWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBwYXR0ZXJuIik7aWYodWUubGVuZ3RoPjY1NTM2KXRocm93IG5ldyBUeXBlRXJyb3IoInBhdHRlcm4gaXMgdG9vIGxvbmciKX07'@;
put 'dGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHVlLGNlKXtzZSh1ZSk7dmFyIEc9dGhpcy5vcHRpb25zO2lmKCIqKiI9PT11ZSl7aWYoIUcubm9nbG9ic3RhcilyZXR1cm4gTDt1ZT0iKiJ9aWYoIiI9PT11ZSlyZXR1cm4iIjt2YXIgYixEPSIiLEg9ISFHLm5vY2FzZSxOPSExLGc9W10sQz1b'@;
put 'XSxTPSExLHY9LTEscD0tMSx3PSIuIj09PXVlLmNoYXJBdCgwKT8iIjpHLmRvdD8iKD8hKD86XnxcXC8pXFwuezEsMn0oPzokfFxcLykpIjoiKD8hXFwuKSIsSj10aGlzO2Z1bmN0aW9uIG5lKCl7aWYoYil7c3dpdGNoKGIpe2Nhc2UiKiI6RCs9VixIPSEwO2JyZWFrO2Nhc2UiPyI6RCs9aixI'@;
put 'PSEwO2JyZWFrO2RlZmF1bHQ6RCs9IlxcIitifUouZGVidWcoImNsZWFyU3RhdGVDaGFyICVqICVqIixiLEQpLGI9ITF9fWZvcih2YXIgZGUsZmU9MCx4ZT11ZS5sZW5ndGg7ZmU8eGUmJihkZT11ZS5jaGFyQXQoZmUpKTtmZSsrKWlmKHRoaXMuZGVidWcoIiVzXHQlcyAlcyAlaiIsdWUsZmUs'@;
put 'RCxkZSksTiYmWFtkZV0pRCs9IlxcIitkZSxOPSExO2Vsc2Ugc3dpdGNoKGRlKXtjYXNlIi8iOnJldHVybiExO2Nhc2UiXFwiOm5lKCksTj0hMDtjb250aW51ZTtjYXNlIj8iOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIkAiOmNhc2UiISI6aWYodGhpcy5kZWJ1ZygiJXNcdCVzICVzICVqIDwtLSBz'@;
put 'dGF0ZUNoYXIiLHVlLGZlLEQsZGUpLFMpe3RoaXMuZGVidWcoIiAgaW4gY2xhc3MiKSwiISI9PT1kZSYmZmU9PT1wKzEmJihkZT0iXiIpLEQrPWRlO2NvbnRpbnVlfUouZGVidWcoImNhbGwgY2xlYXJTdGF0ZUNoYXIgJWoiLGIpLG5lKCksYj1kZSxHLm5vZXh0JiZuZSgpO2NvbnRpbnVlO2Nh'@;
put 'c2UiKCI6aWYoUyl7RCs9IigiO2NvbnRpbnVlfWlmKCFiKXtEKz0iXFwoIjtjb250aW51ZX1nLnB1c2goe3R5cGU6YixzdGFydDpmZS0xLHJlU3RhcnQ6RC5sZW5ndGgsb3BlbjpFW2JdLm9wZW4sY2xvc2U6RVtiXS5jbG9zZX0pLHRoaXMuZGVidWcoInBsVHlwZSAlaiAlaiIsYixEKz0iISI9'@;
put 'PT1iPyIoPzooPyEoPzoiOiIoPzoiKSxiPSExO2NvbnRpbnVlO2Nhc2UiKSI6aWYoU3x8IWcubGVuZ3RoKXtEKz0iXFwpIjtjb250aW51ZX1uZSgpLEg9ITA7dmFyIEllPWcucG9wKCk7RCs9SWUuY2xvc2UsIiEiPT09SWUudHlwZSYmQy5wdXNoKEllKSxJZS5yZUVuZD1ELmxlbmd0aDtjb250'@;
put 'aW51ZTtjYXNlInwiOmlmKFN8fCFnLmxlbmd0aHx8Til7RCs9IlxcfCIsTj0hMTtjb250aW51ZX1uZSgpLEQrPSJ8Ijtjb250aW51ZTtjYXNlIlsiOmlmKG5lKCksUyl7RCs9IlxcIitkZTtjb250aW51ZX1TPSEwLHA9ZmUsdj1ELmxlbmd0aCxEKz1kZTtjb250aW51ZTtjYXNlIl0iOmlmKGZl'@;
put 'PT09cCsxfHwhUyl7RCs9IlxcIitkZSxOPSExO2NvbnRpbnVlfXZhciBGZT11ZS5zdWJzdHJpbmcocCsxLGZlKTt0cnl7UmVnRXhwKCJbIitGZSsiXSIpfWNhdGNoe3ZhciBPZT10aGlzLnBhcnNlKEZlLGhlKTtEPUQuc3Vic3RyKDAsdikrIlxcWyIrT2VbMF0rIlxcXSIsSD1IfHxPZVsxXSxT'@;
put 'PSExO2NvbnRpbnVlfUg9ITAsUz0hMSxEKz1kZTtjb250aW51ZTtkZWZhdWx0Om5lKCksTj9OPSExOiFYW2RlXXx8Il4iPT09ZGUmJlN8fChEKz0iXFwiKSxEKz1kZX1mb3IoUyYmKEZlPXVlLnN1YnN0cihwKzEpLE9lPXRoaXMucGFyc2UoRmUsaGUpLEQ9RC5zdWJzdHIoMCx2KSsiXFxbIitP'@;
put 'ZVswXSxIPUh8fE9lWzFdKSxJZT1nLnBvcCgpO0llO0llPWcucG9wKCkpe3ZhciBqZT1ELnNsaWNlKEllLnJlU3RhcnQrSWUub3Blbi5sZW5ndGgpO3RoaXMuZGVidWcoInNldHRpbmcgdGFpbCIsRCxJZSksamU9amUucmVwbGFjZSgvKCg/OlxcezJ9KXswLDY0fSkoXFw/KVx8L2csZnVuY3Rp'@;
put 'b24oTWUsRGUsemUpe3JldHVybiB6ZXx8KHplPSJcXCIpLERlK0RlK3plKyJ8In0pLHRoaXMuZGVidWcoInRhaWw9JWpcbiAgICVzIixqZSxqZSxJZSxEKTt2YXIgV2U9IioiPT09SWUudHlwZT9WOiI/Ij09PUllLnR5cGU/ajoiXFwiK0llLnR5cGU7SD0hMCxEPUQuc2xpY2UoMCxJZS5yZVN0'@;
put 'YXJ0KStXZSsiXFwoIitqZX1uZSgpLE4mJihEKz0iXFxcXCIpO3ZhciBLZT0hMTtzd2l0Y2goRC5jaGFyQXQoMCkpe2Nhc2UiWyI6Y2FzZSIuIjpjYXNlIigiOktlPSEwfWZvcih2YXIgWWU9Qy5sZW5ndGgtMTtZZT4tMTtZZS0tKXt2YXIgUWU9Q1tZZV0sbHQ9RC5zbGljZSgwLFFlLnJlU3Rh'@;
put 'cnQpLFBlPUQuc2xpY2UoUWUucmVTdGFydCxRZS5yZUVuZC04KSxiZT1ELnNsaWNlKFFlLnJlRW5kLTgsUWUucmVFbmQpLEFlPUQuc2xpY2UoUWUucmVFbmQpO2JlKz1BZTt2YXIgVGU9bHQuc3BsaXQoIigiKS5sZW5ndGgtMSxxZT1BZTtmb3IoZmU9MDtmZTxUZTtmZSsrKXFlPXFlLnJlcGxh'@;
put 'Y2UoL1wpWysqP10/LywiIik7dmFyIFhlPSIiOyIiPT09KEFlPXFlKSYmY2UhPT1oZSYmKFhlPSIkIiksRD1sdCtQZStBZStYZStiZX1pZigiIiE9PUQmJkgmJihEPSIoPz0uKSIrRCksS2UmJihEPXcrRCksY2U9PT1oZSlyZXR1cm5bRCxIXTtpZighSClyZXR1cm4gdWUucmVwbGFjZSgvXFwo'@;
put 'LikvZywiJDEiKTt2YXIgVWU9Ry5ub2Nhc2U/ImkiOiIiO3RyeXt2YXIgaHQ9bmV3IFJlZ0V4cCgiXiIrRCsiJCIsVWUpfWNhdGNoe3JldHVybiBuZXcgUmVnRXhwKCIkLiIpfXJldHVybiBodC5fZ2xvYj11ZSxodC5fc3JjPUQsaHR9O3ZhciBoZT17fTtlZS5tYWtlUmU9ZnVuY3Rpb24odWUs'@;
put 'Y2Upe3JldHVybiBuZXcgdGUodWUsY2V8fHt9KS5tYWtlUmUoKX0sdGUucHJvdG90eXBlLm1ha2VSZT1mdW5jdGlvbigpe2lmKHRoaXMucmVnZXhwfHwhMT09PXRoaXMucmVnZXhwKXJldHVybiB0aGlzLnJlZ2V4cDt2YXIgdWU9dGhpcy5zZXQ7aWYoIXVlLmxlbmd0aClyZXR1cm4gdGhpcy5y'@;
put 'ZWdleHA9ITEsdGhpcy5yZWdleHA7dmFyIGNlPXRoaXMub3B0aW9ucyxHPWNlLm5vZ2xvYnN0YXI/VjpjZS5kb3Q/Iig/Oig/ISg/OlxcL3xeKSg/OlxcLnsxLDJ9KSgkfFxcLykpLikqPyI6Iig/Oig/ISg/OlxcL3xeKVxcLikuKSo/IixiPWNlLm5vY2FzZT8iaSI6IiIsRD11ZS5tYXAoZnVu'@;
put 'Y3Rpb24oSCl7cmV0dXJuIEgubWFwKGZ1bmN0aW9uKE4pe3JldHVybiBOPT09TD9HOiJzdHJpbmciPT10eXBlb2YgTj9OLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXHNdL2csIlxcJCYiKTpOLl9zcmN9KS5qb2luKCJcXC8iKX0pLmpvaW4oInwiKTtEPSJeKD86IitEKyIpJCIsdGhp'@;
put 'cy5uZWdhdGUmJihEPSJeKD8hIitEKyIpLiokIik7dHJ5e3RoaXMucmVnZXhwPW5ldyBSZWdFeHAoRCxiKX1jYXRjaHt0aGlzLnJlZ2V4cD0hMX1yZXR1cm4gdGhpcy5yZWdleHB9LGVlLm1hdGNoPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiPW5ldyB0ZShjZSxHPUd8fHt9KTtyZXR1cm4gdWU9'@;
put 'dWUuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBiLm1hdGNoKEQpfSksYi5vcHRpb25zLm5vbnVsbCYmIXVlLmxlbmd0aCYmdWUucHVzaChjZSksdWV9LHRlLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih1ZSxjZSl7aWYodm9pZCAwPT09Y2UmJihjZT10aGlzLnBhcnRpYWwpLHRoaXMuZGVi'@;
put 'dWcoIm1hdGNoIix1ZSx0aGlzLnBhdHRlcm4pLHRoaXMuY29tbWVudClyZXR1cm4hMTtpZih0aGlzLmVtcHR5KXJldHVybiIiPT09dWU7aWYoIi8iPT09dWUmJmNlKXJldHVybiEwO3ZhciBHPXRoaXMub3B0aW9uczsiLyIhPT1LLnNlcCYmKHVlPXVlLnNwbGl0KEsuc2VwKS5qb2luKCIvIikp'@;
put 'LHVlPXVlLnNwbGl0KFUpLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCJzcGxpdCIsdWUpO3ZhciBiLEQsSD10aGlzLnNldDtmb3IodGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sInNldCIsSCksRD11ZS5sZW5ndGgtMTtEPj0wJiYhKGI9dWVbRF0pO0QtLSk7Zm9yKEQ9MDtEPEgubGVuZ3RoO0Qr'@;
put 'Kyl7dmFyIE49SFtEXSxnPXVlO2lmKEcubWF0Y2hCYXNlJiYxPT09Ti5sZW5ndGgmJihnPVtiXSksdGhpcy5tYXRjaE9uZShnLE4sY2UpKXJldHVybiEhRy5mbGlwTmVnYXRlfHwhdGhpcy5uZWdhdGV9cmV0dXJuIUcuZmxpcE5lZ2F0ZSYmdGhpcy5uZWdhdGV9LHRlLnByb3RvdHlwZS5tYXRj'@;
put 'aE9uZT1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYj10aGlzLm9wdGlvbnM7dGhpcy5kZWJ1ZygibWF0Y2hPbmUiLHt0aGlzOnRoaXMsZmlsZTp1ZSxwYXR0ZXJuOmNlfSksdGhpcy5kZWJ1ZygibWF0Y2hPbmUiLHVlLmxlbmd0aCxjZS5sZW5ndGgpO2Zvcih2YXIgRD0wLEg9MCxOPXVlLmxlbmd0'@;
put 'aCxnPWNlLmxlbmd0aDtEPE4mJkg8ZztEKyssSCsrKXt0aGlzLmRlYnVnKCJtYXRjaE9uZSBsb29wIik7dmFyIEMsUz1jZVtIXSx2PXVlW0RdO2lmKHRoaXMuZGVidWcoY2UsUyx2KSwhMT09PVMpcmV0dXJuITE7aWYoUz09PUwpe3RoaXMuZGVidWcoIkdMT0JTVEFSIixbY2UsUyx2XSk7dmFy'@;
put 'IHA9RCx3PUgrMTtpZih3PT09Zyl7Zm9yKHRoaXMuZGVidWcoIioqIGF0IHRoZSBlbmQiKTtEPE47RCsrKWlmKCIuIj09PXVlW0RdfHwiLi4iPT09dWVbRF18fCFiLmRvdCYmIi4iPT09dWVbRF0uY2hhckF0KDApKXJldHVybiExO3JldHVybiEwfWZvcig7cDxOOyl7dmFyIEo9dWVbcF07aWYo'@;
put 'dGhpcy5kZWJ1ZygiXG5nbG9ic3RhciB3aGlsZSIsdWUscCxjZSx3LEopLHRoaXMubWF0Y2hPbmUodWUuc2xpY2UocCksY2Uuc2xpY2UodyksRykpcmV0dXJuIHRoaXMuZGVidWcoImdsb2JzdGFyIGZvdW5kIG1hdGNoISIscCxOLEopLCEwO2lmKCIuIj09PUp8fCIuLiI9PT1KfHwhYi5kb3Qm'@;
put 'JiIuIj09PUouY2hhckF0KDApKXt0aGlzLmRlYnVnKCJkb3QgZGV0ZWN0ZWQhIix1ZSxwLGNlLHcpO2JyZWFrfXRoaXMuZGVidWcoImdsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUiKSxwKyt9cmV0dXJuISghR3x8KHRoaXMuZGVidWcoIlxuPj4+IG5vIG1hdGNoLCBw'@;
put 'YXJ0aWFsPyIsdWUscCxjZSx3KSxwIT09TikpfWlmKCJzdHJpbmciPT10eXBlb2YgUz90aGlzLmRlYnVnKCJzdHJpbmcgbWF0Y2giLFMsdixDPXY9PT1TKTooQz12Lm1hdGNoKFMpLHRoaXMuZGVidWcoInBhdHRlcm4gbWF0Y2giLFMsdixDKSksIUMpcmV0dXJuITF9aWYoRD09PU4mJkg9PT1n'@;
put 'KXJldHVybiEwO2lmKEQ9PT1OKXJldHVybiBHO2lmKEg9PT1nKXJldHVybiBEPT09Ti0xJiYiIj09PXVlW0RdO3Rocm93IG5ldyBFcnJvcigid3RmPyIpfX0sNDI0NDpNPT57InVzZSBzdHJpY3QiO3ZhciBPPWZ1bmN0aW9uKFIpe3JldHVybiBSIT1SfTtNLmV4cG9ydHM9ZnVuY3Rpb24oUix6'@;
put 'KXtyZXR1cm4gMD09PVImJjA9PT16PzEvUj09MS96OlI9PT16fHwhKCFPKFIpfHwhTyh6KSl9fSw2MDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODkpLEs9Uig1NTU5KSxMPVIoNDI0NCksaz1SKDU2MjQpLEU9UigyMjgxKSxqPUsoaygpLE9iamVjdCk7eihqLHtnZXRQb2x5'@;
put 'ZmlsbDprLGltcGxlbWVudGF0aW9uOkwsc2hpbTpFfSksTS5leHBvcnRzPWp9LDU2MjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyNDQpO00uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOnp9fSwyMjgxOihN'@;
put 'LE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1NjI0KSxLPVIoNDI4OSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEw9eigpO3JldHVybiBLKE9iamVjdCx7aXM6TH0se2lzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pcyE9PUx9fSksTH19LDg5ODc6KE0sTyxSKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgejtpZighT2JqZWN0LmtleXMpe3ZhciBLPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGs9UigxNDE0KSxFPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsaj0hRS5jYWxsKHt0b1N0cmluZzpu'@;
put 'dWxsfSwidG9TdHJpbmciKSxWPUUuY2FsbChmdW5jdGlvbigpe30sInByb3RvdHlwZSIpLEI9WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3IiXSxZ'@;
put 'PWZ1bmN0aW9uKHEpe3ZhciBlZT1xLmNvbnN0cnVjdG9yO3JldHVybiBlZSYmZWUucHJvdG90eXBlPT09cX0sWD17JGFwcGxpY2F0aW9uQ2FjaGU6ITAsJGNvbnNvbGU6ITAsJGV4dGVybmFsOiEwLCRmcmFtZTohMCwkZnJhbWVFbGVtZW50OiEwLCRmcmFtZXM6ITAsJGlubmVySGVpZ2h0OiEw'@;
put 'LCRpbm5lcldpZHRoOiEwLCRvbm1vemZ1bGxzY3JlZW5jaGFuZ2U6ITAsJG9ubW96ZnVsbHNjcmVlbmVycm9yOiEwLCRvdXRlckhlaWdodDohMCwkb3V0ZXJXaWR0aDohMCwkcGFnZVhPZmZzZXQ6ITAsJHBhZ2VZT2Zmc2V0OiEwLCRwYXJlbnQ6ITAsJHNjcm9sbExlZnQ6ITAsJHNjcm9sbFRv'@;
put 'cDohMCwkc2Nyb2xsWDohMCwkc2Nyb2xsWTohMCwkc2VsZjohMCwkd2Via2l0SW5kZXhlZERCOiEwLCR3ZWJraXRTdG9yYWdlSW5mbzohMCwkd2luZG93OiEwfSxVPWZ1bmN0aW9uKCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7Zm9yKHZhciBxIGluIHdpbmRvdyl0cnl7aWYoIVhb'@;
put 'IiQiK3FdJiZLLmNhbGwod2luZG93LHEpJiZudWxsIT09d2luZG93W3FdJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvd1txXSl0cnl7WSh3aW5kb3dbcV0pfWNhdGNoe3JldHVybiEwfX1jYXRjaHtyZXR1cm4hMH1yZXR1cm4hMX0oKTt6PWZ1bmN0aW9uKHEpe3ZhciBlZT1udWxsIT09cSYmIm9i'@;
put 'amVjdCI9PXR5cGVvZiBxLHRlPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1MLmNhbGwocSksb2U9ayhxKSxzZT1lZSYmIltvYmplY3QgU3RyaW5nXSI9PT1MLmNhbGwocSksaGU9W107aWYoIWVlJiYhdGUmJiFvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBu'@;
put 'b24tb2JqZWN0Iik7dmFyIHVlPVYmJnRlO2lmKHNlJiZxLmxlbmd0aD4wJiYhSy5jYWxsKHEsMCkpZm9yKHZhciBjZT0wO2NlPHEubGVuZ3RoOysrY2UpaGUucHVzaChTdHJpbmcoY2UpKTtpZihvZSYmcS5sZW5ndGg+MClmb3IodmFyIEc9MDtHPHEubGVuZ3RoOysrRyloZS5wdXNoKFN0cmlu'@;
put 'ZyhHKSk7ZWxzZSBmb3IodmFyIGIgaW4gcSl1ZSYmInByb3RvdHlwZSI9PT1ifHwhSy5jYWxsKHEsYil8fGhlLnB1c2goU3RyaW5nKGIpKTtpZihqKWZvcih2YXIgRD1mdW5jdGlvbihOKXtpZih0eXBlb2Ygd2luZG93PiJ1Inx8IVUpcmV0dXJuIFkoTik7dHJ5e3JldHVybiBZKE4pfWNhdGNo'@;
put 'e3JldHVybiExfX0ocSksSD0wO0g8Qi5sZW5ndGg7KytIKUQmJiJjb25zdHJ1Y3RvciI9PT1CW0hdfHwhSy5jYWxsKHEsQltIXSl8fGhlLnB1c2goQltIXSk7cmV0dXJuIGhlfX1NLmV4cG9ydHM9en0sMjIxNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PUFycmF5LnByb3RvdHlwZS5z'@;
put 'bGljZSxLPVIoMTQxNCksTD1PYmplY3Qua2V5cyxrPUw/ZnVuY3Rpb24oail7cmV0dXJuIEwoail9OlIoODk4NyksRT1PYmplY3Qua2V5cztrLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIGo9ZnVuY3Rpb24oKXt2YXIgVj1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVy'@;
put 'biBWJiZWLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7anx8KE9iamVjdC5rZXlzPWZ1bmN0aW9uKFYpe3JldHVybiBLKFYpP0Uoei5jYWxsKFYpKTpFKFYpfSl9ZWxzZSBPYmplY3Qua2V5cz1rO3JldHVybiBPYmplY3Qua2V5c3x8a30sTS5leHBvcnRzPWt9LDE0MTQ6TT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgTz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO00uZXhwb3J0cz1mdW5jdGlvbihSKXt2YXIgej1PLmNhbGwoUiksSz0iW29iamVjdCBBcmd1bWVudHNdIj09PXo7cmV0dXJuIEt8fChLPSJbb2JqZWN0IEFycmF5XSIhPT16JiZudWxsIT09UiYmIm9iamVjdCI9PXR5'@;
put 'cGVvZiBSJiYibnVtYmVyIj09dHlwZW9mIFIubGVuZ3RoJiZSLmxlbmd0aD49MCYmIltvYmplY3QgRnVuY3Rpb25dIj09PU8uY2FsbChSLmNhbGxlZSkpLEt9fSw3Nzg6KE0sTyxSKT0+e3ZhciB6PVIoMjQ3OSk7ZnVuY3Rpb24gSyhrKXt2YXIgRT1mdW5jdGlvbigpe3JldHVybiBFLmNhbGxl'@;
put 'ZD9FLnZhbHVlOihFLmNhbGxlZD0hMCxFLnZhbHVlPWsuYXBwbHkodGhpcyxhcmd1bWVudHMpKX07cmV0dXJuIEUuY2FsbGVkPSExLEV9ZnVuY3Rpb24gTChrKXt2YXIgRT1mdW5jdGlvbigpe2lmKEUuY2FsbGVkKXRocm93IG5ldyBFcnJvcihFLm9uY2VFcnJvcik7cmV0dXJuIEUuY2FsbGVk'@;
put 'PSEwLEUudmFsdWU9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBFLm9uY2VFcnJvcj0oay5uYW1lfHwiRnVuY3Rpb24gd3JhcHBlZCB3aXRoIGBvbmNlYCIpKyIgc2hvdWxkbid0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSIsRS5jYWxsZWQ9ITEsRX1NLmV4cG9ydHM9eihLKSxN'@;
put 'LmV4cG9ydHMuc3RyaWN0PXooTCksSy5wcm90bz1LKGZ1bmN0aW9uKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwib25jZSIse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyl9LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShG'@;
put 'dW5jdGlvbi5wcm90b3R5cGUsIm9uY2VTdHJpY3QiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBMKHRoaXMpfSxjb25maWd1cmFibGU6ITB9KX0pfSw3NDM1OihNLE8pPT57Ty5lbmRpYW5uZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIkxFIn0sTy5ob3N0bmFtZT1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'eXBlb2YgbG9jYXRpb248InUiP2xvY2F0aW9uLmhvc3RuYW1lOiIifSxPLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sTy51cHRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sTy5mcmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LE8udG90YWxtZW09ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sTy5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LE8udHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93c2VyIn0sTy5yZWxlYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiP25hdmlnYXRvci5hcHBWZXJzaW9uOiIi'@;
put 'fSxPLm5ldHdvcmtJbnRlcmZhY2VzPU8uZ2V0TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sTy5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxPLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxPLnRtcGRpcj1PLnRtcERpcj1mdW5j'@;
put 'dGlvbigpe3JldHVybiIvdG1wIn0sTy5FT0w9IlxuIixPLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSwyODE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5ODA5KTtPLmNlcnRpZmljYXRlPVIoMTkzNCk7dmFyIEs9ei5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0'@;
put 'aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCks'@;
put 'dGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7Ty5SU0FQcml2YXRlS2V5PUs7dmFyIEw9ei5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVu'@;
put 'Y3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO08uUlNBUHVibGljS2V5PUw7dmFyIGs9ei5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2Jq'@;
put 'KHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoRSksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtPLlB1YmxpY0tleT1rO3ZhciBFPXouZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0'@;
put 'aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgi'@;
put 'ZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLGo9ei5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShFKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5v'@;
put 'Y3RzdHIoKSl9KTtPLlByaXZhdGVLZXk9ajt2YXIgVj16LmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0'@;
put 'Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIiku'@;
put 'c2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtPLkVuY3J5cHRlZFByaXZhdGVLZXk9Vjt2YXIgQj16LmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rp'@;
put 'b24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7Ty5E'@;
put 'U0FQcml2YXRlS2V5PUIsTy5EU0FwYXJhbT16LmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBZPXouZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJp'@;
put 'dmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoWCksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7Ty5FQ1ByaXZhdGVLZXk9WTt2YXIgWD16LmRlZmluZSgiRUNQ'@;
put 'YXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7Ty5zaWduYXR1cmU9ei5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9'@;
put 'LDE5MzQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk4MDkpLEs9ei5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLEw9ei5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVW'@;
put 'YWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksaz16LmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIiku'@;
put 'b2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLEU9ei5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51'@;
put 'c2UoayksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxqPXouZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YoTCl9KSxWPXouZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKGopfSks'@;
put 'Qj16LmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoVil9KX0pLFk9ei5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoSyksdGhpcy5rZXkoIm5vdEFmdGVy'@;
put 'IikudXNlKEspKX0pLFg9ei5kZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksVT16LmRl'@;
put 'ZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKGspLHRoaXMua2V5'@;
put 'KCJpc3N1ZXIiKS51c2UoQiksdGhpcy5rZXkoInZhbGlkaXR5IikudXNlKFkpLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZShFKSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRp'@;
put 'b25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoWCkub3B0aW9uYWwoKSl9KSxxPXouZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7'@;
put 'dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKFUpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoayksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7TS5leHBvcnRzPXF9LDc2MzE6KE0sTyxSKT0+e3ZhciB6PS9Qcm9j'@;
put 'LVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLEs9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLEw9'@;
put 'L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20saz1SKDMwNDgpLEU9Uig0Njk2KSxqPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihWLEIpe3ZhciBZLFg9Vi50b1N0cmluZygpLFU9'@;
put 'WC5tYXRjaCh6KTtpZihVKXt2YXIgcT0iYWVzIitVWzFdLGVlPWouZnJvbShVWzJdLCJoZXgiKSx0ZT1qLmZyb20oVVszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLG9lPWsoQixlZS5zbGljZSgwLDgpLHBhcnNlSW50KFVbMV0sMTApKS5rZXksc2U9W10saGU9RS5jcmVhdGVE'@;
put 'ZWNpcGhlcml2KHEsb2UsZWUpO3NlLnB1c2goaGUudXBkYXRlKHRlKSksc2UucHVzaChoZS5maW5hbCgpKSxZPWouY29uY2F0KHNlKX1lbHNle3ZhciB1ZT1YLm1hdGNoKEwpO1k9ai5mcm9tKHVlWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzpYLm1hdGNo'@;
put 'KEspWzFdLGRhdGE6WX19fSw5ODA6KE0sTyxSKT0+e3ZhciB6PVIoMjgxOCksSz1SKDI1NjIpLEw9Uig3NjMxKSxrPVIoNDY5NiksRT1SKDU2MzIpLGo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gVihCKXt2YXIgWTsib2JqZWN0IiE9dHlwZW9mIEJ8fGouaXNCdWZmZXIoQil8fChZPUIucGFz'@;
put 'c3BocmFzZSxCPUIua2V5KSwic3RyaW5nIj09dHlwZW9mIEImJihCPWouZnJvbShCKSk7dmFyIFgsVSxvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxxPUwoQixZKSxlZT1xLnRhZyx0ZT1xLmRhdGE7c3dpdGNoKGVlKXtjYXNlIkNFUlRJRklDQVRFIjpVPXouY2VydGlmaWNhdGUuZGVjb2Rl'@;
put 'KHRlLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChVfHwoVT16LlB1YmxpY0tleS5kZWNvZGUodGUsImRlciIpKSxYPVUuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4x'@;
put 'LjEiOnJldHVybiB6LlJTQVB1YmxpY0tleS5kZWNvZGUoVS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBVLnN1YmplY3RQcml2YXRlS2V5PVUuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6VX07Y2FzZSIxLjIuODQw'@;
put 'LjEwMDQwLjQuMSI6cmV0dXJuIFUuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PXouRFNBcGFyYW0uZGVjb2RlKFUuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOlUuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24g'@;
put 'a2V5IGlkICIrWCl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOnNlPVksaGU9KG9lPXRlPXouRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpKS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsdWU9cGFyc2VJbnQob2UuYWxnb3JpdGhtLmRlY3J5cHQu'@;
put 'a2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxjZT1LW29lLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sRz1vZS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsYj1vZS5zdWJqZWN0UHJpdmF0ZUtleSxEPXBhcnNlSW50KGNlLnNwbGl0KCItIilb'@;
put 'MV0sMTApLzgsSD1FLnBia2RmMlN5bmMoc2UsaGUsdWUsRCwic2hhMSIpLE49ay5jcmVhdGVEZWNpcGhlcml2KGNlLEgsRyksKGc9W10pLnB1c2goTi51cGRhdGUoYikpLGcucHVzaChOLmZpbmFsKCkpLHRlPWouY29uY2F0KGcpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChYPShVPXouUHJp'@;
put 'dmF0ZUtleS5kZWNvZGUodGUsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIHouUlNBUHJpdmF0ZUtleS5kZWNvZGUoVS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6'@;
put 'cmV0dXJue2N1cnZlOlUuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6ei5FQ1ByaXZhdGVLZXkuZGVjb2RlKFUuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBVLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9ei5E'@;
put 'U0FwYXJhbS5kZWNvZGUoVS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlUuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrWCl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIHouUlNBUHVibGlj'@;
put 'S2V5LmRlY29kZSh0ZSwiZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiB6LlJTQVByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOnouRFNBUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpfTtj'@;
put 'YXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KHRlPXouRUNQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTp0ZS5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK2VlKX19TS5l'@;
put 'eHBvcnRzPVYsVi5zaWduYXR1cmU9ei5zaWduYXR1cmV9LDQwOTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoayl7cmV0dXJuIi8iPT09ay5jaGFyQXQoMCl9ZnVuY3Rpb24gTChrKXt2YXIgRT0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStb'@;
put 'XFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLy5leGVjKGspLGo9RVsxXXx8IiIsVj0hKCFqfHwiOiI9PT1qLmNoYXJBdCgxKSk7cmV0dXJuISghRVsyXSYmIVYpfU0uZXhwb3J0cz0id2luMzIiPT09ei5wbGF0Zm9ybT9MOkssTS5leHBvcnRzLnBvc2l4PUssTS5leHBvcnRz'@;
put 'LndpbjMyPUx9LDE3MjU6TT0+e00uZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihPLFIpe08uc3VwZXJfPVIsTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOk8sZW51bWVyYWJsZTohMSx3cml0'@;
put 'YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmZ1bmN0aW9uKE8sUil7Ty5zdXBlcl89Ujt2YXIgej1mdW5jdGlvbigpe307ei5wcm90b3R5cGU9Ui5wcm90b3R5cGUsTy5wcm90b3R5cGU9bmV3IHosTy5wcm90b3R5cGUuY29uc3RydWN0b3I9T319LDI5NzQ6TT0+e00uZXhwb3J0cz1mdW5j'@;
put 'dGlvbihPKXtyZXR1cm4gTyYmIm9iamVjdCI9PXR5cGVvZiBPJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgTy5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5yZWFkVUludDh9fSw4MDU5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxM'@;
put 'PS8lW3NkaiVdL2c7Ty5mb3JtYXQ9ZnVuY3Rpb24oUyl7aWYoIXNlKFMpKXtmb3IodmFyIHY9W10scD0wO3A8YXJndW1lbnRzLmxlbmd0aDtwKyspdi5wdXNoKGooYXJndW1lbnRzW3BdKSk7cmV0dXJuIHYuam9pbigiICIpfXA9MTtmb3IodmFyIHc9YXJndW1lbnRzLEo9dy5sZW5ndGgsbmU9'@;
put 'U3RyaW5nKFMpLnJlcGxhY2UoTCxmdW5jdGlvbihmZSl7aWYoIiUlIj09PWZlKXJldHVybiIlIjtpZihwPj1KKXJldHVybiBmZTtzd2l0Y2goZmUpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcod1twKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKHdbcCsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVy'@;
put 'biBKU09OLnN0cmluZ2lmeSh3W3ArK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBmZX19KSxkZT13W3BdO3A8SjtkZT13WysrcF0pdGUoZGUpfHwhY2UoZGUpP25lKz0iICIrZGU6bmUrPSIgIitqKGRlKTtyZXR1cm4gbmV9LE8uZGVwcmVjYXRlPWZ1bmN0aW9u'@;
put 'KFMsdil7aWYoaGUoUi5nLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBPLmRlcHJlY2F0ZShTLHYpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT16Lm5vRGVwcmVjYXRpb24pcmV0dXJuIFM7dmFyIHA9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIXApe2lmKHoudGhy'@;
put 'b3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3Iodik7ei50cmFjZURlcHJlY2F0aW9uP0sudHJhY2Uodik6Sy5lcnJvcih2KSxwPSEwfXJldHVybiBTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBrLEU9e307ZnVuY3Rpb24gaihTLHYpe3ZhciBwPXtzZWVuOltdLHN0eWxpemU6Qn07'@;
put 'cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihwLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKHAuY29sb3JzPWFyZ3VtZW50c1szXSksZWUodik/cC5zaG93SGlkZGVuPXY6diYmTy5fZXh0ZW5kKHAsdiksaGUocC5zaG93SGlkZGVuKSYmKHAuc2hvd0hpZGRl'@;
put 'bj0hMSksaGUocC5kZXB0aCkmJihwLmRlcHRoPTIpLGhlKHAuY29sb3JzKSYmKHAuY29sb3JzPSExKSxoZShwLmN1c3RvbUluc3BlY3QpJiYocC5jdXN0b21JbnNwZWN0PSEwKSxwLmNvbG9ycyYmKHAuc3R5bGl6ZT1WKSxZKHAsUyxwLmRlcHRoKX1mdW5jdGlvbiBWKFMsdil7dmFyIHA9ai5z'@;
put 'dHlsZXNbdl07cmV0dXJuIHA/Ilx4MWJbIitqLmNvbG9yc1twXVswXSsibSIrUysiXHgxYlsiK2ouY29sb3JzW3BdWzFdKyJtIjpTfWZ1bmN0aW9uIEIoUyx2KXtyZXR1cm4gU31mdW5jdGlvbiBZKFMsdixwKXtpZihTLmN1c3RvbUluc3BlY3QmJnYmJkQodi5pbnNwZWN0KSYmdi5pbnNwZWN0'@;
put 'IT09Ty5pbnNwZWN0JiYoIXYuY29uc3RydWN0b3J8fHYuY29uc3RydWN0b3IucHJvdG90eXBlIT09dikpe3ZhciB3PXYuaW5zcGVjdChwLFMpO3JldHVybiBzZSh3KXx8KHc9WShTLHcscCkpLHd9dmFyIEo9ZnVuY3Rpb24oamUsV2Upe2lmKGhlKFdlKSlyZXR1cm4gamUuc3R5bGl6ZSgidW5k'@;
put 'ZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoc2UoV2UpKXt2YXIgS2U9IiciK0pTT04uc3RyaW5naWZ5KFdlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBqZS5zdHlsaXplKEtlLCJzdHJpbmciKX1yZXR1cm4g'@;
put 'b2UoV2UpP2plLnN0eWxpemUoIiIrV2UsIm51bWJlciIpOmVlKFdlKT9qZS5zdHlsaXplKCIiK1dlLCJib29sZWFuIik6dGUoV2UpP2plLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShTLHYpO2lmKEopcmV0dXJuIEo7dmFyIFdlLG5lPU9iamVjdC5rZXlzKHYpLGRlPShXZT17fSxu'@;
put 'ZS5mb3JFYWNoKGZ1bmN0aW9uKEtlLFllKXtXZVtLZV09ITB9KSxXZSk7aWYoUy5zaG93SGlkZGVuJiYobmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModikpLGIodikmJihuZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG5lLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBY'@;
put 'KHYpO2lmKDA9PT1uZS5sZW5ndGgpe2lmKEQodikpcmV0dXJuIFMuc3R5bGl6ZSgiW0Z1bmN0aW9uIisodi5uYW1lPyI6ICIrdi5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZih1ZSh2KSlyZXR1cm4gUy5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwicmVnZXhw'@;
put 'Iik7aWYoRyh2KSlyZXR1cm4gUy5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodiksImRhdGUiKTtpZihiKHYpKXJldHVybiBYKHYpfXZhciB4ZSxJZT0iIixGZT0hMSxPZT1bInsiLCJ9Il07cmV0dXJuIHEodikmJihGZT0hMCxPZT1bIlsiLCJdIl0pLEQodikmJihJZT0i'@;
put 'IFtGdW5jdGlvbiIrKHYubmFtZT8iOiAiK3YubmFtZToiIikrIl0iKSx1ZSh2KSYmKEllPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikpLEcodikmJihJZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2KSksYih2KSYmKEllPSIgIitYKHYpKSwwIT09'@;
put 'bmUubGVuZ3RofHxGZSYmMCE9di5sZW5ndGg/cDwwP3VlKHYpP1Muc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodiksInJlZ2V4cCIpOlMuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KFMuc2Vlbi5wdXNoKHYpLHhlPUZlP2Z1bmN0aW9uKGplLFdlLEtlLFll'@;
put 'LFFlKXtmb3IodmFyIGx0PVtdLFBlPTAsYmU9V2UubGVuZ3RoO1BlPGJlOysrUGUpQyhXZSxTdHJpbmcoUGUpKT9sdC5wdXNoKFUoamUsV2UsS2UsWWUsU3RyaW5nKFBlKSwhMCkpOmx0LnB1c2goIiIpO3JldHVybiBRZS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtBZS5tYXRjaCgvXlxkKyQvKXx8'@;
put 'bHQucHVzaChVKGplLFdlLEtlLFllLEFlLCEwKSl9KSxsdH0oUyx2LHAsZGUsbmUpOm5lLm1hcChmdW5jdGlvbihqZSl7cmV0dXJuIFUoUyx2LHAsZGUsamUsRmUpfSksUy5zZWVuLnBvcCgpLGZ1bmN0aW9uKGplLFdlLEtlKXtyZXR1cm4gamUucmVkdWNlKGZ1bmN0aW9uKFFlLGx0KXtyZXR1'@;
put 'cm4gbHQuaW5kZXhPZigiXG4iKSxRZStsdC5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk+NjA/S2VbMF0rKCIiPT09V2U/IiI6V2UrIlxuICIpKyIgIitqZS5qb2luKCIsXG4gICIpKyIgIitLZVsxXTpLZVswXStXZSsiICIramUuam9pbigiLCAiKSsiICIrS2Vb'@;
put 'MV19KHhlLEllLE9lKSk6T2VbMF0rSWUrT2VbMV19ZnVuY3Rpb24gWChTKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUykrIl0ifWZ1bmN0aW9uIFUoUyx2LHAsdyxKLG5lKXt2YXIgZGUsZmUseGU7aWYoKHhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0'@;
put 'b3IodixKKXx8e3ZhbHVlOnZbSl19KS5nZXQ/ZmU9Uy5zdHlsaXplKHhlLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6eGUuc2V0JiYoZmU9Uy5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksQyh3LEopfHwoZGU9IlsiK0orIl0iKSxmZXx8KFMuc2Vl'@;
put 'bi5pbmRleE9mKHhlLnZhbHVlKTwwPyhmZT10ZShwKT9ZKFMseGUudmFsdWUsbnVsbCk6WShTLHhlLnZhbHVlLHAtMSkpLmluZGV4T2YoIlxuIik+LTEmJihmZT1uZT9mZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oSWUpe3JldHVybiIgICIrSWV9KS5qb2luKCJcbiIpLnN1YnN0cigyKToi'@;
put 'XG4iK2ZlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihJZSl7cmV0dXJuIiAgICIrSWV9KS5qb2luKCJcbiIpKTpmZT1TLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLGhlKGRlKSl7aWYobmUmJkoubWF0Y2goL15cZCskLykpcmV0dXJuIGZlOyhkZT1KU09OLnN0cmluZ2lmeSgi'@;
put 'IitKKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oZGU9ZGUuc3Vic3RyKDEsZGUubGVuZ3RoLTIpLGRlPVMuc3R5bGl6ZShkZSwibmFtZSIpKTooZGU9ZGUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywi'@;
put 'JyIpLGRlPVMuc3R5bGl6ZShkZSwic3RyaW5nIikpfXJldHVybiBkZSsiOiAiK2ZlfWZ1bmN0aW9uIHEoUyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoUyl9ZnVuY3Rpb24gZWUoUyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgU31mdW5jdGlvbiB0ZShTKXtyZXR1cm4gbnVsbD09PVN9ZnVuY3Rp'@;
put 'b24gb2UoUyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBTfWZ1bmN0aW9uIHNlKFMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgU31mdW5jdGlvbiBoZShTKXtyZXR1cm4gdm9pZCAwPT09U31mdW5jdGlvbiB1ZShTKXtyZXR1cm4gY2UoUykmJiJbb2JqZWN0IFJlZ0V4cF0iPT09SChTKX1mdW5j'@;
put 'dGlvbiBjZShTKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIFMmJm51bGwhPT1TfWZ1bmN0aW9uIEcoUyl7cmV0dXJuIGNlKFMpJiYiW29iamVjdCBEYXRlXSI9PT1IKFMpfWZ1bmN0aW9uIGIoUyl7cmV0dXJuIGNlKFMpJiYoIltvYmplY3QgRXJyb3JdIj09PUgoUyl8fFMgaW5zdGFuY2VvZiBF'@;
put 'cnJvcil9ZnVuY3Rpb24gRChTKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU31mdW5jdGlvbiBIKFMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUyl9ZnVuY3Rpb24gTihTKXtyZXR1cm4gUzwxMD8iMCIrUy50b1N0cmluZygxMCk6Uy50b1N0cmluZygxMCl9Ty5k'@;
put 'ZWJ1Z2xvZz1mdW5jdGlvbihTKXtpZihoZShrKSYmKGs9ei5lbnYuTk9ERV9ERUJVR3x8IiIpLFM9Uy50b1VwcGVyQ2FzZSgpLCFFW1NdKWlmKG5ldyBSZWdFeHAoIlxcYiIrUysiXFxiIiwiaSIpLnRlc3Qoaykpe3ZhciB2PXoucGlkO0VbU109ZnVuY3Rpb24oKXt2YXIgcD1PLmZvcm1hdC5h'@;
put 'cHBseShPLGFyZ3VtZW50cyk7Sy5lcnJvcigiJXMgJWQ6ICVzIixTLHYscCl9fWVsc2UgRVtTXT1mdW5jdGlvbigpe307cmV0dXJuIEVbU119LE8uaW5zcGVjdD1qLGouY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hp'@;
put 'dGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxqLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJv'@;
put 'b2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LE8uaXNBcnJheT1xLE8uaXNCb29sZWFuPWVlLE8uaXNOdWxsPXRlLE8uaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24oUyl7cmV0dXJu'@;
put 'IG51bGw9PVN9LE8uaXNOdW1iZXI9b2UsTy5pc1N0cmluZz1zZSxPLmlzU3ltYm9sPWZ1bmN0aW9uKFMpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgU30sTy5pc1VuZGVmaW5lZD1oZSxPLmlzUmVnRXhwPXVlLE8uaXNPYmplY3Q9Y2UsTy5pc0RhdGU9RyxPLmlzRXJyb3I9YixPLmlzRnVuY3Rp'@;
put 'b249RCxPLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKFMpe3JldHVybiBudWxsPT09U3x8ImJvb2xlYW4iPT10eXBlb2YgU3x8Im51bWJlciI9PXR5cGVvZiBTfHwic3RyaW5nIj09dHlwZW9mIFN8fCJzeW1ib2wiPT10eXBlb2YgU3x8dm9pZCAwPT09U30sTy5pc0J1ZmZlcj1SKDI5NzQpO3ZhciBn'@;
put 'PVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gQyhTLHYpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyx2KX1PLmxvZz1mdW5jdGlvbigpe3ZhciBTLHY7'@;
put 'Sy5sb2coIiVzIC0gJXMiLCh2PVtOKChTPW5ldyBEYXRlKS5nZXRIb3VycygpKSxOKFMuZ2V0TWludXRlcygpKSxOKFMuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFtTLmdldERhdGUoKSxnW1MuZ2V0TW9udGgoKV0sdl0uam9pbigiICIpKSxPLmZvcm1hdC5hcHBseShPLGFyZ3VtZW50cykp'@;
put 'fSxPLmluaGVyaXRzPVIoMTcyNSksTy5fZXh0ZW5kPWZ1bmN0aW9uKFMsdil7aWYoIXZ8fCFjZSh2KSlyZXR1cm4gUztmb3IodmFyIHA9T2JqZWN0LmtleXModiksdz1wLmxlbmd0aDt3LS07KVNbcFt3XV09dltwW3ddXTtyZXR1cm4gU319LDI1MjA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1SKDQxNTUpLEs9IndpbjMyIj09PXoucGxhdGZvcm0sTD1SKDgwNTkpO2Z1bmN0aW9uIGsob2Usc2Upe2Zvcih2YXIgaGU9W10sdWU9MDt1ZTxvZS5sZW5ndGg7dWUrKyl7dmFyIGNlPW9lW3VlXTtjZSYmIi4iIT09Y2UmJigiLi4iPT09Y2U/aGUubGVuZ3RoJiYiLi4iIT09aGVbaGUu'@;
put 'bGVuZ3RoLTFdP2hlLnBvcCgpOnNlJiZoZS5wdXNoKCIuLiIpOmhlLnB1c2goY2UpKX1yZXR1cm4gaGV9ZnVuY3Rpb24gRShvZSl7Zm9yKHZhciBzZT1vZS5sZW5ndGgtMSxoZT0wO2hlPD1zZSYmIW9lW2hlXTtoZSsrKTtmb3IodmFyIHVlPXNlO3VlPj0wJiYhb2VbdWVdO3VlLS0pO3JldHVy'@;
put 'biAwPT09aGUmJnVlPT09c2U/b2U6aGU+dWU/W106b2Uuc2xpY2UoaGUsdWUrMSl9dmFyIGo9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sVj0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlte'@;
put 'LlwvXFxdKnwpKSg/OltcXFwvXSopJC8sQj17fTtmdW5jdGlvbiBZKG9lKXt2YXIgc2U9ai5leGVjKG9lKSxoZT0oc2VbMV18fCIiKSsoc2VbMl18fCIiKSxjZT1WLmV4ZWMoc2VbM118fCIiKTtyZXR1cm5baGUsY2VbMV0sY2VbMl0sY2VbM11dfWZ1bmN0aW9uIFgob2Upe3ZhciBzZT1qLmV4'@;
put 'ZWMob2UpLGhlPXNlWzFdfHwiIix1ZT0hIWhlJiYiOiIhPT1oZVsxXTtyZXR1cm57ZGV2aWNlOmhlLGlzVW5jOnVlLGlzQWJzb2x1dGU6dWV8fCEhc2VbMl0sdGFpbDpzZVszXX19ZnVuY3Rpb24gVShvZSl7cmV0dXJuIlxcXFwiK29lLnJlcGxhY2UoL15bXFxcL10rLywiIikucmVwbGFjZSgv'@;
put 'W1xcXC9dKy9nLCJcXCIpfUIucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9IiIsaGU9ITEsdWU9YXJndW1lbnRzLmxlbmd0aC0xO3VlPj0tMTt1ZS0tKXt2YXIgY2U7aWYodWU+PTA/Y2U9YXJndW1lbnRzW3VlXTpvZT8oY2U9ei5lbnZbIj0iK29lXSkmJmNlLnN1YnN0cigw'@;
put 'LDMpLnRvTG93ZXJDYXNlKCk9PT1vZS50b0xvd2VyQ2FzZSgpKyJcXCJ8fChjZT1vZSsiXFwiKTpjZT16LmN3ZCgpLCFMLmlzU3RyaW5nKGNlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKGNlKXt2YXIgRz1YKGNl'@;
put 'KSxiPUcuZGV2aWNlLEQ9Ry5pc1VuYyxIPUcuaXNBYnNvbHV0ZSxOPUcudGFpbDtpZigoIWJ8fCFvZXx8Yi50b0xvd2VyQ2FzZSgpPT09b2UudG9Mb3dlckNhc2UoKSkmJihvZXx8KG9lPWIpLGhlfHwoc2U9TisiXFwiK3NlLGhlPUgpLG9lJiZoZSkpYnJlYWt9fXJldHVybiBEJiYob2U9VShv'@;
put 'ZSkpLG9lKyhoZT8iXFwiOiIiKSsoc2U9ayhzZS5zcGxpdCgvW1xcXC9dKy8pLCFoZSkuam9pbigiXFwiKSl8fCIuIn0sQi5ub3JtYWxpemU9ZnVuY3Rpb24ob2Upe3ZhciBzZT1YKG9lKSxoZT1zZS5kZXZpY2UsdWU9c2UuaXNVbmMsY2U9c2UuaXNBYnNvbHV0ZSxHPXNlLnRhaWwsYj0vW1xc'@;
put 'XC9dJC8udGVzdChHKTtyZXR1cm4oRz1rKEcuc3BsaXQoL1tcXFwvXSsvKSwhY2UpLmpvaW4oIlxcIikpfHxjZXx8KEc9Ii4iKSxHJiZiJiYoRys9IlxcIiksdWUmJihoZT1VKGhlKSksaGUrKGNlPyJcXCI6IiIpK0d9LEIuaXNBYnNvbHV0ZT1mdW5jdGlvbihvZSl7cmV0dXJuIFgob2UpLmlz'@;
put 'QWJzb2x1dGV9LEIuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgb2U9W10sc2U9MDtzZTxhcmd1bWVudHMubGVuZ3RoO3NlKyspe3ZhciBoZT1hcmd1bWVudHNbc2VdO2lmKCFMLmlzU3RyaW5nKGhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUg'@;
put 'c3RyaW5ncyIpO2hlJiZvZS5wdXNoKGhlKX12YXIgdWU9b2Uuam9pbigiXFwiKTtyZXR1cm4vXltcXFwvXXsyfVteXFxcL10vLnRlc3Qob2VbMF0pfHwodWU9dWUucmVwbGFjZSgvXltcXFwvXXsyLH0vLCJcXCIpKSxCLm5vcm1hbGl6ZSh1ZSl9LEIucmVsYXRpdmU9ZnVuY3Rpb24ob2Usc2Up'@;
put 'e29lPUIucmVzb2x2ZShvZSksc2U9Qi5yZXNvbHZlKHNlKTtmb3IodmFyIGhlPW9lLnRvTG93ZXJDYXNlKCksdWU9c2UudG9Mb3dlckNhc2UoKSxjZT1FKHNlLnNwbGl0KCJcXCIpKSxHPUUoaGUuc3BsaXQoIlxcIikpLGI9RSh1ZS5zcGxpdCgiXFwiKSksRD1NYXRoLm1pbihHLmxlbmd0aCxi'@;
put 'Lmxlbmd0aCksSD1ELE49MDtOPEQ7TisrKWlmKEdbTl0hPT1iW05dKXtIPU47YnJlYWt9aWYoMD09SClyZXR1cm4gc2U7dmFyIGc9W107Zm9yKE49SDtOPEcubGVuZ3RoO04rKylnLnB1c2goIi4uIik7cmV0dXJuKGc9Zy5jb25jYXQoY2Uuc2xpY2UoSCkpKS5qb2luKCJcXCIpfSxCLl9tYWtl'@;
put 'TG9uZz1mdW5jdGlvbihvZSl7aWYoIUwuaXNTdHJpbmcob2UpKXJldHVybiBvZTtpZighb2UpcmV0dXJuIiI7dmFyIHNlPUIucmVzb2x2ZShvZSk7cmV0dXJuL15bYS16QS1aXVw6XFwvLnRlc3Qoc2UpPyJcXFxcP1xcIitzZTovXlxcXFxbXj8uXS8udGVzdChzZSk/IlxcXFw/XFxVTkNcXCIr'@;
put 'c2Uuc3Vic3RyaW5nKDIpOm9lfSxCLmRpcm5hbWU9ZnVuY3Rpb24ob2Upe3ZhciBzZT1ZKG9lKSxoZT1zZVswXSx1ZT1zZVsxXTtyZXR1cm4gaGV8fHVlPyh1ZSYmKHVlPXVlLnN1YnN0cigwLHVlLmxlbmd0aC0xKSksaGUrdWUpOiIuIn0sQi5iYXNlbmFtZT1mdW5jdGlvbihvZSxzZSl7dmFy'@;
put 'IGhlPVkob2UpWzJdO3JldHVybiBzZSYmaGUuc3Vic3RyKC0xKnNlLmxlbmd0aCk9PT1zZSYmKGhlPWhlLnN1YnN0cigwLGhlLmxlbmd0aC1zZS5sZW5ndGgpKSxoZX0sQi5leHRuYW1lPWZ1bmN0aW9uKG9lKXtyZXR1cm4gWShvZSlbM119LEIuZm9ybWF0PWZ1bmN0aW9uKG9lKXtpZighTC5p'@;
put 'c09iamVjdChvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIG9lKTtpZighTC5pc1N0cmluZyhvZS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBi'@;
put 'ZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBvZS5yb290KTt2YXIgaGU9b2UuZGlyLHVlPW9lLmJhc2V8fCIiO3JldHVybiBoZT9oZVtoZS5sZW5ndGgtMV09PT1CLnNlcD9oZSt1ZTpoZStCLnNlcCt1ZTp1ZX0sQi5wYXJzZT1mdW5jdGlvbihvZSl7aWYoIUwuaXNTdHJp'@;
put 'bmcob2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIG9lKTt2YXIgc2U9WShvZSk7aWYoIXNlfHw0IT09c2UubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitvZSsiJyIp'@;
put 'O3JldHVybntyb290OnNlWzBdLGRpcjpzZVswXStzZVsxXS5zbGljZSgwLC0xKSxiYXNlOnNlWzJdLGV4dDpzZVszXSxuYW1lOnNlWzJdLnNsaWNlKDAsc2VbMl0ubGVuZ3RoLXNlWzNdLmxlbmd0aCl9fSxCLnNlcD0iXFwiLEIuZGVsaW1pdGVyPSI7Ijt2YXIgcT0vXihcLz98KShbXHNcU10q'@;
put 'PykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8sZWU9e307ZnVuY3Rpb24gdGUob2Upe3JldHVybiBxLmV4ZWMob2UpLnNsaWNlKDEpfWVlLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIG9lPSIiLHNlPSExLGhlPWFyZ3VtZW50cy5sZW5ndGgtMTtoZT49'@;
put 'LTEmJiFzZTtoZS0tKXt2YXIgdWU9aGU+PTA/YXJndW1lbnRzW2hlXTp6LmN3ZCgpO2lmKCFMLmlzU3RyaW5nKHVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO3VlJiYob2U9dWUrIi8iK29lLHNlPSIvIj09PXVlWzBd'@;
put 'KX1yZXR1cm4oc2U/Ii8iOiIiKSsob2U9ayhvZS5zcGxpdCgiLyIpLCFzZSkuam9pbigiLyIpKXx8Ii4ifSxlZS5ub3JtYWxpemU9ZnVuY3Rpb24ob2Upe3ZhciBzZT1lZS5pc0Fic29sdXRlKG9lKSxoZT1vZSYmIi8iPT09b2Vbb2UubGVuZ3RoLTFdO3JldHVybihvZT1rKG9lLnNwbGl0KCIv'@;
put 'IiksIXNlKS5qb2luKCIvIikpfHxzZXx8KG9lPSIuIiksb2UmJmhlJiYob2UrPSIvIiksKHNlPyIvIjoiIikrb2V9LGVlLmlzQWJzb2x1dGU9ZnVuY3Rpb24ob2Upe3JldHVybiIvIj09PW9lLmNoYXJBdCgwKX0sZWUuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9MDtzZTxhcmd1'@;
put 'bWVudHMubGVuZ3RoO3NlKyspe3ZhciBoZT1hcmd1bWVudHNbc2VdO2lmKCFMLmlzU3RyaW5nKGhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2hlJiYob2UrPW9lPyIvIitoZTpoZSl9cmV0dXJuIGVlLm5vcm1hbGl6ZShv'@;
put 'ZSl9LGVlLnJlbGF0aXZlPWZ1bmN0aW9uKG9lLHNlKXtvZT1lZS5yZXNvbHZlKG9lKS5zdWJzdHIoMSksc2U9ZWUucmVzb2x2ZShzZSkuc3Vic3RyKDEpO2Zvcih2YXIgaGU9RShvZS5zcGxpdCgiLyIpKSx1ZT1FKHNlLnNwbGl0KCIvIikpLGNlPU1hdGgubWluKGhlLmxlbmd0aCx1ZS5sZW5n'@;
put 'dGgpLEc9Y2UsYj0wO2I8Y2U7YisrKWlmKGhlW2JdIT09dWVbYl0pe0c9YjticmVha312YXIgRD1bXTtmb3IoYj1HO2I8aGUubGVuZ3RoO2IrKylELnB1c2goIi4uIik7cmV0dXJuKEQ9RC5jb25jYXQodWUuc2xpY2UoRykpKS5qb2luKCIvIil9LGVlLl9tYWtlTG9uZz1mdW5jdGlvbihvZSl7'@;
put 'cmV0dXJuIG9lfSxlZS5kaXJuYW1lPWZ1bmN0aW9uKG9lKXt2YXIgc2U9dGUob2UpLGhlPXNlWzBdLHVlPXNlWzFdO3JldHVybiBoZXx8dWU/KHVlJiYodWU9dWUuc3Vic3RyKDAsdWUubGVuZ3RoLTEpKSxoZSt1ZSk6Ii4ifSxlZS5iYXNlbmFtZT1mdW5jdGlvbihvZSxzZSl7dmFyIGhlPXRl'@;
put 'KG9lKVsyXTtyZXR1cm4gc2UmJmhlLnN1YnN0cigtMSpzZS5sZW5ndGgpPT09c2UmJihoZT1oZS5zdWJzdHIoMCxoZS5sZW5ndGgtc2UubGVuZ3RoKSksaGV9LGVlLmV4dG5hbWU9ZnVuY3Rpb24ob2Upe3JldHVybiB0ZShvZSlbM119LGVlLmZvcm1hdD1mdW5jdGlvbihvZSl7aWYoIUwuaXNP'@;
put 'YmplY3Qob2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBvZSk7aWYoIUwuaXNTdHJpbmcob2Uucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUg'@;
put 'YSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2Ygb2Uucm9vdCk7cmV0dXJuKG9lLmRpcj9vZS5kaXIrZWUuc2VwOiIiKSsob2UuYmFzZXx8IiIpfSxlZS5wYXJzZT1mdW5jdGlvbihvZSl7aWYoIUwuaXNTdHJpbmcob2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAn'@;
put 'cGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIG9lKTt2YXIgc2U9dGUob2UpO2lmKCFzZXx8NCE9PXNlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrb2UrIiciKTtyZXR1cm4gc2VbMV09c2VbMV18fCIiLHNlWzJdPXNlWzJdfHwi'@;
put 'IixzZVszXT1zZVszXXx8IiIse3Jvb3Q6c2VbMF0sZGlyOnNlWzBdK3NlWzFdLnNsaWNlKDAsLTEpLGJhc2U6c2VbMl0sZXh0OnNlWzNdLG5hbWU6c2VbMl0uc2xpY2UoMCxzZVsyXS5sZW5ndGgtc2VbM10ubGVuZ3RoKX19LGVlLnNlcD0iLyIsZWUuZGVsaW1pdGVyPSI6IixNLmV4cG9ydHM9'@;
put 'Sz9COmVlLE0uZXhwb3J0cy5wb3NpeD1lZSxNLmV4cG9ydHMud2luMzI9Qn0sNTYzMjooTSxPLFIpPT57Ty5wYmtkZjI9Uig4NjM4KSxPLnBia2RmMlN5bmM9UigxMjU3KX0sODYzODooTSxPLFIpPT57dmFyIHosSyxMPVIoOTUwOSkuQnVmZmVyLGs9Uig3MzU3KSxFPVIoMjM2OCksaj1SKDEy'@;
put 'NTcpLFY9Uig3Nzc3KSxCPVIuZy5jcnlwdG8mJlIuZy5jcnlwdG8uc3VidGxlLFk9e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwi'@;
put 'c2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LFg9W107ZnVuY3Rpb24gVSgpe3JldHVybiBLfHwoSz1SLmcucHJvY2VzcyYmUi5nLnByb2Nlc3MubmV4dFRpY2s/Ui5nLnByb2Nlc3MubmV4dFRpY2s6Ui5nLnF1ZXVlTWljcm90YXNrP1IuZy5xdWV1ZU1pY3JvdGFzazpSLmcu'@;
put 'c2V0SW1tZWRpYXRlP1IuZy5zZXRJbW1lZGlhdGU6Ui5nLnNldFRpbWVvdXQpfWZ1bmN0aW9uIHEoZWUsdGUsb2Usc2UsaGUpe3JldHVybiBCLmltcG9ydEtleSgicmF3IixlZSx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBCLmRl'@;
put 'cml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDp0ZSxpdGVyYXRpb25zOm9lLGhhc2g6e25hbWU6aGV9fSx1ZSxzZTw8Myl9KS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gTC5mcm9tKHVlKX0pfU0uZXhwb3J0cz1mdW5jdGlvbihlZSx0ZSxvZSxzZSxoZSx1ZSl7ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGhlJiYodWU9aGUsaGU9dm9pZCAwKTt2YXIgRyxiLGNlPVlbKGhlPWhlfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKGNlJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5nLlByb21pc2Upe2lmKGsob2Usc2UpLGVlPVYoZWUsRSwiUGFzc3dvcmQiKSx0ZT1WKHRlLEUsIlNhbHQiKSwiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgdWUpdGhyb3cgbmV3IEVycm9yKCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTtHPWZ1bmN0aW9uKEcpe2lmKFIuZy5wcm9jZXNzJiYhUi5nLnByb2Nlc3MuYnJvd3Nlcnx8IUJ8fCFCLmltcG9ydEtleXx8IUIuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlz'@;
put 'ZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT1YW0ddKXJldHVybiBYW0ddO3ZhciBiPXEoej16fHxMLmFsbG9jKDgpLHosMTAsMTI4LEcpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4gWFtHXT1iLGJ9KGNlKS50aGVuKGZ1bmN0'@;
put 'aW9uKEcpe3JldHVybiBHP3EoZWUsdGUsb2Usc2UsY2UpOmooZWUsdGUsb2Usc2UsaGUpfSksYj11ZSxHLnRoZW4oZnVuY3Rpb24oRCl7VSgpKGZ1bmN0aW9uKCl7YihudWxsLEQpfSl9LGZ1bmN0aW9uKEQpe1UoKShmdW5jdGlvbigpe2IoRCl9KX0pfWVsc2UgVSgpKGZ1bmN0aW9uKCl7dmFy'@;
put 'IEc7dHJ5e0c9aihlZSx0ZSxvZSxzZSxoZSl9Y2F0Y2goYil7cmV0dXJuIHVlKGIpfXVlKG51bGwsRyl9KX19LDIzNjg6KE0sTyxSKT0+e3ZhciB6LEs9Uig0MTU1KTt6PVIuZy5wcm9jZXNzJiZSLmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Ui5nLnByb2Nlc3MmJlIuZy5wcm9jZXNzLnZl'@;
put 'cnNpb24/cGFyc2VJbnQoSy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04IixNLmV4cG9ydHM9en0sNzM1NzpNPT57dmFyIE89TWF0aC5wb3coMiwzMCktMTtNLmV4cG9ydHM9ZnVuY3Rpb24oUix6KXtpZigibnVtYmVyIiE9dHlw'@;
put 'ZW9mIFIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihSPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIHopdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIi'@;
put 'KTtpZih6PDB8fHo+T3x8eiE9eil0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sMTI1NzooTSxPLFIpPT57dmFyIHo9Uig4MDI4KSxLPVIoOTc4NSksTD1SKDkwNzIpLGs9Uig5NTA5KS5CdWZmZXIsRT1SKDczNTcpLGo9UigyMzY4KSxWPVIoNzc3NyksQj1rLmFsbG9j'@;
put 'KDEyOCksWT17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIFgoVSxxLGVlKXt2YXIgRyx0ZT0icm1kMTYwIj09PShHPVUpfHwicmlwZW1kMTYwIj09PUc/ZnVuY3Rpb24gRChIKXty'@;
put 'ZXR1cm4obmV3IEspLnVwZGF0ZShIKS5kaWdlc3QoKX06Im1kNSI9PT1HP3o6ZnVuY3Rpb24gYihIKXtyZXR1cm4gTChHKS51cGRhdGUoSCkuZGlnZXN0KCl9LG9lPSJzaGE1MTIiPT09VXx8InNoYTM4NCI9PT1VPzEyODo2NDtxLmxlbmd0aD5vZT9xPXRlKHEpOnEubGVuZ3RoPG9lJiYocT1r'@;
put 'LmNvbmNhdChbcSxCXSxvZSkpO2Zvcih2YXIgc2U9ay5hbGxvY1Vuc2FmZShvZStZW1VdKSxoZT1rLmFsbG9jVW5zYWZlKG9lK1lbVV0pLHVlPTA7dWU8b2U7dWUrKylzZVt1ZV09NTRecVt1ZV0saGVbdWVdPTkyXnFbdWVdO3ZhciBjZT1rLmFsbG9jVW5zYWZlKG9lK2VlKzQpO3NlLmNvcHko'@;
put 'Y2UsMCwwLG9lKSx0aGlzLmlwYWQxPWNlLHRoaXMuaXBhZDI9c2UsdGhpcy5vcGFkPWhlLHRoaXMuYWxnPVUsdGhpcy5ibG9ja3NpemU9b2UsdGhpcy5oYXNoPXRlLHRoaXMuc2l6ZT1ZW1VdfVgucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihVLHEpe3JldHVybiBVLmNvcHkocSx0aGlzLmJsb2Nr'@;
put 'c2l6ZSksdGhpcy5oYXNoKHEpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sTS5leHBvcnRzPWZ1bmN0aW9uKFUscSxlZSx0ZSxvZSl7RShlZSx0ZSk7dmFyIHNlPW5ldyBYKG9lPW9lfHwic2hhMSIsVT1WKFUsaiwiUGFzc3dvcmQiKSwocT1W'@;
put 'KHEsaiwiU2FsdCIpKS5sZW5ndGgpLGhlPWsuYWxsb2NVbnNhZmUodGUpLHVlPWsuYWxsb2NVbnNhZmUocS5sZW5ndGgrNCk7cS5jb3B5KHVlLDAsMCxxLmxlbmd0aCk7Zm9yKHZhciBjZT0wLEc9WVtvZV0sYj1NYXRoLmNlaWwodGUvRyksRD0xO0Q8PWI7RCsrKXt1ZS53cml0ZVVJbnQzMkJF'@;
put 'KEQscS5sZW5ndGgpO2Zvcih2YXIgSD1zZS5ydW4odWUsc2UuaXBhZDEpLE49SCxnPTE7ZzxlZTtnKyspe049c2UucnVuKE4sc2UuaXBhZDIpO2Zvcih2YXIgQz0wO0M8RztDKyspSFtDXV49TltDXX1ILmNvcHkoaGUsY2UpLGNlKz1HfXJldHVybiBoZX19LDc3Nzc6KE0sTyxSKT0+e3ZhciB6'@;
put 'PVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihLLEwsayl7aWYoei5pc0J1ZmZlcihLKSlyZXR1cm4gSztpZigic3RyaW5nIj09dHlwZW9mIEspcmV0dXJuIHouZnJvbShLLEwpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhLKSlyZXR1cm4gei5mcm9tKEsuYnVmZmVyKTt0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKGsrIiBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSw0MTU1Ok09Pnt2YXIgTyxSLHo9TS5leHBvcnRzPXt9O2Z1bmN0aW9uIEsoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRl'@;
put 'ZmluZWQiKX1mdW5jdGlvbiBMKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBrKGVlKXtpZihPPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlZSwwKTtpZigoTz09PUt8fCFPKSYmc2V0VGltZW91dClyZXR1cm4g'@;
put 'Tz1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZWUsMCk7dHJ5e3JldHVybiBPKGVlLDApfWNhdGNoe3RyeXtyZXR1cm4gTy5jYWxsKG51bGwsZWUsMCl9Y2F0Y2h7cmV0dXJuIE8uY2FsbCh0aGlzLGVlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e089ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/'@;
put 'c2V0VGltZW91dDpLfWNhdGNoe089S310cnl7Uj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpMfWNhdGNoe1I9TH19KCk7dmFyIEUsaj1bXSxWPSExLEI9LTE7ZnVuY3Rpb24gWSgpe1YmJkUmJihWPSExLEUubGVuZ3RoP2o9RS5jb25jYXQoaik6Qj0tMSxq'@;
put 'Lmxlbmd0aCYmWCgpKX1mdW5jdGlvbiBYKCl7aWYoIVYpe3ZhciBlZT1rKFkpO1Y9ITA7Zm9yKHZhciB0ZT1qLmxlbmd0aDt0ZTspe2ZvcihFPWosaj1bXTsrK0I8dGU7KUUmJkVbQl0ucnVuKCk7Qj0tMSx0ZT1qLmxlbmd0aH1FPW51bGwsVj0hMSxmdW5jdGlvbihvZSl7aWYoUj09PWNsZWFy'@;
put 'VGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KG9lKTtpZigoUj09PUx8fCFSKSYmY2xlYXJUaW1lb3V0KXJldHVybiBSPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQob2UpO3RyeXtyZXR1cm4gUihvZSl9Y2F0Y2h7dHJ5e3JldHVybiBSLmNhbGwobnVsbCxvZSl9Y2F0Y2h7cmV0dXJuIFIu'@;
put 'Y2FsbCh0aGlzLG9lKX19fShlZSl9fWZ1bmN0aW9uIFUoZWUsdGUpe3RoaXMuZnVuPWVlLHRoaXMuYXJyYXk9dGV9ZnVuY3Rpb24gcSgpe316Lm5leHRUaWNrPWZ1bmN0aW9uKGVlKXt2YXIgdGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZv'@;
put 'cih2YXIgb2U9MTtvZTxhcmd1bWVudHMubGVuZ3RoO29lKyspdGVbb2UtMV09YXJndW1lbnRzW29lXTtqLnB1c2gobmV3IFUoZWUsdGUpKSwxIT09ai5sZW5ndGh8fFZ8fGsoWCl9LFUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LHou'@;
put 'dGl0bGU9ImJyb3dzZXIiLHouYnJvd3Nlcj0hMCx6LmVudj17fSx6LmFyZ3Y9W10sei52ZXJzaW9uPSIiLHoudmVyc2lvbnM9e30sei5vbj1xLHouYWRkTGlzdGVuZXI9cSx6Lm9uY2U9cSx6Lm9mZj1xLHoucmVtb3ZlTGlzdGVuZXI9cSx6LnJlbW92ZUFsbExpc3RlbmVycz1xLHouZW1pdD1x'@;
put 'LHoucHJlcGVuZExpc3RlbmVyPXEsei5wcmVwZW5kT25jZUxpc3RlbmVyPXEsei5saXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3JldHVybltdfSx6LmJpbmRpbmc9ZnVuY3Rpb24oZWUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sei5jd2Q9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4iLyJ9LHouY2hkaXI9ZnVuY3Rpb24oZWUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHoudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDYyNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM2ODkpLEs9'@;
put 'e307Sy5ydWxlcz1SKDM3MDQpLm1hcChmdW5jdGlvbihMKXtyZXR1cm57cnVsZTpMLHN1ZmZpeDpMLnJlcGxhY2UoL14oXCpcLnxcISkvLCIiKSxwdW55U3VmZml4Oi0xLHdpbGRjYXJkOiIqIj09PUwuY2hhckF0KDApLGV4Y2VwdGlvbjoiISI9PT1MLmNoYXJBdCgwKX19KSxLLmVuZHNXaXRo'@;
put 'PWZ1bmN0aW9uKEwsayl7cmV0dXJuLTEhPT1MLmluZGV4T2YoayxMLmxlbmd0aC1rLmxlbmd0aCl9LEsuZmluZFJ1bGU9ZnVuY3Rpb24oTCl7dmFyIGs9ei50b0FTQ0lJKEwpO3JldHVybiBLLnJ1bGVzLnJlZHVjZShmdW5jdGlvbihFLGope3JldHVybi0xPT09ai5wdW55U3VmZml4JiYoai5w'@;
put 'dW55U3VmZml4PXoudG9BU0NJSShqLnN1ZmZpeCkpLEsuZW5kc1dpdGgoaywiLiIrai5wdW55U3VmZml4KXx8az09PWoucHVueVN1ZmZpeD9qOkV9LG51bGwpfSxPLmVycm9yQ29kZXM9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoi'@;
put 'RG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBs'@;
put 'YWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIg'@;
put 'bG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LEsudmFsaWRhdGU9ZnVuY3Rpb24oTCl7dmFyIGs9ei50b0FTQ0lJKEwpO2lmKGsubGVuZ3RoPDEpcmV0dXJuIkRP'@;
put 'TUFJTl9UT09fU0hPUlQiO2lmKGsubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19MT05HIjtmb3IodmFyIEUsaj1rLnNwbGl0KCIuIiksVj0wO1Y8ai5sZW5ndGg7KytWKXtpZighKEU9altWXSkubGVuZ3RoKXJldHVybiJMQUJFTF9UT09fU0hPUlQiO2lmKEUubGVuZ3RoPjYzKXJldHVy'@;
put 'biJMQUJFTF9UT09fTE9ORyI7aWYoIi0iPT09RS5jaGFyQXQoMCkpcmV0dXJuIkxBQkVMX1NUQVJUU19XSVRIX0RBU0giO2lmKCItIj09PUUuY2hhckF0KEUubGVuZ3RoLTEpKXJldHVybiJMQUJFTF9FTkRTX1dJVEhfREFTSCI7aWYoIS9eW2EtejAtOVwtXSskLy50ZXN0KEUpKXJldHVybiJM'@;
put 'QUJFTF9JTlZBTElEX0NIQVJTIn19LE8ucGFyc2U9ZnVuY3Rpb24oTCl7aWYoInN0cmluZyIhPXR5cGVvZiBMKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGs9TC5zbGljZSgwKS50b0xvd2VyQ2FzZSgpOyIuIj09PWsuY2hhckF0KGsu'@;
put 'bGVuZ3RoLTEpJiYoaz1rLnNsaWNlKDAsay5sZW5ndGgtMSkpO3ZhciBFPUsudmFsaWRhdGUoayk7aWYoRSlyZXR1cm57aW5wdXQ6TCxlcnJvcjp7bWVzc2FnZTpPLmVycm9yQ29kZXNbRV0sY29kZTpFfX07dmFyIGo9e2lucHV0OkwsdGxkOm51bGwsc2xkOm51bGwsZG9tYWluOm51bGwsc3Vi'@;
put 'ZG9tYWluOm51bGwsbGlzdGVkOiExfSxWPWsuc3BsaXQoIi4iKTtpZigibG9jYWwiPT09VltWLmxlbmd0aC0xXSlyZXR1cm4gajt2YXIgQj1mdW5jdGlvbigpe3JldHVybi94bi0tLy50ZXN0KGspJiYoai5kb21haW4mJihqLmRvbWFpbj16LnRvQVNDSUkoai5kb21haW4pKSxqLnN1YmRvbWFp'@;
put 'biYmKGouc3ViZG9tYWluPXoudG9BU0NJSShqLnN1YmRvbWFpbikpKSxqfSxZPUsuZmluZFJ1bGUoayk7aWYoIVkpcmV0dXJuIFYubGVuZ3RoPDI/ajooai50bGQ9Vi5wb3AoKSxqLnNsZD1WLnBvcCgpLGouZG9tYWluPVtqLnNsZCxqLnRsZF0uam9pbigiLiIpLFYubGVuZ3RoJiYoai5zdWJk'@;
put 'b21haW49Vi5wb3AoKSksQigpKTtqLmxpc3RlZD0hMDt2YXIgWD1ZLnN1ZmZpeC5zcGxpdCgiLiIpLFU9Vi5zbGljZSgwLFYubGVuZ3RoLVgubGVuZ3RoKTtyZXR1cm4gWS5leGNlcHRpb24mJlUucHVzaChYLnNoaWZ0KCkpLGoudGxkPVguam9pbigiLiIpLFUubGVuZ3RoPyhZLndpbGRjYXJk'@;
put 'JiYoWC51bnNoaWZ0KFUucG9wKCkpLGoudGxkPVguam9pbigiLiIpKSxVLmxlbmd0aCYmKGouc2xkPVUucG9wKCksai5kb21haW49W2ouc2xkLGoudGxkXS5qb2luKCIuIiksVS5sZW5ndGgmJihqLnN1YmRvbWFpbj1VLmpvaW4oIi4iKSkpLEIoKSk6QigpfSxPLmdldD1mdW5jdGlvbihMKXty'@;
put 'ZXR1cm4gTCYmTy5wYXJzZShMKS5kb21haW58fG51bGx9LE8uaXNWYWxpZD1mdW5jdGlvbihMKXt2YXIgaz1PLnBhcnNlKEwpO3JldHVybiEoIWsuZG9tYWlufHwhay5saXN0ZWQpfX0sNzkwMDooTSxPLFIpPT57Ty5wdWJsaWNFbmNyeXB0PVIoNjU1OSksTy5wcml2YXRlRGVjcnlwdD1SKDYx'@;
put 'MzgpLE8ucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oeixLKXtyZXR1cm4gTy5wdWJsaWNFbmNyeXB0KHosSywhMCl9LE8ucHVibGljRGVjcnlwdD1mdW5jdGlvbih6LEspe3JldHVybiBPLnByaXZhdGVEZWNyeXB0KHosSywhMCl9fSw5MTk5OihNLE8sUik9Pnt2YXIgej1SKDM0ODIpLEs9Uig5'@;
put 'NTA5KS5CdWZmZXI7ZnVuY3Rpb24gTChrKXt2YXIgRT1LLmFsbG9jVW5zYWZlKDQpO3JldHVybiBFLndyaXRlVUludDMyQkUoaywwKSxFfU0uZXhwb3J0cz1mdW5jdGlvbihrLEUpe2Zvcih2YXIgaixWPUsuYWxsb2MoMCksQj0wO1YubGVuZ3RoPEU7KWo9TChCKyspLFY9Sy5jb25jYXQoW1Ys'@;
put 'eigic2hhMSIpLnVwZGF0ZShrKS51cGRhdGUoaikuZGlnZXN0KCldKTtyZXR1cm4gVi5zbGljZSgwLEUpfX0sMjE0NDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEwoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBm'@;
put 'YWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhp'@;
put 'cy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRz'@;
put 'PUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig3MTA4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1'@;
put 'JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztK'@;
put 'PHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0'@;
put 'cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlv'@;
put 'bihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksTChDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0w'@;
put 'OyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlz'@;
put 'LnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndv'@;
put 'cmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihMKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhp'@;
put 'cy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoTCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChn'@;
put 'Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1n'@;
put 'W3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18'@;
put 'Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1N'@;
put 'YXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxD'@;
put 'LHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYz'@;
put 'JnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisr'@;
put 'O3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5f'@;
put 'aWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0s'@;
put 'RS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJl'@;
put 'ZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0'@;
put 'dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIw'@;
put 'IiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0'@;
put 'MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUx'@;
put 'NTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRp'@;
put 'dmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3Io'@;
put 'dmFyIHhlPWRlPj4+MjYsSWU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStJZSkvNjcxMDg4NjR8MCxJZT02'@;
put 'NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8SWUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1n'@;
put 'KXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25l'@;
put 'K1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxm'@;
put 'ZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgSWU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9JZStTOlhbZGUtSWUubGVuZ3RoXStJZStTfWZvcih0aGlzLmlzWmVy'@;
put 'bygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUwoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRz'@;
put 'WzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZMKCExLCJOdW1iZXIgY2FuIG9u'@;
put 'bHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEwodm9pZCAwIT09'@;
put 'aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1T'@;
put 'fHxNYXRoLm1heCgxLHYpO0wodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEwocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYo'@;
put 'bmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVz'@;
put 'aHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYo'@;
put 'Uys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykm'@;
put 'JihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAy'@;
put 'NioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMp'@;
put 'YnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5p'@;
put 'YWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlz'@;
put 'Lm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlv'@;
put 'bihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJv'@;
put 'dG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2'@;
put 'YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdh'@;
put 'dGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVu'@;
put 'Z3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3Ro'@;
put 'O3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBMKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3Rv'@;
put 'dHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRo'@;
put 'LmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMu'@;
put 'c3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7TCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFu'@;
put 'ZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlz'@;
put 'Lm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMu'@;
put 'bGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3'@;
put 'KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRo'@;
put 'aXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVn'@;
put 'YXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24o'@;
put 'Zyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlz'@;
put 'Ll9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9'@;
put 'KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgm'@;
put 'JlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLEllPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEz'@;
put 'LEtlPTB8SlsyXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxvdD0w'@;
put 'fEpbN10sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5l'@;
put 'WzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEx0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxMbj0wfG5lWzZdLHp0PTgxOTEmTG4seW49TG4+Pj4xMyx4bj0wfG5l'@;
put 'WzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sRm49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChJZSxl'@;
put 'bikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSWUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUs'@;
put 'JG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChG'@;
put 'ZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChRZSxlbil8MCx3PU1hdGguaW11bChRZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytN'@;
put 'YXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHc9dytNYXRoLmltdWwoUWUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZl'@;
put 'Kyh2PXYrTWF0aC5pbXVsKEllLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGgu'@;
put 'aW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAs'@;
put 'dj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsdz13K01hdGguaW11bChRZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoSWUsTHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxRdCl8MCkrTWF0aC5pbXVsKEZlLEx0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxRdCl8MCkrKHA+Pj4xMyl8MCkrKEty'@;
put 'Pj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUs'@;
put 'ZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxt'@;
put 'bil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLHc9dytNYXRoLmltdWwoUWUsbW4pfDAsdj12K01hdGguaW11bChqZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsTHQpfDAsdz13K01hdGguaW11bChXZSxRdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVs'@;
put 'KEllLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0o'@;
put 'cD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChU'@;
put 'ZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1u'@;
put 'KXwwLHY9ditNYXRoLmltdWwoWWUsTHQpfDAscD0ocD1wK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEx0KXwwLHc9dytNYXRoLmltdWwoUWUsUXQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAs'@;
put 'dz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKEllLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDAp'@;
put 'KyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVs'@;
put 'KHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'VGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsTHQpfDAscD0ocD1wK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEx0KXwwLHc9dytNYXRoLmltdWwoYmUsUXQpfDAsdj12K01hdGguaW11bChZZSxwdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsdz13K01hdGguaW11bChRZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3Zh'@;
put 'ciBxaT0oZmUrKHY9ditNYXRoLmltdWwoSWUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChJZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYz'@;
put 'LHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChN'@;
put 'dCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50'@;
put 'KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxMdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmltdWwocWUsTHQpfDAsdz13K01hdGguaW11bChxZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQp'@;
put 'fDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLHc9dytNYXRoLmltdWwoUWUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKEllLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsRm4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8'@;
put 'MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsRm4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQs'@;
put 'ZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8'@;
put 'MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsTHQpfDAscD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKGh0LEx0KXwwLHc9'@;
put 'dytNYXRoLmltdWwoaHQsUXQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01h'@;
put 'dGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLHc9dytNYXRoLmltdWwoUWUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKGplLEZuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxGbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKEllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoSWUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0o'@;
put 'KHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYr'@;
put 'TWF0aC5pbXVsKERlLEx0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxMdCl8MCx3PXcrTWF0aC5pbXVsKHplLFF0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRo'@;
put 'LmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11'@;
put 'bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxGbil8MCkrTWF0aC5pbXVsKFFlLCR0KXwwLHc9dytNYXRoLmltdWwoUWUsRm4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkr'@;
put 'KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0'@;
put 'LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsTHQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bCh1dCxRdCl8MCkrTWF0aC5pbXVsKE10LEx0KXwwLHc9dytNYXRoLmltdWwoTXQsUXQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'cWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxGbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'WWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAs'@;
put 'dz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsTHQpfDAscD0ocD1wK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEx0KXwwLHc9dytNYXRoLmltdWwob24sUXQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRo'@;
put 'LmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEZuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxGbil8MDt2YXIgR2k9KGZlKyh2PXYr'@;
put 'TWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChV'@;
put 'dCxMdCkscD0ocD1NYXRoLmltdWwoVXQsUXQpKStNYXRoLmltdWwoYm4sTHQpfDAsdz1NYXRoLmltdWwoYm4sUXQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01h'@;
put 'dGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5p'@;
put 'bXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxGbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsRm4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0'@;
put 'KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkr'@;
put 'TWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxGbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxu'@;
put 'KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRo'@;
put 'LmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxGbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkp'@;
put 'PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmlt'@;
put 'dWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxGbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sRm4pfDA7dmFyIElvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwo'@;
put 'TXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LEZuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLEZuKTt2'@;
put 'YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2'@;
put 'Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMs'@;
put 'ZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUlvLGRlWzE3'@;
put 'XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxU'@;
put 'bz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0'@;
put 'aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIEllPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgr'@;
put 'MSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0llPTY3MTA4ODYzJihLZT1LZStJZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUou'@;
put 'd29yZHNbZmVdPUllLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3Rv'@;
put 'dHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxD'@;
put 'LXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJt'@;
put 'dXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgSWU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBq'@;
put 'ZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sUWU9SWUqS2UtRmUqWWU7WWU9SWUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPVFlKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKFFlPWRl'@;
put 'KkllLWZlKkZlLEZlPWRlKkZlK2ZlKkllLEllPVFlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1'@;
put 'Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxD'@;
put 'KXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1m'@;
put 'dW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtMKDA9PT1wKSxMKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHVi'@;
put 'PWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRo'@;
put 'aXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksSWU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2'@;
put 'KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLEllLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkllW09lXTtkZVtP'@;
put 'ZV09bmVbT2VdKkllW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5l'@;
put 'Z2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9'@;
put 'LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhn'@;
put 'LHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyksTChnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+'@;
put 'Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcp'@;
put 'fSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFy'@;
put 'IEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2'@;
put 'PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtMKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tD'@;
put 'XSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVu'@;
put 'Z3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtMKCJudW1iZXIiPT10eXBlb2YgZyYm'@;
put 'Zz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10'@;
put 'aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3Zh'@;
put 'ciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUp'@;
put 'LDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gTCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJv'@;
put 'dG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhp'@;
put 'cy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtMKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBMKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJl'@;
put 'cnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNr'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5s'@;
put 'ZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUu'@;
put 'X2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysx'@;
put 'XSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEwoIm51bWJlciI9PXR5cGVvZiBnKSxMKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVn'@;
put 'YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxz'@;
put 'ZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFk'@;
put 'ZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkq'@;
put 'QztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJl'@;
put 'dHVybiB0aGlzLnN0cmlwKCk7Zm9yKEwoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93'@;
put 'b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVu'@;
put 'Z3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7'@;
put 'MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgSWU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihJZT1NYXRoLm1pbihJZS93fDAsNjcx'@;
put 'MDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsSWUseGUpOzAhPT12Lm5lZ2F0aXZlOylJZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09SWUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgp'@;
put 'LCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEwoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAh'@;
put 'PT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVn'@;
put 'KCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9k'@;
put 'Om51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5k'@;
put 'aXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcs'@;
put 'Im1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5k'@;
put 'bG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0woZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9'@;
put 'MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtMKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29y'@;
put 'ZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdh'@;
put 'dGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5p'@;
put 'dXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsSWU9MTshKEMud29yZHNbMF0mSWUpJiZ4ZTwyNjsrK3hlLEllPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2'@;
put 'LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNP'@;
put 'ZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1'@;
put 'c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7TCgwPT09Zy5uZWdhdGl2ZSksTCghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgw'@;
put 'KSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zv'@;
put 'cih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyks'@;
put 'dy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlz'@;
put 'LmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylT'@;
put 'Lml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5h'@;
put 'LnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0woIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9y'@;
put 'KHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUu'@;
put 'aXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVy'@;
put 'biAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxMKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5w'@;
put 'cm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1D'@;
put 'OkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcu'@;
put 'd29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJv'@;
put 'dG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5s'@;
put 'dD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQs'@;
put 'IkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxMKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBM'@;
put 'KHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5m'@;
put 'b3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gTCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25s'@;
put 'eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlw'@;
put 'ZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlw'@;
put 'ZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEwodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBM'@;
put 'KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm'@;
put 'eTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUu'@;
put 'cHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gTCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBMKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3Jt'@;
put 'YWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlz'@;
put 'LnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChn'@;
put 'KXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgTChnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRo'@;
put 'aXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhp'@;
put 'cy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigp'@;
put 'e3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRk'@;
put 'KHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJp'@;
put 'cCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFy'@;
put 'IFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVu'@;
put 'Z3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5j'@;
put 'dGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDAp'@;
put 'fXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3Ro'@;
put 'O1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJr'@;
put 'MjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlw'@;
put 'ZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtMKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtMKDA9PShnLm5lZ2F0'@;
put 'aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEwoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1l'@;
put 'LmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1'@;
put 'bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlh'@;
put 'ZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMp'@;
put 'fSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMu'@;
put 'aW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcu'@;
put 'bXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0'@;
put 'dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoTChDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5k'@;
put 'bG4oMSk7KXArKyx2Lml1c2hybigxKTtMKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9'@;
put 'PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLEllPXRoaXMucG93KGcsdiksRmU9cDswIT09SWUuY21wKHcpOyl7Zm9yKHZhciBPZT1JZSxqZT0wOzAhPT1PZS5j'@;
put 'bXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtMKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLEllPUllLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1'@;
put 'bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEp'@;
put 'LnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0w'@;
put 'LEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13'@;
put 'Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUo'@;
put 'KTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8'@;
put 'fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDty'@;
put 'ZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9m'@;
put 'b3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIo'@;
put 'dGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSks'@;
put 'dGhpcyl9LDYxMzg6KE0sTyxSKT0+e3ZhciB6PVIoOTgwKSxLPVIoOTE5OSksTD1SKDc4NTkpLGs9UigyMTQ0KSxFPVIoMzY2Myksaj1SKDM0ODIpLFY9Uig0ODE4KSxCPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihZLFgsVSl7dmFyIHE7cT1ZLnBhZGRpbmc/WS5wYWRkaW5n'@;
put 'OlU/MTo0O3ZhciBlZSx0ZT16KFkpLG9lPXRlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFgubGVuZ3RoPm9lfHxuZXcgayhYKS5jbXAodGUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7ZWU9VT9WKG5ldyBrKFgpLHRlKTpFKFgsdGUpO3ZhciBzZT1C'@;
put 'LmFsbG9jKG9lLWVlLmxlbmd0aCk7aWYoZWU9Qi5jb25jYXQoW3NlLGVlXSxvZSksND09PXEpcmV0dXJuIGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2U9aGUubW9kdWx1cy5ieXRlTGVuZ3RoKCksRz1qKCJzaGExIikudXBkYXRlKEIuYWxsb2MoMCkpLmRpZ2VzdCgpLGI9Ry5sZW5ndGg7aWYoMCE9'@;
put 'PXVlWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBEPXVlLnNsaWNlKDEsYisxKSxIPXVlLnNsaWNlKGIrMSksTj1MKEQsSyhILGIpKSxnPUwoSCxLKE4sY2UtYi0xKSk7aWYoZnVuY3Rpb24oUyx2KXtTPUIuZnJvbShTKSx2PUIuZnJvbSh2KTt2YXIgcD0wLHc9'@;
put 'Uy5sZW5ndGg7Uy5sZW5ndGghPT12Lmxlbmd0aCYmKHArKyx3PU1hdGgubWluKFMubGVuZ3RoLHYubGVuZ3RoKSk7Zm9yKHZhciBKPS0xOysrSjx3OylwKz1TW0pdXnZbSl07cmV0dXJuIHB9KEcsZy5zbGljZSgwLGIpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3Io'@;
put 'dmFyIEM9YjswPT09Z1tDXTspQysrO2lmKDEhPT1nW0MrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGcuc2xpY2UoQyl9KHRlLGVlKTtpZigxPT09cSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2Upe2Zvcih2YXIgRz11ZS5zbGljZSgwLDIpLGI9MixEPTA7'@;
put 'MCE9PXVlW2IrK107KWlmKGI+PXVlLmxlbmd0aCl7RCsrO2JyZWFrfXZhciBIPXVlLnNsaWNlKDIsYi0xKTtpZigoIjAwMDIiIT09Ry50b1N0cmluZygiaGV4IikmJiFjZXx8IjAwMDEiIT09Ry50b1N0cmluZygiaGV4IikmJmNlKSYmRCsrLEgubGVuZ3RoPDgmJkQrKyxEKXRocm93IG5ldyBF'@;
put 'cnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiB1ZS5zbGljZShiKX0oMCxlZSxVKTtpZigzPT09cSlyZXR1cm4gZWU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDY1NTk6KE0sTyxSKT0+e3ZhciB6PVIoOTgwKSxLPVIoMTc5OCksTD1SKDM0ODIpLGs9Uig5MTk5'@;
put 'KSxFPVIoNzg1OSksaj1SKDIxNDQpLFY9Uig0ODE4KSxCPVIoMzY2MyksWT1SKDk1MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oWCxVLHEpe3ZhciBlZTtlZT1YLnBhZGRpbmc/WC5wYWRkaW5nOnE/MTo0O3ZhciB0ZSxvZT16KFgpO2lmKDQ9PT1lZSl0ZT1mdW5jdGlvbihzZSxoZSl7'@;
put 'dmFyIHVlPXNlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGNlPWhlLmxlbmd0aCxHPUwoInNoYTEiKS51cGRhdGUoWS5hbGxvYygwKSkuZGlnZXN0KCksYj1HLmxlbmd0aCxEPTIqYjtpZihjZT51ZS1ELTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIEg9WS5hbGxvYyh1'@;
put 'ZS1jZS1ELTIpLE49dWUtYi0xLGc9SyhiKSxDPUUoWS5jb25jYXQoW0csSCxZLmFsbG9jKDEsMSksaGVdLE4pLGsoZyxOKSksUz1FKGcsayhDLGIpKTtyZXR1cm4gbmV3IGooWS5jb25jYXQoW1kuYWxsb2MoMSksUyxDXSx1ZSkpfShvZSxVKTtlbHNlIGlmKDE9PT1lZSl0ZT1mdW5jdGlvbihz'@;
put 'ZSxoZSx1ZSl7dmFyIGNlLEc9aGUubGVuZ3RoLGI9c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoRz5iLTExKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3JldHVybiBjZT11ZT9ZLmFsbG9jKGItRy0zLDI1NSk6ZnVuY3Rpb24oRCl7Zm9yKHZhciBILE49WS5hbGxvY1Vu'@;
put 'c2FmZShEKSxnPTAsQz1LKDIqRCksUz0wO2c8RDspUz09PUMubGVuZ3RoJiYoQz1LKDIqRCksUz0wKSwoSD1DW1MrK10pJiYoTltnKytdPUgpO3JldHVybiBOfShiLUctMyksbmV3IGooWS5jb25jYXQoW1kuZnJvbShbMCx1ZT8xOjJdKSxjZSxZLmFsbG9jKDEpLGhlXSxiKSl9KG9lLFUscSk7'@;
put 'ZWxzZXtpZigzIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigodGU9bmV3IGooVSkpLmNtcChvZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9CKHRlLG9lKTpWKHRlLG9lKX19LDQ4MTg6'@;
put 'KE0sTyxSKT0+e3ZhciB6PVIoMjE0NCksSz1SKDk1MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oTCxrKXtyZXR1cm4gSy5mcm9tKEwudG9SZWQoei5tb250KGsubW9kdWx1cykpLnJlZFBvdyhuZXcgeihrLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5'@;
put 'Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtmb3IodmFyIHo9Ty5sZW5ndGgsSz0tMTsrK0s8ejspT1tLXV49UltLXTtyZXR1cm4gT319LDM2ODk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtSLnIoTyksUi5kKE8se2RlY29kZTooKT0+b2UsZGVmYXVsdDooKT0+Y2UsZW5jb2RlOigpPT5z'@;
put 'ZSx0b0FTQ0lJOigpPT51ZSx0b1VuaWNvZGU6KCk9PmhlLHVjczJkZWNvZGU6KCk9PlUsdWNzMmVuY29kZTooKT0+cX0pO2NvbnN0IHo9MjE0NzQ4MzY0NyxLPTM2LEw9L154bi0tLyxrPS9bXlwwLVx4N0ZdLyxFPS9bXHgyRVx1MzAwMlx1RkYwRVx1RkY2MV0vZyxqPXtvdmVyZmxvdzoiT3Zl'@;
put 'cmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxWPU1hdGguZmxvb3IsQj1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlO2Z1bmN0aW9uIFkoRyl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoaltHXSl9ZnVuY3Rpb24gWChHLGIpe2NvbnN0IEQ9Ry5zcGxpdCgiQCIpO2xldCBIPSIiO3JldHVybiBELmxlbmd0aD4xJiYoSD1EWzBdKyJAIixHPURbMV0pLEgrZnVuY3Rpb24oZyxDKXtjb25zdCBTPVtdO2xl'@;
put 'dCB2PWcubGVuZ3RoO2Zvcig7di0tOylTW3ZdPUMoZ1t2XSk7cmV0dXJuIFN9KChHPUcucmVwbGFjZShFLCIuIikpLnNwbGl0KCIuIiksYikuam9pbigiLiIpfWZ1bmN0aW9uIFUoRyl7Y29uc3QgYj1bXTtsZXQgRD0wO2NvbnN0IEg9Ry5sZW5ndGg7Zm9yKDtEPEg7KXtjb25zdCBOPUcuY2hh'@;
put 'ckNvZGVBdChEKyspO2lmKE4+PTU1Mjk2JiZOPD01NjMxOSYmRDxIKXtjb25zdCBnPUcuY2hhckNvZGVBdChEKyspOzU2MzIwPT0oNjQ1MTImZyk/Yi5wdXNoKCgoMTAyMyZOKTw8MTApKygxMDIzJmcpKzY1NTM2KTooYi5wdXNoKE4pLEQtLSl9ZWxzZSBiLnB1c2goTil9cmV0dXJuIGJ9Y29u'@;
put 'c3QgcT1HPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5HKSxlZT1mdW5jdGlvbihHLGIpe3JldHVybiBHKzIyKzc1KihHPDI2KS0oKDAhPWIpPDw1KX0sdGU9ZnVuY3Rpb24oRyxiLEQpe2xldCBIPTA7Zm9yKEc9RD9WKEcvNzAwKTpHPj4xLEcrPVYoRy9iKTtHPjQ1NTtIKz1LKUc9VihHLzM1'@;
put 'KTtyZXR1cm4gVihIKzM2KkcvKEcrMzgpKX0sb2U9ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXSxEPUcubGVuZ3RoO2xldCBIPTAsTj0xMjgsZz03MixDPUcubGFzdEluZGV4T2YoIi0iKTtDPDAmJihDPTApO2ZvcihsZXQgdj0wO3Y8QzsrK3YpRy5jaGFyQ29kZUF0KHYpPj0xMjgmJlkoIm5vdC1i'@;
put 'YXNpYyIpLGIucHVzaChHLmNoYXJDb2RlQXQodikpO2ZvcihsZXQgdj1DPjA/QysxOjA7djxEOyl7Y29uc3QgcD1IO2ZvcihsZXQgSj0xLG5lPUs7O25lKz1LKXt2Pj1EJiZZKCJpbnZhbGlkLWlucHV0Iik7Y29uc3QgZGU9KFM9Ry5jaGFyQ29kZUF0KHYrKykpPj00OCYmUzw1OD9TLTQ4KzI2'@;
put 'OlM+PTY1JiZTPDkxP1MtNjU6Uz49OTcmJlM8MTIzP1MtOTc6SztkZT49SyYmWSgiaW52YWxpZC1pbnB1dCIpLGRlPlYoKHotSCkvSikmJlkoIm92ZXJmbG93IiksSCs9ZGUqSjtjb25zdCBmZT1uZTw9Zz8xOm5lPj1nKzI2PzI2Om5lLWc7aWYoZGU8ZmUpYnJlYWs7Y29uc3QgeGU9Sy1mZTtK'@;
put 'PlYoei94ZSkmJlkoIm92ZXJmbG93IiksSio9eGV9Y29uc3Qgdz1iLmxlbmd0aCsxO2c9dGUoSC1wLHcsMD09cCksVihIL3cpPnotTiYmWSgib3ZlcmZsb3ciKSxOKz1WKEgvdyksSCU9dyxiLnNwbGljZShIKyssMCxOKX12YXIgUztyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uYil9'@;
put 'LHNlPWZ1bmN0aW9uKEcpe2NvbnN0IGI9W10sRD0oRz1VKEcpKS5sZW5ndGg7bGV0IEg9MTI4LE49MCxnPTcyO2Zvcihjb25zdCB2IG9mIEcpdjwxMjgmJmIucHVzaChCKHYpKTtjb25zdCBDPWIubGVuZ3RoO2xldCBTPUM7Zm9yKEMmJmIucHVzaCgiLSIpO1M8RDspe2xldCB2PXo7Zm9yKGNv'@;
put 'bnN0IHcgb2YgRyl3Pj1IJiZ3PHYmJih2PXcpO2NvbnN0IHA9UysxO3YtSD5WKCh6LU4pL3ApJiZZKCJvdmVyZmxvdyIpLE4rPSh2LUgpKnAsSD12O2Zvcihjb25zdCB3IG9mIEcpaWYodzxIJiYrK04+eiYmWSgib3ZlcmZsb3ciKSx3PT09SCl7bGV0IEo9Tjtmb3IobGV0IG5lPUs7O25lKz1L'@;
put 'KXtjb25zdCBkZT1uZTw9Zz8xOm5lPj1nKzI2PzI2Om5lLWc7aWYoSjxkZSlicmVhaztjb25zdCBmZT1KLWRlLHhlPUstZGU7Yi5wdXNoKEIoZWUoZGUrZmUleGUsMCkpKSxKPVYoZmUveGUpfWIucHVzaChCKGVlKEosMCkpKSxnPXRlKE4scCxTPT09QyksTj0wLCsrU30rK04sKytIfXJldHVy'@;
put 'biBiLmpvaW4oIiIpfSxoZT1mdW5jdGlvbihHKXtyZXR1cm4gWChHLGZ1bmN0aW9uKGIpe3JldHVybiBMLnRlc3QoYik/b2UoYi5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpifSl9LHVlPWZ1bmN0aW9uKEcpe3JldHVybiBYKEcsZnVuY3Rpb24oYil7cmV0dXJuIGsudGVzdChiKT8ieG4tLSIr'@;
put 'c2UoYik6Yn0pfSxjZT17dmVyc2lvbjoiMi4xLjAiLHVjczI6e2RlY29kZTpVLGVuY29kZTpxfSxkZWNvZGU6b2UsZW5jb2RlOnNlLHRvQVNDSUk6dWUsdG9Vbmljb2RlOmhlfX0sNzEyOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'O2Z1bmN0aW9uIHooTCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoTC5yZXBsYWNlKC9cKy9nLCIgIikpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBLKEwpe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEwpfWNhdGNoe3JldHVybiBudWxsfX1PLnN0cmluZ2lmeT1m'@;
put 'dW5jdGlvbihMLGspe2s9a3x8IiI7dmFyIEUsaixWPVtdO2ZvcihqIGluInN0cmluZyIhPXR5cGVvZiBrJiYoaz0iPyIpLEwpaWYoUi5jYWxsKEwsaikpe2lmKChFPUxbal0pfHxudWxsIT1FJiYhaXNOYU4oRSl8fChFPSIiKSxqPUsoaiksRT1LKEUpLG51bGw9PT1qfHxudWxsPT09RSljb250'@;
put 'aW51ZTtWLnB1c2goaisiPSIrRSl9cmV0dXJuIFYubGVuZ3RoP2srVi5qb2luKCImIik6IiJ9LE8ucGFyc2U9ZnVuY3Rpb24oTCl7Zm9yKHZhciBrLEU9LyhbXj0/IyZdKyk9PyhbXiZdKikvZyxqPXt9O2s9RS5leGVjKEwpOyl7dmFyIFY9eihrWzFdKSxCPXooa1syXSk7bnVsbD09PVZ8fG51'@;
put 'bGw9PT1CfHxWIGluIGp8fChqW1ZdPUIpfXJldHVybiBqfX0sMTc5ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz02NTUzNixrPVIoOTUwOSkuQnVmZmVyLEU9Ui5nLmNyeXB0b3x8Ui5nLm1zQ3J5cHRvO00uZXhwb3J0cz1FJiZFLmdldFJhbmRvbVZhbHVlcz9mdW5j'@;
put 'dGlvbihqLFYpe2lmKGo+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBCPWsuYWxsb2NVbnNhZmUoaik7aWYoaj4wKWlmKGo+Sylmb3IodmFyIFk9MDtZPGo7WSs9SylFLmdldFJhbmRvbVZhbHVlcyhCLnNsaWNl'@;
put 'KFksWStLKSk7ZWxzZSBFLmdldFJhbmRvbVZhbHVlcyhCKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgVj96Lm5leHRUaWNrKGZ1bmN0aW9uKCl7VihudWxsLEIpfSk6Qn06ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90'@;
put 'IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw3OTYzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51'@;
put 'bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIEw9Uig5NTA5KSxrPVIoMTc5OCksRT1MLkJ1ZmZlcixqPUwua01heExlbmd0aCxWPVIuZy5jcnlwdG98fFIuZy5tc0Ny'@;
put 'eXB0byxCPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gWShxLGVlKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHEhPXEpdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihxPkJ8fHE8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBh'@;
put 'IHVpbnQzMiIpO2lmKHE+anx8cT5lZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFgocSxlZSx0ZSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxIT1xKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+'@;
put 'Qnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKHErZWU+dGV8fHE+ail0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIFUocSxlZSx0ZSxvZSl7aWYoei5icm93c2VyKXt2YXIgaGU9bmV3IFVpbnQ4QXJy'@;
put 'YXkocS5idWZmZXIsZWUsdGUpO3JldHVybiBWLmdldFJhbmRvbVZhbHVlcyhoZSksb2U/dm9pZCB6Lm5leHRUaWNrKGZ1bmN0aW9uKCl7b2UobnVsbCxxKX0pOnF9aWYoIW9lKXJldHVybiBrKHRlKS5jb3B5KHEsZWUpLHE7ayh0ZSxmdW5jdGlvbih1ZSxjZSl7aWYodWUpcmV0dXJuIG9lKHVl'@;
put 'KTtjZS5jb3B5KHEsZWUpLG9lKG51bGwscSl9KX1WJiZWLmdldFJhbmRvbVZhbHVlc3x8IXouYnJvd3Nlcj8oTy5yYW5kb21GaWxsPWZ1bmN0aW9uKHEsZWUsdGUsb2Upe2lmKCEoRS5pc0J1ZmZlcihxKXx8cSBpbnN0YW5jZW9mIFIuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZWUpb2U9ZWUsZWU9MCx0ZT1xLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0ZSlvZT10ZSx0ZT1xLmxlbmd0aC1lZTtlbHNlIGlmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiBZKGVlLHEubGVuZ3RoKSxYKHRlLGVlLHEubGVuZ3RoKSxVKHEsZWUsdGUsb2UpfSxPLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uKHEsZWUsdGUpe2lmKHZv'@;
put 'aWQgMD09PWVlJiYoZWU9MCksIShFLmlzQnVmZmVyKHEpfHxxIGluc3RhbmNlb2YgUi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiBZKGVlLHEubGVuZ3RoKSx2b2lkIDA9PT10'@;
put 'ZSYmKHRlPXEubGVuZ3RoLWVlKSxYKHRlLGVlLHEubGVuZ3RoKSxVKHEsZWUsdGUpfSk6KE8ucmFuZG9tRmlsbD1LLE8ucmFuZG9tRmlsbFN5bmM9Syl9LDQyODE6TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTz17fTtmdW5jdGlvbiBSKEssTCxrKXtrfHwoaz1FcnJvcik7dmFyIEU9ZnVuY3Rpb24o'@;
put 'ail7dmFyIFYsQjtmdW5jdGlvbiBZKFgsVSxxKXtyZXR1cm4gai5jYWxsKHRoaXMsInN0cmluZyI9PXR5cGVvZiBMP0w6TChYLFUscSkpfHx0aGlzfXJldHVybiBCPWosKFY9WSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVYs'@;
put 'Vi5fX3Byb3RvX189QixZfShrKTtFLnByb3RvdHlwZS5uYW1lPWsubmFtZSxFLnByb3RvdHlwZS5jb2RlPUssT1tLXT1FfWZ1bmN0aW9uIHooSyxMKXtpZihBcnJheS5pc0FycmF5KEspKXt2YXIgaz1LLmxlbmd0aDtyZXR1cm4gSz1LLm1hcChmdW5jdGlvbihFKXtyZXR1cm4gU3RyaW5nKEUp'@;
put 'fSksaz4yPyJvbmUgb2YgIi5jb25jYXQoTCwiICIpLmNvbmNhdChLLnNsaWNlKDAsay0xKS5qb2luKCIsICIpLCIsIG9yICIpK0tbay0xXToyPT09az8ib25lIG9mICIuY29uY2F0KEwsIiAiKS5jb25jYXQoS1swXSwiIG9yICIpLmNvbmNhdChLWzFdKToib2YgIi5jb25jYXQoTCwiICIpLmNv'@;
put 'bmNhdChLWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoTCwiICIpLmNvbmNhdChTdHJpbmcoSykpfVIoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oSyxMKXtyZXR1cm4nVGhlIHZhbHVlICInK0wrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK0srJyInfSxUeXBlRXJyb3IpLFIo'@;
put 'IkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihLLEwsayl7dmFyIEUsQixYLHE7aWYoInN0cmluZyI9PXR5cGVvZiBMJiYibm90ICI9PT1MLnN1YnN0cigwLDQpPyhFPSJtdXN0IG5vdCBiZSIsTD1MLnJlcGxhY2UoL15ub3QgLywiIikpOkU9Im11c3QgYmUiLFg9Sywodm9pZCAwPT09'@;
put 'cXx8cT5YLmxlbmd0aCkmJihxPVgubGVuZ3RoKSwiIGFyZ3VtZW50Ij09PVguc3Vic3RyaW5nKHEtOSxxKSlCPSJUaGUgIi5jb25jYXQoSywiICIpLmNvbmNhdChFLCIgIikuY29uY2F0KHooTCwidHlwZSIpKTtlbHNle3ZhciBZPWZ1bmN0aW9uKFgsVSxxKXtyZXR1cm4ibnVtYmVyIiE9dHlw'@;
put 'ZW9mIHEmJihxPTApLCEocSsxPlgubGVuZ3RoKSYmLTEhPT1YLmluZGV4T2YoIi4iLHEpfShLKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Qj0nVGhlICInLmNvbmNhdChLLCciICcpLmNvbmNhdChZLCIgIikuY29uY2F0KEUsIiAiKS5jb25jYXQoeihMLCJ0eXBlIikpfXJldHVybiBCKyIuIFJl'@;
put 'Y2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIGspfSxUeXBlRXJyb3IpLFIoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLFIoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihLKXtyZXR1cm4iVGhlICIrSysiIG1ldGhv'@;
put 'ZCBpcyBub3QgaW1wbGVtZW50ZWQifSksUigiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxSKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oSyl7cmV0dXJuIkNhbm5vdCBjYWxsICIrSysiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQi'@;
put 'fSksUigiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksUigiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxSKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVu'@;
put 'ZCIpLFIoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxSKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oSyl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrS30sVHlwZUVycm9yKSxSKCJFUlJf'@;
put 'U1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSxNLmV4cG9ydHMucT1PfSw2NzUzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPU9iamVjdC5rZXlzfHxmdW5jdGlvbihVKXt2YXIgcT1bXTtmb3Io'@;
put 'dmFyIGVlIGluIFUpcS5wdXNoKGVlKTtyZXR1cm4gcX07TS5leHBvcnRzPUI7dmFyIEw9Uig5NDgxKSxrPVIoNDIyOSk7Uig1NzE3KShCLEwpO2Zvcih2YXIgRT1LKGsucHJvdG90eXBlKSxqPTA7ajxFLmxlbmd0aDtqKyspe3ZhciBWPUVbal07Qi5wcm90b3R5cGVbVl18fChCLnByb3RvdHlw'@;
put 'ZVtWXT1rLnByb3RvdHlwZVtWXSl9ZnVuY3Rpb24gQihVKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIoVSk7TC5jYWxsKHRoaXMsVSksay5jYWxsKHRoaXMsVSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLFUmJighMT09PVUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSEx'@;
put 'KSwhMT09PVUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PVUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsWSkpKX1mdW5jdGlvbiBZKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ei5uZXh0VGljayhYLHRoaXMpfWZ1'@;
put 'bmN0aW9uIFgoVSl7VS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoQi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUs'@;
put 'IndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihVKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0'@;
put 'YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9VSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1VKX19KX0sMjcyNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1LO3ZhciB6PVIoNDYwNSk7ZnVuY3Rp'@;
put 'b24gSyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBLKSlyZXR1cm4gbmV3IEsoTCk7ei5jYWxsKHRoaXMsTCl9Uig1NzE3KShLLHopLEsucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxrLEUpe0UobnVsbCxMKX19LDk0ODE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIo'@;
put 'NDE1NSk7TS5leHBvcnRzPUgsSC5SZWFkYWJsZVN0YXRlPUQsUig3MTg3KTt2YXIgVixMPWZ1bmN0aW9uKFdlLEtlKXtyZXR1cm4gV2UubGlzdGVuZXJzKEtlKS5sZW5ndGh9LGs9UigyNTAzKSxFPVIoODc2NCkuQnVmZmVyLGo9KHZvaWQgMCE9PVIuZz9SLmc6dHlwZW9mIHdpbmRvdzwidSI/'@;
put 'd2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sQj1SKDQ2MTYpO1Y9QiYmQi5kZWJ1Z2xvZz9CLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIFksWCxVLHE9Uig3MzI3KSxlZT1SKDExOTUpLHRlPVIoMjQ1NykuZ2V0SGln'@;
put 'aFdhdGVyTWFyayxvZT1SKDQyODEpLnEsc2U9b2UuRVJSX0lOVkFMSURfQVJHX1RZUEUsaGU9b2UuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRix1ZT1vZS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxjZT1vZS5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO1IoNTcxNyko'@;
put 'SCxrKTt2YXIgRz1lZS5lcnJvck9yRGVzdHJveSxiPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIEQoV2UsS2UsWWUpe3o9enx8Uig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBZZSYmKFllPUtlIGluc3RhbmNlb2YgeiksdGhpcy5vYmplY3RN'@;
put 'b2RlPSEhKFdlPVdlfHx7fSkub2JqZWN0TW9kZSxZZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhV2UucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9dGUodGhpcyxXZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixZZSksdGhpcy5idWZmZXI9bmV3'@;
put 'IHEsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRS'@;
put 'ZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09V2UuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFXZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlz'@;
put 'LmRlZmF1bHRFbmNvZGluZz1XZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxXZS5lbmNvZGluZyYmKFl8fChZPVIoMjU1MykuU3RyaW5nRGVjb2RlciksdGhp'@;
put 'cy5kZWNvZGVyPW5ldyBZKFdlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPVdlLmVuY29kaW5nKX1mdW5jdGlvbiBIKFdlKXtpZih6PXp8fFIoNjc1MyksISh0aGlzIGluc3RhbmNlb2YgSCkpcmV0dXJuIG5ldyBIKFdlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBEKFdlLHRoaXMsdGhpcyBp'@;
put 'bnN0YW5jZW9mIHopLHRoaXMucmVhZGFibGU9ITAsV2UmJigiZnVuY3Rpb24iPT10eXBlb2YgV2UucmVhZCYmKHRoaXMuX3JlYWQ9V2UucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIFdlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PVdlLmRlc3Ryb3kpKSxrLmNhbGwodGhpcyl9ZnVuY3Rpb24g'@;
put 'TihXZSxLZSxZZSxRZSxsdCl7VigicmVhZGFibGVBZGRDaHVuayIsS2UpO3ZhciBQZSxBZSxUZSxxZSxYZSxiZT1XZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09S2UpYmUucmVhZGluZz0hMSxmdW5jdGlvbihBZSxUZSl7aWYoVigib25Fb2ZDaHVuayIpLCFUZS5lbmRlZCl7aWYoVGUuZGVj'@;
put 'b2Rlcil7dmFyIHFlPVRlLmRlY29kZXIuZW5kKCk7cWUmJnFlLmxlbmd0aCYmKFRlLmJ1ZmZlci5wdXNoKHFlKSxUZS5sZW5ndGgrPVRlLm9iamVjdE1vZGU/MTpxZS5sZW5ndGgpfVRlLmVuZGVkPSEwLFRlLnN5bmM/dihBZSk6KFRlLm5lZWRSZWFkYWJsZT0hMSxUZS5lbWl0dGVkUmVhZGFi'@;
put 'bGV8fChUZS5lbWl0dGVkUmVhZGFibGU9ITAscChBZSkpKX19KFdlLGJlKTtlbHNlIGlmKGx0fHwoQWU9YmUsRS5pc0J1ZmZlcihYZT1UZT1LZSl8fFhlIGluc3RhbmNlb2Yganx8InN0cmluZyI9PXR5cGVvZiBUZXx8dm9pZCAwPT09VGV8fEFlLm9iamVjdE1vZGV8fChxZT1uZXcgc2UoImNo'@;
put 'dW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxUZSkpLFBlPXFlKSxQZSlHKFdlLFBlKTtlbHNlIGlmKGJlLm9iamVjdE1vZGV8fEtlJiZLZS5sZW5ndGg+MClpZigic3RyaW5nIj09dHlwZW9mIEtlfHxiZS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoS2Up'@;
put 'PT09RS5wcm90b3R5cGV8fChLZT1mdW5jdGlvbihBZSl7cmV0dXJuIEUuZnJvbShBZSl9KEtlKSksUWUpYmUuZW5kRW1pdHRlZD9HKFdlLG5ldyBjZSk6ZyhXZSxiZSxLZSwhMCk7ZWxzZSBpZihiZS5lbmRlZClHKFdlLG5ldyBoZSk7ZWxzZXtpZihiZS5kZXN0cm95ZWQpcmV0dXJuITE7YmUu'@;
put 'cmVhZGluZz0hMSxiZS5kZWNvZGVyJiYhWWU/KEtlPWJlLmRlY29kZXIud3JpdGUoS2UpLGJlLm9iamVjdE1vZGV8fDAhPT1LZS5sZW5ndGg/ZyhXZSxiZSxLZSwhMSk6dyhXZSxiZSkpOmcoV2UsYmUsS2UsITEpfWVsc2UgUWV8fChiZS5yZWFkaW5nPSExLHcoV2UsYmUpKTtyZXR1cm4hYmUu'@;
put 'ZW5kZWQmJihiZS5sZW5ndGg8YmUuaGlnaFdhdGVyTWFya3x8MD09PWJlLmxlbmd0aCl9ZnVuY3Rpb24gZyhXZSxLZSxZZSxRZSl7S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCYmIUtlLnN5bmM/KEtlLmF3YWl0RHJhaW49MCxXZS5lbWl0KCJkYXRhIixZZSkpOihLZS5sZW5ndGgrPUtlLm9i'@;
put 'amVjdE1vZGU/MTpZZS5sZW5ndGgsUWU/S2UuYnVmZmVyLnVuc2hpZnQoWWUpOktlLmJ1ZmZlci5wdXNoKFllKSxLZS5uZWVkUmVhZGFibGUmJnYoV2UpKSx3KFdlLEtlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oV2Upe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1XZSl9fSksSC5wcm90b3R5cGUu'@;
put 'ZGVzdHJveT1lZS5kZXN0cm95LEgucHJvdG90eXBlLl91bmRlc3Ryb3k9ZWUudW5kZXN0cm95LEgucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKFdlLEtlKXtLZShXZSl9LEgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oV2UsS2Upe3ZhciBZZSxRZT10aGlzLl9yZWFkYWJsZVN0YXRlO3Jl'@;
put 'dHVybiBRZS5vYmplY3RNb2RlP1llPSEwOiJzdHJpbmciPT10eXBlb2YgV2UmJigoS2U9S2V8fFFlLmRlZmF1bHRFbmNvZGluZykhPT1RZS5lbmNvZGluZyYmKFdlPUUuZnJvbShXZSxLZSksS2U9IiIpLFllPSEwKSxOKHRoaXMsV2UsS2UsITEsWWUpfSxILnByb3RvdHlwZS51bnNoaWZ0PWZ1'@;
put 'bmN0aW9uKFdlKXtyZXR1cm4gTih0aGlzLFdlLG51bGwsITAsITEpfSxILnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxILnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihXZSl7WXx8KFk9UigyNTUzKS5T'@;
put 'dHJpbmdEZWNvZGVyKTt2YXIgS2U9bmV3IFkoV2UpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1LZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIFllPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVy'@;
put 'LmhlYWQsUWU9IiI7bnVsbCE9PVllOylRZSs9S2Uud3JpdGUoWWUuZGF0YSksWWU9WWUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PVFlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFFlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxl'@;
put 'bmd0aD1RZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3Mzc0MTgyNDtmdW5jdGlvbiBTKFdlLEtlKXtyZXR1cm4gV2U8PTB8fDA9PT1LZS5sZW5ndGgmJktlLmVuZGVkPzA6S2Uub2JqZWN0TW9kZT8xOldlIT1XZT9LZS5mbG93aW5nJiZLZS5sZW5ndGg/S2UuYnVmZmVyLmhlYWQuZGF0YS5sZW5n'@;
put 'dGg6S2UubGVuZ3RoOihXZT5LZS5oaWdoV2F0ZXJNYXJrJiYoS2UuaGlnaFdhdGVyTWFyaz0oKFllPVdlKT49Qz9ZZT1DOihZZS0tLFllfD1ZZT4+PjEsWWV8PVllPj4+MixZZXw9WWU+Pj40LFllfD1ZZT4+PjgsWWV8PVllPj4+MTYsWWUrKyksWWUpKSxXZTw9S2UubGVuZ3RoP1dlOktlLmVu'@;
put 'ZGVkP0tlLmxlbmd0aDooS2UubmVlZFJlYWRhYmxlPSEwLDApKTt2YXIgWWV9ZnVuY3Rpb24gdihXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVtaXRSZWFkYWJsZSIsS2UubmVlZFJlYWRhYmxlLEtlLmVtaXR0ZWRSZWFkYWJsZSksS2UubmVlZFJlYWRhYmxlPSExLEtlLmVtaXR0'@;
put 'ZWRSZWFkYWJsZXx8KFYoImVtaXRSZWFkYWJsZSIsS2UuZmxvd2luZyksS2UuZW1pdHRlZFJlYWRhYmxlPSEwLEsubmV4dFRpY2socCxXZSkpfWZ1bmN0aW9uIHAoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtWKCJlbWl0UmVhZGFibGVfIixLZS5kZXN0cm95ZWQsS2UubGVuZ3RoLEtl'@;
put 'LmVuZGVkKSxLZS5kZXN0cm95ZWR8fCFLZS5sZW5ndGgmJiFLZS5lbmRlZHx8KFdlLmVtaXQoInJlYWRhYmxlIiksS2UuZW1pdHRlZFJlYWRhYmxlPSExKSxLZS5uZWVkUmVhZGFibGU9IUtlLmZsb3dpbmcmJiFLZS5lbmRlZCYmS2UubGVuZ3RoPD1LZS5oaWdoV2F0ZXJNYXJrLHhlKFdlKX1m'@;
put 'dW5jdGlvbiB3KFdlLEtlKXtLZS5yZWFkaW5nTW9yZXx8KEtlLnJlYWRpbmdNb3JlPSEwLEsubmV4dFRpY2soSixXZSxLZSkpfWZ1bmN0aW9uIEooV2UsS2Upe2Zvcig7IUtlLnJlYWRpbmcmJiFLZS5lbmRlZCYmKEtlLmxlbmd0aDxLZS5oaWdoV2F0ZXJNYXJrfHxLZS5mbG93aW5nJiYwPT09'@;
put 'S2UubGVuZ3RoKTspe3ZhciBZZT1LZS5sZW5ndGg7aWYoVigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxXZS5yZWFkKDApLFllPT09S2UubGVuZ3RoKWJyZWFrfUtlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIG5lKFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7S2UucmVhZGFibGVMaXN0'@;
put 'ZW5pbmc9V2UubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLEtlLnJlc3VtZVNjaGVkdWxlZCYmIUtlLnBhdXNlZD9LZS5mbG93aW5nPSEwOldlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZXZS5yZXN1bWUoKX1mdW5jdGlvbiBkZShXZSl7VigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAw'@;
put 'IiksV2UucmVhZCgwKX1mdW5jdGlvbiBmZShXZSxLZSl7VigicmVzdW1lIixLZS5yZWFkaW5nKSxLZS5yZWFkaW5nfHxXZS5yZWFkKDApLEtlLnJlc3VtZVNjaGVkdWxlZD0hMSxXZS5lbWl0KCJyZXN1bWUiKSx4ZShXZSksS2UuZmxvd2luZyYmIUtlLnJlYWRpbmcmJldlLnJlYWQoMCl9ZnVu'@;
put 'Y3Rpb24geGUoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtmb3IoVigiZmxvdyIsS2UuZmxvd2luZyk7S2UuZmxvd2luZyYmbnVsbCE9PVdlLnJlYWQoKTspO31mdW5jdGlvbiBJZShXZSxLZSl7cmV0dXJuIDA9PT1LZS5sZW5ndGg/bnVsbDooS2Uub2JqZWN0TW9kZT9ZZT1LZS5idWZm'@;
put 'ZXIuc2hpZnQoKTohV2V8fFdlPj1LZS5sZW5ndGg/KFllPUtlLmRlY29kZXI/S2UuYnVmZmVyLmpvaW4oIiIpOjE9PT1LZS5idWZmZXIubGVuZ3RoP0tlLmJ1ZmZlci5maXJzdCgpOktlLmJ1ZmZlci5jb25jYXQoS2UubGVuZ3RoKSxLZS5idWZmZXIuY2xlYXIoKSk6WWU9S2UuYnVmZmVyLmNv'@;
put 'bnN1bWUoV2UsS2UuZGVjb2RlciksWWUpO3ZhciBZZX1mdW5jdGlvbiBGZShXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVuZFJlYWRhYmxlIixLZS5lbmRFbWl0dGVkKSxLZS5lbmRFbWl0dGVkfHwoS2UuZW5kZWQ9ITAsSy5uZXh0VGljayhPZSxLZSxXZSkpfWZ1bmN0aW9uIE9l'@;
put 'KFdlLEtlKXtpZihWKCJlbmRSZWFkYWJsZU5UIixXZS5lbmRFbWl0dGVkLFdlLmxlbmd0aCksIVdlLmVuZEVtaXR0ZWQmJjA9PT1XZS5sZW5ndGgmJihXZS5lbmRFbWl0dGVkPSEwLEtlLnJlYWRhYmxlPSExLEtlLmVtaXQoImVuZCIpLFdlLmF1dG9EZXN0cm95KSl7dmFyIFllPUtlLl93cml0'@;
put 'YWJsZVN0YXRlOyghWWV8fFllLmF1dG9EZXN0cm95JiZZZS5maW5pc2hlZCkmJktlLmRlc3Ryb3koKX19ZnVuY3Rpb24gamUoV2UsS2Upe2Zvcih2YXIgWWU9MCxRZT1XZS5sZW5ndGg7WWU8UWU7WWUrKylpZihXZVtZZV09PT1LZSlyZXR1cm4gWWU7cmV0dXJuLTF9SC5wcm90b3R5cGUucmVh'@;
put 'ZD1mdW5jdGlvbihXZSl7VigicmVhZCIsV2UpLFdlPXBhcnNlSW50KFdlLDEwKTt2YXIgS2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxZZT1XZTtpZigwIT09V2UmJihLZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1XZSYmS2UubmVlZFJlYWRhYmxlJiYoKDAhPT1LZS5oaWdoV2F0ZXJNYXJrP0tl'@;
put 'Lmxlbmd0aD49S2UuaGlnaFdhdGVyTWFyazpLZS5sZW5ndGg+MCl8fEtlLmVuZGVkKSlyZXR1cm4gVigicmVhZDogZW1pdFJlYWRhYmxlIixLZS5sZW5ndGgsS2UuZW5kZWQpLDA9PT1LZS5sZW5ndGgmJktlLmVuZGVkP0ZlKHRoaXMpOnYodGhpcyksbnVsbDtpZigwPT09KFdlPVMoV2UsS2Up'@;
put 'KSYmS2UuZW5kZWQpcmV0dXJuIDA9PT1LZS5sZW5ndGgmJkZlKHRoaXMpLG51bGw7dmFyIFFlLGx0PUtlLm5lZWRSZWFkYWJsZTtyZXR1cm4gVigibmVlZCByZWFkYWJsZSIsbHQpLCgwPT09S2UubGVuZ3RofHxLZS5sZW5ndGgtV2U8S2UuaGlnaFdhdGVyTWFyaykmJlYoImxlbmd0aCBsZXNz'@;
put 'IHRoYW4gd2F0ZXJtYXJrIixsdD0hMCksS2UuZW5kZWR8fEtlLnJlYWRpbmc/VigicmVhZGluZyBvciBlbmRlZCIsbHQ9ITEpOmx0JiYoVigiZG8gcmVhZCIpLEtlLnJlYWRpbmc9ITAsS2Uuc3luYz0hMCwwPT09S2UubGVuZ3RoJiYoS2UubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKEtl'@;
put 'LmhpZ2hXYXRlck1hcmspLEtlLnN5bmM9ITEsS2UucmVhZGluZ3x8KFdlPVMoWWUsS2UpKSksbnVsbD09PShRZT1XZT4wP0llKFdlLEtlKTpudWxsKT8oS2UubmVlZFJlYWRhYmxlPUtlLmxlbmd0aDw9S2UuaGlnaFdhdGVyTWFyayxXZT0wKTooS2UubGVuZ3RoLT1XZSxLZS5hd2FpdERyYWlu'@;
put 'PTApLDA9PT1LZS5sZW5ndGgmJihLZS5lbmRlZHx8KEtlLm5lZWRSZWFkYWJsZT0hMCksWWUhPT1XZSYmS2UuZW5kZWQmJkZlKHRoaXMpKSxudWxsIT09UWUmJnRoaXMuZW1pdCgiZGF0YSIsUWUpLFFlfSxILnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihXZSl7Ryh0aGlzLG5ldyB1ZSgiX3Jl'@;
put 'YWQoKSIpKX0sSC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihXZSxLZSl7dmFyIFllPXRoaXMsUWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goUWUucGlwZXNDb3VudCl7Y2FzZSAwOlFlLnBpcGVzPVdlO2JyZWFrO2Nhc2UgMTpRZS5waXBlcz1bUWUucGlwZXMsV2VdO2JyZWFrO2RlZmF1'@;
put 'bHQ6UWUucGlwZXMucHVzaChXZSl9UWUucGlwZXNDb3VudCs9MSxWKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLFFlLnBpcGVzQ291bnQsS2UpO3ZhciBsdD1LZSYmITE9PT1LZS5lbmR8fFdlPT09Sy5zdGRvdXR8fFdlPT09Sy5zdGRlcnI/TWU6YmU7ZnVuY3Rpb24gYmUoKXtWKCJvbmVuZCIp'@;
put 'LFdlLmVuZCgpfVFlLmVuZEVtaXR0ZWQ/Sy5uZXh0VGljayhsdCk6WWUub25jZSgiZW5kIixsdCksV2Uub24oInVucGlwZSIsZnVuY3Rpb24gUGUoRGUsemUpe1YoIm9udW5waXBlIiksRGU9PT1ZZSYmemUmJiExPT09emUuaGFzVW5waXBlZCYmKHplLmhhc1VucGlwZWQ9ITAsVigiY2xlYW51'@;
put 'cCIpLFdlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVWUpLFdlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGh0KSxXZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLEFlKSxXZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFhlKSxXZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixQZSksWWUucmVtb3Zl'@;
put 'TGlzdGVuZXIoImVuZCIsYmUpLFllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE1lKSxZZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIscWUpLFRlPSEwLCFRZS5hd2FpdERyYWlufHxXZS5fd3JpdGFibGVTdGF0ZSYmIVdlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8QWUoKSl9KTt2YXIgRGUsQWU9'@;
put 'KERlPVllLGZ1bmN0aW9uKCl7dmFyIHplPURlLl9yZWFkYWJsZVN0YXRlO1YoInBpcGVPbkRyYWluIix6ZS5hd2FpdERyYWluKSx6ZS5hd2FpdERyYWluJiZ6ZS5hd2FpdERyYWluLS0sMD09PXplLmF3YWl0RHJhaW4mJkwoRGUsImRhdGEiKSYmKHplLmZsb3dpbmc9ITAseGUoRGUpKX0pO1dl'@;
put 'Lm9uKCJkcmFpbiIsQWUpO3ZhciBUZT0hMTtmdW5jdGlvbiBxZShEZSl7Vigib25kYXRhIik7dmFyIHplPVdlLndyaXRlKERlKTtWKCJkZXN0LndyaXRlIix6ZSksITE9PT16ZSYmKCgxPT09UWUucGlwZXNDb3VudCYmUWUucGlwZXM9PT1XZXx8UWUucGlwZXNDb3VudD4xJiYtMSE9PWplKFFl'@;
put 'LnBpcGVzLFdlKSkmJiFUZSYmKFYoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsUWUuYXdhaXREcmFpbiksUWUuYXdhaXREcmFpbisrKSxZZS5wYXVzZSgpKX1mdW5jdGlvbiBYZShEZSl7Vigib25lcnJvciIsRGUpLE1lKCksV2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixYZSksMD09'@;
put 'PUwoV2UsImVycm9yIikmJkcoV2UsRGUpfWZ1bmN0aW9uIFVlKCl7V2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaHQpLE1lKCl9ZnVuY3Rpb24gaHQoKXtWKCJvbmZpbmlzaCIpLFdlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVWUpLE1lKCl9ZnVuY3Rpb24gTWUoKXtWKCJ1bnBpcGUiKSxZ'@;
put 'ZS51bnBpcGUoV2UpfXJldHVybiBZZS5vbigiZGF0YSIscWUpLGZ1bmN0aW9uKERlLHplLG90KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBEZS5wcmVwZW5kTGlzdGVuZXIoemUsb3QpO0RlLl9ldmVudHMmJkRlLl9ldmVudHNbemVdP0FycmF5Lmlz'@;
put 'QXJyYXkoRGUuX2V2ZW50c1t6ZV0pP0RlLl9ldmVudHNbemVdLnVuc2hpZnQob3QpOkRlLl9ldmVudHNbemVdPVtvdCxEZS5fZXZlbnRzW3plXV06RGUub24oemUsb3QpfShXZSwiZXJyb3IiLFhlKSxXZS5vbmNlKCJjbG9zZSIsVWUpLFdlLm9uY2UoImZpbmlzaCIsaHQpLFdlLmVtaXQoInBp'@;
put 'cGUiLFllKSxRZS5mbG93aW5nfHwoVigicGlwZSByZXN1bWUiKSxZZS5yZXN1bWUoKSksV2V9LEgucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihXZSl7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWWU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1LZS5waXBlc0NvdW50KXJldHVybiB0aGlz'@;
put 'O2lmKDE9PT1LZS5waXBlc0NvdW50KXJldHVybiBXZSYmV2UhPT1LZS5waXBlc3x8KFdlfHwoV2U9S2UucGlwZXMpLEtlLnBpcGVzPW51bGwsS2UucGlwZXNDb3VudD0wLEtlLmZsb3dpbmc9ITEsV2UmJldlLmVtaXQoInVucGlwZSIsdGhpcyxZZSkpLHRoaXM7aWYoIVdlKXt2YXIgUWU9S2Uu'@;
put 'cGlwZXMsbHQ9S2UucGlwZXNDb3VudDtLZS5waXBlcz1udWxsLEtlLnBpcGVzQ291bnQ9MCxLZS5mbG93aW5nPSExO2Zvcih2YXIgUGU9MDtQZTxsdDtQZSsrKVFlW1BlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgYmU9amUoS2UucGlwZXMs'@;
put 'V2UpO3JldHVybi0xPT09YmV8fChLZS5waXBlcy5zcGxpY2UoYmUsMSksS2UucGlwZXNDb3VudC09MSwxPT09S2UucGlwZXNDb3VudCYmKEtlLnBpcGVzPUtlLnBpcGVzWzBdKSxXZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWWUpKSx0aGlzfSxILnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1ILnByb3Rv'@;
put 'dHlwZS5vbj1mdW5jdGlvbihXZSxLZSl7dmFyIFllPWsucHJvdG90eXBlLm9uLmNhbGwodGhpcyxXZSxLZSksUWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1XZT8oUWUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1R'@;
put 'ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09V2UmJihRZS5lbmRFbWl0dGVkfHxRZS5yZWFkYWJsZUxpc3RlbmluZ3x8KFFlLnJlYWRhYmxlTGlzdGVuaW5nPVFlLm5lZWRSZWFkYWJsZT0hMCxRZS5mbG93aW5nPSExLFFlLmVtaXR0ZWRSZWFkYWJsZT0hMSxWKCJvbiBy'@;
put 'ZWFkYWJsZSIsUWUubGVuZ3RoLFFlLnJlYWRpbmcpLFFlLmxlbmd0aD92KHRoaXMpOlFlLnJlYWRpbmd8fEsubmV4dFRpY2soZGUsdGhpcykpKSxZZX0sSC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oV2UsS2Upe3ZhciBZZT1rLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5j'@;
put 'YWxsKHRoaXMsV2UsS2UpO3JldHVybiJyZWFkYWJsZSI9PT1XZSYmSy5uZXh0VGljayhuZSx0aGlzKSxZZX0sSC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKFdlKXt2YXIgS2U9ay5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KTtyZXR1cm4icmVhZGFibGUiIT09V2UmJnZvaWQgMCE9PVdlfHxLLm5leHRUaWNrKG5lLHRoaXMpLEtlfSxILnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgWWUsV2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gV2UuZmxvd2luZ3x8KFYoInJlc3VtZSIpLFdlLmZsb3dpbmc9'@;
put 'IVdlLnJlYWRhYmxlTGlzdGVuaW5nLChZZT1XZSkucmVzdW1lU2NoZWR1bGVkfHwoWWUucmVzdW1lU2NoZWR1bGVkPSEwLEsubmV4dFRpY2soZmUsdGhpcyxZZSkpKSxXZS5wYXVzZWQ9ITEsdGhpc30sSC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVigiY2FsbCBwYXVzZSBm'@;
put 'bG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0h'@;
put 'MCx0aGlzfSxILnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKFdlKXt2YXIgS2U9dGhpcyxZZT10aGlzLl9yZWFkYWJsZVN0YXRlLFFlPSExO2Zvcih2YXIgbHQgaW4gV2Uub24oImVuZCIsZnVuY3Rpb24oKXtpZihWKCJ3cmFwcGVkIGVuZCIpLFllLmRlY29kZXImJiFZZS5lbmRlZCl7dmFyIGJl'@;
put 'PVllLmRlY29kZXIuZW5kKCk7YmUmJmJlLmxlbmd0aCYmS2UucHVzaChiZSl9S2UucHVzaChudWxsKX0pLFdlLm9uKCJkYXRhIixmdW5jdGlvbihiZSl7Vigid3JhcHBlZCBkYXRhIiksWWUuZGVjb2RlciYmKGJlPVllLmRlY29kZXIud3JpdGUoYmUpKSxZZS5vYmplY3RNb2RlJiZudWxsPT1i'@;
put 'ZXx8KFllLm9iamVjdE1vZGV8fGJlJiZiZS5sZW5ndGgpJiYoS2UucHVzaChiZSl8fChRZT0hMCxXZS5wYXVzZSgpKSl9KSxXZSl2b2lkIDA9PT10aGlzW2x0XSYmImZ1bmN0aW9uIj09dHlwZW9mIFdlW2x0XSYmKHRoaXNbbHRdPWZ1bmN0aW9uKGJlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gV2VbYmVdLmFwcGx5KFdlLGFyZ3VtZW50cyl9fShsdCkpO2Zvcih2YXIgUGU9MDtQZTxiLmxlbmd0aDtQZSsrKVdlLm9uKGJbUGVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsYltQZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihiZSl7Vigid3JhcHBlZCBfcmVhZCIsYmUpLFFlJiYo'@;
put 'UWU9ITEsV2UucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PVgmJihYPVIoNTg1MCkpLFgodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5w'@;
put 'cm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVy'@;
put 'YWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihXZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1XZSl9fSksSC5fZnJvbUxpc3Q9SWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJs'@;
put 'ZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihILmZyb209ZnVuY3Rpb24oV2UsS2Upe3JldHVybiB2b2lkIDA9PT1VJiYoVT1SKDUxNjcpKSxVKEgsV2Us'@;
put 'S2UpfSl9LDQ2MDU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9Qjt2YXIgej1SKDQyODEpLnEsSz16LkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELEw9ei5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssaz16LkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsRT16LkVS'@;
put 'Ul9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxqPVIoNjc1Myk7ZnVuY3Rpb24gVihVLHEpe3ZhciBlZT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtlZS50cmFuc2Zvcm1pbmc9ITE7dmFyIHRlPWVlLndyaXRlY2I7aWYobnVsbD09PXRlKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgTCk7ZWUu'@;
put 'd3JpdGVjaHVuaz1udWxsLGVlLndyaXRlY2I9bnVsbCxudWxsIT1xJiZ0aGlzLnB1c2gocSksdGUoVSk7dmFyIG9lPXRoaXMuX3JlYWRhYmxlU3RhdGU7b2UucmVhZGluZz0hMSwob2UubmVlZFJlYWRhYmxlfHxvZS5sZW5ndGg8b2UuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQob2UuaGln'@;
put 'aFdhdGVyTWFyayl9ZnVuY3Rpb24gQihVKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIoVSk7ai5jYWxsKHRoaXMsVSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOlYuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3'@;
put 'cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLFUmJigiZnVuY3Rpb24iPT10eXBlb2YgVS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09'@;
put 'VS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBVLmZsdXNoJiYodGhpcy5fZmx1c2g9VS5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsWSl9ZnVuY3Rpb24gWSgpe3ZhciBVPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRl'@;
put 'c3Ryb3llZD9YKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihxLGVlKXtYKFUscSxlZSl9KX1mdW5jdGlvbiBYKFUscSxlZSl7aWYocSlyZXR1cm4gVS5lbWl0KCJlcnJvciIscSk7aWYobnVsbCE9ZWUmJlUucHVzaChlZSksVS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhy'@;
put 'b3cgbmV3IEU7aWYoVS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBrO3JldHVybiBVLnB1c2gobnVsbCl9Uig1NzE3KShCLGopLEIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oVSxxKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxq'@;
put 'LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxVLHEpfSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFUscSxlZSl7ZWUobmV3IEsoIl90cmFuc2Zvcm0oKSIpKX0sQi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUscSxlZSl7dmFyIHRlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lm'@;
put 'KHRlLndyaXRlY2I9ZWUsdGUud3JpdGVjaHVuaz1VLHRlLndyaXRlZW5jb2Rpbmc9cSwhdGUudHJhbnNmb3JtaW5nKXt2YXIgb2U9dGhpcy5fcmVhZGFibGVTdGF0ZTsodGUubmVlZFRyYW5zZm9ybXx8b2UubmVlZFJlYWRhYmxlfHxvZS5sZW5ndGg8b2UuaGlnaFdhdGVyTWFyaykmJnRoaXMu'@;
put 'X3JlYWQob2UuaGlnaFdhdGVyTWFyayl9fSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihVKXt2YXIgcT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09cS53cml0ZWNodW5rfHxxLnRyYW5zZm9ybWluZz9xLm5lZWRUcmFuc2Zvcm09ITA6KHEudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3Ry'@;
put 'YW5zZm9ybShxLndyaXRlY2h1bmsscS53cml0ZWVuY29kaW5nLHEuYWZ0ZXJUcmFuc2Zvcm0pKX0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oVSxxKXtqLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsVSxmdW5jdGlvbihlZSl7cShlZSl9KX19LDQyMjk6KE0sTyxSKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDE1NSk7ZnVuY3Rpb24gTCh3KXt2YXIgSj10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbihuZSxkZSxmZSl7dmFyIHhlPW5lLmVudHJ5O2ZvcihuZS5lbnRyeT1udWxsO3hlOyl7'@;
put 'dmFyIEllPXhlLmNhbGxiYWNrO2RlLnBlbmRpbmdjYi0tLEllKHZvaWQgMCkseGU9eGUubmV4dH1kZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1uZX0oSix3KX19TS5leHBvcnRzPUgsSC5Xcml0YWJsZVN0YXRlPUQ7dmFyIEIsaz17ZGVwcmVjYXRlOlIoNDkyNyl9LEU9UigyNTAzKSxqPVIo'@;
put 'ODc2NCkuQnVmZmVyLFY9KHZvaWQgMCE9PVIuZz9SLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sWT1SKDExOTUpLFg9UigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFU9Uig0MjgxKS5xLHE9VS5FUlJf'@;
put 'SU5WQUxJRF9BUkdfVFlQRSxlZT1VLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHRlPVUuRVJSX01VTFRJUExFX0NBTExCQUNLLG9lPVUuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxzZT1VLkVSUl9TVFJFQU1fREVTVFJPWUVELGhlPVUuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyx1ZT1VLkVS'@;
put 'Ul9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELGNlPVUuRVJSX1VOS05PV05fRU5DT0RJTkcsRz1ZLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gRCh3LEosbmUpe3o9enx8Uig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBuZSYmKG5lPUogaW5zdGFuY2VvZiB6KSx0aGlzLm9i'@;
put 'amVjdE1vZGU9ISEodz13fHx7fSkub2JqZWN0TW9kZSxuZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdy53cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1YKHRoaXMsdywid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixuZSksdGhpcy5maW5hbENhbGxl'@;
put 'ZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT13LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXcuZGVmYXVsdEVuY29k'@;
put 'aW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihmZSl7IWZ1bmN0aW9uKHhlLEllKXt2YXIgS2UsRmU9eGUuX3dyaXRhYmxlU3RhdGUs'@;
put 'T2U9RmUuc3luYyxqZT1GZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgdGU7aWYoKEtlPUZlKS53cml0aW5nPSExLEtlLndyaXRlY2I9bnVsbCxLZS5sZW5ndGgtPUtlLndyaXRlbGVuLEtlLndyaXRlbGVuPTAsSWUpIWZ1bmN0aW9uKEtlLFllLFFlLGx0LFBl'@;
put 'KXstLVllLnBlbmRpbmdjYixRZT8oSy5uZXh0VGljayhQZSxsdCksSy5uZXh0VGljayhwLEtlLFllKSxLZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRyhLZSxsdCkpOihQZShsdCksS2UuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEcoS2UsbHQpLHAoS2UsWWUpKX0o'@;
put 'eGUsRmUsT2UsSWUsamUpO2Vsc2V7dmFyIFdlPVMoRmUpfHx4ZS5kZXN0cm95ZWQ7V2V8fEZlLmNvcmtlZHx8RmUuYnVmZmVyUHJvY2Vzc2luZ3x8IUZlLmJ1ZmZlcmVkUmVxdWVzdHx8Qyh4ZSxGZSksT2U/Sy5uZXh0VGljayhnLHhlLEZlLFdlLGplKTpnKHhlLEZlLFdlLGplKX19KEosZmUp'@;
put 'fSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9'@;
put 'ITEhPT13LmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhdy5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEwodGhpcyl9ZnVuY3Rpb24gSCh3KXt2YXIgSj10aGlzIGluc3RhbmNlb2Yoej16fHxSKDY3NTMpKTtp'@;
put 'ZighSiYmIUIuY2FsbChILHRoaXMpKXJldHVybiBuZXcgSCh3KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBEKHcsdGhpcyxKKSx0aGlzLndyaXRhYmxlPSEwLHcmJigiZnVuY3Rpb24iPT10eXBlb2Ygdy53cml0ZSYmKHRoaXMuX3dyaXRlPXcud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB3'@;
put 'LndyaXRldiYmKHRoaXMuX3dyaXRldj13LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIHcuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9dy5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2Ygdy5maW5hbCYmKHRoaXMuX2ZpbmFsPXcuZmluYWwpKSxFLmNhbGwodGhpcyl9ZnVuY3Rpb24gTih3'@;
put 'LEosbmUsZGUsZmUseGUsSWUpe0oud3JpdGVsZW49ZGUsSi53cml0ZWNiPUllLEoud3JpdGluZz0hMCxKLnN5bmM9ITAsSi5kZXN0cm95ZWQ/Si5vbndyaXRlKG5ldyBzZSgid3JpdGUiKSk6bmU/dy5fd3JpdGV2KGZlLEoub253cml0ZSk6dy5fd3JpdGUoZmUseGUsSi5vbndyaXRlKSxKLnN5'@;
put 'bmM9ITF9ZnVuY3Rpb24gZyh3LEosbmUsZGUpe3ZhciBmZSx4ZTtuZXx8KGZlPXcsMD09PSh4ZT1KKS5sZW5ndGgmJnhlLm5lZWREcmFpbiYmKHhlLm5lZWREcmFpbj0hMSxmZS5lbWl0KCJkcmFpbiIpKSksSi5wZW5kaW5nY2ItLSxkZSgpLHAodyxKKX1mdW5jdGlvbiBDKHcsSil7Si5idWZm'@;
put 'ZXJQcm9jZXNzaW5nPSEwO3ZhciBuZT1KLmJ1ZmZlcmVkUmVxdWVzdDtpZih3Ll93cml0ZXYmJm5lJiZuZS5uZXh0KXt2YXIgZmU9bmV3IEFycmF5KEouYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHhlPUouY29ya2VkUmVxdWVzdHNGcmVlO3hlLmVudHJ5PW5lO2Zvcih2YXIgSWU9MCxGZT0hMDtu'@;
put 'ZTspZmVbSWVdPW5lLG5lLmlzQnVmfHwoRmU9ITEpLG5lPW5lLm5leHQsSWUrPTE7ZmUuYWxsQnVmZmVycz1GZSxOKHcsSiwhMCxKLmxlbmd0aCxmZSwiIix4ZS5maW5pc2gpLEoucGVuZGluZ2NiKyssSi5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwseGUubmV4dD8oSi5jb3JrZWRSZXF1ZXN0'@;
put 'c0ZyZWU9eGUubmV4dCx4ZS5uZXh0PW51bGwpOkouY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBMKEopLEouYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7bmU7KXt2YXIgT2U9bmUuY2h1bms7aWYoTih3LEosITEsSi5vYmplY3RNb2RlPzE6T2UubGVuZ3RoLE9lLG5lLmVuY29kaW5n'@;
put 'LG5lLmNhbGxiYWNrKSxuZT1uZS5uZXh0LEouYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxKLndyaXRpbmcpYnJlYWt9bnVsbD09PW5lJiYoSi5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfUouYnVmZmVyZWRSZXF1ZXN0PW5lLEouYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBTKHcpe3Jl'@;
put 'dHVybiB3LmVuZGluZyYmMD09PXcubGVuZ3RoJiZudWxsPT09dy5idWZmZXJlZFJlcXVlc3QmJiF3LmZpbmlzaGVkJiYhdy53cml0aW5nfWZ1bmN0aW9uIHYodyxKKXt3Ll9maW5hbChmdW5jdGlvbihuZSl7Si5wZW5kaW5nY2ItLSxuZSYmRyh3LG5lKSxKLnByZWZpbmlzaGVkPSEwLHcuZW1p'@;
put 'dCgicHJlZmluaXNoIikscCh3LEopfSl9ZnVuY3Rpb24gcCh3LEope3ZhciBmZSx4ZSxuZT1TKEopO2lmKG5lJiYoZmU9dywoeGU9SikucHJlZmluaXNoZWR8fHhlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIGZlLl9maW5hbHx8eGUuZGVzdHJveWVkPyh4ZS5wcmVmaW5pc2hl'@;
put 'ZD0hMCxmZS5lbWl0KCJwcmVmaW5pc2giKSk6KHhlLnBlbmRpbmdjYisrLHhlLmZpbmFsQ2FsbGVkPSEwLEsubmV4dFRpY2sodixmZSx4ZSkpKSwwPT09Si5wZW5kaW5nY2ImJihKLmZpbmlzaGVkPSEwLHcuZW1pdCgiZmluaXNoIiksSi5hdXRvRGVzdHJveSkpKXt2YXIgZGU9dy5fcmVhZGFi'@;
put 'bGVTdGF0ZTsoIWRlfHxkZS5hdXRvRGVzdHJveSYmZGUuZW5kRW1pdHRlZCkmJncuZGVzdHJveSgpfXJldHVybiBuZX1SKDU3MTcpKEgsRSksRC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB3PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LEo9W107dzspSi5wdXNoKHcpLHc9'@;
put 'dy5uZXh0O3JldHVybiBKfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRC5wcm90b3R5cGUsImJ1ZmZlciIse2dldDprLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQu'@;
put 'IFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFu'@;
put 'Y2VdPyhCPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odyl7cmV0dXJuISFCLmNhbGwodGhpcyx3KXx8dGhpcz09PUgmJncmJncuX3dyaXRhYmxlU3RhdGUgaW5z'@;
put 'dGFuY2VvZiBEfX0pKTpCPWZ1bmN0aW9uKHcpe3JldHVybiB3IGluc3RhbmNlb2YgdGhpc30sSC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe0codGhpcyxuZXcgb2UpfSxILnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3LEosbmUpe3ZhciBkZSxGZSxPZSxqZSxmZT10aGlzLl93cml0YWJs'@;
put 'ZVN0YXRlLHhlPSExLEllPSFmZS5vYmplY3RNb2RlJiYoai5pc0J1ZmZlcihkZT13KXx8ZGUgaW5zdGFuY2VvZiBWKTtyZXR1cm4gSWUmJiFqLmlzQnVmZmVyKHcpJiYodz1qLmZyb20odykpLCJmdW5jdGlvbiI9PXR5cGVvZiBKJiYobmU9SixKPW51bGwpLEllP0o9ImJ1ZmZlciI6Snx8KEo9'@;
put 'ZmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgbmUmJihuZT1iKSxmZS5lbmRpbmc/KEZlPXRoaXMsT2U9bmUsamU9bmV3IHVlLEcoRmUsamUpLEsubmV4dFRpY2soT2UsamUpKTooSWV8fGZ1bmN0aW9uKEZlLE9lLGplLFdlKXt2YXIgS2U7cmV0dXJuIG51bGw9PT1qZT9L'@;
put 'ZT1uZXcgaGU6InN0cmluZyI9PXR5cGVvZiBqZXx8T2Uub2JqZWN0TW9kZXx8KEtlPW5ldyBxKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSxqZSkpLCFLZXx8KEcoRmUsS2UpLEsubmV4dFRpY2soV2UsS2UpLCExKX0odGhpcyxmZSx3LG5lKSkmJihmZS5wZW5kaW5nY2IrKyx4ZT1mdW5j'@;
put 'dGlvbihGZSxPZSxqZSxXZSxLZSxZZSl7aWYoIWplKXt2YXIgUWU9KFRlPVdlLChBZT1PZSkub2JqZWN0TW9kZXx8ITE9PT1BZS5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9mIFRlfHwoVGU9ai5mcm9tKFRlLEtlKSksVGUpO1dlIT09UWUmJihqZT0hMCxLZT0iYnVmZmVyIixXZT1R'@;
put 'ZSl9dmFyIEFlLFRlLGx0PU9lLm9iamVjdE1vZGU/MTpXZS5sZW5ndGg7T2UubGVuZ3RoKz1sdDt2YXIgUGU9T2UubGVuZ3RoPE9lLmhpZ2hXYXRlck1hcms7aWYoUGV8fChPZS5uZWVkRHJhaW49ITApLE9lLndyaXRpbmd8fE9lLmNvcmtlZCl7dmFyIGJlPU9lLmxhc3RCdWZmZXJlZFJlcXVl'@;
put 'c3Q7T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6V2UsZW5jb2Rpbmc6S2UsaXNCdWY6amUsY2FsbGJhY2s6WWUsbmV4dDpudWxsfSxiZT9iZS5uZXh0PU9lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6T2UuYnVmZmVyZWRSZXF1ZXN0PU9lLmxhc3RCdWZmZXJlZFJlcXVlc3QsT2UuYnVmZmVy'@;
put 'ZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBOKEZlLE9lLCExLGx0LFdlLEtlLFllKTtyZXR1cm4gUGV9KHRoaXMsZmUsSWUsdyxKLG5lKSkseGV9LEgucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxILnByb3RvdHlwZS51bmNvcms9ZnVuY3Rp'@;
put 'b24oKXt2YXIgdz10aGlzLl93cml0YWJsZVN0YXRlO3cuY29ya2VkJiYody5jb3JrZWQtLSx3LndyaXRpbmd8fHcuY29ya2VkfHx3LmJ1ZmZlclByb2Nlc3Npbmd8fCF3LmJ1ZmZlcmVkUmVxdWVzdHx8Qyh0aGlzLHcpKX0sSC5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9u'@;
put 'KHcpe2lmKCJzdHJpbmciPT10eXBlb2YgdyYmKHc9dy50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh3KyIiKS50b0xvd2VyQ2Fz'@;
put 'ZSgpKT4tMSkpdGhyb3cgbmV3IGNlKHcpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz13LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVT'@;
put 'dGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEgucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih3LEosbmUpe25lKG5ldyBlZSgiX3dyaXRlKCkiKSl9LEgucHJvdG90eXBlLl93cml0ZXY9bnVsbCxILnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odyxKLG5lKXt2YXIgeGUsSWUsZGU9dGhpcy5fd3JpdGFi'@;
put 'bGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygdz8obmU9dyx3PW51bGwsSj1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgSiYmKG5lPUosSj1udWxsKSxudWxsIT13JiZ0aGlzLndyaXRlKHcsSiksZGUuY29ya2VkJiYoZGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksZGUuZW5kaW5n'@;
put 'fHwoSWU9bmUsKHhlPWRlKS5lbmRpbmc9ITAscCh0aGlzLHhlKSxJZSYmKHhlLmZpbmlzaGVkP0submV4dFRpY2soSWUpOnRoaXMub25jZSgiZmluaXNoIixJZSkpLHhlLmVuZGVkPSEwLHRoaXMud3JpdGFibGU9ITEpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwi'@;
put 'd3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odyl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXcpfX0pLEgucHJvdG90eXBlLmRlc3Ryb3k9WS5kZXN0cm95'@;
put 'LEgucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRlc3Ryb3ksSC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odyxKKXtKKHcpfX0sNTg1MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtmdW5jdGlvbiBMKGhlLHVlLGNlKXtyZXR1cm4odWU9InN5bWJvbCI9PXR5'@;
put 'cGVvZihiPWZ1bmN0aW9uKEQsSCl7aWYoIm9iamVjdCIhPXR5cGVvZiBEfHxudWxsPT09RClyZXR1cm4gRDt2YXIgTj1EW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Til7dmFyIGc9Ti5jYWxsKEQsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgZylyZXR1cm4gZzt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoRCl9KHVlKSk/YjpTdHJpbmcoYikpaW4gaGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGhlLHVlLHt2YWx1ZTpjZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy'@;
put 'YWJsZTohMCx3cml0YWJsZTohMH0pOmhlW3VlXT1jZSxoZTt2YXIgYn12YXIgaz1SKDg2MTApLEU9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLGo9U3ltYm9sKCJsYXN0UmVqZWN0IiksVj1TeW1ib2woImVycm9yIiksQj1TeW1ib2woImVuZGVkIiksWT1TeW1ib2woImxhc3RQcm9taXNlIiksWD1T'@;
put 'eW1ib2woImhhbmRsZVByb21pc2UiKSxVPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gcShoZSx1ZSl7cmV0dXJue3ZhbHVlOmhlLGRvbmU6dWV9fWZ1bmN0aW9uIGVlKGhlKXt2YXIgdWU9aGVbRV07aWYobnVsbCE9PXVlKXt2YXIgY2U9aGVbVV0ucmVhZCgpO251bGwhPT1jZSYmKGhlW1ld'@;
put 'PW51bGwsaGVbRV09bnVsbCxoZVtqXT1udWxsLHVlKHEoY2UsITEpKSl9fWZ1bmN0aW9uIHRlKGhlKXtLLm5leHRUaWNrKGVlLGhlKX12YXIgb2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksc2U9T2JqZWN0LnNldFByb3RvdHlwZU9mKChMKHo9e2dldCBzdHJlYW0oKXty'@;
put 'ZXR1cm4gdGhpc1tVXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBoZT10aGlzLHVlPXRoaXNbVl07aWYobnVsbCE9PXVlKXJldHVybiBQcm9taXNlLnJlamVjdCh1ZSk7aWYodGhpc1tCXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHEodm9pZCAwLCEwKSk7aWYodGhpc1tVXS5kZXN0cm95ZWQpcmV0'@;
put 'dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEQsSCl7Sy5uZXh0VGljayhmdW5jdGlvbigpe2hlW1ZdP0goaGVbVl0pOkQocSh2b2lkIDAsITApKX0pfSk7dmFyIGNlLEQsSCxHPXRoaXNbWV07aWYoRyljZT1uZXcgUHJvbWlzZSgoRD1HLEg9dGhpcyxmdW5jdGlvbihOLGcpe0QudGhlbihmdW5j'@;
put 'dGlvbigpe0hbQl0/TihxKHZvaWQgMCwhMCkpOkhbWF0oTixnKX0sZyl9KSk7ZWxzZXt2YXIgYj10aGlzW1VdLnJlYWQoKTtpZihudWxsIT09YilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHEoYiwhMSkpO2NlPW5ldyBQcm9taXNlKHRoaXNbWF0pfXJldHVybiB0aGlzW1ldPWNlLGNlfX0sU3lt'@;
put 'Ym9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEwoeiwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBoZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1ZSxjZSl7aGVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKEcpe0c/Y2UoRyk6dWUocSh2b2lkIDAs'@;
put 'ITApKX0pfSl9KSx6KSxvZSk7TS5leHBvcnRzPWZ1bmN0aW9uKGhlKXt2YXIgdWUsY2U9T2JqZWN0LmNyZWF0ZShzZSwoTCh1ZT17fSxVLHt2YWx1ZTpoZSx3cml0YWJsZTohMH0pLEwodWUsRSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEwodWUsaix7dmFsdWU6bnVsbCx3cml0YWJsZToh'@;
put 'MH0pLEwodWUsVix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEwodWUsQix7dmFsdWU6aGUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLEwodWUsWCx7dmFsdWU6ZnVuY3Rpb24oRyxiKXt2YXIgRD1jZVtVXS5yZWFkKCk7RD8oY2VbWV09bnVsbCxjZVtFXT1udWxs'@;
put 'LGNlW2pdPW51bGwsRyhxKEQsITEpKSk6KGNlW0VdPUcsY2Vbal09Yil9LHdyaXRhYmxlOiEwfSksdWUpKTtyZXR1cm4gY2VbWV09bnVsbCxrKGhlLGZ1bmN0aW9uKEcpe2lmKEcmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1HLmNvZGUpe3ZhciBiPWNlW2pdO3JldHVybiBudWxs'@;
put 'IT09YiYmKGNlW1ldPW51bGwsY2VbRV09bnVsbCxjZVtqXT1udWxsLGIoRykpLHZvaWQoY2VbVl09Ryl9dmFyIEQ9Y2VbRV07bnVsbCE9PUQmJihjZVtZXT1udWxsLGNlW0VdPW51bGwsY2Vbal09bnVsbCxEKHEodm9pZCAwLCEwKSkpLGNlW0JdPSEwfSksaGUub24oInJlYWRhYmxlIix0ZS5i'@;
put 'aW5kKG51bGwsY2UpKSxjZX19LDczMjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KFksWCl7dmFyIFU9T2JqZWN0LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhZKTtYJiYocT1xLmZp'@;
put 'bHRlcihmdW5jdGlvbihlZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxlZSkuZW51bWVyYWJsZX0pKSxVLnB1c2guYXBwbHkoVSxxKX1yZXR1cm4gVX1mdW5jdGlvbiBLKFkpe2Zvcih2YXIgWD0xO1g8YXJndW1lbnRzLmxlbmd0aDtYKyspe3ZhciBVPW51bGwh'@;
put 'PWFyZ3VtZW50c1tYXT9hcmd1bWVudHNbWF06e307WCUyP3ooT2JqZWN0KFUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe0woWSxxLFVbcV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxPYmplY3QuZ2V0T3duUHJvcGVydHlE'@;
put 'ZXNjcmlwdG9ycyhVKSk6eihPYmplY3QoVSkpLmZvckVhY2goZnVuY3Rpb24ocSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFkscSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFUscSkpfSl9cmV0dXJuIFl9ZnVuY3Rpb24gTChZLFgsVSl7cmV0dXJuKFg9RShYKSlpbiBZP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShZLFgse3ZhbHVlOlUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpZW1hdPVUsWX1mdW5jdGlvbiBFKFkpe3ZhciBYPWZ1bmN0aW9uKFUscSl7aWYoIm9iamVjdCIhPXR5cGVvZiBVfHxudWxsPT09VSlyZXR1cm4gVTt2YXIgZWU9'@;
put 'VVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWVlKXt2YXIgdGU9ZWUuY2FsbChVLCJzdHJpbmciKTtpZigib2JqZWN0IiE9dHlwZW9mIHRlKXJldHVybiB0ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp'@;
put 'fXJldHVybiBTdHJpbmcoVSl9KFkpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgWD9YOlN0cmluZyhYKX12YXIgaj1SKDg3NjQpLkJ1ZmZlcixWPVIoMjM2MSkuaW5zcGVjdCxCPVYmJlYuY3VzdG9tfHwiaW5zcGVjdCI7TS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWSgpeyhmdW5jdGlv'@;
put 'bihlZSx0ZSl7aWYoIShlZSBpbnN0YW5jZW9mIHRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH12YXIgWCxVO3JldHVybiBYPVksKFU9'@;
put 'W3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgdGU9e2RhdGE6ZWUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXRlOnRoaXMuaGVhZD10ZSx0aGlzLnRhaWw9dGUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKGVl'@;
put 'KXt2YXIgdGU9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10ZSksdGhpcy5oZWFkPXRlLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlZT10aGlzLmhlYWQuZGF0'@;
put 'YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGVlfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9p'@;
put 'biIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHRlPXRoaXMuaGVhZCxvZT0iIit0ZS5kYXRhO3RlPXRlLm5leHQ7KW9lKz1lZSt0ZS5kYXRhO3JldHVybiBvZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10'@;
put 'aGlzLmxlbmd0aClyZXR1cm4gai5hbGxvYygwKTtmb3IodmFyIGhlPWouYWxsb2NVbnNhZmUoZWU+Pj4wKSx1ZT10aGlzLmhlYWQsY2U9MDt1ZTspai5wcm90b3R5cGUuY29weS5jYWxsKHVlLmRhdGEsaGUsY2UpLGNlKz11ZS5kYXRhLmxlbmd0aCx1ZT11ZS5uZXh0O3JldHVybiBoZX19LHtr'@;
put 'ZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLHRlKXt2YXIgb2U7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ob2U9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpvZT1lZT09PXRoaXMuaGVhZC5k'@;
put 'YXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6dGU/dGhpcy5fZ2V0U3RyaW5nKGVlKTp0aGlzLl9nZXRCdWZmZXIoZWUpLG9lfX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZWUpe3Zh'@;
put 'ciB0ZT10aGlzLmhlYWQsb2U9MSxzZT10ZS5kYXRhO2ZvcihlZS09c2UubGVuZ3RoO3RlPXRlLm5leHQ7KXt2YXIgaGU9dGUuZGF0YSx1ZT1lZT5oZS5sZW5ndGg/aGUubGVuZ3RoOmVlO2lmKHNlKz11ZT09PWhlLmxlbmd0aD9oZTpoZS5zbGljZSgwLGVlKSwwPT0oZWUtPXVlKSl7dWU9PT1o'@;
put 'ZS5sZW5ndGg/KCsrb2UsdGhpcy5oZWFkPXRlLm5leHQ/dGUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD10ZSx0ZS5kYXRhPWhlLnNsaWNlKHVlKSk7YnJlYWt9KytvZX1yZXR1cm4gdGhpcy5sZW5ndGgtPW9lLHNlfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24o'@;
put 'ZWUpe3ZhciB0ZT1qLmFsbG9jVW5zYWZlKGVlKSxvZT10aGlzLmhlYWQsc2U9MTtmb3Iob2UuZGF0YS5jb3B5KHRlKSxlZS09b2UuZGF0YS5sZW5ndGg7b2U9b2UubmV4dDspe3ZhciBoZT1vZS5kYXRhLHVlPWVlPmhlLmxlbmd0aD9oZS5sZW5ndGg6ZWU7aWYoaGUuY29weSh0ZSx0ZS5sZW5n'@;
put 'dGgtZWUsMCx1ZSksMD09KGVlLT11ZSkpe3VlPT09aGUubGVuZ3RoPygrK3NlLHRoaXMuaGVhZD1vZS5uZXh0P29lLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9b2Usb2UuZGF0YT1oZS5zbGljZSh1ZSkpO2JyZWFrfSsrc2V9cmV0dXJuIHRoaXMubGVuZ3RoLT1zZSx0ZX19LHtr'@;
put 'ZXk6Qix2YWx1ZTpmdW5jdGlvbihlZSx0ZSl7cmV0dXJuIFYodGhpcyxLKEsoe30sdGUpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pJiZmdW5jdGlvbiBrKFksWCl7Zm9yKHZhciBVPTA7VTxYLmxlbmd0aDtVKyspe3ZhciBxPVhbVV07cS5lbnVtZXJhYmxlPXEuZW51bWVy'@;
put 'YWJsZXx8ITEscS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHEmJihxLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxFKHEua2V5KSxxKX19KFgucHJvdG90eXBlLFUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLFl9KCl9'@;
put 'LDExOTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoRSxqKXtrKEUsaiksTChFKX1mdW5jdGlvbiBMKEUpe0UuX3dyaXRhYmxlU3RhdGUmJiFFLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8RS5fcmVhZGFibGVTdGF0ZSYmIUUuX3JlYWRhYmxlU3Rh'@;
put 'dGUuZW1pdENsb3NlfHxFLmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gayhFLGope0UuZW1pdCgiZXJyb3IiLGopfU0uZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihFLGope3ZhciBWPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVk'@;
put 'fHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oaj9qKEUpOkUmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsei5uZXh0VGlj'@;
put 'ayhrLHRoaXMsRSkpOnoubmV4dFRpY2soayx0aGlzLEUpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ry'@;
put 'b3koRXx8bnVsbCxmdW5jdGlvbihYKXshaiYmWD9WLl93cml0YWJsZVN0YXRlP1YuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3oubmV4dFRpY2soTCxWKTooVi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsei5uZXh0VGljayhLLFYsWCkpOnoubmV4dFRpY2soSyxWLFgpOmo/'@;
put 'KHoubmV4dFRpY2soTCxWKSxqKFgpKTp6Lm5leHRUaWNrKEwsVil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFk'@;
put 'YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9'@;
put 'ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlv'@;
put 'bihFLGope3ZhciBWPUUuX3JlYWRhYmxlU3RhdGUsQj1FLl93cml0YWJsZVN0YXRlO1YmJlYuYXV0b0Rlc3Ryb3l8fEImJkIuYXV0b0Rlc3Ryb3k/RS5kZXN0cm95KGopOkUuZW1pdCgiZXJyb3IiLGopfX19LDg2MTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODEpLnEuRVJS'@;
put 'X1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gSygpe31NLmV4cG9ydHM9ZnVuY3Rpb24gTChrLEUsail7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEUpcmV0dXJuIEwoayxudWxsLEUpO3ZhciBoZSx1ZTtFfHwoRT17fSksaGU9anx8Syx1ZT0hMSxqPWZ1bmN0aW9uKCl7aWYoIXVlKXt1'@;
put 'ZT0hMDtmb3IodmFyIGNlPWFyZ3VtZW50cy5sZW5ndGgsRz1uZXcgQXJyYXkoY2UpLGI9MDtiPGNlO2IrKylHW2JdPWFyZ3VtZW50c1tiXTtoZS5hcHBseSh0aGlzLEcpfX07dmFyIFY9RS5yZWFkYWJsZXx8ITEhPT1FLnJlYWRhYmxlJiZrLnJlYWRhYmxlLEI9RS53cml0YWJsZXx8ITEhPT1F'@;
put 'LndyaXRhYmxlJiZrLndyaXRhYmxlLFk9ZnVuY3Rpb24oKXtrLndyaXRhYmxlfHxVKCl9LFg9ay5fd3JpdGFibGVTdGF0ZSYmay5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Qj0hMSxYPSEwLFZ8fGouY2FsbChrKX0scT1rLl9yZWFkYWJsZVN0YXRlJiZrLl9yZWFkYWJs'@;
put 'ZVN0YXRlLmVuZEVtaXR0ZWQsZWU9ZnVuY3Rpb24oKXtWPSExLHE9ITAsQnx8ai5jYWxsKGspfSx0ZT1mdW5jdGlvbihoZSl7ai5jYWxsKGssaGUpfSxvZT1mdW5jdGlvbigpe3ZhciBoZTtyZXR1cm4gViYmIXE/KGsuX3JlYWRhYmxlU3RhdGUmJmsuX3JlYWRhYmxlU3RhdGUuZW5kZWR8fCho'@;
put 'ZT1uZXcgeiksai5jYWxsKGssaGUpKTpCJiYhWD8oay5fd3JpdGFibGVTdGF0ZSYmay5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KGhlPW5ldyB6KSxqLmNhbGwoayxoZSkpOnZvaWQgMH0sc2U9ZnVuY3Rpb24oKXtrLnJlcS5vbigiZmluaXNoIixVKX07cmV0dXJuIGZ1bmN0aW9uKGhlKXtyZXR1'@;
put 'cm4gaGUuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgaGUuYWJvcnR9KGspPyhrLm9uKCJjb21wbGV0ZSIsVSksay5vbigiYWJvcnQiLG9lKSxrLnJlcT9zZSgpOmsub24oInJlcXVlc3QiLHNlKSk6QiYmIWsuX3dyaXRhYmxlU3RhdGUmJihrLm9uKCJlbmQiLFkpLGsub24oImNsb3Nl'@;
put 'IixZKSksay5vbigiZW5kIixlZSksay5vbigiZmluaXNoIixVKSwhMSE9PUUuZXJyb3ImJmsub24oImVycm9yIix0ZSksay5vbigiY2xvc2UiLG9lKSxmdW5jdGlvbigpe2sucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxrLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsb2UpLGsucmVtb3Zl'@;
put 'TGlzdGVuZXIoInJlcXVlc3QiLHNlKSxrLnJlcSYmay5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksay5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxrLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWSksay5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxrLnJlbW92ZUxpc3RlbmVyKCJl'@;
put 'bmQiLGVlKSxrLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdGUpLGsucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixvZSl9fX0sNTE2NzpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19'@;
put 'LDk5NDY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDI4MSkucSxMPUsuRVJSX01JU1NJTkdfQVJHUyxrPUsuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gRShCKXtpZihCKXRocm93IEJ9ZnVuY3Rpb24gaihCKXtCKCl9ZnVuY3Rpb24gVihCLFkpe3JldHVybiBCLnBp'@;
put 'cGUoWSl9TS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPWFyZ3VtZW50cy5sZW5ndGgsWT1uZXcgQXJyYXkoQiksWD0wO1g8QjtYKyspWVtYXT1hcmd1bWVudHNbWF07dmFyIFUsdGUscT0odGU9WSkubGVuZ3RoPyJmdW5jdGlvbiIhPXR5cGVvZiB0ZVt0ZS5sZW5ndGgtMV0/RTp0ZS5w'@;
put 'b3AoKTpFO2lmKEFycmF5LmlzQXJyYXkoWVswXSkmJihZPVlbMF0pLFkubGVuZ3RoPDIpdGhyb3cgbmV3IEwoInN0cmVhbXMiKTt2YXIgZWU9WS5tYXAoZnVuY3Rpb24odGUsb2Upe3ZhciBzZT1vZTxZLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihoZSx1ZSxjZSxHKXt2YXIgSCxOO0g9RyxO'@;
put 'PSExLEc9ZnVuY3Rpb24oKXtOfHwoTj0hMCxILmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX07dmFyIGI9ITE7aGUub24oImNsb3NlIixmdW5jdGlvbigpe2I9ITB9KSx2b2lkIDA9PT16JiYoej1SKDg2MTApKSx6KGhlLHtyZWFkYWJsZTp1ZSx3cml0YWJsZTpjZX0sZnVuY3Rpb24oSCl7aWYo'@;
put 'SClyZXR1cm4gRyhIKTtiPSEwLEcoKX0pO3ZhciBEPSExO3JldHVybiBmdW5jdGlvbihIKXtpZighYiYmIUQpcmV0dXJuIEQ9ITAsZnVuY3Rpb24oTil7cmV0dXJuIE4uc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgTi5hYm9ydH0oaGUpP2hlLmFib3J0KCk6ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGhlLmRlc3Ryb3k/aGUuZGVzdHJveSgpOnZvaWQgRyhIfHxuZXcgaygicGlwZSIpKX19KHRlLHNlLG9lPjAsZnVuY3Rpb24oaGUpe1V8fChVPWhlKSxoZSYmZWUuZm9yRWFjaChqKSxzZXx8KGVlLmZvckVhY2goaikscShVKSl9KX0pO3JldHVybiBZLnJlZHVjZShWKX19LDI0NTc6KE0s'@;
put 'TyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO00uZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbihLLEwsayxFKXt2YXIgVixqPW51bGwhPShWPUwpLmhpZ2hXYXRlck1hcms/Vi5oaWdoV2F0ZXJNYXJrOkU/VltrXTpudWxs'@;
put 'O2lmKG51bGwhPWope2lmKCFpc0Zpbml0ZShqKXx8TWF0aC5mbG9vcihqKSE9PWp8fGo8MCl0aHJvdyBuZXcgeihFP2s6ImhpZ2hXYXRlck1hcmsiLGopO3JldHVybiBNYXRoLmZsb29yKGopfXJldHVybiBLLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMjUwMzooTSxPLFIpPT57TS5leHBvcnRz'@;
put 'PVIoNzE4NykuRXZlbnRFbWl0dGVyfSw4NDczOihNLE8sUik9PnsoTz1NLmV4cG9ydHM9Uig5NDgxKSkuU3RyZWFtPU8sTy5SZWFkYWJsZT1PLE8uV3JpdGFibGU9Uig0MjI5KSxPLkR1cGxleD1SKDY3NTMpLE8uVHJhbnNmb3JtPVIoNDYwNSksTy5QYXNzVGhyb3VnaD1SKDI3MjUpLE8uZmlu'@;
put 'aXNoZWQ9Uig4NjEwKSxPLnBpcGVsaW5lPVIoOTk0Nil9LDc0MTg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtpZihSPVIuc3BsaXQoIjoiKVswXSwhKE89K08pKXJldHVybiExO3N3aXRjaChSKXtjYXNlImh0dHAiOmNhc2Uid3MiOnJldHVybiA4MCE9PU87Y2Fz'@;
put 'ZSJodHRwcyI6Y2FzZSJ3c3MiOnJldHVybiA0NDMhPT1PO2Nhc2UiZnRwIjpyZXR1cm4gMjEhPT1PO2Nhc2UiZ29waGVyIjpyZXR1cm4gNzAhPT1PO2Nhc2UiZmlsZSI6cmV0dXJuITF9cmV0dXJuIDAhPT1PfX0sOTg0OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpO2NvbnN0IEs9Uig5MjgyKSxM'@;
put 'PVIoMjUyMCksaz1SKDcyMTcpO2xldCBFO3RyeXtFPVIoMjg4NCl9Y2F0Y2h7fWNvbnN0IGo9e25vc29ydDohMCxzaWxlbnQ6ITB9O2xldCBWPTA7Y29uc3QgQj0id2luMzIiPT09ei5wbGF0Zm9ybSxZPWNlPT57aWYoWyJ1bmxpbmsiLCJjaG1vZCIsInN0YXQiLCJsc3RhdCIsInJtZGlyIiwi'@;
put 'cmVhZGRpciJdLmZvckVhY2goRz0+e2NlW0ddPWNlW0ddfHxrW0ddLGNlW0crPSJTeW5jIl09Y2VbR118fGtbR119KSxjZS5tYXhCdXN5VHJpZXM9Y2UubWF4QnVzeVRyaWVzfHwzLGNlLmVtZmlsZVdhaXQ9Y2UuZW1maWxlV2FpdHx8MWUzLCExPT09Y2UuZ2xvYiYmKGNlLmRpc2FibGVHbG9i'@;
put 'PSEwKSwhMCE9PWNlLmRpc2FibGVHbG9iJiZ2b2lkIDA9PT1FKXRocm93IEVycm9yKCJnbG9iIGRlcGVuZGVuY3kgbm90IGZvdW5kLCBzZXQgYG9wdGlvbnMuZGlzYWJsZUdsb2IgPSB0cnVlYCBpZiBpbnRlbnRpb25hbCIpO2NlLmRpc2FibGVHbG9iPWNlLmRpc2FibGVHbG9ifHwhMSxjZS5n'@;
put 'bG9iPWNlLmdsb2J8fGp9LFg9KGNlLEcsYik9PnsiZnVuY3Rpb24iPT10eXBlb2YgRyYmKGI9RyxHPXt9KSxLKGNlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLEsuZXF1YWwodHlwZW9mIGNlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksSy5lcXVhbCh0eXBl'@;
put 'b2YgYiwiZnVuY3Rpb24iLCJyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkIiksSyhHLCJyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCIpLEsuZXF1YWwodHlwZW9mIEcsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0Iiks'@;
put 'WShHKTtsZXQgRD0wLEg9bnVsbCxOPTA7Y29uc3QgZz0oQyxTKT0+Qz9iKEMpOihOPVMubGVuZ3RoLDA9PT1OP2IoKTp2b2lkIFMuZm9yRWFjaCh2PT57Y29uc3QgcD13PT57aWYodyl7aWYoKCJFQlVTWSI9PT13LmNvZGV8fCJFTk9URU1QVFkiPT09dy5jb2RlfHwiRVBFUk0iPT09dy5jb2Rl'@;
put 'KSYmRDxHLm1heEJ1c3lUcmllcylyZXR1cm4gRCsrLHNldFRpbWVvdXQoKCk9PlUodixHLHApLDEwMCpEKTtpZigiRU1GSUxFIj09PXcuY29kZSYmVjxHLmVtZmlsZVdhaXQpcmV0dXJuIHNldFRpbWVvdXQoKCk9PlUodixHLHApLFYrKyk7IkVOT0VOVCI9PT13LmNvZGUmJih3PW51bGwpfVY9'@;
put 'MCxIPUh8fHcsMD09LS1OJiZiKEgpfTtVKHYsRyxwKX0pKTtpZihHLmRpc2FibGVHbG9ifHwhRS5oYXNNYWdpYyhjZSkpcmV0dXJuIGcobnVsbCxbY2VdKTtHLmxzdGF0KGNlLChDLFMpPT57aWYoIUMpcmV0dXJuIGcobnVsbCxbY2VdKTtFKGNlLEcuZ2xvYixnKX0pfSxVPShjZSxHLGIpPT57'@;
put 'SyhjZSksSyhHKSxLKCJmdW5jdGlvbiI9PXR5cGVvZiBiKSxHLmxzdGF0KGNlLChELEgpPT5EJiYiRU5PRU5UIj09PUQuY29kZT9iKG51bGwpOihEJiYiRVBFUk0iPT09RC5jb2RlJiZCJiZxKGNlLEcsRCxiKSxIJiZILmlzRGlyZWN0b3J5KCk/dGUoY2UsRyxELGIpOnZvaWQgRy51bmxpbmso'@;
put 'Y2UsTj0+e2lmKE4pe2lmKCJFTk9FTlQiPT09Ti5jb2RlKXJldHVybiBiKG51bGwpO2lmKCJFUEVSTSI9PT1OLmNvZGUpcmV0dXJuIEI/cShjZSxHLE4sYik6dGUoY2UsRyxOLGIpO2lmKCJFSVNESVIiPT09Ti5jb2RlKXJldHVybiB0ZShjZSxHLE4sYil9cmV0dXJuIGIoTil9KSkpfSxxPShj'@;
put 'ZSxHLGIsRCk9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIEQpLEcuY2htb2QoY2UsNDM4LEg9PntIP0QoIkVOT0VOVCI9PT1ILmNvZGU/bnVsbDpiKTpHLnN0YXQoY2UsKE4sZyk9PntOP0QoIkVOT0VOVCI9PT1OLmNvZGU/bnVsbDpiKTpnLmlzRGlyZWN0b3J5KCk/dGUoY2Us'@;
put 'RyxiLEQpOkcudW5saW5rKGNlLEQpfSl9KX0sZWU9KGNlLEcsYik9PntLKGNlKSxLKEcpO3RyeXtHLmNobW9kU3luYyhjZSw0MzgpfWNhdGNoKEgpe2lmKCJFTk9FTlQiPT09SC5jb2RlKXJldHVybjt0aHJvdyBifWxldCBEO3RyeXtEPUcuc3RhdFN5bmMoY2UpfWNhdGNoKEgpe2lmKCJFTk9F'@;
put 'TlQiPT09SC5jb2RlKXJldHVybjt0aHJvdyBifUQuaXNEaXJlY3RvcnkoKT9oZShjZSxHLGIpOkcudW5saW5rU3luYyhjZSl9LHRlPShjZSxHLGIsRCk9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIEQpLEcucm1kaXIoY2UsSD0+eyFIfHwiRU5PVEVNUFRZIiE9PUguY29kZSYm'@;
put 'IkVFWElTVCIhPT1ILmNvZGUmJiJFUEVSTSIhPT1ILmNvZGU/RChIJiYiRU5PVERJUiI9PT1ILmNvZGU/YjpIKTpvZShjZSxHLEQpfSl9LG9lPShjZSxHLGIpPT57SyhjZSksSyhHKSxLKCJmdW5jdGlvbiI9PXR5cGVvZiBiKSxHLnJlYWRkaXIoY2UsKEQsSCk9PntpZihEKXJldHVybiBiKEQp'@;
put 'O2xldCBOLGc9SC5sZW5ndGg7aWYoMD09PWcpcmV0dXJuIEcucm1kaXIoY2UsYik7SC5mb3JFYWNoKEM9PntYKEwuam9pbihjZSxDKSxHLFM9PntpZighTilyZXR1cm4gUz9iKE49Uyk6dm9pZCgwPT0tLWcmJkcucm1kaXIoY2UsYikpfSl9KX0pfSxzZT0oY2UsRyk9PntsZXQgYjtpZihZKEc9'@;
put 'R3x8e30pLEsoY2UsInJpbXJhZjogbWlzc2luZyBwYXRoIiksSy5lcXVhbCh0eXBlb2YgY2UsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxLKEcsInJpbXJhZjogbWlzc2luZyBvcHRpb25zIiksSy5lcXVhbCh0eXBlb2YgRywib2JqZWN0IiwicmltcmFmOiBv'@;
put 'cHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxHLmRpc2FibGVHbG9ifHwhRS5oYXNNYWdpYyhjZSkpYj1bY2VdO2Vsc2UgdHJ5e0cubHN0YXRTeW5jKGNlKSxiPVtjZV19Y2F0Y2h7Yj1FLnN5bmMoY2UsRy5nbG9iKX1pZihiLmxlbmd0aClmb3IobGV0IEQ9MDtEPGIubGVuZ3RoO0QrKyl7Y29u'@;
put 'c3QgSD1iW0RdO2xldCBOO3RyeXtOPUcubHN0YXRTeW5jKEgpfWNhdGNoKGcpe2lmKCJFTk9FTlQiPT09Zy5jb2RlKXJldHVybjsiRVBFUk0iPT09Zy5jb2RlJiZCJiZlZShILEcsZyl9dHJ5e04mJk4uaXNEaXJlY3RvcnkoKT9oZShILEcsbnVsbCk6Ry51bmxpbmtTeW5jKEgpfWNhdGNoKGcp'@;
put 'e2lmKCJFTk9FTlQiPT09Zy5jb2RlKXJldHVybjtpZigiRVBFUk0iPT09Zy5jb2RlKXJldHVybiBCP2VlKEgsRyxnKTpoZShILEcsZyk7aWYoIkVJU0RJUiIhPT1nLmNvZGUpdGhyb3cgZztoZShILEcsZyl9fX0saGU9KGNlLEcsYik9PntLKGNlKSxLKEcpO3RyeXtHLnJtZGlyU3luYyhjZSl9'@;
put 'Y2F0Y2goRCl7aWYoIkVOT0VOVCI9PT1ELmNvZGUpcmV0dXJuO2lmKCJFTk9URElSIj09PUQuY29kZSl0aHJvdyBiOyJFTk9URU1QVFkiIT09RC5jb2RlJiYiRUVYSVNUIiE9PUQuY29kZSYmIkVQRVJNIiE9PUQuY29kZXx8dWUoY2UsRyl9fSx1ZT0oY2UsRyk9PntLKGNlKSxLKEcpLEcucmVh'@;
put 'ZGRpclN5bmMoY2UpLmZvckVhY2goSD0+c2UoTC5qb2luKGNlLEgpLEcpKTtjb25zdCBiPUI/MTAwOjE7bGV0IEQ9MDtmb3IoOzspe2xldCBIPSEwO3RyeXtjb25zdCBOPUcucm1kaXJTeW5jKGNlLEcpO3JldHVybiBIPSExLE59ZmluYWxseXtpZigrK0Q8YiYmSCljb250aW51ZX19fTtNLmV4'@;
put 'cG9ydHM9WCxYLnN5bmM9c2V9LDk3ODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNTcxNyksTD1SKDMzNDkpLGs9bmV3IEFycmF5KDE2KSxFPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywx'@;
put 'MiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGo9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwx'@;
put 'LDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVj1b'@;
put 'MTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUs'@;
put 'NSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sQj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4'@;
put 'LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sWT1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxYPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUz'@;
put 'OTk0MjE3LDBdO2Z1bmN0aW9uIFUoKXtMLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIHEodWUsY2Upe3JldHVybiB1ZTw8Y2V8'@;
put 'dWU+Pj4zMi1jZX1mdW5jdGlvbiBlZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlXkdeYikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIHRlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2UmR3x+Y2UmYikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIG9lKHVlLGNlLEcs'@;
put 'YixELEgsTixnKXtyZXR1cm4gcSh1ZSsoKGNlfH5HKV5iKStIK058MCxnKStEfDB9ZnVuY3Rpb24gc2UodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZSZifEcmfmIpK0grTnwwLGcpK0R8MH1mdW5jdGlvbiBoZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlXihH'@;
put 'fH5iKSkrSCtOfDAsZykrRHwwfUsoVSxMKSxVLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB1ZT1rLGNlPTA7Y2U8MTY7KytjZSl1ZVtjZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpjZSk7Zm9yKHZhciBHPTB8dGhpcy5fYSxiPTB8dGhpcy5fYixEPTB8dGhpcy5f'@;
put 'YyxIPTB8dGhpcy5fZCxOPTB8dGhpcy5fZSxnPTB8dGhpcy5fYSxDPTB8dGhpcy5fYixTPTB8dGhpcy5fYyx2PTB8dGhpcy5fZCxwPTB8dGhpcy5fZSx3PTA7dzw4MDt3Kz0xKXt2YXIgSixuZTt3PDE2PyhKPWVlKEcsYixELEgsTix1ZVtFW3ddXSxZWzBdLFZbd10pLG5lPWhlKGcsQyxTLHYs'@;
put 'cCx1ZVtqW3ddXSxYWzBdLEJbd10pKTp3PDMyPyhKPXRlKEcsYixELEgsTix1ZVtFW3ddXSxZWzFdLFZbd10pLG5lPXNlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzFdLEJbd10pKTp3PDQ4PyhKPW9lKEcsYixELEgsTix1ZVtFW3ddXSxZWzJdLFZbd10pLG5lPW9lKGcsQyxTLHYscCx1ZVtqW3dd'@;
put 'XSxYWzJdLEJbd10pKTp3PDY0PyhKPXNlKEcsYixELEgsTix1ZVtFW3ddXSxZWzNdLFZbd10pLG5lPXRlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzNdLEJbd10pKTooSj1oZShHLGIsRCxILE4sdWVbRVt3XV0sWVs0XSxWW3ddKSxuZT1lZShnLEMsUyx2LHAsdWVbalt3XV0sWFs0XSxCW3ddKSks'@;
put 'Rz1OLE49SCxIPXEoRCwxMCksRD1iLGI9SixnPXAscD12LHY9cShTLDEwKSxTPUMsQz1uZX12YXIgZGU9dGhpcy5fYitEK3Z8MDt0aGlzLl9iPXRoaXMuX2MrSCtwfDAsdGhpcy5fYz10aGlzLl9kK04rZ3wwLHRoaXMuX2Q9dGhpcy5fZStHK0N8MCx0aGlzLl9lPXRoaXMuX2ErYitTfDAsdGhp'@;
put 'cy5fYT1kZX0sVS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxv'@;
put 'Y2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciB1'@;
put 'ZT16LmFsbG9jP3ouYWxsb2MoMjApOm5ldyB6KDIwKTtyZXR1cm4gdWUud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLHVlLndyaXRlSW50MzJMRSh0'@;
put 'aGlzLl9lLDE2KSx1ZX0sTS5leHBvcnRzPVV9LDk1MDk6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCksSz16LkJ1ZmZlcjtmdW5jdGlvbiBMKEUsail7Zm9yKHZhciBWIGluIEUpaltWXT1FW1ZdfWZ1bmN0aW9uIGsoRSxqLFYpe3JldHVybiBLKEUsaixWKX1LLmZyb20mJksuYWxsb2MmJksuYWxs'@;
put 'b2NVbnNhZmUmJksuYWxsb2NVbnNhZmVTbG93P00uZXhwb3J0cz16OihMKHosTyksTy5CdWZmZXI9ayksay5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShLLnByb3RvdHlwZSksTChLLGspLGsuZnJvbT1mdW5jdGlvbihFLGosVil7aWYoIm51bWJlciI9PXR5cGVvZiBFKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIEsoRSxqLFYpfSxrLmFsbG9jPWZ1bmN0aW9uKEUsaixWKXtpZigibnVtYmVyIiE9dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBCPUsoRSk7cmV0'@;
put 'dXJuIHZvaWQgMCE9PWo/InN0cmluZyI9PXR5cGVvZiBWP0IuZmlsbChqLFYpOkIuZmlsbChqKTpCLmZpbGwoMCksQn0say5hbGxvY1Vuc2FmZT1mdW5jdGlvbihFKXtpZigibnVtYmVyIiE9dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIp'@;
put 'O3JldHVybiBLKEUpfSxrLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihFKXtpZigibnVtYmVyIiE9dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiB6LlNsb3dCdWZmZXIoRSl9fSwyMzk5OihNLE8sUik9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIHosSz1SKDQxNTUpLEw9Uig4NzY0KSxrPUwuQnVmZmVyLEU9e307Zm9yKHogaW4gTClMLmhhc093blByb3BlcnR5KHopJiYiU2xvd0J1ZmZlciIhPT16JiYiQnVmZmVyIiE9PXomJihFW3pdPUxbel0pO3ZhciBqPUUuQnVmZmVyPXt9O2Zvcih6IGluIGspay5oYXNPd25Qcm9wZXJ0'@;
put 'eSh6KSYmImFsbG9jVW5zYWZlIiE9PXomJiJhbGxvY1Vuc2FmZVNsb3ciIT09eiYmKGpbel09a1t6XSk7aWYoRS5CdWZmZXIucHJvdG90eXBlPWsucHJvdG90eXBlLGouZnJvbSYmai5mcm9tIT09VWludDhBcnJheS5mcm9tfHwoai5mcm9tPWZ1bmN0aW9uKFYsQixZKXtpZigibnVtYmVyIj09'@;
put 'dHlwZW9mIFYpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVik7aWYoViYmdm9pZCAwPT09Vi5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3Vt'@;
put 'ZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVik7cmV0dXJuIGsoVixCLFkpfSksai5hbGxvY3x8KGouYWxsb2M9ZnVuY3Rpb24oVixCLFkpe2lmKCJu'@;
put 'dW1iZXIiIT10eXBlb2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVik7aWYoVjwwfHxWPj0yMTQ3NDgzNjQ4KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicr'@;
put 'VisnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIFg9ayhWKTtyZXR1cm4gQiYmMCE9PUIubGVuZ3RoPyJzdHJpbmciPT10eXBlb2YgWT9YLmZpbGwoQixZKTpYLmZpbGwoQik6WC5maWxsKDApLFh9KSwhRS5rU3RyaW5nTWF4TGVuZ3RoKXRyeXtFLmtTdHJpbmdNYXhMZW5n'@;
put 'dGg9Sy5iaW5kaW5nKCJidWZmZXIiKS5rU3RyaW5nTWF4TGVuZ3RofWNhdGNoe31FLmNvbnN0YW50c3x8KEUuY29uc3RhbnRzPXtNQVhfTEVOR1RIOkUua01heExlbmd0aH0sRS5rU3RyaW5nTWF4TGVuZ3RoJiYoRS5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9RS5rU3RyaW5nTWF4TGVu'@;
put 'Z3RoKSksTS5leHBvcnRzPUV9LDQxODk6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoTCxrKXt0aGlzLl9ibG9jaz16LmFsbG9jKEwpLHRoaXMuX2ZpbmFsU2l6ZT1rLHRoaXMuX2Jsb2NrU2l6ZT1MLHRoaXMuX2xlbj0wfUsucHJvdG90eXBlLnVwZGF0ZT1mdW5j'@;
put 'dGlvbihMLGspeyJzdHJpbmciPT10eXBlb2YgTCYmKEw9ei5mcm9tKEwsaz1rfHwidXRmOCIpKTtmb3IodmFyIEU9dGhpcy5fYmxvY2ssaj10aGlzLl9ibG9ja1NpemUsVj1MLmxlbmd0aCxCPXRoaXMuX2xlbixZPTA7WTxWOyl7Zm9yKHZhciBYPUIlaixVPU1hdGgubWluKFYtWSxqLVgpLHE9'@;
put 'MDtxPFU7cSsrKUVbWCtxXT1MW1krcV07WSs9VSwoQis9VSklaj09MCYmdGhpcy5fdXBkYXRlKEUpfXJldHVybiB0aGlzLl9sZW4rPVYsdGhpc30sSy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEwpe3ZhciBrPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tba109MTI4'@;
put 'LHRoaXMuX2Jsb2NrLmZpbGwoMCxrKzEpLGs+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIEU9OCp0aGlzLl9sZW47aWYoRTw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKEUsdGhpcy5fYmxv'@;
put 'Y2tTaXplLTQpO2Vsc2V7dmFyIGo9KDQyOTQ5NjcyOTUmRSk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKEUtaikvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShqLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhp'@;
put 'cy5fYmxvY2spO3ZhciBCPXRoaXMuX2hhc2goKTtyZXR1cm4gTD9CLnRvU3RyaW5nKEwpOkJ9LEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSxNLmV4cG9ydHM9S30sOTA3Mjoo'@;
put 'TSxPLFIpPT57dmFyIHo9TS5leHBvcnRzPWZ1bmN0aW9uKEspe0s9Sy50b0xvd2VyQ2FzZSgpO3ZhciBMPXpbS107aWYoIUwpdGhyb3cgbmV3IEVycm9yKEsrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEx9O3ouc2hhPVIoNDQ0OCks'@;
put 'ei5zaGExPVIoODMzNiksei5zaGEyMjQ9Uig4NDMyKSx6LnNoYTI1Nj1SKDc0OTkpLHouc2hhMzg0PVIoMTY4Niksei5zaGE1MTI9Uig3ODE2KX0sNDQ0ODooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksTD1SKDk1MDkpLkJ1ZmZlcixrPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMs'@;
put 'LTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sRT1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFYoWSl7cmV0dXJuIFk8PDMwfFk+Pj4yfWZ1bmN0aW9uIEIoWSxYLFUscSl7cmV0dXJuIDA9PT1ZP1gmVXx+'@;
put 'WCZxOjI9PT1ZP1gmVXxYJnF8VSZxOlheVV5xfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0'@;
put 'aGlzfSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWCxVPXRoaXMuX3cscT0wfHRoaXMuX2EsZWU9MHx0aGlzLl9iLHRlPTB8dGhpcy5fYyxvZT0wfHRoaXMuX2Qsc2U9MHx0aGlzLl9lLGhlPTA7aGU8MTY7KytoZSlVW2hlXT1ZLnJlYWRJbnQzMkJFKDQqaGUpO2Zv'@;
put 'cig7aGU8ODA7KytoZSlVW2hlXT1VW2hlLTNdXlVbaGUtOF1eVVtoZS0xNF1eVVtoZS0xNl07Zm9yKHZhciB1ZT0wO3VlPDgwOysrdWUpe3ZhciBjZT1+fih1ZS8yMCksRz0wfCgoWD1xKTw8NXxYPj4+MjcpK0IoY2UsZWUsdGUsb2UpK3NlK1VbdWVdK2tbY2VdO3NlPW9lLG9lPXRlLHRlPVYo'@;
put 'ZWUpLGVlPXEscT1HfXRoaXMuX2E9cSt0aGlzLl9hfDAsdGhpcy5fYj1lZSt0aGlzLl9ifDAsdGhpcy5fYz10ZSt0aGlzLl9jfDAsdGhpcy5fZD1vZSt0aGlzLl9kfDAsdGhpcy5fZT1zZSt0aGlzLl9lfDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFk9TC5hbGxvY1Vuc2Fm'@;
put 'ZSgyMCk7cmV0dXJuIFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksWS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksWS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxZfSxNLmV4cG9y'@;
put 'dHM9an0sODMzNjooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksTD1SKDk1MDkpLkJ1ZmZlcixrPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sRT1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSy5j'@;
put 'YWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFYoWCl7cmV0dXJuIFg8PDV8WD4+PjI3fWZ1bmN0aW9uIEIoWCl7cmV0dXJuIFg8PDMwfFg+Pj4yfWZ1bmN0aW9uIFkoWCxVLHEsZWUpe3JldHVybiAwPT09WD9VJnF8flUmZWU6Mj09PVg/VSZxfFUmZWV8cSZlZTpVXnFeZWV9eihqLEspLGoucHJv'@;
put 'dG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCl7Zm9y'@;
put 'KHZhciBVLHE9dGhpcy5fdyxlZT0wfHRoaXMuX2EsdGU9MHx0aGlzLl9iLG9lPTB8dGhpcy5fYyxzZT0wfHRoaXMuX2QsaGU9MHx0aGlzLl9lLHVlPTA7dWU8MTY7Kyt1ZSlxW3VlXT1YLnJlYWRJbnQzMkJFKDQqdWUpO2Zvcig7dWU8ODA7Kyt1ZSlxW3VlXT0oVT1xW3VlLTNdXnFbdWUtOF1e'@;
put 'cVt1ZS0xNF1ecVt1ZS0xNl0pPDwxfFU+Pj4zMTtmb3IodmFyIGNlPTA7Y2U8ODA7KytjZSl7dmFyIEc9fn4oY2UvMjApLGI9VihlZSkrWShHLHRlLG9lLHNlKStoZStxW2NlXStrW0ddfDA7aGU9c2Usc2U9b2Usb2U9Qih0ZSksdGU9ZWUsZWU9Yn10aGlzLl9hPWVlK3RoaXMuX2F8MCx0aGlz'@;
put 'Ll9iPXRlK3RoaXMuX2J8MCx0aGlzLl9jPW9lK3RoaXMuX2N8MCx0aGlzLl9kPXNlK3RoaXMuX2R8MCx0aGlzLl9lPWhlK3RoaXMuX2V8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWD1MLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gWC53cml0ZUludDMyQkUoMHx0aGlzLl9h'@;
put 'LDApLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksWC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLFh9LE0uZXhwb3J0cz1qfSw4NDMyOihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9'@;
put 'Uig3NDk5KSxMPVIoNDE4OSksaz1SKDk1MDkpLkJ1ZmZlcixFPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxMLmNhbGwodGhpcyw2NCw1Nil9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMy'@;
put 'LHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24o'@;
put 'KXt2YXIgVj1rLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gVi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxWLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFYud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksVi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksVi53cml0ZUludDMyQkUodGhpcy5fZSwxNiks'@;
put 'Vi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksVi53cml0ZUludDMyQkUodGhpcy5fZywyNCksVn0sTS5leHBvcnRzPWp9LDc0OTk6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDQxODkpLEw9Uig5NTA5KS5CdWZmZXIsaz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzky'@;
put 'MTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3'@;
put 'MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEy'@;
put 'OTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5'@;
put 'NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxFPW5ldyBB'@;
put 'cnJheSg2NCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihxLGVlLHRlKXtyZXR1cm4gdGVecSYoZWVedGUpfWZ1bmN0aW9uIEIocSxlZSx0ZSl7cmV0dXJuIHEmZWV8dGUmKHF8ZWUpfWZ1bmN0aW9uIFkocSl7cmV0dXJu'@;
put 'KHE+Pj4yfHE8PDMwKV4ocT4+PjEzfHE8PDE5KV4ocT4+PjIyfHE8PDEwKX1mdW5jdGlvbiBYKHEpe3JldHVybihxPj4+NnxxPDwyNileKHE+Pj4xMXxxPDwyMSleKHE+Pj4yNXxxPDw3KX1mdW5jdGlvbiBVKHEpe3JldHVybihxPj4+N3xxPDwyNSleKHE+Pj4xOHxxPDwxNClecT4+PjN9eihq'@;
put 'LEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3'@;
put 'MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZSx0ZT10aGlzLl93LG9lPTB8dGhpcy5fYSxzZT0wfHRoaXMuX2IsaGU9MHx0aGlzLl9jLHVlPTB8dGhpcy5fZCxjZT0wfHRoaXMuX2UsRz0wfHRoaXMuX2YsYj0w'@;
put 'fHRoaXMuX2csRD0wfHRoaXMuX2gsSD0wO0g8MTY7KytIKXRlW0hdPXEucmVhZEludDMyQkUoNCpIKTtmb3IoO0g8NjQ7KytIKXRlW0hdPTB8KCgoZWU9dGVbSC0yXSk+Pj4xN3xlZTw8MTUpXihlZT4+PjE5fGVlPDwxMyleZWU+Pj4xMCkrdGVbSC03XStVKHRlW0gtMTVdKSt0ZVtILTE2XTtm'@;
put 'b3IodmFyIE49MDtOPDY0OysrTil7dmFyIGc9RCtYKGNlKStWKGNlLEcsYikra1tOXSt0ZVtOXXwwLEM9WShvZSkrQihvZSxzZSxoZSl8MDtEPWIsYj1HLEc9Y2UsY2U9dWUrZ3wwLHVlPWhlLGhlPXNlLHNlPW9lLG9lPWcrQ3wwfXRoaXMuX2E9b2UrdGhpcy5fYXwwLHRoaXMuX2I9c2UrdGhp'@;
put 'cy5fYnwwLHRoaXMuX2M9aGUrdGhpcy5fY3wwLHRoaXMuX2Q9dWUrdGhpcy5fZHwwLHRoaXMuX2U9Y2UrdGhpcy5fZXwwLHRoaXMuX2Y9Ryt0aGlzLl9mfDAsdGhpcy5fZz1iK3RoaXMuX2d8MCx0aGlzLl9oPUQrdGhpcy5faHwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBx'@;
put 'PUwuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBxLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLHEud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCkscS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxxLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxxLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxxLndyaXRl'@;
put 'SW50MzJCRSh0aGlzLl9mLDIwKSxxLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxxLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxxfSxNLmV4cG9ydHM9an0sMTY4NjooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNzgxNiksTD1SKDQxODkpLGs9Uig5NTA5KS5CdWZmZXIsRT1uZXcgQXJy'@;
put 'YXkoMTYwKTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEwuY2FsbCh0aGlzLDEyOCwxMTIpfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5Mzcw'@;
put 'LHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9k'@;
put 'bD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVj1rLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBCKFks'@;
put 'WCxVKXtWLndyaXRlSW50MzJCRShZLFUpLFYud3JpdGVJbnQzMkJFKFgsVSs0KX1yZXR1cm4gQih0aGlzLl9haCx0aGlzLl9hbCwwKSxCKHRoaXMuX2JoLHRoaXMuX2JsLDgpLEIodGhpcy5fY2gsdGhpcy5fY2wsMTYpLEIodGhpcy5fZGgsdGhpcy5fZGwsMjQpLEIodGhpcy5fZWgsdGhpcy5f'@;
put 'ZWwsMzIpLEIodGhpcy5fZmgsdGhpcy5fZmwsNDApLFZ9LE0uZXhwb3J0cz1qfSw3ODE2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxMPVIoOTUwOSkuQnVmZmVyLGs9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0'@;
put 'ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUy'@;
put 'NzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzks'@;
put 'MjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2'@;
put 'Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkx'@;
put 'MiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYw'@;
put 'LDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEw'@;
put 'MDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYy'@;
put 'MjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQy'@;
put 'NywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIw'@;
put 'NjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMx'@;
put 'NiwxMjQ2MTg5NTkxXSxFPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSy5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gVihzZSxoZSx1ZSl7cmV0dXJuIHVlXnNlJihoZV51ZSl9ZnVuY3Rpb24gQihzZSxoZSx1ZSl7cmV0dXJuIHNlJmhlfHVl'@;
put 'JihzZXxoZSl9ZnVuY3Rpb24gWShzZSxoZSl7cmV0dXJuKHNlPj4+Mjh8aGU8PDQpXihoZT4+PjJ8c2U8PDMwKV4oaGU+Pj43fHNlPDwyNSl9ZnVuY3Rpb24gWChzZSxoZSl7cmV0dXJuKHNlPj4+MTR8aGU8PDE4KV4oc2U+Pj4xOHxoZTw8MTQpXihoZT4+Pjl8c2U8PDIzKX1mdW5jdGlvbiBV'@;
put 'KHNlLGhlKXtyZXR1cm4oc2U+Pj4xfGhlPDwzMSleKHNlPj4+OHxoZTw8MjQpXnNlPj4+N31mdW5jdGlvbiBxKHNlLGhlKXtyZXR1cm4oc2U+Pj4xfGhlPDwzMSleKHNlPj4+OHxoZTw8MjQpXihzZT4+Pjd8aGU8PDI1KX1mdW5jdGlvbiBlZShzZSxoZSl7cmV0dXJuKHNlPj4+MTl8aGU8PDEz'@;
put 'KV4oaGU+Pj4yOXxzZTw8Mylec2U+Pj42fWZ1bmN0aW9uIHRlKHNlLGhlKXtyZXR1cm4oc2U+Pj4xOXxoZTw8MTMpXihoZT4+PjI5fHNlPDwzKV4oc2U+Pj42fGhlPDwyNil9ZnVuY3Rpb24gb2Uoc2UsaGUpe3JldHVybiBzZT4+PjA8aGU+Pj4wPzE6MH16KGosSyksai5wcm90b3R5cGUuaW5p'@;
put 'dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5f'@;
put 'aGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3'@;
put 'MDMzMjA5LHRoaXN9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgaGU9dGhpcy5fdyx1ZT0wfHRoaXMuX2FoLGNlPTB8dGhpcy5fYmgsRz0wfHRoaXMuX2NoLGI9MHx0aGlzLl9kaCxEPTB8dGhpcy5fZWgsSD0wfHRoaXMuX2ZoLE49MHx0aGlzLl9naCxnPTB8dGhp'@;
put 'cy5faGgsQz0wfHRoaXMuX2FsLFM9MHx0aGlzLl9ibCx2PTB8dGhpcy5fY2wscD0wfHRoaXMuX2RsLHc9MHx0aGlzLl9lbCxKPTB8dGhpcy5fZmwsbmU9MHx0aGlzLl9nbCxkZT0wfHRoaXMuX2hsLGZlPTA7ZmU8MzI7ZmUrPTIpaGVbZmVdPXNlLnJlYWRJbnQzMkJFKDQqZmUpLGhlW2ZlKzFd'@;
put 'PXNlLnJlYWRJbnQzMkJFKDQqZmUrNCk7Zm9yKDtmZTwxNjA7ZmUrPTIpe3ZhciB4ZT1oZVtmZS0zMF0sSWU9aGVbZmUtMzArMV0sRmU9VSh4ZSxJZSksT2U9cShJZSx4ZSksamU9ZWUoeGU9aGVbZmUtNF0sSWU9aGVbZmUtNCsxXSksV2U9dGUoSWUseGUpLFFlPWhlW2ZlLTMyXSxsdD1oZVtm'@;
put 'ZS0zMisxXSxQZT1PZStoZVtmZS0xNCsxXXwwLGJlPUZlK2hlW2ZlLTE0XStvZShQZSxPZSl8MDtiZT0oYmU9YmUramUrb2UoUGU9UGUrV2V8MCxXZSl8MCkrUWUrb2UoUGU9UGUrbHR8MCxsdCl8MCxoZVtmZV09YmUsaGVbZmUrMV09UGV9Zm9yKHZhciBBZT0wO0FlPDE2MDtBZSs9Mil7YmU9'@;
put 'aGVbQWVdLFBlPWhlW0FlKzFdO3ZhciBUZT1CKHVlLGNlLEcpLHFlPUIoQyxTLHYpLFhlPVkodWUsQyksVWU9WShDLHVlKSxodD1YKEQsdyksTWU9WCh3LEQpLERlPWtbQWVdLHplPWtbQWUrMV0sb3Q9VihELEgsTiksdXQ9Vih3LEosbmUpLE10PWRlK01lfDAsSHQ9ZytodCtvZShNdCxkZSl8'@;
put 'MDtIdD0oSHQ9KEh0PUh0K290K29lKE10PU10K3V0fDAsdXQpfDApK0RlK29lKE10PU10K3plfDAsemUpfDApK2JlK29lKE10PU10K1BlfDAsUGUpfDA7dmFyIFB0PVVlK3FlfDAsb249WGUrVGUrb2UoUHQsVWUpfDA7Zz1OLGRlPW5lLE49SCxuZT1KLEg9RCxKPXcsRD1iK0h0K29lKHc9cCtN'@;
put 'dHwwLHApfDAsYj1HLHA9dixHPWNlLHY9UyxjZT11ZSxTPUMsdWU9SHQrb24rb2UoQz1NdCtQdHwwLE10KXwwfXRoaXMuX2FsPXRoaXMuX2FsK0N8MCx0aGlzLl9ibD10aGlzLl9ibCtTfDAsdGhpcy5fY2w9dGhpcy5fY2wrdnwwLHRoaXMuX2RsPXRoaXMuX2RsK3B8MCx0aGlzLl9lbD10aGlz'@;
put 'Ll9lbCt3fDAsdGhpcy5fZmw9dGhpcy5fZmwrSnwwLHRoaXMuX2dsPXRoaXMuX2dsK25lfDAsdGhpcy5faGw9dGhpcy5faGwrZGV8MCx0aGlzLl9haD10aGlzLl9haCt1ZStvZSh0aGlzLl9hbCxDKXwwLHRoaXMuX2JoPXRoaXMuX2JoK2NlK29lKHRoaXMuX2JsLFMpfDAsdGhpcy5fY2g9dGhp'@;
put 'cy5fY2grRytvZSh0aGlzLl9jbCx2KXwwLHRoaXMuX2RoPXRoaXMuX2RoK2Irb2UodGhpcy5fZGwscCl8MCx0aGlzLl9laD10aGlzLl9laCtEK29lKHRoaXMuX2VsLHcpfDAsdGhpcy5fZmg9dGhpcy5fZmgrSCtvZSh0aGlzLl9mbCxKKXwwLHRoaXMuX2doPXRoaXMuX2doK04rb2UodGhpcy5f'@;
put 'Z2wsbmUpfDAsdGhpcy5faGg9dGhpcy5faGgrZytvZSh0aGlzLl9obCxkZSl8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgc2U9TC5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gaGUodWUsY2UsRyl7c2Uud3JpdGVJbnQzMkJFKHVlLEcpLHNlLndyaXRlSW50MzJCRShjZSxH'@;
put 'KzQpfXJldHVybiBoZSh0aGlzLl9haCx0aGlzLl9hbCwwKSxoZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxoZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksaGUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGhlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxoZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksaGUodGhp'@;
put 'cy5fZ2gsdGhpcy5fZ2wsNDgpLGhlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxzZX0sTS5leHBvcnRzPWp9LDI4MzA6KE0sTyxSKT0+e00uZXhwb3J0cz1LO3ZhciB6PVIoNzE4NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIEsoKXt6LmNhbGwodGhpcyl9Uig1NzE3KShLLHopLEsuUmVhZGFibGU9'@;
put 'Uig5NDgxKSxLLldyaXRhYmxlPVIoNDIyOSksSy5EdXBsZXg9Uig2NzUzKSxLLlRyYW5zZm9ybT1SKDQ2MDUpLEsuUGFzc1Rocm91Z2g9UigyNzI1KSxLLmZpbmlzaGVkPVIoODYxMCksSy5waXBlbGluZT1SKDk5NDYpLEsuU3RyZWFtPUssSy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihMLGsp'@;
put 'e3ZhciBFPXRoaXM7ZnVuY3Rpb24gaihlZSl7TC53cml0YWJsZSYmITE9PT1MLndyaXRlKGVlKSYmRS5wYXVzZSYmRS5wYXVzZSgpfWZ1bmN0aW9uIFYoKXtFLnJlYWRhYmxlJiZFLnJlc3VtZSYmRS5yZXN1bWUoKX1FLm9uKCJkYXRhIixqKSxMLm9uKCJkcmFpbiIsViksTC5faXNTdGRpb3x8'@;
put 'ayYmITE9PT1rLmVuZHx8KEUub24oImVuZCIsWSksRS5vbigiY2xvc2UiLFgpKTt2YXIgQj0hMTtmdW5jdGlvbiBZKCl7Qnx8KEI9ITAsTC5lbmQoKSl9ZnVuY3Rpb24gWCgpe0J8fChCPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBMLmRlc3Ryb3kmJkwuZGVzdHJveSgpKX1mdW5jdGlvbiBVKGVl'@;
put 'KXtpZihxKCksMD09PXoubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IGVlfWZ1bmN0aW9uIHEoKXtFLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixqKSxMLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsViksRS5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxFLnJlbW92ZUxpc3RlbmVyKCJj'@;
put 'bG9zZSIsWCksRS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFUpLEwucmVtb3ZlTGlzdGVuZXIoImVycm9yIixVKSxFLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHEpLEUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixxKSxMLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscSl9cmV0dXJuIEUub24oImVycm9y'@;
put 'IixVKSxMLm9uKCJlcnJvciIsVSksRS5vbigiZW5kIixxKSxFLm9uKCJjbG9zZSIscSksTC5vbigiY2xvc2UiLHEpLEwuZW1pdCgicGlwZSIsRSksTH19LDI1NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPXouaXNFbmNvZGluZ3x8ZnVuY3Rpb24ocSl7'@;
put 'c3dpdGNoKChxPSIiK3EpJiZxLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3'@;
put 'IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gTChxKXt2YXIgZWU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24odGUpe3ZhciBvZT1mdW5jdGlvbihzZSl7aWYoIXNlKXJldHVybiJ1dGY4Ijtmb3IodmFyIGhlOzspc3dpdGNoKHNlKXtjYXNlInV0ZjgiOmNhc2Ui'@;
put 'dXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4Ijpy'@;
put 'ZXR1cm4gc2U7ZGVmYXVsdDppZihoZSlyZXR1cm47c2U9KCIiK3NlKS50b0xvd2VyQ2FzZSgpLGhlPSEwfX0odGUpO2lmKCJzdHJpbmciIT10eXBlb2Ygb2UmJih6LmlzRW5jb2Rpbmc9PT1LfHwhSyh0ZSkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0ZSk7cmV0dXJu'@;
put 'IG9lfHx0ZX0ocSksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9aix0aGlzLmVuZD1WLGVlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PUUsZWU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PUIsdGhpcy5lbmQ9WSxlZT0zO2JyZWFrO2RlZmF1'@;
put 'bHQ6cmV0dXJuIHRoaXMud3JpdGU9WCx2b2lkKHRoaXMuZW5kPVUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9ei5hbGxvY1Vuc2FmZShlZSl9ZnVuY3Rpb24gayhxKXtyZXR1cm4gcTw9MTI3PzA6cT4+NT09Nj8yOnE+PjQ9PTE0PzM6cT4+Mz09MzA/'@;
put 'NDpxPj42PT0yPy0xOi0yfWZ1bmN0aW9uIEUocSl7dmFyIGVlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsdGU9ZnVuY3Rpb24ob2Usc2UsaGUpe2lmKDEyOCE9KDE5MiZzZVswXSkpcmV0dXJuIG9lLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYob2UubGFzdE5lZWQ+MSYmc2UubGVuZ3Ro'@;
put 'PjEpe2lmKDEyOCE9KDE5MiZzZVsxXSkpcmV0dXJuIG9lLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYob2UubGFzdE5lZWQ+MiYmc2UubGVuZ3RoPjImJjEyOCE9KDE5MiZzZVsyXSkpcmV0dXJuIG9lLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLHEpO3JldHVybiB2b2lkIDAhPT10ZT90ZTp0'@;
put 'aGlzLmxhc3ROZWVkPD1xLmxlbmd0aD8ocS5jb3B5KHRoaXMubGFzdENoYXIsZWUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihxLmNvcHkodGhpcy5sYXN0Q2hhcixlZSwwLHEubGVuZ3RoKSx2b2lkKHRo'@;
put 'aXMubGFzdE5lZWQtPXEubGVuZ3RoKSl9ZnVuY3Rpb24gaihxLGVlKXtpZigocS5sZW5ndGgtZWUpJTI9PTApe3ZhciB0ZT1xLnRvU3RyaW5nKCJ1dGYxNmxlIixlZSk7aWYodGUpe3ZhciBvZT10ZS5jaGFyQ29kZUF0KHRlLmxlbmd0aC0xKTtpZihvZT49NTUyOTYmJm9lPD01NjMxOSlyZXR1'@;
put 'cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSx0ZS5zbGljZSgwLC0xKX1yZXR1cm4gdGV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRo'@;
put 'aXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXSxxLnRvU3RyaW5nKCJ1dGYxNmxlIixlZSxxLmxlbmd0aC0xKX1mdW5jdGlvbiBWKHEpe3ZhciBlZT1xJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP2VlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0'@;
put 'ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6ZWV9ZnVuY3Rpb24gQihxLGVlKXt2YXIgdGU9KHEubGVuZ3RoLWVlKSUzO3JldHVybiAwPT09dGU/cS50b1N0cmluZygiYmFzZTY0IixlZSk6KHRoaXMubGFzdE5lZWQ9My10ZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT10ZT90'@;
put 'aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXFbcS5sZW5ndGgtMV0pLHEudG9TdHJpbmcoImJhc2U2NCIsZWUscS5sZW5ndGgtdGUpKX1mdW5jdGlvbiBZKHEpe3ZhciBlZT1xJiZxLmxlbmd0aD90'@;
put 'aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP2VlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOmVlfWZ1bmN0aW9uIFgocSl7cmV0dXJuIHEudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gVShxKXtyZXR1cm4gcSYm'@;
put 'cS5sZW5ndGg/dGhpcy53cml0ZShxKToiIn1PLlN0cmluZ0RlY29kZXI9TCxMLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtpZigwPT09cS5sZW5ndGgpcmV0dXJuIiI7dmFyIGVlLHRlO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShlZT10aGlzLmZpbGxMYXN0KHEpKSlyZXR1'@;
put 'cm4iIjt0ZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIHRlPTA7cmV0dXJuIHRlPHEubGVuZ3RoP2VlP2VlK3RoaXMudGV4dChxLHRlKTp0aGlzLnRleHQocSx0ZSk6ZWV8fCIifSxMLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24ocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMu'@;
put 'd3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZWUrIlx1ZmZmZCI6ZWV9LEwucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPWZ1bmN0aW9uKHNlLGhlLHVlKXt2YXIgY2U9aGUubGVuZ3RoLTE7aWYoY2U8dWUpcmV0dXJuIDA7dmFyIEc9ayhoZVtjZV0pO3JldHVy'@;
put 'biBHPj0wPyhHPjAmJihzZS5sYXN0TmVlZD1HLTEpLEcpOi0tY2U8dWV8fC0yPT09Rz8wOihHPWsoaGVbY2VdKSk+PTA/KEc+MCYmKHNlLmxhc3ROZWVkPUctMiksRyk6LS1jZTx1ZXx8LTI9PT1HPzA6KEc9ayhoZVtjZV0pKT49MD8oRz4wJiYoMj09PUc/Rz0wOnNlLmxhc3ROZWVkPUctMyks'@;
put 'Ryk6MH0odGhpcyxxLGVlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gcS50b1N0cmluZygidXRmOCIsZWUpO3RoaXMubGFzdFRvdGFsPXRlO3ZhciBvZT1xLmxlbmd0aC0odGUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLDAsb2UpLHEudG9TdHJpbmcoInV0'@;
put 'ZjgiLGVlLG9lKX0sTC5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24ocSl7aWYodGhpcy5sYXN0TmVlZDw9cS5sZW5ndGgpcmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3Ry'@;
put 'aW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7cS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHEubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1xLmxlbmd0aH19LDc4NTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoMzY4'@;
put 'OSksSz1SKDQ1NjQpLEw9Uig3NTIpLGs9UigyMjI0KS55LEU9Uig1NzYxKS5tLGo9Uig4OTcxKS5VLFY9Uig3NjUyKSxCPVIoNDU2KSx7ZnJvbUNhbGxiYWNrOll9PVIoNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6WH09UigxMjY5KSxVPS9eW1x4MjFceDIzLVx4MkJceDJELVx4M0Fc'@;
put 'eDNDLVx4NUJceDVELVx4N0VdKyQvLHE9L1tceDAwLVx4MUZdLyxlZT1bIlxuIiwiXHIiLCJcMCJdLHRlPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLG9lPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLHNlPXtqYW46MCxmZWI6MSxtYXI6MixhcHI6MyxtYXk6'@;
put 'NCxqdW46NSxqdWw6NixhdWc6NyxzZXA6OCxvY3Q6OSxub3Y6MTAsZGVjOjExfSxoZT0yMTQ3NDgzNjQ3ZTMsdWU9J0ludmFsaWQgc2FtZVNpdGVDb250ZXh0IG9wdGlvbiBmb3IgZ2V0Q29va2llcygpOyBleHBlY3RlZCBvbmUgb2YgInN0cmljdCIsICJsYXgiLCBvciAibm9uZSInO2Z1bmN0'@;
put 'aW9uIGNlKFFlKXtWLnZhbGlkYXRlKFYuaXNOb25FbXB0eVN0cmluZyhRZSksUWUpO2NvbnN0IGx0PVN0cmluZyhRZSkudG9Mb3dlckNhc2UoKTtyZXR1cm4ibm9uZSI9PT1sdHx8ImxheCI9PT1sdHx8InN0cmljdCI9PT1sdD9sdDpudWxsfWNvbnN0IEc9T2JqZWN0LmZyZWV6ZSh7U0lMRU5U'@;
put 'OiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNBQkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLGI9Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRd'@;
put 'ezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsx'@;
put 'LDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAs'@;
put 'MX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVb'@;
put 'MC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAt'@;
put 'NF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRc'@;
put 'ZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVsw'@;
put 'LTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9fDopKSkkKS8sRD0iXG5cXFs/KD86XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7N30oPzpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezZ9KD86KD86MjVbMC01'@;
put 'XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXw6W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxk'@;
put 'fFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDJ9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezR9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwy'@;
put 'WzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwzfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXszfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXsw'@;
put 'LDJ9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Mn0oPzooPzo6W2Et'@;
put 'ZkEtRlxcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDV9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0'@;
put 'fTopezF9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw2fXw6KXxcbig/'@;
put 'OjooPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDd9fDopKVxuKSg/OiVb'@;
put 'MC05YS16QS1aXXsxLH0pP1xcXT9cbiIucmVwbGFjZSgvXHMqXC9cLy4qJC9nbSwiIikucmVwbGFjZSgvXG4vZywiIikudHJpbSgpLEg9bmV3IFJlZ0V4cChgXiR7RH0kYCk7ZnVuY3Rpb24gTihRZSxsdCxQZSxiZSl7bGV0IEFlPTA7Zm9yKDtBZTxRZS5sZW5ndGg7KXtjb25zdCBUZT1RZS5j'@;
put 'aGFyQ29kZUF0KEFlKTtpZihUZTw9NDd8fFRlPj01OClicmVhaztBZSsrfXJldHVybiBBZTxsdHx8QWU+UGU/bnVsbDpiZXx8QWU9PVFlLmxlbmd0aD9wYXJzZUludChRZS5zdWJzdHIoMCxBZSksMTApOm51bGx9ZnVuY3Rpb24gZyhRZSl7Y29uc3QgbHQ9UWUuc3BsaXQoIjoiKSxQZT1bMCww'@;
put 'LDBdO2lmKDMhPT1sdC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBiZT0wO2JlPDM7YmUrKyl7Y29uc3QgVGU9TihsdFtiZV0sMSwyLDI9PWJlKTtpZihudWxsPT09VGUpcmV0dXJuIG51bGw7UGVbYmVdPVRlfXJldHVybiBQZX1mdW5jdGlvbiBDKFFlKXtRZT1TdHJpbmcoUWUpLnN1YnN0'@;
put 'cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3QgbHQ9c2VbUWVdO3JldHVybiBsdD49MD9sdDpudWxsfWZ1bmN0aW9uIFMoUWUpe2lmKCFRZSlyZXR1cm47Y29uc3QgbHQ9UWUuc3BsaXQob2UpO2lmKCFsdClyZXR1cm47bGV0IFBlPW51bGwsYmU9bnVsbCxBZT1udWxsLFRlPW51bGwscWU9bnVs'@;
put 'bCxYZT1udWxsO2ZvcihsZXQgVWU9MDtVZTxsdC5sZW5ndGg7VWUrKyl7Y29uc3QgaHQ9bHRbVWVdLnRyaW0oKTtpZighaHQubGVuZ3RoKWNvbnRpbnVlO2xldCBNZTtudWxsPT09QWUmJihNZT1nKGh0KSxNZSk/KFBlPU1lWzBdLGJlPU1lWzFdLEFlPU1lWzJdKTpudWxsIT09VGV8fChNZT1O'@;
put 'KGh0LDEsMiwhMCksbnVsbD09PU1lKT9udWxsIT09cWV8fChNZT1DKGh0KSxudWxsPT09TWUpP251bGw9PT1YZSYmKE1lPU4oaHQsMiw0LCEwKSxudWxsIT09TWUmJihYZT1NZSxYZT49NzAmJlhlPD05OT9YZSs9MTkwMDpYZT49MCYmWGU8PTY5JiYoWGUrPTJlMykpKTpxZT1NZTpUZT1NZX1y'@;
put 'ZXR1cm4gbnVsbD09PVRlfHxudWxsPT09cWV8fG51bGw9PT1YZXx8bnVsbD09PUFlfHxUZTwxfHxUZT4zMXx8WGU8MTYwMXx8UGU+MjN8fGJlPjU5fHxBZT41OT92b2lkIDA6bmV3IERhdGUoRGF0ZS5VVEMoWGUscWUsVGUsUGUsYmUsQWUpKX1mdW5jdGlvbiB2KFFlKXtyZXR1cm4gVi52YWxp'@;
put 'ZGF0ZShWLmlzRGF0ZShRZSksUWUpLFFlLnRvVVRDU3RyaW5nKCl9ZnVuY3Rpb24gcChRZSl7cmV0dXJuIG51bGw9PVFlP251bGw6KFFlPVFlLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKSxILnRlc3QoUWUpJiYoUWU9UWUucmVwbGFjZSgiWyIsIiIpLnJlcGxhY2UoIl0iLCIiKSkseiYmL1te'@;
put 'XHUwMDAxLVx1MDA3Zl0vLnRlc3QoUWUpJiYoUWU9ei50b0FTQ0lJKFFlKSksUWUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gdyhRZSxsdCxQZSl7aWYobnVsbD09UWV8fG51bGw9PWx0KXJldHVybiBudWxsO2lmKCExIT09UGUmJihRZT1wKFFlKSxsdD1wKGx0KSksUWU9PWx0KXJldHVybiEw'@;
put 'O2NvbnN0IGJlPVFlLmxhc3RJbmRleE9mKGx0KTtyZXR1cm4hKGJlPD0wfHxRZS5sZW5ndGghPT1sdC5sZW5ndGgrYmV8fCIuIiE9PVFlLnN1YnN0cihiZS0xLDEpfHxiLnRlc3QoUWUpKX1mdW5jdGlvbiBKKFFlKXtpZighUWV8fCIvIiE9PVFlLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigi'@;
put 'LyI9PT1RZSlyZXR1cm4gUWU7Y29uc3QgbHQ9UWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gMD09PWx0PyIvIjpRZS5zbGljZSgwLGx0KX1mdW5jdGlvbiBkZShRZSxsdCl7aWYobHQmJiJvYmplY3QiPT10eXBlb2YgbHR8fChsdD17fSksVi5pc0VtcHR5U3RyaW5nKFFlKXx8IVYuaXNTdHJp'@;
put 'bmcoUWUpKXJldHVybiBudWxsO2NvbnN0IFBlPShRZT1RZS50cmltKCkpLmluZGV4T2YoIjsiKSxiZT1mdW5jdGlvbiBuZShRZSxsdCl7UWU9ZnVuY3Rpb24ocWUpe2lmKFYuaXNFbXB0eVN0cmluZyhxZSkpcmV0dXJuIHFlO2ZvcihsZXQgWGU9MDtYZTxlZS5sZW5ndGg7WGUrKyl7Y29uc3Qg'@;
put 'VWU9cWUuaW5kZXhPZihlZVtYZV0pOy0xIT09VWUmJihxZT1xZS5zdWJzdHIoMCxVZSkpfXJldHVybiBxZX0oUWUpLFYudmFsaWRhdGUoVi5pc1N0cmluZyhRZSksUWUpO2xldCBQZSxiZSxBZT1RZS5pbmRleE9mKCI9Iik7aWYobHQpMD09PUFlJiYoQWU9KFFlPVFlLnN1YnN0cigxKSkuaW5k'@;
put 'ZXhPZigiPSIpKTtlbHNlIGlmKEFlPD0wKXJldHVybjtpZihBZTw9MD8oUGU9IiIsYmU9UWUudHJpbSgpKTooUGU9UWUuc3Vic3RyKDAsQWUpLnRyaW0oKSxiZT1RZS5zdWJzdHIoQWUrMSkudHJpbSgpKSxxLnRlc3QoUGUpfHxxLnRlc3QoYmUpKXJldHVybjtjb25zdCBUZT1uZXcgamU7cmV0'@;
put 'dXJuIFRlLmtleT1QZSxUZS52YWx1ZT1iZSxUZX0oLTE9PT1QZT9RZTpRZS5zdWJzdHIoMCxQZSksISFsdC5sb29zZSk7aWYoIWJlKXJldHVybjtpZigtMT09PVBlKXJldHVybiBiZTtjb25zdCBBZT1RZS5zbGljZShQZSsxKS50cmltKCk7aWYoMD09PUFlLmxlbmd0aClyZXR1cm4gYmU7Y29u'@;
put 'c3QgVGU9QWUuc3BsaXQoIjsiKTtmb3IoO1RlLmxlbmd0aDspe2NvbnN0IHFlPVRlLnNoaWZ0KCkudHJpbSgpO2lmKDA9PT1xZS5sZW5ndGgpY29udGludWU7Y29uc3QgWGU9cWUuaW5kZXhPZigiPSIpO2xldCBVZSxodDtzd2l0Y2goLTE9PT1YZT8oVWU9cWUsaHQ9bnVsbCk6KFVlPXFlLnN1'@;
put 'YnN0cigwLFhlKSxodD1xZS5zdWJzdHIoWGUrMSkpLFVlPVVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGh0JiYoaHQ9aHQudHJpbSgpKSxVZSl7Y2FzZSJleHBpcmVzIjppZihodCl7Y29uc3QgTWU9UyhodCk7TWUmJihiZS5leHBpcmVzPU1lKX1icmVhaztjYXNlIm1heC1hZ2UiOmlmKGh0JiYv'@;
put 'Xi0/WzAtOV0rJC8udGVzdChodCkpe2NvbnN0IE1lPXBhcnNlSW50KGh0LDEwKTtiZS5zZXRNYXhBZ2UoTWUpfWJyZWFrO2Nhc2UiZG9tYWluIjppZihodCl7Y29uc3QgTWU9aHQudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpO01lJiYoYmUuZG9tYWluPU1lLnRvTG93ZXJDYXNlKCkpfWJyZWFr'@;
put 'O2Nhc2UicGF0aCI6YmUucGF0aD1odCYmIi8iPT09aHRbMF0/aHQ6bnVsbDticmVhaztjYXNlInNlY3VyZSI6YmUuc2VjdXJlPSEwO2JyZWFrO2Nhc2UiaHR0cG9ubHkiOmJlLmh0dHBPbmx5PSEwO2JyZWFrO2Nhc2Uic2FtZXNpdGUiOnN3aXRjaChodD9odC50b0xvd2VyQ2FzZSgpOiIiKXtj'@;
put 'YXNlInN0cmljdCI6YmUuc2FtZVNpdGU9InN0cmljdCI7YnJlYWs7Y2FzZSJsYXgiOmJlLnNhbWVTaXRlPSJsYXgiO2JyZWFrO2Nhc2Uibm9uZSI6YmUuc2FtZVNpdGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6YmUuc2FtZVNpdGU9dm9pZCAwfWJyZWFrO2RlZmF1bHQ6YmUuZXh0ZW5zaW9ucz1i'@;
put 'ZS5leHRlbnNpb25zfHxbXSxiZS5leHRlbnNpb25zLnB1c2gocWUpfX1yZXR1cm4gYmV9ZnVuY3Rpb24gZmUoUWUpe2xldCBsdDt0cnl7bHQ9SlNPTi5wYXJzZShRZSl9Y2F0Y2goUGUpe3JldHVybiBQZX1yZXR1cm4gbHR9ZnVuY3Rpb24geGUoUWUpe2lmKCFRZXx8Vi5pc0VtcHR5U3RyaW5n'@;
put 'KFFlKSlyZXR1cm4gbnVsbDtsZXQgbHQ7aWYoInN0cmluZyI9PXR5cGVvZiBRZSl7aWYobHQ9ZmUoUWUpLGx0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIG51bGx9ZWxzZSBsdD1RZTtjb25zdCBQZT1uZXcgamU7Zm9yKGxldCBiZT0wO2JlPGplLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMubGVu'@;
put 'Z3RoO2JlKyspe2NvbnN0IEFlPWplLnNlcmlhbGl6YWJsZVByb3BlcnRpZXNbYmVdO3ZvaWQgMCE9PWx0W0FlXSYmbHRbQWVdIT09T2VbQWVdJiYoUGVbQWVdPSJleHBpcmVzIj09PUFlfHwiY3JlYXRpb24iPT09QWV8fCJsYXN0QWNjZXNzZWQiPT09QWU/bnVsbD09PWx0W0FlXT9udWxsOiJJ'@;
put 'bmZpbml0eSI9PWx0W0FlXT8iSW5maW5pdHkiOm5ldyBEYXRlKGx0W0FlXSk6bHRbQWVdKX1yZXR1cm4gUGV9ZnVuY3Rpb24gSWUoUWUsbHQpe1YudmFsaWRhdGUoVi5pc09iamVjdChRZSksUWUpLFYudmFsaWRhdGUoVi5pc09iamVjdChsdCksbHQpO2xldCBQZT0wO3JldHVybiBQZT0obHQu'@;
put 'cGF0aD9sdC5wYXRoLmxlbmd0aDowKS0oUWUucGF0aD9RZS5wYXRoLmxlbmd0aDowKSwwIT09UGV8fChQZT0oUWUuY3JlYXRpb24/UWUuY3JlYXRpb24uZ2V0VGltZSgpOmhlKS0obHQuY3JlYXRpb24/bHQuY3JlYXRpb24uZ2V0VGltZSgpOmhlKSwwIT09UGV8fChQZT1RZS5jcmVhdGlvbklu'@;
put 'ZGV4LWx0LmNyZWF0aW9uSW5kZXgpKSxQZX1mdW5jdGlvbiBGZShRZSl7aWYoUWUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIFFlO3RyeXtRZT1kZWNvZGVVUkkoUWUpfWNhdGNoe31yZXR1cm4gSyhRZSl9Y29uc3QgT2U9e2tleToiIix2YWx1ZToiIixleHBpcmVzOiJJbmZpbml0eSIsbWF4'@;
put 'QWdlOm51bGwsZG9tYWluOm51bGwscGF0aDpudWxsLHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxwYXRoSXNEZWZhdWx0Om51bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6bnVsbCxzYW1lU2l0ZTp2b2lkIDB9O2NsYXNzIGple2NvbnN0'@;
put 'cnVjdG9yKGx0PXt9KXtjb25zdCBQZT1YKCk7UGUmJih0aGlzW1BlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxPZSxsdCksdGhpcy5jcmVhdGlvbj10aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY3JlYXRpb25JbmRleCIse2Nv'@;
put 'bmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOisramUuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3QgbHQ9RGF0ZS5ub3coKSxQZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9zdE9ubHk6Ij8iLGJlPXRoaXMuY3JlYXRpb24/bHQtdGhpcy5j'@;
put 'cmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoiPyIsQWU9dGhpcy5sYXN0QWNjZXNzZWQ/bHQtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6Ij8iO3JldHVybmBDb29raWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9ubHk9JHtQZX07IGFBZ2U9JHtBZX07IGNBZ2U9JHtiZX0iYH10'@;
put 'b0pTT04oKXtjb25zdCBsdD17fTtmb3IoY29uc3QgUGUgb2YgamUuc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW1BlXSE9PU9lW1BlXSYmKCJleHBpcmVzIj09PVBlfHwiY3JlYXRpb24iPT09UGV8fCJsYXN0QWNjZXNzZWQiPT09UGU/bHRbUGVdPW51bGw9PT10aGlzW1BlXT9udWxsOiJJ'@;
put 'bmZpbml0eSI9PXRoaXNbUGVdPyJJbmZpbml0eSI6dGhpc1tQZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PVBlP251bGwhPT10aGlzW1BlXSYmKGx0W1BlXT10aGlzW1BlXT09MS8wfHx0aGlzW1BlXT09LTEvMD90aGlzW1BlXS50b1N0cmluZygpOnRoaXNbUGVdKTp0aGlzW1BlXSE9PU9l'@;
put 'W1BlXSYmKGx0W1BlXT10aGlzW1BlXSkpO3JldHVybiBsdH1jbG9uZSgpe3JldHVybiB4ZSh0aGlzLnRvSlNPTigpKX12YWxpZGF0ZSgpe2lmKCFVLnRlc3QodGhpcy52YWx1ZSl8fCEodGhpcy5leHBpcmVzPT0xLzB8fHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGV8fFModGhpcy5leHBp'@;
put 'cmVzKSl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhdGUudGVzdCh0aGlzLnBhdGgpKXJldHVybiExO2NvbnN0IGx0PXRoaXMuY2RvbWFpbigpO3JldHVybiEobHQmJihsdC5tYXRjaCgvXC4kLyl8fG51bGw9PUwuZ2V0UHVibGljU3VmZml4'@;
put 'KGx0KSkpfXNldEV4cGlyZXMobHQpe3RoaXMuZXhwaXJlcz1sdCBpbnN0YW5jZW9mIERhdGU/bHQ6UyhsdCl8fCJJbmZpbml0eSJ9c2V0TWF4QWdlKGx0KXt0aGlzLm1heEFnZT1sdD09PTEvMHx8bHQ9PT0tMS8wP2x0LnRvU3RyaW5nKCk6bHR9Y29va2llU3RyaW5nKCl7bGV0IGx0PXRoaXMu'@;
put 'dmFsdWU7cmV0dXJuIG51bGw9PWx0JiYobHQ9IiIpLCIiPT09dGhpcy5rZXk/bHQ6YCR7dGhpcy5rZXl9PSR7bHR9YH10b1N0cmluZygpe2xldCBsdD10aGlzLmNvb2tpZVN0cmluZygpO2lmKHRoaXMuZXhwaXJlcyE9MS8wJiYodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZT9sdCs9YDsg'@;
put 'RXhwaXJlcz0ke3YodGhpcy5leHBpcmVzKX1gOmx0Kz1gOyBFeHBpcmVzPSR7dGhpcy5leHBpcmVzfWApLG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZSE9MS8wJiYobHQrPWA7IE1heC1BZ2U9JHt0aGlzLm1heEFnZX1gKSx0aGlzLmRvbWFpbiYmIXRoaXMuaG9zdE9ubHkmJihsdCs9'@;
put 'YDsgRG9tYWluPSR7dGhpcy5kb21haW59YCksdGhpcy5wYXRoJiYobHQrPWA7IFBhdGg9JHt0aGlzLnBhdGh9YCksdGhpcy5zZWN1cmUmJihsdCs9IjsgU2VjdXJlIiksdGhpcy5odHRwT25seSYmKGx0Kz0iOyBIdHRwT25seSIpLHRoaXMuc2FtZVNpdGUmJiJub25lIiE9PXRoaXMuc2FtZVNp'@;
put 'dGUpe2NvbnN0IFBlPWplLnNhbWVTaXRlQ2Fub25pY2FsW3RoaXMuc2FtZVNpdGUudG9Mb3dlckNhc2UoKV07bHQrPWA7IFNhbWVTaXRlPSR7UGV8fHRoaXMuc2FtZVNpdGV9YH1yZXR1cm4gdGhpcy5leHRlbnNpb25zJiZ0aGlzLmV4dGVuc2lvbnMuZm9yRWFjaChQZT0+e2x0Kz1gOyAke1Bl'@;
put 'fWB9KSxsdH1UVEwobHQpe2lmKG51bGwhPXRoaXMubWF4QWdlKXJldHVybiB0aGlzLm1heEFnZTw9MD8wOjFlMyp0aGlzLm1heEFnZTtsZXQgUGU9dGhpcy5leHBpcmVzO3JldHVybiBQZSE9MS8wPyhQZSBpbnN0YW5jZW9mIERhdGV8fChQZT1TKFBlKXx8MS8wKSxQZT09MS8wPzEvMDpQZS5n'@;
put 'ZXRUaW1lKCktKGx0fHxEYXRlLm5vdygpKSk6MS8wfWV4cGlyeVRpbWUobHQpe2lmKG51bGwhPXRoaXMubWF4QWdlKXtjb25zdCBiZT10aGlzLm1heEFnZTw9MD8tMS8wOjFlMyp0aGlzLm1heEFnZTtyZXR1cm4obHR8fHRoaXMuY3JlYXRpb258fG5ldyBEYXRlKS5nZXRUaW1lKCkrYmV9cmV0'@;
put 'dXJuIHRoaXMuZXhwaXJlcz09MS8wPzEvMDp0aGlzLmV4cGlyZXMuZ2V0VGltZSgpfWV4cGlyeURhdGUobHQpe2NvbnN0IFBlPXRoaXMuZXhwaXJ5VGltZShsdCk7cmV0dXJuIFBlPT0xLzA/bmV3IERhdGUoaGUpOlBlPT0tMS8wP25ldyBEYXRlKDApOm5ldyBEYXRlKFBlKX1pc1BlcnNpc3Rl'@;
put 'bnQoKXtyZXR1cm4gbnVsbCE9dGhpcy5tYXhBZ2V8fHRoaXMuZXhwaXJlcyE9MS8wfWNhbm9uaWNhbGl6ZWREb21haW4oKXtyZXR1cm4gbnVsbD09dGhpcy5kb21haW4/bnVsbDpwKHRoaXMuZG9tYWluKX1jZG9tYWluKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsaXplZERvbWFpbigpfX1mdW5j'@;
put 'dGlvbiBXZShRZSl7aWYobnVsbCE9UWUpe2NvbnN0IGx0PVFlLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGx0KXtjYXNlIEcuU1RSSUNUOmNhc2UgRy5TSUxFTlQ6Y2FzZSBHLkRJU0FCTEVEOnJldHVybiBsdH19cmV0dXJuIEcuU0lMRU5UfWplLmNvb2tpZXNDcmVhdGVkPTAsamUucGFyc2U9ZGUs'@;
put 'amUuZnJvbUpTT049eGUsamUuc2VyaWFsaXphYmxlUHJvcGVydGllcz1PYmplY3Qua2V5cyhPZSksamUuc2FtZVNpdGVMZXZlbD17c3RyaWN0OjMsbGF4OjIsbm9uZToxfSxqZS5zYW1lU2l0ZUNhbm9uaWNhbD17c3RyaWN0OiJTdHJpY3QiLGxheDoiTGF4In07Y2xhc3MgS2V7Y29uc3RydWN0'@;
put 'b3IobHQsUGU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOiEwfSl7ImJvb2xlYW4iPT10eXBlb2YgUGUmJihQZT17cmVqZWN0UHVibGljU3VmZml4ZXM6UGV9KSxWLnZhbGlkYXRlKFYuaXNPYmplY3QoUGUpLFBlKSx0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzPVBlLnJlamVjdFB1YmxpY1N1ZmZp'@;
put 'eGVzLHRoaXMuZW5hYmxlTG9vc2VNb2RlPSEhUGUubG9vc2VNb2RlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluPSJib29sZWFuIiE9dHlwZW9mIFBlLmFsbG93U3BlY2lhbFVzZURvbWFpbnx8UGUuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHRoaXMuc3RvcmU9bHR8fG5ldyBFLHRoaXMucHJl'@;
put 'Zml4U2VjdXJpdHk9V2UoUGUucHJlZml4U2VjdXJpdHkpLHRoaXMuX2Nsb25lU3luYz1ZZSgiY2xvbmUiKSx0aGlzLl9pbXBvcnRDb29raWVzU3luYz1ZZSgiX2ltcG9ydENvb2tpZXMiKSx0aGlzLmdldENvb2tpZXNTeW5jPVllKCJnZXRDb29raWVzIiksdGhpcy5nZXRDb29raWVTdHJpbmdT'@;
put 'eW5jPVllKCJnZXRDb29raWVTdHJpbmciKSx0aGlzLmdldFNldENvb2tpZVN0cmluZ3NTeW5jPVllKCJnZXRTZXRDb29raWVTdHJpbmdzIiksdGhpcy5yZW1vdmVBbGxDb29raWVzU3luYz1ZZSgicmVtb3ZlQWxsQ29va2llcyIpLHRoaXMuc2V0Q29va2llU3luYz1ZZSgic2V0Q29va2llIiks'@;
put 'dGhpcy5zZXJpYWxpemVTeW5jPVllKCJzZXJpYWxpemUiKX1zZXRDb29raWUobHQsUGUsYmUsQWUpe2xldCBUZTtpZihWLnZhbGlkYXRlKFYuaXNOb25FbXB0eVN0cmluZyhQZSksQWUsYmUpLFYuaXNGdW5jdGlvbihQZSkpcmV0dXJuKEFlPVBlKShuZXcgRXJyb3IoIk5vIFVSTCB3YXMgc3Bl'@;
put 'Y2lmaWVkIikpO2NvbnN0IHFlPUZlKFBlKTtpZihWLmlzRnVuY3Rpb24oYmUpJiYoQWU9YmUsYmU9e30pLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKEFlKSxBZSksIVYuaXNOb25FbXB0eVN0cmluZyhsdCkmJiFWLmlzT2JqZWN0KGx0KSYmbHQgaW5zdGFuY2VvZiBTdHJpbmcmJjA9PWx0Lmxl'@;
put 'bmd0aClyZXR1cm4gQWUobnVsbCk7Y29uc3QgWGU9cChxZS5ob3N0bmFtZSksVWU9YmUubG9vc2V8fHRoaXMuZW5hYmxlTG9vc2VNb2RlO2xldCBodD1udWxsO2lmKGJlLnNhbWVTaXRlQ29udGV4dCYmKGh0PWNlKGJlLnNhbWVTaXRlQ29udGV4dCksIWh0KSlyZXR1cm4gQWUobmV3IEVycm9y'@;
put 'KHVlKSk7aWYoInN0cmluZyI9PXR5cGVvZiBsdHx8bHQgaW5zdGFuY2VvZiBTdHJpbmcpe2lmKCEobHQ9amUucGFyc2UobHQse2xvb3NlOlVlfSkpKXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBmYWlsZWQgdG8gcGFyc2UiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKX1lbHNlIGlm'@;
put 'KCEobHQgaW5zdGFuY2VvZiBqZSkpcmV0dXJuIFRlPW5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gc2V0Q29va2llIG11c3QgYmUgYSBDb29raWUgb2JqZWN0IG9yIHN0cmluZyIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2NvbnN0IE1lPWJlLm5vd3x8bmV3IERhdGU7aWYodGhp'@;
put 'cy5yZWplY3RQdWJsaWNTdWZmaXhlcyYmbHQuZG9tYWluJiZudWxsPT1MLmdldFB1YmxpY1N1ZmZpeChsdC5jZG9tYWluKCkse2FsbG93U3BlY2lhbFVzZURvbWFpbjp0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixpZ25vcmVFcnJvcjpiZS5pZ25vcmVFcnJvcn0pJiYhSC50ZXN0KGx0LmRv'@;
put 'bWFpbikpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2lmKGx0LmRvbWFpbil7aWYoIXcoWGUsbHQuY2RvbWFpbigpLCExKSlyZXR1cm4gVGU9bmV3IEVycm9yKGBDb29raWUg'@;
put 'bm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29va2llOiR7bHQuY2RvbWFpbigpfSBSZXF1ZXN0OiR7WGV9YCksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7bnVsbD09bHQuaG9zdE9ubHkmJihsdC5ob3N0T25seT0hMSl9ZWxzZSBsdC5ob3N0T25seT0hMCxsdC5kb21haW49WGU7aWYo'@;
put 'bHQucGF0aCYmIi8iPT09bHQucGF0aFswXXx8KGx0LnBhdGg9SihxZS5wYXRobmFtZSksbHQucGF0aElzRGVmYXVsdD0hMCksITE9PT1iZS5odHRwJiZsdC5odHRwT25seSlyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEki'@;
put 'KSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtpZigibm9uZSIhPT1sdC5zYW1lU2l0ZSYmdm9pZCAwIT09bHQuc2FtZVNpdGUmJmh0JiYibm9uZSI9PT1odClyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNpdGUgYnV0IHRoaXMgaXMgYSBjcm9zcy1vcmlnaW4gcmVxdWVz'@;
put 'dCIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2NvbnN0IERlPXRoaXMucHJlZml4U2VjdXJpdHk9PT1HLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09Ry5ESVNBQkxFRCl7bGV0IG90LHV0PSExO2lmKFYudmFsaWRhdGUoVi5pc09iamVjdChNdD1sdCksTXQpLCFNdC5rZXku'@;
put 'c3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fE10LnNlY3VyZT9mdW5jdGlvbihNdCl7cmV0dXJuIFYudmFsaWRhdGUoVi5pc09iamVjdChNdCkpLCFNdC5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxNdC5zZWN1cmUmJk10Lmhvc3RPbmx5JiZudWxsIT1NdC5wYXRoJiYiLyI9PT1NdC5wYXRo'@;
put 'fShsdCl8fCh1dD0hMCxvdD0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOih1dD0hMCxvdD0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBh'@;
put 'dHRyaWJ1dGUgaXMgbm90IHNldCIpLHV0KXJldHVybiBBZShiZS5pZ25vcmVFcnJvcnx8RGU/bnVsbDpuZXcgRXJyb3Iob3QpKX12YXIgTXQ7Y29uc3QgemU9dGhpcy5zdG9yZTt6ZS51cGRhdGVDb29raWV8fCh6ZS51cGRhdGVDb29raWU9ZnVuY3Rpb24ob3QsdXQsTXQpe3RoaXMucHV0Q29v'@;
put 'a2llKHV0LE10KX0pLHplLmZpbmRDb29raWUobHQuZG9tYWluLGx0LnBhdGgsbHQua2V5LGZ1bmN0aW9uKG90LHV0KXtpZihvdClyZXR1cm4gQWUob3QpO2NvbnN0IE10PWZ1bmN0aW9uKEh0KXtpZihIdClyZXR1cm4gQWUoSHQpO0FlKG51bGwsbHQpfTtpZih1dCl7aWYoITE9PT1iZS5odHRw'@;
put 'JiZ1dC5odHRwT25seSlyZXR1cm4gb3Q9bmV3IEVycm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpvdCk7bHQuY3JlYXRpb249dXQuY3JlYXRpb24sbHQuY3JlYXRpb25JbmRleD11dC5jcmVhdGlv'@;
put 'bkluZGV4LGx0Lmxhc3RBY2Nlc3NlZD1NZSx6ZS51cGRhdGVDb29raWUodXQsbHQsTXQpfWVsc2UgbHQuY3JlYXRpb249bHQubGFzdEFjY2Vzc2VkPU1lLHplLnB1dENvb2tpZShsdCxNdCl9KX1nZXRDb29raWVzKGx0LFBlLGJlKXtWLnZhbGlkYXRlKFYuaXNOb25FbXB0eVN0cmluZyhsdCks'@;
put 'YmUsbHQpO2NvbnN0IEFlPUZlKGx0KTtWLmlzRnVuY3Rpb24oUGUpJiYoYmU9UGUsUGU9e30pLFYudmFsaWRhdGUoVi5pc09iamVjdChQZSksYmUsUGUpLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGJlKSxiZSk7Y29uc3QgVGU9cChBZS5ob3N0bmFtZSkscWU9QWUucGF0aG5hbWV8fCIvIjts'@;
put 'ZXQgWGU9UGUuc2VjdXJlO251bGwhPVhlfHwhQWUucHJvdG9jb2x8fCJodHRwczoiIT1BZS5wcm90b2NvbCYmIndzczoiIT1BZS5wcm90b2NvbHx8KFhlPSEwKTtsZXQgVWU9MDtpZihQZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IE10PWNlKFBlLnNhbWVTaXRlQ29udGV4dCk7aWYoVWU9amUu'@;
put 'c2FtZVNpdGVMZXZlbFtNdF0sIVVlKXJldHVybiBiZShuZXcgRXJyb3IodWUpKX1sZXQgaHQ9UGUuaHR0cDtudWxsPT1odCYmKGh0PSEwKTtjb25zdCBNZT1QZS5ub3d8fERhdGUubm93KCksRGU9ITEhPT1QZS5leHBpcmUsemU9ISFQZS5hbGxQYXRocyxvdD10aGlzLnN0b3JlO2Z1bmN0aW9u'@;
put 'IHV0KE10KXtpZihNdC5ob3N0T25seSl7aWYoTXQuZG9tYWluIT1UZSlyZXR1cm4hMX1lbHNlIGlmKCF3KFRlLE10LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISghemUmJiFqKHFlLE10LnBhdGgpfHxNdC5zZWN1cmUmJiFYZXx8TXQuaHR0cE9ubHkmJiFodHx8VWUmJmplLnNhbWVTaXRl'@;
put 'TGV2ZWxbTXQuc2FtZVNpdGV8fCJub25lIl0+VWV8fERlJiZNdC5leHBpcnlUaW1lKCk8PU1lJiYob3QucmVtb3ZlQ29va2llKE10LmRvbWFpbixNdC5wYXRoLE10LmtleSwoKT0+e30pLDEpKX1vdC5maW5kQ29va2llcyhUZSx6ZT9udWxsOnFlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWlu'@;
put 'LChNdCxIdCk9PntpZihNdClyZXR1cm4gYmUoTXQpO0h0PUh0LmZpbHRlcih1dCksITEhPT1QZS5zb3J0JiYoSHQ9SHQuc29ydChJZSkpO2NvbnN0IFB0PW5ldyBEYXRlO2Zvcihjb25zdCBvbiBvZiBIdClvbi5sYXN0QWNjZXNzZWQ9UHQ7YmUobnVsbCxIdCl9KX1nZXRDb29raWVTdHJpbmco'@;
put 'Li4ubHQpe2NvbnN0IFBlPWx0LnBvcCgpO1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKFBlKSxQZSksbHQucHVzaChmdW5jdGlvbihiZSxBZSl7YmU/UGUoYmUpOlBlKG51bGwsQWUuc29ydChJZSkubWFwKFRlPT5UZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tp'@;
put 'ZXMuYXBwbHkodGhpcyxsdCl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5sdCl7Y29uc3QgUGU9bHQucG9wKCk7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oUGUpLFBlKSxsdC5wdXNoKGZ1bmN0aW9uKGJlLEFlKXtiZT9QZShiZSk6UGUobnVsbCxBZS5tYXAoVGU9PlRlLnRvU3RyaW5nKCkpKX0p'@;
put 'LHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGx0KX1zZXJpYWxpemUobHQpe1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGx0KSxsdCk7bGV0IFBlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtWLmlzT2JqZWN0KFBlKSYmKFBlPW51bGwpO2NvbnN0IGJlPXt2ZXJzaW9uOmB0b3VnaC1j'@;
put 'b29raWVAJHtCfWAsc3RvcmVUeXBlOlBlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixw'@;
put 'cmVmaXhTZWN1cml0eTpXZSh0aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBsdChuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBv'@;
put 'cnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChBZSxUZSk9PkFlP2x0KEFlKTooYmUuY29va2llcz1UZS5tYXAocWU9PihkZWxldGUocWU9cWUgaW5zdGFuY2VvZiBqZT9xZS50b0pTT04oKTpxZSkuY3JlYXRpb25J'@;
put 'bmRleCxxZSkpLGx0KG51bGwsYmUpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKGx0LFBlKXtsZXQgYmU9bHQuY29va2llcztpZighYmV8fCFBcnJheS5pc0FycmF5KGJlKSlyZXR1cm4gUGUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBo'@;
put 'YXMgbm8gY29va2llcyBhcnJheSIpKTtiZT1iZS5zbGljZSgpO2NvbnN0IEFlPVRlPT57aWYoVGUpcmV0dXJuIFBlKFRlKTtpZighYmUubGVuZ3RoKXJldHVybiBQZShUZSx0aGlzKTtsZXQgcWU7dHJ5e3FlPXhlKGJlLnNoaWZ0KCkpfWNhdGNoKFhlKXtyZXR1cm4gUGUoWGUpfWlmKG51bGw9'@;
put 'PT1xZSlyZXR1cm4gQWUobnVsbCk7dGhpcy5zdG9yZS5wdXRDb29raWUocWUsQWUpfTtBZSgpfWNsb25lKGx0LFBlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKFBlPWx0LGx0PW51bGwpLHRoaXMuc2VyaWFsaXplKChiZSxBZSk9PntpZihiZSlyZXR1cm4gUGUoYmUpO0tlLmRlc2VyaWFsaXpl'@;
put 'KEFlLGx0LFBlKX0pfWNsb25lU3luYyhsdCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFsdC5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7'@;
put 'IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKGx0KX1yZW1vdmVBbGxDb29raWVzKGx0KXtWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihsdCksbHQpO2NvbnN0IFBlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFBlLnJlbW92ZUFsbENvb2tp'@;
put 'ZXMmJlBlLnJlbW92ZUFsbENvb2tpZXMhPT1rLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBQZS5yZW1vdmVBbGxDb29raWVzKGx0KTtQZS5nZXRBbGxDb29raWVzKChiZSxBZSk9PntpZihiZSlyZXR1cm4gbHQoYmUpO2lmKDA9PT1BZS5sZW5ndGgpcmV0dXJuIGx0KG51bGwp'@;
put 'O2xldCBUZT0wO2NvbnN0IHFlPVtdO2Z1bmN0aW9uIFhlKFVlKXtpZihVZSYmcWUucHVzaChVZSksVGUrKyxUZT09PUFlLmxlbmd0aClyZXR1cm4gbHQocWUubGVuZ3RoP3FlWzBdOm51bGwpfUFlLmZvckVhY2goVWU9PntQZS5yZW1vdmVDb29raWUoVWUuZG9tYWluLFVlLnBhdGgsVWUua2V5'@;
put 'LFhlKX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKGx0LFBlLGJlKXtsZXQgQWU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihiZT1QZSxQZT1udWxsKSxWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihiZSksYmUpLCJzdHJpbmciPT10eXBlb2YgbHQpe2lmKEFlPWZlKGx0KSxBZSBpbnN0YW5jZW9m'@;
put 'IEVycm9yKXJldHVybiBiZShBZSl9ZWxzZSBBZT1sdDtjb25zdCBUZT1uZXcgS2UoUGUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOkFlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpBZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOkFlLmFsbG93U3BlY2lhbFVz'@;
put 'ZURvbWFpbixwcmVmaXhTZWN1cml0eTpBZS5wcmVmaXhTZWN1cml0eX0pO1RlLl9pbXBvcnRDb29raWVzKEFlLHFlPT57aWYocWUpcmV0dXJuIGJlKHFlKTtiZShudWxsLFRlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMobHQsUGUpe2NvbnN0IGJlPSJzdHJpbmciPT10eXBlb2YgbHQ/SlNP'@;
put 'Ti5wYXJzZShsdCk6bHQsQWU9bmV3IEtlKFBlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpiZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6YmUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIUFlLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlz'@;
put 'IG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBBZS5faW1wb3J0Q29va2llc1N5bmMoYmUpLEFlfX1mdW5jdGlvbiBZZShRZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLmx0KXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNv'@;
put 'b2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgUGUsYmU7aWYodGhpc1tRZV0oLi4ubHQsKEFlLFRlKT0+e1BlPUFlLGJlPVRlfSksUGUpdGhyb3cgUGU7cmV0dXJuIGJlfX1LZS5mcm9tSlNPTj1LZS5kZXNlcmlhbGl6ZVN5bmMs'@;
put 'WyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChRZT0+e0tlLnByb3RvdHlwZVtRZV09WShLZS5wcm90b3R5'@;
put 'cGVbUWVdKX0pLEtlLmRlc2VyaWFsaXplPVkoS2UuZGVzZXJpYWxpemUpLE8udmVyc2lvbj1CLE8uQ29va2llSmFyPUtlLE8uQ29va2llPWplLE8uU3RvcmU9ayxPLk1lbW9yeUNvb2tpZVN0b3JlPUUsTy5wYXJzZURhdGU9UyxPLmZvcm1hdERhdGU9dixPLnBhcnNlPWRlLE8uZnJvbUpTT049'@;
put 'eGUsTy5kb21haW5NYXRjaD13LE8uZGVmYXVsdFBhdGg9SixPLnBhdGhNYXRjaD1qLE8uZ2V0UHVibGljU3VmZml4PUwuZ2V0UHVibGljU3VmZml4LE8uY29va2llQ29tcGFyZT1JZSxPLnBlcm11dGVEb21haW49Uig3MzI0KS5wZXJtdXRlRG9tYWluLE8ucGVybXV0ZVBhdGg9ZnVuY3Rpb24o'@;
put 'UWUpe2lmKFYudmFsaWRhdGUoVi5pc1N0cmluZyhRZSkpLCIvIj09PVFlKXJldHVyblsiLyJdO2NvbnN0IGx0PVtRZV07Zm9yKDtRZS5sZW5ndGg+MTspe2NvbnN0IFBlPVFlLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PVBlKWJyZWFrO1FlPVFlLnN1YnN0cigwLFBlKSxsdC5wdXNoKFFlKX1y'@;
put 'ZXR1cm4gbHQucHVzaCgiLyIpLGx0fSxPLmNhbm9uaWNhbERvbWFpbj1wLE8uUHJlZml4U2VjdXJpdHlFbnVtPUcsTy5QYXJhbWV0ZXJFcnJvcj1WLlBhcmFtZXRlckVycm9yfSw1NzYxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3R7ZnJvbUNhbGxiYWNrOnp9PVIoNzA0MSksSz1SKDIy'@;
put 'MjQpLnksTD1SKDczMjQpLnBlcm11dGVEb21haW4saz1SKDg5NzEpLlUse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6RSxnZXRVdGlsSW5zcGVjdDpqfT1SKDEyNjkpO2NsYXNzIFYgZXh0ZW5kcyBLe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnN5bmNocm9ub3VzPSEwLHRoaXMuaWR4PU9i'@;
put 'amVjdC5jcmVhdGUobnVsbCk7Y29uc3QgWD1FKCk7WCYmKHRoaXNbWF09dGhpcy5pbnNwZWN0KX1pbnNwZWN0KCl7cmV0dXJuYHsgaWR4OiAke2ooQikodGhpcy5pZHgsITEsMil9IH1gfWZpbmRDb29raWUoWCxVLHEsZWUpe3JldHVybiBlZShudWxsLHRoaXMuaWR4W1hdJiZ0aGlzLmlkeFtY'@;
put 'XVtVXT90aGlzLmlkeFtYXVtVXVtxXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKFgsVSxxLGVlKXtjb25zdCB0ZT1bXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcSYmKGVlPXEscT0hMCksIVgpcmV0dXJuIGVlKG51bGwsW10pO2xldCBvZTtvZT1VP2Z1bmN0aW9uKHVlKXtPYmplY3Qua2V5'@;
put 'cyh1ZSkuZm9yRWFjaChjZT0+e2lmKGsoVSxjZSkpe2NvbnN0IEc9dWVbY2VdO2Zvcihjb25zdCBiIGluIEcpdGUucHVzaChHW2JdKX19KX06ZnVuY3Rpb24odWUpe2Zvcihjb25zdCBjZSBpbiB1ZSl7Y29uc3QgRz11ZVtjZV07Zm9yKGNvbnN0IGIgaW4gRyl0ZS5wdXNoKEdbYl0pfX07Y29u'@;
put 'c3Qgc2U9TChYLHEpfHxbWF0saGU9dGhpcy5pZHg7c2UuZm9yRWFjaCh1ZT0+e2NvbnN0IGNlPWhlW3VlXTtjZSYmb2UoY2UpfSksZWUobnVsbCx0ZSl9cHV0Q29va2llKFgsVSl7dGhpcy5pZHhbWC5kb21haW5dfHwodGhpcy5pZHhbWC5kb21haW5dPU9iamVjdC5jcmVhdGUobnVsbCkpLHRo'@;
put 'aXMuaWR4W1guZG9tYWluXVtYLnBhdGhdfHwodGhpcy5pZHhbWC5kb21haW5dW1gucGF0aF09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbWC5kb21haW5dW1gucGF0aF1bWC5rZXldPVgsVShudWxsKX11cGRhdGVDb29raWUoWCxVLHEpe3RoaXMucHV0Q29va2llKFUscSl9cmVtb3Zl'@;
put 'Q29va2llKFgsVSxxLGVlKXt0aGlzLmlkeFtYXSYmdGhpcy5pZHhbWF1bVV0mJnRoaXMuaWR4W1hdW1VdW3FdJiZkZWxldGUgdGhpcy5pZHhbWF1bVV1bcV0sZWUobnVsbCl9cmVtb3ZlQ29va2llcyhYLFUscSl7cmV0dXJuIHRoaXMuaWR4W1hdJiYoVT9kZWxldGUgdGhpcy5pZHhbWF1bVV06'@;
put 'ZGVsZXRlIHRoaXMuaWR4W1hdKSxxKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoWCl7cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksWChudWxsKX1nZXRBbGxDb29raWVzKFgpe2NvbnN0IFU9W10scT10aGlzLmlkeDtPYmplY3Qua2V5cyhxKS5mb3JFYWNoKGVlPT57T2JqZWN0'@;
put 'LmtleXMocVtlZV0pLmZvckVhY2godGU9PntPYmplY3Qua2V5cyhxW2VlXVt0ZV0pLmZvckVhY2gob2U9PntudWxsIT09b2UmJlUucHVzaChxW2VlXVt0ZV1bb2VdKX0pfSl9KSxVLnNvcnQoKGVlLHRlKT0+KGVlLmNyZWF0aW9uSW5kZXh8fDApLSh0ZS5jcmVhdGlvbkluZGV4fHwwKSksWChu'@;
put 'dWxsLFUpfX1mdW5jdGlvbiBCKFkpe2NvbnN0IFg9T2JqZWN0LmtleXMoWSk7aWYoMD09PVgubGVuZ3RoKXJldHVybiJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge30iO2xldCBVPSJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuIjtyZXR1cm4gT2JqZWN0LmtleXMoWSkuZm9yRWFjaCgo'@;
put 'cSxlZSk9PntVKz1mdW5jdGlvbih0ZSxvZSl7bGV0IGhlPWAgICcke3RlfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhvZSkuZm9yRWFjaCgodWUsY2UsRyk9PntoZSs9ZnVuY3Rpb24oYixEKXtjb25zdCBIPSIgICAgIjtsZXQgTj1gJHtIfSck'@;
put 'e2J9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKEQpLmZvckVhY2goKGcsQyxTKT0+e04rPWAgICAgICAke2d9OiAke0RbZ10uaW5zcGVjdCgpfWAsQzxTLmxlbmd0aC0xJiYoTis9IiwiKSxOKz0iXG4ifSksTis9YCR7SH19YCxOfSh1ZSxvZVt1'@;
put 'ZV0pLGNlPEcubGVuZ3RoLTEmJihoZSs9IiwiKSxoZSs9IlxuIn0pLGhlKz0iICB9IixoZX0ocSxZW3FdKSxlZTxYLmxlbmd0aC0xJiYoVSs9IiwiKSxVKz0iXG4ifSksVSs9In0iLFV9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1v'@;
put 'dmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwicmVtb3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMiXS5mb3JFYWNoKFk9PntWLnByb3RvdHlwZVtZXT16KFYucHJvdG90eXBlW1ldKX0pLE8ubT1WfSw4OTcxOihNLE8pPT57InVzZSBzdHJpY3QiO08uVT1mdW5jdGlvbihSLHope3JldHVy'@;
put 'biB6PT09Unx8MD09PVIuaW5kZXhPZih6KSYmKCIvIj09PXouc3Vic3RyKC0xKXx8Ii8iPT09Ui5zdWJzdHIoei5sZW5ndGgsMSkpfX0sNzMyNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NTIpO08ucGVybXV0ZURvbWFpbj1mdW5jdGlvbihLLEwpe2NvbnN0IGs9ei5nZXRQ'@;
put 'dWJsaWNTdWZmaXgoSyx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOkx9KTtpZighaylyZXR1cm4gbnVsbDtpZihrPT1LKXJldHVybltLXTsiLiI9PUsuc2xpY2UoLTEpJiYoSz1LLnNsaWNlKDAsLTEpKTtjb25zdCBFPUsuc2xpY2UoMCwtKGsubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2Uo'@;
put 'KTtsZXQgaj1rO2NvbnN0IFY9W2pdO2Zvcig7RS5sZW5ndGg7KWo9YCR7RS5zaGlmdCgpfS4ke2p9YCxWLnB1c2goaik7cmV0dXJuIFZ9fSw3NTI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjI0NCksSz1bImxvY2FsIiwiZXhhbXBsZSIsImludmFsaWQiLCJsb2NhbGhvc3Qi'@;
put 'LCJ0ZXN0Il0sTD1bImxvY2FsaG9zdCIsImludmFsaWQiXTtPLmdldFB1YmxpY1N1ZmZpeD1mdW5jdGlvbihrLEU9e30pe2NvbnN0IGo9ay5zcGxpdCgiLiIpLFY9altqLmxlbmd0aC0xXSxZPSEhRS5pZ25vcmVFcnJvcjtpZihFLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmSy5pbmNsdWRlcyhW'@;
put 'KSl7aWYoai5sZW5ndGg+MSlyZXR1cm5gJHtqW2oubGVuZ3RoLTJdfS4ke1Z9YDtpZihMLmluY2x1ZGVzKFYpKXJldHVybmAke1Z9YH1pZighWSYmSy5pbmNsdWRlcyhWKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZpeCAiJHtWfSIg'@;
put 'd2hpY2ggaXMgYSBzcGVjaWFsIHVzZSBkb21haW4uIFRvIGFsbG93IHRoaXMsIGNvbmZpZ3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VEb21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gei5nZXQoayl9fSwyMjI0OihNLE8p'@;
put 'PT57InVzZSBzdHJpY3QiO08ueT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZShSLHosSyxMKXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoUix6LEssTCl7dGhyb3cgbmV3IEVycm9y'@;
put 'KCJmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoUix6KXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoUix6LEspe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRl'@;
put 'ZCIpfXJlbW92ZUNvb2tpZShSLHosSyxMKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKFIseixLKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQWxsQ29va2ll'@;
put 'cyhSKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhSKXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKSIp'@;
put 'fX19LDEyNjk6KE0sTyxSKT0+e2Z1bmN0aW9uIHooKXt0cnl7cmV0dXJuIFIoOTUzOSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEsoKXtyZXR1cm4gU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKX1PLmdldFV0aWxJbnNwZWN0PWZ1bmN0aW9uKEwsaz17fSl7'@;
put 'Y29uc3QgRT0oay5yZXF1aXJlVXRpbHx8eikoKTtyZXR1cm4gZnVuY3Rpb24oaixWLEIpe3JldHVybiBFP0UuaW5zcGVjdChqLFYsQik6TChqKX19LE8uZ2V0Q3VzdG9tSW5zcGVjdFN5bWJvbD1mdW5jdGlvbihMPXt9KXtyZXR1cm4oTC5sb29rdXBDdXN0b21JbnNwZWN0U3ltYm9sfHxLKSgp'@;
put 'fHxmdW5jdGlvbihrKXtjb25zdCBFPShrLnJlcXVpcmVVdGlsfHx6KSgpO3JldHVybiBFP0UuaW5zcGVjdC5jdXN0b206bnVsbH0oTCl9fSw3NjUyOihNLE8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFIoayl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGt9ZnVuY3Rpb24geihrKXtyZXR1'@;
put 'cm4ic3RyaW5nIj09dHlwZW9mIGt8fGsgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gSyhrKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PXRvU3RyaW5nLmNhbGwoayl9Y2xhc3MgTCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKC4uLkUpe3N1cGVyKC4uLkUpfX1PLlBhcmFtZXRlckVy'@;
put 'cm9yPUwsTy5pc0Z1bmN0aW9uPVIsTy5pc05vbkVtcHR5U3RyaW5nPWZ1bmN0aW9uKGspe3JldHVybiB6KGspJiYiIiE9PWt9LE8uaXNEYXRlPWZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbihFLGope3RyeXtyZXR1cm4gRSBpbnN0YW5jZW9mIGp9Y2F0Y2h7cmV0dXJuITF9fShrLERhdGUp'@;
put 'JiYibnVtYmVyIj09dHlwZW9mKEU9ay5nZXRUaW1lKCkpJiZFJTE9PTA7dmFyIEV9LE8uaXNFbXB0eVN0cmluZz1mdW5jdGlvbihrKXtyZXR1cm4iIj09PWt8fGsgaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09ay50b1N0cmluZygpfSxPLmlzU3RyaW5nPXosTy5pc09iamVjdD1LLE8udmFsaWRh'@;
put 'dGU9ZnVuY3Rpb24oayxFLGope2lmKFIoRSl8fChqPUUsRT1udWxsKSxLKGopfHwoaj17RXJyb3I6IkZhaWxlZCBDaGVjayJ9KSwhayl7aWYoIUUpdGhyb3cgbmV3IEwoaik7RShuZXcgTChqKSl9fX0sNDU2Ok09PntNLmV4cG9ydHM9IjQuMS4zIn0sNzA0MTooTSxPKT0+eyJ1c2Ugc3RyaWN0'@;
put 'IjtPLmZyb21DYWxsYmFjaz1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoeixLKT0+e2FyZ3VtZW50c1thcmd1bWVu'@;
put 'dHMubGVuZ3RoXT0oTCxrKT0+e2lmKEwpcmV0dXJuIEsoTCk7eihrKX0sYXJndW1lbnRzLmxlbmd0aCsrLFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7dmFsdWU6Ui5uYW1lfSl9LE8uZnJvbVByb21pc2U9ZnVuY3Rpb24oUil7cmV0'@;
put 'dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2NvbnN0IHo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHopcmV0dXJuIFIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0x'@;
put 'XSxhcmd1bWVudHMubGVuZ3RoLS0sUi5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbihLPT56KG51bGwsSykseil9LCJuYW1lIix7dmFsdWU6Ui5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3Jl'@;
put 'dHVybiB6PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKFYpe2Zvcih2YXIgQixZPTEsWD1hcmd1bWVudHMubGVuZ3RoO1k8WDtZKyspZm9yKHZhciBVIGluIEI9YXJndW1lbnRzW1ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLFUpJiYoVltVXT1CW1VdKTtyZXR1cm4g'@;
put 'Vn0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKFUscSl7ZnVuY3Rpb24gZWUoc2Upe3RyeXtvZShYLm5leHQoc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1'@;
put 'bmN0aW9uIHRlKHNlKXt0cnl7b2UoWC50aHJvdyhzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gb2Uoc2Upe3ZhciBoZTtzZS5kb25lP1Uoc2UudmFsdWUpOihoZT1zZS52YWx1ZSxoZSBpbnN0YW5jZW9mIFk/aGU6bmV3IFkoZnVuY3Rpb24odWUpe3VlKGhlKX0pKS50aGVuKGVlLHRl'@;
put 'KX1vZSgoWD1YLmFwcGx5KFYsQnx8W10pKS5uZXh0KCkpfSl9LEw9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVixCKXt2YXIgWSxYLFUscSxlZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZVWzBdKXRocm93IFVbMV07cmV0dXJuIFVbMV19LHRyeXM6W10sb3BzOltd'@;
put 'fTtyZXR1cm4gcT17bmV4dDp0ZSgwKSx0aHJvdzp0ZSgxKSxyZXR1cm46dGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihxW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHE7ZnVuY3Rpb24gdGUob2Upe3JldHVybiBmdW5jdGlvbihzZSl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKGhlKXtpZihZKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2VlOyl0cnl7aWYoWT0xLFgmJihVPTImaGVbMF0/WC5yZXR1cm46aGVbMF0/WC50aHJvd3x8KChVPVgucmV0dXJuKSYmVS5jYWxsKFgpLDApOlgubmV4'@;
put 'dCkmJiEoVT1VLmNhbGwoWCxoZVsxXSkpLmRvbmUpcmV0dXJuIFU7c3dpdGNoKFg9MCxVJiYoaGU9WzImaGVbMF0sVS52YWx1ZV0pLGhlWzBdKXtjYXNlIDA6Y2FzZSAxOlU9aGU7YnJlYWs7Y2FzZSA0OnJldHVybiBlZS5sYWJlbCsrLHt2YWx1ZTpoZVsxXSxkb25lOiExfTtjYXNlIDU6ZWUu'@;
put 'bGFiZWwrKyxYPWhlWzFdLGhlPVswXTtjb250aW51ZTtjYXNlIDc6aGU9ZWUub3BzLnBvcCgpLGVlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChVPShVPWVlLnRyeXMpLmxlbmd0aD4wJiZVW1UubGVuZ3RoLTFdKXx8NiE9PWhlWzBdJiYyIT09aGVbMF0pKXtlZT0wO2NvbnRp'@;
put 'bnVlfWlmKDM9PT1oZVswXSYmKCFVfHxoZVsxXT5VWzBdJiZoZVsxXTxVWzNdKSl7ZWUubGFiZWw9aGVbMV07YnJlYWt9aWYoNj09PWhlWzBdJiZlZS5sYWJlbDxVWzFdKXtlZS5sYWJlbD1VWzFdLFU9aGU7YnJlYWt9aWYoVSYmZWUubGFiZWw8VVsyXSl7ZWUubGFiZWw9VVsyXSxlZS5vcHMu'@;
put 'cHVzaChoZSk7YnJlYWt9VVsyXSYmZWUub3BzLnBvcCgpLGVlLnRyeXMucG9wKCk7Y29udGludWV9aGU9Qi5jYWxsKFYsZWUpfWNhdGNoKHVlKXtoZT1bNix1ZV0sWD0wfWZpbmFsbHl7WT1VPTB9aWYoNSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm57dmFsdWU6aGVbMF0/aGVbMV06dm9pZCAw'@;
put 'LGRvbmU6ITB9fShbb2Usc2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db250ZXh0TWFuYWdlcj12b2lkIDA7dmFyIGs9Uig1OTI4KSxFPVIoOTc3OCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIFYoQixZKXt0aGlzLnNlcnZlclVybD1C'@;
put 'LHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4'@;
put 'ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNB'@;
put 'UyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5j'@;
put 'aGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRpbyBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sQiYmKDAsay5pc1VybCkoQil9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShWLnByb3RvdHlwZSwiZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJn'@;
put 'ZXREZWZhdWx0TGF1bmNoZXJDb250ZXh0cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFYucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbihCKXtyZXR1cm4gSyh0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWTtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0'@;
put 'PTEwMDAwIiksQikuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0cy4gIil9KV07Y2FzZSAxOnJldHVyblsyLCgoWT1YLnNlbnQoKS5yZXN1bHQpJiZZLml0ZW1zP1kuaXRlbXM6W10pLm1hcChm'@;
put 'dW5jdGlvbihVKXtyZXR1cm57Y3JlYXRlZEJ5OlUuY3JlYXRlZEJ5LGlkOlUuaWQsbmFtZTpVLm5hbWUsdmVyc2lvbjpVLnZlcnNpb24sYXR0cmlidXRlczp7fX19KV19fSl9KX0sVi5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5jdGlvbihCKXtyZXR1cm4gSyh0aGlzLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWTtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMCIp'@;
put 'LEIpLmNhdGNoKGZ1bmN0aW9uKFUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxhdW5jaGVyIGNvbnRleHRzLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsKChZPVguc2VudCgpLnJlc3VsdCkmJlkuaXRlbXM/WS5pdGVtczpbXSkubWFwKGZ1bmN0aW9u'@;
put 'KFUpe3JldHVybntjcmVhdGVkQnk6VS5jcmVhdGVkQnksaWQ6VS5pZCxuYW1lOlUubmFtZSx2ZXJzaW9uOlUudmVyc2lvbixhdHRyaWJ1dGVzOnt9fX0pXX19KX0pfSxWLnByb3RvdHlwZS5jcmVhdGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihCLFksWCxVLHEsZWUpe3JldHVybiBLKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZSxvZSxzZSxoZSx1ZTtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEIpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVmYXVs'@;
put 'dENvbXB1dGVDb250ZXh0cywiQ29tcHV0ZSBjb250ZXh0ICciLmNvbmNhdChCLCInIGFscmVhZHkgZXhpc3RzLiIpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0cyhxKV07Y2FzZSAxOmlmKGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKEcpe3JldHVybiBHLm5hbWU9PT1CfSkpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJDb21wdXRlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBZP3RoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoWSk/WzMsNF06WzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHEpXTpbMyw0XTtjYXNlIDI6cmV0dXJu'@;
put 'IGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKEcpe3JldHVybiBHLm5hbWU9PT1ZfSk/WzMsNF06KHRlPSJUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgIi5jb25jYXQoWSksWzQsdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRleHQoWSx0ZSwiZGlyZWN0IixxKS5jYXRjaChmdW5jdGlvbihHKXt0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIuY29uY2F0KEcpKX0pXSk7Y2FzZSAzOmlmKCEob2U9Y2Uuc2VudCgpKXx8IW9lLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO1k9'@;
put 'b2UubmFtZSxjZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gc2U9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0scSYmKHNlLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChxKSksaGU9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfSxYJiYoaGU9eih6KHt9LGhlKSx7cnVu'@;
put 'U2VydmVyQXM6WH0pKSx1ZT17bmFtZTpCLGxhdW5jaENvbnRleHQ6e2NvbnRleHROYW1lOll8fCIifSxhdHRyaWJ1dGVzOmhlfSxlZSYmZWUubGVuZ3RoP3VlLmF1dGhvcml6ZWRVc2Vycz1lZTp1ZS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAsVSYmKHVlLmVudmlyb25tZW50'@;
put 'PXthdXRvRXhlY0xpbmVzOlV9KSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzIiksdWUscSkuY2F0Y2goZnVuY3Rpb24oRyl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKEcsIkVycm9yIHdoaWxlIGNyZWF0aW5n'@;
put 'IGNvbXB1dGUgY29udGV4dC4gIil9KV07Y2FzZSA1OnJldHVyblsyLGNlLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFYucHJvdG90eXBlLmNyZWF0ZUxhdW5jaGVyQ29udGV4dD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9ImRpcmVjdCIpLEsodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWU7cmV0dXJuIEwodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVm'@;
put 'YXVsdExhdW5jaGVyQ29udGV4dHMsIkxhdW5jaGVyIGNvbnRleHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpLFs0LHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhVKV07Y2FzZSAxOmlmKHRlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UubmFtZT09PUJ9KSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkxhdW5jaGVyIGNvbnRleHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBxPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LFUmJihxLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChVKSksZWU9e25hbWU6Qixk'@;
put 'ZXNjcmlwdGlvbjpZLGxhdW5jaFR5cGU6WH0sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvbGF1bmNoZXIvY29udGV4dHMiKSxlZSxVKS5jYXRjaChmdW5jdGlvbihvZSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKG9lLCJFcnJvciB3aGls'@;
put 'ZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAiKX0pXTtjYXNlIDI6cmV0dXJuWzIsdGUuc2VudCgpLnJlc3VsdF19fSl9KX0sVi5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEIsWSxYKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'VSxxLGVlLHRlO3JldHVybiBMKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQg'@;
put 'U0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShCLFgpXTtjYXNlIDE6cmV0dXJuKFU9b2Uuc2VudCgpKT9bMywzXTpbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChZLmlkLFgpXTtjYXNlIDI6VT1vZS5z'@;
put 'ZW50KCksb2UubGFiZWw9MztjYXNlIDM6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChVLmlkKSxYKS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3cgc2UmJjQwND09PXNlLnN0YXR1cz9u'@;
put 'ZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdChCLCInIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuIikpOnNlfSldO2Nhc2UgNDpyZXR1cm4gcT1vZS5zZW50KCksdGU9cS5ldGFnLFs0LHRoaXMucmVxdWVzdENsaWVudC5wdXQoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0'@;
put 'KChlZT1xLnJlc3VsdCkuaWQpLHooeih6KHt9LGVlKSxZKSx7YXR0cmlidXRlczp6KHooe30sZWUuYXR0cmlidXRlcyksWS5hdHRyaWJ1dGVzKX0pLFgseyJJZi1NYXRjaCI6dGV9KV07Y2FzZSA1OnJldHVyblsyLG9lLnNlbnQoKV19fSl9KX0sVi5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRl'@;
put 'eHRCeU5hbWU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWDtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKFUpe3N3aXRjaChVLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5z'@;
put 'ZXJ2ZXJVcmwsJy9jb21wdXRlL2NvbnRleHRzP2ZpbHRlcj1lcShuYW1lLCAiJykuY29uY2F0KEIsJyIpJyksWSkuY2F0Y2goZnVuY3Rpb24ocSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKHEsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IG5hbWUuICIpfSldO2Nh'@;
put 'c2UgMTppZighKFg9VS5zZW50KCkucmVzdWx0KXx8IVguaXRlbXN8fCFYLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdChCLCInIHdhcyBub3QgZm91bmQgYXQgJyIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiJy4iKSk7cmV0dXJuWzIsWC5pdGVt'@;
put 'c1swXV19fSl9KX0sVi5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVx'@;
put 'dWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQoQiksWSkuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAi'@;
put 'KX0pXTtjYXNlIDE6cmV0dXJuWzIsWC5zZW50KCkucmVzdWx0XX19KX0pfSxWLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWCxVLHEsZWUsdGUsb2Usc2UsdWUsY2U7cmV0dXJu'@;
put 'IEwodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIpLFk/LmFjY2Vzc190b2tlbikuY2F0Y2goZnVuY3Rpb24o'@;
put 'Yil7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9KV07Y2FzZSAxOlg9Ry5zZW50KCkucmVzdWx0LHE9W10sZWU9KFU9WC5pdGVtc3x8W10pLm1hcChmdW5jdGlvbihiKXt2YXIgRD1bIiVwdXQgJj1zeXN1c2VyaWQ7'@;
put 'Il07cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEIoInRlc3QtIi5jb25jYXQoYi5uYW1lKSxELGIubmFtZSxZLG51bGwsITEsITAsITApLmNhdGNoKGZ1bmN0aW9uKEgpe3JldHVybiBIfSl9fSksdGU9W10sb2U9MCxzZT1lZSxHLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBvZTxzZS5sZW5ndGg/'@;
put 'KGNlPSh1ZT10ZSkucHVzaCxbNCwoMCxzZVtvZV0pKCldKTpbMyw1XTtjYXNlIDM6Y2UuYXBwbHkodWUsW0cuc2VudCgpXSksRy5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gb2UrKyxbMywyXTtjYXNlIDU6cmV0dXJuIHRlLmZvckVhY2goZnVuY3Rpb24oYixEKXtpZihiJiZiLmxvZyl0cnl7dmFy'@;
put 'IE49IiIsZz1iLmxvZy5zcGxpdCgiXG4iKS5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBDLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKX0pO2cmJihOPWcucmVwbGFjZSgiU1lTVVNFUklEPSIsIiIpLHEucHVzaCh7Y3JlYXRlZEJ5OlVbRF0uY3JlYXRlZEJ5LGlkOlVbRF0uaWQsbmFtZTpVW0Rd'@;
put 'Lm5hbWUsdmVyc2lvbjpVW0RdLnZlcnNpb24sYXR0cmlidXRlczp7c3lzVXNlcklkOk59fSkpfWNhdGNoKEMpe3Rocm93IEN9fSksWzIscV19fSl9KX0sVi5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu'@;
put 'Y3Rpb24oKXt2YXIgWCxVO3JldHVybiBMKHRoaXMsZnVuY3Rpb24ocSl7c3dpdGNoKHEubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEIpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRGVsZXRpbmcgZGVm'@;
put 'YXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxYPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LFkmJihYLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChZKSksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShCLFkpXTtj'@;
put 'YXNlIDE6cmV0dXJuIFU9cS5zZW50KCksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZSgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChVLmlkKSxZKV07Y2FzZSAyOnJldHVyblsyLHEuc2VudCgpXX19KX0pfSxWLnByb3RvdHlwZS52YWxp'@;
put 'ZGF0ZUNvbnRleHROYW1lPWZ1bmN0aW9uKEIpe2lmKCFCKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpfSxWLnByb3RvdHlwZS5pc0RlZmF1bHRDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUpe2lmKHZvaWQgMD09PVkmJihZPXRoaXMuZGVmYXVsdENvbXB1dGVD'@;
put 'b250ZXh0cyksdm9pZCAwPT09WCYmKFg9IiIpLHZvaWQgMD09PVUmJihVPSExKSxZLmluY2x1ZGVzKEIpKXRocm93IG5ldyBFcnJvcigiIi5jb25jYXQoWCkuY29uY2F0KFU/IlxuRGVmYXVsdCBjb250ZXh0czoiK1kubWFwKGZ1bmN0aW9uKHEsZWUpe3JldHVybiJcbiIuY29uY2F0KGVlKzEs'@;
put 'Ii4gIikuY29uY2F0KHEpfSk6IiIpKX0sVn0oKTtPLkNvbnRleHRNYW5hZ2VyPWp9LDgzMDY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9u'@;
put 'KHRlLG9lKXtmdW5jdGlvbiBzZShjZSl7dHJ5e3VlKGVlLm5leHQoY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gaGUoY2Upe3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFs'@;
put 'dWUsRyBpbnN0YW5jZW9mIHE/RzpuZXcgcShmdW5jdGlvbihiKXtiKEcpfSkpLnRoZW4oc2UsaGUpfXVlKChlZT1lZS5hcHBseShYLFV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2Vu'@;
put 'dDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG9lPXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30pLG9lO2Z1bmN0aW9uIGhlKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYo'@;
put 'dGU9MiZHWzBdP2VlLnJldHVybjpHWzBdP2VlLnRocm93fHwoKHRlPWVlLnJldHVybikmJnRlLmNhbGwoZWUpLDApOmVlLm5leHQpJiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1bMiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAw'@;
put 'OmNhc2UgMTp0ZT1HO2JyZWFrO2Nhc2UgNDpyZXR1cm4gc2UubGFiZWwrKyx7dmFsdWU6R1sxXSxkb25lOiExfTtjYXNlIDU6c2UubGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgo'@;
put 'dGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0pfHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8'@;
put 'dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJlYWt9aWYodGUmJnNlLmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixi'@;
put 'XSxlZT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fSxMPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWCxVLHEpe2lmKHF8fDI9PT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'KWZvcih2YXIgZWUsdGU9MCxvZT1VLmxlbmd0aDt0ZTxvZTt0ZSsrKSFlZSYmdGUgaW4gVXx8KGVlfHwoZWU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSwwLHRlKSksZWVbdGVdPVVbdGVdKTtyZXR1cm4gWC5jb25jYXQoZWV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFUpKX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTOUFwaUNsaWVudD12b2lkIDA7dmFyIGs9Uig3NzU3KSxFPVIoNjIzMCksaj1SKDc5NSksVj1SKDU5MjgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBYKFUscSxlZSl7dGhpcy5zZXJ2ZXJVcmw9VSx0'@;
put 'aGlzLmpvYnNQYXRoPXEsVSYmKDAsVi5pc1VybCkoVSksdGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyBqLlNhczlSZXF1ZXN0Q2xpZW50KFUsZWUpfXJldHVybiBYLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX0sWC5wcm90b3R5'@;
put 'cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKFUpe1UmJih0aGlzLnNlcnZlclVybD1VKX0sWC5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihVLHEsZWUpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZSxvZSxzZSxoZSx1ZSxjZSxHO3JldHVybiBLKHRo'@;
put 'aXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQubG9naW4ocSxlZSx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBiLnNlbnQoKSx0ZT1bImRhdGEgX251bGxfOyIsImZpbGUgX3dlYm91dDsiLCJwdXQgJ0V4ZWN1dGVk'@;
put 'IHNhc2pzIHJ1bic7IiwicnVuOyJdLG9lPVkoTChMKFtdLFUsITApLHRlLCEwKS5qb2luKCJcbiIpKSxzZT0iL1VzZXIgRm9sZGVycy8iLmNvbmNhdChxLCIvTXkgRm9sZGVyL3Nhc2pzL3J1bm5lciIpLGhlPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK29lLmdldEJvdW5kYXJ5'@;
put 'KCksdWU9b2UuZ2V0TGVuZ3RoU3luYygpLGNlPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6aGUsIkNvbnRlbnQtTGVuZ3RoIjp1ZSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0sRz0iIi5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5j'@;
put 'b25jYXQoIl9wcm9ncmFtPSIrc2UrIiZfZGVidWc9bG9nIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoRyxvZSx2b2lkIDAsaGUsY2UpXTtjYXNlIDI6cmV0dXJuWzIsYi5zZW50KCkucmVzdWx0XX19KX0pfSxYfSgpO08uU0FTOUFwaUNsaWVudD1CO3ZhciBZPWZ1bmN0aW9uKFgpe3Zh'@;
put 'ciBVPW5ldyBFLHE9InNhc2pzLWV4ZWN1dGUtc2FzOS0iLmNvbmNhdCgoMCxrLmdlbmVyYXRlVGltZXN0YW1wKSgiIiksIi5zYXMiKTtyZXR1cm4gVS5hcHBlbmQocSxYLHtmaWxlbmFtZTpxLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLFV9fSw5ODIxOmZ1bmN0aW9uKE0sTyxSKXsidXNl'@;
put 'IHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksTD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oY2UsRyxiLEQpe3JldHVybiBuZXcoYnx8KGI9UHJvbWlzZSkpKGZ1bmN0aW9uKEgsTil7ZnVuY3Rpb24gZyh2KXt0cnl7UyhELm5leHQodikpfWNhdGNoKHApe04ocCl9fWZ1'@;
put 'bmN0aW9uIEModil7dHJ5e1MoRC50aHJvdyh2KSl9Y2F0Y2gocCl7TihwKX19ZnVuY3Rpb24gUyh2KXt2YXIgcDt2LmRvbmU/SCh2LnZhbHVlKToocD12LnZhbHVlLHAgaW5zdGFuY2VvZiBiP3A6bmV3IGIoZnVuY3Rpb24odyl7dyhwKX0pKS50aGVuKGcsQyl9UygoRD1ELmFwcGx5KGNlLEd8'@;
put 'fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGNlLEcpe3ZhciBiLEQsSCxOLGc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmSFswXSl0aHJvdyBIWzFdO3JldHVybiBIWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIE49e25leHQ6Qygw'@;
put 'KSx0aHJvdzpDKDEpLHJldHVybjpDKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoTltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxOO2Z1bmN0aW9uIEMoUyl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBmdW5jdGlvbihwKXtpZihiKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2c7KXRyeXtpZihiPTEsRCYmKEg9MiZwWzBdP0QucmV0dXJuOnBbMF0/RC50aHJvd3x8KChIPUQucmV0dXJuKSYmSC5jYWxsKEQpLDApOkQubmV4dCkmJiEoSD1ILmNhbGwoRCxwWzFdKSkuZG9uZSly'@;
put 'ZXR1cm4gSDtzd2l0Y2goRD0wLEgmJihwPVsyJnBbMF0sSC52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6SD1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZy5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpnLmxhYmVsKyssRD1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpw'@;
put 'PWcub3BzLnBvcCgpLGcudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEg9KEg9Zy50cnlzKS5sZW5ndGg+MCYmSFtILmxlbmd0aC0xXSl8fDYhPT1wWzBdJiYyIT09cFswXSkpe2c9MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFIfHxwWzFdPkhbMF0mJnBbMV08SFszXSkpe2cu'@;
put 'bGFiZWw9cFsxXTticmVha31pZig2PT09cFswXSYmZy5sYWJlbDxIWzFdKXtnLmxhYmVsPUhbMV0sSD1wO2JyZWFrfWlmKEgmJmcubGFiZWw8SFsyXSl7Zy5sYWJlbD1IWzJdLGcub3BzLnB1c2gocCk7YnJlYWt9SFsyXSYmZy5vcHMucG9wKCksZy50cnlzLnBvcCgpO2NvbnRpbnVlfXA9Ry5j'@;
put 'YWxsKGNlLGcpfWNhdGNoKHcpe3A9WzYsd10sRD0wfWZpbmFsbHl7Yj1IPTB9aWYoNSZwWzBdKXRocm93IHBbMV07cmV0dXJue3ZhbHVlOnBbMF0/cFsxXTp2b2lkIDAsZG9uZTohMH19KFtTLHZdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Ty5TQVNWaXlhQXBpQ2xpZW50PXZvaWQgMDt2YXIgRT1SKDU5MjgpLGo9Uig2MjMwKSxWPVIoMTM5NSksQj1SKDY5MDMpLFk9Uig2NzIpLFg9Uig5MDk3KSxVPVIoOTc3OCkscT1SKDEzNDMpLGVlPVIoNzA0KSx0ZT1SKDY0OTYpLG9lPVIoMTYyMiksc2U9UigzNTY5KSxoZT1SKDM2NiksdWU9'@;
put 'ZnVuY3Rpb24oKXtmdW5jdGlvbiBjZShHLGIsRCxIKXt0aGlzLnNlcnZlclVybD1HLHRoaXMucm9vdEZvbGRlck5hbWU9Yix0aGlzLmNvbnRleHROYW1lPUQsdGhpcy5yZXF1ZXN0Q2xpZW50PUgsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgQi5TZXNzaW9uTWFuYWdl'@;
put 'cih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgWS5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsRyYmKDAsRS5pc1Vy'@;
put 'bCkoRyl9cmV0dXJuIGNlLnByb3RvdHlwZS5hcHBlbmRSZXF1ZXN0PWZ1bmN0aW9uKEcsYixEKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChHLGIsRCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsImRlYnVnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuX2RlYnVnfSxzZXQ6ZnVuY3Rpb24oRyl7dGhpcy5fZGVidWc9Ryx0aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1HKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxjZS5wcm90b3R5cGUuZ2V0Sm9ic0luRm9sZGVyPWZ1bmN0aW9uKEcp'@;
put 'e3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNv'@;
put 'bmNhdChHKTpHLHRoaXMuZm9sZGVyTWFwLmdldChiKT9bMix0aGlzLmZvbGRlck1hcC5nZXQoYildOls0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoYildO2Nhc2UgMTpyZXR1cm4gRC5zZW50KCksWzIsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29uZmln'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJue3NlcnZlclVybDp0aGlzLnNlcnZlclVybCxyb290Rm9sZGVyTmFtZTp0aGlzLnJvb3RGb2xkZXJOYW1lfX0sY2UucHJvdG90eXBlLnNldENvbmZpZz1mdW5jdGlvbihHLGIpe0cmJih0aGlzLnNlcnZlclVybD1HKSxiJiYodGhpcy5yb290Rm9sZGVyTmFtZT1i'@;
put 'KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbihHKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5n'@;
put 'ZXRDb21wdXRlQ29udGV4dHMoRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0TWFuYWdlci5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzfSxjZS5wcm90'@;
put 'b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5jdGlvbihHKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRMYXVuY2hl'@;
put 'ckNvbnRleHRzKEcpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oRyl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtz'@;
put 'd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPXRoaXMuZXhlY3V0ZVNjcmlwdC5iaW5kKHRoaXMpLFs0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKGIsRyldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZVNl'@;
put 'c3Npb249ZnVuY3Rpb24oRyxiKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxILE47cmV0dXJuIGsodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGIm'@;
put 'JihELkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChiKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLGIpXTtjYXNlIDE6aWYoSD1nLnNlbnQoKS5yZXN1bHQsIShOPUguaXRlbXMmJkguaXRlbXMubGVuZ3RoP0guaXRlbXMu'@;
put 'ZmluZChmdW5jdGlvbihDKXtyZXR1cm4gQy5uYW1lPT09R30pOm51bGwpKXRocm93IG5ldyBFcnJvcigiRXhlY3V0aW9uIGNvbnRleHQgIi5jb25jYXQoRywiIG5vdCBmb3VuZC4iKSk7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0'@;
put 'KE4uaWQsIi9zZXNzaW9ucyIpLHt9LGIpXTtjYXNlIDI6cmV0dXJuWzIsZy5zZW50KCkucmVzdWx0XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oRyxiLEQsSCxOLGcpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVy'@;
put 'biBrKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KEcsYixELEgsTixnKV07Y2FzZSAxOnJldHVyblsyLEMuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlTGF1bmNo'@;
put 'ZXJDb250ZXh0PWZ1bmN0aW9uKEcsYixELEgpe3JldHVybiB2b2lkIDA9PT1EJiYoRD0iZGlyZWN0IiksTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFu'@;
put 'YWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoRyxiLEQsSCldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmVkaXRDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGso'@;
put 'dGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KEcsYixEKV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVu'@;
put 'Y3Rpb24oRyxiKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChHLGIpXTtjYXNlIDE6cmV0'@;
put 'dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKEcsYixELEgsTixnLEMsUyx2LHAsdyl7cmV0dXJuIHZvaWQgMD09PU4mJihOPW51bGwpLHZvaWQgMD09PWcmJihnPSExKSx2b2lkIDA9PT1DJiYoQz0hMSksdm9pZCAwPT09UyYmKFM9ITAp'@;
put 'LHZvaWQgMD09PXAmJihwPSExKSxMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSil7cmV0dXJuWzIsKDAsb2UuZXhlY3V0ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9s'@;
put 'ZGVyTmFtZSxHLGIsRCxILE4sZyxDLFMsdixwLHcpXX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIuY29uY2F0KEcpLGIpLnRoZW4oZnVuY3Rpb24oSCl7cmV0dXJuIEgucmVzdWx0fSldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZpbGU9'@;
put 'ZnVuY3Rpb24oRyxiLEQsSCxOKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDppZighRCYmIUgpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFy'@;
put 'ZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gSHx8IUQ/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoRCxOKV07Y2FzZSAxOkg9Uy5zZW50KCksUy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gZz17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQt'@;
put 'RGlzcG9zaXRpb24iOidmaWxlbmFtZT0iJy5jb25jYXQoRywnIjsnKX0sKEM9bmV3IGopLmFwcGVuZCgiZmlsZSIsYixHKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0iLmNvbmNhdChILCImdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxv'@;
put 'YWQiKSxDLE4sIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrQy5fYm91bmRhcnksZyldO2Nhc2UgMzpyZXR1cm5bMixTLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXI9ZnVuY3Rpb24oRyxiLEQsSCxOKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdix3O3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSil7c3dpdGNoKEoubGFiZWwpe2Nhc2UgMDppZihnPXoubG9nZ2VyfHxLLCFiJiYhRCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVk'@;
put 'LiIpO3JldHVybiBEfHwhYj9bMyw2XTpbNCx0aGlzLmdldEZvbGRlclVyaShiLEgpXTtjYXNlIDE6aWYoRD1KLnNlbnQoKSlyZXR1cm5bMywzXTtpZihnLmluZm8oIlBhcmVudCBmb2xkZXIgYXQgcGF0aCAnIi5jb25jYXQoYiwiJyBpcyBub3QgcHJlc2VudC4iKSksQz1iLnN1YnN0cmluZygw'@;
put 'LGIubGFzdEluZGV4T2YoIi8iKSksUz0iIi5jb25jYXQoYi5zcGxpdCgiLyIpLnBvcCgpKSwiIj09PUMpdGhyb3cgbmV3IFYuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IoYix0aGlzLnNlcnZlclVybCxIKTtyZXR1cm4gZy5pbmZvKCJDcmVhdGluZyBwYXJlbnQgZm9sZGVyOlxuJyIuY29uY2F0'@;
put 'KFMsIicgaW4gJyIpLmNvbmNhdChDLCInIikpLFs0LHRoaXMuY3JlYXRlRm9sZGVyKFMsQyx2b2lkIDAsSCldO2Nhc2UgMjpyZXR1cm4gdj1KLnNlbnQoKSxnLmluZm8oIlBhcmVudCBmb2xkZXIgJyIuY29uY2F0KFMsIicgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIikpLEQ9Ii9m'@;
put 'b2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQodi5pZCksWzMsNl07Y2FzZSAzOnJldHVybiBOP1s0LHRoaXMuZ2V0Rm9sZGVyVXJpKGIrIi8iK0csSCldOlszLDZdO2Nhc2UgNDpyZXR1cm4gSi5zZW50KCk/WzQsdGhpcy5kZWxldGVGb2xkZXIoYisiLyIrRyxIKV06WzMsNl07Y2FzZSA1Okouc2Vu'@;
put 'dCgpLEoubGFiZWw9NjtjYXNlIDY6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KEQpLHtuYW1lOkcsdHlwZToiZm9sZGVyIn0sSCkuY2F0Y2goZnVuY3Rpb24obmUpe3ZhciBkZT1uZS5tZXNzYWdlLGZl'@;
put 'PW5lLnJlc3BvbnNlO2lmKGRlJiZmZSYmZmUuZGF0YSYmZmUuZGF0YS5tZXNzYWdlKXt2YXIgeGU9ZmUuc3RhdHVzLEllPVtkZSxmZS5kYXRhLm1lc3NhZ2VdLm1hcChmdW5jdGlvbihGZSl7cmV0dXJuL1wuJC8udGVzdChGZSk/RmU6IiIuY29uY2F0KEZlLCIuIil9KTt0aHJvdyBOfHw0MDkh'@;
put 'PT14ZXx8SWUucHVzaCgnVG8gb3ZlcnJpZGUsIHBsZWFzZSBzZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksSWUuam9pbigiICIpfXRocm93IG5lfSldO2Nhc2UgNzpyZXR1cm4gdz1KLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcCgiIi5jb25jYXQoYiwiLyIpLmNv'@;
put 'bmNhdChHKSxIKV07Y2FzZSA4OnJldHVybiBKLnNlbnQoKSxbMix3XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oZyl7'@;
put 'c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZighRCYmIUgpdGhyb3cgbmV3IEVycm9yKCJQYXRoIHRvIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gSHx8IUQ/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoRCxOKV07Y2FzZSAxOkg9Zy5zZW50KCks'@;
put 'Zy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9IikuY29uY2F0KEgpLHtuYW1lOkcscGFyYW1ldGVyczpbe25hbWU6Il9hZGRq'@;
put 'ZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixkZWZhdWx0VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6Yn0sTildO2Nhc2UgMzpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0aW9uKEcpe3JldHVybiBMKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQ9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTTG9nb24vb2F1dGgvYXV0aG9yaXplP2NsaWVudF9pZD0iKS5j'@;
put 'b25jYXQoRywiJnJlc3BvbnNlX3R5cGU9Y29kZSIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoYix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybiBOLnJlc3VsdH0pLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuIEwoRCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'KCl7dmFyIGcsQyxTLHY7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBnPSIiLCgwLFguaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKE4pP1s0LHRoaXMucmVxdWVzdENsaWVudC5hdXRob3JpemUoTildOlszLDJdO2Nhc2UgMTpyZXR1cm4g'@;
put 'Qz1wLnNlbnQoKSxTPUMuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1TLFsyLGc9di5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dF07Y2FzZSAyOnJldHVybiBTPU4u'@;
put 'c3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1TLHYmJihnPXYucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQpLFsyLGddfX0pfSl9KS5jYXRjaChmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBudWxsfSldO2Nhc2UgMTpyZXR1cm5bMixILnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgw'@;
put 'LHNlLmdldEFjY2Vzc1Rva2VuRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LEcsYixEKV19KX0pfSxjZS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihI'@;
put 'KXtyZXR1cm5bMiwoMCxoZS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LEcsYixEKV19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKEcsYil7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSDtyZXR1cm4g'@;
put 'ayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9dGhpcy5zZXJ2ZXJVcmwrIi9vYXV0aC9jbGllbnRzLyIuY29uY2F0KEcpLEg9e30sYiYmKEguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KGIpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVs'@;
put 'ZXRlKEQsYildO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlQ29tcHV0ZUpvYj1mdW5jdGlvbihHLGIsRCxILE4sZyxDLFMsdixwKXtyZXR1cm4gdm9pZCAwPT09ZyYmKGc9ITApLHZvaWQgMD09PUMmJihDPSExKSx2b2lkIDA9PT12'@;
put 'JiYodj0hMSksTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdyxKLG5lLGRlLGZlLHhlLEllLEZlLE9lLGplLFdlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oS2Upe3N3aXRjaChLZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB3PShOfHx7fSkuYWNjZXNzX3Rva2VuLE4/WzQsKDAs'@;
put 'ZWUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsTildOlszLDJdO2Nhc2UgMTp3PUtlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sS2UubGFiZWw9MjtjYXNlIDI6aWYoKDAsRS5pc1JlbGF0aXZlUGF0aCkoRykmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRp'@;
put 'dmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZSIpO3JldHVybiBKPUcuc3BsaXQoIi8iKSxuZT1KLnBvcCgpLGRlPUouam9pbigiLyIpLGZlPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJO'@;
put 'YW1lLCIvIikuY29uY2F0KGRlKTpkZSxbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGZlLHcpLmNhdGNoKGZ1bmN0aW9uKFllKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWWUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9KV07Y2FzZSAzOmlmKEtlLnNlbnQoKSwh'@;
put 'KHhlPXRoaXMuZm9sZGVyTWFwLmdldChmZSkpKXRocm93IG5ldyBFcnJvcigiVGhlIGZvbGRlciAnIi5jb25jYXQoZmUsIicgd2FzIG5vdCBmb3VuZCBvbiAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInIikpO2lmKCEoSWU9eGU/LmZpbmQoZnVuY3Rpb24oWWUpe3JldHVybiBZZS5uYW1l'@;
put 'PT09bmV9KSkpdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtpZihGZT1JZT8uY29kZSlyZXR1cm5bMyw1XTtpZighKE9lPUllPy5saW5rcy5maW5kKGZ1bmN0aW9uKFllKXtyZXR1cm4iZ2V0UmVzb3VyY2UiPT09WWUucmVsfSkpKXRocm93IG5ldyBFcnJvcigiVVJJIG9m'@;
put 'IGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91bmQuIik7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChPZS5ocmVmKSx3KS5jYXRjaChmdW5jdGlvbihZZSl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKFllLCJFcnJvciB3'@;
put 'aGlsZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9uLiAiKX0pXTtjYXNlIDQ6amU9S2Uuc2VudCgpLnJlc3VsdCxJZS5jb2RlPUZlPWplLmNvZGUsS2UubGFiZWw9NTtjYXNlIDU6cmV0dXJuIEZlfHwoRmU9IiIpLFdlPUZlLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5zcGxpdCgiXG4iKSxbNCx0aGlz'@;
put 'LmV4ZWN1dGVTY3JpcHQoRyxXZSxiLE4sSCxELEMsZyxTLHYscCldO2Nhc2UgNjpyZXR1cm5bMixLZS5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKEcsYixELEgsTil7dmFyIGcsQyxTO3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciB2LHAsdyxKLG5lLGRlLGZlLHhlLEllLEZlLE9lLGplLFdlLEtlLFllLFFlLGx0LFBlLGJlLEFlLFRlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ocWUpe3N3aXRjaChxZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB2PShOfHx7fSkuYWNjZXNzX3Rva2VuLE4/WzQsKDAsZWUuZ2V0VG9rZW5z'@;
put 'KSh0aGlzLnJlcXVlc3RDbGllbnQsTildOlszLDJdO2Nhc2UgMTp2PXFlLnNlbnQoKS5hY2Nlc3NfdG9rZW4scWUubGFiZWw9MjtjYXNlIDI6aWYoKDAsRS5pc1JlbGF0aXZlUGF0aCkoRykmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fu'@;
put 'bm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZS4iKTtyZXR1cm4gcD1HLnNwbGl0KCIvIiksdz1wLnBvcCgpLEo9cC5qb2luKCIvIiksbmU9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25j'@;
put 'YXQoSik6SixbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKG5lLHYpXTtjYXNlIDM6aWYocWUuc2VudCgpLCEoZGU9dGhpcy5mb2xkZXJNYXAuZ2V0KG5lKSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZm9sZGVyICciLmNvbmNhdChuZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhp'@;
put 'cy5zZXJ2ZXJVcmwsIicuIikpO3JldHVybiBmZT1kZT8uZmluZChmdW5jdGlvbihYZSl7cmV0dXJuIFhlLm5hbWU9PT13fSkseGU9W10sSCYmT2JqZWN0LmtleXMoSCkubGVuZ3RoP1s0LHRoaXMudXBsb2FkVGFibGVzKEgsdildOlszLDVdO2Nhc2UgNDp4ZT1xZS5zZW50KCkscWUubGFiZWw9'@;
put 'NTtjYXNlIDU6aWYoIWZlKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7cmV0dXJuIEllPW51bGw9PT0oZz1mZT8ubGlua3MuZmluZChmdW5jdGlvbihYZSl7cmV0dXJuImdldFJlc291cmNlIj09PVhlLnJlbH0pKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy5ocmVmLFs0LHRo'@;
put 'aXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoSWUpLHYpXTtjYXNlIDY6cmV0dXJuIEZlPXFlLnNlbnQoKS5yZXN1bHQsT2U9e19jb250ZXh0TmFtZTpiLF9wcm9ncmFtOiIiLmNvbmNhdChuZSwiLyIpLmNvbmNhdCh3KSxfd2ViaW5fZmlsZV9j'@;
put 'b3VudDp4ZS5sZW5ndGgsX09NSVRKU09OTElTVElORzohMCxfT01JVEpTT05MT0c6ITAsX09NSVRTRVNTSU9OUkVTVUxUUzohMCxfT01JVFRFWFRMSVNUSU5HOiEwLF9PTUlUVEVYVExPRzohMH0sRCYmKE9lLl9PTUlUVEVYVExPRz0iZmFsc2UiLE9lLl9PTUlUU0VTU0lPTlJFU1VMVFM9ImZh'@;
put 'bHNlIixPZS5fREVCVUc9MTMxKSx4ZS5mb3JFYWNoKGZ1bmN0aW9uKFhlLFVlKXtPZVsiX3dlYmluX2ZpbGV1cmkiLmNvbmNhdChVZSsxKV09Ii9maWxlcy9maWxlcy8iLmNvbmNhdChYZS5maWxlLmlkKSxPZVsiX3dlYmluX25hbWUiLmNvbmNhdChVZSsxKV09WGUudGFibGVOYW1lfSksamU9'@;
put 'e25hbWU6ImV4ZWMtIi5jb25jYXQodyksZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGpvYkRlZmluaXRpb246RmUsYXJndW1lbnRzOk9lfSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JFeGVjdXRpb24vam9icz9fYWN0aW9u'@;
put 'PXdhaXQiKSxqZSx2KV07Y2FzZSA3OnJldHVybiBXZT1xZS5zZW50KCkucmVzdWx0LFs0LHRoaXMucG9sbEpvYlN0YXRlKFdlLE4pLmNhdGNoKGZ1bmN0aW9uKFhlKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KV07Y2Fz'@;
put 'ZSA4OnJldHVybiBLZT1xZS5zZW50KCksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JFeGVjdXRpb24vam9icy8iKS5jb25jYXQoV2UuaWQpLHYpXTtjYXNlIDk6cmV0dXJuIFllPXFlLnNlbnQoKS5yZXN1bHQsUGU9WWUucmVzdWx0c1si'@;
put 'X3dlYm91dC5qc29uIl0sYmU9WWUubGlua3MuZmluZChmdW5jdGlvbihYZSl7cmV0dXJuImxvZyI9PT1YZS5yZWx9KSxQZT9bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KFBlLCIvY29udGVudCIpLHYsInRleHQvcGxhaW4iKV06WzMs'@;
put 'MTFdO2Nhc2UgMTA6UWU9cWUuc2VudCgpLHFlLmxhYmVsPTExO2Nhc2UgMTE6cmV0dXJuIEQmJmJlP1s0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoYmUuaHJlZiwiL2NvbnRlbnQiKSx2KS50aGVuKGZ1bmN0aW9uKFhlKXtyZXR1cm4g'@;
put 'WGUucmVzdWx0Lml0ZW1zLm1hcChmdW5jdGlvbihVZSl7cmV0dXJuIFVlLmxpbmV9KS5qb2luKCJcbiIpfSldOlszLDEzXTtjYXNlIDEyOmx0PXFlLnNlbnQoKSxxZS5sYWJlbD0xMztjYXNlIDEzOmlmKCJmYWlsZWQiPT09S2UpdGhyb3cgbmV3IFYuSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09'@;
put 'PShDPVllLmVycm9yKXx8dm9pZCAwPT09Qz92b2lkIDA6Qy5lcnJvckNvZGUsbnVsbD09PShTPVllLmVycm9yKXx8dm9pZCAwPT09Uz92b2lkIDA6Uy5tZXNzYWdlLGx0KTtyZXR1cm4gQWU9e3Jlc3VsdDpRZT8ucmVzdWx0LGxvZzpsdH0sKFRlPVllLmVycm9yKSYmKEFlLmVycm9yPVRlKSxb'@;
put 'MixBZV19fSl9KX0sY2UucHJvdG90eXBlLnBvcHVsYXRlRm9sZGVyTWFwPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsTixnO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD0o'@;
put 'MCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChHKTpHLHRoaXMuZm9sZGVyTWFwLmdldChEKT9bMl06WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQoIi9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK0Qp'@;
put 'LGIpLmNhdGNoKGZ1bmN0aW9uKHYpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh2LCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KV07Y2FzZSAxOmlmKCEoTj1TLnNlbnQoKS5yZXN1bHQpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhdGggIi5jb25jYXQoRCwiIGRvZXMgbm90IGV4'@;
put 'aXN0IG9uICIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCkpO3JldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoTi5pZCwiL21lbWJlcnM/bGltaXQ9IikuY29uY2F0KE4ubWVtYmVyQ291bnQ8NTAwPzUwMDpOLm1lbWJlckNvdW50KSxiKS5j'@;
put 'YXRjaChmdW5jdGlvbih2KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBtZW1iZXJzLiAiKX0pXTtjYXNlIDI6cmV0dXJuIGc9Uy5zZW50KCkucmVzdWx0LHRoaXMuZm9sZGVyTWFwLnNldChELGcuaXRlbXMpLFsyXX19KX0pfSxjZS5wcm90b3R5cGUu'@;
put 'cG9sbEpvYlN0YXRlPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgwLHEucG9sbEpvYlN0YXRlKSh0aGlzLnJlcXVlc3RDbGllbnQsRyx0aGlzLmRlYnVnLGIsRCldfSl9KX0s'@;
put 'Y2UucHJvdG90eXBlLnVwbG9hZFRhYmxlcz1mdW5jdGlvbihHLGIpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsKDAsdGUudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsRyxiKV19KX0pfSxj'@;
put 'ZS5wcm90b3R5cGUuZ2V0Rm9sZGVyRGV0YWlscz1mdW5jdGlvbihHLGIpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEg7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPSgwLEUuaXNVcmkpKEcpP0c6'@;
put 'Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iLmNvbmNhdChHKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEQpLGIpLmNhdGNoKGZ1bmN0aW9uKGcpe2lmKGcgaW5zdGFuY2VvZiBWLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cg'@;
put 'ZztyZXR1cm57cmVzdWx0Om51bGx9fSldO2Nhc2UgMTpyZXR1cm4oSD1OLnNlbnQoKS5yZXN1bHQpP1syLEhdOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRlclVyaT1mdW5jdGlvbihHLGIpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBE'@;
put 'O3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEZvbGRlckRldGFpbHMoRyxiKV07Y2FzZSAxOnJldHVybihEPUguc2VudCgpKT9bMiwiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChELmlkKV06WzIsdm9pZCAwXX19KX0p'@;
put 'fSxjZS5wcm90b3R5cGUuZ2V0UmVjeWNsZUJpblVyaT1mdW5jdGlvbihHKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50'@;
put 'LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdCgiL2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmluIiksRykuY2F0Y2goZnVuY3Rpb24oSCl7aWYoSCBpbnN0YW5jZW9mIFYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBIO3JldHVybntyZXN1bHQ6bnVsbH19KV07Y2FzZSAx'@;
put 'OnJldHVybihiPUQuc2VudCgpLnJlc3VsdCk/WzIsIi9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoYi5pZCldOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlOYW1lPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29t'@;
put 'cHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRC'@;
put 'eUlkKEcsYildO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmxpc3RGb2xkZXI9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiB2b2lkIDA9PT1EJiYoRD0yMCksTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOLGc7cmV0dXJuIGsodGhpcyxm'@;
put 'dW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybigwLEUuaXNVcmkpKEcpPyhOPUcsWzMsM10pOlszLDFdO2Nhc2UgMTpyZXR1cm5bNCx0aGlzLmdldEZvbGRlclVyaShHLGIpXTtjYXNlIDI6Tj1DLnNlbnQoKSxDLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBIPU4sWzQsdGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChILCIvbWVtYmVycz9saW1pdD0iKS5jb25jYXQoRCksYildO2Nhc2UgNDpyZXR1cm4oZz1DLnNlbnQoKS5yZXN1bHQpJiZnLml0ZW1zP1syLGcuaXRlbXMubWFwKGZ1bmN0aW9uKFMpe3JldHVybiBT'@;
put 'Lm5hbWV9KV06WzIsW11dfX0pfSl9LGNlLnByb3RvdHlwZS5tb3ZlRm9sZGVyPWZ1bmN0aW9uKEcsYixELEgpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOLGcsQyxTLHYscDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuIE49Ry5zcGxpdCgiLyIpLnBvcCgpLFs0LHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhiLEgpXTtjYXNlIDE6cmV0dXJuIHcuc2VudCgpP0Q9TjooKGc9Yi5zcGxpdCgiLyIpKS5zcGxpY2UoZy5sZW5ndGgtMSwxKSxiPWcuam9pbigiLyIpKSxbNCx0aGlzLmdldEZvbGRlclVyaShH'@;
put 'LEgpXTtjYXNlIDI6cmV0dXJuIEM9dy5zZW50KCksWzQsdGhpcy5nZXRGb2xkZXJVcmkoYixIKV07Y2FzZSAzOnJldHVybiBTPXcuc2VudCgpLEM/KHY9Qz8uc3BsaXQoIi8iKS5wb3AoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25j'@;
put 'YXQoQykse2lkOnYsbmFtZTpELHBhcmVudEZvbGRlclVyaTpTfSxIKS5jYXRjaChmdW5jdGlvbihKKXt0aHJvdyBKLmNvZGUmJiJFTk9URk9VTkQiPT09Si5jb2RlP3tib2R5OnttZXNzYWdlOiJGb2xkZXIgJyIuY29uY2F0KEcuc3BsaXQoIi8iKS5wb3AoKSwiJyB3YXMgbm90IGZvdW5kLiIp'@;
put 'fX06Sn0pXSk6WzIsdm9pZCAwXTtjYXNlIDQ6cmV0dXJuKHA9dy5zZW50KCkucmVzdWx0KT9bMixwXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxILE4s'@;
put 'ZztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRSZWN5Y2xlQmluVXJpKGIpXTtjYXNlIDE6cmV0dXJuIEQ9Uy5zZW50KCksSD1HLnNwbGl0KCIvIikucG9wKCl8fCIiLGc9KE49bmV3IERhdGUpLnRvTG9jYWxlRGF0ZVN0'@;
put 'cmluZygpKyIgIitOLnRvTG9jYWxlVGltZVN0cmluZygpLFs0LHRoaXMubW92ZUZvbGRlcihHLEQsSCsiICIrZyxiKV07Y2FzZSAyOnJldHVyblsyLFMuc2VudCgpXX19KX0pfSxjZX0oKTtPLlNBU1ZpeWFBcGlDbGllbnQ9dWV9LDU5NTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiB6PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGhlKXtmb3IodmFyIHVlLGNlPTEsRz1hcmd1bWVudHMubGVuZ3RoO2NlPEc7Y2UrKylmb3IodmFyIGIgaW4gdWU9YXJndW1lbnRzW2NlXSlPYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5LmNhbGwodWUsYikmJihoZVtiXT11ZVtiXSk7cmV0dXJuIGhlfSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaGUsdWUsY2UsRyl7cmV0dXJuIG5ldyhjZXx8KGNlPVByb21pc2UpKShmdW5jdGlvbihiLEQp'@;
put 'e2Z1bmN0aW9uIEgoQyl7dHJ5e2coRy5uZXh0KEMpKX1jYXRjaChTKXtEKFMpfX1mdW5jdGlvbiBOKEMpe3RyeXtnKEcudGhyb3coQykpfWNhdGNoKFMpe0QoUyl9fWZ1bmN0aW9uIGcoQyl7dmFyIFM7Qy5kb25lP2IoQy52YWx1ZSk6KFM9Qy52YWx1ZSxTIGluc3RhbmNlb2YgY2U/UzpuZXcg'@;
put 'Y2UoZnVuY3Rpb24odil7dihTKX0pKS50aGVuKEgsTil9ZygoRz1HLmFwcGx5KGhlLHVlfHxbXSkpLm5leHQoKSl9KX0sTD10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihoZSx1ZSl7dmFyIGNlLEcsYixELEg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmYlswXSl0aHJv'@;
put 'dyBiWzFdO3JldHVybiBiWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEQ9e25leHQ6TigwKSx0aHJvdzpOKDEpLHJldHVybjpOKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxEO2Z1bmN0aW9uIE4o'@;
put 'Zyl7cmV0dXJuIGZ1bmN0aW9uKEMpe3JldHVybiBmdW5jdGlvbihTKXtpZihjZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtIOyl0cnl7aWYoY2U9MSxHJiYoYj0yJlNbMF0/Ry5yZXR1cm46U1swXT9HLnRocm93fHwoKGI9Ry5y'@;
put 'ZXR1cm4pJiZiLmNhbGwoRyksMCk6Ry5uZXh0KSYmIShiPWIuY2FsbChHLFNbMV0pKS5kb25lKXJldHVybiBiO3N3aXRjaChHPTAsYiYmKFM9WzImU1swXSxiLnZhbHVlXSksU1swXSl7Y2FzZSAwOmNhc2UgMTpiPVM7YnJlYWs7Y2FzZSA0OnJldHVybiBILmxhYmVsKysse3ZhbHVlOlNbMV0s'@;
put 'ZG9uZTohMX07Y2FzZSA1OkgubGFiZWwrKyxHPVNbMV0sUz1bMF07Y29udGludWU7Y2FzZSA3OlM9SC5vcHMucG9wKCksSC50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoYj0oYj1ILnRyeXMpLmxlbmd0aD4wJiZiW2IubGVuZ3RoLTFdKXx8NiE9PVNbMF0mJjIhPT1TWzBdKSl7'@;
put 'SD0wO2NvbnRpbnVlfWlmKDM9PT1TWzBdJiYoIWJ8fFNbMV0+YlswXSYmU1sxXTxiWzNdKSl7SC5sYWJlbD1TWzFdO2JyZWFrfWlmKDY9PT1TWzBdJiZILmxhYmVsPGJbMV0pe0gubGFiZWw9YlsxXSxiPVM7YnJlYWt9aWYoYiYmSC5sYWJlbDxiWzJdKXtILmxhYmVsPWJbMl0sSC5vcHMucHVz'@;
put 'aChTKTticmVha31iWzJdJiZILm9wcy5wb3AoKSxILnRyeXMucG9wKCk7Y29udGludWV9Uz11ZS5jYWxsKGhlLEgpfWNhdGNoKHYpe1M9WzYsdl0sRz0wfWZpbmFsbHl7Y2U9Yj0wfWlmKDUmU1swXSl0aHJvdyBTWzFdO3JldHVybnt2YWx1ZTpTWzBdP1NbMV06dm9pZCAwLGRvbmU6ITB9fShb'@;
put 'ZyxDXSl9fX0saz10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKGhlLHVlLGNlKXtpZihjZXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBHLGI9MCxEPXVlLmxlbmd0aDtiPEQ7YisrKSFHJiZiIGluIHVlfHwoR3x8KEc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo'@;
put 'dWUsMCxiKSksR1tiXT11ZVtiXSk7cmV0dXJuIGhlLmNvbmNhdChHfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh1ZSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEU9Uig1OTI4KSxqPVIoMTIzMCksVj1SKDk4MjEpLEI9Uig4MzA2'@;
put 'KSxZPVIoMzQ2NyksWD1SKDE1MjcpLFU9UigzOTAwKSxxPVIoNDU4OCksZWU9UigzNjAyKSx0ZT1SKDgyMTcpLG9lPXtzZXJ2ZXJVcmw6IiIscGF0aFNBU0pTOiIvU0FTanNBcGkvc3RwL2V4ZWN1dGUiLHBhdGhTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyIscGF0aFNBU1ZpeWE6Ii9TQVNK'@;
put 'b2JFeGVjdXRpb24iLGFwcExvYzoiL1B1YmxpYy9zZWVkYXBwIixzZXJ2ZXJUeXBlOlUuU2VydmVyVHlwZS5TYXNWaXlhLGRlYnVnOiExLGNvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLHVzZUNvbXB1dGVBcGk6bnVsbCxsb2dpbk1lY2hhbmlzbTpqLkxv'@;
put 'Z2luTWVjaGFuaXNtLkRlZmF1bHR9LHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaGUodWUpe3ZhciBjZT10aGlzO3RoaXMuc2FzanNDb25maWc9bmV3IGouU0FTanNDb25maWcsdGhpcy5qb2JzUGF0aD0iIix0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bnVsbCx0aGlzLnNhczlBcGlDbGllbnQ9bnVs'@;
put 'bCx0aGlzLnNhc0pTQXBpQ2xpZW50PW51bGwsdGhpcy5maWxlVXBsb2FkZXI9bnVsbCx0aGlzLmF1dGhNYW5hZ2VyPW51bGwsdGhpcy5yZXF1ZXN0Q2xpZW50PW51bGwsdGhpcy53ZWJKb2JFeGVjdXRvcj1udWxsLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1udWxsLHRoaXMuY29tcHV0ZUpvYkV4'@;
put 'ZWN1dG9yPW51bGwsdGhpcy5qZXNKb2JFeGVjdXRvcj1udWxsLHRoaXMuc2FzOUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSyhjZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYixELEgsTjtyZXR1cm4gTCh0aGlz'@;
put 'LGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsbnVsbD09PShHPXRoaXMud2ViSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1HP3ZvaWQgMDpHLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oYj10aGlzLmNv'@;
put 'bXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWI/dm9pZCAwOmIucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMjpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShEPXRoaXMuamVzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1EP3ZvaWQgMDpELnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygp'@;
put 'XTtjYXNlIDM6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oSD10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PUg/dm9pZCAwOkgucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgNDpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShOPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZv'@;
put 'aWQgMD09PU4/dm9pZCAwOk4ucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgNTpyZXR1cm4gZy5zZW50KCksWzJdfX0pfSl9LHRoaXMuc2V0VmVyYm9zZU1vZGU9ZnVuY3Rpb24oRyl7dmFyIGI7bnVsbD09PShiPWNlLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1ifHxiLnNldFZlcmJv'@;
put 'c2VNb2RlKEcpfSx0aGlzLnNhc2pzQ29uZmlnPXooeih7fSxvZSksdWUpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9cmV0dXJuIGhlLnByb3RvdHlwZS5nZXRDc3JmVG9rZW49ZnVuY3Rpb24odWUpe3ZhciBjZTtyZXR1cm4gdm9pZCAwPT09dWUmJih1ZT0iZ2VuZXJhbCIpLG51bGw9PT0o'@;
put 'Y2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlLmdldENzcmZUb2tlbih1ZSl9LGhlLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKHVlKXt2YXIgY2UsRyxiPXVlLmxpbmVzT2ZDb2RlLEQ9dWUuZmlsZU5hbWUsSD11ZS5jb250ZXh0TmFtZSxOPXVl'@;
put 'LnJ1blRpbWUsZz11ZS5hdXRoQ29uZmlnLEM9dWUuYXV0aENvbmZpZ1NhczksUz11ZS5kZWJ1ZztyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKHYpe3N3aXRjaCh2LmxhYmVsKXtjYXNlIDA6aWYodGhpcy5pc01ldGhvZFN1cHBv'@;
put 'cnRlZCgiZXhlY3V0ZVNjcmlwdCIsW1UuU2VydmVyVHlwZS5TYXM5LFUuU2VydmVyVHlwZS5TYXNqcyxVLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXM5KXJldHVyblszLDJdO2lmKCFDKXRocm93IG5ldyBFcnJvcigi'@;
put 'QXV0aCBjb25maWcgZm9yIHNhczkgaXMgbm90IHByb3ZpZGVkIik7cmV0dXJuWzQsbnVsbD09PShjZT10aGlzLnNhczlBcGlDbGllbnQpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZXhlY3V0ZVNjcmlwdChiLEMudXNlck5hbWUsQy5wYXNzd29yZCldO2Nhc2UgMTpjYXNlIDM6Y2FzZSA1OnJl'@;
put 'dHVyblsyLHYuc2VudCgpXTtjYXNlIDI6cmV0dXJuIHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMyw0XTpbNCxudWxsPT09KEc9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUc/dm9pZCAwOkcuZXhlY3V0ZVNjcmlwdChiLmpvaW4oIlxu'@;
put 'IiksTixnKV07Y2FzZSA0OmlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDZdO2lmKCEoSD1IfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQu'@;
put 'IFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFEKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1'@;
put 'cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZXhlY3V0ZVNjcmlwdChELGIsSCxnLG51bGwsU3x8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZyldO2Nhc2UgNjpyZXR1cm5bMl19fSl9KX0saGUucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24odWUsY2UsRyl7dmFyIGI7cmV0dXJuIEsodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbVS5TZXJ2ZXJUeXBlLlNhc2pzXSksWzQsbnVsbD09PShiPXRoaXMuc2Fz'@;
put 'SlNBcGlDbGllbnQpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmV4ZWN1dGVKb2IodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbih1ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1'@;
put 'dGVDb250ZXh0cyh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0'@;
put 'Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0TGF1bmNoZXJDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHModWUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uu'@;
put 'c2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGll'@;
put 'bnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfSxoZS5wcm90b3R5cGUuZ2V0RXhlY3V0YWJsZUNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nh'@;
put 'c2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RXhlY3V0YWJsZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9'@;
put 'KX0saGUucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01l'@;
put 'dGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRlQ29udGV4dCh1ZSxjZSxHLGIsRCxIKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxoZS5wcm90b3R5'@;
put 'cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKHVlLGNlLEcsYil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJj'@;
put 'cmVhdGVMYXVuY2hlckNvbnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVMYXVuY2hlckNvbnRleHQodWUsY2UsRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250'@;
put 'ZXh0PWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0IixbVS5T'@;
put 'ZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KHVlLGNlLEcpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEso'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5z'@;
put 'YXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNvbXB1dGVDb250ZXh0KHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21w'@;
put 'dXRlQ29udGV4dEJ5TmFtZSh1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlJZD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5j'@;
put 'dGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5SWQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5SWQodWUsY2UpXTtj'@;
put 'YXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9uPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZVNlc3Npb24iLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVTZXNzaW9uKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRl'@;
put 'Rm9sZGVyPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD9bNCxELmNyZWF0ZUZvbGRlcih1ZSxjZSxHLGIsSCldOlszLDJd'@;
put 'O2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsTi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRm9sZGVyKHVlLGNlLEcsYixIKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBIP1s0LEguY3JlYXRlRmlsZSh1ZSxjZSxHLGIsRCldOlszLDJdO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsTi5zZW50KCldO2Nhc2UgMjpyZXR1'@;
put 'cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZSh1ZSxjZSxHLGIsRCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oRyl7c3dp'@;
put 'dGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5w'@;
put 'cm90b3R5cGUuZGVsZXRlRm9sZGVyPWZ1bmN0aW9uKHVlLGNlKXt2YXIgRztyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRl'@;
put 'bGV0ZUZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PShHPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUc/dm9pZCAwOkcuZGVsZXRlRm9sZGVyKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUubGlzdEZv'@;
put 'bGRlcj1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYjtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtVLlNl'@;
put 'cnZlclR5cGUuU2FzVml5YV0pLFs0LG51bGw9PT0oYj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmxpc3RGb2xkZXIodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLm1vdmVGb2xkZXI9ZnVuY3Rpb24odWUs'@;
put 'Y2UsRyxiKXt2YXIgRDtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5'@;
put 'YV0pLFs0LG51bGw9PT0oRD10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1EP3ZvaWQgMDpELm1vdmVGb2xkZXIodWUsY2UsRyxiKV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbih1ZSxjZSxH'@;
put 'LGIsRCxIKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtVLlNlcnZlclR5cGUuU2Fz'@;
put 'Vml5YV0pLEg/WzQsSC5jcmVhdGVKb2JEZWZpbml0aW9uKHVlLGNlLEcsYixEKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKHVlLGNlLEcsYixEKV19fSl9KX0s'@;
put 'aGUucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0'@;
put 'aENvZGUiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZSh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1cm4gSyh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEFjY2Vzc1Rva2VuIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVS5TZXJ2ZXJUeXBlLlNhc2pzXSks'@;
put 'dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4odWUsRyldO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsYi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlD'@;
put 'bGllbnQuZ2V0QWNjZXNzVG9rZW4odWUsY2UsRyldfX0pfSl9LGhlLnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nh'@;
put 'c2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgicmVmcmVzaFRva2VucyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhLFUuU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnNhc0pTQXBp'@;
put 'Q2xpZW50LnJlZnJlc2hUb2tlbnMoRyldO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsYi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2Vucyh1ZSxjZSxHKV19fSl9KX0saGUucHJvdG90eXBlLmRlbGV0ZUNsaWVudD1mdW5jdGlvbih1ZSxj'@;
put 'ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRo'@;
put 'aXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRTYXNqc0NvbmZpZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnfSxoZS5wcm90b3R5cGUuZ2V0VXNlck5hbWU9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX0saGUucHJvdG90eXBlLnNldFNBU2pzQ29uZmlnPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKGNlKXtyZXR1cm4gdGhpcy5zYXNq'@;
put 'c0NvbmZpZz16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksdWUpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCksWzJdfSl9KX0saGUucHJvdG90eXBlLnNldERlYnVnU3RhdGU9ZnVuY3Rpb24odWUpe3RoaXMuc2FzanNDb25maWcuZGVidWc9dWUsdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhp'@;
put 'cy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXVlKX0saGUucHJvdG90eXBlLmNoZWNrU2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24odWUpe3JldHVyblsyLHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tT'@;
put 'ZXNzaW9uKCldfSl9KX0saGUucHJvdG90eXBlLmxvZ0luPWZ1bmN0aW9uKHVlLGNlLEcsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPXt9KSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oRCl7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1l'@;
put 'Y2hhbmlzbT09PWouTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIXVlfHwhY2UpdGhyb3cgbmV3IEVycm9yKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBsb2dpbiBtZWNoYW5pc20uIik7cmV0dXJuWzIsdGhpcy5hdXRoTWFu'@;
put 'YWdlci5sb2dJbih1ZSxjZSldfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5yZWRpcmVj'@;
put 'dGVkTG9nSW4oYildfSl9KX0saGUucHJvdG90eXBlLmxvZ091dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ091dCgpfSxoZS5wcm90b3R5cGUudXBsb2FkRmlsZT1mdW5jdGlvbih1ZSxjZSxHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPXt9KSxLKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksYiksWzQsdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZSh1ZSx7ZmlsZXM6Y2UscGFyYW1zOkd9LGIsRCld'@;
put 'O2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSx2b2lkIDA9PT1IJiYoSD1bXSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTjtyZXR1'@;
put 'cm4gTCh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9eih6KHt9LHRoaXMuc2FzanNDb25maWcpLEcpLChOPSgwLEUudmFsaWRhdGVJbnB1dCkoY2UpKS5zdGF0dXM/Ry5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMu'@;
put 'c2FzanNKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcsYixELEgpXTpbMywxMl07Y2FzZSAxOmNhc2UgMzpjYXNlIDU6Y2FzZSA4OmNhc2UgMTA6cmV0dXJuWzIsZy5zZW50KCldO2Nhc2UgMjpyZXR1cm4gRy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fG51bGw9PUcudXNl'@;
put 'Q29tcHV0ZUFwaT9bMyw3XTpHLnVzZUNvbXB1dGVBcGk/WzQsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3IuZXhlY3V0ZSh1ZSxjZSxHLGIsRCldOlszLDRdO2Nhc2UgNDpyZXR1cm4gRy5jb250ZXh0TmFtZXx8KEc9eih6KHt9LEcpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29t'@;
put 'cHV0ZSBjb250ZXh0In0pKSxbNCx0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldO2Nhc2UgNjpyZXR1cm5bMywxMV07Y2FzZSA3OnJldHVybiBHLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmRy51c2VybmFtZSYmRy5wYXNzd29yZD9bNCx0aGlzLnNh'@;
put 'czlKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcpXTpbMyw5XTtjYXNlIDk6cmV0dXJuWzQsdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcsYixELEgpXTtjYXNlIDExOnJldHVyblszLDEzXTtjYXNlIDEyOnJldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBqLkVycm9yUmVz'@;
put 'cG9uc2UoTi5tc2cpKV07Y2FzZSAxMzpyZXR1cm5bMl19fSl9KX0saGUucHJvdG90eXBlLmRlcGxveVNlcnZpY2VQYWNrPWZ1bmN0aW9uKHVlLGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9ITEpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTjtyZXR1cm4g'@;
put 'TCh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxIPW51bGwsR3x8Y2U/KEd8fChHPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxj'@;
put 'ZXx8KGNlPXRoaXMuc2FzanNDb25maWcuYXBwTG9jKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT8oSD1uZXcgVi5TQVNWaXlhQXBpQ2xpZW50KEcsY2UsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpKS5k'@;
put 'ZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiYoSD1uZXcgQi5TQVM5QXBpQ2xpZW50KEcsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSkpOihOPW51bGwsdGhp'@;
put 'cy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Tj10aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJihOPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWco'@;
put 'KSksRz1OLnNlcnZlclVybCxjZT1OLnJvb3RGb2xkZXJOYW1lKSx1ZS5tZW1iZXJzWzBdLm1lbWJlcnMmJnVlLm1lbWJlcnNbMF0ubWVtYmVycy5zb3J0KGZ1bmN0aW9uKFMpe3JldHVybiJmb2xkZXIiPT09Uy50eXBlPy0xOjF9KSxbNCx0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhj'@;
put 'ZSx1ZS5tZW1iZXJzLGIsSCxEKV07Y2FzZSAxOnJldHVybiBDLnNlbnQoKSxbMl19fSl9KX0saGUucHJvdG90eXBlLnN0YXJ0Q29tcHV0ZUpvYj1mdW5jdGlvbih1ZSxjZSxHLGIsRCxILE4sZyxDKXt2YXIgUyx2LHAsdztyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLHZvaWQgMD09PU4mJihO'@;
put 'PSExKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24oSil7aWYoRz16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksRyksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhRy5j'@;
put 'b250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO3JldHVybiBDPyhudWxsPT09KFM9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAw'@;
put 'PT09U3x8Uy5zZXRWZXJib3NlTW9kZShDKSxudWxsPT09KHY9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09dnx8di5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PUMmJihudWxsPT09KHA9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cHx8cC5kaXNhYmxlVmVyYm9zZU1vZGUo'@;
put 'KSksWzIsbnVsbD09PSh3PXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PXc/dm9pZCAwOncuZXhlY3V0ZUNvbXB1dGVKb2IodWUsRy5jb250ZXh0TmFtZSxHLmRlYnVnLGNlLGIsISFELCExLEgsTixnKV19KX0pfSxoZS5wcm90b3R5cGUuZmV0Y2hMb2dGaWxlQ29udGVudD1mdW5j'@;
put 'dGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodWUsY2UpLnRoZW4oZnVuY3Rpb24oYil7aWYoIWIpcmV0'@;
put 'dXJuIFByb21pc2UucmVqZWN0KG5ldyBqLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShiLnJlc3VsdCl9Y2F0Y2goRCl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5l'@;
put 'dyBqLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gVGhlIHJlc3VsdCBpcyBub3QgdmFsaWQuIixEKSl9fSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldFNhc1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGsoW10sdGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCksITApLnNvcnQoRS5jb21wYXJlVGltZXN0YW1wcyl9LGhlLnByb3RvdHlwZS5jbGVhclNhc1JlcXVlc3RzPWZ1bmN0aW9uKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMoKX0saGUucHJvdG90eXBlLnNldHVwQ29uZmlndXJh'@;
put 'dGlvbj1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsfHwiIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKWlmKHR5cGVvZiBsb2NhdGlvbjwidSIpe3ZhciB1ZT0iIi5jb25jYXQobG9jYXRpb24ucHJvdG9jb2wsIi8vIikuY29uY2F0KGxvY2F0'@;
put 'aW9uLmhvc3RuYW1lKTtsb2NhdGlvbi5wb3J0JiYodWU9IiIuY29uY2F0KHVlLCI6IikuY29uY2F0KGxvY2F0aW9uLnBvcnQpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD11ZX1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlz'@;
put 'LnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKTp0aGlzLnJlcXVlc3RDbGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNqcz9lZS5TYXNqc1JlcXVlc3RDbGllbnQ6cS5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZl'@;
put 'clVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1Zp'@;
put 'eWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IFguQXV0aE1hbmFn'@;
put 'ZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNh'@;
put 'c1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2'@;
put 'ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNl'@;
put 'cnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IEIuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpv'@;
put 'YnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgWS5TQVNqc0FwaUNsaWVudCh0aGlzLnJl'@;
put 'cXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IHRlLkZpbGVVcGxvYWRlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMud2ViSm9iRXhlY3V0b3I9bmV3'@;
put 'IHRlLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1uZXcgdGUuU2FzanNK'@;
put 'b2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IHRlLlNhczlKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZl'@;
put 'clR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bmV3IHRlLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc1ZpeWFB'@;
put 'cGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9bmV3IHRlLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9LGhlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXM9ZnVuY3Rpb24odWUsY2UsRyxiLEQpe3Jl'@;
put 'dHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLEUuYXN5bmNGb3JFYWNoKShjZSxmdW5jdGlvbihnKXtyZXR1cm4gSyhILHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6c3dpdGNoKGcudHlwZSl7Y2FzZSJmb2xkZXIiOnJldHVyblszLDFdO2Nhc2UiZmlsZSI6cmV0dXJuWzMsM107Y2FzZSJzZXJ2aWNlIjpyZXR1cm5bMyw1XX1yZXR1cm5bMyw3XTtjYXNl'@;
put 'IDE6cmV0dXJuWzQsdGhpcy5jcmVhdGVGb2xkZXIoZy5uYW1lLHVlLHZvaWQgMCxHLGIsRCldO2Nhc2UgMjpyZXR1cm4gQy5zZW50KCksWzMsOF07Y2FzZSAzOnJldHVybls0LHRoaXMuY3JlYXRlRmlsZShnLm5hbWUsZy5jb2RlLHVlLHZvaWQgMCxHLGIpXTtjYXNlIDQ6cmV0dXJuIEMuc2Vu'@;
put 'dCgpLFszLDhdO2Nhc2UgNTpyZXR1cm5bNCx0aGlzLmNyZWF0ZUpvYkRlZmluaXRpb24oZy5uYW1lLGcuY29kZSx1ZSx2b2lkIDAsRyxiKV07Y2FzZSA2OnJldHVybiBDLnNlbnQoKSxbMyw4XTtjYXNlIDc6dGhyb3cgbmV3IEVycm9yKCJVbmlkZW50aWZpZWQgbWVtYmVyICciLmNvbmNhdChn'@;
put 'Lm5hbWUsIicgcHJvdmlkZWQuIikpO2Nhc2UgODpyZXR1cm4iZm9sZGVyIj09PWcudHlwZSYmZy5tZW1iZXJzJiZnLm1lbWJlcnMubGVuZ3RoP1s0LHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKCIiLmNvbmNhdCh1ZSwiLyIpLmNvbmNhdChnLm5hbWUpLGcubWVtYmVycyxHLGIsRCld'@;
put 'OlszLDEwXTtjYXNlIDk6Qy5zZW50KCksQy5sYWJlbD0xMDtjYXNlIDEwOnJldHVyblsyXX19KX0pfSldO2Nhc2UgMTpyZXR1cm4gTi5zZW50KCksWzJdfX0pfSl9LGhlLnByb3RvdHlwZS5pc01ldGhvZFN1cHBvcnRlZD1mdW5jdGlvbih1ZSxjZSl7aWYoIXRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVHlwZXx8IWNlLmluY2x1ZGVzKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJyIuY29uY2F0KHVlLCInIGlzIG9ubHkgc3VwcG9ydGVkIG9uICIpLmNvbmNhdChjZS5qb2luKCIsICIpLCIgc2VydmVycy4iKSl9LGhlLnByb3RvdHlwZS5l'@;
put 'bmFibGVWZXJib3NlTW9kZT1mdW5jdGlvbih1ZSxjZSl7dmFyIEc7bnVsbD09PShHPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PUd8fEcuZW5hYmxlVmVyYm9zZU1vZGUodWUsY2UpfSxoZS5wcm90b3R5cGUuZGlzYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKCl7dmFyIHVlO251bGw9'@;
put 'PT0odWU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09dWV8fHVlLmRpc2FibGVWZXJib3NlTW9kZSgpfSxoZX0oKTtPLmRlZmF1bHQ9c2V9LDM0Njc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiB6'@;
put 'PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKFUpe2Zvcih2YXIgcSxlZT0xLHRlPWFyZ3VtZW50cy5sZW5ndGg7ZWU8dGU7ZWUrKylmb3IodmFyIG9lIGluIHE9YXJndW1lbnRzW2VlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxvZSkmJihVW29lXT1xW29lXSk7cmV0'@;
put 'dXJuIFV9LHouYXBwbHkodGhpcyxhcmd1bWVudHMpfSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihVLHEsZWUsdGUpe3JldHVybiBuZXcoZWV8fChlZT1Qcm9taXNlKSkoZnVuY3Rpb24ob2Usc2Upe2Z1bmN0aW9uIGhlKEcpe3RyeXtjZSh0ZS5uZXh0KEcpKX1jYXRjaChiKXtz'@;
put 'ZShiKX19ZnVuY3Rpb24gdWUoRyl7dHJ5e2NlKHRlLnRocm93KEcpKX1jYXRjaChiKXtzZShiKX19ZnVuY3Rpb24gY2UoRyl7dmFyIGI7Ry5kb25lP29lKEcudmFsdWUpOihiPUcudmFsdWUsYiBpbnN0YW5jZW9mIGVlP2I6bmV3IGVlKGZ1bmN0aW9uKEQpe0QoYil9KSkudGhlbihoZSx1ZSl9'@;
put 'Y2UoKHRlPXRlLmFwcGx5KFUscXx8W10pKS5uZXh0KCkpfSl9LEw9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVSxxKXt2YXIgZWUsdGUsb2Usc2UsaGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJuIG9lWzFdfSx0cnlzOltd'@;
put 'LG9wczpbXX07cmV0dXJuIHNlPXtuZXh0OnVlKDApLHRocm93OnVlKDEpLHJldHVybjp1ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHNlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHNlO2Z1bmN0aW9uIHVlKGNlKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'Ryl7cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKGVlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2hlOyl0cnl7aWYoZWU9MSx0ZSYmKG9lPTImYlswXT90ZS5yZXR1cm46YlswXT90ZS50aHJvd3x8KChvZT10ZS5yZXR1cm4pJiZvZS5j'@;
put 'YWxsKHRlKSwwKTp0ZS5uZXh0KSYmIShvZT1vZS5jYWxsKHRlLGJbMV0pKS5kb25lKXJldHVybiBvZTtzd2l0Y2godGU9MCxvZSYmKGI9WzImYlswXSxvZS52YWx1ZV0pLGJbMF0pe2Nhc2UgMDpjYXNlIDE6b2U9YjticmVhaztjYXNlIDQ6cmV0dXJuIGhlLmxhYmVsKysse3ZhbHVlOmJbMV0s'@;
put 'ZG9uZTohMX07Y2FzZSA1OmhlLmxhYmVsKyssdGU9YlsxXSxiPVswXTtjb250aW51ZTtjYXNlIDc6Yj1oZS5vcHMucG9wKCksaGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKG9lPShvZT1oZS50cnlzKS5sZW5ndGg+MCYmb2Vbb2UubGVuZ3RoLTFdKXx8NiE9PWJbMF0mJjIh'@;
put 'PT1iWzBdKSl7aGU9MDtjb250aW51ZX1pZigzPT09YlswXSYmKCFvZXx8YlsxXT5vZVswXSYmYlsxXTxvZVszXSkpe2hlLmxhYmVsPWJbMV07YnJlYWt9aWYoNj09PWJbMF0mJmhlLmxhYmVsPG9lWzFdKXtoZS5sYWJlbD1vZVsxXSxvZT1iO2JyZWFrfWlmKG9lJiZoZS5sYWJlbDxvZVsyXSl7'@;
put 'aGUubGFiZWw9b2VbMl0saGUub3BzLnB1c2goYik7YnJlYWt9b2VbMl0mJmhlLm9wcy5wb3AoKSxoZS50cnlzLnBvcCgpO2NvbnRpbnVlfWI9cS5jYWxsKFUsaGUpfWNhdGNoKEQpe2I9WzYsRF0sdGU9MH1maW5hbGx5e2VlPW9lPTB9aWYoNSZiWzBdKXRocm93IGJbMV07cmV0dXJue3ZhbHVl'@;
put 'OmJbMF0/YlsxXTp2b2lkIDAsZG9uZTohMH19KFtjZSxHXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTanNBcGlDbGllbnQ9dm9pZCAwO3ZhciBrPVIoNjIzMCksRT1SKDM5MDApLGo9Uig5Nzc4KSxWPVIoNTcpLEI9UigyNDkpLFk9'@;
put 'Uig3MDQpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBVKHEpe3RoaXMucmVxdWVzdENsaWVudD1xfXJldHVybiBVLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3Q9ZnVuY3Rpb24ocSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxm'@;
put 'dW5jdGlvbihlZSl7c3dpdGNoKGVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE/WzQsKDAsWS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxxLEUuU2VydmVyVHlwZS5TYXNqcyldOlszLDJdO2Nhc2UgMTpyZXR1cm5bMixlZS5zZW50KCkuYWNjZXNzX3Rva2VuXTtjYXNlIDI6cmV0dXJu'@;
put 'WzJdfX0pfSl9LFUucHJvdG90eXBlLmRlcGxveT1mdW5jdGlvbihxLGVlLHRlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2U7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRB'@;
put 'Y2Nlc3NUb2tlbkZvclJlcXVlc3QodGUpXTtjYXNlIDE6cmV0dXJuIG9lPWhlLnNlbnQoKSxxLmFwcExvYz1xLmFwcExvY3x8ZWUsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIscSxvZSx2b2lkIDAse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1h'@;
put 'eEJvZHlMZW5ndGg6MS8wfSldO2Nhc2UgMjpyZXR1cm4gc2U9aGUuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJlc29sdmUoc2UpXX19KX0pfSxVLnByb3RvdHlwZS5kZXBsb3laaXBGaWxlPWZ1bmN0aW9uKHEsZWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh'@;
put 'ciB0ZSxvZSxzZSxoZSx1ZSxjZTtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRlPVIoMjk3NSkuY3JlYXRlUmVhZFN0cmVhbSxbNCx0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChlZSldO2Nhc2UgMTpyZXR1cm4gb2U9Ry5zZW50'@;
put 'KCksWzQsdGUocSldO2Nhc2UgMjpyZXR1cm4gc2U9Ry5zZW50KCksKGhlPW5ldyBrKS5hcHBlbmQoImZpbGUiLHNlKSx1ZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoaGUuZ2V0Qm91bmRhcnkoKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBp'@;
put 'L2RyaXZlL2RlcGxveS91cGxvYWQiLGhlLG9lLHVlLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pXTtjYXNlIDM6cmV0dXJuIGNlPUcuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJlc29sdmUoY2UpXX19KX0pfSxVLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1'@;
put 'bmN0aW9uKHEsZWUsdGUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZSxoZTtyZXR1cm4gTCh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gb2U9dGU/dGUuYWNjZXNzX3Rva2VuOnZvaWQgMCxzZT1xLl9wcm9n'@;
put 'cmFtLnN0YXJ0c1dpdGgoIi8iKT9xLl9wcm9ncmFtOiIiLmNvbmNhdChlZSwiLyIpLmNvbmNhdChxLl9wcm9ncmFtKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLHooeih7X2RlYnVnOjEzMX0scSkse19wcm9ncmFtOnNlfSksb2UpXTtjYXNlIDE6'@;
put 'cmV0dXJuWzIse3Jlc3VsdDooaGU9dWUuc2VudCgpKS5yZXN1bHQsbG9nOmhlLmxvZ31dfX0pfSl9LFUucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24ocSxlZSx0ZSl7cmV0dXJuIHZvaWQgMD09PWVlJiYoZWU9InNhcyIpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'dmFyIG9lLHNlO3JldHVybiBMKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KHRlKV07Y2FzZSAxOnJldHVybiBvZT1oZS5zZW50KCksc2U9e2xvZzoiIn0sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50'@;
put 'LnBvc3QoIlNBU2pzQXBpL2NvZGUvZXhlY3V0ZSIse2NvZGU6cSxydW5UaW1lOmVlfSxvZSkudGhlbihmdW5jdGlvbih1ZSl7dmFyIEc9dWUucHJpbnRPdXRwdXQsYj11ZS5yZXN1bHQ7c2UubG9nPXVlLmxvZyxHJiYoc2UucHJpbnRPdXRwdXQ9RyksYiYmKHNlLndlYm91dD1iKX0pLmNhdGNo'@;
put 'KGZ1bmN0aW9uKHVlKXt0aHJvdygwLGoucHJlZml4TWVzc2FnZSkodWUsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KV07Y2FzZSAyOnJldHVybiBoZS5zZW50KCksWzIsc2VdfX0pfSl9LFUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1'@;
put 'bmN0aW9uKHEsZWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBMKHRoaXMsZnVuY3Rpb24odGUpe3JldHVyblsyLCgwLFYuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsZWUpXX0pfSl9LFUucHJvdG90eXBlLnJlZnJl'@;
put 'c2hUb2tlbnM9ZnVuY3Rpb24ocSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihlZSl7cmV0dXJuWzIsKDAsQi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxxKV19KX0pfSxVfSgpO08uU0FTanNB'@;
put 'cGlDbGllbnQ9WH0sNjkwMzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEw9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFgsVSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24g'@;
put 'c2UoY2Upe3RyeXt1ZShlZS5uZXh0KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIGhlKGNlKXt0cnl7dWUoZWUudGhyb3coY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gdWUoY2Upe3ZhciBHO2NlLmRvbmU/dGUoY2UudmFsdWUpOihHPWNlLnZhbHVlLEcgaW5zdGFuY2VvZiBx'@;
put 'P0c6bmV3IHEoZnVuY3Rpb24oYil7YihHKX0pKS50aGVuKHNlLGhlKX11ZSgoZWU9ZWUuYXBwbHkoWCxVfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihYLFUpe3ZhciBxLGVlLHRlLG9lLHNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigx'@;
put 'JnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvZT17bmV4dDpoZSgwKSx0aHJvdzpoZSgxKSxyZXR1cm46aGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihvZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXN9KSxvZTtmdW5jdGlvbiBoZSh1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYocSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtzZTspdHJ5e2lmKHE9MSxlZSYmKHRlPTImR1swXT9lZS5yZXR1'@;
put 'cm46R1swXT9lZS50aHJvd3x8KCh0ZT1lZS5yZXR1cm4pJiZ0ZS5jYWxsKGVlKSwwKTplZS5uZXh0KSYmISh0ZT10ZS5jYWxsKGVlLEdbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2goZWU9MCx0ZSYmKEc9WzImR1swXSx0ZS52YWx1ZV0pLEdbMF0pe2Nhc2UgMDpjYXNlIDE6dGU9RzticmVh'@;
put 'aztjYXNlIDQ6cmV0dXJuIHNlLmxhYmVsKysse3ZhbHVlOkdbMV0sZG9uZTohMX07Y2FzZSA1OnNlLmxhYmVsKyssZWU9R1sxXSxHPVswXTtjb250aW51ZTtjYXNlIDc6Rz1zZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1zZS50cnlzKS5s'@;
put 'ZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PUdbMF0mJjIhPT1HWzBdKSl7c2U9MDtjb250aW51ZX1pZigzPT09R1swXSYmKCF0ZXx8R1sxXT50ZVswXSYmR1sxXTx0ZVszXSkpe3NlLmxhYmVsPUdbMV07YnJlYWt9aWYoNj09PUdbMF0mJnNlLmxhYmVsPHRlWzFdKXtzZS5sYWJlbD10'@;
put 'ZVsxXSx0ZT1HO2JyZWFrfWlmKHRlJiZzZS5sYWJlbDx0ZVsyXSl7c2UubGFiZWw9dGVbMl0sc2Uub3BzLnB1c2goRyk7YnJlYWt9dGVbMl0mJnNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlfUc9VS5jYWxsKFgsc2UpfWNhdGNoKGIpe0c9WzYsYl0sZWU9MH1maW5hbGx5e3E9'@;
put 'dGU9MH1pZig1JkdbMF0pdGhyb3cgR1sxXTtyZXR1cm57dmFsdWU6R1swXT9HWzFdOnZvaWQgMCxkb25lOiEwfX0oW3VlLGNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2Vzc2lvbk1hbmFnZXI9dm9pZCAwO3ZhciBFPVIoMTIzMCks'@;
put 'aj1SKDEzOTUpLFY9Uig1OTI4KSxCPVIoOTc3OCksWT1mdW5jdGlvbigpe2Z1bmN0aW9uIFgoVSxxLGVlKXt0aGlzLnNlcnZlclVybD1VLHRoaXMuY29udGV4dE5hbWU9cSx0aGlzLnJlcXVlc3RDbGllbnQ9ZWUsdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJy'@;
put 'b3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlPXtwcmludGVkOiExLHN0'@;
put 'YXRlOkUuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LFUmJigwLFYuaXNVcmwpKFUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsImRlYnVnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnfSxzZXQ6ZnVuY3Rpb24oVSl7dGhpcy5fZGVidWc9VX0sZW51'@;
put 'bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxYLnByb3RvdHlwZS5pc1Nlc3Npb25WYWxpZD1mdW5jdGlvbihVKXtpZighVSlyZXR1cm4hMTt2YXIgcT0oKG5ldyBEYXRlKS5nZXRUaW1lKCktbmV3IERhdGUoVS5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISgh'@;
put 'VS5hdHRyaWJ1dGVzfHxxPj1VLmF0dHJpYnV0ZXMuc2Vzc2lvbkluYWN0aXZlVGltZW91dCl9LFgucHJvdG90eXBlLnJlbW92ZVNlc3Npb25Gcm9tUG9vbD1mdW5jdGlvbihVKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLmlkIT09VS5p'@;
put 'ZH0pfSxYLnByb3RvdHlwZS5yZW1vdmVFeHBpcmVkU2Vzc2lvbnM9ZnVuY3Rpb24oKXt2YXIgVT10aGlzO3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIFUuaXNTZXNzaW9uVmFsaWQocSl9KX0sWC5wcm90b3R5cGUudGhyb3dFcnJvcnM9ZnVu'@;
put 'Y3Rpb24oVSxxKXt0aHJvdyBxPygwLEIucHJlZml4TWVzc2FnZSkobmV3IEVycm9yKFUuam9pbigiLiAiKSkscSk6bmV3IEVycm9yKFUubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUubWVzc2FnZT9lZS5tZXNzYWdlOmVlfSkuam9pbigiLiAiKSl9LFgucHJvdG90eXBlLmdldFNlc3Npb249'@;
put 'ZnVuY3Rpb24oVSl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2U9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT1bXSxlZT0hMSx0ZT1mdW5jdGlvbigpe3EubGVuZ3Ro'@;
put 'JiYhZWUmJihlZT0hMCxzZS50aHJvd0Vycm9ycyhxKSl9LHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGg/KHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKG9lPXRoaXMuc2Vzc2lvbnNbMF0pLHRoaXMuY3JlYXRlU2Vzc2lvbnMoVSkuY2F0Y2goZnVu'@;
put 'Y3Rpb24odWUpe3EucHVzaCh1ZSl9KSx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2godWUpfSksdGUoKSxbMixvZV0pOlszLDFdO2Nhc2UgMTpyZXR1cm4gdGhpcy5jcmVhdGVTZXNzaW9ucyhVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5w'@;
put 'dXNoKHVlKX0pLFs0LHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oVSkuY2F0Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KV07Y2FzZSAyOnJldHVybiBoZS5zZW50KCksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSxvZT10aGlzLnNlc3Npb25zLnBvcCgpLHRoaXMucmVtb3Zl'@;
put 'U2Vzc2lvbkZyb21Qb29sKG9lKSx0ZSgpLFsyLG9lXX19KX0pfSxYLnByb3RvdHlwZS5nZXRFcnJvck1lc3NhZ2U9ZnVuY3Rpb24oVSxxLGVlKXtyZXR1cm4iIi5jb25jYXQoZWUsIiByZXF1ZXN0IHRvICIpLmNvbmNhdChxLCIgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIikuY29uY2F0KFUu'@;
put 'cmVzcG9uc2Uuc3RhdHVzfHwidW5rbm93biIsIi4gIikrVS5yZXNwb25zZS5kYXRhLm1lc3NhZ2V8fCIifSxYLnByb3RvdHlwZS5jbGVhclNlc3Npb249ZnVuY3Rpb24oVSxxKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGU9dGhpcztyZXR1cm4gayh0'@;
put 'aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZWU9Ii9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KFUpLFs0LHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoZWUscSkudGhlbihmdW5jdGlvbigpe3RlLnNlc3Npb25zPXRlLnNlc3Npb25zLmZpbHRlcihm'@;
put 'dW5jdGlvbihzZSl7cmV0dXJuIHNlLmlkIT09VX0pfSkuY2F0Y2goZnVuY3Rpb24oc2Upe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKSh0ZS5nZXRFcnJvck1lc3NhZ2Uoc2UsZWUsIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIs'@;
put 'b2Uuc2VudCgpXX19KX0pfSxYLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9ucz1mdW5jdGlvbihVKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odGUpe3N3aXRjaCh0ZS5sYWJlbCl7Y2FzZSAwOnJldHVy'@;
put 'biBxPVtdLHRoaXMuc2Vzc2lvbnMubGVuZ3RoP1szLDJdOls0LCgwLFYuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksZnVuY3Rpb24oKXtyZXR1cm4gTChlZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuWzQsdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihVKS5jYXRjaChmdW5jdGlvbihzZSl7cS5wdXNoKHNlKX0pXTtjYXNlIDE6cmV0dXJuIG9lLnNlbnQoKSxbMl19fSl9KX0pXTtjYXNlIDE6dGUuc2VudCgpLHRlLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBxLmxlbmd0aCYm'@;
put 'dGhpcy50aHJvd0Vycm9ycyhxLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKSxbMl19fSl9KX0sWC5wcm90b3R5cGUud2FpdEZvckN1cnJlbnRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcztyZXR1cm4g'@;
put 'ayh0aGlzLGZ1bmN0aW9uKHEpe3JldHVyblsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGVlKXt2YXIgdGU9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtVLmN1cnJlbnRDb250ZXh0JiYoVS5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKHRlKSxlZSgpKX0sMTAwKX0pXX0pfSl9LFgucHJv'@;
put 'dG90eXBlLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uPWZ1bmN0aW9uKFUpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlLGhlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih1ZSl7c3dpdGNoKHVlLmxhYmVsKXtjYXNlIDA6cmV0dXJu'@;
put 'IHRoaXMuY3VycmVudENvbnRleHQ/WzMsNF06dGhpcy5zZXR0aW5nQ29udGV4dD9bMywyXTpbNCx0aGlzLnNldEN1cnJlbnRDb250ZXh0KFUpXTtjYXNlIDE6cmV0dXJuIHVlLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJuWzQsdGhpcy53YWl0Rm9yQ3VycmVudENvbnRleHQoKV07Y2FzZSAz'@;
put 'OnVlLnNlbnQoKSx1ZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gcT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdCh0aGlzLmN1cnJlbnRDb250ZXh0LmlkLCIvc2Vzc2lvbnMiKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdChxLHt9LFUpLmNh'@;
put 'dGNoKGZ1bmN0aW9uKGNlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoaGUuZ2V0RXJyb3JNZXNzYWdlKGNlLHEsIlBPU1QiKSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSA1OmlmKGVlPXVlLnNlbnQoKSwodGU9ZWUucmVzdWx0KS5ldGFnPW9lPWVlLmV0YWcs'@;
put 'IShzZT10ZS5saW5rcy5maW5kKGZ1bmN0aW9uKGNlKXtyZXR1cm4ic3RhdGUiPT09Y2UucmVsfSkpKXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO3JldHVybiB0ZS5zdGF0ZVVybD1zZS5ocmVmLFs0LHRoaXMud2FpdEZvclNlc3Npb24odGUsb2UsVSldO2Nhc2UgNjpyZXR1cm4g'@;
put 'dWUuc2VudCgpLHRoaXMuc2Vzc2lvbnMucHVzaCh0ZSksWzIsdGVdfX0pfSl9LFgucHJvdG90eXBlLnNldEN1cnJlbnRDb250ZXh0PWZ1bmN0aW9uKFUpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLG9lLHNlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5j'@;
put 'dGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuY3VycmVudENvbnRleHQ/WzMsMl06KHE9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIpLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITAsWzQsdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LmdldChxLFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoc2UuZ2V0RXJyb3JNZXNzYWdlKHVlLHEsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29udGV4dHMuICIpfSldKTtjYXNlIDE6aWYoZWU9aGUuc2VudCgpLnJlc3Vs'@;
put 'dCwhKG9lPShlZSYmZWUuaXRlbXMmJmVlLml0ZW1zLmxlbmd0aD9lZS5pdGVtczpbXSkuZmluZChmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLm5hbWU9PT1zZS5jb250ZXh0TmFtZX0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdCh0aGlzLmNvbnRleHROYW1lLCInIHdh'@;
put 'cyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAiKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi4iKSk7dGhpcy5jdXJyZW50Q29udGV4dD1vZSxQcm9taXNlLnJlc29sdmUoKSxoZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0sWC5wcm90b3R5cGUud2FpdEZvclNlc3Npb249ZnVuY3Rp'@;
put 'b24oVSxxLGVlKXt2YXIgdGU7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlLGhlLHVlLGNlLGIsRDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIHNlPVUuc3RhdGVVcmwsaGU9ei5sb2dnZXJ8fEss'@;
put 'KG9lPVUuc3RhdGUpIT09RS5TZXNzaW9uU3RhdGUuUGVuZGluZyYmb2UhPT1FLlNlc3Npb25TdGF0ZS5SdW5uaW5nJiZvZSE9PUUuU2Vzc2lvblN0YXRlLk5vU3RhdGU/WzMsNl06c2U/KHRoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKGhlLmluZm8oIlBv'@;
put 'bGxpbmc6ICIuY29uY2F0KHRoaXMuc2VydmVyVXJsK3NlKSksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITApLHVlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KHNlLCI/d2FpdD0zMCIpLFs0LHRoaXMuZ2V0U2Vzc2lvblN0YXRlKHVlLHEsZWUpLmNhdGNoKGZ1'@;
put 'bmN0aW9uKE4pe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShOLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pXSk6WzMsNF07Y2FzZSAxOnJldHVybiBjZT1ILnNlbnQoKSxiPWNlLnJlc3BvbnNlU3RhdHVzLG9lPWNlLnJlc3VsdC50cmltKCksdGhpcy5kZWJ1ZyYmdGhp'@;
put 'cy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09b2UmJihoZS5pbmZvKCJDdXJyZW50IHNlc3Npb24gc3RhdGUgaXMgJyIuY29uY2F0KG9lLCInIikpLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZT1vZSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksb2U/WzMs'@;
put 'M106KEQ9bmV3IGouTm9TZXNzaW9uU3RhdGVFcnJvcihiLHRoaXMuc2VydmVyVXJsK3NlLG51bGw9PT0odGU9VS5saW5rcy5maW5kKGZ1bmN0aW9uKE4pe3JldHVybiJsb2ciPT09Ti5yZWx9KSl8fHZvaWQgMD09PXRlP3ZvaWQgMDp0ZS5ocmVmKSx0aGlzLmxvZ2dlZEVycm9ycy5maW5kKGZ1'@;
put 'bmN0aW9uKE4pe3JldHVybiBOLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09RC5zZXJ2ZXJSZXNwb25zZVN0YXR1c30pfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChEKSxoZS5pbmZvKEQubWVzc2FnZSkpLFs0LHRoaXMud2FpdEZvclNlc3Npb24oVSxxLGVlKV0pO2Nhc2UgMjpyZXR1cm5bMixI'@;
put 'LnNlbnQoKV07Y2FzZSAzOmNhc2UgNjpyZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWzIsb2VdO2Nhc2UgNDp0aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcjtjYXNlIDU6cmV0dXJuWzMsN107Y2FzZSA3OnJldHVyblsyXX19KX0pfSxYLnByb3RvdHlwZS5nZXRTZXNzaW9uU3Rh'@;
put 'dGU9ZnVuY3Rpb24oVSxxLGVlKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFUsZWUsInRleHQv'@;
put 'cGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6cX0pLnRoZW4oZnVuY3Rpb24oc2Upe3JldHVybntyZXN1bHQ6c2UucmVzdWx0LHJlc3BvbnNlU3RhdHVzOnNlLnN0YXR1c319KS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSxV'@;
put 'LCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsb2Uuc2VudCgpXX19KX0pfSxYLnByb3RvdHlwZS5nZXRWYXJpYWJsZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh'@;
put 'ciB0ZSxvZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0ZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL3Nlc3Npb25zLyIpLmNvbmNhdChVLCIvdmFyaWFibGVzLyIpLmNvbmNhdChxKSxbNCx0aGlzLnJl'@;
put 'cXVlc3RDbGllbnQuZ2V0KHRlLGVlKS5jYXRjaChmdW5jdGlvbihoZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKG9lLmdldEVycm9yTWVzc2FnZShoZSx0ZSwiR0VUIiksIkVycm9yIHdoaWxlIGZldGNoaW5nIHNlc3Npb24gdmFyaWFibGUgJyIuY29uY2F0KHEsIicuICIpKX0pXTtjYXNl'@;
put 'IDE6cmV0dXJuWzIsc2Uuc2VudCgpXX19KX0pfSxYfSgpO08uU2Vzc2lvbk1hbmFnZXI9WX0sMTYyMjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEw9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gTD1PYmplY3QuYXNz'@;
put 'aWdufHxmdW5jdGlvbih0ZSl7Zm9yKHZhciBvZSxzZT0xLGhlPWFyZ3VtZW50cy5sZW5ndGg7c2U8aGU7c2UrKylmb3IodmFyIHVlIGluIG9lPWFyZ3VtZW50c1tzZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9lLHVlKSYmKHRlW3VlXT1vZVt1ZV0pO3JldHVybiB0'@;
put 'ZX0sTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHRlLG9lLHNlLGhlKXtyZXR1cm4gbmV3KHNlfHwoc2U9UHJvbWlzZSkpKGZ1bmN0aW9uKHVlLGNlKXtmdW5jdGlvbiBHKEgpe3RyeXtEKGhlLm5leHQoSCkpfWNhdGNoKE4pe2NlKE4p'@;
put 'fX1mdW5jdGlvbiBiKEgpe3RyeXtEKGhlLnRocm93KEgpKX1jYXRjaChOKXtjZShOKX19ZnVuY3Rpb24gRChIKXt2YXIgTjtILmRvbmU/dWUoSC52YWx1ZSk6KE49SC52YWx1ZSxOIGluc3RhbmNlb2Ygc2U/TjpuZXcgc2UoZnVuY3Rpb24oZyl7ZyhOKX0pKS50aGVuKEcsYil9RCgoaGU9aGUu'@;
put 'YXBwbHkodGUsb2V8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKHRlLG9lKXt2YXIgc2UsaGUsdWUsY2UsRz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm4gdWVbMV19LHRyeXM6W10sb3BzOltd'@;
put 'fTtyZXR1cm4gY2U9e25leHQ6YigwKSx0aHJvdzpiKDEpLHJldHVybjpiKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoY2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksY2U7ZnVuY3Rpb24gYihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKE4pe2lmKHNlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0c7KXRyeXtpZihzZT0xLGhlJiYodWU9MiZOWzBdP2hlLnJldHVybjpOWzBdP2hlLnRocm93fHwoKHVlPWhlLnJldHVybikmJnVlLmNhbGwoaGUpLDApOmhl'@;
put 'Lm5leHQpJiYhKHVlPXVlLmNhbGwoaGUsTlsxXSkpLmRvbmUpcmV0dXJuIHVlO3N3aXRjaChoZT0wLHVlJiYoTj1bMiZOWzBdLHVlLnZhbHVlXSksTlswXSl7Y2FzZSAwOmNhc2UgMTp1ZT1OO2JyZWFrO2Nhc2UgNDpyZXR1cm4gRy5sYWJlbCsrLHt2YWx1ZTpOWzFdLGRvbmU6ITF9O2Nhc2Ug'@;
put 'NTpHLmxhYmVsKyssaGU9TlsxXSxOPVswXTtjb250aW51ZTtjYXNlIDc6Tj1HLm9wcy5wb3AoKSxHLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh1ZT0odWU9Ry50cnlzKS5sZW5ndGg+MCYmdWVbdWUubGVuZ3RoLTFdKXx8NiE9PU5bMF0mJjIhPT1OWzBdKSl7Rz0wO2NvbnRp'@;
put 'bnVlfWlmKDM9PT1OWzBdJiYoIXVlfHxOWzFdPnVlWzBdJiZOWzFdPHVlWzNdKSl7Ry5sYWJlbD1OWzFdO2JyZWFrfWlmKDY9PT1OWzBdJiZHLmxhYmVsPHVlWzFdKXtHLmxhYmVsPXVlWzFdLHVlPU47YnJlYWt9aWYodWUmJkcubGFiZWw8dWVbMl0pe0cubGFiZWw9dWVbMl0sRy5vcHMucHVz'@;
put 'aChOKTticmVha311ZVsyXSYmRy5vcHMucG9wKCksRy50cnlzLnBvcCgpO2NvbnRpbnVlfU49b2UuY2FsbCh0ZSxHKX1jYXRjaChnKXtOPVs2LGddLGhlPTB9ZmluYWxseXtzZT11ZT0wfWlmKDUmTlswXSl0aHJvdyBOWzFdO3JldHVybnt2YWx1ZTpOWzBdP05bMV06dm9pZCAwLGRvbmU6ITB9'@;
put 'fShbRCxIXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZXhlY3V0ZU9uQ29tcHV0ZUFwaT12b2lkIDA7dmFyIGo9Uig3NzU3KSxWPVIoOTc3OCksQj1SKDM2MDcpLFk9Uig3MDQpLFg9Uig1OTI4KSxVPVIoNzE0KSxxPVIoMTM0MyksZWU9'@;
put 'Uig2NDk2KTtPLmV4ZWN1dGVPbkNvbXB1dGVBcGk9ZnVuY3Rpb24gdGUob2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHYpe3ZhciBwLHc7cmV0dXJuIHZvaWQgMD09PUQmJihEPW51bGwpLHZvaWQgMD09PUgmJihIPSExKSx2b2lkIDA9PT1OJiYoTj0hMSksdm9pZCAwPT09ZyYmKGc9'@;
put 'ITApLHZvaWQgMD09PVMmJihTPSExKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBKLG5lLGRlLGZlLHhlLEllLEZlLE9lLGplLFdlLEtlLFllLFFlLGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEZSl7c3dpdGNo'@;
put 'KERlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEo9KGJ8fHt9KS5hY2Nlc3NfdG9rZW4sYj9bNCwoMCxZLmdldFRva2Vucykob2UsYildOlszLDJdO2Nhc2UgMTpKPURlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sRGUubGFiZWw9MjtjYXNlIDI6bmU9ei5sb2dnZXJ8fEssRGUubGFiZWw9MztjYXNlIDM6'@;
put 'cmV0dXJuIERlLnRyeXMucHVzaChbMywxOSwsMjBdKSxkZT12b2lkIDAsWzQsc2UuZ2V0U2Vzc2lvbihKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgNDpyZXR1cm4gZmU9RGUu'@;
put 'c2VudCgpLGRlPWZlLmlkLFM/WzQsc2UuZ2V0VmFyaWFibGUoZGUsIlNZU0pPQklEIixKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gdmFyaWFibGUuICIpfSldOlszLDZdO2Nhc2UgNTooeGU9RGUu'@;
put 'c2VudCgpLnJlc3VsdCkmJnhlLnZhbHVlJiYoSWU9aGU/dWUuc3BsaXQoaGUpLmpvaW4oIiIpLnJlcGxhY2UoL15cLy8sIiIpOnVlLCh6LmxvZ2dlcnx8SykuaW5mbygiVHJpZ2dlcmluZyAnIi5jb25jYXQoSWUsIicgd2l0aCBQSUQgIikuY29uY2F0KHhlLnZhbHVlLCIgYXQgIikuY29uY2F0'@;
put 'KCgwLGoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUykoKSkpKSxEZS5sYWJlbD02O2Nhc2UgNjpyZXR1cm4gRmU9dm9pZCAwLCgwLFguaXNSZWxhdGl2ZVBhdGgpKHVlKT9GZT0iZXhlYy0iLmNvbmNhdCh1ZS5pbmNsdWRlcygiLyIpP3VlLnNwbGl0KCIvIilbMV06dWUpOihPZT11ZS5zcGxp'@;
put 'dCgiLyIpLEZlPU9lLnBvcCgpKSxqZT17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFguaXNSZWxhdGl2ZVBhdGgpKHVlKT9oZSsiLyIrdWU6dWV9LHYmJihqZT1MKEwoe30samUpLHYpKSxIJiYoamU9TChMKHt9LGplKSx7X0RFQlVHOjEzMX0pKSxXZT1bXSxEP0pTT04uc3RyaW5n'@;
put 'aWZ5KEQpLmluY2x1ZGVzKCI7Iik/WzQsKDAsZWUudXBsb2FkVGFibGVzKShvZSxELEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSldOlszLDhdOlszLDldO2Nhc2UgNzpyZXR1cm4gV2U9'@;
put 'RGUuc2VudCgpLGplLl93ZWJpbl9maWxlX2NvdW50PVdlLmxlbmd0aCxXZS5mb3JFYWNoKGZ1bmN0aW9uKHplLG90KXtqZVsiX3dlYmluX2ZpbGV1cmkiLmNvbmNhdChvdCsxKV09Ii9maWxlcy9maWxlcy8iLmNvbmNhdCh6ZS5maWxlLmlkKSxqZVsiX3dlYmluX25hbWUiLmNvbmNhdChvdCsx'@;
put 'KV09emUudGFibGVOYW1lfSksWzMsOV07Y2FzZSA4OmplPUwoTCh7fSxqZSksKDAsVS5mb3JtYXREYXRhRm9yUmVxdWVzdCkoRCkpLERlLmxhYmVsPTk7Y2FzZSA5OnJldHVybiBLZT17bmFtZTpGZXx8IkRlZmF1bHQgSm9iIE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixj'@;
put 'b2RlOmNlLHZhcmlhYmxlczpqZSx2ZXJzaW9uOjJ9LFs0LG9lLnBvc3QoIi9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KGRlLCIvam9icyIpLEtlLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIHBvc3Rpbmcgam9iLiAiKX0p'@;
put 'XTtjYXNlIDEwOnJldHVybiBZZT1EZS5zZW50KCksUWU9WWUucmVzdWx0LGc/KEgmJihuZS5pbmZvKCJKb2IgaGFzIGJlZW4gc3VibWl0dGVkIGZvciAnIi5jb25jYXQoRmUsIicuIikpLG5lLmluZm8oIllvdSBjYW4gbW9uaXRvciB0aGUgam9iIHByb2dyZXNzIGF0ICciLmNvbmNhdChvZS5n'@;
put 'ZXRCYXNlVXJsKCkpLmNvbmNhdChRZS5saW5rcy5maW5kKGZ1bmN0aW9uKHplKXtyZXR1cm4ic3RhdGUiPT09emUucmVsfSkuaHJlZiwiJy4iKSkpLFs0LCgwLHEucG9sbEpvYlN0YXRlKShvZSxRZSxILGIsQyx7c2Vzc2lvbjpmZSxzZXNzaW9uTWFuYWdlcjpzZX0pLmNhdGNoKGZ1bmN0aW9u'@;
put 'KHplKXtyZXR1cm4gayhNZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG90LHV0LE10LEh0LFB0LG9uO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQ24pe3N3aXRjaChDbi5sYWJlbCl7Y2FzZSAwOnJldHVybiBvdD1udWxsPT09KFB0PXplPy5yZXNwb25zZSl8fHZvaWQgMD09PVB0P3Zv'@;
put 'aWQgMDpQdC5kYXRhLHV0PS9lcnI9WzAtOV0qLC8uZXhlYyhvdCksIjUxMTMiIT09KG51bGw9PT0ob249dXQ/LlswXSl8fHZvaWQgMD09PW9uP3ZvaWQgMDpvbi5zbGljZSg0LC0xKSk/WzMsMl06KE10PVFlLmxpbmtzLmZpbmQoZnVuY3Rpb24oVXQpe3JldHVybiJ1cCI9PT1VdC5yZWx9KS5o'@;
put 'cmVmKyIvbG9nIixIdD16ZSxbNCwoMCxYLmZldGNoTG9nQnlDaHVua3MpKG9lLEosTXQsMWU2KV0pO2Nhc2UgMTpIdC5sb2c9Q24uc2VudCgpLENuLmxhYmVsPTI7Y2FzZSAyOnRocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX19'@;
put 'KX0pfSldKTpbMixmZV07Y2FzZSAxMTpyZXR1cm4gbHQ9RGUuc2VudCgpLGI/WzQsKDAsWS5nZXRUb2tlbnMpKG9lLGIpXTpbMywxM107Y2FzZSAxMjpKPURlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sRGUubGFiZWw9MTM7Y2FzZSAxMzpyZXR1cm5bNCxvZS5nZXQoIi9jb21wdXRlL3Nlc3Npb25z'@;
put 'LyIuY29uY2F0KGRlLCIvam9icy8iKS5jb25jYXQoUWUuaWQpLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pXTtjYXNlIDE0OnJldHVybiBQZT1EZS5zZW50KCkucmVzdWx0LGJlPXZvaWQgMCxB'@;
put 'ZT0iIixUZT1QZS5saW5rcy5maW5kKGZ1bmN0aW9uKHplKXtyZXR1cm4ibG9nIj09PXplLnJlbH0pLEgmJlRlPyhxZT0iIi5jb25jYXQoVGUuaHJlZiwiL2NvbnRlbnQiKSxYZT1udWxsIT09KHc9bnVsbD09PShwPVBlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmxpbmVD'@;
put 'b3VudCkmJnZvaWQgMCE9PXc/dzoxZTYsWzQsKDAsWC5mZXRjaExvZ0J5Q2h1bmtzKShvZSxKLHFlLFhlKV0pOlszLDE2XTtjYXNlIDE1OkFlPURlLnNlbnQoKSxEZS5sYWJlbD0xNjtjYXNlIDE2OmlmKGx0PT09cS5Kb2JTdGF0ZS5GYWlsZWR8fGx0PT09cS5Kb2JTdGF0ZS5FcnJvcil0aHJv'@;
put 'dyBuZXcgQi5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3IoUGUsQWUpO3JldHVybiBOPyhVZT0iL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZGUsIi9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnQiKSxbNCxvZS5nZXQoVWUsSiwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKHplKXtyZXR1'@;
put 'cm4gayhNZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG90LHV0LE10LEh0O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUHQpe3N3aXRjaChQdC5sYWJlbCl7Y2FzZSAwOnJldHVybiB6ZSBpbnN0YW5jZW9mIEIuTm90Rm91bmRFcnJvciYmVGU/KG90PSIiLmNvbmNhdChUZS5ocmVmLCIv'@;
put 'Y29udGVudCIpLHV0PW51bGwhPT0oSHQ9bnVsbD09PShNdD1QZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09TXQ/dm9pZCAwOk10LmxpbmVDb3VudCkmJnZvaWQgMCE9PUh0P0h0OjFlNixbNCwoMCxYLmZldGNoTG9nQnlDaHVua3MpKG9lLEosb3QsdXQpXSk6WzMsMl07Y2FzZSAxOnJldHVy'@;
put 'biBBZT1QdC5zZW50KCksWzIsUHJvbWlzZS5yZWplY3Qoe3N0YXR1czo1MDAsbG9nOkFlfSldO2Nhc2UgMjpyZXR1cm5bMix7cmVzdWx0OkpTT04uc3RyaW5naWZ5KHplKX1dfX0pfSl9KV0pOlsyLHtqb2I6UGUsbG9nOkFlfV07Y2FzZSAxNzpyZXR1cm4gYmU9RGUuc2VudCgpLFs0LHNlLmNs'@;
put 'ZWFyU2Vzc2lvbihkZSxKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBjbGVhcmluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDE4OnJldHVybiBEZS5zZW50KCksWzIse3Jlc3VsdDpiZT8ucmVzdWx0LGxvZzpBZX1dO2Nhc2UgMTk6'@;
put 'aWYoNDA0PT09KGh0PURlLnNlbnQoKSkuc3RhdHVzKXJldHVyblsyLHRlKG9lLHNlLGhlLHVlLGNlLEcsYixELEgsITEsITApXTt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoaHQsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpO2Nhc2UgMjA6cmV0dXJuWzJdfX0pfSl9fSw3NDU4'@;
put 'OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRj'@;
put 'aChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNl'@;
put 'KX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0sTD10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0'@;
put 'cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxs'@;
put 'KFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9'@;
put 'O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0w'@;
put 'O2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMu'@;
put 'cHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRv'@;
put 'bmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRGaWxlU3RyZWFtPXZvaWQgMDt2YXIgaz1SKDI5NzUpLEU9Uig3NzU3KTtPLmdldEZpbGVTdHJlYW09ZnVuY3Rpb24oaixWKXtyZXR1cm4gSyh2b2lkIDAsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLFksWCxVLHE7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihlZSl7c3dpdGNoKGVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEI9UigyOTc1KS5jcmVhdGVXcml0ZVN0cmVhbSxZPVZ8fHouY3dkKCksWzQsKDAsay5pc0ZvbGRlcikoWSldO2Nhc2UgMTpy'@;
put 'ZXR1cm4gZWUuc2VudCgpPyhYPSIiLmNvbmNhdChqLm5hbWV8fCJqb2IiLCItIikuY29uY2F0KCgwLEUuZ2VuZXJhdGVUaW1lc3RhbXApKCksIi5sb2ciKSxVPVIoMjUyMCkscT1VLmpvaW4oVnx8ei5jd2QoKSxYKSxbNCxCKHEpXSk6WzMsM107Y2FzZSAyOmNhc2UgNDpyZXR1cm5bMixlZS5z'@;
put 'ZW50KCldO2Nhc2UgMzpyZXR1cm5bNCxCKFkpXX19KX0pfX0sMTM0MzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEw9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gTD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihvZSl7'@;
put 'Zm9yKHZhciBzZSxoZT0xLHVlPWFyZ3VtZW50cy5sZW5ndGg7aGU8dWU7aGUrKylmb3IodmFyIGNlIGluIHNlPWFyZ3VtZW50c1toZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGNlKSYmKG9lW2NlXT1zZVtjZV0pO3JldHVybiBvZX0sTC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG9lLHNlLGhlLHVlKXtyZXR1cm4gbmV3KGhlfHwoaGU9UHJvbWlzZSkpKGZ1bmN0aW9uKGNlLEcpe2Z1bmN0aW9uIGIoTil7dHJ5e0godWUubmV4dChOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gRChOKXt0cnl7'@;
put 'SCh1ZS50aHJvdyhOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gSChOKXt2YXIgZztOLmRvbmU/Y2UoTi52YWx1ZSk6KGc9Ti52YWx1ZSxnIGluc3RhbmNlb2YgaGU/ZzpuZXcgaGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIsRCl9SCgodWU9dWUuYXBwbHkob2Usc2V8fFtdKSkubmV4'@;
put 'dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKG9lLHNlKXt2YXIgaGUsdWUsY2UsRyxiPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBdKXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBHPXtuZXh0OkQoMCks'@;
put 'dGhyb3c6RCgxKSxyZXR1cm46RCgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRztmdW5jdGlvbiBEKEgpe3JldHVybiBmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoaGUpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YjspdHJ5e2lmKGhlPTEsdWUmJihjZT0yJmdbMF0/dWUucmV0dXJuOmdbMF0/dWUudGhyb3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxn'@;
put 'WzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVlPTAsY2UmJihnPVsyJmdbMF0sY2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2FzZSAxOmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVybiBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBd'@;
put 'O2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1iLnRyeXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdb'@;
put 'MV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVsPWdbMV07YnJlYWt9aWYoNj09PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFiZWw9Y2VbMV0sY2U9ZzticmVha31pZihjZSYmYi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5w'@;
put 'b3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1zZS5jYWxsKG9lLGIpfWNhdGNoKEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2hlPWNlPTB9aWYoNSZnWzBdKXRocm93IGdbMV07cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtILE5dKX19fSxqPXRoaXMmJnRoaXMu'@;
put 'X19zcHJlYWRBcnJheXx8ZnVuY3Rpb24ob2Usc2UsaGUpe2lmKGhlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHVlLGNlPTAsRz1zZS5sZW5ndGg7Y2U8RztjZSsrKSF1ZSYmY2UgaW4gc2V8fCh1ZXx8KHVlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNlLDAsY2UpKSx1ZVtj'@;
put 'ZV09c2VbY2VdKTtyZXR1cm4gb2UuY29uY2F0KHVlfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzZSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kb1BvbGw9Ty5wb2xsSm9iU3RhdGU9Ty5Kb2JTdGF0ZT12b2lkIDA7dmFyIFYsb2Us'@;
put 'Qj1SKDcwNCksWT1SKDEzOTUpLFg9UigxMjMwKSxVPVIoNTkyOCk7KG9lPVY9Ty5Kb2JTdGF0ZXx8KE8uSm9iU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsb2UuUnVubmluZz0icnVubmluZyIsb2UuUGVuZGluZz0icGVuZGluZyIsb2UuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxl'@;
put 'IixvZS5Ob1N0YXRlPSIiLG9lLkZhaWxlZD0iZmFpbGVkIixvZS5FcnJvcj0iZXJyb3IiLE8ucG9sbEpvYlN0YXRlPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQsSCxOLGcsQyxTLHYscCx3LEo7cmV0dXJu'@;
put 'IEUodGhpcyxmdW5jdGlvbihuZSl7c3dpdGNoKG5lLmxhYmVsKXtjYXNlIDA6aWYoYj16LmxvZ2dlcnx8SyxEPWNlPy5zdHJlYW1Mb2d8fCExLEg9W3ttYXhQb2xsQ291bnQ6MjAwLHBvbGxJbnRlcnZhbDozMDB9LHttYXhQb2xsQ291bnQ6MzAwLHBvbGxJbnRlcnZhbDozZTN9LHttYXhQb2xs'@;
put 'Q291bnQ6NTAwLHBvbGxJbnRlcnZhbDozZTR9LHttYXhQb2xsQ291bnQ6MzQwMCxwb2xsSW50ZXJ2YWw6NmU0fV0sdm9pZCAwIT09Y2U/KE49W2NlXSx2b2lkIDAhPT0oZz1jZS5wb2xsU3RyYXRlZ3kpPyh0ZShnKSxnPWcuc29ydChmdW5jdGlvbihkZSxmZSl7cmV0dXJuIGRlLm1heFBvbGxD'@;
put 'b3VudC1mZS5tYXhQb2xsQ291bnR9KSxOPWooaihbXSxOLCEwKSxnLCEwKSk6Tj1qKGooW10sTiwhMCksSCwhMCkpOk49SCxDPU4uc3BsaWNlKDAsMSlbMF0sY2U9TChMKHt9LEMpLGNlfHx7fSksIShTPXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oZGUpe3JldHVybiJzdGF0ZSI9PT1kZS5yZWx9'@;
put 'KSkpdGhyb3cgbmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO3JldHVybls0LHEob2Usc2UsVi5Ob1N0YXRlLGhlLHVlKS5jYXRjaChmdW5jdGlvbihkZSl7cmV0dXJuIGIuZXJyb3IoIkVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICIuY29uY2F0KFMuaHJl'@;
put 'ZiwiLiBTdGFydGluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy4iKSxkZSksVi5VbmF2YWlsYWJsZX0pXTtjYXNlIDE6cmV0dXJuIHY9bmUuc2VudCgpLHA9MCx2PT09Vi5Db21wbGV0ZWQ/WzIsUHJvbWlzZS5yZXNvbHZlKHYpXTpEJiYoMCxVLmlzTm9kZSkoKT9bNCwoMCxS'@;
put 'KDc0NTgpLmdldEZpbGVTdHJlYW0pKHNlLGNlLmxvZ0ZvbGRlclBhdGgpXTpbMywzXTtjYXNlIDI6dz1uZS5zZW50KCksbmUubGFiZWw9MztjYXNlIDM6cmV0dXJuWzQsKDAsTy5kb1BvbGwpKG9lLHNlLHYsaGUscCxjZSx1ZSxELHcsRyldO2Nhc2UgNDppZihKPW5lLnNlbnQoKSxwPUoucG9s'@;
put 'bENvdW50LCFlZSh2PUouc3RhdGUpfHxwPj1jZS5tYXhQb2xsQ291bnQmJiFOLmxlbmd0aClyZXR1cm5bMix2XTtuZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gTi5sZW5ndGgmJmVlKHYpPyhDPU4uc3BsaWNlKDAsMSlbMF0sY2UmJihDLmxvZ0ZvbGRlclBhdGg9Y2UubG9nRm9sZGVyUGF0aCks'@;
put 'WzQsKDAsTy5kb1BvbGwpKG9lLHNlLHYsaGUscCxDLHVlLEQsdyxHKV0pOlszLDddO2Nhc2UgNjpyZXR1cm4gSj1uZS5zZW50KCksdj1KLnN0YXRlLHA9Si5wb2xsQ291bnQsWzMsNV07Y2FzZSA3OnJldHVybiB3JiZ3LmVuZCgpLFsyLHZdfX0pfSl9O3ZhciBxPWZ1bmN0aW9uKG9lLHNlLGhl'@;
put 'LHVlLGNlKXtyZXR1cm4gayh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLGI7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBHPXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oSCl7cmV0dXJuInN0YXRlIj09PUgucmVsfSks'@;
put 'ZWUoaGUpPyhiPXZvaWQgMCxjZT9bNCwoMCxCLmdldFRva2Vucykob2UsY2UpXTpbMywyXSk6WzMsNF07Y2FzZSAxOmI9RC5zZW50KCksRC5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCxvZS5nZXQoIiIuY29uY2F0KEcuaHJlZiwiP19hY3Rpb249d2FpdCZ3YWl0PTMwMCIpLGI/LmFjY2Vzc190'@;
put 'b2tlbiwidGV4dC9wbGFpbiIse30sdWUpLmNhdGNoKGZ1bmN0aW9uKEgpe3Rocm93IG5ldyBZLkpvYlN0YXRlUG9sbEVycm9yKHNlLmlkLEgpfSldO2Nhc2UgMzpyZXR1cm5bMixELnNlbnQoKS5yZXN1bHQudHJpbSgpXTtjYXNlIDQ6cmV0dXJuWzIsaGVdfX0pfSl9LGVlPWZ1bmN0aW9uKG9l'@;
put 'KXtyZXR1cm4gb2U9PT1WLlJ1bm5pbmd8fG9lPT09Vi5Ob1N0YXRlfHxvZT09PVYuUGVuZGluZ3x8b2U9PT1WLlVuYXZhaWxhYmxlfTtPLmRvUG9sbD1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4pe3JldHVybiBrKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IGcsQyxTLHYscCx3LEosbmUsZGUsZmUseGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihJZSl7c3dpdGNoKEllLmxhYmVsKXtjYXNlIDA6Zz1HLm1heFBvbGxDb3VudCxDPUcucG9sbEludGVydmFsLFM9ei5sb2dnZXJ8fEssdj1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKEZlKXtyZXR1cm4ic3Rh'@;
put 'dGUiPT09RmUucmVsfSkscD0wLHc9aGUsSj1WLk5vU3RhdGUsbmU9MCxkZT1mdW5jdGlvbigpe3ZhciBGZSxPZSxLZSxZZSxRZSxsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodDtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE1lKXtzd2l0Y2goTWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTiYmY2Um'@;
put 'JmNlJTEwPT0wJiZiPyhLZT0oRmU9Ti5zZXNzaW9uKS5pZCxRZT1zZS5pZCxbNCwoT2U9Ti5zZXNzaW9uTWFuYWdlcikuZ2V0U2Vzc2lvblN0YXRlKEZlLnN0YXRlVXJsLEZlLmV0YWcsWWU9Yi5hY2Nlc3NfdG9rZW4pLmNhdGNoKGZ1bmN0aW9uKERlKXt0aHJvdyBuZXcgWS5Kb2JTdGF0ZVBv'@;
put 'bGxFcnJvcihRZSxEZSl9KV0pOlszLDJdO2Nhc2UgMTppZihsdD1NZS5zZW50KCksYmU9bHQucmVzcG9uc2VTdGF0dXMsIShBZT1mdW5jdGlvbihEZSl7cmV0dXJuW1guU2Vzc2lvblN0YXRlLlJ1bm5pbmcsWC5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVkZXMoRGUpfSkoUGU9bHQucmVzdWx0'@;
put 'KXx8MjAwIT09YmUpdGhyb3cgT2UuY2xlYXJTZXNzaW9uKEtlLFllKSxUZT1BZShQZSk/IlNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICIuY29uY2F0KGJlLCIuIik6IlNlc3Npb24gc3RhdGUgb2YgdGhlIGpvYiBpcyBub3Qg'@;
put 'J3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnIi5jb25jYXQoUGUsIiciKSxuZXcgWS5Kb2JTdGF0ZVBvbGxFcnJvcihRZSxuZXcgRXJyb3IoVGUpKTtNZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCxxKG9lLHNlLHcsdWUsYikuY2F0Y2goZnVuY3Rpb24oRGUpe2lmKHAr'@;
put 'KyxjZT49Z3x8cD49NSl0aHJvdyBEZTtyZXR1cm4gUy5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gIi5jb25jYXQodi5ocmVmLCIuIFJlc3VtaW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLiIpLERlKSxWLlVuYXZhaWxhYmxlfSldO2Nhc2UgMzpyZXR1'@;
put 'cm4gdz1NZS5zZW50KCksY2UrKyxxZT1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKERlKXtyZXR1cm4ic2VsZiI9PT1EZS5yZWx9KS5ocmVmLEQ/WzQsb2UuZ2V0KHFlLGI/LmFjY2Vzc190b2tlbildOlszLDddO2Nhc2UgNDpyZXR1cm4gWGU9TWUuc2VudCgpLnJlc3VsdCxVZT1udWxsIT09KHhl'@;
put 'PW51bGw9PT0oZmU9WGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PWZlP3ZvaWQgMDpmZS5saW5lQ291bnQpJiZ2b2lkIDAhPT14ZT94ZToxZTYsKGh0PSgoMCxVLmlzTm9kZSkoKT9SKDIwODApOntzYXZlTG9nOm51bGx9KS5zYXZlTG9nKT9bNCxodChzZSxvZSxuZSxVZSxILGI/LmFjY2Vz'@;
put 'c190b2tlbildOlszLDZdO2Nhc2UgNTpNZS5zZW50KCksTWUubGFiZWw9NjtjYXNlIDY6bmUrPVVlLE1lLmxhYmVsPTc7Y2FzZSA3OnJldHVybiB1ZSYmSiE9PXcmJihTLmluZm8oIlBvbGxpbmc6ICIuY29uY2F0KG9lLmdldEJhc2VVcmwoKStxZSwiL3N0YXRlIikpLFMuaW5mbygiQ3VycmVu'@;
put 'dCBqb2Igc3RhdGU6ICIuY29uY2F0KHcpKSxKPXcpLHchPT1WLlVuYXZhaWxhYmxlJiZwPjAmJihwPTApLHc9PT1WLkNvbXBsZXRlZD9bMyw5XTpbNCwoMCxVLmRlbGF5KShDKV07Y2FzZSA4Ok1lLnNlbnQoKSxNZS5sYWJlbD05O2Nhc2UgOTpyZXR1cm5bMl19fSl9LEllLmxhYmVsPTE7Y2Fz'@;
put 'ZSAxOnJldHVybiBlZSh3KSYmY2U8PWc/WzUsZGUoKV06WzMsM107Y2FzZSAyOnJldHVybiBJZS5zZW50KCksWzMsMV07Y2FzZSAzOnJldHVyblsyLHtzdGF0ZTp3LHBvbGxDb3VudDpjZX1dfX0pfSl9O3ZhciB0ZT1mdW5jdGlvbihvZSl7dmFyIHNlPWZ1bmN0aW9uKGhlLHVlKXt0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlBvbGwgc3RyYXRlZ2llcyBhcmUgbm90IHZhbGlkLiIuY29uY2F0KGhlPyIgIi5jb25jYXQoaGUpOiIiKS5jb25jYXQodWU/IiBJbnZhbGlkIHBvbGwgc3RyYXRlZ3k6IFxuIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodWUsbnVsbCwyKSk6IiIpKX07b2UuZm9yRWFjaChmdW5j'@;
put 'dGlvbihoZSx1ZSl7dmFyIGNlPWhlLm1heFBvbGxDb3VudCxHPWhlLnBvbGxJbnRlcnZhbDtjZTwxP3NlKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixoZSk6MCE9PXVlP2NlPD1vZVt1ZS0xXS5tYXhQb2xsQ291bnQmJnNlKCInbWF4UG9sbENvdW50JyBoYXMg'@;
put 'dG8gYmUgZ3JlYXRlciB0aGFuICdtYXhQb2xsQ291bnQnIGluIHByZXZpb3VzIHBvbGwgc3RyYXRlZ3kuIixoZSk6RzwxJiZzZSgiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIsaGUpfSl9fSwyMDgwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9'@;
put 'Uig0MTU1KSxLPVIoNTEwOCksTD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gdGUo'@;
put 'c2Upe3RyeXtvZShYLnRocm93KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShzZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9lKChYPVgu'@;
put 'YXBwbHkoVixCfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgsVSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBx'@;
put 'PXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'aGUpe2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRyeXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYmIShVPVUu'@;
put 'Y2FsbChYLGhlWzFdKSkuZG9uZSlyZXR1cm4gVTtzd2l0Y2goWD0wLFUmJihoZT1bMiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJlbCsrLFg9'@;
put 'aGVbMV0saGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpoZT1lZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9aWYoMz09'@;
put 'PWhlWzBdJiYoIVV8fGhlWzFdPlVbMF0mJmhlWzFdPFVbM10pKXtlZS5sYWJlbD1oZVsxXTticmVha31pZig2PT09aGVbMF0mJmVlLmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNoKGhlKTti'@;
put 'cmVha31VWzJdJiZlZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZX1oZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hlPVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9uZTohMH19'@;
put 'KFtvZSxzZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnNhdmVMb2c9dm9pZCAwO3ZhciBFPVIoNTkyOCksaj1SKDYxMzEpO08uc2F2ZUxvZz1mdW5jdGlvbihWLEIsWSxYLFUscSl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKCl7dmFyIGVlLHRlLG9lO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOmlmKCFxKXRocm93IG5ldyBFcnJvcigiTG9ncyBmb3Igam9iICIuY29uY2F0KFYuaWQsIiBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNz'@;
put 'IHRva2VuLiIpKTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIkxvZ3MgZm9yIGpvYiAiLmNvbmNhdChWLmlkLCIgY2Fubm90IGJlIHdyaXR0ZW4gd2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS4iKSk7aWYoZWU9ei5sb2dnZXJ8fEssISh0ZT1WLmxpbmtzLmZpbmQoZnVuY3Rpb24oaGUpe3Jl'@;
put 'dHVybiJsb2ciPT09aGUucmVsfSkpKXRocm93IG5ldyBFcnJvcigiTG9nIFVSTCBmb3Igam9iICIuY29uY2F0KFYuaWQsIiB3YXMgbm90IGZvdW5kLiIpKTtyZXR1cm5bNCwoMCxFLmZldGNoTG9nKShCLHEsIiIuY29uY2F0KHRlLmhyZWYsIi9jb250ZW50IiksWSxYKV07Y2FzZSAxOnJldHVy'@;
put 'biBvZT1zZS5zZW50KCksZWUuaW5mbygiV3JpdGluZyBsb2dzIHRvICIuY29uY2F0KFUucGF0aCkpLFs0LCgwLGoud3JpdGVTdHJlYW0pKFUsb2V8fCIiKV07Y2FzZSAyOnJldHVybiBzZS5zZW50KCksWzJdfX0pfSl9fSw2NDk2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9'@;
put 'dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gVSh0ZSl7dHJ5e2VlKEIubmV4dCh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e2VlKEIudGhyb3codGUp'@;
put 'KX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIGVlKHRlKXt2YXIgb2U7dGUuZG9uZT9ZKHRlLnZhbHVlKToob2U9dGUudmFsdWUsb2UgaW5zdGFuY2VvZiBWP29lOm5ldyBWKGZ1bmN0aW9uKHNlKXtzZShvZSl9KSkudGhlbihVLHEpfWVlKChCPUIuYXBwbHkoRSxqfHxbXSkpLm5leHQoKSl9'@;
put 'KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihFLGope3ZhciBWLEIsWSxYLFU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWVswXSl0aHJvdyBZWzFdO3JldHVybiBZWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFg9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJl'@;
put 'dHVybjpxKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxYO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1U7KXRyeXtpZihWPTEsQiYmKFk9MiZvZVswXT9CLnJldHVybjpvZVswXT9CLnRocm93fHwoKFk9Qi5yZXR1cm4pJiZZLmNhbGwoQiksMCk6Qi5uZXh0KSYmIShZPVkuY2FsbChCLG9lWzFdKSkuZG9uZSlyZXR1cm4gWTtz'@;
put 'd2l0Y2goQj0wLFkmJihvZT1bMiZvZVswXSxZLnZhbHVlXSksb2VbMF0pe2Nhc2UgMDpjYXNlIDE6WT1vZTticmVhaztjYXNlIDQ6cmV0dXJuIFUubGFiZWwrKyx7dmFsdWU6b2VbMV0sZG9uZTohMX07Y2FzZSA1OlUubGFiZWwrKyxCPW9lWzFdLG9lPVswXTtjb250aW51ZTtjYXNlIDc6b2U9'@;
put 'VS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWT0oWT1VLnRyeXMpLmxlbmd0aD4wJiZZW1kubGVuZ3RoLTFdKXx8NiE9PW9lWzBdJiYyIT09b2VbMF0pKXtVPTA7Y29udGludWV9aWYoMz09PW9lWzBdJiYoIVl8fG9lWzFdPllbMF0mJm9lWzFdPFlbM10p'@;
put 'KXtVLmxhYmVsPW9lWzFdO2JyZWFrfWlmKDY9PT1vZVswXSYmVS5sYWJlbDxZWzFdKXtVLmxhYmVsPVlbMV0sWT1vZTticmVha31pZihZJiZVLmxhYmVsPFlbMl0pe1UubGFiZWw9WVsyXSxVLm9wcy5wdXNoKG9lKTticmVha31ZWzJdJiZVLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGlu'@;
put 'dWV9b2U9ai5jYWxsKEUsVSl9Y2F0Y2goc2Upe29lPVs2LHNlXSxCPTB9ZmluYWxseXtWPVk9MH1pZig1Jm9lWzBdKXRocm93IG9lWzFdO3JldHVybnt2YWx1ZTpvZVswXT9vZVsxXTp2b2lkIDAsZG9uZTohMH19KFtlZSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxPLnVwbG9hZFRhYmxlcz12b2lkIDA7dmFyIEw9Uig5Nzc4KSxrPVIoMjQwMik7Ty51cGxvYWRUYWJsZXM9ZnVuY3Rpb24oRSxqLFYpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLFksWCxVLHEsZWUsdGU7cmV0dXJuIEsodGhp'@;
put 'cyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNlIDA6Zm9yKFggaW4gQj1bXSxZPVtdLGopWS5wdXNoKFgpO1U9MCxvZS5sYWJlbD0xO2Nhc2UgMTppZighKFU8WS5sZW5ndGgpKXJldHVyblszLDRdO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT0oZWU9KDAsay5j'@;
put 'b252ZXJ0VG9DU1YpKGoscT1ZW1VdKSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO3JldHVybls0LEUudXBsb2FkRmlsZSgiL2ZpbGVzL2ZpbGVzI3Jhd1VwbG9hZCIsZWUsVikuY2F0Y2go'@;
put 'ZnVuY3Rpb24oc2Upe3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShzZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIGZpbGUuICIpfSldO2Nhc2UgMjp0ZT1vZS5zZW50KCksQi5wdXNoKHt0YWJsZU5hbWU6cSxmaWxlOnRlLnJlc3VsdH0pLG9lLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBVKyssWzMs'@;
put 'MV07Y2FzZSA0OnJldHVyblsyLEJdfX0pfSl9fSw2MTMxOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihLLEwsayxFKXtyZXR1cm4gbmV3KGt8fChrPVByb21pc2UpKShmdW5jdGlvbihqLFYpe2Z1bmN0aW9uIEIoVSl7dHJ5'@;
put 'e1goRS5uZXh0KFUpKX1jYXRjaChxKXtWKHEpfX1mdW5jdGlvbiBZKFUpe3RyeXtYKEUudGhyb3coVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFgoVSl7dmFyIHE7VS5kb25lP2ooVS52YWx1ZSk6KHE9VS52YWx1ZSxxIGluc3RhbmNlb2Ygaz9xOm5ldyBrKGZ1bmN0aW9uKGVlKXtlZShx'@;
put 'KX0pKS50aGVuKEIsWSl9WCgoRT1FLmFwcGx5KEssTHx8W10pKS5uZXh0KCkpfSl9LHo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oSyxMKXt2YXIgayxFLGosVixCPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmpbMF0pdGhyb3cgalsxXTtyZXR1cm4galsxXX0sdHJ5'@;
put 'czpbXSxvcHM6W119O3JldHVybiBWPXtuZXh0OlkoMCksdGhyb3c6WSgxKSxyZXR1cm46WSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVjtmdW5jdGlvbiBZKFgpe3JldHVybiBmdW5jdGlvbihVKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24ocSl7aWYoayl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtCOyl0cnl7aWYoaz0xLEUmJihqPTImcVswXT9FLnJldHVybjpxWzBdP0UudGhyb3d8fCgoaj1FLnJldHVybikmJmouY2FsbChFKSwwKTpFLm5l'@;
put 'eHQpJiYhKGo9ai5jYWxsKEUscVsxXSkpLmRvbmUpcmV0dXJuIGo7c3dpdGNoKEU9MCxqJiYocT1bMiZxWzBdLGoudmFsdWVdKSxxWzBdKXtjYXNlIDA6Y2FzZSAxOmo9cTticmVhaztjYXNlIDQ6cmV0dXJuIEIubGFiZWwrKyx7dmFsdWU6cVsxXSxkb25lOiExfTtjYXNlIDU6Qi5sYWJlbCsr'@;
put 'LEU9cVsxXSxxPVswXTtjb250aW51ZTtjYXNlIDc6cT1CLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChqPShqPUIudHJ5cykubGVuZ3RoPjAmJmpbai5sZW5ndGgtMV0pfHw2IT09cVswXSYmMiE9PXFbMF0pKXtCPTA7Y29udGludWV9aWYoMz09PXFbMF0m'@;
put 'Jighanx8cVsxXT5qWzBdJiZxWzFdPGpbM10pKXtCLmxhYmVsPXFbMV07YnJlYWt9aWYoNj09PXFbMF0mJkIubGFiZWw8alsxXSl7Qi5sYWJlbD1qWzFdLGo9cTticmVha31pZihqJiZCLmxhYmVsPGpbMl0pe0IubGFiZWw9alsyXSxCLm9wcy5wdXNoKHEpO2JyZWFrfWpbMl0mJkIub3BzLnBv'@;
put 'cCgpLEIudHJ5cy5wb3AoKTtjb250aW51ZX1xPUwuY2FsbChLLEIpfWNhdGNoKGVlKXtxPVs2LGVlXSxFPTB9ZmluYWxseXtrPWo9MH1pZig1JnFbMF0pdGhyb3cgcVsxXTtyZXR1cm57dmFsdWU6cVswXT9xWzFdOnZvaWQgMCxkb25lOiEwfX0oW1gsVV0pfX19O09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLndyaXRlU3RyZWFtPXZvaWQgMCxPLndyaXRlU3RyZWFtPWZ1bmN0aW9uKEssTCl7cmV0dXJuIFIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGspe3JldHVyblsyLEsud3JpdGUo'@;
put 'TCsiXG4iLGZ1bmN0aW9uKEUpe3JldHVybiBFP1Byb21pc2UucmVqZWN0KEUpOlByb21pc2UucmVzb2x2ZSgpfSldfSl9KX19LDI4NTE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpLEs9Uig0MTU1KSxMPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihv'@;
put 'ZSxzZSxoZSx1ZSl7cmV0dXJuIG5ldyhoZXx8KGhlPVByb21pc2UpKShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiBiKE4pe3RyeXtIKHVlLm5leHQoTikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEQoTil7dHJ5e0godWUudGhyb3coTikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEgoTil7'@;
put 'dmFyIGc7Ti5kb25lP2NlKE4udmFsdWUpOihnPU4udmFsdWUsZyBpbnN0YW5jZW9mIGhlP2c6bmV3IGhlKGZ1bmN0aW9uKEMpe0MoZyl9KSkudGhlbihiLEQpfUgoKHVlPXVlLmFwcGx5KG9lLHNlfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihv'@;
put 'ZSxzZSl7dmFyIGhlLHVlLGNlLEcsYj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm4gY2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRz17bmV4dDpEKDApLHRocm93OkQoMSkscmV0dXJuOkQoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJihHW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEc7ZnVuY3Rpb24gRChIKXtyZXR1cm4gZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKGcpe2lmKGhlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4i'@;
put 'KTtmb3IoO2I7KXRyeXtpZihoZT0xLHVlJiYoY2U9MiZnWzBdP3VlLnJldHVybjpnWzBdP3VlLnRocm93fHwoKGNlPXVlLnJldHVybikmJmNlLmNhbGwodWUpLDApOnVlLm5leHQpJiYhKGNlPWNlLmNhbGwodWUsZ1sxXSkpLmRvbmUpcmV0dXJuIGNlO3N3aXRjaCh1ZT0wLGNlJiYoZz1bMiZn'@;
put 'WzBdLGNlLnZhbHVlXSksZ1swXSl7Y2FzZSAwOmNhc2UgMTpjZT1nO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYi5sYWJlbCsrLHt2YWx1ZTpnWzFdLGRvbmU6ITF9O2Nhc2UgNTpiLmxhYmVsKyssdWU9Z1sxXSxnPVswXTtjb250aW51ZTtjYXNlIDc6Zz1iLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7'@;
put 'Y29udGludWU7ZGVmYXVsdDppZighKChjZT0oY2U9Yi50cnlzKS5sZW5ndGg+MCYmY2VbY2UubGVuZ3RoLTFdKXx8NiE9PWdbMF0mJjIhPT1nWzBdKSl7Yj0wO2NvbnRpbnVlfWlmKDM9PT1nWzBdJiYoIWNlfHxnWzFdPmNlWzBdJiZnWzFdPGNlWzNdKSl7Yi5sYWJlbD1nWzFdO2JyZWFrfWlm'@;
put 'KDY9PT1nWzBdJiZiLmxhYmVsPGNlWzFdKXtiLmxhYmVsPWNlWzFdLGNlPWc7YnJlYWt9aWYoY2UmJmIubGFiZWw8Y2VbMl0pe2IubGFiZWw9Y2VbMl0sYi5vcHMucHVzaChnKTticmVha31jZVsyXSYmYi5vcHMucG9wKCksYi50cnlzLnBvcCgpO2NvbnRpbnVlfWc9c2UuY2FsbChvZSxiKX1j'@;
put 'YXRjaChDKXtnPVs2LENdLHVlPTB9ZmluYWxseXtoZT1jZT0wfWlmKDUmZ1swXSl0aHJvdyBnWzFdO3JldHVybnt2YWx1ZTpnWzBdP2dbMV06dm9pZCAwLGRvbmU6ITB9fShbSCxOXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQXV0aE1h'@;
put 'bmFnZXI9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1SKDEzOTUpLFY9Uig1OTI4KSxCPVIoMTE3MCksWT1SKDU0MTgpLFg9Uig0NTgyKSxVPVIoNjU0NykscT1mdW5jdGlvbigpe2Z1bmN0aW9uIG9lKHNlLGhlLHVlLGNlKXt2YXIgRz10aGlzO3RoaXMuc2VydmVyVXJsPXNlLHRoaXMuc2VydmVy'@;
put 'VHlwZT1oZSx0aGlzLnJlcXVlc3RDbGllbnQ9dWUsdGhpcy5sb2dpbkNhbGxiYWNrPWNlLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9ZnVuY3Rpb24oYil7c3dpdGNo'@;
put 'KEcuc2VydmVyVHlwZSl7Y2FzZSBFLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gYj8uaWQ7Y2FzZSBFLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4iIjtjYXNlIEUuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gYj8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gei5lcnJvcigiU2VydmVyIFR5cGUg'@;
put 'bm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPWZ1bmN0aW9uKGIpe3N3aXRjaChHLnNlcnZlclR5cGUpe2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIGI/Lm5hbWU7Y2FzZSBFLlNlcnZlclR5cGUuU2Fz'@;
put 'OTpyZXR1cm4oMCxCLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5KShiKTtjYXNlIEUuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gYj8uZGlzcGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gei5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIi'@;
put 'fX0sdGhpcy5zZXRMb2dpblVybD1mdW5jdGlvbihiKXt2YXIgRD1iWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1EWzBdKXtEPUQuc3Vic3RyKDEpO3ZhciBIPUcuc2VydmVyVXJsPyIiLmNvbmNhdChHLnNlcnZlclVybCwiLyIpLmNvbmNhdChEKToiIi5jb25jYXQoRCk7Ry5sb2dp'@;
put 'blVybD1HLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzVml5YT9IOkgucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIil9fSx0aGlzLmxvZ2luVXJsPSIvU0FTTG9nb24vbG9naW4iLHRoaXMubG9nb3V0VXJsPXRoaXMuc2VydmVyVHlwZT09PUUuU2Vy'@;
put 'dmVyVHlwZS5TYXM5PyIvU0FTTG9nb24vbG9nb3V0PyI6dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9TQVNMb2dvbi9sb2dvdXQuZG8/IjoiL1NBU0xvZ29uL2xvZ291dCIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9dGhpcy5zZXJ2ZXJVcmwrdGhpcy5yZWRpcmVj'@;
put 'dGVkTG9naW5Vcmx9cmV0dXJuIG9lLnByb3RvdHlwZS5yZWRpcmVjdGVkTG9nSW49ZnVuY3Rpb24oc2Upe3ZhciBoZT1zZS5vbkxvZ2dlZE91dDtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsRyxiLEQsSCxOLGcsQyxTO3JldHVybiBrKHRoaXMsZnVuY3Rp'@;
put 'b24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmZldGNoVXNlck5hbWUoKV07Y2FzZSAxOnJldHVybiB1ZT12LnNlbnQoKSxHPXVlLnVzZXJOYW1lLGI9dWUudXNlckxvbmdOYW1lLHVlLmlzTG9nZ2VkSW4/KChLLmxvZ2dlcnx8eikubG9nKCJsb2dpbiB3YXMgbm90'@;
put 'IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4gdi5zZW50KCksWzIse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6Ryx1c2VyTG9uZ05hbWU6Yn1dO2Nhc2UgMzpyZXR1cm5bNCwo'@;
put 'MCxZLm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0saGUpXTtjYXNlIDQ6cmV0dXJuKEQ9di5zZW50KCkpP3RoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXNWaXlhP1szLDZdOls0LCgwLFUudmVyaWZ5'@;
put 'U2FzVml5YUxvZ2luKShEKV06WzIse2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifV07Y2FzZSA1OnJldHVybiBOPXYuc2VudCgpLFszLDhdO2Nhc2UgNjpyZXR1cm5bNCwoMCxYLnZlcmlmeVNhczlMb2dpbikoRCldO2Nhc2UgNzpOPXYuc2VudCgpLHYubGFiZWw9'@;
put 'ODtjYXNlIDg6cmV0dXJuIEg9Ti5pc0xvZ2dlZEluLEQuY2xvc2UoKSxIP3RoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXM5P1szLDEwXTpbNCx0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCldOlszLDEzXTtjYXNlIDk6di5zZW50KCksdi5sYWJlbD0xMDtjYXNlIDEwOnJl'@;
put 'dHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDExOnJldHVybiBnPXYuc2VudCgpLEM9Zy51c2VyTmFtZSxTPWcudXNlckxvbmdOYW1lLFs0LHRoaXMubG9naW5DYWxsYmFjaygpXTtjYXNlIDEyOnJldHVybiB2LnNlbnQoKSxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpDLHVz'@;
put 'ZXJMb25nTmFtZTpTfV07Y2FzZSAxMzpyZXR1cm5bMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XX19KX0pfSxvZS5wcm90b3R5cGUubG9nSW49ZnVuY3Rpb24oc2UsaGUpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxj'@;
put 'ZSxiLEQsSCxOLGcsQztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHVlPXtfc2VydmljZToiZGVmYXVsdCIsdXNlcm5hbWU6c2UscGFzc3dvcmQ6aGV9LHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsWzQsdGhpcy5j'@;
put 'aGVja1Nlc3Npb24oKV07Y2FzZSAxOnJldHVybiBjZT1TLnNlbnQoKSxiPWNlLmxvZ2luRm9ybSxEPWNlLnVzZXJMb25nTmFtZSxjZS5pc0xvZ2dlZEluPygoSy5sb2dnZXJ8fHopLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3Rz'@;
put 'IiksWzQsdGhpcy5sb2dpbkNhbGxiYWNrKCldKTpbMywzXTtjYXNlIDI6cmV0dXJuIFMuc2VudCgpLHRoaXMudXNlck5hbWU9dWUudXNlcm5hbWUsdGhpcy51c2VyTG9uZ05hbWU9RCxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVz'@;
put 'ZXJMb25nTmFtZX1dO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoYix1ZSldO2Nhc2UgNDpyZXR1cm4gSD1TLnNlbnQoKSwoTj10ZSh0aGlzLnNlcnZlclR5cGUsSCkpP1szLDldOmVlKEgpP1s0LHRoaXMuZ2V0TG9naW5Gb3JtKEgpXTpbMyw3XTtjYXNlIDU6cmV0dXJu'@;
put 'IGc9Uy5zZW50KCksWzQsdGhpcy5zZW5kTG9naW5SZXF1ZXN0KGcsdWUpXTtjYXNlIDY6SD1TLnNlbnQoKSxTLmxhYmVsPTc7Y2FzZSA3OnJldHVybls0LHRoaXMuY2hlY2tTZXNzaW9uKCldO2Nhc2UgODpDPVMuc2VudCgpLE49Qy5pc0xvZ2dlZEluLHRoaXMudXNlckxvbmdOYW1lPUMudXNl'@;
put 'ckxvbmdOYW1lLFMubGFiZWw9OTtjYXNlIDk6cmV0dXJuIE4/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhczk/WzMsMTFdOls0LHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKV06WzMsMTJdO2Nhc2UgMTA6Uy5zZW50KCksUy5sYWJlbD0xMTtjYXNlIDExOnRoaXMubG9n'@;
put 'aW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9dWUudXNlcm5hbWUsUy5sYWJlbD0xMjtjYXNlIDEyOnJldHVyblsyLHtpc0xvZ2dlZEluOk4sdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9XX19KX0pfSxvZS5wcm90b3R5cGUucGVyZm9ybUNB'@;
put 'U1NlY3VyaXR5Q2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHNlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL1NBU1N0'@;
put 'b3JlZFByb2Nlc3Mval9zcHJpbmdfY2FzX3NlY3VyaXR5X2NoZWNrIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL1NBU0xvZ29uL2xvZ2luP3NlcnZpY2U9Ii5jb25jYXQoc2UpLHZvaWQgMCkuY2F0Y2goZnVuY3Rpb24odWUpe2lmKCEodWUgaW5zdGFuY2VvZiBqLk5vdEZvdW5kRXJy'@;
put 'b3IpKXRocm93IHVlfSldO2Nhc2UgMTpyZXR1cm4gaGUuc2VudCgpLFsyXX19KX0pfSxvZS5wcm90b3R5cGUuc2VuZExvZ2luUmVxdWVzdD1mdW5jdGlvbihzZSxoZSl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9u'@;
put 'KEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLHt1c2VybmFtZTpoZS51c2VybmFtZSxwYXNzd29yZDpoZS5wYXNzd29yZH0sdm9p'@;
put 'ZCAwKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixELnNlbnQoKS5yZXN1bHRdO2Nhc2UgMjpmb3IoRyBpbiBzZSloZVtHXT1zZVtHXTtyZXR1cm4gYj0oMCxWLnNlcmlhbGl6ZSkoaGUpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwsYix2b2lkIDAsInRleHQvcGxh'@;
put 'aW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9KV19fSl9KX0sb2UucHJvdG90eXBlLmNoZWNrU2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZSxoZSx1'@;
put 'ZSxjZSxHO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmZldGNoVXNlck5hbWUoKV07Y2FzZSAxOnJldHVybiBzZT1iLnNlbnQoKSx1ZT1zZS51c2VyTmFtZSxjZT1zZS51c2VyTG9uZ05hbWUsRz1udWxsLChoZT1zZS5pc0xv'@;
put 'Z2dlZEluKT9bMyw0XTpbNCx0aGlzLmxvZ091dCgpXTtjYXNlIDI6cmV0dXJuIGIuc2VudCgpLFs0LHRoaXMuZ2V0TmV3TG9naW5Gb3JtKCldO2Nhc2UgMzpHPWIuc2VudCgpLGIubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIsUHJvbWlzZS5yZXNvbHZlKHtpc0xvZ2dlZEluOmhlLHVzZXJOYW1l'@;
put 'OnVlLHVzZXJMb25nTmFtZTpjZSxsb2dpbkZvcm06R30pXX19KX0pfSxvZS5wcm90b3R5cGUuZ2V0TmV3TG9naW5Gb3JtPWZ1bmN0aW9uKCl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5s'@;
put 'YWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzanM/WzIsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiLyIsdm9pZCAwKS50aGVuKGZ1bmN0aW9uKHVlKXt2YXIgY2UsYj1udWxsPT09KGNlPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNS'@;
put 'Ri1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyh1ZS5yZXN1bHQpKXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlWzFdO2ImJihkb2N1bWVudC5jb29raWU9Yil9KV06WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlz'@;
put 'LmxvZ2luVXJsLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpLHZvaWQgMCwidGV4dC9wbGFpbiIpXTtjYXNlIDE6cmV0dXJuIHNlPWhlLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5nZXRMb2dpbkZvcm0oc2UpXTtjYXNlIDI6cmV0dXJuWzIsaGUuc2VudCgp'@;
put 'XX19KX0pfSxvZS5wcm90b3R5cGUuZmV0Y2hVc2VyTmFtZT1mdW5jdGlvbigpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZSxoZSx1ZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9IiIuY29u'@;
put 'Y2F0KHRoaXMuc2VydmVyVXJsLHRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNWaXlhPyIvaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXIiOnRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXM5PyIvU0FTU3RvcmVkUHJvY2VzcyI6Ii9TQVNqc0FwaS9zZXNzaW9u'@;
put 'IiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChzZSx2b2lkIDAsInRleHQvcGxhaW4iKS5jYXRjaChmdW5jdGlvbihHKXtyZXR1cm57cmVzdWx0OiJhdXRoRXJyIn19KV07Y2FzZSAxOnJldHVybiBoZT1jZS5zZW50KCkucmVzdWx0LCh1ZT0iYXV0aEVyciIhPT1oZSk/WzMsM106WzQsdGhp'@;
put 'cy5sb2dPdXQoKV07Y2FzZSAyOnJldHVybiBjZS5zZW50KCksWzIse2lzTG9nZ2VkSW46dWUsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifV07Y2FzZSAzOnJldHVyblsyLHtpc0xvZ2dlZEluOnVlLHVzZXJOYW1lOnRoaXMuZXh0cmFjdFVzZXJOYW1lKGhlKSx1c2VyTG9uZ05hbWU6dGhp'@;
put 'cy5leHRyYWN0VXNlckxvbmdOYW1lKGhlKX1dfX0pfSl9LG9lLnByb3RvdHlwZS5nZXRMb2dpbkZvcm09ZnVuY3Rpb24oc2Upe3ZhciBoZT0vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29ufGxvZ2luKVteIl0qKS4qPi8uZXhlYyhzZSksdWU9e307aWYoaGUmJmhlLmxlbmd0aCl7dGhpcy5zZXRM'@;
put 'b2dpblVybChoZSk7dmFyIGNlPShzZT1zZS5yZXBsYWNlKC88aW5wdXQvZywiXG48aW5wdXQiKSkubWF0Y2goLzxpbnB1dC4qImhpZGRlbiJbXj5dKj4vZyk7Y2UmJmNlLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIGI9Ry5tYXRjaCgvbmFtZT0iKFteIl0qKSJcc3ZhbHVlPSIoW14iXSopLyk7'@;
put 'YiYmYi5sZW5ndGgmJih1ZVtiWzFdXT1iWzJdKX0pfXJldHVybiBPYmplY3Qua2V5cyh1ZSkubGVuZ3RoP3VlOm51bGx9LG9lLnByb3RvdHlwZS5sb2dPdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHNl'@;
put 'KXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyQ3NyZlRva2VucygpLFsyLHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dvdXRVcmwsdm9pZCAwKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KV19KX0pfSxvZX0oKTtPLkF1dGhNYW5hZ2VyPXE7dmFyIGVlPWZ1bmN0aW9u'@;
put 'KG9lKXtyZXR1cm4vQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdGhlIHN5c3RlbSB3YXMgdmVyaWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFzZSBlbnRlciB5b3VyIGNyZWRlbnRpYWxzIGFnYWluLi9nbS50ZXN0KG9lKX0sdGU9ZnVuY3Rpb24ob2Usc2Upe3JldHVybiBvZT09PUUuU2Vy'@;
put 'dmVyVHlwZS5TYXNqcz9zZT8ubG9nZ2VkaW46L1lvdSBoYXZlIHNpZ25lZCBpbi9nbS50ZXN0KHNlKX19LDU3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkp'@;
put 'KGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNl'@;
put 'PW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6'@;
put 'MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9'@;
put 'MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1z'@;
put 'ZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMp'@;
put 'Lmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhb'@;
put 'MV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1'@;
put 'JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO3ZhciBMPVIoOTc3'@;
put 'OCksaz1SKDkwMTcpLEU9UigzOTAwKTtPLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24oaixWLEIpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpyZXR1cm5b'@;
put 'NCxqLnBvc3QoIi9TQVNqc0FwaS9hdXRoL3Rva2VuIixYPXtjbGllbnRJZDpWLGNvZGU6Qn0sdm9pZCAwKS50aGVuKGZ1bmN0aW9uKHEpe3ZhciBlZT1xLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOmVlLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46ZWUucmVmcmVzaFRva2VufX0pLmNh'@;
put 'dGNoKGZ1bmN0aW9uKHEpe3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShxLCgwLGsuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclNhc2pzIixFLlNlcnZlclR5cGUuU2FzanMsIi9TQVNqc0FwaS9hdXRoL3Rva2Vu'@;
put 'IixYLFYpKX0pXTtjYXNlIDE6cmV0dXJuWzIsVS5zZW50KCldfX0pfSl9fSwzNTY5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNl'@;
put 'KSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gdGUoaGUpe3RyeXtzZShVLm5leHQoaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBvZShoZSl7dHJ5e3NlKFUudGhyb3coaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBzZShoZSl7dmFyIHVlO2hlLmRvbmU/cShoZS52YWx1'@;
put 'ZSk6KHVlPWhlLnZhbHVlLHVlIGluc3RhbmNlb2YgWD91ZTpuZXcgWChmdW5jdGlvbihjZSl7Y2UodWUpfSkpLnRoZW4odGUsb2UpfXNlKChVPVUuYXBwbHkoQixZfHxbXSkpLm5leHQoKSl9KX0sTD10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0'@;
put 'ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZWU9e25leHQ6b2UoMCksdGhyb3c6b2UoMSkscmV0dXJuOm9lKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZWVbU3ltYm9sLml0'@;
put 'ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZWU7ZnVuY3Rpb24gb2Uoc2Upe3JldHVybiBmdW5jdGlvbihoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtpZihYKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7'@;
put 'aWYoWD0xLFUmJihxPTImdWVbMF0/VS5yZXR1cm46dWVbMF0/VS50aHJvd3x8KChxPVUucmV0dXJuKSYmcS5jYWxsKFUpLDApOlUubmV4dCkmJiEocT1xLmNhbGwoVSx1ZVsxXSkpLmRvbmUpcmV0dXJuIHE7c3dpdGNoKFU9MCxxJiYodWU9WzImdWVbMF0scS52YWx1ZV0pLHVlWzBdKXtjYXNl'@;
put 'IDA6Y2FzZSAxOnE9dWU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTp1ZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxVPXVlWzFdLHVlPVswXTtjb250aW51ZTtjYXNlIDc6dWU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDpp'@;
put 'ZighKChxPShxPXRlLnRyeXMpLmxlbmd0aD4wJiZxW3EubGVuZ3RoLTFdKXx8NiE9PXVlWzBdJiYyIT09dWVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT11ZVswXSYmKCFxfHx1ZVsxXT5xWzBdJiZ1ZVsxXTxxWzNdKSl7dGUubGFiZWw9dWVbMV07YnJlYWt9aWYoNj09PXVlWzBdJiZ0ZS5s'@;
put 'YWJlbDxxWzFdKXt0ZS5sYWJlbD1xWzFdLHE9dWU7YnJlYWt9aWYocSYmdGUubGFiZWw8cVsyXSl7dGUubGFiZWw9cVsyXSx0ZS5vcHMucHVzaCh1ZSk7YnJlYWt9cVsyXSYmdGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWV9dWU9WS5jYWxsKEIsdGUpfWNhdGNoKGNlKXt1ZT1b'@;
put 'NixjZV0sVT0wfWZpbmFsbHl7WD1xPTB9aWYoNSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm57dmFsdWU6dWVbMF0/dWVbMV06dm9pZCAwLGRvbmU6ITB9fShbc2UsaGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRBY2Nlc3NUb2tl'@;
put 'bkZvclZpeWE9dm9pZCAwO3ZhciBrPVIoMzkwMCksRT1SKDk3NzgpLGo9UigxMzk1KSxWPVIoOTAxNyk7Ty5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2U7cmV0dXJu'@;
put 'IEwodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9dm9pZCAwPT09ej9idG9hKFkrIjoiK1gpOnouZnJvbShZKyI6IitYKS50b1N0cmluZygiYmFzZTY0IiksZWU9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsdGU9e0F1dGhvcml6YXRpb246IkJhc2lj'@;
put 'ICIrcSxBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifSxvZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6VX0pLHNlPW5ldyBVUkxTZWFyY2hQYXJhbXMob2UpLFs0LEIucG9zdChlZSxzZSx2b2lkIDAsImFwcGxpY2F0aW9uL3gtd3d3'@;
put 'LWZvcm0tdXJsZW5jb2RlZCIsdGUpLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiB1ZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbih1ZSl7dGhyb3cgdWUgaW5zdGFuY2VvZiBqLkNlcnRpZmljYXRlRXJyb3I/dWU6KDAsRS5wcmVmaXhNZXNzYWdlKSh1ZSwoMCxWLmdldFRva2VuUmVxdWVzdEVy'@;
put 'cm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixrLlNlcnZlclR5cGUuU2FzVml5YSxlZSxvZSx0ZSxZLFgpKX0pXTtjYXNlIDE6cmV0dXJuWzIsaGUuc2VudCgpXX19KX0pfX0sOTAxNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9Ty5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeD12b2lkIDA7dmFyIHo9UigzOTAwKSxLPWZ1bmN0aW9uKEwpe3JldHVybiJSZXNwb25zZSBmcm9t'@;
put 'ICIuY29uY2F0KEw9PT16LlNlcnZlclR5cGUuU2FzVml5YT8iVml5YSI6IlNhc2pzIiwiIGlzIGJlbG93LiIpfTtPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PWZ1bmN0aW9uKEwsayxFLGosVixCLFksWCl7dmFyIFU9ZnVuY3Rpb24oZWUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlZSxu'@;
put 'dWxsLDIpfSxxPVsiRXJyb3Igd2hpbGUgIi5jb25jYXQoTCwiIGZyb20gIikuY29uY2F0KGopLCJUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICIuY29uY2F0KGssIiBmdW5jdGlvbi4iKV07cmV0dXJuIFYmJihxLnB1c2goIlBheWxvYWQ6IikscS5wdXNoKFUoVikpKSxCJiYocS5wdXNo'@;
put 'KCJIZWFkZXJzOiIpLHEucHVzaChVKEIpKSksWSYmcS5wdXNoKCJDbGllbnRJZDogIi5jb25jYXQoWSkpLFgmJnEucHVzaCgiQ2xpZW50U2VjcmV0OiAiLmNvbmNhdChYKSkscS5wdXNoKCIiKSxxLnB1c2goIiIuY29uY2F0KEsoRSkpKSxxLnB1c2goIiIpLHEuam9pbigiXG4iKX0sTy5nZXRU'@;
put 'b2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPWZ1bmN0aW9uKEwsayl7cmV0dXJuIEwuc3BsaXQoIiIuY29uY2F0KEsoayksIlxuIikpLnBvcCgpfX0sNzA0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksTD10aGlzJiZ0aGlzLl9fYXdh'@;
put 'aXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Up'@;
put 'e3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0saz10aGlz'@;
put 'JiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJl'@;
put 'dHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUp'@;
put 'cmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29u'@;
put 'dGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVl'@;
put 'fHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVh'@;
put 'a31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFto'@;
put 'ZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFRva2Vucz12b2lkIDA7dmFyIEU9Uig2Nzk5KSxqPVIoMzkwMCksVj1SKDM2NiksQj1SKDI0OSk7Ty5nZXRUb2tlbnM9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiB2b2lkIDA9PT1V'@;
put 'JiYoVT1qLlNlcnZlclR5cGUuU2FzVml5YSksTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZSx1ZSxjZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6aWYocT16LmxvZ2dlcnx8Syx0ZT1YLnJlZnJlc2hfdG9r'@;
put 'ZW4sb2U9WC5jbGllbnQsc2U9WC5zZWNyZXQsISgwLEUuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShlZT1YLmFjY2Vzc190b2tlbikmJiEoMCxFLmlzUmVmcmVzaFRva2VuRXhwaXJpbmcpKHRlKSlyZXR1cm5bMyw1XTtpZigoMCxFLmhhc1Rva2VuRXhwaXJlZCkodGUpKXRocm93IHEuZXJyb3Io'@;
put 'IlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiIpLG5ldyBFcnJvcigiVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIik7cmV0dXJuIHEuaW5mbygi'@;
put 'UmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLFUhPT1qLlNlcnZlclR5cGUuU2FzVml5YT9bMywyXTpbNCwoMCxWLnJlZnJlc2hUb2tlbnNGb3JWaXlhKShZLG9lLHNlLHRlKV07Y2FzZSAxOnJldHVybiBjZT1HLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJuWzQsKDAs'@;
put 'Qi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKFksdGUpXTtjYXNlIDM6Y2U9Ry5zZW50KCksRy5sYWJlbD00O2Nhc2UgNDplZT0odWU9Y2UpLmFjY2Vzc190b2tlbix0ZT11ZS5yZWZyZXNoX3Rva2VuLEcubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzIse2FjY2Vzc190b2tlbjplZSxyZWZyZXNoX3Rv'@;
put 'a2VuOnRlLGNsaWVudDpvZSxzZWNyZXQ6c2V9XX19KX0pfX0sMTUyNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihMLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmpl'@;
put 'Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01vZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChWPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLGos'@;
put 'Vil9OmZ1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihqPUUpLExbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEwsayl7Zm9yKHZhciBFIGluIEwpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8'@;
put 'fHooayxMLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDI4NTEpLE8pLEsoUig5MDk3KSxPKSxLKFIoOTE2NiksTyl9LDkwOTc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9dm9pZCAwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9ZnVuY3Rpb24oUil7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoUil9fSw5MTY2OihNLE8pPT57'@;
put 'InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsTy5pc0xvZ0luUmVxdWlyZWQ9ZnVuY3Rpb24oUil7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVteIl0qKS4q'@;
put 'Pi9nbS50ZXN0KFIpfX0sNTQxODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLGosVixCKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIFUodGUpe3RyeXtlZShCLm5leHQo'@;
put 'dGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIHEodGUpe3RyeXtlZShCLnRocm93KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBlZSh0ZSl7dmFyIG9lO3RlLmRvbmU/WSh0ZS52YWx1ZSk6KG9lPXRlLnZhbHVlLG9lIGluc3RhbmNlb2YgVj9vZTpuZXcgVihmdW5jdGlvbihz'@;
put 'ZSl7c2Uob2UpfSkpLnRoZW4oVSxxKX1lZSgoQj1CLmFwcGx5KEUsanx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJllbMF0pdGhyb3cgWVsxXTtyZXR1cm4g'@;
put 'WVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBYPXtuZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWDtmdW5jdGlvbiBxKGVlKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihvZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtVOyl0cnl7aWYoVj0xLEImJihZPTImb2VbMF0/Qi5yZXR1cm46b2VbMF0/Qi50aHJvd3x8KChZPUIucmV0dXJuKSYmWS5j'@;
put 'YWxsKEIpLDApOkIubmV4dCkmJiEoWT1ZLmNhbGwoQixvZVsxXSkpLmRvbmUpcmV0dXJuIFk7c3dpdGNoKEI9MCxZJiYob2U9WzImb2VbMF0sWS52YWx1ZV0pLG9lWzBdKXtjYXNlIDA6Y2FzZSAxOlk9b2U7YnJlYWs7Y2FzZSA0OnJldHVybiBVLmxhYmVsKysse3ZhbHVlOm9lWzFdLGRvbmU6'@;
put 'ITF9O2Nhc2UgNTpVLmxhYmVsKyssQj1vZVsxXSxvZT1bMF07Y29udGludWU7Y2FzZSA3Om9lPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFk9KFk9VS50cnlzKS5sZW5ndGg+MCYmWVtZLmxlbmd0aC0xXSl8fDYhPT1vZVswXSYmMiE9PW9lWzBdKSl7'@;
put 'VT0wO2NvbnRpbnVlfWlmKDM9PT1vZVswXSYmKCFZfHxvZVsxXT5ZWzBdJiZvZVsxXTxZWzNdKSl7VS5sYWJlbD1vZVsxXTticmVha31pZig2PT09b2VbMF0mJlUubGFiZWw8WVsxXSl7VS5sYWJlbD1ZWzFdLFk9b2U7YnJlYWt9aWYoWSYmVS5sYWJlbDxZWzJdKXtVLmxhYmVsPVlbMl0sVS5v'@;
put 'cHMucHVzaChvZSk7YnJlYWt9WVsyXSYmVS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfW9lPWouY2FsbChFLFUpfWNhdGNoKHNlKXtvZT1bNixzZV0sQj0wfWZpbmFsbHl7Vj1ZPTB9aWYoNSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm57dmFsdWU6b2VbMF0/b2VbMV06dm9pZCAw'@;
put 'LGRvbmU6ITB9fShbZWUsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5vcGVuV2ViUGFnZT12b2lkIDA7dmFyIEw9UigxMjEwKSxrPXt3aWR0aDo1MDAsaGVpZ2h0OjYwMH07Ty5vcGVuV2ViUGFnZT1mdW5jdGlvbihFLGosVixCKXty'@;
put 'ZXR1cm4gdm9pZCAwPT09aiYmKGo9IiIpLHZvaWQgMD09PVYmJihWPWspLHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFksWCxVLHEsZWU7cmV0dXJuIEsodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIFk9Vi53aWR0aCxYPVYuaGVp'@;
put 'Z2h0LFU9c2NyZWVuLndpZHRoLzItWS8yLHE9c2NyZWVuLmhlaWdodC8yLVgvMiwoZWU9d2luZG93Lm9wZW4oRSxqLCJ0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9Ii5jb25jYXQoWSwiLGhlaWdodD0iKS5jb25jYXQoWCwiLGxlZnQ9IikuY29uY2F0KFUsIix0b3A9Iiku'@;
put 'Y29uY2F0KHEpKSk/WzMsMl06WzQsKEI/P0wub3BlbkxvZ2luUHJvbXB0KSgpXTtjYXNlIDE6cmV0dXJuWzIsdGUuc2VudCgpP3dpbmRvdy5vcGVuKEUsaiwidG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSIuY29uY2F0KFksIixoZWlnaHQ9IikuY29uY2F0KFgsIixsZWZ0'@;
put 'PSIpLmNvbmNhdChVLCIsdG9wPSIpLmNvbmNhdChxKSk6bnVsbF07Y2FzZSAyOnJldHVyblsyLGVlXX19KX0pfX0sMjQ5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJv'@;
put 'bWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1'@;
put 'ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17'@;
put 'bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRv'@;
put 'cl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEs'@;
put 'WSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNl'@;
put 'IDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1x'@;
put 'LnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxh'@;
put 'YmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9'@;
put 'MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz12b2lkIDA7dmFyIEw9'@;
put 'Uig5Nzc4KSxrPVIoOTAxNyksRT1SKDM5MDApO08ucmVmcmVzaFRva2Vuc0ZvclNhc2pzPWZ1bmN0aW9uKGosVil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGou'@;
put 'cG9zdCgiL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAse0F1dGhvcml6YXRpb246IkJlYXJlciAiK1Z9KS50aGVuKGZ1bmN0aW9uKFUpe3ZhciBxPVUucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46cS5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOnEucmVm'@;
put 'cmVzaFRva2VufX0pLmNhdGNoKGZ1bmN0aW9uKFUpe3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShVLCgwLGsuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsRS5TZXJ2ZXJUeXBlLlNhc2pzLCIvU0FTanNBcGkv'@;
put 'YXV0aC9yZWZyZXNoIikpfSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKV19fSl9KX19LDM2NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBuZXcoVXx8KFU9'@;
put 'UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIHNlKHVlKXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2YXIgY2U7dWUuZG9uZT9l'@;
put 'ZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKG9lLHNlKX1oZSgocT1xLmFwcGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LEw9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWSxYKXt2YXIgVSxx'@;
put 'LGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVlWzFdO3JldHVybiBlZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih0'@;
put 'ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlvbiBzZShoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zv'@;
put 'cig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChlZT1xLnJldHVybikmJmVlLmNhbGwocSksMCk6cS5uZXh0KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBlZTtzd2l0Y2gocT0wLGVlJiYoY2U9WzImY2VbMF0sZWUu'@;
put 'dmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIG9lLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9wKCksb2UudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVbZWUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtvZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNdKSl7b2UubGFiZWw9Y2Vb'@;
put 'MV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0sZWU9Y2U7YnJlYWt9aWYoZWUmJm9lLmxhYmVsPGVlWzJdKXtvZS5sYWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRp'@;
put 'bnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksTy5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7dmFyIGs9UigzOTAwKSxFPVIoOTc3OCksaj1SKDYyMzApLFY9Uig1OTI4KSxCPVIoOTAxNyk7Ty5yZWZyZXNoVG9rZW5zRm9yVml5YT1mdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2Usc2U7cmV0dXJuIEwodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6aWYoISgwLFYuaXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUgdXNl'@;
put 'ZCBieSBOb2RlLiIpO3JldHVybiBlZT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIix0ZT12b2lkIDA9PT16P2J0b2EoWCsiOiIrVSk6ei5mcm9tKFgrIjoiK1UpLnRvU3RyaW5nKCJiYXNlNjQiKSxvZT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIit0ZX0sKHNlPW5ldyBqKS5hcHBlbmQoImdyYW50'@;
put 'X3R5cGUiLCJyZWZyZXNoX3Rva2VuIiksc2UuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixxKSxbNCxZLnBvc3QoZWUsc2Usdm9pZCAwLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK3NlLl9ib3VuZGFyeSxvZSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlc3VsdH0pLmNh'@;
put 'dGNoKGZ1bmN0aW9uKHVlKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkodWUsKDAsQi5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLGsuU2VydmVyVHlwZS5TYXNWaXlhLGVlLHNlLG9lLFgsVSkpfSldO2Nhc2Ug'@;
put 'MTpyZXR1cm5bMixoZS5zZW50KCldfX0pfSl9fSw0NTgyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGssRSxqLFYpe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKEIsWSl7ZnVuY3Rpb24gWChlZSl7'@;
put 'dHJ5e3EoVi5uZXh0KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBVKGVlKXt0cnl7cShWLnRocm93KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBxKGVlKXt2YXIgdGU7ZWUuZG9uZT9CKGVlLnZhbHVlKToodGU9ZWUudmFsdWUsdGUgaW5zdGFuY2VvZiBqP3RlOm5ldyBq'@;
put 'KGZ1bmN0aW9uKG9lKXtvZSh0ZSl9KSkudGhlbihYLFUpfXEoKFY9Vi5hcHBseShrLEV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFksWD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZCWzBdKXRocm93IEJb'@;
put 'MV07cmV0dXJuIEJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWT17bmV4dDpVKDApLHRocm93OlUoMSkscmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihZW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFk7ZnVuY3Rpb24gVShxKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtYOyl0cnl7aWYoaj0xLFYmJihCPTImdGVbMF0/Vi5yZXR1cm46dGVbMF0/Vi50aHJvd3x8KChCPVYucmV0'@;
put 'dXJuKSYmQi5jYWxsKFYpLDApOlYubmV4dCkmJiEoQj1CLmNhbGwoVix0ZVsxXSkpLmRvbmUpcmV0dXJuIEI7c3dpdGNoKFY9MCxCJiYodGU9WzImdGVbMF0sQi52YWx1ZV0pLHRlWzBdKXtjYXNlIDA6Y2FzZSAxOkI9dGU7YnJlYWs7Y2FzZSA0OnJldHVybiBYLmxhYmVsKysse3ZhbHVlOnRl'@;
put 'WzFdLGRvbmU6ITF9O2Nhc2UgNTpYLmxhYmVsKyssVj10ZVsxXSx0ZT1bMF07Y29udGludWU7Y2FzZSA3OnRlPVgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9WC50cnlzKS5sZW5ndGg+MCYmQltCLmxlbmd0aC0xXSl8fDYhPT10ZVswXSYmMiE9'@;
put 'PXRlWzBdKSl7WD0wO2NvbnRpbnVlfWlmKDM9PT10ZVswXSYmKCFCfHx0ZVsxXT5CWzBdJiZ0ZVsxXTxCWzNdKSl7WC5sYWJlbD10ZVsxXTticmVha31pZig2PT09dGVbMF0mJlgubGFiZWw8QlsxXSl7WC5sYWJlbD1CWzFdLEI9dGU7YnJlYWt9aWYoQiYmWC5sYWJlbDxCWzJdKXtYLmxhYmVs'@;
put 'PUJbMl0sWC5vcHMucHVzaCh0ZSk7YnJlYWt9QlsyXSYmWC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlfXRlPUUuY2FsbChrLFgpfWNhdGNoKG9lKXt0ZT1bNixvZV0sVj0wfWZpbmFsbHl7aj1CPTB9aWYoNSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm57dmFsdWU6dGVbMF0/dGVb'@;
put 'MV06dm9pZCAwLGRvbmU6ITB9fShbcSxlZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnZlcmlmeVNhczlMb2dpbj12b2lkIDA7dmFyIEw9Uig1OTI4KTtPLnZlcmlmeVNhczlMb2dpbj1mdW5jdGlvbihrKXtyZXR1cm4geih0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRSxqLFY7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihCKXtzd2l0Y2goQi5sYWJlbCl7Y2FzZSAwOkU9ITEsaj1uZXcgRGF0ZSxWPTAsQi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm5bNCwoMCxMLmRlbGF5KSgxZTMpXTtjYXNlIDI6aWYoQi5zZW50KCks'@;
put 'ay5jbG9zZWQpcmV0dXJuWzMsNF07RT1rLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpJiZrLndpbmRvdy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dC5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpLFY9KChuZXcgRGF0ZSkudmFsdWVPZigpLWoudmFsdWVP'@;
put 'ZigpKS8xZTMsQi5sYWJlbD0zO2Nhc2UgMzppZighRSYmVjwzMDApcmV0dXJuWzMsMV07Qi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMix7aXNMb2dnZWRJbjpFfV19fSl9KX19LDY1NDc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVu'@;
put 'Y3Rpb24oayxFLGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oQixZKXtmdW5jdGlvbiBYKGVlKXt0cnl7cShWLm5leHQoZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIFUoZWUpe3RyeXtxKFYudGhyb3coZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9u'@;
put 'IHEoZWUpe3ZhciB0ZTtlZS5kb25lP0IoZWUudmFsdWUpOih0ZT1lZS52YWx1ZSx0ZSBpbnN0YW5jZW9mIGo/dGU6bmV3IGooZnVuY3Rpb24ob2Upe29lKHRlKX0pKS50aGVuKFgsVSl9cSgoVj1WLmFwcGx5KGssRXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8'@;
put 'ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIsWSxYPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0pdGhyb3cgQlsxXTtyZXR1cm4gQlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbihlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihqKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGlu'@;
put 'Zy4iKTtmb3IoO1g7KXRyeXtpZihqPTEsViYmKEI9MiZ0ZVswXT9WLnJldHVybjp0ZVswXT9WLnRocm93fHwoKEI9Vi5yZXR1cm4pJiZCLmNhbGwoViksMCk6Vi5uZXh0KSYmIShCPUIuY2FsbChWLHRlWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goVj0wLEImJih0ZT1bMiZ0ZVswXSxCLnZh'@;
put 'bHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Qj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFgubGFiZWwrKyx7dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1OlgubGFiZWwrKyxWPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9WC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRp'@;
put 'bnVlO2RlZmF1bHQ6aWYoISgoQj0oQj1YLnRyeXMpLmxlbmd0aD4wJiZCW0IubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVbMF0pKXtYPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIUJ8fHRlWzFdPkJbMF0mJnRlWzFdPEJbM10pKXtYLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10'@;
put 'ZVswXSYmWC5sYWJlbDxCWzFdKXtYLmxhYmVsPUJbMV0sQj10ZTticmVha31pZihCJiZYLmxhYmVsPEJbMl0pe1gubGFiZWw9QlsyXSxYLm9wcy5wdXNoKHRlKTticmVha31CWzJdJiZYLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWV9dGU9RS5jYWxsKGssWCl9Y2F0Y2gob2Upe3Rl'@;
put 'PVs2LG9lXSxWPTB9ZmluYWxseXtqPUI9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLGVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNMb2dnZWRJblNB'@;
put 'U1ZJWUE9Ty52ZXJpZnlTYXNWaXlhTG9naW49dm9pZCAwO3ZhciBMPVIoNTkyOCk7Ty52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24oayl7dmFyIEUsajtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVixCLFksWDtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFUp'@;
put 'e3N3aXRjaChVLmxhYmVsKXtjYXNlIDA6Vj0hMSxCPW5ldyBEYXRlLFk9MCxVLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LCgwLEwuZGVsYXkpKDFlMyldO2Nhc2UgMjppZihVLnNlbnQoKSxrLmNsb3NlZClyZXR1cm5bMyw0XTtWPSgwLE8uaXNMb2dnZWRJblNBU1ZJWUEpKCksWT0oKG5ldyBE'@;
put 'YXRlKS52YWx1ZU9mKCktQi52YWx1ZU9mKCkpLzFlMyxVLmxhYmVsPTM7Y2FzZSAzOmlmKCFWJiZZPDMwMClyZXR1cm5bMywxXTtVLmxhYmVsPTQ7Y2FzZSA0Olg9ITEsQj1uZXcgRGF0ZSxVLmxhYmVsPTU7Y2FzZSA1OnJldHVybls0LCgwLEwuZGVsYXkpKDFlMyldO2Nhc2UgNjppZihVLnNl'@;
put 'bnQoKSxrLmNsb3NlZClyZXR1cm5bMyw4XTtYPWsud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KGo9bnVsbD09PShFPWsud2luZG93LmRvY3VtZW50LmJvZHkpfHx2b2lkIDA9PT1FP3ZvaWQgMDpFLmlubmVyVGV4dCl8fHZvaWQgMD09PWo/dm9p'@;
put 'ZCAwOmouaW5jbHVkZXMoIllvdSBoYXZlIHNpZ25lZCBpbi4iKSksWT0oKG5ldyBEYXRlKS52YWx1ZU9mKCktQi52YWx1ZU9mKCkpLzFlMyxVLmxhYmVsPTc7Y2FzZSA3OmlmKCFYJiZZPDMwMClyZXR1cm5bMyw1XTtVLmxhYmVsPTg7Y2FzZSA4OnJldHVyblsyLHtpc0xvZ2dlZEluOlYmJlh9'@;
put 'XX19KX0pfSxPLmlzTG9nZ2VkSW5TQVNWSVlBPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygiQ3VycmVudC1Vc2VyIikmJmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygidXNlcklkIil9fSw0MDM3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT12b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNTkyOCk7Ty5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPWZ1bmN0aW9uKEwsayl7Zm9yKHZhciBFIGluIGspaWYoQXJyYXkuaXNBcnJheShr'@;
put 'W0VdKSl7dmFyIGo9RSxWPSgwLHouY29udmVydFRvQ1NWKShrLEUpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1WKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZigoMCxL'@;
put 'LmlzTm9kZSkoKSlMLmFwcGVuZChqLFYse2ZpbGVuYW1lOiIiLmNvbmNhdChqLCIuY3N2IiksY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtlbHNle3ZhciBCPW5ldyBCbG9iKFtWXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO0wuYXBwZW5kKGosQiwiIi5jb25jYXQoaiwiLmNz'@;
put 'diIpKX19cmV0dXJuIEx9fSwyMTcwOihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO3ZhciB6PVIoMjQwMiksSz1SKDQ3OTkpO08uZ2VuZXJhdGVUYWJs'@;
put 'ZVVwbG9hZEZvcm09ZnVuY3Rpb24oTCxrKXt2YXIgRT1bXSxqPXt9LFY9MDtmb3IodmFyIEIgaW4gayl7VisrLCgwLHouaXNGb3JtYXRzVGFibGUpKEIpfHxFLnB1c2goQik7dmFyIFk9KDAsei5jb252ZXJ0VG9DU1YpKGssQik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO1kubGVuZ3RoPjE2ZTM/KDAsSy5zcGxpdENodW5rcykoWSkubWFwKGZ1bmN0aW9uKFgpe0wuYXBwZW5kKCJzYXNqcyIuY29uY2F0KFYsImRhdGEi'@;
put 'KSxYKX0pOmpbInNhc2pzIi5jb25jYXQoViwiZGF0YSIpXT1ZfXJldHVybiBqLnNhc2pzX3RhYmxlcz1FLmpvaW4oIiAiKSx7Zm9ybURhdGE6TCxyZXF1ZXN0UGFyYW1zOmp9fX0sMzYwNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5k'@;
put 'aW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihrLEUsaixWKXt2b2lkIDA9PT1WJiYoVj1qKTt2YXIgQj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUsaik7QiYmISgiZ2V0ImluIEI/IUUuX19lc01vZHVsZTpCLndyaXRhYmxlfHxCLmNvbmZpZ3VyYWJsZSl8fChCPXtlbnVt'@;
put 'ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFW2pdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLFYsQil9OmZ1bmN0aW9uKGssRSxqLFYpe3ZvaWQgMD09PVYmJihWPWopLGtbVl09RVtqXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGssRSl7Zm9yKHZh'@;
put 'ciBqIGluIGspImRlZmF1bHQiPT09anx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsail8fHooRSxrLGopfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEw9Uig1OTU2KTtLKFIoMTIzMCksTyksSyhSKDEzOTUpLE8p'@;
put 'LEsoUig5ODIxKSxPKSxLKFIoODMwNiksTyksSyhSKDM0NjcpLE8pLEsoUigzNjAyKSxPKSxPLmRlZmF1bHQ9TC5kZWZhdWx0fSwxNTcwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oQixZKXtyZXR1cm4oej1P'@;
put 'YmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oWCxVKXtYLl9fcHJvdG9fXz1VfXx8ZnVuY3Rpb24oWCxVKXtmb3IodmFyIHEgaW4gVSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxxKSYmKFhbcV09VVtx'@;
put 'XSl9KShCLFkpfSxmdW5jdGlvbihCLFkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBZJiZudWxsIT09WSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFkpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFgoKXt0aGlzLmNv'@;
put 'bnN0cnVjdG9yPUJ9eihCLFkpLEIucHJvdG90eXBlPW51bGw9PT1ZP09iamVjdC5jcmVhdGUoWSk6KFgucHJvdG90eXBlPVkucHJvdG90eXBlLG5ldyBYKX0pLEw9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkpKGZ1bmN0'@;
put 'aW9uKHEsZWUpe2Z1bmN0aW9uIHRlKGhlKXt0cnl7c2UoVS5uZXh0KGhlKSl9Y2F0Y2godWUpe2VlKHVlKX19ZnVuY3Rpb24gb2UoaGUpe3RyeXtzZShVLnRocm93KGhlKSl9Y2F0Y2godWUpe2VlKHVlKX19ZnVuY3Rpb24gc2UoaGUpe3ZhciB1ZTtoZS5kb25lP3EoaGUudmFsdWUpOih1ZT1o'@;
put 'ZS52YWx1ZSx1ZSBpbnN0YW5jZW9mIFg/dWU6bmV3IFgoZnVuY3Rpb24oY2Upe2NlKHVlKX0pKS50aGVuKHRlLG9lKX1zZSgoVT1VLmFwcGx5KEIsWXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oQixZKXt2YXIgWCxVLHEsZWUsdGU9e2xhYmVs'@;
put 'OjAsc2VudDpmdW5jdGlvbigpe2lmKDEmcVswXSl0aHJvdyBxWzFdO3JldHVybiBxWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGVlPXtuZXh0Om9lKDApLHRocm93Om9lKDEpLHJldHVybjpvZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGVlW1N5bWJvbC5pdGVyYXRvcl09'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGVlO2Z1bmN0aW9uIG9lKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7aWYoWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt0ZTspdHJ5e2lmKFg9MSxV'@;
put 'JiYocT0yJnVlWzBdP1UucmV0dXJuOnVlWzBdP1UudGhyb3d8fCgocT1VLnJldHVybikmJnEuY2FsbChVKSwwKTpVLm5leHQpJiYhKHE9cS5jYWxsKFUsdWVbMV0pKS5kb25lKXJldHVybiBxO3N3aXRjaChVPTAscSYmKHVlPVsyJnVlWzBdLHEudmFsdWVdKSx1ZVswXSl7Y2FzZSAwOmNhc2Ug'@;
put 'MTpxPXVlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGUubGFiZWwrKyx7dmFsdWU6dWVbMV0sZG9uZTohMX07Y2FzZSA1OnRlLmxhYmVsKyssVT11ZVsxXSx1ZT1bMF07Y29udGludWU7Y2FzZSA3OnVlPXRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgocT0o'@;
put 'cT10ZS50cnlzKS5sZW5ndGg+MCYmcVtxLmxlbmd0aC0xXSl8fDYhPT11ZVswXSYmMiE9PXVlWzBdKSl7dGU9MDtjb250aW51ZX1pZigzPT09dWVbMF0mJighcXx8dWVbMV0+cVswXSYmdWVbMV08cVszXSkpe3RlLmxhYmVsPXVlWzFdO2JyZWFrfWlmKDY9PT11ZVswXSYmdGUubGFiZWw8cVsx'@;
put 'XSl7dGUubGFiZWw9cVsxXSxxPXVlO2JyZWFrfWlmKHEmJnRlLmxhYmVsPHFbMl0pe3RlLmxhYmVsPXFbMl0sdGUub3BzLnB1c2godWUpO2JyZWFrfXFbMl0mJnRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlfXVlPVkuY2FsbChCLHRlKX1jYXRjaChjZSl7dWU9WzYsY2VdLFU9'@;
put 'MH1maW5hbGx5e1g9cT0wfWlmKDUmdWVbMF0pdGhyb3cgdWVbMV07cmV0dXJue3ZhbHVlOnVlWzBdP3VlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3NlLGhlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQ29tcHV0ZUpvYkV4ZWN1dG9yPXZv'@;
put 'aWQgMDt2YXIgRT1SKDM5MDApLGo9UigxMzk1KSxWPWZ1bmN0aW9uKEIpe2Z1bmN0aW9uIFkoWCxVKXt2YXIgcT1CLmNhbGwodGhpcyxYLEUuU2VydmVyVHlwZS5TYXNWaXlhKXx8dGhpcztyZXR1cm4gcS5zYXNWaXlhQXBpQ2xpZW50PVUscX1yZXR1cm4gSyhZLEIpLFkucHJvdG90eXBlLmV4'@;
put 'ZWN1dGU9ZnVuY3Rpb24oWCxVLHEsZWUsdGUpe3JldHVybiBMKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxoZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odWUpe3JldHVybiBvZT1lZXx8ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LFsyLG5l'@;
put 'dyBQcm9taXNlKGZ1bmN0aW9uKGNlLEcpe3ZhciBiO251bGw9PT0oYj1oZS5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Ynx8Yi5leGVjdXRlQ29tcHV0ZUpvYihYLHEuY29udGV4dE5hbWUscS5kZWJ1ZyxVLHRlLCEwLCEwKS50aGVuKGZ1bmN0aW9uKEQpe2hlLnNhc1ZpeWFBcGlDbGll'@;
put 'bnQuYXBwZW5kUmVxdWVzdChELFgscS5kZWJ1ZyksY2UoRC5yZXN1bHQpfSkuY2F0Y2goZnVuY3Rpb24oRCl7cmV0dXJuIEwoaGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVy'@;
put 'biBEIGluc3RhbmNlb2Ygai5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChELFgscS5kZWJ1ZyksRyhuZXcgai5FcnJvclJlc3BvbnNlKEQ/Lm1lc3NhZ2UsRCkpKSxEIGluc3RhbmNlb2Ygai5Mb2dpblJlcXVpcmVkRXJyb3I/'@;
put 'KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gSC5leGVjdXRlKFgsVSxxLGVlKS50aGVuKGZ1bmN0aW9uKGcpe2NlKGcpfSxmdW5jdGlvbihnKXtHKGcpfSl9KSxbNCxvZSgpXSk6WzMsMl07Y2FzZSAxOnJldHVybiBOLnNlbnQoKSxbMywzXTtjYXNlIDI6Ryhu'@;
put 'ZXcgai5FcnJvclJlc3BvbnNlKEQ/Lm1lc3NhZ2UsRCkpLE4ubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LFl9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLkNvbXB1dGVKb2JFeGVjdXRvcj1WfSwzNDkxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oWSxYKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oVSxxKXtVLl9fcHJvdG9fXz1xfXx8ZnVuY3Rpb24oVSxxKXtmb3IodmFyIGVlIGlu'@;
put 'IHEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsZWUpJiYoVVtlZV09cVtlZV0pfSkoWSxYKX0sZnVuY3Rpb24oWSxYKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgWCYmbnVsbCE9PVgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmlu'@;
put 'ZyhYKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBVKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ZfXooWSxYKSxZLnByb3RvdHlwZT1udWxsPT09WD9PYmplY3QuY3JlYXRlKFgpOihVLnByb3RvdHlwZT1YLnByb3RvdHlwZSxuZXcgVSl9KSxMPXRoaXMmJnRoaXMuX19h'@;
put 'd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChj'@;
put 'ZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxrPXRo'@;
put 'aXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSks'@;
put 'cmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9u'@;
put 'ZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtj'@;
put 'b250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJigh'@;
put 'ZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2Jy'@;
put 'ZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0o'@;
put 'W2hlLHVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uRmlsZVVwbG9hZGVyPXZvaWQgMDt2YXIgRT1SKDU5MjgpLGo9UigxMzk1KSxWPVIoMzkwMCksQj1mdW5jdGlvbihZKXtmdW5jdGlvbiBYKFUscSxlZSx0ZSl7dmFyIG9lPVkuY2Fs'@;
put 'bCh0aGlzLFUscSl8fHRoaXM7cmV0dXJuIG9lLmpvYnNQYXRoPWVlLG9lLnJlcXVlc3RDbGllbnQ9dGUsb2V9cmV0dXJuIEsoWCxZKSxYLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKFUscSxlZSx0ZSl7cmV0dXJuIEwodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNl'@;
put 'LGhlLHVlLGNlLEcsYixELEgsTixnLEMsUyxwPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih3KXtpZihvZT1xLmZpbGVzLHNlPXEucGFyYW1zLGhlPXRlfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sIW9lPy5sZW5ndGgpdGhyb3cgbmV3IGouRXJyb3JSZXNwb25z'@;
put 'ZSgiQXQgbGVhc3Qgb25lIGZpbGUgbXVzdCBiZSBwcm92aWRlZC4iKTtpZighVXx8IiI9PT1VKXRocm93IG5ldyBqLkVycm9yUmVzcG9uc2UoInNhc0pvYiBtdXN0IGJlIHByb3ZpZGVkLiIpO2ZvcihjZSBpbiB1ZT0iIixzZSlzZS5oYXNPd25Qcm9wZXJ0eShjZSkmJih1ZSs9IiYiLmNvbmNh'@;
put 'dChjZSwiPSIpLmNvbmNhdChzZVtjZV0pKTtmb3IoRz1lZS5hcHBMb2M/ZWUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrVS5yZXBsYWNlKC9eXC8vLCIiKTpVLGI9IiIuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3JhbT0iK0cpLmNvbmNhdCh1ZSksRD1uZXcg'@;
put 'Rm9ybURhdGEsSD0wLE49b2U7SDxOLmxlbmd0aDtIKyspRC5hcHBlbmQoImZpbGUiLChnPU5bSF0pLmZpbGUsZy5maWxlTmFtZSk7cmV0dXJuKEM9dGhpcy5yZXF1ZXN0Q2xpZW50LmdldENzcmZUb2tlbigiZmlsZSIpKSYmRC5hcHBlbmQoIl9jc3JmIixDLnZhbHVlKSxlZS5kZWJ1ZyYmRC5h'@;
put 'cHBlbmQoIl9kZWJ1ZyIsIjEzMSIpLGVlLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YSYmZWUuY29udGV4dE5hbWUmJkQuYXBwZW5kKCJfY29udGV4dG5hbWUiLGVlLmNvbnRleHROYW1lKSxTPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRl'@;
put 'bnQtVHlwZSI6InRleHQvcGxhaW4ifSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihKLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdChiLEQsdm9pZCAwLCJhcHBsaWNhdGlvbi9qc29uIixTKS50aGVuKGZ1bmN0aW9uKGRlKXtyZXR1cm4gTChwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'ZmU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsVSxlZS5kZWJ1ZyksZmU9ZGUucmVzdWx0LCFlZS5kZWJ1ZylyZXR1cm5bMyw2XTtzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtj'@;
put 'YXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVyblszLDFdO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuWzMsM107Y2FzZSBWLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuWzMsNF19cmV0dXJuWzMsNV07Y2FzZSAxOnJldHVybls0LCgwLEUucGFyc2VTYXNWaXlhRGVidWdSZXNwb25z'@;
put 'ZSkoZGUucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCxlZS5zZXJ2ZXJVcmwpXTtjYXNlIDI6cmV0dXJuIGZlPXhlLnNlbnQoKSxbMyw1XTtjYXNlIDM6cmV0dXJuIGZlPSJzdHJpbmciPT10eXBlb2YgZGUucmVzdWx0PygwLEUucGFyc2VXZWJvdXRSZXNwb25zZSkoZGUucmVzdWx0LGIpOmRl'@;
put 'LnJlc3VsdCxbMyw1XTtjYXNlIDQ6cmV0dXJuIGZlPSJzdHJpbmciPT10eXBlb2YgZGUucmVzdWx0PygwLEUuZ2V0VmFsaWRKc29uKShkZS5yZXN1bHQpOmRlLnJlc3VsdCxbMyw1XTtjYXNlIDU6cmV0dXJuWzMsN107Y2FzZSA2OmZlPSJzdHJpbmciPT10eXBlb2YgZGUucmVzdWx0PygwLEUu'@;
put 'Z2V0VmFsaWRKc29uKShkZS5yZXN1bHQpOmRlLnJlc3VsdCx4ZS5sYWJlbD03O2Nhc2UgNzpyZXR1cm4gSihmZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbihkZSl7cmV0dXJuIEwocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlv'@;
put 'bih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGRlIGluc3RhbmNlb2Ygai5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLFUsZWUuZGVidWcpLG5lKG5ldyBqLkVycm9yUmVzcG9uc2UoZGU/Lm1lc3NhZ2UsZGUpKSksZGUg'@;
put 'aW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBmZS5leGVjdXRlKFUscSxlZSx0ZSkudGhlbihmdW5jdGlvbihJZSl7SihJZSl9LGZ1bmN0aW9uKEllKXtuZShJZSl9KX0pLFs0LGhlKCldKTpbMywyXTtj'@;
put 'YXNlIDE6cmV0dXJuIHhlLnNlbnQoKSxbMywzXTtjYXNlIDI6bmUobmV3IGouRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixkZSkpLHhlLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSxYfShSKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7'@;
put 'Ty5GaWxlVXBsb2FkZXI9Qn0sNDQ0NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKFgsVSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1'@;
put 'bmN0aW9uKHEsZWUpe3EuX19wcm90b19fPWVlfXx8ZnVuY3Rpb24ocSxlZSl7Zm9yKHZhciB0ZSBpbiBlZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWUsdGUpJiYocVt0ZV09ZWVbdGVdKX0pKFgsVSl9LGZ1bmN0aW9uKFgsVSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9m'@;
put 'IFUmJm51bGwhPT1VKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoVSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9WH16KFgsVSksWC5wcm90b3R5cGU9bnVsbD09PVU/T2JqZWN0'@;
put 'LmNyZWF0ZShVKToocS5wcm90b3R5cGU9VS5wcm90b3R5cGUsbmV3IHEpfSksTD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZShjZSl7dHJ5e3VlKGVlLm5leHQoY2Up'@;
put 'KX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gaGUoY2Upe3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/RzpuZXcgcShmdW5jdGlvbihiKXtiKEcp'@;
put 'fSkpLnRoZW4oc2UsaGUpfXVlKChlZT1lZS5hcHBseShYLFV8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJu'@;
put 'IHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG9lPXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG9lO2Z1bmN0aW9uIGhlKHVlKXty'@;
put 'ZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYodGU9MiZHWzBdP2VlLnJldHVybjpHWzBdP2VlLnRocm93fHwoKHRlPWVl'@;
put 'LnJldHVybikmJnRlLmNhbGwoZWUpLDApOmVlLm5leHQpJiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1bMiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAwOmNhc2UgMTp0ZT1HO2JyZWFrO2Nhc2UgNDpyZXR1cm4gc2UubGFiZWwr'@;
put 'Kyx7dmFsdWU6R1sxXSxkb25lOiExfTtjYXNlIDU6c2UubGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0p'@;
put 'fHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJlYWt9aWYodGUmJnNl'@;
put 'LmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixiXSxlZT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFd'@;
put 'O3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5KZXNKb2JFeGVjdXRvcj12b2lkIDA7dmFyIEU9UigzOTAwKSxqPVIoMTM5NSksVj1SKDYxMTgpLEI9Uig1'@;
put 'OTI4KSxZPWZ1bmN0aW9uKFgpe2Z1bmN0aW9uIFUocSxlZSl7dmFyIHRlPVguY2FsbCh0aGlzLHEsRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfHx0aGlzO3JldHVybiB0ZS5zYXNWaXlhQXBpQ2xpZW50PWVlLHRlfXJldHVybiBLKFUsWCksVS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihxLGVl'@;
put 'LHRlLG9lLHNlLGhlKXtyZXR1cm4gdm9pZCAwPT09aGUmJihoZT1bXSksTCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsRz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIHVlPW9lfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0s'@;
put 'WzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXt2YXIgTjtudWxsPT09KE49Ry5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Tnx8Ti5leGVjdXRlSm9iKHEsdGUuY29udGV4dE5hbWUsdGUuZGVidWcsZWUsc2UpLnRoZW4oZnVuY3Rpb24oZyl7Ry5zYXNWaXlhQXBpQ2xpZW50LmFwcGVu'@;
put 'ZFJlcXVlc3QoZyxxLHRlLmRlYnVnKTt2YXIgQz0oMCxCLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShnLGhlKTtEKEMpfSkuY2F0Y2goZnVuY3Rpb24oZyl7cmV0dXJuIEwoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEM9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9u'@;
put 'KFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGcgaW5zdGFuY2VvZiBqLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoZyxxLHRlLmRlYnVnKSxIKG5ldyBqLkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSkpLGcgaW5zdGFu'@;
put 'Y2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBDLmV4ZWN1dGUocSxlZSx0ZSxvZSxzZSxoZSkudGhlbihmdW5jdGlvbih2KXtEKHYpfSxmdW5jdGlvbih2KXtIKHYpfSl9KSxbNCx1ZSgpXSk6WzMsMl07Y2FzZSAx'@;
put 'OnJldHVybiBTLnNlbnQoKSxbMywzXTtjYXNlIDI6SChuZXcgai5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpLFMubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LFV9KFYuQmFzZUpvYkV4ZWN1dG9yKTtPLkplc0pvYkV4ZWN1dG9yPVl9LDYxMTg6ZnVuY3Rpb24o'@;
put 'TSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBVKHRlKXt0cnl7ZWUoQi5uZXh0KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlv'@;
put 'biBxKHRlKXt0cnl7ZWUoQi50aHJvdyh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gZWUodGUpe3ZhciBvZTt0ZS5kb25lP1kodGUudmFsdWUpOihvZT10ZS52YWx1ZSxvZSBpbnN0YW5jZW9mIFY/b2U6bmV3IFYoZnVuY3Rpb24oc2Upe3NlKG9lKX0pKS50aGVuKFUscSl9ZWUoKEI9'@;
put 'Qi5hcHBseShFLGp8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4g'@;
put 'WD17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihYW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFg7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Up'@;
put 'e2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKFY9MSxCJiYoWT0yJm9lWzBdP0IucmV0dXJuOm9lWzBdP0IudGhyb3d8fCgoWT1CLnJldHVybikmJlkuY2FsbChCKSwwKTpCLm5leHQpJiYhKFk9WS5jYWxs'@;
put 'KEIsb2VbMV0pKS5kb25lKXJldHVybiBZO3N3aXRjaChCPTAsWSYmKG9lPVsyJm9lWzBdLFkudmFsdWVdKSxvZVswXSl7Y2FzZSAwOmNhc2UgMTpZPW9lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTpvZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLEI9b2VbMV0s'@;
put 'b2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpvZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChZPShZPVUudHJ5cykubGVuZ3RoPjAmJllbWS5sZW5ndGgtMV0pfHw2IT09b2VbMF0mJjIhPT1vZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09b2VbMF0mJigh'@;
put 'WXx8b2VbMV0+WVswXSYmb2VbMV08WVszXSkpe1UubGFiZWw9b2VbMV07YnJlYWt9aWYoNj09PW9lWzBdJiZVLmxhYmVsPFlbMV0pe1UubGFiZWw9WVsxXSxZPW9lO2JyZWFrfWlmKFkmJlUubGFiZWw8WVsyXSl7VS5sYWJlbD1ZWzJdLFUub3BzLnB1c2gob2UpO2JyZWFrfVlbMl0mJlUub3Bz'@;
put 'LnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1vZT1qLmNhbGwoRSxVKX1jYXRjaChzZSl7b2U9WzYsc2VdLEI9MH1maW5hbGx5e1Y9WT0wfWlmKDUmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJue3ZhbHVlOm9lWzBdP29lWzFdOnZvaWQgMCxkb25lOiEwfX0oW2VlLHRlXSl9fX07T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQmFzZUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgTD1SKDU5MjgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBFKGosVil7dmFyIEI9dGhpczt0aGlzLnNlcnZlclVybD1qLHRoaXMuc2VydmVyVHlwZT1WLHRoaXMud2Fp'@;
put 'dGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIHooQix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFk9dGhpcztyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsTC5h'@;
put 'c3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLGZ1bmN0aW9uKFUpe3JldHVybiB6KFksdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24ocSl7c3dpdGNoKHEubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxVKCldO2Nhc2UgMTpyZXR1cm4gcS5zZW50'@;
put 'KCksWzJdfX0pfSl9KV07Y2FzZSAxOnJldHVybiBYLnNlbnQoKSx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSxbMl19fSl9KX19cmV0dXJuIEUucHJvdG90eXBlLmFwcGVuZFdhaXRpbmdSZXF1ZXN0PWZ1bmN0aW9uKGope3RoaXMud2FpdGluZ1JlcXVlc3RzLnB1c2goail9LEUucHJvdG90eXBl'@;
put 'LmdldFJlcXVlc3RQYXJhbXM9ZnVuY3Rpb24oail7dmFyIFY9e307cmV0dXJuIGouZGVidWcmJihWLl9vbWl0dGV4dGxvZz0iZmFsc2UiLFYuX29taXRzZXNzaW9ucmVzdWx0cz0iZmFsc2UiLFYuX2RlYnVnPTEzMSksVn0sRX0oKTtPLkJhc2VKb2JFeGVjdXRvcj1rfSwyNjkzOmZ1bmN0aW9u'@;
put 'KE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oZWUsdGUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihvZSxzZSl7b2UuX19wcm90b19fPXNl'@;
put 'fXx8ZnVuY3Rpb24ob2Usc2Upe2Zvcih2YXIgaGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGhlKSYmKG9lW2hlXT1zZVtoZV0pfSkoZWUsdGUpfSxmdW5jdGlvbihlZSx0ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gb2UoKXt0aGlzLmNvbnN0cnVjdG9yPWVlfXooZWUsdGUpLGVlLnByb3RvdHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6'@;
put 'KG9lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IG9lKX0pLEw9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gTD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlZSl7Zm9yKHZhciB0ZSxvZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7b2U8c2U7b2UrKylmb3IodmFyIGhl'@;
put 'IGluIHRlPWFyZ3VtZW50c1tvZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGhlKSYmKGVlW2hlXT10ZVtoZV0pO3JldHVybiBlZX0sTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGVlLHRlLG9lLHNlKXty'@;
put 'ZXR1cm4gbmV3KG9lfHwob2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGhlLHVlKXtmdW5jdGlvbiBjZShEKXt0cnl7YihzZS5uZXh0KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gRyhEKXt0cnl7YihzZS50aHJvdyhEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIGIoRCl7dmFyIEg7RC5k'@;
put 'b25lP2hlKEQudmFsdWUpOihIPUQudmFsdWUsSCBpbnN0YW5jZW9mIG9lP0g6bmV3IG9lKGZ1bmN0aW9uKE4pe04oSCl9KSkudGhlbihjZSxHKX1iKChzZT1zZS5hcHBseShlZSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZWUsdGUpe3Zh'@;
put 'ciBvZSxzZSxoZSx1ZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm4gaGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdWU9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s'@;
put 'JiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gRyhiKXtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKG9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtm'@;
put 'b3IoO2NlOyl0cnl7aWYob2U9MSxzZSYmKGhlPTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChoZT1zZS5yZXR1cm4pJiZoZS5jYWxsKHNlKSwwKTpzZS5uZXh0KSYmIShoZT1oZS5jYWxsKHNlLEhbMV0pKS5kb25lKXJldHVybiBoZTtzd2l0Y2goc2U9MCxoZSYmKEg9WzImSFsw'@;
put 'XSxoZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpjYXNlIDE6aGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9uZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVswXTtjb250aW51ZTtjYXNlIDc6SD1jZS5vcHMucG9wKCksY2UudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGhlPShoZT1jZS50cnlzKS5sZW5ndGg+MCYmaGVbaGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1IWzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFoZXx8SFsxXT5oZVswXSYmSFsxXTxoZVszXSkpe2NlLmxhYmVsPUhbMV07YnJl'@;
put 'YWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGhlWzFdKXtjZS5sYWJlbD1oZVsxXSxoZT1IO2JyZWFrfWlmKGhlJiZjZS5sYWJlbDxoZVsyXSl7Y2UubGFiZWw9aGVbMl0sY2Uub3BzLnB1c2goSCk7YnJlYWt9aGVbMl0mJmNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlfUg9dGUu'@;
put 'Y2FsbChlZSxjZSl9Y2F0Y2goTil7SD1bNixOXSxzZT0wfWZpbmFsbHl7b2U9aGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFsdWU6SFswXT9IWzFdOnZvaWQgMCxkb25lOiEwfX0oW2IsRF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KSxPLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGo9Uig2MjMwKSxWPVIoMTM5NSksQj1SKDU5MjgpLFk9Uig2MTE4KSxYPVIoNzk1KSxVPWZ1bmN0aW9uKGVlKXtmdW5jdGlvbiB0ZShvZSxzZSxoZSx1ZSxjZSl7dmFyIEc9ZWUuY2FsbCh0aGlzLG9lLHNlKXx8dGhpcztyZXR1cm4g'@;
put 'Ry5qb2JzUGF0aD1oZSxHLnJlcXVlc3RDbGllbnQ9dWUsRy5zYXM5UmVxdWVzdENsaWVudD1uZXcgWC5TYXM5UmVxdWVzdENsaWVudChvZSxjZSksR31yZXR1cm4gSyh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Usc2UsaGUpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxjZSxHLGIsRCxILE49dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6aWYodWU9KDAsQi5pc1JlbGF0aXZlUGF0aCkob2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2Uu'@;
put 'cmVwbGFjZSgvXlwvLywiIik6b2UsY2U9IiIuY29uY2F0KGhlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIj8iKS5jb25jYXQoIl9wcm9ncmFtPSIrdWUpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGhlLnVzZXJuYW1lJiZoZS5wYXNzd29yZD8iJl91c2VybmFtZT0iK2hlLnVz'@;
put 'ZXJuYW1lKyImX3Bhc3N3b3JkPSIraGUucGFzc3dvcmQ6IiIpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGhlLmRlYnVnPyImX2RlYnVnPTEzMSI6IiIpLEc9TCh7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoaGUpKSxiPW5ldyBqLHNlKXRyeXtiPXEoYixzZSl9Y2F0Y2goQyl7cmV0dXJuWzIs'@;
put 'UHJvbWlzZS5yZWplY3QobmV3IFYuRXJyb3JSZXNwb25zZShDPy5tZXNzYWdlLEMpKV19ZWxzZSBzZT0iIjtmb3IoRCBpbiBHKUcuaGFzT3duUHJvcGVydHkoRCkmJmIuYXBwZW5kKEQsR1tEXSk7cmV0dXJuWzQsdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihoZS51c2VybmFtZSxoZS5w'@;
put 'YXNzd29yZCx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBnLnNlbnQoKSxIPXNlJiZPYmplY3Qua2V5cyhzZSkubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2IuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIixbMixuZXcgUHJvbWlzZShmdW5jdGlvbihDLFMpe3Jl'@;
put 'dHVybiBOLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoY2UsYix2b2lkIDAsSCx7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihmdW5jdGlvbih2KXtOLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdCh2LG9lLGhlLmRlYnVnKSxDKHYpfSkuY2F0Y2goZnVuY3Rp'@;
put 'b24odil7dmFyIHA9djt2LnJlc3VsdCYmIiIhPT12LnJlc3VsdD9wPXYucmVzdWx0OnYubWVzc2FnZSYmKHA9di5tZXNzYWdlKSxOLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChwLG9lLGhlLmRlYnVnKSxTKG5ldyBWLkVycm9yUmVzcG9uc2Uodj8ubWVzc2FnZSx2KSl9KX0pXX19KX0p'@;
put 'fSx0ZS5wcm90b3R5cGUuZ2V0UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihvZSl7dmFyIHNlPXt9O3JldHVybiBvZS5kZWJ1ZyYmKHNlLl9kZWJ1Zz0xMzEpLHNlfSx0ZX0oWS5CYXNlSm9iRXhlY3V0b3IpO08uU2FzOUpvYkV4ZWN1dG9yPVU7dmFyIHE9ZnVuY3Rpb24oZWUsdGUpe2Zvcih2YXIg'@;
put 'b2UgaW4gdGUpe3ZhciBzZT1vZSxoZT0oMCxCLmNvbnZlcnRUb0NTVikodGUsb2UpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1oZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMu'@;
put 'Iik7ZWUuYXBwZW5kKHNlLGhlLHtmaWxlbmFtZToiIi5jb25jYXQoc2UsIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiBlZX19LDEwNjU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5j'@;
put 'dGlvbihlZSx0ZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG9lLHNlKXtvZS5fX3Byb3RvX189c2V9fHxmdW5jdGlvbihvZSxzZSl7Zm9yKHZhciBoZSBpbiBzZSlPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwoc2UsaGUpJiYob2VbaGVdPXNlW2hlXSl9KShlZSx0ZSl9LGZ1bmN0aW9uKGVlLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5vdCBh'@;
put 'IGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvZSgpe3RoaXMuY29uc3RydWN0b3I9ZWV9eihlZSx0ZSksZWUucHJvdG90eXBlPW51bGw9PT10ZT9PYmplY3QuY3JlYXRlKHRlKToob2UucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgb2UpfSksTD10aGlzJiZ0aGlzLl9fYXNzaWdu'@;
put 'fHxmdW5jdGlvbigpe3JldHVybiBMPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlLG9lPTEsc2U9YXJndW1lbnRzLmxlbmd0aDtvZTxzZTtvZSsrKWZvcih2YXIgaGUgaW4gdGU9YXJndW1lbnRzW29lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'dGUsaGUpJiYoZWVbaGVdPXRlW2hlXSk7cmV0dXJuIGVlfSxMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZWUsdGUsb2Usc2Upe3JldHVybiBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24oaGUsdWUpe2Z1bmN0aW9uIGNlKEQp'@;
put 'e3RyeXtiKHNlLm5leHQoRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBHKEQpe3RyeXtiKHNlLnRocm93KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gYihEKXt2YXIgSDtELmRvbmU/aGUoRC52YWx1ZSk6KEg9RC52YWx1ZSxIIGluc3RhbmNlb2Ygb2U/SDpuZXcgb2UoZnVuY3Rp'@;
put 'b24oTil7TihIKX0pKS50aGVuKGNlLEcpfWIoKHNlPXNlLmFwcGx5KGVlLHRlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlLGhlLHVlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmhlWzBdKXRocm93'@;
put 'IGhlWzFdO3JldHVybiBoZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB1ZT17bmV4dDpHKDApLHRocm93OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih1ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1ZTtmdW5jdGlv'@;
put 'biBHKGIpe3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7aWYob2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7Y2U7KXRyeXtpZihvZT0xLHNlJiYoaGU9MiZIWzBdP3NlLnJldHVybjpIWzBdP3NlLnRocm93'@;
put 'fHwoKGhlPXNlLnJldHVybikmJmhlLmNhbGwoc2UpLDApOnNlLm5leHQpJiYhKGhlPWhlLmNhbGwoc2UsSFsxXSkpLmRvbmUpcmV0dXJuIGhlO3N3aXRjaChzZT0wLGhlJiYoSD1bMiZIWzBdLGhlLnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpoZT1IO2JyZWFrO2Nhc2UgNDpyZXR1cm4g'@;
put 'Y2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBdO2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaGU9KGhlPWNlLnRyeXMpLmxlbmd0aD4wJiZoZVtoZS5s'@;
put 'ZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2NvbnRpbnVlfWlmKDM9PT1IWzBdJiYoIWhlfHxIWzFdPmhlWzBdJiZIWzFdPGhlWzNdKSl7Y2UubGFiZWw9SFsxXTticmVha31pZig2PT09SFswXSYmY2UubGFiZWw8aGVbMV0pe2NlLmxhYmVsPWhlWzFdLGhlPUg7YnJlYWt9'@;
put 'aWYoaGUmJmNlLmxhYmVsPGhlWzJdKXtjZS5sYWJlbD1oZVsyXSxjZS5vcHMucHVzaChIKTticmVha31oZVsyXSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWV9SD10ZS5jYWxsKGVlLGNlKX1jYXRjaChOKXtIPVs2LE5dLHNlPTB9ZmluYWxseXtvZT1oZT0wfWlmKDUmSFsw'@;
put 'XSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9pZCAwLGRvbmU6ITB9fShbYixEXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2FzanNKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGo9Uig2MjMwKSxWPVIoMzkwMCksQj1S'@;
put 'KDEzOTUpLFk9Uig0MDM3KSxYPVIoNTkyOCksVT1SKDU5MjgpLHE9ZnVuY3Rpb24oZWUpe2Z1bmN0aW9uIHRlKG9lLHNlLGhlKXt2YXIgdWU9ZWUuY2FsbCh0aGlzLG9lLFYuU2VydmVyVHlwZS5TYXNqcyl8fHRoaXM7cmV0dXJuIHVlLmpvYnNQYXRoPXNlLHVlLnJlcXVlc3RDbGllbnQ9aGUs'@;
put 'dWV9cmV0dXJuIEsodGUsZWUpLHRlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3JldHVybiB2b2lkIDA9PT1HJiYoRz1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixELEgsTixnLEMsUyxwPXRoaXM7cmV0dXJuIEUodGhpcyxm'@;
put 'dW5jdGlvbih3KXtpZihiPXVlLEQ9KDAsVS5pc1JlbGF0aXZlUGF0aCkob2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2UucmVwbGFjZSgvXlwvLywiIik6b2UsSD0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5j'@;
put 'b25jYXQoIl9wcm9ncmFtPSIrRCksTj1MKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkpLGc9KDAsWC5nZXRGb3JtRGF0YSkoKSxzZSl0cnl7Zz0oMCxZLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKGcsc2UpfWNhdGNoKEope3JldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9y'@;
put 'UmVzcG9uc2UoSj8ubWVzc2FnZSxKKSldfWZvcihDIGluIE4pTi5oYXNPd25Qcm9wZXJ0eShDKSYmZy5hcHBlbmQoQyxOW0NdKTtyZXR1cm4gUz1nIGluc3RhbmNlb2YgaiYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoZy5nZXRC'@;
put 'b3VuZGFyeSgpKTp2b2lkIDAsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oSixuZSl7cC5yZXF1ZXN0Q2xpZW50LnBvc3QoSCxnLGNlPy5hY2Nlc3NfdG9rZW4sUykudGhlbihmdW5jdGlvbihkZSl7cmV0dXJuIGsocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlLHhlO3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24oSWUpe2lmKE9iamVjdC5lbnRyaWVzKGRlLnJlc3VsdCkubGVuZ3RoPDEpdGhyb3cgbmV3IEIuSm9iRXhlY3V0aW9uRXJyb3IoMCwiTm8gd2Vib3V0IHdhcyByZXR1cm5lZCBieSBqb2IgIi5jb25jYXQoRCwiLiAgUGxlYXNlIGNoZWNrIHRoZSBTQVMgbG9nIGZvciBt'@;
put 'b3JlIGluZm8uIiksZGUubG9nKTtyZXR1cm4oZmU9ZGUucmVzdWx0KSYmInN0cmluZyI9PXR5cGVvZiBmZSYmZmUudHJpbSgpJiYoZGUucmVzdWx0PSgwLFUuZ2V0VmFsaWRKc29uKShmZSkpLHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLG9lLGhlLmRlYnVnKSx4ZT0oMCxV'@;
put 'LmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShkZSxHKSxKKHhlKSxbMl19KX0pfSkuY2F0Y2goZnVuY3Rpb24oZGUpe3JldHVybiBrKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oeGUpe3N3aXRjaCh4ZS5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybiBkZSBpbnN0YW5jZW9mIEIuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxvZSxoZS5kZWJ1ZyksbmUobmV3IEIuRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpKSxkZSBpbnN0YW5jZW9mIEIuTG9naW5SZXF1'@;
put 'aXJlZEVycm9yPyh1ZXx8bmUobmV3IEIuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLGRlKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBmZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oSWUpe0ooSWUpfSxmdW5jdGlvbihJZSl7bmUoSWUpfSl9KSxiP1s0LGIoKV06WzMsMl0pOlszLDNdO2Nhc2UgMTp4ZS5zZW50KCkseGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNF07Y2FzZSAzOm5lKG5l'@;
put 'dyBCLkVycm9yUmVzcG9uc2UoZGU/Lm1lc3NhZ2UsZGUpKSx4ZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sdGV9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLlNhc2pzSm9iRXhlY3V0b3I9cX0sNjA4NDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3Zh'@;
put 'ciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ob2Usc2Upe29lLl9fcHJvdG9fXz1zZX18fGZ1bmN0aW9uKG9lLHNlKXtmb3Io'@;
put 'dmFyIGhlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxoZSkmJihvZVtoZV09c2VbaGVdKX0pKGVlLHRlKX0sZnVuY3Rpb24oZWUsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9PXRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4'@;
put 'dGVuZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG9lKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lZX16KGVlLHRlKSxlZS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5jcmVhdGUodGUpOihvZS5wcm90b3R5cGU9dGUucHJvdG90'@;
put 'eXBlLG5ldyBvZSl9KSxMPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEw9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGUsb2U9MSxzZT1hcmd1bWVudHMubGVuZ3RoO29lPHNlO29lKyspZm9yKHZhciBoZSBpbiB0ZT1hcmd1bWVudHNbb2VdKU9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxoZSkmJihlZVtoZV09dGVbaGVdKTtyZXR1cm4gZWV9LEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlZSx0ZSxvZSxzZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21p'@;
put 'c2UpKShmdW5jdGlvbihoZSx1ZSl7ZnVuY3Rpb24gY2UoRCl7dHJ5e2Ioc2UubmV4dChEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIEcoRCl7dHJ5e2Ioc2UudGhyb3coRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBiKEQpe3ZhciBIO0QuZG9uZT9oZShELnZhbHVlKTooSD1ELnZh'@;
put 'bHVlLEggaW5zdGFuY2VvZiBvZT9IOm5ldyBvZShmdW5jdGlvbihOKXtOKEgpfSkpLnRoZW4oY2UsRyl9Yigoc2U9c2UuYXBwbHkoZWUsdGV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U9e2xhYmVs'@;
put 'OjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJuIGhlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHVlPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHVlW1N5bWJvbC5pdGVyYXRvcl09'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlO2Z1bmN0aW9uIEcoYil7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihIKXtpZihvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lmKG9lPTEsc2Um'@;
put 'JihoZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgoaGU9c2UucmV0dXJuKSYmaGUuY2FsbChzZSksMCk6c2UubmV4dCkmJiEoaGU9aGUuY2FsbChzZSxIWzFdKSkuZG9uZSlyZXR1cm4gaGU7c3dpdGNoKHNlPTAsaGUmJihIPVsyJkhbMF0saGUudmFsdWVdKSxIWzBdKXtjYXNl'@;
put 'IDA6Y2FzZSAxOmhlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5sYWJlbCsrLHt2YWx1ZTpIWzFdLGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0sSD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZigh'@;
put 'KChoZT0oaGU9Y2UudHJ5cykubGVuZ3RoPjAmJmhlW2hlLmxlbmd0aC0xXSl8fDYhPT1IWzBdJiYyIT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0mJighaGV8fEhbMV0+aGVbMF0mJkhbMV08aGVbM10pKXtjZS5sYWJlbD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBdJiZjZS5sYWJl'@;
put 'bDxoZVsxXSl7Y2UubGFiZWw9aGVbMV0saGU9SDticmVha31pZihoZSYmY2UubGFiZWw8aGVbMl0pe2NlLmxhYmVsPWhlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFrfWhlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZX1IPXRlLmNhbGwoZWUsY2UpfWNhdGNoKE4pe0g9'@;
put 'WzYsTl0sc2U9MH1maW5hbGx5e29lPWhlPTB9aWYoNSZIWzBdKXRocm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFtiLERdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5XZWJKb2JFeGVjdXRvcj12'@;
put 'b2lkIDA7dmFyIGo9Uig2MjMwKSxWPVIoMzkwMCksQj1SKDEzOTUpLFk9Uig0MDM3KSxYPVIoMjE3MCksVT1SKDU5MjgpLHE9ZnVuY3Rpb24oZWUpe2Z1bmN0aW9uIHRlKG9lLHNlLGhlLHVlLGNlKXt2YXIgRz1lZS5jYWxsKHRoaXMsb2Usc2UpfHx0aGlzO3JldHVybiBHLmpvYnNQYXRoPWhl'@;
put 'LEcucmVxdWVzdENsaWVudD11ZSxHLnNhc1ZpeWFBcGlDbGllbnQ9Y2UsR31yZXR1cm4gSyh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIHZvaWQgMD09PUcmJihHPVtdKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3ZhciBiLEQsSCxOLGcsQyxTLHYscCxKLG5lLGRlLHhlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihJZSl7c3dpdGNoKEllLmxhYmVsKXtjYXNlIDA6aWYoYj11ZSxEPSgwLFUuaXNSZWxhdGl2ZVBhdGgpKG9lKSYmaGUuYXBwTG9jP2hlLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIp'@;
put 'K29lLnJlcGxhY2UoL15cLy8sIiIpOm9lLEg9IiIuY29uY2F0KGhlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3JhbT0iK0QpLGhlLnNlcnZlclR5cGUhPT1WLlNlcnZlclR5cGUuU2FzVml5YSlyZXR1cm5bMyw1XTtOPXZvaWQgMCxJZS5sYWJl'@;
put 'bD0xO2Nhc2UgMTpyZXR1cm4gSWUudHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCx0aGlzLmdldEpvYlVyaShvZSldO2Nhc2UgMjpyZXR1cm4gTj1JZS5zZW50KCksWzMsNF07Y2FzZSAzOnJldHVybiBnPUllLnNlbnQoKSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihGZSxPZSl7cmV0dXJuIGsoeGUs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBqZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oV2Upe3N3aXRjaChXZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBnIGluc3RhbmNlb2YgQi5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gamUuZXhlY3V0ZShvZSxzZSxoZSx1ZSxjZSxHKS50aGVuKGZ1bmN0aW9uKEtlKXtGZShLZSl9LGZ1bmN0aW9uKEtlKXtPZShLZSl9KX0pLGI/WzQsYigpXTpbMywyXSk6WzMsM107Y2FzZSAxOldlLnNlbnQoKSxXZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6'@;
put 'T2UobmV3IEIuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSxXZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0pXTtjYXNlIDQ6SCs9Ti5sZW5ndGg+MD8iJl9qb2I9IitOOiIiLE4ubGVuZ3RoPjAmJihIPShIKz0iJl9qb2I9IitOKS5yZXBsYWNlKCJfcHJvZ3JhbT0iLCJfX3By'@;
put 'b2dyYW09IikpLEgrPWhlLmNvbnRleHROYW1lJiYhL1xzLy50ZXN0KGhlLmNvbnRleHROYW1lKT8iJl9jb250ZXh0bmFtZT0iLmNvbmNhdChoZS5jb250ZXh0TmFtZSk6IiIsSWUubGFiZWw9NTtjYXNlIDU6aWYoQz1MKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkpLFM9KDAsVS5nZXRG'@;
put 'b3JtRGF0YSkoKSxzZSlpZih2PUpTT04uc3RyaW5naWZ5KHNlKSxoZS5zZXJ2ZXJUeXBlPT09Vi5TZXJ2ZXJUeXBlLlNhczl8fHYubGVuZ3RoPjVlNXx8di5pbmNsdWRlcygiOyIpKXRyeXtTPSgwLFkuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoUyxzZSl9Y2F0Y2goRmUpe3JldHVyblsyLFBy'@;
put 'b21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoRmU/Lm1lc3NhZ2UsRmUpKV19ZWxzZSB0cnl7cD0oMCxYLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShTLHNlKSxKPXAucmVxdWVzdFBhcmFtcyxTPXAuZm9ybURhdGEsQz1MKEwoe30sQyksSil9Y2F0Y2goRmUpe3JldHVyblsyLFBy'@;
put 'b21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoRmU/Lm1lc3NhZ2UsRmUpKV19Zm9yKG5lIGluIEMpQy5oYXNPd25Qcm9wZXJ0eShuZSkmJlMuYXBwZW5kKG5lLENbbmVdKTtyZXR1cm4gZGU9UyBpbnN0YW5jZW9mIGomJnR5cGVvZiBGb3JtRGF0YT4idSI/Im11bHRpcGFydC9mb3Jt'@;
put 'LWRhdGE7IGJvdW5kYXJ5PSIuY29uY2F0KFMuZ2V0Qm91bmRhcnkoKSk6dm9pZCAwLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEZlLE9lKXt4ZS5yZXF1ZXN0Q2xpZW50LnBvc3QoSCxTLGNlPy5hY2Nlc3NfdG9rZW4sZGUpLnRoZW4oZnVuY3Rpb24oamUpe3JldHVybiBrKHhlLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXt2YXIgV2UsS2U7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihZZSl7c3dpdGNoKFllLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoamUsb2UsaGUuZGVidWcpLFdlPWplLnJlc3VsdCwhaGUuZGVidWcpcmV0dXJuWzMsNF07'@;
put 'c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm5bMywxXTtjYXNlIFYuU2VydmVyVHlwZS5TYXM5OnJldHVyblszLDNdfXJldHVyblszLDRdO2Nhc2UgMTpyZXR1cm5bNCwoMCxVLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKGplLnJlc3Vs'@;
put 'dCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpXTtjYXNlIDI6cmV0dXJuIFdlPVllLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIFdlPSJzdHJpbmciPT10eXBlb2YgamUucmVzdWx0PygwLFUucGFyc2VXZWJvdXRSZXNwb25zZSkoamUucmVzdWx0LEgpOmplLnJlc3VsdCxb'@;
put 'Myw0XTtjYXNlIDQ6cmV0dXJuIEtlPSgwLFUuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHtyZXN1bHQ6V2UsbG9nOmplLmxvZ30sRyksRmUoS2UpLFsyXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oamUpe3JldHVybiBrKHhlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgV2U9'@;
put 'dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEtlKXtzd2l0Y2goS2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gamUgaW5zdGFuY2VvZiBCLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoamUsb2UsaGUuZGVidWcpLE9lKG5ldyBCLkVycm9yUmVz'@;
put 'cG9uc2UoamU/Lm1lc3NhZ2UsamUpKSksamUgaW5zdGFuY2VvZiBCLkxvZ2luUmVxdWlyZWRFcnJvcj8odWV8fE9lKG5ldyBCLkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlh'@;
put 'bHMuIixqZSkpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gV2UuZXhlY3V0ZShvZSxzZSxoZSx1ZSxjZSxHKS50aGVuKGZ1bmN0aW9uKFllKXtGZShZZSl9LGZ1bmN0aW9uKFllKXtPZShZZSl9KX0pLGI/WzQsYigpXTpbMywyXSk6WzMsM107Y2FzZSAxOktl'@;
put 'LnNlbnQoKSxLZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6T2UobmV3IEIuRXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkpLEtlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19fSl9KX0sdGUucHJvdG90eXBlLmdldEpvYlVyaT1mdW5jdGlvbihvZSl7'@;
put 'cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlLGNlLEcsYjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6aWYoIXRoaXMuc2FzVml5YUFwaUNsaWVudClyZXR1cm5bMiwiIl07aWYoc2U9IiIsKDAsVS5pc1Jl'@;
put 'bGF0aXZlUGF0aCkob2UpPyhjZT1vZS5zcGxpdCgiLyIpLGhlPWNlLmxlbmd0aD4xP2NlWzBdOiIiLHVlPWNlLmxlbmd0aD4xP2NlWzFdOiIiKTooY2U9b2Uuc3BsaXQoIi8iKSx1ZT1jZS5wb3AoKXx8IiIsaGU9Y2Uuam9pbigiLyIpKSwhdWUpdGhyb3cgbmV3IEVycm9yKCJKb2IgbmFtZSBp'@;
put 'cyBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEpvYnNJbkZvbGRlcihoZSldO2Nhc2UgMTpyZXR1cm4oRz1ELnNlbnQoKSkmJihiPUcuZmluZChmdW5jdGlvbihIKXtyZXR1cm4gSC5uYW1lPT09dWUmJiJqb2JEZWZpbml0aW9u'@;
put 'Ij09PUguY29udGVudFR5cGV9KSkmJihzZT1iLnVyaSksWzIsc2VdfX0pfSl9LHRlfShSKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7Ty5XZWJKb2JFeGVjdXRvcj1xfSw4MjE3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChP'@;
put 'YmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6'@;
put 'ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEwsaixWKX06ZnVuY3Rpb24oTCxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksTFtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oTCxrKXtmb3IodmFyIEUgaW4g'@;
put 'TCkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEwsRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMTU3MCksTyksSyhSKDM0OTEpLE8pLEsoUig0NDQ2KSxPKSxLKFIoNjEx'@;
put 'OCksTyksSyhSKDI2OTMpLE8pLEsoUig2MDg0KSxPKSxLKFIoMTA2NSksTyl9LDQ1ODg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxMPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEw9T2JqZWN0LmFzc2lnbnx8ZnVu'@;
put 'Y3Rpb24odWUpe2Zvcih2YXIgY2UsRz0xLGI9YXJndW1lbnRzLmxlbmd0aDtHPGI7RysrKWZvcih2YXIgRCBpbiBjZT1hcmd1bWVudHNbR10pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNlLEQpJiYodWVbRF09Y2VbRF0pO3JldHVybiB1ZX0sTC5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHVlLGNlLEcsYil7cmV0dXJuIG5ldyhHfHwoRz1Qcm9taXNlKSkoZnVuY3Rpb24oRCxIKXtmdW5jdGlvbiBOKFMpe3RyeXtDKGIubmV4dChTKSl9Y2F0Y2godil7SCh2KX19ZnVuY3Rpb24gZyhTKXt0cnl7QyhiLnRo'@;
put 'cm93KFMpKX1jYXRjaCh2KXtIKHYpfX1mdW5jdGlvbiBDKFMpe3ZhciB2O1MuZG9uZT9EKFMudmFsdWUpOih2PVMudmFsdWUsdiBpbnN0YW5jZW9mIEc/djpuZXcgRyhmdW5jdGlvbihwKXtwKHYpfSkpLnRoZW4oTixnKX1DKChiPWIuYXBwbHkodWUsY2V8fFtdKSkubmV4dCgpKX0pfSxFPXRo'@;
put 'aXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKHVlLGNlKXt2YXIgRyxiLEQsSCxOPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkRbMF0pdGhyb3cgRFsxXTtyZXR1cm4gRFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBIPXtuZXh0OmcoMCksdGhyb3c6ZygxKSxyZXR1cm46'@;
put 'ZygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksSDtmdW5jdGlvbiBnKEMpe3JldHVybiBmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24odil7aWYoRyl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0'@;
put 'b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtOOyl0cnl7aWYoRz0xLGImJihEPTImdlswXT9iLnJldHVybjp2WzBdP2IudGhyb3d8fCgoRD1iLnJldHVybikmJkQuY2FsbChiKSwwKTpiLm5leHQpJiYhKEQ9RC5jYWxsKGIsdlsxXSkpLmRvbmUpcmV0dXJuIEQ7c3dpdGNoKGI9MCxE'@;
put 'JiYodj1bMiZ2WzBdLEQudmFsdWVdKSx2WzBdKXtjYXNlIDA6Y2FzZSAxOkQ9djticmVhaztjYXNlIDQ6cmV0dXJuIE4ubGFiZWwrKyx7dmFsdWU6dlsxXSxkb25lOiExfTtjYXNlIDU6Ti5sYWJlbCsrLGI9dlsxXSx2PVswXTtjb250aW51ZTtjYXNlIDc6dj1OLm9wcy5wb3AoKSxOLnRyeXMu'@;
put 'cG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChEPShEPU4udHJ5cykubGVuZ3RoPjAmJkRbRC5sZW5ndGgtMV0pfHw2IT09dlswXSYmMiE9PXZbMF0pKXtOPTA7Y29udGludWV9aWYoMz09PXZbMF0mJighRHx8dlsxXT5EWzBdJiZ2WzFdPERbM10pKXtOLmxhYmVsPXZbMV07YnJlYWt9aWYo'@;
put 'Nj09PXZbMF0mJk4ubGFiZWw8RFsxXSl7Ti5sYWJlbD1EWzFdLEQ9djticmVha31pZihEJiZOLmxhYmVsPERbMl0pe04ubGFiZWw9RFsyXSxOLm9wcy5wdXNoKHYpO2JyZWFrfURbMl0mJk4ub3BzLnBvcCgpLE4udHJ5cy5wb3AoKTtjb250aW51ZX12PWNlLmNhbGwodWUsTil9Y2F0Y2gocCl7'@;
put 'dj1bNixwXSxiPTB9ZmluYWxseXtHPUQ9MH1pZig1JnZbMF0pdGhyb3cgdlsxXTtyZXR1cm57dmFsdWU6dlswXT92WzFdOnZvaWQgMCxkb25lOiEwfX0oW0MsU10pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnRocm93SWZFcnJvcj1PLlJl'@;
put 'cXVlc3RDbGllbnQ9dm9pZCAwO3ZhciBqPVIoOTY2OSksVj1SKDgzNzMpLEI9UigxNTI3KSxZPVIoMTM5NSksWD1SKDI4MTMpLFU9Uig5Nzc4KSxxPVIoOTUyNiksZWU9Uig1OTI4KSx0ZT1SKDEwMDUpLG9lPVIoOTUzOSksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB1ZShjZSxHLGIsRCl7dmFy'@;
put 'IEg9dGhpczt0aGlzLmJhc2VVcmw9Y2UsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBILnJlcXVl'@;
put 'c3RzfSx0aGlzLmNsZWFyUmVxdWVzdHM9ZnVuY3Rpb24oKXtILnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1mdW5jdGlvbihOKXtyZXR1cm4gayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdixwLHcsSixuZSxkZSxmZSx4ZSxJZTtyZXR1cm4gRSh0aGlzLGZ1bmN0'@;
put 'aW9uKEZlKXtzd2l0Y2goRmUubGFiZWwpe2Nhc2UgMDpmb3IoQz17fSxTPU4uc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1TLHA9di5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0'@;
put 'aG9yaXphdGlvbiIpLGc9cD90aGlzLmJhc2VVcmwrcC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGwsdz1wPy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpLEo9MCxuZT13O0o8bmUubGVuZ3RoO0orKykidXNlcl9vYXV0aF9hcHByb3ZhbCI9PT0oZGU9bmVbSl0pLm5hbWUmJihkZS52YWx1'@;
put 'ZT0idHJ1ZSIpLENbZGUubmFtZV09ZGUudmFsdWU7Zm9yKEllIGluKGZlPU9iamVjdC5rZXlzKEMpLmZpbmQoZnVuY3Rpb24oT2Upe3JldHVybiBPZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiY3NyZiIpfSkpJiYodGhpcy5jc3JmVG9rZW4udmFsdWU9Q1tmZV0sdGhpcy5jc3JmVG9rZW4u'@;
put 'aGVhZGVyTmFtZT10aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lfHwieC1jc3JmLXRva2VuIikseGU9bmV3IEZvcm1EYXRhLEMpQy5oYXNPd25Qcm9wZXJ0eShJZSkmJnhlLmFwcGVuZChJZSxDW0llXSk7aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5k'@;
put 'ZWZpbmVkLiIpO3JldHVybls0LHRoaXMuaHR0cENsaWVudC5wb3N0KGcseGUse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn19KS50aGVuKGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2UuZGF0YX0pLmNhdGNoKGZ1bmN0'@;
put 'aW9uKE9lKXsoei5sb2dnZXJ8fEspLmVycm9yKE9lKX0pXTtjYXNlIDE6cmV0dXJuWzIsRmUuc2VudCgpXX19KX0pfSx0aGlzLnByZXR0aWZ5U3RyaW5nPWZ1bmN0aW9uKE4pe3JldHVybigwLG9lLmluc3BlY3QpKE4se2NvbG9yczoiYmxlYWNoZWQiIT09SC52ZXJib3NlTW9kZX0pfSx0aGlz'@;
put 'LnBhcnNlSW50ZXJjZXB0ZWRCb2R5PWZ1bmN0aW9uKE4pe2lmKCFOKXJldHVybiIiO3ZhciBnO2lmKCJzdHJpbmciPT10eXBlb2YgTil0cnl7Zz1KU09OLnBhcnNlKE4pfWNhdGNoe2c9Tn1lbHNlIGc9Tjt2YXIgQz1ILnByZXR0aWZ5U3RyaW5nKGcpLnNwbGl0KCJcbiIpO3JldHVybiBDLmxl'@;
put 'bmd0aD41MSYmKEMuc3BsaWNlKDUwKSxDLnB1c2goIi4uLiIpKSxDLmpvaW4oIlxuIil9LHRoaXMuZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrPWZ1bmN0aW9uKE4pe3ZhciBnLEM9Ik5vdCBwcm92aWRlZCIsUz17X2hlYWRlcjoiIi5jb25jYXQoQywiXG4iKSxyZXM6e3Jhd0hlYWRlcnM6'@;
put 'W0NdfX0sdj1OO2lmKGouZGVmYXVsdC5pc0F4aW9zRXJyb3IoTikpe3ZhciBwPU4ucmVzcG9uc2Usdz1OLnJlcXVlc3QsSj1OLmNvbmZpZztpZihwKXY9cDtlbHNle2lmKHcpe3ZhciBuZT13Ll9oZWFkZXIsZGU9dy5fY3VycmVudFJlcXVlc3Q7bmU/Uy5faGVhZGVyPW5lOmRlJiZkZS5faGVh'@;
put 'ZGVyJiYoUy5faGVhZGVyPWRlLl9oZWFkZXIpO3ZhciBmZT13LnJlcztmZSYmZmUucmF3SGVhZGVycyYmKFMucmVzLnJhd0hlYWRlcnM9ZmUucmF3SGVhZGVycyl9dj17c3RhdHVzOkMscmVxdWVzdDpTLGNvbmZpZzpKfHx7ZGF0YTpDfSxkYXRhOkN9fX12YXIgeGU9di5zdGF0dXMsT2U9di5k'@;
put 'YXRhLGplPXYuY29uZmlnLmRhdGEsV2U9di5yZXF1ZXN0fHxTLEtlPVdlLl9oZWFkZXIsWWU9V2UucmVzLnJhd0hlYWRlcnMucmVkdWNlKGZ1bmN0aW9uKGx0LFBlLGJlKXtyZXR1cm4gbHQrKGJlJTI9PTA/IiIuY29uY2F0KDA9PT1iZT8iIjoiXG4iKS5jb25jYXQoUGUpOiI6ICIuY29uY2F0'@;
put 'KFBlKSl9LCIiKSxRZT1ILnBhcnNlSW50ZXJjZXB0ZWRCb2R5KE9lKTtyZXR1cm4gbnVsbD09PShnPXoubG9nZ2VyKXx8dm9pZCAwPT09Z3x8Zy5pbmZvKCJIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiIuY29uY2F0KEtlKS5jb25jYXQoSC5wYXJzZUludGVyY2VwdGVkQm9keShq'@;
put 'ZSksIlxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICIpLmNvbmNhdChILnByZXR0aWZ5U3RyaW5nKHhlKSwiXG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiIpLmNvbmNhdChZZSkuY29uY2F0KFFlPyJcblxuIi5jb25jYXQoUWUpOiIiLCJcbiIpKSxOfSx0aGlzLnNldFZlcmJv'@;
put 'c2VNb2RlPWZ1bmN0aW9uKE4pe0gudmVyYm9zZU1vZGU9TixILnZlcmJvc2VNb2RlP0guZW5hYmxlVmVyYm9zZU1vZGUoKTpILmRpc2FibGVWZXJib3NlTW9kZSgpfSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKE4sZyl7dm9pZCAwPT09TiYmKE49SC5kZWZhdWx0SW50ZXJjZXB0'@;
put 'aW9uQ2FsbEJhY2spLHZvaWQgMD09PWcmJihnPUguZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrKSxILmh0dHBJbnRlcmNlcHRvcj1ILmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShOLGcpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT1mdW5jdGlvbigpe0guaHR0cElu'@;
put 'dGVyY2VwdG9yJiZILmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KEguaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPWZ1bmN0aW9uKE4sZyl7dmFyIEM9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT1nJiYoQ1siQ29u'@;
put 'dGVudC1UeXBlIl09ZyksQy5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09Zz8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsTiYmKEMuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KE4pKSxILmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZILmNzcmZUb2tlbi52YWx1ZSYmKENbSC5jc3Jm'@;
put 'VG9rZW4uaGVhZGVyTmFtZV09SC5jc3JmVG9rZW4udmFsdWUpLEN9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPWZ1bmN0aW9uKE4pe3ZhciBnPUgucGFyc2VDc3JmVG9rZW4oTik7ZyYmKEguZmlsZVVwbG9hZENzcmZUb2tlbj1nKX0sdGhpcy5wYXJzZUFuZFNldENzcmZU'@;
put 'b2tlbj1mdW5jdGlvbihOKXt2YXIgZz1ILnBhcnNlQ3NyZlRva2VuKE4pO2cmJihILmNzcmZUb2tlbj1nKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1mdW5jdGlvbihOKXt2YXIgZyxDPW51bGw9PT0oZz1OLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PWc/dm9pZCAwOmcudG9M'@;
put 'b3dlckNhc2UoKTtpZihDKXJldHVybntoZWFkZXJOYW1lOkMsdmFsdWU6Ti5oZWFkZXJzW0NdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oTixnLEMpe3JldHVybiB2b2lkIDA9PT1DJiYoQz0hMSksayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUyx2O3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24ocCl7c3dpdGNoKHAubGFiZWwpe2Nhc2UgMDpyZXR1cm4gUz1OLnJlc3BvbnNlLE4gaW5zdGFuY2VvZiBZLkF1dGhvcml6ZUVycm9yP1s0LHRoaXMuaHR0cENsaWVudC5nZXQoTi5jb25maXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50'@;
put 'LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGdldHRpbmcgZXJyb3IgY29uZmlybVVybC4gIil9KV06WzMsNV07Y2FzZSAxOnJldHVybiB2PXAuc2VudCgpLCgwLEIuaXNB'@;
put 'dXRob3JpemVGb3JtUmVxdWlyZWQpKHY/LmRhdGEpP1s0LHRoaXMuYXV0aG9yaXplKHYuZGF0YSkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSldOlszLDNdO2Nhc2UgMjpwLnNlbnQoKSxw'@;
put 'LmxhYmVsPTM7Y2FzZSAzOnJldHVybls0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTtjYXNlIDQ6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgNTppZihO'@;
put 'IGluc3RhbmNlb2YgWS5Mb2dpblJlcXVpcmVkRXJyb3IpdGhyb3cgdGhpcy5jbGVhckNzcmZUb2tlbnMoKSxOO3JldHVybiBOIGluc3RhbmNlb2YgdGUuSW52YWxpZFNBU2pzQ3NyZkVycm9yP1s0LHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1'@;
put 'bmN0aW9uKHcpe3ZhciBKLG5lPW51bGw9PT0oSj0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMody5kYXRhKSl8fHZvaWQgMD09PUo/dm9pZCAwOkpbMV07'@;
put 'bmUmJihkb2N1bWVudC5jb29raWU9bmUpfSkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KV06WzMsOF07Y2FzZSA2OnJldHVybiBwLnNlbnQoKSxbNCxnKCkuY2F0Y2goZnVuY3Rpb24o'@;
put 'dyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV07Y2FzZSA3OnJldHVyblsyLHAuc2VudCgpXTtjYXNlIDg6cmV0dXJuIDQwMyE9PVM/LnN0YXR1cyYmNDQ5IT09Uz8uc3RhdHVzP1szLDExXToo'@;
put 'dGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbihTKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZT9bNCxnKCkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBo'@;
put 'YW5kbGVFcnJvci4gIil9KV06WzMsMTBdKTtjYXNlIDk6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgMTA6dGhyb3cgTjtjYXNlIDExOmlmKDQwND09PVM/LnN0YXR1cyl0aHJvdyBuZXcgWS5Ob3RGb3VuZEVycm9yKFMuY29uZmlnLnVybCk7aWYoNTAyPT09Uz8uc3RhdHVzKXtpZihDKXRocm93'@;
put 'IG5ldyBZLkludGVybmFsU2VydmVyRXJyb3I7cmV0dXJuWzJdfXAubGFiZWw9MTI7Y2FzZSAxMjp0aHJvdyBOLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09Ti5jb2RlP25ldyBZLkNlcnRpZmljYXRlRXJyb3IoTi5tZXNzYWdlKTpOLm1lc3NhZ2U/'@;
put 'TjooMCxVLnByZWZpeE1lc3NhZ2UpKE4sIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX19KX0pfSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoY2UsRyksYiYmKHRoaXMucmVxdWVzdHNMaW1pdD1iKSxEJiYodGhpcy5zZXRWZXJib3NlTW9kZShEKSx0aGlzLmVuYWJsZVZlcmJvc2VNb2Rl'@;
put 'KCkpfXJldHVybiB1ZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKGNlLEcpe3RoaXMuY3JlYXRlSHR0cENsaWVudChjZSxHKX0sdWUucHJvdG90eXBlLnNhdmVMb2NhbFN0b3JhZ2VUb2tlbj1mdW5jdGlvbihjZSxHKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLGNl'@;
put 'KSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIixHKX0sdWUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbihjZSl7cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9ImdlbmVyYWwiKSwiZmlsZSI9PT1jZT90aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW46dGhpcy5jc3JmVG9r'@;
put 'ZW59LHVlLnByb3RvdHlwZS5jbGVhckNzcmZUb2tlbnM9ZnVuY3Rpb24oKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX0sdWUucHJvdG90eXBlLmNsZWFyTG9jYWxTdG9yYWdl'@;
put 'VG9rZW5zPWZ1bmN0aW9uKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfSx1ZS5wcm90b3R5cGUuZ2V0QmFzZVVybD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMu'@;
put 'YmFzZVVSTHx8IiJ9LHVlLnByb3RvdHlwZS5hcHBlbmRSZXF1ZXN0PWZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ9IiIsSD0iIixOPW51bGw7YiYmKGNlPy5sb2c/KEQ9KDAsZWUucGFyc2VTb3VyY2VDb2RlKShjZS5sb2cpLEg9KDAsZWUucGFyc2VHZW5lcmF0ZWRDb2RlKShjZS5sb2cpLE49Y2U/'@;
put 'LnJlc3VsdD9jZS5yZXN1bHQuV09SSzpjZS5sb2cpOmNlPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9mIGNlLnJlc3VsdCYmKEQ9KDAsZWUucGFyc2VTb3VyY2VDb2RlKShjZS5yZXN1bHQpLEg9KDAsZWUucGFyc2VHZW5lcmF0ZWRDb2RlKShjZS5yZXN1bHQpKSxOPWNlLnJlc3VsdC5XT1JL'@;
put 'KSk7dmFyIGc9InN0cmluZyI9PXR5cGVvZiBjZT8ucmVzdWx0P2NlPy5yZXN1bHQ6SlNPTi5zdHJpbmdpZnkoY2U/LnJlc3VsdCxudWxsLDIpO3RoaXMucmVxdWVzdHMucHVzaCh7bG9nRmlsZTpjZT8ubG9nfHxnfHxjZSxzZXJ2aWNlTGluazpHLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VD'@;
put 'b2RlOkQsZ2VuZXJhdGVkQ29kZTpILFNBU1dPUks6Tn0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxpY2UoMCwxKX0sdWUucHJvdG90eXBlLmdldD1mdW5jdGlvbihjZSxHLGIsRCxIKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9ImFw'@;
put 'cGxpY2F0aW9uL2pzb24iKSx2b2lkIDA9PT1EJiYoRD17fSksdm9pZCAwPT09SCYmKEg9ITEpLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE4sZyxDPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihTKXtyZXR1cm4gTj1MKEwoe30sdGhpcy5nZXRIZWFkZXJzKEcsYikp'@;
put 'LEQpLGc9e2hlYWRlcnM6TixyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Yj8idGV4dCI6Impzb24iLHdpdGhDcmVkZW50aWFsczohMH0sInRleHQvcGxhaW4iPT09YiYmKGcudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSxbMix0aGlzLmh0dHBDbGllbnQuZ2V0KGNlLGcpLnRoZW4oZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKHYpLEMucGFyc2VSZXNwb25zZSh2KX0pLmNhdGNoKGZ1bmN0aW9uKHYpe3JldHVybiBrKEMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBwPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih3KXtzd2l0Y2gody5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IodixmdW5jdGlvbigpe3JldHVybiBwLmdldChjZSxHLGIsRCkuY2F0Y2goZnVuY3Rpb24oSil7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKEosIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSl9'@;
put 'LEgpXTtjYXNlIDE6cmV0dXJuWzIsdy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUucG9zdD1mdW5jdGlvbihjZSxHLGIsRCxILE4pe3JldHVybiB2b2lkIDA9PT1EJiYoRD0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PUgmJihIPXt9KSx2b2lkIDA9PT1OJiYoTj17fSks'@;
put 'ayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihTKXtyZXR1cm4gZz1MKEwoe30sdGhpcy5nZXRIZWFkZXJzKGIsRCkpLEgpLFsyLHRoaXMuaHR0cENsaWVudC5wb3N0KGNlLEcsTCh7aGVhZGVyczpnLHdpdGhDcmVkZW50'@;
put 'aWFsczohMH0sTikpLnRoZW4oZnVuY3Rpb24odil7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKHYpLEMucGFyc2VSZXNwb25zZSh2KX0pLmNhdGNoKGZ1bmN0aW9uKHYpe3JldHVybiBrKEMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBwPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlv'@;
put 'bih3KXtzd2l0Y2gody5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IodixmdW5jdGlvbigpe3JldHVybiBwLnBvc3QoY2UsRyxiLEQsSCl9KV07Y2FzZSAxOnJldHVyblsyLHcuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnB1dD1mdW5jdGlvbihjZSxH'@;
put 'LGIsRCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE49dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3JldHVybiBIPUwoTCh7fSx0aGlzLmdldEhlYWRlcnMoYiwiYXBwbGljYXRpb24vanNvbiIpKSxEKSxbMix0'@;
put 'aGlzLmh0dHBDbGllbnQucHV0KGNlLEcse2hlYWRlcnM6SCx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKEMpe3JldHVybigwLE8udGhyb3dJZkVycm9yKShDKSxOLnBhcnNlUmVzcG9uc2UoQyl9KS5jYXRjaChmdW5jdGlvbihDKXtyZXR1cm4gayhOLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXt2YXIgUz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKEMsZnVuY3Rpb24oKXtyZXR1cm4gUy5wdXQoY2UsRyxiLEQpfSldO2Nhc2UgMTpyZXR1cm5bMix2LnNlbnQoKV19fSl9'@;
put 'KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oY2UsRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuIGI9dGhpcy5nZXRIZWFkZXJzKEcsImFwcGxpY2F0aW9uL2pz'@;
put 'b24iKSxbMix0aGlzLmh0dHBDbGllbnQuZGVsZXRlKGNlLHtoZWFkZXJzOmIsd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihOKXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikoTiksRC5wYXJzZVJlc3BvbnNlKE4pfSkuY2F0Y2goZnVuY3Rpb24oTil7cmV0dXJuIGsoRCx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGc9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihOLGZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVsZXRlKGNlLEcpfSldO2Nhc2UgMTpyZXR1cm5bMixDLnNl'@;
put 'bnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbihjZSxHLGIpe3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxIPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihOKXtyZXR1cm4gRD10aGlz'@;
put 'LmdldEhlYWRlcnMoYiwiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVudC5wYXRjaChjZSxHLHtoZWFkZXJzOkQsd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihnKXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikoZyksSC5wYXJzZVJlc3BvbnNlKGcpfSkuY2F0'@;
put 'Y2goZnVuY3Rpb24oZyl7cmV0dXJuIGsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihnLGZ1bmN0aW9uKCl7cmV0dXJuIEMucGF0Y2go'@;
put 'Y2UsRyxiKX0pXTtjYXNlIDE6cmV0dXJuWzIsUy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUudXBsb2FkRmlsZT1mdW5jdGlvbihjZSxHLGIpe3ZhciBEO3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE4sZztyZXR1cm4gRSh0aGlzLGZ1bmN0'@;
put 'aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6SD10aGlzLmdldEhlYWRlcnMoYiwiYXBwbGljYXRpb24vanNvbiIpLCEobnVsbD09PShEPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbil8fHZvaWQgMD09PUQpJiZELnZhbHVlJiYoSFt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVy'@;
put 'TmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLnZhbHVlKSxDLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBDLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5odHRwQ2xpZW50LnBvc3QoY2UsRyx7aGVhZGVyczpILHRyYW5zZm9ybVJlcXVlc3Q6ZnVuY3Rpb24oUyl7cmV0dXJuIFN9fSld'@;
put 'O2Nhc2UgMjpyZXR1cm5bMix7cmVzdWx0OihnPUMuc2VudCgpKS5kYXRhLGV0YWc6Zy5oZWFkZXJzLmV0YWd9XTtjYXNlIDM6aWYoTj1DLnNlbnQoKSw0MDM9PT0obnVsbD09KGc9Ti5yZXNwb25zZSk/dm9pZCAwOmcuc3RhdHVzKXx8NDQ5PT09Zz8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5k'@;
put 'U2V0RmlsZVVwbG9hZENzcmZUb2tlbihnKSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pcmV0dXJuWzIsdGhpcy51cGxvYWRGaWxlKGNlLEcsYildO3Rocm93IE59dGhyb3cgTjtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LHVlLnByb3RvdHlwZS5wYXJzZVJlc3BvbnNlPWZ1bmN0aW9uKGNlKXt2'@;
put 'YXIgRyxiPWNlPy5oZWFkZXJzP2NlLmhlYWRlcnMuZXRhZzoiIixEPSExO3RyeXtHPSJzdHJpbmciPT10eXBlb2YgY2UuZGF0YT9KU09OLnBhcnNlKGNlLmRhdGEpOmNlLmRhdGF9Y2F0Y2h7dHJ5e0c9SlNPTi5wYXJzZSgoMCxYLnBhcnNlV2Vib3V0UmVzcG9uc2UpKGNlLmRhdGEpKX1jYXRj'@;
put 'aHtHPWNlLmRhdGF9RD0hMH12YXIgSD17cmVzdWx0OkcsZXRhZzpiLHN0YXR1czpjZS5zdGF0dXN9O3JldHVybiBEJiYoSC5sb2c9Y2UuZGF0YSksSH0sdWUucHJvdG90eXBlLmNyZWF0ZUh0dHBDbGllbnQ9ZnVuY3Rpb24oY2UsRyl7dmFyIGI9Rz9uZXcgVi5BZ2VudChHKTp2b2lkIDA7dGhp'@;
put 'cy5odHRwQ2xpZW50PSgwLGVlLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGNlLGIpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1mdW5jdGlvbihEKXtyZXR1cm4gRD49MjAwJiZEPD00MDF9fSx1ZX0oKTtPLlJlcXVlc3RDbGllbnQ9c2UsTy50aHJvd0lmRXJyb3I9ZnVu'@;
put 'Y3Rpb24odWUpe3ZhciBjZSxHLGIsRCxILE4sZztzd2l0Y2godWUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIHVlLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PXVlLmRhdGEuZXJyb3IpdGhyb3cgbmV3IFkuTG9naW5SZXF1aXJlZEVycm9yKHVlLmRhdGEpO2lmKCJzdHJp'@;
put 'bmciPT10eXBlb2YgdWUuZGF0YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09dWUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyB0ZS5JbnZhbGlkU0FTanNDc3JmRXJyb3I7YnJlYWs7Y2FzZSA0MDE6dGhyb3cib2JqZWN0Ij09dHlwZW9mIHVlLmRhdGE/bmV3IFkuTG9naW5SZXF1aXJl'@;
put 'ZEVycm9yKHVlLmRhdGEpOm5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcn1pZihudWxsIT09KEc9bnVsbD09PShjZT11ZS5kYXRhKXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlLmVudGl0eUlEKSYmdm9pZCAwIT09RyYmRy5pbmNsdWRlcygibG9naW4iKSl0aHJvdyBuZXcgWS5Mb2dpblJlcXVpcmVk'@;
put 'RXJyb3I7aWYoInN0cmluZyI9PXR5cGVvZiB1ZS5kYXRhJiYoMCxCLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKSh1ZS5kYXRhKSl0aHJvdyBuZXcgWS5BdXRob3JpemVFcnJvcigiQXV0aG9yaXphdGlvbiByZXF1aXJlZCIsdWUucmVxdWVzdC5yZXNwb25zZVVSTCk7aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiB1ZS5kYXRhJiYoMCxCLmlzTG9nSW5SZXF1aXJlZCkodWUuZGF0YSkmJihudWxsPT09KEQ9bnVsbD09PShiPXVlLmNvbmZpZyl8fHZvaWQgMD09PWI/dm9pZCAwOmIudXJsKXx8dm9pZCAwPT09RHx8IUQuaW5jbHVkZXMoIi9TQVNMb2dvbi9sb2dpbiIpKSl0aHJvdyBuZXcgWS5Mb2dp'@;
put 'blJlcXVpcmVkRXJyb3I7aWYobnVsbCE9PShIPXVlLmRhdGEpJiZ2b2lkIDAhPT1IJiZILmF1dGhfcmVxdWVzdCl0aHJvdyBuZXcgWS5BdXRob3JpemVFcnJvcih1ZS5kYXRhLm1lc3NhZ2UsdWUucmVxdWVzdC5yZXNwb25zZVVSTCk7aWYobnVsbCE9PShnPW51bGw9PT0oTj11ZS5jb25maWcp'@;
put 'fHx2b2lkIDA9PT1OP3ZvaWQgMDpOLnVybCkmJnZvaWQgMCE9PWcmJmcuaW5jbHVkZXMoInNhc0F1dGhFcnJvciIpKXRocm93IG5ldyBxLlNBUzlBdXRoRXJyb3I7dmFyIFM9aGUodWUuZGF0YSk7aWYoUyl0aHJvdyBTfTt2YXIgaGU9ZnVuY3Rpb24odWUpe2lmKCF1ZSlyZXR1cm4gbnVsbDt0'@;
put 'cnl7dmFyIGNlPUpTT04ucGFyc2UodWU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO2lmKGNlLmVycm9yQ29kZSYmY2UubWVzc2FnZSlyZXR1cm4gbmV3IFkuSm9iRXhlY3V0aW9uRXJyb3IoY2UuZXJyb3JDb2RlLGNlLm1lc3NhZ2UsdWU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpfWNhdGNo'@;
put 'e310cnl7aWYodWU/LmluY2x1ZGVzKCd7ImVycm9yQ29kZScpJiYoTj11ZS5zcGxpdCgneyJlcnJvckNvZGUnKSkubGVuZ3RoPjEpe3ZhciBHPSd7ImVycm9yQ29kZScrTlsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLGI9SlNPTi5wYXJzZShHLnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO3JldHVy'@;
put 'biBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcihiLmVycm9yQ29kZSxiLm1lc3NhZ2UsdWU/LnJlcGxhY2UoL1tcblxyXS9nLCJcbiIpKX19Y2F0Y2h7fXRyeXtpZih1ZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpJiYoTj11ZS5zcGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90'@;
put 'IGZvdW5kOiAvaSkpLmxlbmd0aD4xKXt2YXIgRD1OWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLEg9RC5lbmRzV2l0aCgicnVubmVyIik/IlNBU0pTIHJ1bm5lciBub3QgZm91bmQuIEhlcmUncyB0aGUgbGluayAoaHR0cHM6Ly9jbGkuc2FzanMuaW8vYXV0aC8jc2FzanMt'@;
put 'cnVubmVyKSB0byB0aGUgU0FTIGNvZGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBTQVNqcyBydW5uZXIiOiJTdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6ICIuY29uY2F0KEQpO3JldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcig1MDAsSCwiIil9fWNhdGNoe310cnl7dmFyIE47aWYoIXVlPy5t'@;
put 'YXRjaCgvPj53ZWJvdXRCRUdJTjw8LykmJnVlPy5tYXRjaCgvU3RvcmVkIFByb2Nlc3MgRXJyb3IvaSkmJnVlPy5tYXRjaCgvVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4vaSkmJihOPXVlLnNwbGl0KCI8aDI+U0FTIExvZzwvaDI+IikpLmxlbmd0aD4xKXt2YXIgZz1OWzFd'@;
put 'LnNwbGl0KCI8cHJlPiIpWzFdLnNwbGl0KCI8L3ByZT4iKVswXTtyZXR1cm4gbmV3IFkuSm9iRXhlY3V0aW9uRXJyb3IoNTAwLEg9IlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixnKX19Y2F0Y2h7fXJldHVybiBudWxsfX0sNzk1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0'@;
put 'cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHRlLG9lKXt0ZS5fX3Byb3RvX189b2V9fHxmdW5jdGlvbih0ZSxv'@;
put 'ZSl7Zm9yKHZhciBzZSBpbiBvZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2Usc2UpJiYodGVbc2VdPW9lW3NlXSl9KShxLGVlKX0sZnVuY3Rpb24ocSxlZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlJiZudWxsIT09ZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xh'@;
put 'c3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhlZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gdGUoKXt0aGlzLmNvbnN0cnVjdG9yPXF9eihxLGVlKSxxLnByb3RvdHlwZT1udWxsPT09ZWU/T2JqZWN0LmNyZWF0ZShlZSk6KHRlLnByb3RvdHlwZT1lZS5wcm90'@;
put 'b3R5cGUsbmV3IHRlKX0pLEw9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gTD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihxKXtmb3IodmFyIGVlLHRlPTEsb2U9YXJndW1lbnRzLmxlbmd0aDt0ZTxvZTt0ZSsrKWZvcih2YXIgc2UgaW4gZWU9YXJndW1lbnRzW3RlXSlP'@;
put 'YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWUsc2UpJiYocVtzZV09ZWVbc2VdKTtyZXR1cm4gcX0sTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHEsZWUsdGUsb2Upe3JldHVybiBuZXcodGV8fCh0ZT1Qcm9taXNl'@;
put 'KSkoZnVuY3Rpb24oc2UsaGUpe2Z1bmN0aW9uIHVlKGIpe3RyeXtHKG9lLm5leHQoYikpfWNhdGNoKEQpe2hlKEQpfX1mdW5jdGlvbiBjZShiKXt0cnl7RyhvZS50aHJvdyhiKSl9Y2F0Y2goRCl7aGUoRCl9fWZ1bmN0aW9uIEcoYil7dmFyIEQ7Yi5kb25lP3NlKGIudmFsdWUpOihEPWIudmFs'@;
put 'dWUsRCBpbnN0YW5jZW9mIHRlP0Q6bmV3IHRlKGZ1bmN0aW9uKEgpe0goRCl9KSkudGhlbih1ZSxjZSl9Rygob2U9b2UuYXBwbHkocSxlZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ocSxlZSl7dmFyIHRlLG9lLHNlLGhlLHVlPXtsYWJlbDow'@;
put 'LHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnNlWzBdKXRocm93IHNlWzFdO3JldHVybiBzZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBoZT17bmV4dDpjZSgwKSx0aHJvdzpjZSgxKSxyZXR1cm46Y2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihoZVtTeW1ib2wuaXRlcmF0b3Jd'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxoZTtmdW5jdGlvbiBjZShHKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGZ1bmN0aW9uKEQpe2lmKHRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3VlOyl0cnl7aWYodGU9MSxv'@;
put 'ZSYmKHNlPTImRFswXT9vZS5yZXR1cm46RFswXT9vZS50aHJvd3x8KChzZT1vZS5yZXR1cm4pJiZzZS5jYWxsKG9lKSwwKTpvZS5uZXh0KSYmIShzZT1zZS5jYWxsKG9lLERbMV0pKS5kb25lKXJldHVybiBzZTtzd2l0Y2gob2U9MCxzZSYmKEQ9WzImRFswXSxzZS52YWx1ZV0pLERbMF0pe2Nh'@;
put 'c2UgMDpjYXNlIDE6c2U9RDticmVhaztjYXNlIDQ6cmV0dXJuIHVlLmxhYmVsKysse3ZhbHVlOkRbMV0sZG9uZTohMX07Y2FzZSA1OnVlLmxhYmVsKyssb2U9RFsxXSxEPVswXTtjb250aW51ZTtjYXNlIDc6RD11ZS5vcHMucG9wKCksdWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0Omlm'@;
put 'KCEoKHNlPShzZT11ZS50cnlzKS5sZW5ndGg+MCYmc2Vbc2UubGVuZ3RoLTFdKXx8NiE9PURbMF0mJjIhPT1EWzBdKSl7dWU9MDtjb250aW51ZX1pZigzPT09RFswXSYmKCFzZXx8RFsxXT5zZVswXSYmRFsxXTxzZVszXSkpe3VlLmxhYmVsPURbMV07YnJlYWt9aWYoNj09PURbMF0mJnVlLmxh'@;
put 'YmVsPHNlWzFdKXt1ZS5sYWJlbD1zZVsxXSxzZT1EO2JyZWFrfWlmKHNlJiZ1ZS5sYWJlbDxzZVsyXSl7dWUubGFiZWw9c2VbMl0sdWUub3BzLnB1c2goRCk7YnJlYWt9c2VbMl0mJnVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlfUQ9ZWUuY2FsbChxLHVlKX1jYXRjaChIKXtE'@;
put 'PVs2LEhdLG9lPTB9ZmluYWxseXt0ZT1zZT0wfWlmKDUmRFswXSl0aHJvdyBEWzFdO3JldHVybnt2YWx1ZTpEWzBdP0RbMV06dm9pZCAwLGRvbmU6ITB9fShbRyxiXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2FzOVJlcXVlc3RDbGll'@;
put 'bnQ9dm9pZCAwO3ZhciBqPVIoODIyNCksVj1SKDc4NTcpLEI9Uig5Nzc4KSxZPVIoNDU4OCksWD1SKDEzOTUpLFU9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gZWUodGUsb2Upe3ZhciBzZT1xLmNhbGwodGhpcyx0ZSxvZSl8fHRoaXM7cmV0dXJuIHNlLmh0dHBDbGllbnQuZGVmYXVsdHMubWF4UmVk'@;
put 'aXJlY3RzPTAsc2UuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1mdW5jdGlvbihoZSl7cmV0dXJuIGhlPj0yMDAmJmhlPDMwM30sai5kZWZhdWx0JiYoKDAsai5kZWZhdWx0KShzZS5odHRwQ2xpZW50KSxzZS5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgVi5Db29raWVK'@;
put 'YXIpLHNlfXJldHVybiBLKGVlLHEpLGVlLnByb3RvdHlwZS5sb2dpbj1mdW5jdGlvbih0ZSxvZSxzZSl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGhlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBo'@;
put 'ZT0iL1VzZXIgRm9sZGVycy8iLmNvbmNhdCh0ZSwiL015IEZvbGRlci9zYXNqcy9ydW5uZXIiKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPyh0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tpZXMoKSxbNCx0aGlzLmdldCgiIi5jb25jYXQoc2UsIj9fcHJv'@;
put 'Z3JhbT0iKS5jb25jYXQoaGUsIiZfdXNlcm5hbWU9IikuY29uY2F0KHRlLCImX3Bhc3N3b3JkPSIpLmNvbmNhdChvZSksdm9pZCAwLCJ0ZXh0L3BsYWluIildKTpbMywyXTtjYXNlIDE6dWUuc2VudCgpLHVlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSxlZS5wcm90b3R5cGUuZ2V0'@;
put 'PWZ1bmN0aW9uKHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gdm9pZCAwPT09c2UmJihzZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PWhlJiYoaGU9e30pLHZvaWQgMD09PXVlJiYodWU9ITEpLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGNlLEcsYj10aGlzO3JldHVy'@;
put 'biBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuIGNlPUwoTCh7fSx0aGlzLmdldEhlYWRlcnMob2Usc2UpKSxoZSksRz17aGVhZGVyczpjZSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09c2U/InRleHQiOiJqc29uIix3aXRoQ3JlZGVudGlhbHM6ITB9LCJ0ZXh0L3BsYWluIj09PXNlJiYo'@;
put 'Ry50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQodGUsRykudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gMzAyPT09SC5zdGF0dXM/Yi5nZXQoSC5oZWFkZXJzLmxvY2F0aW9uLG9lLHNlKTooKDAsWS50aHJvd0lmRXJyb3IpKEgpLGIucGFyc2VSZXNwb25z'@;
put 'ZShIKSl9KS5jYXRjaChmdW5jdGlvbihIKXtyZXR1cm4gayhiLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZihIIGluc3RhbmNlb2YgWC5Kb2JFeGVjdXRpb25FcnJvcil0aHJvdyBI'@;
put 'O3JldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoSCxmdW5jdGlvbigpe3JldHVybiBOLmdldCh0ZSxvZSxzZSxoZSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSl9LHVl'@;
put 'KS5jYXRjaChmdW5jdGlvbihDKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0pXX0pfSl9LGVlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHRlLG9lLHNlLGhlLHVlKXty'@;
put 'ZXR1cm4gdm9pZCAwPT09aGUmJihoZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PXVlJiYodWU9e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGNlLEc9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBjZT1MKEwoe30sdGhpcy5nZXRIZWFk'@;
put 'ZXJzKHNlLGhlKSksdWUpLFsyLHRoaXMuaHR0cENsaWVudC5wb3N0KHRlLG9lLHtoZWFkZXJzOmNlLHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIGsoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2go'@;
put 'SC5sYWJlbCl7Y2FzZSAwOnJldHVybiAzMDIhPT1ELnN0YXR1cz9bMywyXTpbNCx0aGlzLmdldChELmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLGhlLHVlKV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXTtjYXNlIDI6cmV0dXJuKDAsWS50aHJvd0lmRXJyb3IpKEQpLFsyLHRoaXMucGFyc2VS'@;
put 'ZXNwb25zZShEKV19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKEQpe3JldHVybiBrKEcsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoRCxmdW5j'@;
put 'dGlvbigpe3JldHVybiBILnBvc3QodGUsb2Usc2UsaGUsdWUpfSldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9KX0pXX0pfSl9LGVlfShZLlJlcXVlc3RDbGllbnQpO08uU2FzOVJlcXVlc3RDbGllbnQ9VX0sMzYwMjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9'@;
put 'dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGssRSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGosVil7ai5fX3Byb3RvX189Vn18fGZ1bmN0aW9uKGosVil7Zm9yKHZhciBCIGluIFYpT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsQikmJihqW0JdPVZbQl0pfSkoayxFKX0sZnVuY3Rpb24oayxFKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgRSYmbnVsbCE9PUUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlz'@;
put 'IG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBqKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfXooayxFKSxrLnByb3RvdHlwZT1udWxsPT09RT9PYmplY3QuY3JlYXRlKEUpOihqLnByb3RvdHlwZT1FLnByb3RvdHlwZSxuZXcgail9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNKU19MT0dTX1NFUEFSQVRPUj1PLlNhc2pzUmVxdWVzdENsaWVudD12b2lkIDA7dmFyIEw9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gRSgpe3ZhciBqPW51bGwhPT1rJiZrLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gai5nZXRI'@;
put 'ZWFkZXJzPWZ1bmN0aW9uKFYsQil7dmFyIFksWD17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PUImJihYWyJDb250ZW50LVR5cGUiXT1CKSxYLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1CP0I6IiovKiIsVnx8dHlwZW9mIHdpbmRvdz4idSJ8fChW'@;
put 'PW51bGwhPT0oWT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PVk/WTp2b2lkIDApLFYmJihYLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChWKSksWH0san1yZXR1cm4gSyhFLGspLEUucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24o'@;
put 'ail7dmFyIFYsQixZLFg9aj8uaGVhZGVycz9qLmhlYWRlcnMuZXRhZzoiIixVPXt9O3RyeXtVPSJzdHJpbmciPT10eXBlb2Ygai5kYXRhP0pTT04ucGFyc2Uoai5kYXRhKTpqLmRhdGF9Y2F0Y2h7aWYoai5kYXRhLmluY2x1ZGVzKE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpKXt2YXIgcT1qLmRh'@;
put 'dGEsZWU9cS5zcGxpdChPLlNBU0pTX0xPR1NfU0VQQVJBVE9SKTt2b2lkIDAhPT0oVj1lZS5zcGxpY2UoMCwxKVswXSkmJihVPVYpO3ZhciB0ZT1lZS5zcGxpY2UoMCxlZS5sZW5ndGgtMSksb2U9bmV3IFJlZ0V4cCgiIi5jb25jYXQoTy5TQVNKU19MT0dTX1NFUEFSQVRPUiwiJCIpKSxzZT1l'@;
put 'ZVswXTtzZSYmKG9lLnRlc3QocSk/dGUubGVuZ3RoPjEmJnRlLnB1c2goc2UpOlk9c2UpLEI9dGUuam9pbihPLlNBU0pTX0xPR1NfU0VQQVJBVE9SKX1lbHNlIFU9ai5kYXRhfXZhciBoZT17cmVzdWx0OlUsbG9nOkJ8fCIiLGV0YWc6WCxzdGF0dXM6ai5zdGF0dXN9O3JldHVybiBZJiYoaGUu'@;
put 'cHJpbnRPdXRwdXQ9WSksaGV9LEV9KFIoNDU4OCkuUmVxdWVzdENsaWVudCk7Ty5TYXNqc1JlcXVlc3RDbGllbnQ9TCxPLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJTQVNKU19MT0dTX1NFUEFSQVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3MDooTSxPKT0+eyJ1c2Ug'@;
put 'c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ2NjY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTc2NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ5NzU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzgyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KX0sNDE2ODooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pfSwzODQwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzE1MzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KE0s'@;
put 'Tyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSLEs7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTG9naW5NZWNoYW5p'@;
put 'c209Ty5TQVNqc0NvbmZpZz12b2lkIDAsTy5TQVNqc0NvbmZpZz1mdW5jdGlvbigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIiLHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRl'@;
put 'YnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5pc209Ui5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH0sKEs9Uj1PLkxvZ2luTWVjaGFuaXNtfHwoTy5Mb2dpbk1lY2hhbmlz'@;
put 'bT17fSkpLkRlZmF1bHQ9IkRlZmF1bHQiLEsuUmVkaXJlY3RlZD0iUmVkaXJlY3RlZCJ9LDYwMzg6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2Vzc2lvblN0YXRlPXZvaWQgMCwoUj1PLlNlc3Np'@;
put 'b25TdGF0ZXx8KE8uU2Vzc2lvblN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFIuUnVubmluZz0icnVubmluZyIsUi5QZW5kaW5nPSJwZW5kaW5nIixSLklkbGU9ImlkbGUiLFIuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixSLk5vU3RhdGU9IiIsUi5GYWlsZWQ9ImZhaWxlZCIs'@;
put 'Ui5FcnJvcj0iZXJyb3IifSw5NDkzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODY1MDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSl9LDEyNDpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihMLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19w'@;
put 'cm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEwsayl9LGZ1bmN0aW9uKEwsayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9TH1SKEwsayksTC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5w'@;
put 'cm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQXV0aG9yaXplRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1MLmNhbGwodGhpcyxFKXx8dGhpcztyZXR1cm4gVi5tZXNz'@;
put 'YWdlPUUsVi5jb25maXJtVXJsPWosVi5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsay5wcm90b3R5cGUpLFZ9cmV0dXJuIHooayxMKSxrfShFcnJvcik7Ty5BdXRob3JpemVFcnJvcj1LfSw5NDY1OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBS'@;
put 'LHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEwsayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGop'@;
put 'T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoTCxrKX0sZnVuY3Rpb24oTCxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsi'@;
put 'IGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1MfVIoTCxrKSxMLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'TywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5DZXJ0aWZpY2F0ZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKEUpe3ZhciBqPUwuY2FsbCh0aGlzLCIiLmNvbmNhdChFLCJcblBsZWFzZSB2aXNpdCB0aGUgbGluayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1h'@;
put 'dGlvbiBvbiB0aGlzIGlzc3VlOlxuLSAiKS5jb25jYXQoImh0dHBzOi8vZ2l0aHViLmNvbS9zYXNqcy9jbGkvaXNzdWVzLzExODEjaXNzdWVjb21tZW50LTEwOTA2Mzg1ODQiLCJcbiIpKXx8dGhpcztyZXR1cm4gai5uYW1lPSJDZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEwpLGt9KEVycm9yKTtPLkNlcnRpZmljYXRlRXJyb3I9S30sNTI2NzpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihMLGspe3JldHVybihSPU9iamVjdC5zZXRQ'@;
put 'cm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEwsayl9'@;
put 'LGZ1bmN0aW9uKEwsayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9'@;
put 'TH1SKEwsayksTC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDt2'@;
put 'YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKEUsail7dmFyIFY9TC5jYWxsKHRoaXMsIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpfHx0aGlzO3JldHVybiBWLmpvYj1FLFYubG9nPWosVi5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVP'@;
put 'ZihWLGsucHJvdG90eXBlKSxWfXJldHVybiB6KGssTCksa30oRXJyb3IpO08uQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPUt9LDkyMzI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uRXJyb3JSZXNwb25zZT12'@;
put 'b2lkIDAsTy5FcnJvclJlc3BvbnNlPWZ1bmN0aW9uKHosSyxMKXt2YXIgaz1LO2lmKCJvYmplY3QiIT10eXBlb2YgSyl0cnl7az1KU09OLnBhcnNlKEspfWNhdGNoe0w9SyxrPSIifXRoaXMuZXJyb3I9e21lc3NhZ2U6eixkZXRhaWxzOmsscmF3Okx9fX0sNTEwOTpmdW5jdGlvbihNLE8peyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihMLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGop'@;
put 'e2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEwsayl9LGZ1bmN0aW9uKEwsayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFs'@;
put 'dWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9TH1SKEwsayksTC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gaygpe3ZhciBFPUwuY2FsbCh0aGlzLCJFcnJvcjogSW50ZXJuYWwgc2VydmVyIGVycm9yLiIpfHx0aGlzO3JldHVy'@;
put 'biBFLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssTCksa30oRXJyb3IpO08uSW50ZXJuYWxTZXJ2ZXJFcnJvcj1LfSw1NTE4OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYm'@;
put 'dGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEwsayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnBy'@;
put 'b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoTCxrKX0sZnVuY3Rpb24oTCxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBh'@;
put 'IGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1MfVIoTCxrKSxMLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksTy5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKCl7dmFyIEU9TC5jYWxsKHRoaXMsIkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2Jq'@;
put 'ZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxMKSxrfShFcnJvcik7Ty5JbnZhbGlkSnNvbkVycm9yPUt9LDEwMDU6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oTCxrKXtyZXR1'@;
put 'cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVb'@;
put 'Vl09altWXSl9KShMLGspfSxmdW5jdGlvbihMLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0'@;
put 'aGlzLmNvbnN0cnVjdG9yPUx9UihMLGspLEwucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkludmFsaWRTQVNqc0NzcmZF'@;
put 'cnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gaygpe3ZhciBFPXRoaXM7cmV0dXJuKEU9TC5jYWxsKHRoaXMsIkF1dGggZXJyb3I6ICIuY29uY2F0KCJJbnZhbGlkIENTUkYgdG9rZW4hIikpfHx0aGlzKS5uYW1lPSJJbnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssTCksa30oRXJyb3IpO08uSW52YWxpZFNBU2pzQ3NyZkVycm9yPUt9LDg1MzE6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oTCxrKXtyZXR1'@;
put 'cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVb'@;
put 'Vl09altWXSl9KShMLGspfSxmdW5jdGlvbihMLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0'@;
put 'aGlzLmNvbnN0cnVjdG9yPUx9UihMLGspLEwucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkpvYkV4ZWN1dGlvbkVycm9y'@;
put 'PXZvaWQgMDt2YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKEUsaixWKXt2YXIgQj1MLmNhbGwodGhpcywiRXJyb3IgQ29kZSAiLmNvbmNhdChFLCI6ICIpLmNvbmNhdChqKSl8fHRoaXM7cmV0dXJuIEIuZXJyb3JDb2RlPUUsQi5lcnJvck1lc3NhZ2U9aixCLnJlc3VsdD1WLEIubmFtZT0i'@;
put 'Sm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihCLGsucHJvdG90eXBlKSxCfXJldHVybiB6KGssTCksa30oRXJyb3IpO08uSm9iRXhlY3V0aW9uRXJyb3I9S30sOTA3OTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRz'@;
put 'fHwoUj1mdW5jdGlvbihMLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3du'@;
put 'UHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEwsayl9LGZ1bmN0aW9uKEwsayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBv'@;
put 'ciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9TH1SKEwsayksTC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLE8uSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1MLmNhbGwodGhpcywiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdGUgZm9yIGpvYiAiLmNvbmNhdChFLCI6ICIpLmNvbmNhdChqLm1lc3NhZ2V8fGopKXx8dGhp'@;
put 'cztyZXR1cm4gVi5vcmlnaW5hbEVycm9yPWosVi5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsay5wcm90b3R5cGUpLFZ9cmV0dXJuIHooayxMKSxrfShFcnJvcik7Ty5Kb2JTdGF0ZVBvbGxFcnJvcj1LfSwzMDk2OmZ1bmN0aW9uKE0sTyl7InVzZSBz'@;
put 'dHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEwsayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9y'@;
put 'KHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoTCxrKX0sZnVuY3Rpb24oTCxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAi'@;
put 'K1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1MfVIoTCxrKSxMLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKCl7dmFyIEU9TC5jYWxsKHRoaXMsIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIil8fHRoaXM7cmV0'@;
put 'dXJuIEUubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxMKSxrfShFcnJvcik7Ty5Kc29uUGFyc2VBcnJheUVycm9yPUt9LDY3NDM6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlz'@;
put 'JiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oTCxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3Qu'@;
put 'cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShMLGspfSxmdW5jdGlvbihMLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90'@;
put 'IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUx9UihMLGspLEwucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxPLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gayhFKXt2YXIgaj10aGlzLFY9RT9KU09OLnN0cmluZ2lmeShFLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJj'@;
put 'ZSI7cmV0dXJuKGo9TC5jYWxsKHRoaXMsIkF1dGggZXJyb3I6ICIuY29uY2F0KFYpKXx8dGhpcykubmFtZT0iTG9naW5SZXF1aXJlZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEwpLGt9KEVycm9yKTtPLkxvZ2luUmVxdWlyZWRFcnJv'@;
put 'cj1LfSw3ODY0OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEwsayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5f'@;
put 'X3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoTCxrKX0sZnVuY3Rpb24oTCxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1MfVIoTCxrKSxMLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1r'@;
put 'LnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKEUsaixWKXt2YXIgQj1MLmNhbGwodGhpcywiQ291bGQgbm90IGdl'@;
put 'dCBzZXNzaW9uIHN0YXRlLiBTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggIi5jb25jYXQoRSwiIHdoaWxzdCBjaGVja2luZyBzdGF0ZTogIikuY29uY2F0KGopKXx8dGhpcztyZXR1cm4gQi5zZXJ2ZXJSZXNwb25zZVN0YXR1cz1FLEIuc2Vzc2lvblN0YXRlVXJsPWosQi5sb2dVcmw9VixCLm5hbWU9'@;
put 'Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsay5wcm90b3R5cGUpLEJ9cmV0dXJuIHooayxMKSxrfShFcnJvcik7Ty5Ob1Nlc3Npb25TdGF0ZUVycm9yPUt9LDk1Nzc6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5k'@;
put 'c3x8KFI9ZnVuY3Rpb24oTCxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093'@;
put 'blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShMLGspfSxmdW5jdGlvbihMLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Ig'@;
put 'b3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUx9UihMLGspLEwucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KSxPLk5vdEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIGsoRSl7dmFyIGo9TC5jYWxsKHRoaXMsIkVycm9yOiBSZXNvdXJjZSBhdCAiLmNvbmNhdChFLCIgd2FzIG5vdCBmb3VuZCIpKXx8dGhpcztyZXR1cm4gai51cmw9RSxqLm5hbWU9Ik5vdEZvdW5k'@;
put 'RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssTCksa30oRXJyb3IpO08uTm90Rm91bmRFcnJvcj1LfSw5Mjc5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24o'@;
put 'RSxqKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oVixCKXtWLl9fcHJvdG9fXz1CfXx8ZnVuY3Rpb24oVixCKXtmb3IodmFyIFkgaW4gQilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'QixZKSYmKFZbWV09QltZXSl9KShFLGopfSxmdW5jdGlvbihFLGope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBqJiZudWxsIT09ail0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGopKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0'@;
put 'aW9uIFYoKXt0aGlzLmNvbnN0cnVjdG9yPUV9eihFLGopLEUucHJvdG90eXBlPW51bGw9PT1qP09iamVjdC5jcmVhdGUoaik6KFYucHJvdG90eXBlPWoucHJvdG90eXBlLG5ldyBWKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlJvb3RGb2xk'@;
put 'ZXJOb3RGb3VuZEVycm9yPXZvaWQgMDt2YXIgTD1SKDY3OTkpLGs9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24gaihWLEIsWSl7dmFyIFg9dGhpcyxVPSJSb290IGZvbGRlciAiLmNvbmNhdChWLCIgd2FzIG5vdCBmb3VuZC4iKSsiXG5QbGVhc2UgY2hlY2sgIi5jb25jYXQoQiwiL1NBU0RyaXZlLiIp'@;
put 'KyJcbklmIHRoZSBmb2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbiI7aWYoWSl7dmFyIHE9KDAsTC5kZWNvZGVUb2tlbikoWSkuc2NvcGU7VSs9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxu'@;
put 'IisocT1xLm1hcChmdW5jdGlvbihlZSl7cmV0dXJuIiogIitlZX0pKS5qb2luKCJcbiIpfXJldHVybihYPUUuY2FsbCh0aGlzLFUpfHx0aGlzKS5uYW1lPSJSb290Rm9sZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFgsai5wcm90b3R5cGUpLFh9cmV0dXJuIEsoaixF'@;
put 'KSxqfShFcnJvcik7Ty5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1rfSw5NTI2OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEwsayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltd'@;
put 'fWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoTCxrKX0sZnVuY3Rpb24oTCxrKXtpZigiZnVuY3Rp'@;
put 'b24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1MfVIoTCxrKSxMLnByb3RvdHlwZT1udWxs'@;
put 'PT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVM5QXV0aEVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihMKXtmdW5jdGlvbiBrKCl7dmFyIEU9'@;
put 'TC5jYWxsKHRoaXMsIlRoZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9mIGNyZWRlbnRpYWxzLiIpfHx0aGlzO3JldHVybiBFLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90'@;
put 'eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEwpLGt9KEVycm9yKTtPLlNBUzlBdXRoRXJyb3I9S30sODg3NTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihMLGspe3JldHVybihSPU9iamVjdC5zZXRQ'@;
put 'cm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEwsayl9'@;
put 'LGZ1bmN0aW9uKEwsayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9'@;
put 'TH1SKEwsayksTC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7dmFyIEs9'@;
put 'ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gayhFKXt2YXIgaj1MLmNhbGwodGhpcywiRXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAiLmNvbmNhdChFKSl8fHRoaXM7cmV0dXJuIGoudXJsPUUsai5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Quc2V0UHJvdG90'@;
put 'eXBlT2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEwpLGt9KEVycm9yKTtPLldlYm91dFJlc3BvbnNlRXJyb3I9S30sMTM5NTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihM'@;
put 'LGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01vZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChWPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy'@;
put 'biBrW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLGosVil9OmZ1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihqPUUpLExbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEwsayl7Zm9yKHZhciBFIGluIEwpImRlZmF1bHQiPT09RXx8T2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxMLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDEyNCksTyksSyhSKDk0NjUpLE8pLEsoUig1MjY3KSxPKSxLKFIoOTIzMiksTyksSyhSKDUxMDkpLE8pLEsoUig1'@;
put 'NTE4KSxPKSxLKFIoODUzMSksTyksSyhSKDkwNzkpLE8pLEsoUigzMDk2KSxPKSxLKFIoNjc0MyksTyksSyhSKDc4NjQpLE8pLEsoUig5NTc3KSxPKSxLKFIoOTI3OSksTyksSyhSKDg4NzUpLE8pfSwxMjMwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5f'@;
put 'X2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxl'@;
put 'KXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEwsaixWKX06ZnVuY3Rpb24oTCxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksTFtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24o'@;
put 'TCxrKXtmb3IodmFyIEUgaW4gTCkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEwsRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoNDcwKSxPKSxLKFIoNDY2NiksTyksSyhS'@;
put 'KDQ5NzUpLE8pLEsoUig1NzY2KSxPKSxLKFIoMjE1KSxPKSxLKFIoNDc4MiksTyksSyhSKDQxNjgpLE8pLEsoUig4NTE2KSxPKSxLKFIoMzg0MCksTyksSyhSKDU4NDEpLE8pLEsoUigxNDI4KSxPKSxLKFIoNjAzOCksTyksSyhSKDk0OTMpLE8pLEsoUigzMTUzKSxPKSxLKFIoODY1MCksTyks'@;
put 'SyhSKDYxNzcpLE8pLEsoUigxMzk1KSxPKX0sMzMwMjpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBSPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKEwpe2Zvcih2YXIgayxFPTEsaj1hcmd1bWVudHMubGVuZ3Ro'@;
put 'O0U8ajtFKyspZm9yKHZhciBWIGluIGs9YXJndW1lbnRzW0VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLFYpJiYoTFtWXT1rW1ZdKTtyZXR1cm4gTH0sUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsayxF'@;
put 'LGope3JldHVybiBuZXcoRXx8KEU9UHJvbWlzZSkpKGZ1bmN0aW9uKFYsQil7ZnVuY3Rpb24gWShxKXt0cnl7VShqLm5leHQocSkpfWNhdGNoKGVlKXtCKGVlKX19ZnVuY3Rpb24gWChxKXt0cnl7VShqLnRocm93KHEpKX1jYXRjaChlZSl7QihlZSl9fWZ1bmN0aW9uIFUocSl7dmFyIGVlO3Eu'@;
put 'ZG9uZT9WKHEudmFsdWUpOihlZT1xLnZhbHVlLGVlIGluc3RhbmNlb2YgRT9lZTpuZXcgRShmdW5jdGlvbih0ZSl7dGUoZWUpfSkpLnRoZW4oWSxYKX1VKChqPWouYXBwbHkoTCxrfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihMLGspe3ZhciBF'@;
put 'LGosVixCLFk9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVlswXSl0aHJvdyBWWzFdO3JldHVybiBWWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEI9e25leHQ6WCgwKSx0aHJvdzpYKDEpLHJldHVybjpYKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQltTeW1ib2wu'@;
put 'aXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxCO2Z1bmN0aW9uIFgoVSl7cmV0dXJuIGZ1bmN0aW9uKHEpe3JldHVybiBmdW5jdGlvbihlZSl7aWYoRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtZOyl0cnl7aWYo'@;
put 'RT0xLGomJihWPTImZWVbMF0/ai5yZXR1cm46ZWVbMF0/ai50aHJvd3x8KChWPWoucmV0dXJuKSYmVi5jYWxsKGopLDApOmoubmV4dCkmJiEoVj1WLmNhbGwoaixlZVsxXSkpLmRvbmUpcmV0dXJuIFY7c3dpdGNoKGo9MCxWJiYoZWU9WzImZWVbMF0sVi52YWx1ZV0pLGVlWzBdKXtjYXNlIDA6'@;
put 'Y2FzZSAxOlY9ZWU7YnJlYWs7Y2FzZSA0OnJldHVybiBZLmxhYmVsKysse3ZhbHVlOmVlWzFdLGRvbmU6ITF9O2Nhc2UgNTpZLmxhYmVsKyssaj1lZVsxXSxlZT1bMF07Y29udGludWU7Y2FzZSA3OmVlPVkub3BzLnBvcCgpLFkudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFY9'@;
put 'KFY9WS50cnlzKS5sZW5ndGg+MCYmVltWLmxlbmd0aC0xXSl8fDYhPT1lZVswXSYmMiE9PWVlWzBdKSl7WT0wO2NvbnRpbnVlfWlmKDM9PT1lZVswXSYmKCFWfHxlZVsxXT5WWzBdJiZlZVsxXTxWWzNdKSl7WS5sYWJlbD1lZVsxXTticmVha31pZig2PT09ZWVbMF0mJlkubGFiZWw8VlsxXSl7'@;
put 'WS5sYWJlbD1WWzFdLFY9ZWU7YnJlYWt9aWYoViYmWS5sYWJlbDxWWzJdKXtZLmxhYmVsPVZbMl0sWS5vcHMucHVzaChlZSk7YnJlYWt9VlsyXSYmWS5vcHMucG9wKCksWS50cnlzLnBvcCgpO2NvbnRpbnVlfWVlPWsuY2FsbChMLFkpfWNhdGNoKHRlKXtlZT1bNix0ZV0saj0wfWZpbmFsbHl7'@;
put 'RT1WPTB9aWYoNSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm57dmFsdWU6ZWVbMF0/ZWVbMV06dm9pZCAwLGRvbmU6ITB9fShbVSxxXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9p'@;
put 'ZCAwLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24oTCxrKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRSxqO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVil7cmV0dXJuIEU9e30saz8ubGVuZ3RoPyhqPWsucmVkdWNlKGZ1bmN0aW9u'@;
put 'KEIsWSl7cmV0dXJuIEJbWV09TFtZXSxCfSx7fSksRT1SKHtyZXN1bHQ6TC5yZXN1bHR9LGopKTpFPUwucmVzdWx0LFsyLEVdfSl9KX19LDc5MjI6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEssTCxrLEUpe3JldHVybiBu'@;
put 'ZXcoa3x8KGs9UHJvbWlzZSkpKGZ1bmN0aW9uKGosVil7ZnVuY3Rpb24gQihVKXt0cnl7WChFLm5leHQoVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFkoVSl7dHJ5e1goRS50aHJvdyhVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWChVKXt2YXIgcTtVLmRvbmU/aihVLnZhbHVlKToo'@;
put 'cT1VLnZhbHVlLHEgaW5zdGFuY2VvZiBrP3E6bmV3IGsoZnVuY3Rpb24oZWUpe2VlKHEpfSkpLnRoZW4oQixZKX1YKChFPUUuYXBwbHkoSyxMfHxbXSkpLm5leHQoKSl9KX0sej10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihLLEwpe3ZhciBrLEUsaixWLEI9e2xhYmVsOjAsc2Vu'@;
put 'dDpmdW5jdGlvbigpe2lmKDEmalswXSl0aHJvdyBqWzFdO3JldHVybiBqWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFY9e25leHQ6WSgwKSx0aHJvdzpZKDEpLHJldHVybjpZKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXN9KSxWO2Z1bmN0aW9uIFkoWCl7cmV0dXJuIGZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxKXtpZihrKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0I7KXRyeXtpZihrPTEsRSYmKGo9MiZxWzBdP0UucmV0'@;
put 'dXJuOnFbMF0/RS50aHJvd3x8KChqPUUucmV0dXJuKSYmai5jYWxsKEUpLDApOkUubmV4dCkmJiEoaj1qLmNhbGwoRSxxWzFdKSkuZG9uZSlyZXR1cm4gajtzd2l0Y2goRT0wLGomJihxPVsyJnFbMF0sai52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6aj1xO2JyZWFrO2Nhc2UgNDpyZXR1'@;
put 'cm4gQi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpCLmxhYmVsKyssRT1xWzFdLHE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpxPUIub3BzLnBvcCgpLEIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGo9KGo9Qi50cnlzKS5sZW5ndGg+MCYmaltqLmxlbmd0aC0x'@;
put 'XSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe0I9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFqfHxxWzFdPmpbMF0mJnFbMV08alszXSkpe0IubGFiZWw9cVsxXTticmVha31pZig2PT09cVswXSYmQi5sYWJlbDxqWzFdKXtCLmxhYmVsPWpbMV0saj1xO2JyZWFrfWlmKGomJkIubGFiZWw8alsy'@;
put 'XSl7Qi5sYWJlbD1qWzJdLEIub3BzLnB1c2gocSk7YnJlYWt9alsyXSYmQi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlfXE9TC5jYWxsKEssQil9Y2F0Y2goZWUpe3E9WzYsZWVdLEU9MH1maW5hbGx5e2s9aj0wfWlmKDUmcVswXSl0aHJvdyBxWzFdO3JldHVybnt2YWx1ZTpxWzBd'@;
put 'P3FbMV06dm9pZCAwLGRvbmU6ITB9fShbWCxVXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uYXN5bmNGb3JFYWNoPXZvaWQgMCxPLmFzeW5jRm9yRWFjaD1mdW5jdGlvbihLLEwpe3JldHVybiBSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3ZhciBrO3JldHVybiB6KHRoaXMsZnVuY3Rpb24oRSl7c3dpdGNoKEUubGFiZWwpe2Nhc2UgMDprPTAsRS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gazxLLmxlbmd0aD9bNCxMKEtba10sayxLKV06WzMsNF07Y2FzZSAyOkUuc2VudCgpLEUubGFiZWw9MztjYXNlIDM6cmV0dXJuIGsr'@;
put 'KyxbMywxXTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9fSwzNzkzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxPLmNvbXBhcmVUaW1lc3RhbXBzPWZ1bmN0aW9uKFIs'@;
put 'eil7cmV0dXJuIHoudGltZXN0YW1wLmdldFRpbWUoKS1SLnRpbWVzdGFtcC5nZXRUaW1lKCl9fSwyNDAyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0Zvcm1hdHNUYWJsZT1P'@;
put 'LmNvbnZlcnRUb0NTVj12b2lkIDA7dmFyIEs9Uig2NDY3KSxMPVIoOTc3OCk7Ty5jb252ZXJ0VG9DU1Y9ZnVuY3Rpb24oRSxqKXt2YXIgVjtpZighRVtqXSl0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Ig'@;
put 'd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3ZhciBCPUVbal07aWYoIUFycmF5LmlzQXJyYXkoQikpcmV0dXJuIiI7dmFyIFksWD1udWxsPT09KFY9RVsiJCIuY29uY2F0KGopXSl8fHZvaWQgMD09PVY/dm9pZCAwOlYuZm9ybWF0cyxVPVtdLHE9ITE7WCYmKFU9T2JqZWN0LmtleXMoWCku'@;
put 'bWFwKGZ1bmN0aW9uKHRlKXtyZXR1cm4iIi5jb25jYXQodGUsIjoiKS5jb25jYXQoWFt0ZV0pfSkpO3ZhciBlZT1PYmplY3Qua2V5cyhCWzBdKTtyZXR1cm4gZWUuZm9yRWFjaChmdW5jdGlvbih0ZSl7aWYoIVh8fCFPYmplY3Qua2V5cyhYKS5pbmNsdWRlcyh0ZSkpe3ZhciBvZT0hMSxzZT0h'@;
put 'MTtpZihCLmZvckVhY2goZnVuY3Rpb24oYil7bnVsbD09PWJbdGVdfHwibnVtYmVyIj09dHlwZW9mIGJbdGVdP29lPSEwOiJzdHJpbmciPT10eXBlb2YgYlt0ZV0mJigwLEsuaXNTcGVjaWFsTWlzc2luZykoYlt0ZV0pJiYoc2U9ITApfSksb2UmJnNlKVUucHVzaCgiIi5jb25jYXQodGUsIjpi'@;
put 'ZXN0LiIpKSxYfHwoWD17fSksWFt0ZV09ImJlc3QuIjtlbHNle3ZhciBoZT1udWxsLHVlPSExLGNlPS0xLEc9Qi5tYXAoZnVuY3Rpb24oYixEKXtpZihiW3RlXXx8IiI9PT1iW3RlXSl7aGU/dWV8fChjZT0odWU9KCIiPT09Ylt0ZV18fCJzdHJpbmciPT10eXBlb2YgYlt0ZV0/ImNoYXJzIjoi'@;
put 'bnVtYmVyIikhPT1oZSk/RCsxOi0xKTpoZT0iIj09PWJbdGVdfHwic3RyaW5nIj09dHlwZW9mIGJbdGVdPyJjaGFycyI6Im51bWJlciI7dmFyIE49dm9pZCAwO3JldHVybiJzdHJpbmciPT10eXBlb2YgYlt0ZV0mJihOPWsoYlt0ZV0pKSxOfX0pLnNvcnQoZnVuY3Rpb24oYixEKXtyZXR1cm4g'@;
put 'RC1ifSlbMF07RyYmRz4zMjc2NSYmKHE9ITApLHVlJiZ6LmVycm9yKCJSb3cgKCIuY29uY2F0KGNlLCIpLCBDb2x1bW4gKCIpLmNvbmNhdCh0ZSwiKSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SIikpLFUucHVzaCgiIi5jb25jYXQodGUsIjoiKS5jb25jYXQoImNoYXJzIj09PWhlPyIkY2hhciI6'@;
put 'IiIpLmNvbmNhdChHfHwoImNoYXJzIj09PWhlPyIxIjoiYmVzdCIpLCIuIikpfX19KSxYJiYoVT1VLnNvcnQoZnVuY3Rpb24odGUsb2Upe3JldHVybiBlZS5pbmRleE9mKHRlLnJlcGxhY2UoLzouKi8sIiIpKS1lZS5pbmRleE9mKG9lLnJlcGxhY2UoLzouKi8sIiIpKX0pKSxxPyJFUlJPUjog'@;
put 'TEFSR0UgU1RSSU5HIExFTkdUSCI6KFk9Qi5tYXAoZnVuY3Rpb24odGUpe3JldHVybiBPYmplY3Qua2V5cyh0ZSkubWFwKGZ1bmN0aW9uKG9lLHNlKXt2YXIgaGUsdWU9dGVbb2VdO2lmKCJudW1iZXIiPT10eXBlb2YgdWUpcmV0dXJuIHVlO2lmKGhlPW51bGw9PT11ZT8iIjp1ZSxYJiYiYmVz'@;
put 'dC4iPT09WFtvZV0pe2lmKGhlJiYhKDAsSy5pc1NwZWNpYWxNaXNzaW5nKShoZSkpdGhyb3cgbmV3IEVycm9yKCJBIFNwZWNpYWwgbWlzc2luZyB2YWx1ZSBjYW4gb25seSBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSAnQScgdG8gJ1onLCAnXycsICcuW2Etel0nLCAnLl8nIik7dmFyIGNl'@;
put 'PWhlLmluY2x1ZGVzKCIuIik/IiI6Ii4iO3JldHVybiIiLmNvbmNhdChjZSkuY29uY2F0KGhlLnRvTG93ZXJDYXNlKCkpfXJldHVybiBoZT1oZS5yZXBsYWNlKC8iL2csJyIiJyksKGhlPSciJy5jb25jYXQoaGUsJyInKSkuc3Vic3RyaW5nKDEsaGUubGVuZ3RoLTEpLnNlYXJjaCgvKFx0fFxu'@;
put 'fFxyfCx8XCd8XCIpL2dtKTwwJiYoaGU9aGUuc3Vic3RyaW5nKDEsaGUubGVuZ3RoLTEpKSwiIj09PShoZT1oZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpKSYmVVtzZV0uaW5jbHVkZXMoImJlc3QiKSYmKGhlPSIuIiksaGV9KS5qb2luKCIsIil9KSxVLmpvaW4oIiwiKS5yZXBsYWNlKC8sL2cs'@;
put 'IiAiKSsiXHJcbiIrWS5qb2luKCJcclxuIikpfSxPLmlzRm9ybWF0c1RhYmxlPWZ1bmN0aW9uKEUpe3JldHVybi9eXCQuKi8udGVzdChFKX07dmFyIGs9ZnVuY3Rpb24oRSl7Zm9yKHZhciBqPUUubGVuZ3RoLFY9RS5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIEI9RS5jaGFyQ29kZUF0KFYpO0I+'@;
put 'MTI3JiZCPD0yMDQ3P2orKzpCPjIwNDcmJkI8PTY1NTM1JiYoais9MiksQj49NTYzMjAmJkI8PTU3MzQzJiZWLS19cmV0dXJuIGp9fSw2MTE2OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY3JlYXRlQXhp'@;
put 'b3NJbnN0YW5jZT12b2lkIDA7dmFyIHo9Uig5NjY5KTtPLmNyZWF0ZUF4aW9zSW5zdGFuY2U9ZnVuY3Rpb24oSyxMKXtyZXR1cm4gei5kZWZhdWx0LmNyZWF0ZSh7YmFzZVVSTDpLLGh0dHBzQWdlbnQ6TH0pfX0sOTgyNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWxheT12b2lkIDAsTy5kZWxheT1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeil7cmV0dXJuIHNldFRpbWVvdXQoeixSKX0pfX0sOTkwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0'@;
put 'MTU1KSxLPVIoNTEwOCksTD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7'@;
put 'dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5'@;
put 'KGosVnx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0'@;
put 'OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lm'@;
put 'KEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFks'@;
put 'c2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9'@;
put 'WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8'@;
put 'c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBv'@;
put 'cCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZmV0Y2hMb2c9Ty5mZXRjaExvZ0J5Q2h1bmtzPXZvaWQgMDt2YXIgRT1SKDk3NzgpO08uZmV0Y2hMb2dCeUNodW5rcz1mdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gTCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxPLmZldGNoTG9nKShqLFYsQiwwLFkpXTtjYXNlIDE6cmV0dXJuWzIsWC5zZW50KCldfX0pfSl9LE8uZmV0Y2hMb2c9ZnVuY3Rpb24oaixWLEIsWSxYKXtyZXR1cm4gTCh2b2lk'@;
put 'IDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsZWUsdGUsb2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6VT16LmxvZ2dlcnx8SyxxPSIiLGVlPVg8MWU0P1g6MWU0LHNlLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBVLmluZm8oIkZl'@;
put 'dGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAiLmNvbmNhdChZKzEsIiB0byAiKS5jb25jYXQoWStlZSwiIG9mICIpLmNvbmNhdChYLCIuIikpLFs0LGouZ2V0KCIiLmNvbmNhdChCLCI/c3RhcnQ9IikuY29uY2F0KFksIiZsaW1pdD0iKS5jb25jYXQoZWUpLFYpLnRoZW4oZnVuY3Rpb24oaGUp'@;
put 'e3JldHVybiBoZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbihoZSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKGhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KV07Y2FzZSAyOmlmKDA9PT0odGU9c2Uuc2VudCgpKS5pdGVtcy5sZW5ndGgpcmV0dXJuWzMsNF07b2U9dGUuaXRlbXMu'@;
put 'bWFwKGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUubGluZX0pLmpvaW4oIlxuIikscSs9b2UsWSs9ZWUsc2UubGFiZWw9MztjYXNlIDM6aWYoWTxYKXJldHVyblszLDFdO3NlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHFdfX0pfSl9fSw3MTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5mb3JtYXREYXRhRm9yUmVxdWVzdD12b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNDc5OSk7Ty5mb3JtYXREYXRhRm9yUmVxdWVzdD1mdW5jdGlvbihMKXt2YXIgaz1bXSxFPTAsaj17fTtmb3IodmFyIFYgaW4gTClp'@;
put 'ZighKDAsei5pc0Zvcm1hdHNUYWJsZSkoVil8fCFPYmplY3Qua2V5cyhMKS5pbmNsdWRlcyhWLnJlcGxhY2UoL15cJC8sIiIpKSl7RSsrLCgwLHouaXNGb3JtYXRzVGFibGUpKFYpfHxrLnB1c2goVik7dmFyIEI9KDAsei5jb252ZXJ0VG9DU1YpKEwsVik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJ'@;
put 'TkcgTEVOR1RIIj09PUIpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKEIubGVuZ3RoPjE2ZTMpe3ZhciBZPSgwLEsuc3BsaXRDaHVua3MpKEIpO2pbInNhc2pzIi5jb25jYXQoRSwiZGF0'@;
put 'YTAiKV09WS5sZW5ndGgsWS5mb3JFYWNoKGZ1bmN0aW9uKFgsVSl7alsic2FzanMiLmNvbmNhdChFLCJkYXRhIikuY29uY2F0KFUrMSldPVh9KX1lbHNlIGpbInNhc2pzIi5jb25jYXQoRSwiZGF0YSIpXT1CfXJldHVybiBqLnNhc2pzX3RhYmxlcz1rLmpvaW4oIiAiKSxqfX0sODQ1ODooTSxP'@;
put 'LFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEZvcm1EYXRhPXZvaWQgMDt2YXIgej1SKDU5MjgpLEs9Uig2MjMwKTtPLmdldEZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuKDAsei5pc05vZGUpKCk/bmV3IEs6'@;
put 'bmV3IEZvcm1EYXRhfX0sMTg4NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFZhbGlkSnNvbj12b2lkIDA7dmFyIHo9UigxMzk1KTtPLmdldFZhbGlkSnNvbj1mdW5jdGlvbihLKXt0cnl7aWYobnVs'@;
put 'bD09Syl0aHJvdyBuZXcgei5JbnZhbGlkSnNvbkVycm9yO2lmKEFycmF5LmlzQXJyYXkoSykpdGhyb3cgbmV3IHouSnNvblBhcnNlQXJyYXlFcnJvcjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEs/SzoiIj09PUs/e306SlNPTi5wYXJzZShLKX1jYXRjaChMKXt0aHJvdyBMIGluc3RhbmNlb2Yg'@;
put 'ei5Kc29uUGFyc2VBcnJheUVycm9yP0w6bmV3IHouSW52YWxpZEpzb25FcnJvcn19fSw1OTI4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsayxFLGope3ZvaWQgMD09PWomJihq'@;
put 'PUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KEwsaixWKX06ZnVuY3Rpb24oTCxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksTFtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oTCxrKXtmb3IodmFyIEUgaW4gTCkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl'@;
put 'cnR5LmNhbGwoayxFKXx8eihrLEwsRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMzMwMiksTyksSyhSKDc5MjIpLE8pLEsoUigzNzkzKSxPKSxLKFIoMjQwMiksTyksSyhSKDYxMTYpLE8pLEsoUig5ODI1KSxPKSxLKFIoOTkwKSxPKSxL'@;
put 'KFIoMTg4NCksTyksSyhSKDQyNDMpLE8pLEsoUigyNTcpLE8pLEsoUigyKSxPKSxLKFIoMjYxNSksTyksSyhSKDI5MjApLE8pLEsoUigyNDIyKSxPKSxLKFIoMzEpLE8pLEsoUig2NTE1KSxPKSxLKFIoNjQxNiksTyksSyhSKDI4MTMpLE8pLEsoUig5ODk2KSxPKSxLKFIoNDc5OSksTyksSyhS'@;
put 'KDQ1MTYpLE8pLEsoUig4NDU4KSxPKX0sNDI0MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNOb2RlPXZvaWQgMCxPLmlzTm9kZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAh'@;
put 'PT16JiZudWxsIT16LnZlcnNpb25zJiZudWxsIT16LnZlcnNpb25zLm5vZGV9fSwyNTc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNSZWxhdGl2ZVBhdGg9dm9pZCAwLE8uaXNSZWxhdGl2ZVBhdGg9ZnVu'@;
put 'Y3Rpb24oUil7cmV0dXJuISFSJiYhUi5zdGFydHNXaXRoKCIvIil9fSwyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzVXJpPXZvaWQgMCxPLmlzVXJpPWZ1bmN0aW9uKFIpe3JldHVybi9eXC9mb2xkZXJz'@;
put 'XC9mb2xkZXJzXC8vLnRlc3QoUil9fSwyNjE1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzVXJsPXZvaWQgMCxPLmlzVXJsPWZ1bmN0aW9uKFIpe3RyeXt2YXIgej1uZXcgVVJMKFIpO2lmKCFbImh0dHA6'@;
put 'IiwiaHR0cHM6Il0uaW5jbHVkZXMoei5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLFYsej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwo'@;
put 'WT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gdGUoc2Upe3RyeXtvZShYLnRocm93KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShz'@;
put 'ZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9lKChYPVguYXBwbHkoVixCfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgs'@;
put 'VSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9s'@;
put 'Lml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRy'@;
put 'eXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYmIShVPVUuY2FsbChYLGhlWzFdKSkuZG9uZSlyZXR1cm4gVTtzd2l0Y2goWD0wLFUmJihoZT1bMiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nh'@;
put 'c2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJlbCsrLFg9aGVbMV0saGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpoZT1lZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0'@;
put 'OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9aWYoMz09PWhlWzBdJiYoIVV8fGhlWzFdPlVbMF0mJmhlWzFdPFVbM10pKXtlZS5sYWJlbD1oZVsxXTticmVha31pZig2PT09aGVbMF0mJmVl'@;
put 'LmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNoKGhlKTticmVha31VWzJdJiZlZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZX1oZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hl'@;
put 'PVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9uZTohMH19KFtvZSxzZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm9wZW5Mb2dpblBy'@;
put 'b21wdD12b2lkIDAsKFY9Unx8KFI9e30pKS5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsVi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixWLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiO3ZhciBMPSJzYXNqcy1hZGFwdGVyIixrPXtwb3BVcDoiIi5jb25j'@;
put 'YXQoTCwicG9wVXAiKSxwb3BVcEJHOiIiLmNvbmNhdChMLCJwb3BVcEJHIil9O08ub3BlbkxvZ2luUHJvbXB0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFYpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0'@;
put 'ZSxvZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHNlKXtyZXR1cm4oQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5pZD1SLnN0eWxlcyxCLmlubmVyVGV4dD1qLChZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pZD1SLm92ZXJsYXksWS5jbGFzc0xpc3QuYWRkKGsu'@;
put 'cG9wVXBCRyksKFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlkPVIuZGlhbG9nLFguY2xhc3NMaXN0LmFkZChrLnBvcFVwKSwoVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpKS5pbm5lclRleHQ9IlNlc3Npb24gRXhwaXJlZCEiLFguYXBwZW5kQ2hpbGQoVSkscT1kb2N1'@;
put 'bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwoZWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKS5pbm5lclRleHQ9IllvdSBuZWVkIHRvIHJlbG9naW4sIGNsaWNrIE9LIHRvIGxvZ2luLiIscS5hcHBlbmRDaGlsZChlZSksWC5hcHBlbmRDaGlsZChxKSwodGU9ZG9jdW1lbnQuY3Jl'@;
put 'YXRlRWxlbWVudCgiYnV0dG9uIikpLmNsYXNzTGlzdC5hZGQoImNhbmNlbCIpLHRlLmlubmVyVGV4dD0iQ2FuY2VsIix0ZS5vbmNsaWNrPWZ1bmN0aW9uKCl7RSgpLFYoITEpfSxYLmFwcGVuZENoaWxkKHRlKSwob2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIikpLmNsYXNzTGlz'@;
put 'dC5hZGQoImNvbmZpcm0iKSxvZS5pbm5lclRleHQ9Ik9rIixvZS5vbmNsaWNrPWZ1bmN0aW9uKCl7RSgpLFYoITApfSxYLmFwcGVuZENoaWxkKG9lKSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQiksZG9jdW1lbnQuYm9k'@;
put 'eS5hcHBlbmRDaGlsZChZKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFgpLFsyXX0pfSl9KX07dmFyIEU9ZnVuY3Rpb24oKXtPYmplY3QudmFsdWVzKFIpLmZvckVhY2goZnVuY3Rpb24oVil7dmFyIEIsWT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChWKTtudWxsPT09KEI9WT8ucGFyZW50'@;
put 'Tm9kZSl8fHZvaWQgMD09PUJ8fEIucmVtb3ZlQ2hpbGQoWSl9KSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJhdXRvIn0saj0iXG4uIi5jb25jYXQoay5wb3BVcEJHLCIgLFxuLiIpLmNvbmNhdChrLnBvcFVwLCIge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4iKS5jb25jYXQoay5w'@;
put 'b3BVcCwiIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1'@;
put 'MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3Jv'@;
put 'dW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiIpLmNvbmNh'@;
put 'dChrLnBvcFVwLCIgPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTog'@;
put 'MS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBi'@;
put 'bGFjaztcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemlu'@;
put 'ZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBu'@;
put 'b25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6'@;
put 'aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgLmNhbmNlbCB7'@;
put 'XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJv'@;
put 'eDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50'@;
put 'ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uIikuY29uY2F0KGsucG9wVXBCRywiIHtcbiAg'@;
put 'ZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3Jv'@;
put 'dW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG4iKX0sMjkyMDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5uZWVkc1JldHJ5PXZvaWQgMCxPLm5lZWRzUmV0cnk9ZnVu'@;
put 'Y3Rpb24oUil7cmV0dXJuISFSJiYoUi5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJlIuaW5jbHVkZXMoIl9jc3JmIikmJlIuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxSLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmUi5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxS'@;
put 'LmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmUi5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX19LDI0MjI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LE8ucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxPLnBhcnNlR2VuZXJhdGVkQ29kZT1mdW5jdGlvbihSKXtyZXR1cm4gUi5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIHoudHJpbSgpLnN0YXJ0c1dpdGgoIk1QUklOVCIpfSkuam9pbigiXHJcbiIpfX0sMzE6KE0sTyxS'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlU2FzVml5YUxvZz12b2lkIDAsTy5wYXJzZVNhc1ZpeWFMb2c9ZnVuY3Rpb24oSyl7dmFyIEw7dHJ5e0w9Sy5pdGVtcz9LLml0ZW1zLm1h'@;
put 'cChmdW5jdGlvbihrKXtyZXR1cm4gay5saW5lfSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShLKX1jYXRjaChrKXt6LmVycm9yKCJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgbG9nIHJlc3BvbnNlIixrKSxMPUt9cmV0dXJuIEx9fSw2NTE1OihNLE8pPT57InVz'@;
put 'ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlU291cmNlQ29kZT12b2lkIDAsTy5wYXJzZVNvdXJjZUNvZGU9ZnVuY3Rpb24oUil7cmV0dXJuIFIuc3BsaXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6LnRy'@;
put 'aW0oKS5zdWJzdHJpbmcoMCwxMCkudHJpbVN0YXJ0KCkubWF0Y2goL15cZC8pfSkuam9pbigiXHJcbiIpfX0sNjQxNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihrLEUsaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21p'@;
put 'c2UpKShmdW5jdGlvbihCLFkpe2Z1bmN0aW9uIFgoZWUpe3RyeXtxKFYubmV4dChlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gVShlZSl7dHJ5e3EoVi50aHJvdyhlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gcShlZSl7dmFyIHRlO2VlLmRvbmU/QihlZS52YWx1ZSk6KHRl'@;
put 'PWVlLnZhbHVlLHRlIGluc3RhbmNlb2Ygaj90ZTpuZXcgaihmdW5jdGlvbihvZSl7b2UodGUpfSkpLnRoZW4oWCxVKX1xKChWPVYuYXBwbHkoayxFfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZLFg9e2xhYmVsOjAs'@;
put 'c2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFk9e25leHQ6VSgwKSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXN9KSxZO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKGopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7WDspdHJ5e2lmKGo9MSxWJiYoQj0yJnRlWzBd'@;
put 'P1YucmV0dXJuOnRlWzBdP1YudGhyb3d8fCgoQj1WLnJldHVybikmJkIuY2FsbChWKSwwKTpWLm5leHQpJiYhKEI9Qi5jYWxsKFYsdGVbMV0pKS5kb25lKXJldHVybiBCO3N3aXRjaChWPTAsQiYmKHRlPVsyJnRlWzBdLEIudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpCPXRlO2JyZWFr'@;
put 'O2Nhc2UgNDpyZXR1cm4gWC5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6WC5sYWJlbCsrLFY9dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp0ZT1YLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChCPShCPVgudHJ5cykubGVuZ3Ro'@;
put 'PjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1g9MDtjb250aW51ZX1pZigzPT09dGVbMF0mJighQnx8dGVbMV0+QlswXSYmdGVbMV08QlszXSkpe1gubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZYLmxhYmVsPEJbMV0pe1gubGFiZWw9QlsxXSxCPXRl'@;
put 'O2JyZWFrfWlmKEImJlgubGFiZWw8QlsyXSl7WC5sYWJlbD1CWzJdLFgub3BzLnB1c2godGUpO2JyZWFrfUJbMl0mJlgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZX10ZT1FLmNhbGwoayxYKX1jYXRjaChvZSl7dGU9WzYsb2VdLFY9MH1maW5hbGx5e2o9Qj0wfWlmKDUmdGVbMF0p'@;
put 'dGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsZWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDt2YXIgTD1SKDU5MjgpO08u'@;
put 'cGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT1mdW5jdGlvbihrLEUsail7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVixCO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oWSl7aWYoVj1rLnNwbGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6'@;
put 'IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZhczsiIHNyYz0vKVsxXSwhKEI9Vj9WLnNwbGl0KC8iPjxcL2lmcmFtZT58PjxcL2lmcmFtZT4vKVswXTpudWxsKSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJs'@;
put 'ZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm5bMixFLmdldChqK0Isdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihmdW5jdGlvbihYKXtyZXR1cm4oMCxMLmdldFZhbGlkSnNvbikoWC5yZXN1bHQpfSldfSl9KX19LDI4MTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1S'@;
put 'KDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO3ZhciBLPVIoMTM5NSk7Ty5wYXJzZVdlYm91dFJlc3BvbnNlPWZ1bmN0aW9uKEwsayl7dmFyIEU9IiI7aWYoTC5pbmNsdWRlcygiPj53ZWJv'@;
put 'dXRCRUdJTjw8IikpdHJ5e0U9TC5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChqKXtpZihrKXRocm93IG5ldyBLLldlYm91dFJlc3BvbnNlRXJyb3Ioayk7RT0iIix6LmVycm9yKGopfXJldHVybiBFfX0sMTE3MDooTSxPKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT12b2lkIDA7dmFyIFI9WyJMb2cgT2ZmIl07Ty5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1mdW5jdGlvbih6KXt2YXIgSz16Py5tYXRjaCgv'@;
put 'InRpdGxlIjpccz8iLio/Ii8pLEw9Sz8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLGs9TD8uaW5kZXhPZigiICIpO3JldHVybiBMPyhSLm1hcChmdW5jdGlvbihFKXt2YXIgaj1MPy5pbmRleE9mKEUpfHwtMTtqPi0xJiYoaz1qK0UubGVuZ3RoKX0pLEwuc2xpY2UoaywtMSkudHJpbSgpKToi'@;
put 'dW5rbm93biJ9fSw5ODk2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnNlcmlhbGl6ZT12b2lkIDAsTy5zZXJpYWxpemU9ZnVuY3Rpb24oUil7dmFyIHo9W107Zm9yKHZhciBLIGluIFIpaWYoUi5oYXNPd25Q'@;
put 'cm9wZXJ0eShLKSlpZihSW0tdaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIEw9MCxrPVJbS10ubGVuZ3RoO0w8aztMKyspei5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChLKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KFJbS11bTF0pKTtlbHNlIHoucHVzaChlbmNvZGVVUklDb21wb25lbnQoSykr'@;
put 'Ij0iK2VuY29kZVVSSUNvbXBvbmVudChSW0tdKSk7cmV0dXJuIHouam9pbigiJiIpfX0sNDc5OTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5zcGxpdENodW5rcz12b2lkIDAsTy5zcGxpdENodW5rcz1mdW5j'@;
put 'dGlvbihSKXtmb3IodmFyIHo9MTZlMyxLPU1hdGguY2VpbChSLmxlbmd0aC96KSxMPW5ldyBBcnJheShLKSxrPTAsRT0wO2s8SzsrK2ssRSs9eilMW2tdPVIuc3Vic3RyKEUseik7cmV0dXJuIEx9fSw0NTE2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnZhbGlkYXRlSW5wdXQ9Ty5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1PLk1PUkVfSU5GTz12b2lkIDAsTy5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIs'@;
put 'Ty5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT0iUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICIuY29uY2F0KE8uTU9SRV9JTkZPKSxPLnZhbGlkYXRlSW5wdXQ9ZnVuY3Rpb24oeil7aWYobnVsbD09PXopcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lm'@;
put 'KCJvYmplY3QiIT09Uih6KSlyZXR1cm57c3RhdHVzOiExLG1zZzpPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTt2YXIgSz1mdW5jdGlvbihYKXtyZXR1cm4gWC5tYXRjaCgvXlwkLiovKSYmT2JqZWN0LmtleXMoeikuaW5jbHVkZXMoWC5yZXBsYWNlKC9eXCQvLCIiKSl9O2Zvcih2YXIgTCBp'@;
put 'biB6KXtpZighTC5tYXRjaCgvXlthLXpBLVpfXS8pJiYhSyhMKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFMLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIUsoTCkp'@;
put 'cmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihMLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09'@;
put 'Uih6W0xdKSYmIUsoTCkpcmV0dXJue3N0YXR1czohMSxtc2c6Ty5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Zm9yKHZhciBrPTAsRT16W0xdO2s8RS5sZW5ndGg7aysrKXt2YXIgaj1FW2tdO2lmKCJvYmplY3QiIT09UihqKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgIi5jb25jYXQo'@;
put 'TCwiIGNvbnRhaW5zIGludmFsaWQgc3RydWN0dXJlLiAiKS5jb25jYXQoTy5NT1JFX0lORk8pfTtmb3IodmFyIFY9MCxCPU9iamVjdC5rZXlzKGopO1Y8Qi5sZW5ndGg7VisrKXt2YXIgWT1CW1ZdO2lmKHZvaWQgMD09PWpbWV0pcmV0dXJue3N0YXR1czohMSxtc2c6IkEgcm93IGluIHRhYmxl'@;
put 'ICIuY29uY2F0KEwsIiBjb250YWlucyBpbnZhbGlkIHZhbHVlLiBDYW4ndCBhc3NpZ24gdW5kZWZpbmVkIHRvICIpLmNvbmNhdChZLCIuIil9fX19cmV0dXJue3N0YXR1czohMCxtc2c6IiJ9fTt2YXIgUj1mdW5jdGlvbih6KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh6KT8iQXJyYXkiOnR5cGVv'@;
put 'ZiB6fX0sODk4MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLmZyb21DYWxsYmFjaz1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLnope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB6W3oubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoSyxMKT0+'@;
put 'e1IuY2FsbCh0aGlzLC4uLnosKGssRSk9Pm51bGwhPWs/TChrKTpLKEUpKX0pO1IuYXBwbHkodGhpcyx6KX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX0sTy5mcm9tUHJvbWlzZT1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLnope2NvbnN0IEs9'@;
put 'elt6Lmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSylyZXR1cm4gUi5hcHBseSh0aGlzLHopO1IuYXBwbHkodGhpcyx6LnNsaWNlKDAsLTEpKS50aGVuKEw9PksobnVsbCxMKSxLKX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX19LDQ1NjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1SKDc0MTgpLEs9Uig3MTI5KSxMPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdKy8saz0vW1xuXHJcdF0vZyxFPS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8saj0vOlxkKyQvLFY9L14o'@;
put 'W2Etel1bYS16MC05ListXSo6KT8oXC9cLyk/KFtcXC9dKyk/KFtcU1xzXSopL2ksQj0vXlthLXpBLVpdOi87ZnVuY3Rpb24gWShzZSl7cmV0dXJuKHNlfHwiIikudG9TdHJpbmcoKS5yZXBsYWNlKEwsIiIpfXZhciBYPVtbIiMiLCJoYXNoIl0sWyI/IiwicXVlcnkiXSxmdW5jdGlvbihzZSxo'@;
put 'ZSl7cmV0dXJuIGVlKGhlLnByb3RvY29sKT9zZS5yZXBsYWNlKC9cXC9nLCIvIik6c2V9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9zdCIsdm9pZCAwLDEsMV0sWy86KFxkKikkLywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAsMSwxXV0s'@;
put 'VT17aGFzaDoxLHF1ZXJ5OjF9O2Z1bmN0aW9uIHEoc2Upe3ZhciBoZSx1ZT0odHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PVIuZz9SLmc6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLmxvY2F0aW9ufHx7fSxjZT17fSxHPXR5cGVvZihzZT1zZXx8dWUpO2lmKCJibG9iOiI9PT1z'@;
put 'ZS5wcm90b2NvbCljZT1uZXcgb2UodW5lc2NhcGUoc2UucGF0aG5hbWUpLHt9KTtlbHNlIGlmKCJzdHJpbmciPT09Rylmb3IoaGUgaW4gY2U9bmV3IG9lKHNlLHt9KSxVKWRlbGV0ZSBjZVtoZV07ZWxzZSBpZigib2JqZWN0Ij09PUcpe2ZvcihoZSBpbiBzZSloZSBpbiBVfHwoY2VbaGVdPXNl'@;
put 'W2hlXSk7dm9pZCAwPT09Y2Uuc2xhc2hlcyYmKGNlLnNsYXNoZXM9RS50ZXN0KHNlLmhyZWYpKX1yZXR1cm4gY2V9ZnVuY3Rpb24gZWUoc2Upe3JldHVybiJmaWxlOiI9PT1zZXx8ImZ0cDoiPT09c2V8fCJodHRwOiI9PT1zZXx8Imh0dHBzOiI9PT1zZXx8IndzOiI9PT1zZXx8IndzczoiPT09'@;
put 'c2V9ZnVuY3Rpb24gdGUoc2UsaGUpe3NlPShzZT1ZKHNlKSkucmVwbGFjZShrLCIiKSxoZT1oZXx8e307dmFyIHVlLGNlPVYuZXhlYyhzZSksRz1jZVsxXT9jZVsxXS50b0xvd2VyQ2FzZSgpOiIiLGI9ISFjZVsyXSxEPSEhY2VbM10sSD0wO3JldHVybiBiP0Q/KHVlPWNlWzJdK2NlWzNdK2Nl'@;
put 'WzRdLEg9Y2VbMl0ubGVuZ3RoK2NlWzNdLmxlbmd0aCk6KHVlPWNlWzJdK2NlWzRdLEg9Y2VbMl0ubGVuZ3RoKTpEPyh1ZT1jZVszXStjZVs0XSxIPWNlWzNdLmxlbmd0aCk6dWU9Y2VbNF0sImZpbGU6Ij09PUc/SD49MiYmKHVlPXVlLnNsaWNlKDIpKTplZShHKT91ZT1jZVs0XTpHP2ImJih1'@;
put 'ZT11ZS5zbGljZSgyKSk6SD49MiYmZWUoaGUucHJvdG9jb2wpJiYodWU9Y2VbNF0pLHtwcm90b2NvbDpHLHNsYXNoZXM6Ynx8ZWUoRyksc2xhc2hlc0NvdW50OkgscmVzdDp1ZX19ZnVuY3Rpb24gb2Uoc2UsaGUsdWUpe2lmKHNlPShzZT1ZKHNlKSkucmVwbGFjZShrLCIiKSwhKHRoaXMgaW5z'@;
put 'dGFuY2VvZiBvZSkpcmV0dXJuIG5ldyBvZShzZSxoZSx1ZSk7dmFyIGNlLEcsYixELEgsTixnPVguc2xpY2UoKSxDPXR5cGVvZiBoZSxTPXRoaXMsdj0wO2Zvcigib2JqZWN0IiE9PUMmJiJzdHJpbmciIT09QyYmKHVlPWhlLGhlPW51bGwpLHVlJiYiZnVuY3Rpb24iIT10eXBlb2YgdWUmJih1'@;
put 'ZT1LLnBhcnNlKSxjZT0hKEc9dGUoc2V8fCIiLGhlPXEoaGUpKSkucHJvdG9jb2wmJiFHLnNsYXNoZXMsUy5zbGFzaGVzPUcuc2xhc2hlc3x8Y2UmJmhlLnNsYXNoZXMsUy5wcm90b2NvbD1HLnByb3RvY29sfHxoZS5wcm90b2NvbHx8IiIsc2U9Ry5yZXN0LCgiZmlsZToiPT09Ry5wcm90b2Nv'@;
put 'bCYmKDIhPT1HLnNsYXNoZXNDb3VudHx8Qi50ZXN0KHNlKSl8fCFHLnNsYXNoZXMmJihHLnByb3RvY29sfHxHLnNsYXNoZXNDb3VudDwyfHwhZWUoUy5wcm90b2NvbCkpKSYmKGdbM109Wy8oLiopLywicGF0aG5hbWUiXSk7djxnLmxlbmd0aDt2KyspImZ1bmN0aW9uIiE9dHlwZW9mKEQ9Z1t2'@;
put 'XSk/KE49RFsxXSwoYj1EWzBdKSE9Yj9TW05dPXNlOiJzdHJpbmciPT10eXBlb2YgYj9+KEg9IkAiPT09Yj9zZS5sYXN0SW5kZXhPZihiKTpzZS5pbmRleE9mKGIpKSYmKCJudW1iZXIiPT10eXBlb2YgRFsyXT8oU1tOXT1zZS5zbGljZSgwLEgpLHNlPXNlLnNsaWNlKEgrRFsyXSkpOihTW05d'@;
put 'PXNlLnNsaWNlKEgpLHNlPXNlLnNsaWNlKDAsSCkpKTooSD1iLmV4ZWMoc2UpKSYmKFNbTl09SFsxXSxzZT1zZS5zbGljZSgwLEguaW5kZXgpKSxTW05dPVNbTl18fGNlJiZEWzNdJiZoZVtOXXx8IiIsRFs0XSYmKFNbTl09U1tOXS50b0xvd2VyQ2FzZSgpKSk6c2U9RChzZSxTKTt1ZSYmKFMu'@;
put 'cXVlcnk9dWUoUy5xdWVyeSkpLGNlJiZoZS5zbGFzaGVzJiYiLyIhPT1TLnBhdGhuYW1lLmNoYXJBdCgwKSYmKCIiIT09Uy5wYXRobmFtZXx8IiIhPT1oZS5wYXRobmFtZSkmJihTLnBhdGhuYW1lPWZ1bmN0aW9uKHAsdyl7aWYoIiI9PT1wKXJldHVybiB3O2Zvcih2YXIgSj0od3x8Ii8iKS5z'@;
put 'cGxpdCgiLyIpLnNsaWNlKDAsLTEpLmNvbmNhdChwLnNwbGl0KCIvIikpLG5lPUoubGVuZ3RoLGRlPUpbbmUtMV0sZmU9ITEseGU9MDtuZS0tOykiLiI9PT1KW25lXT9KLnNwbGljZShuZSwxKToiLi4iPT09SltuZV0/KEouc3BsaWNlKG5lLDEpLHhlKyspOnhlJiYoMD09PW5lJiYoZmU9ITAp'@;
put 'LEouc3BsaWNlKG5lLDEpLHhlLS0pO3JldHVybiBmZSYmSi51bnNoaWZ0KCIiKSwiLiIhPT1kZSYmIi4uIiE9PWRlfHxKLnB1c2goIiIpLEouam9pbigiLyIpfShTLnBhdGhuYW1lLGhlLnBhdGhuYW1lKSksIi8iIT09Uy5wYXRobmFtZS5jaGFyQXQoMCkmJmVlKFMucHJvdG9jb2wpJiYoUy5w'@;
put 'YXRobmFtZT0iLyIrUy5wYXRobmFtZSkseihTLnBvcnQsUy5wcm90b2NvbCl8fChTLmhvc3Q9Uy5ob3N0bmFtZSxTLnBvcnQ9IiIpLFMudXNlcm5hbWU9Uy5wYXNzd29yZD0iIixTLmF1dGgmJih+KEg9Uy5hdXRoLmluZGV4T2YoIjoiKSk/KFMudXNlcm5hbWU9Uy5hdXRoLnNsaWNlKDAsSCks'@;
put 'Uy51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMudXNlcm5hbWUpKSxTLnBhc3N3b3JkPVMuYXV0aC5zbGljZShIKzEpLFMucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChTLnBhc3N3b3JkKSkpOlMudXNlcm5hbWU9'@;
put 'ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChTLmF1dGgpKSxTLmF1dGg9Uy5wYXNzd29yZD9TLnVzZXJuYW1lKyI6IitTLnBhc3N3b3JkOlMudXNlcm5hbWUpLFMub3JpZ2luPSJmaWxlOiIhPT1TLnByb3RvY29sJiZlZShTLnByb3RvY29sKSYmUy5ob3N0P1MucHJvdG9j'@;
put 'b2wrIi8vIitTLmhvc3Q6Im51bGwiLFMuaHJlZj1TLnRvU3RyaW5nKCl9b2UucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24oc2UsaGUsdWUpe3ZhciBjZT10aGlzO3N3aXRjaChzZSl7Y2FzZSJxdWVyeSI6InN0cmluZyI9PXR5cGVvZiBoZSYmaGUubGVuZ3RoJiYoaGU9KHVlfHxLLnBhcnNlKSho'@;
put 'ZSkpLGNlW3NlXT1oZTticmVhaztjYXNlInBvcnQiOmNlW3NlXT1oZSx6KGhlLGNlLnByb3RvY29sKT9oZSYmKGNlLmhvc3Q9Y2UuaG9zdG5hbWUrIjoiK2hlKTooY2UuaG9zdD1jZS5ob3N0bmFtZSxjZVtzZV09IiIpO2JyZWFrO2Nhc2UiaG9zdG5hbWUiOmNlW3NlXT1oZSxjZS5wb3J0JiYo'@;
put 'aGUrPSI6IitjZS5wb3J0KSxjZS5ob3N0PWhlO2JyZWFrO2Nhc2UiaG9zdCI6Y2Vbc2VdPWhlLGoudGVzdChoZSk/KGhlPWhlLnNwbGl0KCI6IiksY2UucG9ydD1oZS5wb3AoKSxjZS5ob3N0bmFtZT1oZS5qb2luKCI6IikpOihjZS5ob3N0bmFtZT1oZSxjZS5wb3J0PSIiKTticmVhaztjYXNl'@;
put 'InByb3RvY29sIjpjZS5wcm90b2NvbD1oZS50b0xvd2VyQ2FzZSgpLGNlLnNsYXNoZXM9IXVlO2JyZWFrO2Nhc2UicGF0aG5hbWUiOmNhc2UiaGFzaCI6aWYoaGUpe3ZhciBHPSJwYXRobmFtZSI9PT1zZT8iLyI6IiMiO2NlW3NlXT1oZS5jaGFyQXQoMCkhPT1HP0craGU6aGV9ZWxzZSBjZVtz'@;
put 'ZV09aGU7YnJlYWs7Y2FzZSJ1c2VybmFtZSI6Y2FzZSJwYXNzd29yZCI6Y2Vbc2VdPWVuY29kZVVSSUNvbXBvbmVudChoZSk7YnJlYWs7Y2FzZSJhdXRoIjp2YXIgYj1oZS5pbmRleE9mKCI6Iik7fmI/KGNlLnVzZXJuYW1lPWhlLnNsaWNlKDAsYiksY2UudXNlcm5hbWU9ZW5jb2RlVVJJQ29t'@;
put 'cG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChjZS51c2VybmFtZSkpLGNlLnBhc3N3b3JkPWhlLnNsaWNlKGIrMSksY2UucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChjZS5wYXNzd29yZCkpKTpjZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVj'@;
put 'b2RlVVJJQ29tcG9uZW50KGhlKSl9Zm9yKHZhciBEPTA7RDxYLmxlbmd0aDtEKyspe3ZhciBIPVhbRF07SFs0XSYmKGNlW0hbMV1dPWNlW0hbMV1dLnRvTG93ZXJDYXNlKCkpfXJldHVybiBjZS5hdXRoPWNlLnBhc3N3b3JkP2NlLnVzZXJuYW1lKyI6IitjZS5wYXNzd29yZDpjZS51c2VybmFt'@;
put 'ZSxjZS5vcmlnaW49ImZpbGU6IiE9PWNlLnByb3RvY29sJiZlZShjZS5wcm90b2NvbCkmJmNlLmhvc3Q/Y2UucHJvdG9jb2wrIi8vIitjZS5ob3N0OiJudWxsIixjZS5ocmVmPWNlLnRvU3RyaW5nKCksY2V9LHRvU3RyaW5nOmZ1bmN0aW9uKHNlKXtzZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNl'@;
put 'fHwoc2U9Sy5zdHJpbmdpZnkpO3ZhciBoZSx1ZT10aGlzLGNlPXVlLmhvc3QsRz11ZS5wcm90b2NvbDtHJiYiOiIhPT1HLmNoYXJBdChHLmxlbmd0aC0xKSYmKEcrPSI6Iik7dmFyIGI9RysodWUucHJvdG9jb2wmJnVlLnNsYXNoZXN8fGVlKHVlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4g'@;
put 'dWUudXNlcm5hbWU/KGIrPXVlLnVzZXJuYW1lLHVlLnBhc3N3b3JkJiYoYis9IjoiK3VlLnBhc3N3b3JkKSxiKz0iQCIpOnVlLnBhc3N3b3JkPyhiKz0iOiIrdWUucGFzc3dvcmQsYis9IkAiKToiZmlsZToiIT09dWUucHJvdG9jb2wmJmVlKHVlLnByb3RvY29sKSYmIWNlJiYiLyIhPT11ZS5w'@;
put 'YXRobmFtZSYmKGIrPSJAIiksKCI6Ij09PWNlW2NlLmxlbmd0aC0xXXx8ai50ZXN0KHVlLmhvc3RuYW1lKSYmIXVlLnBvcnQpJiYoY2UrPSI6IiksYis9Y2UrdWUucGF0aG5hbWUsKGhlPSJvYmplY3QiPT10eXBlb2YgdWUucXVlcnk/c2UodWUucXVlcnkpOnVlLnF1ZXJ5KSYmKGIrPSI/IiE9'@;
put 'PWhlLmNoYXJBdCgwKT8iPyIraGU6aGUpLHVlLmhhc2gmJihiKz11ZS5oYXNoKSxifX0sb2UuZXh0cmFjdFByb3RvY29sPXRlLG9lLmxvY2F0aW9uPXEsb2UudHJpbUxlZnQ9WSxvZS5xcz1LLE0uZXhwb3J0cz1vZX0sNDkyNzooTSxPLFIpPT57dmFyIHo9Uig1MTA4KTtmdW5jdGlvbiBLKEwp'@;
put 'e3RyeXtpZighUi5nLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgaz1SLmcubG9jYWxTdG9yYWdlW0xdO3JldHVybiBudWxsIT1rJiYidHJ1ZSI9PT1TdHJpbmcoaykudG9Mb3dlckNhc2UoKX1NLmV4cG9ydHM9ZnVuY3Rpb24oTCxrKXtpZihLKCJub0RlcHJlY2F0'@;
put 'aW9uIikpcmV0dXJuIEw7dmFyIEU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIUUpe2lmKEsoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3Ioayk7SygidHJhY2VEZXByZWNhdGlvbiIpP3oudHJhY2Uoayk6ei53YXJuKGspLEU9ITB9cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpfX19LDM4NDpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBPJiYib2JqZWN0Ij09dHlwZW9mIE8mJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLnJlYWRVSW50OH19LDU5NTU6KE0s'@;
put 'TyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDI1ODQpLEs9Uig4NjYyKSxMPVIoNjQzMCksaz1SKDU2OTIpO2Z1bmN0aW9uIEUoSil7cmV0dXJuIEouY2FsbC5iaW5kKEopfXZhciBqPXR5cGVvZiBCaWdJbnQ8InUiLFY9dHlwZW9mIFN5bWJvbDwidSIsQj1FKE9iamVjdC5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmcpLFk9RShOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLFg9RShTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLFU9RShCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihqKXZhciBxPUUoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihWKXZhciBlZT1FKFN5bWJvbC5wcm90'@;
put 'b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gdGUoSixuZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO3RyeXtyZXR1cm4gbmUoSiksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIG9lKEope3JldHVybiJbb2JqZWN0IE1hcF0iPT09QihKKX1mdW5jdGlvbiBzZShKKXtyZXR1cm4i'@;
put 'W29iamVjdCBTZXRdIj09PUIoSil9ZnVuY3Rpb24gaGUoSil7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09QihKKX1mdW5jdGlvbiB1ZShKKXtyZXR1cm4iW29iamVjdCBXZWFrU2V0XSI9PT1CKEopfWZ1bmN0aW9uIGNlKEope3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1CKEop'@;
put 'fWZ1bmN0aW9uIEcoSil7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihjZS53b3JraW5nP2NlKEopOkogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gYihKKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09QihKKX1mdW5jdGlvbiBEKEope3JldHVybiB0eXBlb2Yg'@;
put 'RGF0YVZpZXc8InUiJiYoYi53b3JraW5nP2IoSik6SiBpbnN0YW5jZW9mIERhdGFWaWV3KX1PLmlzQXJndW1lbnRzT2JqZWN0PXosTy5pc0dlbmVyYXRvckZ1bmN0aW9uPUssTy5pc1R5cGVkQXJyYXk9ayxPLmlzUHJvbWlzZT1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUi'@;
put 'JiZKIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PUomJiJvYmplY3QiPT10eXBlb2YgSiYmImZ1bmN0aW9uIj09dHlwZW9mIEoudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIEouY2F0Y2h9LE8uaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZl'@;
put 'cjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoSik6ayhKKXx8RChKKX0sTy5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQ4QXJyYXkiPT09TChKKX0sTy5pc1VpbnQ4Q2xhbXBlZEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJVaW50OENsYW1w'@;
put 'ZWRBcnJheSI9PT1MKEopfSxPLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQxNkFycmF5Ij09PUwoSil9LE8uaXNVaW50MzJBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDMyQXJyYXkiPT09TChKKX0sTy5pc0ludDhBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iSW50'@;
put 'OEFycmF5Ij09PUwoSil9LE8uaXNJbnQxNkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJJbnQxNkFycmF5Ij09PUwoSil9LE8uaXNJbnQzMkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJJbnQzMkFycmF5Ij09PUwoSil9LE8uaXNGbG9hdDMyQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkZsb2F0'@;
put 'MzJBcnJheSI9PT1MKEopfSxPLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJGbG9hdDY0QXJyYXkiPT09TChKKX0sTy5pc0JpZ0ludDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09TChKKX0sTy5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uKEop'@;
put 'e3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1MKEopfSxvZS53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZvZShuZXcgTWFwKSxPLmlzTWFwPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgTWFwPCJ1IiYmKG9lLndvcmtpbmc/b2UoSik6SiBpbnN0YW5jZW9mIE1hcCl9LHNlLndvcmtpbmc9dHlw'@;
put 'ZW9mIFNldDwidSImJnNlKG5ldyBTZXQpLE8uaXNTZXQ9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBTZXQ8InUiJiYoc2Uud29ya2luZz9zZShKKTpKIGluc3RhbmNlb2YgU2V0KX0saGUud29ya2luZz10eXBlb2YgV2Vha01hcDwidSImJmhlKG5ldyBXZWFrTWFwKSxPLmlzV2Vha01hcD1m'@;
put 'dW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFdlYWtNYXA8InUiJiYoaGUud29ya2luZz9oZShKKTpKIGluc3RhbmNlb2YgV2Vha01hcCl9LHVlLndvcmtpbmc9dHlwZW9mIFdlYWtTZXQ8InUiJiZ1ZShuZXcgV2Vha1NldCksTy5pc1dlYWtTZXQ9ZnVuY3Rpb24oSil7cmV0dXJuIHVlKEopfSxj'@;
put 'ZS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmNlKG5ldyBBcnJheUJ1ZmZlciksTy5pc0FycmF5QnVmZmVyPUcsYi53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBEYXRhVmlldzwidSImJmIobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEp'@;
put 'KSxPLmlzRGF0YVZpZXc9RDt2YXIgSD10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP1NoYXJlZEFycmF5QnVmZmVyOnZvaWQgMDtmdW5jdGlvbiBOKEope3JldHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1CKEopfWZ1bmN0aW9uIGcoSil7cmV0dXJuIHZvaWQgMCE9PUgm'@;
put 'Jih2b2lkIDA9PT1OLndvcmtpbmcmJihOLndvcmtpbmc9TihuZXcgSCkpLE4ud29ya2luZz9OKEopOkogaW5zdGFuY2VvZiBIKX1mdW5jdGlvbiBDKEope3JldHVybiB0ZShKLFkpfWZ1bmN0aW9uIFMoSil7cmV0dXJuIHRlKEosWCl9ZnVuY3Rpb24gdihKKXtyZXR1cm4gdGUoSixVKX1mdW5j'@;
put 'dGlvbiBwKEope3JldHVybiBqJiZ0ZShKLHEpfWZ1bmN0aW9uIHcoSil7cmV0dXJuIFYmJnRlKEosZWUpfU8uaXNTaGFyZWRBcnJheUJ1ZmZlcj1nLE8uaXNBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PUIoSil9LE8uaXNNYXBJdGVy'@;
put 'YXRvcj1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBNYXAgSXRlcmF0b3JdIj09PUIoSil9LE8uaXNTZXRJdGVyYXRvcj1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBTZXQgSXRlcmF0b3JdIj09PUIoSil9LE8uaXNHZW5lcmF0b3JPYmplY3Q9ZnVuY3Rpb24oSil7cmV0dXJuIltvYmpl'@;
put 'Y3QgR2VuZXJhdG9yXSI9PT1CKEopfSxPLmlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZT1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBXZWJBc3NlbWJseS5Nb2R1bGVdIj09PUIoSil9LE8uaXNOdW1iZXJPYmplY3Q9QyxPLmlzU3RyaW5nT2JqZWN0PVMsTy5pc0Jvb2xlYW5PYmplY3Q9'@;
put 'dixPLmlzQmlnSW50T2JqZWN0PXAsTy5pc1N5bWJvbE9iamVjdD13LE8uaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbihKKXtyZXR1cm4gQyhKKXx8UyhKKXx8dihKKXx8cChKKXx8dyhKKX0sTy5pc0FueUFycmF5QnVmZmVyPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgVWludDhBcnJheTwi'@;
put 'dSImJihHKEopfHxnKEopKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxKLHtlbnVtZXJhYmxlOiExLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEor'@;
put 'IiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOTooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksTD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1PYmplY3Qua2V5cyhKKSxkZT17fSxmZT0wO2Zl'@;
put 'PG5lLmxlbmd0aDtmZSsrKWRlW25lW2ZlXV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKLG5lW2ZlXSk7cmV0dXJuIGRlfSxrPS8lW3NkaiVdL2c7Ty5mb3JtYXQ9ZnVuY3Rpb24oSil7aWYoIXVlKEopKXtmb3IodmFyIG5lPVtdLGRlPTA7ZGU8YXJndW1lbnRzLmxlbmd0aDtk'@;
put 'ZSsrKW5lLnB1c2goQihhcmd1bWVudHNbZGVdKSk7cmV0dXJuIG5lLmpvaW4oIiAiKX1kZT0xO2Zvcih2YXIgZmU9YXJndW1lbnRzLHhlPWZlLmxlbmd0aCxJZT1TdHJpbmcoSikucmVwbGFjZShrLGZ1bmN0aW9uKE9lKXtpZigiJSUiPT09T2UpcmV0dXJuIiUiO2lmKGRlPj14ZSlyZXR1cm4g'@;
put 'T2U7c3dpdGNoKE9lKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKGZlW2RlKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGZlW2RlKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGZlW2RlKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4g'@;
put 'T2V9fSksRmU9ZmVbZGVdO2RlPHhlO0ZlPWZlWysrZGVdKXNlKEZlKXx8IWIoRmUpP0llKz0iICIrRmU6SWUrPSIgIitCKEZlKTtyZXR1cm4gSWV9LE8uZGVwcmVjYXRlPWZ1bmN0aW9uKEosbmUpe2lmKHZvaWQgMCE9PXomJiEwPT09ei5ub0RlcHJlY2F0aW9uKXJldHVybiBKO2lmKHZvaWQg'@;
put 'MD09PXopcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE8uZGVwcmVjYXRlKEosbmUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIGRlPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFkZSl7aWYoei50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihuZSk7ei50cmFjZURlcHJlY2F0'@;
put 'aW9uP0sudHJhY2UobmUpOksuZXJyb3IobmUpLGRlPSEwfXJldHVybiBKLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBFPXt9LGo9L14kLztpZih6LmVudi5OT0RFX0RFQlVHKXt2YXIgVj16LmVudi5OT0RFX0RFQlVHO1Y9Vi5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQm'@;
put 'IikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksaj1uZXcgUmVnRXhwKCJeIitWKyIkIiwiaSIpfWZ1bmN0aW9uIEIoSixuZSl7dmFyIGRlPXtzZWVuOltdLHN0eWxpemU6WH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihkZS5kZXB0'@;
put 'aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihkZS5jb2xvcnM9YXJndW1lbnRzWzNdKSxvZShuZSk/ZGUuc2hvd0hpZGRlbj1uZTpuZSYmTy5fZXh0ZW5kKGRlLG5lKSxjZShkZS5zaG93SGlkZGVuKSYmKGRlLnNob3dIaWRkZW49ITEpLGNlKGRlLmRlcHRoKSYmKGRlLmRl'@;
put 'cHRoPTIpLGNlKGRlLmNvbG9ycykmJihkZS5jb2xvcnM9ITEpLGNlKGRlLmN1c3RvbUluc3BlY3QpJiYoZGUuY3VzdG9tSW5zcGVjdD0hMCksZGUuY29sb3JzJiYoZGUuc3R5bGl6ZT1ZKSxVKGRlLEosZGUuZGVwdGgpfWZ1bmN0aW9uIFkoSixuZSl7dmFyIGRlPUIuc3R5bGVzW25lXTtyZXR1'@;
put 'cm4gZGU/Ilx4MWJbIitCLmNvbG9yc1tkZV1bMF0rIm0iK0orIlx4MWJbIitCLmNvbG9yc1tkZV1bMV0rIm0iOkp9ZnVuY3Rpb24gWChKLG5lKXtyZXR1cm4gSn1mdW5jdGlvbiBVKEosbmUsZGUpe2lmKEouY3VzdG9tSW5zcGVjdCYmbmUmJk4obmUuaW5zcGVjdCkmJm5lLmluc3BlY3QhPT1P'@;
put 'Lmluc3BlY3QmJighbmUuY29uc3RydWN0b3J8fG5lLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW5lKSl7dmFyIGZlPW5lLmluc3BlY3QoZGUsSik7cmV0dXJuIHVlKGZlKXx8KGZlPVUoSixmZSxkZSkpLGZlfXZhciB4ZT1mdW5jdGlvbihRZSxsdCl7aWYoY2UobHQpKXJldHVybiBRZS5zdHls'@;
put 'aXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZih1ZShsdCkpe3ZhciBQZT0iJyIrSlNPTi5zdHJpbmdpZnkobHQpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIFFlLnN0eWxpemUoUGUsInN0cmluZyIp'@;
put 'fXJldHVybiBoZShsdCk/UWUuc3R5bGl6ZSgiIitsdCwibnVtYmVyIik6b2UobHQpP1FlLnN0eWxpemUoIiIrbHQsImJvb2xlYW4iKTpzZShsdCk/UWUuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KEosbmUpO2lmKHhlKXJldHVybiB4ZTt2YXIgbHQsSWU9T2JqZWN0LmtleXMobmUp'@;
put 'LEZlPShsdD17fSxJZS5mb3JFYWNoKGZ1bmN0aW9uKFBlLGJlKXtsdFtQZV09ITB9KSxsdCk7aWYoSi5zaG93SGlkZGVuJiYoSWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobmUpKSxIKG5lKSYmKEllLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8SWUuaW5kZXhPZigiZGVzY3JpcHRpb24i'@;
put 'KT49MCkpcmV0dXJuIHEobmUpO2lmKDA9PT1JZS5sZW5ndGgpe2lmKE4obmUpKXJldHVybiBKLnN0eWxpemUoIltGdW5jdGlvbiIrKG5lLm5hbWU/IjogIituZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihHKG5lKSlyZXR1cm4gSi5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJp'@;
put 'bmcuY2FsbChuZSksInJlZ2V4cCIpO2lmKEQobmUpKXJldHVybiBKLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZSksImRhdGUiKTtpZihIKG5lKSlyZXR1cm4gcShuZSl9dmFyIGplLFdlPSIiLEtlPSExLFllPVsieyIsIn0iXTtyZXR1cm4gdGUobmUpJiYoS2U9ITAs'@;
put 'WWU9WyJbIiwiXSJdKSxOKG5lKSYmKFdlPSIgW0Z1bmN0aW9uIisobmUubmFtZT8iOiAiK25lLm5hbWU6IiIpKyJdIiksRyhuZSkmJihXZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSksRChuZSkmJihXZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2Fs'@;
put 'bChuZSkpLEgobmUpJiYoV2U9IiAiK3EobmUpKSwwIT09SWUubGVuZ3RofHxLZSYmMCE9bmUubGVuZ3RoP2RlPDA/RyhuZSk/Si5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZSksInJlZ2V4cCIpOkouc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KEouc2Vl'@;
put 'bi5wdXNoKG5lKSxqZT1LZT9mdW5jdGlvbihRZSxsdCxQZSxiZSxBZSl7Zm9yKHZhciBUZT1bXSxxZT0wLFhlPWx0Lmxlbmd0aDtxZTxYZTsrK3FlKXYobHQsU3RyaW5nKHFlKSk/VGUucHVzaChlZShRZSxsdCxQZSxiZSxTdHJpbmcocWUpLCEwKSk6VGUucHVzaCgiIik7cmV0dXJuIEFlLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oVWUpe1VlLm1hdGNoKC9eXGQrJC8pfHxUZS5wdXNoKGVlKFFlLGx0LFBlLGJlLFVlLCEwKSl9KSxUZX0oSixuZSxkZSxGZSxJZSk6SWUubWFwKGZ1bmN0aW9uKFFlKXtyZXR1cm4gZWUoSixuZSxkZSxGZSxRZSxLZSl9KSxKLnNlZW4ucG9wKCksZnVuY3Rpb24oUWUs'@;
put 'bHQsUGUpe3JldHVybiBRZS5yZWR1Y2UoZnVuY3Rpb24oQWUsVGUpe3JldHVybiBUZS5pbmRleE9mKCJcbiIpLEFlK1RlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9QZVswXSsoIiI9PT1sdD8iIjpsdCsiXG4gIikrIiAiK1FlLmpvaW4oIixcbiAgIikr'@;
put 'IiAiK1BlWzFdOlBlWzBdK2x0KyIgIitRZS5qb2luKCIsICIpKyIgIitQZVsxXX0oamUsV2UsWWUpKTpZZVswXStXZStZZVsxXX1mdW5jdGlvbiBxKEope3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChKKSsiXSJ9ZnVuY3Rpb24gZWUoSixuZSxkZSxmZSx4ZSxJZSl7'@;
put 'dmFyIEZlLE9lLGplO2lmKChqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5lLHhlKXx8e3ZhbHVlOm5lW3hlXX0pLmdldD9PZT1KLnN0eWxpemUoamUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpqZS5zZXQmJihPZT1KLnN0eWxpemUoIltT'@;
put 'ZXR0ZXJdIiwic3BlY2lhbCIpKSx2KGZlLHhlKXx8KEZlPSJbIit4ZSsiXSIpLE9lfHwoSi5zZWVuLmluZGV4T2YoamUudmFsdWUpPDA/KE9lPXNlKGRlKT9VKEosamUudmFsdWUsbnVsbCk6VShKLGplLnZhbHVlLGRlLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoT2U9SWU/T2Uuc3BsaXQoIlxu'@;
put 'IikubWFwKGZ1bmN0aW9uKFdlKXtyZXR1cm4iICAiK1dlfSkuam9pbigiXG4iKS5zbGljZSgyKToiXG4iK09lLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihXZSl7cmV0dXJuIiAgICIrV2V9KS5qb2luKCJcbiIpKTpPZT1KLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLGNlKEZl'@;
put 'KSl7aWYoSWUmJnhlLm1hdGNoKC9eXGQrJC8pKXJldHVybiBPZTsoRmU9SlNPTi5zdHJpbmdpZnkoIiIreGUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhGZT1GZS5zbGljZSgxLC0xKSxGZT1KLnN0eWxpemUoRmUsIm5hbWUiKSk6KEZlPUZlLnJlcGxhY2UoLycv'@;
put 'ZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxGZT1KLnN0eWxpemUoRmUsInN0cmluZyIpKX1yZXR1cm4gRmUrIjogIitPZX1mdW5jdGlvbiB0ZShKKXtyZXR1cm4gQXJyYXkuaXNBcnJheShKKX1mdW5jdGlvbiBvZShKKXtyZXR1cm4iYm9vbGVh'@;
put 'biI9PXR5cGVvZiBKfWZ1bmN0aW9uIHNlKEope3JldHVybiBudWxsPT09Sn1mdW5jdGlvbiBoZShKKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEp9ZnVuY3Rpb24gdWUoSil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBKfWZ1bmN0aW9uIGNlKEope3JldHVybiB2b2lkIDA9PT1KfWZ1bmN0aW9u'@;
put 'IEcoSil7cmV0dXJuIGIoSikmJiJbb2JqZWN0IFJlZ0V4cF0iPT09ZyhKKX1mdW5jdGlvbiBiKEope3JldHVybiJvYmplY3QiPT10eXBlb2YgSiYmbnVsbCE9PUp9ZnVuY3Rpb24gRChKKXtyZXR1cm4gYihKKSYmIltvYmplY3QgRGF0ZV0iPT09ZyhKKX1mdW5jdGlvbiBIKEope3JldHVybiBi'@;
put 'KEopJiYoIltvYmplY3QgRXJyb3JdIj09PWcoSil8fEogaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gTihKKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSn1mdW5jdGlvbiBnKEope3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSil9ZnVuY3Rpb24gQyhKKXtyZXR1'@;
put 'cm4gSjwxMD8iMCIrSi50b1N0cmluZygxMCk6Si50b1N0cmluZygxMCl9Ty5kZWJ1Z2xvZz1mdW5jdGlvbihKKXtpZihKPUoudG9VcHBlckNhc2UoKSwhRVtKXSlpZihqLnRlc3QoSikpe3ZhciBuZT16LnBpZDtFW0pdPWZ1bmN0aW9uKCl7dmFyIGRlPU8uZm9ybWF0LmFwcGx5KE8sYXJndW1l'@;
put 'bnRzKTtLLmVycm9yKCIlcyAlZDogJXMiLEosbmUsZGUpfX1lbHNlIEVbSl09ZnVuY3Rpb24oKXt9O3JldHVybiBFW0pdfSxPLmluc3BlY3Q9QixCLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0s'@;
put 'Z3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sQi5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxs'@;
put 'b3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxPLnR5cGVzPVIoNTk1NSksTy5pc0FycmF5PXRlLE8uaXNCb29sZWFuPW9lLE8uaXNOdWxsPXNlLE8uaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24oSil7'@;
put 'cmV0dXJuIG51bGw9PUp9LE8uaXNOdW1iZXI9aGUsTy5pc1N0cmluZz11ZSxPLmlzU3ltYm9sPWZ1bmN0aW9uKEope3JldHVybiJzeW1ib2wiPT10eXBlb2YgSn0sTy5pc1VuZGVmaW5lZD1jZSxPLmlzUmVnRXhwPUcsTy50eXBlcy5pc1JlZ0V4cD1HLE8uaXNPYmplY3Q9YixPLmlzRGF0ZT1E'@;
put 'LE8udHlwZXMuaXNEYXRlPUQsTy5pc0Vycm9yPUgsTy50eXBlcy5pc05hdGl2ZUVycm9yPUgsTy5pc0Z1bmN0aW9uPU4sTy5pc1ByaW1pdGl2ZT1mdW5jdGlvbihKKXtyZXR1cm4gbnVsbD09PUp8fCJib29sZWFuIj09dHlwZW9mIEp8fCJudW1iZXIiPT10eXBlb2YgSnx8InN0cmluZyI9PXR5'@;
put 'cGVvZiBKfHwic3ltYm9sIj09dHlwZW9mIEp8fHZvaWQgMD09PUp9LE8uaXNCdWZmZXI9UigzODQpO3ZhciBTPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gdihKLG5lKXtyZXR1cm4gT2Jq'@;
put 'ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEosbmUpfU8ubG9nPWZ1bmN0aW9uKCl7dmFyIEosbmU7Sy5sb2coIiVzIC0gJXMiLChuZT1bQygoSj1uZXcgRGF0ZSkuZ2V0SG91cnMoKSksQyhKLmdldE1pbnV0ZXMoKSksQyhKLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKSxbSi5n'@;
put 'ZXREYXRlKCksU1tKLmdldE1vbnRoKCldLG5lXS5qb2luKCIgIikpLE8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKSl9LE8uaW5oZXJpdHM9Uig1NzE3KSxPLl9leHRlbmQ9ZnVuY3Rpb24oSixuZSl7aWYoIW5lfHwhYihuZSkpcmV0dXJuIEo7Zm9yKHZhciBkZT1PYmplY3Qua2V5cyhuZSks'@;
put 'ZmU9ZGUubGVuZ3RoO2ZlLS07KUpbZGVbZmVdXT1uZVtkZVtmZV1dO3JldHVybiBKfTt2YXIgcD10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiB3KEosbmUpe2lmKCFKKXt2YXIgZGU9bmV3IEVycm9yKCJQcm9taXNlIHdh'@;
put 'cyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtkZS5yZWFzb249SixKPWRlfXJldHVybiBuZShKKX1PLnByb21pc2lmeT1mdW5jdGlvbihKKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9m'@;
put 'IHR5cGUgRnVuY3Rpb24nKTtpZihwJiZKW3BdKXt2YXIgbmU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKG5lPUpbcF0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidXRpbC5wcm9taXNpZnkuY3VzdG9tIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1cm4gT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KG5lLHAse3ZhbHVlOm5lLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbmV9ZnVuY3Rpb24gbmUoKXtmb3IodmFyIGRlLGZlLHhlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKE9lLGplKXtkZT1PZSxmZT1qZX0pLEllPVtdLEZlPTA7RmU8'@;
put 'YXJndW1lbnRzLmxlbmd0aDtGZSsrKUllLnB1c2goYXJndW1lbnRzW0ZlXSk7SWUucHVzaChmdW5jdGlvbihPZSxqZSl7T2U/ZmUoT2UpOmRlKGplKX0pO3RyeXtKLmFwcGx5KHRoaXMsSWUpfWNhdGNoKE9lKXtmZShPZSl9cmV0dXJuIHhlfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yo'@;
put 'bmUsT2JqZWN0LmdldFByb3RvdHlwZU9mKEopKSxwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobmUscCx7dmFsdWU6bmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZSxMKEopKX0sTy5wcm9taXNpZnkuY3VzdG9t'@;
put 'PXAsTy5jYWxsYmFja2lmeT1mdW5jdGlvbihKKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiBuZSgpe2Zvcih2YXIgZGU9W10sZmU9MDtmZTxhcmd1'@;
put 'bWVudHMubGVuZ3RoO2ZlKyspZGUucHVzaChhcmd1bWVudHNbZmVdKTt2YXIgeGU9ZGUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHhlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciBJZT10aGlzLEZlPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHhlLmFwcGx5KEllLGFyZ3VtZW50cyl9O0ouYXBwbHkodGhpcyxkZSkudGhlbihmdW5jdGlvbihPZSl7ei5uZXh0VGljayhGZS5iaW5kKG51bGwsbnVsbCxPZSkpfSxmdW5jdGlvbihPZSl7ei5uZXh0VGljayh3LmJpbmQobnVsbCxPZSxGZSkpfSl9cmV0dXJuIE9i'@;
put 'amVjdC5zZXRQcm90b3R5cGVPZihuZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5lLEwoSikpLG5lfX0sNDgxOihNLE8sUik9PnshZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO3ouZXhwb3J0cy5pc191cmk9TCx6LmV4cG9ydHMuaXNfaHR0cF91'@;
put 'cmk9ayx6LmV4cG9ydHMuaXNfaHR0cHNfdXJpPUUsei5leHBvcnRzLmlzX3dlYl91cmk9aix6LmV4cG9ydHMuaXNVcmk9TCx6LmV4cG9ydHMuaXNIdHRwVXJpPWssei5leHBvcnRzLmlzSHR0cHNVcmk9RSx6LmV4cG9ydHMuaXNXZWJVcmk9ajt2YXIgSz1mdW5jdGlvbihWKXtyZXR1cm4gVi5t'@;
put 'YXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVuY3Rpb24gTChWKXtpZihWJiYhL1teYS16MC05XDpcL1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9XC5cLVxfXH5cJV0vaS50ZXN0KFYp'@;
put 'JiYhLyVbXjAtOWEtZl0vaS50ZXN0KFYpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwkKS9pLnRlc3QoVikpe3ZhciBCLFksWCxVLHEsZWU9IiIsdGU9IiI7aWYoZWU9KEI9SyhWKSlbMV0sWT1CWzJdLFg9QlszXSxVPUJbNF0scT1CWzVdLGVlJiZlZS5sZW5ndGgmJlgubGVuZ3RoPj0wKXtp'@;
put 'ZihZJiZZLmxlbmd0aCl7aWYoMCE9PVgubGVuZ3RoJiYhL15cLy8udGVzdChYKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoWCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KGVlLnRvTG93ZXJDYXNlKCkpKXJldHVybiB0ZSs9ZWUrIjoiLFkmJlkubGVuZ3Ro'@;
put 'JiYodGUrPSIvLyIrWSksdGUrPVgsVSYmVS5sZW5ndGgmJih0ZSs9Ij8iK1UpLHEmJnEubGVuZ3RoJiYodGUrPSIjIitxKSx0ZX19fWZ1bmN0aW9uIGsoVixCKXtpZihMKFYpKXt2YXIgWSxYLFUscSxlZT0iIix0ZT0iIixvZT0iIixzZT0iIjtpZihlZT0oWT1LKFYpKVsxXSx0ZT1ZWzJdLFg9'@;
put 'WVszXSxVPVlbNF0scT1ZWzVdLGVlKXtpZihCKXtpZigiaHR0cHMiIT1lZS50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9ZWUudG9Mb3dlckNhc2UoKSlyZXR1cm47aWYodGUpcmV0dXJuLzooXGQrKSQvLnRlc3QodGUpJiYob2U9dGUubWF0Y2goLzooXGQrKSQvKVswXSx0'@;
put 'ZT10ZS5yZXBsYWNlKC86XGQrJC8sIiIpKSxzZSs9ZWUrIjoiLHNlKz0iLy8iK3RlLG9lJiYoc2UrPW9lKSxzZSs9WCxVJiZVLmxlbmd0aCYmKHNlKz0iPyIrVSkscSYmcS5sZW5ndGgmJihzZSs9IiMiK3EpLHNlfX19ZnVuY3Rpb24gRShWKXtyZXR1cm4gayhWLCEwKX1mdW5jdGlvbiBqKFYp'@;
put 'e3JldHVybiBrKFYpfHxFKFYpfX0oTT1SLm5tZChNKSl9LDY0MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQwMjkpLEs9UigzMDgzKSxMPVIoMTkyNCksaz1SKDcyOTYpLEU9TCgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLGo9Uig2NDEwKSgpLFY9dHlwZW9mIGdsb2Jh'@;
put 'bFRoaXM+InUiP1IuZzpnbG9iYWxUaGlzLEI9SygpLFk9TCgiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLFg9e30sVT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7aiYmayYmVSYmeihCLGZ1bmN0aW9uKGVlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgVltlZV0pe3ZhciB0ZT1uZXcgVltlZV07aWYo'@;
put 'U3ltYm9sLnRvU3RyaW5nVGFnIGluIHRlKXt2YXIgb2U9VSh0ZSksc2U9ayhvZSxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFzZSl7dmFyIGhlPVUob2UpO3NlPWsoaGUsU3ltYm9sLnRvU3RyaW5nVGFnKX1YW2VlXT1zZS5nZXR9fX0pO3ZhciBxPVIoNTY5Mik7TS5leHBvcnRzPWZ1bmN0aW9u'@;
put 'KGVlKXtyZXR1cm4hIXEoZWUpJiYoaiYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIGVlPyh0ZT1lZSxvZT0hMSx6KFgsZnVuY3Rpb24oc2UsaGUpe2lmKCFvZSl0cnl7dmFyIHVlPXNlLmNhbGwodGUpO3VlPT09aGUmJihvZT11ZSl9Y2F0Y2h7fX0pLG9lKTpZKEUoZWUpLDgsLTEpKTt2YXIgdGUs'@;
put 'b2V9fSwyNDc5Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24gTyhSLHope2lmKFImJnopcmV0dXJuIE8oUikoeik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFIpdGhyb3cgbmV3IFR5cGVFcnJvcigibmVlZCB3cmFwcGVyIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5rZXlzKFIpLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oTCl7S1tMXT1SW0xdfSksSztmdW5jdGlvbiBLKCl7Zm9yKHZhciBMPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxrPTA7azxMLmxlbmd0aDtrKyspTFtrXT1hcmd1bWVudHNba107dmFyIEU9Ui5hcHBseSh0aGlzLEwpLGo9TFtMLmxlbmd0aC0xXTtyZXR1cm4iZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgRSYmRSE9PWomJk9iamVjdC5rZXlzKGopLmZvckVhY2goZnVuY3Rpb24oVil7RVtWXT1qW1ZdfSksRX19fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDI1MzU6KCk9Pnt9LDM3MTA6KCk9Pnt9'@;
put 'LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDcyMTc6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1bIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSIs'@;
put 'IkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiSW50OEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSJdLEs9dHlwZW9mIGdsb2JhbFRoaXM+InUiP1IuZzpnbG9iYWxU'@;
put 'aGlzO00uZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgTD1bXSxrPTA7azx6Lmxlbmd0aDtrKyspImZ1bmN0aW9uIj09dHlwZW9mIEtbeltrXV0mJihMW0wubGVuZ3RoXT16W2tdKTtyZXR1cm4gTH19LDQ5NDY6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMt'@;
put 'MTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNp'@;
put 'cGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIs'@;
put 'ImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2Ijox'@;
put 'NiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUi'@;
put 'OiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9'@;
put 'LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0x'@;
put 'OTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNm'@;
put 'YjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7'@;
put 'ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIi'@;
put 'OiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJr'@;
put 'ZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1Niwi'@;
put 'aXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9k'@;
put 'ZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVu'@;
put 'Y3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUw'@;
put 'MzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hh'@;
put 'MjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4'@;
put 'NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0'@;
put 'ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoi'@;
put 'MzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIs'@;
put 'Imhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJp'@;
put 'ZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIy'@;
put 'NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEz'@;
put 'ODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6'@;
put 'eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0'@;
put 'MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAw'@;
put 'YzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDEzMDg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIx'@;
put 'LjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMzIwODpNPT57InVz'@;
put 'ZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05MWSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJT'@;
put 'X0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJ'@;
put 'TksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RI'@;
put 'IjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgsIkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5'@;
put 'LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09OTlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFD'@;
put 'SCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUs'@;
put 'IkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVOUkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVO'@;
put 'T01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5PU1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1'@;
put 'LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwiRVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFM'@;
put 'RSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERCTE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEw'@;
put 'LCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lHVVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoy'@;
put 'MSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwiU0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xF'@;
put 'R0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3'@;
put 'NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xfT1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9T'@;
put 'RVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDcz'@;
put 'NzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNTTF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJT'@;
put 'U0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJTU0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwi'@;
put 'U1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xfT1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYy'@;
put 'X1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUciOjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJ'@;
put 'TkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRIT0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BL'@;
put 'RVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVOR0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxF'@;
put 'X1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwiTlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0Ff'@;
put 'WDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJY'@;
put 'X09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2'@;
put 'N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoi'@;
put 'ZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0'@;
put 'MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4Yjgw'@;
put 'ZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZh'@;
put 'NWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk'@;
put 'ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRj'@;
put 'ZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5'@;
put 'OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJl'@;
put 'YTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNl'@;
put 'NDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAz'@;
put 'OWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcw'@;
put 'Zjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2Uw'@;
put 'ZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0'@;
put 'ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThk'@;
put 'YTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYw'@;
put 'NmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkz'@;
put 'M2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFh'@;
put 'NzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3'@;
put 'MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2'@;
put 'OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2Vk'@;
put 'ZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2'@;
put 'YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRm'@;
put 'MWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2'@;
put 'Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThl'@;
put 'ZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRk'@;
put 'MjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2Fm'@;
put 'NDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4'@;
put 'ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFl'@;
put 'NmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNh'@;
put 'NDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2'@;
put 'OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNi'@;
put 'ZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEy'@;
put 'NTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3'@;
put 'ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJk'@;
put 'ZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkw'@;
put 'MjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4'@;
put 'MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5'@;
put 'Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4'@;
put 'YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3'@;
put 'ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAw'@;
put 'OTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sODU5NzpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17'@;
put 'aTg6IjYuNS40In19LDI1NjI6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVz'@;
put 'LTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1v'@;
put 'ZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwi'@;
put 'Mi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9LDM3MDQ6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgnWyJhYyIsImNvbS5hYyIsImVkdS5hYyIsImdvdi5hYyIsIm5ldC5hYyIsIm1pbC5hYyIsIm9yZy5hYyIsImFkIiwibm9tLmFkIiwiYWUi'@;
put 'LCJjby5hZSIsIm5ldC5hZSIsIm9yZy5hZSIsInNjaC5hZSIsImFjLmFlIiwiZ292LmFlIiwibWlsLmFlIiwiYWVybyIsImFjY2lkZW50LWludmVzdGlnYXRpb24uYWVybyIsImFjY2lkZW50LXByZXZlbnRpb24uYWVybyIsImFlcm9iYXRpYy5hZXJvIiwiYWVyb2NsdWIuYWVybyIsImFlcm9k'@;
put 'cm9tZS5hZXJvIiwiYWdlbnRzLmFlcm8iLCJhaXJjcmFmdC5hZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWlyLXN1cnZlaWxsYW5jZS5hZXJvIiwiYWlydHJhZmZpYy5hZXJvIiwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvIiwiYW1idWxhbmNlLmFlcm8iLCJhbXVzZW1l'@;
put 'bnQuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5h'@;
put 'ZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVj'@;
put 'YXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZ1ZWwu'@;
put 'YWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFz'@;
put 'aW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWVkaWEuYWVybyIsIm1pY3JvbGlnaHQuYWVybyIsIm1vZGVsbGluZy5hZXJvIiwibmF2aWdhdGlvbi5hZXJvIiwicGFyYWNodXRpbmcuYWVybyIsInBhcmFnbGlkaW5nLmFlcm8i'@;
put 'LCJwYXNzZW5nZXItYXNzb2NpYXRpb24uYWVybyIsInBpbG90LmFlcm8iLCJwcmVzcy5hZXJvIiwicHJvZHVjdGlvbi5hZXJvIiwicmVjcmVhdGlvbi5hZXJvIiwicmVwYm9keS5hZXJvIiwicmVzLmFlcm8iLCJyZXNlYXJjaC5hZXJvIiwicm90b3JjcmFmdC5hZXJvIiwic2FmZXR5LmFlcm8i'@;
put 'LCJzY2llbnRpc3QuYWVybyIsInNlcnZpY2VzLmFlcm8iLCJzaG93LmFlcm8iLCJza3lkaXZpbmcuYWVybyIsInNvZnR3YXJlLmFlcm8iLCJzdHVkZW50LmFlcm8iLCJ0cmFkZXIuYWVybyIsInRyYWRpbmcuYWVybyIsInRyYWluZXIuYWVybyIsInVuaW9uLmFlcm8iLCJ3b3JraW5nZ3JvdXAu'@;
put 'YWVybyIsIndvcmtzLmFlcm8iLCJhZiIsImdvdi5hZiIsImNvbS5hZiIsIm9yZy5hZiIsIm5ldC5hZiIsImVkdS5hZiIsImFnIiwiY29tLmFnIiwib3JnLmFnIiwibmV0LmFnIiwiY28uYWciLCJub20uYWciLCJhaSIsIm9mZi5haSIsImNvbS5haSIsIm5ldC5haSIsIm9yZy5haSIsImFsIiwi'@;
put 'Y29tLmFsIiwiZWR1LmFsIiwiZ292LmFsIiwibWlsLmFsIiwibmV0LmFsIiwib3JnLmFsIiwiYW0iLCJjby5hbSIsImNvbS5hbSIsImNvbW11bmUuYW0iLCJuZXQuYW0iLCJvcmcuYW0iLCJhbyIsImVkLmFvIiwiZ3YuYW8iLCJvZy5hbyIsImNvLmFvIiwicGIuYW8iLCJpdC5hbyIsImFxIiwi'@;
put 'YXIiLCJiZXQuYXIiLCJjb20uYXIiLCJjb29wLmFyIiwiZWR1LmFyIiwiZ29iLmFyIiwiZ292LmFyIiwiaW50LmFyIiwibWlsLmFyIiwibXVzaWNhLmFyIiwibXV0dWFsLmFyIiwibmV0LmFyIiwib3JnLmFyIiwic2VuYXNhLmFyIiwidHVyLmFyIiwiYXJwYSIsImUxNjQuYXJwYSIsImluLWFk'@;
put 'ZHIuYXJwYSIsImlwNi5hcnBhIiwiaXJpcy5hcnBhIiwidXJpLmFycGEiLCJ1cm4uYXJwYSIsImFzIiwiZ292LmFzIiwiYXNpYSIsImF0IiwiYWMuYXQiLCJjby5hdCIsImd2LmF0Iiwib3IuYXQiLCJzdGguYWMuYXQiLCJhdSIsImNvbS5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImVkdS5hdSIs'@;
put 'Imdvdi5hdSIsImFzbi5hdSIsImlkLmF1IiwiaW5mby5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1LmF1'@;
put 'IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1IiwiYXci'@;
put 'LCJjb20uYXciLCJheCIsImF6IiwiY29tLmF6IiwibmV0LmF6IiwiaW50LmF6IiwiZ292LmF6Iiwib3JnLmF6IiwiZWR1LmF6IiwiaW5mby5heiIsInBwLmF6IiwibWlsLmF6IiwibmFtZS5heiIsInByby5heiIsImJpei5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwibWls'@;
put 'LmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiYS5iZyIs'@;
put 'ImIuYmciLCJjLmJnIiwiZC5iZyIsImUuYmciLCJmLmJnIiwiZy5iZyIsImguYmciLCJpLmJnIiwiai5iZyIsImsuYmciLCJsLmJnIiwibS5iZyIsIm4uYmciLCJvLmJnIiwicC5iZyIsInEuYmciLCJyLmJnIiwicy5iZyIsInQuYmciLCJ1LmJnIiwidi5iZyIsIncuYmciLCJ4LmJnIiwieS5i'@;
put 'ZyIsInouYmciLCIwLmJnIiwiMS5iZyIsIjIuYmciLCIzLmJnIiwiNC5iZyIsIjUuYmciLCI2LmJnIiwiNy5iZyIsIjguYmciLCI5LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJnb3YuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwib3Iu'@;
put 'YmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFzc28uYmoiLCJiYXJyZWF1LmJqIiwiZ291di5iaiIsImJtIiwiY29tLmJtIiwiZWR1LmJtIiwiZ292LmJtIiwibmV0LmJtIiwib3JnLmJtIiwiYm4iLCJjb20uYm4iLCJlZHUuYm4iLCJnb3YuYm4iLCJuZXQuYm4iLCJvcmcuYm4iLCJibyIsImNv'@;
put 'bS5ibyIsImVkdS5ibyIsImdvYi5ibyIsImludC5ibyIsIm9yZy5ibyIsIm5ldC5ibyIsIm1pbC5ibyIsInR2LmJvIiwid2ViLmJvIiwiYWNhZGVtaWEuYm8iLCJhZ3JvLmJvIiwiYXJ0ZS5ibyIsImJsb2cuYm8iLCJib2xpdmlhLmJvIiwiY2llbmNpYS5ibyIsImNvb3BlcmF0aXZhLmJvIiwi'@;
put 'ZGVtb2NyYWNpYS5ibyIsImRlcG9ydGUuYm8iLCJlY29sb2dpYS5ibyIsImVjb25vbWlhLmJvIiwiZW1wcmVzYS5ibyIsImluZGlnZW5hLmJvIiwiaW5kdXN0cmlhLmJvIiwiaW5mby5ibyIsIm1lZGljaW5hLmJvIiwibW92aW1pZW50by5ibyIsIm11c2ljYS5ibyIsIm5hdHVyYWwuYm8iLCJu'@;
put 'b21icmUuYm8iLCJub3RpY2lhcy5ibyIsInBhdHJpYS5ibyIsInBvbGl0aWNhLmJvIiwicHJvZmVzaW9uYWwuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicHVlYmxvLmJvIiwicmV2aXN0YS5ibyIsInNhbHVkLmJvIiwidGVjbm9sb2dpYS5ibyIsInRrc2F0LmJvIiwidHJhbnNwb3J0ZS5ibyIs'@;
put 'Indpa2kuYm8iLCJiciIsIjlndWFjdS5iciIsImFiYy5iciIsImFkbS5iciIsImFkdi5iciIsImFnci5iciIsImFqdS5iciIsImFtLmJyIiwiYW5hbmkuYnIiLCJhcGFyZWNpZGEuYnIiLCJhcHAuYnIiLCJhcnEuYnIiLCJhcnQuYnIiLCJhdG8uYnIiLCJiLmJyIiwiYmFydWVyaS5iciIsImJl'@;
put 'bGVtLmJyIiwiYmh6LmJyIiwiYmliLmJyIiwiYmlvLmJyIiwiYmxvZy5iciIsImJtZC5iciIsImJvYXZpc3RhLmJyIiwiYnNiLmJyIiwiY2FtcGluYWdyYW5kZS5iciIsImNhbXBpbmFzLmJyIiwiY2F4aWFzLmJyIiwiY2ltLmJyIiwiY25nLmJyIiwiY250LmJyIiwiY29tLmJyIiwiY29udGFn'@;
put 'ZW0uYnIiLCJjb29wLmJyIiwiY296LmJyIiwiY3JpLmJyIiwiY3VpYWJhLmJyIiwiY3VyaXRpYmEuYnIiLCJkZWYuYnIiLCJkZXMuYnIiLCJkZXQuYnIiLCJkZXYuYnIiLCJlY24uYnIiLCJlY28uYnIiLCJlZHUuYnIiLCJlbXAuYnIiLCJlbmYuYnIiLCJlbmcuYnIiLCJlc3AuYnIiLCJldGMu'@;
put 'YnIiLCJldGkuYnIiLCJmYXIuYnIiLCJmZWlyYS5iciIsImZsb2cuYnIiLCJmbG9yaXBhLmJyIiwiZm0uYnIiLCJmbmQuYnIiLCJmb3J0YWwuYnIiLCJmb3QuYnIiLCJmb3ouYnIiLCJmc3QuYnIiLCJnMTIuYnIiLCJnZW8uYnIiLCJnZ2YuYnIiLCJnb2lhbmlhLmJyIiwiZ292LmJyIiwiYWMu'@;
put 'Z292LmJyIiwiYWwuZ292LmJyIiwiYW0uZ292LmJyIiwiYXAuZ292LmJyIiwiYmEuZ292LmJyIiwiY2UuZ292LmJyIiwiZGYuZ292LmJyIiwiZXMuZ292LmJyIiwiZ28uZ292LmJyIiwibWEuZ292LmJyIiwibWcuZ292LmJyIiwibXMuZ292LmJyIiwibXQuZ292LmJyIiwicGEuZ292LmJyIiwi'@;
put 'cGIuZ292LmJyIiwicGUuZ292LmJyIiwicGkuZ292LmJyIiwicHIuZ292LmJyIiwicmouZ292LmJyIiwicm4uZ292LmJyIiwicm8uZ292LmJyIiwicnIuZ292LmJyIiwicnMuZ292LmJyIiwic2MuZ292LmJyIiwic2UuZ292LmJyIiwic3AuZ292LmJyIiwidG8uZ292LmJyIiwiZ3J1LmJyIiwi'@;
put 'aW1iLmJyIiwiaW5kLmJyIiwiaW5mLmJyIiwiamFiLmJyIiwiamFtcGEuYnIiLCJqZGYuYnIiLCJqb2ludmlsbGUuYnIiLCJqb3IuYnIiLCJqdXMuYnIiLCJsZWcuYnIiLCJsZWwuYnIiLCJsb2cuYnIiLCJsb25kcmluYS5iciIsIm1hY2FwYS5iciIsIm1hY2Vpby5iciIsIm1hbmF1cy5iciIs'@;
put 'Im1hcmluZ2EuYnIiLCJtYXQuYnIiLCJtZWQuYnIiLCJtaWwuYnIiLCJtb3JlbmEuYnIiLCJtcC5iciIsIm11cy5iciIsIm5hdGFsLmJyIiwibmV0LmJyIiwibml0ZXJvaS5iciIsIioubm9tLmJyIiwibm90LmJyIiwibnRyLmJyIiwib2RvLmJyIiwib25nLmJyIiwib3JnLmJyIiwib3Nhc2Nv'@;
put 'LmJyIiwicGFsbWFzLmJyIiwicG9hLmJyIiwicHBnLmJyIiwicHJvLmJyIiwicHNjLmJyIiwicHNpLmJyIiwicHZoLmJyIiwicXNsLmJyIiwicmFkaW8uYnIiLCJyZWMuYnIiLCJyZWNpZmUuYnIiLCJyZXAuYnIiLCJyaWJlaXJhby5iciIsInJpby5iciIsInJpb2JyYW5jby5iciIsInJpb3By'@;
put 'ZXRvLmJyIiwic2FsdmFkb3IuYnIiLCJzYW1wYS5iciIsInNhbnRhbWFyaWEuYnIiLCJzYW50b2FuZHJlLmJyIiwic2FvYmVybmFyZG8uYnIiLCJzYW9nb25jYS5iciIsInNlZy5iciIsInNqYy5iciIsInNsZy5iciIsInNsei5iciIsInNvcm9jYWJhLmJyIiwic3J2LmJyIiwidGF4aS5iciIs'@;
put 'InRjLmJyIiwidGVjLmJyIiwidGVvLmJyIiwidGhlLmJyIiwidG1wLmJyIiwidHJkLmJyIiwidHVyLmJyIiwidHYuYnIiLCJ1ZGkuYnIiLCJ2ZXQuYnIiLCJ2aXguYnIiLCJ2bG9nLmJyIiwid2lraS5iciIsInpsZy5iciIsImJzIiwiY29tLmJzIiwibmV0LmJzIiwib3JnLmJzIiwiZWR1LmJz'@;
put 'IiwiZ292LmJzIiwiYnQiLCJjb20uYnQiLCJlZHUuYnQiLCJnb3YuYnQiLCJuZXQuYnQiLCJvcmcuYnQiLCJidiIsImJ3IiwiY28uYnciLCJvcmcuYnciLCJieSIsImdvdi5ieSIsIm1pbC5ieSIsImNvbS5ieSIsIm9mLmJ5IiwiYnoiLCJjb20uYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJlZHUu'@;
put 'YnoiLCJnb3YuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJj'@;
put 'ZiIsImNnIiwiY2giLCJjaSIsIm9yZy5jaSIsIm9yLmNpIiwiY29tLmNpIiwiY28uY2kiLCJlZHUuY2kiLCJlZC5jaSIsImFjLmNpIiwibmV0LmNpIiwiZ28uY2kiLCJhc3NvLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJpbnQuY2kiLCJwcmVzc2UuY2kiLCJtZC5jaSIsImdvdXYuY2kiLCIqLmNr'@;
put 'IiwiIXd3dy5jayIsImNsIiwiY28uY2wiLCJnb2IuY2wiLCJnb3YuY2wiLCJtaWwuY2wiLCJjbSIsImNvLmNtIiwiY29tLmNtIiwiZ292LmNtIiwibmV0LmNtIiwiY24iLCJhYy5jbiIsImNvbS5jbiIsImVkdS5jbiIsImdvdi5jbiIsIm5ldC5jbiIsIm9yZy5jbiIsIm1pbC5jbiIsIlx1NTE2'@;
put 'Y1x1NTNmOC5jbiIsIlx1N2Y1MVx1N2VkYy5jbiIsIlx1N2RiMlx1N2Q2MS5jbiIsImFoLmNuIiwiYmouY24iLCJjcS5jbiIsImZqLmNuIiwiZ2QuY24iLCJncy5jbiIsImd6LmNuIiwiZ3guY24iLCJoYS5jbiIsImhiLmNuIiwiaGUuY24iLCJoaS5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5j'@;
put 'biIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm5tLmNuIiwibnguY24iLCJxaC5jbiIsInNjLmNuIiwic2QuY24iLCJzaC5jbiIsInNuLmNuIiwic3guY24iLCJ0ai5jbiIsInhqLmNuIiwieHouY24iLCJ5bi5jbiIsInpqLmNuIiwiaGsuY24iLCJtby5jbiIsInR3LmNuIiwiY28iLCJhcnRz'@;
put 'LmNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZmlybS5jbyIsImdvdi5jbyIsImluZm8uY28iLCJpbnQuY28iLCJtaWwuY28iLCJuZXQuY28iLCJub20uY28iLCJvcmcuY28iLCJyZWMuY28iLCJ3ZWIuY28iLCJjb20iLCJjb29wIiwiY3IiLCJhYy5jciIsImNvLmNyIiwiZWQuY3IiLCJmaS5jciIs'@;
put 'ImdvLmNyIiwib3IuY3IiLCJzYS5jciIsImN1IiwiY29tLmN1IiwiZWR1LmN1Iiwib3JnLmN1IiwibmV0LmN1IiwiZ292LmN1IiwiaW5mLmN1IiwiY3YiLCJjb20uY3YiLCJlZHUuY3YiLCJpbnQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwiY3ciLCJjb20uY3ciLCJlZHUuY3ciLCJuZXQuY3ci'@;
put 'LCJvcmcuY3ciLCJjeCIsImdvdi5jeCIsImN5IiwiYWMuY3kiLCJiaXouY3kiLCJjb20uY3kiLCJla2xvZ2VzLmN5IiwiZ292LmN5IiwibHRkLmN5IiwibWlsLmN5IiwibmV0LmN5Iiwib3JnLmN5IiwicHJlc3MuY3kiLCJwcm8uY3kiLCJ0bS5jeSIsImN6IiwiZGUiLCJkaiIsImRrIiwiZG0i'@;
put 'LCJjb20uZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIs'@;
put 'ImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm9yZy5keiIsIm5ldC5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJpbmZvLmVjIiwibmV0LmVjIiwiZmluLmVjIiwiazEyLmVjIiwibWVkLmVjIiwicHJvLmVjIiwib3JnLmVjIiwiZWR1LmVjIiwiZ292LmVj'@;
put 'IiwiZ29iLmVjIiwibWlsLmVjIiwiZWR1IiwiZWUiLCJlZHUuZWUiLCJnb3YuZWUiLCJyaWlrLmVlIiwibGliLmVlIiwibWVkLmVlIiwiY29tLmVlIiwicHJpLmVlIiwiYWlwLmVlIiwib3JnLmVlIiwiZmllLmVlIiwiZWciLCJjb20uZWciLCJlZHUuZWciLCJldW4uZWciLCJnb3YuZWciLCJt'@;
put 'aWwuZWciLCJuYW1lLmVnIiwibmV0LmVnIiwib3JnLmVnIiwic2NpLmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwibm9tLmVzIiwib3JnLmVzIiwiZ29iLmVzIiwiZWR1LmVzIiwiZXQiLCJjb20uZXQiLCJnb3YuZXQiLCJvcmcuZXQiLCJlZHUuZXQiLCJiaXouZXQiLCJuYW1lLmV0IiwiaW5m'@;
put 'by5ldCIsIm5ldC5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJjb20uZm0iLCJlZHUuZm0iLCJuZXQuZm0i'@;
put 'LCJvcmcuZm0iLCJmbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYWVyb3BvcnQuZnIiLCJhdm9jYXQuZnIiLCJhdm91ZXMuZnIiLCJjY2kuZnIiLCJjaGFtYmFncmkuZnIiLCJjaGlydXJnaWVucy1kZW50aXN0ZXMu'@;
put 'ZnIiLCJleHBlcnRzLWNvbXB0YWJsZXMuZnIiLCJnZW9tZXRyZS1leHBlcnQuZnIiLCJncmV0YS5mciIsImh1aXNzaWVyLWp1c3RpY2UuZnIiLCJtZWRlY2luLmZyIiwibm90YWlyZXMuZnIiLCJwaGFybWFjaWVuLmZyIiwicG9ydC5mciIsInZldGVyaW5haXJlLmZyIiwiZ2EiLCJnYiIsImVk'@;
put 'dS5nZCIsImdvdi5nZCIsImdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJvcmcuZ2UiLCJtaWwuZ2UiLCJuZXQuZ2UiLCJwdnQuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm9yZy5naCIs'@;
put 'Im1pbC5naCIsImdpIiwiY29tLmdpIiwibHRkLmdpIiwiZ292LmdpIiwibW9kLmdpIiwiZWR1LmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm9y'@;
put 'Zy5nbiIsIm5ldC5nbiIsImdvdiIsImdwIiwiY29tLmdwIiwibmV0LmdwIiwibW9iaS5ncCIsImVkdS5ncCIsIm9yZy5ncCIsImFzc28uZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ292LmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIs'@;
put 'ImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3Yu'@;
put 'Z3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NTAwYlx1NGVi'@;
put 'YS5oayIsIlx1NGUyYVx1ZmZmZFx1ZmZmZC5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2RiMlx1N2VkYy5oayIsIlx1N2Y1MVx1N2VkYy5oayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Q0NFx1'@;
put 'N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJvcmcuaG4iLCJuZXQuaG4iLCJtaWwuaG4iLCJnb2IuaG4iLCJociIsIml6LmhyIiwiZnJvbS5ociIsIm5hbWUuaHIiLCJjb20uaHIiLCJodCIsImNvbS5odCIsInNob3AuaHQiLCJmaXJtLmh0'@;
put 'IiwiaW5mby5odCIsImFkdWx0Lmh0IiwibmV0Lmh0IiwicHJvLmh0Iiwib3JnLmh0IiwibWVkLmh0IiwiYXJ0Lmh0IiwiY29vcC5odCIsInBvbC5odCIsImFzc28uaHQiLCJlZHUuaHQiLCJyZWwuaHQiLCJnb3V2Lmh0IiwicGVyc28uaHQiLCJodSIsImNvLmh1IiwiaW5mby5odSIsIm9yZy5o'@;
put 'dSIsInByaXYuaHUiLCJzcG9ydC5odSIsInRtLmh1IiwiMjAwMC5odSIsImFncmFyLmh1IiwiYm9sdC5odSIsImNhc2luby5odSIsImNpdHkuaHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmdhdGxhbi5o'@;
put 'dSIsImpvZ2Fzei5odSIsImtvbnl2ZWxvLmh1IiwibGFrYXMuaHUiLCJtZWRpYS5odSIsIm5ld3MuaHUiLCJyZWtsYW0uaHUiLCJzZXguaHUiLCJzaG9wLmh1Iiwic3VsaS5odSIsInN6ZXguaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXou'@;
put 'aWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwi'@;
put 'LCJuZXQuaWwiLCJvcmcuaWwiLCJpbSIsImFjLmltIiwiY28uaW0iLCJjb20uaW0iLCJsdGQuY28uaW0iLCJuZXQuaW0iLCJvcmcuaW0iLCJwbGMuY28uaW0iLCJ0dC5pbSIsInR2LmltIiwiaW4iLCJjby5pbiIsImZpcm0uaW4iLCJuZXQuaW4iLCJvcmcuaW4iLCJnZW4uaW4iLCJpbmQuaW4i'@;
put 'LCJuaWMuaW4iLCJhYy5pbiIsImVkdS5pbiIsInJlcy5pbiIsImdvdi5pbiIsIm1pbC5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvbS5pbyIsImlxIiwiZ292LmlxIiwiZWR1LmlxIiwibWlsLmlxIiwiY29tLmlxIiwib3JnLmlxIiwibmV0LmlxIiwiaXIiLCJhYy5pciIsImNv'@;
put 'LmlyIiwiZ292LmlyIiwiaWQuaXIiLCJuZXQuaXIiLCJvcmcuaXIiLCJzY2guaXIiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJpcyIsIm5ldC5pcyIsImNvbS5pcyIsImVkdS5pcyIsImdvdi5pcyIsIm9y'@;
put 'Zy5pcyIsImludC5pcyIsIml0IiwiZ292Lml0IiwiZWR1Lml0IiwiYWJyLml0IiwiYWJydXp6by5pdCIsImFvc3RhLXZhbGxleS5pdCIsImFvc3RhdmFsbGV5Lml0IiwiYmFzLml0IiwiYmFzaWxpY2F0YS5pdCIsImNhbC5pdCIsImNhbGFicmlhLml0IiwiY2FtLml0IiwiY2FtcGFuaWEuaXQi'@;
put 'LCJlbWlsaWEtcm9tYWduYS5pdCIsImVtaWxpYXJvbWFnbmEuaXQiLCJlbXIuaXQiLCJmcml1bGktdi1naXVsaWEuaXQiLCJmcml1bGktdmUtZ2l1bGlhLml0IiwiZnJpdWxpLXZlZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWFnaXVsaWEuaXQi'@;
put 'LCJmcml1bGktdmdpdWxpYS5pdCIsImZyaXVsaXYtZ2l1bGlhLml0IiwiZnJpdWxpdmUtZ2l1bGlhLml0IiwiZnJpdWxpdmVnaXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGl2Z2l1bGlhLml0IiwiZnZnLml0IiwibGF6'@;
put 'Lml0IiwibGF6aW8uaXQiLCJsaWcuaXQiLCJsaWd1cmlhLml0IiwibG9tLml0IiwibG9tYmFyZGlhLml0IiwibG9tYmFyZHkuaXQiLCJsdWNhbmlhLml0IiwibWFyLml0IiwibWFyY2hlLml0IiwibW9sLml0IiwibW9saXNlLml0IiwicGllZG1vbnQuaXQiLCJwaWVtb250ZS5pdCIsInBtbi5p'@;
put 'dCIsInB1Zy5pdCIsInB1Z2xpYS5pdCIsInNhci5pdCIsInNhcmRlZ25hLml0Iiwic2FyZGluaWEuaXQiLCJzaWMuaXQiLCJzaWNpbGlhLml0Iiwic2ljaWx5Lml0IiwidGFhLml0IiwidG9zLml0IiwidG9zY2FuYS5pdCIsInRyZW50aW4tc3VkLXRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2Qt'@;
put 'dGlyb2wuaXQiLCJ0cmVudGluLXN1ZHRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW4tc3VlZC10aXJvbC5pdCIsInRyZW50aW4tc3VlZHRpcm9sLml0IiwidHJlbnRpbm8tYS1hZGlnZS5pdCIsInRyZW50aW5vLWFhZGlnZS5pdCIsInRyZW50aW5vLWFsdG8tYWRp'@;
put 'Z2UuaXQiLCJ0cmVudGluby1hbHRvYWRpZ2UuaXQiLCJ0cmVudGluby1zLXRpcm9sLml0IiwidHJlbnRpbm8tc3Rpcm9sLml0IiwidHJlbnRpbm8tc3VkLXRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VkdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2R0'@;
put 'aXJvbC5pdCIsInRyZW50aW5vLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vYS1hZGlnZS5pdCIsInRyZW50aW5vYWFkaWdlLml0IiwidHJlbnRpbm9hbHRvLWFkaWdlLml0IiwidHJlbnRpbm9hbHRvYWRpZ2UuaXQiLCJ0cmVu'@;
put 'dGlub3MtdGlyb2wuaXQiLCJ0cmVudGlub3N0aXJvbC5pdCIsInRyZW50aW5vc3VkLXRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZHRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vc3VlZC10aXJvbC5pdCIsInRyZW50aW5v'@;
put 'c3VlZHRpcm9sLml0IiwidHJlbnRpbnN1ZC10aXJvbC5pdCIsInRyZW50aW5zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluc3VkdGlyb2wuaXQiLCJ0cmVudGluc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluc3VlZC10aXJvbC5pdCIsInRyZW50aW5zdWVkdGlyb2wuaXQiLCJ0dXNjYW55Lml0Iiwi'@;
put 'dW1iLml0IiwidW1icmlhLml0IiwidmFsLWQtYW9zdGEuaXQiLCJ2YWwtZGFvc3RhLml0IiwidmFsZC1hb3N0YS5pdCIsInZhbGRhb3N0YS5pdCIsInZhbGxlLWFvc3RhLml0IiwidmFsbGUtZC1hb3N0YS5pdCIsInZhbGxlLWRhb3N0YS5pdCIsInZhbGxlYW9zdGEuaXQiLCJ2YWxsZWQtYW9z'@;
put 'dGEuaXQiLCJ2YWxsZWRhb3N0YS5pdCIsInZhbGxlZS1hb3N0ZS5pdCIsInZhbGxceGU5ZS1hb3N0ZS5pdCIsInZhbGxlZS1kLWFvc3RlLml0IiwidmFsbFx4ZTllLWQtYW9zdGUuaXQiLCJ2YWxsZWVhb3N0ZS5pdCIsInZhbGxceGU5ZWFvc3RlLml0IiwidmFsbGVlZGFvc3RlLml0IiwidmFs'@;
put 'bFx4ZTllZGFvc3RlLml0IiwidmFvLml0IiwidmRhLml0IiwidmVuLml0IiwidmVuZXRvLml0IiwiYWcuaXQiLCJhZ3JpZ2VudG8uaXQiLCJhbC5pdCIsImFsZXNzYW5kcmlhLml0IiwiYWx0by1hZGlnZS5pdCIsImFsdG9hZGlnZS5pdCIsImFuLml0IiwiYW5jb25hLml0IiwiYW5kcmlhLWJh'@;
put 'cmxldHRhLXRyYW5pLml0IiwiYW5kcmlhLXRyYW5pLWJhcmxldHRhLml0IiwiYW5kcmlhYmFybGV0dGF0cmFuaS5pdCIsImFuZHJpYXRyYW5pYmFybGV0dGEuaXQiLCJhby5pdCIsImFvc3RhLml0IiwiYW9zdGUuaXQiLCJhcC5pdCIsImFxLml0IiwiYXF1aWxhLml0IiwiYXIuaXQiLCJhcmV6'@;
put 'em8uaXQiLCJhc2NvbGktcGljZW5vLml0IiwiYXNjb2xpcGljZW5vLml0IiwiYXN0aS5pdCIsImF0Lml0IiwiYXYuaXQiLCJhdmVsbGluby5pdCIsImJhLml0IiwiYmFsc2FuLXN1ZHRpcm9sLml0IiwiYmFsc2FuLXNceGZjZHRpcm9sLml0IiwiYmFsc2FuLXN1ZWR0aXJvbC5pdCIsImJhbHNh'@;
put 'bi5pdCIsImJhcmkuaXQiLCJiYXJsZXR0YS10cmFuaS1hbmRyaWEuaXQiLCJiYXJsZXR0YXRyYW5pYW5kcmlhLml0IiwiYmVsbHVuby5pdCIsImJlbmV2ZW50by5pdCIsImJlcmdhbW8uaXQiLCJiZy5pdCIsImJpLml0IiwiYmllbGxhLml0IiwiYmwuaXQiLCJibi5pdCIsImJvLml0IiwiYm9s'@;
put 'b2duYS5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm9semFuby5pdCIsImJvemVuLXN1ZHRpcm9sLml0IiwiYm96ZW4tc1x4ZmNkdGlyb2wuaXQiLCJib3plbi1zdWVkdGlyb2wuaXQiLCJib3plbi5pdCIsImJyLml0IiwiYnJlc2NpYS5pdCIsImJyaW5kaXNpLml0IiwiYnMuaXQiLCJi'@;
put 'dC5pdCIsImJ1bHNhbi1zdWR0aXJvbC5pdCIsImJ1bHNhbi1zXHhmY2R0aXJvbC5pdCIsImJ1bHNhbi1zdWVkdGlyb2wuaXQiLCJidWxzYW4uaXQiLCJiei5pdCIsImNhLml0IiwiY2FnbGlhcmkuaXQiLCJjYWx0YW5pc3NldHRhLml0IiwiY2FtcGlkYW5vLW1lZGlvLml0IiwiY2FtcGlkYW5v'@;
put 'bWVkaW8uaXQiLCJjYW1wb2Jhc3NvLml0IiwiY2FyYm9uaWEtaWdsZXNpYXMuaXQiLCJjYXJib25pYWlnbGVzaWFzLml0IiwiY2FycmFyYS1tYXNzYS5pdCIsImNhcnJhcmFtYXNzYS5pdCIsImNhc2VydGEuaXQiLCJjYXRhbmlhLml0IiwiY2F0YW56YXJvLml0IiwiY2IuaXQiLCJjZS5pdCIs'@;
put 'ImNlc2VuYS1mb3JsaS5pdCIsImNlc2VuYS1mb3JsXHhlYy5pdCIsImNlc2VuYWZvcmxpLml0IiwiY2VzZW5hZm9ybFx4ZWMuaXQiLCJjaC5pdCIsImNoaWV0aS5pdCIsImNpLml0IiwiY2wuaXQiLCJjbi5pdCIsImNvLml0IiwiY29tby5pdCIsImNvc2VuemEuaXQiLCJjci5pdCIsImNyZW1v'@;
put 'bmEuaXQiLCJjcm90b25lLml0IiwiY3MuaXQiLCJjdC5pdCIsImN1bmVvLml0IiwiY3ouaXQiLCJkZWxsLW9nbGlhc3RyYS5pdCIsImRlbGxvZ2xpYXN0cmEuaXQiLCJlbi5pdCIsImVubmEuaXQiLCJmYy5pdCIsImZlLml0IiwiZmVybW8uaXQiLCJmZXJyYXJhLml0IiwiZmcuaXQiLCJmaS5p'@;
put 'dCIsImZpcmVuemUuaXQiLCJmbG9yZW5jZS5pdCIsImZtLml0IiwiZm9nZ2lhLml0IiwiZm9ybGktY2VzZW5hLml0IiwiZm9ybFx4ZWMtY2VzZW5hLml0IiwiZm9ybGljZXNlbmEuaXQiLCJmb3JsXHhlY2Nlc2VuYS5pdCIsImZyLml0IiwiZnJvc2lub25lLml0IiwiZ2UuaXQiLCJnZW5vYS5p'@;
put 'dCIsImdlbm92YS5pdCIsImdvLml0IiwiZ29yaXppYS5pdCIsImdyLml0IiwiZ3Jvc3NldG8uaXQiLCJpZ2xlc2lhcy1jYXJib25pYS5pdCIsImlnbGVzaWFzY2FyYm9uaWEuaXQiLCJpbS5pdCIsImltcGVyaWEuaXQiLCJpcy5pdCIsImlzZXJuaWEuaXQiLCJrci5pdCIsImxhLXNwZXppYS5p'@;
put 'dCIsImxhcXVpbGEuaXQiLCJsYXNwZXppYS5pdCIsImxhdGluYS5pdCIsImxjLml0IiwibGUuaXQiLCJsZWNjZS5pdCIsImxlY2NvLml0IiwibGkuaXQiLCJsaXZvcm5vLml0IiwibG8uaXQiLCJsb2RpLml0IiwibHQuaXQiLCJsdS5pdCIsImx1Y2NhLml0IiwibWFjZXJhdGEuaXQiLCJtYW50'@;
put 'b3ZhLml0IiwibWFzc2EtY2FycmFyYS5pdCIsIm1hc3NhY2FycmFyYS5pdCIsIm1hdGVyYS5pdCIsIm1iLml0IiwibWMuaXQiLCJtZS5pdCIsIm1lZGlvLWNhbXBpZGFuby5pdCIsIm1lZGlvY2FtcGlkYW5vLml0IiwibWVzc2luYS5pdCIsIm1pLml0IiwibWlsYW4uaXQiLCJtaWxhbm8uaXQi'@;
put 'LCJtbi5pdCIsIm1vLml0IiwibW9kZW5hLml0IiwibW9uemEtYnJpYW56YS5pdCIsIm1vbnphLWUtZGVsbGEtYnJpYW56YS5pdCIsIm1vbnphLml0IiwibW9uemFicmlhbnphLml0IiwibW9uemFlYnJpYW56YS5pdCIsIm1vbnphZWRlbGxhYnJpYW56YS5pdCIsIm1zLml0IiwibXQuaXQiLCJu'@;
put 'YS5pdCIsIm5hcGxlcy5pdCIsIm5hcG9saS5pdCIsIm5vLml0Iiwibm92YXJhLml0IiwibnUuaXQiLCJudW9yby5pdCIsIm9nLml0Iiwib2dsaWFzdHJhLml0Iiwib2xiaWEtdGVtcGlvLml0Iiwib2xiaWF0ZW1waW8uaXQiLCJvci5pdCIsIm9yaXN0YW5vLml0Iiwib3QuaXQiLCJwYS5pdCIs'@;
put 'InBhZG92YS5pdCIsInBhZHVhLml0IiwicGFsZXJtby5pdCIsInBhcm1hLml0IiwicGF2aWEuaXQiLCJwYy5pdCIsInBkLml0IiwicGUuaXQiLCJwZXJ1Z2lhLml0IiwicGVzYXJvLXVyYmluby5pdCIsInBlc2Fyb3VyYmluby5pdCIsInBlc2NhcmEuaXQiLCJwZy5pdCIsInBpLml0IiwicGlh'@;
put 'Y2VuemEuaXQiLCJwaXNhLml0IiwicGlzdG9pYS5pdCIsInBuLml0IiwicG8uaXQiLCJwb3JkZW5vbmUuaXQiLCJwb3RlbnphLml0IiwicHIuaXQiLCJwcmF0by5pdCIsInB0Lml0IiwicHUuaXQiLCJwdi5pdCIsInB6Lml0IiwicmEuaXQiLCJyYWd1c2EuaXQiLCJyYXZlbm5hLml0IiwicmMu'@;
put 'aXQiLCJyZS5pdCIsInJlZ2dpby1jYWxhYnJpYS5pdCIsInJlZ2dpby1lbWlsaWEuaXQiLCJyZWdnaW9jYWxhYnJpYS5pdCIsInJlZ2dpb2VtaWxpYS5pdCIsInJnLml0IiwicmkuaXQiLCJyaWV0aS5pdCIsInJpbWluaS5pdCIsInJtLml0Iiwicm4uaXQiLCJyby5pdCIsInJvbWEuaXQiLCJy'@;
put 'b21lLml0Iiwicm92aWdvLml0Iiwic2EuaXQiLCJzYWxlcm5vLml0Iiwic2Fzc2FyaS5pdCIsInNhdm9uYS5pdCIsInNpLml0Iiwic2llbmEuaXQiLCJzaXJhY3VzYS5pdCIsInNvLml0Iiwic29uZHJpby5pdCIsInNwLml0Iiwic3IuaXQiLCJzcy5pdCIsInN1ZWR0aXJvbC5pdCIsInNceGZj'@;
put 'ZHRpcm9sLml0Iiwic3YuaXQiLCJ0YS5pdCIsInRhcmFudG8uaXQiLCJ0ZS5pdCIsInRlbXBpby1vbGJpYS5pdCIsInRlbXBpb29sYmlhLml0IiwidGVyYW1vLml0IiwidGVybmkuaXQiLCJ0bi5pdCIsInRvLml0IiwidG9yaW5vLml0IiwidHAuaXQiLCJ0ci5pdCIsInRyYW5pLWFuZHJpYS1i'@;
put 'YXJsZXR0YS5pdCIsInRyYW5pLWJhcmxldHRhLWFuZHJpYS5pdCIsInRyYW5pYW5kcmlhYmFybGV0dGEuaXQiLCJ0cmFuaWJhcmxldHRhYW5kcmlhLml0IiwidHJhcGFuaS5pdCIsInRyZW50by5pdCIsInRyZXZpc28uaXQiLCJ0cmllc3RlLml0IiwidHMuaXQiLCJ0dXJpbi5pdCIsInR2Lml0'@;
put 'IiwidWQuaXQiLCJ1ZGluZS5pdCIsInVyYmluby1wZXNhcm8uaXQiLCJ1cmJpbm9wZXNhcm8uaXQiLCJ2YS5pdCIsInZhcmVzZS5pdCIsInZiLml0IiwidmMuaXQiLCJ2ZS5pdCIsInZlbmV6aWEuaXQiLCJ2ZW5pY2UuaXQiLCJ2ZXJiYW5pYS5pdCIsInZlcmNlbGxpLml0IiwidmVyb25hLml0'@;
put 'IiwidmkuaXQiLCJ2aWJvLXZhbGVudGlhLml0Iiwidmlib3ZhbGVudGlhLml0IiwidmljZW56YS5pdCIsInZpdGVyYm8uaXQiLCJ2ci5pdCIsInZzLml0IiwidnQuaXQiLCJ2di5pdCIsImplIiwiY28uamUiLCJuZXQuamUiLCJvcmcuamUiLCIqLmptIiwiam8iLCJjb20uam8iLCJvcmcuam8i'@;
put 'LCJuZXQuam8iLCJlZHUuam8iLCJzY2guam8iLCJnb3Yuam8iLCJtaWwuam8iLCJuYW1lLmpvIiwiam9icyIsImpwIiwiYWMuanAiLCJhZC5qcCIsImNvLmpwIiwiZWQuanAiLCJnby5qcCIsImdyLmpwIiwibGcuanAiLCJuZS5qcCIsIm9yLmpwIiwiYWljaGkuanAiLCJha2l0YS5qcCIsImFv'@;
put 'bW9yaS5qcCIsImNoaWJhLmpwIiwiZWhpbWUuanAiLCJmdWt1aS5qcCIsImZ1a3Vva2EuanAiLCJmdWt1c2hpbWEuanAiLCJnaWZ1LmpwIiwiZ3VubWEuanAiLCJoaXJvc2hpbWEuanAiLCJob2trYWlkby5qcCIsImh5b2dvLmpwIiwiaWJhcmFraS5qcCIsImlzaGlrYXdhLmpwIiwiaXdhdGUu'@;
put 'anAiLCJrYWdhd2EuanAiLCJrYWdvc2hpbWEuanAiLCJrYW5hZ2F3YS5qcCIsImtvY2hpLmpwIiwia3VtYW1vdG8uanAiLCJreW90by5qcCIsIm1pZS5qcCIsIm1peWFnaS5qcCIsIm1peWF6YWtpLmpwIiwibmFnYW5vLmpwIiwibmFnYXNha2kuanAiLCJuYXJhLmpwIiwibmlpZ2F0YS5qcCIs'@;
put 'Im9pdGEuanAiLCJva2F5YW1hLmpwIiwib2tpbmF3YS5qcCIsIm9zYWthLmpwIiwic2FnYS5qcCIsInNhaXRhbWEuanAiLCJzaGlnYS5qcCIsInNoaW1hbmUuanAiLCJzaGl6dW9rYS5qcCIsInRvY2hpZ2kuanAiLCJ0b2t1c2hpbWEuanAiLCJ0b2t5by5qcCIsInRvdHRvcmkuanAiLCJ0b3lh'@;
put 'bWEuanAiLCJ3YWtheWFtYS5qcCIsInlhbWFnYXRhLmpwIiwieWFtYWd1Y2hpLmpwIiwieWFtYW5hc2hpLmpwIiwiXHU2ODAzXHU2NzI4LmpwIiwiXHU2MTFiXHU3N2U1LmpwIiwiXHU2MTFiXHU1YTliLmpwIiwiXHU1MTc1XHU1ZWFiLmpwIiwiXHU3MThhXHU2NzJjLmpwIiwiXHU4MzI4XHU1'@;
put 'N2NlLmpwIiwiXHU1MzE3XHU2ZDc3XHU5MDUzLmpwIiwiXHU1MzQzXHU4NDQ5LmpwIiwiXHU1NDhjXHU2YjRjXHU1YzcxLmpwIiwiXHU5NTc3XHU1ZDBlLmpwIiwiXHU5NTc3XHU5MWNlLmpwIiwiXHU2NWIwXHU2ZjVmLmpwIiwiXHU5NzUyXHU2OGVlLmpwIiwiXHU5NzU5XHU1Y2ExLmpwIiwi'@;
put 'XHU2NzcxXHU0ZWFjLmpwIiwiXHU3N2YzXHU1ZGRkLmpwIiwiXHU1N2ZjXHU3Mzg5LmpwIiwiXHU0ZTA5XHU5MWNkLmpwIiwiXHU0ZWFjXHU5MGZkLmpwIiwiXHU0ZjUwXHU4Y2MwLmpwIiwiXHU1OTI3XHU1MjA2LmpwIiwiXHU1OTI3XHU5NjJhLmpwIiwiXHU1OTQ4XHU4MjZmLmpwIiwiXHU1'@;
put 'YmFlXHU1N2NlLmpwIiwiXHU1YmFlXHU1ZDBlLmpwIiwiXHU1YmNjXHU1YzcxLmpwIiwiXHU1YzcxXHU1M2UzLmpwIiwiXHU1YzcxXHU1ZjYyLmpwIiwiXHU1YzcxXHU2OGE4LmpwIiwiXHU1Y2E5XHU2MjRiLmpwIiwiXHU1YzkwXHU5NjFjLmpwIiwiXHU1Y2ExXHU1YzcxLmpwIiwiXHU1Y2Y2'@;
put 'XHU2ODM5LmpwIiwiXHU1ZTgzXHU1Y2Y2LmpwIiwiXHU1ZmIzXHU1Y2Y2LmpwIiwiXHU2Yzk2XHU3ZTA0LmpwIiwiXHU2ZWNiXHU4Y2MwLmpwIiwiXHU3OTVlXHU1OTQ4XHU1ZGRkLmpwIiwiXHU3OThmXHU0ZTk1LmpwIiwiXHU3OThmXHU1Y2ExLmpwIiwiXHU3OThmXHU1Y2Y2LmpwIiwiXHU3'@;
put 'OWNiXHU3NTMwLmpwIiwiXHU3ZmE0XHU5OWFjLmpwIiwiXHU5OTk5XHU1ZGRkLmpwIiwiXHU5YWQ4XHU3N2U1LmpwIiwiXHU5Y2U1XHU1M2Q2LmpwIiwiXHU5ZTdmXHU1MTUwXHU1Y2Y2LmpwIiwiKi5rYXdhc2FraS5qcCIsIioua2l0YWt5dXNodS5qcCIsIioua29iZS5qcCIsIioubmFnb3lh'@;
put 'LmpwIiwiKi5zYXBwb3JvLmpwIiwiKi5zZW5kYWkuanAiLCIqLnlva29oYW1hLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIhY2l0eS5raXRha3l1c2h1LmpwIiwiIWNpdHkua29iZS5qcCIsIiFjaXR5Lm5hZ295YS5qcCIsIiFjaXR5LnNhcHBvcm8uanAiLCIhY2l0eS5zZW5kYWkuanAiLCIh'@;
put 'Y2l0eS55b2tvaGFtYS5qcCIsImFpc2FpLmFpY2hpLmpwIiwiYW1hLmFpY2hpLmpwIiwiYW5qby5haWNoaS5qcCIsImFzdWtlLmFpY2hpLmpwIiwiY2hpcnl1LmFpY2hpLmpwIiwiY2hpdGEuYWljaGkuanAiLCJmdXNvLmFpY2hpLmpwIiwiZ2FtYWdvcmkuYWljaGkuanAiLCJoYW5kYS5haWNo'@;
put 'aS5qcCIsImhhenUuYWljaGkuanAiLCJoZWtpbmFuLmFpY2hpLmpwIiwiaGlnYXNoaXVyYS5haWNoaS5qcCIsImljaGlub21peWEuYWljaGkuanAiLCJpbmF6YXdhLmFpY2hpLmpwIiwiaW51eWFtYS5haWNoaS5qcCIsImlzc2hpa2kuYWljaGkuanAiLCJpd2FrdXJhLmFpY2hpLmpwIiwia2Fu'@;
put 'aWUuYWljaGkuanAiLCJrYXJpeWEuYWljaGkuanAiLCJrYXN1Z2FpLmFpY2hpLmpwIiwia2lyYS5haWNoaS5qcCIsImtpeW9zdS5haWNoaS5qcCIsImtvbWFraS5haWNoaS5qcCIsImtvbmFuLmFpY2hpLmpwIiwia290YS5haWNoaS5qcCIsIm1paGFtYS5haWNoaS5qcCIsIm1peW9zaGkuYWlj'@;
put 'aGkuanAiLCJuaXNoaW8uYWljaGkuanAiLCJuaXNzaGluLmFpY2hpLmpwIiwib2J1LmFpY2hpLmpwIiwib2d1Y2hpLmFpY2hpLmpwIiwib2hhcnUuYWljaGkuanAiLCJva2F6YWtpLmFpY2hpLmpwIiwib3dhcmlhc2FoaS5haWNoaS5qcCIsInNldG8uYWljaGkuanAiLCJzaGlrYXRzdS5haWNo'@;
put 'aS5qcCIsInNoaW5zaGlyby5haWNoaS5qcCIsInNoaXRhcmEuYWljaGkuanAiLCJ0YWhhcmEuYWljaGkuanAiLCJ0YWthaGFtYS5haWNoaS5qcCIsInRvYmlzaGltYS5haWNoaS5qcCIsInRvZWkuYWljaGkuanAiLCJ0b2dvLmFpY2hpLmpwIiwidG9rYWkuYWljaGkuanAiLCJ0b2tvbmFtZS5h'@;
put 'aWNoaS5qcCIsInRveW9ha2UuYWljaGkuanAiLCJ0b3lvaGFzaGkuYWljaGkuanAiLCJ0b3lva2F3YS5haWNoaS5qcCIsInRveW9uZS5haWNoaS5qcCIsInRveW90YS5haWNoaS5qcCIsInRzdXNoaW1hLmFpY2hpLmpwIiwieWF0b21pLmFpY2hpLmpwIiwiYWtpdGEuYWtpdGEuanAiLCJkYWlz'@;
put 'ZW4uYWtpdGEuanAiLCJmdWppc2F0by5ha2l0YS5qcCIsImdvam9tZS5ha2l0YS5qcCIsImhhY2hpcm9nYXRhLmFraXRhLmpwIiwiaGFwcG91LmFraXRhLmpwIiwiaGlnYXNoaW5hcnVzZS5ha2l0YS5qcCIsImhvbmpvLmFraXRhLmpwIiwiaG9uanlvLmFraXRhLmpwIiwiaWthd2EuYWtpdGEu'@;
put 'anAiLCJrYW1pa29hbmkuYWtpdGEuanAiLCJrYW1pb2thLmFraXRhLmpwIiwia2F0YWdhbWkuYWtpdGEuanAiLCJrYXp1bm8uYWtpdGEuanAiLCJraXRhYWtpdGEuYWtpdGEuanAiLCJrb3Nha2EuYWtpdGEuanAiLCJreW93YS5ha2l0YS5qcCIsIm1pc2F0by5ha2l0YS5qcCIsIm1pdGFuZS5h'@;
put 'a2l0YS5qcCIsIm1vcml5b3NoaS5ha2l0YS5qcCIsIm5pa2Foby5ha2l0YS5qcCIsIm5vc2hpcm8uYWtpdGEuanAiLCJvZGF0ZS5ha2l0YS5qcCIsIm9nYS5ha2l0YS5qcCIsIm9nYXRhLmFraXRhLmpwIiwic2VtYm9rdS5ha2l0YS5qcCIsInlva290ZS5ha2l0YS5qcCIsInl1cmlob25qby5h'@;
put 'a2l0YS5qcCIsImFvbW9yaS5hb21vcmkuanAiLCJnb25vaGUuYW9tb3JpLmpwIiwiaGFjaGlub2hlLmFvbW9yaS5qcCIsImhhc2hpa2FtaS5hb21vcmkuanAiLCJoaXJhbmFpLmFvbW9yaS5qcCIsImhpcm9zYWtpLmFvbW9yaS5qcCIsIml0YXlhbmFnaS5hb21vcmkuanAiLCJrdXJvaXNoaS5h'@;
put 'b21vcmkuanAiLCJtaXNhd2EuYW9tb3JpLmpwIiwibXV0c3UuYW9tb3JpLmpwIiwibmFrYWRvbWFyaS5hb21vcmkuanAiLCJub2hlamkuYW9tb3JpLmpwIiwib2lyYXNlLmFvbW9yaS5qcCIsIm93YW5pLmFvbW9yaS5qcCIsInJva3Vub2hlLmFvbW9yaS5qcCIsInNhbm5vaGUuYW9tb3JpLmpw'@;
put 'Iiwic2hpY2hpbm9oZS5hb21vcmkuanAiLCJzaGluZ28uYW9tb3JpLmpwIiwidGFra28uYW9tb3JpLmpwIiwidG93YWRhLmFvbW9yaS5qcCIsInRzdWdhcnUuYW9tb3JpLmpwIiwidHN1cnV0YS5hb21vcmkuanAiLCJhYmlrby5jaGliYS5qcCIsImFzYWhpLmNoaWJhLmpwIiwiY2hvbmFuLmNo'@;
put 'aWJhLmpwIiwiY2hvc2VpLmNoaWJhLmpwIiwiY2hvc2hpLmNoaWJhLmpwIiwiY2h1by5jaGliYS5qcCIsImZ1bmFiYXNoaS5jaGliYS5qcCIsImZ1dHRzdS5jaGliYS5qcCIsImhhbmFtaWdhd2EuY2hpYmEuanAiLCJpY2hpaGFyYS5jaGliYS5qcCIsImljaGlrYXdhLmNoaWJhLmpwIiwiaWNo'@;
put 'aW5vbWl5YS5jaGliYS5qcCIsImluemFpLmNoaWJhLmpwIiwiaXN1bWkuY2hpYmEuanAiLCJrYW1hZ2F5YS5jaGliYS5qcCIsImthbW9nYXdhLmNoaWJhLmpwIiwia2FzaGl3YS5jaGliYS5qcCIsImthdG9yaS5jaGliYS5qcCIsImthdHN1dXJhLmNoaWJhLmpwIiwia2ltaXRzdS5jaGliYS5q'@;
put 'cCIsImtpc2FyYXp1LmNoaWJhLmpwIiwia296YWtpLmNoaWJhLmpwIiwia3VqdWt1cmkuY2hpYmEuanAiLCJreW9uYW4uY2hpYmEuanAiLCJtYXRzdWRvLmNoaWJhLmpwIiwibWlkb3JpLmNoaWJhLmpwIiwibWloYW1hLmNoaWJhLmpwIiwibWluYW1pYm9zby5jaGliYS5qcCIsIm1vYmFyYS5j'@;
put 'aGliYS5qcCIsIm11dHN1emF3YS5jaGliYS5qcCIsIm5hZ2FyYS5jaGliYS5qcCIsIm5hZ2FyZXlhbWEuY2hpYmEuanAiLCJuYXJhc2hpbm8uY2hpYmEuanAiLCJuYXJpdGEuY2hpYmEuanAiLCJub2RhLmNoaWJhLmpwIiwib2FtaXNoaXJhc2F0by5jaGliYS5qcCIsIm9taWdhd2EuY2hpYmEu'@;
put 'anAiLCJvbmp1a3UuY2hpYmEuanAiLCJvdGFraS5jaGliYS5qcCIsInNha2FlLmNoaWJhLmpwIiwic2FrdXJhLmNoaWJhLmpwIiwic2hpbW9mdXNhLmNoaWJhLmpwIiwic2hpcmFrby5jaGliYS5qcCIsInNoaXJvaS5jaGliYS5qcCIsInNoaXN1aS5jaGliYS5qcCIsInNvZGVnYXVyYS5jaGli'@;
put 'YS5qcCIsInNvc2EuY2hpYmEuanAiLCJ0YWtvLmNoaWJhLmpwIiwidGF0ZXlhbWEuY2hpYmEuanAiLCJ0b2dhbmUuY2hpYmEuanAiLCJ0b2hub3Noby5jaGliYS5qcCIsInRvbWlzYXRvLmNoaWJhLmpwIiwidXJheWFzdS5jaGliYS5qcCIsInlhY2hpbWF0YS5jaGliYS5qcCIsInlhY2hpeW8u'@;
put 'Y2hpYmEuanAiLCJ5b2thaWNoaWJhLmNoaWJhLmpwIiwieW9rb3NoaWJhaGlrYXJpLmNoaWJhLmpwIiwieW90c3VrYWlkby5jaGliYS5qcCIsImFpbmFuLmVoaW1lLmpwIiwiaG9uYWkuZWhpbWUuanAiLCJpa2F0YS5laGltZS5qcCIsImltYWJhcmkuZWhpbWUuanAiLCJpeW8uZWhpbWUuanAi'@;
put 'LCJrYW1pamltYS5laGltZS5qcCIsImtpaG9rdS5laGltZS5qcCIsImt1bWFrb2dlbi5laGltZS5qcCIsIm1hc2FraS5laGltZS5qcCIsIm1hdHN1bm8uZWhpbWUuanAiLCJtYXRzdXlhbWEuZWhpbWUuanAiLCJuYW1pa2F0YS5laGltZS5qcCIsIm5paWhhbWEuZWhpbWUuanAiLCJvenUuZWhp'@;
put 'bWUuanAiLCJzYWlqby5laGltZS5qcCIsInNlaXlvLmVoaW1lLmpwIiwic2hpa29rdWNodW8uZWhpbWUuanAiLCJ0b2JlLmVoaW1lLmpwIiwidG9vbi5laGltZS5qcCIsInVjaGlrby5laGltZS5qcCIsInV3YWppbWEuZWhpbWUuanAiLCJ5YXdhdGFoYW1hLmVoaW1lLmpwIiwiZWNoaXplbi5m'@;
put 'dWt1aS5qcCIsImVpaGVpamkuZnVrdWkuanAiLCJmdWt1aS5mdWt1aS5qcCIsImlrZWRhLmZ1a3VpLmpwIiwia2F0c3V5YW1hLmZ1a3VpLmpwIiwibWloYW1hLmZ1a3VpLmpwIiwibWluYW1pZWNoaXplbi5mdWt1aS5qcCIsIm9iYW1hLmZ1a3VpLmpwIiwib2hpLmZ1a3VpLmpwIiwib25vLmZ1'@;
put 'a3VpLmpwIiwic2FiYWUuZnVrdWkuanAiLCJzYWthaS5mdWt1aS5qcCIsInRha2FoYW1hLmZ1a3VpLmpwIiwidHN1cnVnYS5mdWt1aS5qcCIsIndha2FzYS5mdWt1aS5qcCIsImFzaGl5YS5mdWt1b2thLmpwIiwiYnV6ZW4uZnVrdW9rYS5qcCIsImNoaWt1Z28uZnVrdW9rYS5qcCIsImNoaWt1'@;
put 'aG8uZnVrdW9rYS5qcCIsImNoaWt1am8uZnVrdW9rYS5qcCIsImNoaWt1c2hpbm8uZnVrdW9rYS5qcCIsImNoaWt1emVuLmZ1a3Vva2EuanAiLCJjaHVvLmZ1a3Vva2EuanAiLCJkYXphaWZ1LmZ1a3Vva2EuanAiLCJmdWt1Y2hpLmZ1a3Vva2EuanAiLCJoYWthdGEuZnVrdW9rYS5qcCIsImhp'@;
put 'Z2FzaGkuZnVrdW9rYS5qcCIsImhpcm9rYXdhLmZ1a3Vva2EuanAiLCJoaXNheWFtYS5mdWt1b2thLmpwIiwiaWl6dWthLmZ1a3Vva2EuanAiLCJpbmF0c3VraS5mdWt1b2thLmpwIiwia2Foby5mdWt1b2thLmpwIiwia2FzdWdhLmZ1a3Vva2EuanAiLCJrYXN1eWEuZnVrdW9rYS5qcCIsImth'@;
put 'd2FyYS5mdWt1b2thLmpwIiwia2Vpc2VuLmZ1a3Vva2EuanAiLCJrb2dhLmZ1a3Vva2EuanAiLCJrdXJhdGUuZnVrdW9rYS5qcCIsImt1cm9naS5mdWt1b2thLmpwIiwia3VydW1lLmZ1a3Vva2EuanAiLCJtaW5hbWkuZnVrdW9rYS5qcCIsIm1peWFrby5mdWt1b2thLmpwIiwibWl5YW1hLmZ1'@;
put 'a3Vva2EuanAiLCJtaXlhd2FrYS5mdWt1b2thLmpwIiwibWl6dW1ha2kuZnVrdW9rYS5qcCIsIm11bmFrYXRhLmZ1a3Vva2EuanAiLCJuYWthZ2F3YS5mdWt1b2thLmpwIiwibmFrYW1hLmZ1a3Vva2EuanAiLCJuaXNoaS5mdWt1b2thLmpwIiwibm9nYXRhLmZ1a3Vva2EuanAiLCJvZ29yaS5m'@;
put 'dWt1b2thLmpwIiwib2thZ2FraS5mdWt1b2thLmpwIiwib2thd2EuZnVrdW9rYS5qcCIsIm9raS5mdWt1b2thLmpwIiwib211dGEuZnVrdW9rYS5qcCIsIm9uZ2EuZnVrdW9rYS5qcCIsIm9ub2pvLmZ1a3Vva2EuanAiLCJvdG8uZnVrdW9rYS5qcCIsInNhaWdhd2EuZnVrdW9rYS5qcCIsInNh'@;
put 'c2FndXJpLmZ1a3Vva2EuanAiLCJzaGluZ3UuZnVrdW9rYS5qcCIsInNoaW55b3NoaXRvbWkuZnVrdW9rYS5qcCIsInNob25haS5mdWt1b2thLmpwIiwic29lZGEuZnVrdW9rYS5qcCIsInN1ZS5mdWt1b2thLmpwIiwidGFjaGlhcmFpLmZ1a3Vva2EuanAiLCJ0YWdhd2EuZnVrdW9rYS5qcCIs'@;
put 'InRha2F0YS5mdWt1b2thLmpwIiwidG9oby5mdWt1b2thLmpwIiwidG95b3RzdS5mdWt1b2thLmpwIiwidHN1aWtpLmZ1a3Vva2EuanAiLCJ1a2loYS5mdWt1b2thLmpwIiwidW1pLmZ1a3Vva2EuanAiLCJ1c3VpLmZ1a3Vva2EuanAiLCJ5YW1hZGEuZnVrdW9rYS5qcCIsInlhbWUuZnVrdW9r'@;
put 'YS5qcCIsInlhbmFnYXdhLmZ1a3Vva2EuanAiLCJ5dWt1aGFzaGkuZnVrdW9rYS5qcCIsImFpenViYW5nZS5mdWt1c2hpbWEuanAiLCJhaXp1bWlzYXRvLmZ1a3VzaGltYS5qcCIsImFpenV3YWthbWF0c3UuZnVrdXNoaW1hLmpwIiwiYXNha2F3YS5mdWt1c2hpbWEuanAiLCJiYW5kYWkuZnVr'@;
put 'dXNoaW1hLmpwIiwiZGF0ZS5mdWt1c2hpbWEuanAiLCJmdWt1c2hpbWEuZnVrdXNoaW1hLmpwIiwiZnVydWRvbm8uZnVrdXNoaW1hLmpwIiwiZnV0YWJhLmZ1a3VzaGltYS5qcCIsImhhbmF3YS5mdWt1c2hpbWEuanAiLCJoaWdhc2hpLmZ1a3VzaGltYS5qcCIsImhpcmF0YS5mdWt1c2hpbWEu'@;
put 'anAiLCJoaXJvbm8uZnVrdXNoaW1hLmpwIiwiaWl0YXRlLmZ1a3VzaGltYS5qcCIsImluYXdhc2hpcm8uZnVrdXNoaW1hLmpwIiwiaXNoaWthd2EuZnVrdXNoaW1hLmpwIiwiaXdha2kuZnVrdXNoaW1hLmpwIiwiaXp1bWl6YWtpLmZ1a3VzaGltYS5qcCIsImthZ2FtaWlzaGkuZnVrdXNoaW1h'@;
put 'LmpwIiwia2FuZXlhbWEuZnVrdXNoaW1hLmpwIiwia2F3YW1hdGEuZnVrdXNoaW1hLmpwIiwia2l0YWthdGEuZnVrdXNoaW1hLmpwIiwia2l0YXNoaW9iYXJhLmZ1a3VzaGltYS5qcCIsImtvb3JpLmZ1a3VzaGltYS5qcCIsImtvcml5YW1hLmZ1a3VzaGltYS5qcCIsImt1bmltaS5mdWt1c2hp'@;
put 'bWEuanAiLCJtaWhhcnUuZnVrdXNoaW1hLmpwIiwibWlzaGltYS5mdWt1c2hpbWEuanAiLCJuYW1pZS5mdWt1c2hpbWEuanAiLCJuYW5nby5mdWt1c2hpbWEuanAiLCJuaXNoaWFpenUuZnVrdXNoaW1hLmpwIiwibmlzaGlnby5mdWt1c2hpbWEuanAiLCJva3VtYS5mdWt1c2hpbWEuanAiLCJv'@;
put 'bW90ZWdvLmZ1a3VzaGltYS5qcCIsIm9uby5mdWt1c2hpbWEuanAiLCJvdGFtYS5mdWt1c2hpbWEuanAiLCJzYW1lZ2F3YS5mdWt1c2hpbWEuanAiLCJzaGltb2dvLmZ1a3VzaGltYS5qcCIsInNoaXJha2F3YS5mdWt1c2hpbWEuanAiLCJzaG93YS5mdWt1c2hpbWEuanAiLCJzb21hLmZ1a3Vz'@;
put 'aGltYS5qcCIsInN1a2FnYXdhLmZ1a3VzaGltYS5qcCIsInRhaXNoaW4uZnVrdXNoaW1hLmpwIiwidGFtYWthd2EuZnVrdXNoaW1hLmpwIiwidGFuYWd1cmEuZnVrdXNoaW1hLmpwIiwidGVuZWkuZnVrdXNoaW1hLmpwIiwieWFidWtpLmZ1a3VzaGltYS5qcCIsInlhbWF0by5mdWt1c2hpbWEu'@;
put 'anAiLCJ5YW1hdHN1cmkuZnVrdXNoaW1hLmpwIiwieWFuYWl6dS5mdWt1c2hpbWEuanAiLCJ5dWdhd2EuZnVrdXNoaW1hLmpwIiwiYW5wYWNoaS5naWZ1LmpwIiwiZW5hLmdpZnUuanAiLCJnaWZ1LmdpZnUuanAiLCJnaW5hbi5naWZ1LmpwIiwiZ29kby5naWZ1LmpwIiwiZ3Vqby5naWZ1Lmpw'@;
put 'IiwiaGFzaGltYS5naWZ1LmpwIiwiaGljaGlzby5naWZ1LmpwIiwiaGlkYS5naWZ1LmpwIiwiaGlnYXNoaXNoaXJha2F3YS5naWZ1LmpwIiwiaWJpZ2F3YS5naWZ1LmpwIiwiaWtlZGEuZ2lmdS5qcCIsImtha2FtaWdhaGFyYS5naWZ1LmpwIiwia2FuaS5naWZ1LmpwIiwia2FzYWhhcmEuZ2lm'@;
put 'dS5qcCIsImthc2FtYXRzdS5naWZ1LmpwIiwia2F3YXVlLmdpZnUuanAiLCJraXRhZ2F0YS5naWZ1LmpwIiwibWluby5naWZ1LmpwIiwibWlub2thbW8uZ2lmdS5qcCIsIm1pdGFrZS5naWZ1LmpwIiwibWl6dW5hbWkuZ2lmdS5qcCIsIm1vdG9zdS5naWZ1LmpwIiwibmFrYXRzdWdhd2EuZ2lm'@;
put 'dS5qcCIsIm9nYWtpLmdpZnUuanAiLCJzYWthaG9naS5naWZ1LmpwIiwic2VraS5naWZ1LmpwIiwic2VraWdhaGFyYS5naWZ1LmpwIiwic2hpcmFrYXdhLmdpZnUuanAiLCJ0YWppbWkuZ2lmdS5qcCIsInRha2F5YW1hLmdpZnUuanAiLCJ0YXJ1aS5naWZ1LmpwIiwidG9raS5naWZ1LmpwIiwi'@;
put 'dG9taWthLmdpZnUuanAiLCJ3YW5vdWNoaS5naWZ1LmpwIiwieWFtYWdhdGEuZ2lmdS5qcCIsInlhb3RzdS5naWZ1LmpwIiwieW9yby5naWZ1LmpwIiwiYW5uYWthLmd1bm1hLmpwIiwiY2hpeW9kYS5ndW5tYS5qcCIsImZ1amlva2EuZ3VubWEuanAiLCJoaWdhc2hpYWdhdHN1bWEuZ3VubWEu'@;
put 'anAiLCJpc2VzYWtpLmd1bm1hLmpwIiwiaXRha3VyYS5ndW5tYS5qcCIsImthbm5hLmd1bm1hLmpwIiwia2FucmEuZ3VubWEuanAiLCJrYXRhc2hpbmEuZ3VubWEuanAiLCJrYXdhYmEuZ3VubWEuanAiLCJraXJ5dS5ndW5tYS5qcCIsImt1c2F0c3UuZ3VubWEuanAiLCJtYWViYXNoaS5ndW5t'@;
put 'YS5qcCIsIm1laXdhLmd1bm1hLmpwIiwibWlkb3JpLmd1bm1hLmpwIiwibWluYWthbWkuZ3VubWEuanAiLCJuYWdhbm9oYXJhLmd1bm1hLmpwIiwibmFrYW5vam8uZ3VubWEuanAiLCJuYW5tb2t1Lmd1bm1hLmpwIiwibnVtYXRhLmd1bm1hLmpwIiwib2l6dW1pLmd1bm1hLmpwIiwib3JhLmd1'@;
put 'bm1hLmpwIiwib3RhLmd1bm1hLmpwIiwic2hpYnVrYXdhLmd1bm1hLmpwIiwic2hpbW9uaXRhLmd1bm1hLmpwIiwic2hpbnRvLmd1bm1hLmpwIiwic2hvd2EuZ3VubWEuanAiLCJ0YWthc2FraS5ndW5tYS5qcCIsInRha2F5YW1hLmd1bm1hLmpwIiwidGFtYW11cmEuZ3VubWEuanAiLCJ0YXRl'@;
put 'YmF5YXNoaS5ndW5tYS5qcCIsInRvbWlva2EuZ3VubWEuanAiLCJ0c3VraXlvbm8uZ3VubWEuanAiLCJ0c3VtYWdvaS5ndW5tYS5qcCIsInVlbm8uZ3VubWEuanAiLCJ5b3NoaW9rYS5ndW5tYS5qcCIsImFzYW1pbmFtaS5oaXJvc2hpbWEuanAiLCJkYWl3YS5oaXJvc2hpbWEuanAiLCJldGFq'@;
put 'aW1hLmhpcm9zaGltYS5qcCIsImZ1Y2h1Lmhpcm9zaGltYS5qcCIsImZ1a3V5YW1hLmhpcm9zaGltYS5qcCIsImhhdHN1a2FpY2hpLmhpcm9zaGltYS5qcCIsImhpZ2FzaGloaXJvc2hpbWEuaGlyb3NoaW1hLmpwIiwiaG9uZ28uaGlyb3NoaW1hLmpwIiwiamluc2VraWtvZ2VuLmhpcm9zaGlt'@;
put 'YS5qcCIsImthaXRhLmhpcm9zaGltYS5qcCIsImt1aS5oaXJvc2hpbWEuanAiLCJrdW1hbm8uaGlyb3NoaW1hLmpwIiwia3VyZS5oaXJvc2hpbWEuanAiLCJtaWhhcmEuaGlyb3NoaW1hLmpwIiwibWl5b3NoaS5oaXJvc2hpbWEuanAiLCJuYWthLmhpcm9zaGltYS5qcCIsIm9ub21pY2hpLmhp'@;
put 'cm9zaGltYS5qcCIsIm9zYWtpa2FtaWppbWEuaGlyb3NoaW1hLmpwIiwib3Rha2UuaGlyb3NoaW1hLmpwIiwic2FrYS5oaXJvc2hpbWEuanAiLCJzZXJhLmhpcm9zaGltYS5qcCIsInNlcmFuaXNoaS5oaXJvc2hpbWEuanAiLCJzaGluaWNoaS5oaXJvc2hpbWEuanAiLCJzaG9iYXJhLmhpcm9z'@;
put 'aGltYS5qcCIsInRha2VoYXJhLmhpcm9zaGltYS5qcCIsImFiYXNoaXJpLmhva2thaWRvLmpwIiwiYWJpcmEuaG9ra2FpZG8uanAiLCJhaWJldHN1Lmhva2thaWRvLmpwIiwiYWthYmlyYS5ob2trYWlkby5qcCIsImFra2VzaGkuaG9ra2FpZG8uanAiLCJhc2FoaWthd2EuaG9ra2FpZG8uanAi'@;
put 'LCJhc2hpYmV0c3UuaG9ra2FpZG8uanAiLCJhc2hvcm8uaG9ra2FpZG8uanAiLCJhc3NhYnUuaG9ra2FpZG8uanAiLCJhdHN1bWEuaG9ra2FpZG8uanAiLCJiaWJhaS5ob2trYWlkby5qcCIsImJpZWkuaG9ra2FpZG8uanAiLCJiaWZ1a2EuaG9ra2FpZG8uanAiLCJiaWhvcm8uaG9ra2FpZG8u'@;
put 'anAiLCJiaXJhdG9yaS5ob2trYWlkby5qcCIsImNoaXBwdWJldHN1Lmhva2thaWRvLmpwIiwiY2hpdG9zZS5ob2trYWlkby5qcCIsImRhdGUuaG9ra2FpZG8uanAiLCJlYmV0c3UuaG9ra2FpZG8uanAiLCJlbWJldHN1Lmhva2thaWRvLmpwIiwiZW5pd2EuaG9ra2FpZG8uanAiLCJlcmltby5o'@;
put 'b2trYWlkby5qcCIsImVzYW4uaG9ra2FpZG8uanAiLCJlc2FzaGkuaG9ra2FpZG8uanAiLCJmdWthZ2F3YS5ob2trYWlkby5qcCIsImZ1a3VzaGltYS5ob2trYWlkby5qcCIsImZ1cmFuby5ob2trYWlkby5qcCIsImZ1cnViaXJhLmhva2thaWRvLmpwIiwiaGFib3JvLmhva2thaWRvLmpwIiwi'@;
put 'aGFrb2RhdGUuaG9ra2FpZG8uanAiLCJoYW1hdG9uYmV0c3UuaG9ra2FpZG8uanAiLCJoaWRha2EuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2FndXJhLmhva2thaWRvLmpwIiwiaGlnYXNoaWthd2EuaG9ra2FpZG8uanAiLCJoaXJvby5ob2trYWlkby5qcCIsImhva3VyeXUuaG9ra2FpZG8uanAi'@;
put 'LCJob2t1dG8uaG9ra2FpZG8uanAiLCJob25iZXRzdS5ob2trYWlkby5qcCIsImhvcm9rYW5haS5ob2trYWlkby5qcCIsImhvcm9ub2JlLmhva2thaWRvLmpwIiwiaWtlZGEuaG9ra2FpZG8uanAiLCJpbWFrYW5lLmhva2thaWRvLmpwIiwiaXNoaWthcmkuaG9ra2FpZG8uanAiLCJpd2FtaXph'@;
put 'd2EuaG9ra2FpZG8uanAiLCJpd2FuYWkuaG9ra2FpZG8uanAiLCJrYW1pZnVyYW5vLmhva2thaWRvLmpwIiwia2FtaWthd2EuaG9ra2FpZG8uanAiLCJrYW1pc2hpaG9yby5ob2trYWlkby5qcCIsImthbWlzdW5hZ2F3YS5ob2trYWlkby5qcCIsImthbW9lbmFpLmhva2thaWRvLmpwIiwia2F5'@;
put 'YWJlLmhva2thaWRvLmpwIiwia2VtYnVjaGkuaG9ra2FpZG8uanAiLCJraWtvbmFpLmhva2thaWRvLmpwIiwia2ltb2JldHN1Lmhva2thaWRvLmpwIiwia2l0YWhpcm9zaGltYS5ob2trYWlkby5qcCIsImtpdGFtaS5ob2trYWlkby5qcCIsImtpeW9zYXRvLmhva2thaWRvLmpwIiwia29zaGlt'@;
put 'aXp1Lmhva2thaWRvLmpwIiwia3VubmVwcHUuaG9ra2FpZG8uanAiLCJrdXJpeWFtYS5ob2trYWlkby5qcCIsImt1cm9tYXRzdW5haS5ob2trYWlkby5qcCIsImt1c2hpcm8uaG9ra2FpZG8uanAiLCJrdXRjaGFuLmhva2thaWRvLmpwIiwia3lvd2EuaG9ra2FpZG8uanAiLCJtYXNoaWtlLmhv'@;
put 'a2thaWRvLmpwIiwibWF0c3VtYWUuaG9ra2FpZG8uanAiLCJtaWthc2EuaG9ra2FpZG8uanAiLCJtaW5hbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJtb21iZXRzdS5ob2trYWlkby5qcCIsIm1vc2V1c2hpLmhva2thaWRvLmpwIiwibXVrYXdhLmhva2thaWRvLmpwIiwibXVyb3Jhbi5ob2trYWlk'@;
put 'by5qcCIsIm5haWUuaG9ra2FpZG8uanAiLCJuYWthZ2F3YS5ob2trYWlkby5qcCIsIm5ha2FzYXRzdW5haS5ob2trYWlkby5qcCIsIm5ha2F0b21iZXRzdS5ob2trYWlkby5qcCIsIm5hbmFlLmhva2thaWRvLmpwIiwibmFucG9yby5ob2trYWlkby5qcCIsIm5heW9yby5ob2trYWlkby5qcCIs'@;
put 'Im5lbXVyby5ob2trYWlkby5qcCIsIm5paWthcHB1Lmhva2thaWRvLmpwIiwibmlraS5ob2trYWlkby5qcCIsIm5pc2hpb2tvcHBlLmhva2thaWRvLmpwIiwibm9ib3JpYmV0c3UuaG9ra2FpZG8uanAiLCJudW1hdGEuaG9ra2FpZG8uanAiLCJvYmloaXJvLmhva2thaWRvLmpwIiwib2JpcmEu'@;
put 'aG9ra2FpZG8uanAiLCJva2V0by5ob2trYWlkby5qcCIsIm9rb3BwZS5ob2trYWlkby5qcCIsIm90YXJ1Lmhva2thaWRvLmpwIiwib3RvYmUuaG9ra2FpZG8uanAiLCJvdG9mdWtlLmhva2thaWRvLmpwIiwib3RvaW5lcHB1Lmhva2thaWRvLmpwIiwib3VtdS5ob2trYWlkby5qcCIsIm96b3Jh'@;
put 'Lmhva2thaWRvLmpwIiwicGlwcHUuaG9ra2FpZG8uanAiLCJyYW5rb3NoaS5ob2trYWlkby5qcCIsInJlYnVuLmhva2thaWRvLmpwIiwicmlrdWJldHN1Lmhva2thaWRvLmpwIiwicmlzaGlyaS5ob2trYWlkby5qcCIsInJpc2hpcmlmdWppLmhva2thaWRvLmpwIiwic2Fyb21hLmhva2thaWRv'@;
put 'LmpwIiwic2FydWZ1dHN1Lmhva2thaWRvLmpwIiwic2hha290YW4uaG9ra2FpZG8uanAiLCJzaGFyaS5ob2trYWlkby5qcCIsInNoaWJlY2hhLmhva2thaWRvLmpwIiwic2hpYmV0c3UuaG9ra2FpZG8uanAiLCJzaGlrYWJlLmhva2thaWRvLmpwIiwic2hpa2FvaS5ob2trYWlkby5qcCIsInNo'@;
put 'aW1hbWFraS5ob2trYWlkby5qcCIsInNoaW1penUuaG9ra2FpZG8uanAiLCJzaGltb2thd2EuaG9ra2FpZG8uanAiLCJzaGluc2hpbm90c3UuaG9ra2FpZG8uanAiLCJzaGludG9rdS5ob2trYWlkby5qcCIsInNoaXJhbnVrYS5ob2trYWlkby5qcCIsInNoaXJhb2kuaG9ra2FpZG8uanAiLCJz'@;
put 'aGlyaXVjaGkuaG9ra2FpZG8uanAiLCJzb2JldHN1Lmhva2thaWRvLmpwIiwic3VuYWdhd2EuaG9ra2FpZG8uanAiLCJ0YWlraS5ob2trYWlkby5qcCIsInRha2FzdS5ob2trYWlkby5qcCIsInRha2lrYXdhLmhva2thaWRvLmpwIiwidGFraW5vdWUuaG9ra2FpZG8uanAiLCJ0ZXNoaWthZ2Eu'@;
put 'aG9ra2FpZG8uanAiLCJ0b2JldHN1Lmhva2thaWRvLmpwIiwidG9obWEuaG9ra2FpZG8uanAiLCJ0b21ha29tYWkuaG9ra2FpZG8uanAiLCJ0b21hcmkuaG9ra2FpZG8uanAiLCJ0b3lhLmhva2thaWRvLmpwIiwidG95YWtvLmhva2thaWRvLmpwIiwidG95b3RvbWkuaG9ra2FpZG8uanAiLCJ0'@;
put 'b3lvdXJhLmhva2thaWRvLmpwIiwidHN1YmV0c3UuaG9ra2FpZG8uanAiLCJ0c3VraWdhdGEuaG9ra2FpZG8uanAiLCJ1cmFrYXdhLmhva2thaWRvLmpwIiwidXJhdXN1Lmhva2thaWRvLmpwIiwidXJ5dS5ob2trYWlkby5qcCIsInV0YXNoaW5haS5ob2trYWlkby5qcCIsIndha2thbmFpLmhv'@;
put 'a2thaWRvLmpwIiwid2Fzc2FtdS5ob2trYWlkby5qcCIsInlha3Vtby5ob2trYWlkby5qcCIsInlvaWNoaS5ob2trYWlkby5qcCIsImFpb2kuaHlvZ28uanAiLCJha2FzaGkuaHlvZ28uanAiLCJha28uaHlvZ28uanAiLCJhbWFnYXNha2kuaHlvZ28uanAiLCJhb2dha2kuaHlvZ28uanAiLCJh'@;
put 'c2Fnby5oeW9nby5qcCIsImFzaGl5YS5oeW9nby5qcCIsImF3YWppLmh5b2dvLmpwIiwiZnVrdXNha2kuaHlvZ28uanAiLCJnb3NoaWtpLmh5b2dvLmpwIiwiaGFyaW1hLmh5b2dvLmpwIiwiaGltZWppLmh5b2dvLmpwIiwiaWNoaWthd2EuaHlvZ28uanAiLCJpbmFnYXdhLmh5b2dvLmpwIiwi'@;
put 'aXRhbWkuaHlvZ28uanAiLCJrYWtvZ2F3YS5oeW9nby5qcCIsImthbWlnb3JpLmh5b2dvLmpwIiwia2FtaWthd2EuaHlvZ28uanAiLCJrYXNhaS5oeW9nby5qcCIsImthc3VnYS5oeW9nby5qcCIsImthd2FuaXNoaS5oeW9nby5qcCIsIm1pa2kuaHlvZ28uanAiLCJtaW5hbWlhd2FqaS5oeW9n'@;
put 'by5qcCIsIm5pc2hpbm9taXlhLmh5b2dvLmpwIiwibmlzaGl3YWtpLmh5b2dvLmpwIiwib25vLmh5b2dvLmpwIiwic2FuZGEuaHlvZ28uanAiLCJzYW5uYW4uaHlvZ28uanAiLCJzYXNheWFtYS5oeW9nby5qcCIsInNheW8uaHlvZ28uanAiLCJzaGluZ3UuaHlvZ28uanAiLCJzaGlub25zZW4u'@;
put 'aHlvZ28uanAiLCJzaGlzby5oeW9nby5qcCIsInN1bW90by5oeW9nby5qcCIsInRhaXNoaS5oeW9nby5qcCIsInRha2EuaHlvZ28uanAiLCJ0YWthcmF6dWthLmh5b2dvLmpwIiwidGFrYXNhZ28uaHlvZ28uanAiLCJ0YWtpbm8uaHlvZ28uanAiLCJ0YW1iYS5oeW9nby5qcCIsInRhdHN1bm8u'@;
put 'aHlvZ28uanAiLCJ0b3lvb2thLmh5b2dvLmpwIiwieWFidS5oeW9nby5qcCIsInlhc2hpcm8uaHlvZ28uanAiLCJ5b2thLmh5b2dvLmpwIiwieW9rYXdhLmh5b2dvLmpwIiwiYW1pLmliYXJha2kuanAiLCJhc2FoaS5pYmFyYWtpLmpwIiwiYmFuZG8uaWJhcmFraS5qcCIsImNoaWt1c2VpLmli'@;
put 'YXJha2kuanAiLCJkYWlnby5pYmFyYWtpLmpwIiwiZnVqaXNoaXJvLmliYXJha2kuanAiLCJoaXRhY2hpLmliYXJha2kuanAiLCJoaXRhY2hpbmFrYS5pYmFyYWtpLmpwIiwiaGl0YWNoaW9taXlhLmliYXJha2kuanAiLCJoaXRhY2hpb3RhLmliYXJha2kuanAiLCJpYmFyYWtpLmliYXJha2ku'@;
put 'anAiLCJpbmEuaWJhcmFraS5qcCIsImluYXNoaWtpLmliYXJha2kuanAiLCJpdGFrby5pYmFyYWtpLmpwIiwiaXdhbWEuaWJhcmFraS5qcCIsImpvc28uaWJhcmFraS5qcCIsImthbWlzdS5pYmFyYWtpLmpwIiwia2FzYW1hLmliYXJha2kuanAiLCJrYXNoaW1hLmliYXJha2kuanAiLCJrYXN1'@;
put 'bWlnYXVyYS5pYmFyYWtpLmpwIiwia29nYS5pYmFyYWtpLmpwIiwibWloby5pYmFyYWtpLmpwIiwibWl0by5pYmFyYWtpLmpwIiwibW9yaXlhLmliYXJha2kuanAiLCJuYWthLmliYXJha2kuanAiLCJuYW1lZ2F0YS5pYmFyYWtpLmpwIiwib2FyYWkuaWJhcmFraS5qcCIsIm9nYXdhLmliYXJh'@;
put 'a2kuanAiLCJvbWl0YW1hLmliYXJha2kuanAiLCJyeXVnYXNha2kuaWJhcmFraS5qcCIsInNha2FpLmliYXJha2kuanAiLCJzYWt1cmFnYXdhLmliYXJha2kuanAiLCJzaGltb2RhdGUuaWJhcmFraS5qcCIsInNoaW1vdHN1bWEuaWJhcmFraS5qcCIsInNoaXJvc2F0by5pYmFyYWtpLmpwIiwi'@;
put 'c293YS5pYmFyYWtpLmpwIiwic3VpZnUuaWJhcmFraS5qcCIsInRha2FoYWdpLmliYXJha2kuanAiLCJ0YW1hdHN1a3VyaS5pYmFyYWtpLmpwIiwidG9rYWkuaWJhcmFraS5qcCIsInRvbW9iZS5pYmFyYWtpLmpwIiwidG9uZS5pYmFyYWtpLmpwIiwidG9yaWRlLmliYXJha2kuanAiLCJ0c3Vj'@;
put 'aGl1cmEuaWJhcmFraS5qcCIsInRzdWt1YmEuaWJhcmFraS5qcCIsInVjaGloYXJhLmliYXJha2kuanAiLCJ1c2hpa3UuaWJhcmFraS5qcCIsInlhY2hpeW8uaWJhcmFraS5qcCIsInlhbWFnYXRhLmliYXJha2kuanAiLCJ5YXdhcmEuaWJhcmFraS5qcCIsInl1a2kuaWJhcmFraS5qcCIsImFu'@;
put 'YW1penUuaXNoaWthd2EuanAiLCJoYWt1aS5pc2hpa2F3YS5qcCIsImhha3VzYW4uaXNoaWthd2EuanAiLCJrYWdhLmlzaGlrYXdhLmpwIiwia2Fob2t1LmlzaGlrYXdhLmpwIiwia2FuYXphd2EuaXNoaWthd2EuanAiLCJrYXdha2l0YS5pc2hpa2F3YS5qcCIsImtvbWF0c3UuaXNoaWthd2Eu'@;
put 'anAiLCJuYWthbm90by5pc2hpa2F3YS5qcCIsIm5hbmFvLmlzaGlrYXdhLmpwIiwibm9taS5pc2hpa2F3YS5qcCIsIm5vbm9pY2hpLmlzaGlrYXdhLmpwIiwibm90by5pc2hpa2F3YS5qcCIsInNoaWthLmlzaGlrYXdhLmpwIiwic3V6dS5pc2hpa2F3YS5qcCIsInRzdWJhdGEuaXNoaWthd2Eu'@;
put 'anAiLCJ0c3VydWdpLmlzaGlrYXdhLmpwIiwidWNoaW5hZGEuaXNoaWthd2EuanAiLCJ3YWppbWEuaXNoaWthd2EuanAiLCJmdWRhaS5pd2F0ZS5qcCIsImZ1amlzYXdhLml3YXRlLmpwIiwiaGFuYW1ha2kuaXdhdGUuanAiLCJoaXJhaXp1bWkuaXdhdGUuanAiLCJoaXJvbm8uaXdhdGUuanAi'@;
put 'LCJpY2hpbm9oZS5pd2F0ZS5qcCIsImljaGlub3Nla2kuaXdhdGUuanAiLCJpd2FpenVtaS5pd2F0ZS5qcCIsIml3YXRlLml3YXRlLmpwIiwiam9ib2ppLml3YXRlLmpwIiwia2FtYWlzaGkuaXdhdGUuanAiLCJrYW5lZ2FzYWtpLml3YXRlLmpwIiwia2FydW1haS5pd2F0ZS5qcCIsImthd2Fp'@;
put 'Lml3YXRlLmpwIiwia2l0YWthbWkuaXdhdGUuanAiLCJrdWppLml3YXRlLmpwIiwia3Vub2hlLml3YXRlLmpwIiwia3V6dW1ha2kuaXdhdGUuanAiLCJtaXlha28uaXdhdGUuanAiLCJtaXp1c2F3YS5pd2F0ZS5qcCIsIm1vcmlva2EuaXdhdGUuanAiLCJuaW5vaGUuaXdhdGUuanAiLCJub2Rh'@;
put 'Lml3YXRlLmpwIiwib2Z1bmF0by5pd2F0ZS5qcCIsIm9zaHUuaXdhdGUuanAiLCJvdHN1Y2hpLml3YXRlLmpwIiwicmlrdXplbnRha2F0YS5pd2F0ZS5qcCIsInNoaXdhLml3YXRlLmpwIiwic2hpenVrdWlzaGkuaXdhdGUuanAiLCJzdW1pdGEuaXdhdGUuanAiLCJ0YW5vaGF0YS5pd2F0ZS5q'@;
put 'cCIsInRvbm8uaXdhdGUuanAiLCJ5YWhhYmEuaXdhdGUuanAiLCJ5YW1hZGEuaXdhdGUuanAiLCJheWFnYXdhLmthZ2F3YS5qcCIsImhpZ2FzaGlrYWdhd2Eua2FnYXdhLmpwIiwia2Fub25qaS5rYWdhd2EuanAiLCJrb3RvaGlyYS5rYWdhd2EuanAiLCJtYW5uby5rYWdhd2EuanAiLCJtYXJ1'@;
put 'Z2FtZS5rYWdhd2EuanAiLCJtaXRveW8ua2FnYXdhLmpwIiwibmFvc2hpbWEua2FnYXdhLmpwIiwic2FudWtpLmthZ2F3YS5qcCIsInRhZG90c3Uua2FnYXdhLmpwIiwidGFrYW1hdHN1LmthZ2F3YS5qcCIsInRvbm9zaG8ua2FnYXdhLmpwIiwidWNoaW5vbWkua2FnYXdhLmpwIiwidXRhenUu'@;
put 'a2FnYXdhLmpwIiwiemVudHN1amkua2FnYXdhLmpwIiwiYWt1bmUua2Fnb3NoaW1hLmpwIiwiYW1hbWkua2Fnb3NoaW1hLmpwIiwiaGlva2kua2Fnb3NoaW1hLmpwIiwiaXNhLmthZ29zaGltYS5qcCIsImlzZW4ua2Fnb3NoaW1hLmpwIiwiaXp1bWkua2Fnb3NoaW1hLmpwIiwia2Fnb3NoaW1h'@;
put 'LmthZ29zaGltYS5qcCIsImthbm95YS5rYWdvc2hpbWEuanAiLCJrYXdhbmFiZS5rYWdvc2hpbWEuanAiLCJraW5rby5rYWdvc2hpbWEuanAiLCJrb3V5YW1hLmthZ29zaGltYS5qcCIsIm1ha3VyYXpha2kua2Fnb3NoaW1hLmpwIiwibWF0c3Vtb3RvLmthZ29zaGltYS5qcCIsIm1pbmFtaXRh'@;
put 'bmUua2Fnb3NoaW1hLmpwIiwibmFrYXRhbmUua2Fnb3NoaW1hLmpwIiwibmlzaGlub29tb3RlLmthZ29zaGltYS5qcCIsInNhdHN1bWFzZW5kYWkua2Fnb3NoaW1hLmpwIiwic29vLmthZ29zaGltYS5qcCIsInRhcnVtaXp1LmthZ29zaGltYS5qcCIsInl1c3VpLmthZ29zaGltYS5qcCIsImFp'@;
put 'a2F3YS5rYW5hZ2F3YS5qcCIsImF0c3VnaS5rYW5hZ2F3YS5qcCIsImF5YXNlLmthbmFnYXdhLmpwIiwiY2hpZ2FzYWtpLmthbmFnYXdhLmpwIiwiZWJpbmEua2FuYWdhd2EuanAiLCJmdWppc2F3YS5rYW5hZ2F3YS5qcCIsImhhZGFuby5rYW5hZ2F3YS5qcCIsImhha29uZS5rYW5hZ2F3YS5q'@;
put 'cCIsImhpcmF0c3VrYS5rYW5hZ2F3YS5qcCIsImlzZWhhcmEua2FuYWdhd2EuanAiLCJrYWlzZWkua2FuYWdhd2EuanAiLCJrYW1ha3VyYS5rYW5hZ2F3YS5qcCIsImtpeW9rYXdhLmthbmFnYXdhLmpwIiwibWF0c3VkYS5rYW5hZ2F3YS5qcCIsIm1pbmFtaWFzaGlnYXJhLmthbmFnYXdhLmpw'@;
put 'IiwibWl1cmEua2FuYWdhd2EuanAiLCJuYWthaS5rYW5hZ2F3YS5qcCIsIm5pbm9taXlhLmthbmFnYXdhLmpwIiwib2Rhd2FyYS5rYW5hZ2F3YS5qcCIsIm9pLmthbmFnYXdhLmpwIiwib2lzby5rYW5hZ2F3YS5qcCIsInNhZ2FtaWhhcmEua2FuYWdhd2EuanAiLCJzYW11a2F3YS5rYW5hZ2F3'@;
put 'YS5qcCIsInRzdWt1aS5rYW5hZ2F3YS5qcCIsInlhbWFraXRhLmthbmFnYXdhLmpwIiwieWFtYXRvLmthbmFnYXdhLmpwIiwieW9rb3N1a2Eua2FuYWdhd2EuanAiLCJ5dWdhd2FyYS5rYW5hZ2F3YS5qcCIsInphbWEua2FuYWdhd2EuanAiLCJ6dXNoaS5rYW5hZ2F3YS5qcCIsImFraS5rb2No'@;
put 'aS5qcCIsImdlaXNlaS5rb2NoaS5qcCIsImhpZGFrYS5rb2NoaS5qcCIsImhpZ2FzaGl0c3Vuby5rb2NoaS5qcCIsImluby5rb2NoaS5qcCIsImthZ2FtaS5rb2NoaS5qcCIsImthbWkua29jaGkuanAiLCJraXRhZ2F3YS5rb2NoaS5qcCIsImtvY2hpLmtvY2hpLmpwIiwibWloYXJhLmtvY2hp'@;
put 'LmpwIiwibW90b3lhbWEua29jaGkuanAiLCJtdXJvdG8ua29jaGkuanAiLCJuYWhhcmkua29jaGkuanAiLCJuYWthbXVyYS5rb2NoaS5qcCIsIm5hbmtva3Uua29jaGkuanAiLCJuaXNoaXRvc2Eua29jaGkuanAiLCJuaXlvZG9nYXdhLmtvY2hpLmpwIiwib2NoaS5rb2NoaS5qcCIsIm9rYXdh'@;
put 'LmtvY2hpLmpwIiwib3RveW8ua29jaGkuanAiLCJvdHN1a2kua29jaGkuanAiLCJzYWthd2Eua29jaGkuanAiLCJzdWt1bW8ua29jaGkuanAiLCJzdXNha2kua29jaGkuanAiLCJ0b3NhLmtvY2hpLmpwIiwidG9zYXNoaW1penUua29jaGkuanAiLCJ0b3lvLmtvY2hpLmpwIiwidHN1bm8ua29j'@;
put 'aGkuanAiLCJ1bWFqaS5rb2NoaS5qcCIsInlhc3VkYS5rb2NoaS5qcCIsInl1c3VoYXJhLmtvY2hpLmpwIiwiYW1ha3VzYS5rdW1hbW90by5qcCIsImFyYW8ua3VtYW1vdG8uanAiLCJhc28ua3VtYW1vdG8uanAiLCJjaG95by5rdW1hbW90by5qcCIsImd5b2t1dG8ua3VtYW1vdG8uanAiLCJr'@;
put 'YW1pYW1ha3VzYS5rdW1hbW90by5qcCIsImtpa3VjaGkua3VtYW1vdG8uanAiLCJrdW1hbW90by5rdW1hbW90by5qcCIsIm1hc2hpa2kua3VtYW1vdG8uanAiLCJtaWZ1bmUua3VtYW1vdG8uanAiLCJtaW5hbWF0YS5rdW1hbW90by5qcCIsIm1pbmFtaW9ndW5pLmt1bWFtb3RvLmpwIiwibmFn'@;
put 'YXN1Lmt1bWFtb3RvLmpwIiwibmlzaGloYXJhLmt1bWFtb3RvLmpwIiwib2d1bmkua3VtYW1vdG8uanAiLCJvenUua3VtYW1vdG8uanAiLCJzdW1vdG8ua3VtYW1vdG8uanAiLCJ0YWthbW9yaS5rdW1hbW90by5qcCIsInVraS5rdW1hbW90by5qcCIsInV0by5rdW1hbW90by5qcCIsInlhbWFn'@;
put 'YS5rdW1hbW90by5qcCIsInlhbWF0by5rdW1hbW90by5qcCIsInlhdHN1c2hpcm8ua3VtYW1vdG8uanAiLCJheWFiZS5reW90by5qcCIsImZ1a3VjaGl5YW1hLmt5b3RvLmpwIiwiaGlnYXNoaXlhbWEua3lvdG8uanAiLCJpZGUua3lvdG8uanAiLCJpbmUua3lvdG8uanAiLCJqb3lvLmt5b3Rv'@;
put 'LmpwIiwia2FtZW9rYS5reW90by5qcCIsImthbW8ua3lvdG8uanAiLCJraXRhLmt5b3RvLmpwIiwia2l6dS5reW90by5qcCIsImt1bWl5YW1hLmt5b3RvLmpwIiwia3lvdGFtYmEua3lvdG8uanAiLCJreW90YW5hYmUua3lvdG8uanAiLCJreW90YW5nby5reW90by5qcCIsIm1haXp1cnUua3lv'@;
put 'dG8uanAiLCJtaW5hbWkua3lvdG8uanAiLCJtaW5hbWl5YW1hc2hpcm8ua3lvdG8uanAiLCJtaXlhenUua3lvdG8uanAiLCJtdWtvLmt5b3RvLmpwIiwibmFnYW9rYWt5by5reW90by5qcCIsIm5ha2FneW8ua3lvdG8uanAiLCJuYW50YW4ua3lvdG8uanAiLCJveWFtYXpha2kua3lvdG8uanAi'@;
put 'LCJzYWt5by5reW90by5qcCIsInNlaWthLmt5b3RvLmpwIiwidGFuYWJlLmt5b3RvLmpwIiwidWppLmt5b3RvLmpwIiwidWppdGF3YXJhLmt5b3RvLmpwIiwid2F6dWthLmt5b3RvLmpwIiwieWFtYXNoaW5hLmt5b3RvLmpwIiwieWF3YXRhLmt5b3RvLmpwIiwiYXNhaGkubWllLmpwIiwiaW5h'@;
put 'YmUubWllLmpwIiwiaXNlLm1pZS5qcCIsImthbWV5YW1hLm1pZS5qcCIsImthd2Fnb2UubWllLmpwIiwia2loby5taWUuanAiLCJraXNvc2FraS5taWUuanAiLCJraXdhLm1pZS5qcCIsImtvbW9uby5taWUuanAiLCJrdW1hbm8ubWllLmpwIiwia3V3YW5hLm1pZS5qcCIsIm1hdHN1c2FrYS5t'@;
put 'aWUuanAiLCJtZWl3YS5taWUuanAiLCJtaWhhbWEubWllLmpwIiwibWluYW1paXNlLm1pZS5qcCIsIm1pc3VnaS5taWUuanAiLCJtaXlhbWEubWllLmpwIiwibmFiYXJpLm1pZS5qcCIsInNoaW1hLm1pZS5qcCIsInN1enVrYS5taWUuanAiLCJ0YWRvLm1pZS5qcCIsInRhaWtpLm1pZS5qcCIs'@;
put 'InRha2kubWllLmpwIiwidGFtYWtpLm1pZS5qcCIsInRvYmEubWllLmpwIiwidHN1Lm1pZS5qcCIsInVkb25vLm1pZS5qcCIsInVyZXNoaW5vLm1pZS5qcCIsIndhdGFyYWkubWllLmpwIiwieW9ra2FpY2hpLm1pZS5qcCIsImZ1cnVrYXdhLm1peWFnaS5qcCIsImhpZ2FzaGltYXRzdXNoaW1h'@;
put 'Lm1peWFnaS5qcCIsImlzaGlub21ha2kubWl5YWdpLmpwIiwiaXdhbnVtYS5taXlhZ2kuanAiLCJrYWt1ZGEubWl5YWdpLmpwIiwia2FtaS5taXlhZ2kuanAiLCJrYXdhc2FraS5taXlhZ2kuanAiLCJtYXJ1bW9yaS5taXlhZ2kuanAiLCJtYXRzdXNoaW1hLm1peWFnaS5qcCIsIm1pbmFtaXNh'@;
put 'bnJpa3UubWl5YWdpLmpwIiwibWlzYXRvLm1peWFnaS5qcCIsIm11cmF0YS5taXlhZ2kuanAiLCJuYXRvcmkubWl5YWdpLmpwIiwib2dhd2FyYS5taXlhZ2kuanAiLCJvaGlyYS5taXlhZ2kuanAiLCJvbmFnYXdhLm1peWFnaS5qcCIsIm9zYWtpLm1peWFnaS5qcCIsInJpZnUubWl5YWdpLmpw'@;
put 'Iiwic2VtaW5lLm1peWFnaS5qcCIsInNoaWJhdGEubWl5YWdpLmpwIiwic2hpY2hpa2FzaHVrdS5taXlhZ2kuanAiLCJzaGlrYW1hLm1peWFnaS5qcCIsInNoaW9nYW1hLm1peWFnaS5qcCIsInNoaXJvaXNoaS5taXlhZ2kuanAiLCJ0YWdham8ubWl5YWdpLmpwIiwidGFpd2EubWl5YWdpLmpw'@;
put 'IiwidG9tZS5taXlhZ2kuanAiLCJ0b21peWEubWl5YWdpLmpwIiwid2FrdXlhLm1peWFnaS5qcCIsIndhdGFyaS5taXlhZ2kuanAiLCJ5YW1hbW90by5taXlhZ2kuanAiLCJ6YW8ubWl5YWdpLmpwIiwiYXlhLm1peWF6YWtpLmpwIiwiZWJpbm8ubWl5YXpha2kuanAiLCJnb2thc2UubWl5YXph'@;
put 'a2kuanAiLCJoeXVnYS5taXlhemFraS5qcCIsImthZG9nYXdhLm1peWF6YWtpLmpwIiwia2F3YW1pbmFtaS5taXlhemFraS5qcCIsImtpam8ubWl5YXpha2kuanAiLCJraXRhZ2F3YS5taXlhemFraS5qcCIsImtpdGFrYXRhLm1peWF6YWtpLmpwIiwia2l0YXVyYS5taXlhemFraS5qcCIsImtv'@;
put 'YmF5YXNoaS5taXlhemFraS5qcCIsImt1bml0b21pLm1peWF6YWtpLmpwIiwia3VzaGltYS5taXlhemFraS5qcCIsIm1pbWF0YS5taXlhemFraS5qcCIsIm1peWFrb25vam8ubWl5YXpha2kuanAiLCJtaXlhemFraS5taXlhemFraS5qcCIsIm1vcm90c3VrYS5taXlhemFraS5qcCIsIm5pY2hp'@;
put 'bmFuLm1peWF6YWtpLmpwIiwibmlzaGltZXJhLm1peWF6YWtpLmpwIiwibm9iZW9rYS5taXlhemFraS5qcCIsInNhaXRvLm1peWF6YWtpLmpwIiwic2hpaWJhLm1peWF6YWtpLmpwIiwic2hpbnRvbWkubWl5YXpha2kuanAiLCJ0YWthaGFydS5taXlhemFraS5qcCIsInRha2FuYWJlLm1peWF6'@;
put 'YWtpLmpwIiwidGFrYXpha2kubWl5YXpha2kuanAiLCJ0c3Vuby5taXlhemFraS5qcCIsImFjaGkubmFnYW5vLmpwIiwiYWdlbWF0c3UubmFnYW5vLmpwIiwiYW5hbi5uYWdhbm8uanAiLCJhb2tpLm5hZ2Fuby5qcCIsImFzYWhpLm5hZ2Fuby5qcCIsImF6dW1pbm8ubmFnYW5vLmpwIiwiY2hp'@;
put 'a3Vob2t1Lm5hZ2Fuby5qcCIsImNoaWt1bWEubmFnYW5vLmpwIiwiY2hpbm8ubmFnYW5vLmpwIiwiZnVqaW1pLm5hZ2Fuby5qcCIsImhha3ViYS5uYWdhbm8uanAiLCJoYXJhLm5hZ2Fuby5qcCIsImhpcmF5YS5uYWdhbm8uanAiLCJpaWRhLm5hZ2Fuby5qcCIsImlpamltYS5uYWdhbm8uanAi'@;
put 'LCJpaXlhbWEubmFnYW5vLmpwIiwiaWl6dW5hLm5hZ2Fuby5qcCIsImlrZWRhLm5hZ2Fuby5qcCIsImlrdXNha2EubmFnYW5vLmpwIiwiaW5hLm5hZ2Fuby5qcCIsImthcnVpemF3YS5uYWdhbm8uanAiLCJrYXdha2FtaS5uYWdhbm8uanAiLCJraXNvLm5hZ2Fuby5qcCIsImtpc29mdWt1c2hp'@;
put 'bWEubmFnYW5vLmpwIiwia2l0YWFpa2kubmFnYW5vLmpwIiwia29tYWdhbmUubmFnYW5vLmpwIiwia29tb3JvLm5hZ2Fuby5qcCIsIm1hdHN1a2F3YS5uYWdhbm8uanAiLCJtYXRzdW1vdG8ubmFnYW5vLmpwIiwibWlhc2EubmFnYW5vLmpwIiwibWluYW1pYWlraS5uYWdhbm8uanAiLCJtaW5h'@;
put 'bWltYWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1pbm93YS5uYWdhbm8uanAiLCJtaW5vd2EubmFnYW5vLmpwIiwibWl5YWRhLm5hZ2Fuby5qcCIsIm1peW90YS5uYWdhbm8uanAiLCJtb2NoaXp1a2kubmFnYW5vLmpwIiwibmFnYW5vLm5hZ2Fuby5qcCIsIm5hZ2F3YS5uYWdhbm8uanAiLCJuYWdp'@;
put 'c28ubmFnYW5vLmpwIiwibmFrYWdhd2EubmFnYW5vLmpwIiwibmFrYW5vLm5hZ2Fuby5qcCIsIm5vemF3YW9uc2VuLm5hZ2Fuby5qcCIsIm9idXNlLm5hZ2Fuby5qcCIsIm9nYXdhLm5hZ2Fuby5qcCIsIm9rYXlhLm5hZ2Fuby5qcCIsIm9tYWNoaS5uYWdhbm8uanAiLCJvbWkubmFnYW5vLmpw'@;
put 'Iiwib29rdXdhLm5hZ2Fuby5qcCIsIm9vc2hpa2EubmFnYW5vLmpwIiwib3Rha2kubmFnYW5vLmpwIiwib3RhcmkubmFnYW5vLmpwIiwic2FrYWUubmFnYW5vLmpwIiwic2FrYWtpLm5hZ2Fuby5qcCIsInNha3UubmFnYW5vLmpwIiwic2FrdWhvLm5hZ2Fuby5qcCIsInNoaW1vc3V3YS5uYWdh'@;
put 'bm8uanAiLCJzaGluYW5vbWFjaGkubmFnYW5vLmpwIiwic2hpb2ppcmkubmFnYW5vLmpwIiwic3V3YS5uYWdhbm8uanAiLCJzdXpha2EubmFnYW5vLmpwIiwidGFrYWdpLm5hZ2Fuby5qcCIsInRha2Ftb3JpLm5hZ2Fuby5qcCIsInRha2F5YW1hLm5hZ2Fuby5qcCIsInRhdGVzaGluYS5uYWdh'@;
put 'bm8uanAiLCJ0YXRzdW5vLm5hZ2Fuby5qcCIsInRvZ2FrdXNoaS5uYWdhbm8uanAiLCJ0b2d1cmEubmFnYW5vLmpwIiwidG9taS5uYWdhbm8uanAiLCJ1ZWRhLm5hZ2Fuby5qcCIsIndhZGEubmFnYW5vLmpwIiwieWFtYWdhdGEubmFnYW5vLmpwIiwieWFtYW5vdWNoaS5uYWdhbm8uanAiLCJ5'@;
put 'YXNha2EubmFnYW5vLmpwIiwieWFzdW9rYS5uYWdhbm8uanAiLCJjaGlqaXdhLm5hZ2FzYWtpLmpwIiwiZnV0c3UubmFnYXNha2kuanAiLCJnb3RvLm5hZ2FzYWtpLmpwIiwiaGFzYW1pLm5hZ2FzYWtpLmpwIiwiaGlyYWRvLm5hZ2FzYWtpLmpwIiwiaWtpLm5hZ2FzYWtpLmpwIiwiaXNhaGF5'@;
put 'YS5uYWdhc2FraS5qcCIsImthd2F0YW5hLm5hZ2FzYWtpLmpwIiwia3VjaGlub3RzdS5uYWdhc2FraS5qcCIsIm1hdHN1dXJhLm5hZ2FzYWtpLmpwIiwibmFnYXNha2kubmFnYXNha2kuanAiLCJvYmFtYS5uYWdhc2FraS5qcCIsIm9tdXJhLm5hZ2FzYWtpLmpwIiwib3NldG8ubmFnYXNha2ku'@;
put 'anAiLCJzYWlrYWkubmFnYXNha2kuanAiLCJzYXNlYm8ubmFnYXNha2kuanAiLCJzZWloaS5uYWdhc2FraS5qcCIsInNoaW1hYmFyYS5uYWdhc2FraS5qcCIsInNoaW5rYW1pZ290by5uYWdhc2FraS5qcCIsInRvZ2l0c3UubmFnYXNha2kuanAiLCJ0c3VzaGltYS5uYWdhc2FraS5qcCIsInVu'@;
put 'emVuLm5hZ2FzYWtpLmpwIiwiYW5kby5uYXJhLmpwIiwiZ29zZS5uYXJhLmpwIiwiaGVndXJpLm5hcmEuanAiLCJoaWdhc2hpeW9zaGluby5uYXJhLmpwIiwiaWthcnVnYS5uYXJhLmpwIiwiaWtvbWEubmFyYS5qcCIsImthbWlraXRheWFtYS5uYXJhLmpwIiwia2FubWFraS5uYXJhLmpwIiwi'@;
put 'a2FzaGliYS5uYXJhLmpwIiwia2FzaGloYXJhLm5hcmEuanAiLCJrYXRzdXJhZ2kubmFyYS5qcCIsImthd2FpLm5hcmEuanAiLCJrYXdha2FtaS5uYXJhLmpwIiwia2F3YW5pc2hpLm5hcmEuanAiLCJrb3J5by5uYXJhLmpwIiwia3Vyb3Rha2kubmFyYS5qcCIsIm1pdHN1ZS5uYXJhLmpwIiwi'@;
put 'bWl5YWtlLm5hcmEuanAiLCJuYXJhLm5hcmEuanAiLCJub3NlZ2F3YS5uYXJhLmpwIiwib2ppLm5hcmEuanAiLCJvdWRhLm5hcmEuanAiLCJveW9kby5uYXJhLmpwIiwic2FrdXJhaS5uYXJhLmpwIiwic2FuZ28ubmFyYS5qcCIsInNoaW1vaWNoaS5uYXJhLmpwIiwic2hpbW9raXRheWFtYS5u'@;
put 'YXJhLmpwIiwic2hpbmpvLm5hcmEuanAiLCJzb25pLm5hcmEuanAiLCJ0YWthdG9yaS5uYXJhLmpwIiwidGF3YXJhbW90by5uYXJhLmpwIiwidGVua2F3YS5uYXJhLmpwIiwidGVucmkubmFyYS5qcCIsInVkYS5uYXJhLmpwIiwieWFtYXRva29yaXlhbWEubmFyYS5qcCIsInlhbWF0b3Rha2Fk'@;
put 'YS5uYXJhLmpwIiwieWFtYXpvZS5uYXJhLmpwIiwieW9zaGluby5uYXJhLmpwIiwiYWdhLm5paWdhdGEuanAiLCJhZ2Fuby5uaWlnYXRhLmpwIiwiZ29zZW4ubmlpZ2F0YS5qcCIsIml0b2lnYXdhLm5paWdhdGEuanAiLCJpenVtb3pha2kubmlpZ2F0YS5qcCIsImpvZXRzdS5uaWlnYXRhLmpw'@;
put 'Iiwia2Ftby5uaWlnYXRhLmpwIiwia2FyaXdhLm5paWdhdGEuanAiLCJrYXNoaXdhemFraS5uaWlnYXRhLmpwIiwibWluYW1pdW9udW1hLm5paWdhdGEuanAiLCJtaXRzdWtlLm5paWdhdGEuanAiLCJtdWlrYS5uaWlnYXRhLmpwIiwibXVyYWthbWkubmlpZ2F0YS5qcCIsIm15b2tvLm5paWdh'@;
put 'dGEuanAiLCJuYWdhb2thLm5paWdhdGEuanAiLCJuaWlnYXRhLm5paWdhdGEuanAiLCJvaml5YS5uaWlnYXRhLmpwIiwib21pLm5paWdhdGEuanAiLCJzYWRvLm5paWdhdGEuanAiLCJzYW5qby5uaWlnYXRhLmpwIiwic2Vpcm8ubmlpZ2F0YS5qcCIsInNlaXJvdS5uaWlnYXRhLmpwIiwic2Vr'@;
put 'aWthd2EubmlpZ2F0YS5qcCIsInNoaWJhdGEubmlpZ2F0YS5qcCIsInRhZ2FtaS5uaWlnYXRhLmpwIiwidGFpbmFpLm5paWdhdGEuanAiLCJ0b2NoaW8ubmlpZ2F0YS5qcCIsInRva2FtYWNoaS5uaWlnYXRhLmpwIiwidHN1YmFtZS5uaWlnYXRhLmpwIiwidHN1bmFuLm5paWdhdGEuanAiLCJ1'@;
put 'b251bWEubmlpZ2F0YS5qcCIsInlhaGlrby5uaWlnYXRhLmpwIiwieW9pdGEubmlpZ2F0YS5qcCIsInl1emF3YS5uaWlnYXRhLmpwIiwiYmVwcHUub2l0YS5qcCIsImJ1bmdvb25vLm9pdGEuanAiLCJidW5nb3Rha2FkYS5vaXRhLmpwIiwiaGFzYW1hLm9pdGEuanAiLCJoaWppLm9pdGEuanAi'@;
put 'LCJoaW1lc2hpbWEub2l0YS5qcCIsImhpdGEub2l0YS5qcCIsImthbWl0c3VlLm9pdGEuanAiLCJrb2tvbm9lLm9pdGEuanAiLCJrdWp1Lm9pdGEuanAiLCJrdW5pc2FraS5vaXRhLmpwIiwia3VzdS5vaXRhLmpwIiwib2l0YS5vaXRhLmpwIiwic2Fpa2kub2l0YS5qcCIsInRha2V0YS5vaXRh'@;
put 'LmpwIiwidHN1a3VtaS5vaXRhLmpwIiwidXNhLm9pdGEuanAiLCJ1c3VraS5vaXRhLmpwIiwieXVmdS5vaXRhLmpwIiwiYWthaXdhLm9rYXlhbWEuanAiLCJhc2FrdWNoaS5va2F5YW1hLmpwIiwiYml6ZW4ub2theWFtYS5qcCIsImhheWFzaGltYS5va2F5YW1hLmpwIiwiaWJhcmEub2theWFt'@;
put 'YS5qcCIsImthZ2FtaW5vLm9rYXlhbWEuanAiLCJrYXNhb2thLm9rYXlhbWEuanAiLCJraWJpY2h1by5va2F5YW1hLmpwIiwia3VtZW5hbi5va2F5YW1hLmpwIiwia3VyYXNoaWtpLm9rYXlhbWEuanAiLCJtYW5pd2Eub2theWFtYS5qcCIsIm1pc2FraS5va2F5YW1hLmpwIiwibmFnaS5va2F5'@;
put 'YW1hLmpwIiwibmlpbWkub2theWFtYS5qcCIsIm5pc2hpYXdha3VyYS5va2F5YW1hLmpwIiwib2theWFtYS5va2F5YW1hLmpwIiwic2F0b3Noby5va2F5YW1hLmpwIiwic2V0b3VjaGkub2theWFtYS5qcCIsInNoaW5qby5va2F5YW1hLmpwIiwic2hvby5va2F5YW1hLmpwIiwic29qYS5va2F5'@;
put 'YW1hLmpwIiwidGFrYWhhc2hpLm9rYXlhbWEuanAiLCJ0YW1hbm8ub2theWFtYS5qcCIsInRzdXlhbWEub2theWFtYS5qcCIsIndha2Uub2theWFtYS5qcCIsInlha2FnZS5va2F5YW1hLmpwIiwiYWd1bmkub2tpbmF3YS5qcCIsImdpbm93YW4ub2tpbmF3YS5qcCIsImdpbm96YS5va2luYXdh'@;
put 'LmpwIiwiZ3VzaGlrYW1pLm9raW5hd2EuanAiLCJoYWViYXJ1Lm9raW5hd2EuanAiLCJoaWdhc2hpLm9raW5hd2EuanAiLCJoaXJhcmEub2tpbmF3YS5qcCIsImloZXlhLm9raW5hd2EuanAiLCJpc2hpZ2FraS5va2luYXdhLmpwIiwiaXNoaWthd2Eub2tpbmF3YS5qcCIsIml0b21hbi5va2lu'@;
put 'YXdhLmpwIiwiaXplbmEub2tpbmF3YS5qcCIsImthZGVuYS5va2luYXdhLmpwIiwia2luLm9raW5hd2EuanAiLCJraXRhZGFpdG8ub2tpbmF3YS5qcCIsImtpdGFuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJrdW1lamltYS5va2luYXdhLmpwIiwia3VuaWdhbWkub2tpbmF3YS5qcCIsIm1pbmFt'@;
put 'aWRhaXRvLm9raW5hd2EuanAiLCJtb3RvYnUub2tpbmF3YS5qcCIsIm5hZ28ub2tpbmF3YS5qcCIsIm5haGEub2tpbmF3YS5qcCIsIm5ha2FndXN1a3Uub2tpbmF3YS5qcCIsIm5ha2lqaW4ub2tpbmF3YS5qcCIsIm5hbmpvLm9raW5hd2EuanAiLCJuaXNoaWhhcmEub2tpbmF3YS5qcCIsIm9n'@;
put 'aW1pLm9raW5hd2EuanAiLCJva2luYXdhLm9raW5hd2EuanAiLCJvbm5hLm9raW5hd2EuanAiLCJzaGltb2ppLm9raW5hd2EuanAiLCJ0YWtldG9taS5va2luYXdhLmpwIiwidGFyYW1hLm9raW5hd2EuanAiLCJ0b2thc2hpa2kub2tpbmF3YS5qcCIsInRvbWlndXN1a3Uub2tpbmF3YS5qcCIs'@;
put 'InRvbmFraS5va2luYXdhLmpwIiwidXJhc29lLm9raW5hd2EuanAiLCJ1cnVtYS5va2luYXdhLmpwIiwieWFlc2Uub2tpbmF3YS5qcCIsInlvbWl0YW4ub2tpbmF3YS5qcCIsInlvbmFiYXJ1Lm9raW5hd2EuanAiLCJ5b25hZ3VuaS5va2luYXdhLmpwIiwiemFtYW1pLm9raW5hd2EuanAiLCJh'@;
put 'YmVuby5vc2FrYS5qcCIsImNoaWhheWFha2FzYWthLm9zYWthLmpwIiwiY2h1by5vc2FrYS5qcCIsImRhaXRvLm9zYWthLmpwIiwiZnVqaWlkZXJhLm9zYWthLmpwIiwiaGFiaWtpbm8ub3Nha2EuanAiLCJoYW5uYW4ub3Nha2EuanAiLCJoaWdhc2hpb3Nha2Eub3Nha2EuanAiLCJoaWdhc2hp'@;
put 'c3VtaXlvc2hpLm9zYWthLmpwIiwiaGlnYXNoaXlvZG9nYXdhLm9zYWthLmpwIiwiaGlyYWthdGEub3Nha2EuanAiLCJpYmFyYWtpLm9zYWthLmpwIiwiaWtlZGEub3Nha2EuanAiLCJpenVtaS5vc2FrYS5qcCIsIml6dW1pb3RzdS5vc2FrYS5qcCIsIml6dW1pc2Fuby5vc2FrYS5qcCIsImth'@;
put 'ZG9tYS5vc2FrYS5qcCIsImthaXp1a2Eub3Nha2EuanAiLCJrYW5hbi5vc2FrYS5qcCIsImthc2hpd2FyYS5vc2FrYS5qcCIsImthdGFuby5vc2FrYS5qcCIsImthd2FjaGluYWdhbm8ub3Nha2EuanAiLCJraXNoaXdhZGEub3Nha2EuanAiLCJraXRhLm9zYWthLmpwIiwia3VtYXRvcmkub3Nh'@;
put 'a2EuanAiLCJtYXRzdWJhcmEub3Nha2EuanAiLCJtaW5hdG8ub3Nha2EuanAiLCJtaW5vaC5vc2FrYS5qcCIsIm1pc2FraS5vc2FrYS5qcCIsIm1vcmlndWNoaS5vc2FrYS5qcCIsIm5leWFnYXdhLm9zYWthLmpwIiwibmlzaGkub3Nha2EuanAiLCJub3NlLm9zYWthLmpwIiwib3Nha2FzYXlh'@;
put 'bWEub3Nha2EuanAiLCJzYWthaS5vc2FrYS5qcCIsInNheWFtYS5vc2FrYS5qcCIsInNlbm5hbi5vc2FrYS5qcCIsInNldHRzdS5vc2FrYS5qcCIsInNoaWpvbmF3YXRlLm9zYWthLmpwIiwic2hpbWFtb3RvLm9zYWthLmpwIiwic3VpdGEub3Nha2EuanAiLCJ0YWRhb2thLm9zYWthLmpwIiwi'@;
put 'dGFpc2hpLm9zYWthLmpwIiwidGFqaXJpLm9zYWthLmpwIiwidGFrYWlzaGkub3Nha2EuanAiLCJ0YWthdHN1a2kub3Nha2EuanAiLCJ0b25kYWJheWFzaGkub3Nha2EuanAiLCJ0b3lvbmFrYS5vc2FrYS5qcCIsInRveW9uby5vc2FrYS5qcCIsInlhby5vc2FrYS5qcCIsImFyaWFrZS5zYWdh'@;
put 'LmpwIiwiYXJpdGEuc2FnYS5qcCIsImZ1a3Vkb21pLnNhZ2EuanAiLCJnZW5rYWkuc2FnYS5qcCIsImhhbWF0YW1hLnNhZ2EuanAiLCJoaXplbi5zYWdhLmpwIiwiaW1hcmkuc2FnYS5qcCIsImthbWltaW5lLnNhZ2EuanAiLCJrYW56YWtpLnNhZ2EuanAiLCJrYXJhdHN1LnNhZ2EuanAiLCJr'@;
put 'YXNoaW1hLnNhZ2EuanAiLCJraXRhZ2F0YS5zYWdhLmpwIiwia2l0YWhhdGEuc2FnYS5qcCIsImtpeWFtYS5zYWdhLmpwIiwia291aG9rdS5zYWdhLmpwIiwia3l1cmFnaS5zYWdhLmpwIiwibmlzaGlhcml0YS5zYWdhLmpwIiwib2dpLnNhZ2EuanAiLCJvbWFjaGkuc2FnYS5qcCIsIm91Y2hp'@;
put 'LnNhZ2EuanAiLCJzYWdhLnNhZ2EuanAiLCJzaGlyb2lzaGkuc2FnYS5qcCIsInRha3Uuc2FnYS5qcCIsInRhcmEuc2FnYS5qcCIsInRvc3Uuc2FnYS5qcCIsInlvc2hpbm9nYXJpLnNhZ2EuanAiLCJhcmFrYXdhLnNhaXRhbWEuanAiLCJhc2FrYS5zYWl0YW1hLmpwIiwiY2hpY2hpYnUuc2Fp'@;
put 'dGFtYS5qcCIsImZ1amltaS5zYWl0YW1hLmpwIiwiZnVqaW1pbm8uc2FpdGFtYS5qcCIsImZ1a2F5YS5zYWl0YW1hLmpwIiwiaGFubm8uc2FpdGFtYS5qcCIsImhhbnl1LnNhaXRhbWEuanAiLCJoYXN1ZGEuc2FpdGFtYS5qcCIsImhhdG9nYXlhLnNhaXRhbWEuanAiLCJoYXRveWFtYS5zYWl0'@;
put 'YW1hLmpwIiwiaGlkYWthLnNhaXRhbWEuanAiLCJoaWdhc2hpY2hpY2hpYnUuc2FpdGFtYS5qcCIsImhpZ2FzaGltYXRzdXlhbWEuc2FpdGFtYS5qcCIsImhvbmpvLnNhaXRhbWEuanAiLCJpbmEuc2FpdGFtYS5qcCIsImlydW1hLnNhaXRhbWEuanAiLCJpd2F0c3VraS5zYWl0YW1hLmpwIiwi'@;
put 'a2FtaWl6dW1pLnNhaXRhbWEuanAiLCJrYW1pa2F3YS5zYWl0YW1hLmpwIiwia2FtaXNhdG8uc2FpdGFtYS5qcCIsImthc3VrYWJlLnNhaXRhbWEuanAiLCJrYXdhZ29lLnNhaXRhbWEuanAiLCJrYXdhZ3VjaGkuc2FpdGFtYS5qcCIsImthd2FqaW1hLnNhaXRhbWEuanAiLCJrYXpvLnNhaXRh'@;
put 'bWEuanAiLCJraXRhbW90by5zYWl0YW1hLmpwIiwia29zaGlnYXlhLnNhaXRhbWEuanAiLCJrb3Vub3N1LnNhaXRhbWEuanAiLCJrdWtpLnNhaXRhbWEuanAiLCJrdW1hZ2F5YS5zYWl0YW1hLmpwIiwibWF0c3VidXNoaS5zYWl0YW1hLmpwIiwibWluYW5vLnNhaXRhbWEuanAiLCJtaXNhdG8u'@;
put 'c2FpdGFtYS5qcCIsIm1peWFzaGlyby5zYWl0YW1hLmpwIiwibWl5b3NoaS5zYWl0YW1hLmpwIiwibW9yb3lhbWEuc2FpdGFtYS5qcCIsIm5hZ2F0b3JvLnNhaXRhbWEuanAiLCJuYW1lZ2F3YS5zYWl0YW1hLmpwIiwibmlpemEuc2FpdGFtYS5qcCIsIm9nYW5vLnNhaXRhbWEuanAiLCJvZ2F3'@;
put 'YS5zYWl0YW1hLmpwIiwib2dvc2Uuc2FpdGFtYS5qcCIsIm9rZWdhd2Euc2FpdGFtYS5qcCIsIm9taXlhLnNhaXRhbWEuanAiLCJvdGFraS5zYWl0YW1hLmpwIiwicmFuemFuLnNhaXRhbWEuanAiLCJyeW9rYW1pLnNhaXRhbWEuanAiLCJzYWl0YW1hLnNhaXRhbWEuanAiLCJzYWthZG8uc2Fp'@;
put 'dGFtYS5qcCIsInNhdHRlLnNhaXRhbWEuanAiLCJzYXlhbWEuc2FpdGFtYS5qcCIsInNoaWtpLnNhaXRhbWEuanAiLCJzaGlyYW9rYS5zYWl0YW1hLmpwIiwic29rYS5zYWl0YW1hLmpwIiwic3VnaXRvLnNhaXRhbWEuanAiLCJ0b2RhLnNhaXRhbWEuanAiLCJ0b2tpZ2F3YS5zYWl0YW1hLmpw'@;
put 'IiwidG9rb3JvemF3YS5zYWl0YW1hLmpwIiwidHN1cnVnYXNoaW1hLnNhaXRhbWEuanAiLCJ1cmF3YS5zYWl0YW1hLmpwIiwid2FyYWJpLnNhaXRhbWEuanAiLCJ5YXNoaW8uc2FpdGFtYS5qcCIsInlva296ZS5zYWl0YW1hLmpwIiwieW9uby5zYWl0YW1hLmpwIiwieW9yaWkuc2FpdGFtYS5q'@;
put 'cCIsInlvc2hpZGEuc2FpdGFtYS5qcCIsInlvc2hpa2F3YS5zYWl0YW1hLmpwIiwieW9zaGltaS5zYWl0YW1hLmpwIiwiYWlzaG8uc2hpZ2EuanAiLCJnYW1vLnNoaWdhLmpwIiwiaGlnYXNoaW9taS5zaGlnYS5qcCIsImhpa29uZS5zaGlnYS5qcCIsImtva2Euc2hpZ2EuanAiLCJrb25hbi5z'@;
put 'aGlnYS5qcCIsImtvc2VpLnNoaWdhLmpwIiwia290by5zaGlnYS5qcCIsImt1c2F0c3Uuc2hpZ2EuanAiLCJtYWliYXJhLnNoaWdhLmpwIiwibW9yaXlhbWEuc2hpZ2EuanAiLCJuYWdhaGFtYS5zaGlnYS5qcCIsIm5pc2hpYXphaS5zaGlnYS5qcCIsIm5vdG9nYXdhLnNoaWdhLmpwIiwib21p'@;
put 'aGFjaGltYW4uc2hpZ2EuanAiLCJvdHN1LnNoaWdhLmpwIiwicml0dG8uc2hpZ2EuanAiLCJyeXVvaC5zaGlnYS5qcCIsInRha2FzaGltYS5zaGlnYS5qcCIsInRha2F0c3VraS5zaGlnYS5qcCIsInRvcmFoaW1lLnNoaWdhLmpwIiwidG95b3NhdG8uc2hpZ2EuanAiLCJ5YXN1LnNoaWdhLmpw'@;
put 'IiwiYWthZ2kuc2hpbWFuZS5qcCIsImFtYS5zaGltYW5lLmpwIiwiZ290c3Uuc2hpbWFuZS5qcCIsImhhbWFkYS5zaGltYW5lLmpwIiwiaGlnYXNoaWl6dW1vLnNoaW1hbmUuanAiLCJoaWthd2Euc2hpbWFuZS5qcCIsImhpa2ltaS5zaGltYW5lLmpwIiwiaXp1bW8uc2hpbWFuZS5qcCIsImth'@;
put 'a2lub2tpLnNoaW1hbmUuanAiLCJtYXN1ZGEuc2hpbWFuZS5qcCIsIm1hdHN1ZS5zaGltYW5lLmpwIiwibWlzYXRvLnNoaW1hbmUuanAiLCJuaXNoaW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9oZGEuc2hpbWFuZS5qcCIsIm9raW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9rdWl6dW1vLnNoaW1hbmUu'@;
put 'anAiLCJzaGltYW5lLnNoaW1hbmUuanAiLCJ0YW1heXUuc2hpbWFuZS5qcCIsInRzdXdhbm8uc2hpbWFuZS5qcCIsInVubmFuLnNoaW1hbmUuanAiLCJ5YWt1bW8uc2hpbWFuZS5qcCIsInlhc3VnaS5zaGltYW5lLmpwIiwieWF0c3VrYS5zaGltYW5lLmpwIiwiYXJhaS5zaGl6dW9rYS5qcCIs'@;
put 'ImF0YW1pLnNoaXp1b2thLmpwIiwiZnVqaS5zaGl6dW9rYS5qcCIsImZ1amllZGEuc2hpenVva2EuanAiLCJmdWppa2F3YS5zaGl6dW9rYS5qcCIsImZ1amlub21peWEuc2hpenVva2EuanAiLCJmdWt1cm9pLnNoaXp1b2thLmpwIiwiZ290ZW1iYS5zaGl6dW9rYS5qcCIsImhhaWJhcmEuc2hp'@;
put 'enVva2EuanAiLCJoYW1hbWF0c3Uuc2hpenVva2EuanAiLCJoaWdhc2hpaXp1LnNoaXp1b2thLmpwIiwiaXRvLnNoaXp1b2thLmpwIiwiaXdhdGEuc2hpenVva2EuanAiLCJpenUuc2hpenVva2EuanAiLCJpenVub2t1bmkuc2hpenVva2EuanAiLCJrYWtlZ2F3YS5zaGl6dW9rYS5qcCIsImth'@;
put 'bm5hbWkuc2hpenVva2EuanAiLCJrYXdhbmVob24uc2hpenVva2EuanAiLCJrYXdhenUuc2hpenVva2EuanAiLCJraWt1Z2F3YS5zaGl6dW9rYS5qcCIsImtvc2FpLnNoaXp1b2thLmpwIiwibWFraW5vaGFyYS5zaGl6dW9rYS5qcCIsIm1hdHN1emFraS5zaGl6dW9rYS5qcCIsIm1pbmFtaWl6'@;
put 'dS5zaGl6dW9rYS5qcCIsIm1pc2hpbWEuc2hpenVva2EuanAiLCJtb3JpbWFjaGkuc2hpenVva2EuanAiLCJuaXNoaWl6dS5zaGl6dW9rYS5qcCIsIm51bWF6dS5zaGl6dW9rYS5qcCIsIm9tYWV6YWtpLnNoaXp1b2thLmpwIiwic2hpbWFkYS5zaGl6dW9rYS5qcCIsInNoaW1penUuc2hpenVv'@;
put 'a2EuanAiLCJzaGltb2RhLnNoaXp1b2thLmpwIiwic2hpenVva2Euc2hpenVva2EuanAiLCJzdXNvbm8uc2hpenVva2EuanAiLCJ5YWl6dS5zaGl6dW9rYS5qcCIsInlvc2hpZGEuc2hpenVva2EuanAiLCJhc2hpa2FnYS50b2NoaWdpLmpwIiwiYmF0by50b2NoaWdpLmpwIiwiaGFnYS50b2No'@;
put 'aWdpLmpwIiwiaWNoaWthaS50b2NoaWdpLmpwIiwiaXdhZnVuZS50b2NoaWdpLmpwIiwia2FtaW5va2F3YS50b2NoaWdpLmpwIiwia2FudW1hLnRvY2hpZ2kuanAiLCJrYXJhc3V5YW1hLnRvY2hpZ2kuanAiLCJrdXJvaXNvLnRvY2hpZ2kuanAiLCJtYXNoaWtvLnRvY2hpZ2kuanAiLCJtaWJ1'@;
put 'LnRvY2hpZ2kuanAiLCJtb2thLnRvY2hpZ2kuanAiLCJtb3RlZ2kudG9jaGlnaS5qcCIsIm5hc3UudG9jaGlnaS5qcCIsIm5hc3VzaGlvYmFyYS50b2NoaWdpLmpwIiwibmlra28udG9jaGlnaS5qcCIsIm5pc2hpa2F0YS50b2NoaWdpLmpwIiwibm9naS50b2NoaWdpLmpwIiwib2hpcmEudG9j'@;
put 'aGlnaS5qcCIsIm9odGF3YXJhLnRvY2hpZ2kuanAiLCJveWFtYS50b2NoaWdpLmpwIiwic2FrdXJhLnRvY2hpZ2kuanAiLCJzYW5vLnRvY2hpZ2kuanAiLCJzaGltb3RzdWtlLnRvY2hpZ2kuanAiLCJzaGlveWEudG9jaGlnaS5qcCIsInRha2FuZXphd2EudG9jaGlnaS5qcCIsInRvY2hpZ2ku'@;
put 'dG9jaGlnaS5qcCIsInRzdWdhLnRvY2hpZ2kuanAiLCJ1amlpZS50b2NoaWdpLmpwIiwidXRzdW5vbWl5YS50b2NoaWdpLmpwIiwieWFpdGEudG9jaGlnaS5qcCIsImFpenVtaS50b2t1c2hpbWEuanAiLCJhbmFuLnRva3VzaGltYS5qcCIsImljaGliYS50b2t1c2hpbWEuanAiLCJpdGFuby50'@;
put 'b2t1c2hpbWEuanAiLCJrYWluYW4udG9rdXNoaW1hLmpwIiwia29tYXRzdXNoaW1hLnRva3VzaGltYS5qcCIsIm1hdHN1c2hpZ2UudG9rdXNoaW1hLmpwIiwibWltYS50b2t1c2hpbWEuanAiLCJtaW5hbWkudG9rdXNoaW1hLmpwIiwibWl5b3NoaS50b2t1c2hpbWEuanAiLCJtdWdpLnRva3Vz'@;
put 'aGltYS5qcCIsIm5ha2FnYXdhLnRva3VzaGltYS5qcCIsIm5hcnV0by50b2t1c2hpbWEuanAiLCJzYW5hZ29jaGkudG9rdXNoaW1hLmpwIiwic2hpc2hpa3VpLnRva3VzaGltYS5qcCIsInRva3VzaGltYS50b2t1c2hpbWEuanAiLCJ3YWppa2kudG9rdXNoaW1hLmpwIiwiYWRhY2hpLnRva3lv'@;
put 'LmpwIiwiYWtpcnVuby50b2t5by5qcCIsImFraXNoaW1hLnRva3lvLmpwIiwiYW9nYXNoaW1hLnRva3lvLmpwIiwiYXJha2F3YS50b2t5by5qcCIsImJ1bmt5by50b2t5by5qcCIsImNoaXlvZGEudG9reW8uanAiLCJjaG9mdS50b2t5by5qcCIsImNodW8udG9reW8uanAiLCJlZG9nYXdhLnRv'@;
put 'a3lvLmpwIiwiZnVjaHUudG9reW8uanAiLCJmdXNzYS50b2t5by5qcCIsImhhY2hpam8udG9reW8uanAiLCJoYWNoaW9qaS50b2t5by5qcCIsImhhbXVyYS50b2t5by5qcCIsImhpZ2FzaGlrdXJ1bWUudG9reW8uanAiLCJoaWdhc2hpbXVyYXlhbWEudG9reW8uanAiLCJoaWdhc2hpeWFtYXRv'@;
put 'LnRva3lvLmpwIiwiaGluby50b2t5by5qcCIsImhpbm9kZS50b2t5by5qcCIsImhpbm9oYXJhLnRva3lvLmpwIiwiaW5hZ2kudG9reW8uanAiLCJpdGFiYXNoaS50b2t5by5qcCIsImthdHN1c2hpa2EudG9reW8uanAiLCJraXRhLnRva3lvLmpwIiwia2l5b3NlLnRva3lvLmpwIiwia29kYWly'@;
put 'YS50b2t5by5qcCIsImtvZ2FuZWkudG9reW8uanAiLCJrb2t1YnVuamkudG9reW8uanAiLCJrb21hZS50b2t5by5qcCIsImtvdG8udG9reW8uanAiLCJrb3V6dXNoaW1hLnRva3lvLmpwIiwia3VuaXRhY2hpLnRva3lvLmpwIiwibWFjaGlkYS50b2t5by5qcCIsIm1lZ3Vyby50b2t5by5qcCIs'@;
put 'Im1pbmF0by50b2t5by5qcCIsIm1pdGFrYS50b2t5by5qcCIsIm1penVoby50b2t5by5qcCIsIm11c2FzaGltdXJheWFtYS50b2t5by5qcCIsIm11c2FzaGluby50b2t5by5qcCIsIm5ha2Fuby50b2t5by5qcCIsIm5lcmltYS50b2t5by5qcCIsIm9nYXNhd2FyYS50b2t5by5qcCIsIm9rdXRh'@;
put 'bWEudG9reW8uanAiLCJvbWUudG9reW8uanAiLCJvc2hpbWEudG9reW8uanAiLCJvdGEudG9reW8uanAiLCJzZXRhZ2F5YS50b2t5by5qcCIsInNoaWJ1eWEudG9reW8uanAiLCJzaGluYWdhd2EudG9reW8uanAiLCJzaGluanVrdS50b2t5by5qcCIsInN1Z2luYW1pLnRva3lvLmpwIiwic3Vt'@;
put 'aWRhLnRva3lvLmpwIiwidGFjaGlrYXdhLnRva3lvLmpwIiwidGFpdG8udG9reW8uanAiLCJ0YW1hLnRva3lvLmpwIiwidG9zaGltYS50b2t5by5qcCIsImNoaXp1LnRvdHRvcmkuanAiLCJoaW5vLnRvdHRvcmkuanAiLCJrYXdhaGFyYS50b3R0b3JpLmpwIiwia29nZS50b3R0b3JpLmpwIiwi'@;
put 'a290b3VyYS50b3R0b3JpLmpwIiwibWlzYXNhLnRvdHRvcmkuanAiLCJuYW5idS50b3R0b3JpLmpwIiwibmljaGluYW4udG90dG9yaS5qcCIsInNha2FpbWluYXRvLnRvdHRvcmkuanAiLCJ0b3R0b3JpLnRvdHRvcmkuanAiLCJ3YWthc2EudG90dG9yaS5qcCIsInlhenUudG90dG9yaS5qcCIs'@;
put 'InlvbmFnby50b3R0b3JpLmpwIiwiYXNhaGkudG95YW1hLmpwIiwiZnVjaHUudG95YW1hLmpwIiwiZnVrdW1pdHN1LnRveWFtYS5qcCIsImZ1bmFoYXNoaS50b3lhbWEuanAiLCJoaW1pLnRveWFtYS5qcCIsImltaXp1LnRveWFtYS5qcCIsImluYW1pLnRveWFtYS5qcCIsImpvaGFuYS50b3lh'@;
put 'bWEuanAiLCJrYW1paWNoaS50b3lhbWEuanAiLCJrdXJvYmUudG95YW1hLmpwIiwibmFrYW5paWthd2EudG95YW1hLmpwIiwibmFtZXJpa2F3YS50b3lhbWEuanAiLCJuYW50by50b3lhbWEuanAiLCJueXV6ZW4udG95YW1hLmpwIiwib3lhYmUudG95YW1hLmpwIiwidGFpcmEudG95YW1hLmpw'@;
put 'IiwidGFrYW9rYS50b3lhbWEuanAiLCJ0YXRleWFtYS50b3lhbWEuanAiLCJ0b2dhLnRveWFtYS5qcCIsInRvbmFtaS50b3lhbWEuanAiLCJ0b3lhbWEudG95YW1hLmpwIiwidW5henVraS50b3lhbWEuanAiLCJ1b3p1LnRveWFtYS5qcCIsInlhbWFkYS50b3lhbWEuanAiLCJhcmlkYS53YWth'@;
put 'eWFtYS5qcCIsImFyaWRhZ2F3YS53YWtheWFtYS5qcCIsImdvYm8ud2FrYXlhbWEuanAiLCJoYXNoaW1vdG8ud2FrYXlhbWEuanAiLCJoaWRha2Eud2FrYXlhbWEuanAiLCJoaXJvZ2F3YS53YWtheWFtYS5qcCIsImluYW1pLndha2F5YW1hLmpwIiwiaXdhZGUud2FrYXlhbWEuanAiLCJrYWlu'@;
put 'YW4ud2FrYXlhbWEuanAiLCJrYW1pdG9uZGEud2FrYXlhbWEuanAiLCJrYXRzdXJhZ2kud2FrYXlhbWEuanAiLCJraW1pbm8ud2FrYXlhbWEuanAiLCJraW5va2F3YS53YWtheWFtYS5qcCIsImtpdGF5YW1hLndha2F5YW1hLmpwIiwia295YS53YWtheWFtYS5qcCIsImtvemEud2FrYXlhbWEu'@;
put 'anAiLCJrb3phZ2F3YS53YWtheWFtYS5qcCIsImt1ZG95YW1hLndha2F5YW1hLmpwIiwia3VzaGltb3RvLndha2F5YW1hLmpwIiwibWloYW1hLndha2F5YW1hLmpwIiwibWlzYXRvLndha2F5YW1hLmpwIiwibmFjaGlrYXRzdXVyYS53YWtheWFtYS5qcCIsInNoaW5ndS53YWtheWFtYS5qcCIs'@;
put 'InNoaXJhaGFtYS53YWtheWFtYS5qcCIsInRhaWppLndha2F5YW1hLmpwIiwidGFuYWJlLndha2F5YW1hLmpwIiwid2FrYXlhbWEud2FrYXlhbWEuanAiLCJ5dWFzYS53YWtheWFtYS5qcCIsInl1cmEud2FrYXlhbWEuanAiLCJhc2FoaS55YW1hZ2F0YS5qcCIsImZ1bmFnYXRhLnlhbWFnYXRh'@;
put 'LmpwIiwiaGlnYXNoaW5lLnlhbWFnYXRhLmpwIiwiaWlkZS55YW1hZ2F0YS5qcCIsImthaG9rdS55YW1hZ2F0YS5qcCIsImthbWlub3lhbWEueWFtYWdhdGEuanAiLCJrYW5leWFtYS55YW1hZ2F0YS5qcCIsImthd2FuaXNoaS55YW1hZ2F0YS5qcCIsIm1hbXVyb2dhd2EueWFtYWdhdGEuanAi'@;
put 'LCJtaWthd2EueWFtYWdhdGEuanAiLCJtdXJheWFtYS55YW1hZ2F0YS5qcCIsIm5hZ2FpLnlhbWFnYXRhLmpwIiwibmFrYXlhbWEueWFtYWdhdGEuanAiLCJuYW55by55YW1hZ2F0YS5qcCIsIm5pc2hpa2F3YS55YW1hZ2F0YS5qcCIsIm9iYW5hemF3YS55YW1hZ2F0YS5qcCIsIm9lLnlhbWFn'@;
put 'YXRhLmpwIiwib2d1bmkueWFtYWdhdGEuanAiLCJvaGt1cmEueWFtYWdhdGEuanAiLCJvaXNoaWRhLnlhbWFnYXRhLmpwIiwic2FnYWUueWFtYWdhdGEuanAiLCJzYWthdGEueWFtYWdhdGEuanAiLCJzYWtlZ2F3YS55YW1hZ2F0YS5qcCIsInNoaW5qby55YW1hZ2F0YS5qcCIsInNoaXJhdGFr'@;
put 'YS55YW1hZ2F0YS5qcCIsInNob25haS55YW1hZ2F0YS5qcCIsInRha2FoYXRhLnlhbWFnYXRhLmpwIiwidGVuZG8ueWFtYWdhdGEuanAiLCJ0b3phd2EueWFtYWdhdGEuanAiLCJ0c3VydW9rYS55YW1hZ2F0YS5qcCIsInlhbWFnYXRhLnlhbWFnYXRhLmpwIiwieWFtYW5vYmUueWFtYWdhdGEu'@;
put 'anAiLCJ5b25lemF3YS55YW1hZ2F0YS5qcCIsInl1emEueWFtYWdhdGEuanAiLCJhYnUueWFtYWd1Y2hpLmpwIiwiaGFnaS55YW1hZ3VjaGkuanAiLCJoaWthcmkueWFtYWd1Y2hpLmpwIiwiaG9mdS55YW1hZ3VjaGkuanAiLCJpd2FrdW5pLnlhbWFndWNoaS5qcCIsImt1ZGFtYXRzdS55YW1h'@;
put 'Z3VjaGkuanAiLCJtaXRvdS55YW1hZ3VjaGkuanAiLCJuYWdhdG8ueWFtYWd1Y2hpLmpwIiwib3NoaW1hLnlhbWFndWNoaS5qcCIsInNoaW1vbm9zZWtpLnlhbWFndWNoaS5qcCIsInNodW5hbi55YW1hZ3VjaGkuanAiLCJ0YWJ1c2UueWFtYWd1Y2hpLmpwIiwidG9rdXlhbWEueWFtYWd1Y2hp'@;
put 'LmpwIiwidG95b3RhLnlhbWFndWNoaS5qcCIsInViZS55YW1hZ3VjaGkuanAiLCJ5dXUueWFtYWd1Y2hpLmpwIiwiY2h1by55YW1hbmFzaGkuanAiLCJkb3NoaS55YW1hbmFzaGkuanAiLCJmdWVmdWtpLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhZ3Vj'@;
put 'aGlrby55YW1hbmFzaGkuanAiLCJmdWppeW9zaGlkYS55YW1hbmFzaGkuanAiLCJoYXlha2F3YS55YW1hbmFzaGkuanAiLCJob2t1dG8ueWFtYW5hc2hpLmpwIiwiaWNoaWthd2FtaXNhdG8ueWFtYW5hc2hpLmpwIiwia2FpLnlhbWFuYXNoaS5qcCIsImtvZnUueWFtYW5hc2hpLmpwIiwia29z'@;
put 'aHUueWFtYW5hc2hpLmpwIiwia29zdWdlLnlhbWFuYXNoaS5qcCIsIm1pbmFtaS1hbHBzLnlhbWFuYXNoaS5qcCIsIm1pbm9idS55YW1hbmFzaGkuanAiLCJuYWthbWljaGkueWFtYW5hc2hpLmpwIiwibmFuYnUueWFtYW5hc2hpLmpwIiwibmFydXNhd2EueWFtYW5hc2hpLmpwIiwibmlyYXNh'@;
put 'a2kueWFtYW5hc2hpLmpwIiwibmlzaGlrYXRzdXJhLnlhbWFuYXNoaS5qcCIsIm9zaGluby55YW1hbmFzaGkuanAiLCJvdHN1a2kueWFtYW5hc2hpLmpwIiwic2hvd2EueWFtYW5hc2hpLmpwIiwidGFiYXlhbWEueWFtYW5hc2hpLmpwIiwidHN1cnUueWFtYW5hc2hpLmpwIiwidWVub2hhcmEu'@;
put 'eWFtYW5hc2hpLmpwIiwieWFtYW5ha2Frby55YW1hbmFzaGkuanAiLCJ5YW1hbmFzaGkueWFtYW5hc2hpLmpwIiwia2UiLCJhYy5rZSIsImNvLmtlIiwiZ28ua2UiLCJpbmZvLmtlIiwibWUua2UiLCJtb2JpLmtlIiwibmUua2UiLCJvci5rZSIsInNjLmtlIiwia2ciLCJvcmcua2ciLCJuZXQu'@;
put 'a2ciLCJjb20ua2ciLCJlZHUua2ciLCJnb3Yua2ciLCJtaWwua2ciLCIqLmtoIiwia2kiLCJlZHUua2kiLCJiaXoua2kiLCJuZXQua2kiLCJvcmcua2kiLCJnb3Yua2kiLCJpbmZvLmtpIiwiY29tLmtpIiwia20iLCJvcmcua20iLCJub20ua20iLCJnb3Yua20iLCJwcmQua20iLCJ0bS5rbSIs'@;
put 'ImVkdS5rbSIsIm1pbC5rbSIsImFzcy5rbSIsImNvbS5rbSIsImNvb3Aua20iLCJhc3NvLmttIiwicHJlc3NlLmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJ2ZXRlcmluYWlyZS5rbSIsImdvdXYua20iLCJrbiIsIm5ldC5rbiIsIm9yZy5rbiIsImVk'@;
put 'dS5rbiIsImdvdi5rbiIsImtwIiwiY29tLmtwIiwiZWR1LmtwIiwiZ292LmtwIiwib3JnLmtwIiwicmVwLmtwIiwidHJhLmtwIiwia3IiLCJhYy5rciIsImNvLmtyIiwiZXMua3IiLCJnby5rciIsImhzLmtyIiwia2cua3IiLCJtaWwua3IiLCJtcy5rciIsIm5lLmtyIiwib3Iua3IiLCJwZS5r'@;
put 'ciIsInJlLmtyIiwic2Mua3IiLCJidXNhbi5rciIsImNodW5nYnVrLmtyIiwiY2h1bmduYW0ua3IiLCJkYWVndS5rciIsImRhZWplb24ua3IiLCJnYW5nd29uLmtyIiwiZ3dhbmdqdS5rciIsImd5ZW9uZ2J1ay5rciIsImd5ZW9uZ2dpLmtyIiwiZ3llb25nbmFtLmtyIiwiaW5jaGVvbi5rciIs'@;
put 'ImplanUua3IiLCJqZW9uYnVrLmtyIiwiamVvbm5hbS5rciIsInNlb3VsLmtyIiwidWxzYW4ua3IiLCJrdyIsImNvbS5rdyIsImVkdS5rdyIsImVtYi5rdyIsImdvdi5rdyIsImluZC5rdyIsIm5ldC5rdyIsIm9yZy5rdyIsImt5IiwiY29tLmt5IiwiZWR1Lmt5IiwibmV0Lmt5Iiwib3JnLmt5'@;
put 'Iiwia3oiLCJvcmcua3oiLCJlZHUua3oiLCJuZXQua3oiLCJnb3Yua3oiLCJtaWwua3oiLCJjb20ua3oiLCJsYSIsImludC5sYSIsIm5ldC5sYSIsImluZm8ubGEiLCJlZHUubGEiLCJnb3YubGEiLCJwZXIubGEiLCJjb20ubGEiLCJvcmcubGEiLCJsYiIsImNvbS5sYiIsImVkdS5sYiIsImdv'@;
put 'di5sYiIsIm5ldC5sYiIsIm9yZy5sYiIsImxjIiwiY29tLmxjIiwibmV0LmxjIiwiY28ubGMiLCJvcmcubGMiLCJlZHUubGMiLCJnb3YubGMiLCJsaSIsImxrIiwiZ292LmxrIiwic2NoLmxrIiwibmV0LmxrIiwiaW50LmxrIiwiY29tLmxrIiwib3JnLmxrIiwiZWR1LmxrIiwibmdvLmxrIiwi'@;
put 'c29jLmxrIiwid2ViLmxrIiwibHRkLmxrIiwiYXNzbi5sayIsImdycC5sayIsImhvdGVsLmxrIiwiYWMubGsiLCJsciIsImNvbS5sciIsImVkdS5sciIsImdvdi5sciIsIm9yZy5sciIsIm5ldC5sciIsImxzIiwiYWMubHMiLCJiaXoubHMiLCJjby5scyIsImVkdS5scyIsImdvdi5scyIsImlu'@;
put 'Zm8ubHMiLCJuZXQubHMiLCJvcmcubHMiLCJzYy5scyIsImx0IiwiZ292Lmx0IiwibHUiLCJsdiIsImNvbS5sdiIsImVkdS5sdiIsImdvdi5sdiIsIm9yZy5sdiIsIm1pbC5sdiIsImlkLmx2IiwibmV0Lmx2IiwiYXNuLmx2IiwiY29uZi5sdiIsImx5IiwiY29tLmx5IiwibmV0Lmx5IiwiZ292'@;
put 'Lmx5IiwicGxjLmx5IiwiZWR1Lmx5Iiwic2NoLmx5IiwibWVkLmx5Iiwib3JnLmx5IiwiaWQubHkiLCJtYSIsImNvLm1hIiwibmV0Lm1hIiwiZ292Lm1hIiwib3JnLm1hIiwiYWMubWEiLCJwcmVzcy5tYSIsIm1jIiwidG0ubWMiLCJhc3NvLm1jIiwibWQiLCJtZSIsImNvLm1lIiwibmV0Lm1l'@;
put 'Iiwib3JnLm1lIiwiZWR1Lm1lIiwiYWMubWUiLCJnb3YubWUiLCJpdHMubWUiLCJwcml2Lm1lIiwibWciLCJvcmcubWciLCJub20ubWciLCJnb3YubWciLCJwcmQubWciLCJ0bS5tZyIsImVkdS5tZyIsIm1pbC5tZyIsImNvbS5tZyIsImNvLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIs'@;
put 'Im9yZy5tayIsIm5ldC5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJnb3YubW4iLCJlZHUubW4iLCJvcmcubW4i'@;
put 'LCJtbyIsImNvbS5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwi'@;
put 'b3JnLm10IiwibXUiLCJjb20ubXUiLCJuZXQubXUiLCJvcmcubXUiLCJnb3YubXUiLCJhYy5tdSIsImNvLm11Iiwib3IubXUiLCJtdXNldW0iLCJhY2FkZW15Lm11c2V1bSIsImFncmljdWx0dXJlLm11c2V1bSIsImFpci5tdXNldW0iLCJhaXJndWFyZC5tdXNldW0iLCJhbGFiYW1hLm11c2V1'@;
put 'bSIsImFsYXNrYS5tdXNldW0iLCJhbWJlci5tdXNldW0iLCJhbWJ1bGFuY2UubXVzZXVtIiwiYW1lcmljYW4ubXVzZXVtIiwiYW1lcmljYW5hLm11c2V1bSIsImFtZXJpY2FuYW50aXF1ZXMubXVzZXVtIiwiYW1lcmljYW5hcnQubXVzZXVtIiwiYW1zdGVyZGFtLm11c2V1bSIsImFuZC5tdXNl'@;
put 'dW0iLCJhbm5lZnJhbmsubXVzZXVtIiwiYW50aHJvLm11c2V1bSIsImFudGhyb3BvbG9neS5tdXNldW0iLCJhbnRpcXVlcy5tdXNldW0iLCJhcXVhcml1bS5tdXNldW0iLCJhcmJvcmV0dW0ubXVzZXVtIiwiYXJjaGFlb2xvZ2ljYWwubXVzZXVtIiwiYXJjaGFlb2xvZ3kubXVzZXVtIiwiYXJj'@;
put 'aGl0ZWN0dXJlLm11c2V1bSIsImFydC5tdXNldW0iLCJhcnRhbmRkZXNpZ24ubXVzZXVtIiwiYXJ0Y2VudGVyLm11c2V1bSIsImFydGRlY28ubXVzZXVtIiwiYXJ0ZWR1Y2F0aW9uLm11c2V1bSIsImFydGdhbGxlcnkubXVzZXVtIiwiYXJ0cy5tdXNldW0iLCJhcnRzYW5kY3JhZnRzLm11c2V1'@;
put 'bSIsImFzbWF0YXJ0Lm11c2V1bSIsImFzc2Fzc2luYXRpb24ubXVzZXVtIiwiYXNzaXNpLm11c2V1bSIsImFzc29jaWF0aW9uLm11c2V1bSIsImFzdHJvbm9teS5tdXNldW0iLCJhdGxhbnRhLm11c2V1bSIsImF1c3Rpbi5tdXNldW0iLCJhdXN0cmFsaWEubXVzZXVtIiwiYXV0b21vdGl2ZS5t'@;
put 'dXNldW0iLCJhdmlhdGlvbi5tdXNldW0iLCJheGlzLm11c2V1bSIsImJhZGFqb3oubXVzZXVtIiwiYmFnaGRhZC5tdXNldW0iLCJiYWhuLm11c2V1bSIsImJhbGUubXVzZXVtIiwiYmFsdGltb3JlLm11c2V1bSIsImJhcmNlbG9uYS5tdXNldW0iLCJiYXNlYmFsbC5tdXNldW0iLCJiYXNlbC5t'@;
put 'dXNldW0iLCJiYXRocy5tdXNldW0iLCJiYXVlcm4ubXVzZXVtIiwiYmVhdXhhcnRzLm11c2V1bSIsImJlZWxkZW5nZWx1aWQubXVzZXVtIiwiYmVsbGV2dWUubXVzZXVtIiwiYmVyZ2JhdS5tdXNldW0iLCJiZXJrZWxleS5tdXNldW0iLCJiZXJsaW4ubXVzZXVtIiwiYmVybi5tdXNldW0iLCJi'@;
put 'aWJsZS5tdXNldW0iLCJiaWxiYW8ubXVzZXVtIiwiYmlsbC5tdXNldW0iLCJiaXJkYXJ0Lm11c2V1bSIsImJpcnRocGxhY2UubXVzZXVtIiwiYm9ubi5tdXNldW0iLCJib3N0b24ubXVzZXVtIiwiYm90YW5pY2FsLm11c2V1bSIsImJvdGFuaWNhbGdhcmRlbi5tdXNldW0iLCJib3RhbmljZ2Fy'@;
put 'ZGVuLm11c2V1bSIsImJvdGFueS5tdXNldW0iLCJicmFuZHl3aW5ldmFsbGV5Lm11c2V1bSIsImJyYXNpbC5tdXNldW0iLCJicmlzdG9sLm11c2V1bSIsImJyaXRpc2gubXVzZXVtIiwiYnJpdGlzaGNvbHVtYmlhLm11c2V1bSIsImJyb2FkY2FzdC5tdXNldW0iLCJicnVuZWwubXVzZXVtIiwi'@;
put 'YnJ1c3NlbC5tdXNldW0iLCJicnVzc2Vscy5tdXNldW0iLCJicnV4ZWxsZXMubXVzZXVtIiwiYnVpbGRpbmcubXVzZXVtIiwiYnVyZ2hvZi5tdXNldW0iLCJidXMubXVzZXVtIiwiYnVzaGV5Lm11c2V1bSIsImNhZGFxdWVzLm11c2V1bSIsImNhbGlmb3JuaWEubXVzZXVtIiwiY2FtYnJpZGdl'@;
put 'Lm11c2V1bSIsImNhbi5tdXNldW0iLCJjYW5hZGEubXVzZXVtIiwiY2FwZWJyZXRvbi5tdXNldW0iLCJjYXJyaWVyLm11c2V1bSIsImNhcnRvb25hcnQubXVzZXVtIiwiY2FzYWRlbGFtb25lZGEubXVzZXVtIiwiY2FzdGxlLm11c2V1bSIsImNhc3RyZXMubXVzZXVtIiwiY2VsdGljLm11c2V1'@;
put 'bSIsImNlbnRlci5tdXNldW0iLCJjaGF0dGFub29nYS5tdXNldW0iLCJjaGVsdGVuaGFtLm11c2V1bSIsImNoZXNhcGVha2ViYXkubXVzZXVtIiwiY2hpY2Fnby5tdXNldW0iLCJjaGlsZHJlbi5tdXNldW0iLCJjaGlsZHJlbnMubXVzZXVtIiwiY2hpbGRyZW5zZ2FyZGVuLm11c2V1bSIsImNo'@;
put 'aXJvcHJhY3RpYy5tdXNldW0iLCJjaG9jb2xhdGUubXVzZXVtIiwiY2hyaXN0aWFuc2J1cmcubXVzZXVtIiwiY2luY2lubmF0aS5tdXNldW0iLCJjaW5lbWEubXVzZXVtIiwiY2lyY3VzLm11c2V1bSIsImNpdmlsaXNhdGlvbi5tdXNldW0iLCJjaXZpbGl6YXRpb24ubXVzZXVtIiwiY2l2aWx3'@;
put 'YXIubXVzZXVtIiwiY2xpbnRvbi5tdXNldW0iLCJjbG9jay5tdXNldW0iLCJjb2FsLm11c2V1bSIsImNvYXN0YWxkZWZlbmNlLm11c2V1bSIsImNvZHkubXVzZXVtIiwiY29sZHdhci5tdXNldW0iLCJjb2xsZWN0aW9uLm11c2V1bSIsImNvbG9uaWFsd2lsbGlhbXNidXJnLm11c2V1bSIsImNv'@;
put 'bG9yYWRvcGxhdGVhdS5tdXNldW0iLCJjb2x1bWJpYS5tdXNldW0iLCJjb2x1bWJ1cy5tdXNldW0iLCJjb21tdW5pY2F0aW9uLm11c2V1bSIsImNvbW11bmljYXRpb25zLm11c2V1bSIsImNvbW11bml0eS5tdXNldW0iLCJjb21wdXRlci5tdXNldW0iLCJjb21wdXRlcmhpc3RvcnkubXVzZXVt'@;
put 'IiwiY29tdW5pY2FceGU3XHhmNWVzLm11c2V1bSIsImNvbnRlbXBvcmFyeS5tdXNldW0iLCJjb250ZW1wb3JhcnlhcnQubXVzZXVtIiwiY29udmVudC5tdXNldW0iLCJjb3BlbmhhZ2VuLm11c2V1bSIsImNvcnBvcmF0aW9uLm11c2V1bSIsImNvcnJlaW9zLWUtdGVsZWNvbXVuaWNhXHhlN1x4'@;
put 'ZjVlcy5tdXNldW0iLCJjb3J2ZXR0ZS5tdXNldW0iLCJjb3N0dW1lLm11c2V1bSIsImNvdW50cnllc3RhdGUubXVzZXVtIiwiY291bnR5Lm11c2V1bSIsImNyYWZ0cy5tdXNldW0iLCJjcmFuYnJvb2subXVzZXVtIiwiY3JlYXRpb24ubXVzZXVtIiwiY3VsdHVyYWwubXVzZXVtIiwiY3VsdHVy'@;
put 'YWxjZW50ZXIubXVzZXVtIiwiY3VsdHVyZS5tdXNldW0iLCJjeWJlci5tdXNldW0iLCJjeW1ydS5tdXNldW0iLCJkYWxpLm11c2V1bSIsImRhbGxhcy5tdXNldW0iLCJkYXRhYmFzZS5tdXNldW0iLCJkZHIubXVzZXVtIiwiZGVjb3JhdGl2ZWFydHMubXVzZXVtIiwiZGVsYXdhcmUubXVzZXVt'@;
put 'IiwiZGVsbWVuaG9yc3QubXVzZXVtIiwiZGVubWFyay5tdXNldW0iLCJkZXBvdC5tdXNldW0iLCJkZXNpZ24ubXVzZXVtIiwiZGV0cm9pdC5tdXNldW0iLCJkaW5vc2F1ci5tdXNldW0iLCJkaXNjb3ZlcnkubXVzZXVtIiwiZG9sbHMubXVzZXVtIiwiZG9ub3N0aWEubXVzZXVtIiwiZHVyaGFt'@;
put 'Lm11c2V1bSIsImVhc3RhZnJpY2EubXVzZXVtIiwiZWFzdGNvYXN0Lm11c2V1bSIsImVkdWNhdGlvbi5tdXNldW0iLCJlZHVjYXRpb25hbC5tdXNldW0iLCJlZ3lwdGlhbi5tdXNldW0iLCJlaXNlbmJhaG4ubXVzZXVtIiwiZWxidXJnLm11c2V1bSIsImVsdmVuZHJlbGwubXVzZXVtIiwiZW1i'@;
put 'cm9pZGVyeS5tdXNldW0iLCJlbmN5Y2xvcGVkaWMubXVzZXVtIiwiZW5nbGFuZC5tdXNldW0iLCJlbnRvbW9sb2d5Lm11c2V1bSIsImVudmlyb25tZW50Lm11c2V1bSIsImVudmlyb25tZW50YWxjb25zZXJ2YXRpb24ubXVzZXVtIiwiZXBpbGVwc3kubXVzZXVtIiwiZXNzZXgubXVzZXVtIiwi'@;
put 'ZXN0YXRlLm11c2V1bSIsImV0aG5vbG9neS5tdXNldW0iLCJleGV0ZXIubXVzZXVtIiwiZXhoaWJpdGlvbi5tdXNldW0iLCJmYW1pbHkubXVzZXVtIiwiZmFybS5tdXNldW0iLCJmYXJtZXF1aXBtZW50Lm11c2V1bSIsImZhcm1lcnMubXVzZXVtIiwiZmFybXN0ZWFkLm11c2V1bSIsImZpZWxk'@;
put 'Lm11c2V1bSIsImZpZ3VlcmVzLm11c2V1bSIsImZpbGF0ZWxpYS5tdXNldW0iLCJmaWxtLm11c2V1bSIsImZpbmVhcnQubXVzZXVtIiwiZmluZWFydHMubXVzZXVtIiwiZmlubGFuZC5tdXNldW0iLCJmbGFuZGVycy5tdXNldW0iLCJmbG9yaWRhLm11c2V1bSIsImZvcmNlLm11c2V1bSIsImZv'@;
put 'cnRtaXNzb3VsYS5tdXNldW0iLCJmb3J0d29ydGgubXVzZXVtIiwiZm91bmRhdGlvbi5tdXNldW0iLCJmcmFuY2Fpc2UubXVzZXVtIiwiZnJhbmtmdXJ0Lm11c2V1bSIsImZyYW56aXNrYW5lci5tdXNldW0iLCJmcmVlbWFzb25yeS5tdXNldW0iLCJmcmVpYnVyZy5tdXNldW0iLCJmcmlib3Vy'@;
put 'Zy5tdXNldW0iLCJmcm9nLm11c2V1bSIsImZ1bmRhY2lvLm11c2V1bSIsImZ1cm5pdHVyZS5tdXNldW0iLCJnYWxsZXJ5Lm11c2V1bSIsImdhcmRlbi5tdXNldW0iLCJnYXRld2F5Lm11c2V1bSIsImdlZWx2aW5jay5tdXNldW0iLCJnZW1vbG9naWNhbC5tdXNldW0iLCJnZW9sb2d5Lm11c2V1'@;
put 'bSIsImdlb3JnaWEubXVzZXVtIiwiZ2llc3Nlbi5tdXNldW0iLCJnbGFzLm11c2V1bSIsImdsYXNzLm11c2V1bSIsImdvcmdlLm11c2V1bSIsImdyYW5kcmFwaWRzLm11c2V1bSIsImdyYXoubXVzZXVtIiwiZ3Vlcm5zZXkubXVzZXVtIiwiaGFsbG9mZmFtZS5tdXNldW0iLCJoYW1idXJnLm11'@;
put 'c2V1bSIsImhhbmRzb24ubXVzZXVtIiwiaGFydmVzdGNlbGVicmF0aW9uLm11c2V1bSIsImhhd2FpaS5tdXNldW0iLCJoZWFsdGgubXVzZXVtIiwiaGVpbWF0dW5kdWhyZW4ubXVzZXVtIiwiaGVsbGFzLm11c2V1bSIsImhlbHNpbmtpLm11c2V1bSIsImhlbWJ5Z2RzZm9yYnVuZC5tdXNldW0i'@;
put 'LCJoZXJpdGFnZS5tdXNldW0iLCJoaXN0b2lyZS5tdXNldW0iLCJoaXN0b3JpY2FsLm11c2V1bSIsImhpc3RvcmljYWxzb2NpZXR5Lm11c2V1bSIsImhpc3RvcmljaG91c2VzLm11c2V1bSIsImhpc3RvcmlzY2gubXVzZXVtIiwiaGlzdG9yaXNjaGVzLm11c2V1bSIsImhpc3RvcnkubXVzZXVt'@;
put 'IiwiaGlzdG9yeW9mc2NpZW5jZS5tdXNldW0iLCJob3JvbG9neS5tdXNldW0iLCJob3VzZS5tdXNldW0iLCJodW1hbml0aWVzLm11c2V1bSIsImlsbHVzdHJhdGlvbi5tdXNldW0iLCJpbWFnZWFuZHNvdW5kLm11c2V1bSIsImluZGlhbi5tdXNldW0iLCJpbmRpYW5hLm11c2V1bSIsImluZGlh'@;
put 'bmFwb2xpcy5tdXNldW0iLCJpbmRpYW5tYXJrZXQubXVzZXVtIiwiaW50ZWxsaWdlbmNlLm11c2V1bSIsImludGVyYWN0aXZlLm11c2V1bSIsImlyYXEubXVzZXVtIiwiaXJvbi5tdXNldW0iLCJpc2xlb2ZtYW4ubXVzZXVtIiwiamFtaXNvbi5tdXNldW0iLCJqZWZmZXJzb24ubXVzZXVtIiwi'@;
put 'amVydXNhbGVtLm11c2V1bSIsImpld2VscnkubXVzZXVtIiwiamV3aXNoLm11c2V1bSIsImpld2lzaGFydC5tdXNldW0iLCJqZmsubXVzZXVtIiwiam91cm5hbGlzbS5tdXNldW0iLCJqdWRhaWNhLm11c2V1bSIsImp1ZHlnYXJsYW5kLm11c2V1bSIsImp1ZWRpc2NoZXMubXVzZXVtIiwianVp'@;
put 'Zi5tdXNldW0iLCJrYXJhdGUubXVzZXVtIiwia2FyaWthdHVyLm11c2V1bSIsImtpZHMubXVzZXVtIiwia29lYmVuaGF2bi5tdXNldW0iLCJrb2Vsbi5tdXNldW0iLCJrdW5zdC5tdXNldW0iLCJrdW5zdHNhbW1sdW5nLm11c2V1bSIsImt1bnN0dW5kZGVzaWduLm11c2V1bSIsImxhYm9yLm11'@;
put 'c2V1bSIsImxhYm91ci5tdXNldW0iLCJsYWpvbGxhLm11c2V1bSIsImxhbmNhc2hpcmUubXVzZXVtIiwibGFuZGVzLm11c2V1bSIsImxhbnMubXVzZXVtIiwibFx4ZTRucy5tdXNldW0iLCJsYXJzc29uLm11c2V1bSIsImxld2lzbWlsbGVyLm11c2V1bSIsImxpbmNvbG4ubXVzZXVtIiwibGlu'@;
put 'ei5tdXNldW0iLCJsaXZpbmcubXVzZXVtIiwibGl2aW5naGlzdG9yeS5tdXNldW0iLCJsb2NhbGhpc3RvcnkubXVzZXVtIiwibG9uZG9uLm11c2V1bSIsImxvc2FuZ2VsZXMubXVzZXVtIiwibG91dnJlLm11c2V1bSIsImxveWFsaXN0Lm11c2V1bSIsImx1Y2VybmUubXVzZXVtIiwibHV4ZW1i'@;
put 'b3VyZy5tdXNldW0iLCJsdXplcm4ubXVzZXVtIiwibWFkLm11c2V1bSIsIm1hZHJpZC5tdXNldW0iLCJtYWxsb3JjYS5tdXNldW0iLCJtYW5jaGVzdGVyLm11c2V1bSIsIm1hbnNpb24ubXVzZXVtIiwibWFuc2lvbnMubXVzZXVtIiwibWFueC5tdXNldW0iLCJtYXJidXJnLm11c2V1bSIsIm1h'@;
put 'cml0aW1lLm11c2V1bSIsIm1hcml0aW1vLm11c2V1bSIsIm1hcnlsYW5kLm11c2V1bSIsIm1hcnlsaHVyc3QubXVzZXVtIiwibWVkaWEubXVzZXVtIiwibWVkaWNhbC5tdXNldW0iLCJtZWRpemluaGlzdG9yaXNjaGVzLm11c2V1bSIsIm1lZXJlcy5tdXNldW0iLCJtZW1vcmlhbC5tdXNldW0i'@;
put 'LCJtZXNhdmVyZGUubXVzZXVtIiwibWljaGlnYW4ubXVzZXVtIiwibWlkYXRsYW50aWMubXVzZXVtIiwibWlsaXRhcnkubXVzZXVtIiwibWlsbC5tdXNldW0iLCJtaW5lcnMubXVzZXVtIiwibWluaW5nLm11c2V1bSIsIm1pbm5lc290YS5tdXNldW0iLCJtaXNzaWxlLm11c2V1bSIsIm1pc3Nv'@;
put 'dWxhLm11c2V1bSIsIm1vZGVybi5tdXNldW0iLCJtb21hLm11c2V1bSIsIm1vbmV5Lm11c2V1bSIsIm1vbm1vdXRoLm11c2V1bSIsIm1vbnRpY2VsbG8ubXVzZXVtIiwibW9udHJlYWwubXVzZXVtIiwibW9zY293Lm11c2V1bSIsIm1vdG9yY3ljbGUubXVzZXVtIiwibXVlbmNoZW4ubXVzZXVt'@;
put 'IiwibXVlbnN0ZXIubXVzZXVtIiwibXVsaG91c2UubXVzZXVtIiwibXVuY2llLm11c2V1bSIsIm11c2VldC5tdXNldW0iLCJtdXNldW1jZW50ZXIubXVzZXVtIiwibXVzZXVtdmVyZW5pZ2luZy5tdXNldW0iLCJtdXNpYy5tdXNldW0iLCJuYXRpb25hbC5tdXNldW0iLCJuYXRpb25hbGZpcmVh'@;
put 'cm1zLm11c2V1bSIsIm5hdGlvbmFsaGVyaXRhZ2UubXVzZXVtIiwibmF0aXZlYW1lcmljYW4ubXVzZXVtIiwibmF0dXJhbGhpc3RvcnkubXVzZXVtIiwibmF0dXJhbGhpc3RvcnltdXNldW0ubXVzZXVtIiwibmF0dXJhbHNjaWVuY2VzLm11c2V1bSIsIm5hdHVyZS5tdXNldW0iLCJuYXR1cmhp'@;
put 'c3RvcmlzY2hlcy5tdXNldW0iLCJuYXR1dXJ3ZXRlbnNjaGFwcGVuLm11c2V1bSIsIm5hdW1idXJnLm11c2V1bSIsIm5hdmFsLm11c2V1bSIsIm5lYnJhc2thLm11c2V1bSIsIm5ldWVzLm11c2V1bSIsIm5ld2hhbXBzaGlyZS5tdXNldW0iLCJuZXdqZXJzZXkubXVzZXVtIiwibmV3bWV4aWNv'@;
put 'Lm11c2V1bSIsIm5ld3BvcnQubXVzZXVtIiwibmV3c3BhcGVyLm11c2V1bSIsIm5ld3lvcmsubXVzZXVtIiwibmllcGNlLm11c2V1bSIsIm5vcmZvbGsubXVzZXVtIiwibm9ydGgubXVzZXVtIiwibnJ3Lm11c2V1bSIsIm55Yy5tdXNldW0iLCJueW55Lm11c2V1bSIsIm9jZWFub2dyYXBoaWMu'@;
put 'bXVzZXVtIiwib2NlYW5vZ3JhcGhpcXVlLm11c2V1bSIsIm9tYWhhLm11c2V1bSIsIm9ubGluZS5tdXNldW0iLCJvbnRhcmlvLm11c2V1bSIsIm9wZW5haXIubXVzZXVtIiwib3JlZ29uLm11c2V1bSIsIm9yZWdvbnRyYWlsLm11c2V1bSIsIm90YWdvLm11c2V1bSIsIm94Zm9yZC5tdXNldW0i'@;
put 'LCJwYWNpZmljLm11c2V1bSIsInBhZGVyYm9ybi5tdXNldW0iLCJwYWxhY2UubXVzZXVtIiwicGFsZW8ubXVzZXVtIiwicGFsbXNwcmluZ3MubXVzZXVtIiwicGFuYW1hLm11c2V1bSIsInBhcmlzLm11c2V1bSIsInBhc2FkZW5hLm11c2V1bSIsInBoYXJtYWN5Lm11c2V1bSIsInBoaWxhZGVs'@;
put 'cGhpYS5tdXNldW0iLCJwaGlsYWRlbHBoaWFhcmVhLm11c2V1bSIsInBoaWxhdGVseS5tdXNldW0iLCJwaG9lbml4Lm11c2V1bSIsInBob3RvZ3JhcGh5Lm11c2V1bSIsInBpbG90cy5tdXNldW0iLCJwaXR0c2J1cmdoLm11c2V1bSIsInBsYW5ldGFyaXVtLm11c2V1bSIsInBsYW50YXRpb24u'@;
put 'bXVzZXVtIiwicGxhbnRzLm11c2V1bSIsInBsYXphLm11c2V1bSIsInBvcnRhbC5tdXNldW0iLCJwb3J0bGFuZC5tdXNldW0iLCJwb3J0bGxpZ2F0Lm11c2V1bSIsInBvc3RzLWFuZC10ZWxlY29tbXVuaWNhdGlvbnMubXVzZXVtIiwicHJlc2VydmF0aW9uLm11c2V1bSIsInByZXNpZGlvLm11'@;
put 'c2V1bSIsInByZXNzLm11c2V1bSIsInByb2plY3QubXVzZXVtIiwicHVibGljLm11c2V1bSIsInB1Ym9sLm11c2V1bSIsInF1ZWJlYy5tdXNldW0iLCJyYWlscm9hZC5tdXNldW0iLCJyYWlsd2F5Lm11c2V1bSIsInJlc2VhcmNoLm11c2V1bSIsInJlc2lzdGFuY2UubXVzZXVtIiwicmlvZGVq'@;
put 'YW5laXJvLm11c2V1bSIsInJvY2hlc3Rlci5tdXNldW0iLCJyb2NrYXJ0Lm11c2V1bSIsInJvbWEubXVzZXVtIiwicnVzc2lhLm11c2V1bSIsInNhaW50bG91aXMubXVzZXVtIiwic2FsZW0ubXVzZXVtIiwic2FsdmFkb3JkYWxpLm11c2V1bSIsInNhbHpidXJnLm11c2V1bSIsInNhbmRpZWdv'@;
put 'Lm11c2V1bSIsInNhbmZyYW5jaXNjby5tdXNldW0iLCJzYW50YWJhcmJhcmEubXVzZXVtIiwic2FudGFjcnV6Lm11c2V1bSIsInNhbnRhZmUubXVzZXVtIiwic2Fza2F0Y2hld2FuLm11c2V1bSIsInNhdHgubXVzZXVtIiwic2F2YW5uYWhnYS5tdXNldW0iLCJzY2hsZXNpc2NoZXMubXVzZXVt'@;
put 'Iiwic2Nob2VuYnJ1bm4ubXVzZXVtIiwic2Nob2tvbGFkZW4ubXVzZXVtIiwic2Nob29sLm11c2V1bSIsInNjaHdlaXoubXVzZXVtIiwic2NpZW5jZS5tdXNldW0iLCJzY2llbmNlYW5kaGlzdG9yeS5tdXNldW0iLCJzY2llbmNlYW5kaW5kdXN0cnkubXVzZXVtIiwic2NpZW5jZWNlbnRlci5t'@;
put 'dXNldW0iLCJzY2llbmNlY2VudGVycy5tdXNldW0iLCJzY2llbmNlLWZpY3Rpb24ubXVzZXVtIiwic2NpZW5jZWhpc3RvcnkubXVzZXVtIiwic2NpZW5jZXMubXVzZXVtIiwic2NpZW5jZXNuYXR1cmVsbGVzLm11c2V1bSIsInNjb3RsYW5kLm11c2V1bSIsInNlYXBvcnQubXVzZXVtIiwic2V0'@;
put 'dGxlbWVudC5tdXNldW0iLCJzZXR0bGVycy5tdXNldW0iLCJzaGVsbC5tdXNldW0iLCJzaGVyYnJvb2tlLm11c2V1bSIsInNpYmVuaWsubXVzZXVtIiwic2lsay5tdXNldW0iLCJza2kubXVzZXVtIiwic2tvbGUubXVzZXVtIiwic29jaWV0eS5tdXNldW0iLCJzb2xvZ25lLm11c2V1bSIsInNv'@;
put 'dW5kYW5kdmlzaW9uLm11c2V1bSIsInNvdXRoY2Fyb2xpbmEubXVzZXVtIiwic291dGh3ZXN0Lm11c2V1bSIsInNwYWNlLm11c2V1bSIsInNweS5tdXNldW0iLCJzcXVhcmUubXVzZXVtIiwic3RhZHQubXVzZXVtIiwic3RhbGJhbnMubXVzZXVtIiwic3Rhcm5iZXJnLm11c2V1bSIsInN0YXRl'@;
put 'Lm11c2V1bSIsInN0YXRlb2ZkZWxhd2FyZS5tdXNldW0iLCJzdGF0aW9uLm11c2V1bSIsInN0ZWFtLm11c2V1bSIsInN0ZWllcm1hcmsubXVzZXVtIiwic3Rqb2huLm11c2V1bSIsInN0b2NraG9sbS5tdXNldW0iLCJzdHBldGVyc2J1cmcubXVzZXVtIiwic3R1dHRnYXJ0Lm11c2V1bSIsInN1'@;
put 'aXNzZS5tdXNldW0iLCJzdXJnZW9uc2hhbGwubXVzZXVtIiwic3VycmV5Lm11c2V1bSIsInN2aXp6ZXJhLm11c2V1bSIsInN3ZWRlbi5tdXNldW0iLCJzeWRuZXkubXVzZXVtIiwidGFuay5tdXNldW0iLCJ0Y20ubXVzZXVtIiwidGVjaG5vbG9neS5tdXNldW0iLCJ0ZWxla29tbXVuaWthdGlv'@;
put 'bi5tdXNldW0iLCJ0ZWxldmlzaW9uLm11c2V1bSIsInRleGFzLm11c2V1bSIsInRleHRpbGUubXVzZXVtIiwidGhlYXRlci5tdXNldW0iLCJ0aW1lLm11c2V1bSIsInRpbWVrZWVwaW5nLm11c2V1bSIsInRvcG9sb2d5Lm11c2V1bSIsInRvcmluby5tdXNldW0iLCJ0b3VjaC5tdXNldW0iLCJ0'@;
put 'b3duLm11c2V1bSIsInRyYW5zcG9ydC5tdXNldW0iLCJ0cmVlLm11c2V1bSIsInRyb2xsZXkubXVzZXVtIiwidHJ1c3QubXVzZXVtIiwidHJ1c3RlZS5tdXNldW0iLCJ1aHJlbi5tdXNldW0iLCJ1bG0ubXVzZXVtIiwidW5kZXJzZWEubXVzZXVtIiwidW5pdmVyc2l0eS5tdXNldW0iLCJ1c2Eu'@;
put 'bXVzZXVtIiwidXNhbnRpcXVlcy5tdXNldW0iLCJ1c2FydHMubXVzZXVtIiwidXNjb3VudHJ5ZXN0YXRlLm11c2V1bSIsInVzY3VsdHVyZS5tdXNldW0iLCJ1c2RlY29yYXRpdmVhcnRzLm11c2V1bSIsInVzZ2FyZGVuLm11c2V1bSIsInVzaGlzdG9yeS5tdXNldW0iLCJ1c2h1YWlhLm11c2V1'@;
put 'bSIsInVzbGl2aW5naGlzdG9yeS5tdXNldW0iLCJ1dGFoLm11c2V1bSIsInV2aWMubXVzZXVtIiwidmFsbGV5Lm11c2V1bSIsInZhbnRhYS5tdXNldW0iLCJ2ZXJzYWlsbGVzLm11c2V1bSIsInZpa2luZy5tdXNldW0iLCJ2aWxsYWdlLm11c2V1bSIsInZpcmdpbmlhLm11c2V1bSIsInZpcnR1'@;
put 'YWwubXVzZXVtIiwidmlydHVlbC5tdXNldW0iLCJ2bGFhbmRlcmVuLm11c2V1bSIsInZvbGtlbmt1bmRlLm11c2V1bSIsIndhbGVzLm11c2V1bSIsIndhbGxvbmllLm11c2V1bSIsIndhci5tdXNldW0iLCJ3YXNoaW5ndG9uZGMubXVzZXVtIiwid2F0Y2hhbmRjbG9jay5tdXNldW0iLCJ3YXRj'@;
put 'aC1hbmQtY2xvY2subXVzZXVtIiwid2VzdGVybi5tdXNldW0iLCJ3ZXN0ZmFsZW4ubXVzZXVtIiwid2hhbGluZy5tdXNldW0iLCJ3aWxkbGlmZS5tdXNldW0iLCJ3aWxsaWFtc2J1cmcubXVzZXVtIiwid2luZG1pbGwubXVzZXVtIiwid29ya3Nob3AubXVzZXVtIiwieW9yay5tdXNldW0iLCJ5'@;
put 'b3Jrc2hpcmUubXVzZXVtIiwieW9zZW1pdGUubXVzZXVtIiwieW91dGgubXVzZXVtIiwiem9vbG9naWNhbC5tdXNldW0iLCJ6b29sb2d5Lm11c2V1bSIsIlx1MDVkOVx1MDVlOFx1MDVkNVx1MDVlOVx1MDVkY1x1MDVkOVx1MDVkZC5tdXNldW0iLCJcdTA0MzhcdTA0M2FcdTA0M2VcdTA0M2Mu'@;
put 'bXVzZXVtIiwibXYiLCJhZXJvLm12IiwiYml6Lm12IiwiY29tLm12IiwiY29vcC5tdiIsImVkdS5tdiIsImdvdi5tdiIsImluZm8ubXYiLCJpbnQubXYiLCJtaWwubXYiLCJtdXNldW0ubXYiLCJuYW1lLm12IiwibmV0Lm12Iiwib3JnLm12IiwicHJvLm12IiwibXciLCJhYy5tdyIsImJpei5t'@;
put 'dyIsImNvLm13IiwiY29tLm13IiwiY29vcC5tdyIsImVkdS5tdyIsImdvdi5tdyIsImludC5tdyIsIm11c2V1bS5tdyIsIm5ldC5tdyIsIm9yZy5tdyIsIm14IiwiY29tLm14Iiwib3JnLm14IiwiZ29iLm14IiwiZWR1Lm14IiwibmV0Lm14IiwibXkiLCJiaXoubXkiLCJjb20ubXkiLCJlZHUu'@;
put 'bXkiLCJnb3YubXkiLCJtaWwubXkiLCJuYW1lLm15IiwibmV0Lm15Iiwib3JnLm15IiwibXoiLCJhYy5teiIsImFkdi5teiIsImNvLm16IiwiZWR1Lm16IiwiZ292Lm16IiwibWlsLm16IiwibmV0Lm16Iiwib3JnLm16IiwibmEiLCJpbmZvLm5hIiwicHJvLm5hIiwibmFtZS5uYSIsInNjaG9v'@;
put 'bC5uYSIsIm9yLm5hIiwiZHIubmEiLCJ1cy5uYSIsIm14Lm5hIiwiY2EubmEiLCJpbi5uYSIsImNjLm5hIiwidHYubmEiLCJ3cy5uYSIsIm1vYmkubmEiLCJjby5uYSIsImNvbS5uYSIsIm9yZy5uYSIsIm5hbWUiLCJuYyIsImFzc28ubmMiLCJub20ubmMiLCJuZSIsIm5ldCIsIm5mIiwiY29t'@;
put 'Lm5mIiwibmV0Lm5mIiwicGVyLm5mIiwicmVjLm5mIiwid2ViLm5mIiwiYXJ0cy5uZiIsImZpcm0ubmYiLCJpbmZvLm5mIiwib3RoZXIubmYiLCJzdG9yZS5uZiIsIm5nIiwiY29tLm5nIiwiZWR1Lm5nIiwiZ292Lm5nIiwiaS5uZyIsIm1pbC5uZyIsIm1vYmkubmciLCJuYW1lLm5nIiwibmV0'@;
put 'Lm5nIiwib3JnLm5nIiwic2NoLm5nIiwibmkiLCJhYy5uaSIsImJpei5uaSIsImNvLm5pIiwiY29tLm5pIiwiZWR1Lm5pIiwiZ29iLm5pIiwiaW4ubmkiLCJpbmZvLm5pIiwiaW50Lm5pIiwibWlsLm5pIiwibmV0Lm5pIiwibm9tLm5pIiwib3JnLm5pIiwid2ViLm5pIiwibmwiLCJubyIsImZo'@;
put 'cy5ubyIsInZncy5ubyIsImZ5bGtlc2JpYmwubm8iLCJmb2xrZWJpYmwubm8iLCJtdXNldW0ubm8iLCJpZHJldHQubm8iLCJwcml2Lm5vIiwibWlsLm5vIiwic3RhdC5ubyIsImRlcC5ubyIsImtvbW11bmUubm8iLCJoZXJhZC5ubyIsImFhLm5vIiwiYWgubm8iLCJidS5ubyIsImZtLm5vIiwi'@;
put 'aGwubm8iLCJobS5ubyIsImphbi1tYXllbi5ubyIsIm1yLm5vIiwibmwubm8iLCJudC5ubyIsIm9mLm5vIiwib2wubm8iLCJvc2xvLm5vIiwicmwubm8iLCJzZi5ubyIsInN0Lm5vIiwic3ZhbGJhcmQubm8iLCJ0bS5ubyIsInRyLm5vIiwidmEubm8iLCJ2Zi5ubyIsImdzLmFhLm5vIiwiZ3Mu'@;
put 'YWgubm8iLCJncy5idS5ubyIsImdzLmZtLm5vIiwiZ3MuaGwubm8iLCJncy5obS5ubyIsImdzLmphbi1tYXllbi5ubyIsImdzLm1yLm5vIiwiZ3Mubmwubm8iLCJncy5udC5ubyIsImdzLm9mLm5vIiwiZ3Mub2wubm8iLCJncy5vc2xvLm5vIiwiZ3Mucmwubm8iLCJncy5zZi5ubyIsImdzLnN0'@;
put 'Lm5vIiwiZ3Muc3ZhbGJhcmQubm8iLCJncy50bS5ubyIsImdzLnRyLm5vIiwiZ3MudmEubm8iLCJncy52Zi5ubyIsImFrcmVoYW1uLm5vIiwiXHhlNWtyZWhhbW4ubm8iLCJhbGdhcmQubm8iLCJceGU1bGdceGU1cmQubm8iLCJhcm5hLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwi'@;
put 'YnJvbm5veXN1bmQubm8iLCJiclx4Zjhublx4Zjh5c3VuZC5ubyIsImRyb2Jhay5ubyIsImRyXHhmOGJhay5ubyIsImVnZXJzdW5kLm5vIiwiZmV0c3VuZC5ubyIsImZsb3JvLm5vIiwiZmxvclx4Zjgubm8iLCJmcmVkcmlrc3RhZC5ubyIsImhva2tzdW5kLm5vIiwiaG9uZWZvc3Mubm8iLCJo'@;
put 'XHhmOG5lZm9zcy5ubyIsImplc3NoZWltLm5vIiwiam9ycGVsYW5kLm5vIiwialx4ZjhycGVsYW5kLm5vIiwia2lya2VuZXMubm8iLCJrb3BlcnZpay5ubyIsImtyb2tzdGFkZWx2YS5ubyIsImxhbmdldmFnLm5vIiwibGFuZ2V2XHhlNWcubm8iLCJsZWlydmlrLm5vIiwibWpvbmRhbGVuLm5v'@;
put 'IiwibWpceGY4bmRhbGVuLm5vIiwibW8taS1yYW5hLm5vIiwibW9zam9lbi5ubyIsIm1vc2pceGY4ZW4ubm8iLCJuZXNvZGR0YW5nZW4ubm8iLCJvcmthbmdlci5ubyIsIm9zb3lyby5ubyIsIm9zXHhmOHlyby5ubyIsInJhaG9sdC5ubyIsInJceGU1aG9sdC5ubyIsInNhbmRuZXNzam9lbi5u'@;
put 'byIsInNhbmRuZXNzalx4Zjhlbi5ubyIsInNrZWRzbW9rb3JzZXQubm8iLCJzbGF0dHVtLm5vIiwic3BqZWxrYXZpay5ubyIsInN0YXRoZWxsZS5ubyIsInN0YXZlcm4ubm8iLCJzdGpvcmRhbHNoYWxzZW4ubm8iLCJzdGpceGY4cmRhbHNoYWxzZW4ubm8iLCJ0YW5hbmdlci5ubyIsInRyYW5i'@;
put 'eS5ubyIsInZvc3NldmFuZ2VuLm5vIiwiYWZqb3JkLm5vIiwiXHhlNWZqb3JkLm5vIiwiYWdkZW5lcy5ubyIsImFsLm5vIiwiXHhlNWwubm8iLCJhbGVzdW5kLm5vIiwiXHhlNWxlc3VuZC5ubyIsImFsc3RhaGF1Zy5ubyIsImFsdGEubm8iLCJceGUxbHRceGUxLm5vIiwiYWxhaGVhZGp1Lm5v'@;
put 'IiwiXHhlMWxhaGVhZGp1Lm5vIiwiYWx2ZGFsLm5vIiwiYW1saS5ubyIsIlx4ZTVtbGkubm8iLCJhbW90Lm5vIiwiXHhlNW1vdC5ubyIsImFuZGVidS5ubyIsImFuZG95Lm5vIiwiYW5kXHhmOHkubm8iLCJhbmRhc3VvbG8ubm8iLCJhcmRhbC5ubyIsIlx4ZTVyZGFsLm5vIiwiYXJlbWFyay5u'@;
put 'byIsImFyZW5kYWwubm8iLCJceGU1cy5ubyIsImFzZXJhbC5ubyIsIlx4ZTVzZXJhbC5ubyIsImFza2VyLm5vIiwiYXNraW0ubm8iLCJhc2t2b2xsLm5vIiwiYXNrb3kubm8iLCJhc2tceGY4eS5ubyIsImFzbmVzLm5vIiwiXHhlNXNuZXMubm8iLCJhdWRuZWRhbG4ubm8iLCJhdWtyYS5ubyIs'@;
put 'ImF1cmUubm8iLCJhdXJsYW5kLm5vIiwiYXVyc2tvZy1ob2xhbmQubm8iLCJhdXJza29nLWhceGY4bGFuZC5ubyIsImF1c3Rldm9sbC5ubyIsImF1c3RyaGVpbS5ubyIsImF2ZXJveS5ubyIsImF2ZXJceGY4eS5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxhdC5ubyIs'@;
put 'ImJceGUxbFx4ZTF0Lm5vIiwiYmFsc2Zqb3JkLm5vIiwiYmFoY2NhdnVvdG5hLm5vIiwiYlx4ZTFoY2NhdnVvdG5hLm5vIiwiYmFtYmxlLm5vIiwiYmFyZHUubm8iLCJiZWFyZHUubm8iLCJiZWlhcm4ubm8iLCJiYWpkZGFyLm5vIiwiYlx4ZTFqZGRhci5ubyIsImJhaWRhci5ubyIsImJceGUx'@;
put 'aWRceGUxci5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhlMWhraS5ubyIsImJpbmRhbC5ubyIsImJpcmtlbmVzLm5vIiwiYmphcmtveS5ubyIsImJqYXJrXHhmOHkubm8iLCJiamVya3Jl'@;
put 'aW0ubm8iLCJianVnbi5ubyIsImJvZG8ubm8iLCJib2RceGY4Lm5vIiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJ1ZGVqanUubm8iLCJib2tuLm5vIiwiYnJlbWFuZ2VyLm5vIiwiYnJvbm5veS5ubyIsImJyXHhmOG5uXHhmOHkubm8iLCJieWdsYW5kLm5vIiwiYnlr'@;
put 'bGUubm8iLCJiYXJ1bS5ubyIsImJceGU2cnVtLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsImJvLm5vcmRsYW5kLm5vIiwiYlx4Zjgubm9yZGxhbmQubm8iLCJiaWV2YXQubm8iLCJiaWV2XHhlMXQubm8iLCJib21sby5ubyIsImJceGY4bWxvLm5vIiwiYmF0c2Zq'@;
put 'b3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJkb25uYS5ubyIsImRceGY4bm5hLm5vIiwiZWlkLm5vIiwiZWlk'@;
put 'ZmpvcmQubm8iLCJlaWRzYmVyZy5ubyIsImVpZHNrb2cubm8iLCJlaWRzdm9sbC5ubyIsImVpZ2Vyc3VuZC5ubyIsImVsdmVydW0ubm8iLCJlbmViYWtrLm5vIiwiZW5nZXJkYWwubm8iLCJldG5lLm5vIiwiZXRuZWRhbC5ubyIsImV2ZW5lcy5ubyIsImV2ZW5hc3NpLm5vIiwiZXZlblx4ZTFc'@;
put 'dTAxNjFcdTAxNjFpLm5vIiwiZXZqZS1vZy1ob3JubmVzLm5vIiwiZmFyc3VuZC5ubyIsImZhdXNrZS5ubyIsImZ1b3Nza28ubm8iLCJmdW9pc2t1Lm5vIiwiZmVkamUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVs'@;
put 'bC5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZmxhLm5vIiwiZmxceGU1Lm5vIiwiZm9sbGRhbC5ubyIsImZvcnNhbmQubm8iLCJmb3NuZXMubm8iLCJmcmVpLm5vIiwiZnJvZ24ubm8iLCJmcm9sYW5k'@;
put 'Lm5vIiwiZnJvc3RhLm5vIiwiZnJhbmEubm8iLCJmclx4ZTZuYS5ubyIsImZyb3lhLm5vIiwiZnJceGY4eWEubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJmb3JkZS5ubyIsImZceGY4cmRlLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5u'@;
put 'byIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWxkZXNrYWwubm8iLCJnaWxkZXNrXHhlNWwubm8iLCJnaXNrZS5ubyIsImdqZW1uZXMubm8iLCJnamVyZHJ1bS5ubyIsImdqZXJzdGFkLm5vIiwiZ2plc2RhbC5ubyIsImdqb3Zpay5ubyIsImdqXHhmOHZpay5ubyIsImdsb3BwZW4ubm8i'@;
put 'LCJnb2wubm8iLCJncmFuLm5vIiwiZ3JhbmUubm8iLCJncmFudmluLm5vIiwiZ3JhdGFuZ2VuLm5vIiwiZ3JpbXN0YWQubm8iLCJncm9uZy5ubyIsImtyYWFuZ2hrZS5ubyIsImtyXHhlNWFuZ2hrZS5ubyIsImdydWUubm8iLCJndWxlbi5ubyIsImhhZHNlbC5ubyIsImhhbGRlbi5ubyIsImhh'@;
put 'bHNhLm5vIiwiaGFtYXIubm8iLCJoYW1hcm95Lm5vIiwiaGFibWVyLm5vIiwiaFx4ZTFibWVyLm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFtbWVyZmVzdC5ubyIsImhhbW1hcmZlYXN0YS5ubyIsImhceGUxbW1ceGUxcmZlYXN0YS5ubyIsImhhcmFtLm5vIiwiaGFyZWlkLm5v'@;
put 'IiwiaGFyc3RhZC5ubyIsImhhc3Zpay5ubyIsImFrbm9sdW9rdGEubm8iLCJceGUxa1x1MDE0Ym9sdW9rdGEubm8iLCJoYXR0ZmplbGxkYWwubm8iLCJhYXJib3J0ZS5ubyIsImhhdWdlc3VuZC5ubyIsImhlbW5lLm5vIiwiaGVtbmVzLm5vIiwiaGVtc2VkYWwubm8iLCJoZXJveS5tb3JlLW9n'@;
put 'LXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJoZXJveS5ub3JkbGFuZC5ubyIsImhlclx4Zjh5Lm5vcmRsYW5kLm5vIiwiaGl0cmEubm8iLCJoamFydGRhbC5ubyIsImhqZWxtZWxhbmQubm8iLCJob2JvbC5ubyIsImhvYlx4ZjhsLm5vIiwiaG9mLm5vIiwi'@;
put 'aG9sLm5vIiwiaG9sZS5ubyIsImhvbG1lc3RyYW5kLm5vIiwiaG9sdGFsZW4ubm8iLCJob2x0XHhlNWxlbi5ubyIsImhvcm5pbmRhbC5ubyIsImhvcnRlbi5ubyIsImh1cmRhbC5ubyIsImh1cnVtLm5vIiwiaHZhbGVyLm5vIiwiaHlsbGVzdGFkLm5vIiwiaGFnZWJvc3RhZC5ubyIsImhceGU2'@;
put 'Z2Vib3N0YWQubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImliZXN0YWQubm8iLCJpbmRlcm95Lm5vIiwiaW5kZXJceGY4eS5ubyIsIml2ZWxhbmQubm8iLCJqZXZuYWtlci5ubyIs'@;
put 'ImpvbmRhbC5ubyIsImpvbHN0ZXIubm8iLCJqXHhmOGxzdGVyLm5vIiwia2FyYXNqb2subm8iLCJrYXJhc2pvaGthLm5vIiwia1x4ZTFyXHhlMVx1MDE2MWpvaGthLm5vIiwia2FybHNveS5ubyIsImdhbHNhLm5vIiwiZ1x4ZTFsc1x4ZTEubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8i'@;
put 'LCJrYXV0b2tlaW5vLm5vIiwiZ3VvdmRhZ2VhaWRudS5ubyIsImtsZXBwLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5ubyIsImtvbmdzYmVyZy5ubyIsImtvbmdzdmluZ2VyLm5vIiwia3JhZ2Vyby5ubyIsImtyYWdlclx4Zjgubm8iLCJrcmlzdGlhbnNhbmQubm8iLCJrcmlzdGlhbnN1bmQu'@;
put 'bm8iLCJrcm9kc2hlcmFkLm5vIiwia3JceGY4ZHNoZXJhZC5ubyIsImt2YWxzdW5kLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsImt2YW0ubm8iLCJrdmluZXNkYWwubm8iLCJrdmlubmhlcmFkLm5vIiwia3ZpdGVzZWlkLm5vIiwia3ZpdHNveS5ubyIsImt2'@;
put 'aXRzXHhmOHkubm8iLCJrdmFmam9yZC5ubyIsImt2XHhlNmZqb3JkLm5vIiwiZ2llaHRhdnVvYXRuYS5ubyIsImt2YW5hbmdlbi5ubyIsImt2XHhlNm5hbmdlbi5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImdhaXZ1b3Ru'@;
put 'YS5ubyIsImdceGUxaXZ1b3RuYS5ubyIsImxhcnZpay5ubyIsImxhdmFuZ2VuLm5vIiwibGF2YWdpcy5ubyIsImxvYWJhdC5ubyIsImxvYWJceGUxdC5ubyIsImxlYmVzYnkubm8iLCJkYXZ2ZXNpaWRhLm5vIiwibGVpa2FuZ2VyLm5vIiwibGVpcmZqb3JkLm5vIiwibGVrYS5ubyIsImxla3N2'@;
put 'aWsubm8iLCJsZW52aWsubm8iLCJsZWFuZ2F2aWlrYS5ubyIsImxlYVx1MDE0Ymdhdmlpa2Eubm8iLCJsZXNqYS5ubyIsImxldmFuZ2VyLm5vIiwibGllci5ubyIsImxpZXJuZS5ubyIsImxpbGxlaGFtbWVyLm5vIiwibGlsbGVzYW5kLm5vIiwibGluZGVzbmVzLm5vIiwibGluZGFzLm5vIiwi'@;
put 'bGluZFx4ZTVzLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsYWhwcGkubm8iLCJsXHhlMWhwcGkubm8iLCJsdW5kLm5vIiwibHVubmVyLm5vIiwibHVyb3kubm8iLCJsdXJceGY4eS5ubyIsImx1c3Rlci5ubyIsImx5bmdkYWwubm8iLCJseW5nZW4ubm8iLCJpdmd1Lm5vIiwibGFyZGFsLm5v'@;
put 'IiwibGVyZGFsLm5vIiwibFx4ZTZyZGFsLm5vIiwibG9kaW5nZW4ubm8iLCJsXHhmOGRpbmdlbi5ubyIsImxvcmVuc2tvZy5ubyIsImxceGY4cmVuc2tvZy5ubyIsImxvdGVuLm5vIiwibFx4Zjh0ZW4ubm8iLCJtYWx2aWsubm8iLCJtYXNveS5ubyIsIm1ceGU1c1x4Zjh5Lm5vIiwibXVvc2F0'@;
put 'Lm5vIiwibXVvc1x4ZTF0Lm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIs'@;
put 'Im1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibWlkc3VuZC5ubyIsIm1pZHRyZS1nYXVsZGFsLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtYWxzZWx2Lm5vIiwibVx4ZTVsc2Vsdi5ubyIsIm1h'@;
put 'bGF0dnVvcG1pLm5vIiwibVx4ZTFsYXR2dW9wbWkubm8iLCJuYW1kYWxzZWlkLm5vIiwiYWVqcmllLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hYW1lc2pldnVlbWllLm5vIiwiblx4ZTVceGU1bWVzamV2dWVtaWUubm8iLCJsYWFrZXN2dWVtaWUubm8iLCJuYW5uZXN0YWQu'@;
put 'bm8iLCJuYXJ2aWsubm8iLCJuYXJ2aWlrYS5ubyIsIm5hdXN0ZGFsLm5vIiwibmVkcmUtZWlrZXIubm8iLCJuZXMuYWtlcnNodXMubm8iLCJuZXMuYnVza2VydWQubm8iLCJuZXNuYS5ubyIsIm5lc29kZGVuLm5vIiwibmVzc2VieS5ubyIsInVuamFyZ2Eubm8iLCJ1bmpceGUxcmdhLm5vIiwi'@;
put 'bmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBwLm5vIiwiZGF2dmVuamFyZ2Eubm8iLCJkYXZ2ZW5qXHhlMXJnYS5ubyIsIm5vcmRyZS1sYW5kLm5v'@;
put 'Iiwibm9yZHJlaXNhLm5vIiwicmFpc2Eubm8iLCJyXHhlMWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5hcm95Lm5vIiwiblx4ZTZyXHhmOHkubm8iLCJub3R0ZXJveS5ubyIsIm5ceGY4dHRlclx4Zjh5Lm5vIiwib2RkYS5ubyIsIm9rc25lcy5ubyIsIlx4Zjhr'@;
put 'c25lcy5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3MuaGVkbWFyay5ubyIsIm9zLmhv'@;
put 'cmRhbGFuZC5ubyIsIm9zZW4ubm8iLCJvc3Rlcm95Lm5vIiwib3N0ZXJceGY4eS5ubyIsIm9zdHJlLXRvdGVuLm5vIiwiXHhmOHN0cmUtdG90ZW4ubm8iLCJvdmVyaGFsbGEubm8iLCJvdnJlLWVpa2VyLm5vIiwiXHhmOHZyZS1laWtlci5ubyIsIm95ZXIubm8iLCJceGY4eWVyLm5vIiwib3ln'@;
put 'YXJkZW4ubm8iLCJceGY4eWdhcmRlbi5ubyIsIm95c3RyZS1zbGlkcmUubm8iLCJceGY4eXN0cmUtc2xpZHJlLm5vIiwicG9yc2FuZ2VyLm5vIiwicG9yc2FuZ3Uubm8iLCJwb3JzXHhlMVx1MDE0Ymd1Lm5vIiwicG9yc2dydW5uLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJha2tl'@;
put 'c3RhZC5ubyIsInJhbmEubm8iLCJydW92YXQubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2Vy'@;
put 'Lm5vIiwicmlzc2Eubm8iLCJyaXNvci5ubyIsInJpc1x4ZjhyLm5vIiwicm9hbi5ubyIsInJvbGxhZy5ubyIsInJ5Z2dlLm5vIiwicmFsaW5nZW4ubm8iLCJyXHhlNmxpbmdlbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb21za29nLm5vIiwiclx4Zjhtc2tvZy5ubyIsInJv'@;
put 'cm9zLm5vIiwiclx4Zjhyb3Mubm8iLCJyb3N0Lm5vIiwiclx4ZjhzdC5ubyIsInJveWtlbi5ubyIsInJceGY4eWtlbi5ubyIsInJveXJ2aWsubm8iLCJyXHhmOHlydmlrLm5vIiwicmFkZS5ubyIsInJceGU1ZGUubm8iLCJzYWxhbmdlbi5ubyIsInNpZWxsYWsubm8iLCJzYWx0ZGFsLm5vIiwi'@;
put 'c2FsYXQubm8iLCJzXHhlMWxceGUxdC5ubyIsInNceGUxbGF0Lm5vIiwic2FtbmFuZ2VyLm5vIiwic2FuZGUubW9yZS1vZy1yb21zZGFsLm5vIiwic2FuZGUubVx4ZjhyZS1vZy1yb21zZGFsLm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJzYW5kZWZqb3JkLm5vIiwic2FuZG5lcy5ubyIsInNh'@;
put 'bmRveS5ubyIsInNhbmRceGY4eS5ubyIsInNhcnBzYm9yZy5ubyIsInNhdWRhLm5vIiwic2F1aGVyYWQubm8iLCJzZWwubm8iLCJzZWxidS5ubyIsInNlbGplLm5vIiwic2Vsam9yZC5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYXVuLm5vIiwic2tlZHNtby5u'@;
put 'byIsInNraS5ubyIsInNraWVuLm5vIiwic2tpcHR2ZXQubm8iLCJza2plcnZveS5ubyIsInNramVydlx4Zjh5Lm5vIiwic2tpZXJ2YS5ubyIsInNraWVydlx4ZTEubm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tvZGplLm5vIiwic2thbmxhbmQubm8iLCJza1x4ZTVubGFuZC5ubyIs'@;
put 'InNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmlsbGZqb3JkLm5vIiwic25hc2Eubm8iLCJzblx4ZTVzYS5ubyIsInNub2FzYS5ubyIsInNuYWFzZS5ubyIsInNuXHhlNWFzZS5ubyIsInNvZ25kYWwubm8iLCJzb2tuZGFsLm5vIiwic29sYS5u'@;
put 'byIsInNvbHVuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvcnRsYW5kLm5vIiwic3B5ZGViZXJnLm5vIiwic3RhbmdlLm5vIiwic3RhdmFuZ2VyLm5vIiwic3RlaWdlbi5ubyIsInN0ZWlua2plci5ubyIsInN0am9yZGFsLm5vIiwic3RqXHhmOHJkYWwubm8iLCJzdG9ra2Uubm8iLCJzdG9yLWVs'@;
put 'dmRhbC5ubyIsInN0b3JkLm5vIiwic3RvcmRhbC5ubyIsInN0b3Jmam9yZC5ubyIsIm9tYXN2dW90bmEubm8iLCJzdHJhbmQubm8iLCJzdHJhbmRhLm5vIiwic3RyeW4ubm8iLCJzdWxhLm5vIiwic3VsZGFsLm5vIiwic3VuZC5ubyIsInN1bm5kYWwubm8iLCJzdXJuYWRhbC5ubyIsInN2ZWlv'@;
put 'Lm5vIiwic3ZlbHZpay5ubyIsInN5a2t5bHZlbi5ubyIsInNvZ25lLm5vIiwic1x4ZjhnbmUubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24u'@;
put 'bm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsInNvcmZvbGQubm8iLCJzXHhmOHJmb2xkLm5vIiwi'@;
put 'c29ycmVpc2Eubm8iLCJzXHhmOHJyZWlzYS5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJ0YW5hLm5vIiwiZGVhdG51Lm5vIiwidGltZS5ubyIsInRpbmd2b2xsLm5vIiwidGlubi5ubyIsInRqZWxkc3VuZC5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1l'@;
put 'Lm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvcnNrZW4ubm8iLCJ0cmFub3kubm8iLCJ0cmFuXHhmOHkubm8iLCJ0cm9tc28ubm8iLCJ0cm9tc1x4Zjgubm8iLCJ0cm9tc2Eubm8iLCJyb21zYS5ubyIsInRyb25kaGVpbS5ubyIsInRyb2FuZGluLm5vIiwidHJ5c2lsLm5vIiwidHJhbmEu'@;
put 'bm8iLCJ0clx4ZTZuYS5ubyIsInRyb2dzdGFkLm5vIiwidHJceGY4Z3N0YWQubm8iLCJ0dmVkZXN0cmFuZC5ubyIsInR5ZGFsLm5vIiwidHluc2V0Lm5vIiwidHlzZmpvcmQubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwidHlzbmVzLm5vIiwidHlzdmFyLm5vIiwi'@;
put 'dHlzdlx4ZTZyLm5vIiwidG9uc2Jlcmcubm8iLCJ0XHhmOG5zYmVyZy5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1dHNpcmEubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwiY2FoY2VzdW9sby5ubyIsIlx1MDEwZFx4ZTFoY2VzdW9sby5ubyIs'@;
put 'InZha3NkYWwubm8iLCJ2YWxsZS5ubyIsInZhbmcubm8iLCJ2YW55bHZlbi5ubyIsInZhcmRvLm5vIiwidmFyZFx4Zjgubm8iLCJ2YXJnZ2F0Lm5vIiwidlx4ZTFyZ2dceGUxdC5ubyIsInZlZnNuLm5vIiwidmFhcHN0ZS5ubyIsInZlZ2Eubm8iLCJ2ZWdhcnNoZWkubm8iLCJ2ZWdceGU1cnNo'@;
put 'ZWkubm8iLCJ2ZW5uZXNsYS5ubyIsInZlcmRhbC5ubyIsInZlcnJhbi5ubyIsInZlc3RieS5ubyIsInZlc3RuZXMubm8iLCJ2ZXN0cmUtc2xpZHJlLm5vIiwidmVzdHJlLXRvdGVuLm5vIiwidmVzdHZhZ295Lm5vIiwidmVzdHZceGU1Z1x4Zjh5Lm5vIiwidmV2ZWxzdGFkLm5vIiwidmlrLm5v'@;
put 'IiwidmlrbmEubm8iLCJ2aW5kYWZqb3JkLm5vIiwidm9sZGEubm8iLCJ2b3NzLm5vIiwidmFyb3kubm8iLCJ2XHhlNnJceGY4eS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2b2FnYXQubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhl'@;
put 'NS5ubyIsInZhbGVyLm9zdGZvbGQubm8iLCJ2XHhlNWxlci5ceGY4c3Rmb2xkLm5vIiwidmFsZXIuaGVkbWFyay5ubyIsInZceGU1bGVyLmhlZG1hcmsubm8iLCIqLm5wIiwibnIiLCJiaXoubnIiLCJpbmZvLm5yIiwiZ292Lm5yIiwiZWR1Lm5yIiwib3JnLm5yIiwibmV0Lm5yIiwiY29tLm5y'@;
put 'IiwibnUiLCJueiIsImFjLm56IiwiY28ubnoiLCJjcmkubnoiLCJnZWVrLm56IiwiZ2VuLm56IiwiZ292dC5ueiIsImhlYWx0aC5ueiIsIml3aS5ueiIsImtpd2kubnoiLCJtYW9yaS5ueiIsIm1pbC5ueiIsIm1cdTAxMDFvcmkubnoiLCJuZXQubnoiLCJvcmcubnoiLCJwYXJsaWFtZW50Lm56'@;
put 'Iiwic2Nob29sLm56Iiwib20iLCJjby5vbSIsImNvbS5vbSIsImVkdS5vbSIsImdvdi5vbSIsIm1lZC5vbSIsIm11c2V1bS5vbSIsIm5ldC5vbSIsIm9yZy5vbSIsInByby5vbSIsIm9uaW9uIiwib3JnIiwicGEiLCJhYy5wYSIsImdvYi5wYSIsImNvbS5wYSIsIm9yZy5wYSIsInNsZC5wYSIs'@;
put 'ImVkdS5wYSIsIm5ldC5wYSIsImluZy5wYSIsImFiby5wYSIsIm1lZC5wYSIsIm5vbS5wYSIsInBlIiwiZWR1LnBlIiwiZ29iLnBlIiwibm9tLnBlIiwibWlsLnBlIiwib3JnLnBlIiwiY29tLnBlIiwibmV0LnBlIiwicGYiLCJjb20ucGYiLCJvcmcucGYiLCJlZHUucGYiLCIqLnBnIiwicGgi'@;
put 'LCJjb20ucGgiLCJuZXQucGgiLCJvcmcucGgiLCJnb3YucGgiLCJlZHUucGgiLCJuZ28ucGgiLCJtaWwucGgiLCJpLnBoIiwicGsiLCJjb20ucGsiLCJuZXQucGsiLCJlZHUucGsiLCJvcmcucGsiLCJmYW0ucGsiLCJiaXoucGsiLCJ3ZWIucGsiLCJnb3YucGsiLCJnb2IucGsiLCJnb2sucGsi'@;
put 'LCJnb24ucGsiLCJnb3AucGsiLCJnb3MucGsiLCJpbmZvLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhaWQucGwiLCJhZ3JvLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwi'@;
put 'LCJtaWFzdGEucGwiLCJtZWRpYS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBs'@;
put 'IiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJpYy5nb3YucGwiLCJpcy5nb3YucGwiLCJ1cy5nb3YucGwiLCJrbXBzcC5nb3YucGwiLCJrcHBzcC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJw'@;
put 'c3AuZ292LnBsIiwid3Nrci5nb3YucGwiLCJrd3AuZ292LnBsIiwibXcuZ292LnBsIiwidWcuZ292LnBsIiwidW0uZ292LnBsIiwidW1pZy5nb3YucGwiLCJ1Z2ltLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXcuZ292LnBsIiwic3Rhcm9zdHdvLmdvdi5wbCIsInBhLmdvdi5wbCIsInBvLmdv'@;
put 'di5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic28uZ292LnBsIiwic3IuZ292LnBsIiwid3NhLmdvdi5wbCIsInNrby5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lpaC5nb3YucGwiLCJ3aW5iLmdvdi5wbCIsInBpbmIuZ292LnBsIiwi'@;
put 'd2lvcy5nb3YucGwiLCJ3aXRkLmdvdi5wbCIsInd6bWl1dy5nb3YucGwiLCJwaXcuZ292LnBsIiwid2l3Lmdvdi5wbCIsImdyaXcuZ292LnBsIiwid2lmLmdvdi5wbCIsIm91bS5nb3YucGwiLCJzZG4uZ292LnBsIiwienAuZ292LnBsIiwidXBwby5nb3YucGwiLCJtdXAuZ292LnBsIiwid3Vv'@;
put 'ei5nb3YucGwiLCJrb25zdWxhdC5nb3YucGwiLCJvaXJtLmdvdi5wbCIsImF1Z3VzdG93LnBsIiwiYmFiaWEtZ29yYS5wbCIsImJlZHppbi5wbCIsImJlc2tpZHkucGwiLCJiaWFsb3dpZXphLnBsIiwiYmlhbHlzdG9rLnBsIiwiYmllbGF3YS5wbCIsImJpZXN6Y3phZHkucGwiLCJib2xlc2xh'@;
put 'd2llYy5wbCIsImJ5ZGdvc3pjei5wbCIsImJ5dG9tLnBsIiwiY2llc3p5bi5wbCIsImN6ZWxhZHoucGwiLCJjemVzdC5wbCIsImRsdWdvbGVrYS5wbCIsImVsYmxhZy5wbCIsImVsay5wbCIsImdsb2dvdy5wbCIsImduaWV6bm8ucGwiLCJnb3JsaWNlLnBsIiwiZ3JhamV3by5wbCIsImlsYXdh'@;
put 'LnBsIiwiamF3b3J6bm8ucGwiLCJqZWxlbmlhLWdvcmEucGwiLCJqZ29yYS5wbCIsImthbGlzei5wbCIsImthemltaWVyei1kb2xueS5wbCIsImthcnBhY3oucGwiLCJrYXJ0dXp5LnBsIiwia2FzenVieS5wbCIsImthdG93aWNlLnBsIiwia2Vwbm8ucGwiLCJrZXRyenluLnBsIiwia2xvZHpr'@;
put 'by5wbCIsImtvYmllcnp5Y2UucGwiLCJrb2xvYnJ6ZWcucGwiLCJrb25pbi5wbCIsImtvbnNrb3dvbGEucGwiLCJrdXRuby5wbCIsImxhcHkucGwiLCJsZWJvcmsucGwiLCJsZWduaWNhLnBsIiwibGV6YWpzay5wbCIsImxpbWFub3dhLnBsIiwibG9temEucGwiLCJsb3dpY3oucGwiLCJsdWJp'@;
put 'bi5wbCIsImx1a293LnBsIiwibWFsYm9yay5wbCIsIm1hbG9wb2xza2EucGwiLCJtYXpvd3N6ZS5wbCIsIm1henVyeS5wbCIsIm1pZWxlYy5wbCIsIm1pZWxuby5wbCIsIm1yYWdvd28ucGwiLCJuYWtsby5wbCIsIm5vd2FydWRhLnBsIiwibnlzYS5wbCIsIm9sYXdhLnBsIiwib2xlY2tvLnBs'@;
put 'Iiwib2xrdXN6LnBsIiwib2xzenR5bi5wbCIsIm9wb2N6bm8ucGwiLCJvcG9sZS5wbCIsIm9zdHJvZGEucGwiLCJvc3Ryb2xla2EucGwiLCJvc3Ryb3dpZWMucGwiLCJvc3Ryb3d3bGtwLnBsIiwicGlsYS5wbCIsInBpc3oucGwiLCJwb2RoYWxlLnBsIiwicG9kbGFzaWUucGwiLCJwb2xrb3dp'@;
put 'Y2UucGwiLCJwb21vcnplLnBsIiwicG9tb3Jza2llLnBsIiwicHJvY2hvd2ljZS5wbCIsInBydXN6a293LnBsIiwicHJ6ZXdvcnNrLnBsIiwicHVsYXd5LnBsIiwicmFkb20ucGwiLCJyYXdhLW1hei5wbCIsInJ5Ym5pay5wbCIsInJ6ZXN6b3cucGwiLCJzYW5vay5wbCIsInNlam55LnBsIiwi'@;
put 'c2xhc2sucGwiLCJzbHVwc2sucGwiLCJzb3Nub3dpZWMucGwiLCJzdGFsb3dhLXdvbGEucGwiLCJza29jem93LnBsIiwic3RhcmFjaG93aWNlLnBsIiwic3RhcmdhcmQucGwiLCJzdXdhbGtpLnBsIiwic3dpZG5pY2EucGwiLCJzd2llYm9kemluLnBsIiwic3dpbm91anNjaWUucGwiLCJzemN6'@;
put 'ZWNpbi5wbCIsInN6Y3p5dG5vLnBsIiwidGFybm9icnplZy5wbCIsInRnb3J5LnBsIiwidHVyZWsucGwiLCJ0eWNoeS5wbCIsInVzdGthLnBsIiwid2FsYnJ6eWNoLnBsIiwid2FybWlhLnBsIiwid2Fyc3phd2EucGwiLCJ3YXcucGwiLCJ3ZWdyb3cucGwiLCJ3aWVsdW4ucGwiLCJ3bG9jbC5w'@;
put 'bCIsIndsb2NsYXdlay5wbCIsIndvZHppc2xhdy5wbCIsIndvbG9taW4ucGwiLCJ3cm9jbGF3LnBsIiwiemFjaHBvbW9yLnBsIiwiemFnYW4ucGwiLCJ6YXJvdy5wbCIsInpnb3JhLnBsIiwiemdvcnplbGVjLnBsIiwicG0iLCJwbiIsImdvdi5wbiIsImNvLnBuIiwib3JnLnBuIiwiZWR1LnBu'@;
put 'IiwibmV0LnBuIiwicG9zdCIsInByIiwiY29tLnByIiwibmV0LnByIiwib3JnLnByIiwiZ292LnByIiwiZWR1LnByIiwiaXNsYS5wciIsInByby5wciIsImJpei5wciIsImluZm8ucHIiLCJuYW1lLnByIiwiZXN0LnByIiwicHJvZi5wciIsImFjLnByIiwicHJvIiwiYWFhLnBybyIsImFjYS5w'@;
put 'cm8iLCJhY2N0LnBybyIsImF2b2NhdC5wcm8iLCJiYXIucHJvIiwiY3BhLnBybyIsImVuZy5wcm8iLCJqdXIucHJvIiwibGF3LnBybyIsIm1lZC5wcm8iLCJyZWNodC5wcm8iLCJwcyIsImVkdS5wcyIsImdvdi5wcyIsInNlYy5wcyIsInBsby5wcyIsImNvbS5wcyIsIm9yZy5wcyIsIm5ldC5w'@;
put 'cyIsInB0IiwibmV0LnB0IiwiZ292LnB0Iiwib3JnLnB0IiwiZWR1LnB0IiwiaW50LnB0IiwicHVibC5wdCIsImNvbS5wdCIsIm5vbWUucHQiLCJwdyIsImNvLnB3IiwibmUucHciLCJvci5wdyIsImVkLnB3IiwiZ28ucHciLCJiZWxhdS5wdyIsInB5IiwiY29tLnB5IiwiY29vcC5weSIsImVk'@;
put 'dS5weSIsImdvdi5weSIsIm1pbC5weSIsIm5ldC5weSIsIm9yZy5weSIsInFhIiwiY29tLnFhIiwiZWR1LnFhIiwiZ292LnFhIiwibWlsLnFhIiwibmFtZS5xYSIsIm5ldC5xYSIsIm9yZy5xYSIsInNjaC5xYSIsInJlIiwiYXNzby5yZSIsImNvbS5yZSIsIm5vbS5yZSIsInJvIiwiYXJ0cy5y'@;
put 'byIsImNvbS5ybyIsImZpcm0ucm8iLCJpbmZvLnJvIiwibm9tLnJvIiwibnQucm8iLCJvcmcucm8iLCJyZWMucm8iLCJzdG9yZS5ybyIsInRtLnJvIiwid3d3LnJvIiwicnMiLCJhYy5ycyIsImNvLnJzIiwiZWR1LnJzIiwiZ292LnJzIiwiaW4ucnMiLCJvcmcucnMiLCJydSIsInJ3IiwiYWMu'@;
put 'cnciLCJjby5ydyIsImNvb3AucnciLCJnb3YucnciLCJtaWwucnciLCJuZXQucnciLCJvcmcucnciLCJzYSIsImNvbS5zYSIsIm5ldC5zYSIsIm9yZy5zYSIsImdvdi5zYSIsIm1lZC5zYSIsInB1Yi5zYSIsImVkdS5zYSIsInNjaC5zYSIsInNiIiwiY29tLnNiIiwiZWR1LnNiIiwiZ292LnNi'@;
put 'IiwibmV0LnNiIiwib3JnLnNiIiwic2MiLCJjb20uc2MiLCJnb3Yuc2MiLCJuZXQuc2MiLCJvcmcuc2MiLCJlZHUuc2MiLCJzZCIsImNvbS5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsImVkdS5zZCIsIm1lZC5zZCIsInR2LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsInNlIiwiYS5zZSIsImFjLnNl'@;
put 'IiwiYi5zZSIsImJkLnNlIiwiYnJhbmQuc2UiLCJjLnNlIiwiZC5zZSIsImUuc2UiLCJmLnNlIiwiZmguc2UiLCJmaHNrLnNlIiwiZmh2LnNlIiwiZy5zZSIsImguc2UiLCJpLnNlIiwiay5zZSIsImtvbWZvcmIuc2UiLCJrb21tdW5hbGZvcmJ1bmQuc2UiLCJrb212dXguc2UiLCJsLnNlIiwi'@;
put 'bGFuYmliLnNlIiwibS5zZSIsIm4uc2UiLCJuYXR1cmJydWtzZ3ltbi5zZSIsIm8uc2UiLCJvcmcuc2UiLCJwLnNlIiwicGFydGkuc2UiLCJwcC5zZSIsInByZXNzLnNlIiwici5zZSIsInMuc2UiLCJ0LnNlIiwidG0uc2UiLCJ1LnNlIiwidy5zZSIsInguc2UiLCJ5LnNlIiwiei5zZSIsInNn'@;
put 'IiwiY29tLnNnIiwibmV0LnNnIiwib3JnLnNnIiwiZ292LnNnIiwiZWR1LnNnIiwicGVyLnNnIiwic2giLCJjb20uc2giLCJuZXQuc2giLCJnb3Yuc2giLCJvcmcuc2giLCJtaWwuc2giLCJzaSIsInNqIiwic2siLCJzbCIsImNvbS5zbCIsIm5ldC5zbCIsImVkdS5zbCIsImdvdi5zbCIsIm9y'@;
put 'Zy5zbCIsInNtIiwic24iLCJhcnQuc24iLCJjb20uc24iLCJlZHUuc24iLCJnb3V2LnNuIiwib3JnLnNuIiwicGVyc28uc24iLCJ1bml2LnNuIiwic28iLCJjb20uc28iLCJlZHUuc28iLCJnb3Yuc28iLCJtZS5zbyIsIm5ldC5zbyIsIm9yZy5zbyIsInNyIiwic3MiLCJiaXouc3MiLCJjb20u'@;
put 'c3MiLCJlZHUuc3MiLCJnb3Yuc3MiLCJtZS5zcyIsIm5ldC5zcyIsIm9yZy5zcyIsInNjaC5zcyIsInN0IiwiY28uc3QiLCJjb20uc3QiLCJjb25zdWxhZG8uc3QiLCJlZHUuc3QiLCJlbWJhaXhhZGEuc3QiLCJtaWwuc3QiLCJuZXQuc3QiLCJvcmcuc3QiLCJwcmluY2lwZS5zdCIsInNhb3Rv'@;
put 'bWUuc3QiLCJzdG9yZS5zdCIsInN1Iiwic3YiLCJjb20uc3YiLCJlZHUuc3YiLCJnb2Iuc3YiLCJvcmcuc3YiLCJyZWQuc3YiLCJzeCIsImdvdi5zeCIsInN5IiwiZWR1LnN5IiwiZ292LnN5IiwibmV0LnN5IiwibWlsLnN5IiwiY29tLnN5Iiwib3JnLnN5Iiwic3oiLCJjby5zeiIsImFjLnN6'@;
put 'Iiwib3JnLnN6IiwidGMiLCJ0ZCIsInRlbCIsInRmIiwidGciLCJ0aCIsImFjLnRoIiwiY28udGgiLCJnby50aCIsImluLnRoIiwibWkudGgiLCJuZXQudGgiLCJvci50aCIsInRqIiwiYWMudGoiLCJiaXoudGoiLCJjby50aiIsImNvbS50aiIsImVkdS50aiIsImdvLnRqIiwiZ292LnRqIiwi'@;
put 'aW50LnRqIiwibWlsLnRqIiwibmFtZS50aiIsIm5ldC50aiIsIm5pYy50aiIsIm9yZy50aiIsInRlc3QudGoiLCJ3ZWIudGoiLCJ0ayIsInRsIiwiZ292LnRsIiwidG0iLCJjb20udG0iLCJjby50bSIsIm9yZy50bSIsIm5ldC50bSIsIm5vbS50bSIsImdvdi50bSIsIm1pbC50bSIsImVkdS50'@;
put 'bSIsInRuIiwiY29tLnRuIiwiZW5zLnRuIiwiZmluLnRuIiwiZ292LnRuIiwiaW5kLnRuIiwiaW5mby50biIsImludGwudG4iLCJtaW5jb20udG4iLCJuYXQudG4iLCJuZXQudG4iLCJvcmcudG4iLCJwZXJzby50biIsInRvdXJpc20udG4iLCJ0byIsImNvbS50byIsImdvdi50byIsIm5ldC50'@;
put 'byIsIm9yZy50byIsImVkdS50byIsIm1pbC50byIsInRyIiwiYXYudHIiLCJiYnMudHIiLCJiZWwudHIiLCJiaXoudHIiLCJjb20udHIiLCJkci50ciIsImVkdS50ciIsImdlbi50ciIsImdvdi50ciIsImluZm8udHIiLCJtaWwudHIiLCJrMTIudHIiLCJrZXAudHIiLCJuYW1lLnRyIiwibmV0'@;
put 'LnRyIiwib3JnLnRyIiwicG9sLnRyIiwidGVsLnRyIiwidHNrLnRyIiwidHYudHIiLCJ3ZWIudHIiLCJuYy50ciIsImdvdi5uYy50ciIsInR0IiwiY28udHQiLCJjb20udHQiLCJvcmcudHQiLCJuZXQudHQiLCJiaXoudHQiLCJpbmZvLnR0IiwicHJvLnR0IiwiaW50LnR0IiwiY29vcC50dCIs'@;
put 'ImpvYnMudHQiLCJtb2JpLnR0IiwidHJhdmVsLnR0IiwibXVzZXVtLnR0IiwiYWVyby50dCIsIm5hbWUudHQiLCJnb3YudHQiLCJlZHUudHQiLCJ0diIsInR3IiwiZWR1LnR3IiwiZ292LnR3IiwibWlsLnR3IiwiY29tLnR3IiwibmV0LnR3Iiwib3JnLnR3IiwiaWR2LnR3IiwiZ2FtZS50dyIs'@;
put 'ImViaXoudHciLCJjbHViLnR3IiwiXHU3ZGIyXHU4ZGVmLnR3IiwiXHU3ZDQ0XHU3ZTU0LnR3IiwiXHU1NTQ2XHU2OTZkLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6'@;
put 'Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVh'@;
put 'IiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIs'@;
put 'ImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3J5bS51YSIsImtzLnVhIiwia3YudWEiLCJreWl2LnVhIiwibGcudWEiLCJsdC51YSIsImx1Z2Fuc2su'@;
put 'dWEiLCJsdXRzay51YSIsImx2LnVhIiwibHZpdi51YSIsIm1rLnVhIiwibXlrb2xhaXYudWEiLCJuaWtvbGFldi51YSIsIm9kLnVhIiwib2Rlc2EudWEiLCJvZGVzc2EudWEiLCJwbC51YSIsInBvbHRhdmEudWEiLCJyaXZuZS51YSIsInJvdm5vLnVhIiwicnYudWEiLCJzYi51YSIsInNlYmFz'@;
put 'dG9wb2wudWEiLCJzZXZhc3RvcG9sLnVhIiwic20udWEiLCJzdW15LnVhIiwidGUudWEiLCJ0ZXJub3BpbC51YSIsInV6LnVhIiwidXpoZ29yb2QudWEiLCJ2aW5uaWNhLnVhIiwidmlubnl0c2lhLnVhIiwidm4udWEiLCJ2b2x5bi51YSIsInlhbHRhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6'@;
put 'YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiY28udWciLCJvci51ZyIsImFjLnVnIiwic2MudWciLCJnby51ZyIsIm5lLnVnIiwiY29tLnVnIiwib3JnLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRk'@;
put 'LnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJj'@;
put 'YS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMi'@;
put 'LCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgu'@;
put 'dXMiLCJ1dC51cyIsInZpLnVzIiwidnQudXMiLCJ2YS51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwi'@;
put 'azEyLmRjLnVzIiwiazEyLmRlLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVz'@;
put 'IiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9o'@;
put 'LnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLnZhLnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiazEy'@;
put 'Lnd5LnVzIiwiY2MuYWsudXMiLCJjYy5hbC51cyIsImNjLmFyLnVzIiwiY2MuYXMudXMiLCJjYy5hei51cyIsImNjLmNhLnVzIiwiY2MuY28udXMiLCJjYy5jdC51cyIsImNjLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNj'@;
put 'LmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNj'@;
put 'Lm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNj'@;
put 'LnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmkudXMiLCJjYy52dC51cyIsImNjLnZhLnVzIiwiY2Mud2EudXMiLCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJsaWIuYWsudXMiLCJsaWIuYWwudXMiLCJsaWIuYXIudXMiLCJsaWIuYXMudXMi'@;
put 'LCJsaWIuYXoudXMiLCJsaWIuY2EudXMiLCJsaWIuY28udXMiLCJsaWIuY3QudXMiLCJsaWIuZGMudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3Mu'@;
put 'dXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIu'@;
put 'bmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJs'@;
put 'aWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIudmEudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJwdnQuazEyLm1hLnVzIiwiY2h0ci5rMTIubWEudXMiLCJwYXJvY2guazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwi'@;
put 'Y29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJj'@;
put 'b20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwibmV0LnZjIiwib3JnLnZjIiwiZ292LnZjIiwibWlsLnZjIiwiZWR1LnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZl'@;
put 'IiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZp'@;
put 'Iiwidm4iLCJjb20udm4iLCJuZXQudm4iLCJvcmcudm4iLCJlZHUudm4iLCJnb3Yudm4iLCJpbnQudm4iLCJhYy52biIsImJpei52biIsImluZm8udm4iLCJuYW1lLnZuIiwicHJvLnZuIiwiaGVhbHRoLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIs'@;
put 'IndzIiwiY29tLndzIiwibmV0LndzIiwib3JnLndzIiwiZ292LndzIiwiZWR1LndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJc'@;
put 'dTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0'@;
put 'MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUxNmNcdTUzZjguXHU5OTk5XHU2ZTJmIiwiXHU2NTU5XHU4'@;
put 'MGIyLlx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU3ZGIyXHU3ZDYxLlx1OTk5OVx1NmUyZiIsIlx1N2Q0NFx1N2U1NC5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRc'@;
put 'dTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBc'@;
put 'dTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBh'@;
put 'MmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2'@;
put 'MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlc'@;
put 'dTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2'@;
put 'MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0'@;
put 'NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzMVx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzQuXHUwNDQxXHUwNDQwXHUwNDMxIiwi'@;
put 'XHUwNDQzXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzMFx1MDQzYS5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2'@;
put 'MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2'@;
put 'MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFc'@;
put 'dTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjhcdTBlMzZcdTBlMDFcdTBlMjlcdTBlMzIuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyM1x1MGUzMVx1MGUxMFx1MGUxYVx1'@;
put 'MGUzMlx1MGUyNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTQwXHUwZTE5XHUwZTQ3XHUwZTE1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBl'@;
put 'NDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVk'@;
put 'dS55ZSIsImdvdi55ZSIsIm5ldC55ZSIsIm1pbC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJu'@;
put 'b20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28u'@;
put 'enciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJhcnRoIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28i'@;
put 'LCJhY3RvciIsImFkYWMiLCJhZHMiLCJhZHVsdCIsImFlZyIsImFldG5hIiwiYWZsIiwiYWZyaWNhIiwiYWdha2hhbiIsImFnZW5jeSIsImFpZyIsImFpcmJ1cyIsImFpcmZvcmNlIiwiYWlydGVsIiwiYWtkbiIsImFsZmFyb21lbyIsImFsaWJhYmEiLCJhbGlwYXkiLCJhbGxmaW5hbnoiLCJh'@;
put 'bGxzdGF0ZSIsImFsbHkiLCJhbHNhY2UiLCJhbHN0b20iLCJhbWF6b24iLCJhbWVyaWNhbmV4cHJlc3MiLCJhbWVyaWNhbmZhbWlseSIsImFtZXgiLCJhbWZhbSIsImFtaWNhIiwiYW1zdGVyZGFtIiwiYW5hbHl0aWNzIiwiYW5kcm9pZCIsImFucXVhbiIsImFueiIsImFvbCIsImFwYXJ0bWVu'@;
put 'dHMiLCJhcHAiLCJhcHBsZSIsImFxdWFyZWxsZSIsImFyYWIiLCJhcmFtY28iLCJhcmNoaSIsImFybXkiLCJhcnQiLCJhcnRlIiwiYXNkYSIsImFzc29jaWF0ZXMiLCJhdGhsZXRhIiwiYXR0b3JuZXkiLCJhdWN0aW9uIiwiYXVkaSIsImF1ZGlibGUiLCJhdWRpbyIsImF1c3Bvc3QiLCJhdXRo'@;
put 'b3IiLCJhdXRvIiwiYXV0b3MiLCJhdmlhbmNhIiwiYXdzIiwiYXhhIiwiYXp1cmUiLCJiYWJ5IiwiYmFpZHUiLCJiYW5hbWV4IiwiYmFuYW5hcmVwdWJsaWMiLCJiYW5kIiwiYmFuayIsImJhciIsImJhcmNlbG9uYSIsImJhcmNsYXljYXJkIiwiYmFyY2xheXMiLCJiYXJlZm9vdCIsImJhcmdh'@;
put 'aW5zIiwiYmFzZWJhbGwiLCJiYXNrZXRiYWxsIiwiYmF1aGF1cyIsImJheWVybiIsImJiYyIsImJidCIsImJidmEiLCJiY2ciLCJiY24iLCJiZWF0cyIsImJlYXV0eSIsImJlZXIiLCJiZW50bGV5IiwiYmVybGluIiwiYmVzdCIsImJlc3RidXkiLCJiZXQiLCJiaGFydGkiLCJiaWJsZSIsImJp'@;
put 'ZCIsImJpa2UiLCJiaW5nIiwiYmluZ28iLCJiaW8iLCJibGFjayIsImJsYWNrZnJpZGF5IiwiYmxvY2tidXN0ZXIiLCJibG9nIiwiYmxvb21iZXJnIiwiYmx1ZSIsImJtcyIsImJtdyIsImJucHBhcmliYXMiLCJib2F0cyIsImJvZWhyaW5nZXIiLCJib2ZhIiwiYm9tIiwiYm9uZCIsImJvbyIs'@;
put 'ImJvb2siLCJib29raW5nIiwiYm9zY2giLCJib3N0aWsiLCJib3N0b24iLCJib3QiLCJib3V0aXF1ZSIsImJveCIsImJyYWRlc2NvIiwiYnJpZGdlc3RvbmUiLCJicm9hZHdheSIsImJyb2tlciIsImJyb3RoZXIiLCJicnVzc2VscyIsImJ1Z2F0dGkiLCJidWlsZCIsImJ1aWxkZXJzIiwiYnVz'@;
put 'aW5lc3MiLCJidXkiLCJidXp6IiwiYnpoIiwiY2FiIiwiY2FmZSIsImNhbCIsImNhbGwiLCJjYWx2aW5rbGVpbiIsImNhbSIsImNhbWVyYSIsImNhbXAiLCJjYW5jZXJyZXNlYXJjaCIsImNhbm9uIiwiY2FwZXRvd24iLCJjYXBpdGFsIiwiY2FwaXRhbG9uZSIsImNhciIsImNhcmF2YW4iLCJj'@;
put 'YXJkcyIsImNhcmUiLCJjYXJlZXIiLCJjYXJlZXJzIiwiY2FycyIsImNhc2EiLCJjYXNlIiwiY2FzaCIsImNhc2lubyIsImNhdGVyaW5nIiwiY2F0aG9saWMiLCJjYmEiLCJjYm4iLCJjYnJlIiwiY2JzIiwiY2VudGVyIiwiY2VvIiwiY2VybiIsImNmYSIsImNmZCIsImNoYW5lbCIsImNoYW5u'@;
put 'ZWwiLCJjaGFyaXR5IiwiY2hhc2UiLCJjaGF0IiwiY2hlYXAiLCJjaGludGFpIiwiY2hyaXN0bWFzIiwiY2hyb21lIiwiY2h1cmNoIiwiY2lwcmlhbmkiLCJjaXJjbGUiLCJjaXNjbyIsImNpdGFkZWwiLCJjaXRpIiwiY2l0aWMiLCJjaXR5IiwiY2l0eWVhdHMiLCJjbGFpbXMiLCJjbGVhbmlu'@;
put 'ZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9nbmUiLCJjb21jYXN0IiwiY29tbWJhbmsiLCJjb21tdW5pdHkiLCJjb21wYW55IiwiY29tcGFyZSIs'@;
put 'ImNvbXB1dGVyIiwiY29tc2VjIiwiY29uZG9zIiwiY29uc3RydWN0aW9uIiwiY29uc3VsdGluZyIsImNvbnRhY3QiLCJjb250cmFjdG9ycyIsImNvb2tpbmciLCJjb29raW5nY2hhbm5lbCIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwi'@;
put 'Y3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWJ1ciIsImRhZCIsImRhbmNlIiwiZGF0YSIsImRhdGUiLCJkYXRpbmciLCJkYXRzdW4i'@;
put 'LCJkYXkiLCJkY2xrIiwiZGRzIiwiZGVhbCIsImRlYWxlciIsImRlYWxzIiwiZGVncmVlIiwiZGVsaXZlcnkiLCJkZWxsIiwiZGVsb2l0dGUiLCJkZWx0YSIsImRlbW9jcmF0IiwiZGVudGFsIiwiZGVudGlzdCIsImRlc2kiLCJkZXNpZ24iLCJkZXYiLCJkaGwiLCJkaWFtb25kcyIsImRpZXQi'@;
put 'LCJkaWdpdGFsIiwiZGlyZWN0IiwiZGlyZWN0b3J5IiwiZGlzY291bnQiLCJkaXNjb3ZlciIsImRpc2giLCJkaXkiLCJkbnAiLCJkb2NzIiwiZG9jdG9yIiwiZG9nIiwiZG9tYWlucyIsImRvdCIsImRvd25sb2FkIiwiZHJpdmUiLCJkdHYiLCJkdWJhaSIsImR1bmxvcCIsImR1cG9udCIsImR1'@;
put 'cmJhbiIsImR2YWciLCJkdnIiLCJlYXJ0aCIsImVhdCIsImVjbyIsImVkZWthIiwiZWR1Y2F0aW9uIiwiZW1haWwiLCJlbWVyY2siLCJlbmVyZ3kiLCJlbmdpbmVlciIsImVuZ2luZWVyaW5nIiwiZW50ZXJwcmlzZXMiLCJlcHNvbiIsImVxdWlwbWVudCIsImVyaWNzc29uIiwiZXJuaSIsImVz'@;
put 'cSIsImVzdGF0ZSIsImV0aXNhbGF0IiwiZXVyb3Zpc2lvbiIsImV1cyIsImV2ZW50cyIsImV4Y2hhbmdlIiwiZXhwZXJ0IiwiZXhwb3NlZCIsImV4cHJlc3MiLCJleHRyYXNwYWNlIiwiZmFnZSIsImZhaWwiLCJmYWlyd2luZHMiLCJmYWl0aCIsImZhbWlseSIsImZhbiIsImZhbnMiLCJmYXJt'@;
put 'IiwiZmFybWVycyIsImZhc2hpb24iLCJmYXN0IiwiZmVkZXgiLCJmZWVkYmFjayIsImZlcnJhcmkiLCJmZXJyZXJvIiwiZmlhdCIsImZpZGVsaXR5IiwiZmlkbyIsImZpbG0iLCJmaW5hbCIsImZpbmFuY2UiLCJmaW5hbmNpYWwiLCJmaXJlIiwiZmlyZXN0b25lIiwiZmlybWRhbGUiLCJmaXNo'@;
put 'IiwiZmlzaGluZyIsImZpdCIsImZpdG5lc3MiLCJmbGlja3IiLCJmbGlnaHRzIiwiZmxpciIsImZsb3Jpc3QiLCJmbG93ZXJzIiwiZmx5IiwiZm9vIiwiZm9vZCIsImZvb2RuZXR3b3JrIiwiZm9vdGJhbGwiLCJmb3JkIiwiZm9yZXgiLCJmb3JzYWxlIiwiZm9ydW0iLCJmb3VuZGF0aW9uIiwi'@;
put 'Zm94IiwiZnJlZSIsImZyZXNlbml1cyIsImZybCIsImZyb2dhbnMiLCJmcm9udGRvb3IiLCJmcm9udGllciIsImZ0ciIsImZ1aml0c3UiLCJmdW4iLCJmdW5kIiwiZnVybml0dXJlIiwiZnV0Ym9sIiwiZnlpIiwiZ2FsIiwiZ2FsbGVyeSIsImdhbGxvIiwiZ2FsbHVwIiwiZ2FtZSIsImdhbWVz'@;
put 'IiwiZ2FwIiwiZ2FyZGVuIiwiZ2F5IiwiZ2JpeiIsImdkbiIsImdlYSIsImdlbnQiLCJnZW50aW5nIiwiZ2VvcmdlIiwiZ2dlZSIsImdpZnQiLCJnaWZ0cyIsImdpdmVzIiwiZ2l2aW5nIiwiZ2xhc3MiLCJnbGUiLCJnbG9iYWwiLCJnbG9ibyIsImdtYWlsIiwiZ21iaCIsImdtbyIsImdteCIs'@;
put 'ImdvZGFkZHkiLCJnb2xkIiwiZ29sZHBvaW50IiwiZ29sZiIsImdvbyIsImdvb2R5ZWFyIiwiZ29vZyIsImdvb2dsZSIsImdvcCIsImdvdCIsImdyYWluZ2VyIiwiZ3JhcGhpY3MiLCJncmF0aXMiLCJncmVlbiIsImdyaXBlIiwiZ3JvY2VyeSIsImdyb3VwIiwiZ3VhcmRpYW4iLCJndWNjaSIs'@;
put 'Imd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGd0diIsImhpcGhvcCIsImhp'@;
put 'c2FtaXRzdSIsImhpdGFjaGkiLCJoaXYiLCJoa3QiLCJob2NrZXkiLCJob2xkaW5ncyIsImhvbGlkYXkiLCJob21lZGVwb3QiLCJob21lZ29vZHMiLCJob21lcyIsImhvbWVzZW5zZSIsImhvbmRhIiwiaG9yc2UiLCJob3NwaXRhbCIsImhvc3QiLCJob3N0aW5nIiwiaG90IiwiaG90ZWxlcyIs'@;
put 'ImhvdGVscyIsImhvdG1haWwiLCJob3VzZSIsImhvdyIsImhzYmMiLCJodWdoZXMiLCJoeWF0dCIsImh5dW5kYWkiLCJpYm0iLCJpY2JjIiwiaWNlIiwiaWN1IiwiaWVlZSIsImlmbSIsImlrYW5vIiwiaW1hbWF0IiwiaW1kYiIsImltbW8iLCJpbW1vYmlsaWVuIiwiaW5jIiwiaW5kdXN0cmll'@;
put 'cyIsImluZmluaXRpIiwiaW5nIiwiaW5rIiwiaW5zdGl0dXRlIiwiaW5zdXJhbmNlIiwiaW5zdXJlIiwiaW50ZXJuYXRpb25hbCIsImludHVpdCIsImludmVzdG1lbnRzIiwiaXBpcmFuZ2EiLCJpcmlzaCIsImlzbWFpbGkiLCJpc3QiLCJpc3RhbmJ1bCIsIml0YXUiLCJpdHYiLCJqYWd1YXIi'@;
put 'LCJqYXZhIiwiamNiIiwiamVlcCIsImpldHp0IiwiamV3ZWxyeSIsImppbyIsImpsbCIsImptcCIsImpuaiIsImpvYnVyZyIsImpvdCIsImpveSIsImpwbW9yZ2FuIiwianBycyIsImp1ZWdvcyIsImp1bmlwZXIiLCJrYXVmZW4iLCJrZGRpIiwia2Vycnlob3RlbHMiLCJrZXJyeWxvZ2lzdGlj'@;
put 'cyIsImtlcnJ5cHJvcGVydGllcyIsImtmaCIsImtpYSIsImtpZHMiLCJraW0iLCJraW5kZXIiLCJraW5kbGUiLCJraXRjaGVuIiwia2l3aSIsImtvZWxuIiwia29tYXRzdSIsImtvc2hlciIsImtwbWciLCJrcG4iLCJrcmQiLCJrcmVkIiwia3Vva2dyb3VwIiwia3lvdG8iLCJsYWNhaXhhIiwi'@;
put 'bGFtYm9yZ2hpbmkiLCJsYW1lciIsImxhbmNhc3RlciIsImxhbmNpYSIsImxhbmQiLCJsYW5kcm92ZXIiLCJsYW54ZXNzIiwibGFzYWxsZSIsImxhdCIsImxhdGlubyIsImxhdHJvYmUiLCJsYXciLCJsYXd5ZXIiLCJsZHMiLCJsZWFzZSIsImxlY2xlcmMiLCJsZWZyYWsiLCJsZWdhbCIsImxl'@;
put 'Z28iLCJsZXh1cyIsImxnYnQiLCJsaWRsIiwibGlmZSIsImxpZmVpbnN1cmFuY2UiLCJsaWZlc3R5bGUiLCJsaWdodGluZyIsImxpa2UiLCJsaWxseSIsImxpbWl0ZWQiLCJsaW1vIiwibGluY29sbiIsImxpbmRlIiwibGluayIsImxpcHN5IiwibGl2ZSIsImxpdmluZyIsImxsYyIsImxscCIs'@;
put 'ImxvYW4iLCJsb2FucyIsImxvY2tlciIsImxvY3VzIiwibG9mdCIsImxvbCIsImxvbmRvbiIsImxvdHRlIiwibG90dG8iLCJsb3ZlIiwibHBsIiwibHBsZmluYW5jaWFsIiwibHRkIiwibHRkYSIsImx1bmRiZWNrIiwibHV4ZSIsImx1eHVyeSIsIm1hY3lzIiwibWFkcmlkIiwibWFpZiIsIm1h'@;
put 'aXNvbiIsIm1ha2V1cCIsIm1hbiIsIm1hbmFnZW1lbnQiLCJtYW5nbyIsIm1hcCIsIm1hcmtldCIsIm1hcmtldGluZyIsIm1hcmtldHMiLCJtYXJyaW90dCIsIm1hcnNoYWxscyIsIm1hc2VyYXRpIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxi'@;
put 'b3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2ttc2QiLCJtaWFtaSIsIm1pY3Jvc29mdCIsIm1pbmkiLCJtaW50IiwibWl0IiwibWl0c3ViaXNoaSIsIm1sYiIsIm1scyIsIm1tYSIsIm1vYmlsZSIsIm1vZGEiLCJtb2UiLCJtb2kiLCJtb20iLCJtb25hc2giLCJt'@;
put 'b25leSIsIm1vbnN0ZXIiLCJtb3Jtb24iLCJtb3J0Z2FnZSIsIm1vc2NvdyIsIm1vdG8iLCJtb3RvcmN5Y2xlcyIsIm1vdiIsIm1vdmllIiwibXNkIiwibXRuIiwibXRyIiwibXVzaWMiLCJtdXR1YWwiLCJuYWIiLCJuYWdveWEiLCJuYXR1cmEiLCJuYXZ5IiwibmJhIiwibmVjIiwibmV0YmFu'@;
put 'ayIsIm5ldGZsaXgiLCJuZXR3b3JrIiwibmV1c3RhciIsIm5ldyIsIm5ld3MiLCJuZXh0IiwibmV4dGRpcmVjdCIsIm5leHVzIiwibmZsIiwibmdvIiwibmhrIiwibmljbyIsIm5pa2UiLCJuaWtvbiIsIm5pbmphIiwibmlzc2FuIiwibmlzc2F5Iiwibm9raWEiLCJub3J0aHdlc3Rlcm5tdXR1'@;
put 'YWwiLCJub3J0b24iLCJub3ciLCJub3dydXoiLCJub3d0diIsIm5yYSIsIm5ydyIsIm50dCIsIm55YyIsIm9iaSIsIm9ic2VydmVyIiwib2ZmaWNlIiwib2tpbmF3YSIsIm9sYXlhbiIsIm9sYXlhbmdyb3VwIiwib2xkbmF2eSIsIm9sbG8iLCJvbWVnYSIsIm9uZSIsIm9uZyIsIm9ubCIsIm9u'@;
put 'bGluZSIsIm9vbyIsIm9wZW4iLCJvcmFjbGUiLCJvcmFuZ2UiLCJvcmdhbmljIiwib3JpZ2lucyIsIm9zYWthIiwib3RzdWthIiwib3R0Iiwib3ZoIiwicGFnZSIsInBhbmFzb25pYyIsInBhcmlzIiwicGFycyIsInBhcnRuZXJzIiwicGFydHMiLCJwYXJ0eSIsInBhc3NhZ2VucyIsInBheSIs'@;
put 'InBjY3ciLCJwZXQiLCJwZml6ZXIiLCJwaGFybWFjeSIsInBoZCIsInBoaWxpcHMiLCJwaG9uZSIsInBob3RvIiwicGhvdG9ncmFwaHkiLCJwaG90b3MiLCJwaHlzaW8iLCJwaWNzIiwicGljdGV0IiwicGljdHVyZXMiLCJwaWQiLCJwaW4iLCJwaW5nIiwicGluayIsInBpb25lZXIiLCJwaXp6'@;
put 'YSIsInBsYWNlIiwicGxheSIsInBsYXlzdGF0aW9uIiwicGx1bWJpbmciLCJwbHVzIiwicG5jIiwicG9obCIsInBva2VyIiwicG9saXRpZSIsInBvcm4iLCJwcmFtZXJpY2EiLCJwcmF4aSIsInByZXNzIiwicHJpbWUiLCJwcm9kIiwicHJvZHVjdGlvbnMiLCJwcm9mIiwicHJvZ3Jlc3NpdmUi'@;
put 'LCJwcm9tbyIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInByb3RlY3Rpb24iLCJwcnUiLCJwcnVkZW50aWFsIiwicHViIiwicHdjIiwicXBvbiIsInF1ZWJlYyIsInF1ZXN0IiwicmFjaW5nIiwicmFkaW8iLCJyZWFkIiwicmVhbGVzdGF0ZSIsInJlYWx0b3IiLCJyZWFsdHkiLCJyZWNpcGVz'@;
put 'IiwicmVkIiwicmVkc3RvbmUiLCJyZWR1bWJyZWxsYSIsInJlaGFiIiwicmVpc2UiLCJyZWlzZW4iLCJyZWl0IiwicmVsaWFuY2UiLCJyZW4iLCJyZW50IiwicmVudGFscyIsInJlcGFpciIsInJlcG9ydCIsInJlcHVibGljYW4iLCJyZXN0IiwicmVzdGF1cmFudCIsInJldmlldyIsInJldmll'@;
put 'd3MiLCJyZXhyb3RoIiwicmljaCIsInJpY2hhcmRsaSIsInJpY29oIiwicmlsIiwicmlvIiwicmlwIiwicm9jaGVyIiwicm9ja3MiLCJyb2RlbyIsInJvZ2VycyIsInJvb20iLCJyc3ZwIiwicnVnYnkiLCJydWhyIiwicnVuIiwicndlIiwicnl1a3l1Iiwic2FhcmxhbmQiLCJzYWZlIiwic2Fm'@;
put 'ZXR5Iiwic2FrdXJhIiwic2FsZSIsInNhbG9uIiwic2Ftc2NsdWIiLCJzYW1zdW5nIiwic2FuZHZpayIsInNhbmR2aWtjb3JvbWFudCIsInNhbm9maSIsInNhcCIsInNhcmwiLCJzYXMiLCJzYXZlIiwic2F4byIsInNiaSIsInNicyIsInNjYSIsInNjYiIsInNjaGFlZmZsZXIiLCJzY2htaWR0'@;
put 'Iiwic2Nob2xhcnNoaXBzIiwic2Nob29sIiwic2NodWxlIiwic2Nod2FyeiIsInNjaWVuY2UiLCJzY290Iiwic2VhcmNoIiwic2VhdCIsInNlY3VyZSIsInNlY3VyaXR5Iiwic2VlayIsInNlbGVjdCIsInNlbmVyIiwic2VydmljZXMiLCJzZXMiLCJzZXZlbiIsInNldyIsInNleCIsInNleHki'@;
put 'LCJzZnIiLCJzaGFuZ3JpbGEiLCJzaGFycCIsInNoYXciLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2hvd3RpbWUiLCJzaWxrIiwic2luYSIsInNpbmdsZXMiLCJzaXRlIiwic2tpIiwic2tpbiIsInNreSIsInNr'@;
put 'eXBlIiwic2xpbmciLCJzbWFydCIsInNtaWxlIiwic25jZiIsInNvY2NlciIsInNvY2lhbCIsInNvZnRiYW5rIiwic29mdHdhcmUiLCJzb2h1Iiwic29sYXIiLCJzb2x1dGlvbnMiLCJzb25nIiwic29ueSIsInNveSIsInNwYSIsInNwYWNlIiwic3BvcnQiLCJzcG90Iiwic3JsIiwic3RhZGEi'@;
put 'LCJzdGFwbGVzIiwic3RhciIsInN0YXRlYmFuayIsInN0YXRlZmFybSIsInN0YyIsInN0Y2dyb3VwIiwic3RvY2tob2xtIiwic3RvcmFnZSIsInN0b3JlIiwic3RyZWFtIiwic3R1ZGlvIiwic3R1ZHkiLCJzdHlsZSIsInN1Y2tzIiwic3VwcGxpZXMiLCJzdXBwbHkiLCJzdXBwb3J0Iiwic3Vy'@;
put 'ZiIsInN1cmdlcnkiLCJzdXp1a2kiLCJzd2F0Y2giLCJzd2lzcyIsInN5ZG5leSIsInN5c3RlbXMiLCJ0YWIiLCJ0YWlwZWkiLCJ0YWxrIiwidGFvYmFvIiwidGFyZ2V0IiwidGF0YW1vdG9ycyIsInRhdGFyIiwidGF0dG9vIiwidGF4IiwidGF4aSIsInRjaSIsInRkayIsInRlYW0iLCJ0ZWNo'@;
put 'IiwidGVjaG5vbG9neSIsInRlbWFzZWsiLCJ0ZW5uaXMiLCJ0ZXZhIiwidGhkIiwidGhlYXRlciIsInRoZWF0cmUiLCJ0aWFhIiwidGlja2V0cyIsInRpZW5kYSIsInRpZmZhbnkiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXki'@;
put 'LCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxjaGFubmVsIiwidHJhdmVsZXJzIiwidHJhdmVsZXJzaW5zdXJhbmNl'@;
put 'IiwidHJ1c3QiLCJ0cnYiLCJ0dWJlIiwidHVpIiwidHVuZXMiLCJ0dXNodSIsInR2cyIsInViYW5rIiwidWJzIiwidW5pY29tIiwidW5pdmVyc2l0eSIsInVubyIsInVvbCIsInVwcyIsInZhY2F0aW9ucyIsInZhbmEiLCJ2YW5ndWFyZCIsInZlZ2FzIiwidmVudHVyZXMiLCJ2ZXJpc2lnbiIs'@;
put 'InZlcnNpY2hlcnVuZyIsInZldCIsInZpYWplcyIsInZpZGVvIiwidmlnIiwidmlraW5nIiwidmlsbGFzIiwidmluIiwidmlwIiwidmlyZ2luIiwidmlzYSIsInZpc2lvbiIsInZpdmEiLCJ2aXZvIiwidmxhYW5kZXJlbiIsInZvZGthIiwidm9sa3N3YWdlbiIsInZvbHZvIiwidm90ZSIsInZv'@;
put 'dGluZyIsInZvdG8iLCJ2b3lhZ2UiLCJ2dWVsb3MiLCJ3YWxlcyIsIndhbG1hcnQiLCJ3YWx0ZXIiLCJ3YW5nIiwid2FuZ2dvdSIsIndhdGNoIiwid2F0Y2hlcyIsIndlYXRoZXIiLCJ3ZWF0aGVyY2hhbm5lbCIsIndlYmNhbSIsIndlYmVyIiwid2Vic2l0ZSIsIndlZGRpbmciLCJ3ZWlibyIs'@;
put 'IndlaXIiLCJ3aG9zd2hvIiwid2llbiIsIndpa2kiLCJ3aWxsaWFtaGlsbCIsIndpbiIsIndpbmRvd3MiLCJ3aW5lIiwid2lubmVycyIsIndtZSIsIndvbHRlcnNrbHV3ZXIiLCJ3b29kc2lkZSIsIndvcmsiLCJ3b3JrcyIsIndvcmxkIiwid293Iiwid3RjIiwid3RmIiwieGJveCIsInhlcm94'@;
put 'IiwieGZpbml0eSIsInhpaHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIs'@;
put 'Ilx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1'@;
put 'MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1'@;
put 'MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBh'@;
put 'Mlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIs'@;
put 'Ilx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1'@;
put 'OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OGJmYVx1NTdmYVx1NGU5YSIsIlx1OThkZlx1NTRjMSIsIlx1'@;
put 'OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDYyYVx1MDYzNVx1MDYyN1x1MDY0NFx1MDYyN1x1MDYyYSIsIlx1'@;
put 'MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1'@;
put 'NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0'@;
put 'MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUz'@;
put 'Ylx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1'@;
put 'NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY2MudWEiLCJpbmYu'@;
put 'dWEiLCJsdGQudWEiLCI2MTEudG8iLCJncmFwaG94LnVzIiwiKi5kZXZjZG5hY2Nlc3NvLmNvbSIsImFkb2JlYWVtY2xvdWQuY29tIiwiKi5kZXYuYWRvYmVhZW1jbG91ZC5jb20iLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiaGx4LnBhZ2UiLCJobHgzLnBhZ2UiLCJiZWVwLnBs'@;
put 'IiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImJhcnN5LmNhIiwiKi5jb21wdXRlLmVzdGF0ZSIsIiouYWxjZXMubmV0d29yayIsImthc3NlcnZlci5jb20iLCJhbHRlcnZpc3RhLm9yZyIsImFsd2F5c2RhdGEu'@;
put 'bmV0IiwiY2xvdWRmcm9udC5uZXQiLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbS5jbiIsInVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiY24tbm9ydGgtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwi'@;
put 'Y24tbm9ydGh3ZXN0LTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0zLmVsYXN0aWNiZWFuc3Rh'@;
put 'bGsuY29tIiwiYXAtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJjYS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1jZW50cmFs'@;
put 'LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJzYS1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0'@;
put 'LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3Ytd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiKi5l'@;
put 'bGIuYW1hem9uYXdzLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20uY24iLCJhd3NnbG9iYWxhY2NlbGVyYXRvci5jb20iLCJzMy5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1z'@;
put 'b3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0'@;
put 'LTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1leHRlcm5hbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXNhLWVhc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3Qt'@;
put 'My5hbWF6b25hd3MuY29tIiwiczMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9u'@;
put 'YXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdl'@;
put 'YnNpdGUtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJz'@;
put 'aXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50'@;
put 'cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3'@;
put 'cy5jb20iLCJ0M2wzcDBydC5uZXQiLCJ0ZWxlLmFtdW5lLm9yZyIsImFwaWdlZS5pbyIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJ1c2VyLmFzZWluZXQubmUuanAiLCJn'@;
put 'di52YyIsImQuZ3YudmMiLCJ1c2VyLnBhcnR5LmV1cyIsInBpbWllbnRhLm9yZyIsInBvaXZyb24ub3JnIiwicG90YWdlci5vcmciLCJzd2VldHBlcHBlci5vcmciLCJteWFzdXN0b3IuY29tIiwiY2RuLnByb2QuYXRsYXNzaWFuLWRldi5uZXQiLCJ0cmFuc2xhdGVkLnBhZ2UiLCJteWZyaXR6'@;
put 'Lm5ldCIsIm9uYXZzdGFjay5uZXQiLCIqLmF3ZGV2LmNhIiwiKi5hZHZpc29yLndzIiwiZWNvbW1lcmNlLXNob3AucGwiLCJiLWRhdGEuaW8iLCJiYWNrcGxhbmVhcHAuaW8iLCJiYWxlbmEtZGV2aWNlcy5jb20iLCJycy5iYSIsIiouYmFuemFpLmNsb3VkIiwiYXBwLmJhbnphaWNsb3VkLmlv'@;
put 'IiwiKi5iYWNreWFyZHMuYmFuemFpY2xvdWQuaW8iLCJiYXNlLmVjIiwib2ZmaWNpYWwuZWMiLCJidXlzaG9wLmpwIiwiZmFzaGlvbnN0b3JlLmpwIiwiaGFuZGNyYWZ0ZWQuanAiLCJrYXdhaWlzaG9wLmpwIiwic3VwZXJzYWxlLmpwIiwidGhlc2hvcC5qcCIsInNob3BzZWxlY3QubmV0Iiwi'@;
put 'YmFzZS5zaG9wIiwiKi5iZWdldC5hcHAiLCJiZXRhaW5hYm94LmNvbSIsImJuci5sYSIsImJpdGJ1Y2tldC5pbyIsImJsYWNrYmF1ZGNkbi5uZXQiLCJvZi5qZSIsImJsdWViaXRlLmlvIiwiYm9vbWxhLm5ldCIsImJvdXRpci5jb20iLCJib3hmdXNlLmlvIiwic3F1YXJlNy5jaCIsImJwbGFj'@;
put 'ZWQuY29tIiwiYnBsYWNlZC5kZSIsInNxdWFyZTcuZGUiLCJicGxhY2VkLm5ldCIsInNxdWFyZTcubmV0Iiwic2hvcC5icmVuZGx5LnJzIiwiYnJvd3NlcnNhZmV0eW1hcmsuaW8iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5j'@;
put 'b20iLCJteWNkLmV1IiwiZHJyLmFjIiwidXd1LmFpIiwiY2FycmQuY28iLCJjcmQuY28iLCJqdS5tcCIsImFlLm9yZyIsImJyLmNvbSIsImNuLmNvbSIsImNvbS5kZSIsImNvbS5zZSIsImRlLmNvbSIsImV1LmNvbSIsImdiLm5ldCIsImh1Lm5ldCIsImpwLm5ldCIsImpwbi5jb20iLCJtZXgu'@;
put 'Y29tIiwicnUuY29tIiwic2EuY29tIiwic2UubmV0IiwidWsuY29tIiwidWsubmV0IiwidXMuY29tIiwiemEuYnoiLCJ6YS5jb20iLCJhci5jb20iLCJodS5jb20iLCJrci5jb20iLCJuby5jb20iLCJxYy5jb20iLCJ1eS5jb20iLCJhZnJpY2EuY29tIiwiZ3IuY29tIiwiaW4ubmV0Iiwid2Vi'@;
put 'LmluIiwidXMub3JnIiwiY28uY29tIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwicmFkaW8uYW0iLCJyYWRpby5mbSIsImMubGEiLCJjZXJ0bWdyLm9yZyIsImN4LnVhIiwiZGlzY291cnNlLmdyb3VwIiwiZGlzY291cnNlLnRlYW0iLCJjbGV2ZXJhcHBzLmlvIiwiY2xlcmsu'@;
put 'YXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xpY2tyaXNpbmcubmV0IiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNv'@;
put 'bSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiY2xvdWRjb250cm9sbGVkLmNvbSIsImNsb3VkY29udHJvbGFwcC5jb20iLCIqLmNsb3VkZXJhLnNpdGUiLCJwYWdlcy5kZXYiLCJ0cnljbG91ZGZsYXJlLmNvbSIsIndvcmtlcnMuZGV2Iiwi'@;
put 'd25leHQuYXBwIiwiY28uY2EiLCIqLm90YXAuY28iLCJjby5jeiIsImMuY2RuNzcub3JnIiwiY2RuNzctc3NsLm5ldCIsInIuY2RuNzcubmV0IiwicnNjLmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsImNsb3VkbnMuYXNpYSIsImNsb3VkbnMuYml6IiwiY2xvdWRu'@;
put 'cy5jbHViIiwiY2xvdWRucy5jYyIsImNsb3VkbnMuZXUiLCJjbG91ZG5zLmluIiwiY2xvdWRucy5pbmZvIiwiY2xvdWRucy5vcmciLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5zLnVzIiwiY25weS5nZG4iLCJjb2RlYmVyZy5wYWdlIiwiY28ubmwiLCJjby5ubyIsIndlYmhv'@;
put 'c3RpbmcuYmUiLCJob3N0aW5nLWNsdXN0ZXIubmwiLCJhYy5ydSIsImVkdS5ydSIsImdvdi5ydSIsImludC5ydSIsIm1pbC5ydSIsInRlc3QucnUiLCJkeW4uY29zaWRucy5kZSIsImR5bmFtaXNjaGVzLWRucy5kZSIsImRuc3VwZGF0ZXIuZGUiLCJpbnRlcm5ldC1kbnMuZGUiLCJsLW8tZy1p'@;
put 'LW4uZGUiLCJkeW5hbWljLWRucy5pbmZvIiwiZmVzdGUtaXAubmV0Iiwia254LXNlcnZlci5uZXQiLCJzdGF0aWMtYWNjZXNzLm5ldCIsInJlYWxtLmN6IiwiKi5jcnlwdG9ub21pYy5uZXQiLCJjdXBjYWtlLmlzIiwiY3Vydi5kZXYiLCIqLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jaS5jdXN0'@;
put 'b21lci1vY2kuY29tIiwiKi5vY3AuY3VzdG9tZXItb2NpLmNvbSIsIioub2NzLmN1c3RvbWVyLW9jaS5jb20iLCJjeW9uLmxpbmsiLCJjeW9uLnNpdGUiLCJmbndrLnNpdGUiLCJmb2xpb25ldHdvcmsuc2l0ZSIsInBsYXRmb3JtMC5hcHAiLCJkYXBsaWUubWUiLCJsb2NhbGhvc3QuZGFwbGll'@;
put 'Lm1lIiwiZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImJpei5kayIsImNvLmRrIiwiZmlybS5kayIsInJlZy5kayIsInN0b3JlLmRrIiwiZHluZG5zLmRhcHBub2RlLmlv'@;
put 'IiwiKi5kYXBwcy5lYXJ0aCIsIiouYnp6LmRhcHBzLmVhcnRoIiwiYnVpbHR3aXRoZGFyay5jb20iLCJkZW1vLmRhdGFkZXRlY3QuY29tIiwiaW5zdGFuY2UuZGF0YWRldGVjdC5jb20iLCJlZGdlc3RhY2subWUiLCJkZG5zNS5jb20iLCJkZWJpYW4ubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0'@;
put 'YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiKi5yc3MubXkuaWQiLCIqLmRpaGVyLnNvbHV0aW9ucyIsImRpc2NvcmRzYXlzLmNvbSIsImRpc2NvcmRzZXouY29tIiwiam96aS5iaXoiLCJkbnNob21lLmRlIiwib25saW5lLnRoIiwic2hvcC50aCIsImRyYXlk'@;
put 'ZG5zLmNvbSIsInNob3BhcmVuYS5wbCIsImRyZWFtaG9zdGVycy5jb20iLCJteWRyb2JvLmNvbSIsImRydWQuaW8iLCJkcnVkLnVzIiwiZHVja2Rucy5vcmciLCJiaXAuc2giLCJiaXRicmlkZ2UubmV0IiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5bmRucy1hdC1ob21lLmNvbSIsImR5bmRucy1h'@;
put 'dC13b3JrLmNvbSIsImR5bmRucy1ibG9nLmNvbSIsImR5bmRucy1mcmVlLmNvbSIsImR5bmRucy1ob21lLmNvbSIsImR5bmRucy1pcC5jb20iLCJkeW5kbnMtbWFpbC5jb20iLCJkeW5kbnMtb2ZmaWNlLmNvbSIsImR5bmRucy1waWNzLmNvbSIsImR5bmRucy1yZW1vdGUuY29tIiwiZHluZG5z'@;
put 'LXNlcnZlci5jb20iLCJkeW5kbnMtd2ViLmNvbSIsImR5bmRucy13aWtpLmNvbSIsImR5bmRucy13b3JrLmNvbSIsImR5bmRucy5iaXoiLCJkeW5kbnMuaW5mbyIsImR5bmRucy5vcmciLCJkeW5kbnMudHYiLCJhdC1iYW5kLWNhbXAubmV0IiwiYXRoLmN4IiwiYmFycmVsLW9mLWtub3dsZWRn'@;
put 'ZS5pbmZvIiwiYmFycmVsbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJldHRlci10aGFuLnR2IiwiYmxvZ2Rucy5jb20iLCJibG9nZG5zLm5ldCIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImJyb2tlLWl0Lm5ldCIsImJ1eXNob3VzZXMubmV0'@;
put 'IiwiY2VjaGlyZS5jb20iLCJkbnNhbGlhcy5jb20iLCJkbnNhbGlhcy5uZXQiLCJkbnNhbGlhcy5vcmciLCJkbnNkb2pvLmNvbSIsImRuc2Rvam8ubmV0IiwiZG5zZG9qby5vcmciLCJkb2VzLWl0Lm5ldCIsImRvZXNudGV4aXN0LmNvbSIsImRvZXNudGV4aXN0Lm9yZyIsImRvbnRleGlzdC5j'@;
put 'b20iLCJkb250ZXhpc3QubmV0IiwiZG9udGV4aXN0Lm9yZyIsImRvb21kbnMuY29tIiwiZG9vbWRucy5vcmciLCJkdnJkbnMub3JnIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5hbGlhcy5uZXQiLCJkeW5hbGlhcy5vcmciLCJkeW5hdGhvbWUubmV0IiwiZHluZG5zLndz'@;
put 'IiwiZW5kb2ZpbnRlcm5ldC5uZXQiLCJlbmRvZmludGVybmV0Lm9yZyIsImVuZG9mdGhlaW50ZXJuZXQub3JnIiwiZXN0LWEtbGEtbWFpc29uLmNvbSIsImVzdC1hLWxhLW1hc2lvbi5jb20iLCJlc3QtbGUtcGF0cm9uLmNvbSIsImVzdC1tb24tYmxvZ3VldXIuY29tIiwiZm9yLWJldHRlci5i'@;
put 'aXoiLCJmb3ItbW9yZS5iaXoiLCJmb3Itb3VyLmluZm8iLCJmb3Itc29tZS5iaXoiLCJmb3ItdGhlLmJpeiIsImZvcmdvdC5oZXIubmFtZSIsImZvcmdvdC5oaXMubmFtZSIsImZyb20tYWsuY29tIiwiZnJvbS1hbC5jb20iLCJmcm9tLWFyLmNvbSIsImZyb20tYXoubmV0IiwiZnJvbS1jYS5j'@;
put 'b20iLCJmcm9tLWNvLm5ldCIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1r'@;
put 'cy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbGEubmV0IiwiZnJvbS1tYS5jb20iLCJmcm9tLW1kLmNvbSIsImZyb20tbWUub3JnIiwiZnJvbS1taS5jb20iLCJmcm9tLW1uLmNvbSIsImZyb20tbW8uY29tIiwiZnJvbS1tcy5jb20iLCJmcm9tLW10LmNvbSIsImZyb20tbmMuY29tIiwiZnJv'@;
put 'bS1uZC5jb20iLCJmcm9tLW5lLmNvbSIsImZyb20tbmguY29tIiwiZnJvbS1uai5jb20iLCJmcm9tLW5tLmNvbSIsImZyb20tbnYuY29tIiwiZnJvbS1ueS5uZXQiLCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwi'@;
put 'ZnJvbS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29t'@;
put 'IiwiZnRwYWNjZXNzLmNjIiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiZ2FtZS1ob3N0Lm9yZyIsImdhbWUtc2VydmVyLmNjIiwiZ2V0bXlpcC5jb20iLCJnZXRzLWl0Lm5ldCIsImdvLmR5bmRucy5vcmciLCJnb3RkbnMuY29tIiwiZ290ZG5zLm9yZyIsImdyb2tzLXRoZS5pbmZvIiwiZ3Jva3Mt'@;
put 'dGhpcy5pbmZvIiwiaGFtLXJhZGlvLW9wLm5ldCIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImhvYmJ5LXNpdGUuY29tIiwiaG9iYnktc2l0ZS5vcmciLCJob21lLmR5bmRucy5vcmciLCJob21lZG5zLm9yZyIsImhvbWVmdHAubmV0IiwiaG9tZWZ0cC5vcmciLCJob21laXAubmV0IiwiaG9tZWxp'@;
put 'bnV4LmNvbSIsImhvbWVsaW51eC5uZXQiLCJob21lbGludXgub3JnIiwiaG9tZXVuaXguY29tIiwiaG9tZXVuaXgubmV0IiwiaG9tZXVuaXgub3JnIiwiaWFtYWxsYW1hLmNvbSIsImluLXRoZS1iYW5kLm5ldCIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1h'@;
put 'LWJvb2trZWVwZXIuY29tIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jYXRlcmVyLmNvbSIsImlzLWEtY2VsdGljc2Zhbi5vcmciLCJpcy1hLWNoZWYuY29tIiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtY2hlZi5v'@;
put 'cmciLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsu'@;
put 'Y29tIiwiaXMtYS1nZWVrLm5ldCIsImlzLWEtZ2Vlay5vcmciLCJpcy1hLWdyZWVuLmNvbSIsImlzLWEtZ3VydS5jb20iLCJpcy1hLWhhcmQtd29ya2VyLmNvbSIsImlzLWEtaHVudGVyLmNvbSIsImlzLWEta25pZ2h0Lm9yZyIsImlzLWEtbGFuZHNjYXBlci5jb20iLCJpcy1hLWxhd3llci5j'@;
put 'b20iLCJpcy1hLWxpYmVyYWwuY29tIiwiaXMtYS1saWJlcnRhcmlhbi5jb20iLCJpcy1hLWxpbnV4LXVzZXIub3JnIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlz'@;
put 'LWEtcGF0c2Zhbi5vcmciLCJpcy1hLXBlcnNvbmFsdHJhaW5lci5jb20iLCJpcy1hLXBob3RvZ3JhcGhlci5jb20iLCJpcy1hLXBsYXllci5jb20iLCJpcy1hLXJlcHVibGljYW4uY29tIiwiaXMtYS1yb2Nrc3Rhci5jb20iLCJpcy1hLXNvY2lhbGlzdC5jb20iLCJpcy1hLXNveGZhbi5vcmci'@;
put 'LCJpcy1hLXN0dWRlbnQuY29tIiwiaXMtYS10ZWFjaGVyLmNvbSIsImlzLWEtdGVjaGllLmNvbSIsImlzLWEtdGhlcmFwaXN0LmNvbSIsImlzLWFuLWFjY291bnRhbnQuY29tIiwiaXMtYW4tYWN0b3IuY29tIiwiaXMtYW4tYWN0cmVzcy5jb20iLCJpcy1hbi1hbmFyY2hpc3QuY29tIiwiaXMt'@;
put 'YW4tYXJ0aXN0LmNvbSIsImlzLWFuLWVuZ2luZWVyLmNvbSIsImlzLWFuLWVudGVydGFpbmVyLmNvbSIsImlzLWJ5LnVzIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWZvdW5kLm9yZyIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50'@;
put 'by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbG9zdC5vcmciLCJpcy1ub3QtY2VydGlmaWVkLmNvbSIsImlzLXNhdmVkLm9yZyIsImlzLXNsaWNrLmNvbSIsImlzLXViZXJsZWV0LmNvbSIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZp'@;
put 'bC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXMtd2l0aC10aGViYW5kLmNvbSIsImlzYS1nZWVrLmNvbSIsImlzYS1nZWVrLm5ldCIsImlzYS1nZWVrLm9yZyIsImlzYS1ob2NrZXludXQuY29tIiwiaXNzbWFydGVydGhh'@;
put 'bnlvdS5jb20iLCJpc3RlaW5nZWVrLmRlIiwiaXN0bWVpbi5kZSIsImtpY2tzLWFzcy5uZXQiLCJraWNrcy1hc3Mub3JnIiwia25vd3NpdGFsbC5pbmZvIiwibGFuZC00LXNhbGUudXMiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5'@;
put 'LmNvbSIsIm1lcnNlaW5lLm51IiwibWluZS5udSIsIm1pc2NvbmZ1c2VkLm9yZyIsIm15cGV0cy53cyIsIm15cGhvdG9zLmNjIiwibmVhdC11cmwuY29tIiwib2ZmaWNlLW9uLXRoZS5uZXQiLCJvbi10aGUtd2ViLnR2IiwicG9kem9uZS5uZXQiLCJwb2R6b25lLm9yZyIsInJlYWRteWJsb2cu'@;
put 'b3JnIiwic2F2ZXMtdGhlLXdoYWxlcy5jb20iLCJzY3JhcHBlci1zaXRlLm5ldCIsInNjcmFwcGluZy5jYyIsInNlbGZpcC5iaXoiLCJzZWxmaXAuY29tIiwic2VsZmlwLmluZm8iLCJzZWxmaXAubmV0Iiwic2VsZmlwLm9yZyIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNv'@;
put 'bSIsInNlbGxzLWl0Lm5ldCIsInNlbGxzeW91cmhvbWUub3JnIiwic2VydmViYnMuY29tIiwic2VydmViYnMubmV0Iiwic2VydmViYnMub3JnIiwic2VydmVmdHAubmV0Iiwic2VydmVmdHAub3JnIiwic2VydmVnYW1lLm9yZyIsInNoYWNrbmV0Lm51Iiwic2ltcGxlLXVybC5jb20iLCJzcGFj'@;
put 'ZS10by1yZW50LmNvbSIsInN0dWZmLTQtc2FsZS5vcmciLCJzdHVmZi00LXNhbGUudXMiLCJ0ZWFjaGVzLXlvZ2EuY29tIiwidGhydWhlcmUubmV0IiwidHJhZXVtdGdlcmFkZS5kZSIsIndlYmhvcC5iaXoiLCJ3ZWJob3AuaW5mbyIsIndlYmhvcC5uZXQiLCJ3ZWJob3Aub3JnIiwid29yc2Ut'@;
put 'dGhhbi50diIsIndyaXRlc3RoaXNibG9nLmNvbSIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluZG5zMS5kZSIsImR5bi1pcDI0LmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwi'@;
put 'ZGRuc3Mub3JnIiwiZGVmaW5pbWEubmV0IiwiZGVmaW5pbWEuaW8iLCJvbmRpZ2l0YWxvY2Vhbi5hcHAiLCIqLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20iLCJiY2kuZG5zdHJhY2UucHJvIiwiZGRuc2ZyZWUuY29tIiwiZGRuc2dlZWsuY29tIiwiZ2lpemUuY29tIiwiZ2xlZXplLmNvbSIsImtv'@;
put 'em93LmNvbSIsImxvc2V5b3VyaXAuY29tIiwib29ndXkuY29tIiwidGhld29ya3BjLmNvbSIsImNhc2FjYW0ubmV0IiwiZHludS5uZXQiLCJhY2Nlc3NjYW0ub3JnIiwiY2FtZHZyLm9yZyIsImZyZWVkZG5zLm9yZyIsIm15d2lyZS5vcmciLCJ3ZWJyZWRpcmVjdC5vcmciLCJteWRkbnMucm9j'@;
put 'a3MiLCJibG9nc2l0ZS54eXoiLCJkeW52Ni5uZXQiLCJlNC5jeiIsImVlcm8ub25saW5lIiwiZWVyby1zdGFnZS5vbmxpbmUiLCJlbGVtZW50b3IuY2xvdWQiLCJlbGVtZW50b3IuY29vbCIsImVuLXJvb3QuZnIiLCJteXR1bGVhcC5jb20iLCJ0dWxlYXAtcGFydG5lcnMuY29tIiwiZW5jci5h'@;
put 'cHAiLCJlbmNvcmVhcGkuY29tIiwib25yZWQub25lIiwic3RhZ2luZy5vbnJlZC5vbmUiLCJldS5lbmNvd2F5LmNsb3VkIiwiZXUub3JnIiwiYWwuZXUub3JnIiwiYXNzby5ldS5vcmciLCJhdC5ldS5vcmciLCJhdS5ldS5vcmciLCJiZS5ldS5vcmciLCJiZy5ldS5vcmciLCJjYS5ldS5vcmci'@;
put 'LCJjZC5ldS5vcmciLCJjaC5ldS5vcmciLCJjbi5ldS5vcmciLCJjeS5ldS5vcmciLCJjei5ldS5vcmciLCJkZS5ldS5vcmciLCJkay5ldS5vcmciLCJlZHUuZXUub3JnIiwiZWUuZXUub3JnIiwiZXMuZXUub3JnIiwiZmkuZXUub3JnIiwiZnIuZXUub3JnIiwiZ3IuZXUub3JnIiwiaHIuZXUu'@;
put 'b3JnIiwiaHUuZXUub3JnIiwiaWUuZXUub3JnIiwiaWwuZXUub3JnIiwiaW4uZXUub3JnIiwiaW50LmV1Lm9yZyIsImlzLmV1Lm9yZyIsIml0LmV1Lm9yZyIsImpwLmV1Lm9yZyIsImtyLmV1Lm9yZyIsImx0LmV1Lm9yZyIsImx1LmV1Lm9yZyIsImx2LmV1Lm9yZyIsIm1jLmV1Lm9yZyIsIm1l'@;
put 'LmV1Lm9yZyIsIm1rLmV1Lm9yZyIsIm10LmV1Lm9yZyIsIm15LmV1Lm9yZyIsIm5ldC5ldS5vcmciLCJuZy5ldS5vcmciLCJubC5ldS5vcmciLCJuby5ldS5vcmciLCJuei5ldS5vcmciLCJwYXJpcy5ldS5vcmciLCJwbC5ldS5vcmciLCJwdC5ldS5vcmciLCJxLWEuZXUub3JnIiwicm8uZXUu'@;
put 'b3JnIiwicnUuZXUub3JnIiwic2UuZXUub3JnIiwic2kuZXUub3JnIiwic2suZXUub3JnIiwidHIuZXUub3JnIiwidWsuZXUub3JnIiwidXMuZXUub3JnIiwiZXVyb2Rpci5ydSIsImV1LTEuZXZlbm5vZGUuY29tIiwiZXUtMi5ldmVubm9kZS5jb20iLCJldS0zLmV2ZW5ub2RlLmNvbSIsImV1'@;
put 'LTQuZXZlbm5vZGUuY29tIiwidXMtMS5ldmVubm9kZS5jb20iLCJ1cy0yLmV2ZW5ub2RlLmNvbSIsInVzLTMuZXZlbm5vZGUuY29tIiwidXMtNC5ldmVubm9kZS5jb20iLCJ0d21haWwuY2MiLCJ0d21haWwubmV0IiwidHdtYWlsLm9yZyIsIm15bWFpbGVyLmNvbS50dyIsInVybC50dyIsIm9u'@;
put 'ZmFicmljYS5jb20iLCJhcHBzLmZic2J4LmNvbSIsInJ1Lm5ldCIsImFkeWdleWEucnUiLCJiYXNoa2lyaWEucnUiLCJiaXIucnUiLCJjYmcucnUiLCJjb20ucnUiLCJkYWdlc3Rhbi5ydSIsImdyb3pueS5ydSIsImthbG15a2lhLnJ1Iiwia3VzdGFuYWkucnUiLCJtYXJpbmUucnUiLCJtb3Jk'@;
put 'b3ZpYS5ydSIsIm1zay5ydSIsIm15dGlzLnJ1IiwibmFsY2hpay5ydSIsIm5vdi5ydSIsInB5YXRpZ29yc2sucnUiLCJzcGIucnUiLCJ2bGFkaWthdmthei5ydSIsInZsYWRpbWlyLnJ1IiwiYWJraGF6aWEuc3UiLCJhZHlnZXlhLnN1IiwiYWt0eXViaW5zay5zdSIsImFya2hhbmdlbHNrLnN1'@;
put 'IiwiYXJtZW5pYS5zdSIsImFzaGdhYmFkLnN1IiwiYXplcmJhaWphbi5zdSIsImJhbGFzaG92LnN1IiwiYmFzaGtpcmlhLnN1IiwiYnJ5YW5zay5zdSIsImJ1a2hhcmEuc3UiLCJjaGlta2VudC5zdSIsImRhZ2VzdGFuLnN1IiwiZWFzdC1rYXpha2hzdGFuLnN1IiwiZXhuZXQuc3UiLCJnZW9y'@;
put 'Z2lhLnN1IiwiZ3Jvem55LnN1IiwiaXZhbm92by5zdSIsImphbWJ5bC5zdSIsImthbG15a2lhLnN1Iiwia2FsdWdhLnN1Iiwia2FyYWNvbC5zdSIsImthcmFnYW5kYS5zdSIsImthcmVsaWEuc3UiLCJraGFrYXNzaWEuc3UiLCJrcmFzbm9kYXIuc3UiLCJrdXJnYW4uc3UiLCJrdXN0YW5haS5z'@;
put 'dSIsImxlbnVnLnN1IiwibWFuZ3lzaGxhay5zdSIsIm1vcmRvdmlhLnN1IiwibXNrLnN1IiwibXVybWFuc2suc3UiLCJuYWxjaGlrLnN1IiwibmF2b2kuc3UiLCJub3J0aC1rYXpha2hzdGFuLnN1Iiwibm92LnN1Iiwib2JuaW5zay5zdSIsInBlbnphLnN1IiwicG9rcm92c2suc3UiLCJzb2No'@;
put 'aS5zdSIsInNwYi5zdSIsInRhc2hrZW50LnN1IiwidGVybWV6LnN1IiwidG9nbGlhdHRpLnN1IiwidHJvaXRzay5zdSIsInRzZWxpbm9ncmFkLnN1IiwidHVsYS5zdSIsInR1dmEuc3UiLCJ2bGFkaWthdmthei5zdSIsInZsYWRpbWlyLnN1Iiwidm9sb2dkYS5zdSIsImNoYW5uZWxzZHZyLm5l'@;
put 'dCIsInUuY2hhbm5lbHNkdnIubmV0IiwiZWRnZWNvbXB1dGUuYXBwIiwiZmFzdGx5LXRlcnJhcml1bS5jb20iLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0IiwiZnJlZXRscy5mYXN0bHkubmV0IiwibWFwLmZhc3RseS5uZXQiLCJhLnByb2QuZmFzdGx5Lm5ldCIsImdsb2JhbC5w'@;
put 'cm9kLmZhc3RseS5uZXQiLCJhLnNzbC5mYXN0bHkubmV0IiwiYi5zc2wuZmFzdGx5Lm5ldCIsImdsb2JhbC5zc2wuZmFzdGx5Lm5ldCIsImZhc3R2cHMtc2VydmVyLmNvbSIsImZhc3R2cHMuaG9zdCIsIm15ZmFzdC5ob3N0IiwiZmFzdHZwcy5zaXRlIiwibXlmYXN0LnNwYWNlIiwiZmVkb3Jh'@;
put 'aW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwiY29ubi51ayIsImNvcHJvLnVrIiwiaG9zcC51ayIsIm15ZG9iaXNzLmNvbSIs'@;
put 'ImZoLW11ZW5zdGVyLmlvIiwiZmlsZWdlYXIubWUiLCJmaWxlZ2Vhci1hdS5tZSIsImZpbGVnZWFyLWRlLm1lIiwiZmlsZWdlYXItZ2IubWUiLCJmaWxlZ2Vhci1pZS5tZSIsImZpbGVnZWFyLWpwLm1lIiwiZmlsZWdlYXItc2cubWUiLCJmaXJlYmFzZWFwcC5jb20iLCJmaXJld2ViLmFwcCIs'@;
put 'ImZsYXAuaWQiLCJvbmZsYXNoZHJpdmUuYXBwIiwiZmxkcnYuY29tIiwiZmx5LmRldiIsImVkZ2VhcHAubmV0Iiwic2h3LmlvIiwiZmx5bm5ob3N0aW5nLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiKi5m'@;
put 'cnVza3kuZGUiLCJyYXZwYWdlLmNvLmlsIiwiMGUudmMiLCJmcmVlYm94LW9zLmNvbSIsImZyZWVib3hvcy5jb20iLCJmYngtb3MuZnIiLCJmYnhvcy5mciIsImZyZWVib3gtb3MuZnIiLCJmcmVlYm94b3MuZnIiLCJmcmVlZGVza3RvcC5vcmciLCJmcmVlbXlpcC5jb20iLCJ3aWVuLmZ1bmtm'@;
put 'ZXVlci5hdCIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwi'@;
put 'aW5kZXBlbmRlbnQtY29tbWlzc2lvbi51ayIsImluZGVwZW5kZW50LWlucXVlc3QudWsiLCJpbmRlcGVuZGVudC1pbnF1aXJ5LnVrIiwiaW5kZXBlbmRlbnQtcGFuZWwudWsiLCJpbmRlcGVuZGVudC1yZXZpZXcudWsiLCJwdWJsaWMtaW5xdWlyeS51ayIsInJveWFsLWNvbW1pc3Npb24udWsi'@;
put 'LCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImFwaS5nb3YudWsiLCJnZWhpcm4ubmUuanAiLCJ1c2VyY29udGVudC5qcCIsImdlbnRhcHBzLmNvbSIsImdlbnRsZW50YXBpcy5jb20iLCJsYWIubXMiLCJjZG4tZWRnZXMubmV0IiwiZ2hvc3QuaW8iLCJnc2ouYnoiLCJnaXRo'@;
put 'dWJ1c2VyY29udGVudC5jb20iLCJnaXRodWJwcmV2aWV3LmRldiIsImdpdGh1Yi5pbyIsImdpdGxhYi5pbyIsImdpdGFwcC5zaSIsImdpdHBhZ2Uuc2kiLCJnbGl0Y2gubWUiLCJub2cuY29tbXVuaXR5IiwiY28ucm8iLCJzaG9wLnJvIiwibG9saXBvcC5pbyIsImFuZ3J5LmpwIiwiYmFieWJs'@;
put 'dWUuanAiLCJiYWJ5bWlsay5qcCIsImJhY2tkcm9wLmpwIiwiYmFtYmluYS5qcCIsImJpdHRlci5qcCIsImJsdXNoLmpwIiwiYm9vLmpwIiwiYm95LmpwIiwiYm95ZnJpZW5kLmpwIiwiYnV0LmpwIiwiY2FuZHlwb3AuanAiLCJjYXBvby5qcCIsImNhdGZvb2QuanAiLCJjaGVhcC5qcCIsImNo'@;
put 'aWNhcHBhLmpwIiwiY2hpbGxvdXQuanAiLCJjaGlwcy5qcCIsImNob3dkZXIuanAiLCJjaHUuanAiLCJjaWFvLmpwIiwiY29jb3R0ZS5qcCIsImNvb2xibG9nLmpwIiwiY3Jhbmt5LmpwIiwiY3V0ZWdpcmwuanAiLCJkYWEuanAiLCJkZWNhLmpwIiwiZGVjaS5qcCIsImRpZ2ljay5qcCIsImVn'@;
put 'b2lzbS5qcCIsImZha2VmdXIuanAiLCJmZW0uanAiLCJmbGllci5qcCIsImZsb3BweS5qcCIsImZvb2wuanAiLCJmcmVuY2hraXNzLmpwIiwiZ2lybGZyaWVuZC5qcCIsImdpcmx5LmpwIiwiZ2xvb215LmpwIiwiZ29ubmEuanAiLCJncmVhdGVyLmpwIiwiaGFjY2EuanAiLCJoZWF2eS5qcCIs'@;
put 'Imhlci5qcCIsImhpaG8uanAiLCJoaXBweS5qcCIsImhvbHkuanAiLCJodW5ncnkuanAiLCJpY3VydXMuanAiLCJpdGlnby5qcCIsImplbGx5YmVhbi5qcCIsImtpa2lyYXJhLmpwIiwia2lsbC5qcCIsImtpbG8uanAiLCJrdXJvbi5qcCIsImxpdHRsZXN0YXIuanAiLCJsb2xpcG9wbWMuanAi'@;
put 'LCJsb2xpdGFwdW5rLmpwIiwibG9tby5qcCIsImxvdmVwb3AuanAiLCJsb3Zlc2ljay5qcCIsIm1haW4uanAiLCJtb2RzLmpwIiwibW9uZC5qcCIsIm1vbmdvbGlhbi5qcCIsIm1vby5qcCIsIm5hbWFzdGUuanAiLCJuaWtpdGEuanAiLCJub2J1c2hpLmpwIiwibm9vci5qcCIsIm9vcHMuanAi'@;
put 'LCJwYXJhbGxlbC5qcCIsInBhcmFzaXRlLmpwIiwicGVjb3JpLmpwIiwicGVld2VlLmpwIiwicGVubmUuanAiLCJwZXBwZXIuanAiLCJwZXJtYS5qcCIsInBpZ2JvYXQuanAiLCJwaW5va28uanAiLCJwdW55dS5qcCIsInB1cHUuanAiLCJwdXNzeWNhdC5qcCIsInB5YS5qcCIsInJhaW5kcm9w'@;
put 'LmpwIiwicmVhZHltYWRlLmpwIiwic2FkaXN0LmpwIiwic2Nob29sYnVzLmpwIiwic2VjcmV0LmpwIiwic3RhYmEuanAiLCJzdHJpcHBlci5qcCIsInN1Yi5qcCIsInN1bm55ZGF5LmpwIiwidGhpY2suanAiLCJ0b25rb3RzdS5qcCIsInVuZGVyLmpwIiwidXBwZXIuanAiLCJ2ZWx2ZXQuanAi'@;
put 'LCJ2ZXJzZS5qcCIsInZlcnN1cy5qcCIsInZpdmlhbi5qcCIsIndhdHNvbi5qcCIsIndlYmxpa2UuanAiLCJ3aGl0ZXNub3cuanAiLCJ6b21iaWUuanAiLCJoZXRlbWwubmV0IiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJweW1udC51ayIsImhvbWVv'@;
put 'ZmZpY2UuZ292LnVrIiwicm8uaW0iLCJnb2lwLmRlIiwicnVuLmFwcCIsImEucnVuLmFwcCIsIndlYi5hcHAiLCIqLjBlbW0uY29tIiwiYXBwc3BvdC5jb20iLCIqLnIuYXBwc3BvdC5jb20iLCJjb2Rlc3BvdC5jb20iLCJnb29nbGVhcGlzLmNvbSIsImdvb2dsZWNvZGUuY29tIiwicGFnZXNw'@;
put 'ZWVkbW9iaWxpemVyLmNvbSIsInB1Ymxpc2hwcm94eS5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsIiouZ2F0ZXdheS5kZXYiLCJjbG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJjbG91ZGZ1bmN0aW9ucy5uZXQiLCJibG9n'@;
put 'c3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY28uYXQi'@;
put 'LCJibG9nc3BvdC5jby5pZCIsImJsb2dzcG90LmNvLmlsIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5jby5ueiIsImJsb2dzcG90LmNvLnVrIiwiYmxvZ3Nwb3QuY28uemEiLCJibG9nc3BvdC5jb20iLCJibG9nc3BvdC5jb20uYXIiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5j'@;
put 'b20uYnIiLCJibG9nc3BvdC5jb20uYnkiLCJibG9nc3BvdC5jb20uY28iLCJibG9nc3BvdC5jb20uY3kiLCJibG9nc3BvdC5jb20uZWUiLCJibG9nc3BvdC5jb20uZWciLCJibG9nc3BvdC5jb20uZXMiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5jb20ubmciLCJibG9nc3BvdC5jb20u'@;
put 'dHIiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC5jdiIsImJsb2dzcG90LmN6IiwiYmxvZ3Nwb3QuZGUiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJs'@;
put 'b2dzcG90LmllIiwiYmxvZ3Nwb3QuaW4iLCJibG9nc3BvdC5pcyIsImJsb2dzcG90Lml0IiwiYmxvZ3Nwb3QuanAiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5tciIs'@;
put 'ImJsb2dzcG90Lm14IiwiYmxvZ3Nwb3QubXkiLCJibG9nc3BvdC5ubCIsImJsb2dzcG90Lm5vIiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5z'@;
put 'ZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwiYmxvZ3Nwb3Qudm4iLCJnb3VwaWxlLmZyIiwiZ292Lm5sIiwiYXdzbXBwbC5jb20iLCJnXHhmY25zdGlnYmVz'@;
put 'dGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaHMuem9uZSIsImhzLnJ1biIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4u'@;
put 'ZGUiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsInJhdmVuZGIuY2xvdWQiLCJteXJhdmVuZGIuY29tIiwicmF2ZW5kYi5jb21tdW5pdHkiLCJyYXZlbmRiLm1lIiwiZGV2ZWxvcG1lbnQucnVuIiwicmF2ZW5kYi5ydW4iLCJob21lc2tsZXAucGwiLCJz'@;
put 'ZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwiZWR1LnNjb3QiLCJzY2guc28iLCJob3N0eWhvc3RpbmcuaW8iLCJoXHhlNGtraW5lbi5maSIsIioubW9vbnNjYWxlLmlvIiwibW9v'@;
put 'bnNjYWxlLm5ldCIsImlraS5maSIsImlieG9zLml0IiwiaWxpYWRib3hvcy5pdCIsImltcGVydHJpeGNkbi5jb20iLCJpbXBlcnRyaXguY29tIiwic211c2hjZG4uY29tIiwid3Bob3N0ZWRtYWlsLmNvbSIsIndwbXVjZG4uY29tIiwidGVtcHVybC5ob3N0Iiwid3BtdWRldi5ob3N0IiwiZHlu'@;
put 'LWJlcmxpbi5kZSIsImluLWJlcmxpbi5kZSIsImluLWJyYi5kZSIsImluLWJ1dHRlci5kZSIsImluLWRzbC5kZSIsImluLWRzbC5uZXQiLCJpbi1kc2wub3JnIiwiaW4tdnBuLmRlIiwiaW4tdnBuLm5ldCIsImluLXZwbi5vcmciLCJiaXouYXQiLCJpbmZvLmF0IiwiaW5mby5jeCIsImFjLmxl'@;
put 'Zy5iciIsImFsLmxlZy5iciIsImFtLmxlZy5iciIsImFwLmxlZy5iciIsImJhLmxlZy5iciIsImNlLmxlZy5iciIsImRmLmxlZy5iciIsImVzLmxlZy5iciIsImdvLmxlZy5iciIsIm1hLmxlZy5iciIsIm1nLmxlZy5iciIsIm1zLmxlZy5iciIsIm10LmxlZy5iciIsInBhLmxlZy5iciIsInBi'@;
put 'LmxlZy5iciIsInBlLmxlZy5iciIsInBpLmxlZy5iciIsInByLmxlZy5iciIsInJqLmxlZy5iciIsInJuLmxlZy5iciIsInJvLmxlZy5iciIsInJyLmxlZy5iciIsInJzLmxlZy5iciIsInNjLmxlZy5iciIsInNlLmxlZy5iciIsInNwLmxlZy5iciIsInRvLmxlZy5iciIsInBpeG9saW5vLmNv'@;
put 'bSIsIm5hNHUucnUiLCJpb3BzeXMuc2UiLCJpcGlmb255Lm5ldCIsImlzZXJ2c2NodWxlLmRlIiwibWVpbi1pc2Vydi5kZSIsInNjaHVscGxhdHRmb3JtLmRlIiwic2NodWxzZXJ2ZXIuZGUiLCJ0ZXN0LWlzZXJ2LmRlIiwiaXNlcnYuZGV2IiwiaW9iYi5uZXQiLCJtZWwuY2xvdWRsZXRzLmNv'@;
put 'bS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsInVzZXJzLnNjYWxlLnZpcnR1YWxjbG91ZC5jb20uYnIiLCJteWNsb3VkLmJ5IiwiYWxwMS5hZS5mbG93LmNoIiwiYXBwZW5naW5lLmZsb3cuY2giLCJlcy0xLmF4YXJuZXQuY2xvdWQiLCJkaWFkZW0uY2xvdWQiLCJ2aXAuamVs'@;
put 'YXN0aWMuY2xvdWQiLCJqZWxlLmNsb3VkIiwiaXQxLmV1ci5hcnViYS5qZW52LWFydWJhLmNsb3VkIiwiaXQxLmplbnYtYXJ1YmEuY2xvdWQiLCJrZWxpd2ViLmNsb3VkIiwiY3Mua2VsaXdlYi5jbG91ZCIsIm94YS5jbG91ZCIsInRuLm94YS5jbG91ZCIsInVrLm94YS5jbG91ZCIsInByaW1l'@;
put 'dGVsLmNsb3VkIiwidWsucHJpbWV0ZWwuY2xvdWQiLCJjYS5yZWNsYWltLmNsb3VkIiwidWsucmVjbGFpbS5jbG91ZCIsInVzLnJlY2xhaW0uY2xvdWQiLCJjaC50cmVuZGhvc3RpbmcuY2xvdWQiLCJkZS50cmVuZGhvc3RpbmcuY2xvdWQiLCJqZWxlLmNsdWIiLCJhbXNjb21wdXRlLmNvbSIs'@;
put 'ImNsaWNrZXRjbG91ZC5jb20iLCJkb3BhYXMuY29tIiwiaGlkb3JhLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMu'@;
put 'aWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwia2lsYXRpcm9uLmNvbSIsInBhYXMubWFzc2l2ZWdyaWQuY29tIiwiamVkLndhZmFpY2xvdWQuY29tIiwibG9uLndhZmFpY2xvdWQuY29tIiwicnlkLndhZmFpY2xvdWQuY29tIiwiai5zY2FsZWZvcmNlLmNvbS5jeSIsImplbGFz'@;
put 'dGljLmRvZ2Fkby5ldSIsImZpLmNsb3VkcGxhdGZvcm0uZmkiLCJkZW1vLmRhdGFjZW50ZXIuZmkiLCJwYWFzLmRhdGFjZW50ZXIuZmkiLCJqZWxlLmhvc3QiLCJtaXJjbG91ZC5ob3N0IiwicGFhcy5iZWVieXRlLmlvIiwic2VrZDEuYmVlYnl0ZWFwcC5pbyIsImplbGUuaW8iLCJjbG91ZC1m'@;
put 'cjEudW5pc3BhY2UuaW8iLCJqYy5uZWVuLml0IiwiY2xvdWQuamVsYXN0aWMub3Blbi50aW0uaXQiLCJqY2xvdWQua3oiLCJ1cGFhcy5rYXp0ZWxlcG9ydC5reiIsImNsb3VkamlmZnkubmV0IiwiZnJhMS1kZS5jbG91ZGppZmZ5Lm5ldCIsIndlc3QxLXVzLmNsb3VkamlmZnkubmV0Iiwiamxz'@;
put 'LXN0bzEuZWxhc3R4Lm5ldCIsImpscy1zdG8yLmVsYXN0eC5uZXQiLCJqbHMtc3RvMy5lbGFzdHgubmV0IiwiZmFzdHN0YWNrcy5uZXQiLCJmci0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIs'@;
put 'Im55LTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0yLnBhYXMubWFzc2l2ZWdyaWQubmV0Iiwic2ctMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImplbGFzdGljLnNhdmVpbmNsb3VkLm5ldCIsIm5vcmRlc3RlLWlkYy5zYXZlaW5jbG91ZC5uZXQiLCJqLnNjYWxlZm9yY2UubmV0IiwiamVs'@;
put 'YXN0aWMudHN1a2FlcnUubmV0Iiwic2RzY2xvdWQucGwiLCJ1bmljbG91ZC5wbCIsIm1pcmNsb3VkLnJ1IiwiamVsYXN0aWMucmVncnVob3N0aW5nLnJ1IiwiZW5zY2FsZWQuc2ciLCJqZWxlLnNpdGUiLCJqZWxhc3RpYy50ZWFtIiwib3JhbmdlY2xvdWQudG4iLCJqLmxheWVyc2hpZnQuY28u'@;
put 'dWsiLCJwaHguZW5zY2FsZWQudXMiLCJtaXJjbG91ZC51cyIsIm15amluby5ydSIsIiouaG9zdGluZy5teWppbm8ucnUiLCIqLmxhbmRpbmcubXlqaW5vLnJ1IiwiKi5zcGVjdHJ1bS5teWppbm8ucnUiLCIqLnZwcy5teWppbm8ucnUiLCJqb3RlbHVsdS5jbG91ZCIsIioudHJpdG9uLnpvbmUi'@;
put 'LCIqLmNucy5qb3llbnQuY29tIiwianMub3JnIiwia2Fhcy5nZyIsImtocGxheS5ubCIsImt0aXN0b3J5LmNvbSIsImthcHNpLmZpIiwia2V5bWFjaGluZS5kZSIsImtpbmdob3N0Lm5ldCIsInVuaTUubmV0Iiwia25pZ2h0cG9pbnQuc3lzdGVtcyIsImtvb2Jpbi5ldmVudHMiLCJveWEudG8i'@;
put 'LCJrdWxldXZlbi5jbG91ZCIsImV6cHJveHkua3VsZXV2ZW4uYmUiLCJjby5rcmQiLCJlZHUua3JkIiwia3JlbGxpYW4ubmV0Iiwid2VidGhpbmdzLmlvIiwiZ2l0LXJlcG9zLmRlIiwibGN1YmUtc2VydmVyLmRlIiwic3ZuLXJlcG9zLmRlIiwibGVhZHBhZ2VzLmNvIiwibHBhZ2VzLmNvIiwi'@;
put 'bHB1c2VyY29udGVudC5jb20iLCJsZWx1eC5zaXRlIiwiY28uYnVzaW5lc3MiLCJjby5lZHVjYXRpb24iLCJjby5ldmVudHMiLCJjby5maW5hbmNpYWwiLCJjby5uZXR3b3JrIiwiY28ucGxhY2UiLCJjby50ZWNobm9sb2d5IiwiYXBwLmxtcG0uY29tIiwibGlua3lhcmQuY2xvdWQiLCJsaW5r'@;
put 'eWFyZC1jbG91ZC5jaCIsIm1lbWJlcnMubGlub2RlLmNvbSIsIioubm9kZWJhbGFuY2VyLmxpbm9kZS5jb20iLCIqLmxpbm9kZW9iamVjdHMuY29tIiwiaXAubGlub2RldXNlcmNvbnRlbnQuY29tIiwid2UuYnMiLCIqLnVzZXIubG9jYWxjZXJ0LmRldiIsImxvY2Fsem9uZS54eXoiLCJsb2dp'@;
put 'bmxpbmUuYXBwIiwibG9naW5saW5lLmRldiIsImxvZ2lubGluZS5pbyIsImxvZ2lubGluZS5zZXJ2aWNlcyIsImxvZ2lubGluZS5zaXRlIiwic2VydmVycy5ydW4iLCJsb2htdXMubWUiLCJrcmFzbmlrLnBsIiwibGVjem5hLnBsIiwibHViYXJ0b3cucGwiLCJsdWJsaW4ucGwiLCJwb25pYXRv'@;
put 'd2EucGwiLCJzd2lkbmlrLnBsIiwiZ2x1Zy5vcmcudWsiLCJsdWcub3JnLnVrIiwibHVncy5vcmcudWsiLCJiYXJzeS5iZyIsImJhcnN5LmNvLnVrIiwiYmFyc3lvbmxpbmUuY28udWsiLCJiYXJzeWNlbnRlci5jb20iLCJiYXJzeW9ubGluZS5jb20iLCJiYXJzeS5jbHViIiwiYmFyc3kuZGUi'@;
put 'LCJiYXJzeS5ldSIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3kubW9iaSIsImJhcnN5Lm5ldCIsImJhcnN5Lm9ubGluZSIsImJhcnN5Lm9yZyIsImJhcnN5LnBybyIsImJhcnN5LnB1YiIsImJhcnN5LnJvIiwiYmFyc3ku'@;
put 'c2hvcCIsImJhcnN5LnNpdGUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCIqLm1hZ2VudG9zaXRlLmNsb3VkIiwibWF5Zmlyc3QuaW5mbyIsIm1heWZpcnN0Lm9yZyIsImhiLmNsZG1haWwucnUiLCJjbi52dSIsIm1hemVwbGF5LmNvbSIsIm1jcGUubWUiLCJtY2Rpci5tZSIsIm1jZGly'@;
put 'LnJ1IiwibWNwcmUucnUiLCJ2cHMubWNkaXIucnUiLCJtZWRpYXRlY2guYnkiLCJtZWRpYXRlY2guZGV2IiwiaHJhLmhlYWx0aCIsIm1pbmlzZXJ2ZXIuY29tIiwibWVtc2V0Lm5ldCIsIm1lc3NlcmxpLmFwcCIsIiouY2xvdWQubWV0YWNlbnRydW0uY3oiLCJjdXN0b20ubWV0YWNlbnRydW0u'@;
put 'Y3oiLCJmbHQuY2xvdWQubXVuaS5jeiIsInVzci5jbG91ZC5tdW5pLmN6IiwibWV0ZW9yYXBwLmNvbSIsImV1Lm1ldGVvcmFwcC5jb20iLCJjby5wbCIsIiouYXp1cmVjb250YWluZXIuaW8iLCJhenVyZXdlYnNpdGVzLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJjbG91ZGFwcC5uZXQiLCJh'@;
put 'enVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMu'@;
put 'bmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiY3N4LmNjIiwibWludGVyZS5zaXRlIiwiZm9ydGUuaWQiLCJtb3ppbGxhLWlvdC5vcmciLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImN1c3RvbWVyLm15dGhp'@;
put 'Yy1iZWFzdHMuY29tIiwiY2FyYWNhbC5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1i'@;
put 'ZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwicG9ueS5jbHViIiwib2YuZmFz'@;
put 'aGlvbiIsImluLmxvbmRvbiIsIm9mLmxvbmRvbiIsImZyb20ubWFya2V0aW5nIiwid2l0aC5tYXJrZXRpbmciLCJmb3IubWVuIiwicmVwYWlyLm1lbiIsImFuZC5tb20iLCJmb3IubW9tIiwiZm9yLm9uZSIsInVuZGVyLm9uZSIsImZvci5zYWxlIiwidGhhdC53aW4iLCJmcm9tLndvcmsiLCJ0'@;
put 'by53b3JrIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZ3Jvay5pbyIsIm5oLXNlcnYuY28udWsiLCJuZnNob3N0LmNvbSIsIiouZGV2ZWxvcGVyLmFwcCIsIm5vb3AuYXBwIiwiKi5ub3J0aGZsYW5rLmFwcCIsIiouYnVpbGQucnVuIiwiKi5jb2Rl'@;
put 'LnJ1biIsIiouZGF0YWJhc2UucnVuIiwiKi5taWdyYXRpb24ucnVuIiwibm90aWNlYWJsZS5uZXdzIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwiZGRuc2xpdmUuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCIxNi1iLml0IiwiMzItYi5p'@;
put 'dCIsIjY0LWIuaXQiLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIs'@;
put 'ImZyZWVkZG5zLnVzIiwiY3JhZnRpbmcueHl6IiwiemFwdG8ueHl6IiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwiYmxvZ3N5dGUuY29tIiwiYnJhc2lsaWEubWUiLCJjYWJsZS1tb2RlbS5vcmciLCJjaXNjb2ZyZWFrLmNvbSIsImNvbGxlZ2VmYW4ub3JnIiwiY291Y2hwb3RhdG9m'@;
put 'cmllcy5vcmciLCJkYW1uc2VydmVyLmNvbSIsImRkbnMubWUiLCJkaXRjaHlvdXJpcC5jb20iLCJkbnNmb3IubWUiLCJkbnNpc2tpbmt5LmNvbSIsImR2cmNhbS5pbmZvIiwiZHlubnMuY29tIiwiZWF0aW5nLW9yZ2FuaWMubmV0IiwiZmFudGFzeWxlYWd1ZS5jYyIsImdlZWtnYWxheHkuY29t'@;
put 'IiwiZ29sZmZhbi51cyIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJob3B0by5tZSIsImlsb3ZlY29sbGVnZS5pbmZvIiwibG9naW50by5tZSIsIm1sYmZhbi5vcmciLCJtbWFmYW4uYml6IiwibXlhY3RpdmVkaXJl'@;
put 'Y3RvcnkuY29tIiwibXlkaXNzZW50Lm5ldCIsIm15ZWZmZWN0Lm5ldCIsIm15bWVkaWFwYy5uZXQiLCJteXBzeC5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibXlzZWN1cml0eWNhbWVyYS5vcmciLCJuZXQtZnJlYWtzLmNvbSIsIm5mbGZhbi5v'@;
put 'cmciLCJuaGxmYW4ubmV0Iiwibm8taXAuY2EiLCJuby1pcC5jby51ayIsIm5vLWlwLm5ldCIsIm5vaXAudXMiLCJvbnRoZXdpZmkuY29tIiwicGdhZmFuLm5ldCIsInBvaW50MnRoaXMuY29tIiwicG9pbnR0by51cyIsInByaXZhdGl6ZWhlYWx0aGluc3VyYW5jZS5uZXQiLCJxdWlja3N5dGVz'@;
put 'LmNvbSIsInJlYWQtYm9va3Mub3JnIiwic2VjdXJpdHl0YWN0aWNzLmNvbSIsInNlcnZlZXhjaGFuZ2UuY29tIiwic2VydmVodW1vdXIuY29tIiwic2VydmVwMnAuY29tIiwic2VydmVzYXJjYXNtLmNvbSIsInN0dWZmdG9yZWFkLmNvbSIsInVmY2Zhbi5vcmciLCJ1bnVzdWFscGVyc29uLmNv'@;
put 'bSIsIndvcmtpc2JvcmluZy5jb20iLCIzdXRpbGl0aWVzLmNvbSIsImJvdW5jZW1lLm5ldCIsImRkbnMubmV0IiwiZGRuc2tpbmcuY29tIiwiZ290ZG5zLmNoIiwiaG9wdG8ub3JnIiwibXlmdHAuYml6IiwibXlmdHAub3JnIiwibXl2bmMuY29tIiwibm8taXAuYml6Iiwibm8taXAuaW5mbyIs'@;
put 'Im5vLWlwLm9yZyIsIm5vaXAubWUiLCJyZWRpcmVjdG1lLm5ldCIsInNlcnZlYmVlci5jb20iLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVjb3VudGVyc3RyaWtlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJz'@;
put 'ZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1pbmVjcmFmdC5uZXQiLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzeXRlcy5uZXQiLCJ3ZWJob3AubWUiLCJ6YXB0by5vcmciLCJzdGFnZS5ub2RlYXJ0LmlvIiwicGNsb3VkLmhvc3QiLCJueWMubW4iLCJzdGF0'@;
put 'aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsImN5YS5nZyIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwic2VydmljZS5vbmUiLCJuaWQuaW8iLCJvcGVuc29jaWFsLnNpdGUiLCJvcGVuY3JhZnQuaG9zdGluZyIsIm9yc2l0ZXMuY29tIiwib3BlcmF1'@;
put 'bml0ZS5jb20iLCJ0ZWNoLm9yYW5nZSIsImF1dGhnZWFyLXN0YWdpbmcuY29tIiwiYXV0aGdlYXJhcHBzLmNvbSIsInNreWdlYXJhcHAuY29tIiwib3V0c3lzdGVtc2Nsb3VkLmNvbSIsIioud2VicGFhcy5vdmgubmV0IiwiKi5ob3N0aW5nLm92aC5uZXQiLCJvd25wcm92aWRlci5jb20iLCJv'@;
put 'd24ucG0iLCIqLm93by5jb2RlcyIsIm94LnJzIiwib3kubGMiLCJwZ2ZvZy5jb20iLCJwYWdlZnJvbnRhcHAuY29tIiwicGFnZXhsLmNvbSIsIioucGF5d2hpcmwuY29tIiwiYmFyMC5uZXQiLCJiYXIxLm5ldCIsImJhcjIubmV0IiwicmR2LnRvIiwiYXJ0LnBsIiwiZ2xpd2ljZS5wbCIsImty'@;
put 'YWtvdy5wbCIsInBvem5hbi5wbCIsIndyb2MucGwiLCJ6YWtvcGFuZS5wbCIsInBhbnRoZW9uc2l0ZS5pbyIsImdvdHBhbnRoZW9uLmNvbSIsIm15cGVwLmxpbmsiLCJwZXJzcGVjdGEuY2xvdWQiLCJsazMucnUiLCJvbi13ZWIuZnIiLCJiYy5wbGF0Zm9ybS5zaCIsImVudC5wbGF0Zm9ybS5z'@;
put 'aCIsImV1LnBsYXRmb3JtLnNoIiwidXMucGxhdGZvcm0uc2giLCIqLnBsYXRmb3Jtc2guc2l0ZSIsIioudHN0LnNpdGUiLCJwbGF0dGVyLWFwcC5jb20iLCJwbGF0dGVyLWFwcC5kZXYiLCJwbGF0dGVycC51cyIsInBkbnMucGFnZSIsInBsZXNrLnBhZ2UiLCJwbGVza25zLmNvbSIsImR5bjUz'@;
put 'LmlvIiwib25wb3J0ZXIucnVuIiwiY28uYm4iLCJwb3N0bWFuLWVjaG8uY29tIiwicHN0bW4uaW8iLCJtb2NrLnBzdG1uLmlvIiwiaHR0cGJpbi5vcmciLCJwcmVxdWFsaWZ5bWUudG9kYXkiLCJ4ZW4ucHJnbXIuY29tIiwicHJpdi5hdCIsInBydmN5LnBhZ2UiLCIqLmR3ZWIubGluayIsInBy'@;
put 'b3RvbmV0LmlvIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLWVuLWZyYW5jZS5mciIsImJ5ZW4uc2l0ZSIsInB1YnRscy5vcmciLCJweXRob25hbnl3aGVyZS5jb20iLCJldS5weXRob25hbnl3aGVyZS5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwicWJ1c2VyLmNvbSIsImNsb3Vk'@;
put 'c2l0ZS5idWlsZGVycyIsImluc3RhbmNlcy5zcGF3bi5jYyIsImluc3RhbnRjbG91ZC5jbiIsInJhcy5ydSIsInFhMi5jb20iLCJxY3guaW8iLCIqLnN5cy5xY3guaW8iLCJkZXYtbXlxbmFwY2xvdWQuY29tIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29tIiwibXlxbmFwY2xvdWQuY29tIiwiKi5x'@;
put 'dWlwZWxlbWVudHMuY29tIiwidmFwb3IuY2xvdWQiLCJ2YXBvcmNsb3VkLmlvIiwicmFja21hemUuY29tIiwicmFja21hemUubmV0IiwiZy52YnJwbHNieC5pbyIsIioub24tazNzLmlvIiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1yaW8uaW8iLCJyZWFkdGhlZG9jcy5pbyIsInJoY2xv'@;
put 'dWQuY29tIiwiYXBwLnJlbmRlci5jb20iLCJvbnJlbmRlci5jb20iLCJyZXBsLmNvIiwiaWQucmVwbC5jbyIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsIndlbGxiZWluZ3pvbmUuZXUiLCJ3ZWxsYmVpbmd6b25lLmNvLnVr'@;
put 'IiwiYWRpbW8uY28udWsiLCJpdGNvdWxkYmV3b3Iuc2UiLCJnaXQtcGFnZXMucml0LmVkdSIsInJvY2t5LnBhZ2UiLCJcdTA0MzFcdTA0MzhcdTA0MzcuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDNlXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQ0MFx1MDQ0'@;
put 'Ylx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0MzhcdTA0NDAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDQxXHUwNDNhLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0MzBcdTA0'@;
put 'M2NcdTA0MzBcdTA0NDBcdTA0MzAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNlXHUwNDQ3XHUwNDM4Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzZlx1MDQzMS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NGYuXHUwNDQwXHUwNDQzXHUwNDQxIiwiKi5idWlsZGVy'@;
put 'LmNvZGUuY29tIiwiKi5kZXYtYnVpbGRlci5jb2RlLmNvbSIsIiouc3RnLWJ1aWxkZXIuY29kZS5jb20iLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5kZSIsImxvZ29pcC5jb20iLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5s'@;
put 'LWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vi'@;
put 'c2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3Vk'@;
put 'IiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBs'@;
put 'LXdhdy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmly'@;
put 'ZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3Rv'@;
put 'cmUiLCJzZW5zZWVyaW5nLm5ldCIsIm1pbmlzaXRlLm1zIiwibWFnbmV0LnBhZ2UiLCJiaXoudWEiLCJjby51YSIsInBwLnVhIiwic2hpZnRjcnlwdG8uZGV2Iiwic2hpZnRjcnlwdG8uaW8iLCJzaGlmdGVkaXQuaW8iLCJteXNob3BibG9ja3MuY29tIiwibXlzaG9waWZ5LmNvbSIsInNob3Bp'@;
put 'dHNpdGUuY29tIiwic2hvcHdhcmUuc3RvcmUiLCJtby1zaWVtZW5zLmlvIiwiMWthcHAuY29tIiwiYXBwY2hpemkuY29tIiwiYXBwbGluemkuY29tIiwic2luYWFwcC5jb20iLCJ2aXBzaW5hYXBwLmNvbSIsInNpdGVsZWFmLm5ldCIsImJvdW50eS1mdWxsLmNvbSIsImFscGhhLmJvdW50eS1m'@;
put 'dWxsLmNvbSIsImJldGEuYm91bnR5LWZ1bGwuY29tIiwic21hbGwtd2ViLm9yZyIsInZwNC5tZSIsInRyeS1zbm93cGxvdy5jb20iLCJzcmh0LnNpdGUiLCJzdGFja2hlcm8tbmV0d29yay5jb20iLCJtdXNpY2lhbi5pbyIsIm5vdmVjb3JlLnNpdGUiLCJzdGF0aWMubGFuZCIsImRldi5zdGF0'@;
put 'aWMubGFuZCIsInNpdGVzLnN0YXRpYy5sYW5kIiwic3RvcmViYXNlLnN0b3JlIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0IiwicGxheXN0YXRpb24tY2xvdWQu'@;
put 'Y29tIiwiYXBwcy5sYWlyLmlvIiwiKi5zdG9sb3MuaW8iLCJzcGFjZWtpdC5pbyIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3Au'@;
put 'Y2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5l'@;
put 'dCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsImFwaS5zdGRsaWIuY29tIiwic3RvcmouZmFybSIsInV0d2VudGUuaW8iLCJzb2Muc3JjZi5uZXQiLCJ1c2VyLnNyY2Yu'@;
put 'bmV0IiwidGVtcC1kbnMuY29tIiwic3VwYWJhc2UuY28iLCJzdXBhYmFzZS5pbiIsInN1cGFiYXNlLm5ldCIsInN1LnBhYmEuc2UiLCIqLnM1eS5pbyIsIiouc2Vuc2lvc2l0ZS5jbG91ZCIsInN5bmNsb3VkLml0IiwiZHNjbG91ZC5iaXoiLCJkaXJlY3QucXVpY2tjb25uZWN0LmNuIiwiZHNt'@;
put 'eW5hcy5jb20iLCJmYW1pbHlkcy5jb20iLCJkaXNrc3RhdGlvbi5tZSIsImRzY2xvdWQubWUiLCJpMjM0Lm1lIiwibXlkcy5tZSIsInN5bm9sb2d5Lm1lIiwiZHNjbG91ZC5tb2JpIiwiZHNteW5hcy5uZXQiLCJmYW1pbHlkcy5uZXQiLCJkc215bmFzLm9yZyIsImZhbWlseWRzLm9yZyIsInZw'@;
put 'bnBsdXMudG8iLCJkaXJlY3QucXVpY2tjb25uZWN0LnRvIiwidGFiaXRvcmRlci5jby5pbCIsInRhaWZ1bi1kbnMuZGUiLCJiZXRhLnRhaWxzY2FsZS5uZXQiLCJ0cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInNpdGUudGItaG9z'@;
put 'dGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCJnd2lkZGxlLmNvLnVrIiwiKi5maXJlbmV0LmNoIiwiKi5zdmMuZmlyZW5ldC5jaCIsInJlc2VydmQuY29tIiwidGhpbmdkdXN0ZGF0YS5jb20i'@;
put 'LCJjdXN0LmRldi50aGluZ2R1c3QuaW8iLCJjdXN0LmRpc3JlYy50aGluZ2R1c3QuaW8iLCJjdXN0LnByb2QudGhpbmdkdXN0LmlvIiwiY3VzdC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJl'@;
put 'c2VydmQudGVzdGluZy50aGluZ2R1c3QuaW8iLCJ0aWNrZXRzLmlvIiwiYXJ2by5uZXR3b3JrIiwiYXppbXV0aC5uZXR3b3JrIiwidGxvbi5uZXR3b3JrIiwidG9ycHJvamVjdC5uZXQiLCJwYWdlcy50b3Jwcm9qZWN0Lm5ldCIsImJsb3hjbXMuY29tIiwidG93bm5ld3Mtc3RhZ2luZy5jb20i'@;
put 'LCJ0Yml0cy5tZSIsIjEyaHAuYXQiLCIyaXguYXQiLCI0bGltYS5hdCIsImxpbWEtY2l0eS5hdCIsIjEyaHAuY2giLCIyaXguY2giLCI0bGltYS5jaCIsImxpbWEtY2l0eS5jaCIsInRyYWZmaWNwbGV4LmNsb3VkIiwiZGUuY29vbCIsIjEyaHAuZGUiLCIyaXguZGUiLCI0bGltYS5kZSIsImxp'@;
put 'bWEtY2l0eS5kZSIsIjEzMzcucGljdHVyZXMiLCJjbGFuLnJpcCIsImxpbWEtY2l0eS5yb2NrcyIsIndlYnNwYWNlLnJvY2tzIiwibGltYS56b25lIiwiKi50cmFuc3VybC5iZSIsIioudHJhbnN1cmwuZXUiLCIqLnRyYW5zdXJsLm5sIiwic2l0ZS50cmFuc2lwLm1lIiwidHV4ZmFtaWx5Lm9y'@;
put 'ZyIsImRkLWRucy5kZSIsImRpc2tzdGF0aW9uLmV1IiwiZGlza3N0YXRpb24ub3JnIiwiZHJheS1kbnMuZGUiLCJkcmF5ZG5zLmRlIiwiZHluLXZwbi5kZSIsImR5bnZwbi5kZSIsIm1laW4tdmlnb3IuZGUiLCJteS12aWdvci5kZSIsIm15LXdhbi5kZSIsInN5bm8tZHMuZGUiLCJzeW5vbG9n'@;
put 'eS1kaXNrc3RhdGlvbi5kZSIsInN5bm9sb2d5LWRzLmRlIiwidHlwZWRyZWFtLmFwcCIsInByby50eXBlZm9ybS5jb20iLCJ1YmVyLnNwYWNlIiwiKi51YmVyc3BhY2UuZGUiLCJoay5jb20iLCJoay5vcmciLCJsdGQuaGsiLCJpbmMuaGsiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwi'@;
put 'c2NoLndmIiwib3JnLnl0IiwidmlydHVhbHVzZXIuZGUiLCJ2aXJ0dWFsLXVzZXIuZGUiLCJ1cGxpLmlvIiwidXJvd24uY2xvdWQiLCJkbnN1cGRhdGUuaW5mbyIsImxpYi5kZS51cyIsIjIwMzguaW8iLCJ2ZXJjZWwuYXBwIiwidmVyY2VsLmRldiIsIm5vdy5zaCIsInJvdXRlci5tYW5hZ2Vt'@;
put 'ZW50Iiwidi1pbmZvLmluZm8iLCJ2b29ybG9wZXIuY2xvdWQiLCJuZWtvLmFtIiwibnlhYS5hbSIsImJlLmF4IiwiY2F0LmF4IiwiZXMuYXgiLCJldS5heCIsImdnLmF4IiwibWMuYXgiLCJ1cy5heCIsInh5LmF4IiwibmwuY2kiLCJ4eC5nbCIsImFwcC5ncCIsImJsb2cuZ3QiLCJkZS5ndCIs'@;
put 'InRvLmd0IiwiYmUuZ3kiLCJjYy5obiIsImJsb2cua2ciLCJpby5rZyIsImpwLmtnIiwidHYua2ciLCJ1ay5rZyIsInVzLmtnIiwiZGUubHMiLCJhdC5tZCIsImRlLm1kIiwianAubWQiLCJ0by5tZCIsImluZGllLnBvcm4iLCJ2eGwuc2giLCJjaC50YyIsIm1lLnRjIiwid2UudGMiLCJueWFu'@;
put 'LnRvIiwiYXQudmciLCJibG9nLnZ1IiwiZGV2LnZ1IiwibWUudnUiLCJ2LnVhIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCIqLndlYmhhcmUuZGV2IiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwiYm9va29ubGluZS5hcHAiLCJob3Rl'@;
put 'bHdpdGhmbGlnaHQuY29tIiwid2VkZXBsb3kuaW8iLCJ3ZWRlcGxveS5tZSIsIndlZGVwbG95LnNoIiwicmVtb3Rld2QuY29tIiwicGFnZXMud2lhcmR3ZWIuY29tIiwid21mbGFicy5vcmciLCJ0b29sZm9yZ2Uub3JnIiwid21jbG91ZC5vcmciLCJwYW5lbC5nZyIsImRhZW1vbi5wYW5lbC5n'@;
put 'ZyIsIm1lc3N3aXRoZG5zLmNvbSIsIndvbHRsYWItZGVtby5jb20iLCJteWZvcnVtLmNvbW11bml0eSIsImNvbW11bml0eS1wcm8uZGUiLCJkaXNrdXNzaW9uc2JlcmVpY2guZGUiLCJjb21tdW5pdHktcHJvLm5ldCIsIm1laW5mb3J1bS5uZXQiLCJhZmZpbml0eWxvdHRlcnkub3JnLnVrIiwi'@;
put 'cmFmZmxlZW50cnkub3JnLnVrIiwid2Vla2x5bG90dGVyeS5vcmcudWsiLCJ3cGVuZ2luZXBvd2VyZWQuY29tIiwianMud3BlbmdpbmVwb3dlcmVkLmNvbSIsIndpeHNpdGUuY29tIiwiZWRpdG9yeC5pbyIsImhhbGYuaG9zdCIsInhuYmF5LmNvbSIsInUyLnhuYmF5LmNvbSIsInUyLWxvY2Fs'@;
put 'LnhuYmF5LmNvbSIsImNpc3Ryb24ubmwiLCJkZW1vbi5ubCIsInhzNGFsbC5zcGFjZSIsInlhbmRleGNsb3VkLm5ldCIsInN0b3JhZ2UueWFuZGV4Y2xvdWQubmV0Iiwid2Vic2l0ZS55YW5kZXhjbG91ZC5uZXQiLCJvZmZpY2lhbC5hY2FkZW15IiwieW9sYXNpdGUuY29tIiwieWJvLmZhaXRo'@;
put 'IiwieW9tYm8ubWUiLCJob21lbGluay5vbmUiLCJ5Ym8ucGFydHkiLCJ5Ym8ucmV2aWV3IiwieWJvLnNjaWVuY2UiLCJ5Ym8udHJhZGUiLCJ5bmguZnIiLCJub2hvc3QubWUiLCJub2hvLnN0IiwiemEubmV0IiwiemEub3JnIiwiYnNzLmRlc2lnbiIsImJhc2ljc2VydmVyLmlvIiwidmlydHVh'@;
put 'bHNlcnZlci5pbyIsImVudGVycHJpc2VjbG91ZC5udSJdJyl9fSxtPXt9O2Z1bmN0aW9uIGxlKE0pe3ZhciBPPW1bTV07aWYodm9pZCAwIT09TylyZXR1cm4gTy5leHBvcnRzO3ZhciBSPW1bTV09e2lkOk0sbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiB4W01dLmNhbGwoUi5leHBvcnRz'@;
put 'LFIsUi5leHBvcnRzLGxlKSxSLmxvYWRlZD0hMCxSLmV4cG9ydHN9cmV0dXJuIGxlLmQ9KE0sTyk9Pntmb3IodmFyIFIgaW4gTylsZS5vKE8sUikmJiFsZS5vKE0sUikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLFIse2VudW1lcmFibGU6ITAsZ2V0Ok9bUl19KX0sbGUuZz1mdW5jdGlvbigp'@;
put 'e2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLGxlLm89KE0sTyk9Pk9iamVj'@;
put 'dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChNLE8pLGxlLnI9TT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGxlLm5tZD1NPT4oTS5wYXRocz1bXSxNLmNoaWxkcmVufHwoTS5jaGlsZHJlbj1bXSksTSksbGUoMzYwNyl9KSgpfSwxMjA3MDpmdW5jdGlvbihhdCxMZSxGKXsidXNlIHN0cmljdCI7dmFyIGFlPXRoaXMmJnRoaXMuX19pbXBvcnREZWZh'@;
put 'dWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYmUi5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShMZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTGUuaXNTcGVjaWFsTWlzc2luZz1MZS5jaG9pY2VWYWxpZGF0b3I9TGUuY29uZmlybWF0aW9uVmFsaWRh'@;
put 'dG9yPUxlLnVybFZhbGlkYXRvcj12b2lkIDA7dmFyIHg9YWUoRig3ODUzMikpO0xlLnVybFZhbGlkYXRvcj1mdW5jdGlvbihSLHope3JldHVybiEheC5kZWZhdWx0LmlzSHR0cFVyaShSKXx8ISF4LmRlZmF1bHQuaXNIdHRwc1VyaShSKXx8IiI9PT1SfHx6fSxMZS5jb25maXJtYXRpb25WYWxp'@;
put 'ZGF0b3I9ZnVuY3Rpb24oUil7cmV0dXJuITA9PT1SfHwhMT09PVJ9LExlLmNob2ljZVZhbGlkYXRvcj1mdW5jdGlvbihSLHosSyl7cmV0dXJuIFI+MCYmUjw9enx8S30sTGUuaXNTcGVjaWFsTWlzc2luZz1mdW5jdGlvbihSKXtyZXR1cm4oInN0cmluZyIhPXR5cGVvZiBSfHwhUi5pbmNsdWRl'@;
put 'cygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KFIpfX0sNzY3NzE6KGF0LExlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeDtMZS5EPXZvaWQgMCwoeD1MZS5EfHwoTGUuRD17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLHguU2FzOT0iU0FTOSIseC5TYXNqcz0i'@;
put 'U0FTSlMifSw1MTcxNDooYXQsTGUpPT57InVzZSBzdHJpY3QiO0xlLlI9dm9pZCAwLExlLlI9ZnVuY3Rpb24oeCxtLGxlKXtpZih2b2lkIDA9PT1tJiYobT0xKSx2b2lkIDA9PT1sZSYmKGxlPTEwOTk1MTE2Mjc3NzYpLDA9PT14KXJldHVybiIwIEIiO3g9eD5sZT9sZTp4O3ZhciBSPW08MD8w'@;
put 'Om0sej1NYXRoLmZsb29yKE1hdGgubG9nKHgpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oeC9NYXRoLnBvdygxMDI0LHopKS50b0ZpeGVkKFIpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW3pdfX0sODA3ODg6ZnVuY3Rpb24oYXQpe3ZhciBMZT17dmVyc2lvbjoiMS4xNS4wIn07TGVb'@;
put 'NDM3XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2'@;
put 'Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYy'@;
put 'XHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVc'@;
put 'dTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1'@;
put 'NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2'@;
put 'MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0'@;
put 'KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLExlWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRc'@;
put 'eDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUw'@;
put 'MTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4'@;
put 'YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUy'@;
put 'NTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4'@;
put 'YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsr'@;
put 'K20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVs3MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBl'@;
put 'XHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+'@;
put 'XHg3Zlx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNi'@;
put 'M1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1'@;
put 'MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2'@;
put 'NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1'@;
put 'MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQo'@;
put 'bSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLExlWzg1MF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4'@;
put 'XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVh'@;
put 'XHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFc'@;
put 'dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4'@;
put 'YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZc'@;
put 'eGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbODUy'@;
put 'XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5'@;
put 'Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUw'@;
put 'MTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTky'@;
put 'XHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc'@;
put 'dTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4'@;
put 'ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0p'@;
put 'XT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVs4NTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4'@;
put 'MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4'@;
put 'ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhi'@;
put 'Ylx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUw'@;
put 'XHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZm'@;
put 'ZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9'@;
put 'fSgpLExlWzg2MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4v'@;
put 'MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRc'@;
put 'eGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2'@;
put 'XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUy'@;
put 'NTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIy'@;
put 'MjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1G'@;
put 'LmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4'@;
put 'MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4'@;
put 'ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5'@;
put 'M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1'@;
put 'MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUw'@;
put 'M2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0'@;
put 'KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbODY2XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx'@;
put 'NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJc'@;
put 'dTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0'@;
put 'MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNc'@;
put 'dTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1'@;
put 'NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFc'@;
put 'dTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFy'@;
put 'QXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbODc0XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx'@;
put 'ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0'@;
put 'XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUw'@;
put 'ZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUw'@;
put 'ZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCks'@;
put 'TGVbODk1XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz'@;
put 'NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFc'@;
put 'eGM5XHUwMTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1'@;
put 'OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBc'@;
put 'dTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1'@;
put 'MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hh'@;
put 'ckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLExlWzkzMl09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZc'@;
put 'clx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5'@;
put 'ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjYxXHVmZjYyXHVmZjYzXHVmZjY0XHVmZjY1XHVmZjY2XHVmZjY3XHVmZjY4XHVmZjY5XHVmZjZhXHVmZjZiXHVmZjZjXHVmZjZkXHVmZjZlXHVmZjZmXHVmZjcwXHVmZjcxXHVmZjcyXHVmZjczXHVmZjc0XHVm'@;
put 'Zjc1XHVmZjc2XHVmZjc3XHVmZjc4XHVmZjc5XHVmZjdhXHVmZjdiXHVmZjdjXHVmZjdkXHVmZjdlXHVmZjdmXHVmZjgwXHVmZjgxXHVmZjgyXHVmZjgzXHVmZjg0XHVmZjg1XHVmZjg2XHVmZjg3XHVmZjg4XHVmZjg5XHVmZjhhXHVmZjhiXHVmZjhjXHVmZjhkXHVmZjhlXHVmZjhmXHVmZjkw'@;
put 'XHVmZjkxXHVmZjkyXHVmZjkzXHVmZjk0XHVmZjk1XHVmZjk2XHVmZjk3XHVmZjk4XHVmZjk5XHVmZjlhXHVmZjliXHVmZjljXHVmZjlkXHVmZjllXHVmZjlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFi'@;
put 'XHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZc'@;
put 'dTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4'@;
put 'ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVj'@;
put 'Zlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEyOV1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTI5XVttXV09MzMwMjQrbSxGWzMzMDI0K21dPXhbMTI5XVttXSk7Zm9yKHhbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0'@;
put 'XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVh'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUz'@;
put 'MDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDcz'@;
put 'XHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUz'@;
put 'MDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzBdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMF1bbV1dPTMzMjgwK20sRlszMzI4MCttXT14WzEzMF1bbV0pO2Zvcih4WzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1'@;
put 'MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBj'@;
put 'Mlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1'@;
put 'MzBkZVx1MzBkZlx1ZmZmZFx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1'@;
put 'MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNj'@;
put 'MVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzFdW21dXT0zMzUzNittLEZbMzM1MzYrbV09eFsxMzFdW21dKTtmb3IoeFsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNc'@;
put 'dTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0'@;
put 'MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0Mzlc'@;
put 'dTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNc'@;
put 'dTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzJdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzEzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMyXVttXV09MzM3OTIrbSxGWzMzNzkyK21dPXhbMTMyXVttXSk7Zm9yKHhbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYx'@;
put 'XHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcwXHUyNDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUy'@;
put 'MTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2XHUzMmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUy'@;
put 'MjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNV1bbV1dPTM0NTYwK20sRlszNDU2MCttXT14WzEzNV1bbV0pO2Zvcih4WzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUy'@;
put 'NVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1'@;
put 'NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5'@;
put 'NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzEzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzZdW21dXT0zNDgxNittLEZbMzQ4MTYrbV09eFsxMzZdW21dKTtmb3IoeFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlc'@;
put 'dTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZk'@;
put 'YjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFc'@;
put 'dTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZj'@;
put 'OTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZc'@;
put 'dTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRm'@;
put 'YzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM3XVttXV09MzUwNzIrbSxGWzM1MDcyK21dPXhbMTM3XVttXSk7Zm9yKHhbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhk'@;
put 'XHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4'@;
put 'ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0'@;
put 'XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1'@;
put 'MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUz'@;
put 'XHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3'@;
put 'NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNi'@;
put 'XHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOF1bbV1dPTM1MzI4K20sRlszNTMyOCttXT14WzEzOF1bbV0pO2Zvcih4WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4'@;
put 'MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1'@;
put 'NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1ZmZmZFx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2'@;
put 'Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1'@;
put 'NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVm'@;
put 'MFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1'@;
put 'OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFk'@;
put 'Ylx1OTFlN1x1NWM1MVx1NWM0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzldW21dXT0zNTU4NCttLEZbMzU1ODQrbV09eFsxMzldW21dKTtmb3IoeFsxNDBdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThl'@;
put 'Y2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2Rc'@;
put 'dTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZm'@;
put 'NTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRc'@;
put 'dTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2'@;
put 'NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNc'@;
put 'dTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUy'@;
put 'OWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQwXVttXV09MzU4NDArbSxGWzM1ODQwK21dPXhbMTQwXVttXSk7'@;
put 'Zm9yKHhbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2'@;
put 'MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1'@;
put 'XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1'@;
put 'NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYw'@;
put 'XHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4'@;
put 'OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMx'@;
put 'XHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3'@;
put 'ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MV1bbV1dPTM2MDk2K20sRlszNjA5Nitt'@;
put 'XT14WzE0MV1bbV0pO2Zvcih4WzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1'@;
put 'NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNm'@;
put 'OFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1ZmZmZFx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1'@;
put 'N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVj'@;
put 'Ylx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1'@;
put 'NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBh'@;
put 'YVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1'@;
put 'NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDJdW21dXT0zNjM1'@;
put 'MittLEZbMzYzNTIrbV09eFsxNDJdW21dKTtmb3IoeFsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJc'@;
put 'dTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5'@;
put 'MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVc'@;
put 'dTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUx'@;
put 'MWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNc'@;
put 'dTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4'@;
put 'NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFc'@;
put 'dTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTQzXVttXV09MzY2MDgrbSxGWzM2NjA4K21dPXhbMTQzXVttXSk7Zm9yKHhbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1'@;
put 'XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4'@;
put 'OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHVmZmZkXHU5MDE3'@;
put 'XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5'@;
put 'ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRi'@;
put 'XHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4'@;
put 'Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3'@;
put 'XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDRdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE0NF1bbV1dPTM2ODY0K20sRlszNjg2NCttXT14WzE0NF1bbV0pO2Zvcih4WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNj'@;
put 'ZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1'@;
put 'Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNi'@;
put 'Ylx1ZmZmZFx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1'@;
put 'OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNj'@;
put 'M1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1'@;
put 'NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1'@;
put 'M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ1'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDVdW21dXT0zNzEyMCttLEZbMzcxMjArbV09eFsxNDVdW21dKTtmb3IoeFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgx'@;
put 'MzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2Jc'@;
put 'dThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdh'@;
put 'ZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdc'@;
put 'dTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThh'@;
put 'ZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJc'@;
put 'dTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVl'@;
put 'OTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDZdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ2XVttXV09MzczNzYrbSxGWzM3Mzc2K21dPXhbMTQ2XVttXSk7Zm9yKHhbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MTJkXHU5MWQ4XHU5'@;
put 'ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODVi'@;
put 'XHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1'@;
put 'OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4'@;
put 'XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1'@;
put 'YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0'@;
put 'XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2'@;
put 'OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ3'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0N11bbV1dPTM3NjMyK20sRlszNzYzMittXT14WzE0N11bbV0pO2Zvcih4WzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk4Mlx1'@;
put 'NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBm'@;
put 'ZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1'@;
put 'ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1ZmZmZFx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5'@;
put 'NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1'@;
put 'OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIy'@;
put 'Y1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1'@;
put 'NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDhdW21dXT0zNzg4OCttLEZbMzc4ODgrbV09eFsxNDhdW21dKTtmb3IoeFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0'@;
put 'ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBc'@;
put 'dTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgy'@;
put 'MWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRc'@;
put 'dTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2'@;
put 'NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRc'@;
put 'dTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ5XVttXV09MzgxNDQrbSxGWzM4MTQ0K21dPXhbMTQ5XVttXSk7Zm9yKHhbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1'@;
put 'ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2'@;
put 'XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2'@;
put 'N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQx'@;
put 'XHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1'@;
put 'MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2Iw'@;
put 'XHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MF1bbV1dPTM4NDAwK20sRlszODQwMCttXT14WzE1MF1bbV0pO2Zvcih4WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1'@;
put 'OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2Fh'@;
put 'Zlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1ZmZmZFx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1'@;
put 'N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0'@;
put 'ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1'@;
put 'NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVl'@;
put 'NFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1'@;
put 'N2RmNFx1ODA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTFdW21dXT0zODY1NittLEZbMzg2NTYrbV09eFsxNTFdW21dKTtmb3IoeFsxNTJdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJc'@;
put 'dTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5'@;
put 'MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRl'@;
put 'M2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdc'@;
put 'dTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRm'@;
put 'ZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBc'@;
put 'dTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUyXVttXV09Mzg5MTIrbSxGWzM4OTEyK21dPXhbMTUyXVttXSk7Zm9yKHhbMTUz'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0'@;
put 'XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1'@;
put 'MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHVmZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJh'@;
put 'XHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1'@;
put 'MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1'@;
put 'XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1'@;
put 'M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEy'@;
put 'XHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1M11bbV1dPTM5MTY4K20sRlszOTE2OCttXT14WzE1M11b'@;
put 'bV0pO2Zvcih4WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUz'@;
put 'OVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1'@;
put 'NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1ZmZmZFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4'@;
put 'MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1'@;
put 'NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdk'@;
put 'Mlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1'@;
put 'NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1'@;
put 'MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTRdW21dXT0zOTQyNCttLEZbMzk0'@;
put 'MjQrbV09eFsxNTRdW21dKTtmb3IoeFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVh'@;
put 'MjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJc'@;
put 'dTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTVi'@;
put 'YzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBc'@;
put 'dTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVk'@;
put 'MTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdc'@;
put 'dTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVl'@;
put 'NzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU1XVttXV09'@;
put 'Mzk2ODArbSxGWzM5NjgwK21dPXhbMTU1XVttXSk7Zm9yKHhbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1'@;
put 'ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3'@;
put 'XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHVmZmZkXHU2MDE5XHU2MDEwXHU2'@;
put 'MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgz'@;
put 'XHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2'@;
put 'MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVm'@;
put 'XHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2'@;
put 'MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE1Nl1bbV1dPTM5OTM2K20sRlszOTkzNittXT14WzE1Nl1bbV0pO2Zvcih4WzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1'@;
put 'NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJj'@;
put 'N1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1ZmZmZFx1'@;
put 'NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRh'@;
put 'NVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1'@;
put 'NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVj'@;
put 'Nlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1'@;
put 'NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU3XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxNTddW21dXT00MDE5MittLEZbNDAxOTIrbV09eFsxNTddW21dKTtmb3IoeFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZc'@;
put 'dTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3'@;
put 'OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJc'@;
put 'dTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4'@;
put 'ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5Nzhc'@;
put 'dTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5'@;
put 'YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRc'@;
put 'dTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU4XVttXV09NDA0NDgrbSxGWzQwNDQ4K21dPXhbMTU4XVttXSk7Zm9yKHhbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMy'@;
put 'XHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2'@;
put 'YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVj'@;
put 'XHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2'@;
put 'Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVh'@;
put 'XHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2'@;
put 'ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0'@;
put 'XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU5XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxNTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OV1bbV1dPTQwNzA0K20sRls0MDcwNCttXT14WzE1OV1bbV0pO2Zvcih4WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzZVx1NmYxM1x1NmVm'@;
put 'N1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1'@;
put 'NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBi'@;
put 'OFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1ZmZmZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1'@;
put 'NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3'@;
put 'NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1'@;
put 'NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNm'@;
put 'OFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21dKTtmb3IoeFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0'@;
put 'ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZc'@;
put 'dTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1'@;
put 'Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdc'@;
put 'dTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2'@;
put 'YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3Njhc'@;
put 'dTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4'@;
put 'MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAwK21dPXhbMjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIz'@;
put 'XHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3'@;
put 'YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2'@;
put 'XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3'@;
put 'YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEz'@;
put 'XHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3'@;
put 'Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2XHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3ODU2K20sRls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3'@;
put 'ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1'@;
put 'N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1ZmZmZFx1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2Rk'@;
put 'NVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1'@;
put 'N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2Zl'@;
put 'MVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1'@;
put 'ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0'@;
put 'Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjddW21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgx'@;
put 'OTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFc'@;
put 'dTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgy'@;
put 'OWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVc'@;
put 'dTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgz'@;
put 'ZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZc'@;
put 'dTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1'@;
put 'NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4'@;
put 'NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEz'@;
put 'XHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4'@;
put 'NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4Nzgy'@;
put 'XHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4'@;
put 'ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIw'@;
put 'XHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4'@;
put 'OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4'@;
put 'WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1'@;
put 'ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2'@;
put 'Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1ZmZmZFx1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1'@;
put 'OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3'@;
put 'ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1'@;
put 'OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNj'@;
put 'ZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1'@;
put 'OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsy'@;
put 'MzBdW21dKTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFc'@;
put 'dThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThm'@;
put 'MTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNc'@;
put 'dThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkw'@;
put 'NTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJc'@;
put 'dTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkx'@;
put 'ZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJc'@;
put 'dTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxG'@;
put 'WzU5MTM2K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2Iw'@;
put 'XHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5'@;
put 'NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHVmZmZkXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFk'@;
put 'XHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5'@;
put 'NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0'@;
put 'XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5'@;
put 'Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBj'@;
put 'XHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1b'@;
put 'bV1dPTU5MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThl'@;
put 'OVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1'@;
put 'OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0M1x1ZmZmZFx1OWEzZVx1OWE1'@;
put 'NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1'@;
put 'OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5'@;
put 'MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1'@;
put 'OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQw'@;
put 'Nlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlk'@;
put 'ODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlc'@;
put 'dTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZm'@;
put 'ZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJc'@;
put 'dTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3'@;
put 'MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4'@;
put 'XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1'@;
put 'N2M3XHVmYTBmXHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4'@;
put 'XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2'@;
put 'NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4'@;
put 'XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2'@;
put 'ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1'@;
put 'NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3'@;
put 'YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1'@;
put 'ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ZmZmZFx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVj'@;
put 'Zlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1'@;
put 'OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1Zjlk'@;
put 'Y1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1'@;
put 'OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFc'@;
put 'dTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5'@;
put 'MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZc'@;
put 'dTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0'@;
put 'ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdc'@;
put 'dTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0'@;
put 'OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRc'@;
put 'dTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZbNjRlMyttXT14WzI1MF1bbV0pO2Zvcih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJi'@;
put 'MVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1'@;
put 'NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmEx'@;
put 'ZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1'@;
put 'OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1'@;
put 'MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1'@;
put 'OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21dXT02NDI1NittLEZbNjQyNTYrbV09eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUyXVttXV09NjQ1MTIrbSxGWzY0NTEyK21dPXhbMjUyXVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksTGVbOTM2XT1mdW5jdGlvbigp'@;
put 'e3ZhciBtLEY9W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8w'@;
put 'MTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJc'@;
put 'dTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRlNmJcdTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRcdTRlNzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRl'@;
put 'N2FcdTRlN2JcdTRlN2NcdTRlN2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZc'@;
put 'dTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRl'@;
put 'ZmNcdTRlZmVcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVcdTRmMTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNc'@;
put 'dTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRm'@;
put 'NmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVc'@;
put 'dTRmOWZcdTRmYTFcdTRmYTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTI5XVttXV09MzMwMjQrbSxGWzMzMDI0K21dPXhbMTI5XVttXSk7Zm9yKHhbMTMwXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwXHU0ZmIxXHU0ZmIyXHU0ZmIzXHU0ZmI0XHU0ZmI2XHU0ZmI3XHU0ZmI4XHU0ZmI5XHU0ZmJhXHU0ZmJiXHU0ZmJjXHU0ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2'@;
put 'XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyXHU0ZmQzXHU0ZmQ0XHU0ZmQ1XHU0ZmQ2XHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0'@;
put 'ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDAyXHU1MDAzXHU1MDA0XHU1MDA1XHU1MDA2XHU1MDA3XHU1MDA4XHU1MDA5XHU1MDBhXHVmZmZkXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIw'@;
put 'XHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmXHU1MDMwXHU1MDMxXHU1MDMyXHU1MDMzXHU1MDM0XHU1MDM1XHU1MDM2XHU1MDM3XHU1MDM4XHU1MDM5XHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1'@;
put 'MDRiXHU1MDRkXHU1MDUwXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU0XHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkXHU1MDVlXHU1MDVmXHU1MDYwXHU1MDYxXHU1MDYyXHU1MDYzXHU1MDY0XHU1MDY2XHU1MDY3XHU1MDY4XHU1MDY5XHU1MDZhXHU1MDZiXHU1MDZkXHU1MDZl'@;
put 'XHU1MDZmXHU1MDcwXHU1MDcxXHU1MDcyXHU1MDczXHU1MDc0XHU1MDc1XHU1MDc4XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlXHU1MDhmXHU1MDkwXHU1MDkxXHU1MDkyXHU1'@;
put 'MDkzXHU1MDk0XHU1MDk1XHU1MDk2XHU1MDk3XHU1MDk4XHU1MDk5XHU1MDlhXHU1MDliXHU1MDljXHU1MDlkXHU1MDllXHU1MDlmXHU1MGEwXHU1MGExXHU1MGEyXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkXHU1MGFlXHU1MGFmXHU1MGIwXHU1MGIxXHU1MGIzXHU1MGI0XHU1MGI1'@;
put 'XHU1MGI2XHU1MGI3XHU1MGI4XHU1MGI5XHU1MGJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMF1bbV1dPTMzMjgwK20sRlszMzI4MCttXT14WzEzMF1bbV0pO2Zvcih4WzEzMV09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBk'@;
put 'MFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1'@;
put 'NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTEx'@;
put 'NFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1'@;
put 'NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1'@;
put 'ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1'@;
put 'NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFj'@;
put 'ZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzFdW21dXT0zMzUzNittLEZbMzM1MzYrbV09eFsxMzFdW21dKTtm'@;
put 'b3IoeFsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdcdTUxZThcdTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUx'@;
put 'ZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFc'@;
put 'dTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUy'@;
put 'NjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhcdTUyNzlcdTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUyODNcdTUyODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlc'@;
put 'dTUyOGFcdTUyOGJcdTUyOGNcdTUyOGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUy'@;
put 'YjhcdTUyYjlcdTUyYmFcdTUyYmJcdTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRc'@;
put 'dTUyZGVcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUyZWZcdTUyZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZcdTUyZjdcdTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUz'@;
put 'MDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMyXVttXV09MzM3OTIrbSxGWzMzNzkyK21d'@;
put 'PXhbMTMyXVttXSk7Zm9yKHhbMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4XHU1'@;
put 'MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmXHU1MzMwXHU1MzMxXHU1MzMyXHU1MzMzXHU1MzM0XHU1MzM1XHU1MzM2XHU1MzM3XHU1MzM4XHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzVi'@;
put 'XHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmXHVmZmZkXHU1MzkwXHU1MzkxXHU1MzkyXHU1MzkzXHU1Mzk0XHU1'@;
put 'Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmXHU1M2IwXHU1M2IxXHU1M2IyXHU1M2IzXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2Jl'@;
put 'XHU1M2MwXHU1M2MzXHU1M2M0XHU1M2M1XHU1M2M2XHU1M2M3XHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1'@;
put 'NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUx'@;
put 'XHU1NDVhXHU1NDVkXHU1NDVlXHU1NDVmXHU1NDYwXHU1NDYxXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5XHU1NDZhXHU1NDZiXHU1NDZjXHU1NDZkXHU1NDZlXHU1NDZmXHU1NDcwXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1'@;
put 'NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzM11bbV1dPTM0MDQ4'@;
put 'K20sRlszNDA0OCttXT14WzEzM11bbV0pO2Zvcih4WzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1'@;
put 'NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUw'@;
put 'M1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1'@;
put 'NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1'@;
put 'YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1'@;
put 'NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTVi'@;
put 'YVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1'@;
put 'NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'MzRdW21dXT0zNDMwNCttLEZbMzQzMDQrbV09eFsxMzRdW21dKTtmb3IoeFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTBcdTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRc'@;
put 'dTU2MTVcdTU2MTZcdTU2MTdcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2'@;
put 'NDBcdTU2NDFcdTU2NDJcdTU2NDNcdTU2NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJcdTU2NTNcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2NWVcdTU2NWZcdTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNc'@;
put 'dTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2RcdTU2N2VcdTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNcdTU2ODRcdTU2ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2'@;
put 'OGJcdTU2OGNcdTU2OGRcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2YTVcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWFc'@;
put 'dTU2YWJcdTU2YWNcdTU2YWRcdTU2YWVcdTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmRcdTU2YmVcdTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNcdTU2YzRcdTU2YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2'@;
put 'YzlcdTU2Y2JcdTU2Y2NcdTU2Y2RcdTU2Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTVcdTU2ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZc'@;
put 'dTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3MTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTM1XVttXV09MzQ1NjArbSxGWzM0NTYwK21dPXhbMTM1XVttXSk7Zm9yKHhbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzEyXHU1NzEzXHU1NzE0XHU1NzE1XHU1NzE2XHU1NzE3XHU1NzE4XHU1NzE5'@;
put 'XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0XHU1NzM1XHU1NzM2XHU1NzM3XHU1NzM4XHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1'@;
put 'NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyXHU1NzUzXHU1NzU0XHU1NzU1XHU1NzU2XHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1Nzgw'@;
put 'XHVmZmZkXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkXHU1NzhlXHU1NzhmXHU1NzkwXHU1NzkxXHU1Nzk0XHU1Nzk1XHU1Nzk2XHU1Nzk3XHU1Nzk4XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1'@;
put 'N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5XHU1N2JhXHU1N2JiXHU1N2JjXHU1N2JkXHU1N2JlXHU1N2JmXHU1N2MwXHU1N2MxXHU1N2M0XHU1N2M1XHU1N2M2XHU1N2M3XHU1N2M4XHU1N2M5XHU1N2NhXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1N2QzXHU1N2Q2'@;
put 'XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1XHU1N2U2XHU1N2U3XHU1N2U4XHU1N2U5XHU1N2VhXHU1N2ViXHU1N2VjXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1'@;
put 'ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1XHU1ODI2XHU1ODI3XHU1ODI4'@;
put 'XHU1ODI5XHU1ODJiXHU1ODJjXHU1ODJkXHU1ODJlXHU1ODJmXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2XHU1ODM3XHU1ODM4XHU1ODM5XHU1ODNhXHU1ODNiXHU1ODNjXHU1ODNkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzZd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNl1bbV1dPTM0ODE2K20sRlszNDgxNittXT14WzEzNl1bbV0pO2Zvcih4WzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0'@;
put 'M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1'@;
put 'NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4'@;
put 'YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1'@;
put 'NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThj'@;
put 'Ylx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1'@;
put 'NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkx'@;
put 'MVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzN10ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzddW21dXT0zNTA3MittLEZbMzUwNzIrbV09eFsxMzddW21dKTtmb3IoeFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5'@;
put 'NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5NjlcdTU5NmFcdTU5NmJcdTU5NmNcdTU5NmRcdTU5NmVc'@;
put 'dTU5NmZcdTU5NzBcdTU5NzFcdTU5NzJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5'@;
put 'OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTZcdWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5YjdcdTU5YjhcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5YzFcdTU5YzJcdTU5YzNcdTU5YzRcdTU5YzVcdTU5Yzdc'@;
put 'dTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRcdTU5ZWVcdTU5ZWZcdTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5'@;
put 'ZjNcdTU5ZjRcdTU5ZjVcdTU5ZjZcdTU5ZjdcdTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVc'@;
put 'dTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVhMzdcdTVhMzhcdTVhMzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDFcdTVhNDJcdTVhNDNcdTVhNDRcdTVh'@;
put 'NDVcdTVhNDdcdTVhNDhcdTVhNGJcdTVhNGNcdTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWJcdTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVhNjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzhd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM4XVttXV09MzUzMjgrbSxGWzM1MzI4K21dPXhbMTM4XVttXSk7Zm9yKHhbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTYxXHU1'@;
put 'YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiXHU1YTZjXHU1YTZkXHU1YTZlXHU1YTZmXHU1YTcwXHU1YTcxXHU1YTcyXHU1YTczXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwXHU1YTgxXHU1YTgyXHU1YTgzXHU1YTg0XHU1YTg1XHU1YTg2'@;
put 'XHU1YTg3XHU1YTg4XHU1YTg5XHU1YThhXHU1YThiXHU1YThjXHU1YThkXHU1YThlXHU1YThmXHU1YTkwXHU1YTkxXHU1YTkzXHU1YTk0XHU1YTk1XHU1YTk2XHU1YTk3XHU1YTk4XHU1YTk5XHU1YTljXHU1YTlkXHU1YTllXHU1YTlmXHU1YWEwXHU1YWExXHU1YWEyXHU1YWEzXHU1YWE0XHU1'@;
put 'YWE1XHU1YWE2XHU1YWE3XHU1YWE4XHU1YWE5XHU1YWFiXHU1YWFjXHVmZmZkXHU1YWFkXHU1YWFlXHU1YWFmXHU1YWIwXHU1YWIxXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5XHU1YWJhXHU1YWJiXHU1YWJjXHU1YWJkXHU1YWJmXHU1YWMwXHU1YWMzXHU1YWM0XHU1YWM1XHU1YWM2XHU1YWM3'@;
put 'XHU1YWM4XHU1YWNhXHU1YWNiXHU1YWNkXHU1YWNlXHU1YWNmXHU1YWQwXHU1YWQxXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjXHU1YWVkXHU1YWVlXHU1YWVmXHU1'@;
put 'YWYwXHU1YWYyXHU1YWYzXHU1YWY0XHU1YWY1XHU1YWY2XHU1YWY3XHU1YWY4XHU1YWY5XHU1YWZhXHU1YWZiXHU1YWZjXHU1YWZkXHU1YWZlXHU1YWZmXHU1YjAwXHU1YjAxXHU1YjAyXHU1YjAzXHU1YjA0XHU1YjA1XHU1YjA2XHU1YjA3XHU1YjA4XHU1YjBhXHU1YjBiXHU1YjBjXHU1YjBk'@;
put 'XHU1YjBlXHU1YjBmXHU1YjEwXHU1YjExXHU1YjEyXHU1YjEzXHU1YjE0XHU1YjE1XHU1YjE4XHU1YjE5XHU1YjFhXHU1YjFiXHU1YjFjXHU1YjFkXHU1YjFlXHU1YjFmXHU1YjIwXHU1YjIxXHU1YjIyXHU1YjIzXHU1YjI0XHU1YjI1XHU1YjI2XHU1YjI3XHU1YjI4XHU1YjI5XHU1YjJhXHU1'@;
put 'YjJiXHU1YjJjXHU1YjJkXHU1YjJlXHU1YjJmXHU1YjMwXHU1YjMxXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4XHU1YjM5XHU1YjNhXHU1YjNiXHU1YjNjXHU1YjNkXHU1YjNlXHU1YjNmXHU1YjQxXHU1YjQyXHU1YjQzXHU1YjQ0XHU1YjQ1XHU1YjQ2XHU1YjQ3XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOV1bbV1dPTM1NTg0K20sRlszNTU4NCttXT14WzEzOV1bbV0pO2Zvcih4WzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3'@;
put 'Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1'@;
put 'NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJl'@;
put 'Ylx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1'@;
put 'NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1'@;
put 'M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1'@;
put 'NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDBdW21dXT0zNTg0MCttLEZbMzU4NDArbV09eFsxNDBdW21dKTtmb3IoeFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhcdTVjYzlcdTVjY2FcdTVjY2NcdTVjY2RcdTVjY2VcdTVj'@;
put 'Y2ZcdTVjZDBcdTVjZDFcdTVjZDNcdTVjZDRcdTVjZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjFcdTVjZjJcdTVjZjNcdTVjZjRc'@;
put 'dTVjZjVcdTVjZjZcdTVjZjdcdTVjZjhcdTVjZjlcdTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDhcdTVkMDlcdTVkMGFcdTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZcdTVkMTBcdTVkMTFcdTVkMTJcdTVkMTNcdTVkMTVcdTVk'@;
put 'MTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmZcdTVkMzBcdTVkMzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVkMzZcdTVkMzdcdTVkMzhcdTVkMzlcdTVkM2FcdTVkM2Jc'@;
put 'dTVkM2NcdTVkM2ZcdTVkNDBcdTVkNDFcdTVkNDJcdTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVkNTFcdTVkNTJcdTVkNTNcdTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWVcdTVkNWZcdTVk'@;
put 'NjBcdTVkNjFcdTVkNjJcdTVkNjNcdTVkNjRcdTVkNjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzVcdTVkNzZcdTVkNzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVkN2JcdTVkN2NcdTVkN2RcdTVkN2VcdTVkN2ZcdTVkODBc'@;
put 'dTVkODFcdTVkODNcdTVkODRcdTVkODVcdTVkODZcdTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVkOTFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdcdTVkOThcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVk'@;
put 'OWZcdTVkYTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQxXVttXV09MzYwOTYrbSxGWzM2MDk2K21dPXhbMTQxXVttXSk7Zm9yKHhbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGExXHU1ZGEyXHU1ZGEzXHU1ZGE0XHU1ZGE1XHU1ZGE2XHU1ZGE3XHU1ZGE4XHU1ZGE5XHU1ZGFhXHU1ZGFiXHU1ZGFjXHU1ZGFkXHU1ZGFlXHU1ZGFmXHU1ZGIwXHU1ZGIxXHU1ZGIyXHU1ZGIzXHU1ZGI0XHU1ZGI1XHU1ZGI2XHU1'@;
put 'ZGI4XHU1ZGI5XHU1ZGJhXHU1ZGJiXHU1ZGJjXHU1ZGJkXHU1ZGJlXHU1ZGJmXHU1ZGMwXHU1ZGMxXHU1ZGMyXHU1ZGMzXHU1ZGM0XHU1ZGM2XHU1ZGM3XHU1ZGM4XHU1ZGM5XHU1ZGNhXHU1ZGNiXHU1ZGNjXHU1ZGNlXHU1ZGNmXHU1ZGQwXHU1ZGQxXHU1ZGQyXHU1ZGQzXHU1ZGQ0XHU1ZGQ1'@;
put 'XHU1ZGQ2XHU1ZGQ3XHU1ZGQ4XHU1ZGQ5XHU1ZGRhXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkXHVmZmZkXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4XHU1ZGY5XHU1ZGZhXHU1ZGZiXHU1ZGZjXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1'@;
put 'ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlXHU1ZTFmXHU1ZTIwXHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTI0XHU1ZTI1XHU1ZTI4XHU1ZTI5XHU1ZTJhXHU1ZTJiXHU1ZTJjXHU1ZTJmXHU1ZTMwXHU1ZTMyXHU1ZTMzXHU1ZTM0XHU1ZTM1XHU1ZTM2XHU1ZTM5'@;
put 'XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2XHU1ZTQ3XHU1ZTQ4XHU1ZTQ5XHU1ZTRhXHU1ZTRiXHU1ZTRkXHU1ZTRlXHU1ZTRmXHU1ZTUwXHU1ZTUxXHU1ZTUyXHU1ZTUzXHU1ZTU2XHU1ZTU3XHU1ZTU4XHU1ZTU5XHU1ZTVhXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1'@;
put 'ZTYwXHU1ZTYzXHU1ZTY0XHU1ZTY1XHU1ZTY2XHU1ZTY3XHU1ZTY4XHU1ZTY5XHU1ZTZhXHU1ZTZiXHU1ZTZjXHU1ZTZkXHU1ZTZlXHU1ZTZmXHU1ZTcwXHU1ZTcxXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1ZThk'@;
put 'XHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4XHU1ZWE5XHU1ZWFhXHU1ZWFiXHU1ZWFjXHU1ZWFlXHU1ZWFmXHU1ZWIwXHU1ZWIxXHU1ZWIyXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmXHU1ZWMwXHU1ZWMxXHU1'@;
put 'ZWMyXHU1ZWMzXHU1ZWM0XHU1ZWM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Ml1bbV1dPTM2MzUyK20sRlszNjM1MittXT14WzE0Ml1bbV0pO2Zvcih4WzE0M109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1'@;
put 'NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYw'@;
put 'Y1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1'@;
put 'NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1'@;
put 'Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1'@;
put 'NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZj'@;
put 'MFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1'@;
put 'NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDNdW21dXT0zNjYwOCttLEZbMzY2MDgrbV09eFsxNDNdW21dKTtmb3IoeFsxNDRd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVc'@;
put 'dTYwMzBcdTYwMzFcdTYwMzJcdTYwMzNcdTYwMzRcdTYwMzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYwNDZcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGFcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYw'@;
put 'NTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODBcdWZmZmRcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVc'@;
put 'dTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmRcdTYwYmVcdTYw'@;
put 'YmZcdTYwYzBcdTYwYzFcdTYwYzJcdTYwYzNcdTYwYzRcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTFcdTYwZTJcdTYwZTNcdTYwZTRcdTYwZTVcdTYwZWFc'@;
put 'dTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTBcdTYxMTFcdTYxMTJcdTYxMTNcdTYxMTRcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYx'@;
put 'MWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFcdTYxMzJcdTYxMzNcdTYxMzRcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzhcdTYxMzlcdTYxM2FcdTYxM2JcdTYxM2NcdTYxM2Rc'@;
put 'dTYxM2VcdTYxNDBcdTYxNDFcdTYxNDJcdTYxNDNcdTYxNDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ0XVttXV09MzY4NjQrbSxGWzM2ODY0K21dPXhbMTQ0XVtt'@;
put 'XSk7Zm9yKHhbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2XHU2MTU3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTViXHU2MTVj'@;
put 'XHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5XHU2MTZhXHU2MTZiXHU2MTZjXHU2MTZkXHU2MTZlXHU2MTZmXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4XHU2MTc5XHU2MTdhXHU2MTdiXHU2MTdjXHU2MTdkXHU2MTdlXHU2'@;
put 'MTdmXHU2MTgwXHU2MTgxXHU2MTgyXHU2MTgzXHU2MTg0XHU2MTg1XHU2MTg2XHU2MTg3XHU2MTg4XHU2MTg5XHU2MThhXHU2MThjXHU2MThkXHU2MThmXHU2MTkwXHU2MTkxXHU2MTkyXHU2MTkzXHU2MTk1XHVmZmZkXHU2MTk2XHU2MTk3XHU2MTk4XHU2MTk5XHU2MTlhXHU2MTliXHU2MTlj'@;
put 'XHU2MTllXHU2MTlmXHU2MWEwXHU2MWExXHU2MWEyXHU2MWEzXHU2MWE0XHU2MWE1XHU2MWE2XHU2MWFhXHU2MWFiXHU2MWFkXHU2MWFlXHU2MWFmXHU2MWIwXHU2MWIxXHU2MWIyXHU2MWIzXHU2MWI0XHU2MWI1XHU2MWI2XHU2MWI4XHU2MWI5XHU2MWJhXHU2MWJiXHU2MWJjXHU2MWJkXHU2'@;
put 'MWJmXHU2MWMwXHU2MWMxXHU2MWMzXHU2MWM0XHU2MWM1XHU2MWM2XHU2MWM3XHU2MWM5XHU2MWNjXHU2MWNkXHU2MWNlXHU2MWNmXHU2MWQwXHU2MWQzXHU2MWQ1XHU2MWQ2XHU2MWQ3XHU2MWQ4XHU2MWQ5XHU2MWRhXHU2MWRiXHU2MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUwXHU2MWUx'@;
put 'XHU2MWUyXHU2MWUzXHU2MWU0XHU2MWU1XHU2MWU3XHU2MWU4XHU2MWU5XHU2MWVhXHU2MWViXHU2MWVjXHU2MWVkXHU2MWVlXHU2MWVmXHU2MWYwXHU2MWYxXHU2MWYyXHU2MWYzXHU2MWY0XHU2MWY2XHU2MWY3XHU2MWY4XHU2MWY5XHU2MWZhXHU2MWZiXHU2MWZjXHU2MWZkXHU2MWZlXHU2'@;
put 'MjAwXHU2MjAxXHU2MjAyXHU2MjAzXHU2MjA0XHU2MjA1XHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2'@;
put 'XHU2MjM4XHU2MjM5XHU2MjNhXHU2MjNiXHU2MjNjXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NV1bbV1dPTM3MTIwK20sRlszNzEy'@;
put 'MCttXT14WzE0NV1bbV0pO2Zvcih4WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2'@;
put 'Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1'@;
put 'NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJk'@;
put 'NVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1'@;
put 'NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0'@;
put 'N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1'@;
put 'NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNh'@;
put 'NFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDZdW21dXT0z'@;
put 'NzM3NittLEZbMzczNzYrbV09eFsxNDZdW21dKTtmb3IoeFsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYz'@;
put 'ZDRcdTYzZDVcdTYzZDdcdTYzZDhcdTYzZDlcdTYzZGFcdTYzZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJc'@;
put 'dTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDZcdTY0MDdcdTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0MTdcdTY0MThcdTY0MTlcdTY0MWFcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjRcdWZmZmRcdTY0MjVcdTY0MjdcdTY0'@;
put 'MjhcdTY0MjlcdTY0MmJcdTY0MmVcdTY0MmZcdTY0MzBcdTY0MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGJcdTY0NGNcdTY0NGRcdTY0NGVcdTY0NGZcdTY0NTBcdTY0NTFc'@;
put 'dTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTlcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0NjVcdTY0NjZcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmVcdTY0NmZcdTY0NzBcdTY0NzFcdTY0NzJcdTY0NzNcdTY0'@;
put 'NzRcdTY0NzVcdTY0NzZcdTY0NzdcdTY0N2JcdTY0N2NcdTY0N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFcdTY0OGJcdTY0OGNcdTY0OGRcdTY0OGVcdTY0OGZcdTY0OTBcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJc'@;
put 'dTY0OWNcdTY0OWRcdTY0OWZcdTY0YTBcdTY0YTFcdTY0YTJcdTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0'@;
put 'YzZcdTY0YzdcdTY0YzhcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTQ3XVttXV09Mzc2MzIrbSxGWzM3NjMyK21dPXhbMTQ3XVttXSk7Zm9yKHhbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3XHU2'@;
put 'NGU4XHU2NGU5XHU2NGVhXHU2NGViXHU2NGVjXHU2NGVkXHU2NGVlXHU2NGVmXHU2NGYwXHU2NGYxXHU2NGYyXHU2NGYzXHU2NGY0XHU2NGY1XHU2NGY2XHU2NGY3XHU2NGY4XHU2NGY5XHU2NGZhXHU2NGZiXHU2NGZjXHU2NGZkXHU2NGZlXHU2NGZmXHU2NTAxXHU2NTAyXHU2NTAzXHU2NTA0'@;
put 'XHU2NTA1XHU2NTA2XHU2NTA3XHU2NTA4XHU2NTBhXHU2NTBiXHU2NTBjXHU2NTBkXHU2NTBlXHU2NTBmXHU2NTEwXHU2NTExXHU2NTEzXHU2NTE0XHU2NTE1XHU2NTE2XHU2NTE3XHU2NTE5XHU2NTFhXHU2NTFiXHU2NTFjXHU2NTFkXHU2NTFlXHU2NTFmXHU2NTIwXHU2NTIxXHVmZmZkXHU2'@;
put 'NTIyXHU2NTIzXHU2NTI0XHU2NTI2XHU2NTI3XHU2NTI4XHU2NTI5XHU2NTJhXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwXHU2NTQxXHU2NTQyXHU2NTQzXHU2NTQ0XHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRiXHU2NTRk'@;
put 'XHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4XHU2NTc5XHU2'@;
put 'NTdhXHU2NTdiXHU2NTdjXHU2NTdkXHU2NTdlXHU2NTdmXHU2NTgwXHU2NTgxXHU2NTgyXHU2NTgzXHU2NTg0XHU2NTg1XHU2NTg2XHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEw'@;
put 'XHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWI1XHU2NWI2XHU2NWI3XHU2NWI4XHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2'@;
put 'NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4XHU2NWQ5XHU2NWRhXHU2NWRiXHU2NWRjXHU2NWRkXHU2NWRlXHU2NWRmXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDhdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE0OF1bbV1dPTM3ODg4K20sRlszNzg4OCttXT14WzE0OF1bbV0pO2Zvcih4WzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1'@;
put 'NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYy'@;
put 'OVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1'@;
put 'NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4'@;
put 'MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1'@;
put 'NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZj'@;
put 'NVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1'@;
put 'NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDldW21dXT0zODE0NCttLEZbMzgxNDQrbV09eFsxNDldW21dKTtmb3IoeFsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNc'@;
put 'dTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3'@;
put 'M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThcdTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVc'@;
put 'dTY3NzFcdTY3NzRcdTY3NzZcdWZmZmRcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3'@;
put 'OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRcdTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJcdTY3YzVcdTY3YzZcdTY3YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3Y2JcdTY3Y2Nc'@;
put 'dTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3ZjZcdTY3ZjdcdTY3ZjhcdTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNcdTY3ZmVcdTY4'@;
put 'MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNcdTY4MjRcdTY4MjVcdTY4MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4MmNcdTY4MmRc'@;
put 'dTY4MmVcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4NWFcdTY4NWJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTBdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUwXVttXV09Mzg0MDArbSxGWzM4NDAwK21dPXhbMTUwXVttXSk7Zm9yKHhbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ODVjXHU2ODVkXHU2ODVl'@;
put 'XHU2ODVmXHU2ODZhXHU2ODZjXHU2ODZkXHU2ODZlXHU2ODZmXHU2ODcwXHU2ODcxXHU2ODcyXHU2ODczXHU2ODc1XHU2ODc4XHU2ODc5XHU2ODdhXHU2ODdiXHU2ODdjXHU2ODdkXHU2ODdlXHU2ODdmXHU2ODgwXHU2ODgyXHU2ODg0XHU2ODg3XHU2ODg4XHU2ODg5XHU2ODhhXHU2ODhiXHU2'@;
put 'ODhjXHU2ODhkXHU2ODhlXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4XHU2ODk5XHU2ODlhXHU2ODliXHU2ODljXHU2ODlkXHU2ODllXHU2ODlmXHU2OGEwXHU2OGExXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIx'@;
put 'XHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4XHVmZmZkXHU2OGI5XHU2OGJhXHU2OGJiXHU2OGJjXHU2OGJkXHU2OGJlXHU2OGJmXHU2OGMxXHU2OGMzXHU2OGM0XHU2OGM1XHU2OGM2XHU2OGM3XHU2OGM4XHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2'@;
put 'OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiXHU2OGRjXHU2OGRkXHU2OGRlXHU2OGRmXHU2OGUxXHU2OGUyXHU2OGU0XHU2OGU1XHU2OGU2XHU2OGU3XHU2OGU4XHU2OGU5XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4'@;
put 'XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2XHU2OTA3XHU2OTA4XHU2OTA5XHU2OTBhXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzXHU2OTE0XHU2OTE1XHU2OTE2XHU2OTE3XHU2OTE4XHU2OTE5XHU2OTFhXHU2OTFiXHU2OTFjXHU2OTFkXHU2'@;
put 'OTFlXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1XHU2OTI2XHU2OTI3XHU2OTI4XHU2OTI5XHU2OTJhXHU2OTJiXHU2OTJjXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQz'@;
put 'XHU2OTQ0XHU2OTQ1XHU2OTQ2XHU2OTQ3XHU2OTQ4XHU2OTQ5XHU2OTRhXHU2OTRiXHU2OTRjXHU2OTRkXHU2OTRlXHU2OTRmXHU2OTUwXHU2OTUxXHU2OTUyXHU2OTUzXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MTUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MV1bbV1dPTM4NjU2K20sRlszODY1NittXT14WzE1MV1bbV0pO2Zvcih4WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2'@;
put 'MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1'@;
put 'Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1Njli'@;
put 'M1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1'@;
put 'NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1Njlm'@;
put 'N1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1'@;
put 'NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEz'@;
put 'YVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTJdW21dXT0zODkxMittLEZbMzg5MTIrbV09eFsxNTJdW21dKTtmb3IoeFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZhNWVcdTZhNWZcdTZhNjBcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJcdTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZhNzBcdTZhNzJcdTZhNzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdcdTZhNzhc'@;
put 'dTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZhOGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNcdTZhOTRcdTZhOTVcdTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZhOWJcdTZh'@;
put 'OWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTFcdTZhYTJcdTZhYTNcdTZhYTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZhYjNcdTZhYjRcdTZhYjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlcdTZhYmFc'@;
put 'dTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzBcdTZhYzFcdTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZhY2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2VcdTZhY2ZcdTZhZDBcdTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZhZDVcdTZh'@;
put 'ZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZhZGFcdTZhZGJcdTZhZGNcdTZhZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVcdTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZhZWFcdTZhZWJcdTZhZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBcdTZhZjFc'@;
put 'dTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVcdTZhZjZcdTZhZjdcdTZhZjhcdTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZiMDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVcdTZiMDZcdTZiMDdcdTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZiMGNcdTZi'@;
put 'MGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTJcdTZiMTNcdTZiMTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNcdTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZiMjZcdTZiMjhcdTZiMjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRcdTZiMmVc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUzXVttXV09MzkxNjgrbSxGWzM5MTY4K21dPXhbMTUzXVttXSk7Zm9yKHhbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkXHU2YjRlXHU2YjRmXHU2YjUw'@;
put 'XHU2YjUxXHU2YjUyXHU2YjUzXHU2YjU0XHU2YjU1XHU2YjU2XHU2YjU3XHU2YjU4XHU2YjVhXHU2YjViXHU2YjVjXHU2YjVkXHU2YjVlXHU2YjVmXHU2YjYwXHU2YjYxXHU2YjY4XHU2YjY5XHU2YjZiXHU2YjZjXHU2YjZkXHU2YjZlXHU2YjZmXHU2YjcwXHU2YjcxXHU2YjcyXHU2YjczXHU2'@;
put 'Yjc0XHU2Yjc1XHU2Yjc2XHU2Yjc3XHU2Yjc4XHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4XHVmZmZkXHU2YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljXHU2YjlkXHU2YjllXHU2YjlmXHU2YmEw'@;
put 'XHU2YmEyXHU2YmEzXHU2YmE0XHU2YmE1XHU2YmE2XHU2YmE3XHU2YmE4XHU2YmE5XHU2YmFiXHU2YmFjXHU2YmFkXHU2YmFlXHU2YmFmXHU2YmIwXHU2YmIxXHU2YmIyXHU2YmI2XHU2YmI4XHU2YmI5XHU2YmJhXHU2YmJiXHU2YmJjXHU2YmJkXHU2YmJlXHU2YmMwXHU2YmMzXHU2YmM0XHU2'@;
put 'YmM2XHU2YmM3XHU2YmM4XHU2YmM5XHU2YmNhXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjXHU2YmRkXHU2YmRlXHU2YmRmXHU2YmUwXHU2YmUyXHU2YmUzXHU2YmU0XHU2YmU1XHU2YmU2XHU2YmU3XHU2YmU4XHU2YmU5XHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYw'@;
put 'XHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlXHU2YmZmXHU2YzAwXHU2YzAxXHU2YzAyXHU2YzAzXHU2YzA0XHU2YzA4XHU2YzA5XHU2YzBhXHU2YzBiXHU2YzBjXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2'@;
put 'YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiXHU2YzRjXHU2YzRkXHU2YzRlXHU2YzRmXHU2YzUxXHU2YzUyXHU2YzUz'@;
put 'XHU2YzU2XHU2YzU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NF1bbV1dPTM5NDI0K20sRlszOTQyNCttXT14WzE1NF1bbV0pO2Zvcih4WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4'@;
put 'MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1'@;
put 'NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNm'@;
put 'NFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1'@;
put 'NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2'@;
put 'Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1'@;
put 'NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRj'@;
put 'Mlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTVdW21dXT0zOTY4MCttLEZbMzk2ODArbV09eFsxNTVdW21dKTtmb3IoeFsxNTZdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZk'@;
put 'ZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJcdTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThc'@;
put 'dTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2JcdTZlM2NcdTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFcdTZl'@;
put 'NDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhcdTZlNDlcdTZlNGFcdTZlNGJcdTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBcdTZlNjFcdTZlNjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZlNjdc'@;
put 'dTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZlNmRcdTZlNmZcdTZlNzBcdTZlNzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZlNzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFcdTZl'@;
put 'OGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFcdTZlOTJcdTZlOTNcdTZlOTRcdTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBc'@;
put 'dTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZl'@;
put 'ZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRcdTZlZWVcdTZlZWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU2XVttXV09Mzk5MzYrbSxGWzM5OTM2K21dPXhbMTU2XVttXSk7Zm9yKHhb'@;
put 'MTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhXHU2ZWZiXHU2ZWZjXHU2ZWZkXHU2ZWZlXHU2ZWZmXHU2ZjAwXHU2ZjAxXHU2ZjAzXHU2'@;
put 'ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhXHU2ZjBiXHU2ZjBjXHU2ZjBkXHU2ZjBlXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2XHU2ZjE3XHU2ZjE4XHU2ZjE5XHU2ZjFhXHU2ZjFiXHU2ZjFjXHU2ZjFkXHU2ZjFlXHU2ZjFmXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3'@;
put 'XHU2ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3XHU2ZjM4XHU2ZjM5XHU2ZjNhXHU2ZjNiXHU2ZjNjXHU2ZjNkXHU2ZjNmXHU2ZjQwXHU2ZjQxXHU2ZjQyXHVmZmZkXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlXHU2'@;
put 'ZjRmXHU2ZjUwXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU0XHU2ZjU1XHU2ZjU2XHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3XHU2ZjY4XHU2ZjY5XHU2ZjZhXHU2ZjZiXHU2ZjZjXHU2ZjZmXHU2ZjcwXHU2Zjcx'@;
put 'XHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkXHU2ZjdlXHU2ZjdmXHU2ZjgwXHU2ZjgxXHU2ZjgyXHU2ZjgzXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmXHU2ZjkwXHU2ZjkxXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk1XHU2Zjk2XHU2Zjk3XHU2'@;
put 'Zjk4XHU2Zjk5XHU2ZjlhXHU2ZjliXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyXHU2ZmEzXHU2ZmE0XHU2ZmE1XHU2ZmE2XHU2ZmE4XHU2ZmE5XHU2ZmFhXHU2ZmFiXHU2ZmFjXHU2ZmFkXHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmIxXHU2ZmIyXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4'@;
put 'XHU2ZmJhXHU2ZmJiXHU2ZmJjXHU2ZmJkXHU2ZmJlXHU2ZmJmXHU2ZmMxXHU2ZmMzXHU2ZmM0XHU2ZmM1XHU2ZmM2XHU2ZmM3XHU2ZmM4XHU2ZmNhXHU2ZmNiXHU2ZmNjXHU2ZmNkXHU2ZmNlXHU2ZmNmXHU2ZmQwXHU2ZmQzXHU2ZmQ0XHU2ZmQ1XHU2ZmQ2XHU2ZmQ3XHU2ZmQ4XHU2ZmQ5XHU2'@;
put 'ZmRhXHU2ZmRiXHU2ZmRjXHU2ZmRkXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1N11bbV1dPTQwMTkyK20sRls0MDE5MittXT14WzE1'@;
put 'N11bbV0pO2Zvcih4WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1'@;
put 'NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAx'@;
put 'M1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1'@;
put 'NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1'@;
put 'MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1'@;
put 'NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5'@;
put 'Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1'@;
put 'NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNThdW21dXT00MDQ0OCttLEZb'@;
put 'NDA0NDgrbV09eFsxNThdW21dKTtmb3IoeFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJc'@;
put 'dTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcxMDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNcdTcxMGRcdTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcx'@;
put 'MTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcxMWZcdTcxMjBcdTcxMjFcdTcxMjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFcdTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcxMzNcdTcxMzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlc'@;
put 'dTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2VcdTcxM2ZcdTcxNDBcdTcxNDFcdTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJcdTcxNTNcdTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcx'@;
put 'NTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcxNjBcdTcxNjFcdTcxNjJcdTcxNjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBc'@;
put 'dTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZcdTcxODdcdTcxODhcdTcxODlcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJcdTcxOWNcdTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcx'@;
put 'YTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWRcdTcxYWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcxYmVcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVc'@;
put 'dTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2FcdTcxY2JcdTcxY2NcdTcxY2RcdTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU5XVtt'@;
put 'XV09NDA3MDQrbSxGWzQwNzA0K21dPXhbMTU5XVttXSk7Zm9yKHhbMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MWQ2XHU3MWQ3XHU3MWQ4XHU3MWQ5XHU3MWRhXHU3MWRiXHU3MWRjXHU3MWRkXHU3MWRlXHU3MWRmXHU3MWUx'@;
put 'XHU3MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4XHU3MWU5XHU3MWVhXHU3MWViXHU3MWVjXHU3MWVkXHU3MWVmXHU3MWYwXHU3MWYxXHU3MWYyXHU3MWYzXHU3MWY0XHU3MWY1XHU3MWY2XHU3MWY3XHU3MWY4XHU3MWZhXHU3MWZiXHU3MWZjXHU3MWZkXHU3MWZlXHU3MWZmXHU3MjAwXHU3'@;
put 'MjAxXHU3MjAyXHU3MjAzXHU3MjA0XHU3MjA1XHU3MjA3XHU3MjA4XHU3MjA5XHU3MjBhXHU3MjBiXHU3MjBjXHU3MjBkXHU3MjBlXHU3MjBmXHU3MjEwXHU3MjExXHU3MjEyXHU3MjEzXHU3MjE0XHU3MjE1XHU3MjE2XHU3MjE3XHU3MjE4XHU3MjE5XHU3MjFhXHVmZmZkXHU3MjFiXHU3MjFj'@;
put 'XHU3MjFlXHU3MjFmXHU3MjIwXHU3MjIxXHU3MjIyXHU3MjIzXHU3MjI0XHU3MjI1XHU3MjI2XHU3MjI3XHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQwXHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ0XHU3MjQ1XHU3'@;
put 'MjQ2XHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3Mjcz'@;
put 'XHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1XHU3Mjg2XHU3Mjg3XHU3Mjg4XHU3Mjg5XHU3MjhjXHU3MjhlXHU3MjkwXHU3MjkxXHU3MjkzXHU3Mjk0XHU3Mjk1XHU3Mjk2XHU3Mjk3XHU3Mjk4XHU3Mjk5XHU3MjlhXHU3MjliXHU3'@;
put 'MjljXHU3MjlkXHU3MjllXHU3MmEwXHU3MmExXHU3MmEyXHU3MmEzXHU3MmE0XHU3MmE1XHU3MmE2XHU3MmE3XHU3MmE4XHU3MmE5XHU3MmFhXHU3MmFiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhXHU3MmJiXHU3MmJjXHU3MmJkXHU3MmJlXHU3MmJmXHU3MmMwXHU3MmM1'@;
put 'XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjBdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzE2MF1bbV1dPTQwOTYwK20sRls0MDk2MCttXT14WzE2MF1bbV0pO2Zvcih4WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUz'@;
put 'MDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJl'@;
put 'XHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUy'@;
put 'NWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1'@;
put 'MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4'@;
put 'MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1'@;
put 'MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRc'@;
put 'dWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZm'@;
put 'MzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJc'@;
put 'dWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUy'@;
put 'XHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUz'@;
put 'MDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5'@;
put 'XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBi'@;
put 'MFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1'@;
put 'MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBl'@;
put 'N1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3IoeFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAz'@;
put 'OWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlc'@;
put 'dTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZl'@;
put 'NDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDRcdWZmZmRcdWZmZmRcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzFcdWZmZmRcdWZlMzNcdWZlMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhbMTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUw'@;
put 'NDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUw'@;
put 'NDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20sRls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1'@;
put 'M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1'@;
put 'MjU2Zlx1MjU3MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVl'@;
put 'M1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQw'@;
put 'XHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEw'@;
put 'OVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1'@;
put 'MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMwMDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTRcdWZmZmRcdTIx'@;
put 'MjFcdTMyMzFcdWZmZmRcdTIwMTBcdWZmZmRcdWZmZmRcdWZmZmRcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDlcdWZlNGFcdWZlNGJcdWZlNGNcdWZlNGRcdWZlNGVcdWZlNGZcdWZlNTBcdWZlNTFcdWZlNTJcdWZlNTRcdWZlNTVcdWZlNTZc'@;
put 'dWZlNTdcdWZlNTlcdWZlNWFcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdWZlNWZcdWZlNjBcdWZlNjFcdWZmZmRcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZlNjhcdWZlNjlcdWZlNmFcdWZlNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdc'@;
put 'dTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1'@;
put 'MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2Vc'@;
put 'dTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY5XVttXV09NDMyNjQrbSxGWzQzMjY0K21dPXhbMTY5XVttXSk7Zm9yKHhbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3'@;
put 'MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNh'@;
put 'XHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3'@;
put 'MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MF1bbV1dPTQzNTIwK20sRls0MzUyMCttXT14WzE3MF1bbV0pO2Zvcih4WzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3Mlx1NzM3M1x1NzM3NFx1NzM3NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4Mlx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1'@;
put 'NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1NzNhOFx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNi'@;
put 'NFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjM1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNkNVx1NzNkNlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1'@;
put 'NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzFdW21dXT00Mzc3NittLEZbNDM3NzYrbV09eFsxNzFdW21dKTtmb3IoeFsxNzJdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczZjhcdTczZjlcdTczZmFcdTczZmJcdTczZmNcdTczZmRcdTczZmVcdTczZmZcdTc0MDBcdTc0MDFcdTc0MDJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTFc'@;
put 'dTc0MTJcdTc0MTNcdTc0MTRcdTc0MTVcdTc0MTZcdTc0MTdcdTc0MThcdTc0MTlcdTc0MWNcdTc0MWRcdTc0MWVcdTc0MWZcdTc0MjBcdTc0MjFcdTc0MjNcdTc0MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzdcdTc0MzhcdTc0MzlcdTc0M2FcdTc0'@;
put 'M2JcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDJcdTc0NDNcdTc0NDRcdTc0NDVcdTc0NDZcdTc0NDdcdTc0NDhcdTc0NDlcdTc0NGFcdTc0NGJcdTc0NGNcdTc0NGRcdWZmZmRcdTc0NGVcdTc0NGZcdTc0NTBcdTc0NTFcdTc0NTJcdTc0NTNcdTc0NTRcdTc0NTZcdTc0NThcdTc0NWRc'@;
put 'dTc0NjBcdTc0NjFcdTc0NjJcdTc0NjNcdTc0NjRcdTc0NjVcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NjlcdTc0NmFcdTc0NmJcdTc0NmNcdTc0NmVcdTc0NmZcdTc0NzFcdTc0NzJcdTc0NzNcdTc0NzRcdTc0NzVcdTc0NzhcdTc0NzlcdTc0N2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcyXVttXV09NDQwMzIrbSxGWzQ0MDMyK21dPXhbMTcyXVttXSk7Zm9y'@;
put 'KHhbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkz'@;
put 'XHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3'@;
put 'NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNm'@;
put 'XHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTczXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3M11bbV1dPTQ0Mjg4K20sRls0NDI4OCttXT14'@;
put 'WzE3M11bbV0pO2Zvcih4WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRmOFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUw'@;
put 'Nlx1NzUwN1x1NzUwOFx1NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1'@;
put 'NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1NzU1ZFx1NzU1ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2'@;
put 'Mlx1NzU2M1x1NzU2NFx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1NzU2ZFx1NzU2ZVx1NzU2Zlx1NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzRdW21dXT00NDU0NCtt'@;
put 'LEZbNDQ1NDQrbV09eFsxNzRdW21dKTtmb3IoeFsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1'@;
put 'OWVcdTc1YTJcdTc1YTZcdTc1YTdcdTc1YThcdTc1YTlcdTc1YWFcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRc'@;
put 'dTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDdcdWZmZmRcdTc2MDhcdTc2MDlcdTc2MGJcdTc2'@;
put 'MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFc'@;
put 'dTc2NDJcdTc2NDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc1'@;
put 'XVttXV09NDQ4MDArbSxGWzQ0ODAwK21dPXhbMTc1XVttXSk7Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3'@;
put 'NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3Njcz'@;
put 'XHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3'@;
put 'NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJk'@;
put 'XHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2'@;
put 'ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVk'@;
put 'XHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1'@;
put 'ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihhZVt4WzE3Nl1bbV1dPTQ1MDU2K20sRls0NTA1NittXT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1'@;
put 'NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1NzZlNFx1NzZlNlx1NzZlN1x1NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZlY1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1Nzcw'@;
put 'Mlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1NzcxMFx1NzcxMVx1NzcxMlx1NzcxM1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYlx1'@;
put 'ZmZmZFx1NzcyY1x1NzcyZVx1NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1'@;
put 'NFx1Nzc1NVx1Nzc1Nlx1Nzc1N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1'@;
put 'NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJk'@;
put 'Nlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1'@;
put 'ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzddW21dXT00NTMxMittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3Njdc'@;
put 'dTc3NjlcdTc3NmFcdTc3NmRcdTc3NmVcdTc3NmZcdTc3NzBcdTc3NzFcdTc3NzJcdTc3NzNcdTc3NzRcdTc3NzVcdTc3NzZcdTc3NzdcdTc3NzhcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODZcdTc3ODdcdTc3ODhcdTc3ODlcdTc3OGFcdTc3OGJcdTc3OGZcdTc3'@;
put 'OTBcdTc3OTNcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OTdcdTc3OThcdTc3OTlcdTc3OWFcdTc3OWJcdTc3OWNcdTc3OWRcdTc3OWVcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjZcdTc3YjdcdTc3Yjhc'@;
put 'dTc3YjlcdTc3YmFcdWZmZmRcdTc3YmNcdTc3YmVcdTc3YzBcdTc3YzFcdTc3YzJcdTc3YzNcdTc3YzRcdTc3YzVcdTc3YzZcdTc3YzdcdTc3YzhcdTc3YzlcdTc3Y2FcdTc3Y2JcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3ZDBcdTc3ZDFcdTc3ZDJcdTc3ZDNcdTc3ZDRcdTc3ZDVcdTc3ZDZcdTc3'@;
put 'ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGRcdTc3ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTFcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRc'@;
put 'dTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2'@;
put 'OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRc'@;
put 'dTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT14WzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7Zm9yKHhbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2Vm'@;
put 'XHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3'@;
put 'ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUz'@;
put 'XHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3'@;
put 'ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZl'@;
put 'XHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2'@;
put 'MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEw'@;
put 'XHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09eFsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCttXT14WzE3OV1bbV0pO2Zvcih4WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg4NFx1Nzg4'@;
put 'NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1NzhhY1x1NzhhZFx1NzhhZVx1NzhhZlx1NzhiNVx1NzhiNlx1'@;
put 'NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYVx1NzhkYlx1NzhkY1x1Nzhk'@;
put 'ZFx1NzhkZVx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYlx1NzhmY1x1NzhmZFx1'@;
put 'NzhmZVx1NzhmZlx1NzkwMFx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1NzkwOFx1NzkwOVx1NzkwYVx1NzkwYlx1NzkwY1x1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVh'@;
put 'ZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1'@;
put 'NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1'@;
put 'OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT14WzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4MCttLEZbNDYwODArbV09eFsxODBdW21dKTtmb3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTc5MGRcdTc5MGVcdTc5MGZcdTc5MTBcdTc5MTFcdTc5MTJcdTc5MTRcdTc5MTVcdTc5MTZcdTc5MTdcdTc5MThcdTc5MTlcdTc5MWFcdTc5MWJcdTc5MWNcdTc5MWRcdTc5MWZcdTc5MjBcdTc5MjFcdTc5MjJcdTc5MjNcdTc5MjVcdTc5MjZcdTc5MjdcdTc5MjhcdTc5MjlcdTc5MmFc'@;
put 'dTc5MmJcdTc5MmNcdTc5MmRcdTc5MmVcdTc5MmZcdTc5MzBcdTc5MzFcdTc5MzJcdTc5MzNcdTc5MzVcdTc5MzZcdTc5MzdcdTc5MzhcdTc5MzlcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGFcdTc5NGJcdTc5NGNcdTc5NGRcdTc5NGVcdTc5NGZcdTc5'@;
put 'NTBcdTc5NTFcdTc5NTJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjNcdWZmZmRcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzBcdTc5NzFcdTc5NzJcdTc5NzNcdTc5NzRcdTc5NzVcdTc5NzZcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2Rc'@;
put 'dTc5N2VcdTc5N2ZcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZk'@;
put 'ZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlc'@;
put 'dTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUx'@;
put 'NzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9eFsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgxXVttXV09NDYzMzYrbSxGWzQ2MzM2K21dPXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFk'@;
put 'XHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3'@;
put 'OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0'@;
put 'XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0'@;
put 'ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQw'@;
put 'XHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1'@;
put 'NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMx'@;
put 'XHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Ml1bbV1dPTQ2NTkyK20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNFx1N2EyNVx1N2EyNlx1N2EyN1x1N2EyOFx1N2EyOVx1N2EyYVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1N2EzMVx1N2EzMlx1N2EzNFx1N2EzNVx1N2EzNlx1N2Ez'@;
put 'OFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0OVx1N2E0YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1NVx1N2E1Nlx1N2E1OFx1N2E1OVx1N2E1YVx1N2E1Ylx1'@;
put 'N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1N2E2NVx1N2E2Nlx1N2E2N1x1N2E2OFx1ZmZmZFx1N2E2OVx1N2E2YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3'@;
put 'ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1'@;
put 'NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2Vi'@;
put 'YVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1'@;
put 'N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2Iy'@;
put 'Nlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWVcdTdhYWZcdTdhYjBcdTdhYjFcdTdhYjJcdTdhYjRcdTdhYjVcdTdhYjZcdTdhYjdcdTdhYjhcdTdhYjlcdTdhYmFcdTdhYmJcdTdhYmNcdTdh'@;
put 'YmRcdTdhYmVcdTdhYzBcdTdhYzFcdTdhYzJcdTdhYzNcdTdhYzRcdTdhYzVcdTdhYzZcdTdhYzdcdTdhYzhcdTdhYzlcdTdhY2FcdTdhY2NcdTdhY2RcdTdhY2VcdTdhY2ZcdTdhZDBcdTdhZDFcdTdhZDJcdTdhZDNcdTdhZDRcdTdhZDVcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNc'@;
put 'dTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTdcdTdhZThcdTdhZTlcdTdhZWFcdTdhZWJcdTdhZWNcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjNcdWZmZmRcdTdhZjRcdTdhZjVcdTdhZjZcdTdhZjdcdTdhZjhcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdi'@;
put 'MDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJc'@;
put 'dTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2'@;
put 'MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlc'@;
put 'dTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4'@;
put 'MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3'@;
put 'YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4'@;
put 'XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3'@;
put 'YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1'@;
put 'XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0'@;
put 'ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMy'@;
put 'XHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2'@;
put 'OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0p'@;
put 'O2Zvcih4WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNFx1N2JkNVx1N2JkNlx1N2JkN1x1N2JkOFx1N2JkYlx1'@;
put 'N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZlx1N2MwMFx1N2Mw'@;
put 'MVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMFx1N2MxMVx1N2MxMlx1N2MxM1x1N2MxNFx1N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2MxYlx1N2MxY1x1N2MxZFx1N2MxZVx1N2MyMFx1N2MyMVx1'@;
put 'N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2MyOFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2MyZVx1N2MyZlx1N2MzMFx1N2MzMVx1N2MzMlx1N2MzM1x1N2MzNFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1N2MzY1x1N2MzZFx1N2MzZVx1N2M0Mlx1OWFiOFx1NWI2'@;
put 'OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1'@;
put 'NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYz'@;
put 'Zlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1'@;
put 'NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYr'@;
put 'bV09eFsxODZdW21dKTtmb3IoeFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjNDNcdTdjNDRcdTdjNDVcdTdjNDZcdTdjNDdcdTdjNDhcdTdjNDlcdTdjNGFcdTdjNGJcdTdjNGNcdTdjNGVcdTdjNGZcdTdjNTBcdTdjNTFc'@;
put 'dTdjNTJcdTdjNTNcdTdjNTRcdTdjNTVcdTdjNTZcdTdjNTdcdTdjNThcdTdjNTlcdTdjNWFcdTdjNWJcdTdjNWNcdTdjNWRcdTdjNWVcdTdjNWZcdTdjNjBcdTdjNjFcdTdjNjJcdTdjNjNcdTdjNjRcdTdjNjVcdTdjNjZcdTdjNjdcdTdjNjhcdTdjNjlcdTdjNmFcdTdjNmJcdTdjNmNcdTdj'@;
put 'NmRcdTdjNmVcdTdjNmZcdTdjNzBcdTdjNzFcdTdjNzJcdTdjNzVcdTdjNzZcdTdjNzdcdTdjNzhcdTdjNzlcdTdjN2FcdTdjN2VcdTdjN2ZcdTdjODBcdTdjODFcdTdjODJcdTdjODNcdTdjODRcdTdjODVcdTdjODZcdTdjODdcdWZmZmRcdTdjODhcdTdjOGFcdTdjOGJcdTdjOGNcdTdjOGRc'@;
put 'dTdjOGVcdTdjOGZcdTdjOTBcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjRcdTdjYjVcdTdjYjZcdTdjYjdcdTdjYjhcdTdjYmFcdTdj'@;
put 'YmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJc'@;
put 'dTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2'@;
put 'ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZc'@;
put 'dTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4'@;
put 'NzIrbSxGWzQ3ODcyK21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2Qx'@;
put 'XHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3'@;
put 'Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEz'@;
put 'XHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3'@;
put 'ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBh'@;
put 'XHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5'@;
put 'ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUz'@;
put 'XHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4'@;
put 'WzE4OF1bbV1dPTQ4MTI4K20sRls0ODEyOCttXT14WzE4OF1bbV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1N2QzZlx1N2Q0'@;
put 'MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0YVx1N2Q0Ylx1N2Q0Y1x1N2Q0ZFx1N2Q0ZVx1N2Q0Zlx1N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1YVx1N2Q1Ylx1'@;
put 'N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1N2Q2Nlx1N2Q2N1x1N2Q2OFx1N2Q2OVx1N2Q2YVx1N2Q2Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1ZmZmZFx1N2Q3'@;
put 'OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NFx1N2Q4NVx1N2Q4Nlx1N2Q4N1x1N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5Mlx1N2Q5M1x1'@;
put 'N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1Njkx'@;
put 'Mlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1'@;
put 'NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0'@;
put 'Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoYWVbeFsxODldW21dXT00ODM4NCttLEZbNDgzODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkOTlcdTdkOWFcdTdkOWJcdTdkOWNcdTdkOWRcdTdkOWVcdTdkOWZcdTdk'@;
put 'YTBcdTdkYTFcdTdkYTJcdTdkYTNcdTdkYTRcdTdkYTVcdTdkYTdcdTdkYThcdTdkYTlcdTdkYWFcdTdkYWJcdTdkYWNcdTdkYWRcdTdkYWZcdTdkYjBcdTdkYjFcdTdkYjJcdTdkYjNcdTdkYjRcdTdkYjVcdTdkYjZcdTdkYjdcdTdkYjhcdTdkYjlcdTdkYmFcdTdkYmJcdTdkYmNcdTdkYmRc'@;
put 'dTdkYmVcdTdkYmZcdTdkYzBcdTdkYzFcdTdkYzJcdTdkYzNcdTdkYzRcdTdkYzVcdTdkYzZcdTdkYzdcdTdkYzhcdTdkYzlcdTdkY2FcdTdkY2JcdTdkY2NcdTdkY2RcdTdkY2VcdTdkY2ZcdTdkZDBcdTdkZDFcdTdkZDJcdTdkZDNcdTdkZDRcdTdkZDVcdTdkZDZcdTdkZDdcdTdkZDhcdTdk'@;
put 'ZDlcdWZmZmRcdTdkZGFcdTdkZGJcdTdkZGNcdTdkZGRcdTdkZGVcdTdkZGZcdTdkZTBcdTdkZTFcdTdkZTJcdTdkZTNcdTdkZTRcdTdkZTVcdTdkZTZcdTdkZTdcdTdkZThcdTdkZTlcdTdkZWFcdTdkZWJcdTdkZWNcdTdkZWRcdTdkZWVcdTdkZWZcdTdkZjBcdTdkZjFcdTdkZjJcdTdkZjNc'@;
put 'dTdkZjRcdTdkZjVcdTdkZjZcdTdkZjdcdTdkZjhcdTdkZjlcdTdkZmFcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1'@;
put 'NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhc'@;
put 'dTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3'@;
put 'MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5'@;
put 'MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3'@;
put 'ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFi'@;
put 'XHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3'@;
put 'ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0'@;
put 'XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3'@;
put 'ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZl'@;
put 'XHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3'@;
put 'Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09eFsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1bbV0pO2Zvcih4WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1N2U2MFx1'@;
put 'N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2Ylx1N2U2Y1x1N2U2ZFx1N2U2ZVx1N2U2Zlx1N2U3MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3Ylx1N2U3'@;
put 'Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1N2U4OFx1N2U4OVx1N2U4YVx1N2U4Ylx1N2U4Y1x1N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1N2U5OFx1'@;
put 'N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZmZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0M1x1N2Y0'@;
put 'Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1'@;
put 'OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1'@;
put 'ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1'@;
put 'OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5'@;
put 'Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkxNTIrbV09eFsxOTJdW21dKTtmb3IoeFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNTZc'@;
put 'dTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNjdcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdm'@;
put 'ODJcdTdmODNcdTdmODRcdTdmODVcdTdmODZcdTdmODdcdTdmODhcdTdmODlcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTJcdTdmOTNcdTdmOTVcdTdmOTZcdTdmOTdcdTdmOThcdTdmOTlcdTdmOWJcdTdmOWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYThc'@;
put 'dTdmYTlcdTdmYWFcdTdmYWJcdTdmYWNcdTdmYWRcdTdmYWVcdTdmYjFcdWZmZmRcdTdmYjNcdTdmYjRcdTdmYjVcdTdmYjZcdTdmYjdcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2ZcdTdm'@;
put 'ZDBcdTdmZDFcdTdmZDJcdTdmZDNcdTdmZDZcdTdmZDdcdTdmZDlcdTdmZGFcdTdmZGJcdTdmZGNcdTdmZGRcdTdmZGVcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlc'@;
put 'dTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZm'@;
put 'NjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNc'@;
put 'dTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9eFsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09NDk0MDgrbSxGWzQ5NDA4K21dPXhbMTkzXVttXSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4'@;
put 'MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4'@;
put 'XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4'@;
put 'MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYy'@;
put 'XHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2'@;
put 'YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4'@;
put 'XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NF1bbV1dPTQ5NjY0K20sRls0OTY2NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4ZVx1ODA4Zlx1ODA5MFx1ODA5MVx1ODA5Mlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1'@;
put 'ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1ODBjZlx1ODBkMFx1ODBkMVx1ODBkMlx1ODBkM1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBm'@;
put 'OVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYlx1ZmZmZFx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEyMVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEyNlx1'@;
put 'ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOVx1ODEzYVx1ODEzYlx1ODEzY1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUx'@;
put 'YVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1'@;
put 'OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5'@;
put 'NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1'@;
put 'OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTVdW21dXT00OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDBcdTgxNDFcdTgxNDJcdTgxNDNcdTgxNDRcdTgxNDVcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWJcdTgxNWNcdTgxNWRcdTgxNWVcdTgxNWZcdTgxNjFcdTgxNjJc'@;
put 'dTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODNcdTgxODRcdTgxODVcdTgxODZcdTgxODdcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTJcdTgx'@;
put 'OTNcdTgxOTRcdTgxOTVcdTgxOTZcdTgxOTdcdTgxOTlcdTgxOWFcdTgxOWVcdTgxOWZcdTgxYTBcdTgxYTFcdTgxYTJcdTgxYTRcdTgxYTVcdWZmZmRcdTgxYTdcdTgxYTlcdTgxYWJcdTgxYWNcdTgxYWRcdTgxYWVcdTgxYWZcdTgxYjBcdTgxYjFcdTgxYjJcdTgxYjRcdTgxYjVcdTgxYjZc'@;
put 'dTgxYjdcdTgxYjhcdTgxYjlcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2RcdTgxY2VcdTgxY2ZcdTgxZDBcdTgxZDFcdTgxZDJcdTgxZDNcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYy'@;
put 'YjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZc'@;
put 'dTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUw'@;
put 'MmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThc'@;
put 'dTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5'@;
put 'XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4'@;
put 'MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRl'@;
put 'XHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3'@;
put 'ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1'@;
put 'XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2'@;
put 'Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEy'@;
put 'XHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5'@;
put 'OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4'@;
put 'OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1'@;
put 'ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMw'@;
put 'ZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1ODMyMlx1ODMyM1x1ODMyNFx1ODMyNVx1ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1'@;
put 'NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRm'@;
put 'Nlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1'@;
put 'NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1Nzgw'@;
put 'Y1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThd'@;
put 'W21dKTtmb3IoeFsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGFcdTgzNGJcdTgzNGNcdTgzNGRcdTgzNGVcdTgzNTNcdTgzNTVcdTgzNTZcdTgz'@;
put 'NTdcdTgzNThcdTgzNTlcdTgzNWRcdTgzNjJcdTgzNzBcdTgzNzFcdTgzNzJcdTgzNzNcdTgzNzRcdTgzNzVcdTgzNzZcdTgzNzlcdTgzN2FcdTgzN2VcdTgzN2ZcdTgzODBcdTgzODFcdTgzODJcdTgzODNcdTgzODRcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZc'@;
put 'dTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTFcdTgzYTJcdTgzYTNcdTgzYTRcdTgzYTVcdTgzYTZcdTgzYTdcdTgzYWNcdTgzYWRcdTgzYWVcdWZmZmRcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgz'@;
put 'YzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBc'@;
put 'dTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4'@;
put 'OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZc'@;
put 'dTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2'@;
put 'ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk5XVttXV09NTA5NDQrbSxGWzUw'@;
put 'OTQ0K21dPXhbMTk5XVttXSk7Zm9yKHhbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4'@;
put 'NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJl'@;
put 'XHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4'@;
put 'NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdi'@;
put 'XHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3'@;
put 'MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBl'@;
put 'XHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5'@;
put 'NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMF1bbV1d'@;
put 'PTUxMjAwK20sRls1MTIwMCttXT14WzIwMF1bbV0pO2Zvcih4WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1'@;
put 'ODQ4Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRh'@;
put 'ZVx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1'@;
put 'ODRkYVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRm'@;
put 'ZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1'@;
put 'NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2Ew'@;
put 'ZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1'@;
put 'N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsyMDFdW21dXT01MTQ1NittLEZbNTE0NTYrbV09eFsyMDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MDNcdTg1MDRcdTg1MDVcdTg1MDZcdTg1MDdcdTg1MDhcdTg1MDlcdTg1MGFcdTg1MGJc'@;
put 'dTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjZcdTg1MjdcdTg1MjhcdTg1MjlcdTg1MmFcdTg1MmRcdTg1MmVcdTg1MmZcdTg1'@;
put 'MzBcdTg1MzFcdTg1MzJcdTg1MzNcdTg1MzRcdTg1MzVcdTg1MzZcdTg1M2VcdTg1M2ZcdTg1NDBcdTg1NDFcdTg1NDJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGJcdTg1NGNcdTg1NGRcdTg1NGVcdTg1NGZcdTg1NTBcdTg1NTFcdTg1NTJcdTg1NTNcdTg1NTRcdTg1NTVcdWZmZmRc'@;
put 'dTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWZcdTg1NjBcdTg1NjFcdTg1NjJcdTg1NjNcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjlcdTg1NmFcdTg1NmJcdTg1NmNcdTg1NmRcdTg1NmVcdTg1NmZcdTg1NzBcdTg1NzFcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1'@;
put 'NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZc'@;
put 'dTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTVi'@;
put 'YTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZc'@;
put 'dTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThi'@;
put 'XHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4'@;
put 'NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQx'@;
put 'XHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4'@;
put 'NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFj'@;
put 'XHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4'@;
put 'YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3'@;
put 'XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVm'@;
put 'ZVx1ODYwMFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1ODYwZFx1ODYwZVx1ODYwZlx1ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYxOFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1'@;
put 'ODYxZVx1ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYyNVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYyY1x1ODYyZFx1ODYyZVx1ODYyZlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYz'@;
put 'ZFx1ODYzZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODY0OVx1ODY0YVx1ODY0Ylx1ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1'@;
put 'ODY2MFx1ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVl'@;
put 'OVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1'@;
put 'NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5'@;
put 'NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NmRcdTg2NmZcdTg2'@;
put 'NzBcdTg2NzJcdTg2NzNcdTg2NzRcdTg2NzVcdTg2NzZcdTg2NzdcdTg2NzhcdTg2ODNcdTg2ODRcdTg2ODVcdTg2ODZcdTg2ODdcdTg2ODhcdTg2ODlcdTg2OGVcdTg2OGZcdTg2OTBcdTg2OTFcdTg2OTJcdTg2OTRcdTg2OTZcdTg2OTdcdTg2OThcdTg2OTlcdTg2OWFcdTg2OWJcdTg2OWVc'@;
put 'dTg2OWZcdTg2YTBcdTg2YTFcdTg2YTJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmJcdTg2YmNcdTg2YmRcdTg2YmVcdTg2YmZcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2'@;
put 'ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGNcdWZmZmRcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZc'@;
put 'dTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4'@;
put 'NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBc'@;
put 'dTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4'@;
put 'N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4'@;
put 'NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQz'@;
put 'XHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4'@;
put 'NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0'@;
put 'XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4'@;
put 'NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBh'@;
put 'XHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0'@;
put 'ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdj'@;
put 'OVx1ODdjY1x1ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdkNlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1'@;
put 'ODdlZlx1ODdmMFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgw'@;
put 'ZFx1ODgwZVx1ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgxZVx1ODgxZlx1ODgyMFx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1'@;
put 'NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUy'@;
put 'OFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1'@;
put 'OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1'@;
put 'M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjRcdTg4MjVcdTg4MjZcdTg4MjdcdTg4MjhcdTg4MjlcdTg4MmFcdTg4MmJcdTg4MmNcdTg4MmRcdTg4MmVcdTg4MmZcdTg4MzBcdTg4MzFcdTg4MzNcdTg4MzRcdTg4MzVcdTg4MzZcdTg4MzdcdTg4MzhcdTg4M2FcdTg4M2JcdTg4M2RcdTg4'@;
put 'M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDZcdTg4NDdcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NGZcdTg4NTBcdTg4NTFcdTg4NTJcdTg4NTNcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWJcdTg4NWNcdTg4NWRcdTg4NWVcdTg4NWZcdTg4NjBcdTg4NjZc'@;
put 'dTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2FcdWZmZmRcdTg4N2JcdTg4N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4'@;
put 'OTRcdTg4OTVcdTg4OTdcdTg4OThcdTg4OTlcdTg4OWFcdTg4OWJcdTg4OWRcdTg4OWVcdTg4OWZcdTg4YTBcdTg4YTFcdTg4YTNcdTg4YTVcdTg4YTZcdTg4YTdcdTg4YThcdTg4YTlcdTg4YWFcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJc'@;
put 'dTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRm'@;
put 'ZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2Rc'@;
put 'dTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYw'@;
put 'YWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4'@;
put 'OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1'@;
put 'XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4'@;
put 'OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2'@;
put 'XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4'@;
put 'ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4Mjcz'@;
put 'XHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2'@;
put 'ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1ODkzZFx1ODkzZVx1ODkzZlx1ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1'@;
put 'ODk0ZFx1ODk0ZVx1ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk1ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2'@;
put 'Ylx1ODk2Y1x1ODk2ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1'@;
put 'ODk4Ylx1ODk4Y1x1ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5OFx1ODk5OVx1ODk5YVx1ODk5Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMy'@;
put 'M1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1'@;
put 'NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFj'@;
put 'Nlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1'@;
put 'OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3Io'@;
put 'eFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5YTJcdTg5YTNcdTg5YTRcdTg5YTVcdTg5YTZcdTg5YTdcdTg5YThcdTg5YTlcdTg5YWFcdTg5YWJcdTg5YWNcdTg5YWRcdTg5YWVcdTg5YWZcdTg5YjBcdTg5YjFcdTg5YjJc'@;
put 'dTg5YjNcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YjhcdTg5YjlcdTg5YmFcdTg5YmJcdTg5YmNcdTg5YmRcdTg5YmVcdTg5YmZcdTg5YzBcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5'@;
put 'ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjRcdTg5ZjVcdTg5ZjZcdTg5ZjdcdTg5ZjhcdTg5ZjlcdTg5ZmFcdWZmZmRcdTg5ZmJcdTg5ZmNcdTg5ZmRcdTg5ZmVcdTg5ZmZcdThhMDFcdThhMDJcdThhMDNc'@;
put 'dThhMDRcdThhMDVcdThhMDZcdThhMDhcdThhMDlcdThhMGFcdThhMGJcdThhMGNcdThhMGRcdThhMGVcdThhMGZcdThhMTBcdThhMTFcdThhMTJcdThhMTNcdThhMTRcdThhMTVcdThhMTZcdThhMTdcdThhMThcdThhMTlcdThhMWFcdThhMWJcdThhMWNcdThhMWRcdTUzNzBcdTgyZjFcdTZh'@;
put 'MzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNc'@;
put 'dTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRl'@;
put 'OGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFc'@;
put 'dTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhb'@;
put 'MjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5XHU4YTJhXHU4YTJiXHU4YTJj'@;
put 'XHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4'@;
put 'YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYxXHU4YTYyXHU4YTYzXHU4YTY0'@;
put 'XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4YTdlXHU4YTdmXHU4YTgwXHU2'@;
put 'ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2'@;
put 'XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4'@;
put 'ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2Zk'@;
put 'XHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20s'@;
put 'Rls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE4MVx1OGE4Mlx1OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4'@;
put 'Zlx1OGE5MFx1OGE5MVx1OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5ZVx1OGE5Zlx1OGFhMFx1OGFhMVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFhNlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1'@;
put 'OGFhY1x1OGFhZFx1OGFhZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1OGFiYVx1OGFiYlx1OGFiY1x1OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFj'@;
put 'Nlx1OGFjN1x1OGFjOFx1OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFjZlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkNlx1OGFkN1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFkY1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1'@;
put 'OGFlMlx1OGFlM1x1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYz'@;
put 'OFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1'@;
put 'N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMy'@;
put 'Zlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNd'@;
put 'W21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTRcdThhZTVcdThhZTZcdThhZTdcdThhZThcdThhZTlcdThhZWFcdThhZWJcdThhZWNcdThhZWRcdThh'@;
put 'ZWVcdThhZWZcdThhZjBcdThhZjFcdThhZjJcdThhZjNcdThhZjRcdThhZjVcdThhZjZcdThhZjdcdThhZjhcdThhZjlcdThhZmFcdThhZmJcdThhZmNcdThhZmRcdThhZmVcdThhZmZcdThiMDBcdThiMDFcdThiMDJcdThiMDNcdThiMDRcdThiMDVcdThiMDZcdThiMDhcdThiMDlcdThiMGFc'@;
put 'dThiMGJcdThiMGNcdThiMGRcdThiMGVcdThiMGZcdThiMTBcdThiMTFcdThiMTJcdThiMTNcdThiMTRcdThiMTVcdThiMTZcdThiMTdcdThiMThcdThiMTlcdThiMWFcdThiMWJcdThiMWNcdThiMWRcdThiMWVcdThiMWZcdThiMjBcdThiMjFcdThiMjJcdThiMjNcdWZmZmRcdThiMjRcdThi'@;
put 'MjVcdThiMjdcdThiMjhcdThiMjlcdThiMmFcdThiMmJcdThiMmNcdThiMmRcdThiMmVcdThiMmZcdThiMzBcdThiMzFcdThiMzJcdThiMzNcdThiMzRcdThiMzVcdThiMzZcdThiMzdcdThiMzhcdThiMzlcdThiM2FcdThiM2JcdThiM2NcdThiM2RcdThiM2VcdThiM2ZcdThiNDBcdThiNDFc'@;
put 'dThiNDJcdThiNDNcdThiNDRcdThiNDVcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYz'@;
put 'MDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZc'@;
put 'dTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThi'@;
put 'ZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRiXHU4YjRjXHU4YjRkXHU4'@;
put 'YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4YjY4XHU4YjY5XHU4YjZh'@;
put 'XHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0XHU4Yjg1XHU4Yjg2XHVm'@;
put 'ZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4YjlmXHU4YmFjXHU4YmIx'@;
put 'XHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5'@;
put 'NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3Yzdk'@;
put 'XHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5'@;
put 'MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMzOFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1'@;
put 'OGMzZVx1OGMzZlx1OGM0MFx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1MVx1OGM1Mlx1OGM1M1x1OGM1NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2'@;
put 'MFx1OGM2M1x1OGM2NFx1OGM2NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1'@;
put 'OGM4Nlx1OGM4N1x1ZmZmZFx1OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OVx1OGM5YVx1OGM5Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNh'@;
put 'NVx1OGNhNlx1OGNhN1x1OGNhOFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1'@;
put 'NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNm'@;
put 'NVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1'@;
put 'NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWVcdThjYWZcdThjYjBcdThjYjFc'@;
put 'dThjYjJcdThjYjNcdThjYjRcdThjYjVcdThjYjZcdThjYjdcdThjYjhcdThjYjlcdThjYmFcdThjYmJcdThjYmNcdThjYmRcdThjYmVcdThjYmZcdThjYzBcdThjYzFcdThjYzJcdThjYzNcdThjYzRcdThjYzVcdThjYzZcdThjYzdcdThjYzhcdThjYzlcdThjY2FcdThjY2JcdThjY2NcdThj'@;
put 'Y2RcdThjY2VcdThjY2ZcdThjZDBcdThjZDFcdThjZDJcdThjZDNcdThjZDRcdThjZDVcdThjZDZcdThjZDdcdThjZDhcdThjZDlcdThjZGFcdThjZGJcdThjZGNcdThjZGRcdThjZGVcdThjZGZcdThjZTBcdThjZTFcdThjZTJcdThjZTNcdThjZTRcdThjZTVcdThjZTZcdThjZTdcdThjZThc'@;
put 'dThjZTlcdThjZWFcdThjZWJcdThjZWNcdWZmZmRcdThjZWRcdThjZWVcdThjZWZcdThjZjBcdThjZjFcdThjZjJcdThjZjNcdThjZjRcdThjZjVcdThjZjZcdThjZjdcdThjZjhcdThjZjlcdThjZmFcdThjZmJcdThjZmNcdThjZmRcdThjZmVcdThjZmZcdThkMDBcdThkMDFcdThkMDJcdThk'@;
put 'MDNcdThkMDRcdThkMDVcdThkMDZcdThkMDdcdThkMDhcdThkMDlcdThkMGFcdThkMGJcdThkMGNcdThkMGRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZc'@;
put 'dTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUw'@;
put 'N2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlc'@;
put 'dTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDBlXHU4ZDBm'@;
put 'XHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4'@;
put 'ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4ZDk5XHU4ZDlh'@;
put 'XHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4'@;
put 'ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNm'@;
put 'XHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4'@;
put 'YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJh'@;
put 'XHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUwMFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1'@;
put 'OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1OGUxYlx1OGUxY1x1OGUyMFx1OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUz'@;
put 'Mlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1'@;
put 'OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBk'@;
put 'N1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1'@;
put 'NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4'@;
put 'Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdThlNzNcdThlNzVcdThlNzdcdThlNzhcdThlNzlcdThlN2FcdThlN2JcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODhcdThlODlcdThlOGFcdThlOGJcdThlOGNcdThlOGRcdThlOGVcdThlOTFcdThlOTJcdThlOTNcdThlOTVc'@;
put 'dThlOTZcdThlOTdcdThlOThcdThlOTlcdThlOWFcdThlOWJcdThlOWRcdThlOWZcdThlYTBcdThlYTFcdThlYTJcdThlYTNcdThlYTRcdThlYTVcdThlYTZcdThlYTdcdThlYThcdThlYTlcdThlYWFcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjNcdThlYjRcdThlYjVcdThlYjZcdThl'@;
put 'YjdcdThlYjhcdThlYjlcdThlYmJcdThlYmNcdThlYmRcdThlYmVcdThlYmZcdThlYzBcdThlYzFcdThlYzJcdWZmZmRcdThlYzNcdThlYzRcdThlYzVcdThlYzZcdThlYzdcdThlYzhcdThlYzlcdThlY2FcdThlY2JcdThlY2NcdThlY2RcdThlY2ZcdThlZDBcdThlZDFcdThlZDJcdThlZDNc'@;
put 'dThlZDRcdThlZDVcdThlZDZcdThlZDdcdThlZDhcdThlZDlcdThlZGFcdThlZGJcdThlZGNcdThlZGRcdThlZGVcdThlZGZcdThlZTBcdThlZTFcdThlZTJcdThlZTNcdThlZTRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4'@;
put 'NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdc'@;
put 'dTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgz'@;
put 'MDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZc'@;
put 'dTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZhXHU4ZWZi'@;
put 'XHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4ZjE2XHU4'@;
put 'ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMwXHU4ZjMx'@;
put 'XHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4'@;
put 'Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2Zk'@;
put 'XHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4'@;
put 'NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYw'@;
put 'XHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0ZFx1OGY0ZVx1OGY0Zlx1OGY1MFx1OGY1MVx1OGY1Mlx1OGY1M1x1OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1'@;
put 'OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1'@;
put 'OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZmZFx1OGZjOVx1OGZjYVx1OGZjYlx1OGZjY1x1OGZjZFx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZl'@;
put 'MVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1'@;
put 'ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYz'@;
put 'Y1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1'@;
put 'NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQy'@;
put 'Nlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjdcdTkwMjhcdTkwMjlcdTkwMmFcdTkwMmJcdTkwMmNcdTkwMzBcdTkwMzFcdTkwMzJcdTkwMzNcdTkwMzRcdTkwMzdcdTkwMzlcdTkw'@;
put 'M2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDhcdTkwNDlcdTkwNGFcdTkwNGJcdTkwNGNcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWNcdTkwNWRcdTkwNWVcdTkwNWZcdTkwNjBcdTkwNjFcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlc'@;
put 'dTkwNmFcdTkwNmJcdTkwNmNcdTkwNmZcdTkwNzBcdTkwNzFcdTkwNzJcdTkwNzNcdTkwNzZcdTkwNzdcdTkwNzhcdTkwNzlcdTkwN2FcdTkwN2JcdTkwN2NcdTkwN2VcdTkwODFcdWZmZmRcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGNcdTkwOGRcdTkwOGVcdTkw'@;
put 'OGZcdTkwOTBcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlc'@;
put 'dTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0'@;
put 'NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNc'@;
put 'dTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1'@;
put 'YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7'@;
put 'Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5'@;
put 'MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5MTA4'@;
put 'XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2XHU5'@;
put 'MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1NTU2'@;
put 'XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1'@;
put 'NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4'@;
put 'XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1'@;
put 'NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCtt'@;
put 'XT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1'@;
put 'OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5'@;
put 'ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYlx1ZmZmZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1'@;
put 'OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFjNVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFkOFx1OTFkOVx1OTFkYVx1OTFkYlx1OTFkZFx1OTFkZVx1OTFkZlx1OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFl'@;
put 'NVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1'@;
put 'NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5'@;
put 'OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1'@;
put 'NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYw'@;
put 'MCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZTZcdTkxZTdcdTkxZThcdTkxZTlcdTkxZWFcdTkxZWJcdTkxZWNcdTkxZWRcdTkxZWVcdTkxZWZcdTkxZjBcdTkxZjFc'@;
put 'dTkxZjJcdTkxZjNcdTkxZjRcdTkxZjVcdTkxZjZcdTkxZjdcdTkxZjhcdTkxZjlcdTkxZmFcdTkxZmJcdTkxZmNcdTkxZmRcdTkxZmVcdTkxZmZcdTkyMDBcdTkyMDFcdTkyMDJcdTkyMDNcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDhcdTkyMDlcdTkyMGFcdTkyMGJcdTkyMGNcdTky'@;
put 'MGRcdTkyMGVcdTkyMGZcdTkyMTBcdTkyMTFcdTkyMTJcdTkyMTNcdTkyMTRcdTkyMTVcdTkyMTZcdTkyMTdcdTkyMThcdTkyMTlcdTkyMWFcdTkyMWJcdTkyMWNcdTkyMWRcdTkyMWVcdTkyMWZcdTkyMjBcdTkyMjFcdTkyMjJcdTkyMjNcdTkyMjRcdWZmZmRcdTkyMjVcdTkyMjZcdTkyMjdc'@;
put 'dTkyMjhcdTkyMjlcdTkyMmFcdTkyMmJcdTkyMmNcdTkyMmRcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzFcdTkyMzJcdTkyMzNcdTkyMzRcdTkyMzVcdTkyMzZcdTkyMzdcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2JcdTkyM2NcdTkyM2RcdTkyM2VcdTkyM2ZcdTkyNDBcdTkyNDFcdTkyNDJcdTky'@;
put 'NDNcdTkyNDRcdTkyNDVcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRc'@;
put 'dTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVl'@;
put 'YjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVc'@;
put 'dTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRm'@;
put 'XHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5'@;
put 'MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2'@;
put 'XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5'@;
put 'MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0'@;
put 'XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5'@;
put 'NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2Qw'@;
put 'XHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhOFx1OTJhOVx1OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJi'@;
put 'MFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJiNVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1OTJjMFx1OTJjMVx1OTJjMlx1OTJjM1x1OTJjNFx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1'@;
put 'OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJkY1x1OTJkZFx1OTJkZVx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlMlx1OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJl'@;
put 'OFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJlY1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1OTJmN1x1OTJmOFx1OTJmOVx1OTJmYVx1OTJmYlx1OTJmY1x1OTJmZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1'@;
put 'OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5'@;
put 'ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1'@;
put 'NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0'@;
put 'N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGFcdTkzMGJcdTkzMGNcdTkzMGRcdTkzMGVcdTkz'@;
put 'MGZcdTkzMTBcdTkzMTFcdTkzMTJcdTkzMTNcdTkzMTRcdTkzMTVcdTkzMTZcdTkzMTdcdTkzMThcdTkzMTlcdTkzMWFcdTkzMWJcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjBcdTkzMjFcdTkzMjJcdTkzMjNcdTkzMjRcdTkzMjVcdTkzMjZcdTkzMjdcdTkzMjhcdTkzMjlcdTkzMmFc'@;
put 'dTkzMmJcdTkzMmNcdTkzMmRcdTkzMmVcdTkzMmZcdTkzMzBcdTkzMzFcdTkzMzJcdTkzMzNcdTkzMzRcdTkzMzVcdTkzMzZcdTkzMzdcdTkzMzhcdTkzMzlcdTkzM2FcdTkzM2JcdTkzM2NcdTkzM2RcdTkzM2ZcdTkzNDBcdTkzNDFcdTkzNDJcdTkzNDNcdTkzNDRcdTkzNDVcdTkzNDZcdTkz'@;
put 'NDdcdTkzNDhcdTkzNDlcdWZmZmRcdTkzNGFcdTkzNGJcdTkzNGNcdTkzNGRcdTkzNGVcdTkzNGZcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTNcdTkzNTRcdTkzNTVcdTkzNTZcdTkzNTdcdTkzNThcdTkzNTlcdTkzNWFcdTkzNWJcdTkzNWNcdTkzNWRcdTkzNWVcdTkzNWZcdTkzNjBcdTkzNjFc'@;
put 'dTkzNjJcdTkzNjNcdTkzNjRcdTkzNjVcdTkzNjZcdTkzNjdcdTkzNjhcdTkzNjlcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTVi'@;
put 'ODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZc'@;
put 'dTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVj'@;
put 'M2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5'@;
put 'MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5Mzhh'@;
put 'XHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5'@;
put 'M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2Mx'@;
put 'XHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1'@;
put 'OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUz'@;
put 'XHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5'@;
put 'YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMw'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1'@;
put 'OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNkNFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1OTNkY1x1OTNkZFx1OTNkZVx1OTNkZlx1OTNlMFx1OTNlMVx1OTNlMlx1OTNlM1x1OTNlNFx1OTNlNVx1OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNl'@;
put 'Ylx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNmN1x1OTNmOFx1OTNmOVx1OTNmYVx1OTNmYlx1OTNmY1x1OTNmZFx1OTNmZVx1OTNmZlx1OTQwMFx1OTQwMVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1'@;
put 'OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQwY1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1OTQxMlx1OTQxM1x1OTQxNFx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxOFx1OTQxOVx1OTQxYVx1OTQxYlx1OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQy'@;
put 'MVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQyZFx1OTQyZVx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1'@;
put 'N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2Yy'@;
put 'MVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1'@;
put 'NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTk0MmZcdTk0MzBcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0MzVcdTk0MzZcdTk0MzdcdTk0MzhcdTk0MzlcdTk0M2FcdTk0M2JcdTk0M2NcdTk0M2RcdTk0M2ZcdTk0NDBcdTk0NDFcdTk0NDJcdTk0NDNcdTk0NDRcdTk0NDVcdTk0NDZcdTk0NDdcdTk0NDhcdTk0NDlcdTk0'@;
put 'NGFcdTk0NGJcdTk0NGNcdTk0NGRcdTk0NGVcdTk0NGZcdTk0NTBcdTk0NTFcdTk0NTJcdTk0NTNcdTk0NTRcdTk0NTVcdTk0NTZcdTk0NTdcdTk0NThcdTk0NTlcdTk0NWFcdTk0NWJcdTk0NWNcdTk0NWRcdTk0NWVcdTk0NWZcdTk0NjBcdTk0NjFcdTk0NjJcdTk0NjNcdTk0NjRcdTk0NjVc'@;
put 'dTk0NjZcdTk0NjdcdTk0NjhcdTk0NjlcdTk0NmFcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmZcdWZmZmRcdTk0NzBcdTk0NzFcdTk0NzJcdTk0NzNcdTk0NzRcdTk0NzVcdTk0NzZcdTk0NzdcdTk0NzhcdTk0NzlcdTk0N2FcdTk0N2JcdTk0N2NcdTk0N2RcdTk0N2VcdTk0N2ZcdTk0ODBcdTk0'@;
put 'ODFcdTk0ODJcdTk0ODNcdTk0ODRcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVc'@;
put 'dTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3'@;
put 'OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFc'@;
put 'dTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5'@;
put 'NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlm'@;
put 'XHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5'@;
put 'NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYw'@;
put 'XHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2'@;
put 'OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUy'@;
put 'XHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4'@;
put 'Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVjY1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkNFx1OTVkNVx1OTVkNlx1OTVkN1x1OTVkOFx1OTVkOVx1OTVkYVx1OTVkYlx1OTVkY1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1'@;
put 'OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyM1x1OTYyNFx1OTYyNVx1OTYyNlx1OTYyN1x1OTYyOFx1OTYyOVx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYz'@;
put 'OFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1N1x1ZmZmZFx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1'@;
put 'OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4MFx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIx'@;
put 'N1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1'@;
put 'NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0'@;
put 'MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1'@;
put 'NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFcdTk2OWJcdTk2OWRcdTk2OWVcdTk2OWZcdTk2YTBcdTk2YTFcdTk2YTJcdTk2YTNcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YThc'@;
put 'dTk2YTlcdTk2YWFcdTk2YWJcdTk2YWNcdTk2YWRcdTk2YWVcdTk2YWZcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDZcdTk2ZDdcdTk2'@;
put 'ZDhcdTk2ZDlcdTk2ZGFcdTk2ZGJcdTk2ZGNcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTFcdTk2ZTJcdTk2ZTNcdTk2ZTRcdTk2ZTVcdTk2ZTZcdTk2ZTdcdTk2ZWJcdWZmZmRcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJc'@;
put 'dTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVcdTk3MTdcdTk3MThcdTk3MTlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZi'@;
put 'ZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNc'@;
put 'dTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgw'@;
put 'ZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVc'@;
put 'dTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2'@;
put 'XHU5NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5'@;
put 'NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5Nzdl'@;
put 'XHU5NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2'@;
put 'YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDlj'@;
put 'XHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3'@;
put 'MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3'@;
put 'XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1b'@;
put 'bV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNFx1OTdhNVx1OTdhNlx1OTdhN1x1OTdhOFx1OTdhOVx1OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdi'@;
put 'M1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdjMVx1OTdjMlx1OTdjM1x1OTdjNFx1OTdjNVx1OTdjNlx1OTdjN1x1OTdjOFx1OTdjOVx1OTdjYVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1'@;
put 'OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdkNlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1OTdkZFx1OTdkZVx1OTdkZlx1OTdlMFx1OTdlMVx1OTdlMlx1OTdlM1x1ZmZmZFx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdm'@;
put 'MVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgwMVx1OTgwMlx1OTgwM1x1OTgwNFx1OTgwNVx1OTgwNlx1OTgwN1x1OTgwOFx1OTgwOVx1OTgwYVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1'@;
put 'NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVh'@;
put 'Ylx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1'@;
put 'NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1Nzcx'@;
put 'OVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2'@;
put 'NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4MGZcdTk4MTBcdTk4MTFcdTk4MTJcdTk4MTNcdTk4MTRcdTk4MTVcdTk4MTZcdTk4MTdcdTk4MThcdTk4MTlcdTk4MWFcdTk4MWJcdTk4'@;
put 'MWNcdTk4MWRcdTk4MWVcdTk4MWZcdTk4MjBcdTk4MjFcdTk4MjJcdTk4MjNcdTk4MjRcdTk4MjVcdTk4MjZcdTk4MjdcdTk4MjhcdTk4MjlcdTk4MmFcdTk4MmJcdTk4MmNcdTk4MmRcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzFcdTk4MzJcdTk4MzNcdTk4MzRcdTk4MzVcdTk4MzZcdTk4Mzdc'@;
put 'dTk4MzhcdTk4MzlcdTk4M2FcdTk4M2JcdTk4M2NcdTk4M2RcdTk4M2VcdTk4M2ZcdTk4NDBcdTk4NDFcdTk4NDJcdTk4NDNcdTk4NDRcdTk4NDVcdTk4NDZcdTk4NDdcdTk4NDhcdTk4NDlcdTk4NGFcdTk4NGJcdTk4NGNcdTk4NGRcdWZmZmRcdTk4NGVcdTk4NGZcdTk4NTBcdTk4NTFcdTk4'@;
put 'NTJcdTk4NTNcdTk4NTRcdTk4NTVcdTk4NTZcdTk4NTdcdTk4NThcdTk4NTlcdTk4NWFcdTk4NWJcdTk4NWNcdTk4NWRcdTk4NWVcdTk4NWZcdTk4NjBcdTk4NjFcdTk4NjJcdTk4NjNcdTk4NjRcdTk4NjVcdTk4NjZcdTk4NjdcdTk4NjhcdTk4NjlcdTk4NmFcdTk4NmJcdTk4NmNcdTk4NmRc'@;
put 'dTk4NmVcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdm'@;
put 'NjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFc'@;
put 'dTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0'@;
put 'ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09'@;
put 'NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5'@;
put 'OGEzXHU5OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMy'@;
put 'XHU5OGMzXHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5'@;
put 'OGU5XHU5OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0'@;
put 'XHU5OTA1XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5'@;
put 'NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRj'@;
put 'XHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5'@;
put 'NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTkwOFx1OTkwOVx1OTkwYVx1OTkwYlx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1'@;
put 'OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTkyMFx1OTkyMVx1OTkyMlx1OTkyM1x1OTkyNFx1OTkyNVx1OTkyNlx1OTkyN1x1OTkyOFx1OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTky'@;
put 'Zlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkzNlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTkzZFx1OTkzZVx1OTkzZlx1OTk0MFx1OTk0MVx1OTk0Mlx1OTk0M1x1OTk0NFx1OTk0NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1'@;
put 'OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1OVx1OTk1YVx1OTk1Ylx1OTk1Y1x1OTk1ZFx1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk2MVx1OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3'@;
put 'OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1'@;
put 'OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2'@;
put 'OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1'@;
put 'NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5OGNcdTk5OGVcdTk5OWFcdTk5OWJcdTk5OWNcdTk5OWRcdTk5OWVc'@;
put 'dTk5OWZcdTk5YTBcdTk5YTFcdTk5YTJcdTk5YTNcdTk5YTRcdTk5YTZcdTk5YTdcdTk5YTlcdTk5YWFcdTk5YWJcdTk5YWNcdTk5YWRcdTk5YWVcdTk5YWZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjNcdTk5YjRcdTk5YjVcdTk5YjZcdTk5YjdcdTk5YjhcdTk5YjlcdTk5YmFcdTk5YmJcdTk5'@;
put 'YmNcdTk5YmRcdTk5YmVcdTk5YmZcdTk5YzBcdTk5YzFcdTk5YzJcdTk5YzNcdTk5YzRcdTk5YzVcdTk5YzZcdTk5YzdcdTk5YzhcdTk5YzlcdTk5Y2FcdTk5Y2JcdTk5Y2NcdTk5Y2RcdTk5Y2VcdTk5Y2ZcdTk5ZDBcdTk5ZDFcdTk5ZDJcdTk5ZDNcdTk5ZDRcdTk5ZDVcdTk5ZDZcdTk5ZDdc'@;
put 'dTk5ZDhcdWZmZmRcdTk5ZDlcdTk5ZGFcdTk5ZGJcdTk5ZGNcdTk5ZGRcdTk5ZGVcdTk5ZGZcdTk5ZTBcdTk5ZTFcdTk5ZTJcdTk5ZTNcdTk5ZTRcdTk5ZTVcdTk5ZTZcdTk5ZTdcdTk5ZThcdTk5ZTlcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5ZWRcdTk5ZWVcdTk5ZWZcdTk5ZjBcdTk5ZjFcdTk5'@;
put 'ZjJcdTk5ZjNcdTk5ZjRcdTk5ZjVcdTk5ZjZcdTk5ZjdcdTk5ZjhcdTk5ZjlcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2Fc'@;
put 'dTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4'@;
put 'ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBc'@;
put 'dTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZl'@;
put 'XHU5OWZmXHU5YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5'@;
put 'YTFhXHU5YTFiXHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1'@;
put 'XHU5YTM2XHU5YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5'@;
put 'YTUwXHU5YTUxXHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4Njdm'@;
put 'XHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4'@;
put 'NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3'@;
put 'XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1'@;
put 'Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2YVx1OWE2Ylx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1'@;
put 'OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNlx1OWFjN1x1OWFjOFx1OWFjOVx1OWFjYVx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFk'@;
put 'Nlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMFx1OWFmMVx1OWFmMlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1'@;
put 'OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIwMVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdj'@;
put 'MFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1'@;
put 'N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2Ji'@;
put 'OFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTli'@;
put 'MDdcdTliMDlcdTliMGFcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTFcdTliMTJcdTliMTRcdTliMTVcdTliMTZcdTliMTdcdTliMThcdTliMTlcdTliMWFcdTliMWJcdTliMWNcdTliMWRcdTliMWVcdTliMjBcdTliMjFcdTliMjJcdTliMjRcdTliMjVcdTliMjZcdTliMjdc'@;
put 'dTliMjhcdTliMjlcdTliMmFcdTliMmJcdTliMmNcdTliMmRcdTliMmVcdTliMzBcdTliMzFcdTliMzNcdTliMzRcdTliMzVcdTliMzZcdTliMzdcdTliMzhcdTliMzlcdTliM2FcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTli'@;
put 'NTJcdTliNTNcdTliNTVcdTliNTZcdTliNTdcdTliNThcdTliNTlcdTliNWFcdWZmZmRcdTliNWJcdTliNWNcdTliNWRcdTliNWVcdTliNWZcdTliNjBcdTliNjFcdTliNjJcdTliNjNcdTliNjRcdTliNjVcdTliNjZcdTliNjdcdTliNjhcdTliNjlcdTliNmFcdTliNmJcdTliNmNcdTliNmRc'@;
put 'dTliNmVcdTliNmZcdTliNzBcdTliNzFcdTliNzJcdTliNzNcdTliNzRcdTliNzVcdTliNzZcdTliNzdcdTliNzhcdTliNzlcdTliN2FcdTliN2JcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgy'@;
put 'MjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZc'@;
put 'dTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdm'@;
put 'ZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU5YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1'@;
put 'XHU5Yjk2XHU5Yjk3XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5'@;
put 'YmIxXHU5YmIyXHU5YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNi'@;
put 'XHU5YmNjXHU5YmNkXHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5'@;
put 'MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRh'@;
put 'XHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4'@;
put 'ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRj'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJlNlx1OWJlN1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJlYlx1OWJlY1x1OWJlZFx1OWJlZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJm'@;
put 'M1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJmYlx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1OWMwMlx1OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1OWMwN1x1OWMwOFx1OWMwOVx1OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1'@;
put 'OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMxY1x1OWMxZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMyMVx1OWMyMlx1OWMyM1x1OWMyNFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMy'@;
put 'OVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMzMVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzOFx1OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1'@;
put 'OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZl'@;
put 'MFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1'@;
put 'OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNj'@;
put 'N1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljM2NcdTljM2RcdTljM2VcdTljM2ZcdTljNDBcdTljNDFcdTljNDJcdTljNDNcdTljNDRcdTljNDVcdTljNDZcdTljNDdcdTljNDhcdTljNDlcdTljNGFcdTljNGJcdTljNGNcdTljNGRcdTljNGVcdTljNGZcdTljNTBcdTlj'@;
put 'NTFcdTljNTJcdTljNTNcdTljNTRcdTljNTVcdTljNTZcdTljNTdcdTljNThcdTljNTlcdTljNWFcdTljNWJcdTljNWNcdTljNWRcdTljNWVcdTljNWZcdTljNjBcdTljNjFcdTljNjJcdTljNjNcdTljNjRcdTljNjVcdTljNjZcdTljNjdcdTljNjhcdTljNjlcdTljNmFcdTljNmJcdTljNmNc'@;
put 'dTljNmRcdTljNmVcdTljNmZcdTljNzBcdTljNzFcdTljNzJcdTljNzNcdTljNzRcdTljNzVcdTljNzZcdTljNzdcdTljNzhcdTljNzlcdTljN2FcdWZmZmRcdTljN2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTlj'@;
put 'OTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmVcdTljYmZcdTljYzBcdTljYzFcdTljYzJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRc'@;
put 'dTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlh'@;
put 'YzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNc'@;
put 'dTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlm'@;
put 'MzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5'@;
put 'Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDEx'@;
put 'XHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5'@;
put 'ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4'@;
put 'WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0N1x1OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0Y1x1OWQ0ZFx1OWQ0ZVx1OWQ0Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1'@;
put 'OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1OWQ2M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1OWQ2OFx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2'@;
put 'Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3ZVx1OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4Mlx1OWQ4M1x1OWQ4NFx1OWQ4NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1'@;
put 'OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWQ5OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1OWQ5ZVx1OWQ5Zlx1OWRhMFx1OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsy'@;
put 'NDldW21dKTtmb3IoeFsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTNcdTlkYTRcdTlkYTVcdTlkYTZcdTlkYTdcdTlkYThcdTlkYTlcdTlkYWFcdTlkYWJcdTlkYWNcdTlkYWRcdTlkYWVcdTlkYWZcdTlkYjBcdTlkYjFc'@;
put 'dTlkYjJcdTlkYjNcdTlkYjRcdTlkYjVcdTlkYjZcdTlkYjdcdTlkYjhcdTlkYjlcdTlkYmFcdTlkYmJcdTlkYmNcdTlkYmRcdTlkYmVcdTlkYmZcdTlkYzBcdTlkYzFcdTlkYzJcdTlkYzNcdTlkYzRcdTlkYzVcdTlkYzZcdTlkYzdcdTlkYzhcdTlkYzlcdTlkY2FcdTlkY2JcdTlkY2NcdTlk'@;
put 'Y2RcdTlkY2VcdTlkY2ZcdTlkZDBcdTlkZDFcdTlkZDJcdTlkZDNcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZDhcdTlkZDlcdTlkZGFcdTlkZGJcdTlkZGNcdTlkZGRcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTFcdWZmZmRcdTlkZTJcdTlkZTNcdTlkZTRcdTlkZTVcdTlkZTZcdTlkZTdc'@;
put 'dTlkZThcdTlkZTlcdTlkZWFcdTlkZWJcdTlkZWNcdTlkZWRcdTlkZWVcdTlkZWZcdTlkZjBcdTlkZjFcdTlkZjJcdTlkZjNcdTlkZjRcdTlkZjVcdTlkZjZcdTlkZjdcdTlkZjhcdTlkZjlcdTlkZmFcdTlkZmJcdTlkZmNcdTlkZmRcdTlkZmVcdTlkZmZcdTllMDBcdTllMDFcdTllMDJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZb'@;
put 'NjRlMyttXT14WzI1MF1bbV0pO2Zvcih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1'@;
put 'OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1'@;
put 'NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1'@;
put 'OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVh'@;
put 'OVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21d'@;
put 'XT02NDI1NittLEZbNjQyNTYrbV09eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVcdTllYWZcdTllYjBcdTllYjFcdTllYjJcdTllYjNcdTllYjVcdTllYjZc'@;
put 'dTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTll'@;
put 'ZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhcdTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFcdTlmMDJcdTlmMDNcdTlmMDRcdTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdc'@;
put 'dTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlmMWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlmMjVcdTlmMjZcdTlmMjdcdTlmMjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlm'@;
put 'MmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGFlW3hbMjUyXVttXV09NjQ1MTIrbSxGWzY0NTEyK21dPXhbMjUyXVttXSk7Zm9yKHhbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjMyXHU5ZjMzXHU5ZjM0XHU5ZjM1XHU5ZjM2XHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNm'@;
put 'XHU5ZjQwXHU5ZjQxXHU5ZjQyXHU5ZjQzXHU5ZjQ1XHU5ZjQ2XHU5ZjQ3XHU5ZjQ4XHU5ZjQ5XHU5ZjRhXHU5ZjRiXHU5ZjRjXHU5ZjRkXHU5ZjRlXHU5ZjRmXHU5ZjUyXHU5ZjUzXHU5ZjU0XHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU5ZjU5XHU5ZjVhXHU5ZjViXHU5ZjVjXHU5ZjVkXHU5'@;
put 'ZjVlXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjYyXHU5ZjYzXHU5ZjY0XHU5ZjY1XHU5ZjY2XHU5ZjY3XHU5ZjY4XHU5ZjY5XHU5ZjZhXHU5ZjZiXHU5ZjZjXHU5ZjZkXHU5ZjZlXHU5ZjZmXHU5ZjcwXHU5ZjcxXHU5ZjcyXHU5ZjczXHU5Zjc0XHU5Zjc1XHU5Zjc2XHU5Zjc3XHU5Zjc4XHVmZmZk'@;
put 'XHU5Zjc5XHU5ZjdhXHU5ZjdiXHU5ZjdjXHU5ZjdkXHU5ZjdlXHU5ZjgxXHU5ZjgyXHU5ZjhkXHU5ZjhlXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5ZjkzXHU5Zjk0XHU5Zjk1XHU5Zjk2XHU5Zjk3XHU5Zjk4XHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE0XHU5'@;
put 'ZmE1XHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTNdW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihhZVt4WzI1M11bbV1dPTY0NzY4K20sRls2NDc2OCttXT14WzI1M11bbV0pO2Zvcih4WzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmEx'@;
put 'NFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1NF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PXhbMjU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTRdW21dXT02NTAyNCttLEZbNjUwMjQrbV09eFsyNTRdW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxMZVs5NDldPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRc'@;
put 'eDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJj'@;
put 'ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMwMlx1YWMwM1x1YWMwNVx1'@;
put 'YWMwNlx1YWMwYlx1YWMwY1x1YWMwZFx1YWMwZVx1YWMwZlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNVx1YWMyNlx1YWMyN1x1YWMyOFx1YWMyOVx1YWMyYVx1YWMyYlx1YWMyZVx1YWMzMlx1YWMzM1x1YWMzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MVx1YWM0Mlx1YWM0M1x1YWM0NFx1YWM0NVx1YWM0Nlx1YWM0N1x1YWM0OFx1YWM0OVx1YWM0YVx1YWM0Y1x1YWM0ZVx1YWM0Zlx1YWM1MFx1YWM1MVx1YWM1Mlx1YWM1M1x1YWM1NVx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZFx1YWM1ZVx1YWM1Zlx1YWM2MFx1YWM2MVx1YWM2Mlx1YWM2M1x1YWM2NFx1YWM2NVx1YWM2Nlx1YWM2N1x1YWM2OFx1YWM2OVx1YWM2YVx1YWM2Ylx1YWM2Y1x1YWM2'@;
put 'ZFx1YWM2ZVx1YWM2Zlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3Ylx1YWM3Y1x1YWM3ZFx1YWM3ZVx1YWM3Zlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NVx1YWM5Nlx1YWM5N1x1YWM5OFx1YWM5OVx1YWM5YVx1'@;
put 'YWM5Ylx1YWM5ZVx1YWNhMlx1YWNhM1x1YWNhNFx1YWNhNVx1YWNhNlx1YWNhN1x1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMVx1YWNiMlx1YWNiM1x1YWNiNFx1YWNiNVx1YWNiNlx1YWNiN1x1YWNiYVx1YWNiZVx1YWNiZlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNj'@;
put 'OVx1YWNjYVx1YWNjYlx1YWNjZFx1YWNjZVx1YWNjZlx1YWNkMFx1YWNkMVx1YWNkMlx1YWNkM1x1YWNkNFx1YWNkNlx1YWNkOFx1YWNkOVx1YWNkYVx1YWNkYlx1YWNkY1x1YWNkZFx1YWNkZVx1YWNkZlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1'@;
put 'YWNmMlx1YWNmNFx1YWNmN1x1YWNmOFx1YWNmOVx1YWNmYVx1YWNmYlx1YWNmZVx1YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwN1x1YWQwOFx1YWQwOVx1YWQwYVx1YWQwYlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRc'@;
put 'dWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVc'@;
put 'dWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFk'@;
put 'NzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFc'@;
put 'dWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFk'@;
put 'YmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRc'@;
put 'dWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVhZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVhZTEwXHVhZTExXHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3XHVhZTE4XHVhZTE5XHVhZTFhXHVhZTFiXHVhZTFjXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIxXHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2XHVhZTI3XHVhZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVhZTJkXHVhZTJlXHVhZTJmXHVhZTMyXHVhZTMzXHVhZTM1'@;
put 'XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3XHVhZTU4XHVhZTU5XHVh'@;
put 'ZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTczXHVhZTc0XHVhZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVhZTdmXHVhZTgwXHVhZTgxXHVhZTgyXHVhZTgzXHVhZTg2'@;
put 'XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVhZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVhZTk3XHVhZTk4XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlkXHVhZTllXHVhZTlmXHVhZWEwXHVhZWExXHVhZWEyXHVh'@;
put 'ZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFkXHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIyXHVhZWIzXHVhZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVhZWI5XHVhZWJhXHVhZWJiXHVhZWJmXHVhZWMxXHVhZWMy'@;
put 'XHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVhZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVhZWRhXHVhZWRiXHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUxXHVhZWUyXHVhZWUzXHVhZWU0XHVhZWU1XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZVx1YWVlZlx1YWVmMFx1YWVmMVx1YWVmMlx1YWVmM1x1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZFx1YWVmZVx1YWVmZlx1YWYwMFx1YWYwMVx1YWYwMlx1YWYwM1x1'@;
put 'YWYwNFx1YWYwNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYwZlx1YWYxMVx1YWYxMlx1YWYxM1x1YWYxNFx1YWYxNVx1YWYxNlx1YWYxN1x1YWYxOFx1YWYxOVx1YWYxYVx1YWYxYlx1YWYxY1x1YWYx'@;
put 'ZFx1YWYxZVx1YWYxZlx1YWYyMFx1YWYyMVx1YWYyMlx1YWYyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYyNFx1YWYyNVx1YWYyNlx1YWYyN1x1YWYyOFx1YWYyOVx1YWYyYVx1YWYyYlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYzNVx1YWYzNlx1YWYzN1x1'@;
put 'YWYzOFx1YWYzOVx1YWYzYVx1YWYzYlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YVx1YWY0Ylx1YWY0Y1x1YWY0ZFx1YWY0ZVx1YWY0Zlx1YWY1MVx1YWY1Mlx1YWY1M1x1YWY1NFx1YWY1NVx1YWY1Nlx1YWY1N1x1YWY1OFx1YWY1OVx1YWY1YVx1YWY1Ylx1YWY1'@;
put 'ZVx1YWY1Zlx1YWY2MFx1YWY2MVx1YWY2Mlx1YWY2M1x1YWY2Nlx1YWY2N1x1YWY2OFx1YWY2OVx1YWY2YVx1YWY2Ylx1YWY2Y1x1YWY2ZFx1YWY2ZVx1YWY2Zlx1YWY3MFx1YWY3MVx1YWY3Mlx1YWY3M1x1YWY3NFx1YWY3NVx1YWY3Nlx1YWY3N1x1YWY3OFx1YWY3YVx1YWY3Ylx1YWY3Y1x1'@;
put 'YWY3ZFx1YWY3ZVx1YWY3Zlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OVx1YWY4YVx1YWY4Ylx1YWY4Y1x1YWY4ZFx1YWY4ZVx1YWY4Zlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5Nlx1YWY5N1x1YWY5OFx1YWY5OVx1YWY5YVx1YWY5Ylx1YWY5ZFx1YWY5ZVx1YWY5'@;
put 'Zlx1YWZhMFx1YWZhMVx1YWZhMlx1YWZhM1x1YWZhNFx1YWZhNVx1YWZhNlx1YWZhN1x1YWZhOFx1YWZhOVx1YWZhYVx1YWZhYlx1YWZhY1x1YWZhZFx1YWZhZVx1YWZhZlx1YWZiMFx1YWZiMVx1YWZiMlx1YWZiM1x1YWZiNFx1YWZiNVx1YWZiNlx1YWZiN1x1YWZiYVx1YWZiYlx1YWZiZFx1'@;
put 'YWZiZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRc'@;
put 'dWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFm'@;
put 'ZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNc'@;
put 'dWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIw'@;
put 'MzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThc'@;
put 'dWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIw'@;
put 'NzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRc'@;
put 'dWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMzXVttXV09MzQwNDgrbSxGWzM0MDQ4K21dPXhbMTMzXVttXSk7Zm9yKHhbMTM0XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkXHViMGJlXHViMGJmXHViMGMwXHViMGMxXHViMGMyXHViMGMzXHViMGM2XHViMGNh'@;
put 'XHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5XHViMGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRlXHViMGRmXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHVi'@;
put 'MGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGYxXHViMGYyXHViMGYzXHViMGY0XHViMGY1XHViMGY2XHViMGY3XHViMGY4XHViMGY5XHViMGZhXHViMGZi'@;
put 'XHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHViMTFlXHViMTFmXHViMTIwXHViMTIxXHViMTIyXHVi'@;
put 'MTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHViMTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNjXHViMTNkXHViMTNlXHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5XHViMTRhXHViMTRiXHViMTRj'@;
put 'XHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxXHViMTYyXHViMTYzXHViMTY0XHViMTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5XHViMTZhXHViMTZiXHViMTZjXHViMTZkXHViMTZlXHVi'@;
put 'MTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzXHViMTg0XHViMTg1XHViMTg2XHViMTg3XHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2'@;
put 'XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNF1bbV1dPTM0MzA0K20sRlszNDMwNCttXT14WzEzNF1bbV0pO2Zvcih4WzEzNV09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjE5ZVx1YjE5Zlx1YjFhMFx1YjFhMVx1YjFhMlx1YjFhM1x1YjFhNFx1YjFhNVx1YjFhNlx1YjFhN1x1YjFhOVx1YjFhYVx1YjFhYlx1YjFhY1x1YjFhZFx1YjFhZVx1YjFhZlx1YjFi'@;
put 'MFx1YjFiMVx1YjFiMlx1YjFiM1x1YjFiNFx1YjFiNVx1YjFiNlx1YjFiN1x1YjFiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFiOVx1YjFiYVx1YjFiYlx1YjFiY1x1YjFiZFx1YjFiZVx1YjFiZlx1YjFjMFx1YjFjMVx1YjFjMlx1YjFjM1x1YjFjNFx1YjFjNVx1'@;
put 'YjFjNlx1YjFjN1x1YjFjOFx1YjFjOVx1YjFjYVx1YjFjYlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFkNlx1YjFkN1x1YjFkOFx1YjFkOVx1YjFkYVx1YjFkYlx1YjFkZVx1YjFlMFx1YjFl'@;
put 'MVx1YjFlMlx1YjFlM1x1YjFlNFx1YjFlNVx1YjFlNlx1YjFlN1x1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMVx1YjFmMlx1YjFmM1x1YjFmNFx1YjFmNVx1YjFmNlx1YjFmN1x1YjFmOFx1YjFmYVx1YjFmY1x1YjFmZVx1YjFmZlx1YjIwMFx1YjIwMVx1YjIwMlx1YjIwM1x1'@;
put 'YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZFx1YjIwZVx1YjIwZlx1YjIxMFx1YjIxMVx1YjIxMlx1YjIxM1x1YjIxNlx1YjIxOFx1YjIxYVx1YjIxYlx1YjIxY1x1YjIxZFx1YjIxZVx1YjIxZlx1YjIyMVx1YjIyMlx1YjIyM1x1YjIyNFx1YjIyNVx1YjIyNlx1YjIyN1x1YjIyOFx1YjIy'@;
put 'OVx1YjIyYVx1YjIyYlx1YjIyY1x1YjIyZFx1YjIyZVx1YjIyZlx1YjIzMFx1YjIzMVx1YjIzMlx1YjIzM1x1YjIzNVx1YjIzNlx1YjIzN1x1YjIzOFx1YjIzOVx1YjIzYVx1YjIzYlx1YjIzZFx1YjIzZVx1YjIzZlx1YjI0MFx1YjI0MVx1YjI0Mlx1YjI0M1x1YjI0NFx1YjI0NVx1YjI0Nlx1'@;
put 'YjI0N1x1YjI0OFx1YjI0OVx1YjI0YVx1YjI0Ylx1YjI0Y1x1YjI0ZFx1YjI0ZVx1YjI0Zlx1YjI1MFx1YjI1MVx1YjI1Mlx1YjI1M1x1YjI1NFx1YjI1NVx1YjI1Nlx1YjI1N1x1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MVx1YjI2Mlx1YjI2M1x1YjI2NFx1YjI2'@;
put 'NVx1YjI2Nlx1YjI2N1x1YjI2YVx1YjI2Ylx1YjI2Y1x1YjI2ZFx1YjI2ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzVdW21dXT0zNDU2MCttLEZbMzQ1NjArbV09eFsxMzVdW21dKTtm'@;
put 'b3IoeFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIy'@;
put 'ODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZc'@;
put 'dWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIy'@;
put 'YmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNc'@;
put 'dWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIz'@;
put 'MWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZc'@;
put 'dWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIz'@;
put 'NTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM2XVttXV09MzQ4MTYrbSxGWzM0ODE2K21d'@;
put 'PXhbMTM2XVttXSk7Zm9yKHhbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5XHViMzdhXHVi'@;
put 'MzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhiXHViMzhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1XHViMzk2XHViMzk3XHViMzk4'@;
put 'XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHViM2E2XHViM2E3XHViM2E5XHViM2FhXHViM2FiXHViM2FkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViM2FlXHViM2FmXHViM2IwXHViM2IxXHVi'@;
put 'M2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2JkXHViM2JlXHViM2JmXHViM2MwXHViM2MxXHViM2MyXHViM2MzXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2'@;
put 'XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5XHViM2VhXHViM2ViXHViM2VjXHViM2VkXHViM2VlXHViM2VmXHViM2YwXHViM2YxXHViM2YyXHViM2YzXHViM2Y0XHViM2Y1XHViM2Y2XHViM2Y3XHViM2Y4XHVi'@;
put 'M2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1XHViNDA2XHViNDA3XHViNDA4XHViNDA5XHViNDBhXHViNDBiXHViNDBjXHViNDBkXHViNDBlXHViNDBmXHViNDExXHViNDEyXHViNDEzXHViNDE0XHViNDE1XHViNDE2'@;
put 'XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHViNDI1XHViNDI2XHViNDI3XHViNDJhXHViNDJjXHViNDJkXHViNDJlXHViNDJmXHViNDMwXHViNDMxXHViNDMyXHViNDMzXHViNDM1XHViNDM2XHViNDM3XHViNDM4XHVi'@;
put 'NDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzN11bbV1dPTM1MDcy'@;
put 'K20sRlszNTA3MittXT14WzEzN11bbV0pO2Zvcih4WzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ0NVx1YjQ0Nlx1YjQ0N1x1YjQ0OFx1YjQ0OVx1YjQ0YVx1YjQ0Ylx1YjQ0Y1x1YjQ0ZFx1YjQ0ZVx1YjQ0Zlx1'@;
put 'YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OVx1YjQ1YVx1YjQ1Ylx1YjQ1Y1x1YjQ1ZFx1YjQ1ZVx1YjQ1Zlx1YjQ2Mlx1YjQ2NFx1YjQ2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ2N1x1YjQ2OFx1YjQ2OVx1YjQ2YVx1YjQ2Ylx1YjQ2ZFx1YjQ2'@;
put 'ZVx1YjQ2Zlx1YjQ3MFx1YjQ3MVx1YjQ3Mlx1YjQ3M1x1YjQ3NFx1YjQ3NVx1YjQ3Nlx1YjQ3N1x1YjQ3OFx1YjQ3OVx1YjQ3YVx1YjQ3Ylx1YjQ3Y1x1YjQ3ZFx1YjQ3ZVx1YjQ3Zlx1YjQ4MVx1YjQ4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ4M1x1YjQ4NFx1'@;
put 'YjQ4NVx1YjQ4Nlx1YjQ4N1x1YjQ4OVx1YjQ4YVx1YjQ4Ylx1YjQ4Y1x1YjQ4ZFx1YjQ4ZVx1YjQ4Zlx1YjQ5MFx1YjQ5MVx1YjQ5Mlx1YjQ5M1x1YjQ5NFx1YjQ5NVx1YjQ5Nlx1YjQ5N1x1YjQ5OFx1YjQ5OVx1YjQ5YVx1YjQ5Ylx1YjQ5Y1x1YjQ5ZVx1YjQ5Zlx1YjRhMFx1YjRhMVx1YjRh'@;
put 'Mlx1YjRhM1x1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZFx1YjRhZVx1YjRhZlx1YjRiMFx1YjRiMVx1YjRiMlx1YjRiM1x1YjRiNFx1YjRiNlx1YjRiOFx1YjRiYVx1YjRiYlx1YjRiY1x1YjRiZFx1YjRiZVx1YjRiZlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1'@;
put 'YjRjNlx1YjRjN1x1YjRjOVx1YjRjYVx1YjRjYlx1YjRjY1x1YjRjZFx1YjRjZVx1YjRjZlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNlx1YjRkN1x1YjRkOFx1YjRkOVx1YjRkYVx1YjRkYlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlN1x1YjRlOFx1YjRlOVx1YjRl'@;
put 'YVx1YjRlYlx1YjRlZVx1YjRmMFx1YjRmMlx1YjRmM1x1YjRmNFx1YjRmNVx1YjRmNlx1YjRmN1x1YjRmOVx1YjRmYVx1YjRmYlx1YjRmY1x1YjRmZFx1YjRmZVx1YjRmZlx1YjUwMFx1YjUwMVx1YjUwMlx1YjUwM1x1YjUwNFx1YjUwNVx1YjUwNlx1YjUwN1x1YjUwOFx1YjUwOVx1YjUwYVx1'@;
put 'YjUwYlx1YjUwY1x1YjUwZFx1YjUwZVx1YjUwZlx1YjUxMFx1YjUxMVx1YjUxMlx1YjUxM1x1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'MzhdW21dXT0zNTMyOCttLEZbMzUzMjgrbV09eFsxMzhdW21dKTtmb3IoeFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNc'@;
put 'dWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1'@;
put 'NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1'@;
put 'ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNc'@;
put 'dWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1'@;
put 'ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZc'@;
put 'dWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTM5XVttXV09MzU1ODQrbSxGWzM1NTg0K21dPXhbMTM5XVttXSk7Zm9yKHhbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjAwXHViNjAxXHViNjAyXHViNjAzXHViNjA0XHViNjA1XHViNjA2'@;
put 'XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5XHViNjFhXHViNjFiXHViNjFjXHViNjFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjFlXHViNjFmXHVi'@;
put 'NjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHViNjJlXHViNjJmXHViNjMwXHViNjMxXHViNjMyXHViNjMzXHViNjM1XHViNjM2XHViNjM3XHViNjM4XHViNjM5XHViNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0XHViNjQ1XHViNjQ2XHViNjQ3XHViNjQ5XHViNjRhXHViNjRiXHViNjRjXHViNjRkXHViNjRlXHViNjRmXHViNjUwXHViNjUxXHViNjUyXHViNjUzXHViNjU0XHVi'@;
put 'NjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHViNjYxXHViNjYyXHViNjYzXHViNjY1XHViNjY2XHViNjY3XHViNjY5XHViNjZhXHViNjZiXHViNjZjXHViNjZkXHViNjZlXHViNjZmXHViNjcwXHViNjcxXHViNjcy'@;
put 'XHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdlXHViNjdmXHViNjgwXHViNjgxXHViNjgyXHViNjgzXHViNjg0XHViNjg1XHViNjg2XHViNjg3XHViNjg4XHViNjg5XHViNjhhXHViNjhiXHViNjhjXHViNjhkXHVi'@;
put 'NjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHViNjlhXHViNjliXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1XHViNmE2XHViNmE3XHViNmE4XHViNmE5XHViNmFhXHViNmFkXHViNmFlXHViNmFm'@;
put 'XHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJjXHViNmJkXHViNmJlXHViNmJmXHViNmMwXHViNmMxXHViNmMyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDBd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MF1bbV1dPTM1ODQwK20sRlszNTg0MCttXT14WzE0MF1bbV0pO2Zvcih4WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZjM1x1YjZjNFx1YjZjNVx1YjZjNlx1YjZj'@;
put 'N1x1YjZjOFx1YjZjOVx1YjZjYVx1YjZjYlx1YjZjY1x1YjZjZFx1YjZjZVx1YjZjZlx1YjZkMFx1YjZkMVx1YjZkMlx1YjZkM1x1YjZkNVx1YjZkNlx1YjZkN1x1YjZkOFx1YjZkOVx1YjZkYVx1YjZkYlx1YjZkY1x1YjZkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'YjZkZVx1YjZkZlx1YjZlMFx1YjZlMVx1YjZlMlx1YjZlM1x1YjZlNFx1YjZlNVx1YjZlNlx1YjZlN1x1YjZlOFx1YjZlOVx1YjZlYVx1YjZlYlx1YjZlY1x1YjZlZFx1YjZlZVx1YjZlZlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZmYlx1YjZmY1x1YjZmZFx1YjZmZVx1YjZmZlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNlx1YjcwN1x1YjcwOFx1YjcwOVx1YjcwYVx1YjcwYlx1YjcwY1x1YjcwZFx1YjcwZVx1YjcwZlx1YjcxMFx1YjcxMVx1YjcxMlx1YjcxM1x1YjcxNFx1'@;
put 'YjcxNVx1YjcxNlx1YjcxN1x1YjcxOFx1YjcxOVx1YjcxYVx1YjcxYlx1YjcxY1x1YjcxZFx1YjcxZVx1YjcxZlx1YjcyMFx1YjcyMVx1YjcyMlx1YjcyM1x1YjcyNFx1YjcyNVx1YjcyNlx1YjcyN1x1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMVx1YjczMlx1YjczM1x1YjczNFx1Yjcz'@;
put 'NVx1YjczNlx1YjczN1x1YjczYVx1YjczY1x1YjczZFx1YjczZVx1YjczZlx1Yjc0MFx1Yjc0MVx1Yjc0Mlx1Yjc0M1x1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZFx1Yjc0ZVx1Yjc0Zlx1Yjc1MFx1Yjc1MVx1Yjc1Mlx1Yjc1M1x1Yjc1Nlx1Yjc1N1x1Yjc1OFx1'@;
put 'Yjc1OVx1Yjc1YVx1Yjc1Ylx1Yjc1Y1x1Yjc1ZFx1Yjc1ZVx1Yjc1Zlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OVx1Yjc2YVx1Yjc2Ylx1Yjc2Y1x1Yjc2ZFx1Yjc2ZVx1Yjc2Zlx1Yjc3Mlx1Yjc3NFx1Yjc3Nlx1Yjc3N1x1Yjc3OFx1Yjc3OVx1Yjc3YVx1Yjc3'@;
put 'Ylx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NVx1Yjc4Nlx1Yjc4N1x1Yjc4OFx1Yjc4OVx1Yjc4YVx1Yjc4Ylx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDFdW21dXT0zNjA5NittLEZbMzYwOTYrbV09eFsxNDFdW21dKTtmb3IoeFsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3'@;
put 'YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3'@;
put 'ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZc'@;
put 'dWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4'@;
put 'MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZc'@;
put 'dWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4'@;
put 'NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDJd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQyXVttXV09MzYzNTIrbSxGWzM2MzUyK21dPXhbMTQyXVttXSk7Zm9yKHhbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi'@;
put 'ODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODkyXHViODkzXHViODk0XHViODk1XHViODk2XHViODk3XHViODk4XHViODk5XHViODlhXHViODliXHViODljXHViODlkXHViODllXHViODlmXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHViOGE5XHViOGFhXHViOGFiXHViOGFjXHViOGFkXHViOGFlXHViOGFmXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5XHViOGJhXHVi'@;
put 'OGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2XHViOGM3XHViOGM4XHViOGM5XHViOGNhXHViOGNiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1XHViOGQ2XHViOGQ3'@;
put 'XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHViOGU3XHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxXHViOGYyXHViOGYzXHViOGY0XHViOGY1XHViOGY2XHViOGY3XHViOGZhXHViOGZjXHVi'@;
put 'OGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBiXHViOTBjXHViOTBkXHViOTBlXHViOTBmXHViOTEwXHViOTExXHViOTEyXHViOTEzXHViOTE0XHViOTE1XHViOTE2XHViOTE3XHViOTE5XHViOTFhXHViOTFi'@;
put 'XHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHViOTI5XHViOTJhXHViOTJiXHViOTJjXHViOTJkXHViOTJlXHViOTJmXHViOTMwXHViOTMxXHViOTMyXHViOTMzXHViOTM0XHViOTM1XHViOTM2XHViOTM3XHVi'@;
put 'OTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4XHViOTQ5XHViOTRhXHViOTRiXHViOTRkXHViOTRlXHViOTUwXHViOTUyXHViOTUzXHViOTU0XHViOTU1XHViOTU2XHViOTU3XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0M11bbV1dPTM2NjA4K20sRlszNjYwOCttXT14WzE0M11bbV0pO2Zvcih4WzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MVx1Yjk2Mlx1Yjk2M1x1Yjk2NFx1Yjk2NVx1Yjk2Nlx1Yjk2N1x1Yjk2YVx1Yjk2Y1x1Yjk2ZVx1Yjk2Zlx1Yjk3MFx1Yjk3MVx1Yjk3Mlx1Yjk3M1x1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk3ZVx1Yjk3Zlx1Yjk4MFx1Yjk4MVx1Yjk4Mlx1Yjk4M1x1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4Zlx1Yjk5MFx1Yjk5MVx1Yjk5Mlx1Yjk5M1x1Yjk5NFx1Yjk5NVx1Yjk5Nlx1Yjk5N1x1Yjk5OFx1Yjk5OVx1'@;
put 'Yjk5YVx1Yjk5Ylx1Yjk5Y1x1Yjk5ZFx1Yjk5ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk5Zlx1YjlhMFx1YjlhMVx1YjlhMlx1YjlhM1x1YjlhNFx1YjlhNVx1YjlhNlx1YjlhN1x1YjlhOFx1YjlhOVx1YjlhYVx1YjlhYlx1YjlhZVx1YjlhZlx1YjliMVx1Yjli'@;
put 'Mlx1YjliM1x1YjliNVx1YjliNlx1YjliN1x1YjliOFx1YjliOVx1YjliYVx1YjliYlx1YjliZVx1YjljMFx1YjljMlx1YjljM1x1YjljNFx1YjljNVx1YjljNlx1YjljN1x1YjljYVx1YjljYlx1YjljZFx1YjlkM1x1YjlkNFx1YjlkNVx1YjlkNlx1YjlkN1x1YjlkYVx1YjlkY1x1YjlkZlx1'@;
put 'YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZFx1YjllZVx1YjllZlx1YjlmMFx1YjlmMVx1YjlmMlx1YjlmM1x1YjlmNlx1YjlmYlx1YjlmY1x1YjlmZFx1YjlmZVx1YjlmZlx1YmEwMlx1YmEwM1x1YmEwNFx1YmEwNVx1YmEwNlx1YmEwN1x1YmEwOVx1YmEw'@;
put 'YVx1YmEwYlx1YmEwY1x1YmEwZFx1YmEwZVx1YmEwZlx1YmExMFx1YmExMVx1YmExMlx1YmExM1x1YmExNFx1YmExNlx1YmExN1x1YmExOFx1YmExOVx1YmExYVx1YmExYlx1YmExY1x1YmExZFx1YmExZVx1YmExZlx1YmEyMFx1YmEyMVx1YmEyMlx1YmEyM1x1YmEyNFx1YmEyNVx1YmEyNlx1'@;
put 'YmEyN1x1YmEyOFx1YmEyOVx1YmEyYVx1YmEyYlx1YmEyY1x1YmEyZFx1YmEyZVx1YmEyZlx1YmEzMFx1YmEzMVx1YmEzMlx1YmEzM1x1YmEzNFx1YmEzNVx1YmEzNlx1YmEzN1x1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0Nlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDRdW21dXT0zNjg2NCttLEZbMzY4NjQrbV09eFsxNDRdW21dKTtmb3IoeFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJh'@;
put 'NmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFc'@;
put 'dWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJh'@;
put 'YTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdc'@;
put 'dWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJh'@;
put 'ZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNc'@;
put 'dWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJi'@;
put 'MjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ1XVttXV09MzcxMjArbSxGWzM3MTIwK21dPXhbMTQ1XVttXSk7Zm9yKHhbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMwXHViYjMxXHViYjMyXHViYjMzXHViYjM3XHViYjM5XHViYjNhXHViYjNmXHViYjQwXHViYjQxXHViYjQyXHViYjQzXHViYjQ2XHViYjQ4XHViYjRhXHVi'@;
put 'YjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5XHViYjVhXHViYjViXHViYjVjXHViYjVkXHViYjVlXHViYjVmXHViYjYwXHViYjYyXHViYjY0XHViYjY1XHViYjY2XHViYjY3'@;
put 'XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjcyXHViYjczXHViYjc0XHViYjc1XHViYjc2XHViYjc3XHViYjc4XHViYjc5XHViYjdhXHViYjdiXHViYjdjXHViYjdkXHVi'@;
put 'YjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxXHViYjkyXHViYjkzXHViYjk0XHViYjk1XHViYjk2XHViYjk3XHViYjk4XHViYjk5XHViYjlhXHViYjliXHViYjlj'@;
put 'XHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkXHViYmFlXHViYmFmXHViYmIwXHViYmIxXHViYmIyXHViYmIzXHViYmI1XHViYmI2XHViYmI4XHViYmI5XHViYmJhXHViYmJiXHViYmJjXHVi'@;
put 'YmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHViYmNkXHViYmNlXHViYmNmXHViYmQxXHViYmQyXHViYmQ0XHViYmQ1XHViYmQ2XHViYmQ3XHViYmQ4XHViYmQ5XHViYmRhXHViYmRiXHViYmRjXHViYmRk'@;
put 'XHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVhXHViYmViXHViYmVjXHViYmVkXHViYmVlXHViYmVmXHViYmYwXHViYmYxXHViYmYyXHViYmYzXHViYmY0XHViYmY1XHViYmY2XHViYmY3XHViYmZhXHVi'@;
put 'YmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Nl1bbV1dPTM3Mzc2K20sRlszNzM3NittXT14WzE0Nl1bbV0pO2Zvcih4WzE0N109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMwM1x1YmMwNFx1YmMwNVx1YmMwNlx1YmMwN1x1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1'@;
put 'YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMzNlx1YmMzN1x1YmMzOVx1YmMzYVx1YmMzYlx1YmMzY1x1YmMzZFx1YmMzZVx1YmMzZlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0'@;
put 'Ylx1YmM0ZVx1YmM0Zlx1YmM1MVx1YmM1Mlx1YmM1M1x1YmM1NFx1YmM1NVx1YmM1Nlx1YmM1N1x1YmM1OFx1YmM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZVx1YmM1Zlx1YmM2MFx1YmM2MVx1YmM2Mlx1YmM2M1x1YmM2NFx1'@;
put 'YmM2NVx1YmM2Nlx1YmM2N1x1YmM2OFx1YmM2OVx1YmM2YVx1YmM2Ylx1YmM2Y1x1YmM2ZFx1YmM2ZVx1YmM2Zlx1YmM3MFx1YmM3MVx1YmM3Mlx1YmM3M1x1YmM3NFx1YmM3NVx1YmM3Nlx1YmM3N1x1YmM3OFx1YmM3OVx1YmM3YVx1YmM3Ylx1YmM3Y1x1YmM3ZFx1YmM3ZVx1YmM3Zlx1YmM4'@;
put 'MFx1YmM4MVx1YmM4Mlx1YmM4M1x1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4Zlx1YmM5MFx1YmM5MVx1YmM5Mlx1YmM5M1x1YmM5Nlx1YmM5OFx1YmM5Ylx1YmM5Y1x1YmM5ZFx1YmM5ZVx1YmM5Zlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOVx1YmNhYVx1YmNhYlx1'@;
put 'YmNhY1x1YmNhZFx1YmNhZVx1YmNhZlx1YmNiMlx1YmNiNlx1YmNiN1x1YmNiOFx1YmNiOVx1YmNiYVx1YmNiYlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNVx1YmNjNlx1YmNjN1x1YmNjOFx1YmNjOVx1YmNjYVx1YmNjYlx1YmNjY1x1YmNjZVx1YmNkMlx1YmNkM1x1YmNk'@;
put 'NFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNkYlx1YmNkZFx1YmNkZVx1YmNkZlx1YmNlMFx1YmNlMVx1YmNlMlx1YmNlM1x1YmNlNFx1YmNlNVx1YmNlNlx1YmNlN1x1YmNlOFx1YmNlOVx1YmNlYVx1YmNlYlx1YmNlY1x1YmNlZFx1YmNlZVx1YmNlZlx1YmNmMFx1YmNmMVx1YmNmMlx1'@;
put 'YmNmM1x1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDddW21dXT0zNzYzMittLEZbMzc2MzIrbV09eFsxNDddW21dKTtmb3IoeFsxNDhd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNc'@;
put 'dWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJk'@;
put 'MmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJc'@;
put 'dWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJk'@;
put 'NjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNc'@;
put 'dWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJk'@;
put 'YWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlc'@;
put 'dWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ4XVttXV09Mzc4ODgrbSxGWzM3ODg4K21dPXhbMTQ4XVtt'@;
put 'XSk7Zm9yKHhbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkXHViZGRlXHViZGRmXHViZGUwXHViZGUxXHViZGUyXHViZGUzXHViZGU0'@;
put 'XHViZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5XHViZGZhXHViZGZiXHViZGZjXHViZGZkXHVi'@;
put 'ZGZlXHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZTE1XHViZTE2XHViZTE3XHViZTE4XHViZTE5XHViZTFh'@;
put 'XHViZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHViZTJiXHViZTJjXHViZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMxXHViZTMyXHViZTMzXHViZTM0XHViZTM1XHViZTM2XHViZTM3XHViZTM4XHVi'@;
put 'ZTM5XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRkXHViZTRmXHViZTUwXHViZTUxXHViZTUyXHViZTUzXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVm'@;
put 'XHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHViZTc3XHViZTc4XHViZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1XHViZTg2XHViZTg3XHViZTg4XHViZTg5XHVi'@;
put 'ZThhXHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTllXHViZTlmXHViZWEwXHViZWExXHViZWEyXHViZWEzXHViZWE0XHViZWE1XHViZWE2XHViZWE3XHViZWE5XHViZWFhXHViZWFiXHViZWFjXHViZWFk'@;
put 'XHViZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OV1bbV1dPTM4MTQ0K20sRlszODE0'@;
put 'NCttXT14WzE0OV1bbV0pO2Zvcih4WzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmViOFx1YmViOVx1YmViYVx1YmViYlx1YmViY1x1YmViZFx1YmViZVx1YmViZlx1YmVjMFx1YmVjMVx1YmVjMlx1YmVjM1x1YmVj'@;
put 'NFx1YmVjNVx1YmVjNlx1YmVjN1x1YmVjOFx1YmVjOVx1YmVjYVx1YmVjYlx1YmVjY1x1YmVjZFx1YmVjZVx1YmVjZlx1YmVkMlx1YmVkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVkNVx1YmVkNlx1YmVkOVx1YmVkYVx1YmVkYlx1YmVkY1x1YmVkZFx1YmVkZVx1'@;
put 'YmVkZlx1YmVlMVx1YmVlMlx1YmVlNlx1YmVlN1x1YmVlOFx1YmVlOVx1YmVlYVx1YmVlYlx1YmVlZFx1YmVlZVx1YmVlZlx1YmVmMFx1YmVmMVx1YmVmMlx1YmVmM1x1YmVmNFx1YmVmNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVmNlx1YmVmN1x1YmVmOFx1YmVm'@;
put 'OVx1YmVmYVx1YmVmYlx1YmVmY1x1YmVmZFx1YmVmZVx1YmVmZlx1YmYwMFx1YmYwMlx1YmYwM1x1YmYwNFx1YmYwNVx1YmYwNlx1YmYwN1x1YmYwYVx1YmYwYlx1YmYwY1x1YmYwZFx1YmYwZVx1YmYwZlx1YmYxMFx1YmYxMVx1YmYxMlx1YmYxM1x1YmYxNFx1YmYxNVx1YmYxNlx1YmYxN1x1'@;
put 'YmYxYVx1YmYxZVx1YmYxZlx1YmYyMFx1YmYyMVx1YmYyMlx1YmYyM1x1YmYyNFx1YmYyNVx1YmYyNlx1YmYyN1x1YmYyOFx1YmYyOVx1YmYyYVx1YmYyYlx1YmYyY1x1YmYyZFx1YmYyZVx1YmYyZlx1YmYzMFx1YmYzMVx1YmYzMlx1YmYzM1x1YmYzNFx1YmYzNVx1YmYzNlx1YmYzN1x1YmYz'@;
put 'OFx1YmYzOVx1YmYzYVx1YmYzYlx1YmYzY1x1YmYzZFx1YmYzZVx1YmYzZlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OVx1YmY0YVx1YmY0Ylx1YmY0Y1x1YmY0ZFx1YmY0ZVx1YmY0Zlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1Nlx1YmY1N1x1YmY1OFx1YmY1OVx1YmY1YVx1'@;
put 'YmY1Ylx1YmY1Y1x1YmY1ZFx1YmY1ZVx1YmY1Zlx1YmY2MFx1YmY2MVx1YmY2Mlx1YmY2M1x1YmY2NFx1YmY2NVx1YmY2Nlx1YmY2N1x1YmY2OFx1YmY2OVx1YmY2YVx1YmY2Ylx1YmY2Y1x1YmY2ZFx1YmY2ZVx1YmY2Zlx1YmY3MFx1YmY3MVx1YmY3Mlx1YmY3M1x1YmY3NFx1YmY3NVx1YmY3'@;
put 'Nlx1YmY3N1x1YmY3OFx1YmY3OVx1YmY3YVx1YmY3Ylx1YmY3Y1x1YmY3ZFx1YmY3ZVx1YmY3Zlx1YmY4MFx1YmY4MVx1YmY4Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTBdW21dXT0z'@;
put 'ODQwMCttLEZbMzg0MDArbV09eFsxNTBdW21dKTtmb3IoeFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJm'@;
put 'OGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNc'@;
put 'dWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJm'@;
put 'YmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFc'@;
put 'dWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJm'@;
put 'ZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRc'@;
put 'dWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMw'@;
put 'MzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTUxXVttXV09Mzg2NTYrbSxGWzM4NjU2K21dPXhbMTUxXVttXSk7Zm9yKHhbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVjMDQxXHVjMDQyXHVjMDQzXHVjMDQ0XHVjMDQ1XHVjMDQ2XHVjMDQ3XHVj'@;
put 'MDQ4XHVjMDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVjMDU3XHVjMDU5XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYx'@;
put 'XHVjMDYyXHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcxXHVjMDcyXHVjMDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVjMDc4XHVjMDc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVjMDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVjMDg3XHVjMDg4XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhkXHVjMDhlXHVjMDhmXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3'@;
put 'XHVjMDk5XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFhXHVjMGFiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVjMGI5XHVjMGJhXHVjMGJiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVj'@;
put 'MGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVjMGRhXHVjMGRlXHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUzXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkXHVjMGVl'@;
put 'XHVjMGVmXHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVjMTBhXHVjMTBiXHVjMTBjXHVjMTBkXHVjMTBlXHVjMTBmXHVjMTExXHVj'@;
put 'MTEyXHVjMTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTJdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE1Ml1bbV1dPTM4OTEyK20sRlszODkxMittXT14WzE1Ml1bbV0pO2Zvcih4WzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1'@;
put 'YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MVx1YzE0Mlx1YzE0M1x1YzE0NFx1YzE0NVx1YzE0Nlx1YzE0N1x1YzE0YVx1YzE0ZVx1YzE0Zlx1YzE1MFx1YzE1MVx1YzE1Mlx1YzE1M1x1YzE1Nlx1YzE1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE1OVx1YzE1'@;
put 'YVx1YzE1Ylx1YzE1ZFx1YzE1ZVx1YzE1Zlx1YzE2MFx1YzE2MVx1YzE2Mlx1YzE2M1x1YzE2Nlx1YzE2YVx1YzE2Ylx1YzE2Y1x1YzE2ZFx1YzE2ZVx1YzE2Zlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE3Y1x1YzE3ZFx1YzE3ZVx1YzE3Zlx1YzE4MFx1YzE4MVx1YzE4Mlx1YzE4M1x1YzE4NFx1YzE4Nlx1YzE4N1x1YzE4OFx1YzE4OVx1YzE4YVx1YzE4Ylx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5N1x1YzE5OFx1YzE5OVx1YzE5YVx1YzE5'@;
put 'Ylx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFhZVx1YzFhZlx1YzFiMVx1YzFiMlx1YzFiM1x1YzFiNFx1YzFiNVx1YzFiNlx1YzFiN1x1YzFiOFx1YzFiOVx1YzFiYVx1YzFiYlx1YzFiY1x1YzFiZVx1YzFiZlx1YzFjMFx1'@;
put 'YzFjMVx1YzFjMlx1YzFjM1x1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFjYlx1YzFjZFx1YzFjZVx1YzFjZlx1YzFkMFx1YzFkMVx1YzFkMlx1YzFkM1x1YzFkNVx1YzFkNlx1YzFkOVx1YzFkYVx1YzFkYlx1YzFkY1x1YzFkZFx1YzFkZVx1YzFkZlx1YzFlMVx1YzFlMlx1YzFl'@;
put 'M1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOVx1YzFlYVx1YzFlYlx1YzFlY1x1YzFlZFx1YzFlZVx1YzFlZlx1YzFmMlx1YzFmNFx1YzFmNVx1YzFmNlx1YzFmN1x1YzFmOFx1YzFmOVx1YzFmYVx1YzFmYlx1YzFmZVx1YzFmZlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNVx1YzIwNlx1YzIwN1x1'@;
put 'YzIwOFx1YzIwOVx1YzIwYVx1YzIwYlx1YzIwZVx1YzIxMFx1YzIxMlx1YzIxM1x1YzIxNFx1YzIxNVx1YzIxNlx1YzIxN1x1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MTUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTNdW21dXT0zOTE2OCttLEZbMzkxNjgrbV09eFsxNTNdW21dKTtmb3IoeFsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdc'@;
put 'dWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMy'@;
put 'ODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlc'@;
put 'dWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMy'@;
put 'Y2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVc'@;
put 'dWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTRdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU0XVttXV09Mzk0MjQrbSxGWzM5NDI0K21dPXhbMTU0XVttXSk7Zm9yKHhbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzEwXHVjMzEx'@;
put 'XHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVjMzI3XHVjMzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJmXHVjMzMwXHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNlXHVjMzNmXHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVjMzQ2XHVjMzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVjMzRiXHVjMzRj'@;
put 'XHVjMzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVjMzU1XHVjMzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzViXHVjMzVjXHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYwXHVjMzYxXHVj'@;
put 'MzYyXHVjMzYzXHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1XHVjMzc2XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVjMzgwXHVjMzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVjMzg2XHVjMzg3'@;
put 'XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVjMzk4XHVjMzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzllXHVjMzlmXHVjM2EwXHVjM2ExXHVjM2EyXHVjM2EzXHVjM2E0XHVj'@;
put 'M2E1XHVjM2E2XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2IzXHVjM2I0XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVjM2JhXHVjM2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVjM2JmXHVjM2Mx'@;
put 'XHVjM2MyXHVjM2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVjM2QwXHVjM2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2XHVjM2Q3XHVjM2RhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MTU1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NV1bbV1dPTM5NjgwK20sRlszOTY4MCttXT14WzE1NV1bbV0pO2Zvcih4WzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlM1x1YzNlNFx1YzNlNVx1YzNlNlx1YzNlN1x1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZVx1YzNlZlx1YzNmMFx1YzNmMVx1YzNmMlx1YzNmM1x1YzNmNlx1YzNmN1x1YzNmOVx1YzNmYVx1YzNmYlx1YzNmY1x1YzNmZFx1YzNmZVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNmZlx1YzQwMFx1YzQwMVx1YzQwMlx1YzQwM1x1YzQwNFx1YzQwNVx1YzQwNlx1YzQwN1x1YzQwOVx1YzQwYVx1YzQwYlx1YzQwY1x1YzQwZFx1YzQwZVx1YzQwZlx1YzQxMVx1YzQxMlx1YzQxM1x1YzQxNFx1YzQxNVx1YzQxNlx1YzQx'@;
put 'N1x1YzQxOFx1YzQxOVx1YzQxYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzQxYlx1YzQxY1x1YzQxZFx1YzQxZVx1YzQxZlx1YzQyMFx1YzQyMVx1YzQyMlx1YzQyM1x1YzQyNVx1YzQyNlx1YzQyN1x1YzQyOFx1YzQyOVx1YzQyYVx1YzQyYlx1YzQyZFx1YzQyZVx1'@;
put 'YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNVx1YzQzNlx1YzQzN1x1YzQzOFx1YzQzOVx1YzQzYVx1YzQzYlx1YzQzZVx1YzQzZlx1YzQ0MFx1YzQ0MVx1YzQ0Mlx1YzQ0M1x1YzQ0NFx1YzQ0NVx1YzQ0Nlx1YzQ0N1x1YzQ0OVx1YzQ0YVx1YzQ0Ylx1YzQ0Y1x1YzQ0ZFx1YzQ0ZVx1YzQ0'@;
put 'Zlx1YzQ1MFx1YzQ1MVx1YzQ1Mlx1YzQ1M1x1YzQ1NFx1YzQ1NVx1YzQ1Nlx1YzQ1N1x1YzQ1OFx1YzQ1OVx1YzQ1YVx1YzQ1Ylx1YzQ1Y1x1YzQ1ZFx1YzQ1ZVx1YzQ1Zlx1YzQ2MFx1YzQ2MVx1YzQ2Mlx1YzQ2M1x1YzQ2Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZFx1YzQ2ZVx1'@;
put 'YzQ2Zlx1YzQ3MFx1YzQ3MVx1YzQ3Mlx1YzQ3M1x1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YVx1YzQ3Ylx1YzQ3Y1x1YzQ3ZFx1YzQ3ZVx1YzQ3Zlx1YzQ4MVx1YzQ4Mlx1YzQ4M1x1YzQ4NFx1YzQ4NVx1YzQ4Nlx1YzQ4N1x1YzQ4OFx1YzQ4OVx1YzQ4YVx1YzQ4Ylx1YzQ4Y1x1YzQ4ZFx1YzQ4'@;
put 'ZVx1YzQ4Zlx1YzQ5MFx1YzQ5MVx1YzQ5Mlx1YzQ5M1x1YzQ5NVx1YzQ5Nlx1YzQ5N1x1YzQ5OFx1YzQ5OVx1YzQ5YVx1YzQ5Ylx1YzQ5ZFx1YzQ5ZVx1YzQ5Zlx1YzRhMFx1YzRhMVx1YzRhMlx1YzRhM1x1YzRhNFx1YzRhNVx1YzRhNlx1YzRhN1x1YzRhOFx1YzRhOVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTZdW21dXT0zOTkzNittLEZbMzk5MzYrbV09eFsxNTZdW21dKTtmb3IoeFsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRc'@;
put 'dWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0'@;
put 'ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJc'@;
put 'dWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1'@;
put 'MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1Mzdc'@;
put 'dWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1'@;
put 'NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU3XVttXV09NDAxOTIrbSxGWzQwMTkyK21dPXhbMTU3XVttXSk7Zm9yKHhbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVjNWE0XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFiXHVjNWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIwXHVjNWIx'@;
put 'XHVjNWIyXHVjNWIzXHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMyXHVjNWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVjNWRiXHVj'@;
put 'NWRjXHVjNWRkXHVjNWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAy'@;
put 'XHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3XHVjNjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVjNjIyXHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVj'@;
put 'NjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRlXHVjNjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4XHVjNjU5'@;
put 'XHVjNjVhXHVjNjViXHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVjNjc1XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVjNjdkXHVj'@;
put 'NjdlXHVjNjdmXHVjNjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVjNjkyXHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmExXHVjNmEy'@;
put 'XHVjNmEzXHVjNmE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OF1bbV1dPTQwNDQ4K20sRls0MDQ0OCttXT14WzE1OF1bbV0pO2Zvcih4WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZhOFx1YzZhYVx1YzZhYlx1YzZhY1x1YzZhZFx1YzZhZVx1YzZhZlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYlx1YzZiY1x1YzZiZFx1YzZiZVx1YzZiZlx1YzZjMlx1YzZjNFx1YzZjNlx1YzZj'@;
put 'N1x1YzZjOFx1YzZjOVx1YzZjYVx1YzZjYlx1YzZjZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNVx1YzZkNlx1YzZkN1x1YzZkOFx1YzZkOVx1YzZkYVx1YzZkYlx1YzZkZVx1YzZkZlx1YzZlMlx1YzZlM1x1YzZlNFx1'@;
put 'YzZlNVx1YzZlNlx1YzZlN1x1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZmM1x1YzZmNFx1YzZmNVx1YzZmNlx1YzZmN1x1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZVx1YzZmZlx1YzcwMFx1Yzcw'@;
put 'MVx1YzcwMlx1YzcwM1x1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZFx1YzcwZVx1YzcwZlx1YzcxMFx1YzcxMVx1YzcxMlx1YzcxM1x1YzcxNlx1YzcxOFx1YzcxYVx1YzcxYlx1YzcxY1x1YzcxZFx1YzcxZVx1YzcxZlx1YzcyMlx1YzcyM1x1YzcyNVx1YzcyNlx1YzcyN1x1'@;
put 'YzcyOVx1YzcyYVx1YzcyYlx1YzcyY1x1YzcyZFx1YzcyZVx1YzcyZlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NVx1Yzc0Nlx1Yzc0N1x1Yzc0OFx1Yzc0OVx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1'@;
put 'OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MVx1Yzc2Mlx1Yzc2M1x1Yzc2NFx1Yzc2NVx1Yzc2Nlx1Yzc2N1x1Yzc2OVx1Yzc2YVx1Yzc2Y1x1Yzc2ZFx1Yzc2ZVx1Yzc2Zlx1Yzc3MFx1Yzc3MVx1Yzc3Mlx1Yzc3M1x1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1'@;
put 'Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5Ylx1Yzc5Y1x1Yzc5ZFx1Yzc5ZVx1Yzc5Zlx1YzdhMlx1YzdhN1x1YzdhOFx1YzdhOVx1YzdhYVx1YzdhYlx1YzdhZVx1YzdhZlx1YzdiMVx1Yzdi'@;
put 'Mlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTldW21dXT00MDcwNCttLEZbNDA3MDQrbV09eFsxNTldW21dKTtmb3IoeFsxNjBdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3'@;
put 'ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVc'@;
put 'dWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4'@;
put 'MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBc'@;
put 'dWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4'@;
put 'NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJc'@;
put 'dWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4'@;
put 'OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYwXVttXV09NDA5NjArbSxGWzQwOTYwK21dPXhbMTYwXVttXSk7Zm9yKHhb'@;
put 'MTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVjOGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIwXHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1XHVj'@;
put 'OGI2XHVjOGI3XHVjOGI4XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVjOGQw'@;
put 'XHVjOGQxXHVjOGQyXHVjOGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVjXHVj'@;
put 'OGVkXHVjOGVlXHVjOGVmXHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZmXHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVjOTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAy'@;
put 'XHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUy'@;
put 'MjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1'@;
put 'Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJc'@;
put 'dTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYxXVttXV09NDEyMTYrbSxGWzQxMjE2K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYy'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTEwXHVjOTEyXHVjOTEzXHVjOTE0XHVjOTE1XHVjOTE2XHVjOTE3XHVjOTE5XHVjOTFhXHVjOTFiXHVjOTFjXHVjOTFkXHVjOTFlXHVjOTFmXHVjOTIwXHVjOTIxXHVjOTIy'@;
put 'XHVjOTIzXHVjOTI0XHVjOTI1XHVjOTI2XHVjOTI3XHVjOTI4XHVjOTI5XHVjOTJhXHVjOTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTJkXHVjOTJlXHVjOTJmXHVjOTMwXHVjOTMxXHVjOTMyXHVjOTMzXHVjOTM1XHVjOTM2XHVjOTM3XHVjOTM4XHVjOTM5XHVj'@;
put 'OTNhXHVjOTNiXHVjOTNjXHVjOTNkXHVjOTNlXHVjOTNmXHVjOTQwXHVjOTQxXHVjOTQyXHVjOTQzXHVjOTQ0XHVjOTQ1XHVjOTQ2XHVjOTQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTQ4XHVjOTQ5XHVjOTRhXHVjOTRiXHVjOTRjXHVjOTRkXHVjOTRlXHVjOTRm'@;
put 'XHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5XHVjOTVhXHVjOTViXHVjOTVjXHVjOTVkXHVjOTVlXHVjOTVmXHVjOTYyXHVjOTY0XHVjOTY1XHVjOTY2XHVjOTY3XHVjOTY4XHVjOTY5XHVjOTZhXHVjOTZiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUy'@;
put 'MjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIy'@;
put 'OTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUy'@;
put 'NjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNc'@;
put 'dWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5'@;
put 'YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZc'@;
put 'dWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZm'@;
put 'MDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZc'@;
put 'dWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZm'@;
put 'M2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZc'@;
put 'dWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVtt'@;
put 'XSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1'@;
put 'XHVjOWY2XHVjOWY3XHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlXHVjYTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVj'@;
put 'YTE1XHVjYTE2XHVjYTE3XHVjYTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJj'@;
put 'XHVjYTJkXHVjYTJlXHVjYTJmXHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVjYTNjXHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQyXHVjYTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUz'@;
put 'MTMyXHUzMTMzXHUzMTM0XHUzMTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQxXHUzMTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUzMTQ4XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRk'@;
put 'XHUzMTRlXHUzMTRmXHUzMTUwXHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUzMTVkXHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYzXHUzMTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUz'@;
put 'MTY5XHUzMTZhXHUzMTZiXHUzMTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4XHUzMTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUzMTdmXHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0'@;
put 'XHUzMTg1XHUzMTg2XHUzMTg3XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4'@;
put 'NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E0N1x1Y2E0OFx1Y2E0OVx1Y2E0YVx1Y2E0Ylx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NVx1Y2E1Nlx1Y2E1'@;
put 'N1x1Y2E1OFx1Y2E1OVx1Y2E1YVx1Y2E1Ylx1Y2E1ZVx1Y2E2Mlx1Y2E2M1x1Y2E2NFx1Y2E2NVx1Y2E2Nlx1Y2E2N1x1Y2E2OVx1Y2E2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E2Ylx1Y2E2Y1x1Y2E2ZFx1Y2E2ZVx1Y2E2Zlx1Y2E3MFx1Y2E3MVx1Y2E3Mlx1'@;
put 'Y2E3M1x1Y2E3NFx1Y2E3NVx1Y2E3Nlx1Y2E3N1x1Y2E3OFx1Y2E3OVx1Y2E3YVx1Y2E3Ylx1Y2E3Y1x1Y2E3ZVx1Y2E3Zlx1Y2E4MFx1Y2E4MVx1Y2E4Mlx1Y2E4M1x1Y2E4NVx1Y2E4Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E4N1x1Y2E4OFx1Y2E4OVx1Y2E4'@;
put 'YVx1Y2E4Ylx1Y2E4Y1x1Y2E4ZFx1Y2E4ZVx1Y2E4Zlx1Y2E5MFx1Y2E5MVx1Y2E5Mlx1Y2E5M1x1Y2E5NFx1Y2E5NVx1Y2E5Nlx1Y2E5N1x1Y2E5OVx1Y2E5YVx1Y2E5Ylx1Y2E5Y1x1Y2E5ZFx1Y2E5ZVx1Y2E5Zlx1Y2FhMFx1Y2FhMVx1Y2FhMlx1Y2FhM1x1Y2FhNFx1Y2FhNVx1Y2FhNlx1'@;
put 'Y2FhN1x1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1'@;
put 'MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNj'@;
put 'M1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00'@;
put 'MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3IoeFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNh'@;
put 'YjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2Jc'@;
put 'dWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNh'@;
put 'ZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZc'@;
put 'dWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1'@;
put 'MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJc'@;
put 'dTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhbMTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBkXHVjYjBlXHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVj'@;
put 'YjE1XHVjYjE2XHVjYjE3XHVjYjE5XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3XHVjYjI4XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJk'@;
put 'XHVjYjJlXHVjYjJmXHVjYjMwXHVjYjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVjYjNkXHVjYjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3XHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVjYjYxXHVjYjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3'@;
put 'XHVjYjY4XHVjYjY5XHVjYjZhXHVjYjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5XHUzMzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlmXHUzM2EwXHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUz'@;
put 'MzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3XHUzM2I4XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUzMzg0XHUzM2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2Jl'@;
put 'XHUzM2JmXHUzMzkwXHUzMzkxXHUzMzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUz'@;
put 'M2RjXHUzM2M2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20sRls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I2ZFx1Y2I2ZVx1Y2I2Zlx1Y2I3MFx1Y2I3MVx1Y2I3Mlx1'@;
put 'Y2I3M1x1Y2I3NFx1Y2I3NVx1Y2I3Nlx1Y2I3N1x1Y2I3YVx1Y2I3Ylx1Y2I3Y1x1Y2I3ZFx1Y2I3ZVx1Y2I3Zlx1Y2I4MFx1Y2I4MVx1Y2I4Mlx1Y2I4M1x1Y2I4NFx1Y2I4NVx1Y2I4Nlx1Y2I4N1x1Y2I4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I4OVx1Y2I4'@;
put 'YVx1Y2I4Ylx1Y2I4Y1x1Y2I4ZFx1Y2I4ZVx1Y2I4Zlx1Y2I5MFx1Y2I5MVx1Y2I5Mlx1Y2I5M1x1Y2I5NFx1Y2I5NVx1Y2I5Nlx1Y2I5N1x1Y2I5OFx1Y2I5OVx1Y2I5YVx1Y2I5Ylx1Y2I5ZFx1Y2I5ZVx1Y2I5Zlx1Y2JhMFx1Y2JhMVx1Y2JhMlx1Y2JhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JhNFx1Y2JhNVx1Y2JhNlx1Y2JhN1x1Y2JhOFx1Y2JhOVx1Y2JhYVx1Y2JhYlx1Y2JhY1x1Y2JhZFx1Y2JhZVx1Y2JhZlx1Y2JiMFx1Y2JiMVx1Y2JiMlx1Y2JiM1x1Y2JiNFx1Y2JiNVx1Y2JiNlx1Y2JiN1x1Y2JiOVx1Y2JiYVx1Y2JiYlx1Y2JiY1x1Y2Ji'@;
put 'ZFx1Y2JiZVx1Y2JiZlx1Y2JjMFx1Y2JjMVx1Y2JjMlx1Y2JjM1x1Y2JjNFx4YzZceGQwXHhhYVx1MDEyNlx1ZmZmZFx1MDEzMlx1ZmZmZFx1MDEzZlx1MDE0MVx4ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YVx1ZmZmZFx1MzI2MFx1MzI2MVx1MzI2Mlx1MzI2M1x1MzI2NFx1MzI2NVx1'@;
put 'MzI2Nlx1MzI2N1x1MzI2OFx1MzI2OVx1MzI2YVx1MzI2Ylx1MzI2Y1x1MzI2ZFx1MzI2ZVx1MzI2Zlx1MzI3MFx1MzI3MVx1MzI3Mlx1MzI3M1x1MzI3NFx1MzI3NVx1MzI3Nlx1MzI3N1x1MzI3OFx1MzI3OVx1MzI3YVx1MzI3Ylx1MjRkMFx1MjRkMVx1MjRkMlx1MjRkM1x1MjRkNFx1MjRk'@;
put 'NVx1MjRkNlx1MjRkN1x1MjRkOFx1MjRkOVx1MjRkYVx1MjRkYlx1MjRkY1x1MjRkZFx1MjRkZVx1MjRkZlx1MjRlMFx1MjRlMVx1MjRlMlx1MjRlM1x1MjRlNFx1MjRlNVx1MjRlNlx1MjRlN1x1MjRlOFx1MjRlOVx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1'@;
put 'MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMwMDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2Jc'@;
put 'dWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNi'@;
put 'ZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNj'@;
put 'MWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIw'@;
put 'Nlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1'@;
put 'MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3'@;
put 'Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNj'@;
put 'MzJcdWNjMzNcdWNjMzRcdWNjMzVcdWNjMzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFc'@;
put 'dWNjNTJcdWNjNTNcdWNjNTZcdWNjNWFcdWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNjNmFcdWNjNmJcdWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFcdWNjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWNjNzNcdWNjNzRcdWNjNzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFcdWNjODJcdWNjODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNjODhcdWNjODlcdWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRc'@;
put 'dWNjOGVcdWNjOGZcdWNjOTBcdWNjOTFcdWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMw'@;
put 'NTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFc'@;
put 'dTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMw'@;
put 'OGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTcwXVttXV09NDM1MjArbSxGWzQzNTIwK21dPXhbMTcwXVttXSk7Zm9yKHhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVj'@;
put 'YzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExXHVjY2EyXHVjY2EzXHVjY2E0XHVjY2E1XHVjY2E2XHVjY2E3XHVjY2FhXHVjY2FlXHVjY2FmXHVjY2IwXHVjY2IxXHVjY2IyXHVjY2IzXHVjY2I2XHVjY2I3XHVjY2I5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2Jh'@;
put 'XHVjY2JiXHVjY2JkXHVjY2JlXHVjY2JmXHVjY2MwXHVjY2MxXHVjY2MyXHVjY2MzXHVjY2M2XHVjY2M4XHVjY2NhXHVjY2NiXHVjY2NjXHVjY2NkXHVjY2NlXHVjY2NmXHVjY2QxXHVjY2QyXHVjY2QzXHVjY2Q1XHVjY2Q2XHVjY2Q3XHVjY2Q4XHVjY2Q5XHVjY2RhXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2RiXHVjY2RjXHVjY2RkXHVjY2RlXHVjY2RmXHVjY2UwXHVjY2UxXHVjY2UyXHVjY2UzXHVjY2U1XHVjY2U2XHVjY2U3XHVjY2U4XHVjY2U5XHVjY2VhXHVjY2ViXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxXHVjY2YyXHVjY2YzXHVjY2Y0XHVjY2Y1'@;
put 'XHVjY2Y2XHVjY2Y3XHVjY2Y4XHVjY2Y5XHVjY2ZhXHVjY2ZiXHVjY2ZjXHVjY2ZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUz'@;
put 'MGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNm'@;
put 'XHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUz'@;
put 'MGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MV1bbV1dPTQzNzc2K20sRls0Mzc3NittXT14WzE3MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1'@;
put 'Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1'@;
put 'NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1'@;
put 'MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1'@;
put 'MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzJdW21dXT00NDAzMittLEZbNDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkNjFc'@;
put 'dWNkNjJcdWNkNjNcdWNkNjVcdWNkNjZcdWNkNjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNkNzZcdWNkNzdcdWNkNzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2RcdWNkN2VcdWNkN2ZcdWNkODBcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkODFcdWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRcdWNkOGVcdWNkOGZcdWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRc'@;
put 'dWNkOWVcdWNkOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNkYWJcdWNkYWNcdWNkYWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJcdWNkYjNcdWNkYjRcdWNkYjVcdWNkYjZcdWNkYjdcdWNk'@;
put 'YjhcdWNkYjlcdWNkYmFcdWNkYmJcdWNkYmNcdWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTczXVttXV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTczXVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVjZGM2XHVjZGM3XHVjZGM4XHVjZGM5XHVjZGNhXHVjZGNiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxXHVjZGQyXHVjZGQzXHVjZGQ0XHVjZGQ1XHVjZGQ2XHVjZGQ3XHVjZGQ4XHVjZGQ5XHVjZGRhXHVjZGRiXHVjZGRjXHVjZGRkXHVjZGRlXHVjZGRmXHVjZGUwXHVjZGUxXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGUyXHVjZGUzXHVjZGU0XHVjZGU1XHVjZGU2XHVjZGU3XHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxXHVjZGYyXHVjZGYzXHVjZGY0XHVjZGY1XHVjZGY2XHVjZGY3XHVjZGZhXHVjZGZjXHVjZGZl'@;
put 'XHVjZGZmXHVjZTAwXHVjZTAxXHVjZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkXHVjZTBlXHVjZTBmXHVjZTEwXHVjZTExXHVjZTEyXHVjZTEzXHVjZTE1XHVjZTE2XHVjZTE3XHVj'@;
put 'ZTE4XHVjZTFhXHVjZTFiXHVjZTFjXHVjZTFkXHVjZTFlXHVjZTFmXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1'@;
put 'Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2'@;
put 'M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1'@;
put 'Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21dXT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThcdWNlYTlcdWNlYWFcdWNlYWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNlYjFcdWNlYjJcdWNlYjNcdWNlYjRcdWNlYjVcdWNlYjZc'@;
put 'dWNlYjdcdWNlYjhcdWNlYjlcdWNlYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNlYzBcdWNlYzJcdWNlYzNcdWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdcdWNlYzhcdWNlYzlcdWNlY2FcdWNlY2JcdWNlY2NcdWNl'@;
put 'Y2RcdWNlY2VcdWNlY2ZcdWNlZDBcdWNlZDFcdWNlZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZcdWNlZDdcdWNlZDhcdWNlZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNlZGRcdWNlZGVcdWNlZGZcdWNlZTBcdWNlZTFcdWNlZTJc'@;
put 'dWNlZTNcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNlZmNcdWNlZmRcdWNlZmVcdWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTBcdWFj'@;
put 'MTFcdWFjMTJcdWFjMTNcdWFjMTRcdWFjMTVcdWFjMTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNc'@;
put 'dWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFj'@;
put 'YWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRc'@;
put 'dWFkMDBcdWFkMDRcdWFkMDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5XHVjZjBhXHVjZjBiXHVjZjBjXHVjZjBkXHVjZjBlXHVjZjBmXHVjZjEyXHVjZjE0XHVjZjE2XHVjZjE3XHVjZjE4XHVjZjE5XHVjZjFhXHVjZjFi'@;
put 'XHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjI1XHVjZjI2XHVjZjI3XHVjZjI4XHVjZjI5XHVjZjJhXHVjZjJiXHVjZjJlXHVjZjMyXHVjZjMzXHVjZjM0XHVjZjM1XHVjZjM2XHVjZjM3XHVjZjM5XHVj'@;
put 'ZjNhXHVjZjNiXHVjZjNjXHVjZjNkXHVjZjNlXHVjZjNmXHVjZjQwXHVjZjQxXHVjZjQyXHVjZjQzXHVjZjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjQ1XHVjZjQ2XHVjZjQ3XHVjZjQ4XHVjZjQ5XHVjZjRhXHVjZjRiXHVjZjRjXHVjZjRkXHVjZjRlXHVjZjRm'@;
put 'XHVjZjUwXHVjZjUxXHVjZjUyXHVjZjUzXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkXHVjZjVlXHVjZjVmXHVjZjYwXHVjZjYxXHVjZjYyXHVjZjYzXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVh'@;
put 'ZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdm'@;
put 'XHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVh'@;
put 'ZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1'@;
put 'XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4'@;
put 'M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1'@;
put 'Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2Zi'@;
put 'M1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1'@;
put 'YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYy'@;
put 'ZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1'@;
put 'YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0'@;
put 'YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtm'@;
put 'b3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNmY2ZcdWNmZDBcdWNmZDFcdWNmZDJcdWNmZDNcdWNmZDRcdWNmZDVcdWNmZDZcdWNmZDdcdWNmZDhcdWNmZDlcdWNmZGFcdWNm'@;
put 'ZGJcdWNmZGNcdWNmZGRcdWNmZGVcdWNmZGZcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmZWFcdWNmZWJcdWNmZWNcdWNmZWRcdWNmZWVcdWNmZWZcdWNmZjJcdWNmZjRcdWNmZjZcdWNmZjdcdWNmZjhc'@;
put 'dWNmZjlcdWNmZmFcdWNmZmJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMGJcdWQwMGNcdWQwMGRcdWQwMGVcdWQwMGZcdWQwMTBcdWQw'@;
put 'MTJcdWQwMTNcdWQwMTRcdWQwMTVcdWQwMTZcdWQwMTdcdWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJcdWQwMjNcdWQwMjRcdWQwMjVcdWQwMjZcdWQwMjdcdWQwMjhcdWQwMjlcdWQwMmFcdWQwMmJcdWQwMmNcdWIwNWRcdWIwN2Nc'@;
put 'dWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWJcdWIwYWNcdWIwYWRcdWIwYWVcdWIwYWZcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIw'@;
put 'YmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhc'@;
put 'dWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIx'@;
put 'OTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21d'@;
put 'PXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDJlXHVkMDJmXHVkMDMwXHVkMDMxXHVkMDMyXHVkMDMzXHVkMDM2XHVkMDM3XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNkXHVkMDNlXHVk'@;
put 'MDNmXHVkMDQwXHVkMDQxXHVkMDQyXHVkMDQzXHVkMDQ2XHVkMDQ4XHVkMDRhXHVkMDRiXHVkMDRjXHVkMDRkXHVkMDRlXHVkMDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5XHVkMDVhXHVkMDVi'@;
put 'XHVkMDVjXHVkMDVkXHVkMDVlXHVkMDVmXHVkMDYxXHVkMDYyXHVkMDYzXHVkMDY0XHVkMDY1XHVkMDY2XHVkMDY3XHVkMDY4XHVkMDY5XHVkMDZhXHVkMDZiXHVkMDZlXHVkMDZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1XHVk'@;
put 'MDc2XHVkMDc3XHVkMDc4XHVkMDc5XHVkMDdhXHVkMDdiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyXHVkMDgzXHVkMDg0XHVkMDg1XHVkMDg2XHVkMDg3XHVkMDg4XHVkMDg5XHVkMDhhXHVkMDhiXHVkMDhjXHVkMDhkXHVkMDhlXHVkMDhmXHVkMDkwXHVkMDkxXHVkMDkyXHVkMDkzXHVkMDk0'@;
put 'XHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBiXHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHVi'@;
put 'MjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHViMmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRk'@;
put 'XHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViXHViMmVjXHViMmVkXHViMmVlXHViMmVmXHViMmYzXHViMmY0XHViMmY1XHViMmY3XHViMmY4XHViMmY5XHViMmZhXHViMmZiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHVi'@;
put 'MzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgw'@;
put 'K20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1'@;
put 'ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBi'@;
put 'ZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1'@;
put 'ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEw'@;
put 'Mlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1'@;
put 'YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2'@;
put 'NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1'@;
put 'YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'ODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsxODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMDVcdWQxMDZcdWQxMDdcdWQxMDhcdWQxMDlcdWQxMGFcdWQxMGJcdWQxMGNcdWQxMGVc'@;
put 'dWQxMGZcdWQxMTBcdWQxMTFcdWQxMTJcdWQxMTNcdWQxMTRcdWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQxMWVcdWQxMWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMjBcdWQxMjFcdWQxMjJcdWQxMjNcdWQx'@;
put 'MjRcdWQxMjVcdWQxMjZcdWQxMjdcdWQxMjhcdWQxMjlcdWQxMmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWQxM2ZcdWQxNDJcdWQxNDZcdWQxNDdcdWQxNDhcdWQxNDlcdWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQxNTdcdWQxNThcdWQxNTlcdWQxNWFcdWQxNWJcdWQxNWVcdWQxNjBcdWQxNjJcdWQxNjNcdWQxNjRcdWQxNjVcdWQxNjZcdWQx'@;
put 'NjdcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFc'@;
put 'dWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2'@;
put 'YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3Njhc'@;
put 'dWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTZlXHVkMTZmXHVkMTcwXHVkMTcxXHVkMTcyXHVkMTczXHVkMTc0'@;
put 'XHVkMTc1XHVkMTc2XHVkMTc3XHVkMTc4XHVkMTc5XHVkMTdhXHVkMTdiXHVkMTdkXHVkMTdlXHVkMTdmXHVkMTgwXHVkMTgxXHVkMTgyXHVkMTgzXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMThiXHVkMThjXHVk'@;
put 'MThkXHVkMThlXHVkMThmXHVkMTkwXHVkMTkxXHVkMTkyXHVkMTkzXHVkMTk0XHVkMTk1XHVkMTk2XHVkMTk3XHVkMTk4XHVkMTk5XHVkMTlhXHVkMTliXHVkMTljXHVkMTlkXHVkMTllXHVkMTlmXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVkMWE5XHVkMWFhXHVkMWFiXHVkMWFjXHVkMWFkXHVkMWFlXHVkMWFmXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxXHVkMWMyXHVkMWMzXHVkMWM0XHVkMWM1XHVkMWM2XHVkMWM3XHVkMWM4XHVk'@;
put 'MWM5XHVkMWNhXHVkMWNiXHVkMWNjXHVkMWNkXHVkMWNlXHVkMWNmXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2Zm'@;
put 'XHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHVi'@;
put 'ODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5'@;
put 'XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFk'@;
put 'NFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1'@;
put 'ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1Yjli'@;
put 'ZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1'@;
put 'YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3'@;
put 'OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFcdWQyMmJcdWQy'@;
put 'MmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzVcdWQyMzZcdWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNcdWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWQyNGRcdWQyNGVcdWQyNGZcdWQyNTBcdWQyNTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQyNWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQyNWZcdWQyNjBcdWQyNjFcdWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZcdWQyNjdcdWQy'@;
put 'NjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFcdWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVcdWQyNzZcdWQyNzdcdWQyNzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQyN2NcdWQyN2Rc'@;
put 'dWQyN2VcdWQyN2ZcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJi'@;
put 'M2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhc'@;
put 'dWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJjMTdcdWJjMThcdWJjMWJcdWJjMWNcdWJjMWRcdWJjMWVcdWJjMWZcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJj'@;
put 'MzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9yKHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk'@;
put 'MjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2XHVkMjk3XHVkMjk4XHVkMjk5XHVkMjlhXHVkMjliXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1XHVkMmE2XHVkMmE3XHVkMmE4XHVkMmE5XHVkMmFhXHVkMmFiXHVkMmFkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyXHVkMmIzXHVkMmI0XHVkMmI1XHVkMmI2XHVkMmI3XHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzXHVkMmM0XHVkMmM1XHVkMmM2XHVkMmM3XHVkMmNhXHVkMmNjXHVkMmNkXHVkMmNlXHVk'@;
put 'MmNmXHVkMmQwXHVkMmQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRhXHVkMmRiXHVkMmRkXHVkMmRlXHVkMmRmXHVkMmUwXHVkMmUxXHVkMmUyXHVkMmUzXHVkMmU2XHVkMmU3XHVkMmU4XHVkMmU5'@;
put 'XHVkMmVhXHVkMmViXHVkMmVjXHVkMmVkXHVkMmVlXHVkMmVmXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZhXHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHVi'@;
put 'Y2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHViY2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4'@;
put 'XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkzXHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHVi'@;
put 'ZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHViZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMy'@;
put 'M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1'@;
put 'ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1'@;
put 'YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1'@;
put 'YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0'@;
put 'MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1'@;
put 'YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3MittLEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNmFcdWQzNmJcdWQzNmNcdWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQzNzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlcdWQzN2FcdWQzN2JcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQz'@;
put 'ODVcdWQzODZcdWQzODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNcdWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJcdWQzYTNc'@;
put 'dWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdcdWQzYWFcdWQzYWNcdWQzYWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQzYjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQzYmZcdWQz'@;
put 'YzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQzYzZcdWQzYzdcdWQzY2FcdWQzY2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRcdWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhc'@;
put 'dWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRcdWMxMWVcdWMxMWZcdWMxMjBcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMx'@;
put 'NTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRc'@;
put 'dWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMy'@;
put 'MmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Q3XHVkM2Q5XHVkM2RhXHVkM2RiXHVkM2RjXHVkM2RkXHVkM2RlXHVkM2RmXHVkM2UwXHVkM2UyXHVkM2U0XHVkM2U1XHVkM2U2XHVkM2U3XHVkM2U4XHVkM2U5XHVkM2VhXHVkM2ViXHVkM2VlXHVkM2VmXHVkM2YxXHVk'@;
put 'M2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyXHVkNDAzXHVkNDA0XHVkNDA1XHVkNDA2XHVkNDA3XHVkNDA5XHVkNDBhXHVkNDBiXHVkNDBjXHVkNDBk'@;
put 'XHVkNDBlXHVkNDBmXHVkNDEwXHVkNDExXHVkNDEyXHVkNDEzXHVkNDE0XHVkNDE1XHVkNDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDE3XHVkNDE4XHVkNDE5XHVkNDFhXHVkNDFiXHVkNDFjXHVkNDFlXHVkNDFmXHVkNDIwXHVkNDIxXHVkNDIyXHVkNDIzXHVk'@;
put 'NDI0XHVkNDI1XHVkNDI2XHVkNDI3XHVkNDI4XHVkNDI5XHVkNDJhXHVkNDJiXHVkNDJjXHVkNDJkXHVkNDJlXHVkNDJmXHVkNDMwXHVkNDMxXHVkNDMyXHVkNDMzXHVkNDM0XHVkNDM1XHVkNDM2XHVkNDM3XHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0'@;
put 'XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVj'@;
put 'MmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5'@;
put 'XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVj'@;
put 'NDEwXHVjNDI0XHVjNDJjXHVjNDMwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1'@;
put 'ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2'@;
put 'NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1'@;
put 'ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2'@;
put 'NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1'@;
put 'YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3'@;
put 'NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1'@;
put 'YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJcdWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdcdWQ0YThcdWQ0YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0YWZc'@;
put 'dWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0YjRcdWQ0YjVcdWQ0YjZcdWQ0YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0YmVcdWQ0YmZcdWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRcdWQ0'@;
put 'YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0YzlcdWQ0Y2FcdWQ0Y2JcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZcdWQ0ZDdcdWQ0ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0ZGVc'@;
put 'dWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0ZjdcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1'@;
put 'ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZcdWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNc'@;
put 'dWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2'@;
put 'NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2Nc'@;
put 'dWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVtt'@;
put 'XSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGZlXHVkNGZmXHVkNTAwXHVkNTAxXHVkNTAyXHVkNTAzXHVkNTA1XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkXHVkNTBlXHVkNTBm'@;
put 'XHVkNTEwXHVkNTExXHVkNTEyXHVkNTEzXHVkNTE2XHVkNTE4XHVkNTE5XHVkNTFhXHVkNTFiXHVkNTFjXHVkNTFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTFlXHVkNTFmXHVkNTIwXHVkNTIxXHVkNTIyXHVkNTIzXHVkNTI0XHVkNTI1XHVkNTI2XHVkNTI3XHVk'@;
put 'NTI4XHVkNTI5XHVkNTJhXHVkNTJiXHVkNTJjXHVkNTJkXHVkNTJlXHVkNTJmXHVkNTMwXHVkNTMxXHVkNTMyXHVkNTMzXHVkNTM0XHVkNTM1XHVkNTM2XHVkNTM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNm'@;
put 'XHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1XHVkNTQ2XHVkNTQ3XHVkNTQ4XHVkNTQ5XHVkNTRhXHVkNTRiXHVkNTRlXHVkNTUwXHVkNTUyXHVkNTUzXHVkNTU0XHVkNTU1XHVkNTU2XHVkNTU3XHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVj'@;
put 'NmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRj'@;
put 'XHVjNzRkXHVjNzRmXHVjNzUxXHVjNzUyXHVjNzUzXHVjNzU0XHVjNzU1XHVjNzU2XHVjNzU3XHVjNzU4XHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVj'@;
put 'NzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2Qw'@;
put 'XHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1'@;
put 'MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3'@;
put 'N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1'@;
put 'ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVhNFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVh'@;
put 'Ylx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1'@;
put 'ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4'@;
put 'MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1'@;
put 'YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5'@;
put 'OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00'@;
put 'OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtmb3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1'@;
put 'ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZc'@;
put 'dWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRcdWQ1ZmVcdWQ1ZmZcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2'@;
put 'MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2MjlcdWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2MzBcdWQ2MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZc'@;
put 'dWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNh'@;
put 'MTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBc'@;
put 'dWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNj'@;
put 'MTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVk'@;
put 'NjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkXHVkNjVlXHVkNjVmXHVkNjYwXHVkNjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjYyXHVkNjYzXHVkNjY0XHVkNjY1'@;
put 'XHVkNjY2XHVkNjY4XHVkNjZhXHVkNjZiXHVkNjZjXHVkNjZkXHVkNjZlXHVkNjZmXHVkNjcyXHVkNjczXHVkNjc1XHVkNjc2XHVkNjc3XHVkNjc4XHVkNjc5XHVkNjdhXHVkNjdiXHVkNjdjXHVkNjdkXHVkNjdlXHVkNjdmXHVkNjgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2XHVkNjg3XHVkNjg4XHVkNjg5XHVkNjhhXHVkNjhiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1XHVkNjk2XHVkNjk3XHVkNjk4XHVkNjk5XHVkNjlhXHVkNjliXHVkNjljXHVkNjllXHVkNmEwXHVkNmEyXHVkNmEzXHVkNmE0'@;
put 'XHVkNmE1XHVkNmE2XHVkNmE3XHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVj'@;
put 'Y2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0'@;
put 'XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVj'@;
put 'ZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIwK20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1'@;
put 'ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZj'@;
put 'ZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcw'@;
put 'Y1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1'@;
put 'Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2Yx'@;
put 'NVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1'@;
put 'Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFc'@;
put 'dWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3MjJcdWQ3MjNcdWQ3MjRcdWQ3MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3MzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2ZcdWQ3NDBcdWQ3NDFcdWQ3NDJcdWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNcdWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3NzdcdWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3'@;
put 'N2ZcdWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVcdWQ3ODZcdWQ3ODdcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThc'@;
put 'dWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQx'@;
put 'MzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFc'@;
put 'dWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzhkXHVkNzhl'@;
put 'XHVkNzhmXHVkNzkxXHVkNzkyXHVkNzkzXHVkNzk0XHVkNzk1XHVkNzk2XHVkNzk3XHVkNzlhXHVkNzljXHVkNzllXHVkNzlmXHVkN2EwXHVkN2ExXHVkN2EyXHVkN2EzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJj'@;
put 'XHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVk'@;
put 'MzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2Ew'@;
put 'XHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0pO2Zvcih4WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4'@;
put 'MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1'@;
put 'ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVj'@;
put 'Y1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzE5OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTldW21dXT01MDk0NCttLEZbNTA5NDQrbV09eFsxOTldW21dKTtmb3IoeFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2'@;
put 'NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2Nc'@;
put 'dWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3'@;
put 'NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAwXVttXV09NTEyMDArbSxGWzUxMjAwK21dPXhbMjAwXVttXSk7Zm9yKHhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1'@;
put 'YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFh'@;
put 'XHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0'@;
put 'ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUx'@;
put 'XHU5NDUyXHU5Zjk1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMl1bbV1dPTUxNzEyK20sRls1MTcxMittXT14WzIwMl1bbV0pO2Zvcih4WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1'@;
put 'NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0'@;
put 'Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1'@;
put 'NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0'@;
put 'MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDNdW21dXT01MTk2OCttLEZbNTE5NjgrbV09eFsyMDNdW21dKTtmb3IoeFsyMDRdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZc'@;
put 'dThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThh'@;
put 'MjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdc'@;
put 'dTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5'@;
put 'NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA0XVttXV09NTIyMjQrbSxGWzUyMjI0K21dPXhbMjA0XVttXSk7Zm9yKHhb'@;
put 'MjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGU4XHU2ZWFhXHU3NTRj'@;
put 'XHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2'@;
put 'Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQw'@;
put 'XHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3'@;
put 'YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNV1bbV1dPTUyNDgwK20sRls1MjQ4MCttXT14WzIw'@;
put 'NV1bbV0pO2Zvcih4WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzlk'@;
put 'MVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1'@;
put 'OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJk'@;
put 'MFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1'@;
put 'OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDZdW21dXT01MjczNittLEZb'@;
put 'NTI3MzYrbV09eFsyMDZdW21dKTtmb3IoeFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZc'@;
put 'dTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0'@;
put 'MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdc'@;
put 'dTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA3XVtt'@;
put 'XV09NTI5OTIrbSxGWzUyOTkyK21dPXhbMjA3XVttXSk7Zm9yKHhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4'@;
put 'XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2'@;
put 'NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4'@;
put 'XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDhdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIwOF1bbV1dPTUzMjQ4K20sRls1MzI0OCttXT14WzIwOF1bbV0pO2Zvcih4WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0'@;
put 'N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1'@;
put 'NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1Zjkx'@;
put 'ZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA5XVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMDldW21dXT01MzUwNCttLEZbNTM1MDQrbV09eFsyMDldW21dKTtmb3IoeFsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVl'@;
put 'NzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5MzdcdWY5MzhcdTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2Jc'@;
put 'dWY5M2NcdWY5M2RcdWY5M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5NDNcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJcdWY5NGNcdWY5NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5'@;
put 'NTFcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRcdWY5NTVcdWY5NTZcdWY5NTdcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTBdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEwXVttXV09NTM3NjArbSxGWzUzNzYwK21dPXhbMjEwXVttXSk7Zm9yKHhbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4'@;
put 'ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0'@;
put 'XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5'@;
put 'NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjExXS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMV1bbV1dPTU0MDE2K20sRls1NDAxNittXT14WzIxMV1bbV0pO2Zvcih4WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1'@;
put 'OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgx'@;
put 'M1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1'@;
put 'OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTJdW21dXT01NDI3MittLEZbNTQyNzIrbV09eFsyMTJdW21dKTtmb3IoeFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFc'@;
put 'dWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcy'@;
put 'ZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVc'@;
put 'dTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEzXVttXV09NTQ1MjgrbSxGWzU0NTI4K21dPXhbMjEzXVttXSk7Zm9yKHhbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEz'@;
put 'XHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0'@;
put 'ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0'@;
put 'XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4'@;
put 'NGZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNF1bbV1dPTU0Nzg0K20sRls1NDc4NCttXT14WzIxNF1bbV0pO2Zvcih4WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYw'@;
put 'Zlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1'@;
put 'NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4'@;
put 'MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1'@;
put 'ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTVdW21dXT01NTA0MCttLEZbNTUwNDArbV09eFsyMTVdW21dKTtmb3IoeFsyMTZdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4'@;
put 'YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNc'@;
put 'dTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4'@;
put 'ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBc'@;
put 'dTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE2XVttXV09NTUyOTYrbSxGWzU1Mjk2K21dPXhbMjE2XVttXSk7Zm9yKHhbMjE3XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2'@;
put 'NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYx'@;
put 'XHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2'@;
put 'NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYx'@;
put 'XHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxN11bbV1dPTU1NTUyK20sRls1NTU1MittXT14WzIxN11bbV0pO2Zv'@;
put 'cih4WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1'@;
put 'N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNi'@;
put 'N1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1'@;
put 'N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIy'@;
put 'Y1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMThdW21dXT01NTgwOCttLEZbNTU4MDgrbV09'@;
put 'eFsyMThdW21dKTtmb3IoeFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0'@;
put 'YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZc'@;
put 'dTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcy'@;
put 'YWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE5XVttXV09NTYwNjQr'@;
put 'bSxGWzU2MDY0K21dPXhbMjE5XVttXSk7Zm9yKHhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3'@;
put 'NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1Yjkz'@;
put 'XHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5'@;
put 'MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIy'@;
put 'MF1bbV1dPTU2MzIwK20sRls1NjMyMCttXT14WzIyMF1bbV0pO2Zvcih4WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1'@;
put 'OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNj'@;
put 'MVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1'@;
put 'NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIxXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyMjFdW21dXT01NjU3NittLEZbNTY1NzYrbV09eFsyMjFdW21dKTtmb3IoeFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVc'@;
put 'dTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTVi'@;
put 'ZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRc'@;
put 'dTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMl1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIyXVttXV09NTY4MzIrbSxGWzU2ODMyK21dPXhbMjIyXVttXSk7Zm9yKHhbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZi'@;
put 'XHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2'@;
put 'ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1'@;
put 'XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIzXS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyM11bbV1dPTU3MDg4K20sRls1NzA4OCttXT14WzIyM11bbV0pO2Zvcih4WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1'@;
put 'MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1'@;
put 'ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJi'@;
put 'Mlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNF0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21dKTtmb3IoeFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUz'@;
put 'ZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNc'@;
put 'dTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3'@;
put 'N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAwK21dPXhbMjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3'@;
put 'MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5'@;
put 'XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2'@;
put 'OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3XHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3ODU2K20sRls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1'@;
put 'NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1Nzkz'@;
put 'YVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1'@;
put 'NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZj'@;
put 'M1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjddW21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFc'@;
put 'dWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYz'@;
put 'ZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNc'@;
put 'dTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZk'@;
put 'YjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNi'@;
put 'XHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2'@;
put 'NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2'@;
put 'XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0'@;
put 'ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4WzIzMF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4'@;
put 'NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1'@;
put 'NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2'@;
put 'Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1'@;
put 'ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsyMzBdW21d'@;
put 'KTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZcdTk1'@;
put 'YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZc'@;
put 'dTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTcz'@;
put 'MGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJc'@;
put 'dTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxGWzU5MTM2'@;
put 'K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1'@;
put 'XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5'@;
put 'ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEy'@;
put 'XHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1bbV1dPTU5'@;
put 'MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdj'@;
put 'N1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1'@;
put 'NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYz'@;
put 'MVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZk'@;
put 'MzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRc'@;
put 'dTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYw'@;
put 'ZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5'@;
put 'MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5'@;
put 'XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4'@;
put 'MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy'@;
put 'MzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNV1bbV1dPTYwMTYwK20sRls2MDE2MCttXT14WzIzNV1bbV0pO2Zvcih4WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1'@;
put 'NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2Zj'@;
put 'Y1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1'@;
put 'NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNl0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PXhbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzZdW21dXT02MDQxNittLEZbNjA0MTYrbV09eFsyMzZdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNc'@;
put 'dTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkx'@;
put 'NGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJc'@;
put 'dTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy'@;
put 'MzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMx'@;
put 'XHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4'@;
put 'NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0'@;
put 'XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2'@;
put 'ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1'@;
put 'NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRj'@;
put 'MFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzldW21dXT02MTE4NCttLEZbNjExODQrbV09eFsyMzldW21dKTtmb3IoeFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYw'@;
put 'OGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFc'@;
put 'dTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThk'@;
put 'OTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNc'@;
put 'dTdlMzFcdTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQwXVttXV09NjE0NDArbSxGWzYxNDQwK21dPXhbMjQwXVttXSk7Zm9yKHhbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTJhXHU4ZTM1XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1'@;
put 'ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRj'@;
put 'XHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2'@;
put 'ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4'@;
put 'XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MV1bbV1dPTYxNjk2K20sRls2MTY5NittXT14WzI0MV1bbV0pO2Zvcih4WzI0Ml09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1'@;
put 'NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZm'@;
put 'NFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1'@;
put 'ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5'@;
put 'Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDJdW21dXT02MTk1MittLEZbNjE5NTIrbV09eFsyNDJdW21dKTtmb3IoeFsy'@;
put 'NDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVc'@;
put 'dTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0'@;
put 'YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlc'@;
put 'dTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4'@;
put 'MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQzXVttXV09NjIyMDgrbSxGWzYyMjA4K21dPXhbMjQz'@;
put 'XVttXSk7Zm9yKHhbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2Fj'@;
put 'XHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3'@;
put 'Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNk'@;
put 'XHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4'@;
put 'YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NF1bbV1dPTYyNDY0K20sRls2'@;
put 'MjQ2NCttXT14WzI0NF1bbV0pO2Zvcih4WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1'@;
put 'NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJi'@;
put 'Ylx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1'@;
put 'NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDVdW21d'@;
put 'XT02MjcyMCttLEZbNjI3MjArbV09eFsyNDVdW21dKTtmb3IoeFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRc'@;
put 'dTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZm'@;
put 'MDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRc'@;
put 'dTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGFlW3hbMjQ2XVttXV09NjI5NzYrbSxGWzYyOTc2K21dPXhbMjQ2XVttXSk7Zm9yKHhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTEx'@;
put 'XHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2'@;
put 'ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3'@;
put 'XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDddW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihhZVt4WzI0N11bbV1dPTYzMjMyK20sRls2MzIzMittXT14WzI0N11bbV0pO2Zvcih4WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEw'@;
put 'ZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1'@;
put 'NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0'@;
put 'NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PXhbMjQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDhdW21dXT02MzQ4OCttLEZbNjM0ODgrbV09eFsyNDhdW21dKTtmb3IoeFsyNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZj'@;
put 'Y2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRc'@;
put 'dTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTll'@;
put 'NzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDldLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT14WzI0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ5XVttXV09NjM3NDQrbSxGWzYzNzQ0K21dPXhbMjQ5XVttXSk7Zm9yKHhbMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4'@;
put 'OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2'@;
put 'XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4'@;
put 'Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PXhbMjUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MF1bbV1dPTY0ZTMrbSxGWzY0ZTMrbV09eFsyNTBdW21dKTtmb3IoeFsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkw'@;
put 'YTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZc'@;
put 'dTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkx'@;
put 'NzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzVcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUxXVttXV09NjQyNTYrbSxGWzY0MjU2K21dPXhbMjUxXVttXSk7Zm9yKHhbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3'@;
put 'OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4'@;
put 'XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2'@;
put 'MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1Ml1bbV1dPTY0NTEyK20sRls2NDUxMittXT14WzI1Ml1bbV0pO2Zvcih4WzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1'@;
put 'NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZi'@;
put 'ZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1'@;
put 'OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2Ew'@;
put 'MFx1N2ZiMlx1OGE3MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTNdW21dXT02NDc2OCttLEZbNjQ3NjgrbV09eFsyNTNdW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxMZVs5NTBd'@;
put 'PWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQl'@;
put 'JicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZm'@;
put 'NWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2Vc'@;
put 'dTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNc'@;
put 'dTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1'@;
put 'ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2'@;
put 'NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1'@;
put 'MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjFdW21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFc'@;
put 'dTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4XHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5'@;
put 'XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYx'@;
put 'XHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUz'@;
put 'MDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMw'@;
put 'XHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVm'@;
put 'ZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1'@;
put 'MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNj'@;
put 'NFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzEx'@;
put 'NFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3Io'@;
put 'eFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVc'@;
put 'dTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTVi'@;
put 'NTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRl'@;
put 'MGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdc'@;
put 'dTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVk'@;
put 'ZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJc'@;
put 'dTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhb'@;
put 'MTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUz'@;
put 'XHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1'@;
put 'M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1'@;
put 'OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJh'@;
put 'XHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3'@;
put 'NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2'@;
put 'XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20s'@;
put 'Rls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3'@;
put 'MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1'@;
put 'NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3'@;
put 'Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1'@;
put 'ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYz'@;
put 'NFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZd'@;
put 'W21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUx'@;
put 'NGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhc'@;
put 'dTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTVi'@;
put 'NWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdc'@;
put 'dTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1'@;
put 'MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2'@;
put 'Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYy'@;
put 'XHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5'@;
put 'MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0Zjli'@;
put 'XHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1'@;
put 'MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1'@;
put 'NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0'@;
put 'NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1'@;
put 'NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1'@;
put 'NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIx'@;
put 'NVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1'@;
put 'NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRc'@;
put 'dTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZj'@;
put 'ZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNc'@;
put 'dTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlc'@;
put 'dTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgw'@;
put 'YmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVc'@;
put 'dTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcwXVttXV09NDM1MjArbSxGWzQzNTIwK21dPXhbMTcwXVttXSk7Zm9yKHhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjQyXHU5NmI5'@;
put 'XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0'@;
put 'ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2'@;
put 'XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2Ey'@;
put 'XHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1'@;
put 'YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1'@;
put 'XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3XHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MV1bbV1dPTQzNzc2K20sRls0Mzc3NittXT14WzE3MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1'@;
put 'NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQw'@;
put 'Ylx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQw'@;
put 'ZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1'@;
put 'NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1Nzgw'@;
put 'Y1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzJdW21dXT00NDAzMittLEZbNDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRc'@;
put 'dTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThj'@;
put 'YTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkx'@;
put 'Y2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZc'@;
put 'dTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUx'@;
put 'Y2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVc'@;
put 'dTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTczXVttXV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTczXVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVj'@;
put 'XHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1'@;
put 'ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2'@;
put 'MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4'@;
put 'XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2'@;
put 'ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4'@;
put 'XHU2ZDc3XHU2ZDU5XHU2ZDkzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJm'@;
put 'Y1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1'@;
put 'NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1'@;
put 'Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2Qx'@;
put 'NFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1'@;
put 'ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMz'@;
put 'Nlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21dXT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThh'@;
put 'MGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVc'@;
put 'dThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThc'@;
put 'dTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUw'@;
put 'NmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFc'@;
put 'dTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5'@;
put 'MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7'@;
put 'Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1'@;
put 'YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3'@;
put 'XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGM1XHU2MGJi'@;
put 'XHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2'@;
put 'MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFj'@;
put 'XHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2'@;
put 'ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMitt'@;
put 'XT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1'@;
put 'NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBm'@;
put 'OVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1'@;
put 'Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0'@;
put 'Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1'@;
put 'ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2'@;
put 'OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFc'@;
put 'dTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThj'@;
put 'YWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBc'@;
put 'dTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUz'@;
put 'NWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJc'@;
put 'dTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNj'@;
put 'XHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2'@;
put 'MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2Njcw'@;
put 'XHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2'@;
put 'OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFi'@;
put 'XHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1'@;
put 'Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1'@;
put 'NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5'@;
put 'OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2Qy'@;
put 'Ylx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1'@;
put 'ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZk'@;
put 'OVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgx'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsxODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThh'@;
put 'M2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZc'@;
put 'dThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1'@;
put 'OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2'@;
put 'ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdc'@;
put 'dTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3'@;
put 'MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWIzXHU1YWMyXHU1YWIyXHU1'@;
put 'ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2'@;
put 'XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2'@;
put 'Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2'@;
put 'OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3'@;
put 'XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3'@;
put 'NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgz'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1'@;
put 'Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2Ex'@;
put 'ZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1'@;
put 'ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1'@;
put 'ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhk'@;
put 'OFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1'@;
put 'OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTky'@;
put 'M2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRc'@;
put 'dTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdc'@;
put 'dTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1'@;
put 'ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhc'@;
put 'dTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9yKHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2'@;
put 'NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMz'@;
put 'XHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJm'@;
put 'XHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3'@;
put 'NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1'@;
put 'XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3'@;
put 'ZGM3XHU3ZGFjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1'@;
put 'ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhm'@;
put 'OVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2'@;
put 'YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1'@;
put 'OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4'@;
put 'NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1'@;
put 'NTEwOFx1NTEwOVx1NTEwNVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3MittLEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZc'@;
put 'dTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVl'@;
put 'ZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYx'@;
put 'OTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlc'@;
put 'dTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZi'@;
put 'YzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZc'@;
put 'dTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3Nzhi'@;
put 'XHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3'@;
put 'ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU5XHU4MDI2XHU4MTliXHU4'@;
put 'MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5'@;
put 'XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4'@;
put 'YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJh'@;
put 'XHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1b'@;
put 'bV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJi'@;
put 'Ylx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1'@;
put 'OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1'@;
put 'OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2'@;
put 'Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1'@;
put 'NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0'@;
put 'Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2'@;
put 'NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcx'@;
put 'ZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVc'@;
put 'dTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1'@;
put 'NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFc'@;
put 'dThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkw'@;
put 'N2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09'@;
put 'NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5'@;
put 'NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJj'@;
put 'XHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2'@;
put 'MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFl'@;
put 'XHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3'@;
put 'MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1'@;
put 'NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2Uz'@;
put 'NFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1'@;
put 'ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0'@;
put 'NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1'@;
put 'OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtmb3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2Zc'@;
put 'dTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZh'@;
put 'YjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZc'@;
put 'dTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRc'@;
put 'dTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5'@;
put 'ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJc'@;
put 'dTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRj'@;
put 'XHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1'@;
put 'NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBk'@;
put 'XHU3MjU4XHU3MmEyXHU3Mzc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3'@;
put 'XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4'@;
put 'OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2Qx'@;
put 'XHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIwK20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThi'@;
put 'Y1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1'@;
put 'NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0'@;
put 'ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2'@;
put 'NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1'@;
put 'OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFm'@;
put 'YVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThi'@;
put 'NzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2Vc'@;
put 'dTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZi'@;
put 'NjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThl'@;
put 'OTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZc'@;
put 'dTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlh'@;
put 'NWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTJcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZl'@;
put 'XHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5'@;
put 'ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0pO2Zvcih4WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2'@;
put 'Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1'@;
put 'NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1'@;
put 'OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQw'@;
put 'N1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1'@;
put 'NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0'@;
put 'YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDFdW21dXT01MTQ1NittLEZbNTE0NTYrbV09eFsyMDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkw'@;
put 'OTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVc'@;
put 'dTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVc'@;
put 'dTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVj'@;
put 'OGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRc'@;
put 'dTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1'@;
put 'ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2'@;
put 'YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5'@;
put 'XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5'@;
put 'XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0'@;
put 'Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdm'@;
put 'XHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1'@;
put 'Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4'@;
put 'WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1'@;
put 'NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNh'@;
put 'Nlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAx'@;
put 'N1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1'@;
put 'NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4'@;
put 'Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1'@;
put 'NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsy'@;
put 'MDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlc'@;
put 'dTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTcz'@;
put 'YTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3'@;
put 'ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVc'@;
put 'dTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2'@;
put 'MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJc'@;
put 'dTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxG'@;
put 'WzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJl'@;
put 'XHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1'@;
put 'OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1'@;
put 'XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2'@;
put 'MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIy'@;
put 'XHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1b'@;
put 'bV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1Njdi'@;
put 'NVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1'@;
put 'NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0'@;
put 'OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1'@;
put 'NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1Nzgw'@;
put 'Zlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdj'@;
put 'ODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlc'@;
put 'dTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWFcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThm'@;
put 'ZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNc'@;
put 'dTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUy'@;
put 'Y2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1'@;
put 'NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3'@;
put 'XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2'@;
put 'MDVhXHU2MDY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2'@;
put 'MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2'@;
put 'XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2'@;
put 'ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1'@;
put 'NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2'@;
put 'OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1'@;
put 'NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1'@;
put 'NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1Nzcx'@;
put 'ZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1'@;
put 'Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMDRcdTdiMTNc'@;
put 'dTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdm'@;
put 'NWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVc'@;
put 'dTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVc'@;
put 'dTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2'@;
put 'OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdc'@;
put 'dThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1'@;
put 'MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0'@;
put 'XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2Zi'@;
put 'XHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1'@;
put 'N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNl'@;
put 'XHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1'@;
put 'NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5'@;
put 'MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1'@;
put 'Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1'@;
put 'Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRi'@;
put 'NFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1'@;
put 'NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBc'@;
put 'dTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0'@;
put 'MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3'@;
put 'MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFc'@;
put 'dTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdj'@;
put 'OTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdc'@;
put 'dTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMz'@;
put 'XHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4'@;
put 'M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4'@;
put 'NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhj'@;
put 'XHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4'@;
put 'ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYx'@;
put 'XHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5'@;
put 'NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1'@;
put 'NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1'@;
put 'NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5'@;
put 'NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1'@;
put 'NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZh'@;
put 'Ylx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtm'@;
put 'b3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYx'@;
put 'MGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdc'@;
put 'dTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2N2NcdTY2NmNc'@;
put 'dTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5'@;
put 'MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4Yzdc'@;
put 'dTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZl'@;
put 'NzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21d'@;
put 'PXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2'@;
put 'ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5'@;
put 'XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3'@;
put 'NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBh'@;
put 'XHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3'@;
put 'ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4'@;
put 'K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1'@;
put 'ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQx'@;
put 'MFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1'@;
put 'ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlk'@;
put 'Ylx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1'@;
put 'OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'MTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFc'@;
put 'dThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTky'@;
put 'MDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODhcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVc'@;
put 'dTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1'@;
put 'YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJc'@;
put 'dTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkw'@;
put 'XHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1'@;
put 'ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3'@;
put 'XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2'@;
put 'OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3'@;
put 'XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVj'@;
put 'OFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1'@;
put 'NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1'@;
put 'Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0'@;
put 'Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1'@;
put 'NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4'@;
put 'NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWJcdTdhMTBcdTdhYTNcdTdh'@;
put 'YTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVc'@;
put 'dTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3'@;
put 'MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0'@;
put 'NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRc'@;
put 'dTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2'@;
put 'ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWUxXHU4'@;
put 'OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4'@;
put 'XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4'@;
put 'ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5'@;
put 'MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRj'@;
put 'XHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5'@;
put 'OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1MGVmXHU1MGUzXHU1MGUwXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4'@;
put 'Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1'@;
put 'NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1'@;
put 'NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1'@;
put 'Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1'@;
put 'NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5'@;
put 'OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJc'@;
put 'dTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJc'@;
put 'dTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcy'@;
put 'NTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2Yjhc'@;
put 'dTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5'@;
put 'OTRcdTc5OTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3'@;
put 'YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5'@;
put 'XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThk'@;
put 'XHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4'@;
put 'NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQz'@;
put 'XHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4'@;
put 'OGVlXHU4OGZjXHU4OGY2XHU4OGZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1'@;
put 'OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEy'@;
put 'NFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3'@;
put 'Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1'@;
put 'OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIz'@;
put 'ZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1'@;
put 'NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjld'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVc'@;
put 'dTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVk'@;
put 'OWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYxYWZcdTYx'@;
put 'YWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1Nzlc'@;
put 'dTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5'@;
put 'ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBc'@;
put 'dTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVtt'@;
put 'XSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3'@;
put 'XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3'@;
put 'MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzYyXHU3'@;
put 'NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3Nzhm'@;
put 'XHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3'@;
put 'YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFk'@;
put 'XHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4'@;
put 'MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUz'@;
put 'Ylx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1'@;
put 'ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0'@;
put 'Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1'@;
put 'OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5'@;
put 'Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01'@;
put 'OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThm'@;
put 'MjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlc'@;
put 'dTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4'@;
put 'MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJc'@;
put 'dTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTll'@;
put 'ODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1'@;
put 'OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFl'@;
put 'XHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2'@;
put 'NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRm'@;
put 'XHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2'@;
put 'ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1'@;
put 'NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3'@;
put 'Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1'@;
put 'Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1'@;
put 'N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2Ux'@;
put 'Zlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1'@;
put 'ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJc'@;
put 'dTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3'@;
put 'ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNc'@;
put 'dTg5MWZcdTg5ZjFcdThhZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJc'@;
put 'dThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThm'@;
put 'MzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFc'@;
put 'dTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBiXHU5MmZlXHU5MzA5'@;
put 'XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5'@;
put 'OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5Yjgy'@;
put 'XHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2'@;
put 'XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1'@;
put 'OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRl'@;
put 'XHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5'@;
put 'NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1'@;
put 'NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0'@;
put 'N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1Nzkw'@;
put 'NFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1'@;
put 'N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2Zm'@;
put 'NFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFc'@;
put 'dTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5'@;
put 'NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThi'@;
put 'MDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJc'@;
put 'dTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkz'@;
put 'NGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWEx'@;
put 'XHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5'@;
put 'YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5'@;
put 'ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZk'@;
put 'XHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2'@;
put 'YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAz'@;
put 'XHU3MWZkXHU3Mzc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1Nzdi'@;
put 'YVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1'@;
put 'N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1'@;
put 'ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdm'@;
put 'M1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1'@;
put 'OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1'@;
put 'N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkz'@;
put 'YjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFc'@;
put 'dTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZc'@;
put 'dTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTli'@;
put 'NGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThc'@;
put 'dTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4'@;
put 'ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhb'@;
put 'MjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2'@;
put 'YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAy'@;
put 'XHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTIxXHU3OTFjXHU3OTE3'@;
put 'XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3'@;
put 'ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUy'@;
put 'XHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4'@;
put 'YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0'@;
put 'Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1'@;
put 'OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNh'@;
put 'OVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdi'@;
put 'M1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1'@;
put 'OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3'@;
put 'N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1'@;
put 'OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZb'@;
put 'NjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZc'@;
put 'dTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcw'@;
put 'MzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFc'@;
put 'dTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThk'@;
put 'YWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlc'@;
put 'dTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVtt'@;
put 'XV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5'@;
put 'XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5'@;
put 'YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMw'@;
put 'XHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3'@;
put 'MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMw'@;
put 'XHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2'@;
put 'ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1'@;
put 'OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRj'@;
put 'N1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1'@;
put 'OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIx'@;
put 'Zlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgy'@;
put 'NmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBc'@;
put 'dThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlh'@;
put 'NDhcdTlhNGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTlj'@;
put 'MzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJc'@;
put 'dTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3'@;
put 'ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4'@;
put 'YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRj'@;
put 'XHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5'@;
put 'ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3'@;
put 'NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1'@;
put 'XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5'@;
put 'ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1'@;
put 'N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUw'@;
put 'Ylx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1'@;
put 'OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1'@;
put 'OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWVi'@;
put 'N1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1'@;
put 'MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsyNDldW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxMZVsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4'@;
put 'MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xc'@;
put 'XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRc'@;
put 'dTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0'@;
put 'XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUw'@;
put 'MTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4'@;
put 'ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVb'@;
put 'MTI1MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1'@;
put 'Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUw'@;
put 'NDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFi'@;
put 'XHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUw'@;
put 'NDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1'@;
put 'XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIixhZT1bXSx4'@;
put 'PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbMTI1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw'@;
put 'N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xt'@;
put 'bm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0'@;
put 'XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNc'@;
put 'eGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4'@;
put 'ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJB'@;
put 'dChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdc'@;
put 'eDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUy'@;
put 'MDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1'@;
put 'MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUw'@;
put 'MzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2Fl'@;
put 'XHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUw'@;
put 'M2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbMTI1NF09ZnVuY3Rpb24o'@;
put 'KXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNE'@;
put 'RUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhi'@;
put 'Mlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4'@;
put 'ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixhZT1bXSx4'@;
put 'PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbMTI1NV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw'@;
put 'N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xt'@;
put 'bm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0'@;
put 'XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhi'@;
put 'Y1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1ZmZmZFx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVl'@;
put 'NFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntl'@;
put 'bmM6eCxkZWM6YWV9fSgpLExlWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwi'@;
put 'IyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1'@;
put 'MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhh'@;
put 'OVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2'@;
put 'MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhl'@;
put 'OFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2Rl'@;
put 'QXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVsxMjU3XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEz'@;
put 'XHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIw'@;
put 'MWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJc'@;
put 'dWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2'@;
put 'XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUw'@;
put 'MTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLGFl'@;
put 'PVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVsxMjU4XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4'@;
put 'MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdo'@;
put 'aWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNc'@;
put 'dTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJi'@;
put 'XHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhl'@;
put 'MVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1'@;
put 'NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZc'@;
put 'eDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2Zc'@;
put 'eGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4'@;
put 'YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAy'@;
put 'Nlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4'@;
put 'YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4'@;
put 'W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVsxMDAwNl09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1'@;
put 'XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2'@;
put 'XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVc'@;
put 'eGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAz'@;
put 'YTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUw'@;
put 'M2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2Iw'@;
put 'XHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksTGVbMTAwMDddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgw'@;
put 'M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd'@;
put 'Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1'@;
put 'MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUy'@;
put 'MjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIw'@;
put 'MTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUw'@;
put 'NDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdCht'@;
put 'KSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLExlWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBtLEY9W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4'@;
put 'MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4'@;
put 'N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRjXHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUxXHVmOGUyXHVmOGUzXHVmOGU0XHVmOGU1XHVmOGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVjXHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYxXHVm'@;
put 'OGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4XHVmOGY5XHVmOGZhXHVmOGZiXHVmOGZjXHVmOGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHUzMGZiXHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNVx1ZmY1ZVx1ZmZmZFx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAw'@;
put 'Ylx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1'@;
put 'MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVj'@;
put 'Ylx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsxNjFdW21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0'@;
put 'OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFc'@;
put 'dTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMy'@;
put 'MjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMTYyXVttXV09NDE0NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVm'@;
put 'ZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMw'@;
put 'XHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVm'@;
put 'ZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsx'@;
put 'NjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1'@;
put 'MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2'@;
put 'ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1'@;
put 'MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PXhbMTY0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRdW21dKTtmb3IoeFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBc'@;
put 'dTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMw'@;
put 'Y2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdc'@;
put 'dTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx'@;
put 'NjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQyMjQwK21dPXhbMTY1XVttXSk7Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzll'@;
put 'XHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUw'@;
put 'M2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPXhbMTY2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1dPTQyNDk2K20sRls0MjQ5NittXT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQx'@;
put 'YVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0'@;
put 'MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjddW21dXT00Mjc1MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4'@;
put 'ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlc'@;
put 'dTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMx'@;
put 'MjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgrbSxGWzQzMDA4K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUy'@;
put 'NTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIz'@;
put 'XHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUy'@;
put 'NTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1'@;
put 'ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJh'@;
put 'ZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1'@;
put 'NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMw'@;
put 'NVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFc'@;
put 'dTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZj'@;
put 'ZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRc'@;
put 'dThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3'@;
put 'YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFk'@;
put 'XHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2'@;
put 'NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5'@;
put 'XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3'@;
put 'ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4'@;
put 'WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTczYVx1NWMxZFx1NWUz'@;
put 'OFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1'@;
put 'NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYx'@;
put 'Ylx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1'@;
put 'NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsx'@;
put 'NzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4'@;
put 'NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdc'@;
put 'dTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdj'@;
put 'MDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5Mjdc'@;
put 'dTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxG'@;
put 'WzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1Yzli'@;
put 'XHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2'@;
put 'MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1'@;
put 'XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1b'@;
put 'bV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2'@;
put 'MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1'@;
put 'NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJi'@;
put 'OVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgz'@;
put 'MDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlc'@;
put 'dTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThi'@;
put 'YmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1'@;
put 'OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2'@;
put 'XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5'@;
put 'ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1'@;
put 'NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZj'@;
put 'N1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1'@;
put 'NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRc'@;
put 'dTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4'@;
put 'MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhc'@;
put 'dTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNi'@;
put 'XHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3'@;
put 'YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIz'@;
put 'XHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4'@;
put 'MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1'@;
put 'OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMx'@;
put 'Nlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1'@;
put 'NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21dXT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUw'@;
put 'ZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVc'@;
put 'dTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZk'@;
put 'MDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFc'@;
put 'dThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2'@;
put 'Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2Vk'@;
put 'XHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1'@;
put 'ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3'@;
put 'XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1'@;
put 'OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3'@;
put 'N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1'@;
put 'NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4'@;
put 'Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtm'@;
put 'b3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhcdTYxMjdc'@;
put 'dTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThj'@;
put 'MzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2Vc'@;
put 'dTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4'@;
put 'MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21d'@;
put 'PXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4'@;
put 'MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3'@;
put 'XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5'@;
put 'OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4'@;
put 'K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1'@;
put 'NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJh'@;
put 'MVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1'@;
put 'NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'OTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVc'@;
put 'dTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdj'@;
put 'ZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlc'@;
put 'dTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYx'@;
put 'XHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5'@;
put 'NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1'@;
put 'XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFl'@;
put 'Nlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1'@;
put 'NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJh'@;
put 'OFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5'@;
put 'NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFc'@;
put 'dTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1'@;
put 'NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9yKHhbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5'@;
put 'NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4'@;
put 'XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2'@;
put 'NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OV1bbV1dPTUwOTQ0K20sRls1MDk0NCttXT14WzE5OV1bbV0pO2Zvcih4WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1'@;
put 'NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBl'@;
put 'ZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1'@;
put 'ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDBdW21dXT01MTIwMCttLEZbNTEyMDArbV09eFsyMDBdW21dKTtmb3IoeFsyMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZc'@;
put 'dTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1'@;
put 'ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRc'@;
put 'dThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUz'@;
put 'NDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAxXVttXV09NTE0NTYrbSxGWzUxNDU2K21dPXhbMjAxXVttXSk7Zm9yKHhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVl'@;
put 'XHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4'@;
put 'YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJj'@;
put 'XHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1'@;
put 'ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMl1bbV1dPTUxNzEyK20sRls1MTcxMittXT14WzIwMl1bbV0pO2Zvcih4WzIwM109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUy'@;
put 'OVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1'@;
put 'NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVh'@;
put 'Zlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1'@;
put 'NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDNdW21dXT01MTk2OCttLEZbNTE5NjgrbV09eFsyMDNdW21dKTtmb3IoeFsyMDRd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThl'@;
put 'MGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRc'@;
put 'dTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1'@;
put 'YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJc'@;
put 'dTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA0XVttXV09NTIyMjQrbSxGWzUyMjI0K21dPXhbMjA0XVtt'@;
put 'XSk7Zm9yKHhbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1'@;
put 'ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1Zjky'@;
put 'XHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1'@;
put 'NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZh'@;
put 'XHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNV1bbV1dPTUyNDgwK20sRls1MjQ4'@;
put 'MCttXT14WzIwNV1bbV0pO2Zvcih4WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0'@;
put 'ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1'@;
put 'NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5'@;
put 'Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDZdW21dXT01'@;
put 'MjczNittLEZbNTI3MzYrbV09eFsyMDZdW21dKTtmb3IoeFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3'@;
put 'OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2Vc'@;
put 'dTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZh'@;
put 'NjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjA3XVttXV09NTI5OTIrbSxGWzUyOTkyK21dPXhbMjA3XVttXSk7Zm9yKHhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4'@;
put 'N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4'@;
put 'XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4'@;
put 'NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDhdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIwOF1bbV1dPTUzMjQ4K20sRls1MzI0OCttXT14WzIwOF1bbV0pO2Zvcih4WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1'@;
put 'OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1Nzgx'@;
put 'NFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1'@;
put 'OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjA5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDldW21dXT01MzUwNCttLEZbNTM1MDQrbV09eFsyMDldW21dKTtmb3IoeFsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZc'@;
put 'dTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5'@;
put 'MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVc'@;
put 'dThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTBdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEwXVttXV09NTM3NjArbSxGWzUzNzYwK21dPXhbMjEwXVttXSk7Zm9yKHhbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1Zjcx'@;
put 'XHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3'@;
put 'MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1'@;
put 'XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjExXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMV1bbV1dPTU0MDE2K20sRls1NDAxNittXT14WzIxMV1bbV0pO2Zvcih4WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNm'@;
put 'NFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1'@;
put 'NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVm'@;
put 'Ylx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTJdW21dXT01NDI3MittLEZbNTQyNzIrbV09eFsyMTJdW21dKTtmb3IoeFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTVi'@;
put 'ODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThc'@;
put 'dTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZk'@;
put 'NTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2Zc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEzXVttXV09NTQ1MjgrbSxGWzU0NTI4K21dPXhbMjEzXVttXSk7Zm9yKHhbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3'@;
put 'N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5'@;
put 'XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4'@;
put 'Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJl'@;
put 'XHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNF1bbV1dPTU0Nzg0K20sRls1NDc4NCttXT14WzIxNF1bbV0pO2Zvcih4WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1'@;
put 'NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0'@;
put 'Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1'@;
put 'OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTVdW21dXT01NTA0MCttLEZbNTUwNDArbV09eFsyMTVdW21dKTtmb3IoeFsyMTZdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZc'@;
put 'dTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRl'@;
put 'OTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBc'@;
put 'dTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRm'@;
put 'MDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE2XVttXV09NTUyOTYrbSxGWzU1Mjk2K21dPXhbMjE2XVttXSk7Zm9yKHhb'@;
put 'MjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMy'@;
put 'XHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1'@;
put 'MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRk'@;
put 'XHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4'@;
put 'OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxN11bbV1dPTU1NTUyK20sRls1NTU1MittXT14WzIx'@;
put 'N11bbV0pO2Zvcih4WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFj'@;
put 'N1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1'@;
put 'OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMy'@;
put 'YVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1'@;
put 'OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMThdW21dXT01NTgwOCttLEZb'@;
put 'NTU4MDgrbV09eFsyMThdW21dKTtmb3IoeFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZc'@;
put 'dTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4'@;
put 'ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRc'@;
put 'dTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE5XVtt'@;
put 'XV09NTYwNjQrbSxGWzU2MDY0K21dPXhbMjE5XVttXSk7Zm9yKHhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4'@;
put 'XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4'@;
put 'MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMx'@;
put 'XHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjBdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIyMF1bbV1dPTU2MzIwK20sRls1NjMyMCttXT14WzIyMF1bbV0pO2Zvcih4WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3'@;
put 'Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1'@;
put 'ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRk'@;
put 'M1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIxXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMjFdW21dXT01NjU3NittLEZbNTY1NzYrbV09eFsyMjFdW21dKTtmb3IoeFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1'@;
put 'YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRc'@;
put 'dTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYz'@;
put 'ZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjJdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIyMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIyXVttXV09NTY4MzIrbSxGWzU2ODMyK21dPXhbMjIyXVttXSk7Zm9yKHhbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1'@;
put 'MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0'@;
put 'XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1'@;
put 'NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIzXS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyM11bbV1dPTU3MDg4K20sRls1NzA4OCttXT14WzIyM11bbV0pO2Zvcih4WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1'@;
put 'NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVl'@;
put 'OFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1'@;
put 'NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21dKTtmb3IoeFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThc'@;
put 'dTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVk'@;
put 'NThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNc'@;
put 'dTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAwK21dPXhbMjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1'@;
put 'XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5'@;
put 'OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2'@;
put 'XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2'@;
put 'MDQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3ODU2K20sRls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4'@;
put 'Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1'@;
put 'OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1'@;
put 'NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1'@;
put 'NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjddW21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZk'@;
put 'MDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVc'@;
put 'dTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZl'@;
put 'ZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNc'@;
put 'dTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2'@;
put 'ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3'@;
put 'XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5'@;
put 'MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNi'@;
put 'XHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zv'@;
put 'cih4WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk5N1x1NTljYVx1'@;
put 'NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2'@;
put 'Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1'@;
put 'NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFh'@;
put 'Mlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09'@;
put 'eFsyMzBdW21dKTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdm'@;
put 'MDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFc'@;
put 'dTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTcz'@;
put 'ZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYr'@;
put 'bSxGWzU5MTM2K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5'@;
put 'N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1'@;
put 'XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2'@;
put 'ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIz'@;
put 'Ml1bbV1dPTU5MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1'@;
put 'Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1'@;
put 'Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1'@;
put 'OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFc'@;
put 'dTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2'@;
put 'ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2Vc'@;
put 'dTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0'@;
put 'XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4'@;
put 'MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5'@;
put 'XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM1XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNV1bbV1dPTYwMTYwK20sRls2MDE2MCttXT14WzIzNV1bbV0pO2Zvcih4WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJj'@;
put 'Mlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1'@;
put 'NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0'@;
put 'OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNl0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzZdW21dXT02MDQxNittLEZbNjA0MTYrbV09eFsyMzZdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYx'@;
put 'ZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVc'@;
put 'dTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5'@;
put 'MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3'@;
put 'N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhh'@;
put 'XHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5'@;
put 'NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1'@;
put 'OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUz'@;
put 'Mlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1'@;
put 'OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2Ex'@;
put 'ZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzldW21dXT02MTE4NCttLEZbNjExODQrbV09eFsyMzldW21dKTtmb3IoeFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVc'@;
put 'dTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTll'@;
put 'NDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNc'@;
put 'dTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2'@;
put 'MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQwXVttXV09NjE0NDArbSxGWzYxNDQwK21dPXhbMjQwXVttXSk7Zm9yKHhbMjQxXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJk'@;
put 'XHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4'@;
put 'ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJi'@;
put 'XHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4'@;
put 'MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MV1bbV1dPTYxNjk2K20sRls2MTY5NittXT14WzI0MV1bbV0pO2Zvcih4WzI0Ml09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4'@;
put 'Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1'@;
put 'ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcw'@;
put 'YVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1'@;
put 'ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDJdW21dXT02MTk1MittLEZbNjE5NTIrbV09eFsyNDJdW21d'@;
put 'KTtmb3IoeFsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3'@;
put 'ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2Nc'@;
put 'dTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdi'@;
put 'NWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRc'@;
put 'dTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQzXVttXV09NjIyMDgrbSxGWzYyMjA4'@;
put 'K21dPXhbMjQzXVttXSk7Zm9yKHhbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRi'@;
put 'XHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3'@;
put 'Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0'@;
put 'XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NF1bbV1dPTYy'@;
put 'NDY0K20sRls2MjQ2NCttXT14WzI0NF1bbV0pO2Zvcih4WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1'@;
put 'NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1'@;
put 'OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5'@;
put 'NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsyNDVdW21dXT02MjcyMCttLEZbNjI3MjArbV09eFsyNDVdW21dKTtmb3IoeFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlm'@;
put 'ODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZc'@;
put 'dTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTlj'@;
put 'YjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Nl1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMjQ2XVttXV09NjI5NzYrbSxGWzYyOTc2K21dPXhbMjQ2XVttXSk7Zm9yKHhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5'@;
put 'N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBk'@;
put 'XHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5'@;
put 'ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy'@;
put 'NDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0N11bbV1dPTYzMjMyK20sRls2MzIzMittXT14WzI0N11bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLExlWzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy'@;
put 'XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6'@;
put 'e3x9flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUw'@;
put 'MTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNl'@;
put 'XHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUw'@;
put 'MTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAx'@;
put 'NzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLExlWzEw'@;
put 'MDc5XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2'@;
put 'Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVm'@;
put 'XHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBc'@;
put 'dTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIw'@;
put 'NDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRc'@;
put 'dTAyZGJcdTAyYzciLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4'@;
put 'MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ'@;
put 'WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhm'@;
put 'Ylx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4'@;
put 'YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZc'@;
put 'dTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGFlPVtdLHg9'@;
put 'e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxMZVsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw'@;
put 'N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xt'@;
put 'bm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEz'@;
put 'XHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2Nc'@;
put 'eGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4'@;
put 'ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxhdC5leHBvcnRzJiZ0'@;
put 'eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSImJihhdC5leHBvcnRzPUxlKSxmdW5jdGlvbihGLGFlKXsidXNlIHN0cmljdCI7aWYodHlwZW9mIExlPiJ1Iil7dmFyIHg9TGU7YXQuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBBR0U+InUiP2F0LmV4cG9ydHM9YWUo'@;
put 'eCk6Ri5jcHRhYmxlPWFlKHgpfWVsc2UgTGU9YWUoTGUpfSh0aGlzLGZ1bmN0aW9uKEYpeyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9ezEyMDA6InV0ZjE2bGUiLDEyMDE6InV0ZjE2YmUiLDEyZTM6InV0ZjMybGUiLDEyMDAxOiJ1dGYzMmJlIiwxNjk2OToidXRmNjRsZSIsMjAxMjc6ImFzY2lpIiw2'@;
put 'NWUzOiJ1dGY3Iiw2NTAwMToidXRmOCJ9LHg9Wzg3NCwxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1NSwxMjU2LDFlNF0sbT1bOTMyLDkzNiw5NDksOTUwXSxsZT1bNjUwMDFdLE09e30sTz17fSxSPXt9LHo9e30sSz1mdW5jdGlvbihTKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShT'@;
put 'KX0sTD1mdW5jdGlvbihTKXtyZXR1cm4gUy5jaGFyQ29kZUF0KDApfSxrPXR5cGVvZiBCdWZmZXI8InUiLEU9ZnVuY3Rpb24oKXt9O2lmKGspe3ZhciBqPSFCdWZmZXIuZnJvbTtpZighail0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtqPSEwfUU9aj9mdW5jdGlvbihDLFMp'@;
put 'e3JldHVybiBTP25ldyBCdWZmZXIoQyxTKTpuZXcgQnVmZmVyKEMpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgQnVmZmVyKEMpfSk7dmFyIFY9MTAyNCxCPUJ1ZmZlci5hbGxv'@;
put 'Y1Vuc2FmZShWKSxYPWZ1bmN0aW9uKFMpe3ZhciB2PWZ1bmN0aW9uKFMpe2Zvcih2YXIgdj1CdWZmZXIuYWxsb2NVbnNhZmUoNjU1MzYpLHA9MDtwPDY1NTM2OysrcCl2W3BdPTA7Zm9yKHZhciB3PU9iamVjdC5rZXlzKFMpLEo9dy5sZW5ndGgsbmU9MCxkZT13W25lXTtuZTxKOysrbmUpKGRl'@;
put 'PXdbbmVdKSYmKHZbZGUuY2hhckNvZGVBdCgwKV09U1tkZV0pO3JldHVybiB2fShGW1NdLmVuYyk7cmV0dXJuIGZ1bmN0aW9uKHcsSil7dmFyIGRlLG5lPXcubGVuZ3RoLGZlPTAseGU9MCxJZT0wLEZlPTA7aWYoInN0cmluZyI9PXR5cGVvZiB3KWZvcihkZT1CdWZmZXIuYWxsb2NVbnNhZmUo'@;
put 'bmUpLGZlPTA7ZmU8bmU7KytmZSlkZVtmZV09dlt3LmNoYXJDb2RlQXQoZmUpXTtlbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcih3KSl7Zm9yKGRlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKm5lKSx4ZT0wLGZlPTA7ZmU8bmU7KytmZSkoSWU9d1tmZV0pPDEyOD9kZVt4ZSsrXT12W0llXTpJZTwyMjQ/'@;
put 'KGRlW3hlKytdPXZbKCgzMSZJZSk8PDYpKyg2MyZ3W2ZlKzFdKV0sKytmZSk6SWU8MjQwPyhkZVt4ZSsrXT12WygoMTUmSWUpPDwxMikrKCg2MyZ3W2ZlKzFdKTw8NikrKDYzJndbZmUrMl0pXSxmZSs9Mik6KEZlPSgoNyZJZSk8PDE4KSsoKDYzJndbZmUrMV0pPDwxMikrKCg2MyZ3W2ZlKzJd'@;
put 'KTw8NikrKDYzJndbZmUrM10pLGZlKz0zLEZlPDY1NTM2P2RlW3hlKytdPXZbRmVdOihkZVt4ZSsrXT12WzU1Mjk2KygoRmUtPTY1NTM2KT4+MTAmMTAyMyldLGRlW3hlKytdPXZbNTYzMjArKDEwMjMmRmUpXSkpO2RlPWRlLnNsaWNlKDAseGUpfWVsc2UgZm9yKGRlPUJ1ZmZlci5hbGxvY1Vu'@;
put 'c2FmZShuZSksZmU9MDtmZTxuZTsrK2ZlKWRlW2ZlXT12W3dbZmVdLmNoYXJDb2RlQXQoMCldO3JldHVybiBKJiYiYnVmIiE9PUo/ImFyciIhPT1KP2RlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGRlKTpkZX19LFU9ZnVuY3Rpb24oUyl7dmFyIHY9RltTXS5kZWMscD1CdWZm'@;
put 'ZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSx3PTAsSj0iIjtmb3Iodz0wO3c8di5sZW5ndGg7Kyt3KWlmKEo9dlt3XSl7dmFyIG5lPUouY2hhckNvZGVBdCgwKTtwWzIqd109MjU1Jm5lLHBbMip3KzFdPW5lPj44fXJldHVybiBmdW5jdGlvbihmZSl7dmFyIHhlPWZlLmxlbmd0aCxJZT0wLEZlPTA7'@;
put 'aWYoMip4ZT5WJiYoVj0yKnhlLEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpKSxCdWZmZXIuaXNCdWZmZXIoZmUpKWZvcihJZT0wO0llPHhlO0llKyspQlsyKkllXT1wW0ZlPTIqZmVbSWVdXSxCWzIqSWUrMV09cFtGZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZmUpZm9yKEllPTA7SWU8'@;
put 'eGU7SWUrKylGZT0yKmZlLmNoYXJDb2RlQXQoSWUpLEJbMipJZV09cFtGZV0sQlsyKkllKzFdPXBbRmUrMV07ZWxzZSBmb3IoSWU9MDtJZTx4ZTtJZSsrKUJbMipJZV09cFtGZT0yKmZlW0llXV0sQlsyKkllKzFdPXBbRmUrMV07cmV0dXJuIEIuc2xpY2UoMCwyKnhlKS50b1N0cmluZygidWNz'@;
put 'MiIpfX0scT1mdW5jdGlvbihTKXtmb3IodmFyIHY9RltTXS5lbmMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSx3PTA7dzwxMzEwNzI7Kyt3KXBbd109MDtmb3IodmFyIEo9T2JqZWN0LmtleXModiksbmU9MCxkZT1KW25lXTtuZTxKLmxlbmd0aDsrK25lKWlmKGRlPUpbbmVdKXt2YXIg'@;
put 'ZmU9ZGUuY2hhckNvZGVBdCgwKTtwWzIqZmVdPTI1NSZ2W2RlXSxwWzIqZmUrMV09dltkZV0+Pjh9cmV0dXJuIGZ1bmN0aW9uKEllLEZlKXt2YXIgT2U9SWUubGVuZ3RoLGplPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKk9lKSxXZT0wLEtlPTAsWWU9MCxRZT0wLGx0PTA7aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBJZSl7Zm9yKFdlPVFlPTA7V2U8T2U7KytXZSlLZT0yKkllLmNoYXJDb2RlQXQoV2UpLGplW1FlKytdPXBbS2UrMV18fHBbS2VdLHBbS2UrMV0+MCYmKGplW1FlKytdPXBbS2VdKTtqZT1qZS5zbGljZSgwLFFlKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihJZSkpe2ZvcihXZT1RZT0w'@;
put 'O1dlPE9lOysrV2UpKGx0PUllW1dlXSk8MTI4P0tlPWx0Omx0PDIyND8oS2U9KCgzMSZsdCk8PDYpKyg2MyZJZVtXZSsxXSksKytXZSk6bHQ8MjQwPyhLZT0oKDE1Jmx0KTw8MTIpKygoNjMmSWVbV2UrMV0pPDw2KSsoNjMmSWVbV2UrMl0pLFdlKz0yKTooS2U9KCg3Jmx0KTw8MTgpKygoNjMm'@;
put 'SWVbV2UrMV0pPDwxMikrKCg2MyZJZVtXZSsyXSk8PDYpKyg2MyZJZVtXZSszXSksV2UrPTMpLEtlPDY1NTM2PyhqZVtRZSsrXT1wWzErKEtlKj0yKV18fHBbS2VdLHBbS2UrMV0+MCYmKGplW1FlKytdPXBbS2VdKSk6KGplW1FlKytdPXBbMSsoS2U9MiooNTUyOTYrKChZZT1LZS02NTUzNik+'@;
put 'PjEwJjEwMjMpKSldfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtRZSsrXT1wW0tlXSksamVbUWUrK109cFsxKyhLZT0yKig1NjMyMCsoMTAyMyZZZSkpKV18fHBbS2VdLHBbS2UrMV0+MCYmKGplW1FlKytdPXBbS2VdKSk7amU9amUuc2xpY2UoMCxRZSl9ZWxzZSBmb3IoV2U9UWU9MDtXZTxPZTtX'@;
put 'ZSsrKUtlPTIqSWVbV2VdLmNoYXJDb2RlQXQoMCksamVbUWUrK109cFtLZSsxXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbUWUrK109cFtLZV0pO3JldHVybiBGZSYmImJ1ZiIhPT1GZT8iYXJyIiE9PUZlP2plLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGplKTpqZX19LGVlPWZ1'@;
put 'bmN0aW9uKFMpe3ZhciBKLHY9RltTXS5kZWMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSx3PTAsbmU9MCxkZT0wLGZlPTA7Zm9yKGZlPTA7ZmU8NjU1MzY7KytmZSlwWzIqZmVdPTI1NSxwWzIqZmUrMV09MjUzO2Zvcih3PTA7dzx2Lmxlbmd0aDsrK3cpKEo9dlt3XSkmJihuZT1KLmNo'@;
put 'YXJDb2RlQXQoMCkscFtkZT0yKnddPTI1NSZuZSxwW2RlKzFdPW5lPj44KTtyZXR1cm4gZnVuY3Rpb24oSWUpe3ZhciBGZT1JZS5sZW5ndGgsT2U9QnVmZmVyLmFsbG9jVW5zYWZlKDIqRmUpLGplPTAsV2U9MCxLZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihJZSkpZm9yKGplPTA7amU8RmU7amUr'@;
put 'KykyNTU9PT1wW1dlPTIqSWVbamVdXSYmMjUzPT09cFtXZSsxXSYmKFdlPTIqKChJZVtqZV08PDgpK0llW2plKzFdKSwrK2plKSxPZVtLZSsrXT1wW1dlXSxPZVtLZSsrXT1wW1dlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBJZSlmb3IoamU9MDtqZTxGZTtqZSsrKVdlPTIqSWUuY2hh'@;
put 'ckNvZGVBdChqZSksMjU1PT09cFtXZV0mJjI1Mz09PXBbV2UrMV0mJihXZT0yKigoSWUuY2hhckNvZGVBdChqZSk8PDgpK0llLmNoYXJDb2RlQXQoamUrMSkpLCsramUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytdPXBbV2UrMV07ZWxzZSBmb3IoamU9MDtqZTxGZTtqZSsrKTI1NT09PXBbV2U9'@;
put 'MipJZVtqZV1dJiYyNTM9PT1wW1dlKzFdJiYoV2U9MiooKEllW2plXTw8OCkrSWVbamUrMV0pLCsramUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytdPXBbV2UrMV07cmV0dXJuIE9lLnNsaWNlKDAsS2UpLnRvU3RyaW5nKCJ1Y3MyIil9fTtNWzY1MDAxXT1mdW5jdGlvbiBDKFMpe2lmKCJzdHJp'@;
put 'bmciPT10eXBlb2YgUylyZXR1cm4gQyhTLnNwbGl0KCIiKS5tYXAoTCkpO3ZhciB2PVMubGVuZ3RoLHA9MCx3PTA7NCp2PlYmJihWPTQqdixCPUJ1ZmZlci5hbGxvY1Vuc2FmZShWKSk7dmFyIEo9MDt2Pj0zJiYyMzk9PVNbMF0mJjE4Nz09U1sxXSYmMTkxPT1TWzJdJiYoSj0zKTtmb3IodmFy'@;
put 'IG5lPTEsZGU9MCxmZT0wO0o8djtKKz1uZSluZT0xLChmZT1TW0pdKTwxMjg/cD1mZTpmZTwyMjQ/KHA9NjQqKDMxJmZlKSsoNjMmU1tKKzFdKSxuZT0yKTpmZTwyNDA/KHA9KCgxNSZmZSk8PDEyKSs2NCooNjMmU1tKKzFdKSsoNjMmU1tKKzJdKSxuZT0zKToocD0yNjIxNDQqKDcmZmUpKygo'@;
put 'NjMmU1tKKzFdKTw8MTIpKzY0Kig2MyZTW0orMl0pKyg2MyZTW0orM10pLG5lPTQpLHA8NjU1MzY/KEJbZGUrK109MjU1JnAsQltkZSsrXT1wPj44KToodz01NTI5NisoKHAtPTY1NTM2KT4+MTAmMTAyMykscD01NjMyMCsoMTAyMyZwKSxCW2RlKytdPTI1NSZ3LEJbZGUrK109dz4+PjgsQltk'@;
put 'ZSsrXT0yNTUmcCxCW2RlKytdPXA+Pj44JjI1NSk7cmV0dXJuIEIuc2xpY2UoMCxkZSkudG9TdHJpbmcoInVjczIiKX0sT1s2NTAwMV09ZnVuY3Rpb24oUyx2KXtpZihrJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIHYmJiJidWYiIT09dj8iYXJyIiE9PXY/Uy50b1N0cmluZygiYmluYXJ5'@;
put 'Iik6W10uc2xpY2UuY2FsbChTKTpTO3ZhciBwPVMubGVuZ3RoLHc9MCxKPTAsbmU9MCxkZT0ic3RyaW5nIj09dHlwZW9mIFM7NCpwPlYmJihWPTQqcCxCPUJ1ZmZlci5hbGxvY1Vuc2FmZShWKSk7Zm9yKHZhciBmZT0wO2ZlPHA7KytmZSkodz1kZT9TLmNoYXJDb2RlQXQoZmUpOlNbZmVdLmNo'@;
put 'YXJDb2RlQXQoMCkpPD0xMjc/QltuZSsrXT13Onc8PTIwNDc/KEJbbmUrK109MTkyKyh3Pj42KSxCW25lKytdPTEyOCsoNjMmdykpOnc+PTU1Mjk2JiZ3PD01NzM0Mz8ody09NTUyOTYsKytmZSxKPShkZT9TLmNoYXJDb2RlQXQoZmUpOlNbZmVdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyh3PDwx'@;
put 'MCksQltuZSsrXT0yNDArKEo+Pj4xOCY3KSxCW25lKytdPTE0NCsoSj4+PjEyJjYzKSxCW25lKytdPTEyOCsoSj4+PjYmNjMpLEJbbmUrK109MTI4Kyg2MyZKKSk6KEJbbmUrK109MjI0Kyh3Pj4xMiksQltuZSsrXT0xMjgrKHc+PjYmNjMpLEJbbmUrK109MTI4Kyg2MyZ3KSk7cmV0dXJuIHYm'@;
put 'JiJidWYiIT09dj8iYXJyIiE9PXY/Qi5zbGljZSgwLG5lKS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChCLDAsbmUpOkIuc2xpY2UoMCxuZSl9fXZhciB0ZT1mdW5jdGlvbigpe2lmKGspe2lmKFJbeFswXV0pcmV0dXJuO3ZhciBTPTAsdj0wO2ZvcihTPTA7Uzx4Lmxlbmd0aDsr'@;
put 'K1MpRlt2PXhbU11dJiYoUlt2XT1VKHYpLHpbdl09WCh2KSk7Zm9yKFM9MDtTPG0ubGVuZ3RoOysrUylGW3Y9bVtTXV0mJihSW3ZdPWVlKHYpLHpbdl09cSh2KSk7Zm9yKFM9MDtTPGxlLmxlbmd0aDsrK1MpTVt2PWxlW1NdXSYmKFJbdl09TVt2XSksT1t2XSYmKHpbdl09T1t2XSl9fSxvZT1m'@;
put 'dW5jdGlvbihDLFMpe3JldHVybiIifSxzZT1mdW5jdGlvbihTKXtkZWxldGUgUltTXSxkZWxldGUgeltTXX0sdWU9e2VuY2FjaGU6dGUsZGVjYWNoZTpmdW5jdGlvbigpe2lmKGspe2lmKCFSW3hbMF1dKXJldHVybjt4LmZvckVhY2goc2UpLG0uZm9yRWFjaChzZSksbGUuZm9yRWFjaChzZSl9'@;
put 'Yj1vZSxEPTB9LHNiY3M6eCxkYmNzOm19O3RlKCk7dmFyIGNlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixiPW9lLEQ9MDtyZXR1cm4gRi51dGlscz17ZGVjb2RlOmZ1bmN0aW9uIEMoUyx2KXt2YXIgcDtpZihwPVJb'@;
put 'U10pcmV0dXJuIHAodik7aWYoInN0cmluZyI9PXR5cGVvZiB2KXJldHVybiBDKFMsdi5zcGxpdCgiIikubWFwKEwpKTt2YXIgamUsdz12Lmxlbmd0aCxKPW5ldyBBcnJheSh3KSxuZT0iIixkZT0wLGZlPTAseGU9MSxJZT0wLEZlPTAsT2U9RltTXSxXZT0iIjtpZihPZSYmKGplPU9lLmRlYykp'@;
put 'Zm9yKGZlPTA7ZmU8dztmZSs9eGUpe2lmKHhlPTIsKG5lPWplWyh2W2ZlXTw8OCkrdltmZSsxXV0pfHwoeGU9MSxuZT1qZVt2W2ZlXV0pLCFuZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBjb2RlOiAiK3ZbZmVdKyIgIit2W2ZlK3hlLTFdKyIgIitmZSsiICIreGUrIiAiK2plW3Zb'@;
put 'ZmVdXSk7SltJZSsrXT1uZX1lbHNle2lmKCEoV2U9YWVbU10pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK1MpO3N3aXRjaChXZSl7Y2FzZSJ1dGY4Ijpmb3Iodz49MyYmMjM5PT12WzBdJiYxODc9PXZbMV0mJjE5MT09dlsyXSYmKGZlPTMpO2ZlPHc7ZmUrPXhlKXhlPTEs'@;
put 'dltmZV08MTI4P2RlPXZbZmVdOnZbZmVdPDIyND8oZGU9NjQqKDMxJnZbZmVdKSsoNjMmdltmZSsxXSkseGU9Mik6dltmZV08MjQwPyhkZT0oKDE1JnZbZmVdKTw8MTIpKzY0Kig2MyZ2W2ZlKzFdKSsoNjMmdltmZSsyXSkseGU9Myk6KGRlPTI2MjE0NCooNyZ2W2ZlXSkrKCg2MyZ2W2ZlKzFd'@;
put 'KTw8MTIpKzY0Kig2MyZ2W2ZlKzJdKSsoNjMmdltmZSszXSkseGU9NCksZGU8NjU1MzZ8fChGZT01NTI5NisoKGRlLT02NTUzNik+PjEwJjEwMjMpLGRlPTU2MzIwKygxMDIzJmRlKSxKW0llKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoRmUpKSxKW0llKytdPVN0cmluZy5mcm9tQ2hhckNvZGUo'@;
put 'ZGUpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKGsmJkJ1ZmZlci5pc0J1ZmZlcih2KSlyZXR1cm4gdi50b1N0cmluZyhXZSk7Zm9yKGZlPTA7ZmU8dztmZSsrKUpbZmVdPVN0cmluZy5mcm9tQ2hhckNvZGUodltmZV0pO0llPXc7YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZih3Pj0yJiYyNTU9PXZbMF0m'@;
put 'JjI1ND09dlsxXSYmKGZlPTIpLGsmJkJ1ZmZlci5pc0J1ZmZlcih2KSlyZXR1cm4gdi50b1N0cmluZyhXZSk7Zm9yKHhlPTI7ZmUrMTx3O2ZlKz14ZSlKW0llKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKHZbZmUrMV08PDgpK3ZbZmVdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcih3Pj0yJiYy'@;
put 'NTQ9PXZbMF0mJjI1NT09dlsxXSYmKGZlPTIpLHhlPTI7ZmUrMTx3O2ZlKz14ZSlKW0llKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKHZbZmVdPDw4KSt2W2ZlKzFdKTticmVhaztjYXNlInV0ZjMybGUiOmZvcih3Pj00JiYyNTU9PXZbMF0mJjI1ND09dlsxXSYmMD09PXZbMl0mJjA9PT12WzNd'@;
put 'JiYoZmU9NCkseGU9NDtmZTx3O2ZlKz14ZSkoZGU9KHZbZmUrM108PDI0KSsodltmZSsyXTw8MTYpKyh2W2ZlKzFdPDw4KSt2W2ZlXSk+NjU1MzU/KGRlLT02NTUzNixKW0llKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGRlPj4xMCYxMDIzKSksSltJZSsrXT1TdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKDU2MzIwKygxMDIzJmRlKSkpOkpbSWUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3Iodz49NCYmMjU1PT12WzNdJiYyNTQ9PXZbMl0mJjA9PT12WzFdJiYwPT09dlswXSYmKGZlPTQpLHhlPTQ7ZmU8dztmZSs9eGUpKGRlPSh2W2ZlXTw8'@;
put 'MjQpKyh2W2ZlKzFdPDwxNikrKHZbZmUrMl08PDgpK3ZbZmUrM10pPjY1NTM1PyhkZS09NjU1MzYsSltJZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhkZT4+MTAmMTAyMykpLEpbSWUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZkZSkpKTpKW0llKytdPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoZGUpO2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHc+PTQmJjQzPT12WzBdJiY0Nz09dlsxXSYmMTE4PT12WzJdJiYodz49NSYmNTY9PXZbM10mJjQ1PT12WzRdP2ZlPTU6KDU2PT12WzNdfHw1Nz09dlszXXx8NDM9PXZbM118fDQ3PT12WzNdKSYmKGZlPTQpKTtmZTx3O2Zl'@;
put 'Kz14ZSlpZig0Mz09PXZbZmVdKWlmKHhlPTEsNDUhPT12W2ZlKzFdKXtmb3IoO1N0cmluZy5mcm9tQ2hhckNvZGUodltmZSt4ZV0pLm1hdGNoKC9bQS1aYS16MC05K1wvXS8pOyl4ZSsrO3ZhciBLZT0wOzQ1PT09dltmZSt4ZV0mJigrK3hlLEtlPTEpO2Zvcih2YXIgWWU9W10sUWU9IiIsQWU9'@;
put 'MCxUZT0wLHFlPTAsWGU9MCxVZT0xO1VlPHhlLUtlJiYoQWU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSxUZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUodltmZStVZSsrXSkpLFllLnB1c2goQWU8PDJ8VGU+PjQpLC0xIT09KHFlPWNlLmluZGV4'@;
put 'T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSkpJiYoWWUucHVzaCgoMTUmVGUpPDw0fHFlPj4yKSwtMSE9PShYZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUodltmZStVZSsrXSkpKSkpOylYZTw2NCYmWWUucHVzaCgoMyZxZSk8PDZ8WGUpO2ZvcihRZT1DKDEyMDEs'@;
put 'WWUpLFVlPTA7VWU8UWUubGVuZ3RoOysrVWUpSltJZSsrXT1RZS5jaGFyQXQoVWUpfWVsc2UgeGU9MixKW0llKytdPSIrIjtlbHNlIHhlPTEsSltJZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmVdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6'@;
put 'ICIrUysiICIrYWVbU10pfX1yZXR1cm4gSi5zbGljZSgwLEllKS5qb2luKCIiKX0sZW5jb2RlOmZ1bmN0aW9uIEMoUyx2LHApe2lmKFM9PT1EJiZiKXJldHVybiBiKHYscCk7aWYoeltTXSlyZXR1cm4oYj16W0Q9U10pKHYscCk7ayYmQnVmZmVyLmlzQnVmZmVyKHYpJiYodj12LnRvU3RyaW5n'@;
put 'KCJ1dGY4IikpO3ZhciBGZSx3PXYubGVuZ3RoLEo9az9CdWZmZXIuYWxsb2NVbnNhZmUoNCp3KTpbXSxuZT0wLGRlPTAsZmU9MCx4ZT0wLEllPUZbU10sT2U9IiIsamU9InN0cmluZyI9PXR5cGVvZiB2O2lmKEllJiYoRmU9SWUuZW5jKSlmb3IoZGU9MDtkZTx3OysrZGUsKytmZSkobmU9RmVb'@;
put 'amU/di5jaGFyQXQoZGUpOnZbZGVdXSk+MjU1PyhKW2ZlXT1uZT4+OCxKWysrZmVdPTI1NSZuZSk6SltmZV09MjU1Jm5lO2Vsc2V7aWYoIShPZT1hZVtTXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrUyk7c3dpdGNoKE9lKXtjYXNlInV0ZjgiOmlmKGsmJmplKXtmZT0o'@;
put 'Sj1FKHYsT2UpKS5sZW5ndGg7YnJlYWt9Zm9yKGRlPTA7ZGU8dzsrK2RlLCsrZmUpKG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9KW2ZlXT1uZTpuZTw9MjA0Nz8oSltmZV09MTkyKyhuZT4+NiksSlsrK2ZlXT0xMjgrKDYzJm5lKSk6bmU+PTU1Mjk2'@;
put 'JiZuZTw9NTczNDM/KG5lLT01NTI5Nix4ZT0oamU/di5jaGFyQ29kZUF0KCsrZGUpOnZbKytkZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKG5lPDwxMCksSltmZV09MjQwKyh4ZT4+PjE4JjcpLEpbKytmZV09MTQ0Kyh4ZT4+PjEyJjYzKSxKWysrZmVdPTEyOCsoeGU+Pj42JjYzKSxKWysrZmVd'@;
put 'PTEyOCsoNjMmeGUpKTooSltmZV09MjI0KyhuZT4+MTIpLEpbKytmZV09MTI4KyhuZT4+NiY2MyksSlsrK2ZlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoayYmInN0cmluZyI9PXR5cGVvZiB2KXtmZT0oSj1FKHYsT2UpKS5sZW5ndGg7YnJlYWt9Zm9yKGRlPTA7ZGU8dzsr'@;
put 'K2RlLCsrZmUpe2lmKCEoKG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk8PTEyNykpdGhyb3cgbmV3IEVycm9yKCJiYWQgYXNjaWkgIituZSk7SltmZV09bmV9YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihrJiYic3RyaW5nIj09dHlwZW9mIHYpe2ZlPShKPUUodixP'@;
put 'ZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUpbmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApLEpbZmUrK109MjU1Jm5lLEpbZmUrK109bmU+Pjg7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3IoZGU9MDtkZTx3OysrZGUpbmU9amU/di5jaGFyQ29kZUF0'@;
put 'KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApLEpbZmUrK109bmU+PjgsSltmZSsrXT0yNTUmbmU7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoZGU9MDtkZTx3OysrZGUpKG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUz'@;
put 'NisobmUtNTUyOTY8PDEwKSsodlsrK2RlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksSltmZSsrXT0yNTUmbmUsSltmZSsrXT0yNTUmKG5lPj49OCksSltmZSsrXT0yNTUmKG5lPj49OCksSltmZSsrXT0yNTUmKG5lPj49OCk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3IoZGU9MDtkZTx3OysrZGUp'@;
put 'KG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsodlsrK2RlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksSltmZSszXT0yNTUmbmUsSltmZSsyXT0yNTUmKG5lPj49OCksSltmZSsxXT0y'@;
put 'NTUmKG5lPj49OCksSltmZV09MjU1JihuZT4+PTgpLGZlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKGRlPTA7ZGU8dztkZSsrKXt2YXIgV2U9amU/di5jaGFyQXQoZGUpOnZbZGVdLmNoYXJBdCgwKTtpZigiKyIhPT1XZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlq'@;
put 'a2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoV2UpPi0xKUpbZmUrK109V2UuY2hhckNvZGVBdCgwKTtlbHNle3ZhciBLZT1DKDEyMDEsV2UpO0pbZmUrK109NDMsSltmZSsrXT1jZS5jaGFyQ29kZUF0KEtlWzBdPj4yKSxKW2ZlKytdPWNlLmNoYXJDb2RlQXQo'@;
put 'KCgzJktlWzBdKTw8NCkrKChLZVsxXXx8MCk+PjQpKSxKW2ZlKytdPWNlLmNoYXJDb2RlQXQoKCgxNSZLZVsxXSk8PDIpKygoS2VbMl18fDApPj42KSksSltmZSsrXT00NX1lbHNlIEpbZmUrK109NDMsSltmZSsrXT00NX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0'@;
put 'ZWQgbWFnaWM6ICIrUysiICIrYWVbU10pfX1yZXR1cm4gSj1KLnNsaWNlKDAsZmUpLGs/cCYmImJ1ZiIhPT1wPyJhcnIiIT09cD9KLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKEopOko6InN0ciI9PXA/Si5tYXAoSykuam9pbigiIik6Sn0saGFzY3A6ZnVuY3Rpb24oUyl7cmV0'@;
put 'dXJuISghRltTXSYmIWFlW1NdKX0sbWFnaWM6YWUsY2FjaGU6dWV9LEZ9KX0sNzU0NDY6KGF0LExlKT0+e3ZhciBGLGFlLHg7IWZ1bmN0aW9uKG0pe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilhdC5leHBvcnRzPW0oKTtlbHNlIGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pT'@;
put 'WklQPiJ1IilKU1ppcFN5bmM9bSgpLGFlPVtdLHZvaWQgMCE9PSh4PSJmdW5jdGlvbiI9PXR5cGVvZihGPW0pP0YuYXBwbHkoTGUsYWUpOkYpJiYoYXQuZXhwb3J0cz14KTtlbHNle3ZhciBsZTt0eXBlb2YgZ2xvYmFsVGhpczwidSI/bGU9Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij9s'@;
put 'ZT13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/bGU9Z2xvYmFsOnR5cGVvZiAkPCJ1IiYmJC5nbG9iYWw/bGU9JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYobGU9c2VsZiksbGUuSlNaaXBTeW5jPW0oKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIE8oUix6LEspe2Z1bmN0aW9uIEwo'@;
put 'aixWKXtpZigheltqXSl7aWYoIVJbal0pe2lmKGspcmV0dXJuIGsoaiwhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraisiJyIpfXZhciBZPXpbal09e2V4cG9ydHM6e319O1Jbal1bMF0uY2FsbChZLmV4cG9ydHMsZnVuY3Rpb24oWCl7cmV0dXJuIEwoUltqXVsx'@;
put 'XVtYXXx8WCl9LFksWS5leHBvcnRzLE8sUix6LEspfXJldHVybiB6W2pdLmV4cG9ydHN9Zm9yKHZhciBrPXZvaWQgMCxFPTA7RTxLLmxlbmd0aDtFKyspTChLW0VdKTtyZXR1cm4gTH0oezE6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9IkFCQ0RFRkdISUpLTE1OT1BRUlNU'@;
put 'VVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ijt6LmVuY29kZT1mdW5jdGlvbihMLGspe2Zvcih2YXIgaixWLEIsWSxYLFUscSxFPSIiLGVlPTA7ZWU8TC5sZW5ndGg7KVk9KGo9TC5jaGFyQ29kZUF0KGVlKyspKT4+MixYPSgzJmopPDw0fChWPUwuY2hhckNv'@;
put 'ZGVBdChlZSsrKSk+PjQsVT0oMTUmVik8PDJ8KEI9TC5jaGFyQ29kZUF0KGVlKyspKT4+NixxPTYzJkIsaXNOYU4oVik/VT1xPTY0OmlzTmFOKEIpJiYocT02NCksRT1FK0suY2hhckF0KFkpK0suY2hhckF0KFgpK0suY2hhckF0KFUpK0suY2hhckF0KHEpO3JldHVybiBFfSx6LmRlY29kZT1m'@;
put 'dW5jdGlvbihMLGspe3ZhciBWLEIsWSxYLFUscSxFPSIiLGVlPTA7Zm9yKEw9TC5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZWU8TC5sZW5ndGg7KVk9Sy5pbmRleE9mKEwuY2hhckF0KGVlKyspKSxWPSgxNSYoWD1LLmluZGV4T2YoTC5jaGFyQXQoZWUrKykpKSk8PDR8KFU9'@;
put 'Sy5pbmRleE9mKEwuY2hhckF0KGVlKyspKSk+PjIsQj0oMyZVKTw8NnwocT1LLmluZGV4T2YoTC5jaGFyQXQoZWUrKykpKSxFKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFk8PDJ8WD4+NCksNjQhPVUmJihFKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFYpKSw2NCE9cSYmKEUrPVN0cmluZy5mcm9tQ2hh'@;
put 'ckNvZGUoQikpO3JldHVybiBFfX0se31dLDI6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSygpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29t'@;
put 'cHJlc3NlZENvbnRlbnQ9bnVsbH1LLnByb3RvdHlwZT17Z2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sUi5leHBvcnRzPUt9LHt9XSwzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ou'@;
put 'U1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpmdW5jdGlvbihLKXtyZXR1cm4gS30sdW5jb21wcmVzczpmdW5jdGlvbihLKXtyZXR1cm4gS30sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LHouREVGTEFURT1PKCIuL2ZsYXRlIil9LHsiLi9mbGF0'@;
put 'ZSI6OH1dLDQ6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEw9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIx'@;
put 'MTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1'@;
put 'Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwx'@;
put 'MTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEy'@;
put 'NjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1'@;
put 'OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQx'@;
put 'MTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUy'@;
put 'MTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYz'@;
put 'NSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2'@;
put 'NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3'@;
put 'MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYs'@;
put 'MzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4'@;
put 'MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTky'@;
put 'Mjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwx'@;
put 'NzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgw'@;
put 'MDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEw'@;
put 'OCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtS'@;
put 'LmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXtpZih0eXBlb2YgRT4idSJ8fCFFLmxlbmd0aClyZXR1cm4gMDt2YXIgVj0ic3RyaW5nIiE9PUsuZ2V0VHlwZU9mKEUpO3R5cGVvZiBqPiJ1IiYmKGo9MCk7dmFyIFg9MDtqXj0tMTtmb3IodmFyIFU9MCxxPUUubGVuZ3RoO1U8cTtVKyspWD1WP0VbVV06'@;
put 'RS5jaGFyQ29kZUF0KFUpLGo9aj4+PjheTFsyNTUmKGpeWCldO3JldHVybi0xXmp9fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIik7ZnVuY3Rpb24gTChrKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMu'@;
put 'aW5kZXg9MH1MLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oayl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrayl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oayl7aWYodGhpcy5sZW5ndGg8a3x8azwwKXRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBs'@;
put 'ZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2VkIGluZGV4ID0gIitrKyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oayl7dGhpcy5jaGVja0luZGV4KGspLHRoaXMuaW5kZXg9a30sc2tpcDpmdW5jdGlvbihrKXt0aGlzLnNldEluZGV4KHRoaXMuaW5kZXgrayl9'@;
put 'LGJ5dGVBdDpmdW5jdGlvbihrKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oayl7dmFyIGosRT0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGspLGo9dGhpcy5pbmRleCtrLTE7aj49dGhpcy5pbmRleDtqLS0pRT0oRTw8OCkrdGhpcy5ieXRlQXQoaik7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0scmVhZFN0'@;
put 'cmluZzpmdW5jdGlvbihrKXtyZXR1cm4gSy50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKGspKX0scmVhZERhdGE6ZnVuY3Rpb24oayl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihrKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5yZWFkSW50KDQp'@;
put 'O3JldHVybiBuZXcgRGF0ZSgxOTgwKyhrPj4yNSYxMjcpLChrPj4yMSYxNSktMSxrPj4xNiYzMSxrPj4xMSYzMSxrPj41JjYzLCgzMSZrKTw8MSl9fSxSLmV4cG9ydHM9TH0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ei5iYXNlNjQ9ITEsei5iaW5h'@;
put 'cnk9ITEsei5kaXI9ITEsei5jcmVhdGVGb2xkZXJzPSExLHouZGF0ZT1udWxsLHouY29tcHJlc3Npb249bnVsbCx6LmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpO3ouc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihMKXty'@;
put 'ZXR1cm4gSy5zdHJpbmcyYmluYXJ5KEwpfSx6LnN0cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKEwpe3JldHVybiBLLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixMKX0sei51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihMKXtyZXR1cm4gSy50cmFuc2Zvcm1Ubygic3RyaW5nIixMKX0sei5z'@;
put 'dHJpbmcyQmxvYj1mdW5jdGlvbihMKXt2YXIgaz1LLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsTCk7cmV0dXJuIEsuYXJyYXlCdWZmZXIyQmxvYihrKX0sei5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKEwpe3JldHVybiBLLmFycmF5QnVmZmVyMkJsb2IoTCl9LHoudHJhbnNmb3JtVG89'@;
put 'ZnVuY3Rpb24oTCxrKXtyZXR1cm4gSy50cmFuc2Zvcm1UbyhMLGspfSx6LmdldFR5cGVPZj1mdW5jdGlvbihMKXtyZXR1cm4gSy5nZXRUeXBlT2YoTCl9LHouY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKEwpe3JldHVybiBLLmNoZWNrU3VwcG9ydChMKX0sei5NQVhfVkFMVUVfMTZCSVRTPUsuTUFY'@;
put 'X1ZBTFVFXzE2QklUUyx6Lk1BWF9WQUxVRV8zMkJJVFM9Sy5NQVhfVkFMVUVfMzJCSVRTLHoucHJldHR5PWZ1bmN0aW9uKEwpe3JldHVybiBLLnByZXR0eShMKX0sei5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oTCl7cmV0dXJuIEsuZmluZENvbXByZXNzaW9uKEwpfSx6LmlzUmVnRXhwPWZ1'@;
put 'bmN0aW9uKEwpe3JldHVybiBLLmlzUmVnRXhwKEwpfX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLEw9TygicGFr'@;
put 'byIpO3oudW5jb21wcmVzc0lucHV0VHlwZT1LPyJ1aW50OGFycmF5IjoiYXJyYXkiLHouY29tcHJlc3NJbnB1dFR5cGU9Sz8idWludDhhcnJheSI6ImFycmF5Iix6Lm1hZ2ljPSJcYlwwIix6LmNvbXByZXNzPWZ1bmN0aW9uKGspe3JldHVybiBMLmRlZmxhdGVSYXcoayl9LHoudW5jb21wcmVz'@;
put 'cz1mdW5jdGlvbihrKXtyZXR1cm4gTC5pbmZsYXRlUmF3KGspfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vYmFzZTY0Iik7ZnVuY3Rpb24gTChrLEUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEwpKXJldHVybiBuZXcgTChrLEUpO3RoaXMu'@;
put 'ZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLGsmJnRoaXMubG9hZChrLEUpLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgaj1uZXcgTDtmb3IodmFyIFYgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tWXSYmKGpbVl09dGhpc1tWXSk7cmV0dXJuIGp9fShM'@;
put 'LnByb3RvdHlwZT1PKCIuL29iamVjdCIpKS5sb2FkPU8oIi4vbG9hZCIpLEwuc3VwcG9ydD1PKCIuL3N1cHBvcnQiKSxMLmRlZmF1bHRzPU8oIi4vZGVmYXVsdHMiKSxMLnV0aWxzPU8oIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksTC5iYXNlNjQ9e2VuY29kZTpmdW5jdGlvbihrKXtyZXR1'@;
put 'cm4gSy5lbmNvZGUoayl9LGRlY29kZTpmdW5jdGlvbihrKXtyZXR1cm4gSy5kZWNvZGUoayl9fSxMLmNvbXByZXNzaW9ucz1PKCIuL2NvbXByZXNzaW9ucyIpLFIuZXhwb3J0cz1MfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVk'@;
put 'UHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vYmFzZTY0IiksTD1PKCIuL3ppcEVudHJpZXMiKTtSLmV4cG9ydHM9ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIs'@;
put 'WTtmb3IoKEU9RXx8e30pLmJhc2U2NCYmKGs9Sy5kZWNvZGUoaykpLGo9KFY9bmV3IEwoayxFKSkuZmlsZXMsQj0wO0I8ai5sZW5ndGg7QisrKXRoaXMuZmlsZSgoWT1qW0JdKS5maWxlTmFtZSxZLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRl'@;
put 'OlkuZGF0ZSxkaXI6WS5kaXIsY29tbWVudDpZLmZpbGVDb21tZW50Lmxlbmd0aD9ZLmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpFLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gVi56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1WLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4v'@;
put 'YmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKE8sUix6KXsoZnVuY3Rpb24oSyl7InVzZSBzdHJpY3QiO3ZhciBMPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgSzwidSIpe3ZhciBrPSFLLmZyb207aWYoIWspdHJ5e0suZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2s9'@;
put 'ITB9TD1rP2Z1bmN0aW9uKEUsail7cmV0dXJuIGo/bmV3IEsoRSxqKTpuZXcgSyhFKX06Sy5mcm9tLmJpbmQoSyksSy5hbGxvY3x8KEsuYWxsb2M9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBLKEUpfSl9Ui5leHBvcnRzPWZ1bmN0aW9uKEUsail7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFP0su'@;
put 'YWxsb2MoRSk6TChFLGopfSxSLmV4cG9ydHMudGVzdD1mdW5jdGlvbihFKXtyZXR1cm4gSy5pc0J1ZmZlcihFKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3VpbnQ4'@;
put 'QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBMKGspe3RoaXMuZGF0YT1rLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShMLnByb3RvdHlwZT1uZXcgSykucmVhZERhdGE9ZnVuY3Rpb24oayl7dGhpcy5jaGVja09mZnNldChrKTt2YXIgRT10aGlzLmRhdGEuc2xpY2Uo'@;
put 'dGhpcy5pbmRleCx0aGlzLmluZGV4K2spO3JldHVybiB0aGlzLmluZGV4Kz1rLEV9LFIuZXhwb3J0cz1MfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N1cHBvcnQiKSxMPU8oIi4vdXRpbHMiKSxrPU8oIi4v'@;
put 'Y3JjMzIiKSxFPU8oIi4vc2lnbmF0dXJlIiksaj1PKCIuL2RlZmF1bHRzIiksVj1PKCIuL2Jhc2U2NCIpLEI9TygiLi9jb21wcmVzc2lvbnMiKSxZPU8oIi4vY29tcHJlc3NlZE9iamVjdCIpLFg9TygiLi9ub2RlQnVmZmVyIiksVT1PKCIuL3V0ZjgiKSxxPU8oIi4vc3RyaW5nV3JpdGVyIiks'@;
put 'ZWU9TygiLi91aW50OEFycmF5V3JpdGVyIiksdGU9ZnVuY3Rpb24oUyl7aWYoUy5fZGF0YSBpbnN0YW5jZW9mIFkmJihTLl9kYXRhPVMuX2RhdGEuZ2V0Q29udGVudCgpLFMub3B0aW9ucy5iaW5hcnk9ITAsUy5vcHRpb25zLmJhc2U2ND0hMSwidWludDhhcnJheSI9PT1MLmdldFR5cGVPZihT'@;
put 'Ll9kYXRhKSkpe3ZhciB2PVMuX2RhdGE7Uy5fZGF0YT1uZXcgVWludDhBcnJheSh2Lmxlbmd0aCksMCE9PXYubGVuZ3RoJiZTLl9kYXRhLnNldCh2LDApfXJldHVybiBTLl9kYXRhfSxvZT1mdW5jdGlvbihTKXt2YXIgdj10ZShTKTtyZXR1cm4ic3RyaW5nIj09PUwuZ2V0VHlwZU9mKHYpPyFT'@;
put 'Lm9wdGlvbnMuYmluYXJ5JiZLLm5vZGVidWZmZXI/WCh2LCJ1dGYtOCIpOlMuYXNCaW5hcnkoKTp2fSxzZT1mdW5jdGlvbihTKXt2YXIgdj10ZSh0aGlzKTtyZXR1cm4gbnVsbD09PXZ8fHR5cGVvZiB2PiJ1Ij8iIjoodGhpcy5vcHRpb25zLmJhc2U2NCYmKHY9Vi5kZWNvZGUodikpLHY9UyYm'@;
put 'dGhpcy5vcHRpb25zLmJpbmFyeT9DLnV0ZjhkZWNvZGUodik6TC50cmFuc2Zvcm1Ubygic3RyaW5nIix2KSwhUyYmIXRoaXMub3B0aW9ucy5iaW5hcnkmJih2PUwudHJhbnNmb3JtVG8oInN0cmluZyIsQy51dGY4ZW5jb2RlKHYpKSksdil9LGhlPWZ1bmN0aW9uKFMsdixwKXt0aGlzLm5hbWU9'@;
put 'Uyx0aGlzLmRpcj1wLmRpcix0aGlzLmRhdGU9cC5kYXRlLHRoaXMuY29tbWVudD1wLmNvbW1lbnQsdGhpcy5fZGF0YT12LHRoaXMub3B0aW9ucz1wLHRoaXMuX2luaXRpYWxNZXRhZGF0YT17ZGlyOnAuZGlyLGRhdGU6cC5kYXRlfX07aGUucHJvdG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gc2UuY2FsbCh0aGlzLCEwKX0sYXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gc2UuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIFM9b2UodGhpcyk7cmV0dXJuIEwudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLFMpfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rp'@;
put 'b24oKXt2YXIgUz1vZSh0aGlzKTtyZXR1cm4gTC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsUyl9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgdWU9ZnVuY3Rpb24oUyx2KXt2YXIgdyxwPSIiO2Zvcih3PTA7dzx2O3cr'@;
put 'KylwKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZTKSxTPj4+PTg7cmV0dXJuIHB9LGNlPWZ1bmN0aW9uKCl7dmFyIHYscCxTPXt9O2Zvcih2PTA7djxhcmd1bWVudHMubGVuZ3RoO3YrKylmb3IocCBpbiBhcmd1bWVudHNbdl0pYXJndW1lbnRzW3ZdLmhhc093blByb3BlcnR5KHApJiZ0eXBl'@;
put 'b2YgU1twXT4idSImJihTW3BdPWFyZ3VtZW50c1t2XVtwXSk7cmV0dXJuIFN9LGI9ZnVuY3Rpb24oUyx2LHApe3ZhciBKLHc9TC5nZXRUeXBlT2Yodik7aWYocD1mdW5jdGlvbihTKXtyZXR1cm4hMD09PShTPVN8fHt9KS5iYXNlNjQmJm51bGw9PVMuYmluYXJ5JiYoUy5iaW5hcnk9ITApLChT'@;
put 'PWNlKFMsaikpLmRhdGU9Uy5kYXRlfHxuZXcgRGF0ZSxudWxsIT09Uy5jb21wcmVzc2lvbiYmKFMuY29tcHJlc3Npb249Uy5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxTfShwKSxwLmNyZWF0ZUZvbGRlcnMmJihKPUQoUykpJiZILmNhbGwodGhpcyxKLCEwKSxwLmRpcnx8bnVsbD09PXZ8'@;
put 'fHR5cGVvZiB2PiJ1IilwLmJhc2U2ND0hMSxwLmJpbmFyeT0hMSx2PW51bGw7ZWxzZSBpZigic3RyaW5nIj09PXcpcC5iaW5hcnkmJiFwLmJhc2U2NCYmITAhPT1wLm9wdGltaXplZEJpbmFyeVN0cmluZyYmKHY9TC5zdHJpbmcyYmluYXJ5KHYpKTtlbHNle2lmKHAuYmFzZTY0PSExLHAuYmlu'@;
put 'YXJ5PSEwLCEod3x8diBpbnN0YW5jZW9mIFkpKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIrUysiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT13JiYodj1MLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5Iix2KSl9dmFyIG5lPW5ldyBoZShT'@;
put 'LHYscCk7cmV0dXJuIHRoaXMuZmlsZXNbU109bmUsbmV9LEQ9ZnVuY3Rpb24oUyl7Ii8iPT1TLnNsaWNlKC0xKSYmKFM9Uy5zdWJzdHJpbmcoMCxTLmxlbmd0aC0xKSk7dmFyIHY9Uy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiB2PjA/Uy5zdWJzdHJpbmcoMCx2KToiIn0sSD1mdW5jdGlvbihT'@;
put 'LHYpe3JldHVybiIvIiE9Uy5zbGljZSgtMSkmJihTKz0iLyIpLHY9dHlwZW9mIHY8InUiJiZ2LHRoaXMuZmlsZXNbU118fGIuY2FsbCh0aGlzLFMsbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6dn0pLHRoaXMuZmlsZXNbU119LE49ZnVuY3Rpb24oUyx2KXt2YXIgdyxwPW5ldyBZO3JldHVy'@;
put 'biBTLl9kYXRhIGluc3RhbmNlb2YgWT8ocC51bmNvbXByZXNzZWRTaXplPVMuX2RhdGEudW5jb21wcmVzc2VkU2l6ZSxwLmNyYzMyPVMuX2RhdGEuY3JjMzIsMD09PXAudW5jb21wcmVzc2VkU2l6ZXx8Uy5kaXI/KHY9Qi5TVE9SRSxwLmNvbXByZXNzZWRDb250ZW50PSIiLHAuY3JjMzI9MCk6'@;
put 'Uy5fZGF0YS5jb21wcmVzc2lvbk1ldGhvZD09PXYubWFnaWM/cC5jb21wcmVzc2VkQ29udGVudD1TLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk6KHc9Uy5fZGF0YS5nZXRDb250ZW50KCkscC5jb21wcmVzc2VkQ29udGVudD12LmNvbXByZXNzKEwudHJhbnNmb3JtVG8odi5jb21wcmVz'@;
put 'c0lucHV0VHlwZSx3KSkpKTooKCEodz1vZShTKSl8fDA9PT13Lmxlbmd0aHx8Uy5kaXIpJiYodj1CLlNUT1JFLHc9IiIpLHAudW5jb21wcmVzc2VkU2l6ZT13Lmxlbmd0aCxwLmNyYzMyPWsodykscC5jb21wcmVzc2VkQ29udGVudD12LmNvbXByZXNzKEwudHJhbnNmb3JtVG8odi5jb21wcmVz'@;
put 'c0lucHV0VHlwZSx3KSkpLHAuY29tcHJlc3NlZFNpemU9cC5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgscC5jb21wcmVzc2lvbk1ldGhvZD12Lm1hZ2ljLHB9LGc9ZnVuY3Rpb24oUyx2LHAsdyl7dmFyIE9lLGplLFFlLGx0LG5lPUwudHJhbnNmb3JtVG8oInN0cmluZyIsVS51dGY4ZW5jb2Rl'@;
put 'KHYubmFtZSkpLGRlPXYuY29tbWVudHx8IiIsZmU9TC50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUoZGUpKSx4ZT1uZS5sZW5ndGghPT12Lm5hbWUubGVuZ3RoLEllPWZlLmxlbmd0aCE9PWRlLmxlbmd0aCxGZT12Lm9wdGlvbnMsV2U9IiIsS2U9IiIsWWU9IiI7UWU9di5faW5p'@;
put 'dGlhbE1ldGFkYXRhLmRpciE9PXYuZGlyP3YuZGlyOkZlLmRpcixPZT0obHQ9di5faW5pdGlhbE1ldGFkYXRhLmRhdGUhPT12LmRhdGU/di5kYXRlOkZlLmRhdGUpLmdldEhvdXJzKCksT2U8PD02LE9lfD1sdC5nZXRNaW51dGVzKCksT2U8PD01LE9lfD1sdC5nZXRTZWNvbmRzKCkvMixqZT1s'@;
put 'dC5nZXRGdWxsWWVhcigpLTE5ODAsamU8PD00LGplfD1sdC5nZXRNb250aCgpKzEsamU8PD01LGplfD1sdC5nZXREYXRlKCkseGUmJihLZT11ZSgxLDEpK3VlKGsobmUpLDQpK25lLFdlKz0idXAiK3VlKEtlLmxlbmd0aCwyKStLZSksSWUmJihZZT11ZSgxLDEpK3VlKHRoaXMuY3JjMzIoZmUp'@;
put 'LDQpK2ZlLFdlKz0idWMiK3VlKFllLmxlbmd0aCwyKStZZSk7dmFyIFBlPSIiO3JldHVybiBQZSs9IlxuXDAiLFBlKz14ZXx8SWU/IlwwXGIiOiJcMFwwIixQZSs9cC5jb21wcmVzc2lvbk1ldGhvZCxQZSs9dWUoT2UsMiksUGUrPXVlKGplLDIpLFBlKz11ZShwLmNyYzMyLDQpLFBlKz11ZShw'@;
put 'LmNvbXByZXNzZWRTaXplLDQpLFBlKz11ZShwLnVuY29tcHJlc3NlZFNpemUsNCksUGUrPXVlKG5lLmxlbmd0aCwyKSxQZSs9dWUoV2UubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOkUuTE9DQUxfRklMRV9IRUFERVIrUGUrbmUrV2UsZGlyUmVjb3JkOkUuQ0VOVFJBTF9GSUxFX0hFQURFUisiXHgx'@;
put 'NFwwIitQZSt1ZShmZS5sZW5ndGgsMikrIlwwXDBcMFwwIisoITA9PT1RZT8iXHgxMFwwXDBcMCI6IlwwXDBcMFwwIikrdWUodyw0KStuZStXZStmZSxjb21wcmVzc2VkT2JqZWN0OnB9fSxDPXtsb2FkOmZ1bmN0aW9uKFMsdil7dGhyb3cgbmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3Qg'@;
put 'ZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihTKXt2YXIgcCx3LEosbmUsdj1bXTtmb3IocCBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkocCkmJihuZT1uZXcgaGUoKEo9dGhpcy5maWxlc1twXSku'@;
put 'bmFtZSxKLl9kYXRhLGNlKEoub3B0aW9ucykpLHc9cC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLHAubGVuZ3RoKSxwLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJlModyxuZSkmJnYucHVzaChuZSkpO3JldHVybiB2fSxmaWxlOmZ1bmN0aW9uKFMsdixwKXtpZigxPT09'@;
put 'YXJndW1lbnRzLmxlbmd0aCl7aWYoTC5pc1JlZ0V4cChTKSl7dmFyIHc9UztyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIW5lLmRpciYmdy50ZXN0KEopfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiFuZS5kaXImJko9PT1TfSlbMF18'@;
put 'fG51bGx9cmV0dXJuIGIuY2FsbCh0aGlzLFM9dGhpcy5yb290K1MsdixwKSx0aGlzfSxmb2xkZXI6ZnVuY3Rpb24oUyl7aWYoIVMpcmV0dXJuIHRoaXM7aWYoTC5pc1JlZ0V4cChTKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIG5lLmRpciYmUy50ZXN0KEopfSk7'@;
put 'dmFyIHA9SC5jYWxsKHRoaXMsdGhpcy5yb290K1MpLHc9dGhpcy5jbG9uZSgpO3JldHVybiB3LnJvb3Q9cC5uYW1lLHd9LHJlbW92ZTpmdW5jdGlvbihTKXt2YXIgdj10aGlzLmZpbGVzW1M9dGhpcy5yb290K1NdO2lmKHZ8fCgiLyIhPVMuc2xpY2UoLTEpJiYoUys9Ii8iKSx2PXRoaXMuZmls'@;
put 'ZXNbU10pLHYmJiF2LmRpcilkZWxldGUgdGhpcy5maWxlc1tTXTtlbHNlIGZvcih2YXIgcD10aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4gbmUubmFtZS5zbGljZSgwLFMubGVuZ3RoKT09PVN9KSx3PTA7dzxwLmxlbmd0aDt3KyspZGVsZXRlIHRoaXMuZmlsZXNbcFt3XS5uYW1l'@;
put 'XTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oUyl7Uz1jZShTfHx7fSx7YmFzZTY0OiEwLGNvbXByZXNzaW9uOiJTVE9SRSIsdHlwZToiYmFzZTY0Iixjb21tZW50Om51bGx9KSxMLmNoZWNrU3VwcG9ydChTLnR5cGUpO3ZhciBKLG5lLFdlLHY9W10scD0wLHc9MCxkZT1MLnRyYW5z'@;
put 'Zm9ybVRvKCJzdHJpbmciLHRoaXMudXRmOGVuY29kZShTLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8IiIpKTtmb3IodmFyIGZlIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShmZSkpe3ZhciB4ZT10aGlzLmZpbGVzW2ZlXSxJZT14ZS5vcHRpb25zLmNvbXByZXNz'@;
put 'aW9ufHxTLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksRmU9QltJZV07aWYoIUZlKXRocm93IG5ldyBFcnJvcihJZSsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIE9lPU4uY2FsbCh0aGlzLHhlLEZlKSxqZT1nLmNhbGwodGhpcyxmZSx4ZSxPZSxwKTtwKz1q'@;
put 'ZS5maWxlUmVjb3JkLmxlbmd0aCtPZS5jb21wcmVzc2VkU2l6ZSx3Kz1qZS5kaXJSZWNvcmQubGVuZ3RoLHYucHVzaChqZSl9V2U9RS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIit1ZSh2Lmxlbmd0aCwyKSt1ZSh2Lmxlbmd0aCwyKSt1ZSh3LDQpK3VlKHAsNCkrdWUoZGUubGVu'@;
put 'Z3RoLDIpK2RlO3ZhciBLZT1TLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IoSj0idWludDhhcnJheSI9PT1LZXx8ImFycmF5YnVmZmVyIj09PUtlfHwiYmxvYiI9PT1LZXx8Im5vZGVidWZmZXIiPT09S2U/bmV3IGVlKHArdytXZS5sZW5ndGgpOm5ldyBxKHArdytXZS5sZW5ndGgpLG5lPTA7bmU8'@;
put 'di5sZW5ndGg7bmUrKylKLmFwcGVuZCh2W25lXS5maWxlUmVjb3JkKSxKLmFwcGVuZCh2W25lXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtmb3IobmU9MDtuZTx2Lmxlbmd0aDtuZSsrKUouYXBwZW5kKHZbbmVdLmRpclJlY29yZCk7Si5hcHBlbmQoV2UpO3ZhciBZZT1K'@;
put 'LmZpbmFsaXplKCk7c3dpdGNoKFMudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIEwudHJhbnNmb3JtVG8oUy50eXBlLnRvTG93ZXJDYXNlKCksWWUpO2Nhc2UiYmxvYiI6cmV0dXJuIEwuYXJyYXlC'@;
put 'dWZmZXIyQmxvYihMLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsWWUpKTtjYXNlImJhc2U2NCI6cmV0dXJuIFMuYmFzZTY0P1YuZW5jb2RlKFllKTpZZTtkZWZhdWx0OnJldHVybiBZZX19LGNyYzMyOmZ1bmN0aW9uKFMsdil7cmV0dXJuIGsoUyx2KX0sdXRmOGVuY29kZTpmdW5jdGlvbihT'@;
put 'KXtyZXR1cm4gTC50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUoUykpfSx1dGY4ZGVjb2RlOmZ1bmN0aW9uKFMpe3JldHVybiBVLnV0ZjhkZWNvZGUoUyl9fTtSLmV4cG9ydHM9Q30seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6'@;
put 'MywiLi9jcmMzMiI6NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVdyaXRlciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9uKE8s'@;
put 'Uix6KXsidXNlIHN0cmljdCI7ei5MT0NBTF9GSUxFX0hFQURFUj0iUEtceDAzXHgwNCIsei5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQS1x4MDFceDAyIix6LkNFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA1XHgwNiIsei5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQS1x4MDZc'@;
put 'eDA3Iix6LlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA2XHgwNiIsei5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDE1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vZGF0YVJlYWRlciIpLEw9TygiLi91dGlscyIpO2Z1bmN0aW9uIGso'@;
put 'RSxqKXt0aGlzLmRhdGE9RSxqfHwodGhpcy5kYXRhPUwuc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oay5wcm90b3R5cGU9bmV3IEspLmJ5dGVBdD1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2Rl'@;
put 'QXQoRSl9LGsucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoRSl9LGsucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEUpe3RoaXMuY2hlY2tPZmZzZXQoRSk7dmFyIGo9dGhpcy5kYXRhLnNsaWNlKHRoaXMu'@;
put 'aW5kZXgsdGhpcy5pbmRleCtFKTtyZXR1cm4gdGhpcy5pbmRleCs9RSxqfSxSLmV4cG9ydHM9a30seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEw9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9'@;
put 'W119O0wucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oayl7az1LLnRyYW5zZm9ybVRvKCJzdHJpbmciLGspLHRoaXMuZGF0YS5wdXNoKGspfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuam9pbigiIil9fSxSLmV4cG9ydHM9TH0seyIuL3V0aWxzIjoyMX1dLDE3Oltm'@;
put 'dW5jdGlvbihPLFIseil7KGZ1bmN0aW9uKEspeyJ1c2Ugc3RyaWN0IjtpZih6LmJhc2U2ND0hMCx6LmFycmF5PSEwLHouc3RyaW5nPSEwLHouYXJyYXlidWZmZXI9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLHoubm9kZWJ1ZmZlcj10eXBlb2YgSzwidSIs'@;
put 'ei51aW50OGFycmF5PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXouYmxvYj0hMTtlbHNle3ZhciBMPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7ei5ibG9iPTA9PT1uZXcgQmxvYihbTF0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplfWNhdGNoe3Ry'@;
put 'eXt2YXIgRT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO0UuYXBwZW5kKEwpLHouYmxvYj0wPT09RS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNhdGNo'@;
put 'e3ouYmxvYj0hMX19fX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDE4OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vZGF0YVJlYWRlciIpO2Z1bmN0aW9uIEwoayl7ayYmKHRoaXMuZGF0YT1rLHRoaXMubGVuZ3RoPXRo'@;
put 'aXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wKX0oTC5wcm90b3R5cGU9bmV3IEspLmJ5dGVBdD1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5kYXRhW2tdfSxMLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihrKXtmb3IodmFyIEU9ay5jaGFyQ29kZUF0KDApLGo9ay5j'@;
put 'aGFyQ29kZUF0KDEpLFY9ay5jaGFyQ29kZUF0KDIpLEI9ay5jaGFyQ29kZUF0KDMpLFk9dGhpcy5sZW5ndGgtNDtZPj0wOy0tWSlpZih0aGlzLmRhdGFbWV09PT1FJiZ0aGlzLmRhdGFbWSsxXT09PWomJnRoaXMuZGF0YVtZKzJdPT09ViYmdGhpcy5kYXRhW1krM109PT1CKXJldHVybiBZO3Jl'@;
put 'dHVybi0xfSxMLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihrKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGspLDA9PT1rKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgRT10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K2spO3JldHVybiB0aGlzLmluZGV4Kz1r'@;
put 'LEV9LFIuZXhwb3J0cz1MfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKSxMPWZ1bmN0aW9uKGspe3RoaXMuZGF0YT1uZXcgVWludDhBcnJheShrKSx0aGlzLmluZGV4PTB9O0wucHJvdG90eXBlPXthcHBlbmQ6'@;
put 'ZnVuY3Rpb24oayl7MCE9PWsubGVuZ3RoJiYoaz1LLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixrKSx0aGlzLmRhdGEuc2V0KGssdGhpcy5pbmRleCksdGhpcy5pbmRleCs9ay5sZW5ndGgpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxSLmV4cG9ydHM9TH0seyIu'@;
put 'L3V0aWxzIjoyMX1dLDIwOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO2Zvcih2YXIgSz1PKCIuL3V0aWxzIiksTD1PKCIuL3N1cHBvcnQiKSxrPU8oIi4vbm9kZUJ1ZmZlciIpLEU9bmV3IEFycmF5KDI1Niksaj0wO2o8MjU2O2orKylFW2pdPWo+PTI1Mj82Omo+PTI0OD81Omo+PTI0'@;
put 'MD80Omo+PTIyND8zOmo+PTE5Mj8yOjE7RVsyNTRdPUVbMjU0XT0xO3ZhciBCPWZ1bmN0aW9uKFgsVSl7dmFyIHE7Zm9yKChVPVV8fFgubGVuZ3RoKT5YLmxlbmd0aCYmKFU9WC5sZW5ndGgpLHE9VS0xO3E+PTAmJjEyOD09KDE5MiZYW3FdKTspcS0tO3JldHVybiBxPDB8fDA9PT1xP1U6cStF'@;
put 'W1hbcV1dPlU/cTpVfSxZPWZ1bmN0aW9uKFgpe3ZhciBxLGVlLHRlLG9lLHNlPVgubGVuZ3RoLGhlPW5ldyBBcnJheSgyKnNlKTtmb3IoZWU9MCxxPTA7cTxzZTspaWYoKHRlPVhbcSsrXSk8MTI4KWhlW2VlKytdPXRlO2Vsc2UgaWYoKG9lPUVbdGVdKT40KWhlW2VlKytdPTY1NTMzLHErPW9l'@;
put 'LTE7ZWxzZXtmb3IodGUmPTI9PT1vZT8zMTozPT09b2U/MTU6NztvZT4xJiZxPHNlOyl0ZT10ZTw8Nnw2MyZYW3ErK10sb2UtLTtvZT4xP2hlW2VlKytdPTY1NTMzOnRlPDY1NTM2P2hlW2VlKytdPXRlOihoZVtlZSsrXT01NTI5NnwodGUtPTY1NTM2KT4+MTAmMTAyMyxoZVtlZSsrXT01NjMy'@;
put 'MHwxMDIzJnRlKX1yZXR1cm4gaGUubGVuZ3RoIT09ZWUmJihoZS5zdWJhcnJheT9oZT1oZS5zdWJhcnJheSgwLGVlKTpoZS5sZW5ndGg9ZWUpLEsuYXBwbHlGcm9tQ2hhckNvZGUoaGUpfTt6LnV0ZjhlbmNvZGU9ZnVuY3Rpb24oVSl7cmV0dXJuIEwubm9kZWJ1ZmZlcj9rKFUsInV0Zi04Iik6'@;
put 'ZnVuY3Rpb24oWCl7dmFyIFUscSxlZSx0ZSxvZSxzZT1YLmxlbmd0aCxoZT0wO2Zvcih0ZT0wO3RlPHNlO3RlKyspNTUyOTY9PSg2NDUxMiYocT1YLmNoYXJDb2RlQXQodGUpKSkmJnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKGVlPVguY2hhckNvZGVBdCh0ZSsxKSkpJiYocT02NTUzNisocS01'@;
put 'NTI5Njw8MTApKyhlZS01NjMyMCksdGUrKyksaGUrPXE8MTI4PzE6cTwyMDQ4PzI6cTw2NTUzNj8zOjQ7Zm9yKFU9TC51aW50OGFycmF5P25ldyBVaW50OEFycmF5KGhlKTpuZXcgQXJyYXkoaGUpLG9lPTAsdGU9MDtvZTxoZTt0ZSsrKTU1Mjk2PT0oNjQ1MTImKHE9WC5jaGFyQ29kZUF0KHRl'@;
put 'KSkpJiZ0ZSsxPHNlJiY1NjMyMD09KDY0NTEyJihlZT1YLmNoYXJDb2RlQXQodGUrMSkpKSYmKHE9NjU1MzYrKHEtNTUyOTY8PDEwKSsoZWUtNTYzMjApLHRlKyspLHE8MTI4P1Vbb2UrK109cTpxPDIwNDg/KFVbb2UrK109MTkyfHE+Pj42LFVbb2UrK109MTI4fDYzJnEpOnE8NjU1MzY/KFVb'@;
put 'b2UrK109MjI0fHE+Pj4xMixVW29lKytdPTEyOHxxPj4+NiY2MyxVW29lKytdPTEyOHw2MyZxKTooVVtvZSsrXT0yNDB8cT4+PjE4LFVbb2UrK109MTI4fHE+Pj4xMiY2MyxVW29lKytdPTEyOHxxPj4+NiY2MyxVW29lKytdPTEyOHw2MyZxKTtyZXR1cm4gVX0oVSl9LHoudXRmOGRlY29kZT1m'@;
put 'dW5jdGlvbihVKXtpZihMLm5vZGVidWZmZXIpcmV0dXJuIEsudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLFUpLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgcT1bXSxlZT0wLHRlPShVPUsudHJhbnNmb3JtVG8oTC51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLFUpKS5sZW5ndGg7'@;
put 'ZWU8dGU7KXt2YXIgc2U9QihVLE1hdGgubWluKGVlKzY1NTM2LHRlKSk7cS5wdXNoKFkoTC51aW50OGFycmF5P1Uuc3ViYXJyYXkoZWUsc2UpOlUuc2xpY2UoZWUsc2UpKSksZWU9c2V9cmV0dXJuIHEuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRp'@;
put 'bHMiOjIxfV0sMjE6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdXBwb3J0IiksTD1PKCIuL2NvbXByZXNzaW9ucyIpLGs9TygiLi9ub2RlQnVmZmVyIik7ZnVuY3Rpb24gRShYKXtyZXR1cm4gWH1mdW5jdGlvbiBqKFgsVSl7Zm9yKHZhciBxPTA7cTxYLmxlbmd0'@;
put 'aDsrK3EpVVtxXT0yNTUmWC5jaGFyQ29kZUF0KHEpO3JldHVybiBVfWZ1bmN0aW9uIFYoWCl7dmFyIFU9NjU1MzYscT1bXSxlZT1YLmxlbmd0aCx0ZT16LmdldFR5cGVPZihYKSxvZT0wLHNlPSEwO3RyeXtzd2l0Y2godGUpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5h'@;
put 'cHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxrKDApKX19Y2F0Y2h7c2U9ITF9aWYoIXNlKXtmb3IodmFyIGhlPSIiLHVlPTA7dWU8WC5sZW5ndGg7dWUrKyloZSs9U3RyaW5nLmZyb21DaGFy'@;
put 'Q29kZShYW3VlXSk7cmV0dXJuIGhlfWZvcig7b2U8ZWUmJlU+MTspdHJ5e3EucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PXRlfHwibm9kZWJ1ZmZlciI9PT10ZT9YLnNsaWNlKG9lLE1hdGgubWluKG9lK1UsZWUpKTpYLnN1YmFycmF5KG9lLE1hdGgubWlu'@;
put 'KG9lK1UsZWUpKSkpLG9lKz1VfWNhdGNoe1U9TWF0aC5mbG9vcihVLzIpfXJldHVybiBxLmpvaW4oIiIpfWZ1bmN0aW9uIEIoWCxVKXtmb3IodmFyIHE9MDtxPFgubGVuZ3RoO3ErKylVW3FdPVhbcV07cmV0dXJuIFV9ei5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKFgpe2Zvcih2YXIgVT0iIixx'@;
put 'PTA7cTxYLmxlbmd0aDtxKyspVSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmWC5jaGFyQ29kZUF0KHEpKTtyZXR1cm4gVX0sei5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKFgpe3ouY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbWF0se3R5cGU6ImFwcGxpY2F0'@;
put 'aW9uL3ppcCJ9KX1jYXRjaHt0cnl7dmFyIHE9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gcS5hcHBlbmQoWCkscS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96'@;
put 'aXAiKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSx6LmFwcGx5RnJvbUNoYXJDb2RlPVY7dmFyIFk9e307WS5zdHJpbmc9e3N0cmluZzpFLGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBqKFgsbmV3IEFycmF5KFgubGVuZ3RoKSl9'@;
put 'LGFycmF5YnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBZLnN0cmluZy51aW50OGFycmF5KFgpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gaihYLG5ldyBVaW50OEFycmF5KFgubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGooWCxrKFgubGVu'@;
put 'Z3RoKSl9fSxZLmFycmF5PXtzdHJpbmc6VixhcnJheTpFLGFycmF5YnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBuZXcgVWludDhBcnJheShYKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3Jl'@;
put 'dHVybiBrKFgpfX0sWS5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKFgpe3JldHVybiBWKG5ldyBVaW50OEFycmF5KFgpKX0sYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIEIobmV3IFVpbnQ4QXJyYXkoWCksbmV3IEFycmF5KFguYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpFLHVpbnQ4'@;
put 'YXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBrKG5ldyBVaW50OEFycmF5KFgpKX19LFkudWludDhhcnJheT17c3RyaW5nOlYsYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIEIoWCxuZXcgQXJyYXkoWC5sZW5n'@;
put 'dGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFguYnVmZmVyfSx1aW50OGFycmF5OkUsbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gayhYKX19LFkubm9kZWJ1ZmZlcj17c3RyaW5nOlYsYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIEIoWCxuZXcgQXJyYXkoWC5sZW5n'@;
put 'dGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFkubm9kZWJ1ZmZlci51aW50OGFycmF5KFgpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBVaW50OEFycmF5KFgubGVuZ3RoKSl9LG5vZGVidWZmZXI6RX0sei50cmFuc2Zvcm1Ubz1mdW5j'@;
put 'dGlvbihYLFUpe2lmKFV8fChVPSIiKSwhWClyZXR1cm4gVTt6LmNoZWNrU3VwcG9ydChYKTt2YXIgcT16LmdldFR5cGVPZihVKTtyZXR1cm4gWVtxXVtYXShVKX0sei5nZXRUeXBlT2Y9ZnVuY3Rpb24oWCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBYPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5'@;
put 'XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoWCk/ImFycmF5IjpLLm5vZGVidWZmZXImJmsudGVzdChYKT8ibm9kZWJ1ZmZlciI6Sy51aW50OGFycmF5JiZYIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhhcnJheSI6Sy5hcnJheWJ1ZmZlciYmWCBpbnN0YW5jZW9mIEFy'@;
put 'cmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSx6LmNoZWNrU3VwcG9ydD1mdW5jdGlvbihYKXtpZighS1tYLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihYKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sei5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LHou'@;
put 'TUFYX1ZBTFVFXzMyQklUUz0tMSx6LnByZXR0eT1mdW5jdGlvbihYKXt2YXIgcSxlZSxVPSIiO2ZvcihlZT0wO2VlPChYfHwiIikubGVuZ3RoO2VlKyspVSs9IlxceCIrKChxPVguY2hhckNvZGVBdChlZSkpPDE2PyIwIjoiIikrcS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4g'@;
put 'VX0sei5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oWCl7Zm9yKHZhciBVIGluIEwpaWYoTC5oYXNPd25Qcm9wZXJ0eShVKSYmTFtVXS5tYWdpYz09PVgpcmV0dXJuIExbVV07cmV0dXJuIG51bGx9LHouaXNSZWdFeHA9ZnVuY3Rpb24oWCl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmpl'@;
put 'Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoWCl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdHJpbmdSZWFkZXIiKSxMPU8oIi4vbm9kZUJ1ZmZlclJl'@;
put 'YWRlciIpLGs9TygiLi91aW50OEFycmF5UmVhZGVyIiksRT1PKCIuL3V0aWxzIiksaj1PKCIuL3NpZ25hdHVyZSIpLFY9TygiLi96aXBFbnRyeSIpLEI9TygiLi9zdXBwb3J0IiksWT1PKCIuL29iamVjdCIpO2Z1bmN0aW9uIFgoVSxxKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9'@;
put 'cSxVJiZ0aGlzLmxvYWQoVSl9WC5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKFUpe3ZhciBxPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYocSE9PVUpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK0Uu'@;
put 'cHJldHR5KHEpKyIsIGV4cGVjdGVkICIrRS5wcmV0dHkoVSkrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIp'@;
put 'LHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZz'@;
put 'ZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD1ZLnV0ZjhkZWNvZGUodGhp'@;
put 'cy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMudmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRl'@;
put 'ZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFk'@;
put 'SW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRh'@;
put 'PXt9O2Zvcih2YXIgZWUsdGUsb2UsVT10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPFU7KWVlPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGU9dGhpcy5yZWFkZXIucmVhZEludCg0KSxvZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRlKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFb'@;
put 'ZWVdPXtpZDplZSxsZW5ndGg6dGUsdmFsdWU6b2V9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2'@;
put 'NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1'@;
put 'bmN0aW9uKCl7dmFyIFUscTtmb3IoVT0wO1U8dGhpcy5maWxlcy5sZW5ndGg7VSsrKXRoaXMucmVhZGVyLnNldEluZGV4KChxPXRoaXMuZmlsZXNbVV0pLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouTE9DQUxfRklMRV9IRUFERVIpLHEucmVhZExvY2FsUGFydCh0'@;
put 'aGlzLnJlYWRlcikscS5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIFU7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PWouQ0VOVFJBTF9GSUxFX0hFQURFUjspKFU9bmV3'@;
put 'IFYoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChVKX0scmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBVPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGouQ0VOVFJB'@;
put 'TF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PVUpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChVKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouQ0VOVFJBTF9ESVJFQ1RPUllf'@;
put 'RU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1FLk1BWF9W'@;
put 'QUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1FLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1FLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PUUuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09'@;
put 'PShVPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhp'@;
put 'cy5yZWFkZXIuc2V0SW5kZXgoVSksdGhpcy5jaGVja1NpZ25hdHVyZShqLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlw'@;
put 'NjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKFUpe3ZhciBxPUUuZ2V0VHlwZU9mKFUpO3RoaXMucmVhZGVyPSJzdHJp'@;
put 'bmciIT09cXx8Qi51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PXE/bmV3IEwoVSk6bmV3IGsoRS50cmFuc2Zvcm1UbygidWludDhhcnJheSIsVSkpOm5ldyBLKFUsdGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKFUpe3RoaXMucHJlcGFyZVJl'@;
put 'YWRlcihVKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sUi5leHBvcnRzPVh9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjox'@;
put 'NSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdHJpbmdSZWFkZXIiKSxMPU8oIi4vdXRpbHMiKSxrPU8oIi4vY29tcHJlc3NlZE9i'@;
put 'amVjdCIpLEU9TygiLi9vYmplY3QiKTtmdW5jdGlvbiBqKFYsQil7dGhpcy5vcHRpb25zPVYsdGhpcy5sb2FkT3B0aW9ucz1CfWoucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIw'@;
put 'NDg9PSgyMDQ4JnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbihWLEIsWSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFg9Vi5pbmRleDtWLnNldEluZGV4KEIpO3ZhciBVPVYucmVhZERhdGEoWSk7cmV0dXJuIFYuc2V0SW5kZXgoWCksVX19LHByZXBhcmVD'@;
put 'b250ZW50OmZ1bmN0aW9uKFYsQixZLFgsVSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHE9TC50cmFuc2Zvcm1UbyhYLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5nZXRDb21wcmVzc2VkQ29udGVudCgpKSxlZT1YLnVuY29tcHJlc3MocSk7aWYoZWUubGVuZ3RoIT09VSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gZWV9fSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKFYpe3ZhciBCLFk7aWYoVi5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVYucmVhZEludCgyKSxZPVYucmVhZEludCgyKSx0aGlzLmZpbGVOYW1l'@;
put 'PVYucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxWLnNraXAoWSksLTE9PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT10aGlzLnVuY29tcHJlc3NlZFNpemUpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9u'@;
put 'cyBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PSAtMSkiKTtpZihudWxsPT09KEI9TC5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHpp'@;
put 'cCA6IGNvbXByZXNzaW9uICIrTC5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrIiB1bmtub3duIChpbm5lciBmaWxlIDogIit0aGlzLmZpbGVOYW1lKyIpIik7aWYodGhpcy5kZWNvbXByZXNzZWQ9bmV3IGssdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemU9dGhpcy5jb21w'@;
put 'cmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC51bmNvbXByZXNzZWRTaXplPXRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC5jcmMzMj10aGlzLmNyYzMyLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kPXRoaXMuY29tcHJlc3Npb25NZXRob2QsdGhp'@;
put 'cy5kZWNvbXByZXNzZWQuZ2V0Q29tcHJlc3NlZENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQoVixWLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsQiksdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudD10aGlzLnByZXBhcmVDb250ZW50KFYsVi5pbmRleCx0aGlzLmNv'@;
put 'bXByZXNzZWRTaXplLEIsdGhpcy51bmNvbXByZXNzZWRTaXplKSx0aGlzLmxvYWRPcHRpb25zLmNoZWNrQ1JDMzImJih0aGlzLmRlY29tcHJlc3NlZD1MLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQoKSksRS5jcmMzMih0aGlzLmRlY29tcHJlc3Nl'@;
put 'ZCkhPT10aGlzLmNyYzMyKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oVil7aWYodGhpcy52ZXJzaW9uTWFkZUJ5PVYucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9Vi5yZWFkSW50KDIp'@;
put 'LHRoaXMuYml0RmxhZz1WLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1WLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPVYucmVhZERhdGUoKSx0aGlzLmNyYzMyPVYucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPVYucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNp'@;
put 'emU9Vi5yZWFkSW50KDQpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vi5yZWFkSW50KDIpLHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9Vi5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9Vi5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PVYucmVhZEludCgyKSx0aGlzLmludGVy'@;
put 'bmFsRmlsZUF0dHJpYnV0ZXM9Vi5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1WLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1WLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90'@;
put 'IHN1cHBvcnRlZCIpO3RoaXMuZmlsZU5hbWU9Vi5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLHRoaXMucmVhZEV4dHJhRmllbGRzKFYpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoViksdGhpcy5maWxlQ29tbWVudD1WLnJlYWRTdHJpbmcodGhpcy5maWxlQ29tbWVudExlbmd0'@;
put 'aCksdGhpcy5kaXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKX0scGFyc2VaSVA2NEV4dHJhRmllbGQ6ZnVuY3Rpb24oVil7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIEI9bmV3IEsodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXpl'@;
put 'PT09TC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPUIucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PUwuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9Qi5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09TC5N'@;
put 'QVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1CLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09TC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9Qi5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihWKXt2'@;
put 'YXIgWSxYLFUsQj1WLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRoaXMuZXh0cmFGaWVsZHN8fHt9O1YuaW5kZXg8Qit0aGlzLmV4dHJhRmllbGRzTGVuZ3RoOylZPVYucmVhZEludCgyKSxYPVYucmVhZEludCgyKSxVPVYucmVhZFN0cmluZyhYKSx0aGlzLmV4dHJhRmllbGRzW1ldPXtp'@;
put 'ZDpZLGxlbmd0aDpYLHZhbHVlOlV9fSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1FLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1FLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgVj10'@;
put 'aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09ViYmKHRoaXMuZmlsZU5hbWU9Vik7dmFyIEI9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7bnVsbCE9PUImJih0aGlzLmZpbGVDb21tZW50PUIpfX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5j'@;
put 'dGlvbigpe3ZhciBWPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKFYpe3ZhciBCPW5ldyBLKFYudmFsdWUpO3JldHVybiAxIT09Qi5yZWFkSW50KDEpfHxFLmNyYzMyKHRoaXMuZmlsZU5hbWUpIT09Qi5yZWFkSW50KDQpP251bGw6RS51dGY4ZGVjb2RlKEIucmVhZFN0cmluZyhWLmxlbmd0'@;
put 'aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihWKXt2YXIgQj1uZXcgSyhWLnZhbHVlKTtyZXR1cm4gMSE9PUIucmVhZEludCgxKXx8RS5jcmMzMih0aGlzLmZpbGVDb21tZW50'@;
put 'KSE9PUIucmVhZEludCg0KT9udWxsOkUudXRmOGRlY29kZShCLnJlYWRTdHJpbmcoVi5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sUi5leHBvcnRzPWp9LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL29iamVjdCI6MTMsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi91dGlscyI6MjF9XSwyNDpb'@;
put 'ZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgaj17fTsoMCxPKCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24pKGosTygiLi9saWIvZGVmbGF0ZSIpLE8oIi4vbGliL2luZmxhdGUiKSxPKCIuL2xpYi96bGliL2NvbnN0YW50cyIpKSxSLmV4cG9ydHM9an0seyIuL2xpYi9kZWZs'@;
put 'YXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vemxpYi9kZWZsYXRlLmpzIiksTD1PKCIuL3V0aWxzL2NvbW1vbiIpLGs9'@;
put 'TygiLi91dGlscy9zdHJpbmdzIiksRT1PKCIuL3psaWIvbWVzc2FnZXMiKSxqPU8oIi4vemxpYi96c3RyZWFtIiksdGU9ZnVuY3Rpb24odWUpe3RoaXMub3B0aW9ucz1MLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxz'@;
put 'dHJhdGVneTowLHRvOiIifSx1ZXx8e30pO3ZhciBjZT10aGlzLm9wdGlvbnM7Y2UucmF3JiZjZS53aW5kb3dCaXRzPjA/Y2Uud2luZG93Qml0cz0tY2Uud2luZG93Qml0czpjZS5nemlwJiZjZS53aW5kb3dCaXRzPjAmJmNlLndpbmRvd0JpdHM8MTYmJihjZS53aW5kb3dCaXRzKz0xNiksdGhp'@;
put 'cy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgaix0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIEc9Sy5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLGNlLmxldmVsLGNlLm1ldGhvZCxjZS53aW5kb3dCaXRzLGNlLm1lbUxldmVsLGNl'@;
put 'LnN0cmF0ZWd5KTtpZigwIT09Ryl0aHJvdyBuZXcgRXJyb3IoRVtHXSk7Y2UuaGVhZGVyJiZLLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGNlLmhlYWRlcil9O2Z1bmN0aW9uIG9lKHVlLGNlKXt2YXIgRz1uZXcgdGUoY2UpO2lmKEcucHVzaCh1ZSwhMCksRy5lcnIpdGhyb3cgRy5tc2c7'@;
put 'cmV0dXJuIEcucmVzdWx0fXRlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHVlLGNlKXt2YXIgRCxILEc9dGhpcy5zdHJtLGI9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO0g9Y2U9PT1+fmNlP2NlOiEwPT09Y2U/NDowLEcuaW5wdXQ9InN0cmluZyI9PXR5'@;
put 'cGVvZiB1ZT9rLnN0cmluZzJidWYodWUpOnVlLEcubmV4dF9pbj0wLEcuYXZhaWxfaW49Ry5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PUcuYXZhaWxfb3V0JiYoRy5vdXRwdXQ9bmV3IEwuQnVmOChiKSxHLm5leHRfb3V0PTAsRy5hdmFpbF9vdXQ9YiksMSE9PShEPUsuZGVmbGF0ZShHLEgpKSYm'@;
put 'MCE9PUQpcmV0dXJuIHRoaXMub25FbmQoRCksdGhpcy5lbmRlZD0hMCwhMTsoMD09PUcuYXZhaWxfb3V0fHwwPT09Ry5hdmFpbF9pbiYmND09PUgpJiZ0aGlzLm9uRGF0YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9rLmJ1ZjJiaW5zdHJpbmcoTC5zaHJpbmtCdWYoRy5vdXRwdXQsRy5u'@;
put 'ZXh0X291dCkpOkwuc2hyaW5rQnVmKEcub3V0cHV0LEcubmV4dF9vdXQpKX13aGlsZSgoRy5hdmFpbF9pbj4wfHwwPT09Ry5hdmFpbF9vdXQpJiYxIT09RCk7cmV0dXJuIDQhPT1IfHwoRD1LLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKEQpLHRoaXMuZW5kZWQ9ITAsMD09PUQp'@;
put 'fSx0ZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHVlKXt0aGlzLmNodW5rcy5wdXNoKHVlKX0sdGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKHVlKXswPT09dWUmJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpMLmZsYXR0'@;
put 'ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj11ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSx6LkRlZmxhdGU9dGUsei5kZWZsYXRlPW9lLHouZGVmbGF0ZVJhdz1mdW5jdGlvbiBzZSh1ZSxjZSl7cmV0dXJuKGNlPWNlfHx7fSkucmF3PSEwLG9lKHVlLGNl'@;
put 'KX0sei5nemlwPWZ1bmN0aW9uIGhlKHVlLGNlKXtyZXR1cm4oY2U9Y2V8fHt9KS5nemlwPSEwLG9lKHVlLGNlKX19LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3Ry'@;
put 'ZWFtIjozOX1dLDI2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vemxpYi9pbmZsYXRlLmpzIiksTD1PKCIuL3V0aWxzL2NvbW1vbiIpLGs9TygiLi91dGlscy9zdHJpbmdzIiksRT1PKCIuL3psaWIvY29uc3RhbnRzIiksaj1PKCIuL3psaWIvbWVzc2FnZXMiKSxW'@;
put 'PU8oIi4vemxpYi96c3RyZWFtIiksQj1PKCIuL3psaWIvZ3poZWFkZXIiKSxZPWZ1bmN0aW9uKHEpe3RoaXMub3B0aW9ucz1MLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0scXx8e30pO3ZhciBlZT10aGlzLm9wdGlvbnM7ZWUucmF3JiZlZS53aW5kb3dCaXRz'@;
put 'Pj0wJiZlZS53aW5kb3dCaXRzPDE2JiYoZWUud2luZG93Qml0cz0tZWUud2luZG93Qml0cywwPT09ZWUud2luZG93Qml0cyYmKGVlLndpbmRvd0JpdHM9LTE1KSksZWUud2luZG93Qml0cz49MCYmZWUud2luZG93Qml0czwxNiYmIShxJiZxLndpbmRvd0JpdHMpJiYoZWUud2luZG93Qml0cys9'@;
put 'MzIpLGVlLndpbmRvd0JpdHM+MTUmJmVlLndpbmRvd0JpdHM8NDgmJigxNSZlZS53aW5kb3dCaXRzfHwoZWUud2luZG93Qml0c3w9MTUpKSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBWLHRoaXMuc3RybS5hdmFpbF9v'@;
put 'dXQ9MDt2YXIgdGU9Sy5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGVlLndpbmRvd0JpdHMpO2lmKHRlIT09RS5aX09LKXRocm93IG5ldyBFcnJvcihqW3RlXSk7dGhpcy5oZWFkZXI9bmV3IEIsSy5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9O2Z1bmN0aW9uIFgocSxl'@;
put 'ZSl7dmFyIHRlPW5ldyBZKGVlKTtpZih0ZS5wdXNoKHEsITApLHRlLmVycil0aHJvdyB0ZS5tc2c7cmV0dXJuIHRlLnJlc3VsdH1ZLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHEsZWUpe3ZhciBzZSxoZSx1ZSxjZSxHLHRlPXRoaXMuc3RybSxvZT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lm'@;
put 'KHRoaXMuZW5kZWQpcmV0dXJuITE7aGU9ZWU9PT1+fmVlP2VlOiEwPT09ZWU/RS5aX0ZJTklTSDpFLlpfTk9fRkxVU0gsdGUuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBxP2suYmluc3RyaW5nMmJ1ZihxKTpxLHRlLm5leHRfaW49MCx0ZS5hdmFpbF9pbj10ZS5pbnB1dC5sZW5ndGg7ZG97aWYo'@;
put 'MD09PXRlLmF2YWlsX291dCYmKHRlLm91dHB1dD1uZXcgTC5CdWY4KG9lKSx0ZS5uZXh0X291dD0wLHRlLmF2YWlsX291dD1vZSksKHNlPUsuaW5mbGF0ZSh0ZSxFLlpfTk9fRkxVU0gpKSE9PUUuWl9TVFJFQU1fRU5EJiZzZSE9PUUuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChzZSksdGhpcy5l'@;
put 'bmRlZD0hMCwhMTt0ZS5uZXh0X291dCYmKDA9PT10ZS5hdmFpbF9vdXR8fHNlPT09RS5aX1NUUkVBTV9FTkR8fDA9PT10ZS5hdmFpbF9pbiYmaGU9PT1FLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyh1ZT1rLnV0Zjhib3JkZXIodGUub3V0cHV0LHRlLm5leHRfb3V0'@;
put 'KSxjZT10ZS5uZXh0X291dC11ZSxHPWsuYnVmMnN0cmluZyh0ZS5vdXRwdXQsdWUpLHRlLm5leHRfb3V0PWNlLHRlLmF2YWlsX291dD1vZS1jZSxjZSYmTC5hcnJheVNldCh0ZS5vdXRwdXQsdGUub3V0cHV0LHVlLGNlLDApLHRoaXMub25EYXRhKEcpKTp0aGlzLm9uRGF0YShMLnNocmlua0J1'@;
put 'Zih0ZS5vdXRwdXQsdGUubmV4dF9vdXQpKSl9d2hpbGUodGUuYXZhaWxfaW4+MCYmc2UhPT1FLlpfU1RSRUFNX0VORCk7cmV0dXJuIHNlPT09RS5aX1NUUkVBTV9FTkQmJihoZT1FLlpfRklOSVNIKSxoZSE9PUUuWl9GSU5JU0h8fChzZT1LLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9u'@;
put 'RW5kKHNlKSx0aGlzLmVuZGVkPSEwLHNlPT09RS5aX09LKX0sWS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHEpe3RoaXMuY2h1bmtzLnB1c2gocSl9LFkucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKHEpe3E9PT1FLlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9u'@;
put 'cy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpMLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1xLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHouSW5mbGF0ZT1ZLHouaW5mbGF0ZT1YLHouaW5mbGF0ZVJhdz1mdW5jdGlvbiBVKHEsZWUpe3JldHVy'@;
put 'bihlZT1lZXx8e30pLnJhdz0hMCxYKHEsZWUpfSx6LnVuZ3ppcD1YfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2Vz'@;
put 'IjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7ei5hc3NpZ249ZnVuY3Rpb24oRSl7Zm9yKHZhciBq'@;
put 'PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtqLmxlbmd0aDspe3ZhciBWPWouc2hpZnQoKTtpZihWKXtpZigib2JqZWN0IiE9dHlwZW9mIFYpdGhyb3cgbmV3IFR5cGVFcnJvcihWKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIEIgaW4gVilWLmhhc093blBy'@;
put 'b3BlcnR5KEIpJiYoRVtCXT1WW0JdKX19cmV0dXJuIEV9LHouc2hyaW5rQnVmPWZ1bmN0aW9uKEUsail7cmV0dXJuIEUubGVuZ3RoPT09aj9FOkUuc3ViYXJyYXk/RS5zdWJhcnJheSgwLGopOihFLmxlbmd0aD1qLEUpfTt2YXIgTD17YXJyYXlTZXQ6ZnVuY3Rpb24oRSxqLFYsQixZKXtpZihq'@;
put 'LnN1YmFycmF5JiZFLnN1YmFycmF5KUUuc2V0KGouc3ViYXJyYXkoVixWK0IpLFkpO2Vsc2UgZm9yKHZhciBYPTA7WDxCO1grKylFW1krWF09altWK1hdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEUpe3ZhciBqLFYsQixZLFgsVTtmb3IoQj0wLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspQis9'@;
put 'RVtqXS5sZW5ndGg7Zm9yKFU9bmV3IFVpbnQ4QXJyYXkoQiksWT0wLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspVS5zZXQoWD1FW2pdLFkpLFkrPVgubGVuZ3RoO3JldHVybiBVfX0saz17YXJyYXlTZXQ6ZnVuY3Rpb24oRSxqLFYsQixZKXtmb3IodmFyIFg9MDtYPEI7WCsrKUVbWStYXT1qW1Yr'@;
put 'WF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oRSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLEUpfX07ei5zZXRUeXBlZD1mdW5jdGlvbihFKXtFPyh6LkJ1Zjg9VWludDhBcnJheSx6LkJ1ZjE2PVVpbnQxNkFycmF5LHouQnVmMzI9SW50MzJBcnJheSx6LmFzc2lnbih6LEwpKTooei5CdWY4'@;
put 'PUFycmF5LHouQnVmMTY9QXJyYXksei5CdWYzMj1BcnJheSx6LmFzc2lnbih6LGspKX0sei5zZXRUeXBlZChLKX0se31dLDI4OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vY29tbW9uIiksTD0hMCxrPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51'@;
put 'bGwsWzBdKX1jYXRjaHtMPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoe2s9ITF9Zm9yKHZhciBFPW5ldyBLLkJ1ZjgoMjU2KSxqPTA7ajwyNTY7aisrKUVbal09aj49MjUyPzY6aj49MjQ4PzU6aj49MjQwPzQ6aj49MjI0PzM6'@;
put 'aj49MTkyPzI6MTtmdW5jdGlvbiBWKEIsWSl7aWYoWTw2NTUzNyYmKEIuc3ViYXJyYXkmJmt8fCFCLnN1YmFycmF5JiZMKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEsuc2hyaW5rQnVmKEIsWSkpO2Zvcih2YXIgWD0iIixVPTA7VTxZO1UrKylYKz1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKEJbVV0pO3JldHVybiBYfUVbMjU0XT1FWzI1NF09MSx6LnN0cmluZzJidWY9ZnVuY3Rpb24oQil7dmFyIFksWCxVLHEsZWUsdGU9Qi5sZW5ndGgsb2U9MDtmb3IocT0wO3E8dGU7cSsrKTU1Mjk2PT0oNjQ1MTImKFg9Qi5jaGFyQ29kZUF0KHEpKSkmJnErMTx0ZSYmNTYzMjA9'@;
put 'PSg2NDUxMiYoVT1CLmNoYXJDb2RlQXQocSsxKSkpJiYoWD02NTUzNisoWC01NTI5Njw8MTApKyhVLTU2MzIwKSxxKyspLG9lKz1YPDEyOD8xOlg8MjA0OD8yOlg8NjU1MzY/Mzo0O2ZvcihZPW5ldyBLLkJ1Zjgob2UpLGVlPTAscT0wO2VlPG9lO3ErKyk1NTI5Nj09KDY0NTEyJihYPUIuY2hh'@;
put 'ckNvZGVBdChxKSkpJiZxKzE8dGUmJjU2MzIwPT0oNjQ1MTImKFU9Qi5jaGFyQ29kZUF0KHErMSkpKSYmKFg9NjU1MzYrKFgtNTUyOTY8PDEwKSsoVS01NjMyMCkscSsrKSxYPDEyOD9ZW2VlKytdPVg6WDwyMDQ4PyhZW2VlKytdPTE5MnxYPj4+NixZW2VlKytdPTEyOHw2MyZYKTpYPDY1NTM2'@;
put 'PyhZW2VlKytdPTIyNHxYPj4+MTIsWVtlZSsrXT0xMjh8WD4+PjYmNjMsWVtlZSsrXT0xMjh8NjMmWCk6KFlbZWUrK109MjQwfFg+Pj4xOCxZW2VlKytdPTEyOHxYPj4+MTImNjMsWVtlZSsrXT0xMjh8WD4+PjYmNjMsWVtlZSsrXT0xMjh8NjMmWCk7cmV0dXJuIFl9LHouYnVmMmJpbnN0cmlu'@;
put 'Zz1mdW5jdGlvbihCKXtyZXR1cm4gVihCLEIubGVuZ3RoKX0sei5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKEIpe2Zvcih2YXIgWT1uZXcgSy5CdWY4KEIubGVuZ3RoKSxYPTAsVT1ZLmxlbmd0aDtYPFU7WCsrKVlbWF09Qi5jaGFyQ29kZUF0KFgpO3JldHVybiBZfSx6LmJ1ZjJzdHJpbmc9ZnVu'@;
put 'Y3Rpb24oQixZKXt2YXIgWCxVLHEsZWUsdGU9WXx8Qi5sZW5ndGgsb2U9bmV3IEFycmF5KDIqdGUpO2ZvcihVPTAsWD0wO1g8dGU7KWlmKChxPUJbWCsrXSk8MTI4KW9lW1UrK109cTtlbHNlIGlmKChlZT1FW3FdKT40KW9lW1UrK109NjU1MzMsWCs9ZWUtMTtlbHNle2ZvcihxJj0yPT09ZWU/'@;
put 'MzE6Mz09PWVlPzE1Ojc7ZWU+MSYmWDx0ZTspcT1xPDw2fDYzJkJbWCsrXSxlZS0tO2VlPjE/b2VbVSsrXT02NTUzMzpxPDY1NTM2P29lW1UrK109cToob2VbVSsrXT01NTI5NnwocS09NjU1MzYpPj4xMCYxMDIzLG9lW1UrK109NTYzMjB8MTAyMyZxKX1yZXR1cm4gVihvZSxVKX0sei51dGY4'@;
put 'Ym9yZGVyPWZ1bmN0aW9uKEIsWSl7dmFyIFg7Zm9yKChZPVl8fEIubGVuZ3RoKT5CLmxlbmd0aCYmKFk9Qi5sZW5ndGgpLFg9WS0xO1g+PTAmJjEyOD09KDE5MiZCW1hdKTspWC0tO3JldHVybiBYPDB8fDA9PT1YP1k6WCtFW0JbWF1dPlk/WDpZfX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVu'@;
put 'Y3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24gSyhMLGssRSxqKXtmb3IodmFyIFY9NjU1MzUmTHwwLEI9TD4+PjE2JjY1NTM1fDAsWT0wOzAhPT1FOyl7RS09WT1FPjJlMz8yZTM6RTtkb3tCPUIrKFY9VitrW2orK118MCl8MH13aGlsZSgtLVkpO1YlPTY1NTIx'@;
put 'LEIlPTY1NTIxfXJldHVybiBWfEI8PDE2fDB9fSx7fV0sMzA6W2Z1bmN0aW9uKE8sUix6KXtSLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpf'@;
put 'U1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjot'@;
put 'MSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSwzMTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgTD1mdW5j'@;
put 'dGlvbiBLKCl7Zm9yKHZhciBFLGo9W10sVj0wO1Y8MjU2O1YrKyl7RT1WO2Zvcih2YXIgQj0wO0I8ODtCKyspRT0xJkU/Mzk4ODI5MjM4NF5FPj4+MTpFPj4+MTtqW1ZdPUV9cmV0dXJuIGp9KCk7Ui5leHBvcnRzPWZ1bmN0aW9uIGsoRSxqLFYsQil7dmFyIFk9TCxYPUIrVjtFXj0tMTtmb3Io'@;
put 'dmFyIFU9QjtVPFg7VSsrKUU9RT4+PjheWVsyNTUmKEVealtVXSldO3JldHVybi0xXkV9fSx7fV0sMzI6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIiksTD1PKCIuL3RyZWVzIiksaz1PKCIuL2FkbGVyMzIiKSxFPU8oIi4vY3JjMzIiKSxq'@;
put 'PU8oIi4vbWVzc2FnZXMiKSxWPTAscT0wLHRlPS0yLEg9MixOPTgsdz0yODYsSj0zMCxuZT0xOSxkZT0yKncrMSxmZT0xNSx4ZT0zLEllPTI1OCxGZT1JZSt4ZSsxLGplPTQyLGx0PTExMztmdW5jdGlvbiBVZShydCxMdCl7cmV0dXJuIHJ0Lm1zZz1qW0x0XSxMdH1mdW5jdGlvbiBodChydCl7'@;
put 'cmV0dXJuKHJ0PDwxKS0ocnQ+ND85OjApfWZ1bmN0aW9uIE1lKHJ0KXtmb3IodmFyIEx0PXJ0Lmxlbmd0aDstLUx0Pj0wOylydFtMdF09MH1mdW5jdGlvbiBEZShydCl7dmFyIEx0PXJ0LnN0YXRlLFF0PUx0LnBlbmRpbmc7UXQ+cnQuYXZhaWxfb3V0JiYoUXQ9cnQuYXZhaWxfb3V0KSwwIT09'@;
put 'UXQmJihLLmFycmF5U2V0KHJ0Lm91dHB1dCxMdC5wZW5kaW5nX2J1ZixMdC5wZW5kaW5nX291dCxRdCxydC5uZXh0X291dCkscnQubmV4dF9vdXQrPVF0LEx0LnBlbmRpbmdfb3V0Kz1RdCxydC50b3RhbF9vdXQrPVF0LHJ0LmF2YWlsX291dC09UXQsTHQucGVuZGluZy09UXQsMD09PUx0LnBl'@;
put 'bmRpbmcmJihMdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gemUocnQsTHQpe0wuX3RyX2ZsdXNoX2Jsb2NrKHJ0LHJ0LmJsb2NrX3N0YXJ0Pj0wP3J0LmJsb2NrX3N0YXJ0Oi0xLHJ0LnN0cnN0YXJ0LXJ0LmJsb2NrX3N0YXJ0LEx0KSxydC5ibG9ja19zdGFydD1ydC5zdHJzdGFydCxEZShy'@;
put 'dC5zdHJtKX1mdW5jdGlvbiBvdChydCxMdCl7cnQucGVuZGluZ19idWZbcnQucGVuZGluZysrXT1MdH1mdW5jdGlvbiB1dChydCxMdCl7cnQucGVuZGluZ19idWZbcnQucGVuZGluZysrXT1MdD4+PjgmMjU1LHJ0LnBlbmRpbmdfYnVmW3J0LnBlbmRpbmcrK109MjU1Jkx0fWZ1bmN0aW9uIE10'@;
put 'KHJ0LEx0LFF0LER0KXt2YXIgcHQ9cnQuYXZhaWxfaW47cmV0dXJuIHB0PkR0JiYocHQ9RHQpLDA9PT1wdD8wOihydC5hdmFpbF9pbi09cHQsSy5hcnJheVNldChMdCxydC5pbnB1dCxydC5uZXh0X2luLHB0LFF0KSwxPT09cnQuc3RhdGUud3JhcD9ydC5hZGxlcj1rKHJ0LmFkbGVyLEx0LHB0'@;
put 'LFF0KToyPT09cnQuc3RhdGUud3JhcCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsTHQscHQsUXQpKSxydC5uZXh0X2luKz1wdCxydC50b3RhbF9pbis9cHQscHQpfWZ1bmN0aW9uIEh0KHJ0LEx0KXt2YXIgcHQsWXQsUXQ9cnQubWF4X2NoYWluX2xlbmd0aCxEdD1ydC5zdHJzdGFydCxMbj1ydC5w'@;
put 'cmV2X2xlbmd0aCx6dD1ydC5uaWNlX21hdGNoLHluPXJ0LnN0cnN0YXJ0PnJ0Lndfc2l6ZS1GZT9ydC5zdHJzdGFydC0ocnQud19zaXplLUZlKTowLHhuPXJ0LndpbmRvdyxzbj1ydC53X21hc2ssQm49cnQucHJldixSbj1ydC5zdHJzdGFydCtJZSwkdD14bltEdCtMbi0xXSxGbj14bltEdCtM'@;
put 'bl07cnQucHJldl9sZW5ndGg+PXJ0Lmdvb2RfbWF0Y2gmJihRdD4+PTIpLHp0PnJ0Lmxvb2thaGVhZCYmKHp0PXJ0Lmxvb2thaGVhZCk7ZG97aWYoeG5bKHB0PUx0KStMbl09PT1GbiYmeG5bcHQrTG4tMV09PT0kdCYmeG5bcHRdPT09eG5bRHRdJiZ4blsrK3B0XT09PXhuW0R0KzFdKXtEdCs9'@;
put 'MixwdCsrO2Rve313aGlsZSh4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4'@;
put 'blsrK0R0XT09PXhuWysrcHRdJiZEdDxSbik7aWYoWXQ9SWUtKFJuLUR0KSxEdD1Sbi1JZSxZdD5Mbil7aWYocnQubWF0Y2hfc3RhcnQ9THQsTG49WXQsWXQ+PXp0KWJyZWFrOyR0PXhuW0R0K0xuLTFdLEZuPXhuW0R0K0xuXX19fXdoaWxlKChMdD1CbltMdCZzbl0pPnluJiYwIT0tLVF0KTty'@;
put 'ZXR1cm4gTG48PXJ0Lmxvb2thaGVhZD9MbjpydC5sb29rYWhlYWR9ZnVuY3Rpb24gUHQocnQpe3ZhciBRdCxEdCxwdCxZdCxMbixMdD1ydC53X3NpemU7ZG97aWYoWXQ9cnQud2luZG93X3NpemUtcnQubG9va2FoZWFkLXJ0LnN0cnN0YXJ0LHJ0LnN0cnN0YXJ0Pj1MdCsoTHQtRmUpKXtLLmFy'@;
put 'cmF5U2V0KHJ0LndpbmRvdyxydC53aW5kb3csTHQsTHQsMCkscnQubWF0Y2hfc3RhcnQtPUx0LHJ0LnN0cnN0YXJ0LT1MdCxydC5ibG9ja19zdGFydC09THQsUXQ9RHQ9cnQuaGFzaF9zaXplO2Rve3B0PXJ0LmhlYWRbLS1RdF0scnQuaGVhZFtRdF09cHQ+PUx0P3B0LUx0OjB9d2hpbGUoLS1E'@;
put 'dCk7UXQ9RHQ9THQ7ZG97cHQ9cnQucHJldlstLVF0XSxydC5wcmV2W1F0XT1wdD49THQ/cHQtTHQ6MH13aGlsZSgtLUR0KTtZdCs9THR9aWYoMD09PXJ0LnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoRHQ9TXQocnQuc3RybSxydC53aW5kb3cscnQuc3Ryc3RhcnQrcnQubG9va2FoZWFkLFl0KSxy'@;
put 'dC5sb29rYWhlYWQrPUR0LHJ0Lmxvb2thaGVhZCtydC5pbnNlcnQ+PXhlKWZvcihydC5pbnNfaD1ydC53aW5kb3dbTG49cnQuc3Ryc3RhcnQtcnQuaW5zZXJ0XSxydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W0xuKzFdKSZydC5oYXNoX21hc2s7cnQuaW5zZXJ0'@;
put 'JiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tMbit4ZS0xXSkmcnQuaGFzaF9tYXNrLHJ0LnByZXZbTG4mcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1MbixMbisrLHJ0Lmluc2VydC0tLCEocnQubG9va2FoZWFkK3J0'@;
put 'Lmluc2VydDx4ZSkpOyk7fXdoaWxlKHJ0Lmxvb2thaGVhZDxGZSYmMCE9PXJ0LnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIENuKHJ0LEx0KXtmb3IodmFyIFF0LER0Ozspe2lmKHJ0Lmxvb2thaGVhZDxGZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDxGZSYmTHQ9PT1WKXJldHVybiAxO2lmKDA9'@;
put 'PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYoUXQ9MCxydC5sb29rYWhlYWQ+PXhlJiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLFF0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFk'@;
put 'W3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCksMCE9PVF0JiZydC5zdHJzdGFydC1RdDw9cnQud19zaXplLUZlJiYocnQubWF0Y2hfbGVuZ3RoPUh0KHJ0LFF0KSkscnQubWF0Y2hfbGVuZ3RoPj14ZSlpZihEdD1MLl90cl90YWxseShydCxydC5zdHJzdGFydC1ydC5t'@;
put 'YXRjaF9zdGFydCxydC5tYXRjaF9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQubWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aDw9cnQubWF4X2xhenlfbWF0Y2gmJnJ0Lmxvb2thaGVhZD49eGUpe3J0Lm1hdGNoX2xlbmd0aC0tO2Rve3J0LnN0cnN0YXJ0KysscnQuaW5zX2g9KHJ0Lmlu'@;
put 'c19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLFF0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydH13aGlsZSgwIT0tLXJ0Lm1hdGNoX2xl'@;
put 'bmd0aCk7cnQuc3Ryc3RhcnQrK31lbHNlIHJ0LnN0cnN0YXJ0Kz1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPTAscnQuaW5zX2g9cnQud2luZG93W3J0LnN0cnN0YXJ0XSxydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0KzFdKSZy'@;
put 'dC5oYXNoX21hc2s7ZWxzZSBEdD1MLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0Kys7aWYoRHQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PXJ0LnN0cnN0'@;
put 'YXJ0PHhlLTE/cnQuc3Ryc3RhcnQ6eGUtMSw0PT09THQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBVdChydCxMdCl7Zm9yKHZhciBRdCxEdCxwdDs7KXtpZihy'@;
put 'dC5sb29rYWhlYWQ8RmUpe2lmKFB0KHJ0KSxydC5sb29rYWhlYWQ8RmUmJkx0PT09VilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfWlmKFF0PTAscnQubG9va2FoZWFkPj14ZSYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3Rh'@;
put 'cnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxRdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNfaF09cnQuc3Ryc3RhcnQpLHJ0LnByZXZfbGVuZ3RoPXJ0Lm1hdGNoX2xlbmd0aCxydC5wcmV2X21hdGNoPXJ0Lm1hdGNoX3N0YXJ0'@;
put 'LHJ0Lm1hdGNoX2xlbmd0aD14ZS0xLDAhPT1RdCYmcnQucHJldl9sZW5ndGg8cnQubWF4X2xhenlfbWF0Y2gmJnJ0LnN0cnN0YXJ0LVF0PD1ydC53X3NpemUtRmUmJihydC5tYXRjaF9sZW5ndGg9SHQocnQsUXQpLHJ0Lm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1ydC5zdHJhdGVneXx8cnQubWF0'@;
put 'Y2hfbGVuZ3RoPT09eGUmJnJ0LnN0cnN0YXJ0LXJ0Lm1hdGNoX3N0YXJ0PjQwOTYpJiYocnQubWF0Y2hfbGVuZ3RoPXhlLTEpKSxydC5wcmV2X2xlbmd0aD49eGUmJnJ0Lm1hdGNoX2xlbmd0aDw9cnQucHJldl9sZW5ndGgpe3B0PXJ0LnN0cnN0YXJ0K3J0Lmxvb2thaGVhZC14ZSxEdD1MLl90'@;
put 'cl90YWxseShydCxydC5zdHJzdGFydC0xLXJ0LnByZXZfbWF0Y2gscnQucHJldl9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQucHJldl9sZW5ndGgtMSxydC5wcmV2X2xlbmd0aC09Mjtkb3srK3J0LnN0cnN0YXJ0PD1wdCYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5y'@;
put 'dC53aW5kb3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxRdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNfaF09cnQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tcnQucHJldl9sZW5ndGgpO2lmKHJ0Lm1hdGNoX2F2'@;
put 'YWlsYWJsZT0wLHJ0Lm1hdGNoX2xlbmd0aD14ZS0xLHJ0LnN0cnN0YXJ0KyssRHQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKHJ0Lm1hdGNoX2F2YWlsYWJsZSl7aWYoKER0PUwuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0'@;
put 'LTFdKSkmJnplKHJ0LCExKSxydC5zdHJzdGFydCsrLHJ0Lmxvb2thaGVhZC0tLDA9PT1ydC5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHJ0Lm1hdGNoX2F2YWlsYWJsZT0xLHJ0LnN0cnN0YXJ0KysscnQubG9va2FoZWFkLS19cmV0dXJuIHJ0Lm1hdGNoX2F2YWlsYWJsZSYmKER0PUwu'@;
put 'X3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0LTFdKSxydC5tYXRjaF9hdmFpbGFibGU9MCkscnQuaW5zZXJ0PXJ0LnN0cnN0YXJ0PHhlLTE/cnQuc3Ryc3RhcnQ6eGUtMSw0PT09THQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYm'@;
put 'KHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgJG4sZW49ZnVuY3Rpb24ocnQsTHQsUXQsRHQscHQpe3RoaXMuZ29vZF9sZW5ndGg9cnQsdGhpcy5tYXhfbGF6eT1MdCx0aGlzLm5pY2VfbGVuZ3RoPVF0LHRoaXMubWF4X2NoYWluPUR0LHRoaXMuZnVuYz1wdH07ZnVu'@;
put 'Y3Rpb24gZnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0'@;
put 'aGlzLm1ldGhvZD1OLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3Np'@;
put 'emU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9z'@;
put 'dGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0'@;
put 'cmVlPW5ldyBLLkJ1ZjE2KDIqZGUpLHRoaXMuZHluX2R0cmVlPW5ldyBLLkJ1ZjE2KDIqKDIqSisxKSksdGhpcy5ibF90cmVlPW5ldyBLLkJ1ZjE2KDIqKDIqbmUrMSkpLE1lKHRoaXMuZHluX2x0cmVlKSxNZSh0aGlzLmR5bl9kdHJlZSksTWUodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1u'@;
put 'dWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgSy5CdWYxNihmZSsxKSx0aGlzLmhlYXA9bmV3IEsuQnVmMTYoMip3KzEpLE1lKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBLLkJ1'@;
put 'ZjE2KDIqdysxKSxNZSh0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRo'@;
put 'aXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBmbihydCl7dmFyIEx0O3JldHVybiBydCYmcnQuc3RhdGU/KHJ0LnRvdGFsX2luPXJ0LnRvdGFsX291dD0wLHJ0LmRhdGFfdHlwZT1ILChMdD1ydC5zdGF0ZSkucGVuZGluZz0wLEx0LnBlbmRpbmdfb3V0PTAsTHQud3JhcDwwJiYoTHQud3JhcD0tTHQu'@;
put 'd3JhcCksTHQuc3RhdHVzPUx0LndyYXA/amU6bHQscnQuYWRsZXI9Mj09PUx0LndyYXA/MDoxLEx0Lmxhc3RfZmx1c2g9VixMLl90cl9pbml0KEx0KSxxKTpVZShydCx0ZSl9ZnVuY3Rpb24gaG4ocnQpe3ZhciBMdD1mbihydCk7cmV0dXJuIEx0PT09cSYmZnVuY3Rpb24gSG4ocnQpe3J0Lndp'@;
put 'bmRvd19zaXplPTIqcnQud19zaXplLE1lKHJ0LmhlYWQpLHJ0Lm1heF9sYXp5X21hdGNoPSRuW3J0LmxldmVsXS5tYXhfbGF6eSxydC5nb29kX21hdGNoPSRuW3J0LmxldmVsXS5nb29kX2xlbmd0aCxydC5uaWNlX21hdGNoPSRuW3J0LmxldmVsXS5uaWNlX2xlbmd0aCxydC5tYXhfY2hhaW5f'@;
put 'bGVuZ3RoPSRuW3J0LmxldmVsXS5tYXhfY2hhaW4scnQuc3Ryc3RhcnQ9MCxydC5ibG9ja19zdGFydD0wLHJ0Lmxvb2thaGVhZD0wLHJ0Lmluc2VydD0wLHJ0Lm1hdGNoX2xlbmd0aD1ydC5wcmV2X2xlbmd0aD14ZS0xLHJ0Lm1hdGNoX2F2YWlsYWJsZT0wLHJ0Lmluc19oPTB9KHJ0LnN0YXRl'@;
put 'KSxMdH1mdW5jdGlvbiBYdChydCxMdCxRdCxEdCxwdCxZdCl7aWYoIXJ0KXJldHVybiB0ZTt2YXIgTG49MTtpZigtMT09PUx0JiYoTHQ9NiksRHQ8MD8oTG49MCxEdD0tRHQpOkR0PjE1JiYoTG49MixEdC09MTYpLHB0PDF8fHB0Pjl8fFF0IT09Tnx8RHQ8OHx8RHQ+MTV8fEx0PDB8fEx0Pjl8'@;
put 'fFl0PDB8fFl0PjQpcmV0dXJuIFVlKHJ0LHRlKTs4PT09RHQmJihEdD05KTt2YXIgenQ9bmV3IGZ0O3JldHVybiBydC5zdGF0ZT16dCx6dC5zdHJtPXJ0LHp0LndyYXA9TG4senQuZ3poZWFkPW51bGwsenQud19iaXRzPUR0LHp0Lndfc2l6ZT0xPDx6dC53X2JpdHMsenQud19tYXNrPXp0Lndf'@;
put 'c2l6ZS0xLHp0Lmhhc2hfYml0cz1wdCs3LHp0Lmhhc2hfc2l6ZT0xPDx6dC5oYXNoX2JpdHMsenQuaGFzaF9tYXNrPXp0Lmhhc2hfc2l6ZS0xLHp0Lmhhc2hfc2hpZnQ9fn4oKHp0Lmhhc2hfYml0cyt4ZS0xKS94ZSksenQud2luZG93PW5ldyBLLkJ1ZjgoMip6dC53X3NpemUpLHp0LmhlYWQ9'@;
put 'bmV3IEsuQnVmMTYoenQuaGFzaF9zaXplKSx6dC5wcmV2PW5ldyBLLkJ1ZjE2KHp0Lndfc2l6ZSksenQubGl0X2J1ZnNpemU9MTw8cHQrNix6dC5wZW5kaW5nX2J1Zl9zaXplPTQqenQubGl0X2J1ZnNpemUsenQucGVuZGluZ19idWY9bmV3IEsuQnVmOCh6dC5wZW5kaW5nX2J1Zl9zaXplKSx6'@;
put 'dC5kX2J1Zj16dC5saXRfYnVmc2l6ZT4+MSx6dC5sX2J1Zj0zKnp0LmxpdF9idWZzaXplLHp0LmxldmVsPUx0LHp0LnN0cmF0ZWd5PVl0LHp0Lm1ldGhvZD1RdCxobihydCl9JG49W25ldyBlbigwLDAsMCwwLGZ1bmN0aW9uIG9uKHJ0LEx0KXt2YXIgUXQ9NjU1MzU7Zm9yKFF0PnJ0LnBlbmRp'@;
put 'bmdfYnVmX3NpemUtNSYmKFF0PXJ0LnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYocnQubG9va2FoZWFkPD0xKXtpZihQdChydCksMD09PXJ0Lmxvb2thaGVhZCYmTHQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9cnQuc3Ryc3RhcnQrPXJ0Lmxvb2thaGVhZCxydC5s'@;
put 'b29rYWhlYWQ9MDt2YXIgRHQ9cnQuYmxvY2tfc3RhcnQrUXQ7aWYoKDA9PT1ydC5zdHJzdGFydHx8cnQuc3Ryc3RhcnQ+PUR0KSYmKHJ0Lmxvb2thaGVhZD1ydC5zdHJzdGFydC1EdCxydC5zdHJzdGFydD1EdCx6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KXx8cnQuc3Ryc3RhcnQt'@;
put 'cnQuYmxvY2tfc3RhcnQ+PXJ0Lndfc2l6ZS1GZSYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09THQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KToocnQuc3Ryc3RhcnQ+cnQuYmxvY2tfc3RhcnQm'@;
put 'JnplKHJ0LCExKSwxKX0pLG5ldyBlbig0LDQsOCw0LENuKSxuZXcgZW4oNCw1LDE2LDgsQ24pLG5ldyBlbig0LDYsMzIsMzIsQ24pLG5ldyBlbig0LDQsMTYsMTYsVXQpLG5ldyBlbig4LDE2LDMyLDMyLFV0KSxuZXcgZW4oOCwxNiwxMjgsMTI4LFV0KSxuZXcgZW4oOCwzMiwxMjgsMjU2LFV0'@;
put 'KSxuZXcgZW4oMzIsMTI4LDI1OCwxMDI0LFV0KSxuZXcgZW4oMzIsMjU4LDI1OCw0MDk2LFV0KV0sei5kZWZsYXRlSW5pdD1mdW5jdGlvbiBfdChydCxMdCl7cmV0dXJuIFh0KHJ0LEx0LE4sMTUsOCwwKX0sei5kZWZsYXRlSW5pdDI9WHQsei5kZWZsYXRlUmVzZXQ9aG4sei5kZWZsYXRlUmVz'@;
put 'ZXRLZWVwPWZuLHouZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiB3dChydCxMdCl7cmV0dXJuIHJ0JiZydC5zdGF0ZSYmMj09PXJ0LnN0YXRlLndyYXA/KHJ0LnN0YXRlLmd6aGVhZD1MdCxxKTp0ZX0sei5kZWZsYXRlPWZ1bmN0aW9uIE50KHJ0LEx0KXt2YXIgUXQsRHQscHQsWXQ7aWYoIXJ0'@;
put 'fHwhcnQuc3RhdGV8fEx0PjV8fEx0PDApcmV0dXJuIHJ0P1VlKHJ0LHRlKTp0ZTtpZihEdD1ydC5zdGF0ZSwhcnQub3V0cHV0fHwhcnQuaW5wdXQmJjAhPT1ydC5hdmFpbF9pbnx8NjY2PT09RHQuc3RhdHVzJiY0IT09THQpcmV0dXJuIFVlKHJ0LDA9PT1ydC5hdmFpbF9vdXQ/LTU6dGUpO2lm'@;
put 'KER0LnN0cm09cnQsUXQ9RHQubGFzdF9mbHVzaCxEdC5sYXN0X2ZsdXNoPUx0LER0LnN0YXR1cz09PWplKWlmKDI9PT1EdC53cmFwKXJ0LmFkbGVyPTAsb3QoRHQsMzEpLG90KER0LDEzOSksb3QoRHQsOCksRHQuZ3poZWFkPyhvdChEdCwoRHQuZ3poZWFkLnRleHQ/MTowKSsoRHQuZ3poZWFk'@;
put 'LmhjcmM/MjowKSsoRHQuZ3poZWFkLmV4dHJhPzQ6MCkrKER0Lmd6aGVhZC5uYW1lPzg6MCkrKER0Lmd6aGVhZC5jb21tZW50PzE2OjApKSxvdChEdCwyNTUmRHQuZ3poZWFkLnRpbWUpLG90KER0LER0Lmd6aGVhZC50aW1lPj44JjI1NSksb3QoRHQsRHQuZ3poZWFkLnRpbWU+PjE2JjI1NSks'@;
put 'b3QoRHQsRHQuZ3poZWFkLnRpbWU+PjI0JjI1NSksb3QoRHQsOT09PUR0LmxldmVsPzI6RHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/NDowKSxvdChEdCwyNTUmRHQuZ3poZWFkLm9zKSxEdC5nemhlYWQuZXh0cmEmJkR0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihvdChEdCwyNTUmRHQuZ3po'@;
put 'ZWFkLmV4dHJhLmxlbmd0aCksb3QoRHQsRHQuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxEdC5nemhlYWQuaGNyYyYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZywwKSksRHQuZ3ppbmRleD0wLER0LnN0YXR1cz02OSk6KG90KER0LDApLG90KER0'@;
put 'LDApLG90KER0LDApLG90KER0LDApLG90KER0LDApLG90KER0LDk9PT1EdC5sZXZlbD8yOkR0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZlbDwyPzQ6MCksb3QoRHQsMyksRHQuc3RhdHVzPWx0KTtlbHNle3ZhciBMbj1OKyhEdC53X2JpdHMtODw8NCk8PDg7TG58PShEdC5zdHJhdGVneT49Mnx8RHQu'@;
put 'bGV2ZWw8Mj8wOkR0LmxldmVsPDY/MTo2PT09RHQubGV2ZWw/MjozKTw8NiwwIT09RHQuc3Ryc3RhcnQmJihMbnw9MzIpLExuKz0zMS1MbiUzMSxEdC5zdGF0dXM9bHQsdXQoRHQsTG4pLDAhPT1EdC5zdHJzdGFydCYmKHV0KER0LHJ0LmFkbGVyPj4+MTYpLHV0KER0LDY1NTM1JnJ0LmFkbGVy'@;
put 'KSkscnQuYWRsZXI9MX1pZig2OT09PUR0LnN0YXR1cylpZihEdC5nemhlYWQuZXh0cmEpe2ZvcihwdD1EdC5wZW5kaW5nO0R0Lmd6aW5kZXg8KDY1NTM1JkR0Lmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoRHQucGVuZGluZyE9PUR0LnBlbmRpbmdfYnVmX3NpemV8fChEdC5nemhlYWQuaGNyYyYm'@;
put 'RHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLERlKHJ0KSxwdD1EdC5wZW5kaW5nLER0LnBlbmRpbmchPT1EdC5wZW5kaW5nX2J1Zl9zaXplKSk7KW90KER0LDI1NSZEdC5nemhlYWQuZXh0cmFbRHQuZ3ppbmRleF0p'@;
put 'LER0Lmd6aW5kZXgrKztEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLER0Lmd6aW5kZXg9PT1EdC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoRHQuZ3ppbmRleD0wLER0LnN0YXR1cz03Myl9'@;
put 'ZWxzZSBEdC5zdGF0dXM9NzM7aWYoNzM9PT1EdC5zdGF0dXMpaWYoRHQuZ3poZWFkLm5hbWUpe3B0PUR0LnBlbmRpbmc7ZG97aWYoRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUmJihEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQu'@;
put 'cGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLERlKHJ0KSxwdD1EdC5wZW5kaW5nLER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplKSl7WXQ9MTticmVha31ZdD1EdC5nemluZGV4PER0Lmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmRHQuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChE'@;
put 'dC5nemluZGV4KyspOjAsb3QoRHQsWXQpfXdoaWxlKDAhPT1ZdCk7RHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSwwPT09WXQmJihEdC5nemluZGV4PTAsRHQuc3RhdHVzPTkxKX1lbHNl'@;
put 'IER0LnN0YXR1cz05MTtpZig5MT09PUR0LnN0YXR1cylpZihEdC5nemhlYWQuY29tbWVudCl7cHQ9RHQucGVuZGluZztkb3tpZihEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSYmKER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5w'@;
put 'ZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUpKXtZdD0xO2JyZWFrfVl0PUR0Lmd6aW5kZXg8RHQuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZEdC5nemhlYWQuY29tbWVudC5jaGFyQ29k'@;
put 'ZUF0KER0Lmd6aW5kZXgrKyk6MCxvdChEdCxZdCl9d2hpbGUoMCE9PVl0KTtEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLDA9PT1ZdCYmKER0LnN0YXR1cz0xMDMpfWVsc2UgRHQuc3Rh'@;
put 'dHVzPTEwMztpZigxMDM9PT1EdC5zdGF0dXMmJihEdC5nemhlYWQuaGNyYz8oRHQucGVuZGluZysyPkR0LnBlbmRpbmdfYnVmX3NpemUmJkRlKHJ0KSxEdC5wZW5kaW5nKzI8PUR0LnBlbmRpbmdfYnVmX3NpemUmJihvdChEdCwyNTUmcnQuYWRsZXIpLG90KER0LHJ0LmFkbGVyPj44JjI1NSks'@;
put 'cnQuYWRsZXI9MCxEdC5zdGF0dXM9bHQpKTpEdC5zdGF0dXM9bHQpLDAhPT1EdC5wZW5kaW5nKXtpZihEZShydCksMD09PXJ0LmF2YWlsX291dClyZXR1cm4gRHQubGFzdF9mbHVzaD0tMSxxfWVsc2UgaWYoMD09PXJ0LmF2YWlsX2luJiZodChMdCk8PWh0KFF0KSYmNCE9PUx0KXJldHVybiBV'@;
put 'ZShydCwtNSk7aWYoNjY2PT09RHQuc3RhdHVzJiYwIT09cnQuYXZhaWxfaW4pcmV0dXJuIFVlKHJ0LC01KTtpZigwIT09cnQuYXZhaWxfaW58fDAhPT1EdC5sb29rYWhlYWR8fEx0IT09ViYmNjY2IT09RHQuc3RhdHVzKXt2YXIgeW49Mj09PUR0LnN0cmF0ZWd5P2Z1bmN0aW9uIFduKHJ0LEx0'@;
put 'KXtmb3IodmFyIFF0Ozspe2lmKDA9PT1ydC5sb29rYWhlYWQmJihQdChydCksMD09PXJ0Lmxvb2thaGVhZCkpe2lmKEx0PT09VilyZXR1cm4gMTticmVha31pZihydC5tYXRjaF9sZW5ndGg9MCxRdD1MLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVh'@;
put 'ZC0tLHJ0LnN0cnN0YXJ0KyssUXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PTAsND09PUx0Pyh6ZShydCwhMCksMD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6cnQubGFzdF9saXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0u'@;
put 'YXZhaWxfb3V0KT8xOjJ9KER0LEx0KTozPT09RHQuc3RyYXRlZ3k/ZnVuY3Rpb24gYm4ocnQsTHQpe2Zvcih2YXIgUXQsRHQscHQsWXQsTG49cnQud2luZG93Ozspe2lmKHJ0Lmxvb2thaGVhZDw9SWUpe2lmKFB0KHJ0KSxydC5sb29rYWhlYWQ8PUllJiZMdD09PVYpcmV0dXJuIDE7aWYoMD09'@;
put 'PXJ0Lmxvb2thaGVhZClicmVha31pZihydC5tYXRjaF9sZW5ndGg9MCxydC5sb29rYWhlYWQ+PXhlJiZydC5zdHJzdGFydD4wJiYoRHQ9TG5bcHQ9cnQuc3Ryc3RhcnQtMV0pPT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0pe1l0PXJ0LnN0cnN0YXJ0K0llO2Rve313'@;
put 'aGlsZShEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZEdD09PUxuWysrcHRdJiZwdDxZdCk7cnQubWF0Y2hfbGVuZ3RoPUllLShZdC1wdCkscnQubWF0'@;
put 'Y2hfbGVuZ3RoPnJ0Lmxvb2thaGVhZCYmKHJ0Lm1hdGNoX2xlbmd0aD1ydC5sb29rYWhlYWQpfWlmKHJ0Lm1hdGNoX2xlbmd0aD49eGU/KFF0PUwuX3RyX3RhbGx5KHJ0LDEscnQubWF0Y2hfbGVuZ3RoLXhlKSxydC5sb29rYWhlYWQtPXJ0Lm1hdGNoX2xlbmd0aCxydC5zdHJzdGFydCs9cnQu'@;
put 'bWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aD0wKTooUXQ9TC5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnRdKSxydC5sb29rYWhlYWQtLSxydC5zdHJzdGFydCsrKSxRdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5p'@;
put 'bnNlcnQ9MCw0PT09THQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn0oRHQsTHQpOiRuW0R0LmxldmVsXS5mdW5jKER0LEx0KTtpZigoMz09PXlufHw0PT09eW4pJiYoRHQuc3Rh'@;
put 'dHVzPTY2NiksMT09PXlufHwzPT09eW4pcmV0dXJuIDA9PT1ydC5hdmFpbF9vdXQmJihEdC5sYXN0X2ZsdXNoPS0xKSxxO2lmKDI9PT15biYmKDE9PT1MdD9MLl90cl9hbGlnbihEdCk6NSE9PUx0JiYoTC5fdHJfc3RvcmVkX2Jsb2NrKER0LDAsMCwhMSksMz09PUx0JiYoTWUoRHQuaGVhZCks'@;
put 'MD09PUR0Lmxvb2thaGVhZCYmKER0LnN0cnN0YXJ0PTAsRHQuYmxvY2tfc3RhcnQ9MCxEdC5pbnNlcnQ9MCkpKSxEZShydCksMD09PXJ0LmF2YWlsX291dCkpcmV0dXJuIER0Lmxhc3RfZmx1c2g9LTEscX1yZXR1cm4gNCE9PUx0P3E6RHQud3JhcDw9MD8xOigyPT09RHQud3JhcD8ob3QoRHQs'@;
put 'MjU1JnJ0LmFkbGVyKSxvdChEdCxydC5hZGxlcj4+OCYyNTUpLG90KER0LHJ0LmFkbGVyPj4xNiYyNTUpLG90KER0LHJ0LmFkbGVyPj4yNCYyNTUpLG90KER0LDI1NSZydC50b3RhbF9pbiksb3QoRHQscnQudG90YWxfaW4+PjgmMjU1KSxvdChEdCxydC50b3RhbF9pbj4+MTYmMjU1KSxvdChE'@;
put 'dCxydC50b3RhbF9pbj4+MjQmMjU1KSk6KHV0KER0LHJ0LmFkbGVyPj4+MTYpLHV0KER0LDY1NTM1JnJ0LmFkbGVyKSksRGUocnQpLER0LndyYXA+MCYmKER0LndyYXA9LUR0LndyYXApLDAhPT1EdC5wZW5kaW5nP3E6MSl9LHouZGVmbGF0ZUVuZD1mdW5jdGlvbiBtbihydCl7dmFyIEx0O3Jl'@;
put 'dHVybiBydCYmcnQuc3RhdGU/KEx0PXJ0LnN0YXRlLnN0YXR1cykhPT1qZSYmNjkhPT1MdCYmNzMhPT1MdCYmOTEhPT1MdCYmMTAzIT09THQmJkx0IT09bHQmJjY2NiE9PUx0P1VlKHJ0LHRlKToocnQuc3RhdGU9bnVsbCxMdD09PWx0P1VlKHJ0LC0zKTpxKTp0ZX0sei5kZWZsYXRlSW5mbz0i'@;
put 'cGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vbWVzc2FnZXMiOjM3LCIuL3RyZWVzIjozOH1dLDMzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5j'@;
put 'dGlvbiBLKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sMzQ6W2Z1bmN0aW9uKE8s'@;
put 'Uix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVSxxLGVlLHRlLG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLEMsUyx2LHAsdyxKO3c9RS5pbnB1dCxZPShCPUUubmV4dF9pbikrKEUuYXZhaWxfaW4tNSksSj1FLm91dHB1dCxVPShYPUUubmV4'@;
put 'dF9vdXQpLShqLUUuYXZhaWxfb3V0KSxxPVgrKEUuYXZhaWxfb3V0LTI1NyksZWU9KFY9RS5zdGF0ZSkuZG1heCx0ZT1WLndzaXplLG9lPVYud2hhdmUsc2U9Vi53bmV4dCxoZT1WLndpbmRvdyx1ZT1WLmhvbGQsY2U9Vi5iaXRzLEc9Vi5sZW5jb2RlLGI9Vi5kaXN0Y29kZSxEPSgxPDxWLmxl'@;
put 'bmJpdHMpLTEsSD0oMTw8Vi5kaXN0Yml0cyktMTtlOmRve2NlPDE1JiYodWUrPXdbQisrXTw8Y2UsdWUrPXdbQisrXTw8KGNlKz04KSxjZSs9OCksTj1HW3VlJkRdO3Q6Zm9yKDs7KXtpZih1ZT4+Pj1nPU4+Pj4yNCxjZS09ZywwPT0oZz1OPj4+MTYmMjU1KSlKW1grK109NjU1MzUmTjtlbHNl'@;
put 'e2lmKCEoMTYmZykpe2lmKDY0Jmcpe2lmKDMyJmcpe1YubW9kZT0xMjticmVhayBlfUUubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLFYubW9kZT0zMDticmVhayBlfU49R1soNjU1MzUmTikrKHVlJigxPDxnKS0xKV07Y29udGludWUgdH1mb3IoQz02NTUzNSZOLChnJj0xNSkm'@;
put 'JihjZTxnJiYodWUrPXdbQisrXTw8Y2UsY2UrPTgpLEMrPXVlJigxPDxnKS0xLHVlPj4+PWcsY2UtPWcpLGNlPDE1JiYodWUrPXdbQisrXTw8Y2UsdWUrPXdbQisrXTw8KGNlKz04KSxjZSs9OCksTj1iW3VlJkhdOzspe2lmKHVlPj4+PWc9Tj4+PjI0LGNlLT1nLDE2JihnPU4+Pj4xNiYyNTUp'@;
put 'KXtpZihTPTY1NTM1Jk4sY2U8KGcmPTE1KSYmKHVlKz13W0IrK108PGNlLChjZSs9OCk8ZyYmKHVlKz13W0IrK108PGNlLGNlKz04KSksKFMrPXVlJigxPDxnKS0xKT5lZSl7RS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixWLm1vZGU9MzA7YnJlYWsgZX1pZih1ZT4+Pj1n'@;
put 'LGNlLT1nLFM+KGc9WC1VKSl7aWYoKGc9Uy1nKT5vZSYmVi5zYW5lKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFYubW9kZT0zMDticmVhayBlfWlmKHY9MCxwPWhlLDA9PT1zZSl7aWYodis9dGUtZyxnPEMpe0MtPWc7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1n'@;
put 'KTt2PVgtUyxwPUp9fWVsc2UgaWYoc2U8Zyl7aWYodis9dGUrc2UtZywoZy09c2UpPEMpe0MtPWc7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1nKTtpZih2PTAsc2U8Qyl7Qy09Zz1zZTtkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn19fWVsc2UgaWYodis9c2UtZyxn'@;
put 'PEMpe0MtPWc7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1nKTt2PVgtUyxwPUp9Zm9yKDtDPjI7KUpbWCsrXT1wW3YrK10sSltYKytdPXBbdisrXSxKW1grK109cFt2KytdLEMtPTM7QyYmKEpbWCsrXT1wW3YrK10sQz4xJiYoSltYKytdPXBbdisrXSkpfWVsc2V7dj1YLVM7ZG97SltYKytd'@;
put 'PUpbdisrXSxKW1grK109Slt2KytdLEpbWCsrXT1KW3YrK10sQy09M313aGlsZShDPjIpO0MmJihKW1grK109Slt2KytdLEM+MSYmKEpbWCsrXT1KW3YrK10pKX1icmVha31pZig2NCZnKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixWLm1vZGU9MzA7YnJlYWsgZX1OPWJbKDY1NTM1'@;
put 'Jk4pKyh1ZSYoMTw8ZyktMSldfX1icmVha319d2hpbGUoQjxZJiZYPHEpO3VlJj0oMTw8KGNlLT0oQz1jZT4+Myk8PDMpKS0xLEUubmV4dF9pbj1CLT1DLEUubmV4dF9vdXQ9WCxFLmF2YWlsX2luPUI8WT9ZLUIrNTo1LShCLVkpLEUuYXZhaWxfb3V0PVg8cT9xLVgrMjU3OjI1Ny0oWC1xKSxW'@;
put 'LmhvbGQ9dWUsVi5iaXRzPWNlfX0se31dLDM1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpLEw9TygiLi9hZGxlcjMyIiksaz1PKCIuL2NyYzMyIiksRT1PKCIuL2luZmZhc3QiKSxqPU8oIi4vaW5mdHJlZXMiKSxlZT0wLHNlPS0yLGI9'@;
put 'MSxNZT04NTIsRGU9NTkyO2Z1bmN0aW9uIHV0KHd0KXtyZXR1cm4od3Q+Pj4yNCYyNTUpKyh3dD4+PjgmNjUyODApKygoNjUyODAmd3QpPDw4KSsoKDI1NSZ3dCk8PDI0KX1mdW5jdGlvbiBNdCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSEx'@;
put 'LHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMu'@;
put 'bGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1u'@;
put 'dWxsLHRoaXMubGVucz1uZXcgSy5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgSy5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBIdCh3dCl7dmFyIFh0O3JldHVybiB3dCYmd3Qu'@;
put 'c3RhdGU/KHd0LnRvdGFsX2luPXd0LnRvdGFsX291dD0oWHQ9d3Quc3RhdGUpLnRvdGFsPTAsd3QubXNnPSIiLFh0LndyYXAmJih3dC5hZGxlcj0xJlh0LndyYXApLFh0Lm1vZGU9YixYdC5sYXN0PTAsWHQuaGF2ZWRpY3Q9MCxYdC5kbWF4PTMyNzY4LFh0LmhlYWQ9bnVsbCxYdC5ob2xkPTAs'@;
put 'WHQuYml0cz0wLFh0LmxlbmNvZGU9WHQubGVuZHluPW5ldyBLLkJ1ZjMyKE1lKSxYdC5kaXN0Y29kZT1YdC5kaXN0ZHluPW5ldyBLLkJ1ZjMyKERlKSxYdC5zYW5lPTEsWHQuYmFjaz0tMSxlZSk6c2V9ZnVuY3Rpb24gUHQod3Qpe3ZhciBYdDtyZXR1cm4gd3QmJnd0LnN0YXRlPygoWHQ9d3Qu'@;
put 'c3RhdGUpLndzaXplPTAsWHQud2hhdmU9MCxYdC53bmV4dD0wLEh0KHd0KSk6c2V9ZnVuY3Rpb24gb24od3QsWHQpe3ZhciBfdCxOdDtyZXR1cm4hd3R8fCF3dC5zdGF0ZXx8KE50PXd0LnN0YXRlLFh0PDA/KF90PTAsWHQ9LVh0KTooX3Q9MSsoWHQ+PjQpLFh0PDQ4JiYoWHQmPTE1KSksWHQm'@;
put 'JihYdDw4fHxYdD4xNSkpP3NlOihudWxsIT09TnQud2luZG93JiZOdC53Yml0cyE9PVh0JiYoTnQud2luZG93PW51bGwpLE50LndyYXA9X3QsTnQud2JpdHM9WHQsUHQod3QpKX1mdW5jdGlvbiBDbih3dCxYdCl7dmFyIF90LE50O3JldHVybiB3dD8oTnQ9bmV3IE10LHd0LnN0YXRlPU50LE50'@;
put 'LndpbmRvdz1udWxsLChfdD1vbih3dCxYdCkpIT09ZWUmJih3dC5zdGF0ZT1udWxsKSxfdCk6c2V9dmFyIFduLGVuLGJuPSEwO2Z1bmN0aW9uICRuKHd0KXtpZihibil7dmFyIFh0O2ZvcihXbj1uZXcgSy5CdWYzMig1MTIpLGVuPW5ldyBLLkJ1ZjMyKDMyKSxYdD0wO1h0PDE0NDspd3QubGVu'@;
put 'c1tYdCsrXT04O2Zvcig7WHQ8MjU2Oyl3dC5sZW5zW1h0KytdPTk7Zm9yKDtYdDwyODA7KXd0LmxlbnNbWHQrK109Nztmb3IoO1h0PDI4ODspd3QubGVuc1tYdCsrXT04O2ZvcihqKDEsd3QubGVucywwLDI4OCxXbiwwLHd0Lndvcmsse2JpdHM6OX0pLFh0PTA7WHQ8MzI7KXd0LmxlbnNbWHQr'@;
put 'K109NTtqKDIsd3QubGVucywwLDMyLGVuLDAsd3Qud29yayx7Yml0czo1fSksYm49ITF9d3QubGVuY29kZT1Xbix3dC5sZW5iaXRzPTksd3QuZGlzdGNvZGU9ZW4sd3QuZGlzdGJpdHM9NX16LmluZmxhdGVSZXNldD1QdCx6LmluZmxhdGVSZXNldDI9b24sei5pbmZsYXRlUmVzZXRLZWVwPUh0'@;
put 'LHouaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gVXQod3Qpe3JldHVybiBDbih3dCwxNSl9LHouaW5mbGF0ZUluaXQyPUNuLHouaW5mbGF0ZT1mdW5jdGlvbiBmdCh3dCxYdCl7dmFyIF90LE50LG1uLHJ0LEx0LFF0LER0LHB0LFl0LExuLHp0LHluLHhuLHNuLFJuLCR0LEZuLG5pLGxuLGpuLHFyLGdp'@;
put 'LFVpLEtyLEJuPTAseHI9bmV3IEsuQnVmOCg0KSxubz1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXd0fHwhd3Quc3RhdGV8fCF3dC5vdXRwdXR8fCF3dC5pbnB1dCYmMCE9PXd0LmF2YWlsX2luKXJldHVybiBzZTsxMj09PShfdD13dC5zdGF0'@;
put 'ZSkubW9kZSYmKF90Lm1vZGU9MTMpLEx0PXd0Lm5leHRfb3V0LG1uPXd0Lm91dHB1dCxydD13dC5uZXh0X2luLE50PXd0LmlucHV0LHB0PV90LmhvbGQsWXQ9X3QuYml0cyxMbj1RdD13dC5hdmFpbF9pbix6dD1EdD13dC5hdmFpbF9vdXQsZ2k9ZWU7ZTpmb3IoOzspc3dpdGNoKF90Lm1vZGUp'@;
put 'e2Nhc2UgYjppZigwPT09X3Qud3JhcCl7X3QubW9kZT0xMzticmVha31mb3IoO1l0PDE2Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKDImX3Qud3JhcCYmMzU2MTU9PT1wdCl7X3QuY2hlY2s9MCx4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1'@;
put 'NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkscHQ9MCxZdD0wLF90Lm1vZGU9MjticmVha31pZihfdC5mbGFncz0wLF90LmhlYWQmJihfdC5oZWFkLmRvbmU9ITEpLCEoMSZfdC53cmFwKXx8KCgoMjU1JnB0KTw8OCkrKHB0Pj44KSklMzEpe3d0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBj'@;
put 'aGVjayIsX3QubW9kZT0zMDticmVha31pZig4IT0oMTUmcHQpKXt3dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixfdC5tb2RlPTMwO2JyZWFrfWlmKFl0LT00LHFyPTgrKDE1JihwdD4+Pj00KSksMD09PV90LndiaXRzKV90LndiaXRzPXFyO2Vsc2UgaWYocXI+X3Qud2JpdHMp'@;
put 'e3d0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsX3QubW9kZT0zMDticmVha31fdC5kbWF4PTE8PHFyLHd0LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT01MTImcHQ/MTA6MTIscHQ9MCxZdD0wO2JyZWFrO2Nhc2UgMjpmb3IoO1l0PDE2Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9'@;
put 'TnRbcnQrK108PFl0LFl0Kz04fWlmKF90LmZsYWdzPXB0LDghPSgyNTUmX3QuZmxhZ3MpKXt3dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixfdC5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0Jl90LmZsYWdzKXt3dC5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsX3QubW9k'@;
put 'ZT0zMDticmVha31fdC5oZWFkJiYoX3QuaGVhZC50ZXh0PXB0Pj44JjEpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9MztjYXNlIDM6Zm9yKDtZdDwzMjspe2lmKDA9PT1R'@;
put 'dClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5oZWFkJiYoX3QuaGVhZC50aW1lPXB0KSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSx4clsyXT1wdD4+PjE2JjI1NSx4clszXT1wdD4+PjI0JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNr'@;
put 'LHhyLDQsMCkpLHB0PTAsWXQ9MCxfdC5tb2RlPTQ7Y2FzZSA0OmZvcig7WXQ8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9X3QuaGVhZCYmKF90LmhlYWQueGZsYWdzPTI1NSZwdCxfdC5oZWFkLm9zPXB0Pj44KSw1MTImX3QuZmxhZ3MmJih4clsw'@;
put 'XT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkpLHB0PTAsWXQ9MCxfdC5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQmX3QuZmxhZ3Mpe2Zvcig7WXQ8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9X3QubGVu'@;
put 'Z3RoPXB0LF90LmhlYWQmJihfdC5oZWFkLmV4dHJhX2xlbj1wdCksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUsX3QuY2hlY2s9ayhfdC5jaGVjayx4ciwyLDApKSxwdD0wLFl0PTB9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5leHRyYT1udWxsKTtfdC5tb2Rl'@;
put 'PTY7Y2FzZSA2OmlmKDEwMjQmX3QuZmxhZ3MmJigoeW49X3QubGVuZ3RoKT5RdCYmKHluPVF0KSx5biYmKF90LmhlYWQmJihxcj1fdC5oZWFkLmV4dHJhX2xlbi1fdC5sZW5ndGgsX3QuaGVhZC5leHRyYXx8KF90LmhlYWQuZXh0cmE9bmV3IEFycmF5KF90LmhlYWQuZXh0cmFfbGVuKSksSy5h'@;
put 'cnJheVNldChfdC5oZWFkLmV4dHJhLE50LHJ0LHluLHFyKSksNTEyJl90LmZsYWdzJiYoX3QuY2hlY2s9ayhfdC5jaGVjayxOdCx5bixydCkpLFF0LT15bixydCs9eW4sX3QubGVuZ3RoLT15biksX3QubGVuZ3RoKSlicmVhayBlO190Lmxlbmd0aD0wLF90Lm1vZGU9NztjYXNlIDc6aWYoMjA0'@;
put 'OCZfdC5mbGFncyl7aWYoMD09PVF0KWJyZWFrIGU7eW49MDtkb3txcj1OdFtydCt5bisrXSxfdC5oZWFkJiZxciYmX3QubGVuZ3RoPDY1NTM2JiYoX3QuaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHFyKSl9d2hpbGUocXImJnluPFF0KTtpZig1MTImX3QuZmxhZ3MmJihfdC5jaGVj'@;
put 'az1rKF90LmNoZWNrLE50LHluLHJ0KSksUXQtPXluLHJ0Kz15bixxcilicmVhayBlfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQubmFtZT1udWxsKTtfdC5sZW5ndGg9MCxfdC5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmX3QuZmxhZ3Mpe2lmKDA9PT1RdClicmVhayBlO3luPTA7ZG97cXI9TnRbcnQr'@;
put 'eW4rK10sX3QuaGVhZCYmcXImJl90Lmxlbmd0aDw2NTUzNiYmKF90LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShxcikpfXdoaWxlKHFyJiZ5bjxRdCk7aWYoNTEyJl90LmZsYWdzJiYoX3QuY2hlY2s9ayhfdC5jaGVjayxOdCx5bixydCkpLFF0LT15bixydCs9eW4scXIpYnJl'@;
put 'YWsgZX1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmNvbW1lbnQ9bnVsbCk7X3QubW9kZT05O2Nhc2UgOTppZig1MTImX3QuZmxhZ3Mpe2Zvcig7WXQ8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYocHQhPT0oNjU1MzUmX3QuY2hlY2spKXt3dC5t'@;
put 'c2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLF90Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZdD0wfV90LmhlYWQmJihfdC5oZWFkLmhjcmM9X3QuZmxhZ3M+PjkmMSxfdC5oZWFkLmRvbmU9ITApLHd0LmFkbGVyPV90LmNoZWNrPTAsX3QubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7WXQ8MzI7KXtp'@;
put 'ZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9d3QuYWRsZXI9X3QuY2hlY2s9dXQocHQpLHB0PTAsWXQ9MCxfdC5tb2RlPTExO2Nhc2UgMTE6aWYoMD09PV90LmhhdmVkaWN0KXJldHVybiB3dC5uZXh0X291dD1MdCx3dC5hdmFpbF9vdXQ9RHQsd3QubmV4dF9p'@;
put 'bj1ydCx3dC5hdmFpbF9pbj1RdCxfdC5ob2xkPXB0LF90LmJpdHM9WXQsMjt3dC5hZGxlcj1fdC5jaGVjaz0xLF90Lm1vZGU9MTI7Y2FzZSAxMjppZig1PT09WHR8fDY9PT1YdClicmVhayBlO2Nhc2UgMTM6aWYoX3QubGFzdCl7cHQ+Pj49NyZZdCxZdC09NyZZdCxfdC5tb2RlPTI3O2JyZWFr'@;
put 'fWZvcig7WXQ8Mzspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1zd2l0Y2goX3QubGFzdD0xJnB0LFl0LT0xLDMmKHB0Pj4+PTEpKXtjYXNlIDA6X3QubW9kZT0xNDticmVhaztjYXNlIDE6aWYoJG4oX3QpLF90Lm1vZGU9MjAsNj09PVh0KXtwdD4+Pj0y'@;
put 'LFl0LT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOl90Lm1vZGU9MTc7YnJlYWs7Y2FzZSAzOnd0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixfdC5tb2RlPTMwfXB0Pj4+PTIsWXQtPTI7YnJlYWs7Y2FzZSAxNDpmb3IocHQ+Pj49NyZZdCxZdC09NyZZdDtZdDwzMjspe2lmKDA9PT1RdClicmVh'@;
put 'ayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZigoNjU1MzUmcHQpIT0ocHQ+Pj4xNl42NTUzNSkpe3d0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsX3QubW9kZT0zMDticmVha31pZihfdC5sZW5ndGg9NjU1MzUmcHQscHQ9MCxZdD0wLF90Lm1vZGU9MTUsNj09'@;
put 'PVh0KWJyZWFrIGU7Y2FzZSAxNTpfdC5tb2RlPTE2O2Nhc2UgMTY6aWYoeW49X3QubGVuZ3RoKXtpZih5bj5RdCYmKHluPVF0KSx5bj5EdCYmKHluPUR0KSwwPT09eW4pYnJlYWsgZTtLLmFycmF5U2V0KG1uLE50LHJ0LHluLEx0KSxRdC09eW4scnQrPXluLER0LT15bixMdCs9eW4sX3QubGVu'@;
put 'Z3RoLT15bjticmVha31fdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtZdDwxNDspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihfdC5ubGVuPTI1NysoMzEmcHQpLFl0LT01LF90Lm5kaXN0PTErKDMxJihwdD4+Pj01KSksWXQtPTUsX3QubmNv'@;
put 'ZGU9NCsoMTUmKHB0Pj4+PTUpKSxwdD4+Pj00LFl0LT00LF90Lm5sZW4+Mjg2fHxfdC5uZGlzdD4zMCl7d3QubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIsX3QubW9kZT0zMDticmVha31fdC5oYXZlPTAsX3QubW9kZT0xODtjYXNlIDE4OmZvcig7X3QuaGF2ZTxf'@;
put 'dC5uY29kZTspe2Zvcig7WXQ8Mzspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5zW25vW190LmhhdmUrK11dPTcmcHQscHQ+Pj49MyxZdC09M31mb3IoO190LmhhdmU8MTk7KV90LmxlbnNbbm9bX3QuaGF2ZSsrXV09MDtpZihfdC5sZW5jb2Rl'@;
put 'PV90LmxlbmR5bixfdC5sZW5iaXRzPTcsZ2k9aigwLF90LmxlbnMsMCwxOSxfdC5sZW5jb2RlLDAsX3Qud29yayxVaT17Yml0czpfdC5sZW5iaXRzfSksX3QubGVuYml0cz1VaS5iaXRzLGdpKXt3dC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsX3QubW9kZT0zMDticmVha31fdC5o'@;
put 'YXZlPTAsX3QubW9kZT0xOTtjYXNlIDE5OmZvcig7X3QuaGF2ZTxfdC5ubGVuK190Lm5kaXN0Oyl7Zm9yKDskdD0oQm49X3QubGVuY29kZVtwdCYoMTw8X3QubGVuYml0cyktMV0pPj4+MTYmMjU1LEZuPTY1NTM1JkJuLCEoKFJuPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09UXQpYnJlYWsgZTtR'@;
put 'dC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoRm48MTYpcHQ+Pj49Um4sWXQtPVJuLF90LmxlbnNbX3QuaGF2ZSsrXT1GbjtlbHNle2lmKDE2PT09Rm4pe2ZvcihLcj1SbisyO1l0PEtyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKHB0Pj4+'@;
put 'PVJuLFl0LT1SbiwwPT09X3QuaGF2ZSl7d3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixfdC5tb2RlPTMwO2JyZWFrfXFyPV90LmxlbnNbX3QuaGF2ZS0xXSx5bj0zKygzJnB0KSxwdD4+Pj0yLFl0LT0yfWVsc2UgaWYoMTc9PT1Gbil7Zm9yKEtyPVJuKzM7WXQ8S3I7KXtpZigw'@;
put 'PT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9WXQtPVJuLHFyPTAseW49MysoNyYocHQ+Pj49Um4pKSxwdD4+Pj0zLFl0LT0zfWVsc2V7Zm9yKEtyPVJuKzc7WXQ8S3I7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9WXQtPVJu'@;
put 'LHFyPTAseW49MTErKDEyNyYocHQ+Pj49Um4pKSxwdD4+Pj03LFl0LT03fWlmKF90LmhhdmUreW4+X3QubmxlbitfdC5uZGlzdCl7d3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixfdC5tb2RlPTMwO2JyZWFrfWZvcig7eW4tLTspX3QubGVuc1tfdC5oYXZlKytdPXFyfX1pZigz'@;
put 'MD09PV90Lm1vZGUpYnJlYWs7aWYoMD09PV90LmxlbnNbMjU2XSl7d3QubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLF90Lm1vZGU9MzA7YnJlYWt9aWYoX3QubGVuYml0cz05LGdpPWooMSxfdC5sZW5zLDAsX3QubmxlbixfdC5sZW5jb2RlLDAsX3Qud29yayxV'@;
put 'aT17Yml0czpfdC5sZW5iaXRzfSksX3QubGVuYml0cz1VaS5iaXRzLGdpKXt3dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsX3QubW9kZT0zMDticmVha31pZihfdC5kaXN0Yml0cz02LF90LmRpc3Rjb2RlPV90LmRpc3RkeW4sZ2k9aigyLF90LmxlbnMsX3QubmxlbixfdC5u'@;
put 'ZGlzdCxfdC5kaXN0Y29kZSwwLF90LndvcmssVWk9e2JpdHM6X3QuZGlzdGJpdHN9KSxfdC5kaXN0Yml0cz1VaS5iaXRzLGdpKXt3dC5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsX3QubW9kZT0zMDticmVha31pZihfdC5tb2RlPTIwLDY9PT1YdClicmVhayBlO2Nhc2UgMjA6X3QubW9k'@;
put 'ZT0yMTtjYXNlIDIxOmlmKFF0Pj02JiZEdD49MjU4KXt3dC5uZXh0X291dD1MdCx3dC5hdmFpbF9vdXQ9RHQsd3QubmV4dF9pbj1ydCx3dC5hdmFpbF9pbj1RdCxfdC5ob2xkPXB0LF90LmJpdHM9WXQsRSh3dCx6dCksTHQ9d3QubmV4dF9vdXQsbW49d3Qub3V0cHV0LER0PXd0LmF2YWlsX291'@;
put 'dCxydD13dC5uZXh0X2luLE50PXd0LmlucHV0LFF0PXd0LmF2YWlsX2luLHB0PV90LmhvbGQsWXQ9X3QuYml0cywxMj09PV90Lm1vZGUmJihfdC5iYWNrPS0xKTticmVha31mb3IoX3QuYmFjaz0wOyR0PShCbj1fdC5sZW5jb2RlW3B0JigxPDxfdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsRm49'@;
put 'NjU1MzUmQm4sISgoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZigkdCYmISgyNDAmJHQpKXtmb3Iobmk9Um4sbG49JHQsam49Rm47JHQ9KEJuPV90LmxlbmNvZGVbam4rKChwdCYoMTw8bmkrbG4pLTEpPj5uaSldKT4+'@;
put 'PjE2JjI1NSxGbj02NTUzNSZCbiwhKG5pKyhSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fXB0Pj4+PW5pLFl0LT1uaSxfdC5iYWNrKz1uaX1pZihwdD4+Pj1SbixZdC09Um4sX3QuYmFjays9Um4sX3QubGVuZ3RoPUZuLDA9'@;
put 'PT0kdCl7X3QubW9kZT0yNjticmVha31pZigzMiYkdCl7X3QuYmFjaz0tMSxfdC5tb2RlPTEyO2JyZWFrfWlmKDY0JiR0KXt3dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsX3QubW9kZT0zMDticmVha31fdC5leHRyYT0xNSYkdCxfdC5tb2RlPTIyO2Nhc2UgMjI6aWYoX3Qu'@;
put 'ZXh0cmEpe2ZvcihLcj1fdC5leHRyYTtZdDxLcjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5ndGgrPXB0JigxPDxfdC5leHRyYSktMSxwdD4+Pj1fdC5leHRyYSxZdC09X3QuZXh0cmEsX3QuYmFjays9X3QuZXh0cmF9X3Qud2FzPV90Lmxl'@;
put 'bmd0aCxfdC5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDskdD0oQm49X3QuZGlzdGNvZGVbcHQmKDE8PF90LmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsRm49NjU1MzUmQm4sISgoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZigh'@;
put 'KDI0MCYkdCkpe2ZvcihuaT1Sbixsbj0kdCxqbj1GbjskdD0oQm49X3QuZGlzdGNvZGVbam4rKChwdCYoMTw8bmkrbG4pLTEpPj5uaSldKT4+PjE2JjI1NSxGbj02NTUzNSZCbiwhKG5pKyhSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0'@;
put 'LFl0Kz04fXB0Pj4+PW5pLFl0LT1uaSxfdC5iYWNrKz1uaX1pZihwdD4+Pj1SbixZdC09Um4sX3QuYmFjays9Um4sNjQmJHQpe3d0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixfdC5tb2RlPTMwO2JyZWFrfV90Lm9mZnNldD1GbixfdC5leHRyYT0xNSYkdCxfdC5tb2RlPTI0O2Nhc2Ug'@;
put 'MjQ6aWYoX3QuZXh0cmEpe2ZvcihLcj1fdC5leHRyYTtZdDxLcjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5vZmZzZXQrPXB0JigxPDxfdC5leHRyYSktMSxwdD4+Pj1fdC5leHRyYSxZdC09X3QuZXh0cmEsX3QuYmFjays9X3QuZXh0cmF9aWYo'@;
put 'X3Qub2Zmc2V0Pl90LmRtYXgpe3d0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLF90Lm1vZGU9MzA7YnJlYWt9X3QubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1EdClicmVhayBlO2lmKF90Lm9mZnNldD4oeW49enQtRHQpKXtpZigoeW49X3Qub2Zmc2V0LXluKT5fdC53aGF2'@;
put 'ZSYmX3Quc2FuZSl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha314bj15bj5fdC53bmV4dD9fdC53c2l6ZS0oeW4tPV90LnduZXh0KTpfdC53bmV4dC15bix5bj5fdC5sZW5ndGgmJih5bj1fdC5sZW5ndGgpLHNuPV90LndpbmRvd31lbHNl'@;
put 'IHNuPW1uLHhuPUx0LV90Lm9mZnNldCx5bj1fdC5sZW5ndGg7eW4+RHQmJih5bj1EdCksRHQtPXluLF90Lmxlbmd0aC09eW47ZG97bW5bTHQrK109c25beG4rK119d2hpbGUoLS15bik7MD09PV90Lmxlbmd0aCYmKF90Lm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PUR0KWJyZWFrIGU7'@;
put 'bW5bTHQrK109X3QubGVuZ3RoLER0LS0sX3QubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKF90LndyYXApe2Zvcig7WXQ8MzI7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0fD1OdFtydCsrXTw8WXQsWXQrPTh9aWYod3QudG90YWxfb3V0Kz16dC09RHQsX3QudG90YWwrPXp0LHp0JiYod3Qu'@;
put 'YWRsZXI9X3QuY2hlY2s9X3QuZmxhZ3M/ayhfdC5jaGVjayxtbix6dCxMdC16dCk6TChfdC5jaGVjayxtbix6dCxMdC16dCkpLHp0PUR0LChfdC5mbGFncz9wdDp1dChwdCkpIT09X3QuY2hlY2spe3d0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZ'@;
put 'dD0wfV90Lm1vZGU9Mjg7Y2FzZSAyODppZihfdC53cmFwJiZfdC5mbGFncyl7Zm9yKDtZdDwzMjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihwdCE9PSg0Mjk0OTY3Mjk1Jl90LnRvdGFsKSl7d3QubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNr'@;
put 'IixfdC5tb2RlPTMwO2JyZWFrfXB0PTAsWXQ9MH1fdC5tb2RlPTI5O2Nhc2UgMjk6Z2k9MTticmVhayBlO2Nhc2UgMzA6Z2k9LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2RlZmF1bHQ6cmV0dXJuIHNlfXJldHVybiB3dC5uZXh0X291dD1MdCx3dC5hdmFpbF9vdXQ9RHQsd3QubmV4dF9p'@;
put 'bj1ydCx3dC5hdmFpbF9pbj1RdCxfdC5ob2xkPXB0LF90LmJpdHM9WXQsKF90LndzaXplfHx6dCE9PXd0LmF2YWlsX291dCYmX3QubW9kZTwzMCYmKF90Lm1vZGU8Mjd8fDQhPT1YdCkpJiZmdW5jdGlvbiBIbih3dCxYdCxfdCxOdCl7dmFyIG1uLHJ0PXd0LnN0YXRlO3JldHVybiBudWxsPT09'@;
put 'cnQud2luZG93JiYocnQud3NpemU9MTw8cnQud2JpdHMscnQud25leHQ9MCxydC53aGF2ZT0wLHJ0LndpbmRvdz1uZXcgSy5CdWY4KHJ0LndzaXplKSksTnQ+PXJ0LndzaXplPyhLLmFycmF5U2V0KHJ0LndpbmRvdyxYdCxfdC1ydC53c2l6ZSxydC53c2l6ZSwwKSxydC53bmV4dD0wLHJ0Lndo'@;
put 'YXZlPXJ0LndzaXplKTooKG1uPXJ0LndzaXplLXJ0LnduZXh0KT5OdCYmKG1uPU50KSxLLmFycmF5U2V0KHJ0LndpbmRvdyxYdCxfdC1OdCxtbixydC53bmV4dCksKE50LT1tbik/KEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LU50LE50LDApLHJ0LnduZXh0PU50LHJ0LndoYXZlPXJ0Lndz'@;
put 'aXplKToocnQud25leHQrPW1uLHJ0LnduZXh0PT09cnQud3NpemUmJihydC53bmV4dD0wKSxydC53aGF2ZTxydC53c2l6ZSYmKHJ0LndoYXZlKz1tbikpKSwwfSh3dCx3dC5vdXRwdXQsd3QubmV4dF9vdXQsenQtd3QuYXZhaWxfb3V0KT8oX3QubW9kZT0zMSwtNCk6KHp0LT13dC5hdmFpbF9v'@;
put 'dXQsd3QudG90YWxfaW4rPUxuLT13dC5hdmFpbF9pbix3dC50b3RhbF9vdXQrPXp0LF90LnRvdGFsKz16dCxfdC53cmFwJiZ6dCYmKHd0LmFkbGVyPV90LmNoZWNrPV90LmZsYWdzP2soX3QuY2hlY2ssbW4senQsd3QubmV4dF9vdXQtenQpOkwoX3QuY2hlY2ssbW4senQsd3QubmV4dF9vdXQt'@;
put 'enQpKSx3dC5kYXRhX3R5cGU9X3QuYml0cysoX3QubGFzdD82NDowKSsoMTI9PT1fdC5tb2RlPzEyODowKSsoMjA9PT1fdC5tb2RlfHwxNT09PV90Lm1vZGU/MjU2OjApLCgwPT09TG4mJjA9PT16dHx8ND09PVh0KSYmZ2k9PT1lZSYmKGdpPS01KSxnaSl9LHouaW5mbGF0ZUVuZD1mdW5jdGlv'@;
put 'biBmbih3dCl7aWYoIXd0fHwhd3Quc3RhdGUpcmV0dXJuIHNlO3ZhciBYdD13dC5zdGF0ZTtyZXR1cm4gWHQud2luZG93JiYoWHQud2luZG93PW51bGwpLHd0LnN0YXRlPW51bGwsZWV9LHouaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBobih3dCxYdCl7dmFyIF90O3JldHVybiB3dCYmd3Qu'@;
put 'c3RhdGUmJjImKF90PXd0LnN0YXRlKS53cmFwPyhfdC5oZWFkPVh0LFh0LmRvbmU9ITEsZWUpOnNlfSx6LmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9p'@;
put 'bmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKSxZPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYz'@;
put 'LDE5NSwyMjcsMjU4LDAsMF0sWD1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLFU9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcs'@;
put 'Mzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLHE9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0'@;
put 'LDY0XTtSLmV4cG9ydHM9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUsY2UsRyxiKXt2YXIgZGUsZmUseGUsSWUsRmUsV2UsUGUsYmUsQWUsRD1iLmJpdHMsSD0wLE49MCxnPTAsQz0wLFM9MCx2PTAscD0wLHc9MCxKPTAsbmU9MCxPZT1udWxsLGplPTAsS2U9bmV3IEsuQnVmMTYoMTYpLFllPW5l'@;
put 'dyBLLkJ1ZjE2KDE2KSxRZT1udWxsLGx0PTA7Zm9yKEg9MDtIPD0xNTtIKyspS2VbSF09MDtmb3IoTj0wO048aGU7TisrKUtlW29lW3NlK05dXSsrO2ZvcihTPUQsQz0xNTtDPj0xJiYwPT09S2VbQ107Qy0tKTtpZihTPkMmJihTPUMpLDA9PT1DKXJldHVybiB1ZVtjZSsrXT0yMDk3MTUyMCx1'@;
put 'ZVtjZSsrXT0yMDk3MTUyMCxiLmJpdHM9MSwwO2ZvcihnPTE7ZzxDJiYwPT09S2VbZ107ZysrKTtmb3IoUzxnJiYoUz1nKSx3PTEsSD0xO0g8PTE1O0grKylpZih3PDw9MSwody09S2VbSF0pPDApcmV0dXJuLTE7aWYodz4wJiYoMD09PXRlfHwxIT09QykpcmV0dXJuLTE7Zm9yKFllWzFdPTAs'@;
put 'SD0xO0g8MTU7SCsrKVllW0grMV09WWVbSF0rS2VbSF07Zm9yKE49MDtOPGhlO04rKykwIT09b2Vbc2UrTl0mJihHW1llW29lW3NlK05dXSsrXT1OKTtpZigwPT09dGU/KE9lPVFlPUcsV2U9MTkpOjE9PT10ZT8oT2U9WSxqZS09MjU3LFFlPVgsbHQtPTI1NyxXZT0yNTYpOihPZT1VLFFlPXEs'@;
put 'V2U9LTEpLG5lPTAsTj0wLEg9ZyxGZT1jZSx2PVMscD0wLHhlPS0xLEllPShKPTE8PFMpLTEsMT09PXRlJiZKPjg1Mnx8Mj09PXRlJiZKPjU5MilyZXR1cm4gMTtmb3IoOzspe1BlPUgtcCxHW05dPFdlPyhiZT0wLEFlPUdbTl0pOkdbTl0+V2U/KGJlPVFlW2x0K0dbTl1dLEFlPU9lW2plK0db'@;
put 'Tl1dKTooYmU9OTYsQWU9MCksZGU9MTw8SC1wLGc9ZmU9MTw8djtkb3t1ZVtGZSsobmU+PnApKyhmZS09ZGUpXT1QZTw8MjR8YmU8PDE2fEFlfDB9d2hpbGUoMCE9PWZlKTtmb3IoZGU9MTw8SC0xO25lJmRlOylkZT4+PTE7aWYoMCE9PWRlPyhuZSY9ZGUtMSxuZSs9ZGUpOm5lPTAsTisrLDA9'@;
put 'PS0tS2VbSF0pe2lmKEg9PT1DKWJyZWFrO0g9b2Vbc2UrR1tOXV19aWYoSD5TJiYobmUmSWUpIT09eGUpe2ZvcigwPT09cCYmKHA9UyksRmUrPWcsdz0xPDwodj1ILXApO3YrcDxDJiYhKCh3LT1LZVt2K3BdKTw9MCk7KXYrKyx3PDw9MTtpZihKKz0xPDx2LDE9PT10ZSYmSj44NTJ8fDI9PT10'@;
put 'ZSYmSj41OTIpcmV0dXJuIDE7dWVbeGU9bmUmSWVdPVM8PDI0fHY8PDE2fEZlLWNlfDB9fXJldHVybiAwIT09bmUmJih1ZVtGZStuZV09SC1wPDwyNHw2NDw8MTZ8MCksYi5iaXRzPVMsMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3Qi'@;
put 'O1IuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNv'@;
put 'bXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sMzg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24gVihmdCl7Zm9yKHZhciBmbj1mdC5sZW5ndGg7LS1mbj49MDspZnRbZm5dPTB9dmFyIGNlPTE1LEc9MTYsQz1bMCwwLDAsMCww'@;
put 'LDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxTPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSx2PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxw'@;
put 'PVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxKPW5ldyBBcnJheSg1NzYpO1YoSik7dmFyIG5lPW5ldyBBcnJheSg2MCk7VihuZSk7dmFyIGRlPW5ldyBBcnJheSg1MTIpO1YoZGUpO3ZhciBmZT1uZXcgQXJyYXkoMjU2KTtWKGZlKTt2YXIgeGU9bmV3'@;
put 'IEFycmF5KDI5KTtWKHhlKTt2YXIgSWU9bmV3IEFycmF5KDMwKTtWKEllKTt2YXIgT2UsamUsV2UsRmU9ZnVuY3Rpb24oZnQsZm4saG4sd3QsWHQpe3RoaXMuc3RhdGljX3RyZWU9ZnQsdGhpcy5leHRyYV9iaXRzPWZuLHRoaXMuZXh0cmFfYmFzZT1obix0aGlzLmVsZW1zPXd0LHRoaXMubWF4'@;
put 'X2xlbmd0aD1YdCx0aGlzLmhhc19zdHJlZT1mdCYmZnQubGVuZ3RofSxLZT1mdW5jdGlvbihmdCxmbil7dGhpcy5keW5fdHJlZT1mdCx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9Zm59O2Z1bmN0aW9uIFllKGZ0KXtyZXR1cm4gZnQ8MjU2P2RlW2Z0XTpkZVsyNTYrKGZ0Pj4+Nyld'@;
put 'fWZ1bmN0aW9uIFFlKGZ0LGZuKXtmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmbixmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZuPj4+OCYyNTV9ZnVuY3Rpb24gbHQoZnQsZm4saG4pe2Z0LmJpX3ZhbGlkPkctaG4/KGZ0LmJpX2J1Znw9Zm48PGZ0LmJpX3ZhbGlkJjY1'@;
put 'NTM1LFFlKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPWZuPj5HLWZ0LmJpX3ZhbGlkLGZ0LmJpX3ZhbGlkKz1obi1HKTooZnQuYmlfYnVmfD1mbjw8ZnQuYmlfdmFsaWQmNjU1MzUsZnQuYmlfdmFsaWQrPWhuKX1mdW5jdGlvbiBQZShmdCxmbixobil7bHQoZnQsaG5bMipmbl0saG5bMipmbisx'@;
put 'XSl9ZnVuY3Rpb24gYmUoZnQsZm4pe3ZhciBobj0wO2Rve2hufD0xJmZ0LGZ0Pj4+PTEsaG48PD0xfXdoaWxlKC0tZm4+MCk7cmV0dXJuIGhuPj4+MX1mdW5jdGlvbiBxZShmdCxmbixobil7dmFyIF90LE50LHd0PW5ldyBBcnJheShjZSsxKSxYdD0wO2ZvcihfdD0xO190PD1jZTtfdCsrKXd0'@;
put 'W190XT1YdD1YdCtobltfdC0xXTw8MTtmb3IoTnQ9MDtOdDw9Zm47TnQrKyl7dmFyIG1uPWZ0WzIqTnQrMV07MCE9PW1uJiYoZnRbMipOdF09YmUod3RbbW5dKyssbW4pKX19ZnVuY3Rpb24gVWUoZnQpe3ZhciBmbjtmb3IoZm49MDtmbjwyODY7Zm4rKylmdC5keW5fbHRyZWVbMipmbl09MDtm'@;
put 'b3IoZm49MDtmbjwzMDtmbisrKWZ0LmR5bl9kdHJlZVsyKmZuXT0wO2Zvcihmbj0wO2ZuPDE5O2ZuKyspZnQuYmxfdHJlZVsyKmZuXT0wO2Z0LmR5bl9sdHJlZVs1MTJdPTEsZnQub3B0X2xlbj1mdC5zdGF0aWNfbGVuPTAsZnQubGFzdF9saXQ9ZnQubWF0Y2hlcz0wfWZ1bmN0aW9uIGh0KGZ0'@;
put 'KXtmdC5iaV92YWxpZD44P1FlKGZ0LGZ0LmJpX2J1Zik6ZnQuYmlfdmFsaWQ+MCYmKGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109ZnQuYmlfYnVmKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wfWZ1bmN0aW9uIERlKGZ0LGZuLGhuLHd0KXt2YXIgWHQ9MipmbixfdD0yKmhuO3JldHVy'@;
put 'biBmdFtYdF08ZnRbX3RdfHxmdFtYdF09PT1mdFtfdF0mJnd0W2ZuXTw9d3RbaG5dfWZ1bmN0aW9uIHplKGZ0LGZuLGhuKXtmb3IodmFyIHd0PWZ0LmhlYXBbaG5dLFh0PWhuPDwxO1h0PD1mdC5oZWFwX2xlbiYmKFh0PGZ0LmhlYXBfbGVuJiZEZShmbixmdC5oZWFwW1h0KzFdLGZ0LmhlYXBb'@;
put 'WHRdLGZ0LmRlcHRoKSYmWHQrKywhRGUoZm4sd3QsZnQuaGVhcFtYdF0sZnQuZGVwdGgpKTspZnQuaGVhcFtobl09ZnQuaGVhcFtYdF0saG49WHQsWHQ8PD0xO2Z0LmhlYXBbaG5dPXd0fWZ1bmN0aW9uIG90KGZ0LGZuLGhuKXt2YXIgd3QsWHQsTnQsbW4sX3Q9MDtpZigwIT09ZnQubGFzdF9s'@;
put 'aXQpZG97d3Q9ZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipfdF08PDh8ZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipfdCsxXSxYdD1mdC5wZW5kaW5nX2J1ZltmdC5sX2J1ZitfdF0sX3QrKywwPT09d3Q/UGUoZnQsWHQsZm4pOihQZShmdCwoTnQ9ZmVbWHRdKSsyNTYrMSxmbiksMCE9PSht'@;
put 'bj1DW050XSkmJmx0KGZ0LFh0LT14ZVtOdF0sbW4pLFBlKGZ0LE50PVllKC0td3QpLGhuKSwwIT09KG1uPVNbTnRdKSYmbHQoZnQsd3QtPUllW050XSxtbikpfXdoaWxlKF90PGZ0Lmxhc3RfbGl0KTtQZShmdCwyNTYsZm4pfWZ1bmN0aW9uIHV0KGZ0LGZuKXt2YXIgTnQsbW4sTHQsaG49Zm4u'@;
put 'ZHluX3RyZWUsd3Q9Zm4uc3RhdF9kZXNjLnN0YXRpY190cmVlLFh0PWZuLnN0YXRfZGVzYy5oYXNfc3RyZWUsX3Q9Zm4uc3RhdF9kZXNjLmVsZW1zLHJ0PS0xO2ZvcihmdC5oZWFwX2xlbj0wLGZ0LmhlYXBfbWF4PTU3MyxOdD0wO050PF90O050KyspMCE9PWhuWzIqTnRdPyhmdC5oZWFwWysr'@;
put 'ZnQuaGVhcF9sZW5dPXJ0PU50LGZ0LmRlcHRoW050XT0wKTpoblsyKk50KzFdPTA7Zm9yKDtmdC5oZWFwX2xlbjwyOyloblsyKihMdD1mdC5oZWFwWysrZnQuaGVhcF9sZW5dPXJ0PDI/KytydDowKV09MSxmdC5kZXB0aFtMdF09MCxmdC5vcHRfbGVuLS0sWHQmJihmdC5zdGF0aWNfbGVuLT13'@;
put 'dFsyKkx0KzFdKTtmb3IoZm4ubWF4X2NvZGU9cnQsTnQ9ZnQuaGVhcF9sZW4+PjE7TnQ+PTE7TnQtLSl6ZShmdCxobixOdCk7THQ9X3Q7ZG97TnQ9ZnQuaGVhcFsxXSxmdC5oZWFwWzFdPWZ0LmhlYXBbZnQuaGVhcF9sZW4tLV0semUoZnQsaG4sMSksbW49ZnQuaGVhcFsxXSxmdC5oZWFwWy0t'@;
put 'ZnQuaGVhcF9tYXhdPU50LGZ0LmhlYXBbLS1mdC5oZWFwX21heF09bW4saG5bMipMdF09aG5bMipOdF0raG5bMiptbl0sZnQuZGVwdGhbTHRdPShmdC5kZXB0aFtOdF0+PWZ0LmRlcHRoW21uXT9mdC5kZXB0aFtOdF06ZnQuZGVwdGhbbW5dKSsxLGhuWzIqTnQrMV09aG5bMiptbisxXT1MdCxm'@;
put 'dC5oZWFwWzFdPUx0KyssemUoZnQsaG4sMSl9d2hpbGUoZnQuaGVhcF9sZW4+PTIpO2Z0LmhlYXBbLS1mdC5oZWFwX21heF09ZnQuaGVhcFsxXSxmdW5jdGlvbiBUZShmdCxmbil7dmFyIEx0LFF0LER0LHB0LFl0LExuLGhuPWZuLmR5bl90cmVlLHd0PWZuLm1heF9jb2RlLFh0PWZuLnN0YXRf'@;
put 'ZGVzYy5zdGF0aWNfdHJlZSxfdD1mbi5zdGF0X2Rlc2MuaGFzX3N0cmVlLE50PWZuLnN0YXRfZGVzYy5leHRyYV9iaXRzLG1uPWZuLnN0YXRfZGVzYy5leHRyYV9iYXNlLHJ0PWZuLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHp0PTA7Zm9yKHB0PTA7cHQ8PWNlO3B0KyspZnQuYmxfY291bnRbcHRd'@;
put 'PTA7Zm9yKGhuWzIqZnQuaGVhcFtmdC5oZWFwX21heF0rMV09MCxMdD1mdC5oZWFwX21heCsxO0x0PDU3MztMdCsrKShwdD1oblsyKmhuWzIqKFF0PWZ0LmhlYXBbTHRdKSsxXSsxXSsxKT5ydCYmKHB0PXJ0LHp0KyspLGhuWzIqUXQrMV09cHQsIShRdD53dCkmJihmdC5ibF9jb3VudFtwdF0r'@;
put 'KyxZdD0wLFF0Pj1tbiYmKFl0PU50W1F0LW1uXSksZnQub3B0X2xlbis9KExuPWhuWzIqUXRdKSoocHQrWXQpLF90JiYoZnQuc3RhdGljX2xlbis9TG4qKFh0WzIqUXQrMV0rWXQpKSk7aWYoMCE9PXp0KXtkb3tmb3IocHQ9cnQtMTswPT09ZnQuYmxfY291bnRbcHRdOylwdC0tO2Z0LmJsX2Nv'@;
put 'dW50W3B0XS0tLGZ0LmJsX2NvdW50W3B0KzFdKz0yLGZ0LmJsX2NvdW50W3J0XS0tLHp0LT0yfXdoaWxlKHp0PjApO2ZvcihwdD1ydDswIT09cHQ7cHQtLSlmb3IoUXQ9ZnQuYmxfY291bnRbcHRdOzAhPT1RdDspISgoRHQ9ZnQuaGVhcFstLUx0XSk+d3QpJiYoaG5bMipEdCsxXSE9PXB0JiYo'@;
put 'ZnQub3B0X2xlbis9KHB0LWhuWzIqRHQrMV0pKmhuWzIqRHRdLGhuWzIqRHQrMV09cHQpLFF0LS0pfX0oZnQsZm4pLHFlKGhuLHJ0LGZ0LmJsX2NvdW50KX1mdW5jdGlvbiBNdChmdCxmbixobil7dmFyIHd0LF90LFh0PS0xLE50PWZuWzFdLG1uPTAscnQ9NyxMdD00O2ZvcigwPT09TnQmJihy'@;
put 'dD0xMzgsTHQ9MyksZm5bMiooaG4rMSkrMV09NjU1MzUsd3Q9MDt3dDw9aG47d3QrKylfdD1OdCxOdD1mblsyKih3dCsxKSsxXSwhKCsrbW48cnQmJl90PT09TnQpJiYobW48THQ/ZnQuYmxfdHJlZVsyKl90XSs9bW46MCE9PV90PyhfdCE9PVh0JiZmdC5ibF90cmVlWzIqX3RdKyssZnQuYmxf'@;
put 'dHJlZVszMl0rKyk6bW48PTEwP2Z0LmJsX3RyZWVbMzRdKys6ZnQuYmxfdHJlZVszNl0rKyxtbj0wLFh0PV90LDA9PT1OdD8ocnQ9MTM4LEx0PTMpOl90PT09TnQ/KHJ0PTYsTHQ9Myk6KHJ0PTcsTHQ9NCkpfWZ1bmN0aW9uIEh0KGZ0LGZuLGhuKXt2YXIgd3QsX3QsWHQ9LTEsTnQ9Zm5bMV0s'@;
put 'bW49MCxydD03LEx0PTQ7Zm9yKDA9PT1OdCYmKHJ0PTEzOCxMdD0zKSx3dD0wO3d0PD1objt3dCsrKWlmKF90PU50LE50PWZuWzIqKHd0KzEpKzFdLCEoKyttbjxydCYmX3Q9PT1OdCkpe2lmKG1uPEx0KWRve1BlKGZ0LF90LGZ0LmJsX3RyZWUpfXdoaWxlKDAhPS0tbW4pO2Vsc2UgMCE9PV90'@;
put 'PyhfdCE9PVh0JiYoUGUoZnQsX3QsZnQuYmxfdHJlZSksbW4tLSksUGUoZnQsMTYsZnQuYmxfdHJlZSksbHQoZnQsbW4tMywyKSk6bW48PTEwPyhQZShmdCwxNyxmdC5ibF90cmVlKSxsdChmdCxtbi0zLDMpKTooUGUoZnQsMTgsZnQuYmxfdHJlZSksbHQoZnQsbW4tMTEsNykpO21uPTAsWHQ9'@;
put 'X3QsMD09PU50PyhydD0xMzgsTHQ9Myk6X3Q9PT1OdD8ocnQ9NixMdD0zKToocnQ9NyxMdD00KX19dmFyIFV0PSExO2Z1bmN0aW9uIFduKGZ0LGZuLGhuLHd0KXtsdChmdCwwKyh3dD8xOjApLDMpLGZ1bmN0aW9uIE1lKGZ0LGZuLGhuLHd0KXtodChmdCksd3QmJihRZShmdCxobiksUWUoZnQs'@;
put 'fmhuKSksSy5hcnJheVNldChmdC5wZW5kaW5nX2J1ZixmdC53aW5kb3csZm4saG4sZnQucGVuZGluZyksZnQucGVuZGluZys9aG59KGZ0LGZuLGhuLCEwKX16Ll90cl9pbml0PWZ1bmN0aW9uIGJuKGZ0KXtVdHx8KGZ1bmN0aW9uIFhlKCl7dmFyIGZ0LGZuLGhuLHd0LFh0LF90PW5ldyBBcnJh'@;
put 'eShjZSsxKTtmb3IoaG49MCx3dD0wO3d0PDI4O3d0KyspZm9yKHhlW3d0XT1obixmdD0wO2Z0PDE8PENbd3RdO2Z0KyspZmVbaG4rK109d3Q7Zm9yKGZlW2huLTFdPXd0LFh0PTAsd3Q9MDt3dDwxNjt3dCsrKWZvcihJZVt3dF09WHQsZnQ9MDtmdDwxPDxTW3d0XTtmdCsrKWRlW1h0KytdPXd0'@;
put 'O2ZvcihYdD4+PTc7d3Q8MzA7d3QrKylmb3IoSWVbd3RdPVh0PDw3LGZ0PTA7ZnQ8MTw8U1t3dF0tNztmdCsrKWRlWzI1NitYdCsrXT13dDtmb3IoZm49MDtmbjw9Y2U7Zm4rKylfdFtmbl09MDtmb3IoZnQ9MDtmdDw9MTQzOylKWzIqZnQrMV09OCxmdCsrLF90WzhdKys7Zm9yKDtmdDw9MjU1'@;
put 'OylKWzIqZnQrMV09OSxmdCsrLF90WzldKys7Zm9yKDtmdDw9Mjc5OylKWzIqZnQrMV09NyxmdCsrLF90WzddKys7Zm9yKDtmdDw9Mjg3OylKWzIqZnQrMV09OCxmdCsrLF90WzhdKys7Zm9yKHFlKEosMjg3LF90KSxmdD0wO2Z0PDMwO2Z0KyspbmVbMipmdCsxXT01LG5lWzIqZnRdPWJlKGZ0'@;
put 'LDUpO09lPW5ldyBGZShKLEMsMjU3LDI4NixjZSksamU9bmV3IEZlKG5lLFMsMCwzMCxjZSksV2U9bmV3IEZlKG5ldyBBcnJheSgwKSx2LDAsMTksNyl9KCksVXQ9ITApLGZ0LmxfZGVzYz1uZXcgS2UoZnQuZHluX2x0cmVlLE9lKSxmdC5kX2Rlc2M9bmV3IEtlKGZ0LmR5bl9kdHJlZSxqZSks'@;
put 'ZnQuYmxfZGVzYz1uZXcgS2UoZnQuYmxfdHJlZSxXZSksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCxVZShmdCl9LHouX3RyX3N0b3JlZF9ibG9jaz1Xbix6Ll90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbiAkbihmdCxmbixobix3dCl7dmFyIFh0LF90LE50PTA7ZnQubGV2ZWw+MD8oMj09PWZ0'@;
put 'LnN0cm0uZGF0YV90eXBlJiYoZnQuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24gQ24oZnQpe3ZhciBobixmbj00MDkzNjI0NDQ3O2Zvcihobj0wO2huPD0zMTtobisrLGZuPj4+PTEpaWYoMSZmbiYmMCE9PWZ0LmR5bl9sdHJlZVsyKmhuXSlyZXR1cm4gMDtpZigwIT09ZnQuZHluX2x0cmVlWzE4'@;
put 'XXx8MCE9PWZ0LmR5bl9sdHJlZVsyMF18fDAhPT1mdC5keW5fbHRyZWVbMjZdKXJldHVybiAxO2Zvcihobj0zMjtobjwyNTY7aG4rKylpZigwIT09ZnQuZHluX2x0cmVlWzIqaG5dKXJldHVybiAxO3JldHVybiAwfShmdCkpLHV0KGZ0LGZ0LmxfZGVzYyksdXQoZnQsZnQuZF9kZXNjKSxOdD1m'@;
put 'dW5jdGlvbiBQdChmdCl7dmFyIGZuO2ZvcihNdChmdCxmdC5keW5fbHRyZWUsZnQubF9kZXNjLm1heF9jb2RlKSxNdChmdCxmdC5keW5fZHRyZWUsZnQuZF9kZXNjLm1heF9jb2RlKSx1dChmdCxmdC5ibF9kZXNjKSxmbj0xODtmbj49MyYmMD09PWZ0LmJsX3RyZWVbMipwW2ZuXSsxXTtmbi0t'@;
put 'KTtyZXR1cm4gZnQub3B0X2xlbis9MyooZm4rMSkrNSs1KzQsZm59KGZ0KSwoX3Q9ZnQuc3RhdGljX2xlbiszKzc+Pj4zKTw9KFh0PWZ0Lm9wdF9sZW4rMys3Pj4+MykmJihYdD1fdCkpOlh0PV90PWhuKzUsaG4rNDw9WHQmJi0xIT09Zm4/V24oZnQsZm4saG4sd3QpOjQ9PT1mdC5zdHJhdGVn'@;
put 'eXx8X3Q9PT1YdD8obHQoZnQsMisod3Q/MTowKSwzKSxvdChmdCxKLG5lKSk6KGx0KGZ0LDQrKHd0PzE6MCksMyksZnVuY3Rpb24gb24oZnQsZm4saG4sd3Qpe3ZhciBYdDtmb3IobHQoZnQsZm4tMjU3LDUpLGx0KGZ0LGhuLTEsNSksbHQoZnQsd3QtNCw0KSxYdD0wO1h0PHd0O1h0KyspbHQo'@;
put 'ZnQsZnQuYmxfdHJlZVsyKnBbWHRdKzFdLDMpO0h0KGZ0LGZ0LmR5bl9sdHJlZSxmbi0xKSxIdChmdCxmdC5keW5fZHRyZWUsaG4tMSl9KGZ0LGZ0LmxfZGVzYy5tYXhfY29kZSsxLGZ0LmRfZGVzYy5tYXhfY29kZSsxLE50KzEpLG90KGZ0LGZ0LmR5bl9sdHJlZSxmdC5keW5fZHRyZWUpKSxV'@;
put 'ZShmdCksd3QmJmh0KGZ0KX0sei5fdHJfdGFsbHk9ZnVuY3Rpb24gSG4oZnQsZm4saG4pe3JldHVybiBmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0XT1mbj4+PjgmMjU1LGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXQrMV09MjU1JmZuLGZ0LnBlbmRp'@;
put 'bmdfYnVmW2Z0LmxfYnVmK2Z0Lmxhc3RfbGl0XT0yNTUmaG4sZnQubGFzdF9saXQrKywwPT09Zm4/ZnQuZHluX2x0cmVlWzIqaG5dKys6KGZ0Lm1hdGNoZXMrKyxmbi0tLGZ0LmR5bl9sdHJlZVsyKihmZVtobl0rMjU2KzEpXSsrLGZ0LmR5bl9kdHJlZVsyKlllKGZuKV0rKyksZnQubGFzdF9s'@;
put 'aXQ9PT1mdC5saXRfYnVmc2l6ZS0xfSx6Ll90cl9hbGlnbj1mdW5jdGlvbiBlbihmdCl7bHQoZnQsMiwzKSxQZShmdCwyNTYsSiksZnVuY3Rpb24gQWUoZnQpezE2PT09ZnQuYmlfdmFsaWQ/KFFlKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCk6ZnQuYmlfdmFsaWQ+'@;
put 'PTgmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmdC5iaV9idWYsZnQuYmlfYnVmPj49OCxmdC5iaV92YWxpZC09OCl9KGZ0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5jdGlvbiBLKCl7'@;
put 'dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRh'@;
put 'dGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw4MzQxNzooYXQsTGUsRik9PnshZnVuY3Rpb24geChNKXtNLnZlcnNpb249IjEuMjAyMTExMjIuMSI7dmFyIE89MTIwMCxSPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFs'@;
put 'LmNwdGFibGU9Rig4MDc4OCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0YWJsZT1GKDgwNzg4KSkpO2Zvcih2YXIgej1bODc0LDkzMiw5MzYsOTQ5LDk1MCwxZTRdLEs9MDtLPD04OysrSyl6LnB1c2goMTI1MCtLKTt2YXIgTD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQs'@;
put 'MTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGs9ZnVuY3Rpb24oeSl7LTEhPXouaW5kZXhP'@;
put 'Zih5KSYmKFI9TFswXT15KX0saj1mdW5jdGlvbih5KXtPPXksayh5KX07ZnVuY3Rpb24gVigpe2ooMTIwMCksZnVuY3Rpb24gRSgpe2soMTI1Mil9KCl9ZnVuY3Rpb24gQih5KXtmb3IodmFyIFA9W10sST0wLFE9eS5sZW5ndGg7STxROysrSSlQW0ldPXkuY2hhckNvZGVBdChJKTtyZXR1cm4g'@;
put 'UH12YXIgVT1mdW5jdGlvbih5KXt2YXIgUD15LmNoYXJDb2RlQXQoMCksST15LmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09UCYmMjU0PT1JP2Z1bmN0aW9uIFkoeSl7Zm9yKHZhciBQPVtdLEk9MDtJPHkubGVuZ3RoPj4xOysrSSlQW0ldPVN0cmluZy5mcm9tQ2hhckNvZGUoeS5jaGFyQ29k'@;
put 'ZUF0KDIqSSkrKHkuY2hhckNvZGVBdCgyKkkrMSk8PDgpKTtyZXR1cm4gUC5qb2luKCIiKX0oeS5zbGljZSgyKSk6MjU0PT1QJiYyNTU9PUk/ZnVuY3Rpb24gWCh5KXtmb3IodmFyIFA9W10sST0wO0k8eS5sZW5ndGg+PjE7KytJKVBbSV09U3RyaW5nLmZyb21DaGFyQ29kZSh5LmNoYXJDb2Rl'@;
put 'QXQoMipJKzEpKyh5LmNoYXJDb2RlQXQoMipJKTw8OCkpO3JldHVybiBQLmpvaW4oIiIpfSh5LnNsaWNlKDIpKTo2NTI3OT09UD95LnNsaWNlKDEpOnl9LHE9ZnVuY3Rpb24oUCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUCl9LGVlPWZ1bmN0aW9uKFApe3JldHVybiBTdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKFApfTt0eXBlb2YgY3B0YWJsZTwidSImJihqPWZ1bmN0aW9uKHkpe089eSxrKHkpfSxVPWZ1bmN0aW9uKHkpe3JldHVybiAyNTU9PT15LmNoYXJDb2RlQXQoMCkmJjI1ND09PXkuY2hhckNvZGVBdCgxKT9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLEIoeS5zbGljZSgyKSkp'@;
put 'Onl9LHE9ZnVuY3Rpb24oUCl7cmV0dXJuIDEyMDA9PT1PP1N0cmluZy5mcm9tQ2hhckNvZGUoUCk6Y3B0YWJsZS51dGlscy5kZWNvZGUoTyxbMjU1JlAsUD4+OF0pWzBdfSxlZT1mdW5jdGlvbihQKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoUixbUF0pWzBdfSk7dmFyIFAsdGU9bnVs'@;
put 'bCxzZT0oUD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLHtlbmNvZGU6ZnVuY3Rpb24oSSl7Zm9yKHZhciBRPSIiLHJlPTAsZ2U9MCxfZT0wLHZlPTAsU2U9MCxIZT0wLEJlPTAsR2U9MDtHZTxJLmxlbmd0aDspdmU9'@;
put 'KHJlPUkuY2hhckNvZGVBdChHZSsrKSk+PjIsU2U9KDMmcmUpPDw0fChnZT1JLmNoYXJDb2RlQXQoR2UrKykpPj40LEhlPSgxNSZnZSk8PDJ8KF9lPUkuY2hhckNvZGVBdChHZSsrKSk+PjYsQmU9NjMmX2UsaXNOYU4oZ2UpP0hlPUJlPTY0OmlzTmFOKF9lKSYmKEJlPTY0KSxRKz1QLmNoYXJB'@;
put 'dCh2ZSkrUC5jaGFyQXQoU2UpK1AuY2hhckF0KEhlKStQLmNoYXJBdChCZSk7cmV0dXJuIFF9LGRlY29kZTpmdW5jdGlvbihRKXt2YXIgcmU9IiIsU2U9MCxIZT0wLEJlPTAsR2U9MDtRPVEucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBudD0wO250PFEubGVuZ3RoOylTZT1Q'@;
put 'LmluZGV4T2YoUS5jaGFyQXQobnQrKykpLEhlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSkscmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoU2U8PDJ8SGU+PjQpLDY0IT09KEJlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSkpJiYocmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JkhlKTw8NHxC'@;
put 'ZT4+MikpLDY0IT09KEdlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSkpJiYocmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmQmUpPDw2fEdlKSk7cmV0dXJuIHJlfX0pLGhlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1'@;
put 'IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGUsdWU9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgY2U9IUJ1ZmZlci5mcm9tO2lmKCFjZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtjZT0hMH11ZT1jZT9mdW5jdGlvbih5LFApe3JldHVybiBQP25l'@;
put 'dyBCdWZmZXIoeSxQKTpuZXcgQnVmZmVyKHkpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgQnVmZmVyKHkpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9u'@;
put 'KHkpe3JldHVybiBuZXcgQnVmZmVyKHkpfSl9ZnVuY3Rpb24gRyh5KXtyZXR1cm4gaGU/QnVmZmVyLmFsbG9jKHkpOm5ldyBBcnJheSh5KX1mdW5jdGlvbiBiKHkpe3JldHVybiBoZT9CdWZmZXIuYWxsb2NVbnNhZmUoeSk6bmV3IEFycmF5KHkpfXZhciBEPWZ1bmN0aW9uKFApe3JldHVybiBo'@;
put 'ZT91ZShQLCJiaW5hcnkiKTpQLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oSSl7cmV0dXJuIDI1NSZJLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24gSCh5KXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiBEKHkpO2Zvcih2YXIgUD1uZXcgQXJyYXlCdWZmZXIoeS5sZW5ndGgpLEk9'@;
put 'bmV3IFVpbnQ4QXJyYXkoUCksUT0wO1EhPXkubGVuZ3RoOysrUSlJW1FdPTI1NSZ5LmNoYXJDb2RlQXQoUSk7cmV0dXJuIFB9ZnVuY3Rpb24gTih5KXtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiB5Lm1hcChmdW5jdGlvbihRKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShRKX0pLmpv'@;
put 'aW4oIiIpO2Zvcih2YXIgUD1bXSxJPTA7STx5Lmxlbmd0aDsrK0kpUFtJXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHlbSV0pO3JldHVybiBQLmpvaW4oIiIpfWZ1bmN0aW9uIEMoeSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7aWYoeSBp'@;
put 'bnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBDKG5ldyBVaW50OEFycmF5KHkpKTtmb3IodmFyIFA9bmV3IEFycmF5KHkubGVuZ3RoKSxJPTA7STx5Lmxlbmd0aDsrK0kpUFtJXT15W0ldO3JldHVybiBQfXZhciBTPWZ1bmN0aW9uKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVu'@;
put 'Y3Rpb24oSSl7QXJyYXkuaXNBcnJheShJKT9QPVAuY29uY2F0KEkpOih0eXBlb2YgVWludDhBcnJheTwidSImJkkgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZJIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpJiYoUD1QLmNvbmNhdChDKEkpKSl9KSxQfSx2'@;
put 'PS9cdTAwMDAvZyxwPS9bXHUwMDAxLVx1MDAwNl0vZyx3PXt9LEo9ZnVuY3Rpb24oUCl7ZnVuY3Rpb24gSShLdCl7Zm9yKHZhciBnbj0iIixJbj1LdC5sZW5ndGgtMTtJbj49MDspZ24rPUt0LmNoYXJBdChJbi0tKTtyZXR1cm4gZ259ZnVuY3Rpb24gUShLdCxnbil7Zm9yKHZhciBJbj0iIjtJ'@;
put 'bi5sZW5ndGg8Z247KUluKz1LdDtyZXR1cm4gSW59ZnVuY3Rpb24gcmUoS3QsZ24pe3ZhciBJbj0iIitLdDtyZXR1cm4gSW4ubGVuZ3RoPj1nbj9JbjpRKCIwIixnbi1Jbi5sZW5ndGgpK0lufWZ1bmN0aW9uIGdlKEt0LGduKXt2YXIgSW49IiIrS3Q7cmV0dXJuIEluLmxlbmd0aD49Z24/SW46'@;
put 'USgiICIsZ24tSW4ubGVuZ3RoKStJbn1mdW5jdGlvbiBfZShLdCxnbil7dmFyIEluPSIiK0t0O3JldHVybiBJbi5sZW5ndGg+PWduP0luOkluK1EoIiAiLGduLUluLmxlbmd0aCl9UC52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBIZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBCZShLdCxn'@;
put 'bil7cmV0dXJuIEt0PkhlfHxLdDwtSGU/ZnVuY3Rpb24gdmUoS3QsZ24pe3ZhciBJbj0iIitNYXRoLnJvdW5kKEt0KTtyZXR1cm4gSW4ubGVuZ3RoPj1nbj9JbjpRKCIwIixnbi1Jbi5sZW5ndGgpK0lufShLdCxnbik6ZnVuY3Rpb24gU2UoS3QsZ24pe3ZhciBJbj0iIitLdDtyZXR1cm4gSW4u'@;
put 'bGVuZ3RoPj1nbj9JbjpRKCIwIixnbi1Jbi5sZW5ndGgpK0lufShNYXRoLnJvdW5kKEt0KSxnbil9ZnVuY3Rpb24gR2UoS3QsZ24pe3JldHVybiBLdC5sZW5ndGg+PTcrKGduPWdufHwwKSYmMTAzPT0oMzJ8S3QuY2hhckNvZGVBdChnbikpJiYxMDE9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzEp'@;
put 'KSYmMTEwPT0oMzJ8S3QuY2hhckNvZGVBdChnbisyKSkmJjEwMT09KDMyfEt0LmNoYXJDb2RlQXQoZ24rMykpJiYxMTQ9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzQpKSYmOTc9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzUpKSYmMTA4PT0oMzJ8S3QuY2hhckNvZGVBdChnbis2KSl9ZnVuY3Rpb24g'@;
put 'bnQoS3Qpe2Zvcih2YXIgZ249W10sSW49T2JqZWN0LmtleXMoS3QpLFdyPTA7V3IhPT1Jbi5sZW5ndGg7KytXcilnbltLdFtJbltXcl1dXT1JbltXcl07cmV0dXJuIGdufXZhciBkdD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwi'@;
put 'V2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxDdD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1h'@;
put 'eSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVu'@;
put 'Y3Rpb24gY3QoS3Qpe0t0WzBdPSJHZW5lcmFsIixLdFsxXT0iMCIsS3RbMl09IjAuMDAiLEt0WzNdPSIjLCMjMCIsS3RbNF09IiMsIyMwLjAwIixLdFs5XT0iMCUiLEt0WzEwXT0iMC4wMCUiLEt0WzExXT0iMC4wMEUrMDAiLEt0WzEyXT0iIyA/Lz8iLEt0WzEzXT0iIyA/Py8/PyIsS3RbMTRd'@;
put 'PSJtL2QveXkiLEt0WzE1XT0iZC1tbW0teXkiLEt0WzE2XT0iZC1tbW0iLEt0WzE3XT0ibW1tLXl5IixLdFsxOF09Img6bW0gQU0vUE0iLEt0WzE5XT0iaDptbTpzcyBBTS9QTSIsS3RbMjBdPSJoOm1tIixLdFsyMV09Img6bW06c3MiLEt0WzIyXT0ibS9kL3l5IGg6bW0iLEt0WzM3XT0iIywj'@;
put 'IzAgOygjLCMjMCkiLEt0WzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsS3RbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixLdFs0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIsS3RbNDVdPSJtbTpzcyIsS3RbNDZdPSJbaF06bW06c3MiLEt0WzQ3XT0ibW1zcy4wIixLdFs0OF09IiMj'@;
put 'MC4wRSswIixLdFs0OV09IkAiLEt0WzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLFNuKEt0KX12YXIgYnQ9e307Y3QoYnQpO3ZhciBGdD1bXSxrdD0wO2ZvcihrdD01O2t0PD04Oysra3QpRnRba3RdPTMyK2t0O2Zvcihr'@;
put 'dD0yMztrdDw9MjY7KytrdClGdFtrdF09MDtmb3Ioa3Q9Mjc7a3Q8PTMxOysra3QpRnRba3RdPTE0O2ZvcihrdD01MDtrdDw9NTg7KytrdClGdFtrdF09MTQ7Zm9yKGt0PTU5O2t0PD02MjsrK2t0KUZ0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpRnRba3RdPWt0LTU4O2Zvcihr'@;
put 'dD03MjtrdDw9NzU7KytrdClGdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KUZ0W2t0XT1rdC01Nztmb3Ioa3Q9NzY7a3Q8PTc4Oysra3QpRnRba3RdPWt0LTU2O2ZvcihrdD03OTtrdDw9ODE7KytrdClGdFtrdF09a3QtMzQ7dmFyIFR0PVtdO2Z1bmN0aW9uIFp0KEt0LGduLElu'@;
put 'KXtmb3IodmFyIFdyPUt0PDA/LTE6MSxYbj1LdCpXcixlaT0wLGlyPTEscmk9MCxtbz0xLG9pPTAsemk9MCxKcj1NYXRoLmZsb29yKFhuKTtvaTxnbiYmKHJpPShKcj1NYXRoLmZsb29yKFhuKSkqaXIrZWksemk9SnIqb2krbW8sIShYbi1Kcjw1ZS04KSk7KVhuPTEvKFhuLUpyKSxlaT1pcixp'@;
put 'cj1yaSxtbz1vaSxvaT16aTtpZih6aT5nbiYmKG9pPmduPyh6aT1tbyxyaT1laSk6KHppPW9pLHJpPWlyKSksIUluKXJldHVyblswLFdyKnJpLHppXTt2YXIgd3M9TWF0aC5mbG9vcihXcipyaS96aSk7cmV0dXJuW3dzLFdyKnJpLXdzKnppLHppXX1mdW5jdGlvbiBwbihLdCxnbixJbil7aWYo'@;
put 'S3Q+Mjk1ODQ2NXx8S3Q8MClyZXR1cm4gbnVsbDt2YXIgV3I9MHxLdCxYbj1NYXRoLmZsb29yKDg2NDAwKihLdC1XcikpLGVpPTAsaXI9W10scmk9e0Q6V3IsVDpYbix1Ojg2NDAwKihLdC1XciktWG4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhyaS51KTwxZS02'@;
put 'JiYocmkudT0wKSxnbiYmZ24uZGF0ZTE5MDQmJihXcis9MTQ2MikscmkudT4uOTk5OSYmKHJpLnU9MCw4NjQwMD09KytYbiYmKHJpLlQ9WG49MCwrK1dyLCsrcmkuRCkpLDYwPT09V3IpaXI9SW4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGVpPTM7ZWxzZSBpZigwPT09V3IpaXI9SW4/WzEz'@;
put 'MTcsOCwyOV06WzE5MDAsMSwwXSxlaT02O2Vsc2V7V3I+NjAmJi0tV3I7dmFyIG1vPW5ldyBEYXRlKDE5MDAsMCwxKTttby5zZXREYXRlKG1vLmdldERhdGUoKStXci0xKSxpcj1bbW8uZ2V0RnVsbFllYXIoKSxtby5nZXRNb250aCgpKzEsbW8uZ2V0RGF0ZSgpXSxlaT1tby5nZXREYXkoKSxX'@;
put 'cjw2MCYmKGVpPShlaSs2KSU3KSxJbiYmKGVpPWZ1bmN0aW9uIF9vKEt0LGduKXtnblswXS09NTgxO3ZhciBJbj1LdC5nZXREYXkoKTtyZXR1cm4gS3Q8NjAmJihJbj0oSW4rNiklNyksSW59KG1vLGlyKSl9cmV0dXJuIHJpLnk9aXJbMF0scmkubT1pclsxXSxyaS5kPWlyWzJdLHJpLlM9WG4l'@;
put 'NjAsWG49TWF0aC5mbG9vcihYbi82MCkscmkuTT1YbiU2MCxYbj1NYXRoLmZsb29yKFhuLzYwKSxyaS5IPVhuLHJpLnE9ZWkscml9VHRbNV09VHRbNjNdPSciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxUdFs2XT1UdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsVHRb'@;
put 'N109VHRbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxUdFs4XT1UdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsVHRbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxUdFs0Ml09J18oIiQiKiAj'@;
put 'LCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLFR0WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAiLSI/P18pO18oQF8pJyxUdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0i'@;
put 'Pz9fKTtfKEBfKScsUC5wYXJzZV9kYXRlX2NvZGU9cG47dmFyIEtuPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLHVuPUtuLmdldFRpbWUoKSxxbj1uZXcgRGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gem4oS3QsZ24pe3ZhciBJbj1LdC5nZXRUaW1lKCk7cmV0dXJuIGduP0luLT0x'@;
put 'MjYyMzA0ZTU6S3Q+PXFuJiYoSW4rPTg2NGU1KSwoSW4tKHVuKzZlNCooS3QuZ2V0VGltZXpvbmVPZmZzZXQoKS1Lbi5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fXZhciBrbj0iIixlcj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRl'@;
put 'Ijp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LHRyPWVyW2tuLnRvTG93ZXJDYXNlKCldfHxlclsiZW4tdXMiXSxabj1udCh0ciksQnI9IiQiLHNpPSIiLFFyPSIsIix1cj0iLiIs'@;
put 'QW49Ii8iO2Z1bmN0aW9uIFNuKEt0KXtzd2l0Y2goKGtufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6S3RbMjddPSJbJC00MDRdZS9tL2QiLEt0WzI4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgi'@;
put 'ZCJcdTY1ZTUiJyxLdFszMF09J20iLyJkIi8ieXknLEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2hoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSdcdTRlMGFcdTUzNDgvXHU0'@;
put 'ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNl09IlskLTQwNF1lL20vZCIsS3RbNTBdPSJbJC00MDRdZS9tL2QiLEt0WzUxXT0nWyQtNDA0XWUiXHU1ZTc0'@;
put 'Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFs1M109J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1NF09J1skLTQwNF1lIlx1NWU3'@;
put 'NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsS3RbNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbNTddPSJbJC00MDRdZS9tL2Qi'@;
put 'LEt0WzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6S3RbMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzBdPSdtIi0iZCIt'@;
put 'Inl5JyxLdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFszM109J2giXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2'@;
put 'IicsS3RbMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNl09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09'@;
put 'J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsS3RbNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1'@;
put 'MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNThdPSdtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiamEtanAiOkt0WzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0'@;
put 'Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLyJkIi8ieXknLEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLEt0WzMzXT0n'@;
put 'aCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbNTFdPSdbJC00MTFdZ2dnZSJc'@;
put 'dTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU0XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0'@;
put 'WzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1N109J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOkt0WzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3Rb'@;
put 'MjhdPSJtbS1kZCIsS3RbMjldPSJtbS1kZCIsS3RbMzBdPSJtbS1kZC15eSIsS3RbMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxLdFszMl09J2giXHVjMmRjIiBtbSJcdWJkODQiJyxLdFszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLEt0WzM0'@;
put 'XT0ieXl5eS1tbS1kZCIsS3RbMzVdPSJ5eXl5LW1tLWRkIixLdFszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLEt0WzUwXT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNTFdPSJtbS1kZCIsS3RbNTJdPSJ5eXl5LW1tLWRkIixLdFs1M109'@;
put 'Inl5eXktbW0tZGQiLEt0WzU0XT0ibW0tZGQiLEt0WzU1XT0ieXl5eS1tbS1kZCIsS3RbNTZdPSJ5eXl5LW1tLWRkIixLdFs1N109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLEt0WzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOkt0WzU5XT0nInQiMCcsS3RbNjBd'@;
put 'PScidCIwLjAwJyxLdFs2MV09JyJ0IiMsIyMwJyxLdFs2Ml09JyJ0IiMsIyMwLjAwJyxLdFs2N109InQwJSIsS3RbNjhdPSJ0MC4wMCUiLEt0WzY5XT0idCMgPy8/IixLdFs3MF09InQjID8/Lz8/IixLdFs3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYics'@;
put 'S3RbNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLEt0WzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0JyxLdFs3NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsS3RbNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLEt0'@;
put 'Wzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxLdFs3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLEt0Wzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxLdFs3OV09J1tc'@;
put 'dTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxLdFs4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxLdFs4MV09ImQvbS9iYiJ9fVAuX2dlbmVyYWxfaW50PWZ1bmN0aW9uIHdpKEt0KXtyZXR1cm4gS3QudG9TdHJpbmcoMTApfTt2YXIgVXI9ZnVuY3Rpb24oKXt2'@;
put 'YXIgZ249Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gSW4ob2kpe3JldHVybi0xPT1vaS5pbmRleE9mKCIuIik/b2k6b2kucmVwbGFjZShnbiwiJDEiKX12YXIgV3I9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sWG49LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0'@;
put 'aW9uKHppKXt2YXIgSnI9ZnVuY3Rpb24gbW8ob2kpe3ZhciBKcix6aT1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKG9pKSkqTWF0aC5MT0cxMEUpO3JldHVybiBKcj16aT49LTQmJnppPD0tMT9vaS50b1ByZWNpc2lvbigxMCt6aSk6TWF0aC5hYnMoemkpPD05P2Z1bmN0aW9uIGlyKG9p'@;
put 'KXt2YXIgemk9b2k8MD8xMjoxMSxKcj1JbihvaS50b0ZpeGVkKDEyKSk7cmV0dXJuIEpyLmxlbmd0aDw9eml8fChKcj1vaS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9emk/SnI6b2kudG9FeHBvbmVudGlhbCg1KX0ob2kpOjEwPT09emk/b2kudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1'@;
put 'bmN0aW9uIHJpKG9pKXt2YXIgemk9SW4ob2kudG9GaXhlZCgxMSkpO3JldHVybiB6aS5sZW5ndGg+KG9pPDA/MTI6MTEpfHwiMCI9PT16aXx8Ii0wIj09PXppP29pLnRvUHJlY2lzaW9uKDYpOnppfShvaSksSW4oZnVuY3Rpb24gZWkob2kpe3JldHVybi0xPT1vaS5pbmRleE9mKCJFIik/b2k6'@;
put 'b2kucmVwbGFjZShXciwiJDFFIikucmVwbGFjZShYbiwiJDEwJDIiKX0oSnIudG9VcHBlckNhc2UoKSkpfSh6aSk7cmV0dXJuIiwiPT09UXImJiIuIj09PXVyP0pyOkpyLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbih3cyl7cmV0dXJuIiwiPT13cz9Rcjp1cn0pfX0oKTtmdW5jdGlvbiBqaShL'@;
put 'dCxnbil7c3dpdGNoKHR5cGVvZiBLdCl7Y2FzZSJzdHJpbmciOnJldHVybiBLdDtjYXNlImJvb2xlYW4iOnJldHVybiBLdD8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKDB8S3QpPT09S3Q/S3QudG9TdHJpbmcoMTApOlVyKEt0KTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7'@;
put 'Y2FzZSJvYmplY3QiOmlmKG51bGw9PUt0KXJldHVybiIiO2lmKEt0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbnUoMTQsem4oS3QsZ24mJmduLmRhdGUxOTA0KSxnbil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIitLdCl9UC5fZ2VuZXJh'@;
put 'bF9udW09VXIsUC5fZ2VuZXJhbD1qaTt2YXIgVGk9Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIuc3BsaXQoIiIpO2Z1bmN0aW9uIFlvKEt0LGduLEluLFdyKXt2YXIgbW8sWG49IiIsZWk9MCxpcj0wLHJpPUluLnksb2k9MDtz'@;
put 'd2l0Y2goS3Qpe2Nhc2UgOTg6cmk9SW4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1yaSUxMDAsb2k9MjticmVhaztkZWZhdWx0Om1vPXJpJTFlNCxvaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89'@;
put 'SW4ubSxvaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBDdFtJbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gQ3RbSW4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBDdFtJbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89SW4uZCxv'@;
put 'aT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBkdFtJbi5xXVswXTtkZWZhdWx0OnJldHVybiBkdFtJbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPTErKEluLkgrMTEpJTEyLG9pPWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRo'@;
put 'cm93ImJhZCBob3VyIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDcyOnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89SW4uSCxvaT1nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrZ259YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goZ24ubGVuZ3Ro'@;
put 'KXtjYXNlIDE6Y2FzZSAyOm1vPUluLk0sb2k9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrZ259YnJlYWs7Y2FzZSAxMTU6aWYoInMiIT1nbiYmInNzIiE9Z24mJiIuMCIhPWduJiYiLjAwIiE9Z24mJiIuMDAwIiE9Z24pdGhyb3ciYmFkIHNlY29u'@;
put 'ZCBmb3JtYXQ6ICIrZ247cmV0dXJuIDAhPT1Jbi51fHwicyIhPWduJiYic3MiIT1nbj8oaXI9V3I+PTI/Mz09PVdyPzFlMzoxMDA6MT09PVdyPzEwOjEsKGVpPU1hdGgucm91bmQoaXIqKEluLlMrSW4udSkpKT49NjAqaXImJihlaT0wKSwicyI9PT1nbj8wPT09ZWk/IjAiOiIiK2VpL2lyOihY'@;
put 'bj1yZShlaSwyK1dyKSwic3MiPT09Z24/WG4uc3Vic3RyKDAsMik6Ii4iK1huLnN1YnN0cigyLGduLmxlbmd0aC0xKSkpOnJlKEluLlMsZ24ubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaChnbil7Y2FzZSJbaF0iOmNhc2UiW2hoXSI6Y2FzZSJbXHUwZTBhXSI6Y2FzZSJbXHUwZTBhXHUwZTBhXSI6'@;
put 'bW89MjQqSW4uRCtJbi5IO2JyZWFrO2Nhc2UiW21dIjpjYXNlIlttbV0iOmNhc2UiW1x1MGUxOV0iOmNhc2UiW1x1MGUxOVx1MGUxOV0iOm1vPTYwKigyNCpJbi5EK0luLkgpK0luLk07YnJlYWs7Y2FzZSJbc10iOmNhc2UiW3NzXSI6Y2FzZSJbXHUwZTE3XSI6Y2FzZSJbXHUwZTE3XHUwZTE3'@;
put 'XSI6bW89NjAqKDYwKigyNCpJbi5EK0luLkgpK0luLk0pK01hdGgucm91bmQoSW4uUytJbi51KTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhYnN0aW1lIGZvcm1hdDogIitnbn1vaT0zPT09Z24ubGVuZ3RoPzE6MjticmVhaztjYXNlIDEwMTptbz1yaSxvaT0xO2JyZWFrO2Nhc2UgMzYyMzpt'@;
put 'bz1Jbi5kLG9pPWduLmxlbmd0aDticmVhaztjYXNlIDM2MDQ6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Jbi5tLG9pPWduLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEN0W0luLm0tMV1bMV07Y2FzZSA1OnJldHVybiBDdFtJbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJu'@;
put 'IEN0W0luLm0tMV1bMl19YnJlYWs7Y2FzZSAzNjExOnN3aXRjaChyaT1Jbi55KzU0Myxnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89cmklMTAwLG9pPTI7YnJlYWs7ZGVmYXVsdDptbz1yaSUxZTQsb2k9NH1icmVhaztjYXNlIDM1OTQ6bW89SW4uSCxvaT1nbi5sZW5ndGg7YnJlYWs7Y2Fz'@;
put 'ZSAzNjA5Om1vPUluLk0sb2k9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNzptbz1Jbi5TLG9pPWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93IEt0LnRvU3RyaW5nKDE2KX12YXIgemk9b2k+MD9yZShtbyxvaSk6IiI7cmV0dXJuKDkwPT1LdD9nbi5jaGFyQ29kZUF0KDEpPDM1ODQ6S3Q8'@;
put 'MzU4NCk/emk6emkucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihKcil7cmV0dXJuIFRpWytKcl19KX1mdW5jdGlvbiBsbyhLdCl7aWYoS3QubGVuZ3RoPD0zKXJldHVybiBLdDtmb3IodmFyIEluPUt0Lmxlbmd0aCUzLFdyPUt0LnN1YnN0cigwLEluKTtJbiE9S3QubGVuZ3RoO0luKz0zKVdy'@;
put 'Kz0oV3IubGVuZ3RoPjA/IiwiOiIiKStLdC5zdWJzdHIoSW4sMyk7cmV0dXJuIFdyfXZhciBBbz1mdW5jdGlvbigpe3ZhciBnbj0vJS9nO2Z1bmN0aW9uIFhuKGFuLFZ0KXt2YXIgV3QsZG49YW4uaW5kZXhPZigiRSIpLWFuLmluZGV4T2YoIi4iKS0xO2lmKGFuLm1hdGNoKC9eIyswLjBFXCsw'@;
put 'JC8pKXtpZigwPT1WdClyZXR1cm4iMC4wRSswIjtpZihWdDwwKXJldHVybiItIitYbihhbiwtVnQpO3ZhciBUbj1hbi5pbmRleE9mKCIuIik7LTE9PT1UbiYmKFRuPWFuLmluZGV4T2YoIkUiKSk7dmFyIG5yPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKSVUbjtpZihucjww'@;
put 'JiYobnIrPVRuKSwtMT09PShXdD0oVnQvTWF0aC5wb3coMTAsbnIpKS50b1ByZWNpc2lvbihkbisxKyhUbituciklVG4pKS5pbmRleE9mKCJlIikpe3ZhciBicj1NYXRoLmZsb29yKE1hdGgubG9nKFZ0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09V3QuaW5kZXhPZigiLiIpP1d0PVd0LmNoYXJB'@;
put 'dCgwKSsiLiIrV3Quc3Vic3RyKDEpKyJFKyIrKGJyLVd0Lmxlbmd0aCtucik6V3QrPSJFKyIrKGJyLW5yKTsiMC4iPT09V3Quc3Vic3RyKDAsMik7KVd0PShXdD1XdC5jaGFyQXQoMCkrV3Quc3Vic3RyKDIsVG4pKyIuIitXdC5zdWJzdHIoMitUbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIk'@;
put 'MSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTtXdD1XdC5yZXBsYWNlKC9cKy0vLCItIil9V3Q9V3QucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihacixJcixNaSxjaSl7cmV0dXJuIElyK01pK2NpLnN1YnN0cigwLChUbituciklVG4pKyIuIitjaS5zdWJzdHIo'@;
put 'bnIpKyJFIn0pfWVsc2UgV3Q9VnQudG9FeHBvbmVudGlhbChkbik7cmV0dXJuIGFuLm1hdGNoKC9FXCswMCQvKSYmV3QubWF0Y2goL2VbKy1dXGQkLykmJihXdD1XdC5zdWJzdHIoMCxXdC5sZW5ndGgtMSkrIjAiK1d0LmNoYXJBdChXdC5sZW5ndGgtMSkpLGFuLm1hdGNoKC9FXC0vKSYmV3Qu'@;
put 'bWF0Y2goL2VcKy8pJiYoV3Q9V3QucmVwbGFjZSgvZVwrLywiZSIpKSxXdC5yZXBsYWNlKCJlIiwiRSIpfXZhciBlaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8sbW89L14jKjAqXC4oWzAjXSspLyxvaT0vXCkuKlswI10vLHppPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiBKcihh'@;
put 'bil7Zm9yKHZhciBXdCxWdD0iIixkbj0wO2RuIT1hbi5sZW5ndGg7Kytkbilzd2l0Y2goV3Q9YW4uY2hhckNvZGVBdChkbikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2MzpWdCs9IiAiO2JyZWFrO2Nhc2UgNDg6VnQrPSIwIjticmVhaztkZWZhdWx0OlZ0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFd0'@;
put 'KX1yZXR1cm4gVnR9ZnVuY3Rpb24gd3MoYW4sVnQpe3ZhciBXdD1NYXRoLnBvdygxMCxWdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChhbipXdCkvV3R9ZnVuY3Rpb24gdnMoYW4sVnQpe2lmKFZ0PjExKXJldHVybiB2cyhhbiwxMSkqTWF0aC5wb3coMTAsVnQtMTEpO3ZhciBXdD1hbi1NYXRoLmZs'@;
put 'b29yKGFuKSxkbj1NYXRoLnBvdygxMCxWdCk7cmV0dXJuIFZ0PCgiIitNYXRoLnJvdW5kKFd0KmRuKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChXdCpkbil9ZnVuY3Rpb24gaGEoYW4sVnQsV3Qpe2lmKDQwPT09YW4uY2hhckNvZGVBdCgwKSYmIVZ0Lm1hdGNoKG9pKSl7dmFyIGRuPVZ0LnJlcGxh'@;
put 'Y2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBXdD49MD9oYSgibiIsZG4sV3QpOiIoIitoYSgibiIsZG4sLVd0KSsiKSJ9aWYoNDQ9PT1WdC5jaGFyQ29kZUF0KFZ0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gV3IoYW4sVnQsV3Qpe2Zv'@;
put 'cih2YXIgZG49VnQubGVuZ3RoLTE7NDQ9PT1WdC5jaGFyQ29kZUF0KGRuLTEpOyktLWRuO3JldHVybiBBbyhhbixWdC5zdWJzdHIoMCxkbiksV3QvTWF0aC5wb3coMTAsMyooVnQubGVuZ3RoLWRuKSkpfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9u'@;
put 'IEluKGFuLFZ0LFd0KXt2YXIgZG49VnQucmVwbGFjZShnbiwiIiksVG49VnQubGVuZ3RoLWRuLmxlbmd0aDtyZXR1cm4gQW8oYW4sZG4sV3QqTWF0aC5wb3coMTAsMipUbikpK1EoIiUiLFRuKX0oYW4sVnQsV3QpO2lmKC0xIT09VnQuaW5kZXhPZigiRSIpKXJldHVybiBYbihWdCxXdCk7aWYo'@;
put 'MzY9PT1WdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitoYShhbixWdC5zdWJzdHIoIiAiPT1WdC5jaGFyQXQoMSk/MjoxKSxXdCk7dmFyIFRuLG5yLGJyLFpyLElyPU1hdGguYWJzKFd0KSxNaT1XdDwwPyItIjoiIjtpZihWdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gTWkrQmUoSXIsVnQubGVu'@;
put 'Z3RoKTtpZihWdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PShUbj1CZShXdCwwKSkmJihUbj0iIiksVG4ubGVuZ3RoPlZ0Lmxlbmd0aD9UbjpKcihWdC5zdWJzdHIoMCxWdC5sZW5ndGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goZWkpKXJldHVybiBmdW5jdGlvbiBpcihh'@;
put 'bixWdCxXdCl7dmFyIGRuPXBhcnNlSW50KGFuWzRdLDEwKSxUbj1NYXRoLnJvdW5kKFZ0KmRuKSxucj1NYXRoLmZsb29yKFRuL2RuKSxicj1Ubi1ucipkbixacj1kbjtyZXR1cm4gV3QrKDA9PT1ucj8iIjoiIitucikrIiAiKygwPT09YnI/USgiICIsYW5bMV0ubGVuZ3RoKzErYW5bNF0ubGVu'@;
put 'Z3RoKTpnZShicixhblsxXS5sZW5ndGgpK2FuWzJdKyIvIithblszXStyZShacixhbls0XS5sZW5ndGgpKX0obnIsSXIsTWkpO2lmKFZ0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gTWkrQmUoSXIsVnQubGVuZ3RoLVZ0LmluZGV4T2YoIjAiKSk7aWYobnI9VnQubWF0Y2gobW8pKXJldHVybiBU'@;
put 'bj13cyhXdCxuclsxXS5sZW5ndGgpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK0pyKG5yWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrSnIobnJbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVW8sdGkpe3JldHVybiIuIit0aStRKCIwIixKcihuclsxXSkubGVuZ3RoLXRpLmxl'@;
put 'bmd0aCl9KSwtMSE9PVZ0LmluZGV4T2YoIjAuIik/VG46VG4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihWdD1WdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLG5yPVZ0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gTWkrd3MoSXIsbnJbMl0ubGVuZ3RoKS5yZXBsYWNlKC9cLihcZCpb'@;
put 'MS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxuclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKG5yPVZ0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBNaStsbyhCZShJciwwKSk7aWYobnI9VnQubWF0Y2goL14jLCMjMFwu'@;
put 'KFsjMF0qMCkkLykpcmV0dXJuIFd0PDA/Ii0iK2hhKGFuLFZ0LC1XdCk6bG8oIiIrKE1hdGguZmxvb3IoV3QpK2Z1bmN0aW9uIG1sKGFuLFZ0KXtyZXR1cm4gVnQ8KCIiK01hdGgucm91bmQoKGFuLU1hdGguZmxvb3IoYW4pKSpNYXRoLnBvdygxMCxWdCkpKS5sZW5ndGg/MTowfShXdCxuclsx'@;
put 'XS5sZW5ndGgpKSkrIi4iK3JlKHZzKFd0LG5yWzFdLmxlbmd0aCksbnJbMV0ubGVuZ3RoKTtpZihucj1WdC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gaGEoYW4sVnQucmVwbGFjZSgvXiMsIyosLywiIiksV3QpO2lmKG5yPVZ0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJl'@;
put 'dHVybiBUbj1JKGhhKGFuLFZ0LnJlcGxhY2UoL1tcXC1dL2csIiIpLFd0KSksYnI9MCxJKEkoVnQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihVbyl7cmV0dXJuIGJyPFRuLmxlbmd0aD9Ubi5jaGFyQXQoYnIrKyk6IjAiPT09VW8/IjAiOiIifSkpO2lmKFZ0'@;
put 'Lm1hdGNoKHppKSlyZXR1cm4iKCIrKFRuPWhhKGFuLCIjIyMjIyMjIyMjIixXdCkpLnN1YnN0cigwLDMpKyIpICIrVG4uc3Vic3RyKDMsMykrIi0iK1RuLnN1YnN0cig2KTt2YXIgY2k9IiI7aWYobnI9VnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBicj1N'@;
put 'YXRoLm1pbihucls0XS5sZW5ndGgsNyksWnI9WnQoSXIsTWF0aC5wb3coMTAsYnIpLTEsITEpLFRuPSIiK01pLCIgIj09KGNpPUFvKCJuIixuclsxXSxaclsxXSkpLmNoYXJBdChjaS5sZW5ndGgtMSkmJihjaT1jaS5zdWJzdHIoMCxjaS5sZW5ndGgtMSkrIjAiKSxUbis9Y2krbnJbMl0rIi8i'@;
put 'K25yWzNdLChjaT1fZShaclsyXSxicikpLmxlbmd0aDxucls0XS5sZW5ndGgmJihjaT1Kcihucls0XS5zdWJzdHIobnJbNF0ubGVuZ3RoLWNpLmxlbmd0aCkpK2NpKSxUbis9Y2k7aWYobnI9VnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgu'@;
put 'bWluKE1hdGgubWF4KG5yWzFdLmxlbmd0aCxucls0XS5sZW5ndGgpLDcpLE1pKygoWnI9WnQoSXIsTWF0aC5wb3coMTAsYnIpLTEsITApKVswXXx8KFpyWzFdPyIiOiIwIikpKyIgIisoWnJbMV0/Z2UoWnJbMV0sYnIpK25yWzJdKyIvIituclszXStfZShaclsyXSxicik6USgiICIsMipicisx'@;
put 'K25yWzJdLmxlbmd0aCtuclszXS5sZW5ndGgpKTtpZihucj1WdC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gVG49QmUoV3QsMCksVnQubGVuZ3RoPD1Ubi5sZW5ndGg/VG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLVRuLmxlbmd0aCkpK1RuO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMD9dKylc'@;
put 'LihbIzBdKykkLykpe1RuPSIiK1d0LnRvRml4ZWQoTWF0aC5taW4obnJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxicj1Ubi5pbmRleE9mKCIuIik7dmFyIENvPVZ0LmluZGV4T2YoIi4iKS1icixwbz1WdC5sZW5ndGgtVG4ubGVuZ3RoLUNvO3JldHVybiBKcihW'@;
put 'dC5zdWJzdHIoMCxDbykrVG4rVnQuc3Vic3RyKFZ0Lmxlbmd0aC1wbykpfWlmKG5yPVZ0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gYnI9dnMoV3QsbnJbMV0ubGVuZ3RoKSxXdDwwPyItIitoYShhbixWdCwtV3QpOmxvKGZ1bmN0aW9uIHpsKGFuKXtyZXR1cm4gYW48MjE0'@;
put 'NzQ4MzY0NyYmYW4+LTIxNDc0ODM2NDg/IiIrKGFuPj0wPzB8YW46YW4tMXwwKToiIitNYXRoLmZsb29yKGFuKX0oV3QpKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFVvKXtyZXR1cm4iMDAsIisoVW8ubGVuZ3RoPDM/cmUoMCwzLVVvLmxl'@;
put 'bmd0aCk6IiIpK1VvfSkrIi4iK3JlKGJyLG5yWzFdLmxlbmd0aCk7c3dpdGNoKFZ0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBoYShhbiwiIywjIzAuMDAiLFd0KTtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjp2YXIgVmk9bG8oQmUoSXIsMCkpO3JldHVybiIwIiE9'@;
put 'PVZpP01pK1ZpOiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJuIGhhKGFuLCIjIyMsIyMwLjAwIixXdCkucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gaGEoYW4sIiMsIyMwLjAwIixXdCkucmVwbGFjZSgvXjBcLi8sIi4iKX10aHJvdyBuZXcgRXJyb3IoInVuc3Vw'@;
put 'cG9ydGVkIGZvcm1hdCB8IitWdCsifCIpfWZ1bmN0aW9uIHJuKGFuLFZ0KXt2YXIgV3QsZG49YW4uaW5kZXhPZigiRSIpLWFuLmluZGV4T2YoIi4iKS0xO2lmKGFuLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1WdClyZXR1cm4iMC4wRSswIjtpZihWdDwwKXJldHVybiItIitybihhbiwt'@;
put 'VnQpO3ZhciBUbj1hbi5pbmRleE9mKCIuIik7LTE9PT1UbiYmKFRuPWFuLmluZGV4T2YoIkUiKSk7dmFyIG5yPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKSVUbjtpZihucjwwJiYobnIrPVRuKSwhKFd0PShWdC9NYXRoLnBvdygxMCxucikpLnRvUHJlY2lzaW9uKGRuKzEr'@;
put 'KFRuK25yKSVUbikpLm1hdGNoKC9bRWVdLykpe3ZhciBicj1NYXRoLmZsb29yKE1hdGgubG9nKFZ0KSpNYXRoLkxPRzEwRSk7LTE9PT1XdC5pbmRleE9mKCIuIik/V3Q9V3QuY2hhckF0KDApKyIuIitXdC5zdWJzdHIoMSkrIkUrIisoYnItV3QubGVuZ3RoK25yKTpXdCs9IkUrIisoYnItbnIp'@;
put 'LFd0PVd0LnJlcGxhY2UoL1wrLS8sIi0iKX1XdD1XdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKFpyLElyLE1pLGNpKXtyZXR1cm4gSXIrTWkrY2kuc3Vic3RyKDAsKFRuK25yKSVUbikrIi4iK2NpLnN1YnN0cihucikrIkUifSl9ZWxzZSBXdD1WdC50b0V4'@;
put 'cG9uZW50aWFsKGRuKTtyZXR1cm4gYW4ubWF0Y2goL0VcKzAwJC8pJiZXdC5tYXRjaCgvZVsrLV1cZCQvKSYmKFd0PVd0LnN1YnN0cigwLFd0Lmxlbmd0aC0xKSsiMCIrV3QuY2hhckF0KFd0Lmxlbmd0aC0xKSksYW4ubWF0Y2goL0VcLS8pJiZXdC5tYXRjaCgvZVwrLykmJihXdD1XdC5yZXBs'@;
put 'YWNlKC9lXCsvLCJlIikpLFd0LnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gX24oYW4sVnQsV3Qpe2lmKDQwPT09YW4uY2hhckNvZGVBdCgwKSYmIVZ0Lm1hdGNoKG9pKSl7dmFyIGRuPVZ0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3Jl'@;
put 'dHVybiBXdD49MD9fbigibiIsZG4sV3QpOiIoIitfbigibiIsZG4sLVd0KSsiKSJ9aWYoNDQ9PT1WdC5jaGFyQ29kZUF0KFZ0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24geWYoYW4sVnQsV3Qpe2Zvcih2YXIgZG49VnQubGVuZ3RoLTE7NDQ9PT1WdC5jaGFyQ29kZUF0KGRuLTEpOyktLWRu'@;
put 'O3JldHVybiBBbyhhbixWdC5zdWJzdHIoMCxkbiksV3QvTWF0aC5wb3coMTAsMyooVnQubGVuZ3RoLWRuKSkpfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIG9wKGFuLFZ0LFd0KXt2YXIgZG49VnQucmVwbGFjZShnbiwiIiksVG49VnQubGVuZ3Ro'@;
put 'LWRuLmxlbmd0aDtyZXR1cm4gQW8oYW4sZG4sV3QqTWF0aC5wb3coMTAsMipUbikpK1EoIiUiLFRuKX0oYW4sVnQsV3QpO2lmKC0xIT09VnQuaW5kZXhPZigiRSIpKXJldHVybiBybihWdCxXdCk7aWYoMzY9PT1WdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitfbihhbixWdC5zdWJzdHIoIiAi'@;
put 'PT1WdC5jaGFyQXQoMSk/MjoxKSxXdCk7dmFyIFRuLG5yLGJyLFpyLElyPU1hdGguYWJzKFd0KSxNaT1XdDwwPyItIjoiIjtpZihWdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gTWkrcmUoSXIsVnQubGVuZ3RoKTtpZihWdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiBUbj0iIitXdCwwPT09V3Qm'@;
put 'JihUbj0iIiksVG4ubGVuZ3RoPlZ0Lmxlbmd0aD9UbjpKcihWdC5zdWJzdHIoMCxWdC5sZW5ndGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goZWkpKXJldHVybiBmdW5jdGlvbiByaShhbixWdCxXdCl7cmV0dXJuIFd0KygwPT09VnQ/IiI6IiIrVnQpK1EoIiAiLGFuWzFdLmxlbmd0'@;
put 'aCsyK2FuWzRdLmxlbmd0aCl9KG5yLElyLE1pKTtpZihWdC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIE1pK3JlKElyLFZ0Lmxlbmd0aC1WdC5pbmRleE9mKCIwIikpO2lmKG5yPVZ0Lm1hdGNoKG1vKSlyZXR1cm4gVG49KFRuPSgiIitXdCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrSnIo'@;
put 'bnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitKcihuclsxXSkpKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVW8sdGkpe3JldHVybiIuIit0aStRKCIwIixKcihuclsxXSkubGVuZ3RoLXRpLmxlbmd0aCl9KSwtMSE9PVZ0LmluZGV4T2YoIjAuIik/VG46VG4ucmVwbGFjZSgvXjBcLi8s'@;
put 'Ii4iKTtpZihWdD1WdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLG5yPVZ0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gTWkrKCIiK0lyKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxuclsx'@;
put 'XS5sZW5ndGg/IjAuIjoiLiIpO2lmKG5yPVZ0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBNaStsbygiIitJcik7aWYobnI9VnQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIFd0PDA/Ii0iK19uKGFuLFZ0LC1XdCk6bG8oIiIrV3QpKyIuIitRKCIwIixuclsx'@;
put 'XS5sZW5ndGgpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBfbihhbixWdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxXdCk7aWYobnI9VnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIFRuPUkoX24oYW4sVnQucmVwbGFjZSgvW1xcLV0vZywiIiksV3Qp'@;
put 'KSxicj0wLEkoSShWdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFVvKXtyZXR1cm4gYnI8VG4ubGVuZ3RoP1RuLmNoYXJBdChicisrKToiMCI9PT1Vbz8iMCI6IiJ9KSk7aWYoVnQubWF0Y2goemkpKXJldHVybiIoIisoVG49X24oYW4sIiMjIyMjIyMjIyMi'@;
put 'LFd0KSkuc3Vic3RyKDAsMykrIikgIitUbi5zdWJzdHIoMywzKSsiLSIrVG4uc3Vic3RyKDYpO3ZhciBjaT0iIjtpZihucj1WdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgubWluKG5yWzRdLmxlbmd0aCw3KSxacj1adChJcixNYXRoLnBvdygx'@;
put 'MCxiciktMSwhMSksVG49IiIrTWksIiAiPT0oY2k9QW8oIm4iLG5yWzFdLFpyWzFdKSkuY2hhckF0KGNpLmxlbmd0aC0xKSYmKGNpPWNpLnN1YnN0cigwLGNpLmxlbmd0aC0xKSsiMCIpLFRuKz1jaStuclsyXSsiLyIrbnJbM10sKGNpPV9lKFpyWzJdLGJyKSkubGVuZ3RoPG5yWzRdLmxlbmd0'@;
put 'aCYmKGNpPUpyKG5yWzRdLnN1YnN0cihucls0XS5sZW5ndGgtY2kubGVuZ3RoKSkrY2kpLFRuKz1jaTtpZihucj1WdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4oTWF0aC5tYXgobnJbMV0ubGVuZ3RoLG5yWzRdLmxlbmd0aCksNyks'@;
put 'TWkrKChacj1adChJcixNYXRoLnBvdygxMCxiciktMSwhMCkpWzBdfHwoWnJbMV0/IiI6IjAiKSkrIiAiKyhaclsxXT9nZShaclsxXSxicikrbnJbMl0rIi8iK25yWzNdK19lKFpyWzJdLGJyKTpRKCIgIiwyKmJyKzErbnJbMl0ubGVuZ3RoK25yWzNdLmxlbmd0aCkpO2lmKG5yPVZ0Lm1hdGNo'@;
put 'KC9eWyMwP10rJC8pKXJldHVybiBWdC5sZW5ndGg8PShUbj0iIitXdCkubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgpKStUbjtpZihucj1WdC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe1RuPSIiK1d0LnRvRml4ZWQoTWF0aC5taW4obnJbMl0ubGVu'@;
put 'Z3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxicj1Ubi5pbmRleE9mKCIuIik7dmFyIENvPVZ0LmluZGV4T2YoIi4iKS1icixwbz1WdC5sZW5ndGgtVG4ubGVuZ3RoLUNvO3JldHVybiBKcihWdC5zdWJzdHIoMCxDbykrVG4rVnQuc3Vic3RyKFZ0Lmxlbmd0aC1wbykpfWlmKG5y'@;
put 'PVZ0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIrX24oYW4sVnQsLVd0KTpsbygiIitXdCkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihVbyl7cmV0dXJuIjAwLCIrKFVvLmxlbmd0aDwzP3JlKDAsMy1Vby5s'@;
put 'ZW5ndGgpOiIiKStVb30pKyIuIityZSgwLG5yWzFdLmxlbmd0aCk7dmFyIFZpPWxvKCIiK0lyKTtzd2l0Y2goVnQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnJldHVybiIwIiE9PVZpP01pK1ZpOiIiO2Nhc2UiIywjMDAiOnJldHVybiIwMCIhPT0oVmk9cmUoVmks'@;
put 'MikpP01pK1ZpOiIiO2RlZmF1bHQ6aWYoVnQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBfbihhbixWdC5zbGljZSgwLFZ0Lmxhc3RJbmRleE9mKCIuIikpLFd0KStKcihWdC5zbGljZShWdC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQg'@;
put 'fCIrVnQrInwiKX1yZXR1cm4gZnVuY3Rpb24oVnQsV3QsZG4pe3JldHVybiIwLDAiPT1XdCYmKFd0PSIjLCMwMCIpLCgwfGRuKT09PWRuP19uKFZ0LFd0LGRuKTpoYShWdCxXdCxkbil9fSgpO2Z1bmN0aW9uIHhvKEt0KXtmb3IodmFyIGduPVtdLEluPSExLFdyPTAsWG49MDtXcjxLdC5sZW5n'@;
put 'dGg7KytXcilzd2l0Y2goS3QuY2hhckNvZGVBdChXcikpe2Nhc2UgMzQ6SW49IUluO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrV3I7YnJlYWs7Y2FzZSA1OTpnbltnbi5sZW5ndGhdPUt0LnN1YnN0cihYbixXci1YbiksWG49V3IrMX1pZihnbltnbi5sZW5ndGhdPUt0LnN1YnN0'@;
put 'cihYbiksITA9PT1Jbil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8IitLdCsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBnbn1QLl9zcGxpdD14bzt2YXIgaGk9L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIHRhKEt0KXtmb3IodmFyIGduPTAsSW49'@;
put 'IiIsV3I9IiI7Z248S3QubGVuZ3RoOylzd2l0Y2goSW49S3QuY2hhckF0KGduKSl7Y2FzZSJHIjpHZShLdCxnbikmJihnbis9NiksZ24rKzticmVhaztjYXNlJyInOmZvcig7MzQhPT1LdC5jaGFyQ29kZUF0KCsrZ24pJiZnbjxLdC5sZW5ndGg7KTsrK2duO2JyZWFrO2Nhc2UiXFwiOmNhc2Ui'@;
put 'XyI6Z24rPTI7YnJlYWs7Y2FzZSJAIjorK2duO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1LdC5jaGFyQXQoZ24rMSl8fCIyIj09PUt0LmNoYXJBdChnbisxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNh'@;
put 'c2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1LdC5zdWJzdHIoZ24sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PUt0LnN1YnN0cihnbiw1KS50b1VwcGVyQ2FzZSgp'@;
put 'fHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1LdC5zdWJzdHIoZ24sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK2duO2JyZWFrO2Nhc2UiWyI6Zm9yKFdyPUluOyJdIiE9PUt0LmNoYXJBdChnbisrKSYmZ248S3QubGVuZ3RoOylXcis9S3QuY2hhckF0KGduKTtpZihXci5tYXRj'@;
put 'aChoaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtnbjxLdC5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKEluPUt0LmNoYXJBdCgrK2duKSk+LTF8fCJcXCI9PUluJiYiLSI9PUt0LmNoYXJBdChnbisxKSYmIjAjIi5pbmRleE9mKEt0LmNoYXJBdChn'@;
put 'bisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO0t0LmNoYXJBdCgrK2duKT09PUluOyk7YnJlYWs7Y2FzZSIqIjorK2duLCgiICI9PUt0LmNoYXJBdChnbil8fCIqIj09S3QuY2hhckF0KGduKSkmJisrZ247YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrZ247YnJlYWs7Y2FzZSIxIjpjYXNl'@;
put 'IjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtnbjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKEt0LmNoYXJBdCgrK2duKSk+LTE7KTticmVhaztkZWZhdWx0OisrZ259cmV0dXJuITF9ZnVuY3Rpb24gTW4oS3Qs'@;
put 'Z24sSW4sV3Ipe2Zvcih2YXIgb2ksemksSnIsWG49W10sZWk9IiIsaXI9MCxyaT0iIixtbz0idCIsd3M9IkgiO2lyPEt0Lmxlbmd0aDspc3dpdGNoKHJpPUt0LmNoYXJBdChpcikpe2Nhc2UiRyI6aWYoIUdlKEt0LGlyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIg'@;
put 'IityaSsiIGluICIrS3QpO1huW1huLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSxpcis9NzticmVhaztjYXNlJyInOmZvcihlaT0iIjszNCE9PShKcj1LdC5jaGFyQ29kZUF0KCsraXIpKSYmaXI8S3QubGVuZ3RoOyllaSs9U3RyaW5nLmZyb21DaGFyQ29kZShKcik7WG5bWG4ubGVuZ3Ro'@;
put 'XT17dDoidCIsdjplaX0sKytpcjticmVhaztjYXNlIlxcIjp2YXIgdnM9S3QuY2hhckF0KCsraXIpO1huW1huLmxlbmd0aF09e3Q6IigiPT09dnN8fCIpIj09PXZzP3ZzOiJ0Iix2OnZzfSwrK2lyO2JyZWFrO2Nhc2UiXyI6WG5bWG4ubGVuZ3RoXT17dDoidCIsdjoiICJ9LGlyKz0yO2JyZWFr'@;
put 'O2Nhc2UiQCI6WG5bWG4ubGVuZ3RoXT17dDoiVCIsdjpnbn0sKytpcjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09S3QuY2hhckF0KGlyKzEpfHwiMiI9PT1LdC5jaGFyQXQoaXIrMSkpe2lmKG51bGw9PW9pJiZudWxsPT0ob2k9cG4oZ24sSW4sIjIiPT09S3QuY2hhckF0KGlyKzEp'@;
put 'KSkpcmV0dXJuIiI7WG5bWG4ubGVuZ3RoXT17dDoiWCIsdjpLdC5zdWJzdHIoaXIsMil9LG1vPXJpLGlyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOnJpPXJpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2Fz'@;
put 'ZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjppZihnbjwwfHxudWxsPT1vaSYmbnVsbD09KG9pPXBuKGduLEluKSkpcmV0dXJuIiI7Zm9yKGVpPXJp'@;
put 'OysraXI8S3QubGVuZ3RoJiZLdC5jaGFyQXQoaXIpLnRvTG93ZXJDYXNlKCk9PT1yaTspZWkrPXJpOyJtIj09PXJpJiYiaCI9PT1tby50b0xvd2VyQ2FzZSgpJiYocmk9Ik0iKSwiaCI9PT1yaSYmKHJpPXdzKSxYbltYbi5sZW5ndGhdPXt0OnJpLHY6ZWl9LG1vPXJpO2JyZWFrO2Nhc2UiQSI6'@;
put 'Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIHpsPXt0OnJpLHY6cml9O2lmKG51bGw9PW9pJiYob2k9cG4oZ24sSW4pKSwiQS9QIj09PUt0LnN1YnN0cihpciwzKS50b1VwcGVyQ2FzZSgpPyhudWxsIT1vaSYmKHpsLnY9b2kuSD49MTI/IlAiOiJBIiksemwudD0iVCIsd3M9ImgiLGlyKz0zKToi'@;
put 'QU0vUE0iPT09S3Quc3Vic3RyKGlyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW9pJiYoemwudj1vaS5IPj0xMj8iUE0iOiJBTSIpLHpsLnQ9IlQiLGlyKz01LHdzPSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09S3Quc3Vic3RyKGlyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwh'@;
put 'PW9pJiYoemwudj1vaS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksemwudD0iVCIsaXIrPTUsd3M9ImgiKTooemwudD0idCIsKytpciksbnVsbD09b2kmJiJUIj09PXpsLnQpcmV0dXJuIiI7WG5bWG4ubGVuZ3RoXT16bCxtbz1yaTticmVhaztjYXNlIlsiOmZvcihlaT1y'@;
put 'aTsiXSIhPT1LdC5jaGFyQXQoaXIrKykmJmlyPEt0Lmxlbmd0aDspZWkrPUt0LmNoYXJBdChpcik7aWYoIl0iIT09ZWkuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwnK2VpKyJ8IjtpZihlaS5tYXRjaChoaSkpe2lmKG51bGw9PW9pJiZudWxsPT0ob2k9cG4oZ24s'@;
put 'SW4pKSlyZXR1cm4iIjtYbltYbi5sZW5ndGhdPXt0OiJaIix2OmVpLnRvTG93ZXJDYXNlKCl9LG1vPWVpLmNoYXJBdCgxKX1lbHNlIGVpLmluZGV4T2YoIiQiKT4tMSYmKGVpPShlaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIix0YShLdCl8fChYbltYbi5sZW5ndGhdPXt0'@;
put 'OiJ0Iix2OmVpfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9b2kpe2ZvcihlaT1yaTsrK2lyPEt0Lmxlbmd0aCYmIjAiPT09KHJpPUt0LmNoYXJBdChpcikpOyllaSs9cmk7WG5bWG4ubGVuZ3RoXT17dDoicyIsdjplaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihlaT1yaTsrK2lyPEt0'@;
put 'Lmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihyaT1LdC5jaGFyQXQoaXIpKT4tMTspZWkrPXJpO1huW1huLmxlbmd0aF09e3Q6Im4iLHY6ZWl9O2JyZWFrO2Nhc2UiPyI6Zm9yKGVpPXJpO0t0LmNoYXJBdCgrK2lyKT09PXJpOyllaSs9cmk7WG5bWG4ubGVuZ3RoXT17dDpyaSx2OmVpfSxt'@;
put 'bz1yaTticmVhaztjYXNlIioiOisraXIsKCIgIj09S3QuY2hhckF0KGlyKXx8IioiPT1LdC5jaGFyQXQoaXIpKSYmKytpcjticmVhaztjYXNlIigiOmNhc2UiKSI6WG5bWG4ubGVuZ3RoXT17dDoxPT09V3I/InQiOnJpLHY6cml9LCsraXI7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6'@;
put 'Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKGVpPXJpO2lyPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoS3QuY2hhckF0KCsraXIpKT4tMTspZWkrPUt0LmNoYXJBdChpcik7WG5bWG4ubGVuZ3RoXT17dDoiRCIsdjplaX07YnJlYWs7'@;
put 'Y2FzZSIgIjpYbltYbi5sZW5ndGhdPXt0OnJpLHY6cml9LCsraXI7YnJlYWs7Y2FzZSIkIjpYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OkJyfSwrK2lyO2JyZWFrO2Nhc2UiLyI6WG5bWG4ubGVuZ3RoXT1Ybi5sZW5ndGg+MCYmdGEoWG5bWG4ubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2OkFufTp7dDoi'@;
put 'dCIsdjoiLyJ9LCsraXI7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YocmkpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK3JpKyIgaW4gIitLdCk7WG5bWG4ubGVuZ3RoXT17'@;
put 'dDoidCIsdjpyaX0sKytpcn12YXIgb3AsaGE9MCx5Zj0wO2Zvcihpcj1Ybi5sZW5ndGgtMSxtbz0idCI7aXI+PTA7LS1pcilzd2l0Y2goWG5baXJdLnQpe2Nhc2UiaCI6Y2FzZSJIIjpYbltpcl0udD13cyxtbz0iaCIsaGE8MSYmKGhhPTEpO2JyZWFrO2Nhc2UicyI6KG9wPVhuW2lyXS52Lm1h'@;
put 'dGNoKC9cLjArJC8pKSYmKHlmPU1hdGgubWF4KHlmLG9wWzBdLmxlbmd0aC0xKSksaGE8MyYmKGhhPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6bW89WG5baXJdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1tbyYmKFhuW2lyXS50PSJNIixoYTwyJiYoaGE9MikpO2JyZWFrO2Nh'@;
put 'c2UiWCI6YnJlYWs7Y2FzZSJaIjpoYTwxJiZYbltpcl0udi5tYXRjaCgvW0hoXS8pJiYoaGE9MSksaGE8MiYmWG5baXJdLnYubWF0Y2goL1tNbV0vKSYmKGhhPTIpLGhhPDMmJlhuW2lyXS52Lm1hdGNoKC9bU3NdLykmJihoYT0zKX1zd2l0Y2goaGEpe2Nhc2UgMDpicmVhaztjYXNlIDE6b2ku'@;
put 'dT49LjUmJihvaS51PTAsKytvaS5TKSxvaS5TPj02MCYmKG9pLlM9MCwrK29pLk0pLG9pLk0+PTYwJiYob2kuTT0wLCsrb2kuSCk7YnJlYWs7Y2FzZSAyOm9pLnU+PS41JiYob2kudT0wLCsrb2kuUyksb2kuUz49NjAmJihvaS5TPTAsKytvaS5NKX12YXIgX24scm49IiI7Zm9yKGlyPTA7aXI8'@;
put 'WG4ubGVuZ3RoOysraXIpc3dpdGNoKFhuW2lyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6WG5baXJdLnY9IiIsWG5baXJdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6'@;
put 'Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6WG5baXJdLnY9WW8oWG5baXJdLnQuY2hhckNvZGVBdCgwKSxYbltpcl0udixvaSx5ZiksWG5baXJdLnQ9InQi'@;
put 'O2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3IoX249aXIrMTtudWxsIT1Ybltfbl0mJigiPyI9PT0ocmk9WG5bX25dLnQpfHwiRCI9PT1yaXx8KCIgIj09PXJpfHwidCI9PT1yaSkmJm51bGwhPVhuW19uKzFdJiYoIj8iPT09WG5bX24rMV0udHx8InQiPT09WG5bX24rMV0udCYmIi8iPT09WG5b'@;
put 'X24rMV0udil8fCIoIj09PVhuW2lyXS50JiYoIiAiPT09cml8fCJuIj09PXJpfHwiKSI9PT1yaSl8fCJ0Ij09PXJpJiYoIi8iPT09WG5bX25dLnZ8fCIgIj09PVhuW19uXS52JiZudWxsIT1YbltfbisxXSYmIj8iPT1YbltfbisxXS50KSk7KVhuW2lyXS52Kz1Ybltfbl0udixYbltfbl09e3Y6'@;
put 'IiIsdDoiOyJ9LCsrX247cm4rPVhuW2lyXS52LGlyPV9uLTE7YnJlYWs7Y2FzZSJHIjpYbltpcl0udD0idCIsWG5baXJdLnY9amkoZ24sSW4pfXZhciBWdCxXdCxhbj0iIjtpZihybi5sZW5ndGg+MCl7NDA9PXJuLmNoYXJDb2RlQXQoMCk/KFZ0PWduPDAmJjQ1PT09cm4uY2hhckNvZGVBdCgw'@;
put 'KT8tZ246Z24sV3Q9QW8oIm4iLHJuLFZ0KSk6KFd0PUFvKCJuIixybixWdD1nbjwwJiZXcj4xPy1nbjpnbiksVnQ8MCYmWG5bMF0mJiJ0Ij09WG5bMF0udCYmKFd0PVd0LnN1YnN0cigxKSxYblswXS52PSItIitYblswXS52KSksX249KFd0PVd0LnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24o'@;
put 'YnIpe3JldHVybiIuIj09YnI/dXI6UXJ9KSkubGVuZ3RoLTE7dmFyIGRuPVhuLmxlbmd0aDtmb3IoaXI9MDtpcjxYbi5sZW5ndGg7KytpcilpZihudWxsIT1Ybltpcl0mJiJ0IiE9WG5baXJdLnQmJlhuW2lyXS52LmluZGV4T2YoIi4iKT4tMSl7ZG49aXI7YnJlYWt9dmFyIFRuPVhuLmxlbmd0'@;
put 'aDtpZihkbj09PVhuLmxlbmd0aCYmLTE9PT1XdC5pbmRleE9mKCJFIikpe2Zvcihpcj1Ybi5sZW5ndGgtMTtpcj49MDstLWlyKW51bGw9PVhuW2lyXXx8LTE9PT0ibj8iLmluZGV4T2YoWG5baXJdLnQpfHwoX24+PVhuW2lyXS52Lmxlbmd0aC0xP1huW2lyXS52PVd0LnN1YnN0cigxKyhfbi09'@;
put 'WG5baXJdLnYubGVuZ3RoKSxYbltpcl0udi5sZW5ndGgpOl9uPDA/WG5baXJdLnY9IiI6KFhuW2lyXS52PVd0LnN1YnN0cigwLF9uKzEpLF9uPS0xKSxYbltpcl0udD0idCIsVG49aXIpO19uPj0wJiZUbjxYbi5sZW5ndGgmJihYbltUbl0udj1XdC5zdWJzdHIoMCxfbisxKStYbltUbl0udil9'@;
put 'ZWxzZSBpZihkbiE9PVhuLmxlbmd0aCYmLTE9PT1XdC5pbmRleE9mKCJFIikpe2Zvcihfbj1XdC5pbmRleE9mKHVyKS0xLGlyPWRuO2lyPj0wOy0taXIpaWYobnVsbCE9WG5baXJdJiYtMSE9PSJuPyIuaW5kZXhPZihYbltpcl0udCkpe2Zvcih6aT1Ybltpcl0udi5pbmRleE9mKCIuIik+LTEm'@;
put 'JmlyPT09ZG4/WG5baXJdLnYuaW5kZXhPZigiLiIpLTE6WG5baXJdLnYubGVuZ3RoLTEsYW49WG5baXJdLnYuc3Vic3RyKHppKzEpO3ppPj0wOy0temkpX24+PTAmJigiMCI9PT1Ybltpcl0udi5jaGFyQXQoemkpfHwiIyI9PT1Ybltpcl0udi5jaGFyQXQoemkpKSYmKGFuPVd0LmNoYXJBdChf'@;
put 'bi0tKSthbik7WG5baXJdLnY9YW4sWG5baXJdLnQ9InQiLFRuPWlyfWZvcihfbj49MCYmVG48WG4ubGVuZ3RoJiYoWG5bVG5dLnY9V3Quc3Vic3RyKDAsX24rMSkrWG5bVG5dLnYpLF9uPVd0LmluZGV4T2YodXIpKzEsaXI9ZG47aXI8WG4ubGVuZ3RoOysraXIpaWYobnVsbCE9WG5baXJdJiYo'@;
put 'LTEhPT0ibj8oIi5pbmRleE9mKFhuW2lyXS50KXx8aXI9PT1kbikpe2Zvcih6aT1Ybltpcl0udi5pbmRleE9mKHVyKT4tMSYmaXI9PT1kbj9Ybltpcl0udi5pbmRleE9mKHVyKSsxOjAsYW49WG5baXJdLnYuc3Vic3RyKDAsemkpO3ppPFhuW2lyXS52Lmxlbmd0aDsrK3ppKV9uPFd0Lmxlbmd0'@;
put 'aCYmKGFuKz1XdC5jaGFyQXQoX24rKykpO1huW2lyXS52PWFuLFhuW2lyXS50PSJ0IixUbj1pcn19fWZvcihpcj0wO2lyPFhuLmxlbmd0aDsrK2lyKW51bGwhPVhuW2lyXSYmIm4/Ii5pbmRleE9mKFhuW2lyXS50KT4tMSYmKFhuW2lyXS52PUFvKFhuW2lyXS50LFhuW2lyXS52LFZ0PVdyPjEm'@;
put 'JmduPDAmJmlyPjAmJiItIj09PVhuW2lyLTFdLnY/LWduOmduKS5yZXBsYWNlKC9cLi9nLHVyKS5yZXBsYWNlKC8sLyxRciksWG5baXJdLnQ9InQiKTt2YXIgbnI9IiI7Zm9yKGlyPTA7aXIhPT1Ybi5sZW5ndGg7KytpciludWxsIT1Ybltpcl0mJihucis9WG5baXJdLnYpO3JldHVybiBucn1Q'@;
put 'LmlzX2RhdGU9dGEsUC5fZXZhbD1Nbjt2YXIgeXM9L1xbWz08Pl0vLEVsPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBzbChLdCxnbil7aWYobnVsbD09Z24pcmV0dXJuITE7dmFyIEluPXBhcnNlRmxvYXQoZ25bMl0pO3N3aXRjaChnblsxXSl7Y2Fz'@;
put 'ZSI9IjppZihLdD09SW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihLdD5JbilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKEt0PEluKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKEt0IT1JbilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihLdD49SW4pcmV0dXJuITA7YnJlYWs7Y2Fz'@;
put 'ZSI8PSI6aWYoS3Q8PUluKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG51KEt0LGduLEluKXtudWxsPT1JbiYmKEluPXt9KTt2YXIgV3I9IiI7c3dpdGNoKHR5cGVvZiBLdCl7Y2FzZSJzdHJpbmciOldyPSJtL2QveXkiPT1LdCYmSW4uZGF0ZU5GP0luLmRhdGVORjpLdDticmVhaztjYXNl'@;
put 'Im51bWJlciI6bnVsbD09KFdyPTE0PT1LdCYmSW4uZGF0ZU5GP0luLmRhdGVORjoobnVsbCE9SW4udGFibGU/SW4udGFibGU6YnQpW0t0XSkmJihXcj1Jbi50YWJsZSYmSW4udGFibGVbRnRbS3RdXXx8YnRbRnRbS3RdXSksbnVsbD09V3ImJihXcj1UdFtLdF18fCJHZW5lcmFsIil9aWYoR2Uo'@;
put 'V3IsMCkpcmV0dXJuIGppKGduLEluKTtnbiBpbnN0YW5jZW9mIERhdGUmJihnbj16bihnbixJbi5kYXRlMTkwNCkpO3ZhciBYbj1mdW5jdGlvbiBnbChLdCxnbil7dmFyIEluPXhvKEt0KSxXcj1Jbi5sZW5ndGgsWG49SW5bV3ItMV0uaW5kZXhPZigiQCIpO2lmKFdyPDQmJlhuPi0xJiYtLVdy'@;
put 'LEluLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitJbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIGduKXJldHVybls0LDQ9PT1Jbi5sZW5ndGh8fFhuPi0xP0luW0luLmxlbmd0aC0xXToiQCJdO3N3aXRjaChJbi5s'@;
put 'ZW5ndGgpe2Nhc2UgMTpJbj1Ybj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsSW5bMF1dOltJblswXSxJblswXSxJblswXSwiQCJdO2JyZWFrO2Nhc2UgMjpJbj1Ybj4tMT9bSW5bMF0sSW5bMF0sSW5bMF0sSW5bMV1dOltJblswXSxJblsxXSxJblswXSwiQCJdO2JyZWFrO2Nh'@;
put 'c2UgMzpJbj1Ybj4tMT9bSW5bMF0sSW5bMV0sSW5bMF0sSW5bMl1dOltJblswXSxJblsxXSxJblsyXSwiQCJdfXZhciBlaT1nbj4wP0luWzBdOmduPDA/SW5bMV06SW5bMl07aWYoLTE9PT1JblswXS5pbmRleE9mKCJbIikmJi0xPT09SW5bMV0uaW5kZXhPZigiWyIpKXJldHVybltXcixlaV07'@;
put 'aWYobnVsbCE9SW5bMF0ubWF0Y2goeXMpfHxudWxsIT1JblsxXS5tYXRjaCh5cykpe3ZhciBpcj1JblswXS5tYXRjaChFbCkscmk9SW5bMV0ubWF0Y2goRWwpO3JldHVybiBzbChnbixpcik/W1dyLEluWzBdXTpzbChnbixyaSk/W1dyLEluWzFdXTpbV3IsSW5bbnVsbCE9aXImJm51bGwhPXJp'@;
put 'PzI6MV1dfXJldHVybltXcixlaV19KFdyLGduKTtpZihHZShYblsxXSkpcmV0dXJuIGppKGduLEluKTtpZighMD09PWduKWduPSJUUlVFIjtlbHNlIGlmKCExPT09Z24pZ249IkZBTFNFIjtlbHNlIGlmKCIiPT09Z258fG51bGw9PWduKXJldHVybiIiO3JldHVybiBNbihYblsxXSxnbixJbixY'@;
put 'blswXSl9ZnVuY3Rpb24gdGwoS3QsZ24pe2lmKCJudW1iZXIiIT10eXBlb2YgZ24pe2duPStnbnx8LTE7Zm9yKHZhciBJbj0wO0luPDM5MjsrK0luKWlmKG51bGwhPWJ0W0luXSl7aWYoYnRbSW5dPT1LdCl7Z249SW47YnJlYWt9fWVsc2UgZ248MCYmKGduPUluKTtnbjwwJiYoZ249MzkxKX1y'@;
put 'ZXR1cm4gYnRbZ25dPUt0LGdufVAubG9hZD10bCxQLl90YWJsZT1idCxQLmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBidH0sUC5sb2FkX3RhYmxlPWZ1bmN0aW9uKGduKXtmb3IodmFyIEluPTA7MzkyIT1JbjsrK0luKXZvaWQgMCE9PWduW0luXSYmdGwoZ25bSW5dLEluKX0sUC5pbml0'@;
put 'X3RhYmxlPWN0LFAuZm9ybWF0PW51LFAuZ2V0bG9jYWxlPWZ1bmN0aW9uIHZyKCl7cmV0dXJuIGtufHwiZW4tVVMifSxQLnNldGxvY2FsZT1mdW5jdGlvbiBycihLdCl7aWYoZnVuY3Rpb24gbXIoS3Qpe3ZhciBnbj0wO3N3aXRjaCgoa258fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3'@;
put 'IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3IoZ249Mjc7Z248PTM2OysrZ24pZGVsZXRlIEt0W2duXTtmb3IoZ249NTA7Z248PTU4OysrZ24pZGVsZXRlIEt0W2duXTticmVhaztjYXNlInRoLXRoIjpmb3IoZ249NTk7Z248PTYyOysrZ24pZGVsZXRlIEt0W2duXTtm'@;
put 'b3IoZ249Njc7Z248PTgxOysrZ24pZGVsZXRlIEt0W2duXX19KGJ0KSxrbj1LdCxTbihidCksdHlwZW9mIEludGw8InUiKXt2YXIgZ249SW50bC5EYXRlVGltZUZvcm1hdChLdCk7aWYoZ24uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciBJbj1nbi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAs'@;
put 'MCw1LDAsMCwwKSksV3I9MDtXcjw3OysrV3IpZHRbV3JdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNStXciwwLDAsMCkpWzBdLnZhbHVlLGR0W1dyXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0LHt3'@;
put 'ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1dyLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBYbj0wO1huPDEyOysrWG4pQ3RbWG5dWzJdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUo'@;
put 'MjAyMCxYbiwyLDAsMCwwKSlbMF0udmFsdWUsQ3RbWG5dWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsWG4sMiwwLDAsMCkpWzBdLnZhbHVlLEN0W1huXVswXT1DdFtYbl1bMV0uc2xpY2UoMCwxKTtmb3IodmFy'@;
put 'IGVpPSIiLGlyPTA7aXI8SW4ubGVuZ3RoOysraXIpe3ZhciByaT1Jbltpcl0udmFsdWU7c3dpdGNoKEluW2lyXS50eXBlKXtjYXNlInllYXIiOmVpKz0yPT1yaS5sZW5ndGg/Inl5IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6ZWkrPSIxIj09cmk/Im0iOiIwMSI9PXJpPyJtbSI6cmk9PUN0'@;
put 'WzBdWzFdPyJtbW0iOnJpPT1DdFswXVsyXT8ibW1tbSI6cmk9PUN0WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6ZWkrPSI1Ij09cmk/ImQiOiIwNSI9PXJpPyJkZCI6cmk9PWR0WzBdWzBdPyJkZGQiOnJpPT1kdFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVy'@;
put 'YWwiOmVpKz1yaS5yZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1yaS5sZW5ndGgmJihBbj1yaSl9fShLdC5tYXRjaCgvZW4vaSkmJkt0Lm1hdGNoKC91cy9pKXx8IUt0KSYmKGVpPSJtL2QveXkiKSxidFsxNF09ZWl9ZWxzZSJqYS1qcCI9PUt0LnRvTG93ZXJDYXNlKCkmJihidFsxNF09Inl5eXlc'@;
put 'XC9tXFwvZCIpO3ZhciBtbz1JbnRsLk51bWJlckZvcm1hdChLdCx7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO21vJiYoUXI9KG1vLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLHVyPShtby5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9ZXJbS3QudG9Mb3dlckNhc2UoKV18fChlcltLdC50b0xvd2Vy'@;
put 'Q2FzZSgpXT17Ii4iOnVyLCIsIjpRcn0pLFpuPW50KHRyPWVyW0t0LnRvTG93ZXJDYXNlKCldfHxlclsiZW4tdXMiXSl9LFAubm9ybWFsaXplPWZ1bmN0aW9uIE1zKEt0KXtmb3IodmFyIGduPTAsSW49MCxXcj0iIixYbj0iIixlaT0iIixpcj10ci55fHwieSIscmk9aXIudG9VcHBlckNhc2Uo'@;
put 'KSxtbz10ci5kfHwiZCIsb2k9bW8udG9VcHBlckNhc2UoKSx6aT10clsiLiJdLEpyPXRyWyIsIl0sd3M9IjAjP0UrLSUiK3RyWyIsIl0remk7Z248S3QubGVuZ3RoOylzd2l0Y2goV3I9S3QuY2hhckF0KGduKSl7Y2FzZSJHIjpnbisrLGVpKz1XcjticmVhaztjYXNlJyInOmZvcihlaSs9V3I7'@;
put 'MzQhPT0oSW49S3QuY2hhckNvZGVBdCgrK2duKSkmJmduPEt0Lmxlbmd0aDspZWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoSW4pO2VpKz0nIicsKytnbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOmVpKz1LdC5zbGljZShnbixnbisyKSxnbis9MjticmVhaztjYXNlIkAiOmVpKz1XciwrK2duO2Jy'@;
put 'ZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK2duLGVpKz1XcjticmVhaztjYXNlIGlyOmNhc2Ugcmk6Y2FzZSBtbzpjYXNlIG9pOmVpKz1abltXci50b0xvd2VyQ2FzZSgpXSwrK2duO2JyZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2Fz'@;
put 'ZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjplaSs9V3IsKytnbjticmVhaztjYXNlIlsiOmZvcihYbj1XcjsiXSIhPT1LdC5jaGFyQXQoZ24rKykmJmduPEt0Lmxlbmd0aDspWG4rPUt0LmNoYXJBdChnbik7ZWkrPVhuO2JyZWFrO2Nhc2UgSnI6ZWkrPSciJytXcisnIicsKytnbjticmVh'@;
put 'aztjYXNlIHppOmlmKCEoZ248S3QubGVuZ3RoJiYod3MuaW5kZXhPZihXcj1LdC5jaGFyQXQoKytnbikpPi0xfHwiXFwiPT1XciYmIi0iPT1LdC5jaGFyQXQoZ24rMSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQoZ24rMikpPi0xKSkpe2VpKz0nIicremkrJyInO2JyZWFrfVdyPXppLC0tZ247'@;
put 'Y2FzZSIwIjpjYXNlIiMiOmZvcihlaSs9Wm5bV3IudG9Mb3dlckNhc2UoKV18fFdyO2duPEt0Lmxlbmd0aCYmKHdzLmluZGV4T2YoV3I9S3QuY2hhckF0KCsrZ24pKT4tMXx8IlxcIj09V3ImJiItIj09S3QuY2hhckF0KGduKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KGduKzIpKT4tMSk7'@;
put 'KWVpKz1abltXci50b0xvd2VyQ2FzZSgpXXx8V3I7YnJlYWs7Y2FzZSI/Ijpmb3IoZWkrPVdyO0t0LmNoYXJBdCgrK2duKT09PVdyOyllaSs9V3I7YnJlYWs7Y2FzZSIqIjplaSs9V3IsKytnbiwoIiAiPT1LdC5jaGFyQXQoZ24pfHwiKiI9PUt0LmNoYXJBdChnbikpJiYoZWkrPUt0LmNoYXJB'@;
put 'dChnbiksKytnbik7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOmVpKz1XciwrK2duO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihlaSs9V3I7Z248S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5k'@;
put 'ZXhPZihLdC5jaGFyQXQoKytnbikpPi0xOyllaSs9S3QuY2hhckF0KGduKTticmVhaztkZWZhdWx0OmVpKz1XciwrK2dufXJldHVybiBlaX0sUC5nZXRjdXJyZW5jeT1mdW5jdGlvbiB4aSgpe3JldHVybiBzaXx8IlVTRCJ9LFAuc2V0Y3VycmVuY3k9ZnVuY3Rpb24gSWkoS3Qpe3NpPUt0LEJy'@;
put 'PXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZvcm1hdChrbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6S3R9KS5mb3JtYXQoMCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O0oodyk7dmFyIE9lLG5lPXsiR2VuZXJhbCBOdW1i'@;
put 'ZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBEYXRlIjp3Ll90YWJsZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5eXkiLCJNZWRpdW0gRGF0ZSI6dy5fdGFibGVbMTVdLCJTaG9ydCBEYXRlIjp3Ll90YWJsZVsxNF0sIkxvbmcgVGltZSI6dy5fdGFibGVbMTldLCJNZWRpdW0gVGlt'@;
put 'ZSI6dy5fdGFibGVbMThdLCJTaG9ydCBUaW1lIjp3Ll90YWJsZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsRml4ZWQ6dy5fdGFibGVbMl0sU3RhbmRhcmQ6dy5fdGFibGVbNF0sUGVyY2VudDp3Ll90YWJsZVsxMF0sU2NpZW50aWZpYzp3Ll90'@;
put 'YWJsZVsxMV0sIlllcy9ObyI6JyJZZXMiOyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxzZSI7QCcsIk9uL09mZiI6JyJZZXMiOyJZZXMiOyJObyI7QCd9LGRlPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwo'@;
put 'IiQiIywjIzBcXCknLDc6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsMjM6IkdlbmVyYWwiLDI0OiJHZW5lcmFsIiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXki'@;
put 'LDI5OiJtL2QveXkiLDMwOiJtL2QveXkiLDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06c3MiLDM1OiJoOm1tOnNzIiwzNjoibS9kL3l5Iiw0MTonXygqICMsIyMwXyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7'@;
put 'XygiJCIqICgjLCMjMCk7XygiJCIqICItIl8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7XygqICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6'@;
put 'Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6Im0vZC95eSIsNTg6Im0vZC95eSIsNTk6IjAiLDYwOiIwLjAwIiw2MToiIywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCkn'@;
put 'LDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0v'@;
put 'ZC95eSIsNzI6Im0vZC95eSIsNzM6ImQtbW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDptbTpzcyIsNzg6Im0vZC95eSBoOm1tIiw3OToibW06c3MiLDgwOiJbaF06bW06c3MiLDgxOiJtbXNzLjAifSxmZT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xb'@;
put 'U3NdKy9nOyFmdW5jdGlvbih5KXt5LnZlcnNpb249IjEuMi4wIjt2YXIgST1mdW5jdGlvbiBQKCl7Zm9yKHZhciB2ZT0wLFNlPW5ldyBBcnJheSgyNTYpLEhlPTA7MjU2IT1IZTsrK0hlKVNlW0hlXT12ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT1I'@;
put 'ZSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3'@;
put 'NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjE7cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheShTZSk6U2V9KCk7eS50YWJsZT1JLHkuYnN0cj1mdW5jdGlvbiBRKHZlLFNlKXtmb3IodmFyIEhlPS0xXlNlLEJlPXZlLmxlbmd0aC0x'@;
put 'LEdlPTA7R2U8QmU7KUhlPShIZT1IZT4+PjheSVsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UrKykpXSk+Pj44XklbMjU1JihIZV52ZS5jaGFyQ29kZUF0KEdlKyspKV07cmV0dXJuIEdlPT09QmUmJihIZT1IZT4+PjheSVsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UpKV0pLC0xXkhlfSx5LmJ1'@;
put 'Zj1mdW5jdGlvbiByZSh2ZSxTZSl7aWYodmUubGVuZ3RoPjFlNClyZXR1cm4gZnVuY3Rpb24gZ2UodmUsU2Upe2Zvcih2YXIgSGU9LTFeU2UsQmU9dmUubGVuZ3RoLTcsR2U9MDtHZTxCZTspSGU9KEhlPShIZT0oSGU9KEhlPShIZT0oSGU9KEhlPUhlPj4+OF5JWzI1NSYoSGVedmVbR2UrK10p'@;
put 'XSk+Pj44XklbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheSVsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5JWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XklbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheSVsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5JWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44Xklb'@;
put 'MjU1JihIZV52ZVtHZSsrXSldO2Zvcig7R2U8QmUrNzspSGU9SGU+Pj44XklbMjU1JihIZV52ZVtHZSsrXSldO3JldHVybi0xXkhlfSh2ZSxTZSk7Zm9yKHZhciBIZT0tMV5TZSxCZT12ZS5sZW5ndGgtMyxHZT0wO0dlPEJlOylIZT0oSGU9KEhlPShIZT1IZT4+PjheSVsyNTUmKEhlXnZlW0dl'@;
put 'KytdKV0pPj4+OF5JWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XklbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheSVsyNTUmKEhlXnZlW0dlKytdKV07Zm9yKDtHZTxCZSszOylIZT1IZT4+PjheSVsyNTUmKEhlXnZlW0dlKytdKV07cmV0dXJuLTFeSGV9LHkuc3RyPWZ1bmN0aW9uIF9lKHZlLFNl'@;
put 'KXtmb3IodmFyIG50LGR0LEhlPS0xXlNlLEJlPTAsR2U9dmUubGVuZ3RoO0JlPEdlOykobnQ9dmUuY2hhckNvZGVBdChCZSsrKSk8MTI4P0hlPUhlPj4+OF5JWzI1NSYoSGVebnQpXTpudDwyMDQ4P0hlPShIZT1IZT4+PjheSVsyNTUmKEhlXigxOTJ8bnQ+PjYmMzEpKV0pPj4+OF5JWzI1NSYo'@;
put 'SGVeKDEyOHw2MyZudCkpXTpudD49NTUyOTYmJm50PDU3MzQ0PyhudD02NCsoMTAyMyZudCksZHQ9MTAyMyZ2ZS5jaGFyQ29kZUF0KEJlKyspLEhlPShIZT0oSGU9KEhlPUhlPj4+OF5JWzI1NSYoSGVeKDI0MHxudD4+OCY3KSldKT4+PjheSVsyNTUmKEhlXigxMjh8bnQ+PjImNjMpKV0pPj4+'@;
put 'OF5JWzI1NSYoSGVeKDEyOHxkdD4+NiYxNXwoMyZudCk8PDQpKV0pPj4+OF5JWzI1NSYoSGVeKDEyOHw2MyZkdCkpXSk6SGU9KEhlPShIZT1IZT4+PjheSVsyNTUmKEhlXigyMjR8bnQ+PjEyJjE1KSldKT4+PjheSVsyNTUmKEhlXigxMjh8bnQ+PjYmNjMpKV0pPj4+OF5JWzI1NSYoSGVeKDEy'@;
put 'OHw2MyZudCkpXTtyZXR1cm4tMV5IZX19KE9lPXt9KTt2YXIgV2UsamU9ZnVuY3Rpb24oKXt2YXIgU2UsUD17fTtmdW5jdGlvbiBRKHJuKXtpZigiLyI9PXJuLmNoYXJBdChybi5sZW5ndGgtMSkpcmV0dXJuLTE9PT1ybi5zbGljZSgwLC0xKS5pbmRleE9mKCIvIik/cm46UShybi5zbGljZSgw'@;
put 'LC0xKSk7dmFyIF9uPXJuLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1fbj9ybjpybi5zbGljZSgwLF9uKzEpfWZ1bmN0aW9uIHJlKHJuKXtpZigiLyI9PXJuLmNoYXJBdChybi5sZW5ndGgtMSkpcmV0dXJuIHJlKHJuLnNsaWNlKDAsLTEpKTt2YXIgX249cm4ubGFzdEluZGV4T2YoIi8i'@;
put 'KTtyZXR1cm4tMT09PV9uP3JuOnJuLnNsaWNlKF9uKzEpfWZ1bmN0aW9uIGdlKHJuLF9uKXsic3RyaW5nIj09dHlwZW9mIF9uJiYoX249bmV3IERhdGUoX24pKTt2YXIgYW49X24uZ2V0SG91cnMoKTthbj0oYW49YW48PDZ8X24uZ2V0TWludXRlcygpKTw8NXxfbi5nZXRTZWNvbmRzKCk+Pj4x'@;
put 'LHJuLndyaXRlX3NoaWZ0KDIsYW4pO3ZhciBWdD1fbi5nZXRGdWxsWWVhcigpLTE5ODA7VnQ9KFZ0PVZ0PDw0fF9uLmdldE1vbnRoKCkrMSk8PDV8X24uZ2V0RGF0ZSgpLHJuLndyaXRlX3NoaWZ0KDIsVnQpfWZ1bmN0aW9uIHZlKHJuKXtvbChybiwwKTtmb3IodmFyIF9uPXt9LGFuPTA7cm4u'@;
put 'bDw9cm4ubGVuZ3RoLTQ7KXt2YXIgVnQ9cm4ucmVhZF9zaGlmdCgyKSxXdD1ybi5yZWFkX3NoaWZ0KDIpLGRuPXJuLmwrV3QsVG49e307MjE1ODk9PT1WdCYmKDEmKGFuPXJuLnJlYWRfc2hpZnQoMSkpJiYoVG4ubXRpbWU9cm4ucmVhZF9zaGlmdCg0KSksV3Q+NSYmKDImYW4mJihUbi5hdGlt'@;
put 'ZT1ybi5yZWFkX3NoaWZ0KDQpKSw0JmFuJiYoVG4uY3RpbWU9cm4ucmVhZF9zaGlmdCg0KSkpLFRuLm10aW1lJiYoVG4ubXQ9bmV3IERhdGUoMWUzKlRuLm10aW1lKSkpLHJuLmw9ZG4sX25bVnRdPVRufXJldHVybiBfbn1mdW5jdGlvbiBIZSgpe3JldHVybiBTZXx8KFNlPUYoNzg3NzMpKX1m'@;
put 'dW5jdGlvbiBCZShybixfbil7aWYoODA9PXJuWzBdJiY3NT09cm5bMV0pcmV0dXJuIEpyKHJuLF9uKTtpZihybi5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK3JuLmxlbmd0aCsiIDwgNTEyIik7dmFyIGFuLFd0LGRuLFRuLG5yLGJyLFZ0PTUxMixacj1bXSxJ'@;
put 'cj1ybi5zbGljZSgwLDUxMik7b2woSXIsMCk7dmFyIE1pPWZ1bmN0aW9uIEdlKHJuKXtpZig4MD09cm5bcm4ubF0mJjc1PT1ybltybi5sKzFdKXJldHVyblswLDBdO3JuLmNoayhCciwiSGVhZGVyIFNpZ25hdHVyZTogIikscm4ubCs9MTY7dmFyIF9uPXJuLnJlYWRfc2hpZnQoMiwidSIpO3Jl'@;
put 'dHVybltybi5yZWFkX3NoaWZ0KDIsInUiKSxfbl19KElyKTtzd2l0Y2goYW49TWlbMF0pe2Nhc2UgMzpWdD01MTI7YnJlYWs7Y2FzZSA0OlZ0PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PU1pWzFdKXJldHVybiBKcihybixfbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNp'@;
put 'b246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIithbil9NTEyIT09VnQmJm9sKElyPXJuLnNsaWNlKDAsVnQpLDI4KTt2YXIgY2k9cm4uc2xpY2UoMCxWdCk7IWZ1bmN0aW9uIG50KHJuLF9uKXt2YXIgYW47c3dpdGNoKHJuLmwrPTIsYW49cm4ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPV9u'@;
put 'KXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK2FuKTticmVhaztjYXNlIDEyOmlmKDQhPV9uKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgIithbik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3Rv'@;
put 'ciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIithbil9cm4uY2hrKCIwNjAwIiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIpLHJuLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShJcixhbik7dmFyIENvPUlyLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1hbiYmMCE9PUNvKXRo'@;
put 'cm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBzYXcgIitDbyk7SXIubCs9NCxUbj1Jci5yZWFkX3NoaWZ0KDQsImkiKSxJci5sKz00LElyLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksbnI9SXIucmVhZF9zaGlmdCg0LCJp'@;
put 'IiksV3Q9SXIucmVhZF9zaGlmdCg0LCJpIiksYnI9SXIucmVhZF9zaGlmdCg0LCJpIiksZG49SXIucmVhZF9zaGlmdCg0LCJpIik7Zm9yKHZhciBwbz0tMSxWaT0wO1ZpPDEwOSYmISgocG89SXIucmVhZF9zaGlmdCg0LCJpIikpPDApOysrVmkpWnJbVmldPXBvO3ZhciBVbz1mdW5jdGlvbiBk'@;
put 'dChybixfbil7Zm9yKHZhciBhbj1NYXRoLmNlaWwocm4ubGVuZ3RoL19uKS0xLFZ0PVtdLFd0PTE7V3Q8YW47KytXdClWdFtXdC0xXT1ybi5zbGljZShXdCpfbiwoV3QrMSkqX24pO3JldHVybiBWdFthbi0xXT1ybi5zbGljZShhbipfbiksVnR9KHJuLFZ0KTtidChicixkbixVbyxWdCxacik7'@;
put 'dmFyIHRpPWZ1bmN0aW9uIGt0KHJuLF9uLGFuLFZ0KXt2YXIgV3Q9cm4ubGVuZ3RoLGRuPVtdLFRuPVtdLG5yPVtdLGJyPVtdLFpyPVZ0LTEsSXI9MCxNaT0wLGNpPTAsQ289MDtmb3IoSXI9MDtJcjxXdDsrK0lyKWlmKG5yPVtdLChjaT1Jcitfbik+PVd0JiYoY2ktPVd0KSwhVG5bY2ldKXti'@;
put 'cj1bXTt2YXIgcG89W107Zm9yKE1pPWNpO01pPj0wOyl7cG9bTWldPSEwLFRuW01pXT0hMCxucltuci5sZW5ndGhdPU1pLGJyLnB1c2gocm5bTWldKTt2YXIgVmk9YW5bTWF0aC5mbG9vcig0Kk1pL1Z0KV07aWYoVnQ8NCsoQ289NCpNaSZacikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRh'@;
put 'cnkgY3Jvc3NlZDogIitNaSsiIDQgIitWdCk7aWYoIXJuW1ZpXXx8cG9bTWk9b3Mocm5bVmldLENvKV0pYnJlYWt9ZG5bY2ldPXtub2RlczpucixkYXRhOlNhKFticl0pfX1yZXR1cm4gZG59KFVvLFRuLFpyLFZ0KTt0aVtUbl0ubmFtZT0iIURpcmVjdG9yeSIsV3Q+MCYmbnIhPT1abiYmKHRp'@;
put 'W25yXS5uYW1lPSIhTWluaUZBVCIpLHRpW1pyWzBdXS5uYW1lPSIhRkFUIix0aS5mYXRfYWRkcnM9WnIsdGkuc3N6PVZ0O3ZhciBjYz1bXSxOdT1bXSxWNj1bXTsoZnVuY3Rpb24gVHQocm4sX24sYW4sVnQsV3QsZG4sVG4sbnIpe2Zvcih2YXIgQ28sYnI9MCxacj1WdC5sZW5ndGg/MjowLEly'@;
put 'PV9uW3JuXS5kYXRhLE1pPTAsY2k9MDtNaTxJci5sZW5ndGg7TWkrPTEyOCl7dmFyIHBvPUlyLnNsaWNlKE1pLE1pKzEyOCk7b2wocG8sNjQpLGNpPXBvLnJlYWRfc2hpZnQoMiksQ289RXUocG8sMCxjaS1aciksVnQucHVzaChDbyk7dmFyIFZpPXtuYW1lOkNvLHR5cGU6cG8ucmVhZF9zaGlm'@;
put 'dCgxKSxjb2xvcjpwby5yZWFkX3NoaWZ0KDEpLEw6cG8ucmVhZF9zaGlmdCg0LCJpIiksUjpwby5yZWFkX3NoaWZ0KDQsImkiKSxDOnBvLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOnBvLnJlYWRfc2hpZnQoMTYpLHN0YXRlOnBvLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTsw'@;
put 'IT09cG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKSYmKFZpLmN0PVp0KHBvLHBvLmwtOCkpLDAhPT1wby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIp'@;
put 'JiYoVmkubXQ9WnQocG8scG8ubC04KSksVmkuc3RhcnQ9cG8ucmVhZF9zaGlmdCg0LCJpIiksVmkuc2l6ZT1wby5yZWFkX3NoaWZ0KDQsImkiKSxWaS5zaXplPDAmJlZpLnN0YXJ0PDAmJihWaS5zaXplPVZpLnR5cGU9MCxWaS5zdGFydD1abixWaS5uYW1lPSIiKSw1PT09VmkudHlwZT8oYnI9'@;
put 'Vmkuc3RhcnQsV3Q+MCYmYnIhPT1abiYmKF9uW2JyXS5uYW1lPSIhU3RyZWFtRGF0YSIpKTpWaS5zaXplPj00MDk2PyhWaS5zdG9yYWdlPSJmYXQiLHZvaWQgMD09PV9uW1ZpLnN0YXJ0XSYmKF9uW1ZpLnN0YXJ0XT1GdChhbixWaS5zdGFydCxfbi5mYXRfYWRkcnMsX24uc3N6KSksX25bVmku'@;
put 'c3RhcnRdLm5hbWU9VmkubmFtZSxWaS5jb250ZW50PV9uW1ZpLnN0YXJ0XS5kYXRhLnNsaWNlKDAsVmkuc2l6ZSkpOihWaS5zdG9yYWdlPSJtaW5pZmF0IixWaS5zaXplPDA/Vmkuc2l6ZT0wOmJyIT09Wm4mJlZpLnN0YXJ0IT09Wm4mJl9uW2JyXSYmKFZpLmNvbnRlbnQ9Y3QoVmksX25bYnJd'@;
put 'LmRhdGEsKF9uW25yXXx8e30pLmRhdGEpKSksVmkuY29udGVudCYmb2woVmkuY29udGVudCwwKSxkbltDb109VmksVG4ucHVzaChWaSl9fSkoVG4sdGksVW8sY2MsV3Qse30sTnUsbnIpLGZ1bmN0aW9uIEN0KHJuLF9uLGFuKXtmb3IodmFyIFZ0PTAsV3Q9MCxkbj0wLFRuPTAsbnI9MCxicj1h'@;
put 'bi5sZW5ndGgsWnI9W10sSXI9W107VnQ8YnI7KytWdClacltWdF09SXJbVnRdPVZ0LF9uW1Z0XT1hbltWdF07Zm9yKDtucjxJci5sZW5ndGg7KytucilXdD1ybltWdD1Jcltucl1dLkwsZG49cm5bVnRdLlIsVG49cm5bVnRdLkMsWnJbVnRdPT09VnQmJigtMSE9PVd0JiZacltXdF0hPT1XdCYm'@;
put 'KFpyW1Z0XT1acltXdF0pLC0xIT09ZG4mJlpyW2RuXSE9PWRuJiYoWnJbVnRdPVpyW2RuXSkpLC0xIT09VG4mJihacltUbl09VnQpLC0xIT09V3QmJlZ0IT1acltWdF0mJihacltXdF09WnJbVnRdLElyLmxhc3RJbmRleE9mKFd0KTxuciYmSXIucHVzaChXdCkpLC0xIT09ZG4mJlZ0IT1acltW'@;
put 'dF0mJihacltkbl09WnJbVnRdLElyLmxhc3RJbmRleE9mKGRuKTxuciYmSXIucHVzaChkbikpO2ZvcihWdD0xO1Z0PGJyOysrVnQpWnJbVnRdPT09VnQmJigtMSE9PWRuJiZacltkbl0hPT1kbj9acltWdF09WnJbZG5dOi0xIT09V3QmJlpyW1d0XSE9PVd0JiYoWnJbVnRdPVpyW1d0XSkpO2Zv'@;
put 'cihWdD0xO1Z0PGJyOysrVnQpaWYoMCE9PXJuW1Z0XS50eXBlKXtpZigobnI9VnQpIT1acltucl0pZG97X25bVnRdPV9uW25yPVpyW25yXV0rIi8iK19uW1Z0XX13aGlsZSgwIT09bnImJi0xIT09WnJbbnJdJiZuciE9WnJbbnJdKTtacltWdF09LTF9Zm9yKF9uWzBdKz0iLyIsVnQ9MTtWdDxi'@;
put 'cjsrK1Z0KTIhPT1ybltWdF0udHlwZSYmKF9uW1Z0XSs9Ii8iKX0oTnUsVjYsY2MpLGNjLnNoaWZ0KCk7dmFyIHdmPXtGaWxlSW5kZXg6TnUsRnVsbFBhdGhzOlY2fTtyZXR1cm4gX24mJl9uLnJhdyYmKHdmLnJhdz17aGVhZGVyOmNpLHNlY3RvcnM6VW99KSx3Zn1mdW5jdGlvbiBjdChybixf'@;
put 'bixhbil7Zm9yKHZhciBXdD1ybi5zaXplLGRuPVtdLFRuPXJuLnN0YXJ0O2FuJiZXdD4wJiZUbj49MDspZG4ucHVzaChfbi5zbGljZShUbip0cixUbip0cit0cikpLFd0LT10cixUbj1vcyhhbiw0KlRuKTtyZXR1cm4gMD09PWRuLmxlbmd0aD9wcigwKTpTKGRuKS5zbGljZSgwLHJuLnNpemUp'@;
put 'fWZ1bmN0aW9uIGJ0KHJuLF9uLGFuLFZ0LFd0KXt2YXIgZG49Wm47aWYocm49PT1abil7aWYoMCE9PV9uKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PXJuKXt2YXIgVG49YW5bcm5dLG5yPShWdD4+PjIpLTE7aWYoIVRu'@;
put 'KXJldHVybjtmb3IodmFyIGJyPTA7YnI8bnImJihkbj1vcyhUbiw0KmJyKSkhPT1abjsrK2JyKVd0LnB1c2goZG4pO2J0KG9zKFRuLFZ0LTQpLF9uLTEsYW4sVnQsV3QpfX1mdW5jdGlvbiBGdChybixfbixhbixWdCxXdCl7dmFyIGRuPVtdLFRuPVtdO1d0fHwoV3Q9W10pO3ZhciBucj1WdC0x'@;
put 'LGJyPTAsWnI9MDtmb3IoYnI9X247YnI+PTA7KXtXdFticl09ITAsZG5bZG4ubGVuZ3RoXT1icixUbi5wdXNoKHJuW2JyXSk7dmFyIElyPWFuW01hdGguZmxvb3IoNCpici9WdCldO2lmKFZ0PDQrKFpyPTQqYnImbnIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIr'@;
put 'YnIrIiA0ICIrVnQpO2lmKCFybltJcl0pYnJlYWs7YnI9b3Mocm5bSXJdLFpyKX1yZXR1cm57bm9kZXM6ZG4sZGF0YTpTYShbVG5dKX19ZnVuY3Rpb24gWnQocm4sX24pe3JldHVybiBuZXcgRGF0ZSgxZTMqKGJpKHJuLF9uKzQpLzFlNypNYXRoLnBvdygyLDMyKStiaShybixfbikvMWU3LTEx'@;
put 'NjQ0NDczNjAwKSl9ZnVuY3Rpb24gdW4ocm4sX24pe3ZhciBhbj1fbnx8e30sVnQ9YW4ucm9vdHx8IlJvb3QgRW50cnkiO2lmKHJuLkZ1bGxQYXRoc3x8KHJuLkZ1bGxQYXRocz1bXSkscm4uRmlsZUluZGV4fHwocm4uRmlsZUluZGV4PVtdKSxybi5GdWxsUGF0aHMubGVuZ3RoIT09cm4uRmls'@;
put 'ZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlIik7MD09PXJuLkZ1bGxQYXRocy5sZW5ndGgmJihybi5GdWxsUGF0aHNbMF09VnQrIi8iLHJuLkZpbGVJbmRleFswXT17bmFtZTpWdCx0eXBlOjV9KSxhbi5DTFNJRCYmKHJuLkZpbGVJbmRl'@;
put 'eFswXS5jbHNpZD1hbi5DTFNJRCksZnVuY3Rpb24gcW4ocm4pe3ZhciBfbj0iXHgwMVNoMzN0SjUiO2lmKCFqZS5maW5kKHJuLCIvIitfbikpe3ZhciBhbj1wcig0KTthblswXT01NSxhblsxXT1hblszXT01MCxhblsyXT01NCxybi5GaWxlSW5kZXgucHVzaCh7bmFtZTpfbix0eXBlOjIsY29u'@;
put 'dGVudDphbixzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxybi5GdWxsUGF0aHMucHVzaChybi5GdWxsUGF0aHNbMF0rX24pLHpuKHJuKX19KHJuKX1mdW5jdGlvbiB6bihybixfbil7dW4ocm4pO2Zvcih2YXIgYW49ITEsVnQ9ITEsV3Q9cm4uRnVsbFBhdGhzLmxlbmd0aC0xO1d0Pj0wOy0tV3Qp'@;
put 'e3ZhciBkbj1ybi5GaWxlSW5kZXhbV3RdO3N3aXRjaChkbi50eXBlKXtjYXNlIDA6VnQ/YW49ITA6KHJuLkZpbGVJbmRleC5wb3AoKSxybi5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1OlZ0PSEwLGlzTmFOKGRuLlIqZG4uTCpkbi5DKSYmKGFuPSEwKSxkbi5S'@;
put 'Pi0xJiZkbi5MPi0xJiZkbi5SPT1kbi5MJiYoYW49ITApO2JyZWFrO2RlZmF1bHQ6YW49ITB9fWlmKGFufHxfbil7dmFyIFRuPW5ldyBEYXRlKDE5ODcsMSwxOSksbnI9MCxicj1bXTtmb3IoV3Q9MDtXdDxybi5GdWxsUGF0aHMubGVuZ3RoOysrV3QpMCE9PXJuLkZpbGVJbmRleFtXdF0udHlw'@;
put 'ZSYmYnIucHVzaChbcm4uRnVsbFBhdGhzW1d0XSxybi5GaWxlSW5kZXhbV3RdXSk7Zm9yKFd0PTA7V3Q8YnIubGVuZ3RoOysrV3Qpe3ZhciBacj1RKGJyW1d0XVswXSk7Zm9yKFZ0PSExLG5yPTA7bnI8YnIubGVuZ3RoOysrbnIpYnJbbnJdWzBdPT09WnImJihWdD0hMCk7VnR8fGJyLnB1c2go'@;
put 'W1pyLHtuYW1lOnJlKFpyKS5yZXBsYWNlKCIvIiwiIiksdHlwZToxLGNsc2lkOnhpLGN0OlRuLG10OlRuLGNvbnRlbnQ6bnVsbH1dKX1mb3IoYnIuc29ydChmdW5jdGlvbihjaSxDbyl7cmV0dXJuIGZ1bmN0aW9uIEkocm4sX24pe2Zvcih2YXIgYW49cm4uc3BsaXQoIi8iKSxWdD1fbi5zcGxp'@;
put 'dCgiLyIpLFd0PTAsZG49MCxUbj1NYXRoLm1pbihhbi5sZW5ndGgsVnQubGVuZ3RoKTtXdDxUbjsrK1d0KXtpZihkbj1hbltXdF0ubGVuZ3RoLVZ0W1d0XS5sZW5ndGgpcmV0dXJuIGRuO2lmKGFuW1d0XSE9VnRbV3RdKXJldHVybiBhbltXdF08VnRbV3RdPy0xOjF9cmV0dXJuIGFuLmxlbmd0'@;
put 'aC1WdC5sZW5ndGh9KGNpWzBdLENvWzBdKX0pLHJuLkZ1bGxQYXRocz1bXSxybi5GaWxlSW5kZXg9W10sV3Q9MDtXdDxici5sZW5ndGg7KytXdClybi5GdWxsUGF0aHNbV3RdPWJyW1d0XVswXSxybi5GaWxlSW5kZXhbV3RdPWJyW1d0XVsxXTtmb3IoV3Q9MDtXdDxici5sZW5ndGg7KytXdCl7'@;
put 'dmFyIElyPXJuLkZpbGVJbmRleFtXdF0sTWk9cm4uRnVsbFBhdGhzW1d0XTtpZihJci5uYW1lPXJlKE1pKS5yZXBsYWNlKCIvIiwiIiksSXIuTD1Jci5SPUlyLkM9LShJci5jb2xvcj0xKSxJci5zaXplPUlyLmNvbnRlbnQ/SXIuY29udGVudC5sZW5ndGg6MCxJci5zdGFydD0wLElyLmNsc2lk'@;
put 'PUlyLmNsc2lkfHx4aSwwPT09V3QpSXIuQz1ici5sZW5ndGg+MT8xOi0xLElyLnNpemU9MCxJci50eXBlPTU7ZWxzZSBpZigiLyI9PU1pLnNsaWNlKC0xKSl7Zm9yKG5yPVd0KzE7bnI8YnIubGVuZ3RoJiZRKHJuLkZ1bGxQYXRoc1tucl0pIT1NaTsrK25yKTtmb3IoSXIuQz1ucj49YnIubGVu'@;
put 'Z3RoPy0xOm5yLG5yPVd0KzE7bnI8YnIubGVuZ3RoJiZRKHJuLkZ1bGxQYXRoc1tucl0pIT1RKE1pKTsrK25yKTtJci5SPW5yPj1ici5sZW5ndGg/LTE6bnIsSXIudHlwZT0xfWVsc2UgUShybi5GdWxsUGF0aHNbV3QrMV18fCIiKT09UShNaSkmJihJci5SPVd0KzEpLElyLnR5cGU9Mn19fWZ1'@;
put 'bmN0aW9uIGtuKHJuLF9uKXt2YXIgYW49X258fHt9O2lmKHpuKHJuKSwiemlwIj09YW4uZmlsZVR5cGUpcmV0dXJuIGZ1bmN0aW9uIHZzKHJuLF9uKXt2YXIgYW49X258fHt9LFZ0PVtdLFd0PVtdLGRuPXByKDEpLFRuPWFuLmNvbXByZXNzaW9uPzg6MCxucj0wLFpyPTAsSXI9MCxNaT0wLGNp'@;
put 'PTAsQ289cm4uRnVsbFBhdGhzWzBdLHBvPUNvLFZpPXJuLkZpbGVJbmRleFswXSxVbz1bXSx0aT0wO2Zvcihacj0xO1pyPHJuLkZ1bGxQYXRocy5sZW5ndGg7KytacilpZihwbz1ybi5GdWxsUGF0aHNbWnJdLnNsaWNlKENvLmxlbmd0aCksKFZpPXJuLkZpbGVJbmRleFtacl0pLnNpemUmJlZp'@;
put 'LmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPXBvKXt2YXIgVWw9TWksY2M9cHIocG8ubGVuZ3RoKTtmb3IoSXI9MDtJcjxwby5sZW5ndGg7KytJciljYy53cml0ZV9zaGlmdCgxLDEyNyZwby5jaGFyQ29kZUF0KElyKSk7Y2M9Y2Muc2xpY2UoMCxjYy5sKSxVb1tjaV09T2UuYnVmKFZpLmNvbnRl'@;
put 'bnQsMCk7dmFyIE51PVZpLmNvbnRlbnQ7OD09VG4mJihOdT1tcihOdSkpLChkbj1wcigzMCkpLndyaXRlX3NoaWZ0KDQsNjczMjQ3NTIpLGRuLndyaXRlX3NoaWZ0KDIsMjApLGRuLndyaXRlX3NoaWZ0KDIsbnIpLGRuLndyaXRlX3NoaWZ0KDIsVG4pLFZpLm10P2dlKGRuLFZpLm10KTpkbi53'@;
put 'cml0ZV9zaGlmdCg0LDApLGRuLndyaXRlX3NoaWZ0KC00LDgmbnI/MDpVb1tjaV0pLGRuLndyaXRlX3NoaWZ0KDQsOCZucj8wOk51Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoNCw4Jm5yPzA6VmkuY29udGVudC5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsY2MubGVuZ3RoKSxkbi53cml0ZV9z'@;
put 'aGlmdCgyLDApLE1pKz1kbi5sZW5ndGgsVnQucHVzaChkbiksTWkrPWNjLmxlbmd0aCxWdC5wdXNoKGNjKSxNaSs9TnUubGVuZ3RoLFZ0LnB1c2goTnUpLDgmbnImJigoZG49cHIoMTIpKS53cml0ZV9zaGlmdCgtNCxVb1tjaV0pLGRuLndyaXRlX3NoaWZ0KDQsTnUubGVuZ3RoKSxkbi53cml0'@;
put 'ZV9zaGlmdCg0LFZpLmNvbnRlbnQubGVuZ3RoKSxNaSs9ZG4ubCxWdC5wdXNoKGRuKSksKGRuPXByKDQ2KSkud3JpdGVfc2hpZnQoNCwzMzYzOTI0OCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDIwKSxkbi53cml0ZV9zaGlmdCgyLG5yKSxkbi53cml0ZV9zaGlmdCgy'@;
put 'LFRuKSxkbi53cml0ZV9zaGlmdCg0LDApLGRuLndyaXRlX3NoaWZ0KC00LFVvW2NpXSksZG4ud3JpdGVfc2hpZnQoNCxOdS5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDQsVmkuY29udGVudC5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsY2MubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLDApLGRu'@;
put 'LndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoNCxVbCksdGkrPWRuLmwsV3QucHVzaChkbiksdGkrPWNjLmxlbmd0aCxXdC5wdXNoKGNjKSwrK2NpfXJldHVybihkbj1wcigy'@;
put 'MikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMixjaSksZG4ud3JpdGVfc2hpZnQoMixjaSksZG4ud3JpdGVfc2hpZnQoNCx0aSksZG4ud3JpdGVfc2hpZnQoNCxNaSksZG4ud3JpdGVfc2hp'@;
put 'ZnQoMiwwKSxTKFtTKFZ0KSxTKFd0KSxkbl0pfShybixhbik7dmFyIFZ0PWZ1bmN0aW9uKENvKXtmb3IodmFyIHBvPTAsVmk9MCxVbz0wO1VvPENvLkZpbGVJbmRleC5sZW5ndGg7KytVbyl7dmFyIHRpPUNvLkZpbGVJbmRleFtVb107aWYodGkuY29udGVudCl7dmFyIFVsPXRpLmNvbnRlbnQu'@;
put 'bGVuZ3RoO1VsPjAmJihVbDw0MDk2P3BvKz1VbCs2Mz4+NjpWaSs9VWwrNTExPj45KX19Zm9yKHZhciBjYz1Dby5GdWxsUGF0aHMubGVuZ3RoKzM+PjIsVjY9cG8rMTI3Pj43LHdmPShwbys3Pj4zKStWaStjYytWNixxZD13ZisxMjc+PjcsYl89cWQ8PTEwOT8wOk1hdGguY2VpbCgocWQtMTA5'@;
put 'KS8xMjcpO3dmK3FkK2JfKzEyNz4+Nz5xZDspYl89KytxZDw9MTA5PzA6TWF0aC5jZWlsKChxZC0xMDkpLzEyNyk7dmFyIFExPVsxLGJfLHFkLFY2LGNjLFZpLHBvLDBdO3JldHVybiBDby5GaWxlSW5kZXhbMF0uc2l6ZT1wbzw8NixRMVs3XT0oQ28uRmlsZUluZGV4WzBdLnN0YXJ0PVExWzBd'@;
put 'K1ExWzFdK1ExWzJdK1ExWzNdK1ExWzRdK1ExWzVdKSsoUTFbNl0rNz4+MyksUTF9KHJuKSxXdD1wcihWdFs3XTw8OSksZG49MCxUbj0wO2Zvcihkbj0wO2RuPDg7KytkbilXdC53cml0ZV9zaGlmdCgxLHNpW2RuXSk7Zm9yKGRuPTA7ZG48ODsrK2RuKVd0LndyaXRlX3NoaWZ0KDIsMCk7Zm9y'@;
put 'KFd0LndyaXRlX3NoaWZ0KDIsNjIpLFd0LndyaXRlX3NoaWZ0KDIsMyksV3Qud3JpdGVfc2hpZnQoMiw2NTUzNCksV3Qud3JpdGVfc2hpZnQoMiw5KSxXdC53cml0ZV9zaGlmdCgyLDYpLGRuPTA7ZG48MzsrK2RuKVd0LndyaXRlX3NoaWZ0KDIsMCk7Zm9yKFd0LndyaXRlX3NoaWZ0KDQsMCks'@;
put 'V3Qud3JpdGVfc2hpZnQoNCxWdFsyXSksV3Qud3JpdGVfc2hpZnQoNCxWdFswXStWdFsxXStWdFsyXStWdFszXS0xKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsNDA5NiksV3Qud3JpdGVfc2hpZnQoNCxWdFszXT9WdFswXStWdFsxXStWdFsyXS0xOlpuKSxXdC53cml0'@;
put 'ZV9zaGlmdCg0LFZ0WzNdKSxXdC53cml0ZV9zaGlmdCgtNCxWdFsxXT9WdFswXS0xOlpuKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzFdKSxkbj0wO2RuPDEwOTsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LGRuPFZ0WzJdP1Z0WzFdK2RuOi0xKTtpZihWdFsxXSlmb3IoVG49MDtUbjxWdFsxXTsrK1Ru'@;
put 'KXtmb3IoO2RuPDIzNisxMjcqVG47KytkbilXdC53cml0ZV9zaGlmdCgtNCxkbjxWdFsyXT9WdFsxXStkbjotMSk7V3Qud3JpdGVfc2hpZnQoLTQsVG49PT1WdFsxXS0xP1puOlRuKzEpfXZhciBucj1mdW5jdGlvbihDbyl7Zm9yKFRuKz1DbztkbjxUbi0xOysrZG4pV3Qud3JpdGVfc2hpZnQo'@;
put 'LTQsZG4rMSk7Q28mJigrK2RuLFd0LndyaXRlX3NoaWZ0KC00LFpuKSl9O2ZvcihUbj1kbj0wLFRuKz1WdFsxXTtkbjxUbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LElpLkRJRlNFQ1QpO2ZvcihUbis9VnRbMl07ZG48VG47KytkbilXdC53cml0ZV9zaGlmdCgtNCxJaS5GQVRTRUNUKTtucihW'@;
put 'dFszXSksbnIoVnRbNF0pO2Zvcih2YXIgYnI9MCxacj0wLElyPXJuLkZpbGVJbmRleFswXTticjxybi5GaWxlSW5kZXgubGVuZ3RoOysrYnIpKElyPXJuLkZpbGVJbmRleFticl0pLmNvbnRlbnQmJiEoKFpyPUlyLmNvbnRlbnQubGVuZ3RoKTw0MDk2KSYmKElyLnN0YXJ0PVRuLG5yKFpyKzUx'@;
put 'MT4+OSkpO2ZvcihucihWdFs2XSs3Pj4zKTs1MTEmV3QubDspV3Qud3JpdGVfc2hpZnQoLTQsSWkuRU5ET0ZDSEFJTik7Zm9yKFRuPWRuPTAsYnI9MDticjxybi5GaWxlSW5kZXgubGVuZ3RoOysrYnIpKElyPXJuLkZpbGVJbmRleFticl0pLmNvbnRlbnQmJihacj1Jci5jb250ZW50Lmxlbmd0'@;
put 'aCkmJiEoWnI+PTQwOTYpJiYoSXIuc3RhcnQ9VG4sbnIoWnIrNjM+PjYpKTtmb3IoOzUxMSZXdC5sOylXdC53cml0ZV9zaGlmdCgtNCxJaS5FTkRPRkNIQUlOKTtmb3IoZG49MDtkbjxWdFs0XTw8MjsrK2RuKXt2YXIgTWk9cm4uRnVsbFBhdGhzW2RuXTtpZihNaSYmMCE9PU1pLmxlbmd0aCl7'@;
put 'SXI9cm4uRmlsZUluZGV4W2RuXSwwPT09ZG4mJihJci5zdGFydD1Jci5zaXplP0lyLnN0YXJ0LTE6Wm4pO3ZhciBjaT0wPT09ZG4mJmFuLnJvb3R8fElyLm5hbWU7aWYoWnI9MiooY2kubGVuZ3RoKzEpLFd0LndyaXRlX3NoaWZ0KDY0LGNpLCJ1dGYxNmxlIiksV3Qud3JpdGVfc2hpZnQoMixa'@;
put 'ciksV3Qud3JpdGVfc2hpZnQoMSxJci50eXBlKSxXdC53cml0ZV9zaGlmdCgxLElyLmNvbG9yKSxXdC53cml0ZV9zaGlmdCgtNCxJci5MKSxXdC53cml0ZV9zaGlmdCgtNCxJci5SKSxXdC53cml0ZV9zaGlmdCgtNCxJci5DKSxJci5jbHNpZClXdC53cml0ZV9zaGlmdCgxNixJci5jbHNpZCwi'@;
put 'aGV4Iik7ZWxzZSBmb3IoYnI9MDticjw0OysrYnIpV3Qud3JpdGVfc2hpZnQoNCwwKTtXdC53cml0ZV9zaGlmdCg0LElyLnN0YXRlfHwwKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0Lndy'@;
put 'aXRlX3NoaWZ0KDQsSXIuc3RhcnQpLFd0LndyaXRlX3NoaWZ0KDQsSXIuc2l6ZSksV3Qud3JpdGVfc2hpZnQoNCwwKX1lbHNle2Zvcihicj0wO2JyPDE3OysrYnIpV3Qud3JpdGVfc2hpZnQoNCwwKTtmb3IoYnI9MDticjwzOysrYnIpV3Qud3JpdGVfc2hpZnQoNCwtMSk7Zm9yKGJyPTA7YnI8'@;
put 'MTI7KyticilXdC53cml0ZV9zaGlmdCg0LDApfX1mb3IoZG49MTtkbjxybi5GaWxlSW5kZXgubGVuZ3RoOysrZG4paWYoKElyPXJuLkZpbGVJbmRleFtkbl0pLnNpemU+PTQwOTYpe2ZvcihXdC5sPUlyLnN0YXJ0KzE8PDksYnI9MDticjxJci5zaXplOysrYnIpV3Qud3JpdGVfc2hpZnQoMSxJ'@;
put 'ci5jb250ZW50W2JyXSk7Zm9yKDs1MTEmYnI7KyticilXdC53cml0ZV9zaGlmdCgxLDApfWZvcihkbj0xO2RuPHJuLkZpbGVJbmRleC5sZW5ndGg7KytkbilpZigoSXI9cm4uRmlsZUluZGV4W2RuXSkuc2l6ZT4wJiZJci5zaXplPDQwOTYpe2Zvcihicj0wO2JyPElyLnNpemU7KyticilXdC53'@;
put 'cml0ZV9zaGlmdCgxLElyLmNvbnRlbnRbYnJdKTtmb3IoOzYzJmJyOysrYnIpV3Qud3JpdGVfc2hpZnQoMSwwKX1mb3IoO1d0Lmw8V3QubGVuZ3RoOylXdC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBXdH1QLnZlcnNpb249IjEuMS40Ijt2YXIgdnIsdHI9NjQsWm49LTIsQnI9ImQwY2YxMWUw'@;
put 'YTFiMTFhZTEiLHNpPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0seGk9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIixJaT17TUFYUkVHU0VDVDotNixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjpabixGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJF'@;
put 'OkJyLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOnhpLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3RvcmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiB1cihybil7Zm9y'@;
put 'KHZhciBfbj1uZXcgQXJyYXkocm4ubGVuZ3RoKSxhbj0wO2FuPHJuLmxlbmd0aDsrK2FuKV9uW2FuXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHJuW2FuXSk7cmV0dXJuIF9uLmpvaW4oIiIpfWZ1bmN0aW9uIG1yKHJuKXtyZXR1cm4gdnI/dnIuZGVmbGF0ZVJhd1N5bmMocm4pOmdsKHJuKX1mb3Io'@;
put 'dmFyIHJuLF9uLHdpPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxVcj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OF0samk9WzEsMiwzLDQs'@;
put 'NSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3N10sVGk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLFlvPVRpP25ldyBVaW50OEFycmF5KDI1Nik6W10sbG89MDts'@;
put 'bzwyNTY7KytsbylZb1tsb109KHZvaWQgMCwyNTUmKChfbj0xMzk1MzYmKChybj1sbyk8PDF8cm48PDExKXw1NTgxNDQmKHJuPDw1fHJuPDwxNSkpPj4xNnxfbj4+OHxfbikpO2Z1bmN0aW9uIEFvKHJuLF9uKXt2YXIgYW49WW9bMjU1JnJuXTtyZXR1cm4gX248PTg/YW4+Pj44LV9uOihhbj1h'@;
put 'bjw8OHxZb1tybj4+OCYyNTVdLF9uPD0xNj9hbj4+PjE2LV9uOihhbj1hbjw8OHxZb1tybj4+MTYmMjU1XSk+Pj4yNC1fbil9ZnVuY3Rpb24geG8ocm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9Nj8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiYzfWZ1bmN0aW9u'@;
put 'IGhpKHJuLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKHJuW1Z0XXwoYW48PTU/MDpybltWdCsxXTw8OCkpPj4+YW4mN31mdW5jdGlvbiBNbihybixfbil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihybltWdF18KGFuPD0zPzA6cm5bVnQrMV08PDgpKT4+PmFuJjMxfWZ1'@;
put 'bmN0aW9uIE1zKHJuLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKHJuW1Z0XXwoYW48PTE/MDpybltWdCsxXTw8OCkpPj4+YW4mMTI3fWZ1bmN0aW9uIHlzKHJuLF9uLGFuKXt2YXIgVnQ9NyZfbixXdD1fbj4+PjMsVG49cm5bV3RdPj4+VnQ7cmV0dXJuIGFuPDgtVnR8fChUbnw9'@;
put 'cm5bV3QrMV08PDgtVnQsYW48MTYtVnQpfHwoVG58PXJuW1d0KzJdPDwxNi1WdCxhbjwyNC1WdCl8fChUbnw9cm5bV3QrM108PDI0LVZ0KSxUbiYoMTw8YW4pLTF9ZnVuY3Rpb24gRWwocm4sX24pe3ZhciBhbj1ybi5sZW5ndGgsVnQ9Miphbj5fbj8yKmFuOl9uKzUsV3Q9MDtpZihhbj49X24p'@;
put 'cmV0dXJuIHJuO2lmKGhlKXt2YXIgZG49YihWdCk7aWYocm4uY29weSlybi5jb3B5KGRuKTtlbHNlIGZvcig7V3Q8cm4ubGVuZ3RoOysrV3QpZG5bV3RdPXJuW1d0XTtyZXR1cm4gZG59aWYoVGkpe3ZhciBUbj1uZXcgVWludDhBcnJheShWdCk7aWYoVG4uc2V0KVRuLnNldChybik7ZWxzZSBm'@;
put 'b3IoO1d0PHJuLmxlbmd0aDsrK1d0KVRuW1d0XT1ybltXdF07cmV0dXJuIFRufXJldHVybiBybi5sZW5ndGg9VnQscm59ZnVuY3Rpb24gc2wocm4pe2Zvcih2YXIgX249bmV3IEFycmF5KHJuKSxhbj0wO2FuPHJuOysrYW4pX25bYW5dPTA7cmV0dXJuIF9ufXZhciBnbD1mdW5jdGlvbihfbil7'@;
put 'dmFyIGFuPXByKDUwK01hdGguZmxvb3IoMS4xKl9uLmxlbmd0aCkpLFZ0PWZ1bmN0aW9uKGFuLFZ0KXtmb3IodmFyIFd0PTA7V3Q8YW4ubGVuZ3RoOyl7dmFyIGRuPU1hdGgubWluKDY1NTM1LGFuLmxlbmd0aC1XdCk7Zm9yKFZ0LndyaXRlX3NoaWZ0KDEsKyhXdCtkbj09YW4ubGVuZ3RoKSks'@;
put 'VnQud3JpdGVfc2hpZnQoMixkbiksVnQud3JpdGVfc2hpZnQoMiw2NTUzNSZ+ZG4pO2RuLS0gPjA7KVZ0W1Z0LmwrK109YW5bV3QrK119cmV0dXJuIFZ0Lmx9KF9uLGFuKTtyZXR1cm4gYW4uc2xpY2UoMCxWdCl9O2Z1bmN0aW9uIG51KHJuLF9uLGFuKXt2YXIgVnQ9MSxXdD0wLGRuPTAsVG49'@;
put 'MCxucj0wLGJyPXJuLmxlbmd0aCxacj1UaT9uZXcgVWludDE2QXJyYXkoMzIpOnNsKDMyKTtmb3IoZG49MDtkbjwzMjsrK2RuKVpyW2RuXT0wO2Zvcihkbj1icjtkbjxhbjsrK2RuKXJuW2RuXT0wO2JyPXJuLmxlbmd0aDt2YXIgSXI9VGk/bmV3IFVpbnQxNkFycmF5KGJyKTpzbChicik7Zm9y'@;
put 'KGRuPTA7ZG48YnI7KytkbilacltXdD1ybltkbl1dKyssVnQ8V3QmJihWdD1XdCksSXJbZG5dPTA7Zm9yKFpyWzBdPTAsZG49MTtkbjw9VnQ7KytkbilacltkbisxNl09bnI9bnIrWnJbZG4tMV08PDE7Zm9yKGRuPTA7ZG48YnI7KytkbikwIT0obnI9cm5bZG5dKSYmKElyW2RuXT1acltucisx'@;
put 'Nl0rKyk7dmFyIE1pPTA7Zm9yKGRuPTA7ZG48YnI7KytkbilpZigwIT0oTWk9cm5bZG5dKSlmb3IobnI9QW8oSXJbZG5dLFZ0KT4+VnQtTWksVG49KDE8PFZ0KzQtTWkpLTE7VG4+PTA7LS1UbilfbltucnxUbjw8TWldPTE1Jk1pfGRuPDw0O3JldHVybiBWdH12YXIgdGw9VGk/bmV3IFVpbnQx'@;
put 'NkFycmF5KDUxMik6c2woNTEyKSxLdD1UaT9uZXcgVWludDE2QXJyYXkoMzIpOnNsKDMyKTtpZighVGkpe2Zvcih2YXIgZ249MDtnbjw1MTI7Kytnbil0bFtnbl09MDtmb3IoZ249MDtnbjwzMjsrK2duKUt0W2duXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgcm49W10sX249MDtfbjwzMjtfbisr'@;
put 'KXJuLnB1c2goNSk7bnUocm4sS3QsMzIpO3ZhciBhbj1bXTtmb3IoX249MDtfbjw9MTQzO19uKyspYW4ucHVzaCg4KTtmb3IoO19uPD0yNTU7X24rKylhbi5wdXNoKDkpO2Zvcig7X248PTI3OTtfbisrKWFuLnB1c2goNyk7Zm9yKDtfbjw9Mjg3O19uKyspYW4ucHVzaCg4KTtudShhbix0bCwy'@;
put 'ODgpfSgpO3ZhciBJbj1UaT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOnNsKDMyNzY4KSxXcj1UaT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOnNsKDMyNzY4KSxYbj1UaT9uZXcgVWludDE2QXJyYXkoMTI4KTpzbCgxMjgpLGVpPTEsaXI9MTtmdW5jdGlvbiByaShybixfbil7dmFyIGFuPU1uKHJu'@;
put 'LF9uKSsyNTcsVnQ9TW4ocm4sX24rPTUpKzEsV3Q9ZnVuY3Rpb24gdGEocm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9ND8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiYxNX0ocm4sX24rPTUpKzQ7X24rPTQ7Zm9yKHZhciBkbj0wLFRuPVRpP25ldyBVaW50OEFy'@;
put 'cmF5KDE5KTpzbCgxOSksbnI9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGJyPTEsWnI9VGk/bmV3IFVpbnQ4QXJyYXkoOCk6c2woOCksSXI9VGk/bmV3IFVpbnQ4QXJyYXkoOCk6c2woOCksTWk9VG4ubGVuZ3RoLGNpPTA7Y2k8V3Q7KytjaSlUblt3aVtjaV1dPWRu'@;
put 'PWhpKHJuLF9uKSxicjxkbiYmKGJyPWRuKSxacltkbl0rKyxfbis9Mzt2YXIgQ289MDtmb3IoWnJbMF09MCxjaT0xO2NpPD1icjsrK2NpKUlyW2NpXT1Dbz1DbytacltjaS0xXTw8MTtmb3IoY2k9MDtjaTxNaTsrK2NpKTAhPShDbz1UbltjaV0pJiYobnJbY2ldPUlyW0NvXSsrKTt2YXIgcG89'@;
put 'MDtmb3IoY2k9MDtjaTxNaTsrK2NpKWlmKDAhPShwbz1UbltjaV0pKXtDbz1Zb1tucltjaV1dPj44LXBvO2Zvcih2YXIgVmk9KDE8PDctcG8pLTE7Vmk+PTA7LS1WaSlYbltDb3xWaTw8cG9dPTcmcG98Y2k8PDN9dmFyIFVvPVtdO2Zvcihicj0xO1VvLmxlbmd0aDxhbitWdDspc3dpdGNoKENv'@;
put 'PVhuW01zKHJuLF9uKV0sX24rPTcmQ28sQ28+Pj49Myl7Y2FzZSAxNjpmb3IoZG49Myt4byhybixfbiksX24rPTIsQ289VW9bVW8ubGVuZ3RoLTFdO2RuLS0gPjA7KVVvLnB1c2goQ28pO2JyZWFrO2Nhc2UgMTc6Zm9yKGRuPTMraGkocm4sX24pLF9uKz0zO2RuLS0gPjA7KVVvLnB1c2goMCk7'@;
put 'YnJlYWs7Y2FzZSAxODpmb3IoZG49MTErTXMocm4sX24pLF9uKz03O2RuLS0gPjA7KVVvLnB1c2goMCk7YnJlYWs7ZGVmYXVsdDpVby5wdXNoKENvKSxicjxDbyYmKGJyPUNvKX12YXIgdGk9VW8uc2xpY2UoMCxhbiksVWw9VW8uc2xpY2UoYW4pO2ZvcihjaT1hbjtjaTwyODY7KytjaSl0aVtj'@;
put 'aV09MDtmb3IoY2k9VnQ7Y2k8MzA7KytjaSlVbFtjaV09MDtyZXR1cm4gZWk9bnUodGksSW4sMjg2KSxpcj1udShVbCxXciwzMCksX259ZnVuY3Rpb24gb2kocm4sX24pe3ZhciBWdD1mdW5jdGlvbiBtbyhybixfbil7aWYoMz09cm5bMF0mJiEoMyZyblsxXSkpcmV0dXJuW0coX24pLDJdO2Zv'@;
put 'cih2YXIgYW49MCxWdD0wLFd0PWIoX258fDE8PDE4KSxkbj0wLFRuPVd0Lmxlbmd0aD4+PjAsbnI9MCxicj0wOyEoMSZWdCk7KWlmKFZ0PWhpKHJuLGFuKSxhbis9MyxWdD4+PjEpZm9yKFZ0Pj4+MT09MT8obnI9OSxicj01KTooYW49cmkocm4sYW4pLG5yPWVpLGJyPWlyKSwhX24mJlRuPGRu'@;
put 'KzMyNzY3JiYoVG49KFd0PUVsKFd0LGRuKzMyNzY3KSkubGVuZ3RoKTs7KXt2YXIgSXI9eXMocm4sYW4sbnIpLE1pPVZ0Pj4+MT09MT90bFtJcl06SW5bSXJdO2lmKGFuKz0xNSZNaSwoTWk+Pj49NCk+Pj44JjI1NSl7aWYoMjU2PT1NaSlicmVhazt2YXIgY2k9KE1pLT0yNTcpPDg/MDpNaS00'@;
put 'Pj4yO2NpPjUmJihjaT0wKTt2YXIgQ289ZG4rVXJbTWldO2NpPjAmJihDbys9eXMocm4sYW4sY2kpLGFuKz1jaSksSXI9eXMocm4sYW4sYnIpLGFuKz0xNSYoTWk9VnQ+Pj4xPT0xP0t0W0lyXTpXcltJcl0pO3ZhciBwbz0oTWk+Pj49NCk8ND8wOk1pLTI+PjEsVmk9amlbTWldO2Zvcihwbz4w'@;
put 'JiYoVmkrPXlzKHJuLGFuLHBvKSxhbis9cG8pLCFfbiYmVG48Q28mJihUbj0oV3Q9RWwoV3QsQ28pKS5sZW5ndGgpO2RuPENvOylXdFtkbl09V3RbZG4tVmldLCsrZG59ZWxzZSBXdFtkbisrXT1NaX1lbHNlezcmYW4mJihhbis9OC0oNyZhbikpO3ZhciBacj1yblthbj4+PjNdfHJuWzErKGFu'@;
put 'Pj4+MyldPDw4O2lmKGFuKz0zMiwhX24mJlRuPGRuK1pyJiYoVG49KFd0PUVsKFd0LGRuK1pyKSkubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2Ygcm4uY29weSlybi5jb3B5KFd0LGRuLGFuPj4+MywoYW4+Pj4zKStaciksZG4rPVpyLGFuKz04KlpyO2Vsc2UgZm9yKDtaci0tID4wOylXdFtk'@;
put 'bisrXT1yblthbj4+PjNdLGFuKz04fXJldHVybltfbj9XdDpXdC5zbGljZSgwLGRuKSxhbis3Pj4+M119KHJuLnNsaWNlKHJuLmx8fDApLF9uKTtyZXR1cm4gcm4ubCs9VnRbMV0sVnRbMF19ZnVuY3Rpb24gemkocm4sX24pe2lmKCFybil0aHJvdyBuZXcgRXJyb3IoX24pO3R5cGVvZiBjb25z'@;
put 'b2xlPCJ1IiYmY29uc29sZS5lcnJvcihfbil9ZnVuY3Rpb24gSnIocm4sX24pe3ZhciBhbj1ybjtvbChhbiwwKTt2YXIgZG49e0ZpbGVJbmRleDpbXSxGdWxsUGF0aHM6W119O3VuKGRuLHtyb290Ol9uLnJvb3R9KTtmb3IodmFyIFRuPWFuLmxlbmd0aC00Oyg4MCE9YW5bVG5dfHw3NSE9YW5b'@;
put 'VG4rMV18fDUhPWFuW1RuKzJdfHw2IT1hbltUbiszXSkmJlRuPj0wOyktLVRuO2FuLmw9VG4rNCxhbi5sKz00O3ZhciBucj1hbi5yZWFkX3NoaWZ0KDIpO2FuLmwrPTY7dmFyIGJyPWFuLnJlYWRfc2hpZnQoNCk7Zm9yKGFuLmw9YnIsVG49MDtUbjxucjsrK1RuKXthbi5sKz0yMDt2YXIgWnI9'@;
put 'YW4ucmVhZF9zaGlmdCg0KSxJcj1hbi5yZWFkX3NoaWZ0KDQpLE1pPWFuLnJlYWRfc2hpZnQoMiksY2k9YW4ucmVhZF9zaGlmdCgyKSxDbz1hbi5yZWFkX3NoaWZ0KDIpO2FuLmwrPTg7dmFyIHBvPWFuLnJlYWRfc2hpZnQoNCksVmk9dmUoYW4uc2xpY2UoYW4ubCtNaSxhbi5sK01pK2NpKSk7'@;
put 'YW4ubCs9TWkrY2krQ287dmFyIFVvPWFuLmw7YW4ubD1wbys0LHdzKGFuLFpyLElyLGRuLFZpKSxhbi5sPVVvfXJldHVybiBkbn1mdW5jdGlvbiB3cyhybixfbixhbixWdCxXdCl7cm4ubCs9Mjt2YXIgZG49cm4ucmVhZF9zaGlmdCgyKSxUbj1ybi5yZWFkX3NoaWZ0KDIpLG5yPWZ1bmN0aW9u'@;
put 'IF9lKHJuKXt2YXIgX249NjU1MzUmcm4ucmVhZF9zaGlmdCgyKSxhbj02NTUzNSZybi5yZWFkX3NoaWZ0KDIpLFZ0PW5ldyBEYXRlLFd0PTMxJmFuLGRuPTE1Jihhbj4+Pj01KTthbj4+Pj00LFZ0LnNldE1pbGxpc2Vjb25kcygwKSxWdC5zZXRGdWxsWWVhcihhbisxOTgwKSxWdC5zZXRNb250'@;
put 'aChkbi0xKSxWdC5zZXREYXRlKFd0KTt2YXIgVG49MzEmX24sbnI9NjMmKF9uPj4+PTUpO3JldHVybiBWdC5zZXRIb3Vycyhfbj4+Pj02KSxWdC5zZXRNaW51dGVzKG5yKSxWdC5zZXRTZWNvbmRzKFRuPDwxKSxWdH0ocm4pO2lmKDgyNTcmZG4pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRl'@;
put 'ZCBaSVAgZW5jcnlwdGlvbiIpO2Zvcih2YXIgYnI9cm4ucmVhZF9zaGlmdCg0KSxacj1ybi5yZWFkX3NoaWZ0KDQpLElyPXJuLnJlYWRfc2hpZnQoNCksTWk9cm4ucmVhZF9zaGlmdCgyKSxjaT1ybi5yZWFkX3NoaWZ0KDIpLENvPSIiLHBvPTA7cG88TWk7KytwbylDbys9U3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShybltybi5sKytdKTtpZihjaSl7dmFyIFZpPXZlKHJuLnNsaWNlKHJuLmwscm4ubCtjaSkpOyhWaVsyMTU4OV18fHt9KS5tdCYmKG5yPVZpWzIxNTg5XS5tdCksKChXdHx8e30pWzIxNTg5XXx8e30pLm10JiYobnI9V3RbMjE1ODldLm10KX1ybi5sKz1jaTt2YXIgVW89cm4uc2xp'@;
put 'Y2Uocm4ubCxybi5sK1pyKTtzd2l0Y2goVG4pe2Nhc2UgODpVbz1mdW5jdGlvbiBTbihybixfbil7aWYoIXZyKXJldHVybiBvaShybixfbik7dmFyIFZ0PW5ldygwLHZyLkluZmxhdGVSYXcpLFd0PVZ0Ll9wcm9jZXNzQ2h1bmsocm4uc2xpY2Uocm4ubCksVnQuX2ZpbmlzaEZsdXNoRmxhZyk7'@;
put 'cmV0dXJuIHJuLmwrPVZ0LmJ5dGVzUmVhZCxXdH0ocm4sSXIpO2JyZWFrO2Nhc2UgMDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIENvbXByZXNzaW9uIG1ldGhvZCAiK1RuKX12YXIgdGk9ITE7OCZkbiYmKDEzNDY5NTc2MD09KGJyPXJuLnJlYWRfc2hp'@;
put 'ZnQoNCkpJiYoYnI9cm4ucmVhZF9zaGlmdCg0KSx0aT0hMCksWnI9cm4ucmVhZF9zaGlmdCg0KSxJcj1ybi5yZWFkX3NoaWZ0KDQpKSxaciE9X24mJnppKHRpLCJCYWQgY29tcHJlc3NlZCBzaXplOiAiK19uKyIgIT0gIitaciksSXIhPWFuJiZ6aSh0aSwiQmFkIHVuY29tcHJlc3NlZCBzaXpl'@;
put 'OiAiK2FuKyIgIT0gIitJcik7dmFyIFVsPU9lLmJ1ZihVbywwKTticj4+MCE9VWw+PjAmJnppKHRpLCJCYWQgQ1JDMzIgY2hlY2tzdW06ICIrYnIrIiAhPSAiK1VsKSx6bChWdCxDbyxVbyx7dW5zYWZlOiEwLG10Om5yfSl9ZnVuY3Rpb24gemwocm4sX24sYW4sVnQpe3ZhciBXdD1WdCYmVnQu'@;
put 'dW5zYWZlO1d0fHx1bihybik7dmFyIGRuPSFXdCYmamUuZmluZChybixfbik7aWYoIWRuKXt2YXIgVG49cm4uRnVsbFBhdGhzWzBdO19uLnNsaWNlKDAsVG4ubGVuZ3RoKT09VG4/VG49X246KCIvIiE9VG4uc2xpY2UoLTEpJiYoVG4rPSIvIiksVG49KFRuK19uKS5yZXBsYWNlKCIvLyIsIi8i'@;
put 'KSksZG49e25hbWU6cmUoX24pLHR5cGU6Mn0scm4uRmlsZUluZGV4LnB1c2goZG4pLHJuLkZ1bGxQYXRocy5wdXNoKFRuKSxXdHx8amUudXRpbHMuY2ZiX2djKHJuKX1yZXR1cm4gZG4uY29udGVudD1hbixkbi5zaXplPWFuP2FuLmxlbmd0aDowLFZ0JiYoVnQuQ0xTSUQmJihkbi5jbHNpZD1W'@;
put 'dC5DTFNJRCksVnQubXQmJihkbi5tdD1WdC5tdCksVnQuY3QmJihkbi5jdD1WdC5jdCkpLGRufXJldHVybiBQLmZpbmQ9ZnVuY3Rpb24gZXIocm4sX24pe3ZhciBhbj1ybi5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKGJyKXtyZXR1cm4gYnIudG9VcHBlckNhc2UoKX0pLFZ0PWFuLm1hcChmdW5j'@;
put 'dGlvbihicil7dmFyIFpyPWJyLnNwbGl0KCIvIik7cmV0dXJuIFpyW1pyLmxlbmd0aC0oIi8iPT1ici5zbGljZSgtMSk/MjoxKV19KSxXdD0hMTs0Nz09PV9uLmNoYXJDb2RlQXQoMCk/KFd0PSEwLF9uPWFuWzBdLnNsaWNlKDAsLTEpK19uKTpXdD0tMSE9PV9uLmluZGV4T2YoIi8iKTt2YXIg'@;
put 'ZG49X24udG9VcHBlckNhc2UoKSxUbj0hMD09PVd0P2FuLmluZGV4T2YoZG4pOlZ0LmluZGV4T2YoZG4pO2lmKC0xIT09VG4pcmV0dXJuIHJuLkZpbGVJbmRleFtUbl07dmFyIG5yPSFkbi5tYXRjaChwKTtmb3IoZG49ZG4ucmVwbGFjZSh2LCIiKSxuciYmKGRuPWRuLnJlcGxhY2UocCwiISIp'@;
put 'KSxUbj0wO1RuPGFuLmxlbmd0aDsrK1RuKWlmKChucj9hbltUbl0ucmVwbGFjZShwLCIhIik6YW5bVG5dKS5yZXBsYWNlKHYsIiIpPT1kbnx8KG5yP1Z0W1RuXS5yZXBsYWNlKHAsIiEiKTpWdFtUbl0pLnJlcGxhY2UodiwiIik9PWRuKXJldHVybiBybi5GaWxlSW5kZXhbVG5dO3JldHVybiBu'@;
put 'dWxsfSxQLnJlYWQ9ZnVuY3Rpb24gS24ocm4sX24pe3N3aXRjaChfbiYmX24udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6cmV0dXJuIGZ1bmN0aW9uIHBuKHJuLF9uKXtyZXR1cm4gSGUoKSxCZShTZS5yZWFkRmlsZVN5bmMocm4pLF9uKX0ocm4sX24pO2Nhc2UiYmFzZTY0IjpyZXR1cm4g'@;
put 'QmUoRChzZS5kZWNvZGUocm4pKSxfbik7Y2FzZSJiaW5hcnkiOnJldHVybiBCZShEKHJuKSxfbil9cmV0dXJuIEJlKHJuLF9uKX0sUC5wYXJzZT1CZSxQLndyaXRlPWZ1bmN0aW9uIEFuKHJuLF9uKXt2YXIgYW49a24ocm4sX24pO3N3aXRjaChfbiYmX24udHlwZSl7Y2FzZSJmaWxlIjpyZXR1'@;
put 'cm4gSGUoKSxTZS53cml0ZUZpbGVTeW5jKF9uLmZpbGVuYW1lLGFuKSxhbjtjYXNlImJpbmFyeSI6cmV0dXJuIHVyKGFuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNlLmVuY29kZSh1cihhbikpfXJldHVybiBhbn0sUC53cml0ZUZpbGU9ZnVuY3Rpb24gUXIocm4sX24sYW4pe0hlKCk7dmFyIFZ0'@;
put 'PWtuKHJuLGFuKTtTZS53cml0ZUZpbGVTeW5jKF9uLFZ0KX0sUC51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiBtbChybil7dmFyIF9uPXt9O3JldHVybiB1bihfbixybiksX259LGNmYl9hZGQ6emwsY2ZiX2RlbDpmdW5jdGlvbiBoYShybixfbil7dW4ocm4pO3ZhciBhbj1qZS5maW5kKHJuLF9u'@;
put 'KTtpZihhbilmb3IodmFyIFZ0PTA7VnQ8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK1Z0KWlmKHJuLkZpbGVJbmRleFtWdF09PWFuKXJldHVybiBybi5GaWxlSW5kZXguc3BsaWNlKFZ0LDEpLHJuLkZ1bGxQYXRocy5zcGxpY2UoVnQsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24geWYo'@;
put 'cm4sX24sYW4pe3VuKHJuKTt2YXIgVnQ9amUuZmluZChybixfbik7aWYoVnQpZm9yKHZhciBXdD0wO1d0PHJuLkZpbGVJbmRleC5sZW5ndGg7KytXdClpZihybi5GaWxlSW5kZXhbV3RdPT1WdClyZXR1cm4gcm4uRmlsZUluZGV4W1d0XS5uYW1lPXJlKGFuKSxybi5GdWxsUGF0aHNbV3RdPWFu'@;
put 'LCEwO3JldHVybiExfSxjZmJfZ2M6ZnVuY3Rpb24gb3Aocm4pe3puKHJuLCEwKX0sUmVhZFNoaWZ0OkhhLENoZWNrRmllbGQ6QmgscHJlcF9ibG9iOm9sLGJjb25jYXQ6Uyx1c2VfemxpYjpmdW5jdGlvbiBycihybil7dHJ5e3ZhciBhbj1uZXcoMCxybi5JbmZsYXRlUmF3KTtpZihhbi5fcHJv'@;
put 'Y2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxhbi5fZmluaXNoRmx1c2hGbGFnKSwhYW4uYnl0ZXNSZWFkKXRocm93IG5ldyBFcnJvcigiemxpYiBkb2VzIG5vdCBleHBvc2UgYnl0ZXNSZWFkIik7dnI9cm59Y2F0Y2goVnQpe2NvbnNvbGUuZXJyb3IoImNhbm5vdCB1c2UgbmF0aXZl'@;
put 'IHpsaWI6ICIrKFZ0Lm1lc3NhZ2V8fFZ0KSl9fSxfZGVmbGF0ZVJhdzpnbCxfaW5mbGF0ZVJhdzpvaSxjb25zdHM6SWl9LFB9KCk7dHJ5e1dlPUYoNzg3NzMpfWNhdGNoe31mdW5jdGlvbiBLZSh5KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHk/SCh5KTpBcnJheS5pc0FycmF5KHkpP2Z1bmN0'@;
put 'aW9uIGcoeSl7aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeSl9KHkpOnl9ZnVuY3Rpb24gWWUoeSxQLEkpe2lmKHR5cGVvZiBXZTwidSImJldlLndyaXRlRmlsZVN5bmMpcmV0dXJuIEk/V2Uud3Jp'@;
put 'dGVGaWxlU3luYyh5LFAsSSk6V2Uud3JpdGVGaWxlU3luYyh5LFApO3ZhciBRPSJ1dGY4Ij09ST9JbyhQKTpQO2lmKHR5cGVvZiBJRV9TYXZlRmlsZTwidSIpcmV0dXJuIElFX1NhdmVGaWxlKFEseSk7aWYodHlwZW9mIEJsb2I8InUiKXt2YXIgcmU9bmV3IEJsb2IoW0tlKFEpXSx7dHlwZToi'@;
put 'YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn0pO2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IubXNTYXZlQmxvYilyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZUJsb2IocmUseSk7aWYodHlwZW9mIHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhyZSx5KTtpZih0eXBlb2YgVVJMPCJ1'@;
put 'IiYmdHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudCYmVVJMLmNyZWF0ZU9iamVjdFVSTCl7dmFyIGdlPVVSTC5jcmVhdGVPYmplY3RVUkwocmUpO2lmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiYiZnVuY3Rpb24iPT10eXBlb2YoY2hyb21lLmRvd25sb2Fkc3x8'@;
put 'e30pLmRvd25sb2FkKXJldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKGdlKX0sNmU0KSxjaHJvbWUuZG93bmxvYWRzLmRvd25sb2FkKHt1cmw6Z2UsZmlsZW5hbWU6eSxzYXZl'@;
put 'QXM6ITB9KTt2YXIgX2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKG51bGwhPV9lLmRvd25sb2FkKXJldHVybiBfZS5kb3dubG9hZD15LF9lLmhyZWY9Z2UsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfZSksX2UuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKF9l'@;
put 'KSxVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKGdlKX0sNmU0KSxnZX19aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgdmU9'@;
put 'RmlsZSh5KTtyZXR1cm4gdmUub3BlbigidyIpLHZlLmVuY29kaW5nPSJiaW5hcnkiLEFycmF5LmlzQXJyYXkoUCkmJihQPU4oUCkpLHZlLndyaXRlKFApLHZlLmNsb3NlKCksUH1jYXRjaChTZSl7aWYoIVNlLm1lc3NhZ2V8fCFTZS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IFNl'@;
put 'fXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNhdmUgZmlsZSAiK3kpfWZ1bmN0aW9uIGx0KHkpe2Zvcih2YXIgUD1PYmplY3Qua2V5cyh5KSxJPVtdLFE9MDtRPFAubGVuZ3RoOysrUSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxQW1FdKSYmSS5wdXNoKFBbUV0pO3Jl'@;
put 'dHVybiBJfWZ1bmN0aW9uIFBlKHksUCl7Zm9yKHZhciBJPVtdLFE9bHQoeSkscmU9MDtyZSE9PVEubGVuZ3RoOysrcmUpbnVsbD09SVt5W1FbcmVdXVtQXV0mJihJW3lbUVtyZV1dW1BdXT1RW3JlXSk7cmV0dXJuIEl9ZnVuY3Rpb24gYmUoeSl7Zm9yKHZhciBQPVtdLEk9bHQoeSksUT0wO1Eh'@;
put 'PT1JLmxlbmd0aDsrK1EpUFt5W0lbUV1dXT1JW1FdO3JldHVybiBQfWZ1bmN0aW9uIEFlKHkpe2Zvcih2YXIgUD1bXSxJPWx0KHkpLFE9MDtRIT09SS5sZW5ndGg7KytRKVBbeVtJW1FdXV09cGFyc2VJbnQoSVtRXSwxMCk7cmV0dXJuIFB9dmFyIFVlLGh0LHFlPW5ldyBEYXRlKDE4OTksMTEs'@;
put 'MzAsMCwwLDApLFhlPTA7ZnVuY3Rpb24gTWUoKXtYZT1xZS5nZXRUaW1lKCkrNmU0KigobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpvbmVPZmZzZXQoKSksVWU9ZnVuY3Rpb24oUCxJKXt2YXIgUT1QLmdldFRpbWUoKTtyZXR1cm4gSSYmKFEtPTEyNjMxNjhlNSks'@;
put 'KFEtWGUpLzg2NGU1fSxodD1mdW5jdGlvbihQKXt2YXIgST1uZXcgRGF0ZTtyZXR1cm4gSS5zZXRUaW1lKDI0KlAqNjAqNjAqMWUzK1hlKSxJfX1mdW5jdGlvbiBvdCh5KXt2YXIgUD0wLEk9MCxRPSExLHJlPXkubWF0Y2goL1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAtOVwuXStEKT9U'@;
put 'KFswLTlcLl0rSCk/KFswLTlcLl0rTSk/KFswLTlcLl0rUyk/Lyk7aWYoIXJlKXRocm93IG5ldyBFcnJvcigifCIreSsifCBpcyBub3QgYW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgZ2U9MTtnZSE9cmUubGVuZ3RoOysrZ2UpaWYocmVbZ2VdKXtzd2l0Y2goST0xLGdlPjMmJihRPSEw'@;
put 'KSxyZVtnZV0uc2xpY2UocmVbZ2VdLmxlbmd0aC0xKSl7Y2FzZSJZIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogIityZVtnZV0uc2xpY2UocmVbZ2VdLmxlbmd0aC0xKSk7Y2FzZSJEIjpJKj0yNDtjYXNlIkgiOkkqPTYwO2Nhc2UiTSI6aWYoIVEp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtJKj02MH1QKz1JKnBhcnNlSW50KHJlW2dlXSwxMCl9cmV0dXJuIFB9TWUoKTt2YXIgdXQ9bmV3IERhdGUoIjIwMTctMDItMTlUMTk6MDY6MDkuMDAwWiIpO2lzTmFOKHV0LmdldEZ1bGxZZWFyKCkp'@;
put 'JiYodXQ9bmV3IERhdGUoIjIvMTkvMTciKSk7dmFyIE10PTIwMTc9PXV0LmdldEZ1bGxZZWFyKCk7ZnVuY3Rpb24gSHQoeSxQKXt2YXIgST1uZXcgRGF0ZSh5KTtpZihNdClyZXR1cm4gUD4wP0kuc2V0VGltZShJLmdldFRpbWUoKSs2MCpJLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKTpQPDAm'@;
put 'Jkkuc2V0VGltZShJLmdldFRpbWUoKS02MCpJLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSxJO2lmKHkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiB5O2lmKDE5MTc9PXV0LmdldEZ1bGxZZWFyKCkmJiFpc05hTihJLmdldEZ1bGxZZWFyKCkpKXt2YXIgUT1JLmdldEZ1bGxZZWFyKCk7cmV0dXJu'@;
put 'IHkuaW5kZXhPZigiIitRKT4tMXx8SS5zZXRGdWxsWWVhcihJLmdldEZ1bGxZZWFyKCkrMTAwKSxJfXZhciByZT15Lm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIwIiwiMCJdLGdlPW5ldyBEYXRlKCtyZVswXSwrcmVbMV0tMSwrcmVbMl0sK3JlWzNdfHwwLCtyZVs0XXx8'@;
put 'MCwrcmVbNV18fDApO3JldHVybiB5LmluZGV4T2YoIloiKT4tMSYmKGdlPW5ldyBEYXRlKGdlLmdldFRpbWUoKS02MCpnZS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLGdlfWZ1bmN0aW9uIFB0KHkpe2Zvcih2YXIgUD0iIixJPTA7SSE9eS5sZW5ndGg7KytJKVArPVN0cmluZy5mcm9tQ2hh'@;
put 'ckNvZGUoeVtJXSk7cmV0dXJuIFB9ZnVuY3Rpb24gb24oeSl7aWYoIm9iamVjdCIhPXR5cGVvZiB5fHxudWxsPT15KXJldHVybiB5O2lmKHkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZSh5LmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gZnVuY3Rpb24gQ24o'@;
put 'eSl7Zm9yKHZhciBQPVtdLEk9MDtJPHkubGVuZ3RoOysrSSl7dmFyIFE9eVtJXTsib2JqZWN0Ij09dHlwZW9mIFE/UFtJXT1vbihRKTpudWxsIT1RJiYoUFtJXT1RKX1yZXR1cm4gUH0oeSk7dmFyIFA9e307Zm9yKHZhciBJIGluIHkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKHksSSkmJihQW0ldPW9uKHlbSV0pKTtyZXR1cm4gUH1mdW5jdGlvbiBVdCh5LFApe2lmKCJvYmplY3QiIT10eXBlb2YgUHx8bnVsbD09UClyZXR1cm4geTtmb3IodmFyIEkgaW4gUClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxJKSYmKHlbSV09b24oUFtJXSkp'@;
put 'O3JldHVybiB5fWZ1bmN0aW9uIGJuKHksUCl7Zm9yKHZhciBJPSIiO0kubGVuZ3RoPFA7KUkrPXk7cmV0dXJuIEl9ZnVuY3Rpb24gV24oeSl7dmFyIFA9TnVtYmVyKHkpO2lmKCFpc05hTihQKSlyZXR1cm4gaXNGaW5pdGUoUCk/UDpOYU47aWYoIS9cZC8udGVzdCh5KSlyZXR1cm4gUDt2YXIg'@;
put 'ST0xLFE9eS5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gSSo9MTAwLCIifSk7cmV0dXJuIGlzTmFOKFA9TnVtYmVyKFEpKSYmKFE9US5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlv'@;
put 'bihyZSxnZSl7cmV0dXJuIEk9LUksZ2V9KSxpc05hTihQPU51bWJlcihRKSkpP1A6UC9JfWZ1bmN0aW9uIGVuKHkpe3ZhciBQPW5ldyBEYXRlKHkpLEk9bmV3IERhdGUoTmFOKSxRPVAuZ2V0WWVhcigpLHJlPVAuZ2V0TW9udGgoKSxnZT1QLmdldERhdGUoKTtyZXR1cm4gaXNOYU4oZ2UpfHxR'@;
put 'PDB8fFE+ODA5OT9JOihyZT4wfHxnZT4xKSYmMTAxIT1RfHx5LnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLyk/UDp5Lm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/STpQfWZ1bmN0aW9uICRuKHksUCl7aWYoUCYmUC5y'@;
put 'YXcpcmV0dXJue3Q6InMiLHY6eX07aWYoIXkpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT15KXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09eSlyZXR1cm57dDoiYiIsdjohMX07dmFyIEk9IiIsUT1OdW1iZXIoeSk7aWYoaXNGaW5pdGUoUSkpcmV0dXJue3Q6Im4iLHY6UX07aWYo'@;
put 'aXNOYU4oUSkmJi9cZC8udGVzdCh5KSl7dmFyIHJlPTEsZ2U9eS5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csZnVuY3Rpb24obnQsZHQsQ3Qpe3JldHVybiBJfHwoST0iIywjIzAiKSxkdCtDdH0pLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9cLlxkKi8sZnVuY3Rpb24obnQpe0l8fChJ'@;
put 'PSIwIiksSSs9Ii4iO2Zvcih2YXIgZHQ9MjtkdDw9bnQubGVuZ3RoOysrZHQpSSs9IjAiO3JldHVybiBudH0pLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKj0xMDAsSXx8KEk9IjAiKSxJKz0iJSIsIiJ9KTtpZighaXNOYU4oUT1OdW1iZXIoZ2UpKSlyZXR1cm57dDoibiIs'@;
put 'djpRL3JlLHo6SX07aWYoZ2U9Z2UucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24obnQsZHQpe3JldHVybiByZT0tcmUsZHR9KSwhaXNOYU4oUT1OdW1iZXIoZ2UpKSlyZXR1cm57dDoibiIsdjpRL3JlLHo6KEl8fCIwIikrIl8pOygiKyhJfHwiMCIpKyIpO0AifX1lOmlmKCFQfHwhUC5y'@;
put 'YXdEYXRlcyl7dmFyIF9lPVAmJlAuY2VsbERhdGVzLHZlPW5ldyBEYXRlKHkpLEhlPXZlLmdldFllYXIoKSxCZT12ZS5nZXRNb250aCgpLEdlPXZlLmdldERhdGUoKTtpZihpc05hTihHZSl8fEhlPDB8fEhlPjgwOTkpYnJlYWsgZTtpZigoQmU+MHx8R2U+MSkmJjEwMSE9SGUpcmV0dXJue3Q6'@;
put 'X2U/ImQiOiJuIix2Ol9lP3ZlOlVlKHZlKSx6OlAuZGF0ZU5GfHx3Ll90YWJsZVsxNF19O2lmKHkudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpfZT8iZCI6Im4iLHY6X2U/dmU6VWUodmUpLHo6'@;
put 'UC5kYXRlTkZ8fHcuX3RhYmxlWzE0XX07aWYoeS5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIHZlfXJldHVybnt0OiJzIix2Onl9fXZhciB6dCxIbj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBobih5KXtyZXR1cm4gbnVsbCE9eSYm'@;
put 'IXl9ZnVuY3Rpb24gd3QoeSl7cmV0dXJuIHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKX1mdW5jdGlvbiBYdCh5KXtyZXR1cm4geT95LmRhdGE/VSh5LmRhdGEpOnkuYXNOb2RlQnVmZmVyJiZoZT9VKHkuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTp5LmFz'@;
put 'QmluYXJ5P1UoeS5hc0JpbmFyeSgpKTp5Ll9kYXRhJiZ5Ll9kYXRhLmdldENvbnRlbnQ/VShQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5Ll9kYXRhLmdldENvbnRlbnQoKSwwKSkpOnkuY29udGVudCYmeS50eXBlP1UoUHQoeS5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIF90'@;
put 'KHkpe2lmKCF5KXJldHVybiBudWxsO2lmKHkuZGF0YSlyZXR1cm4gQih5LmRhdGEpO2lmKHkuYXNOb2RlQnVmZmVyJiZoZSlyZXR1cm4geS5hc05vZGVCdWZmZXIoKTtpZih5Ll9kYXRhJiZ5Ll9kYXRhLmdldENvbnRlbnQpe3ZhciBQPXkuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJp'@;
put 'bmciPT10eXBlb2YgUD9CKFApOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFApfXJldHVybiB5LmNvbnRlbnQmJnkudHlwZT95LmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBtbih5LFApe2Zvcih2YXIgST15LkZ1bGxQYXRoc3x8bHQoeS5maWxlcyksUT1QLnRvTG93ZXJDYXNlKCkscmU9US5y'@;
put 'ZXBsYWNlKC9cLy9nLCJcXCIpLGdlPTA7Z2U8SS5sZW5ndGg7KytnZSl7dmFyIF9lPUlbZ2VdLnRvTG93ZXJDYXNlKCk7aWYoUT09X2V8fHJlPT1fZSlyZXR1cm4geS5maWxlc1tJW2dlXV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gcnQoeSxQKXt2YXIgST1tbih5LFApO2lmKG51bGw9PUkpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrUCsiIGluIHppcCIpO3JldHVybiBJfWZ1bmN0aW9uIEx0KHksUCxJKXtpZighSSlyZXR1cm4gZnVuY3Rpb24gTnQoeSl7cmV0dXJuIHkmJiIuYmluIj09PXkubmFtZS5zbGljZSgtNCk/X3QoeSk6WHQoeSl9KHJ0KHksUCkpO2lmKCFQ'@;
put 'KXJldHVybiBudWxsO3RyeXtyZXR1cm4gTHQoeSxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gUXQoeSxQLEkpe2lmKCFJKXJldHVybiBYdChydCh5LFApKTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFF0KHksUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIER0KHks'@;
put 'UCxJKXtpZighSSlyZXR1cm4gX3QocnQoeSxQKSk7aWYoIVApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBEdCh5LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBZdCh5LFAsSSl7eS5GdWxsUGF0aHM/amUudXRpbHMuY2ZiX2FkZCh5LFAsSSk6eS5maWxlKFAsSSl9ZnVuY3Rpb24geW4o'@;
put 'KXtyZXR1cm4genQ/bmV3IHp0OmplLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiB4bih5LFApe3ZhciBJO2lmKHp0KXN3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpJPW5ldyB6dCh5LHtiYXNlNjQ6ITB9KTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6ST1uZXcgenQoeSx7YmFz'@;
put 'ZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOkk9bmV3IHp0KHkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9ZWxzZSBzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6ST1qZS5yZWFkKHkse3R5cGU6ImJhc2U2NCJ9KTticmVh'@;
put 'aztjYXNlImJpbmFyeSI6ST1qZS5yZWFkKHkse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6ST1qZS5yZWFkKHkse3R5cGU6ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJl'@;
put 'dHVybiBJfWZ1bmN0aW9uIHNuKHksUCl7aWYoIi8iPT15LmNoYXJBdCgwKSlyZXR1cm4geS5zbGljZSgxKTt2YXIgST1QLnNwbGl0KCIvIik7Ii8iIT1QLnNsaWNlKC0xKSYmSS5wb3AoKTtmb3IodmFyIFE9eS5zcGxpdCgiLyIpOzAhPT1RLmxlbmd0aDspe3ZhciByZT1RLnNoaWZ0KCk7Ii4u'@;
put 'Ij09PXJlP0kucG9wKCk6Ii4iIT09cmUmJkkucHVzaChyZSl9cmV0dXJuIEkuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoenQ9SlNaaXBTeW5jKSxhdC5leHBvcnRzJiZ0eXBlb2YgenQ+InUiJiYoenQ9Rig3NTQ0NikpO3ZhciBCbj0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv'@;
put 'ZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLFJuPS8oPzpbXiJccz8+XC9dKylccyo9XHMqKCg/OiIpKD86W14iXSo/KSg/OiIpfCg/OicpKD86W14nXSo/KSg/OicpfCg/OlteJyI+XHNdKykpL2csJHQ9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/Plwv'@;
put 'XStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO0JuLm1hdGNoKCR0KXx8KCR0PS88W14+XSo+L2cpO3ZhciBGbj0vPFx3KjovLG5pPS88KFwvPylcdys6LztmdW5jdGlvbiBsbih5LFAsSSl7Zm9yKHZhciBRPXt9LHJlPTAsZ2U9MDtyZSE9PXku'@;
put 'bGVuZ3RoJiYzMiE9PShnZT15LmNoYXJDb2RlQXQocmUpKSYmMTAhPT1nZSYmMTMhPT1nZTsrK3JlKTtpZihQfHwoUVswXT15LnNsaWNlKDAscmUpKSxyZT09PXkubGVuZ3RoKXJldHVybiBRO3ZhciBfZT15Lm1hdGNoKFJuKSx2ZT0wLFNlPSIiLEhlPTAsQmU9IiIsR2U9IiIsbnQ9MTtpZihf'@;
put 'ZSlmb3IoSGU9MDtIZSE9X2UubGVuZ3RoOysrSGUpe2ZvcihHZT1fZVtIZV0sZ2U9MDtnZSE9R2UubGVuZ3RoJiY2MSE9PUdlLmNoYXJDb2RlQXQoZ2UpOysrZ2UpO2ZvcihCZT1HZS5zbGljZSgwLGdlKS50cmltKCk7MzI9PUdlLmNoYXJDb2RlQXQoZ2UrMSk7KSsrZ2U7Zm9yKG50PTM0PT0o'@;
put 'cmU9R2UuY2hhckNvZGVBdChnZSsxKSl8fDM5PT1yZT8xOjAsU2U9R2Uuc2xpY2UoZ2UrMStudCxHZS5sZW5ndGgtbnQpLHZlPTA7dmUhPUJlLmxlbmd0aCYmNTghPT1CZS5jaGFyQ29kZUF0KHZlKTsrK3ZlKTtpZih2ZT09PUJlLmxlbmd0aClCZS5pbmRleE9mKCJfIik+MCYmKEJlPUJlLnNs'@;
put 'aWNlKDAsQmUuaW5kZXhPZigiXyIpKSksUVtCZV09U2UsSXx8KFFbQmUudG9Mb3dlckNhc2UoKV09U2UpO2Vsc2V7dmFyIGR0PSg1PT09dmUmJiJ4bWxucyI9PT1CZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK0JlLnNsaWNlKHZlKzEpO2lmKFFbZHRdJiYiZXh0Ij09QmUuc2xpY2UodmUtMyx2'@;
put 'ZSkpY29udGludWU7UVtkdF09U2UsSXx8KFFbZHQudG9Mb3dlckNhc2UoKV09U2UpfX1yZXR1cm4gUX1mdW5jdGlvbiBqbih5KXtyZXR1cm4geS5yZXBsYWNlKG5pLCI8JDEiKX12YXIgcXI9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6'@;
put 'IiYifSxnaT1iZShxcikseHI9ZnVuY3Rpb24oKXt2YXIgeT0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLFA9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gSShRKXt2YXIgcmU9USsiIixnZT1yZS5pbmRleE9mKCI8IVtDREFUQVsi'@;
put 'KTtpZigtMT09Z2UpcmV0dXJuIHJlLnJlcGxhY2UoeSxmdW5jdGlvbih2ZSxTZSl7cmV0dXJuIHFyW3ZlXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChTZSx2ZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8dmV9KS5yZXBsYWNlKFAsZnVuY3Rpb24odmUsU2Upe3JldHVybiBTdHJp'@;
put 'bmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFNlLDE2KSl9KTt2YXIgX2U9cmUuaW5kZXhPZigiXV0+Iik7cmV0dXJuIEkocmUuc2xpY2UoMCxnZSkpK3JlLnNsaWNlKGdlKzksX2UpK0kocmUuc2xpY2UoX2UrMykpfX0oKSxVaT0vWyY8PiciXS9nLEtyPS9bXHUwMDAwLVx1MDAwOFx1MDAwYi1c'@;
put 'dTAwMWZdL2csbm89L194WzAtOWEtZkEtRl17NH1fL2c7ZnVuY3Rpb24gSHIoeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2Uobm8sIl94MDA1RiQmIikucmVwbGFjZShVaSxmdW5jdGlvbihJKXtyZXR1cm4gZ2lbSV19KS5yZXBsYWNlKEtyLGZ1bmN0aW9uKEkpe3JldHVybiJfeCIrKCIwMDAiK0ku'@;
put 'Y2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiXyJ9KX1mdW5jdGlvbiBxaSh5KXtyZXR1cm4gSHIoeSkucmVwbGFjZSgvXG4vZywiX3gwMDBhXyIpfWZ1bmN0aW9uIEppKHkpe3JldHVybiBIcih5KS5yZXBsYWNlKC8gL2csIl94MDAyMF8iKX12YXIgYW89L1tcdTAwMDAt'@;
put 'XHUwMDFmXS9nO2Z1bmN0aW9uIHJvKHkpe3JldHVybih5KyIiKS5yZXBsYWNlKFVpLGZ1bmN0aW9uKEkpe3JldHVybiBnaVtJXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShhbyxmdW5jdGlvbihJKXtyZXR1cm4iJiN4IisoIjAwMCIrSS5jaGFyQ29kZUF0KDApLnRvU3RyaW5n'@;
put 'KDE2KSkuc2xpY2UoLTQpKyI7In0pfWZ1bmN0aW9uIGlvKHkpe3JldHVybih5KyIiKS5yZXBsYWNlKFVpLGZ1bmN0aW9uKEkpe3JldHVybiBnaVtJXX0pLnJlcGxhY2UoYW8sZnVuY3Rpb24oSSl7cmV0dXJuIiYjeCIrSS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgp'@;
put 'KyI7In0pfXZhciBHaT1mdW5jdGlvbigpe3ZhciB5PS8mIyhcZCspOy9nO2Z1bmN0aW9uIFAoSSxRKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChRLDEwKSl9cmV0dXJuIGZ1bmN0aW9uKFEpe3JldHVybiBRLnJlcGxhY2UoeSxQKX19KCksaG89ZnVuY3Rpb24oUCl7cmV0'@;
put 'dXJuIFAucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfTtmdW5jdGlvbiB5cih5KXtzd2l0Y2goeSl7Y2FzZSAxOmNhc2UhMDpjYXNlIjEiOmNhc2UidHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgUGk9ZnVuY3Rpb24oUCl7Zm9yKHZhciBJ'@;
put 'PSIiLFE9MCxyZT0wLGdlPTAsX2U9MCx2ZT0wLFNlPTA7UTxQLmxlbmd0aDspKHJlPVAuY2hhckNvZGVBdChRKyspKTwxMjg/SSs9U3RyaW5nLmZyb21DaGFyQ29kZShyZSk6KGdlPVAuY2hhckNvZGVBdChRKyspLHJlPjE5MSYmcmU8MjI0Pyh2ZT0oMzEmcmUpPDw2LHZlfD02MyZnZSxJKz1T'@;
put 'dHJpbmcuZnJvbUNoYXJDb2RlKHZlKSk6KF9lPVAuY2hhckNvZGVBdChRKyspLHJlPDI0MD9JKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZyZSk8PDEyfCg2MyZnZSk8PDZ8NjMmX2UpOihTZT0oKDcmcmUpPDwxOHwoNjMmZ2UpPDwxMnwoNjMmX2UpPDw2fDYzJih2ZT1QLmNoYXJDb2RlQXQo'@;
put 'USsrKSkpLTY1NTM2LEkrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKFNlPj4+MTAmMTAyMykpLEkrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmU2UpKSkpKTtyZXR1cm4gSX0sSW89ZnVuY3Rpb24oeSl7Zm9yKHZhciBQPVtdLEk9MCxRPTAscmU9MDtJPHkubGVuZ3RoOylz'@;
put 'd2l0Y2goUT15LmNoYXJDb2RlQXQoSSsrKSwhMCl7Y2FzZSBRPDEyODpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShRKSk7YnJlYWs7Y2FzZSBRPDIwNDg6UC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhRPj42KSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMm'@;
put 'USkpKTticmVhaztjYXNlIFE+PTU1Mjk2JiZRPDU3MzQ0OlEtPTU1Mjk2LHJlPXkuY2hhckNvZGVBdChJKyspLTU2MzIwKyhRPDwxMCksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhyZT4+MTgmNykpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKHJlPj4xMiY2Mykp'@;
put 'KSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKHJlPj42JjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmcmUpKSk7YnJlYWs7ZGVmYXVsdDpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKFE+PjEyKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJD'@;
put 'b2RlKDEyOCsoUT4+NiY2MykpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlEpKSl9cmV0dXJuIFAuam9pbigiIil9O2lmKGhlKXt2YXIgaHM9ZnVuY3Rpb24oUCl7dmFyIFEscmUsU2UsST1CdWZmZXIuYWxsb2MoMipQLmxlbmd0aCksZ2U9MSxfZT0wLHZlPTA7Zm9yKHJl'@;
put 'PTA7cmU8UC5sZW5ndGg7cmUrPWdlKWdlPTEsKFNlPVAuY2hhckNvZGVBdChyZSkpPDEyOD9RPVNlOlNlPDIyND8oUT02NCooMzEmU2UpKyg2MyZQLmNoYXJDb2RlQXQocmUrMSkpLGdlPTIpOlNlPDI0MD8oUT00MDk2KigxNSZTZSkrNjQqKDYzJlAuY2hhckNvZGVBdChyZSsxKSkrKDYzJlAu'@;
put 'Y2hhckNvZGVBdChyZSsyKSksZ2U9Myk6KGdlPTQsUT0yNjIxNDQqKDcmU2UpKzQwOTYqKDYzJlAuY2hhckNvZGVBdChyZSsxKSkrNjQqKDYzJlAuY2hhckNvZGVBdChyZSsyKSkrKDYzJlAuY2hhckNvZGVBdChyZSszKSksdmU9NTUyOTYrKChRLT02NTUzNik+Pj4xMCYxMDIzKSxRPTU2MzIw'@;
put 'KygxMDIzJlEpKSwwIT09dmUmJihJW19lKytdPTI1NSZ2ZSxJW19lKytdPXZlPj4+OCx2ZT0wKSxJW19lKytdPVElMjU2LElbX2UrK109UT4+Pjg7cmV0dXJuIEkuc2xpY2UoMCxfZSkudG9TdHJpbmcoInVjczIiKX0scnM9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhh'@;
put 'MyI7UGkocnMpPT1ocyhycykmJihQaT1ocyk7dmFyIFJjPWZ1bmN0aW9uKFApe3JldHVybiB1ZShQLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtQaShycyk9PVJjKHJzKSYmKFBpPVJjKSxJbz1mdW5jdGlvbih5KXtyZXR1cm4gdWUoeSwidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19'@;
put 'dmFyIHksdWw9KHk9e30sZnVuY3Rpb24oSSxRKXt2YXIgcmU9SSsifCIrKFF8fCIiKTtyZXR1cm4geVtyZV0/eVtyZV06eVtyZV09bmV3IFJlZ0V4cCgiPCg/Olxcdys6KT8iK0krJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycr'@;
put 'SSsiPiIsUXx8IiIpfSksT2M9ZnVuY3Rpb24oKXt2YXIgeT1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxbImFwb3MiLCInIl0sWyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuW25ldyBSZWdFeHAoIiYi'@;
put 'K1BbMF0rIjsiLCJpZyIpLFBbMV1dfSk7cmV0dXJuIGZ1bmN0aW9uKEkpe2Zvcih2YXIgUT1JLnJlcGxhY2UoL15bXHRcblxyIF0rLywiIikucmVwbGFjZSgvW1x0XG5cciBdKyQvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKS5yZXBsYWNlKC88XHMqW2JCXVtyUl1ccypcLz8+L2cs'@;
put 'IlxuIikucmVwbGFjZSgvPFtePl0qPi9nLCIiKSxyZT0wO3JlPHkubGVuZ3RoOysrcmUpUT1RLnJlcGxhY2UoeVtyZV1bMF0seVtyZV1bMV0pO3JldHVybiBRfX0oKSxOMD1mdW5jdGlvbigpe3ZhciB5PXt9O3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gdm9pZCAwIT09eVtJXT95W0ldOnlb'@;
put 'SV09bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitJKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIrSSsiPiIsImciKX19KCksczM9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2csazI9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBlMCh5LFApe3ZhciBJPWxuKHkpLFE9eS5tYXRj'@;
put 'aChOMChJLmJhc2VUeXBlKSl8fFtdLHJlPVtdO2lmKFEubGVuZ3RoIT1JLnNpemUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3IgbGVuZ3RoICIrUS5sZW5ndGgrIiAhPSAiK0kuc2l6ZSk7cmV0dXJuIHJlfXJldHVybiBRLmZvckVhY2goZnVuY3Rpb24oZ2Up'@;
put 'e3ZhciBfZT1nZS5yZXBsYWNlKHMzLCIiKS5tYXRjaChrMik7X2UmJnJlLnB1c2goe3Y6UGkoX2VbMl0pLHQ6X2VbMV19KX0pLHJlfXZhciB4dT0vKF5cc3xccyR8XG4pLztmdW5jdGlvbiBmcyh5LFApe3JldHVybiI8Iit5KyhQLm1hdGNoKHh1KT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoi'@;
put 'IikrIj4iK1ArIjwvIit5KyI+In1mdW5jdGlvbiBQYSh5KXtyZXR1cm4gbHQoeSkubWFwKGZ1bmN0aW9uKFApe3JldHVybiIgIitQKyc9IicreVtQXSsnIid9KS5qb2luKCIiKX1mdW5jdGlvbiBTcih5LFAsSSl7cmV0dXJuIjwiK3krKG51bGwhPUk/UGEoSSk6IiIpKyhudWxsIT1QPyhQLm1h'@;
put 'dGNoKHh1KT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK1ArIjwvIit5OiIvIikrIj4ifWZ1bmN0aW9uIFBoKHksUCl7dHJ5e3JldHVybiB5LnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCovLCIiKX1jYXRjaChJKXtpZihQKXRocm93IEl9cmV0dXJuIiJ9dmFyIEFyLGJjLGlz'@;
put 'PXtkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2Vs'@;
put 'LzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoi'@;
put 'aHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLG1haW46WyJo'@;
put 'dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRzaGVldG1sL21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRw'@;
put 'Oi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2LzIiXX0sV2k9e286InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIseDoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWwiLHNzOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQt'@;
put 'Y29tOm9mZmljZTpzcHJlYWRzaGVldCIsZHQ6InV1aWQ6QzJGNDEwMTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIixtdjoiaHR0cDovL21hY1ZtbFNjaGVtYVVyaSIsdjoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiLGh0bWw6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1o'@;
put 'dG1sNDAifSxTYT1mdW5jdGlvbih5KXtmb3IodmFyIFA9W10sUT0wO1E8eVswXS5sZW5ndGg7KytRKWlmKHlbMF1bUV0pZm9yKHZhciByZT0wLGdlPXlbMF1bUV0ubGVuZ3RoO3JlPGdlO3JlKz0xMDI0MClQLnB1c2guYXBwbHkoUCx5WzBdW1FdLnNsaWNlKHJlLHJlKzEwMjQwKSk7cmV0dXJu'@;
put 'IFB9LEZoPVNhLEV1PWZ1bmN0aW9uKHksUCxJKXtmb3IodmFyIFE9W10scmU9UDtyZTxJO3JlKz0yKVEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFluKHkscmUpKSk7cmV0dXJuIFEuam9pbigiIikucmVwbGFjZSh2LCIiKX0sQXM9RXUsbjA9ZnVuY3Rpb24oeSxQLEkpe2Zvcih2YXIgUT1b'@;
put 'XSxyZT1QO3JlPFArSTsrK3JlKVEucHVzaCgoIjAiK3lbcmVdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gUS5qb2luKCIiKX0scWE9bjAsX2M9ZnVuY3Rpb24oeSxQLEkpe2Zvcih2YXIgUT1bXSxyZT1QO3JlPEk7cmUrKylRLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShRaSh5'@;
put 'LHJlKSkpO3JldHVybiBRLmpvaW4oIiIpfSxIaD1fYyxMcz1mdW5jdGlvbih5LFApe3ZhciBJPWJpKHksUCk7cmV0dXJuIEk+MD9fYyh5LFArNCxQKzQrSS0xKToiIn0sYm89THMscjA9ZnVuY3Rpb24oeSxQKXt2YXIgST1iaSh5LFApO3JldHVybiBJPjA/X2MoeSxQKzQsUCs0K0ktMSk6IiJ9'@;
put 'LFQyPXIwLEQyPWZ1bmN0aW9uKHksUCl7dmFyIEk9MipiaSh5LFApO3JldHVybiBJPjA/X2MoeSxQKzQsUCs0K0ktMSk6IiJ9LGwzPUQyO0FyPWJjPWZ1bmN0aW9uKFAsSSl7dmFyIFE9YmkoUCxJKTtyZXR1cm4gUT4wP0V1KFAsSSs0LEkrNCtRKToiIn07dmFyIG8wLEwyLGtvPWZ1bmN0aW9u'@;
put 'KHksUCl7dmFyIEk9YmkoeSxQKTtyZXR1cm4gST4wP19jKHksUCs0LFArNCtJKToiIn0sQ3M9a287bzA9TDI9ZnVuY3Rpb24oeSxQKXtyZXR1cm4gZnVuY3Rpb24gJGEoeSxQKXtmb3IodmFyIEk9MS0yKih5W1ArN10+Pj43KSxRPSgoMTI3JnlbUCs3XSk8PDQpKyh5W1ArNl0+Pj40JjE1KSxy'@;
put 'ZT0xNSZ5W1ArNl0sZ2U9NTtnZT49MDstLWdlKXJlPTI1NipyZSt5W1ArZ2VdO3JldHVybiAyMDQ3PT1RPzA9PXJlP0kqKDEvMCk6TmFOOigwPT1RP1E9LTEwMjI6KFEtPTEwMjMscmUrPU1hdGgucG93KDIsNTIpKSxJKk1hdGgucG93KDIsUS01MikqcmUpfSh5LFApfTt2YXIgTmg9ZnVuY3Rp'@;
put 'b24oUCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoUCl9O2hlJiYoRXU9ZnVuY3Rpb24oeSxQLEkpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoeSk/eS50b1N0cmluZygidXRmMTZsZSIsUCxJKS5yZXBsYWNlKHYsIiIpOkFzKHksUCxJKX0sbjA9ZnVuY3Rpb24oeSxQLEkpe3JldHVybiBCdWZmZXIu'@;
put 'aXNCdWZmZXIoeSk/eS50b1N0cmluZygiaGV4IixQLFArSSk6cWEoeSxQLEkpfSxMcz1mdW5jdGlvbihQLEkpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIGJvKFAsSSk7dmFyIFE9UC5yZWFkVUludDMyTEUoSSk7cmV0dXJuIFE+MD9QLnRvU3RyaW5nKCJ1dGY4IixJKzQsSSs0K1Et'@;
put 'MSk6IiJ9LHIwPWZ1bmN0aW9uKFAsSSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gVDIoUCxJKTt2YXIgUT1QLnJlYWRVSW50MzJMRShJKTtyZXR1cm4gUT4wP1AudG9TdHJpbmcoInV0ZjgiLEkrNCxJKzQrUS0xKToiIn0sRDI9ZnVuY3Rpb24oUCxJKXtpZighQnVmZmVyLmlzQnVm'@;
put 'ZmVyKFApKXJldHVybiBsMyhQLEkpO3ZhciBRPTIqUC5yZWFkVUludDMyTEUoSSk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEkrNCxJKzQrUS0xKX0sQXI9ZnVuY3Rpb24oUCxJKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBiYyhQLEkpO3ZhciBRPVAucmVhZFVJbnQzMkxF'@;
put 'KEkpO3JldHVybiBQLnRvU3RyaW5nKCJ1dGYxNmxlIixJKzQsSSs0K1EpfSxrbz1mdW5jdGlvbihQLEkpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIENzKFAsSSk7dmFyIFE9UC5yZWFkVUludDMyTEUoSSk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjgiLEkrNCxJKzQrUSl9LF9jPWZ1'@;
put 'bmN0aW9uKFAsSSxRKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFApP1AudG9TdHJpbmcoInV0ZjgiLEksUSk6SGgoUCxJLFEpfSxTYT1mdW5jdGlvbih5KXtyZXR1cm4geVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKHlbMF1bMF0pP0J1ZmZlci5jb25jYXQoeVswXSk6RmgoeSl9LFM9'@;
put 'ZnVuY3Rpb24oeSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5WzBdKT9CdWZmZXIuY29uY2F0KHkpOltdLmNvbmNhdC5hcHBseShbXSx5KX0sbzA9ZnVuY3Rpb24oUCxJKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFApP1AucmVhZERvdWJsZUxFKEkpOkwyKFAsSSl9LE5oPWZ1bmN0aW9uKFAp'@;
put 'e3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCl8fEFycmF5LmlzQXJyYXkoUCl9KSx0eXBlb2YgY3B0YWJsZTwidSImJihFdT1mdW5jdGlvbih5LFAsSSl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAseS5zbGljZShQLEkpKS5yZXBsYWNlKHYsIiIpfSxfYz1mdW5jdGlvbih5LFAs'@;
put 'SSl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLHkuc2xpY2UoUCxJKSl9LExzPWZ1bmN0aW9uKHksUCl7dmFyIEk9YmkoeSxQKTtyZXR1cm4gST4wP2NwdGFibGUudXRpbHMuZGVjb2RlKFIseS5zbGljZShQKzQsUCs0K0ktMSkpOiIifSxyMD1mdW5jdGlvbih5LFApe3ZhciBJ'@;
put 'PWJpKHksUCk7cmV0dXJuIEk+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShPLHkuc2xpY2UoUCs0LFArNCtJLTEpKToiIn0sRDI9ZnVuY3Rpb24oeSxQKXt2YXIgST0yKmJpKHksUCk7cmV0dXJuIEk+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHkuc2xpY2UoUCs0LFArNCtJLTEpKToiIn0s'@;
put 'QXI9ZnVuY3Rpb24oeSxQKXt2YXIgST1iaSh5LFApO3JldHVybiBJPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCx5LnNsaWNlKFArNCxQKzQrSSkpOiIifSxrbz1mdW5jdGlvbih5LFApe3ZhciBJPWJpKHksUCk7cmV0dXJuIEk+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSx5LnNs'@;
put 'aWNlKFArNCxQKzQrSSkpOiIifSk7dmFyIFFpPWZ1bmN0aW9uKHksUCl7cmV0dXJuIHlbUF19LFluPWZ1bmN0aW9uKHksUCl7cmV0dXJuIDI1Nip5W1ArMV0reVtQXX0sX2k9ZnVuY3Rpb24oeSxQKXt2YXIgST0yNTYqeVtQKzFdK3lbUF07cmV0dXJuIEk8MzI3Njg/STotMSooNjU1MzUtSSsx'@;
put 'KX0sYmk9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQKzNdKigxPDwyNCkrKHlbUCsyXTw8MTYpKyh5W1ArMV08PDgpK3lbUF19LG9zPWZ1bmN0aW9uKHksUCl7cmV0dXJuIHlbUCszXTw8MjR8eVtQKzJdPDwxNnx5W1ArMV08PDh8eVtQXX0sRmE9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQXTw8'@;
put 'MjR8eVtQKzFdPDwxNnx5W1ArMl08PDh8eVtQKzNdfTtmdW5jdGlvbiBIYSh5LFApe3ZhciBRLHJlLF9lLHZlLFNlLEhlLEk9IiIsZ2U9W107c3dpdGNoKFApe2Nhc2UiZGJjcyI6aWYoSGU9dGhpcy5sLGhlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpST10aGlzLnNsaWNlKHRoaXMubCx0aGlz'@;
put 'LmwrMip5KS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKFNlPTA7U2U8eTsrK1NlKUkrPVN0cmluZy5mcm9tQ2hhckNvZGUoWW4odGhpcyxIZSkpLEhlKz0yO3kqPTI7YnJlYWs7Y2FzZSJ1dGY4IjpJPV9jKHRoaXMsdGhpcy5sLHRoaXMubCt5KTticmVhaztjYXNlInV0ZjE2bGUiOkk9'@;
put 'RXUodGhpcyx0aGlzLmwsdGhpcy5sKyh5Kj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIEhhLmNhbGwodGhpcyx5LCJkYmNzIik7ST1jcHRhYmxlLnV0aWxzLmRlY29kZShPLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKnkpKSx5Kj0yO2Jy'@;
put 'ZWFrO2Nhc2UibHBzdHItYW5zaSI6ST1Mcyh0aGlzLHRoaXMubCkseT00K2JpKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjpJPXIwKHRoaXMsdGhpcy5sKSx5PTQrYmkodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjpJPUQyKHRoaXMsdGhpcy5sKSx5PTQrMipiaSh0'@;
put 'aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0Ijp5PTQrYmkodGhpcyx0aGlzLmwpLEk9QXIodGhpcyx0aGlzLmwpLDImeSYmKHkrPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOnk9NCtiaSh0aGlzLHRoaXMubCksST1rbyh0aGlzLHRoaXMubCksMyZ5JiYoeSs9NC0oMyZ5KSk7YnJlYWs7Y2FzZSJj'@;
put 'c3RyIjpmb3IoeT0wLEk9IiI7MCE9PShfZT1RaSh0aGlzLHRoaXMubCt5KyspKTspZ2UucHVzaChxKF9lKSk7ST1nZS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpmb3IoeT0wLEk9IiI7MCE9PShfZT1Zbih0aGlzLHRoaXMubCt5KSk7KWdlLnB1c2gocShfZSkpLHkrPTI7eSs9MixJPWdl'@;
put 'LmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3IoST0iIixIZT10aGlzLmwsU2U9MDtTZTx5OysrU2Upe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihIZSkpcmV0dXJuIF9lPVFpKHRoaXMsSGUpLHRoaXMubD1IZSsxLHZlPUhhLmNhbGwodGhpcyx5LVNlLF9l'@;
put 'PyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxnZS5qb2luKCIiKSt2ZTtnZS5wdXNoKHEoWW4odGhpcyxIZSkpKSxIZSs9Mn1JPWdlLmpvaW4oIiIpLHkqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtJPWNwdGFibGUudXRpbHMuZGVjb2RlKE8sdGhpcy5zbGlj'@;
put 'ZSh0aGlzLmwsdGhpcy5sK3kpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKEk9IiIsSGU9dGhpcy5sLFNlPTA7U2UhPXk7KytTZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKEhlKSlyZXR1cm4gX2U9UWkodGhpcyxIZSksdGhpcy5sPUhlKzEsdmU9SGEuY2FsbCh0'@;
put 'aGlzLHktU2UsX2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGdlLmpvaW4oIiIpK3ZlO2dlLnB1c2gocShRaSh0aGlzLEhlKSkpLEhlKz0xfUk9Z2Uuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goeSl7Y2FzZSAxOnJldHVybiBRPVFpKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxRO2Nh'@;
put 'c2UgMjpyZXR1cm4gUT0oImkiPT09UD9faTpZbikodGhpcyx0aGlzLmwpLHRoaXMubCs9MixRO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09UCYmMTI4JnRoaXNbdGhpcy5sKzNdPyhyZT1iaSh0aGlzLHRoaXMubCksdGhpcy5sKz00LHJlKTooUT0oeT4wP29zOkZhKSh0aGlzLHRoaXMubCks'@;
put 'dGhpcy5sKz00LFEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09UClyZXR1cm4gcmU9OD09eT9vMCh0aGlzLHRoaXMubCk6bzAoW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRo'@;
put 'aXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgscmU7eT04O2Nhc2UgMTY6ST1uMCh0aGlzLHRoaXMubCx5KX19cmV0dXJuIHRoaXMubCs9eSxJfXZhciAkbz1mdW5jdGlvbih5LFAsSSl7eVtJXT0yNTUmUCx5W0krMV09UD4+PjgmMjU1LHlbSSsyXT1QPj4+MTYmMjU1'@;
put 'LHlbSSszXT1QPj4+MjQmMjU1fSxWMD1mdW5jdGlvbih5LFAsSSl7eVtJXT0yNTUmUCx5W0krMV09UD4+OCYyNTUseVtJKzJdPVA+PjE2JjI1NSx5W0krM109UD4+MjQmMjU1fSxEYT1mdW5jdGlvbih5LFAsSSl7eVtJXT0yNTUmUCx5W0krMV09UD4+PjgmMjU1fTtmdW5jdGlvbiBWaCh5LFAs'@;
put 'SSl7dmFyIFE9MCxyZT0wO2lmKCJkYmNzIj09PUkpe2ZvcihyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKURhKHRoaXMsUC5jaGFyQ29kZUF0KHJlKSx0aGlzLmwrMipyZSk7UT0yKlAubGVuZ3RofWVsc2UgaWYoInNiY3MiPT09SSl7aWYodHlwZW9mIGNwdGFibGU8InUiJiY4NzQ9PVIpZm9yKHJl'@;
put 'PTA7cmUhPVAubGVuZ3RoOysrcmUpe3ZhciBnZT1jcHRhYmxlLnV0aWxzLmVuY29kZShSLFAuY2hhckF0KHJlKSk7dGhpc1t0aGlzLmwrcmVdPWdlWzBdfWVsc2UgZm9yKFA9UC5yZXBsYWNlKC9bXlx4MDAtXHg3Rl0vZywiXyIpLHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpdGhpc1t0aGlzLmwr'@;
put 'cmVdPTI1NSZQLmNoYXJDb2RlQXQocmUpO1E9UC5sZW5ndGh9ZWxzZXtpZigiaGV4Ij09PUkpe2Zvcig7cmU8eTsrK3JlKXRoaXNbdGhpcy5sKytdPXBhcnNlSW50KFAuc2xpY2UoMipyZSwyKnJlKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1JKXt2YXIgX2U9TWF0aC5t'@;
put 'aW4odGhpcy5sK3ksdGhpcy5sZW5ndGgpO2ZvcihyZT0wO3JlPE1hdGgubWluKFAubGVuZ3RoLHkpOysrcmUpe3ZhciB2ZT1QLmNoYXJDb2RlQXQocmUpO3RoaXNbdGhpcy5sKytdPTI1NSZ2ZSx0aGlzW3RoaXMubCsrXT12ZT4+OH1mb3IoO3RoaXMubDxfZTspdGhpc1t0aGlzLmwrK109MDty'@;
put 'ZXR1cm4gdGhpc31zd2l0Y2goeSl7Y2FzZSAxOlE9MSx0aGlzW3RoaXMubF09MjU1JlA7YnJlYWs7Y2FzZSAyOlE9Mix0aGlzW3RoaXMubF09MjU1JlAsdGhpc1t0aGlzLmwrMV09MjU1JihQPj4+PTgpO2JyZWFrO2Nhc2UgMzpRPTMsdGhpc1t0aGlzLmxdPTI1NSZQLHRoaXNbdGhpcy5sKzFd'@;
put 'PTI1NSYoUD4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKFA+Pj49OCk7YnJlYWs7Y2FzZSA0OlE9NCwkbyh0aGlzLFAsdGhpcy5sKTticmVhaztjYXNlIDg6aWYoUT04LCJmIj09PUkpeyFmdW5jdGlvbiB0MCh5LFAsSSl7dmFyIFE9KFA8MHx8MS9QPT0tMS8wPzE6MCk8PDcscmU9MCxnZT0w'@;
put 'LF9lPVE/LVA6UDtpc0Zpbml0ZShfZSk/MD09X2U/cmU9Z2U9MDoocmU9TWF0aC5mbG9vcihNYXRoLmxvZyhfZSkvTWF0aC5MTjIpLGdlPV9lKk1hdGgucG93KDIsNTItcmUpLHJlPD0tMTAyMyYmKCFpc0Zpbml0ZShnZSl8fGdlPE1hdGgucG93KDIsNTIpKT9yZT0tMTAyMjooZ2UtPU1hdGgu'@;
put 'cG93KDIsNTIpLHJlKz0xMDIzKSk6KHJlPTIwNDcsZ2U9aXNOYU4oUCk/MjY5ODU6MCk7Zm9yKHZhciB2ZT0wO3ZlPD01OysrdmUsZ2UvPTI1Nil5W0krdmVdPTI1NSZnZTt5W0krNl09KDE1JnJlKTw8NHwxNSZnZSx5W0krN109cmU+PjR8UX0odGhpcyxQLHRoaXMubCk7YnJlYWt9Y2FzZSAx'@;
put 'NjpicmVhaztjYXNlLTQ6UT00LFYwKHRoaXMsUCx0aGlzLmwpfX1yZXR1cm4gdGhpcy5sKz1RLHRoaXN9ZnVuY3Rpb24gQmgoeSxQKXt2YXIgST1uMCh0aGlzLHRoaXMubCx5Lmxlbmd0aD4+MSk7aWYoSSE9PXkpdGhyb3cgbmV3IEVycm9yKFArIkV4cGVjdGVkICIreSsiIHNhdyAiK0kpO3Ro'@;
put 'aXMubCs9eS5sZW5ndGg+PjF9ZnVuY3Rpb24gb2woeSxQKXt5Lmw9UCx5LnJlYWRfc2hpZnQ9SGEseS5jaGs9QmgseS53cml0ZV9zaGlmdD1WaH1mdW5jdGlvbiB5Yyh5LFApe3kubCs9UH1mdW5jdGlvbiBwcih5KXt2YXIgUD1HKHkpO3JldHVybiBvbChQLDApLFB9ZnVuY3Rpb24gSG8oeSxQ'@;
put 'LEkpe2lmKHkpe3ZhciBRLHJlLGdlO29sKHkseS5sfHwwKTtmb3IodmFyIF9lPXkubGVuZ3RoLHZlPTAsU2U9MDt5Lmw8X2U7KXsxMjgmKHZlPXkucmVhZF9zaGlmdCgxKSkmJih2ZT0oMTI3JnZlKSsoKDEyNyZ5LnJlYWRfc2hpZnQoMSkpPDw3KSk7dmFyIEhlPW1mW3ZlXXx8bWZbNjU1MzVd'@;
put 'O2ZvcihnZT0xMjcmKFE9eS5yZWFkX3NoaWZ0KDEpKSxyZT0xO3JlPDQmJjEyOCZROysrcmUpZ2UrPSgxMjcmKFE9eS5yZWFkX3NoaWZ0KDEpKSk8PDcqcmU7U2U9eS5sK2dlO3ZhciBCZT0oSGUuZnx8eWMpKHksZ2UsSSk7aWYoeS5sPVNlLFAoQmUsSGUubix2ZSkpcmV0dXJufX19ZnVuY3Rp'@;
put 'b24gd2MoKXt2YXIgeT1bXSxQPWhlPzI1NjoyMDQ4LEk9ZnVuY3Rpb24oSGUpe3ZhciBCZT1wcihIZSk7cmV0dXJuIG9sKEJlLDApLEJlfSxRPUkoUCkscmU9ZnVuY3Rpb24oKXtRJiYoUS5sZW5ndGg+US5sJiYoKFE9US5zbGljZSgwLFEubCkpLmw9US5sZW5ndGgpLFEubGVuZ3RoPjAmJnku'@;
put 'cHVzaChRKSxRPW51bGwpfSxnZT1mdW5jdGlvbihIZSl7cmV0dXJuIFEmJkhlPFEubGVuZ3RoLVEubD9ROihyZSgpLFE9SShNYXRoLm1heChIZSsxLFApKSl9O3JldHVybntuZXh0OmdlLHB1c2g6ZnVuY3Rpb24oSGUpe3JlKCksbnVsbD09KFE9SGUpLmwmJihRLmw9US5sZW5ndGgpLGdlKFAp'@;
put 'fSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gcmUoKSxTYShbeV0pfSxfYnVmczp5fX1mdW5jdGlvbiB1aSh5LFAsSSxRKXt2YXIgZ2UscmU9K2I1W1BdO2lmKCFpc05hTihyZSkpe1F8fChRPW1mW3JlXS5wfHwoSXx8W10pLmxlbmd0aHx8MCksZ2U9MSsocmU+PTEyOD8xOjApKzEsUT49MTI4JiYr'@;
put 'K2dlLFE+PTE2Mzg0JiYrK2dlLFE+PTIwOTcxNTImJisrZ2U7dmFyIF9lPXkubmV4dChnZSk7cmU8PTEyNz9fZS53cml0ZV9zaGlmdCgxLHJlKTooX2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZyZSkpLF9lLndyaXRlX3NoaWZ0KDEscmU+PjcpKTtmb3IodmFyIHZlPTA7NCE9dmU7Kyt2ZSl7'@;
put 'aWYoIShRPj0xMjgpKXtfZS53cml0ZV9zaGlmdCgxLFEpO2JyZWFrfV9lLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmUSkpLFE+Pj03fVE+MCYmTmgoSSkmJnkucHVzaChJKX19ZnVuY3Rpb24gbHUoeSxQLEkpe3ZhciBRPW9uKHkpO2lmKFAucz8oUS5jUmVsJiYoUS5jKz1QLnMuYyksUS5yUmVs'@;
put 'JiYoUS5yKz1QLnMucikpOihRLmNSZWwmJihRLmMrPVAuYyksUS5yUmVsJiYoUS5yKz1QLnIpKSwhSXx8SS5iaWZmPDEyKXtmb3IoO1EuYz49MjU2OylRLmMtPTI1Njtmb3IoO1Eucj49NjU1MzY7KVEuci09NjU1MzZ9cmV0dXJuIFF9ZnVuY3Rpb24gaHIoeSxQLEkpe3ZhciBRPW9uKHkpO3Jl'@;
put 'dHVybiBRLnM9bHUoUS5zLFAucyxJKSxRLmU9bHUoUS5lLFAucyxJKSxRfWZ1bmN0aW9uIEkyKHksUCl7aWYoeS5jUmVsJiZ5LmM8MClmb3IoeT1vbih5KTt5LmM8MDspeS5jKz1QPjg/MTYzODQ6MjU2O2lmKHkuclJlbCYmeS5yPDApZm9yKHk9b24oeSk7eS5yPDA7KXkucis9UD44PzEwNDg1'@;
put 'NzY6UD41PzY1NTM2OjE2Mzg0O2lmKHkuY1JlbCYmeS5jPj0oUD44PzE2Mzg0OjI1NikpZm9yKHk9b24oeSk7eS5jPj0oUD44PzE2Mzg0OjI1Nik7KXkuYy09UD44PzE2Mzg0OjI1NjtpZih5LnJSZWwmJnkucj49MTA0ODU3Nilmb3IoeT1vbih5KTt5LnI+PTEwNDg1NzY7KXkuci09MTA0ODU3'@;
put 'Njt2YXIgST1kaSh5KTtyZXR1cm4heS5jUmVsJiZudWxsIT15LmNSZWwmJihJPWZ1bmN0aW9uIEs3KHkpe3JldHVybiB5LnJlcGxhY2UoL14oW0EtWl0pLywiJCQkMSIpfShJKSksIXkuclJlbCYmbnVsbCE9eS5yUmVsJiYoST1mdW5jdGlvbiBubSh5KXtyZXR1cm4geS5yZXBsYWNlKC8oW0Et'@;
put 'Wl18XikoXGQrKSQvLCIkMSQkJDIiKX0oSSkpLEl9ZnVuY3Rpb24gbWkoeSxQKXtyZXR1cm4gMCE9eS5zLnJ8fHkucy5yUmVsfHx5LmUuciE9KFAuYmlmZj49MTI/MTA0ODU3NTpQLmJpZmY+PTg/NjU1MzY6MTYzODQpfHx5LmUuclJlbD8wIT15LnMuY3x8eS5zLmNSZWx8fHkuZS5jIT0oUC5i'@;
put 'aWZmPj0xMj8xNjM4MzoyNTUpfHx5LmUuY1JlbD9JMih5LnMsUC5iaWZmKSsiOiIrSTIoeS5lLFAuYmlmZik6KHkucy5yUmVsPyIiOiIkIikrSHMoeS5zLnIpKyI6IisoeS5lLnJSZWw/IiI6IiQiKStIcyh5LmUucik6KHkucy5jUmVsPyIiOiIkIikrTnMoeS5zLmMpKyI6IisoeS5lLmNSZWw/'@;
put 'IiI6IiQiKStOcyh5LmUuYyl9dmFyIHhkPXt9O2Z1bmN0aW9uIEIwKHkpe3JldHVybiBwYXJzZUludChmdW5jdGlvbiBjMyh5KXtyZXR1cm4geS5yZXBsYWNlKC9cJChcZCspJC8sIiQxIil9KHkpLDEwKS0xfWZ1bmN0aW9uIEhzKHkpe3JldHVybiIiKyh5KzEpfWZ1bmN0aW9uIGpoKHkpe2Zv'@;
put 'cih2YXIgUD1mdW5jdGlvbiBucyh5KXtyZXR1cm4geS5yZXBsYWNlKC9eXCQoW0EtWl0pLywiJDEiKX0oeSksST0wLFE9MDtRIT09UC5sZW5ndGg7KytRKUk9MjYqSStQLmNoYXJDb2RlQXQoUSktNjQ7cmV0dXJuIEktMX1mdW5jdGlvbiBOcyh5KXtpZih5PDApdGhyb3cgbmV3IEVycm9yKCJp'@;
put 'bnZhbGlkIGNvbHVtbiAiK3kpO3ZhciBQPSIiO2ZvcigrK3k7eTt5PU1hdGguZmxvb3IoKHktMSkvMjYpKVA9U3RyaW5nLmZyb21DaGFyQ29kZSgoeS0xKSUyNis2NSkrUDtyZXR1cm4gUH1mdW5jdGlvbiBzcyh5KXtmb3IodmFyIFA9MCxJPTAsUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9'@;
put 'eS5jaGFyQ29kZUF0KFEpO3JlPj00OCYmcmU8PTU3P1A9MTAqUCsocmUtNDgpOnJlPj02NSYmcmU8PTkwJiYoST0yNipJKyhyZS02NCkpfXJldHVybntjOkktMSxyOlAtMX19ZnVuY3Rpb24gZGkoeSl7Zm9yKHZhciBQPXkuYysxLEk9IiI7UDtQPShQLTEpLzI2fDApST1TdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKChQLTEpJTI2KzY1KStJO3JldHVybiBJKyh5LnIrMSl9ZnVuY3Rpb24gV3MoeSl7dmFyIFA9eS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PVA/e3M6c3MoeSksZTpzcyh5KX06e3M6c3MoeS5zbGljZSgwLFApKSxlOnNzKHkuc2xpY2UoUCsxKSl9fWZ1bmN0aW9uIE9vKHksUCl7cmV0'@;
put 'dXJuIHR5cGVvZiBQPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBQP09vKHkucyx5LmUpOigic3RyaW5nIiE9dHlwZW9mIHkmJih5PWRpKHkpKSwic3RyaW5nIiE9dHlwZW9mIFAmJihQPWRpKFApKSx5PT1QP3k6eSsiOiIrUCl9ZnVuY3Rpb24gT2koeSl7dmFyIFA9SlNPTi5wYXJzZSgneyJzIjp7'@;
put 'ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScpLEk9MCxRPTAscmU9MCxnZT15Lmxlbmd0aDtmb3IoST0wO1E8Z2UmJiEoKHJlPXkuY2hhckNvZGVBdChRKS02NCk8MXx8cmU+MjYpOysrUSlJPTI2KkkrcmU7Zm9yKFAucy5jPS0tSSxJPTA7UTxnZSYmISgocmU9eS5jaGFyQ29kZUF0'@;
put 'KFEpLTQ4KTwwfHxyZT45KTsrK1EpST0xMCpJK3JlO2lmKFAucy5yPS0tSSxRPT09Z2V8fDU4PT09eS5jaGFyQ29kZUF0KCsrUSkpcmV0dXJuIFAuZS5jPVAucy5jLFAuZS5yPVAucy5yLFA7Zm9yKEk9MDtRIT1nZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTY0KTwxfHxyZT4yNik7KytRKUk9'@;
put 'MjYqSStyZTtmb3IoUC5lLmM9LS1JLEk9MDtRIT1nZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTQ4KTwwfHxyZT45KTsrK1EpST0xMCpJK3JlO3JldHVybiBQLmUucj0tLUksUH1mdW5jdGlvbiBybSh5LFApe3ZhciBJPSJkIj09eS50JiZQIGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT15Lnop'@;
put 'dHJ5e3JldHVybiB5Lnc9dy5mb3JtYXQoeS56LEk/VWUoUCk6UCl9Y2F0Y2h7fXRyeXtyZXR1cm4geS53PXcuZm9ybWF0KCh5LlhGfHx7fSkubnVtRm10SWR8fChJPzE0OjApLEk/VWUoUCk6UCl9Y2F0Y2h7cmV0dXJuIiIrUH19ZnVuY3Rpb24gY3UoeSxQLEkpe3JldHVybiBudWxsPT15fHxu'@;
put 'dWxsPT15LnR8fCJ6Ij09eS50PyIiOnZvaWQgMCE9PXkudz95Lnc6KCJkIj09eS50JiYheS56JiZJJiZJLmRhdGVORiYmKHkuej1JLmRhdGVORiksImUiPT15LnQ/UW9beS52XXx8eS52OnJtKHksbnVsbD09UD95LnY6UCkpfWZ1bmN0aW9uIEVkKHksUCl7dmFyIEk9UCYmUC5zaGVldD9QLnNo'@;
put 'ZWV0OiJTaGVldDEiLFE9e307cmV0dXJuIFFbSV09eSx7U2hlZXROYW1lczpbSV0sU2hlZXRzOlF9fWZ1bmN0aW9uIHMwKHksUCxJKXt2YXIgUT1JfHx7fSxyZT15P0FycmF5LmlzQXJyYXkoeSk6US5kZW5zZTtudWxsIT10ZSYmbnVsbD09cmUmJihyZT10ZSk7dmFyIGdlPXl8fChyZT9bXTp7'@;
put 'fSksX2U9MCx2ZT0wO2lmKGdlJiZudWxsIT1RLm9yaWdpbil7aWYoIm51bWJlciI9PXR5cGVvZiBRLm9yaWdpbilfZT1RLm9yaWdpbjtlbHNle3ZhciBTZT0ic3RyaW5nIj09dHlwZW9mIFEub3JpZ2luP3NzKFEub3JpZ2luKTpRLm9yaWdpbjtfZT1TZS5yLHZlPVNlLmN9Z2VbIiFyZWYiXXx8'@;
put 'KGdlWyIhcmVmIl09IkExOkExIil9dmFyIEhlPXtzOntjOjFlNyxyOjFlN30sZTp7YzowLHI6MH19O2lmKGdlWyIhcmVmIl0pe3ZhciBCZT1PaShnZVsiIXJlZiJdKTtIZS5zLmM9QmUucy5jLEhlLnMucj1CZS5zLnIsSGUuZS5jPU1hdGgubWF4KEhlLmUuYyxCZS5lLmMpLEhlLmUucj1NYXRo'@;
put 'Lm1heChIZS5lLnIsQmUuZS5yKSwtMT09X2UmJihIZS5lLnI9X2U9QmUuZS5yKzEpfWZvcih2YXIgR2U9MDtHZSE9UC5sZW5ndGg7KytHZSlpZihQW0dlXSl7aWYoIUFycmF5LmlzQXJyYXkoUFtHZV0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMgYW4gYXJyYXkgb2Yg'@;
put 'YXJyYXlzIik7Zm9yKHZhciBudD0wO250IT1QW0dlXS5sZW5ndGg7KytudClpZighKHR5cGVvZiBQW0dlXVtudF0+InUiKSl7dmFyIGR0PXt2OlBbR2VdW250XX0sQ3Q9X2UrR2UsY3Q9dmUrbnQ7aWYoSGUucy5yPkN0JiYoSGUucy5yPUN0KSxIZS5zLmM+Y3QmJihIZS5zLmM9Y3QpLEhlLmUu'@;
put 'cjxDdCYmKEhlLmUucj1DdCksSGUuZS5jPGN0JiYoSGUuZS5jPWN0KSwhUFtHZV1bbnRdfHwib2JqZWN0IiE9dHlwZW9mIFBbR2VdW250XXx8QXJyYXkuaXNBcnJheShQW0dlXVtudF0pfHxQW0dlXVtudF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkdC52KSYmKGR0LmY9UFtH'@;
put 'ZV1bbnRdWzFdLGR0LnY9ZHQudlswXSksbnVsbD09PWR0LnYpaWYoZHQuZilkdC50PSJuIjtlbHNlIGlmKFEubnVsbEVycm9yKWR0LnQ9ImUiLGR0LnY9MDtlbHNle2lmKCFRLnNoZWV0U3R1YnMpY29udGludWU7ZHQudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZHQudj9kdC50PSJuIjoi'@;
put 'Ym9vbGVhbiI9PXR5cGVvZiBkdC52P2R0LnQ9ImIiOmR0LnYgaW5zdGFuY2VvZiBEYXRlPyhkdC56PVEuZGF0ZU5GfHx3Ll90YWJsZVsxNF0sUS5jZWxsRGF0ZXM/KGR0LnQ9ImQiLGR0Lnc9dy5mb3JtYXQoZHQueixVZShkdC52KSkpOihkdC50PSJuIixkdC52PVVlKGR0LnYpLGR0Lnc9dy5m'@;
put 'b3JtYXQoZHQueixkdC52KSkpOmR0LnQ9InMiO2Vsc2UgZHQ9UFtHZV1bbnRdO2lmKGR0JiZkdC5oKXRyeXtkdC5SPUZ1Lmh0bWxfdG9fcnMoZHQuaCksZHQudj0iIjtmb3IodmFyIGJ0PTA7YnQ8ZHQuUi5sZW5ndGg7KytidClkdC52Kz1kdC5SW2J0XS52fHwiIn1jYXRjaHt9aWYocmUpZ2Vb'@;
put 'Q3RdfHwoZ2VbQ3RdPVtdKSxnZVtDdF1bY3RdJiZnZVtDdF1bY3RdLnMmJihkdC5zPWdlW0N0XVtjdF0ucyksZ2VbQ3RdW2N0XSYmZ2VbQ3RdW2N0XS56JiYoZHQuej1nZVtDdF1bY3RdLnopLGdlW0N0XVtjdF09ZHQ7ZWxzZXt2YXIgRnQ9ZGkoe2M6Y3QscjpDdH0pO2dlW0Z0XSYmZ2VbRnRd'@;
put 'LnMmJihkdC5zPWdlW0Z0XS5zKSxnZVtGdF0mJmdlW0Z0XS56JiYoZHQuej1nZVtGdF0ueiksZ2VbRnRdPWR0fX19cmV0dXJuIEhlLnMuYzwxZTcmJihnZVsiIXJlZiJdPU9vKEhlKSksZ2V9ZnVuY3Rpb24gazEoeSxQKXtyZXR1cm4gczAobnVsbCx5LFApfWZ1bmN0aW9uIGt1KHksUCl7cmV0'@;
put 'dXJuIFB8fChQPXByKDQpKSxQLndyaXRlX3NoaWZ0KDQseSksUH1mdW5jdGlvbiBDYyh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1QPyIiOnkucmVhZF9zaGlmdChQLCJkYmNzIil9ZnVuY3Rpb24gcmMoeSxQKXt2YXIgST0hMTtyZXR1cm4gbnVsbD09UCYmKEk9ITAsUD1w'@;
put 'cig0KzIqeS5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDQseS5sZW5ndGgpLHkubGVuZ3RoPjAmJlAud3JpdGVfc2hpZnQoMCx5LCJkYmNzIiksST9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIG9tKHkpe3JldHVybntpY2g6eS5yZWFkX3NoaWZ0KDIpLGlmbnQ6eS5yZWFkX3NoaWZ0KDIpfX1m'@;
put 'dW5jdGlvbiBjYSh5LFApe3ZhciBJPXkubCxRPXkucmVhZF9zaGlmdCgxKSxyZT1DYyh5KSxnZT1bXSxfZT17dDpyZSxoOnJlfTtpZigxJlEpe2Zvcih2YXIgdmU9eS5yZWFkX3NoaWZ0KDQpLFNlPTA7U2UhPXZlOysrU2UpZ2UucHVzaChvbSh5KSk7X2Uucj1nZX1lbHNlIF9lLnI9W3tpY2g6'@;
put 'MCxpZm50OjB9XTtyZXR1cm4geS5sPUkrUCxfZX0hZnVuY3Rpb24oeSxQKXt2YXIgSTtpZih0eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpST1jcnlwdG9Ccm93c2VyaWZ5O2Vsc2UgaWYodHlwZW9mIFA8InUiKUk9UDtlbHNlIHRyeXtJPUYoNzc5MDMpfWNhdGNoe0k9bnVsbH15LnJjND1m'@;
put 'dW5jdGlvbihRLHJlKXt2YXIgZ2U9bmV3IEFycmF5KDI1NiksX2U9MCx2ZT0wLFNlPTAsSGU9MDtmb3IodmU9MDsyNTYhPXZlOysrdmUpZ2VbdmVdPXZlO2Zvcih2ZT0wOzI1NiE9dmU7Kyt2ZSlTZT1TZStnZVt2ZV0rUVt2ZSVRLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsSGU9Z2VbdmVd'@;
put 'LGdlW3ZlXT1nZVtTZV0sZ2VbU2VdPUhlO3ZlPVNlPTA7dmFyIEJlPUcocmUubGVuZ3RoKTtmb3IoX2U9MDtfZSE9cmUubGVuZ3RoOysrX2UpSGU9Z2VbdmU9dmUrMSYyNTVdLGdlW3ZlXT1nZVtTZT0oU2UrZ2VbdmVdKSUyNTZdLGdlW1NlXT1IZSxCZVtfZV09cmVbX2VdXmdlW2dlW3ZlXStn'@;
put 'ZVtTZV0mMjU1XTtyZXR1cm4gQmV9LHkubWQ1PWZ1bmN0aW9uKFEpe2lmKCFJKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIEkuY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKFEpKS5kaWdlc3QoImhleCIpfX0oeGQsdHlwZW9mIGNyeXB0'@;
put 'bzwidSI/Y3J5cHRvOnZvaWQgMCk7dmFyIFg3PWNhO2Z1bmN0aW9uIHV1KHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxJPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gSSs9eS5yZWFkX3NoaWZ0KDEpPDwxNix5LmwrKyx7YzpQLGlTdHlsZVJlZjpJfX1mdW5jdGlvbiBGaSh5LFApe3JldHVybiBu'@;
put 'dWxsPT1QJiYoUD1wcig4KSksUC53cml0ZV9zaGlmdCgtNCx5LmMpLFAud3JpdGVfc2hpZnQoMyx5LmlTdHlsZVJlZnx8eS5zKSxQLndyaXRlX3NoaWZ0KDEsMCksUH1mdW5jdGlvbiBhMCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMik7cmV0dXJuIFArPXkucmVhZF9zaGlmdCgxKTw8MTYseS5s'@;
put 'Kysse2M6LTEsaVN0eWxlUmVmOlB9fWZ1bmN0aW9uIEtjKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPXByKDQpKSxQLndyaXRlX3NoaWZ0KDMseS5pU3R5bGVSZWZ8fHkucyksUC53cml0ZV9zaGlmdCgxLDApLFB9dmFyIHpoPUNjLHNtPXJjO2Z1bmN0aW9uIEF1KHkpe3ZhciBQPXkucmVhZF9z'@;
put 'aGlmdCg0KTtyZXR1cm4gMD09PVB8fDQyOTQ5NjcyOTU9PT1QPyIiOnkucmVhZF9zaGlmdChQLCJkYmNzIil9ZnVuY3Rpb24gQWQoeSxQKXt2YXIgST0hMTtyZXR1cm4gbnVsbD09UCYmKEk9ITAsUD1wcigxMjcpKSxQLndyaXRlX3NoaWZ0KDQseS5sZW5ndGg+MD95Lmxlbmd0aDo0Mjk0OTY3'@;
put 'Mjk1KSx5Lmxlbmd0aD4wJiZQLndyaXRlX3NoaWZ0KDAseSwiZGJjcyIpLEk/UC5zbGljZSgwLFAubCk6UH12YXIgZHU9Q2MsVDE9QXUsUGM9QWQ7ZnVuY3Rpb24gWGMoeSl7dmFyIFA9eS5zbGljZSh5LmwseS5sKzQpLEk9MSZQWzBdLFE9MiZQWzBdO3kubCs9NCxQWzBdJj0yNTI7dmFyIHJl'@;
put 'PTA9PT1RP28wKFswLDAsMCwwLFBbMF0sUFsxXSxQWzJdLFBbM11dLDApOm9zKFAsMCk+PjI7cmV0dXJuIEk/cmUvMTAwOnJlfWZ1bmN0aW9uIFNzKHksUCl7bnVsbD09UCYmKFA9cHIoNCkpO3ZhciBJPTAsUT0wLHJlPTEwMCp5O2lmKHk9PSgwfHkpJiZ5Pj0tKDE8PDI5KSYmeTwxPDwyOT9R'@;
put 'PTE6cmU9PSgwfHJlKSYmcmU+PS0oMTw8MjkpJiZyZTwxPDwyOSYmKFE9MSxJPTEpLCFRKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIit5KTtQLndyaXRlX3NoaWZ0KC00LCgoST9yZTp5KTw8MikrKEkrMikpfWZ1bmN0aW9uIFRkKHkpe3ZhciBQPXtzOnt9LGU6e319'@;
put 'O3JldHVybiBQLnMucj15LnJlYWRfc2hpZnQoNCksUC5lLnI9eS5yZWFkX3NoaWZ0KDQpLFAucy5jPXkucmVhZF9zaGlmdCg0KSxQLmUuYz15LnJlYWRfc2hpZnQoNCksUH12YXIgSmM9VGQsRDE9ZnVuY3Rpb24gVWgoeSxQKXtyZXR1cm4gUHx8KFA9cHIoMTYpKSxQLndyaXRlX3NoaWZ0KDQs'@;
put 'eS5zLnIpLFAud3JpdGVfc2hpZnQoNCx5LmUuciksUC53cml0ZV9zaGlmdCg0LHkucy5jKSxQLndyaXRlX3NoaWZ0KDQseS5lLmMpLFB9O2Z1bmN0aW9uIGwwKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksST1bXSxRPTA7UTxQOysrUSl7dmFyIHJlPUpjKHkpO0kucHVzaChPbyhyZSkp'@;
put 'fXJldHVybiBJLmpvaW4oIiwiKX1mdW5jdGlvbiBtYSh5KXtpZih5Lmxlbmd0aC15Lmw8OCl0aHJvdyJYTFMgWG51bSBCdWZmZXIgdW5kZXJmbG93IjtyZXR1cm4geS5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiBGYyh5LFApe3JldHVybihQfHxwcig4KSkud3JpdGVfc2hpZnQoOCx5LCJm'@;
put 'Iil9ZnVuY3Rpb24gRGQoeSl7dmFyIFA9e30sUT15LnJlYWRfc2hpZnQoMSk+Pj4xLHJlPXkucmVhZF9zaGlmdCgxKSxnZT15LnJlYWRfc2hpZnQoMiwiaSIpLF9lPXkucmVhZF9zaGlmdCgxKSx2ZT15LnJlYWRfc2hpZnQoMSksU2U9eS5yZWFkX3NoaWZ0KDEpO3N3aXRjaCh5LmwrKyxRKXtj'@;
put 'YXNlIDA6UC5hdXRvPTE7YnJlYWs7Y2FzZSAxOlAuaW5kZXg9cmU7dmFyIEhlPUNyW3JlXTtIZSYmKFAucmdiPXoxKEhlKSk7YnJlYWs7Y2FzZSAyOlAucmdiPXoxKFtfZSx2ZSxTZV0pO2JyZWFrO2Nhc2UgMzpQLnRoZW1lPXJlfXJldHVybiAwIT1nZSYmKFAudGludD1nZT4wP2dlLzMyNzY3'@;
put 'OmdlLzMyNzY4KSxQfWZ1bmN0aW9uIFIyKHksUCl7aWYoUHx8KFA9cHIoOCkpLCF5fHx5LmF1dG8pcmV0dXJuIFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUDtudWxsIT15LmluZGV4PyhQLndyaXRlX3NoaWZ0KDEsMiksUC53cml0ZV9zaGlmdCgxLHkuaW5kZXgpKTpu'@;
put 'dWxsIT15LnRoZW1lPyhQLndyaXRlX3NoaWZ0KDEsNiksUC53cml0ZV9zaGlmdCgxLHkudGhlbWUpKTooUC53cml0ZV9zaGlmdCgxLDUpLFAud3JpdGVfc2hpZnQoMSwwKSk7dmFyIEk9eS50aW50fHwwO2lmKEk+MD9JKj0zMjc2NzpJPDAmJihJKj0zMjc2OCksUC53cml0ZV9zaGlmdCgyLEkp'@;
put 'LHkucmdiJiZudWxsPT15LnRoZW1lKXt2YXIgUT15LnJnYnx8IkZGRkZGRiI7Im51bWJlciI9PXR5cGVvZiBRJiYoUT0oIjAwMDAwMCIrUS50b1N0cmluZygxNikpLnNsaWNlKC02KSksUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFEuc2xpY2UoMCwyKSwxNikpLFAud3JpdGVfc2hpZnQoMSxw'@;
put 'YXJzZUludChRLnNsaWNlKDIsNCksMTYpKSxQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUS5zbGljZSg0LDYpLDE2KSksUC53cml0ZV9zaGlmdCgxLDI1NSl9ZWxzZSBQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUH1mdW5j'@;
put 'dGlvbiBmNCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkubCsrLHtmQm9sZDoxJlAsZkl0YWxpYzoyJlAsZlVuZGVybGluZTo0JlAsZlN0cmlrZW91dDo4JlAsZk91dGxpbmU6MTYmUCxmU2hhZG93OjMyJlAsZkNvbmRlbnNlOjY0JlAsZkV4dGVuZDoxMjgmUH19ZnVuY3Rpb24g'@;
put 'cDQoeSxQKXt2YXIgUT15LnJlYWRfc2hpZnQoNCk7c3dpdGNoKFEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVt5LnJlYWRfc2hpZnQoNCld'@;
put 'fHwiIn1pZihRPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIitRLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHkubC09NCx5LnJlYWRfc2hpZnQoMCwxPT1QPyJscHN0ciI6Imxwd3N0ciIpfXZhciB1Mz0yLE1hPTMsSGM9MTIsYW09ODEsdDk9WzgwLGFtXSxfND17'@;
put 'MTp7bjoiQ29kZVBhZ2UiLHQ6dTN9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpNYX0sNTp7bjoiTGluZUNvdW50Iix0Ok1hfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDpNYX0sNzp7bjoiU2xpZGVDb3Vu'@;
put 'dCIsdDpNYX0sODp7bjoiTm90ZUNvdW50Iix0Ok1hfSw5OntuOiJIaWRkZW5Db3VudCIsdDpNYX0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6TWF9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDA5NnxIY30sMTM6e246IlRpdGxlc09mUGFy'@;
put 'dHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0Ok1hfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6'@;
put 'MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0Ok1hLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6'@;
put 'e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sd3I9ezE6e246IkNvZGVQYWdlIix0OnUzfSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1'@;
put 'OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7'@;
put 'bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6TWF9LDE1OntuOiJXb3JkQ291bnQiLHQ6TWF9LDE2OntuOiJDaGFyQ291bnQiLHQ6TWF9LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIs'@;
put 'dDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0Ok1hfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sYjQ9UGUoXzQsIm4iKSx5ND1QZSh3ciwibiIpLGxtPXsxOiJVUyIsMjoiQ0EiLDM6IiIs'@;
put 'NzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5a'@;
put 'Iiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklR'@;
put 'Iiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSx2aT1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwi'@;
put 'ZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gdzQoeSl7cmV0dXJuIHkubWFw'@;
put 'KGZ1bmN0aW9uKFApe3JldHVybltQPj4xNiYyNTUsUD4+OCYyNTUsMjU1JlBdfSl9dmFyIGgzPXc0KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUz'@;
put 'NSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgz'@;
put 'ODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYw'@;
put 'NiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxDcj1vbihoMyksTmE9dzQoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMzNTU0NDMsMTY3MTE2ODAsMzI3'@;
put 'NjgsMTMzNjk0OTcsMTI4LDMzOTQ1NjAsMjYzNjcsMTAwMjcyMTIsMTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgsMzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMxNDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4LDM2ODM1MzcsMTA2OTI1OCw4'@;
put 'ODgwODk5LDc0OTQ2NCwyODkzNDc2LDExNzQ1NzMwLDM3NTAyMDEsMTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4NjE3LDMwMzY4MTQsMTExODQ4MTBdKSxRbz17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYh'@;
put 'IiwyOToiI05BTUU/IiwzNjoiI05VTSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LEthPUFlKFFvKSxPbD17ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIjoid29ya2Jv'@;
put 'b2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu'@;
put 'eG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRz'@;
put 'LW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0'@;
put 'bWwucGl2b3RUYWJsZSt4bWwiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6ImNoYXJ0Y29s'@;
put 'b3JzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJh'@;
put 'cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6'@;
put 'IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtZXhjZWwuY29ubmVjdGlvbnMiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6ImxpbmtzIiwi'@;
put 'YXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRz'@;
put 'LW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRhZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJw'@;
put 'aXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJl'@;
put 'YWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUr'@;
put 'eG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RPIiwiYXBw'@;
put 'bGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2Zm'@;
put 'aWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhj'@;
put 'ZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoidGFibGVzIiwiYXBwbGlj'@;
put 'YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv'@;
put 'cm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp'@;
put 'Y2Vkb2N1bWVudC5tb2RlbCtkYXRhIjoiZGF0YW1vZGVscyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92'@;
put 'bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu'@;
put 'ZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMt'@;
put 'cGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LExkPWZ1bmN0aW9uKCl7dmFyIHk9e3dvcmtib29rczp7eGxz'@;
put 'eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1l'@;
put 'eGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRl'@;
put 'bXBsYXRlLm1haW4reG1sIn0sc3Ryczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRTdHJpbmdzIn0sY29tbWVudHM6'@;
put 'e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h'@;
put 'dHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hhcnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5j'@;
put 'aGFydHNoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5tcy1leGNlbC5kaWFsb2dzaGVldCJ9LG1hY3Jvczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54'@;
put 'bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUifSxwaXZvdHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBp'@;
put 'dm90VGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2FjaGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiLHhs'@;
put 'c2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIix4bHNiOiJhcHBs'@;
put 'aWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMifSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29u'@;
put 'bmVjdGlvbnMifSxsaW5rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9LHN0eWxlczp7eGxzeDoiYXBw'@;
put 'bGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gbHQoeSkuZm9yRWFjaChmdW5jdGlvbihQKXtbInhsc20iLCJ4bGFtIl0uZm9yRWFj'@;
put 'aChmdW5jdGlvbihJKXt5W1BdW0ldfHwoeVtQXVtJXT15W1BdLnhsc3gpfSl9KSxsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKFApe2x0KHlbUF0pLmZvckVhY2goZnVuY3Rpb24oSSl7T2xbeVtQXVtJXV09UH0pfSkseX0oKSxOYz1mdW5jdGlvbiBUZSh5KXtmb3IodmFyIFA9W10sST1sdCh5KSxR'@;
put 'PTA7USE9PUkubGVuZ3RoOysrUSludWxsPT1QW3lbSVtRXV1dJiYoUFt5W0lbUV1dXT1bXSksUFt5W0lbUV1dXS5wdXNoKElbUV0pO3JldHVybiBQfShPbCk7aXMuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIGYz'@;
put 'PVNyKCJUeXBlcyIsbnVsbCx7eG1sbnM6aXMuQ1QsInhtbG5zOnhzZCI6aXMueHNkLCJ4bWxuczp4c2kiOmlzLnhzaX0pLG45PVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJd'@;
put 'LFsidm1sIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJp'@;
put 'bWFnZS9wbmciXSxbImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBk'@;
put 'ZiIsImFwcGxpY2F0aW9uL3BkZiJdLFsicmVscyIsTmMucmVsc1swXV1dLm1hcChmdW5jdGlvbih5KXtyZXR1cm4gU3IoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjp5WzBdLENvbnRlbnRUeXBlOnlbMV19KX0pLEhpPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1h'@;
put 'cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3Np'@;
put 'bmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw'@;
put 'cy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92'@;
put 'YmFQcm9qZWN0In07ZnVuY3Rpb24gQmkoeSl7dmFyIFA9eS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiB5LnNsaWNlKDAsUCsxKSsiX3JlbHMvIit5LnNsaWNlKFArMSkrIi5yZWxzIn1mdW5jdGlvbiBEbyh5LFApe3ZhciBJPXsiIWlkIjp7fX07aWYoIXkpcmV0dXJuIEk7Ii8iIT09UC5jaGFy'@;
put 'QXQoMCkmJihQPSIvIitQKTt2YXIgUT17fTtyZXR1cm4oeS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9bG4ocmUpO2lmKCI8UmVsYXRpb25zaGlwIj09PWdlWzBdKXt2YXIgX2U9e307X2UuVHlwZT1nZS5UeXBlLF9lLlRhcmdldD1nZS5UYXJnZXQsX2UuSWQ9'@;
put 'Z2UuSWQsX2UuVGFyZ2V0TW9kZT1nZS5UYXJnZXRNb2RlO3ZhciB2ZT0iRXh0ZXJuYWwiPT09Z2UuVGFyZ2V0TW9kZT9nZS5UYXJnZXQ6c24oZ2UuVGFyZ2V0LFApO0lbdmVdPV9lLFFbZ2UuSWRdPV9lfX0pLElbIiFpZCJdPVEsSX1pcy5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9y'@;
put 'bWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciB1YT1TcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6aXMuUkVMU30pO2Z1bmN0aW9uIFhhKHkpe3ZhciBQPVtCbix1YV07cmV0dXJuIGx0KHlbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe1BbUC5sZW5ndGhd'@;
put 'PVNyKCJSZWxhdGlvbnNoaXAiLG51bGwseVsiIWlkIl1bSV0pfSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1JlbGF0aW9uc2hpcHM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIEwxPVtIaS5ITElOSyxIaS5YUEFUSCxIaS5YTUlTU107ZnVuY3Rp'@;
put 'b24gem8oeSxQLEksUSxyZSxnZSl7aWYocmV8fChyZT17fSkseVsiIWlkIl18fCh5WyIhaWQiXT17fSksUDwwKWZvcihQPTE7eVsiIWlkIl1bInJJZCIrUF07KytQKTtpZihyZS5JZD0icklkIitQLHJlLlR5cGU9USxyZS5UYXJnZXQ9SSxnZT9yZS5UYXJnZXRNb2RlPWdlOkwxLmluZGV4T2Yo'@;
put 'cmUuVHlwZSk+LTEmJihyZS5UYXJnZXRNb2RlPSJFeHRlcm5hbCIpLHlbIiFpZCJdW3JlLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAiK1ApO3JldHVybiB5WyIhaWQiXVtyZS5JZF09cmUseVsoIi8iK3JlLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPXJlLFB9'@;
put 'dmFyIFR1PSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IjtmdW5jdGlvbiBJMSh5LFAsSSl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK3krJyI+XG4nLCcgICAgPHJkZjp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2RvY3Mu'@;
put 'b2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycrKEl8fCJvZGYiKSsiIyIrUCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9ZnVuY3Rpb24gVm8oeSxQKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicreSsnIj5cbicsJyAg'@;
put 'ICA8bnMwOmhhc1BhcnQgeG1sbnM6bnMwPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvcGtnIyIgcmRmOnJlc291cmNlPSInK1ArJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfXZhciBTND1mdW5jdGlvbigpe3ZhciB5PSc8'@;
put 'b2ZmaWNlOmRvY3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOm1ldGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVy'@;
put 'bC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxvZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+U2hlZXRKUyAnK00udmVyc2lvbisiPC9tZXRhOmdlbmVyYXRvcj48L29mZmljZTpt'@;
put 'ZXRhPjwvb2ZmaWNlOmRvY3VtZW50LW1ldGE+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geX19KCksUGw9W1siY3A6Y2F0ZWdvcnkiLCJDYXRlZ29yeSJdLFsiY3A6Y29udGVudFN0YXR1cyIsIkNvbnRlbnRTdGF0dXMiXSxbImNwOmtleXdvcmRzIiwiS2V5d29yZHMiXSxbImNwOmxhc3RN'@;
put 'b2RpZmllZEJ5IiwiTGFzdEF1dGhvciJdLFsiY3A6bGFzdFByaW50ZWQiLCJMYXN0UHJpbnRlZCJdLFsiY3A6cmV2aXNpb24iLCJSZXZOdW1iZXIiXSxbImNwOnZlcnNpb24iLCJWZXJzaW9uIl0sWyJkYzpjcmVhdG9yIiwiQXV0aG9yIl0sWyJkYzpkZXNjcmlwdGlvbiIsIkNvbW1lbnRzIl0s'@;
put 'WyJkYzppZGVudGlmaWVyIiwiSWRlbnRpZmllciJdLFsiZGM6bGFuZ3VhZ2UiLCJMYW5ndWFnZSJdLFsiZGM6c3ViamVjdCIsIlN1YmplY3QiXSxbImRjOnRpdGxlIiwiVGl0bGUiXSxbImRjdGVybXM6Y3JlYXRlZCIsIkNyZWF0ZWREYXRlIiwiZGF0ZSJdLFsiZGN0ZXJtczptb2RpZmllZCIs'@;
put 'Ik1vZGlmaWVkRGF0ZSIsImRhdGUiXV07aXMuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLEhpLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNr'@;
put 'YWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiO3ZhciBKYT1mdW5jdGlvbigpe2Zvcih2YXIgeT1uZXcgQXJyYXkoUGwubGVuZ3RoKSxQPTA7UDxQbC5sZW5ndGg7KytQKXt2YXIgST1QbFtQXSxRPSIoPzoiK0lbMF0uc2xpY2UoMCxJWzBdLmluZGV4T2Yo'@;
put 'IjoiKSkrIjopIitJWzBdLnNsaWNlKElbMF0uaW5kZXhPZigiOiIpKzEpO3lbUF09bmV3IFJlZ0V4cCgiPCIrUSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK1ErIj4iKX1yZXR1cm4geX0oKTtmdW5jdGlvbiBPMih5KXt2YXIgUD17fTt5PVBpKHkpO2Zvcih2YXIgST0wO0k8UGwubGVuZ3RoOysr'@;
put 'SSl7dmFyIFE9UGxbSV0scmU9eS5tYXRjaChKYVtJXSk7bnVsbCE9cmUmJnJlLmxlbmd0aD4wJiYoUFtRWzFdXT14cihyZVsxXSkpLCJkYXRlIj09PVFbMl0mJlBbUVsxXV0mJihQW1FbMV1dPUh0KFBbUVsxXV0pKX1yZXR1cm4gUH12YXIgUDI9U3IoImNwOmNvcmVQcm9wZXJ0aWVzIixudWxs'@;
put 'LHsieG1sbnM6Y3AiOmlzLkNPUkVfUFJPUFMsInhtbG5zOmRjIjppcy5kYywieG1sbnM6ZGN0ZXJtcyI6aXMuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOmlzLmRjbWl0eXBlLCJ4bWxuczp4c2kiOmlzLnhzaX0pO2Z1bmN0aW9uIGh1KHksUCxJLFEscmUpe251bGwhPXJlW3ldfHxudWxsPT1Q'@;
put 'fHwiIj09PVB8fChyZVt5XT1QLFA9SHIoUCksUVtRLmxlbmd0aF09ST9Tcih5LFAsSSk6ZnMoeSxQKSl9dmFyIFIxPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRpb24iLCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3RyaW5nIl0sWyJDb21wYW55IiwiQ29tcGFueSIs'@;
put 'InN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIsInN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3NDaGFuZ2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWREb2MiLCJTaGFyZWREb2MiLCJib29sIl0sWyJM'@;
put 'aW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxbIlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRpbmdQYWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFydHMiLCJyYXciXV07ZnVuY3Rpb24gdTAoeSxQ'@;
put 'LEksUSl7dmFyIHJlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgeSlyZT1lMCh5LFEpO2Vsc2UgZm9yKHZhciBnZT0wO2dlPHkubGVuZ3RoOysrZ2UpcmU9cmUuY29uY2F0KHlbZ2VdLm1hcChmdW5jdGlvbihCZSl7cmV0dXJue3Y6QmV9fSkpO3ZhciBfZT0ic3RyaW5nIj09dHlwZW9mIFA/ZTAo'@;
put 'UCxRKS5tYXAoZnVuY3Rpb24oQmUpe3JldHVybiBCZS52fSk6UCx2ZT0wLFNlPTA7aWYoX2UubGVuZ3RoPjApZm9yKHZhciBIZT0wO0hlIT09cmUubGVuZ3RoO0hlKz0yKXtzd2l0Y2goU2U9K3JlW0hlKzFdLnYscmVbSGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNc'@;
put 'dTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVk'@;
put 'Mlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNl'@;
put 'IkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpJLldvcmtzaGVldHM9U2UsSS5TaGVldE5hbWVzPV9lLnNsaWNlKHZlLHZlK1Nl'@;
put 'KTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3MgY29uIG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOkkuTmFtZWRSYW5nZXM9U2UsSS5E'@;
put 'ZWZpbmVkTmFtZXM9X2Uuc2xpY2UodmUsdmUrU2UpO2JyZWFrO2Nhc2UiQ2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6SS5DaGFydHNoZWV0cz1TZSxJLkNoYXJ0TmFtZXM9X2Uuc2xpY2UodmUsdmUrU2UpfXZlKz1TZX19aXMuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0'@;
put 'cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0aWVzIixIaS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIGczPVNyKCJQcm9w'@;
put 'ZXJ0aWVzIixudWxsLHt4bWxuczppcy5FWFRfUFJPUFMsInhtbG5zOnZ0Ijppcy52dH0pO2lzLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixIaS5DVVNUX1BST1BTPSJodHRwOi8vc2No'@;
put 'ZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgQXc9LzxbXj5dKz5bXjxdKi9nLHVtPVNyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczppcy5DVVNUX1BST1BTLCJ4bWxuczp2dCI6aXMudnR9KTt2'@;
put 'YXIgRjI9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIs'@;
put 'TGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoi'@;
put 'Q29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn0sSDI9YmUoRjIpO2Z1bmN0aW9uIFJkKHksUCxJKXt5W1A9SDJbUF18fFBdPUl9ZnVuY3Rpb24gU2MoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEk9eS5yZWFkX3NoaWZ0KDQpO3JldHVy'@;
put 'biBuZXcgRGF0ZSgxZTMqKEkvMWU3Kk1hdGgucG93KDIsMzIpK1AvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIE9kKHksUCxJKXt2YXIgUT15LmwscmU9eS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIik7aWYoSSlmb3IoO3kubC1R'@;
put 'JjM7KSsreS5sO3JldHVybiByZX1mdW5jdGlvbiBQMSh5LFAsSSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBJJiYoeS5sKz00LShRLmxlbmd0aCsxJjMpJjMpLFF9ZnVuY3Rpb24gcWgoeSxQLEkpe3JldHVybiAzMT09PVA/UDEoeSk6T2QoeSwwLEkpfWZ1bmN0aW9u'@;
put 'IFFjKHksUCxJKXtyZXR1cm4gcWgoeSxQLCExPT09ST8wOjQpfWZ1bmN0aW9uIHM5KHkpe3ZhciBQPXkubCxJPUU0KHksYW0pO3JldHVybiAwPT15W3kubF0mJjA9PXlbeS5sKzFdJiZ5LmwtUCYyJiYoeS5sKz0yKSxbSSxFNCh5LE1hKV19ZnVuY3Rpb24gZG0oeSxQKXtmb3IodmFyIEk9eS5y'@;
put 'ZWFkX3NoaWZ0KDQpLFE9e30scmU9MDtyZSE9STsrK3JlKXt2YXIgZ2U9eS5yZWFkX3NoaWZ0KDQpLF9lPXkucmVhZF9zaGlmdCg0KTtRW2dlXT15LnJlYWRfc2hpZnQoX2UsMTIwMD09PVA/InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZSh2LCIiKS5yZXBsYWNlKHAsIiEiKSwxMjAwPT09UCYm'@;
put 'X2UlMiYmKHkubCs9Mil9cmV0dXJuIDMmeS5sJiYoeS5sPXkubD4+Mzw8MiksUX1mdW5jdGlvbiBobSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCksST15LnNsaWNlKHkubCx5LmwrUCk7cmV0dXJuIHkubCs9UCwoMyZQKT4wJiYoeS5sKz00LSgzJlApJjMpLEl9ZnVuY3Rpb24gRTQoeSxQLEkp'@;
put 'e3ZhciByZSxRPXkucmVhZF9zaGlmdCgyKSxnZT1JfHx7fTtpZih5LmwrPTIsUCE9PUhjJiZRIT09UCYmLTE9PT10OS5pbmRleE9mKFApJiYoNDEyNiE9KDY1NTM0JlApfHw0MTI2IT0oNjU1MzQmUSkpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK1ArIiBzYXcgIitRKTtzd2l0'@;
put 'Y2goUD09PUhjP1E6UCl7Y2FzZSAyOnJldHVybiByZT15LnJlYWRfc2hpZnQoMiwiaSIpLGdlLnJhd3x8KHkubCs9MikscmU7Y2FzZSAzOnJldHVybiB5LnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2UgMTE6cmV0dXJuIDAhPT15LnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1cm4geS5yZWFkX3No'@;
put 'aWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIE9kKHksMCw0KS5yZXBsYWNlKHYsIiIpO2Nhc2UgMzE6cmV0dXJuIFAxKHkpO2Nhc2UgNjQ6cmV0dXJuIFNjKHkpO2Nhc2UgNjU6cmV0dXJuIGhtKHkpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0aW9uIER3KHkpe3ZhciBQPXt9O3JldHVybiBQLlNpemU9eS5y'@;
put 'ZWFkX3NoaWZ0KDQpLHkubCs9UC5TaXplKzMtKFAuU2l6ZS0xKSU0LFB9KHkpO2Nhc2UgODA6cmV0dXJuIFFjKHksUSwhZ2UucmF3KS5yZXBsYWNlKHYsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIHg0KHksUCl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBt'@;
put 'dXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIHFoKHksUCwwKX0oeSxRKS5yZXBsYWNlKHYsIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gYTkoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxJPVtdLFE9MDtRPFAvMjsrK1EpSS5wdXNoKHM5KHkpKTtyZXR1cm4gSX0o'@;
put 'eSk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09UT9mdW5jdGlvbiBpOSh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEk9W10sUT0wO1EhPVA7KytRKXt2YXIgcmU9eS5sO0lbUV09eS5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UodiwiIikseS5sLXJlJjImJih5'@;
put 'LmwrPTIpfXJldHVybiBJfSh5KTpmdW5jdGlvbiBvOSh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEk9W10sUT0wO1EhPVA7KytRKUlbUV09eS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZSh2LCIiKTtyZXR1cm4gSX0oeSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5'@;
put 'cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK1ArIiAiK1EpfX1mdW5jdGlvbiBsOSh5LFApe3ZhciBJPXByKDQpLFE9cHIoNCk7c3dpdGNoKEkud3JpdGVfc2hpZnQoNCw4MD09eT8zMTp5KSx5KXtjYXNlIDM6US53cml0ZV9zaGlmdCgtNCxQKTticmVhaztjYXNlIDU6KFE9'@;
put 'cHIoOCkpLndyaXRlX3NoaWZ0KDgsUCwiZiIpO2JyZWFrO2Nhc2UgMTE6US53cml0ZV9zaGlmdCg0LFA/MTowKTticmVhaztjYXNlIDY0OlE9ZnVuY3Rpb24gb2MoeSl7dmFyIEk9KCJzdHJpbmciPT10eXBlb2YgeT9uZXcgRGF0ZShEYXRlLnBhcnNlKHkpKTp5KS5nZXRUaW1lKCkvMWUzKzEx'@;
put 'NjQ0NDczNjAwLFE9SSVNYXRoLnBvdygyLDMyKSxyZT0oSS1RKS9NYXRoLnBvdygyLDMyKTtyZSo9MWU3O3ZhciBnZT0oUSo9MWU3KS9NYXRoLnBvdygyLDMyKXwwO2dlPjAmJihRJT1NYXRoLnBvdygyLDMyKSxyZSs9Z2UpO3ZhciBfZT1wcig4KTtyZXR1cm4gX2Uud3JpdGVfc2hpZnQoNCxR'@;
put 'KSxfZS53cml0ZV9zaGlmdCg0LHJlKSxfZX0oUCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDgwOmZvcigoUT1wcig0KzIqKFAubGVuZ3RoKzEpKyhQLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LFAubGVuZ3RoKzEpLFEud3JpdGVfc2hpZnQoMCxQLCJkYmNzIik7US5sIT1RLmxlbmd0aDsp'@;
put 'US53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit5KyIgIitQKX1yZXR1cm4gUyhbSSxRXSl9ZnVuY3Rpb24gRjEoeSxQKXt2YXIgST15LmwsUT15LnJlYWRfc2hpZnQoNCkscmU9eS5y'@;
put 'ZWFkX3NoaWZ0KDQpLGdlPVtdLF9lPTAsdmU9MCxTZT0tMSxIZT17fTtmb3IoX2U9MDtfZSE9cmU7KytfZSl7dmFyIEJlPXkucmVhZF9zaGlmdCg0KSxHZT15LnJlYWRfc2hpZnQoNCk7Z2VbX2VdPVtCZSxHZStJXX1nZS5zb3J0KGZ1bmN0aW9uKGt0LFR0KXtyZXR1cm4ga3RbMV0tVHRbMV19'@;
put 'KTt2YXIgbnQ9e307Zm9yKF9lPTA7X2UhPXJlOysrX2Upe2lmKHkubCE9PWdlW19lXVsxXSl7dmFyIGR0PSEwO2lmKF9lPjAmJlApc3dpdGNoKFBbZ2VbX2UtMV1bMF1dLnQpe2Nhc2UgMjp5LmwrMj09PWdlW19lXVsxXSYmKHkubCs9MixkdD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6'@;
put 'eS5sPD1nZVtfZV1bMV0mJih5Lmw9Z2VbX2VdWzFdLGR0PSExKX1pZigoIVB8fDA9PV9lKSYmeS5sPD1nZVtfZV1bMV0mJihkdD0hMSx5Lmw9Z2VbX2VdWzFdKSxkdCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitnZVtfZV1bMV0rIiBhdCAiK3kubCsi'@;
put 'IDoiK19lKX1pZihQKXt2YXIgQ3Q9UFtnZVtfZV1bMF1dO2lmKG50W0N0Lm5dPUU0KHksQ3QudCx7cmF3OiEwfSksInZlcnNpb24iPT09Q3QucCYmKG50W0N0Lm5dPVN0cmluZyhudFtDdC5uXT4+MTYpKyIuIisoIjAwMDAiK1N0cmluZyg2NTUzNSZudFtDdC5uXSkpLnNsaWNlKC00KSksIkNv'@;
put 'ZGVQYWdlIj09Q3Qubilzd2l0Y2gobnRbQ3Qubl0pe2Nhc2UgMDpudFtDdC5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2FzZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1'@;
put 'NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6aih2ZT1udFtDdC5uXT4+PjAmNjU1MzUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2RlUGFn'@;
put 'ZTogIitudFtDdC5uXSl9fWVsc2UgaWYoMT09PWdlW19lXVswXSl7aWYodmU9bnQuQ29kZVBhZ2U9RTQoeSx1Myksaih2ZSksLTEhPT1TZSl7dmFyIGN0PXkubDt5Lmw9Z2VbU2VdWzFdLEhlPWRtKHksdmUpLHkubD1jdH19ZWxzZSBpZigwPT09Z2VbX2VdWzBdKXtpZigwPT09dmUpe1NlPV9l'@;
put 'LHkubD1nZVtfZSsxXVsxXTtjb250aW51ZX1IZT1kbSh5LHZlKX1lbHNle3ZhciBGdCxidD1IZVtnZVtfZV1bMF1dO3N3aXRjaCh5W3kubF0pe2Nhc2UgNjU6eS5sKz00LEZ0PWhtKHkpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp5LmwrPTQsRnQ9UWMoeSx5W3kubC00XSkucmVwbGFjZSgvXHUw'@;
put 'MDAwKyQvLCIiKTticmVhaztjYXNlIDM6eS5sKz00LEZ0PXkucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDQpO2JyZWFrO2Nhc2UgNTp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOnkubCs9NCxGdD1Tbyh5'@;
put 'LDQpO2JyZWFrO2Nhc2UgNjQ6eS5sKz00LEZ0PUh0KFNjKHkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIreVt5LmxdKX1udFtidF09RnR9fXJldHVybiB5Lmw9SStRLG50fXZhciBmbT1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5L'@;
put 'QkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hlZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiBMdyh5KXtzd2l0Y2godHlw'@;
put 'ZW9mIHkpe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHx5KT09eT8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIGM5KHksUCxJKXt2YXIgUT1w'@;
put 'cig4KSxyZT1bXSxnZT1bXSxfZT04LHZlPTAsU2U9cHIoOCksSGU9cHIoOCk7aWYoU2Uud3JpdGVfc2hpZnQoNCwyKSxTZS53cml0ZV9zaGlmdCg0LDEyMDApLEhlLndyaXRlX3NoaWZ0KDQsMSksZ2UucHVzaChTZSkscmUucHVzaChIZSksX2UrPTgrU2UubGVuZ3RoLCFQKXsoSGU9cHIoOCkp'@;
put 'LndyaXRlX3NoaWZ0KDQsMCkscmUudW5zaGlmdChIZSk7dmFyIEJlPVtwcig0KV07Zm9yKEJlWzBdLndyaXRlX3NoaWZ0KDQseS5sZW5ndGgpLHZlPTA7dmU8eS5sZW5ndGg7Kyt2ZSl7dmFyIEdlPXlbdmVdWzBdO2ZvcigoU2U9cHIoOCsyKihHZS5sZW5ndGgrMSkrKEdlLmxlbmd0aCUyPzA6'@;
put 'MikpKS53cml0ZV9zaGlmdCg0LHZlKzIpLFNlLndyaXRlX3NoaWZ0KDQsR2UubGVuZ3RoKzEpLFNlLndyaXRlX3NoaWZ0KDAsR2UsImRiY3MiKTtTZS5sIT1TZS5sZW5ndGg7KVNlLndyaXRlX3NoaWZ0KDEsMCk7QmUucHVzaChTZSl9U2U9UyhCZSksZ2UudW5zaGlmdChTZSksX2UrPTgrU2Uu'@;
put 'bGVuZ3RofWZvcih2ZT0wO3ZlPHkubGVuZ3RoOysrdmUpaWYoKCFQfHxQW3lbdmVdWzBdXSkmJiEoZm0uaW5kZXhPZih5W3ZlXVswXSk+LTEpJiZudWxsIT15W3ZlXVsxXSl7dmFyIG50PXlbdmVdWzFdLGR0PTA7aWYoUCl7dmFyIEN0PUlbZHQ9K1BbeVt2ZV1bMF1dXTtpZigidmVyc2lvbiI9'@;
put 'PUN0LnAmJiJzdHJpbmciPT10eXBlb2YgbnQpe3ZhciBjdD1udC5zcGxpdCgiLiIpO250PSgrY3RbMF08PDE2KSsoK2N0WzFdfHwwKX1TZT1sOShDdC50LG50KX1lbHNle3ZhciBidD1MdyhudCk7LTE9PWJ0JiYoYnQ9MzEsbnQ9U3RyaW5nKG50KSksU2U9bDkoYnQsbnQpfWdlLnB1c2goU2Up'@;
put 'LChIZT1wcig4KSkud3JpdGVfc2hpZnQoNCxQP2R0OjIrdmUpLHJlLnB1c2goSGUpLF9lKz04K1NlLmxlbmd0aH12YXIgRnQ9OCooZ2UubGVuZ3RoKzEpO2Zvcih2ZT0wO3ZlPGdlLmxlbmd0aDsrK3ZlKXJlW3ZlXS53cml0ZV9zaGlmdCg0LEZ0KSxGdCs9Z2VbdmVdLmxlbmd0aDtyZXR1cm4g'@;
put 'US53cml0ZV9zaGlmdCg0LF9lKSxRLndyaXRlX3NoaWZ0KDQsZ2UubGVuZ3RoKSxTKFtRXS5jb25jYXQocmUpLmNvbmNhdChnZSkpfWZ1bmN0aW9uIHU5KHksUCxJKXt2YXIgUT15LmNvbnRlbnQ7aWYoIVEpcmV0dXJue307b2woUSwwKTt2YXIgcmUsZ2UsX2UsdmUsU2U9MDtRLmNoaygiZmVm'@;
put 'ZiIsIkJ5dGUgT3JkZXI6ICIpLFEucmVhZF9zaGlmdCgyKTt2YXIgSGU9US5yZWFkX3NoaWZ0KDQpLEJlPVEucmVhZF9zaGlmdCgxNik7aWYoQmUhPT1qZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lEJiZCZSE9PUkpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitC'@;
put 'ZSk7aWYoMSE9PShyZT1RLnJlYWRfc2hpZnQoNCkpJiYyIT09cmUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrcmUpO2lmKGdlPVEucmVhZF9zaGlmdCgxNiksdmU9US5yZWFkX3NoaWZ0KDQpLDE9PT1yZSYmdmUhPT1RLmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGgg'@;
put 'bWlzbWF0Y2g6ICIrdmUrIiAhPT0gIitRLmwpOzI9PT1yZSYmKF9lPVEucmVhZF9zaGlmdCgxNiksU2U9US5yZWFkX3NoaWZ0KDQpKTt2YXIgQ3QsR2U9RjEoUSxQKSxudD17U3lzdGVtSWRlbnRpZmllcjpIZX07Zm9yKHZhciBkdCBpbiBHZSludFtkdF09R2VbZHRdO2lmKG50LkZNVElEPWdl'@;
put 'LDE9PT1yZSlyZXR1cm4gbnQ7aWYoU2UtUS5sPT0yJiYoUS5sKz0yKSxRLmwhPT1TZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK1EubCsiICE9PSAiK1NlKTt0cnl7Q3Q9RjEoUSxudWxsKX1jYXRjaHt9Zm9yKGR0IGluIEN0KW50W2R0XT1DdFtkdF07cmV0dXJuIG50'@;
put 'LkZNVElEPVtnZSxfZV0sbnR9ZnVuY3Rpb24geWkoeSxQLEksUSxyZSxnZSl7dmFyIF9lPXByKHJlPzY4OjQ4KSx2ZT1bX2VdO19lLndyaXRlX3NoaWZ0KDIsNjU1MzQpLF9lLndyaXRlX3NoaWZ0KDIsMCksX2Uud3JpdGVfc2hpZnQoNCw4NDI0MTI1OTkpLF9lLndyaXRlX3NoaWZ0KDE2LGpl'@;
put 'LnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQsImhleCIpLF9lLndyaXRlX3NoaWZ0KDQscmU/MjoxKSxfZS53cml0ZV9zaGlmdCgxNixQLCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LHJlPzY4OjQ4KTt2YXIgU2U9YzkoeSxJLFEpO2lmKHZlLnB1c2goU2UpLHJlKXt2YXIgSGU9YzkocmUsbnVs'@;
put 'bCxudWxsKTtfZS53cml0ZV9zaGlmdCgxNixnZSwiaGV4IiksX2Uud3JpdGVfc2hpZnQoNCw2OCtTZS5sZW5ndGgpLHZlLnB1c2goSGUpfXJldHVybiBTKHZlKX1mdW5jdGlvbiBQZCh5LFApe3JldHVybiB5LnJlYWRfc2hpZnQoUCksbnVsbH1mdW5jdGlvbiBTbyh5LFApe3JldHVybiAxPT09'@;
put 'eS5yZWFkX3NoaWZ0KFApfWZ1bmN0aW9uIEZsKHksUCl7cmV0dXJuIFB8fChQPXByKDIpKSxQLndyaXRlX3NoaWZ0KDIsKyEheSksUH1mdW5jdGlvbiBobCh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBmdSh5LFApe3JldHVybiBQfHwoUD1wcigyKSksUC53cml0ZV9z'@;
put 'aGlmdCgyLHkpLFB9ZnVuY3Rpb24gSDEoeSxQKXtyZXR1cm4gZnVuY3Rpb24gazQoeSxQLEkpe2Zvcih2YXIgUT1bXSxyZT15LmwrUDt5Lmw8cmU7KVEucHVzaChJKHkscmUteS5sKSk7aWYocmUhPT15LmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBRfSh5LFAsaGwp'@;
put 'fWZ1bmN0aW9uIGQ5KHksUCxJKXtyZXR1cm4gSXx8KEk9cHIoMikpLEkud3JpdGVfc2hpZnQoMSwiZSI9PVA/K3k6KyEheSksSS53cml0ZV9zaGlmdCgxLCJlIj09UD8xOjApLEl9ZnVuY3Rpb24gRmQoeSxQLEkpe3ZhciBRPXkucmVhZF9zaGlmdChJJiZJLmJpZmY+PTEyPzI6MSkscmU9InNi'@;
put 'Y3MtY29udCIsZ2U9TztJJiZJLmJpZmY+PTgmJihPPTEyMDApLEkmJjghPUkuYmlmZj8xMj09SS5iaWZmJiYocmU9IndzdHIiKTp5LnJlYWRfc2hpZnQoMSkmJihyZT0iZGJjcy1jb250IiksSS5iaWZmPj0yJiZJLmJpZmY8PTUmJihyZT0iY3BzdHIiKTt2YXIgdmU9UT95LnJlYWRfc2hpZnQo'@;
put 'USxyZSk6IiI7cmV0dXJuIE89Z2UsdmV9ZnVuY3Rpb24gZ20oeSl7dmFyIFA9TztPPTEyMDA7dmFyIFNlLEk9eS5yZWFkX3NoaWZ0KDIpLFE9eS5yZWFkX3NoaWZ0KDEpLHJlPTQmUSxnZT04JlEsX2U9MSsoMSZRKSx2ZT0wLEhlPXt9O2dlJiYodmU9eS5yZWFkX3NoaWZ0KDIpKSxyZSYmKFNl'@;
put 'PXkucmVhZF9zaGlmdCg0KSk7dmFyIEdlPTA9PT1JPyIiOnkucmVhZF9zaGlmdChJLDI9PV9lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihnZSlmb3IoSGUuX1I9W107dmUtLSA+MDspSGUuX1IucHVzaCh7aWR4OnkucmVhZF9zaGlmdCgyKSxpZm50OnkucmVhZF9zaGlmdCgyKX0pO3Jl'@;
put 'dHVybiByZSYmKHkubCs9U2UpLEhlLnQ9R2UsZ2V8fChIZS5yPSI8dD4iK0hlLnQrIjwvdD4iKSxPPVAsSGV9ZnVuY3Rpb24gajAoeSxQKXt2YXIgST15LlImJnkuUi5sZW5ndGh8fHkucjt5LnImJih5LlI9RG0oeS5yKSk7dmFyIFE9IiIscmU9MDtJP3kuUi5mb3JFYWNoKGZ1bmN0aW9uKEN0'@;
put 'KXtyZSsrLFErPUN0LnZ8fCIifSk6KFE9eS50fHwiIixyZT0xKTt2YXIgZ2U9cHIoMysocmU+MT8yOjApKTtnZS53cml0ZV9zaGlmdCgyLFEubGVuZ3RoKSxnZS53cml0ZV9zaGlmdCgxLDF8KHJlPjE/ODowKSkscmU+MSYmZ2Uud3JpdGVfc2hpZnQoMixyZSk7dmFyIF9lPXByKDIqUS5sZW5n'@;
put 'dGgpO19lLndyaXRlX3NoaWZ0KDIqUS5sZW5ndGgsUSwidXRmMTZsZSIpO3ZhciB2ZT1bZ2UsX2VdO2lmKEkpe3ZhciBTZT1wcig0KnkuUi5sZW5ndGgpLEhlPTA7dmUucHVzaChTZSk7Zm9yKHZhciBCZT0wO0JlPHkuUi5sZW5ndGg7KytCZSl7dmFyIEdlPXkuUltCZV07U2Uud3JpdGVfc2hp'@;
put 'ZnQoMixIZSksSGUrPShHZS52fHwiIikubGVuZ3RoO3ZhciBudD1HZS5zP2d1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6R2Uuc30sUCk6MCxkdD1QLmNlbGxYZnNbbnRdLmZvbnRJZDtTZS53cml0ZV9zaGlmdCgyLGR0PDQ/ZHQ6ZHQrMSl9fXJldHVybiBTKHZlKX1m'@;
put 'dW5jdGlvbiBIZCh5LFAsSSl7aWYoSSl7aWYoSS5iaWZmPj0yJiZJLmJpZmY8PTUpcmV0dXJuIHkucmVhZF9zaGlmdChQLCJjcHN0ciIpO2lmKEkuYmlmZj49MTIpcmV0dXJuIHkucmVhZF9zaGlmdChQLCJkYmNzLWNvbnQiKX12YXIgcmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiB5LnJlYWRf'@;
put 'c2hpZnQoUCwwPT09cmU/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9uIE4yKHksUCxJKXt2YXIgUT15LnJlYWRfc2hpZnQoSSYmMj09SS5iaWZmPzE6Mik7cmV0dXJuIDA9PT1RPyh5LmwrKywiIik6SGQoeSxRLEkpfWZ1bmN0aW9uIFYyKHksUCxJKXtpZihJLmJpZmY+NSlyZXR1'@;
put 'cm4gTjIoeSwwLEkpO3ZhciBRPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PVE/KHkubCsrLCIiKTp5LnJlYWRfc2hpZnQoUSxJLmJpZmY8PTR8fCF5LmxlbnM/ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVuY3Rpb24gbW0oeSxQLEkpe3JldHVybiBJfHwoST1wcigzKzIqeS5sZW5ndGgpKSxJ'@;
put 'LndyaXRlX3NoaWZ0KDIseS5sZW5ndGgpLEkud3JpdGVfc2hpZnQoMSwxKSxJLndyaXRlX3NoaWZ0KDMxLHksInV0ZjE2bGUiKSxJfWZ1bmN0aW9uIEE0KHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gUD4wP3kucmVhZF9zaGlmdChQLCJ1dGYxNmxlIikucmVwbGFjZSh2LCIiKToi'@;
put 'In1mdW5jdGlvbiBfMyh5LFApe1B8fChQPXByKDYrMip5Lmxlbmd0aCkpLFAud3JpdGVfc2hpZnQoNCwxK3kubGVuZ3RoKTtmb3IodmFyIEk9MDtJPHkubGVuZ3RoOysrSSlQLndyaXRlX3NoaWZ0KDIseS5jaGFyQ29kZUF0KEkpKTtyZXR1cm4gUC53cml0ZV9zaGlmdCgyLDApLFB9ZnVuY3Rp'@;
put 'b24gYjMoeSl7dmFyIFA9cHIoNTEyKSxJPTAsUT15LlRhcmdldDsiZmlsZTovLyI9PVEuc2xpY2UoMCw3KSYmKFE9US5zbGljZSg3KSk7dmFyIHJlPVEuaW5kZXhPZigiIyIpLGdlPXJlPi0xPzMxOjIzO3N3aXRjaChRLmNoYXJBdCgwKSl7Y2FzZSIjIjpnZT0yODticmVhaztjYXNlIi4iOmdl'@;
put 'Jj0tM31QLndyaXRlX3NoaWZ0KDQsMiksUC53cml0ZV9zaGlmdCg0LGdlKTt2YXIgX2U9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihJPTA7STxfZS5sZW5ndGg7KytJKVAud3JpdGVfc2hpZnQoNCxfZVtJXSk7aWYoMjg9PWdlKV8zKFE9US5zbGljZSgxKSxQKTtlbHNlIGlm'@;
put 'KDImZ2Upe2ZvcihfZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksST0wO0k8X2UubGVuZ3RoOysrSSlQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoX2VbSV0sMTYpKTt2YXIgdmU9cmU+LTE/US5zbGljZSgwLHJlKTpRO2ZvcihQ'@;
put 'LndyaXRlX3NoaWZ0KDQsMioodmUubGVuZ3RoKzEpKSxJPTA7STx2ZS5sZW5ndGg7KytJKVAud3JpdGVfc2hpZnQoMix2ZS5jaGFyQ29kZUF0KEkpKTtQLndyaXRlX3NoaWZ0KDIsMCksOCZnZSYmXzMocmU+LTE/US5zbGljZShyZSsxKToiIixQKX1lbHNle2ZvcihfZT0iMDMgMDMgMDAgMDAg'@;
put 'MDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksST0wO0k8X2UubGVuZ3RoOysrSSlQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoX2VbSV0sMTYpKTtmb3IodmFyIFNlPTA7Ii4uLyI9PVEuc2xpY2UoMypTZSwzKlNlKzMpfHwiLi5cXCI9PVEuc2xpY2UoMypT'@;
put 'ZSwzKlNlKzMpOykrK1NlO2ZvcihQLndyaXRlX3NoaWZ0KDIsU2UpLFAud3JpdGVfc2hpZnQoNCxRLmxlbmd0aC0zKlNlKzEpLEk9MDtJPFEubGVuZ3RoLTMqU2U7KytJKVAud3JpdGVfc2hpZnQoMSwyNTUmUS5jaGFyQ29kZUF0KEkrMypTZSkpO2ZvcihQLndyaXRlX3NoaWZ0KDEsMCksUC53'@;
put 'cml0ZV9zaGlmdCgyLDY1NTM1KSxQLndyaXRlX3NoaWZ0KDIsNTcwMDUpLEk9MDtJPDY7KytJKVAud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUC5zbGljZSgwLFAubCl9ZnVuY3Rpb24gdm0oeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEp'@;
put 'LHkucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gaDkoeSxQKXt2YXIgST12bSh5KTtyZXR1cm4gSVszXT0wLEl9ZnVuY3Rpb24gSXUoeSl7cmV0dXJue3I6eS5yZWFkX3NoaWZ0KDIpLGM6eS5yZWFkX3NoaWZ0KDIpLGl4ZmU6eS5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiB6MCh5LFAsSSxRKXty'@;
put 'ZXR1cm4gUXx8KFE9cHIoNikpLFEud3JpdGVfc2hpZnQoMix5KSxRLndyaXRlX3NoaWZ0KDIsUCksUS53cml0ZV9zaGlmdCgyLEl8fDApLFF9ZnVuY3Rpb24gcDkoeSxQLEkpe3ZhciBRPUkuYmlmZj44PzQ6MjtyZXR1cm5beS5yZWFkX3NoaWZ0KFEpLHkucmVhZF9zaGlmdChRLCJpIikseS5y'@;
put 'ZWFkX3NoaWZ0KFEsImkiKV19ZnVuY3Rpb24gZzkoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSxYYyh5KV19ZnVuY3Rpb24gS2goeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEk9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOnkucmVhZF9zaGlmdCgyKSxyOlB9LGU6e2M6eS5yZWFkX3No'@;
put 'aWZ0KDIpLHI6SX19fWZ1bmN0aW9uIFUwKHksUCl7cmV0dXJuIFB8fChQPXByKDgpKSxQLndyaXRlX3NoaWZ0KDIseS5zLnIpLFAud3JpdGVfc2hpZnQoMix5LmUuciksUC53cml0ZV9zaGlmdCgyLHkucy5jKSxQLndyaXRlX3NoaWZ0KDIseS5lLmMpLFB9ZnVuY3Rpb24gX20oeSl7dmFyIFA9'@;
put 'eS5yZWFkX3NoaWZ0KDIpLEk9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOnkucmVhZF9zaGlmdCgxKSxyOlB9LGU6e2M6eS5yZWFkX3NoaWZ0KDEpLHI6SX19fXZhciB2YT1fbTtmdW5jdGlvbiBUNCh5KXt5LmwrPTQ7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEk9eS5yZWFkX3NoaWZ0KDIp'@;
put 'LFE9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTEyLFtJLFAsUV19ZnVuY3Rpb24gSGwoeSl7eS5sKz0yLHkubCs9eS5yZWFkX3NoaWZ0KDIpfXZhciBibT17MDpIbCw0OkhsLDU6SGwsNjpIbCw3OmZ1bmN0aW9uIF85KHkpe3JldHVybiB5LmwrPTQseS5jZj15LnJlYWRfc2hpZnQoMiks'@;
put 'e319LDg6SGwsOTpIbCwxMDpIbCwxMTpIbCwxMjpIbCwxMzpmdW5jdGlvbiB2OSh5KXt2YXIgUD17fTtyZXR1cm4geS5sKz00LHkubCs9MTYsUC5mU2hhcmVkTm90ZT15LnJlYWRfc2hpZnQoMikseS5sKz00LFB9LDE0OkhsLDE1OkhsLDE2OkhsLDE3OkhsLDE4OkhsLDE5OkhsLDIwOkhsLDIx'@;
put 'OlQ0fTtmdW5jdGlvbiBSdSh5LFApe3ZhciBJPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKEkuQklGRlZlcj15LnJlYWRfc2hpZnQoMiksKFAtPTIpPj0yJiYoSS5kdD15LnJlYWRfc2hpZnQoMikseS5sLT0yKSxJLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2Ug'@;
put 'NzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihQPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrSS5CSUZGVmVyKX1yZXR1cm4geS5yZWFkX3NoaWZ0KFApLEl9ZnVuY3Rpb24gRDQoeSxQLEkpe3ZhciBRPTE1MzYscmU9MTY7c3dpdGNo'@;
put 'KEkuYm9va1R5cGUpe2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpicmVhaztjYXNlImJpZmY1IjpRPTEyODAscmU9ODticmVhaztjYXNlImJpZmY0IjpRPTQscmU9NjticmVhaztjYXNlImJpZmYzIjpRPTMscmU9NjticmVhaztjYXNlImJpZmYyIjpRPTIscmU9NDticmVhaztkZWZhdWx0OnRocm93'@;
put 'IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9dmFyIGdlPXByKHJlKTtyZXR1cm4gZ2Uud3JpdGVfc2hpZnQoMixRKSxnZS53cml0ZV9zaGlmdCgyLFApLHJlPjQmJmdlLndyaXRlX3NoaWZ0KDIsMjkyODIpLHJlPjYmJmdlLndyaXRlX3NoaWZ0KDIsMTk5NykscmU+OCYm'@;
put 'KGdlLndyaXRlX3NoaWZ0KDIsNDkxNjEpLGdlLndyaXRlX3NoaWZ0KDIsMSksZ2Uud3JpdGVfc2hpZnQoMiwxNzk4KSxnZS53cml0ZV9zaGlmdCgyLDApKSxnZX1mdW5jdGlvbiBZMCh5LFApe3ZhciBJPSFQfHxQLmJpZmY+PTg/MjoxLFE9cHIoOCtJKnkubmFtZS5sZW5ndGgpO1Eud3JpdGVf'@;
put 'c2hpZnQoNCx5LnBvcyksUS53cml0ZV9zaGlmdCgxLHkuaHN8fDApLFEud3JpdGVfc2hpZnQoMSx5LmR0KSxRLndyaXRlX3NoaWZ0KDEseS5uYW1lLmxlbmd0aCksUC5iaWZmPj04JiZRLndyaXRlX3NoaWZ0KDEsMSksUS53cml0ZV9zaGlmdChJKnkubmFtZS5sZW5ndGgseS5uYW1lLFAuYmlm'@;
put 'Zjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciByZT1RLnNsaWNlKDAsUS5sKTtyZXR1cm4gcmUubD1RLmwscmV9ZnVuY3Rpb24gRHIoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCg0KSxKYyh5KX1mdW5jdGlvbiBlcyh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLGwwKHkpfWZ1bmN0aW9uIHNjKHks'@;
put 'UCxJKXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLG9TKHksMCxJKX1mdW5jdGlvbiBXMCh5LFAsSSl7dmFyIFE9MDtJJiYyPT1JLmJpZmZ8fChRPXkucmVhZF9zaGlmdCgyKSk7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gSSYmMj09SS5iaWZmJiYoUT0xLShyZT4+MTUpLHJlJj0zMjc2'@;
put 'NyksW3tVbnN5bmNlZDoxJlEsRHlaZXJvOigyJlEpPj4xLEV4QXNjOig0JlEpPj4yLEV4RHNjOig4JlEpPj4zfSxyZV19ZnVuY3Rpb24gWHIoeSxQLEksUSl7dmFyIHJlPUkmJjU9PUkuYmlmZjtRfHwoUT1wcihyZT8zK1AubGVuZ3RoOjUrMipQLmxlbmd0aCkpLFEud3JpdGVfc2hpZnQoMix5'@;
put 'KSxRLndyaXRlX3NoaWZ0KHJlPzE6MixQLmxlbmd0aCkscmV8fFEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KChyZT8xOjIpKlAubGVuZ3RoLFAscmU/InNiY3MiOiJ1dGYxNmxlIik7dmFyIGdlPVEubGVuZ3RoPlEubD9RLnNsaWNlKDAsUS5sKTpRO3JldHVybiBudWxsPT1nZS5s'@;
put 'JiYoZ2UubD1nZS5sZW5ndGgpLGdlfXZhciBUcz1WMjtmdW5jdGlvbiBCdCh5LFAsSSl7dmFyIFE9eS5sK1AscmU9OCE9SS5iaWZmJiZJLmJpZmY/Mjo0LGdlPXkucmVhZF9zaGlmdChyZSksX2U9eS5yZWFkX3NoaWZ0KHJlKSx2ZT15LnJlYWRfc2hpZnQoMiksU2U9eS5yZWFkX3NoaWZ0KDIp'@;
put 'O3JldHVybiB5Lmw9USx7czp7cjpnZSxjOnZlfSxlOntyOl9lLGM6U2V9fX1mdW5jdGlvbiBDbSh5LFAsSSxRKXt2YXIgZ2U9IUl8fCFJLmJpZmZ8fDg9PUkuYmlmZjtRfHwoUT1wcihJJiY1PT1JLmJpZmY/MTY6MjApKSxRLndyaXRlX3NoaWZ0KDIsZ2UmJkkuY2VsbFN0eWxlcyYmeS5mb250'@;
put 'SWQmJih5LmZvbnRJZDw0P3kuZm9udElkOnkuZm9udElkKzEpfHwwKTt2YXIgX2U9MTt5LnByb3RlY3Rpb24mJih5LnByb3RlY3Rpb24uZWRpdGFibGUmJihfZSY9LTIpLHkucHJvdGVjdGlvbi5oaWRkZW4mJihfZXw9MikpLHkuc3R5bGU/KFEud3JpdGVfc2hpZnQoMix5Lm51bUZtdElkfHww'@;
put 'KSxRLndyaXRlX3NoaWZ0KDIsNjU1MjR8X2UpKTooUS53cml0ZV9zaGlmdCgyLHkubnVtRm10SWR8fDApLFEud3JpdGVfc2hpZnQoMixQPDw0fF9lKSk7dmFyIHZlPXkuYWxpZ25tZW50fHx7fTtpZihnZSl7dmFyIFNlPTAsSGU9MDtXbS5pbmRleE9mKHZlLmhvcml6b250YWwpPi0xJiYoU2V8'@;
put 'PVdtLmluZGV4T2YodmUuaG9yaXpvbnRhbCkpLHZlLndyYXBUZXh0JiYoU2V8PTgpLEI0LmluZGV4T2YodmUudmVydGljYWwpPi0xP1NlfD1CNC5pbmRleE9mKHZlLnZlcnRpY2FsKTw8NDpudWxsPT12ZS52ZXJ0aWNhbCYmKFNlfD0zMiksUS53cml0ZV9zaGlmdCgxLFNlKSxRLndyaXRlX3No'@;
put 'aWZ0KDEsMCksdmUuc2hyaW5rVG9GaXQmJihIZXw9MTYpLFEud3JpdGVfc2hpZnQoMixIZSk7dmFyIEJlPW51bGw7bnVsbCE9eS5ib3JkZXJJZCYmKEJlPUkuQm9yZGVycyYmSS5Cb3JkZXJzW3kuYm9yZGVySWR8fDBdfHx7fSk7dmFyIEdlPTAsbnQ9MCxkdD0wO0JlJiYobnVsbCE9QmUubGVm'@;
put 'dCYmQmUubGVmdC5zdHlsZSYmKEdlfD0oZHQ9VzIuaW5kZXhPZihCZS5sZWZ0LnN0eWxlKSk+LTE/ZHQ6MCksbnVsbCE9QmUucmlnaHQmJkJlLnJpZ2h0LnN0eWxlJiYoR2V8PSgoZHQ9VzIuaW5kZXhPZihCZS5yaWdodC5zdHlsZSkpPi0xP2R0OjApPDw0KSxudWxsIT1CZS50b3AmJkJlLnRv'@;
put 'cC5zdHlsZSYmKG50fD0oZHQ9VzIuaW5kZXhPZihCZS50b3Auc3R5bGUpKT4tMT9kdDowKSxudWxsIT1CZS5ib3R0b20mJkJlLmJvdHRvbS5zdHlsZSYmKG50fD0oKGR0PVcyLmluZGV4T2YoQmUuYm90dG9tLnN0eWxlKSk+LTE/ZHQ6MCk8PDQpKSxRLndyaXRlX3NoaWZ0KDEsR2UpLFEud3Jp'@;
put 'dGVfc2hpZnQoMSxudCksUS53cml0ZV9zaGlmdCgyLDApLFEud3JpdGVfc2hpZnQoMiwwKSxRLndyaXRlX3NoaWZ0KDEsMCk7dmFyIEN0PTAsY3Q9SS5GaWxscyYmSS5GaWxsc1t5LmZpbGxJZHx8MF18fHt9OyhjdC5mZ0NvbG9yfHxjdC5iZ0NvbG9yKSYmKEN0fD00KSxRLndyaXRlX3NoaWZ0'@;
put 'KDEsQ3QpO3ZhciBidD0wO2J0fD1IMyhjdC5mZ0NvbG9yLDY1KSxidHw9SDMoY3QuYmdDb2xvciw2NSk8PDcsUS53cml0ZV9zaGlmdCgyLGJ0KX1lbHNlIFEud3JpdGVfc2hpZnQoNCwwKSxRLndyaXRlX3NoaWZ0KDQsMCksUS53cml0ZV9zaGlmdCgyLDApO3JldHVybiBRfWZ1bmN0aW9uIFZj'@;
put 'KHksUCxJKXt2YXIgUT1JdSh5KTsoMj09SS5iaWZmfHw5PT1QKSYmKyt5Lmw7dmFyIHJlPWZ1bmN0aW9uIHBtKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PXkucmVhZF9zaGlmdCgxKT9QOjE9PT1QfSh5KTtyZXR1cm4gUS52YWw9cmUsUS50PSEwPT09cmV8fCExPT09cmU/'@;
put 'ImIiOiJlIixRfXZhciBWMT1mdW5jdGlvbiB5Myh5LFAsSSl7cmV0dXJuIDA9PT1QPyIiOlYyKHksMCxJKX07ZnVuY3Rpb24geTkoeSxQLEkpe3ZhciByZSxRPXkucmVhZF9zaGlmdCgyKSxnZT17ZkJ1aWx0SW46MSZRLGZXYW50QWR2aXNlOlE+Pj4xJjEsZldhbnRQaWN0OlE+Pj4yJjEsZk9s'@;
put 'ZTpRPj4+MyYxLGZPbGVMaW5rOlE+Pj40JjEsY2Y6UT4+PjUmMTAyMyxmSWNvbjpRPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09SS5zYmNjaCYmKHJlPWZ1bmN0aW9uIFJ3KHksUCxJKXt5LmwrPTQ7dmFyIFE9eS5sKyhQLT00KSxyZT1GZCh5LDAsSSksZ2U9eS5yZWFkX3NoaWZ0KDIpO2lmKGdl'@;
put 'IT09KFEtPXkubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK1ErIiAhPSAiK2dlKTtyZXR1cm4geS5sKz1nZSxyZX0oeSxQLTIsSSkpLGdlLmJvZHk9cmV8fHkucmVhZF9zaGlmdChQLTIpLCJzdHJpbmciPT10eXBlb2YgcmUmJihnZS5OYW1lPXJl'@;
put 'KSxnZX12YXIgS1Q9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJfeGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1RpdGxlcyIs'@;
put 'Il94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gVncoeSxQLEkpe3ZhciBRPXkubCtQLHJlPXkucmVh'@;
put 'ZF9zaGlmdCgyKSxnZT15LnJlYWRfc2hpZnQoMSksX2U9eS5yZWFkX3NoaWZ0KDEpLHZlPXkucmVhZF9zaGlmdChJJiYyPT1JLmJpZmY/MToyKSxTZT0wOyghSXx8SS5iaWZmPj01KSYmKDUhPUkuYmlmZiYmKHkubCs9MiksU2U9eS5yZWFkX3NoaWZ0KDIpLDU9PUkuYmlmZiYmKHkubCs9Miks'@;
put 'eS5sKz00KTt2YXIgSGU9SGQoeSxfZSxJKTszMiZyZSYmKEhlPUtUW0hlLmNoYXJDb2RlQXQoMCldKTt2YXIgQmU9US15Lmw7SSYmMj09SS5iaWZmJiYtLUJlO3ZhciBHZT1RIT15LmwmJjAhPT12ZSYmQmU+MD9mdW5jdGlvbiBkNih5LFAsSSxRKXt2YXIgX2UscmU9eS5sK1AsZ2U9bjUoeSxR'@;
put 'LEkpO3JldHVybiByZSE9PXkubCYmKF9lPWozKHkscmUteS5sLGdlLEkpKSxbZ2UsX2VdfSh5LEJlLEksdmUpOltdO3JldHVybntjaEtleTpnZSxOYW1lOkhlLGl0YWI6U2UscmdjZTpHZX19ZnVuY3Rpb24gU20oeSxQLEkpe2lmKEkuYmlmZjw4KXJldHVybiBmdW5jdGlvbiB3OSh5LFAsSSl7'@;
put 'Mz09eVt5LmwrMV0mJnlbeS5sXSsrO3ZhciBRPUZkKHksMCxJKTtyZXR1cm4gMz09US5jaGFyQ29kZUF0KDApP1Euc2xpY2UoMSk6UX0oeSwwLEkpO2Zvcih2YXIgUT1bXSxyZT15LmwrUCxnZT15LnJlYWRfc2hpZnQoSS5iaWZmPjg/NDoyKTswIT1nZS0tOylRLnB1c2gocDkoeSwwLEkpKTtp'@;
put 'Zih5LmwhPXJlKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK3kubCsiICE9ICIrcmUpO3JldHVybiBRfWZ1bmN0aW9uIGp3KHksUCxJKXt2YXIgUT12YSh5LDYpO3N3aXRjaChJLmJpZmYpe2Nhc2UgMjp5LmwrKyxQLT03O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6eS5sKz0yLFAt'@;
put 'PTg7YnJlYWs7ZGVmYXVsdDp5LmwrPTYsUC09MTJ9cmV0dXJuW1EsZnYoeSxQLEkpXX12YXIgTW09W107ZnVuY3Rpb24gWGgoeSl7dmFyIFA9cHIoMjQpLEk9c3MoeVswXSk7UC53cml0ZV9zaGlmdCgyLEkuciksUC53cml0ZV9zaGlmdCgyLEkuciksUC53cml0ZV9zaGlmdCgyLEkuYyksUC53'@;
put 'cml0ZV9zaGlmdCgyLEkuYyk7Zm9yKHZhciBRPSJkMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxyZT0wO3JlPDE2OysrcmUpUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFFbcmVdLDE2KSk7cmV0dXJuIFMoW1AsYjMoeVsxXSldKX1m'@;
put 'dW5jdGlvbiBRVCh5KXt2YXIgUD15WzFdLlRvb2x0aXAsST1wcigxMCsyKihQLmxlbmd0aCsxKSk7SS53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBRPXNzKHlbMF0pO0kud3JpdGVfc2hpZnQoMixRLnIpLEkud3JpdGVfc2hpZnQoMixRLnIpLEkud3JpdGVfc2hpZnQoMixRLmMpLEkud3JpdGVf'@;
put 'c2hpZnQoMixRLmMpO2Zvcih2YXIgcmU9MDtyZTxQLmxlbmd0aDsrK3JlKUkud3JpdGVfc2hpZnQoMixQLmNoYXJDb2RlQXQocmUpKTtyZXR1cm4gSS53cml0ZV9zaGlmdCgyLDApLEl9ZnVuY3Rpb24gVmQoeSxQLEkpe2lmKCFJLmNlbGxTdHlsZXMpcmV0dXJuIHljKHksUCk7dmFyIFE9SSYm'@;
put 'SS5iaWZmPj0xMj80OjIscmU9eS5yZWFkX3NoaWZ0KFEpLGdlPXkucmVhZF9zaGlmdChRKSxfZT15LnJlYWRfc2hpZnQoUSksdmU9eS5yZWFkX3NoaWZ0KFEpLFNlPXkucmVhZF9zaGlmdCgyKTsyPT1RJiYoeS5sKz0yKTt2YXIgSGU9e3M6cmUsZTpnZSx3Ol9lLGl4ZmU6dmUsZmxhZ3M6U2V9'@;
put 'O3JldHVybihJLmJpZmY+PTV8fCFJLmJpZmYpJiYoSGUubGV2ZWw9U2U+PjgmNyksSGV9TW1bOF09ZnVuY3Rpb24oeSxQKXt2YXIgST15LmwrUDt5LmwrPTEwO3ZhciBRPXkucmVhZF9zaGlmdCgyKTt5LmwrPTQseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz00O3ZhciByZT15LnJlYWRfc2hp'@;
put 'ZnQoMSk7cmV0dXJuIHkubCs9cmUseS5sPUkse2ZtdDpRfX07dmFyIHF3PUl1LEt3PUgxLGlEPU4yO3ZhciBCMj1mdW5jdGlvbigpe3ZhciB5PXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywx'@;
put 'MDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0Mzcs'@;
put 'MTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1NTo4'@;
put 'NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0sUD1iZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6'@;
put 'ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEy'@;
put 'NTMsMDoyMDEyN30pO2Z1bmN0aW9uIHJlKFNlLEhlKXt2YXIgQmU9SGV8fHt9O3JldHVybiBCZS5kYXRlTkZ8fChCZS5kYXRlTkY9Inl5eXltbWRkIiksazEoZnVuY3Rpb24gUShTZSxIZSl7dmFyIEJlPVtdLEdlPUcoMSk7c3dpdGNoKEhlLnR5cGUpe2Nhc2UiYmFzZTY0IjpHZT1EKHNlLmRl'@;
put 'Y29kZShTZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpHZT1EKFNlKTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6R2U9U2V9b2woR2UsMCk7dmFyIG50PUdlLnJlYWRfc2hpZnQoMSksZHQ9ISEoMTM2Jm50KSxDdD0hMSxjdD0hMTtzd2l0Y2gobnQpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAx'@;
put 'MzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OkN0PSEwLGR0PSEwO2JyZWFrO2Nhc2UgMTQwOmN0PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitudC50b1N0cmluZygxNikpfXZhciBidD0wLEZ0PTUy'@;
put 'MTsyPT1udCYmKGJ0PUdlLnJlYWRfc2hpZnQoMikpLEdlLmwrPTMsMiE9bnQmJihidD1HZS5yZWFkX3NoaWZ0KDQpKSxidD4xMDQ4NTc2JiYoYnQ9MWU2KSwyIT1udCYmKEZ0PUdlLnJlYWRfc2hpZnQoMikpO3ZhciBrdD1HZS5yZWFkX3NoaWZ0KDIpLFR0PUhlLmNvZGVwYWdlfHwxMjUyOzIh'@;
put 'PW50JiYoR2UubCs9MTYsR2UucmVhZF9zaGlmdCgxKSwwIT09R2VbR2UubF0mJihUdD15W0dlW0dlLmxdXSksR2UubCs9MSxHZS5sKz0yKSxjdCYmKEdlLmwrPTM2KTtmb3IodmFyIFp0PVtdLHBuPXt9LEtuPU1hdGgubWluKEdlLmxlbmd0aCwyPT1udD81MjE6RnQtMTAtKEN0PzI2NDowKSks'@;
put 'dW49Y3Q/MzI6MTE7R2UubDxLbiYmMTMhPUdlW0dlLmxdOylzd2l0Y2gocG49e30scG4ubmFtZT1jcHRhYmxlLnV0aWxzLmRlY29kZShUdCxHZS5zbGljZShHZS5sLEdlLmwrdW4pKS5yZXBsYWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIiksR2UubCs9dW4scG4udHlwZT1TdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKEdlLnJlYWRfc2hpZnQoMSkpLDIhPW50JiYhY3QmJihwbi5vZmZzZXQ9R2UucmVhZF9zaGlmdCg0KSkscG4ubGVuPUdlLnJlYWRfc2hpZnQoMSksMj09bnQmJihwbi5vZmZzZXQ9R2UucmVhZF9zaGlmdCgyKSkscG4uZGVjPUdlLnJlYWRfc2hpZnQoMSkscG4ubmFtZS5sZW5ndGgm'@;
put 'Jlp0LnB1c2gocG4pLDIhPW50JiYoR2UubCs9Y3Q/MTM6MTQpLHBuLnR5cGUpe2Nhc2UiQiI6KCFDdHx8OCE9cG4ubGVuKSYmSGUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitwbi5uYW1lKyI6Iitwbi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6SGUuV1RGJiZjb25zb2xlLmxv'@;
put 'ZygiU2tpcHBpbmcgIitwbi5uYW1lKyI6Iitwbi50eXBlKTticmVhaztjYXNlIisiOmNhc2UiMCI6Y2FzZSJAIjpjYXNlIkMiOmNhc2UiRCI6Y2FzZSJGIjpjYXNlIkkiOmNhc2UiTCI6Y2FzZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cg'@;
put 'bmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrcG4udHlwZSl9aWYoMTMhPT1HZVtHZS5sXSYmKEdlLmw9RnQtMSksMTMhPT1HZS5yZWFkX3NoaWZ0KDEpKXRocm93IG5ldyBFcnJvcigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrR2UubCsiICIrR2VbR2UubF0pO0dlLmw9RnQ7'@;
put 'dmFyIHFuPTAsem49MDtmb3IoQmVbMF09W10sem49MDt6biE9WnQubGVuZ3RoOysrem4pQmVbMF1bem5dPVp0W3puXS5uYW1lO2Zvcig7YnQtLSA+MDspaWYoNDIhPT1HZVtHZS5sXSlmb3IoKytHZS5sLEJlWysrcW5dPVtdLHpuPTAsem49MDt6biE9WnQubGVuZ3RoOysrem4pe3ZhciBrbj1H'@;
put 'ZS5zbGljZShHZS5sLEdlLmwrWnRbem5dLmxlbik7R2UubCs9WnRbem5dLmxlbixvbChrbiwwKTt2YXIgZXI9Y3B0YWJsZS51dGlscy5kZWNvZGUoVHQsa24pO3N3aXRjaChadFt6bl0udHlwZSl7Y2FzZSJDIjplci50cmltKCkubGVuZ3RoJiYoQmVbcW5dW3puXT1lci5yZXBsYWNlKC9ccysk'@;
put 'LywiIikpO2JyZWFrO2Nhc2UiRCI6QmVbcW5dW3puXT04PT09ZXIubGVuZ3RoP25ldyBEYXRlKCtlci5zbGljZSgwLDQpLCtlci5zbGljZSg0LDYpLTEsK2VyLnNsaWNlKDYsOCkpOmVyO2JyZWFrO2Nhc2UiRiI6QmVbcW5dW3puXT1wYXJzZUZsb2F0KGVyLnRyaW0oKSk7YnJlYWs7Y2FzZSIr'@;
put 'IjpjYXNlIkkiOkJlW3FuXVt6bl09Y3Q/MjE0NzQ4MzY0OF5rbi5yZWFkX3NoaWZ0KC00LCJpIik6a24ucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goZXIudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpCZVtxbl1bem5dPSEwO2JyZWFrO2Nhc2Ui'@;
put 'TiI6Y2FzZSJGIjpCZVtxbl1bem5dPSExO2JyZWFrO2Nhc2UiIjpjYXNlIj8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5yZWNvZ25pemVkIEw6fCIrZXIrInwiKX1icmVhaztjYXNlIk0iOmlmKCFkdCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8g'@;
put 'Zm9yIHR5cGUgIitudC50b1N0cmluZygxNikpO0JlW3FuXVt6bl09IiMjTUVNTyMjIisoY3Q/cGFyc2VJbnQoZXIudHJpbSgpLDEwKTprbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4iOihlcj1lci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1lciYmKEJlW3FuXVt6'@;
put 'bl09K2VyfHwwKTticmVhaztjYXNlIkAiOkJlW3FuXVt6bl09bmV3IERhdGUoa24ucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1NjgzMmU1KTticmVhaztjYXNlIlQiOkJlW3FuXVt6bl09bmV3IERhdGUoODY0ZTUqKGtuLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkra24ucmVhZF9zaGlmdCg0KSk7'@;
put 'YnJlYWs7Y2FzZSJZIjpCZVtxbl1bem5dPWtuLnJlYWRfc2hpZnQoNCwiaSIpLzFlNDticmVhaztjYXNlIk8iOkJlW3FuXVt6bl09LWtuLnJlYWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNlIkIiOmlmKEN0JiY4PT1adFt6bl0ubGVuKXtCZVtxbl1bem5dPWtuLnJlYWRfc2hpZnQoOCwiZiIp'@;
put 'O2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjprbi5sKz1adFt6bl0ubGVuO2JyZWFrO2Nhc2UiMCI6aWYoIl9OdWxsRmxhZ3MiPT09WnRbem5dLm5hbWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitadFt6bl0udHlwZSl9fWVsc2UgR2Uu'@;
put 'bCs9a3Q7aWYoMiE9bnQmJkdlLmw8R2UubGVuZ3RoJiYyNiE9R2VbR2UubCsrXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBFT0YgTWFya2VyIG1pc3NpbmcgIisoR2UubC0xKSsiIG9mICIrR2UubGVuZ3RoKyIgIitHZVtHZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEhlJiZIZS5zaGVldFJv'@;
put 'd3MmJihCZT1CZS5zbGljZSgwLEhlLnNoZWV0Um93cykpLEJlfShTZSxCZSksQmUpfXZhciBfZT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAsIiI6MH07cmV0dXJue3ZlcnNpb25zOlsyLDMsNDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBnZShTZSxIZSl7dHJ5'@;
put 'e3JldHVybiBFZChyZShTZSxIZSksSGUpfWNhdGNoKEJlKXtpZihIZSYmSGUuV1RGKXRocm93IEJlfXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0OnJlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gdmUoU2UsSGUpe3ZhciBCZT1IZXx8e307aWYoK0JlLmNvZGVwYWdlPj0w'@;
put 'JiZqKCtCZS5jb2RlcGFnZSksInN0cmluZyI9PUJlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBHZT13YygpLG50PUg2KFNlLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksZHQ9bnRbMF0sQ3Q9bnQuc2xpY2UoMSksY3Q9'@;
put 'MCxidD0wLEZ0PTAsa3Q9MTtmb3IoY3Q9MDtjdDxkdC5sZW5ndGg7KytjdClpZihudWxsIT1jdCl7aWYoKytGdCwibnVtYmVyIj09dHlwZW9mIGR0W2N0XSYmKGR0W2N0XT1kdFtjdF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIGR0W2N0XSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJ'@;
put 'bnZhbGlkIGNvbHVtbiBuYW1lICIrZHRbY3RdKyIgfCIrdHlwZW9mIGR0W2N0XSsifCIpO2lmKGR0LmluZGV4T2YoZHRbY3RdKSE9PWN0KWZvcihidD0wO2J0PDEwMjQ7KytidClpZigtMT09ZHQuaW5kZXhPZihkdFtjdF0rIl8iK2J0KSl7ZHRbY3RdKz0iXyIrYnQ7YnJlYWt9fXZhciBUdD1P'@;
put 'aShTZVsiIXJlZiJdKSxadD1bXTtmb3IoY3Q9MDtjdDw9VHQuZS5jLVR0LnMuYzsrK2N0KXt2YXIgcG49W107Zm9yKGJ0PTA7YnQ8Q3QubGVuZ3RoOysrYnQpbnVsbCE9Q3RbYnRdW2N0XSYmcG4ucHVzaChDdFtidF1bY3RdKTtpZigwIT1wbi5sZW5ndGgmJm51bGwhPWR0W2N0XSl7dmFyIEtu'@;
put 'PSIiLHVuPSIiO2ZvcihidD0wO2J0PHBuLmxlbmd0aDsrK2J0KXtzd2l0Y2godHlwZW9mIHBuW2J0XSl7Y2FzZSJudW1iZXIiOnVuPSJCIjticmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDp1bj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjp1bj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOnVuPXBu'@;
put 'W2J0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KEtuPUtuJiZLbiE9dW4/IkMiOnVuKSlicmVha31rdCs9X2VbS25dfHwwLFp0W2N0XT1Lbn1lbHNlIFp0W2N0XT0iPyJ9dmFyIHFuPUdlLm5leHQoMzIpO2Zvcihxbi53cml0ZV9zaGlmdCg0LDMxODkwMjU3NikscW4ud3JpdGVf'@;
put 'c2hpZnQoNCxDdC5sZW5ndGgpLHFuLndyaXRlX3NoaWZ0KDIsMjk2KzMyKkZ0KSxxbi53cml0ZV9zaGlmdCgyLGt0KSxjdD0wO2N0PDQ7KytjdClxbi53cml0ZV9zaGlmdCg0LDApO2Zvcihxbi53cml0ZV9zaGlmdCg0LDB8KCtQW1JdfHwzKTw8OCksY3Q9MCxidD0wO2N0PGR0Lmxlbmd0aDsr'@;
put 'K2N0KWlmKG51bGwhPWR0W2N0XSl7dmFyIHpuPUdlLm5leHQoMzIpLGtuPShkdFtjdF0uc2xpY2UoLTEwKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNlKDAsMTEpO3puLndyaXRlX3NoaWZ0KDEsa24sInNiY3MiKSx6bi53cml0ZV9zaGlmdCgxLCI/Ij09WnRbY3RdPyJDIjpadFtj'@;
put 'dF0sInNiY3MiKSx6bi53cml0ZV9zaGlmdCg0LGJ0KSx6bi53cml0ZV9zaGlmdCgxLF9lW1p0W2N0XV18fDApLHpuLndyaXRlX3NoaWZ0KDEsMCksem4ud3JpdGVfc2hpZnQoMSwyKSx6bi53cml0ZV9zaGlmdCg0LDApLHpuLndyaXRlX3NoaWZ0KDEsMCksem4ud3JpdGVfc2hpZnQoNCwwKSx6'@;
put 'bi53cml0ZV9zaGlmdCg0LDApLGJ0Kz1fZVtadFtjdF1dfHwwfXZhciBlcj1HZS5uZXh0KDI2NCk7Zm9yKGVyLndyaXRlX3NoaWZ0KDQsMTMpLGN0PTA7Y3Q8NjU7KytjdCllci53cml0ZV9zaGlmdCg0LDApO2ZvcihjdD0wO2N0PEN0Lmxlbmd0aDsrK2N0KXt2YXIgdHI9R2UubmV4dChrdCk7'@;
put 'Zm9yKHRyLndyaXRlX3NoaWZ0KDEsMCksYnQ9MDtidDxkdC5sZW5ndGg7KytidClpZihudWxsIT1kdFtidF0pc3dpdGNoKFp0W2J0XSl7Y2FzZSJMIjp0ci53cml0ZV9zaGlmdCgxLG51bGw9PUN0W2N0XVtidF0/NjM6Q3RbY3RdW2J0XT84NDo3MCk7YnJlYWs7Y2FzZSJCIjp0ci53cml0ZV9z'@;
put 'aGlmdCg4LEN0W2N0XVtidF18fDAsImYiKTticmVhaztjYXNlIkQiOkN0W2N0XVtidF0/KHRyLndyaXRlX3NoaWZ0KDQsKCIwMDAwIitDdFtjdF1bYnRdLmdldEZ1bGxZZWFyKCkpLnNsaWNlKC00KSwic2JjcyIpLHRyLndyaXRlX3NoaWZ0KDIsKCIwMCIrKEN0W2N0XVtidF0uZ2V0TW9udGgo'@;
put 'KSsxKSkuc2xpY2UoLTIpLCJzYmNzIiksdHIud3JpdGVfc2hpZnQoMiwoIjAwIitDdFtjdF1bYnRdLmdldERhdGUoKSkuc2xpY2UoLTIpLCJzYmNzIikpOnRyLndyaXRlX3NoaWZ0KDgsIjAwMDAwMDAwIiwic2JjcyIpO2JyZWFrO2Nhc2UiQyI6dmFyIFpuPVN0cmluZyhDdFtjdF1bYnRdfHwi'@;
put 'Iik7Zm9yKHRyLndyaXRlX3NoaWZ0KDEsWm4sInNiY3MiKSxGdD0wO0Z0PDI1MC1abi5sZW5ndGg7KytGdCl0ci53cml0ZV9zaGlmdCgxLDMyKX19cmV0dXJuIEdlLm5leHQoMSkud3JpdGVfc2hpZnQoMSwyNiksR2UuZW5kKCl9fX0oKSxFOT1mdW5jdGlvbigpe3ZhciB5PXtBQToiXHhjMCIs'@;
put 'QkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoi'@;
put 'XHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhlNCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJc'@;
put 'eGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZiIixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46'@;
put 'MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUToxODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6'@;
put 'MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sUD1uZXcgUmVnRXhwKCJceDFiTigiK2x0KHkpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxc'@;
put 'JDEiKSsifFxcfCkiLCJnbSIpLEk9ZnVuY3Rpb24obnQsZHQpe3ZhciBDdD15W2R0XTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEN0P2VlKEN0KTpDdH0sUT1mdW5jdGlvbihudCxkdCxDdCl7dmFyIGN0PWR0LmNoYXJDb2RlQXQoMCktMzI8PDR8Q3QuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4g'@;
put 'NTk9PWN0P250OmVlKGN0KX07ZnVuY3Rpb24gZ2UobnQsZHQpe3ZhciBlcixDdD1udC5zcGxpdCgvW1xuXHJdKy8pLGN0PS0xLGJ0PS0xLEZ0PTAsa3Q9MCxUdD1bXSxadD1bXSxwbj1udWxsLEtuPXt9LHVuPVtdLHFuPVtdLHpuPVtdLGtuPTA7Zm9yKCtkdC5jb2RlcGFnZT49MCYmaigrZHQu'@;
put 'Y29kZXBhZ2UpO0Z0IT09Q3QubGVuZ3RoOysrRnQpe2tuPTA7dmFyIHNpLHRyPUN0W0Z0XS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csUSkucmVwbGFjZShQLEkpLFpuPXRyLnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rp'@;
put 'b24od2kpe3JldHVybiB3aS5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYodHIubGVuZ3RoPjApc3dpdGNoKFpuWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2UiQiI6Y2FzZSJPIjpjYXNlIlciOmJyZWFrO2Nhc2UiUCI6IlAiPT1ablsxXS5jaGFyQXQoMCkmJlp0LnB1c2godHIuc2xpY2Uo'@;
put 'MykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciB4aT0hMSxJaT0hMSxRcj0hMSx1cj0hMSxBbj0tMSx2cj0tMTtmb3Ioa3Q9MTtrdDxabi5sZW5ndGg7KytrdClzd2l0Y2goWm5ba3RdLmNoYXJBdCgwKSl7Y2FzZSJBIjpjYXNlIkciOmJyZWFrO2Nhc2UiWCI6YnQ9cGFy'@;
put 'c2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xLElpPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKGN0PXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMSxJaXx8KGJ0PTApLGVyPVR0Lmxlbmd0aDtlcjw9Y3Q7KytlcilUdFtlcl09W107YnJlYWs7Y2FzZSJLIjonIic9PT0oc2k9Wm5ba3RdLnNsaWNlKDEp'@;
put 'KS5jaGFyQXQoMCk/c2k9c2kuc2xpY2UoMSxzaS5sZW5ndGgtMSk6IlRSVUUiPT09c2k/c2k9ITA6IkZBTFNFIj09PXNpP3NpPSExOmlzTmFOKFduKHNpKSk/aXNOYU4oZW4oc2kpLmdldERhdGUoKSl8fChzaT1IdChzaSkpOihzaT1XbihzaSksbnVsbCE9PXBuJiZ3LmlzX2RhdGUocG4pJiYo'@;
put 'c2k9aHQoc2kpKSksdHlwZW9mIGNwdGFibGU8InUiJiYic3RyaW5nIj09dHlwZW9mIHNpJiYic3RyaW5nIiE9KGR0fHx7fSkudHlwZSYmKGR0fHx7fSkuY29kZXBhZ2UmJihzaT1jcHRhYmxlLnV0aWxzLmRlY29kZShkdC5jb2RlcGFnZSxzaSkpLHhpPSEwO2JyZWFrO2Nhc2UiRSI6dXI9ITA7'@;
put 'dmFyIHJyPWFmKFpuW2t0XS5zbGljZSgxKSx7cjpjdCxjOmJ0fSk7VHRbY3RdW2J0XT1bVHRbY3RdW2J0XSxycl07YnJlYWs7Y2FzZSJTIjpRcj0hMCxUdFtjdF1bYnRdPVtUdFtjdF1bYnRdLCJTNVMiXTticmVhaztjYXNlIlIiOkFuPXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMTticmVh'@;
put 'aztjYXNlIkMiOnZyPXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGR0JiZkdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit0cil9aWYoeGkmJihUdFtjdF1bYnRdJiYyPT1UdFtjdF1bYnRdLmxlbmd0aD9UdFtjdF1bYnRdWzBdPXNp'@;
put 'OlR0W2N0XVtidF09c2kscG49bnVsbCksUXIpe2lmKHVyKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVsYSIpO3ZhciBTbj1Bbj4tMSYmVHRbQW5dW3ZyXTtpZighU258fCFTblsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVk'@;
put 'IGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO1R0W2N0XVtidF1bMV09akMoU25bMV0se3I6Y3QtQW4sYzpidC12cn0pfWJyZWFrO2Nhc2UiRiI6dmFyIG1yPTA7Zm9yKGt0PTE7a3Q8Wm4ubGVuZ3RoOysra3Qpc3dpdGNoKFpuW2t0XS5jaGFyQXQoMCkpe2Nhc2UiWCI6YnQ9cGFyc2VJbnQo'@;
put 'Wm5ba3RdLnNsaWNlKDEpKS0xLCsrbXI7YnJlYWs7Y2FzZSJZIjpmb3IoY3Q9cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xLGVyPVR0Lmxlbmd0aDtlcjw9Y3Q7KytlcilUdFtlcl09W107YnJlYWs7Y2FzZSJNIjprbj1wYXJzZUludChabltrdF0uc2xpY2UoMSkpLzIwO2JyZWFrO2Nhc2Ui'@;
put 'RiI6Y2FzZSJHIjpjYXNlIlMiOmNhc2UiRCI6Y2FzZSJOIjpicmVhaztjYXNlIlAiOnBuPVp0W3BhcnNlSW50KFpuW2t0XS5zbGljZSgxKSldO2JyZWFrO2Nhc2UiVyI6Zm9yKHpuPVpuW2t0XS5zbGljZSgxKS5zcGxpdCgiICIpLGVyPXBhcnNlSW50KHpuWzBdLDEwKTtlcjw9cGFyc2VJbnQo'@;
put 'em5bMV0sMTApOysrZXIpa249cGFyc2VJbnQoem5bMl0sMTApLHFuW2VyLTFdPTA9PT1rbj97aGlkZGVuOiEwfTp7d2NoOmtufSxwdShxbltlci0xXSk7YnJlYWs7Y2FzZSJDIjpxbltidD1wYXJzZUludChabltrdF0uc2xpY2UoMSkpLTFdfHwocW5bYnRdPXt9KTticmVhaztjYXNlIlIiOnVu'@;
put 'W2N0PXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMV18fCh1bltjdF09e30pLGtuPjA/KHVuW2N0XS5ocHQ9a24sdW5bY3RdLmhweD1VMShrbikpOjA9PT1rbiYmKHVuW2N0XS5oaWRkZW49ITApO2JyZWFrO2RlZmF1bHQ6aWYoZHQmJmR0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFk'@;
put 'IHJlY29yZCAiK3RyKX1tcjwxJiYocG49bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkdCYmZHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrdHIpfX1yZXR1cm4gdW4ubGVuZ3RoPjAmJihLblsiIXJvd3MiXT11bikscW4ubGVuZ3RoPjAmJihLblsiIWNvbHMiXT1xbiks'@;
put 'ZHQmJmR0LnNoZWV0Um93cyYmKFR0PVR0LnNsaWNlKDAsZHQuc2hlZXRSb3dzKSksW1R0LEtuXX1mdW5jdGlvbiBfZShudCxkdCl7dmFyIEN0PWZ1bmN0aW9uIHJlKG50LGR0KXtzd2l0Y2goZHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBnZShzZS5kZWNvZGUobnQpLGR0KTtjYXNlImJp'@;
put 'bmFyeSI6cmV0dXJuIGdlKG50LGR0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIGdlKG50LnRvU3RyaW5nKCJiaW5hcnkiKSxkdCk7Y2FzZSJhcnJheSI6cmV0dXJuIGdlKFB0KG50KSxkdCl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2R0LnR5cGUpfShudCxkdCksYnQ9Q3Rb'@;
put 'MV0sRnQ9azEoQ3RbMF0sZHQpO3JldHVybiBsdChidCkuZm9yRWFjaChmdW5jdGlvbihrdCl7RnRba3RdPWJ0W2t0XX0pLEZ0fWZ1bmN0aW9uIFNlKG50LGR0LEN0LGN0KXt2YXIgYnQ9IkM7WSIrKEN0KzEpKyI7WCIrKGN0KzEpKyI7SyI7c3dpdGNoKG50LnQpe2Nhc2UibiI6YnQrPW50LnZ8'@;
put 'fDAsbnQuZiYmIW50LkYmJihidCs9IjtFIitLOShudC5mLHtyOkN0LGM6Y3R9KSk7YnJlYWs7Y2FzZSJiIjpidCs9bnQudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOmJ0Kz1udC53fHxudC52O2JyZWFrO2Nhc2UiZCI6YnQrPSciJysobnQud3x8bnQudikrJyInO2JyZWFrO2Nhc2Ui'@;
put 'cyI6YnQrPSciJytudC52LnJlcGxhY2UoLyIvZywiIikrJyInfXJldHVybiBidH1yZXR1cm4geVsifCJdPTI1NCx7dG9fd29ya2Jvb2s6ZnVuY3Rpb24gdmUobnQsZHQpe3JldHVybiBFZChfZShudCxkdCksZHQpfSx0b19zaGVldDpfZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIEdlKG50LGR0KXt2'@;
put 'YXIgRnQsQ3Q9WyJJRDtQU2hlZXRKUztOO0UiXSxjdD1bXSxidD1PaShudFsiIXJlZiJdKSxrdD1BcnJheS5pc0FycmF5KG50KSxUdD0iXHJcbiI7Q3QucHVzaCgiUDtQR2VuZXJhbCIpLEN0LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLG50WyIhY29scyJdJiZmdW5jdGlvbiBIZShudCxkdCl7'@;
put 'ZHQuZm9yRWFjaChmdW5jdGlvbihDdCxjdCl7dmFyIGJ0PSJGO1ciKyhjdCsxKSsiICIrKGN0KzEpKyIgIjtDdC5oaWRkZW4/YnQrPSIwIjooIm51bWJlciI9PXR5cGVvZiBDdC53aWR0aCYmIUN0LndweCYmKEN0LndweD14YyhDdC53aWR0aCkpLCJudW1iZXIiPT10eXBlb2YgQ3Qud3B4JiYh'@;
put 'Q3Qud2NoJiYoQ3Qud2NoPXRmKEN0LndweCkpLCJudW1iZXIiPT10eXBlb2YgQ3Qud2NoJiYoYnQrPU1hdGgucm91bmQoQ3Qud2NoKSkpLCIgIiE9YnQuY2hhckF0KGJ0Lmxlbmd0aC0xKSYmbnQucHVzaChidCl9KX0oQ3QsbnRbIiFjb2xzIl0pLG50WyIhcm93cyJdJiZmdW5jdGlvbiBCZShu'@;
put 'dCxkdCl7ZHQuZm9yRWFjaChmdW5jdGlvbihDdCxjdCl7dmFyIGJ0PSJGOyI7Q3QuaGlkZGVuP2J0Kz0iTTA7IjpDdC5ocHQ/YnQrPSJNIisyMCpDdC5ocHQrIjsiOkN0LmhweCYmKGJ0Kz0iTSIrMjAqajIoQ3QuaHB4KSsiOyIpLGJ0Lmxlbmd0aD4yJiZudC5wdXNoKGJ0KyJSIisoY3QrMSkp'@;
put 'fSl9KEN0LG50WyIhcm93cyJdKSxDdC5wdXNoKCJCO1kiKyhidC5lLnItYnQucy5yKzEpKyI7WCIrKGJ0LmUuYy1idC5zLmMrMSkrIjtEIitbYnQucy5jLGJ0LnMucixidC5lLmMsYnQuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgWnQ9YnQucy5yO1p0PD1idC5lLnI7KytadClmb3IodmFyIHBu'@;
put 'PWJ0LnMuYztwbjw9YnQuZS5jOysrcG4pe3ZhciBLbj1kaSh7cjpadCxjOnBufSk7KEZ0PWt0PyhudFtadF18fFtdKVtwbl06bnRbS25dKSYmKG51bGwhPUZ0LnZ8fEZ0LmYmJiFGdC5GKSYmY3QucHVzaChTZShGdCwwLFp0LHBuKSl9cmV0dXJuIEN0LmpvaW4oVHQpK1R0K2N0LmpvaW4oVHQp'@;
put 'K1R0KyJFIitUdH19fSgpLE0zPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUChnZSxfZSl7Zm9yKHZhciB2ZT1nZS5zcGxpdCgiXG4iKSxTZT0tMSxIZT0tMSxCZT0wLEdlPVtdO0JlIT09dmUubGVuZ3RoOysrQmUpaWYoIkJPVCIhPT12ZVtCZV0udHJpbSgpKXtpZighKFNlPDApKXtmb3IodmFyIG50'@;
put 'PXZlW0JlXS50cmltKCkuc3BsaXQoIiwiKSxkdD1udFswXSxDdD1udFsxXSxjdD12ZVsrK0JlXXx8IiI7MSYoY3QubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmQmU8dmUubGVuZ3RoLTE7KWN0Kz0iXG4iK3ZlWysrQmVdO3N3aXRjaChjdD1jdC50cmltKCksK2R0KXtjYXNlLTE6aWYoIkJP'@;
put 'VCI9PT1jdCl7R2VbKytTZV09W10sSGU9MDtjb250aW51ZX1pZigiRU9EIiE9PWN0KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNvbW1hbmQgIitjdCk7YnJlYWs7Y2FzZSAwOkdlW1NlXVtIZV09IlRSVUUiPT09Y3R8fCJGQUxTRSIhPT1jdCYmKGlzTmFOKFdu'@;
put 'KEN0KSk/aXNOYU4oZW4oQ3QpLmdldERhdGUoKSk/Q3Q6SHQoQ3QpOlduKEN0KSksKytIZTticmVhaztjYXNlIDE6KGN0PShjdD1jdC5zbGljZSgxLGN0Lmxlbmd0aC0xKSkucmVwbGFjZSgvIiIvZywnIicpKSYmY3QubWF0Y2goL149Ii4qIiQvKSYmKGN0PWN0LnNsaWNlKDIsLTEpKSxHZVtT'@;
put 'ZV1bSGUrK109IiIhPT1jdD9jdDpudWxsfWlmKCJFT0QiPT09Y3QpYnJlYWt9fWVsc2UgR2VbKytTZV09W10sSGU9MDtyZXR1cm4gX2UmJl9lLnNoZWV0Um93cyYmKEdlPUdlLnNsaWNlKDAsX2Uuc2hlZXRSb3dzKSksR2V9ZnVuY3Rpb24gSShnZSxfZSl7cmV0dXJuIGsxKGZ1bmN0aW9uIHko'@;
put 'Z2UsX2Upe3N3aXRjaChfZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFAoc2UuZGVjb2RlKGdlKSxfZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBQKGdlLF9lKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFAoZ2UudG9TdHJpbmcoImJpbmFyeSIpLF9lKTtjYXNlImFycmF5IjpyZXR1cm4gUChQdChn'@;
put 'ZSksX2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitfZS50eXBlKX0oZ2UsX2UpLF9lKX12YXIgZ2UsX2U7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFEoZ2UsX2Upe3JldHVybiBFZChJKGdlLF9lKSxfZSl9LHRvX3NoZWV0OkksZnJvbV9zaGVldDooZ2U9ZnVu'@;
put 'Y3Rpb24oU2UsSGUsQmUsR2UsbnQpe1NlLnB1c2goSGUpLFNlLnB1c2goQmUrIiwiK0dlKSxTZS5wdXNoKCciJytudC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sX2U9ZnVuY3Rpb24oU2UsSGUsQmUsR2Upe1NlLnB1c2goSGUrIiwiK0JlKSxTZS5wdXNoKDE9PUhlPyciJytHZS5yZXBsYWNl'@;
put 'KC8iL2csJyIiJykrJyInOkdlKX0sZnVuY3Rpb24oU2Upe3ZhciBHZSxIZT1bXSxCZT1PaShTZVsiIXJlZiJdKSxudD1BcnJheS5pc0FycmF5KFNlKTtnZShIZSwiVEFCTEUiLDAsMSwic2hlZXRqcyIpLGdlKEhlLCJWRUNUT1JTIiwwLEJlLmUuci1CZS5zLnIrMSwiIiksZ2UoSGUsIlRVUExF'@;
put 'UyIsMCxCZS5lLmMtQmUucy5jKzEsIiIpLGdlKEhlLCJEQVRBIiwwLDAsIiIpO2Zvcih2YXIgZHQ9QmUucy5yO2R0PD1CZS5lLnI7KytkdCl7X2UoSGUsLTEsMCwiQk9UIik7Zm9yKHZhciBDdD1CZS5zLmM7Q3Q8PUJlLmUuYzsrK0N0KXt2YXIgY3Q9ZGkoe3I6ZHQsYzpDdH0pO2lmKEdlPW50'@;
put 'PyhTZVtkdF18fFtdKVtDdF06U2VbY3RdKXN3aXRjaChHZS50KXtjYXNlIm4iOnZhciBidD1HZS53OyFidCYmbnVsbCE9R2UudiYmKGJ0PUdlLnYpLG51bGw9PWJ0P19lKEhlLDEsMCxHZS5mJiYhR2UuRj8iPSIrR2UuZjoiIik6X2UoSGUsMCxidCwiViIpO2JyZWFrO2Nhc2UiYiI6X2UoSGUs'@;
put 'MCxHZS52PzE6MCxHZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOl9lKEhlLDEsMCxpc05hTihHZS52KT9HZS52Oic9IicrR2UudisnIicpO2JyZWFrO2Nhc2UiZCI6R2Uud3x8KEdlLnc9dy5mb3JtYXQoR2Uuenx8dy5fdGFibGVbMTRdLFVlKEh0KEdlLnYpKSkpLF9lKEhlLDAs'@;
put 'R2UudywiViIpO2JyZWFrO2RlZmF1bHQ6X2UoSGUsMSwwLCIiKX1lbHNlIF9lKEhlLDEsMCwiIil9fXJldHVybiBfZShIZSwtMSwwLCJFT0QiKSxIZS5qb2luKCJcclxuIil9KX19KCksTzQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KEdlKXtyZXR1cm4gR2UucmVwbGFjZSgvXFxiL2csIlxcIiku'@;
put 'cmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiBQKEdlKXtyZXR1cm4gR2UucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFjZSgvOi9nLCJcXGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBRKEdlLG50KXtyZXR1cm4gazEoZnVuY3Rpb24g'@;
put 'SShHZSxudCl7Zm9yKHZhciBkdD1HZS5zcGxpdCgiXG4iKSxDdD0tMSxjdD0tMSxidD0wLEZ0PVtdO2J0IT09ZHQubGVuZ3RoOysrYnQpe3ZhciBrdD1kdFtidF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09a3RbMF0pe3ZhciBUdD1zcyhrdFsxXSk7aWYoRnQubGVuZ3RoPD1UdC5y'@;
put 'KWZvcihDdD1GdC5sZW5ndGg7Q3Q8PVR0LnI7KytDdClGdFtDdF18fChGdFtDdF09W10pO3N3aXRjaChDdD1UdC5yLGN0PVR0LmMsa3RbMl0pe2Nhc2UidCI6RnRbQ3RdW2N0XT15KGt0WzNdKTticmVhaztjYXNlInYiOkZ0W0N0XVtjdF09K2t0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgWnQ9'@;
put 'a3Rba3QubGVuZ3RoLTFdO2Nhc2UidnRjIjpGdFtDdF1bY3RdPSJubCI9PT1rdFszXT8hIStrdFs0XTora3RbNF0sInZ0ZiI9PWt0WzJdJiYoRnRbQ3RdW2N0XT1bRnRbQ3RdW2N0XSxadF0pfX19cmV0dXJuIG50JiZudC5zaGVldFJvd3MmJihGdD1GdC5zbGljZSgwLG50LnNoZWV0Um93cykp'@;
put 'LEZ0fShHZSxudCksbnQpfXZhciBnZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksX2U9WyItLVNv'@;
put 'Y2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHZlPVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLFNlPSIt'@;
put 'LVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIEhlKEdlKXtpZighR2V8fCFHZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgQ3QsbnQ9W10sZHQ9W10sY3Q9IiIsYnQ9V3MoR2VbIiFyZWYiXSksRnQ9QXJyYXkuaXNBcnJheShHZSksa3Q9YnQucy5yO2t0PD1i'@;
put 'dC5lLnI7KytrdClmb3IodmFyIFR0PWJ0LnMuYztUdDw9YnQuZS5jOysrVHQpaWYoY3Q9ZGkoe3I6a3QsYzpUdH0pLChDdD1GdD8oR2Vba3RdfHxbXSlbVHRdOkdlW2N0XSkmJm51bGwhPUN0LnYmJiJ6IiE9PUN0LnQpe3N3aXRjaChkdD1bImNlbGwiLGN0LCJ0Il0sQ3QudCl7Y2FzZSJzIjpj'@;
put 'YXNlInN0ciI6ZHQucHVzaChQKEN0LnYpKTticmVhaztjYXNlIm4iOkN0LmY/KGR0WzJdPSJ2dGYiLGR0WzNdPSJuIixkdFs0XT1DdC52LGR0WzVdPVAoQ3QuZikpOihkdFsyXT0idiIsZHRbM109Q3Qudik7YnJlYWs7Y2FzZSJiIjpkdFsyXT0idnQiKyhDdC5mPyJmIjoiYyIpLGR0WzNdPSJu'@;
put 'bCIsZHRbNF09Q3Qudj8iMSI6IjAiLGR0WzVdPVAoQ3QuZnx8KEN0LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBadD1VZShIdChDdC52KSk7ZHRbMl09InZ0YyIsZHRbM109Im5kIixkdFs0XT0iIitadCxkdFs1XT1DdC53fHx3LmZvcm1hdChDdC56fHx3Ll90YWJsZVsx'@;
put 'NF0sWnQpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9bnQucHVzaChkdC5qb2luKCI6IikpfXJldHVybiBudC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5zLmMrMSkrIjpyOiIrKGJ0LmUuci1idC5zLnIrMSkrIjp0dmY6MSIpLG50LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiks'@;
put 'bnQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcmUoR2UsbnQpe3JldHVybiBFZChRKEdlLG50KSxudCl9LHRvX3NoZWV0OlEsZnJvbV9zaGVldDpmdW5jdGlvbiBCZShHZSl7cmV0dXJuW2dlLF9lLHZlLF9lLEhlKEdlKSxTZV0uam9pbigiXG4iKX19fSgpLEIxPWZ1'@;
put 'bmN0aW9uKCl7ZnVuY3Rpb24geShCZSxHZSxudCxkdCxDdCl7Q3QucmF3P0dlW250XVtkdF09QmU6IiI9PT1CZXx8KEdlW250XVtkdF09JG4oQmUsQ3QpPyRuKEJlLEN0KS52OkJlKX12YXIgST17NDQ6IiwiLDk6Ilx0Iiw1OToiOyJ9LFE9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIHJlKEJl'@;
put 'KXtmb3IodmFyIEdlPXt9LG50PSExLGR0PTAsQ3Q9MDtkdDxCZS5sZW5ndGg7KytkdCkzND09KEN0PUJlLmNoYXJDb2RlQXQoZHQpKT9udD0hbnQ6IW50JiZDdCBpbiBJJiYoR2VbQ3RdPShHZVtDdF18fDApKzEpO2ZvcihkdCBpbiBDdD1bXSxHZSlPYmplY3QucHJvdG90eXBlLmhhc093blBy'@;
put 'b3BlcnR5LmNhbGwoR2UsZHQpJiZDdC5wdXNoKFtHZVtkdF0sZHRdKTtpZighQ3QubGVuZ3RoKWZvcihkdCBpbiBHZT1RKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHZSxkdCkmJkN0LnB1c2goW0dlW2R0XSxkdF0pO3JldHVybiBDdC5zb3J0KGZ1bmN0aW9uKGN0LGJ0'@;
put 'KXtyZXR1cm4gY3RbMF0tYnRbMF18fFFbY3RbMV1dLVFbYnRbMV1dfSksSVtDdC5wb3AoKVsxXV19ZnVuY3Rpb24gX2UoQmUsR2Upe3JldHVybiFHZXx8IUdlLlBSTnx8InNlcD0iPT1CZS5zbGljZSgwLDQpfHxCZS5pbmRleE9mKCJcdCIpPj0wfHxCZS5pbmRleE9mKCIsIik+PTB8fEJlLmlu'@;
put 'ZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBnZShCZSxHZSl7dmFyIG50PUdlfHx7fSxkdD0iIjtudWxsIT10ZSYmbnVsbD09bnQuZGVuc2UmJihudC5kZW5zZT10ZSk7dmFyIEN0PW50LmRlbnNlP1tdOnt9LGN0PXtzOntjOjAscjowfSxlOntjOjAscjowfX07InNlcD0iPT1CZS5zbGljZSgwLDQp'@;
put 'PzEzPT1CZS5jaGFyQ29kZUF0KDUpJiYxMD09QmUuY2hhckNvZGVBdCg2KT8oZHQ9QmUuY2hhckF0KDQpLEJlPUJlLnNsaWNlKDcpKToxMz09QmUuY2hhckNvZGVBdCg1KXx8MTA9PUJlLmNoYXJDb2RlQXQoNSk/KGR0PUJlLmNoYXJBdCg0KSxCZT1CZS5zbGljZSg2KSk6ZHQ9cmUoQmUuc2xp'@;
put 'Y2UoMCwxMDI0KSk6ZHQ9cmUoQmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsRnQ9MCxrdD0wLFR0PTAsWnQ9MCxwbj1kdC5jaGFyQ29kZUF0KDApLEtuPSExLHVuPTAscW49QmUuY2hhckNvZGVBdCgwKTtCZT1CZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciB6bj1udWxsIT1udC5kYXRl'@;
put 'TkY/ZnVuY3Rpb24geGUoeSl7dmFyIFA9Im51bWJlciI9PXR5cGVvZiB5P3cuX3RhYmxlW3ldOnk7cmV0dXJuIFA9UC5yZXBsYWNlKGZlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitQKyIkIil9KG50LmRhdGVORik6bnVsbDtmdW5jdGlvbiBrbigpe3ZhciBlcj1CZS5zbGljZShUdCxadCks'@;
put 'dHI9e307aWYoJyInPT1lci5jaGFyQXQoMCkmJiciJz09ZXIuY2hhckF0KGVyLmxlbmd0aC0xKSYmKGVyPWVyLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PWVyLmxlbmd0aCl0ci50PSJ6IjtlbHNlIGlmKG50LnJhdyl0ci50PSJzIix0ci52PWVyO2Vsc2UgaWYoMD09PWVy'@;
put 'LnRyaW0oKS5sZW5ndGgpdHIudD0icyIsdHIudj1lcjtlbHNlIGlmKDYxPT1lci5jaGFyQ29kZUF0KDApKTM0PT1lci5jaGFyQ29kZUF0KDEpJiYzND09ZXIuY2hhckNvZGVBdChlci5sZW5ndGgtMSk/KHRyLnQ9InMiLHRyLnY9ZXIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpm'@;
put 'dW5jdGlvbiBYOSh5KXtyZXR1cm4gMSE9eS5sZW5ndGh9KGVyKT8odHIudD0ibiIsdHIuZj1lci5zbGljZSgxKSk6KHRyLnQ9InMiLHRyLnY9ZXIpO2Vsc2UgaWYoIlRSVUUiPT1lcil0ci50PSJiIix0ci52PSEwO2Vsc2UgaWYoIkZBTFNFIj09ZXIpdHIudD0iYiIsdHIudj0hMTtlbHNlIGlm'@;
put 'KGlzTmFOKGt0PVduKGVyKSkpaWYoIWlzTmFOKGVuKGVyKS5nZXREYXRlKCkpfHx6biYmZXIubWF0Y2goem4pKXt0ci56PW50LmRhdGVORnx8dy5fdGFibGVbMTRdO3ZhciBabj0wO3puJiZlci5tYXRjaCh6bikmJihlcj1mdW5jdGlvbiBJZSh5LFAsSSl7dmFyIFE9LTEscmU9LTEsZ2U9LTEs'@;
put 'X2U9LTEsdmU9LTEsU2U9LTE7KFAubWF0Y2goZmUpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihHZSxudCl7dmFyIGR0PXBhcnNlSW50KElbbnQrMV0sMTApO3N3aXRjaChHZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpRPWR0O2JyZWFrO2Nhc2UiZCI6Z2U9ZHQ7YnJlYWs7Y2Fz'@;
put 'ZSJoIjpfZT1kdDticmVhaztjYXNlInMiOlNlPWR0O2JyZWFrO2Nhc2UibSI6X2U+PTA/dmU9ZHQ6cmU9ZHR9fSksU2U+PTAmJi0xPT12ZSYmcmU+PTAmJih2ZT1yZSxyZT0tMSk7dmFyIEhlPSgiIisoUT49MD9ROihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIw'@;
put 'MCIrKHJlPj0xP3JlOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhnZT49MT9nZToxKSkuc2xpY2UoLTIpOzc9PUhlLmxlbmd0aCYmKEhlPSIwIitIZSksOD09SGUubGVuZ3RoJiYoSGU9IjIwIitIZSk7dmFyIEJlPSgiMDAiKyhfZT49MD9fZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisodmU+'@;
put 'PTA/dmU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKFNlPj0wP1NlOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PV9lJiYtMT09dmUmJi0xPT1TZT9IZTotMT09USYmLTE9PXJlJiYtMT09Z2U/QmU6SGUrIlQiK0JlfSgwLG50LmRhdGVORixlci5tYXRjaCh6bil8fFtdKSxabj0xKSxudC5jZWxs'@;
put 'RGF0ZXM/KHRyLnQ9ImQiLHRyLnY9SHQoZXIsWm4pKToodHIudD0ibiIsdHIudj1VZShIdChlcixabikpKSwhMSE9PW50LmNlbGxUZXh0JiYodHIudz13LmZvcm1hdCh0ci56LHRyLnYgaW5zdGFuY2VvZiBEYXRlP1VlKHRyLnYpOnRyLnYpKSxudC5jZWxsTkZ8fGRlbGV0ZSB0ci56fWVsc2Ug'@;
put 'dHIudD0icyIsdHIudj1lcjtlbHNlIHRyLnQ9Im4iLCExIT09bnQuY2VsbFRleHQmJih0ci53PWVyKSx0ci52PWt0O2lmKCJ6Ij09dHIudHx8KG50LmRlbnNlPyhDdFtidF18fChDdFtidF09W10pLEN0W2J0XVtGdF09dHIpOkN0W2RpKHtjOkZ0LHI6YnR9KV09dHIpLHFuPUJlLmNoYXJDb2Rl'@;
put 'QXQoVHQ9WnQrMSksY3QuZS5jPEZ0JiYoY3QuZS5jPUZ0KSxjdC5lLnI8YnQmJihjdC5lLnI9YnQpLHVuPT1wbikrK0Z0O2Vsc2UgaWYoRnQ9MCwrK2J0LG50LnNoZWV0Um93cyYmbnQuc2hlZXRSb3dzPD1idClyZXR1cm4hMH1lOmZvcig7WnQ8QmUubGVuZ3RoOysrWnQpc3dpdGNoKHVuPUJl'@;
put 'LmNoYXJDb2RlQXQoWnQpKXtjYXNlIDM0OjM0PT09cW4mJihLbj0hS24pO2JyZWFrO2Nhc2UgcG46Y2FzZSAxMDpjYXNlIDEzOmlmKCFLbiYma24oKSlicmVhayBlfXJldHVybiBadC1UdD4wJiZrbigpLEN0WyIhcmVmIl09T28oY3QpLEN0fShCZSxHZSk6azEoZnVuY3Rpb24gUChCZSxHZSl7'@;
put 'dmFyIG50PUdlfHx7fSxkdD1bXTtpZighQmV8fDA9PT1CZS5sZW5ndGgpcmV0dXJuIGR0O2Zvcih2YXIgQ3Q9QmUuc3BsaXQoL1tcclxuXS8pLGN0PUN0Lmxlbmd0aC0xO2N0Pj0wJiYwPT09Q3RbY3RdLmxlbmd0aDspLS1jdDtmb3IodmFyIGJ0PTEwLEZ0PTAsa3Q9MDtrdDw9Y3Q7KytrdCkt'@;
put 'MT09KEZ0PUN0W2t0XS5pbmRleE9mKCIgIikpP0Z0PUN0W2t0XS5sZW5ndGg6RnQrKyxidD1NYXRoLm1heChidCxGdCk7Zm9yKGt0PTA7a3Q8PWN0Oysra3Qpe2R0W2t0XT1bXTt2YXIgVHQ9MDtmb3IoeShDdFtrdF0uc2xpY2UoMCxidCkudHJpbSgpLGR0LGt0LFR0LG50KSxUdD0xO1R0PD0o'@;
put 'Q3Rba3RdLmxlbmd0aC1idCkvMTArMTsrK1R0KXkoQ3Rba3RdLnNsaWNlKGJ0KzEwKihUdC0xKSxidCsxMCpUdCkudHJpbSgpLGR0LGt0LFR0LG50KX1yZXR1cm4gbnQuc2hlZXRSb3dzJiYoZHQ9ZHQuc2xpY2UoMCxudC5zaGVldFJvd3MpKSxkdH0oQmUsR2UpLEdlKX1mdW5jdGlvbiB2ZShC'@;
put 'ZSxHZSl7dmFyIG50PSIiLGR0PSJzdHJpbmciPT1HZS50eXBlP1swLDAsMCwwXTpmXyhCZSxHZSk7c3dpdGNoKEdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpudD1zZS5kZWNvZGUoQmUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6bnQ9QmU7YnJlYWs7Y2FzZSJidWZmZXIiOm50PTY1'@;
put 'MDAxPT1HZS5jb2RlcGFnZT9CZS50b1N0cmluZygidXRmOCIpOkdlLmNvZGVwYWdlJiZ0eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoR2UuY29kZXBhZ2UsQmUpOkJlLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpudD1QdChCZSk7YnJlYWs7ZGVm'@;
put 'YXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrR2UudHlwZSl9cmV0dXJuIDIzOT09ZHRbMF0mJjE4Nz09ZHRbMV0mJjE5MT09ZHRbMl0/bnQ9UGkobnQuc2xpY2UoMykpOiJiaW5hcnkiPT1HZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJkdlLmNvZGVwYWdlJiYo'@;
put 'bnQ9Y3B0YWJsZS51dGlscy5kZWNvZGUoR2UuY29kZXBhZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMjg1OTEsbnQpKSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT1udC5zbGljZSgwLDE5KT9PNC50b19zaGVldCgic3RyaW5nIj09R2UudHlwZT9udDpQaShudCksR2UpOl9lKG50LEdlKX1yZXR1'@;
put 'cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gU2UoQmUsR2Upe3JldHVybiBFZCh2ZShCZSxHZSksR2UpfSx0b19zaGVldDp2ZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIEhlKEJlKXtmb3IodmFyIGR0LEdlPVtdLG50PU9pKEJlWyIhcmVmIl0pLEN0PUFycmF5LmlzQXJyYXkoQmUpLGN0PW50LnMucjtj'@;
put 'dDw9bnQuZS5yOysrY3Qpe2Zvcih2YXIgYnQ9W10sRnQ9bnQucy5jO0Z0PD1udC5lLmM7KytGdCl7dmFyIGt0PWRpKHtyOmN0LGM6RnR9KTtpZigoZHQ9Q3Q/KEJlW2N0XXx8W10pW0Z0XTpCZVtrdF0pJiZudWxsIT1kdC52KXtmb3IodmFyIFR0PShkdC53fHwoY3UoZHQpLGR0LncpfHwiIiku'@;
put 'c2xpY2UoMCwxMCk7VHQubGVuZ3RoPDEwOylUdCs9IiAiO2J0LnB1c2goVHQrKDA9PT1GdD8iICI6IiIpKX1lbHNlIGJ0LnB1c2goIiAgICAgICAgICAiKX1HZS5wdXNoKGJ0LmpvaW4oIiIpKX1yZXR1cm4gR2Uuam9pbigiXG4iKX19fSgpLFRtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShBbix2'@;
put 'cixycil7aWYoQW4pe29sKEFuLEFuLmx8fDApO2Zvcih2YXIgU249cnIuRW51bXx8UXI7QW4ubDxBbi5sZW5ndGg7KXt2YXIgbXI9QW4ucmVhZF9zaGlmdCgyKSx3aT1Tblttcl18fFNuWzY1NTM1XSxVcj1Bbi5yZWFkX3NoaWZ0KDIpLGppPUFuLmwrVXIsX289d2kuZiYmd2kuZihBbixVcixy'@;
put 'cik7aWYoQW4ubD1qaSx2cihfbyx3aSxtcikpcmV0dXJufX19ZnVuY3Rpb24gSShBbix2cil7aWYoIUFuKXJldHVybiBBbjt2YXIgcnI9dnJ8fHt9O251bGwhPXRlJiZudWxsPT1yci5kZW5zZSYmKHJyLmRlbnNlPXRlKTt2YXIgU249cnIuZGVuc2U/W106e30sbXI9IlNoZWV0MSIsd2k9MCxV'@;
put 'cj17fSxqaT1bbXJdLF9vPVtdLFRpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sWW89cnIuc2hlZXRSb3dzfHwwO2lmKDI9PUFuWzJdKXJyLkVudW09UXIseShBbixmdW5jdGlvbihoaSx0YSxNbil7c3dpdGNoKE1uKXtjYXNlIDA6cnIudmVycz1oaSxoaT49NDA5NiYmKHJyLnFwcm89ITAp'@;
put 'O2JyZWFrO2Nhc2UgNjpUaT1oaTticmVhaztjYXNlIDE1OmNhc2UgNTE6cnIucXByb3x8KGhpWzFdLnY9aGlbMV0udi5zbGljZSgxKSk7Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTY6MTQ9PU1uJiYxMTI9PSgxMTImaGlbMl0pJiYoMTUmaGlbMl0pPjEmJigxNSZoaVsyXSk8MTUmJihoaVsxXS56'@;
put 'PXJyLmRhdGVORnx8dy5fdGFibGVbMTRdLHJyLmNlbGxEYXRlcyYmKGhpWzFdLnQ9ImQiLGhpWzFdLnY9aHQoaGlbMV0udikpKTt2YXIgTXM9cnIuZGVuc2U/KFNuW2hpWzBdLnJdfHxbXSlbaGlbMF0uY106U25bZGkoaGlbMF0pXTtpZihNcyl7TXMudD1oaVsxXS50LE1zLnY9aGlbMV0udixu'@;
put 'dWxsIT1oaVsxXS56JiYoTXMuej1oaVsxXS56KSxudWxsIT1oaVsxXS5mJiYoTXMuZj1oaVsxXS5mKTticmVha31yci5kZW5zZT8oU25baGlbMF0ucl18fChTbltoaVswXS5yXT1bXSksU25baGlbMF0ucl1baGlbMF0uY109aGlbMV0pOlNuW2RpKGhpWzBdKV09aGlbMV19fSxycik7ZWxzZXtp'@;
put 'ZigyNiE9QW5bMl0mJjE0IT1BblsyXSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBMT1RVUyBCT0YgIitBblsyXSk7cnIuRW51bT11ciwxND09QW5bMl0mJihyci5xcHJvPSEwLEFuLmw9MCkseShBbixmdW5jdGlvbihoaSx0YSxNbil7c3dpdGNoKE1uKXtjYXNlIDIyOmhpWzFdLnY9'@;
put 'aGlbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihoaVszXT53aSYmKFNuWyIhcmVmIl09T28oVGkpLFVyW21yXT1TbixTbj1yci5kZW5zZT9bXTp7fSxUaT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LGppLnB1c2gobXI9'@;
put 'IlNoZWV0IisoKHdpPWhpWzNdKSsxKSkpLFlvPjAmJmhpWzBdLnI+PVlvKWJyZWFrO3JyLmRlbnNlPyhTbltoaVswXS5yXXx8KFNuW2hpWzBdLnJdPVtdKSxTbltoaVswXS5yXVtoaVswXS5jXT1oaVsxXSk6U25bZGkoaGlbMF0pXT1oaVsxXSxUaS5lLmM8aGlbMF0uYyYmKFRpLmUuYz1oaVsw'@;
put 'XS5jKSxUaS5lLnI8aGlbMF0uciYmKFRpLmUucj1oaVswXS5yKTticmVhaztjYXNlIDI3OmhpWzE0ZTNdJiYoX29baGlbMTRlM11bMF1dPWhpWzE0ZTNdWzFdKX19LHJyKX1pZihTblsiIXJlZiJdPU9vKFRpKSxVclttcl09U24sIV9vLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpqaSxTaGVl'@;
put 'dHM6VXJ9O2Zvcih2YXIgbG89e30sQW89W10seG89MDt4bzxfby5sZW5ndGg7Kyt4bylVcltqaVt4b11dJiYoQW8ucHVzaChfb1t4b10pLGxvW19vW3hvXV09VXJbamlbeG9dXSk7cmV0dXJue1NoZWV0TmFtZXM6QW8sU2hlZXRzOmxvfX1mdW5jdGlvbiBIZShBbix2cixycil7dmFyIFNuPVt7'@;
put 'YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIHJyLnFwcm8mJjIwNzY4IT1yci52ZXJzPyhTblswXS5jPUFuLnJlYWRfc2hpZnQoMSksQW4ubCsrLFNuWzBdLnI9QW4ucmVhZF9zaGlmdCgyKSxBbi5sKz0yKTooU25bMl09QW4ucmVhZF9zaGlmdCgxKSxTblswXS5jPUFuLnJlYWRfc2hp'@;
put 'ZnQoMiksU25bMF0ucj1Bbi5yZWFkX3NoaWZ0KDIpKSxTbn1mdW5jdGlvbiBCZShBbix2cixycil7dmFyIFNuPUFuLmwrdnIsbXI9SGUoQW4sMCxycik7aWYobXJbMV0udD0icyIsMjA3Njg9PXJyLnZlcnMpe0FuLmwrKzt2YXIgd2k9QW4ucmVhZF9zaGlmdCgxKTtyZXR1cm4gbXJbMV0udj1B'@;
put 'bi5yZWFkX3NoaWZ0KHdpLCJ1dGY4IiksbXJ9cmV0dXJuIHJyLnFwcm8mJkFuLmwrKyxtclsxXS52PUFuLnJlYWRfc2hpZnQoU24tQW4ubCwiY3N0ciIpLG1yfWZ1bmN0aW9uIEdlKEFuLHZyLHJyKXt2YXIgU249cHIoNytyci5sZW5ndGgpO1NuLndyaXRlX3NoaWZ0KDEsMjU1KSxTbi53cml0'@;
put 'ZV9zaGlmdCgyLHZyKSxTbi53cml0ZV9zaGlmdCgyLEFuKSxTbi53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIG1yPTA7bXI8U24ubGVuZ3RoOysrbXIpe3ZhciB3aT1yci5jaGFyQ29kZUF0KG1yKTtTbi53cml0ZV9zaGlmdCgxLHdpPj0xMjg/OTU6d2kpfXJldHVybiBTbi53cml0ZV9zaGlm'@;
put 'dCgxLDApLFNufWZ1bmN0aW9uIGR0KEFuLHZyLHJyKXt2YXIgU249cHIoNyk7cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEsMjU1KSxTbi53cml0ZV9zaGlmdCgyLHZyKSxTbi53cml0ZV9zaGlmdCgyLEFuKSxTbi53cml0ZV9zaGlmdCgyLHJyLCJpIiksU259ZnVuY3Rpb24gY3QoQW4sdnIscnIp'@;
put 'e3ZhciBTbj1wcigxMyk7cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEsMjU1KSxTbi53cml0ZV9zaGlmdCgyLHZyKSxTbi53cml0ZV9zaGlmdCgyLEFuKSxTbi53cml0ZV9zaGlmdCg4LHJyLCJmIiksU259ZnVuY3Rpb24gRnQoQW4sdnIscnIpe3ZhciBTbj0zMjc2OCZ2cjtyZXR1cm4gdnI9KFNu'@;
put 'P0FuOjApKygodnImPS0zMjc2OSk+PTgxOTI/dnItMTYzODQ6dnIpLChTbj8iIjoiJCIpKyhycj9Ocyh2cik6SHModnIpKX12YXIgVHQ9ezUxOlsiRkFMU0UiLDBdLDUyOlsiVFJVRSIsMF0sNzA6WyJMRU4iLDFdLDgwOlsiU1VNIiw2OV0sODE6WyJBVkVSQUdFQSIsNjldLDgyOlsiQ09VTlRB'@;
put 'Iiw2OV0sODM6WyJNSU5BIiw2OV0sODQ6WyJNQVhBIiw2OV0sMTExOlsiVCIsMV19LFp0PVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07'@;
put 'ZnVuY3Rpb24gS24oQW4pe3ZhciB2cj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiB2clswXS5yPUFuLnJlYWRfc2hpZnQoMiksdnJbM109QW5bQW4ubCsrXSx2clswXS5jPUFuW0FuLmwrK10sdnJ9ZnVuY3Rpb24gcW4oQW4sdnIscnIsU24pe3ZhciBtcj1wcig2K1NuLmxlbmd0'@;
put 'aCk7bXIud3JpdGVfc2hpZnQoMixBbiksbXIud3JpdGVfc2hpZnQoMSxyciksbXIud3JpdGVfc2hpZnQoMSx2ciksbXIud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciB3aT0wO3dpPFNuLmxlbmd0aDsrK3dpKXt2YXIgVXI9U24uY2hhckNvZGVBdCh3aSk7bXIud3JpdGVfc2hpZnQoMSxVcj49'@;
put 'MTI4Pzk1OlVyKX1yZXR1cm4gbXIud3JpdGVfc2hpZnQoMSwwKSxtcn1mdW5jdGlvbiBrbihBbix2cil7dmFyIHJyPUtuKEFuKSxTbj1Bbi5yZWFkX3NoaWZ0KDQpLG1yPUFuLnJlYWRfc2hpZnQoNCksd2k9QW4ucmVhZF9zaGlmdCgyKTtpZig2NTUzNT09d2kpcmV0dXJuIDA9PT1TbiYmMzIy'@;
put 'MTIyNTQ3Mj09PW1yPyhyclsxXS50PSJlIixyclsxXS52PTE1KTowPT09U24mJjM0ODk2NjA5Mjg9PT1tcj8ocnJbMV0udD0iZSIscnJbMV0udj00Mik6cnJbMV0udj0wLHJyO3ZhciBVcj0zMjc2OCZ3aTtyZXR1cm4gd2k9KDMyNzY3JndpKS0xNjQ0NixyclsxXS52PSgxLTIqVXIpKihtcipN'@;
put 'YXRoLnBvdygyLHdpKzMyKStTbipNYXRoLnBvdygyLHdpKSkscnJ9ZnVuY3Rpb24gZXIoQW4sdnIscnIsU24pe3ZhciBtcj1wcigxNCk7aWYobXIud3JpdGVfc2hpZnQoMixBbiksbXIud3JpdGVfc2hpZnQoMSxyciksbXIud3JpdGVfc2hpZnQoMSx2ciksMD09U24pcmV0dXJuIG1yLndyaXRl'@;
put 'X3NoaWZ0KDQsMCksbXIud3JpdGVfc2hpZnQoNCwwKSxtci53cml0ZV9zaGlmdCgyLDY1NTM1KSxtcjt2YXIgd2k9MCxVcj0wLF9vPTA7cmV0dXJuIFNuPDAmJih3aT0xLFNuPS1TbiksVXI9MHxNYXRoLmxvZzIoU24pLDIxNDc0ODM2NDgmKF9vPShTbi89TWF0aC5wb3coMixVci0zMSkpPj4+'@;
put 'MCl8fCgrK1VyLF9vPShTbi89Mik+Pj4wKSxTbi09X28sX298PTIxNDc0ODM2NDgsX28+Pj49MCxTbio9TWF0aC5wb3coMiwzMiksbXIud3JpdGVfc2hpZnQoNCxTbj4+PjApLG1yLndyaXRlX3NoaWZ0KDQsX28pLG1yLndyaXRlX3NoaWZ0KDIsVXIrPTE2MzgzKyh3aT8zMjc2ODowKSksbXJ9'@;
put 'ZnVuY3Rpb24gQnIoQW4sdnIpe3ZhciBycj1LbihBbiksU249QW4ucmVhZF9zaGlmdCg4LCJmIik7cmV0dXJuIHJyWzFdLnY9U24scnJ9ZnVuY3Rpb24gSWkoQW4sdnIpe3ZhciBycj1wcig1K0FuLmxlbmd0aCk7cnIud3JpdGVfc2hpZnQoMiwxNGUzKSxyci53cml0ZV9zaGlmdCgyLHZyKTtm'@;
put 'b3IodmFyIFNuPTA7U248QW4ubGVuZ3RoOysrU24pe3ZhciBtcj1Bbi5jaGFyQ29kZUF0KFNuKTtycltyci5sKytdPW1yPjEyNz85NTptcn1yZXR1cm4gcnJbcnIubCsrXT0wLHJyfXZhciBRcj17MDp7bjoiQk9GIixmOmhsfSwxOntuOiJFT0YifSwyOntuOiJDQUxDTU9ERSJ9LDM6e246IkNB'@;
put 'TENPUkRFUiJ9LDQ6e246IlNQTElUIn0sNTp7bjoiU1lOQyJ9LDY6e246IlJBTkdFIixmOmZ1bmN0aW9uIHZlKEFuKXt2YXIgdnI9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gdnIucy5jPUFuLnJlYWRfc2hpZnQoMiksdnIucy5yPUFuLnJlYWRfc2hpZnQoMiksdnIuZS5jPUFu'@;
put 'LnJlYWRfc2hpZnQoMiksdnIuZS5yPUFuLnJlYWRfc2hpZnQoMiksNjU1MzU9PXZyLnMuYyYmKHZyLnMuYz12ci5lLmM9dnIucy5yPXZyLmUucj0wKSx2cn19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDExOntuOiJOQU1FIn0s'@;
put 'MTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24gbnQoQW4sdnIscnIpe3ZhciBTbj1IZShBbiwwLHJyKTtyZXR1cm4gU25bMV0udj1Bbi5yZWFkX3NoaWZ0KDIsImkiKSxTbn19LDE0OntuOiJOVU1CRVIiLGY6ZnVuY3Rpb24gQ3QoQW4sdnIscnIpe3ZhciBTbj1IZShB'@;
put 'biwwLHJyKTtyZXR1cm4gU25bMV0udj1Bbi5yZWFkX3NoaWZ0KDgsImYiKSxTbn19LDE1OntuOiJMQUJFTCIsZjpCZX0sMTY6e246IkZPUk1VTEEiLGY6ZnVuY3Rpb24gYnQoQW4sdnIscnIpe3ZhciBTbj1Bbi5sK3ZyLG1yPUhlKEFuLDAscnIpO2lmKG1yWzFdLnY9QW4ucmVhZF9zaGlmdCg4'@;
put 'LCJmIikscnIucXBybylBbi5sPVNuO2Vsc2V7dmFyIHdpPUFuLnJlYWRfc2hpZnQoMik7KGZ1bmN0aW9uIHBuKEFuLHZyKXtvbChBbiwwKTtmb3IodmFyIHJyPVtdLFNuPTAsbXI9IiIsd2k9IiI7QW4ubDxBbi5sZW5ndGg7KXt2YXIgVXI9QW5bQW4ubCsrXTtzd2l0Y2goVXIpe2Nhc2UgMDpy'@;
put 'ci5wdXNoKEFuLnJlYWRfc2hpZnQoOCwiZiIpKTticmVhaztjYXNlIDE6d2k9RnQodnJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxtcj1GdCh2clswXS5yLEFuLnJlYWRfc2hpZnQoMiksITEpLHJyLnB1c2god2krbXIpO2JyZWFrO2Nhc2UgMjp2YXIgamk9RnQodnJbMF0uYyxBbi5yZWFk'@;
put 'X3NoaWZ0KDIpLCEwKSxfbz1GdCh2clswXS5yLEFuLnJlYWRfc2hpZnQoMiksITEpO3dpPUZ0KHZyWzBdLmMsQW4ucmVhZF9zaGlmdCgyKSwhMCksbXI9RnQodnJbMF0ucixBbi5yZWFkX3NoaWZ0KDIpLCExKSxyci5wdXNoKGppK19vKyI6Iit3aSttcik7YnJlYWs7Y2FzZSAzOmlmKEFuLmw8'@;
put 'QW4ubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBwcmVtYXR1cmUgZm9ybXVsYSBlbmQiKTticmVhaztjYXNlIDQ6cnIucHVzaCgiKCIrcnIucG9wKCkrIikiKTticmVhaztjYXNlIDU6cnIucHVzaChBbi5yZWFkX3NoaWZ0KDIpKTticmVhaztjYXNlIDY6Zm9yKHZhciBU'@;
put 'aT0iIjtVcj1BbltBbi5sKytdOylUaSs9U3RyaW5nLmZyb21DaGFyQ29kZShVcik7cnIucHVzaCgnIicrVGkucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSA4OnJyLnB1c2goIi0iK3JyLnBvcCgpKTticmVhaztjYXNlIDIzOnJyLnB1c2goIisiK3JyLnBvcCgpKTticmVhaztj'@;
put 'YXNlIDIyOnJyLnB1c2goIk5PVCgiK3JyLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnZhciBZbz1yci5wb3AoKSxsbz1yci5wb3AoKTtyci5wdXNoKFsiQU5EIiwiT1IiXVtVci0yMF0rIigiK2xvKyIsIitZbysiKSIpO2JyZWFrO2RlZmF1bHQ6aWYoVXI8MzImJlp0W1VyXSlZ'@;
put 'bz1yci5wb3AoKSxsbz1yci5wb3AoKSxyci5wdXNoKGxvK1p0W1VyXStZbyk7ZWxzZXtpZighVHRbVXJdKXJldHVybiBVcjw9Nz9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitVci50b1N0cmluZygxNikpOlVyPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQg'@;
put 'b3AgIitVci50b1N0cmluZygxNikpOlVyPD0zMD9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitVci50b1N0cmluZygxNikpOlVyPD0xMTU/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIG9wY29kZSAiK1VyLnRvU3RyaW5nKDE2KSk6Y29uc29sZS5l'@;
put 'cnJvcigiV0sxIHVucmVjb2duaXplZCBvcGNvZGUgIitVci50b1N0cmluZygxNikpO2lmKDY5PT0oU249VHRbVXJdWzFdKSYmKFNuPUFuW0FuLmwrK10pLFNuPnJyLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgMHgiK1VyLnRvU3RyaW5n'@;
put 'KDE2KSsiOnwiK3JyLmpvaW4oInwiKSsifCIpO3ZhciBBbz1yci5zbGljZSgtU24pO3JyLmxlbmd0aC09U24scnIucHVzaChUdFtVcl1bMF0rIigiK0FvLmpvaW4oIiwiKSsiKSIpfX19MT09cnIubGVuZ3RoP3ZyWzFdLmY9IiIrcnJbMF06Y29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxh'@;
put 'IHBhcnNlIHwiK3JyLmpvaW4oInwiKSsifCIpfSkoQW4uc2xpY2UoQW4ubCxBbi5sK3dpKSxtciksQW4ubCs9d2l9cmV0dXJuIG1yfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdFIn0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJL'@;
put 'UkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQifSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNI'@;
put 'RUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpCZX0sNTU6e246IlBBU1NXT1JEIn0sNTY6e246IkxPQ0tF'@;
put 'RCJ9LDYwOntuOiJRVUVSWSJ9LDYxOntuOiJRVUVSWU5BTUUifSw2Mjp7bjoiUFJJTlQifSw2Mzp7bjoiUFJJTlROQU1FIn0sNjQ6e246IkdSQVBIMiJ9LDY1OntuOiJHUkFQSE5BTUUifSw2Njp7bjoiWk9PTSJ9LDY3OntuOiJTWU1TUExJVCJ9LDY4OntuOiJOU1JPV1MifSw2OTp7bjoiTlND'@;
put 'T0xTIn0sNzA6e246IlJVTEVSIn0sNzE6e246Ik5OQU1FIn0sNzI6e246IkFDT01NIn0sNzM6e246IkFNQUNSTyJ9LDc0OntuOiJQQVJTRSJ9LDEwMjp7bjoiUFJBTkdFUz8/In0sMTAzOntuOiJSUkFOR0VTPz8ifSwxMDQ6e246IkZOQU1FPz8ifSwxMDU6e246Ik1SQU5HRVM/PyJ9LDY1NTM1'@;
put 'OntuOiIifX0sdXI9ezA6e246IkJPRiJ9LDE6e246IkVPRiJ9LDI6e246IlBBU1NXT1JEIn0sMzp7bjoiQ0FMQ1NFVCJ9LDQ6e246IldJTkRPV1NFVCJ9LDU6e246IlNIRUVUQ0VMTFBUUiJ9LDY6e246IlNIRUVUTEFZT1VUIn0sNzp7bjoiQ09MVU1OV0lEVEgifSw4OntuOiJISURERU5DT0xV'@;
put 'TU4ifSw5OntuOiJVU0VSUkFOR0UifSwxMDp7bjoiU1lTVEVNUkFOR0UifSwxMTp7bjoiWkVST0ZPUkNFIn0sMTI6e246IlNPUlRLRVlESVIifSwxMzp7bjoiRklMRVNFQUwifSwxNDp7bjoiREFUQUZJTExOVU1TIn0sMTU6e246IlBSSU5UTUFJTiJ9LDE2OntuOiJQUklOVFNUUklORyJ9LDE3'@;
put 'OntuOiJHUkFQSE1BSU4ifSwxODp7bjoiR1JBUEhTVFJJTkcifSwxOTp7bjoiPz8ifSwyMDp7bjoiRVJSQ0VMTCJ9LDIxOntuOiJOQUNFTEwifSwyMjp7bjoiTEFCRUwxNiIsZjpmdW5jdGlvbiB1bihBbix2cil7dmFyIHJyPUtuKEFuKTtyZXR1cm4gcnJbMV0udD0icyIscnJbMV0udj1Bbi5y'@;
put 'ZWFkX3NoaWZ0KHZyLTQsImNzdHIiKSxycn19LDIzOntuOiJOVU1CRVIxNyIsZjprbn0sMjQ6e246Ik5VTUJFUjE4IixmOmZ1bmN0aW9uIHpuKEFuLHZyKXt2YXIgcnI9S24oQW4pO3JyWzFdLnY9QW4ucmVhZF9zaGlmdCgyKTt2YXIgU249cnJbMV0udj4+MTtpZigxJnJyWzFdLnYpc3dpdGNo'@;
put 'KDcmU24pe2Nhc2UgMDpTbj01ZTMqKFNuPj4zKTticmVhaztjYXNlIDE6U249NTAwKihTbj4+Myk7YnJlYWs7Y2FzZSAyOlNuPShTbj4+MykvMjA7YnJlYWs7Y2FzZSAzOlNuPShTbj4+MykvMjAwO2JyZWFrO2Nhc2UgNDpTbj0oU24+PjMpLzJlMzticmVhaztjYXNlIDU6U249KFNuPj4zKS8y'@;
put 'ZTQ7YnJlYWs7Y2FzZSA2OlNuPShTbj4+MykvMTY7YnJlYWs7Y2FzZSA3OlNuPShTbj4+MykvNjR9cmV0dXJuIHJyWzFdLnY9U24scnJ9fSwyNTp7bjoiRk9STVVMQTE5IixmOmZ1bmN0aW9uIHRyKEFuLHZyKXt2YXIgcnI9a24oQW4pO3JldHVybiBBbi5sKz12ci0xNCxycn19LDI2OntuOiJG'@;
put 'T1JNVUxBMUEifSwyNzp7bjoiWEZPUk1BVCIsZjpmdW5jdGlvbiB4aShBbix2cil7Zm9yKHZhciBycj17fSxTbj1Bbi5sK3ZyO0FuLmw8U247KXt2YXIgbXI9QW4ucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1tcil7Zm9yKHJyW21yXT1bMCwiIl0scnJbbXJdWzBdPUFuLnJlYWRfc2hpZnQoMik7'@;
put 'QW5bQW4ubF07KXJyW21yXVsxXSs9U3RyaW5nLmZyb21DaGFyQ29kZShBbltBbi5sXSksQW4ubCsrO0FuLmwrK319cmV0dXJuIHJyfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExB'@;
put 'VVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIFpuKEFuLHZyKXt2YXIgcnI9S24oQW4pLFNuPUFuLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHJyWzFdLnY9U24+PjYscnJ9fSwzODp7bjoiPz8ifSwz'@;
put 'OTp7bjoiTlVNQkVSMjciLGY6QnJ9LDQwOntuOiJGT1JNVUxBMjgiLGY6ZnVuY3Rpb24gc2koQW4sdnIpe3ZhciBycj1CcihBbik7cmV0dXJuIEFuLmwrPXZyLTEwLHJyfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwx'@;
put 'NTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/'@;
put 'In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntu'@;
put 'OiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUx'@;
put 'NDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8i'@;
put 'fSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0'@;
put 'OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/'@;
put 'In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIFEoQW4sdnIpe3ZhciBycj12cnx8e307aWYoK3JyLmNvZGVwYWdlPj0wJiZqKCtyci5jb2RlcGFnZSksInN0cmluZyI9PXJyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0'@;
put 'cmluZyIpO3ZhciBTbj13YygpLG1yPU9pKEFuWyIhcmVmIl0pLHdpPUFycmF5LmlzQXJyYXkoQW4pLFVyPVtdO0NpKFNuLDAsZnVuY3Rpb24gZ2UoQW4pe3ZhciB2cj1wcigyKTtyZXR1cm4gdnIud3JpdGVfc2hpZnQoMixBbiksdnJ9KDEwMzApKSxDaShTbiw2LGZ1bmN0aW9uIFNlKEFuKXt2'@;
put 'YXIgdnI9cHIoOCk7cmV0dXJuIHZyLndyaXRlX3NoaWZ0KDIsQW4ucy5jKSx2ci53cml0ZV9zaGlmdCgyLEFuLnMuciksdnIud3JpdGVfc2hpZnQoMixBbi5lLmMpLHZyLndyaXRlX3NoaWZ0KDIsQW4uZS5yKSx2cn0obXIpKTtmb3IodmFyIGppPW1yLnMucjtqaTw9bXIuZS5yOysramkpZm9y'@;
put 'KHZhciBfbz1IcyhqaSksVGk9bXIucy5jO1RpPD1tci5lLmM7KytUaSl7amk9PT1tci5zLnImJihVcltUaV09TnMoVGkpKTt2YXIgbG89d2k/KEFuW2ppXXx8W10pW1RpXTpBbltVcltUaV0rX29dO2xvJiYieiIhPWxvLnQmJigibiI9PWxvLnQ/KDB8bG8udik9PWxvLnYmJmxvLnY+PS0zMjc2'@;
put 'OCYmbG8udjw9MzI3Njc/Q2koU24sMTMsZHQoamksVGksbG8udikpOkNpKFNuLDE0LGN0KGppLFRpLGxvLnYpKTpDaShTbiwxNSxHZShqaSxUaSxjdShsbykuc2xpY2UoMCwyMzkpKSkpfXJldHVybiBDaShTbiwxKSxTbi5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gcmUoQW4sdnIpe3Zh'@;
put 'ciBycj12cnx8e307aWYoK3JyLmNvZGVwYWdlPj0wJiZqKCtyci5jb2RlcGFnZSksInN0cmluZyI9PXJyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBTbj13YygpO0NpKFNuLDAsZnVuY3Rpb24gX2UoQW4pe3ZhciB2cj1wcigyNik7'@;
put 'dnIud3JpdGVfc2hpZnQoMiw0MDk2KSx2ci53cml0ZV9zaGlmdCgyLDQpLHZyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBycj0wLFNuPTAsbXI9MCx3aT0wO3dpPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrd2kpe3ZhciBqaT1Bbi5TaGVldHNbQW4uU2hlZXROYW1lc1t3aV1dO2lmKGppJiZq'@;
put 'aVsiIXJlZiJdKXsrK21yO3ZhciBfbz1XcyhqaVsiIXJlZiJdKTtycjxfby5lLnImJihycj1fby5lLnIpLFNuPF9vLmUuYyYmKFNuPV9vLmUuYyl9fXJldHVybiB2ci53cml0ZV9zaGlmdCgyLHJyKSx2ci53cml0ZV9zaGlmdCgxLG1yKSx2ci53cml0ZV9zaGlmdCgxLFNuKSx2ci53cml0ZV9z'@;
put 'aGlmdCgyLDApLHZyLndyaXRlX3NoaWZ0KDIsMCksdnIud3JpdGVfc2hpZnQoMSwxKSx2ci53cml0ZV9zaGlmdCgxLDIpLHZyLndyaXRlX3NoaWZ0KDQsMCksdnIud3JpdGVfc2hpZnQoNCwwKSx2cn0oQW4pKTtmb3IodmFyIG1yPTAsd2k9MDttcjxBbi5TaGVldE5hbWVzLmxlbmd0aDsrK21y'@;
put 'KShBbi5TaGVldHNbQW4uU2hlZXROYW1lc1ttcl1dfHx7fSlbIiFyZWYiXSYmQ2koU24sMjcsSWkoQW4uU2hlZXROYW1lc1ttcl0sd2krKykpO3ZhciBVcj0wO2Zvcihtcj0wO21yPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrbXIpe3ZhciBqaT1Bbi5TaGVldHNbQW4uU2hlZXROYW1lc1ttcl1d'@;
put 'O2lmKGppJiZqaVsiIXJlZiJdKXtmb3IodmFyIF9vPU9pKGppWyIhcmVmIl0pLFRpPUFycmF5LmlzQXJyYXkoamkpLFlvPVtdLGxvPV9vLnMucjtsbzw9X28uZS5yOysrbG8pZm9yKHZhciBBbz1IcyhsbykseG89X28ucy5jO3hvPD1fby5lLmM7Kyt4byl7bG89PT1fby5zLnImJihZb1t4b109'@;
put 'TnMoeG8pKTt2YXIgdGE9VGk/KGppW2xvXXx8W10pW3hvXTpqaVtZb1t4b10rQW9dO3RhJiYieiIhPXRhLnQmJigibiI9PXRhLnQ/Q2koU24sMjMsZXIobG8seG8sVXIsdGEudikpOkNpKFNuLDIyLHFuKGxvLHhvLFVyLGN1KHRhKS5zbGljZSgwLDIzOSkpKSl9KytVcn19cmV0dXJuIENpKFNu'@;
put 'LDEpLFNuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBQKEFuLHZyKXtzd2l0Y2godnIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBJKEQoc2UuZGVjb2RlKEFuKSksdnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gSShEKEFuKSx2cik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVy'@;
put 'biBJKEFuLHZyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrdnIudHlwZX19fSgpLERtPWZ1bmN0aW9uKCl7dmFyIHk9dWwoInQiKSxQPXVsKCJyUHIiKTtmdW5jdGlvbiBJKGdlKXt2YXIgX2U9Z2UubWF0Y2goeSk7aWYoIV9lKXJldHVybnt0OiJzIix2OiIifTt2YXIgdmU9e3Q6InMiLHY6'@;
put 'eHIoX2VbMV0pfSxTZT1nZS5tYXRjaChQKTtyZXR1cm4gU2UmJih2ZS5zPWZ1bmN0aW9uIEp3KHkpe3ZhciBQPXt9LEk9eS5tYXRjaCgkdCksUT0wLHJlPSExO2lmKEkpZm9yKDtRIT1JLmxlbmd0aDsrK1Epe3ZhciBnZT1sbihJW1FdKTtzd2l0Y2goZ2VbMF0ucmVwbGFjZSgvXHcqOi9nLCIi'@;
put 'KSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8c2hhZG93IjppZighZ2UudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpQLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWdl'@;
put 'LnZhbClicmVhaztQLmNwPUxbcGFyc2VJbnQoZ2UudmFsLDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIWdlLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpQLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpQ'@;
put 'Lm5hbWU9Z2UudmFsO2JyZWFrO2Nhc2UiPHN6IjpQLnN6PWdlLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFnZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOlAuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFnZS52'@;
put 'YWwpYnJlYWs7c3dpdGNoKGdlLnZhbCl7Y2FzZSJkb3VibGUiOlAudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpQLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlAudW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOlAudW5k'@;
put 'ZXJsaW5lfHwoUC51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PWdlLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpQLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09Z2UudmFsKWJyZWFrO2Nhc2Ui'@;
put 'PGk+IjpjYXNlIjxpLz4iOlAuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6Z2UucmdiJiYoUC5jb2xvcj17cmdiOjg9PWdlLnJnYi5sZW5ndGg/Z2UucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK2dlLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFt'@;
put 'aWx5IjpQLmZhbWlseT1nZS52YWw7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShnZS52YWx8fCJub25lIikmJihQLnZhbGlnbj1nZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwv'@;
put 'ZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpyZT0hMDticmVhaztjYXNlIjwvZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZig0NyE9PWdlWzBdLmNoYXJDb2RlQXQoMSkmJiFyZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2dlWzBdKX19cmV0dXJuIFB9'@;
put 'KFNlWzFdKSksdmV9dmFyIFE9LzwoPzpcdys6KT9yPi9nLHJlPS88XC8oPzpcdys6KT9yPi87cmV0dXJuIGZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UucmVwbGFjZShRLCIiKS5zcGxpdChyZSkubWFwKEkpLmZpbHRlcihmdW5jdGlvbih2ZSl7cmV0dXJuIHZlLnZ9KX19KCksajE9ezE6InNpbmds'@;
put 'ZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LGs5PWZ1bmN0aW9uKCl7dmFyIFA9LyhcclxufFxuKS9nO2Z1bmN0aW9uIFEocmUpe3ZhciBnZT1bW10scmUudixbXV07cmV0dXJuIHJlLnY/KHJlLnMmJmZ1bmN0aW9uIEkocmUsZ2Us'@;
put 'X2Upe3ZhciB2ZT1bXTtyZS51bmRlcmxpbmUmJnZlLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLHJlLnVuZGVybGluZT4xJiZ2ZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK2oxW3JlLnVuZGVybGluZV0rIjsiKSxyZS5zeiYmdmUucHVzaCgiZm9udC1zaXplOiIr'@;
put 'cmUuc3orInB0OyIpLHJlLm91dGxpbmUmJnZlLnB1c2goInRleHQtZWZmZWN0OiBvdXRsaW5lOyIpLHJlLnNoYWRvdyYmdmUucHVzaCgidGV4dC1zaGFkb3c6IGF1dG87IikscmUuY29sb3ImJnJlLmNvbG9yLnJnYiYmdmUucHVzaCgiY29sb3I6ICMiK091KHJlLmNvbG9yLnJnYikrIjsiKSxn'@;
put 'ZS5wdXNoKCc8c3BhbiBzdHlsZT0iJyt2ZS5qb2luKCIiKSsnIj4nKSxyZS5ib2xkJiYoZ2UucHVzaCgiPGI+IiksX2UucHVzaCgiPC9iPiIpKSxyZS5pdGFsaWMmJihnZS5wdXNoKCI8aT4iKSxfZS5wdXNoKCI8L2k+IikpLHJlLnN0cmlrZSYmKGdlLnB1c2goIjxzPiIpLF9lLnB1c2goIjwv'@;
put 'cz4iKSk7dmFyIFNlPXJlLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09U2V8fCJzdXBlciI9PVNlP1NlPSJzdXAiOiJzdWJzY3JpcHQiPT1TZSYmKFNlPSJzdWIiKSwiIiE9U2UmJihnZS5wdXNoKCI8IitTZSsiPiIpLF9lLnB1c2goIjwvIitTZSsiPiIpKSxfZS5wdXNoKCI8L3NwYW4+Iil9'@;
put 'KHJlLnMsZ2VbMF0sZ2VbMl0pLGdlWzBdLmpvaW4oIiIpK2dlWzFdLnJlcGxhY2UoUCwiPGJyLz4iKStnZVsyXS5qb2luKCIiKSk6IiJ9cmV0dXJuIGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2UubWFwKFEpLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBKaCh5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24o'@;
put 'SSl7cmV0dXJuIGZ1bmN0aW9uIExtKHkpe3ZhciBQPSIiLEk9W107cmV0dXJuIHkucyYmKHkucy5ib2xkJiZJLnB1c2goIjxiLz4iKSx5LnMuaXRhbGljJiZJLnB1c2goIjxpLz4iKSx5LnMuc3RyaWtlJiZJLnB1c2goIjxzdHJpa2UvPiIpLHkucy51bmRlcmxpbmUmJkkucHVzaCgnPHUgdmFs'@;
put 'PSInKyhqbVt5LnMudW5kZXJsaW5lXXx8InNpbmdsZSIpKyciLz4nKSx5LnMuY29sb3ImJkkucHVzaChVZCh5LnMuY29sb3IpKSx5LnMuc3omJkkucHVzaCgnPHN6IHZhbD0iJyt5LnMuc3orJyIvPicpLHkucy5uYW1lJiZJLnB1c2goJzxyRm9udCB2YWw9IicreS5zLm5hbWUrJyIvPicpLCgi'@;
put 'c3VwZXIiPT15LnMudmFsaWdufHwic3ViIj09eS5zLnZhbGlnbikmJkkucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicreS5zLnZhbGlnbisnc2NyaXB0Ii8+JykpLEkubGVuZ3RoJiYoUCs9IjxyUHI+IitJLmpvaW4oIiIpKyI8L3JQcj4iKSwiPHI+IisoUCs9U3IoInQiLEhyKHkudiksbnVsbCkp'@;
put 'KyI8L3I+In0oSSl9KS5qb2luKCIiKX12YXIgUXc9LzwoPzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3KzopP3Q+L2csQTk9LzwoPzpcdys6KT9yXGJbXj5dKj4vLFQ5PS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gRDkoeSxQKXt2'@;
put 'YXIgST0hUHx8UC5jZWxsSFRNTCxRPXt9O3JldHVybiB5Pyh5Lm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oUS50PXhyKFBpKHkuc2xpY2UoeS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksUS5yPVBpKHkpLEkmJihRLmg9cm8oUS50KSkp'@;
put 'OnkubWF0Y2goQTkpJiYoUS5yPVBpKHkpLFEudD14cihQaSgoeS5yZXBsYWNlKFQ5LCIiKS5tYXRjaChRdyl8fFtdKS5qb2luKCIiKS5yZXBsYWNlKCR0LCIiKSkpLFEuUj1EbShRLnIpLEkmJihRLmg9azkoUS5SKSkpLFEpOnt0OiIifX12YXIgZUM9LzwoPzpcdys6KT9zc3QoW14+XSopPihb'@;
put 'XHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLHRDPS88KD86XHcrOik/KD86c2l8c3N0SXRlbSk+L2csbkM9LzxcLyg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi87SGkuU1NUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBz'@;
put 'L3NoYXJlZFN0cmluZ3MiO3ZhciBsRD0vXlxzfFxzJHxbXHRcblxyXS87ZnVuY3Rpb24gSW0oeSxQKXtpZighUC5ib29rU1NUKXJldHVybiIiO3ZhciBJPVtCbl07SVtJLmxlbmd0aF09U3IoInNzdCIsbnVsbCx7eG1sbnM6aXMubWFpblswXSxjb3VudDp5LkNvdW50LHVuaXF1ZUNvdW50Onku'@;
put 'VW5pcXVlfSk7Zm9yKHZhciBRPTA7USE9eS5sZW5ndGg7KytRKWlmKG51bGwhPXlbUV0pe3ZhciByZT15W1FdLGdlPSI8c2k+IjtyZS5yP2dlKz1yZS5yOihnZSs9Ijx0IixyZS50fHwocmUudD0iIikscmUudC5tYXRjaChsRCkmJihnZSs9JyB4bWw6c3BhY2U9InByZXNlcnZlIicpLGdlKz0i'@;
put 'PiIrSHIocmUudCkrIjwvdD4iKSxJW0kubGVuZ3RoXT1nZSs9Ijwvc2k+In1yZXR1cm4gSS5sZW5ndGg+MiYmKElbSS5sZW5ndGhdPSI8L3NzdD4iLElbMV09SVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksSS5qb2luKCIiKX12YXIgb0M9ZnVuY3Rpb24gQTEoeSxQLEkpe3ZhciBRPTEzKzQqeS50'@;
put 'Lmxlbmd0aCxyZT15LlImJnkuUi5sZW5ndGh8fHkucjt5LnImJih5LlI9RG0oeS5yKSkscmUmJihRKz00KzQqeS5SLmxlbmd0aCk7dmFyIGdlPSExO2lmKG51bGw9PUkmJihnZT0hMCxJPXByKFEpKSxJLndyaXRlX3NoaWZ0KDEscmU/MTowKSxyYyh5LnQsSSkscmUpe0kud3JpdGVfc2hpZnQo'@;
put 'NCx5LlIubGVuZ3RoKTtmb3IodmFyIF9lPTAsdmU9MDt2ZTx5LlIubGVuZ3RoOysrdmUpe3ZhciBTZT15LlJbdmVdO0kud3JpdGVfc2hpZnQoMixfZSksX2UrPShTZS52fHwiIikubGVuZ3RoO3ZhciBIZT1TZS5zP2d1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6U2Uu'@;
put 'c30sUCk6MDtJLndyaXRlX3NoaWZ0KDIsUC5jZWxsWGZzW0hlXS5mb250SWQpfX1yZXR1cm4gZ2U/SS5zbGljZSgwLEkubCk6SX07ZnVuY3Rpb24geDMoeSxQKXt2YXIgST13YygpO3VpKEksIkJydEJlZ2luU3N0IixmdW5jdGlvbiBpQyh5LFApe3JldHVybiBQfHwoUD1wcig4KSksUC53cml0'@;
put 'ZV9zaGlmdCg0LHkuQ291bnQpLFAud3JpdGVfc2hpZnQoNCx5LlVuaXF1ZSksUH0oeSkpO2Zvcih2YXIgUT0wO1E8eS5sZW5ndGg7KytRKXVpKEksIkJydFNTVEl0ZW0iLG9DKHlbUV0sUCkpO3JldHVybiB1aShJLCJCcnRFbmRTc3QiKSxJLmVuZCgpfWZ1bmN0aW9uIHhhKHkpe2lmKHR5cGVv'@;
put 'ZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoUix5KTtmb3IodmFyIFA9W10sST15LnNwbGl0KCIiKSxRPTA7UTxJLmxlbmd0aDsrK1EpUFtRXT1JW1FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFB9ZnVuY3Rpb24gRzAoeSxQKXt2YXIgST17fTtyZXR1cm4gSS5NYWpv'@;
put 'cj15LnJlYWRfc2hpZnQoMiksSS5NaW5vcj15LnJlYWRfc2hpZnQoMiksUD49NCYmKHkubCs9UC00KSxJfWZ1bmN0aW9uIHNDKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksST15LmwrUC00LFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpLGdlPVtdO3JlLS0gPjA7KWdlLnB1c2goe3Q6eS5y'@;
put 'ZWFkX3NoaWZ0KDQpLHY6eS5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKFEubmFtZT15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFEuY29tcHM9Z2UseS5sIT1JKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK3kubCsiICE9ICIrSSk7cmV0dXJuIFF9ZnVuY3Rpb24g'@;
put 'TDkoeSxQKXt2YXIgST15LmwrUCxRPXt9O1EuRmxhZ3M9NjMmeS5yZWFkX3NoaWZ0KDQpLHkubCs9NCxRLkFsZ0lEPXkucmVhZF9zaGlmdCg0KTt2YXIgcmU9ITE7c3dpdGNoKFEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OnJlPTM2PT1RLkZsYWdzO2JyZWFrO2Nh'@;
put 'c2UgMjY2MjU6cmU9ND09KDUyJlEuRmxhZ3MpO2JyZWFrO2Nhc2UgMDpyZT0xNj09US5GbGFnc3x8ND09US5GbGFnc3x8MzY9PVEuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrUS5BbGdJRH1pZighcmUpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIFEuQWxnSURIYXNoPXkucmVhZF9zaGlmdCg0KSxRLktleVNpemU9eS5yZWFkX3NoaWZ0KDQpLFEuUHJvdmlkZXJUeXBlPXkucmVhZF9zaGlmdCg0KSx5LmwrPTgsUS5DU1BOYW1lPXkucmVhZF9zaGlmdChJLXku'@;
put 'bD4+MSwidXRmMTZsZSIpLHkubD1JLFF9ZnVuY3Rpb24gUm0oeSxQKXt2YXIgST17fSxRPXkubCtQO3JldHVybiB5LmwrPTQsSS5TYWx0PXkuc2xpY2UoeS5sLHkubCsxNikseS5sKz0xNixJLlZlcmlmaWVyPXkuc2xpY2UoeS5sLHkubCsxNikseS5sKz0xNix5LnJlYWRfc2hpZnQoNCksSS5W'@;
put 'ZXJpZmllckhhc2g9eS5zbGljZSh5LmwsUSkseS5sPVEsSX1mdW5jdGlvbiBtWih5KXtpZigzNiE9KDYzJnkucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciBJPXkucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOkw5KHks'@;
put 'SSksdjpSbSh5LHkubGVuZ3RoLXkubCl9fWZ1bmN0aW9uIGhEKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIHZaKHkpe3ZhciBQPVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFz'@;
put 'aFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTt5LmwrPTQ7dmFyIEk9eS5yZWFkX3NoaWZ0KHkubGVuZ3RoLXkubCwidXRmOCIpLFE9e307cmV0dXJuIEkucmVwbGFjZSgkdCxmdW5jdGlvbihnZSl7dmFyIF9lPWxu'@;
put 'KGdlKTtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOlAuZm9yRWFjaChmdW5jdGlvbih2ZSl7UVt2'@;
put 'ZV09X2VbdmVdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVncml0eSI6US5lbmNyeXB0ZWRIbWFjS2V5PV9lLmVuY3J5cHRlZEhtYWNLZXksUS5lbmNyeXB0ZWRIbWFjVmFsdWU9X2UuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0'@;
put 'b3JzIjpRLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjpRLnVyaT1fZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlwdGVkS2V5IjpRLmVuY3MucHVzaChfZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBfZVswXX19KSxRfWZ1bmN0aW9uIGFDKHkpe3ZhciBJLGdlLFA9MCxRPXhhKHkpLHJl'@;
put 'PVEubGVuZ3RoKzE7Zm9yKChJPUcocmUpKVswXT1RLmxlbmd0aCxnZT0xO2dlIT1yZTsrK2dlKUlbZ2VdPVFbZ2UtMV07Zm9yKGdlPXJlLTE7Z2U+PTA7LS1nZSlQPSgoMTYzODQmUD8xOjApfFA8PDEmMzI3NjcpXklbZ2VdO3JldHVybiA1MjgxMV5QfXZhciBmRD1mdW5jdGlvbigpe3ZhciB5'@;
put 'PVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLFA9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwzNjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLEk9WzQ0Nzk2LDE5OTI5LDM5ODU4'@;
put 'LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkwNiw1ODEyLDExNjI0LDIzMjQ4LDg4NSwxNzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYx'@;
put 'NCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwyMTUwMiw0MzAwNCwyNDUzNywxODM4NywzNjc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4'@;
put 'MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQsMjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUxOTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcy'@;
put 'NTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2MjhdLHJlPWZ1bmN0aW9uKF9lLHZlKXtyZXR1cm4gZnVuY3Rpb24oX2Upe3JldHVybiAyNTUmKF9lPj4xfF9lPDw3KX0oX2VedmUpfTty'@;
put 'ZXR1cm4gZnVuY3Rpb24odmUpe2Zvcih2YXIgU2U9eGEodmUpLEhlPWZ1bmN0aW9uKF9lKXtmb3IodmFyIHZlPVBbX2UubGVuZ3RoLTFdLFNlPTEwNCxIZT1fZS5sZW5ndGgtMTtIZT49MDstLUhlKWZvcih2YXIgQmU9X2VbSGVdLEdlPTA7NyE9R2U7KytHZSk2NCZCZSYmKHZlXj1JW1NlXSks'@;
put 'QmUqPTIsLS1TZTtyZXR1cm4gdmV9KFNlKSxCZT1TZS5sZW5ndGgsR2U9RygxNiksbnQ9MDsxNiE9bnQ7KytudClHZVtudF09MDt2YXIgY3Q7Zm9yKDE9PSgxJkJlKSYmKEdlW0JlXT1yZSh5WzBdLEhlPj44KSxHZVstLUJlXT1yZShTZVtTZS5sZW5ndGgtMV0sMjU1JkhlKSk7QmU+MDspR2Vb'@;
put 'LS1CZV09cmUoU2VbQmVdLEhlPj44KSxHZVstLUJlXT1yZShTZVtCZV0sMjU1JkhlKTtmb3IoQmU9MTUsY3Q9MTUtU2UubGVuZ3RoO2N0PjA7KUdlW0JlXT1yZSh5W2N0XSxIZT4+OCksLS1jdCxHZVstLUJlXT1yZShTZVtCZV0sMjU1JkhlKSwtLUJlLC0tY3Q7cmV0dXJuIEdlfX0oKTt2YXIg'@;
put 'T209ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KHJlLGdlKXtzd2l0Y2goZ2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBQKHNlLmRlY29kZShyZSksZ2UpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUChyZSxnZSk7Y2FzZSJidWZmZXIiOnJldHVybiBQKHJlLnRvU3RyaW5nKCJiaW5hcnkiKSxnZSk7'@;
put 'Y2FzZSJhcnJheSI6cmV0dXJuIFAoUHQocmUpLGdlKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrZ2UudHlwZSl9ZnVuY3Rpb24gUChyZSxnZSl7dmFyIHZlPShnZXx8e30pLmRlbnNlP1tdOnt9O2lmKCFyZS5tYXRjaCgvXFx0cm93ZC8pKXRocm93IG5ldyBFcnJvcigi'@;
put 'UlRGIG1pc3NpbmcgdGFibGUiKTtyZXR1cm4gdmVbIiFyZWYiXT1Pbyh7czp7YzowLHI6MH0sZTp7YzowLHI6MH19KSx2ZX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gSShyZSxnZSl7cmV0dXJuIEVkKHkocmUsZ2UpLGdlKX0sdG9fc2hlZXQ6eSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFEo'@;
put 'cmUpe2Zvcih2YXIgdmUsZ2U9WyJ7XFxydGYxXFxhbnNpIl0sX2U9T2kocmVbIiFyZWYiXSksU2U9QXJyYXkuaXNBcnJheShyZSksSGU9X2Uucy5yO0hlPD1fZS5lLnI7KytIZSl7Z2UucHVzaCgiXFx0cm93ZFxcdHJhdXRvZml0MSIpO2Zvcih2YXIgQmU9X2Uucy5jO0JlPD1fZS5lLmM7KytC'@;
put 'ZSlnZS5wdXNoKCJcXGNlbGx4IisoQmUrMSkpO2ZvcihnZS5wdXNoKCJcXHBhcmRcXGludGJsIiksQmU9X2Uucy5jO0JlPD1fZS5lLmM7KytCZSl7dmFyIEdlPWRpKHtyOkhlLGM6QmV9KTsodmU9U2U/KHJlW0hlXXx8W10pW0JlXTpyZVtHZV0pJiYobnVsbCE9dmUudnx8dmUuZiYmIXZlLkYp'@;
put 'JiYoZ2UucHVzaCgiICIrKHZlLnd8fChjdSh2ZSksdmUudykpKSxnZS5wdXNoKCJcXGNlbGwiKSl9Z2UucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJuIGdlLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGVmKHkpe3ZhciBQPXkuc2xpY2UoIiMiPT09eVswXT8xOjApLnNsaWNl'@;
put 'KDAsNik7cmV0dXJuW3BhcnNlSW50KFAuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoUC5zbGljZSgyLDQpLDE2KSxwYXJzZUludChQLnNsaWNlKDQsNiksMTYpXX1mdW5jdGlvbiB6MSh5KXtmb3IodmFyIFA9MCxJPTE7MyE9UDsrK1ApST0yNTYqSSsoeVtQXT4yNTU/MjU1OnlbUF08MD8wOnlb'@;
put 'UF0pO3JldHVybiBJLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uICQwKHksUCl7aWYobnVsbD09eSlyZXR1cm4gbnVsbCE9UDtpZihudWxsPT1QKXJldHVybiEwO2lmKDE9PXkuYXV0byYmMT09UC5hdXRvKXJldHVybiExO2lmKCEheS5hdXRvIT0hIVAuYXV0'@;
put 'b3x8bnVsbD09eS50aGVtZSE9KG51bGw9PVAudGhlbWUpKXJldHVybiEwO2lmKG51bGwhPXkudGhlbWUpcmV0dXJuIHkudGhlbWUhPVAudGhlbWV8fHkudGludCE9UC50aW50O2lmKG51bGw9PXkucmdiJiZudWxsPT1QLnJnYilyZXR1cm4hMTt2YXIgST15LnJnYjsibnVtYmVyIj09dHlwZW9m'@;
put 'IEkmJihJPUkudG9TdHJpbmcoMTYpKSxJPUkuc2xpY2UoLTYpO3ZhciBRPVAucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2YgUSYmKFE9US50b1N0cmluZygxNikpLFE9US5zbGljZSgtNiksSS50b0xvd2VyQ2FzZSgpIT1RLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gUG0oeSxQKXtyZXR1cm4g'@;
put 'bnVsbD09eT9udWxsIT1QOm51bGw9PVA/bnVsbCE9eTp5LnN0eWxlIT1QLnN0eWxlfHwkMCh5LmNvbG9yLFAuY29sb3IpfWZ1bmN0aW9uIEJkKHksUCl7aWYoMD09PVApcmV0dXJuIHk7dmFyIEk9ZnVuY3Rpb24gcDAoeSl7dmFyIFA9eVswXS8yNTUsST15WzFdLzI1NSxRPXlbMl0vMjU1LHJl'@;
put 'PU1hdGgubWF4KFAsSSxRKSxnZT1NYXRoLm1pbihQLEksUSksX2U9cmUtZ2U7aWYoMD09PV9lKXJldHVyblswLDAsUF07dmFyIFNlLHZlPTAsSGU9cmUrZ2U7c3dpdGNoKFNlPV9lLyhIZT4xPzItSGU6SGUpLHJlKXtjYXNlIFA6dmU9KChJLVEpL19lKzYpJTY7YnJlYWs7Y2FzZSBJOnZlPShR'@;
put 'LVApL19lKzI7YnJlYWs7Y2FzZSBROnZlPShQLUkpL19lKzR9cmV0dXJuW3ZlLzYsU2UsSGUvMl19KGVmKHkpKTtyZXR1cm4gSVsyXT1QPDA/SVsyXSooMStQKToxLSgxLUlbMl0pKigxLVApLHoxKGZ1bmN0aW9uIEY0KHkpe3ZhciBTZSxJPXlbMV0sUT15WzJdLHJlPTIqSSooUTwuNT9ROjEt'@;
put 'USksZ2U9US1yZS8yLF9lPVtnZSxnZSxnZV0sdmU9Nip5WzBdO2lmKDAhPT1JKXN3aXRjaCgwfHZlKXtjYXNlIDA6Y2FzZSA2OlNlPXJlKnZlLF9lWzBdKz1yZSxfZVsxXSs9U2U7YnJlYWs7Y2FzZSAxOl9lWzBdKz1TZT1yZSooMi12ZSksX2VbMV0rPXJlO2JyZWFrO2Nhc2UgMjpTZT1yZSoo'@;
put 'dmUtMiksX2VbMV0rPXJlLF9lWzJdKz1TZTticmVhaztjYXNlIDM6X2VbMV0rPVNlPXJlKig0LXZlKSxfZVsyXSs9cmU7YnJlYWs7Y2FzZSA0OlNlPXJlKih2ZS00KSxfZVsyXSs9cmUsX2VbMF0rPVNlO2JyZWFrO2Nhc2UgNTpfZVsyXSs9U2U9cmUqKDYtdmUpLF9lWzBdKz1yZX1mb3IodmFy'@;
put 'IEhlPTA7MyE9SGU7KytIZSlfZVtIZV09TWF0aC5yb3VuZCgyNTUqX2VbSGVdKTtyZXR1cm4gX2V9KEkpKX12YXIgbEM9NixwbD1sQztmdW5jdGlvbiB4Yyh5KXtyZXR1cm4gTWF0aC5mbG9vcigoeStNYXRoLnJvdW5kKDEyOC9wbCkvMjU2KSpwbCl9ZnVuY3Rpb24gdGYoeSl7cmV0dXJuIE1h'@;
put 'dGguZmxvb3IoKHktNSkvcGwqMTAwKy41KS8xMDB9ZnVuY3Rpb24gamQoeSl7cmV0dXJuIE1hdGgucm91bmQoKHkqcGwrNSkvcGwqMjU2KS8yNTZ9ZnVuY3Rpb24gcHUoeSl7eS5iZXN0Rml0JiZkZWxldGUgeS5iZXN0Rml0LHkud2lkdGg/KHkud3B4PXhjKHkud2lkdGgpLHkud2NoPXRmKHku'@;
put 'd3B4KSx5Lk1EVz1wbCk6eS53cHg/KHkud2NoPXRmKHkud3B4KSx5LndpZHRoPWpkKHkud2NoKSx5Lk1EVz1wbCk6Im51bWJlciI9PXR5cGVvZiB5LndjaCYmKHkud2lkdGg9amQoeS53Y2gpLHkud3B4PXhjKHkud2lkdGgpLHkuTURXPXBsKSx5LmN1c3RvbVdpZHRoJiZkZWxldGUgeS5jdXN0'@;
put 'b21XaWR0aH12YXIgSTk9OTYsbmY9STk7ZnVuY3Rpb24gajIoeSl7cmV0dXJuIDcyKnkvbmZ9ZnVuY3Rpb24gVTEoeSl7cmV0dXJuIHkqbmYvNzJ9ZnVuY3Rpb24gRm0oeSl7bmY9eT17b3N4OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVt5XXx8eXx8STksTm09'@;
put 'ZzBbeV19ZnVuY3Rpb24gTDMoeSl7eS5ocHg/eS5ocHQ9ajIoeS5ocHgpOnkuaHB0JiYoeS5ocHg9VTEoeS5ocHQpKX12YXIgSDQ9e05vbmU6Im5vbmUiLFNvbGlkOiJzb2xpZCIsR3JheTUwOiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0'@;
put 'cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJrVXAiLERpYWdDcm9zczoiZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6Imxp'@;
put 'Z2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3NzOiJsaWdodEdyaWQifSxfRD1iZShINCksejI9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdy'@;
put 'ZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hp'@;
put 'dGU6MTY3NzcyMTV9O2Z1bmN0aW9uIE40KHksUCl7aWYoeS5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQoeS5yZXBsYWNlKCIjIiwiIiksMTYpO2lmKHoyW3ldKXJldHVybiB6Mlt5XTt2YXIgST15Lm1hdGNoKC9yZ2JcKFxzKihcZCop'@;
put 'XHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihJKXJldHVybigrSVsxXTw8MTYpKygrSVsyXTw8OCkrICtJWzNdO2lmKEk9eS5tYXRjaCgvcmdiYVwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oSVs0XSYmSVs0XS5sZW5ndGg+'@;
put 'MCYmK0lbNF18fDApfHwrSVsxXT4wfHwrSVsyXT4wfHwrSVszXT4wPygrSVsxXTw8MTYpKygrSVsyXTw8OCkrICtJWzNdOlA/LTE6MTY3NzcyMTU7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEhUTUwgY29sb3IgIit5KX12YXIgZzA9e307ZnVuY3Rpb24gSG0oeSl7eT15fHw5Njt2YXIgUD17'@;
put 'Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50dXJ5IEdvdGhpYyI6W119O3JldHVybiBQLkNhbGlicmlbMTFdPTcsUC5DYWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwx'@;
put 'NDQ6MTJ9W3ldfHw4LFAuQ2FsaWJyaVsxM109MTAsUC5DYWxpYnJpWzE0XT0xMSxQLkNhbGlicmlbMTZdPTEyLFAuQ2FsaWJyaVsxOF09MTQsUC5DYWxpYnJpWzIwXT0xNixQLlx1NWI4Ylx1NGY1M1sxMV09OCxQLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxQWyJTcGFy'@;
put 'a2Fzc2UgUmciXVsxMV09NyxQLkFyaWFsWzEwXT03LFBbIkNlbnR1cnkgR290aGljIl1bMTJdPTksUH1nMFs3Ml09SG0oNzIpLGcwWzk2XT1IbSg5NiksZzBbMTIwXT1IbSgxMjApLGcwWzE0NF09SG0oMTQ0KTt2YXIgTm09ZzBbOTZdO2Z1bmN0aW9uIFZtKHkpe3JldHVybihObVt5Lm5hbWV8'@;
put 'fHkuRm9udE5hbWVdfHxbXSlbeS5zenx8eS5TaXplXX1mdW5jdGlvbiBaMSh5KXtpZih5KXt2YXIgUD1WbSh5KTtpZihQKXJldHVybiBwbD1QfXJldHVybiBwbD02fWZ1bmN0aW9uIFI5KHksUCxJKXtyZXR1cm4gejEoZnVuY3Rpb24gdUMoeSxQLEkpe3JldHVybltNYXRoLnJvdW5kKFBbMF0q'@;
put 'SSt5WzBdKigxLUkpKSxNYXRoLnJvdW5kKFBbMV0qSSt5WzFdKigxLUkpKSxNYXRoLnJvdW5kKFBbMl0qSSt5WzJdKigxLUkpKV19KGVmKCJudW1iZXIiPT10eXBlb2YgeS5yZ2I/KCIwMDAwMCIreS50b1N0cmluZygxNikpLnNsaWNlKC02KTp5LnJnYiksZWYoIm51bWJlciI9PXR5cGVvZiBQ'@;
put 'LnJnYj8oIjAwMDAwIitQLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlAucmdiKSxJKSl9ZnVuY3Rpb24gQm0oeSxQLEkpe2lmKEkpc3dpdGNoKCt5KXtjYXNlIDY0Onk9NjU7YnJlYWs7Y2FzZSA2NTp5PTY0fXZhciBRPVAmJlBbK3ldfHxDclsreV18fE5hWyt5LTIwMF07aWYoODE9PSt5JiYo'@;
put 'UT1DclsxXSksUXx8KFE9Q3JbMV0pLCFRKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK3kpO3JldHVybiB6MShRKX1mdW5jdGlvbiBVMih5LFAsSSl7dmFyIFE9e307cmV0dXJuIG51bGwhPXkuaW5kZXhlZCYmKFEuaW5kZXg9cGFyc2VJbnQoeS5pbmRleGVkLDEwKSxRLnJnYj1C'@;
put 'bShRLmluZGV4LFAuSW5kZXhlZCkpLG51bGwhPXkudGhlbWUmJihRLnRoZW1lPXBhcnNlSW50KHkudGhlbWUsMTApKSxudWxsIT15LnRpbnQmJihRLnRpbnQ9cGFyc2VGbG9hdCh5LnRpbnQpKSxudWxsIT15LnJnYiYmKFEucmdiPXkucmdiLnNsaWNlKC02KSksbnVsbCE9US50aGVtZSYmIVEu'@;
put 'cmdiJiZJLnRoZW1lRWxlbWVudHMmJihRLnJnYj1CZChJLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EudGhlbWVdLnJnYixRLnRpbnR8fDApLFEucmF3X3JnYj1JLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EudGhlbWVdLnJnYiksUX1mdW5jdGlvbiBJMyh5LFAsSSxRKXtQLkJvcmRlcnM9'@;
put 'W107dmFyIHJlPXt9LGdlPXt9LF9lPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT1sbih2ZSk7c3dpdGNoKGpuKFNlWzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2FzZSI8Ym9yZGVycz4iOmNhc2UiPC9ib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcj4iOmNh'@;
put 'c2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRvbS8+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2FzZSI8ZGlhZ29uYWwvPiI6'@;
put 'Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6'@;
put 'Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRlciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8'@;
put 'Ym9yZGVyLz4iOnJlPXt9LFNlLmRpYWdvbmFsVXAmJihyZS5kaWFnb25hbFVwPXlyKFNlLmRpYWdvbmFsVXApKSxTZS5kaWFnb25hbERvd24mJihyZS5kaWFnb25hbERvd249eXIoU2UuZGlhZ29uYWxEb3duKSksUC5Cb3JkZXJzLnB1c2gocmUpO2JyZWFrO2Nhc2UiPGxlZnQiOmNhc2UiPGxl'@;
put 'ZnQ+IjpnZT1yZS5sZWZ0PXt9LFNlLnN0eWxlJiYoZ2Uuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0IjpjYXNlIjxyaWdodD4iOmdlPXJlLnJpZ2h0PXt9LFNlLnN0eWxlJiYoZ2Uuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPHRvcCI6Y2FzZSI8dG9wPiI6Z2U9cmUudG9w'@;
put 'PXt9LFNlLnN0eWxlJiYoZ2Uuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6Z2U9cmUuYm90dG9tPXt9LFNlLnN0eWxlJiYoZ2Uuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPC9kaWFnb25hbD4iOnJlLmRpYWdvbmFsPWdlLGdlPXt9O2JyZWFr'@;
put 'O2Nhc2UiPC9ob3Jpem9udGFsPiI6cmUuaG9yaXpvbnRhbD1nZSxnZT17fTticmVhaztjYXNlIjwvdmVydGljYWw+IjpyZS52ZXJ0aWNhbD1nZSxnZT17fTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8Y29sb3I+IjpnZS5jb2xvcnx8KGdlLmNvbG9yPXt9KSxTZS5hdXRvJiYoZ2UuY29sb3Iu'@;
put 'YXV0bz15cihTZS5hdXRvKSksbnVsbCE9U2UucmdiP2dlLmNvbG9yLnJnYj1TZS5yZ2Iuc2xpY2UoLTYpOlNlLmluZGV4ZWQ/KGdlLmNvbG9yLmluZGV4PXBhcnNlSW50KFNlLmluZGV4ZWQsMTApLGdlLmNvbG9yLnJnYj1CbShnZS5jb2xvci5pbmRleCxQLkluZGV4ZWQsITEpKTpTZS50aGVt'@;
put 'ZSYmKGdlLmNvbG9yLnRoZW1lPXBhcnNlSW50KFNlLnRoZW1lLDEwKSxTZS50aW50JiYoZ2UuY29sb3IudGludD1wYXJzZUZsb2F0KFNlLnRpbnQpKSxTZS50aGVtZSYmSS50aGVtZUVsZW1lbnRzJiZJLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYoZ2UuY29sb3IucmdiPUJkKEkudGhlbWVF'@;
put 'bGVtZW50cy5jbHJTY2hlbWVbZ2UuY29sb3IudGhlbWVdLnJnYixnZS5jb2xvci50aW50fHwwKSkpLCFTZS5hdXRvJiZudWxsPT1TZS5yZ2ImJiFTZS5pbmRleGVkJiZkZWxldGUgZ2UuY29sb3I7YnJlYWs7Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7'@;
put 'ZGVmYXVsdDppZihRJiZRLldURiYmIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrU2VbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24gUjMoeSxQKXt2YXIgST1bIjwiK1BdO3JldHVybiB5JiZ5LnN0eWxlPyhJLnB1c2goJyBzdHlsZT0iJyt5LnN0eWxlKyciJykseS5j'@;
put 'b2xvcj8oSS5wdXNoKCI+IiksSS5wdXNoKFVkKHkuY29sb3IsITApKSxJLmpvaW4oIiIpKyI8LyIrUCsiPiIpOkkuam9pbigiIikrIi8+Iik6SVswXSsiLz4ifWZ1bmN0aW9uIE85KHksUCxJLFEpe1AuRmlsbHM9W107dmFyIHJlPXt9LGdlPXt9LF9lPSExLHZlPSExOyh5WzBdLm1hdGNoKCR0'@;
put 'KXx8W10pLmZvckVhY2goZnVuY3Rpb24oU2Upe3ZhciBIZT1sbihTZSk7c3dpdGNoKGpuKEhlWzBdKSl7Y2FzZSI8ZmlsbHMiOmNhc2UiPGZpbGxzPiI6Y2FzZSI8L2ZpbGxzPiI6Y2FzZSI8L2ZpbGw+IjpjYXNlIjwvZ3JhZGllbnRGaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdD'@;
put 'b2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxzdG9wLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNl'@;
put 'IjxmaWxsLz4iOlAuRmlsbHMucHVzaChyZT17fSk7YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsPiI6cmUuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjpyZS5zdG9wcz1bXSxIZS5kZWdyZWUmJihyZS5hbmdsZT0rSGUuZGVncmVlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6'@;
put 'Y2FzZSI8cGF0dGVybkZpbGw+IjpIZS5wYXR0ZXJuVHlwZSYmKHJlLnBhdHRlcm5UeXBlPUhlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVybkZpbGw+IjppZihfZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29s'@;
put 'b3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBCZT1qbihIZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9QmUmJiFyZVtCZV0mJihyZVtCZV09e30pO3ZhciBHZT1fZT9nZTpyZVtCZV07bnVsbCE9SGUuaW5kZXhlZCYmKEdlLmluZGV4PXBhcnNlSW50KEhlLmluZGV4ZWQsMTAp'@;
put 'LEdlLnJnYj1CbShHZS5pbmRleCxQLkluZGV4ZWQpKSxudWxsIT1IZS50aGVtZSYmKEdlLnRoZW1lPXBhcnNlSW50KEhlLnRoZW1lLDEwKSksbnVsbCE9SGUudGludCYmKEdlLnRpbnQ9cGFyc2VGbG9hdChIZS50aW50KSksbnVsbCE9SGUucmdiJiYoR2UucmdiPUhlLnJnYi5zbGljZSgtNikp'@;
put 'LG51bGwhPUhlLmF1dG8mJmRlbGV0ZSByZVtCZV0sbnVsbCE9R2UudGhlbWUmJiFHZS5yZ2ImJkkudGhlbWVFbGVtZW50cyYmKEdlLnJnYj1CZChJLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0dlLnRoZW1lXS5yZ2IsR2UudGludHx8MCksUS5XVEYmJihHZS5yYXdfcmdiPUkudGhlbWVFbGVt'@;
put 'ZW50cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJnYikpO2JyZWFrO2Nhc2UiPHN0b3A+IjpfZT0hMCxnZT17fTticmVhaztjYXNlIjxzdG9wIjpfZT0hMCxnZT17fSxudWxsIT1IZS5wb3NpdGlvbiYmKGdlLnY9cGFyc2VGbG9hdChIZS5wb3NpdGlvbikpO2JyZWFrO2Nhc2UiPC9zdG9wPiI6X2U9'@;
put 'ITEscmUuc3RvcHMucHVzaChnZSk7YnJlYWs7Y2FzZSI8ZXh0Ijp2ZT0hMDticmVhaztjYXNlIjwvZXh0PiI6dmU9ITE7YnJlYWs7ZGVmYXVsdDppZihRJiZRLldURiYmIXZlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrSGVbMF0rIiBpbiBmaWxscyIpfX0pfWZ1bmN0aW9uIHlE'@;
put 'KHksUCxJLFEpe1AuRm9udHM9W107dmFyIHJlPXt9LGdlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciB2ZT1sbihfZSk7c3dpdGNoKGpuKHZlWzBdKSl7Y2FzZSI8Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8'@;
put 'Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPV9lLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6UC5Gb250cy5wdXNoKHJlKSxyZT17fTticmVhaztjYXNlIjxuYW1lIjp2ZS52YWwmJihyZS5uYW1lPVBpKHZlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6'@;
put 'Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpyZS5ib2xkPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8Yi8+IjpjYXNlIjxiPiI6cmUuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6cmUuaXRhbGljPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2Fz'@;
put 'ZSI8aS8+IjpjYXNlIjxpPiI6cmUuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjx1Ijpzd2l0Y2godmUudmFsKXtjYXNlIm5vbmUiOnJlLnVuZGVybGluZT0wO2JyZWFrO2Nhc2Uic2luZ2xlIjpyZS51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6cmUudW5kZXJs'@;
put 'aW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpyZS51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpyZS51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6cmUudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNl'@;
put 'IjxzdHJpa2UiOnJlLnN0cmlrZT12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjpyZS5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjpyZS5vdXRsaW5lPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8b3V0bGluZS8+IjpyZS5vdXRsaW5lPTE7YnJl'@;
put 'YWs7Y2FzZSI8c2hhZG93IjpyZS5zaGFkb3c9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6cmUuc2hhZG93PTE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UiOnJlLmNvbmRlbnNlPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6cmUuY29u'@;
put 'ZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOnJlLmV4dGVuZD12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPGV4dGVuZC8+IjpyZS5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6dmUudmFsJiYocmUuc3o9K3ZlLnZhbCk7YnJlYWs7Y2FzZSI8c3ovPiI6Y2FzZSI8L3N6PiI6YnJl'@;
put 'YWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPSh2ZS52YWx8fCJub25lIikmJihyZS52YWxpZ249dmUudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8L3ZlcnRBbGlnbj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dmUudmFsJiYocmUuZmFt'@;
put 'aWx5PXBhcnNlSW50KHZlLnZhbCwxMCkpO2JyZWFrO2Nhc2UiPGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6YnJlYWs7Y2FzZSI8c2NoZW1lIjp2ZS52YWwmJihyZS5zY2hlbWU9dmUudmFsKTticmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmJyZWFrO2Nhc2UiPGNoYXJz'@;
put 'ZXQiOmlmKCIxIj09dmUudmFsKWJyZWFrO3ZlLmNvZGVwYWdlPUxbcGFyc2VJbnQodmUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOnJlLmNvbG9yfHwocmUuY29sb3I9e30pLHZlLmF1dG8mJihyZS5jb2xvci5hdXRvPXlyKHZlLmF1dG8pKSx2ZS5yZ2I/cmUuY29sb3IucmdiPXZlLnJn'@;
put 'Yi5zbGljZSgtNik6dmUuaW5kZXhlZD8ocmUuY29sb3IuaW5kZXg9cGFyc2VJbnQodmUuaW5kZXhlZCwxMCkscmUuY29sb3IucmdiPUJtKHJlLmNvbG9yLmluZGV4LFAuSW5kZXhlZCkpOnZlLnRoZW1lJiYocmUuY29sb3IudGhlbWU9cGFyc2VJbnQodmUudGhlbWUsMTApLHZlLnRpbnQmJihy'@;
put 'ZS5jb2xvci50aW50PXBhcnNlRmxvYXQodmUudGludCkpLHZlLnRoZW1lJiZJLnRoZW1lRWxlbWVudHMmJkkudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihyZS5jb2xvci5yZ2I9QmQoSS50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtyZS5jb2xvci50aGVtZV0ucmdiLHJlLmNvbG9yLnRpbnR8'@;
put 'fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpnZT0hMTticmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+'@;
put 'IjpicmVhaztjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpnZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhZ2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIit2ZVswXSsiIGluIGZvbnRzIil9fSl9dmFyIGptPXswOiJub25lIiwxOiJzaW5nbGUiLDI6'@;
put 'ImRvdWJsZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0OiJkb3VibGVBY2NvdW50aW5nIn0semQ9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLFoyPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIs'@;
put 'ImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLHhEPWZ1bmN0aW9uKCl7dmFyIHk9LzwoPzpcdys6KT9mb250KFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnQ+LyxQPS88KD86XHcrOik/bnVtRm10KFtePl0qKVwv'@;
put 'Pi8sST0vPCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbD4vLHJlPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcj4vO3JldHVybiBmdW5jdGlvbih2ZSxTZSxIZSxCZSl7dmFyIGR0LEN0LEdlPXt9LG50PXt9O3Jl'@;
put 'dHVybihkdD12ZS5tYXRjaCh5KSkmJih5RChkdCxHZSxIZSxCZSksKEdlLkZvbnRzfHxbXSlbMF0mJlV0KG50LEdlLkZvbnRzWzBdKSksKGR0PXZlLm1hdGNoKFApKSYmKEN0PWxuKFBpKGR0WzBdKSksbnQuej1DdC5mb3JtYXRDb2RlP3hyKEN0LmZvcm1hdENvZGUpOihTZS5OdW1iZXJGbXR8'@;
put 'fFtdKVsrQ3QubnVtRm10SWRdfHwiR2VuZXJhbCIpLChkdD12ZS5tYXRjaChJKSkmJihPOShkdCxHZSxIZSxCZSksKEdlLkZpbGxzfHxbXSlbMF0mJlV0KG50LEdlLkZpbGxzWzBdKSksKGR0PXZlLm1hdGNoKHJlKSkmJihJMyhkdCxHZSxIZSxCZSksKEdlLkJvcmRlcnN8fFtdKVswXSYmVXQo'@;
put 'bnQsR2UuQm9yZGVyc1swXSkpLG50fX0oKSx4Wj0vPCg/Olx3KzopP2R4Zj5bXFNcc10qPzxcLyg/Olx3KzopP2R4Zj4vZyxBWj0vPCg/Olx3KzopP3RhYmxlU3R5bGVcYi4qPz5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGU+L2c7dmFyIFptPWZ1bmN0aW9uKCl7dmFyIFA9LzwoPzpc'@;
put 'dys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxJPS88KD86XHcrOik/Y2VsbFN0eWxlWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZVhmcz4vLFE9LzwoPzpcdys6KT9jZWxsU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3'@;
put 'KzopP2NlbGxTdHlsZXM+LyxyZT0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLGdlPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbHM+LyxfZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10q'@;
put 'PzxcLyg/Olx3KzopP2ZvbnRzPi8sdmU9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+LyxTZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLEhlPS88KD86XHcrOik/'@;
put 'dGFibGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxCZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihudCxkdCxDdCl7dmFyIGJ0LGN0PXt9O3JldHVybiBudD8oKGJ0PShudD1u'@;
put 'dC5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaChTZSkpJiZmdW5jdGlvbiBQOSh5LFAsSSl7UC5JbmRleGVkfHwoUC5JbmRleGVkPVtdKTt2YXIgUT0hMTsoeVswXS5tYXRjaCgkdCl8fFtd'@;
put 'KS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9bG4ocmUpO3N3aXRjaChqbihnZVswXSkpe2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29sb3JzIjpjYXNlIjxpbmRleGVkQ29sb3JzLz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2Fz'@;
put 'ZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8cmdiQ29sb3IiOmRlbGV0ZSBnZVswXTt2YXIgX2U9cGFyc2VJbnQoZ2UucmdiLnNsaWNlKC02KSwxNik7UC5JbmRleGVkLnB1c2goW19lPj4xNiYyNTUsX2U+PjgmMjU1LDI1NSZfZV0pO2JyZWFr'@;
put 'O2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKEkmJkkuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKFApKSYmZnVuY3Rp'@;
put 'b24gQ0QoeSxQLEkpe1AuTnVtYmVyRm10PVtdO2Zvcih2YXIgUT1sdCh3Ll90YWJsZSkscmU9MDtyZTxRLmxlbmd0aDsrK3JlKVAuTnVtYmVyRm10W1FbcmVdXT13Ll90YWJsZVtRW3JlXV07dmFyIGdlPXlbMF0ubWF0Y2goJHQpO2lmKGdlKWZvcihyZT0wO3JlPGdlLmxlbmd0aDsrK3JlKXt2'@;
put 'YXIgX2U9bG4oZ2VbcmVdKTtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxudW1GbXRzIjpjYXNlIjwvbnVtRm10cz4iOmNhc2UiPG51bUZtdHMvPiI6Y2FzZSI8bnVtRm10cz4iOmNhc2UiPC9udW1GbXQ+IjpicmVhaztjYXNlIjxudW1GbXQiOnZhciB2ZT14cihQaShfZS5mb3JtYXRDb2RlKSks'@;
put 'U2U9cGFyc2VJbnQoX2UubnVtRm10SWQsMTApO2lmKFAuTnVtYmVyRm10W1NlXT12ZSxTZT4wKXtpZihTZT4zOTIpe2ZvcihTZT0zOTI7U2U+NjAmJm51bGwhPVAuTnVtYmVyRm10W1NlXTstLVNlKTtQLk51bWJlckZtdFtTZV09dmV9dy5sb2FkKHZlLFNlKX1icmVhaztkZWZhdWx0OmlmKEku'@;
put 'V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrX2VbMF0rIiBpbiBudW1GbXRzIil9fX0oYnQsY3QsQ3QpLChidD1udC5tYXRjaChfZSkpJiZ5RChidCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKGdlKSkmJk85KGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2godmUpKSYmSTMoYnQs'@;
put 'Y3QsZHQsQ3QpLChidD1udC5tYXRjaChJKSkmJmZ1bmN0aW9uIGhDKHksUCxJKXtQLkNlbGxTdHlsZVhmPVtdO3ZhciBRLHJlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBfZT1sbihnZSksdmU9MDtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxjZWxs'@;
put 'U3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2Ui'@;
put 'PGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShRPV9lKVswXSx2ZT0wO3ZlPHpkLmxlbmd0aDsrK3ZlKVFbemRbdmVdXSYmKFFbemRbdmVdXT1wYXJzZUludChRW3pkW3ZlXV0sMTApKTtmb3IodmU9MDt2ZTxaMi5sZW5ndGg7'@;
put 'Kyt2ZSlRW1oyW3ZlXV0mJihRW1oyW3ZlXV09eXIoUVtaMlt2ZV1dKSk7aWYoUC5OdW1iZXJGbXQmJlEubnVtRm10SWQ+MzkyKWZvcih2ZT0zOTI7dmU+NjA7LS12ZSlpZihQLk51bWJlckZtdFtRLm51bUZtdElkXT09UC5OdW1iZXJGbXRbdmVdKXtRLm51bUZtdElkPXZlO2JyZWFrfVAuQ2Vs'@;
put 'bFN0eWxlWGYucHVzaChRKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgU2U9e307X2UudmVydGljYWwmJihTZS52ZXJ0aWNhbD1fZS52ZXJ0aWNhbCksX2UuaG9yaXpvbnRhbCYmKFNlLmhvcml6b250YWw9X2UuaG9yaXpvbnRhbCksbnVsbCE9X2UudGV4'@;
put 'dFJvdGF0aW9uJiYoU2UudGV4dFJvdGF0aW9uPV9lLnRleHRSb3RhdGlvbiksX2UuaW5kZW50JiYoU2UuaW5kZW50PV9lLmluZGVudCksX2Uud3JhcFRleHQmJihTZS53cmFwVGV4dD1fZS53cmFwVGV4dCksX2Uuc2hyaW5rVG9GaXQmJihTZS5zaHJpbmtUb0ZpdD15cihfZS5zaHJpbmtUb0Zp'@;
put 'dCkpLFEuYWxpZ25tZW50PVNlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOlEucHJvdGVjdGlvbj17fSx5cihfZS5oaWRkZW4pJiYoUS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9X2UubG9ja2VkJiYoUS5wcm90ZWN0aW9uLmVkaXRhYmxlPSF5cihfZS5sb2NrZWQpKTticmVhaztjYXNl'@;
put 'IjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKEkmJkkuV1RGJiYhcmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitfZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKFEpKSYmZnVuY3Rp'@;
put 'b24gU0QoeSxQLEkpe1AuQ2VsbFN0eWxlWGZ8fChQLkNlbGxTdHlsZVhmPVtdKTt2YXIgUT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9bG4ocmUpO3N3aXRjaChqbihnZVswXSkpe2Nhc2UiPGNlbGxTdHlsZXMiOmNhc2UiPGNlbGxTdHlsZXM+'@;
put 'IjpjYXNlIjxjZWxsU3R5bGVzLz4iOmNhc2UiPC9jZWxsU3R5bGVzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2NlbGxTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGNlbGxTdHlsZSI6Y2FzZSI8Y2VsbFN0eWxlLz4iOmRlbGV0'@;
put 'ZSBnZVswXTt2YXIgX2U9K2dlLnhmSWQ7aWYoUC5DZWxsU3R5bGVYZltfZV0pUC5DZWxsU3R5bGVYZltfZV0uc3R5bGU9UGkoZ2UubmFtZSk7ZWxzZSBpZighZ2UuYnVpbHRpbklkKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgQ2VsbFN0eWxlICIrX2UpO2JyZWFrO2Nhc2UiPGV4'@;
put 'dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKEkmJkkuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKHJlKSkmJmZ1bmN0aW9uIGRDKHks'@;
put 'UCxJKXtQLkNlbGxYZj1bXTt2YXIgUSxyZT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgX2U9bG4oZ2UpLHZlPTA7c3dpdGNoKGpuKF9lWzBdKSl7Y2FzZSI8Y2VsbFhmcyI6Y2FzZSI8Y2VsbFhmcz4iOmNhc2UiPGNlbGxYZnMvPiI6Y2FzZSI8L2Nl'@;
put 'bGxYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKFE9'@;
put 'X2UpWzBdLHZlPTA7dmU8emQubGVuZ3RoOysrdmUpUVt6ZFt2ZV1dJiYoUVt6ZFt2ZV1dPXBhcnNlSW50KFFbemRbdmVdXSwxMCkpO2Zvcih2ZT0wO3ZlPFoyLmxlbmd0aDsrK3ZlKVFbWjJbdmVdXSYmKFFbWjJbdmVdXT15cihRW1oyW3ZlXV0pKTtpZihQLk51bWJlckZtdCYmUS5udW1GbXRJ'@;
put 'ZD4zOTIpZm9yKHZlPTM5Mjt2ZT42MDstLXZlKWlmKFAuTnVtYmVyRm10W1EubnVtRm10SWRdPT1QLk51bWJlckZtdFt2ZV0pe1EubnVtRm10SWQ9dmU7YnJlYWt9UC5DZWxsU3R5bGVYZiYmUS54ZklkJiZQLkNlbGxTdHlsZVhmW1EueGZJZF0mJlAuQ2VsbFN0eWxlWGZbUS54ZklkXS5zdHls'@;
put 'ZSYmKFEuc3R5bGU9UC5DZWxsU3R5bGVYZltRLnhmSWRdLnN0eWxlKSxQLkNlbGxYZi5wdXNoKFEpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBTZT17fTtfZS52ZXJ0aWNhbCYmKFNlLnZlcnRpY2FsPV9lLnZlcnRpY2FsKSxfZS5ob3Jpem9udGFsJiYo'@;
put 'U2UuaG9yaXpvbnRhbD1fZS5ob3Jpem9udGFsKSxudWxsIT1fZS50ZXh0Um90YXRpb24mJihTZS50ZXh0Um90YXRpb249X2UudGV4dFJvdGF0aW9uKSxfZS5pbmRlbnQmJihTZS5pbmRlbnQ9X2UuaW5kZW50KSxfZS53cmFwVGV4dCYmKFNlLndyYXBUZXh0PXlyKF9lLndyYXBUZXh0KSksX2Uu'@;
put 'c2hyaW5rVG9GaXQmJihTZS5zaHJpbmtUb0ZpdD15cihfZS5zaHJpbmtUb0ZpdCkpLFEuYWxpZ25tZW50PVNlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOlEucHJvdGVjdGlvbj17fSx5cihfZS5oaWRkZW4pJiYoUS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9X2UubG9ja2VkJiYoUS5w'@;
put 'cm90ZWN0aW9uLmVkaXRhYmxlPSF5cihfZS5sb2NrZWQpKTticmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoSSYmSS5XVEYmJiFyZSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK19lWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKEJlKSkmJmZ1bmN0aW9uIEY5KHksUCxJLFEpe1AuRFhGfHwoUC5EWEY9W10pLCh5WzBdLm1hdGNoKHhaKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUp'@;
put 'e1AuRFhGLnB1c2goeEQocmUsUCxJLFEpKX0pfShidCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKEhlKSkmJmZ1bmN0aW9uIFRaKHksUCxJLFEpe1AuVGFibGV8fChQLlRhYmxlPVtdKSwoeVswXS5tYXRjaChBWil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtQLlRhYmxlLnB1c2goZnVuY3Rp'@;
put 'b24gRVooeSxQLEksUSl7dmFyIHJlPSExLGdlPXt9O3JldHVybih5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciB2ZT1sbihfZSk7c3dpdGNoKGpuKHZlWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOmdlLm5hbWU9dmUubmFtZS5yZXBs'@;
put 'YWNlKC9eKFRhYmxlfFBpdm90KVN0eWxlLywiIiksZ2UucmF3bmFtZT12ZS5uYW1lLGdlLnBpdm90PSF2ZS5waXZvdHx8eXIodmUucGl2b3QpLGdlLnRhYmxlPSF2ZS50YWJsZXx8eXIodmUudGFibGUpO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGUvPiI6Y2FzZSI8L3RhYmxlU3R5bGU+IjpjYXNl'@;
put 'IjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx0YWJsZVN0eWxlRWxlbWVudCI6aWYodmUudHlwZSYmdmUuZHhmSWQpe2lmKCFQLkRYRnx8IVAuRFhGWyt2ZS5keGZJZF0pdGhyb3cgbmV3IEVycm9yKF9lKyIgY2Fubm90IGZpbmQgRFhGIik7Z2Vb'@;
put 'dmUudHlwZV09UC5EWEZbK3ZlLmR4ZklkXX1icmVhaztjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhcmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIit2ZVswXSsiIGluIHRhYmxlU3R5bGUiKX19KSxn'@;
put 'ZX0ocmUsUCwwLFEpKX0pfShidCxjdCwwLEN0KSwoY3QuRm9udHN8fFtdKVswXSYmWjEoY3QuRm9udHNbMF0pLGN0KTpjdH19KCksZkM9U3IoInN0eWxlU2hlZXQiLG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnZ0Ijppcy52dH0pO2Z1bmN0aW9uIHBDKHksUCl7dmFyIFEsST1bQm4s'@;
put 'ZkNdO3kuU1NGJiZudWxsIT0oUT1mdW5jdGlvbiB6bSh5KXt2YXIgUD1bIjxudW1GbXRzPiJdO3JldHVybltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oSSl7Zm9yKHZhciBRPUlbMF07UTw9SVsxXTsrK1EpbnVsbCE9eVtRXSYmKFBbUC5sZW5ndGhd'@;
put 'PVNyKCJudW1GbXQiLG51bGwse251bUZtdElkOlEsZm9ybWF0Q29kZTpIcih5W1FdKX0pKX0pLDE9PT1QLmxlbmd0aD8iIjooUFtQLmxlbmd0aF09IjwvbnVtRm10cz4iLFBbMF09U3IoIm51bUZtdHMiLG51bGwse2NvdW50OlAubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxQLmpvaW4o'@;
put 'IiIpKX0oeS5TU0YpKSYmKElbSS5sZW5ndGhdPVEpLElbSS5sZW5ndGhdPWZ1bmN0aW9uIHdEKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oSSl7dmFyIFE9WyI8Zm9udD4iXTtJLmJvbGQmJlEucHVzaCgiPGIvPiIpLEkuaXRhbGljJiZRLnB1c2goIjxpLz4iKSxJLnN0'@;
put 'cmlrZSYmUS5wdXNoKCI8c3RyaWtlLz4iKSxJLnNoYWRvdyYmUS5wdXNoKCI8c2hhZG93Lz4iKSxqbVsrSS51bmRlcmxpbmVdJiZRLnB1c2goJzx1IHZhbD0iJytqbVsrSS51bmRlcmxpbmVdKyciLz4nKSxJLnN6JiZRLnB1c2goJzxzeiB2YWw9IicrSS5zeisnIi8+JyksSS5jb2xvciYmUS5w'@;
put 'dXNoKFVkKEkuY29sb3IsITApKSxJLm5hbWUmJlEucHVzaCgnPG5hbWUgdmFsPSInK0kubmFtZSsnIi8+JyksSS5mYW1pbHkmJlEucHVzaCgnPGZhbWlseSB2YWw9IicrSS5mYW1pbHkrJyIvPicpLEkuc2NoZW1lJiZRLnB1c2goJzxzY2hlbWUgdmFsPSInK0kuc2NoZW1lKyciLz4nKSxJLnZh'@;
put 'bGlnbiYmUS5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytJLnZhbGlnbisoInN1YiI9PUkudmFsaWdufHwic3VwZXIiPT1JLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpLFAucHVzaChRLmpvaW4oIiIpKyI8L2ZvbnQ+Iil9KSwnPGZvbnRzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2lu'@;
put 'KCIiKSsiPC9mb250cz4ifSgoeS5TdHlsZXN8fHt9KS5Gb250c3x8W10pLElbSS5sZW5ndGhdPWZ1bmN0aW9uIGJEKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oSSl7dmFyIFE9bnVsbDtpZihJLnN0b3BzJiZJLnN0b3BzLmxlbmd0aCl7dmFyIHJlPXt9O0kuYW5nbGUm'@;
put 'JihyZS5kZWdyZWU9TWF0aC5yb3VuZChJLmFuZ2xlKSksUT1JLnN0b3BzLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIFNyKCJzdG9wIixVZChnZSwiY29sb3IiLCEwKSxudWxsIT1nZS52P3twb3NpdGlvbjpnZS52fTp7fSl9KSxQLnB1c2goIjxmaWxsPiIrU3IoImdyYWRpZW50RmlsbCIsUS5q'@;
put 'b2luKCIiKSxyZSkrIjwvZmlsbD4iKX1lbHNle2lmKEkuZmdDb2xvcil7aWYoUT0oUXx8IiIpKyI8ZmdDb2xvciAiLEkuZmdDb2xvci50aGVtZSlRKz0ndGhlbWU9IicrSS5mZ0NvbG9yLnRoZW1lKyciJysoSS5mZ0NvbG9yLnRpbnQ/JyB0aW50PSInK0kuZmdDb2xvci50aW50KyciJzoiIikr'@;
put 'Ii8+IjtlbHNlIGlmKG51bGwhPUkuZmdDb2xvci5pbmRleCYmbnVsbD09SS5mZ0NvbG9yLnJnYilRKz0naW5kZXhlZD0iJytJLmZnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihJLmZnQ29sb3IuYXV0bylRKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1JLmZnQ29sb3IucmdiKXRocm93'@;
put 'IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrbHQoSS5mZ0NvbG9yKS5qb2luKCJ8IikpO1ErPSdyZ2I9IkZGJytPdShJLmZnQ29sb3IucmdiKSsnIi8+J30ic29saWQiPT1JLnBhdHRlcm5UeXBlJiYhSS5iZ0NvbG9yJiYoSS5iZ0NvbG9yPXtpbmRleDo2NH0pfWlmKEkuYmdDb2xvcilpZihRPShR'@;
put 'fHwiIikrIjxiZ0NvbG9yICIsSS5iZ0NvbG9yLnRoZW1lKVErPSd0aGVtZT0iJytJLmJnQ29sb3IudGhlbWUrJyIvPic7ZWxzZSBpZihudWxsIT1JLmJnQ29sb3IuaW5kZXgmJm51bGw9PUkuYmdDb2xvci5yZ2IpUSs9J2luZGV4ZWQ9IicrSS5iZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYo'@;
put 'SS5iZ0NvbG9yLmF1dG8pUSs9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09SS5iZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK2x0KEkuYmdDb2xvcikuam9pbigifCIpKTtRKz0ncmdiPSJGRicrT3UoSS5iZ0NvbG9yLnJnYikrJyIvPid9UC5wdXNoKCI8ZmlsbD4i'@;
put 'K1NyKCJwYXR0ZXJuRmlsbCIsUSx7cGF0dGVyblR5cGU6SS5wYXR0ZXJuVHlwZX0pKyI8L2ZpbGw+Iil9fSksJzxmaWxscyBjb3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvZmlsbHM+In0oKHkuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxJW0kubGVuZ3RoXT1mdW5jdGlvbiBD'@;
put 'Wih5KXt2YXIgUD1bXTtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3ZhciBRPVtdO1EucHVzaChSMyhJLmxlZnQsImxlZnQiKSksUS5wdXNoKFIzKEkucmlnaHQsInJpZ2h0IikpLFEucHVzaChSMyhJLnRvcCwidG9wIikpLFEucHVzaChSMyhJLmJvdHRvbSwiYm90dG9tIikpLFEucHVz'@;
put 'aChSMyhJLmRpYWdvbmFsLCJkaWFnb25hbCIpKSxQLnB1c2goIjxib3JkZXI+IitRLmpvaW4oIiIpKyI8L2JvcmRlcj4iKX0pLCc8Ym9yZGVycyBjb3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvYm9yZGVycz4ifSgoeS5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksSVtJLmxl'@;
put 'bmd0aF09ZnVuY3Rpb24gTVooeSl7dmFyIFA9Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKHkpZm9yKHZhciBJPTE7STx5Lmxlbmd0aDsrK0kpUC5wdXNoKFNyKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6eVtJXS5udW1GbXRJZHx8MCxm'@;
put 'b250SWQ6eVtJXS5mb250SWR8fDAsZmlsbElkOnlbSV0uZmlsbElkfHwwLGJvcmRlcklkOnlbSV0uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShQLmNlbGxTdHlsZVhmcyksKFE9'@;
put 'ZnVuY3Rpb24gU1ooeSl7dmFyIFA9W107cmV0dXJuIFBbUC5sZW5ndGhdPVNyKCJjZWxsWGZzIixudWxsKSx5LmZvckVhY2goZnVuY3Rpb24oSSl7dmFyIFE9SS5hbGlnbm1lbnQ7ZGVsZXRlIEkuYWxpZ25tZW50O3ZhciByZT1JLnByb3RlY3Rpb247ZGVsZXRlIEkucHJvdGVjdGlvbjt2YXIg'@;
put 'Z2U9UT9TcigiYWxpZ25tZW50IixudWxsLFEpOiIiO2dlKz1yZT9TcigicHJvdGVjdGlvbiIsbnVsbCx7aGlkZGVuOnJlLmhpZGRlbj8xOjAsbG9ja2VkOnJlLmVkaXRhYmxlPzA6MX0pOiIiLFBbUC5sZW5ndGhdPVNyKCJ4ZiIsZ2V8fG51bGwsSSksUSYmKEkuYWxpZ25tZW50PVEpLHJlJiYo'@;
put 'SS5wcm90ZWN0aW9uPXJlKX0pLFBbUC5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09UC5sZW5ndGg/IiI6KFBbMF09U3IoImNlbGxYZnMiLG51bGwse2NvdW50OlAubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxQLmpvaW4oIiIpKX0oUC5jZWxsWGZzKSkmJihJW0kubGVuZ3RoXT1RKSxJ'@;
put 'W0kubGVuZ3RoXT1mdW5jdGlvbiBNRCh5KXt2YXIgUD1bJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiLz4nXTtpZih5KWZvcih2YXIgST0xO0k8eS5sZW5ndGg7KytJKVAucHVzaChTcigiY2VsbFN0eWxlIixudWxsLHtuYW1lOnlbSV0ubmFtZSx4Zklk'@;
put 'Okl9KSk7cmV0dXJuJzxjZWxsU3R5bGVzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9jZWxsU3R5bGVzPiJ9KFAuY2VsbFN0eWxlWGZzKSx5LlN0eWxlcy5EWEZ8fCh5LlN0eWxlcy5EWEY9W10pO3ZhciByZT1mdW5jdGlvbiBEWih5LFAsSSl7dmFyIFE9Wyc8dGFibGVT'@;
put 'dHlsZXMgY291bnQ9IicrKHl8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0UGl2b3RTdHlsZT0iUGl2b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIHkmJnkubGVuZ3RoPyhRWzBdKz0iPiIseS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtR'@;
put 'LnB1c2goZnVuY3Rpb24ga1ooeSxQLEkpe3ZhciBRPVtdO1sid2hvbGVUYWJsZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RDb2x1bW4iLCJsYXN0Q29sdW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENvbHVt'@;
put 'blN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIsImxhc3RIZWFkZXJDZWxsIiwiZmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwiZmlyc3RTdWJ0b3RhbENvbHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ciLCJz'@;
put 'ZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3VidG90YWxSb3ciLCJibGFua1JvdyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29uZENvbHVtblN1YmhlYWRpbmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5nIiwi'@;
put 'dGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZpZWxkTGFiZWxzIiwicGFnZUZpZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoeVtnZV0pe3ZhciBfZT1GbyhQLHlbZ2VdKTtRLnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJytfZSsnIiB0eXBlPSInK2dlKyciLz4n'@;
put 'KX19KTt2YXIgcmU9Jzx0YWJsZVN0eWxlIGNvdW50PSInK1EubGVuZ3RoKyciIHBpdm90PSInKyArISF5LnBpdm90KyciIG5hbWU9IicreS5uYW1lKyciJztyZXR1cm4gUS5sZW5ndGg/cmUrIj4iK1Euam9pbigiIikrIjwvdGFibGVTdHlsZT4iOnJlKyIvPiJ9KHJlLFApKX0pLFEuam9pbigi'@;
put 'IikrIjwvdGFibGVTdHlsZXM+Iik6UVswXSsiLz4ifSgoeS5TdHlsZXN8fHt9KS5UYWJsZXx8W10seS5TdHlsZXMuRFhGKTtyZXR1cm4gSVtJLmxlbmd0aF09ZnVuY3Rpb24gVW0oeSxQKXtpZigheS5sZW5ndGgpcmV0dXJuJzxkeGZzIGNvdW50PSIwIi8+Jzt2YXIgST1bJzxkeGZzIGNvdW50'@;
put 'PSInK3kubGVuZ3RoKyciPiddO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oUSl7SS5wdXNoKGZ1bmN0aW9uIEVEKHksUCl7dmFyIEk9e2JvbGQ6ImIiLGl0YWxpYzoiaSIsdmFsaWduOiJ2ZXJ0QWxpZ24ifSxRPVsiPGR4Zj4iXSxyZT1bXSxnZT1bXSxfZT1bXSxTZT1bXTtyZXR1cm4gbHQo'@;
put 'eSkuZm9yRWFjaChmdW5jdGlvbihCZSl7c3dpdGNoKEJlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2UiY29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2Ui'@;
put 'Y2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6cmUucHVzaChCZSk7YnJlYWs7Y2FzZSJiZ0NvbG9yIjpjYXNlImZnQ29sb3IiOl9lLnB1c2goQmUpO2JyZWFrO2Nhc2UieiI6Z2UucHVzaChCZSk7YnJlYWs7Y2FzZSJ0b3AiOmNh'@;
put 'c2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6U2UucHVzaChCZSk7YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6'@;
put 'Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrQmUrIiBpbiBEWEYifX0pLHJlLmxlbmd0aD4wJiYoUS5wdXNoKCI8Zm9udD4iKSxyZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtzd2l0Y2goQmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtl'@;
put 'IjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6US5wdXNoKCI8IisoSVtCZV18fEJlKSsnIHZhbD0iJysoeVtCZV0/IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOlEucHVzaChVZCh5W0JlXSxCZSwhMCkpO2JyZWFrO2Nhc2Ui'@;
put 'ZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpRLnB1c2goIjwiKyhJW0JlXXx8QmUpKycgdmFsPSInK3lbQmVdKyciLz4nKTticmVhaztjYXNlInVuZGVybGluZSI6US5wdXNoKCc8dSB2YWw9Iicram1beVtCZV18fDBdKyciLz4nKTticmVhaztjYXNlInZhbGlnbiI6'@;
put 'US5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt5LnZhbGlnbisoInN1YiI9PXkudmFsaWdufHwic3VwZXIiPT15LnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitCZSsiIDogZm9udCBEWEYifX0pLFEucHVzaCgiPC9mb250PiIpKSxn'@;
put 'ZS5sZW5ndGg+MCYmUS5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicrSHIoeS56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBZMyh5LFApe2lmKCJudW1iZXIiPT10eXBlb2YgeSlyZXR1cm4geTt2YXIgST1QLnJldnNzZlt5Pz8iR2VuZXJhbCJdLFE9NjA7aWYobnVsbD09SSlmb3IoO1E8'@;
put 'MzkyOysrUSlpZihudWxsPT1QLnNzZltRXSlyZXR1cm4gdy5sb2FkKHksUSksUC5zc2ZbUV09eSxQLnJldnNzZlt5XT1RLFE7cmV0dXJuIEl9KHkueixQKSsnIi8+JyksX2UubGVuZ3RoPjAmJihRLnB1c2goIjxmaWxsPiIpLFEucHVzaCgiPHBhdHRlcm5GaWxsIisoeS5wYXR0ZXJuVHlwZT8n'@;
put 'IHBhdHRlcm5UeXBlPSInK3kucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxfZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtzd2l0Y2goQmUpe2Nhc2UicGF0dGVyblR5cGUiOmJyZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpRLnB1c2goVWQoeVtCZV0sQmUsITApKTticmVhaztkZWZhdWx0'@;
put 'OnRocm93IlVuc3VwcG9ydGVkICIrQmUrIiA6IGZpbGwgRFhGIn19KSxRLnB1c2goIjwvcGF0dGVybkZpbGw+IiksUS5wdXNoKCI8L2ZpbGw+IikpLFNlLmxlbmd0aD4wPyhRLnB1c2goWyI8Ym9yZGVyIixudWxsIT15LmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEheS5kaWFn'@;
put 'b25hbERvd24rJyInOiIiLG51bGwhPXkuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIXkuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2luKCIiKSksU2UuZm9yRWFjaChmdW5jdGlvbihCZSl7US5wdXNoKFIzKHlbQmVdLEJlKSl9KSxRLnB1c2goIjwvYm9yZGVyPiIpKToobnVsbCE9'@;
put 'eS5kaWFnb25hbERvd258fG51bGwhPXkuZGlhZ29uYWxVcCkmJlEucHVzaChbIjxib3JkZXIiLG51bGwhPXkuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISF5LmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9eS5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEheS5kaWFn'@;
put 'b25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09US5sZW5ndGg/IjxkeGYvPiI6US5qb2luKCIiKSsiPC9keGY+In0oUSxQKSl9KSxJLmpvaW4oIiIpKyI8L2R4ZnM+In0oeS5TdHlsZXMuRFhGLFApLElbSS5sZW5ndGhdPXJlLEkubGVuZ3RoPjImJihJW0kubGVuZ3RoXT0iPC9zdHls'@;
put 'ZVNoZWV0PiIsSVsxXT1JWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxJLmpvaW4oIiIpfWZ1bmN0aW9uIE8zKHksUCxJKXtJfHwoST1wcig2KzQqUC5sZW5ndGgpKSxJLndyaXRlX3NoaWZ0KDIseSkscmMoUCxJKTt2YXIgUT1JLmxlbmd0aD5JLmw/SS5zbGljZSgwLEkubCk6STtyZXR1cm4gbnVs'@;
put 'bD09SS5sJiYoSS5sPUkubGVuZ3RoKSxRfWZ1bmN0aW9uIFltKHkpe3JldHVybntjb2xvcjpEZCh5KSxwb3M6bWEoeSl9fUhpLlNUWT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciBWND1bIm5v'@;
put 'bmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0'@;
put 'RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSxZMj1iZShWNCksV209WyJnZW5lcmFsIiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxC'@;
put 'ND1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIE45KHksUCxJKXtJfHwoST1wcigxNikpLEkud3JpdGVfc2hpZnQoMixQfHwwKSxJLndyaXRlX3NoaWZ0KDIseS5udW1GbXRJZHx8MCksSS53cml0ZV9zaGlmdCgyLHkuZm9udElkfHww'@;
put 'KSxJLndyaXRlX3NoaWZ0KDIseS5maWxsSWR8fDApLEkud3JpdGVfc2hpZnQoMix5LmJvcmRlcklkfHwwKSxJLndyaXRlX3NoaWZ0KDEseS5hbGlnbm1lbnQmJnkuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksSS53cml0ZV9zaGlmdCgxLHkuYWxpZ25tZW50JiZ5LmFsaWdubWVudC5pbmRl'@;
put 'bnR8fDApO3ZhciBRPTAscmU9MDtpZih5LmFsaWdubWVudCl7aWYoeS5hbGlnbm1lbnQuaG9yaXpvbnRhbCl7dmFyIGdlPVdtLmluZGV4T2YoeS5hbGlnbm1lbnQuaG9yaXpvbnRhbCk7Z2U8MCYmKGdlPTApLFF8PWdlfWlmKHkuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIgX2U9QjQuaW5kZXhP'@;
put 'Zih5LmFsaWdubWVudC52ZXJ0aWNhbCk7X2U8MCYmKF9lPTIpLFF8PV9lPDwzfXkuYWxpZ25tZW50LndyYXBUZXh0JiYoUXw9NjQpLHkuYWxpZ25tZW50LnNocmlua1RvRml0JiYocmV8PTEpfXJldHVybiBJLndyaXRlX3NoaWZ0KDEsUSksSS53cml0ZV9zaGlmdCgxLHJlKSxJLndyaXRlX3No'@;
put 'aWZ0KDEsMCksSS53cml0ZV9zaGlmdCgxLDApLEl9dmFyIFcyPVsibm9uZSIsInRoaW4iLCJtZWRpdW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRvdWJsZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIsImRhc2hEb3REb3QiLCJtZWRpdW1E'@;
put 'YXNoRG90RG90Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gajQoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3kubCs9MTt2YXIgST1EZCh5KTtyZXR1cm57c3R5bGU6VzJbUF0sY29sb3I6SX19ZnVuY3Rpb24gUDMoeSxQKXtyZXR1cm4gUHx8KFA9cHIoMTApKSx5JiZ5LnN0eWxlJiYiIiE9'@;
put 'eS5zdHlsZSYmIm5vbmUiIT15LnN0eWxlJiYtMSE9PVcyLmluZGV4T2YoeS5zdHlsZSk/KFAud3JpdGVfc2hpZnQoMSxXMi5pbmRleE9mKHkuc3R5bGUpKSxQLndyaXRlX3NoaWZ0KDEsMCkseS5jb2xvcj9SMih5LmNvbG9yLFApOihQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0'@;
put 'LDApKSk6KFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSksUH1mdW5jdGlvbiB0dSh5LFApe3JldHVybiBQfHwoUD1wcig1MikpLFAud3JpdGVfc2hpZnQoNCx5LnhmSWQpLFAud3JpdGVfc2hpZnQoMiwx'@;
put 'KSxQLndyaXRlX3NoaWZ0KDEsK3kuYnVpbHRpbklkKSxQLndyaXRlX3NoaWZ0KDEsMCksQWQoeS5uYW1lfHwiIixQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH1mdW5jdGlvbiB6NCh5LFApeyFQfHwhUC50aGVtZUVsZW1lbnRzfHwhUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZXx8'@;
put 'bnVsbCE9eS50aGVtZSYmKHkucmdiPUJkKFAudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbeS50aGVtZV0ucmdiLHkudGludHx8MCkpfWZ1bmN0aW9uIFBEKHksUCl7dmFyIEk9d2MoKTtyZXR1cm4gdWkoSSwiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rpb24gQmMoeSxQKXtpZihQKXt2YXIg'@;
put 'ST0wO1tbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJisrSX0pLDAhPUkmJih1aSh5LCJCcnRCZWdpbkZtdHMiLGt1KEkpKSxbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1'@;
put 'MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2Zvcih2YXIgcmU9UVswXTtyZTw9UVsxXTsrK3JlKW51bGwhPVBbcmVdJiZ1aSh5LCJCcnRGbXQiLE8zKHJlLFBbcmVdKSl9KSx1aSh5LCJCcnRFbmRGbXRzIikpfX0oSSx5LlNTRiksZnVuY3Rpb24gVTQoeSxQKXt2YXIgST1QLmxlbmd0aDsw'@;
put 'IT1JJiYodWkoeSwiQnJ0QmVnaW5Gb250cyIsa3UoSSkpLFAuZm9yRWFjaChmdW5jdGlvbihRKXt1aSh5LCJCcnRGb250IixmdW5jdGlvbiB2Qyh5LFApe1B8fChQPXByKDE1MykpLFAud3JpdGVfc2hpZnQoMiwyMCp5LnN6KSxmdW5jdGlvbiBZaCh5LFApe1B8fChQPXByKDIpKSxQLndyaXRl'@;
put 'X3NoaWZ0KDEsKHkuaXRhbGljPzI6MCl8KHkuc3RyaWtlPzg6MCl8KHkub3V0bGluZT8xNjowKXwoeS5zaGFkb3c/MzI6MCl8KHkuY29uZGVuc2U/NjQ6MCl8KHkuZXh0ZW5kPzEyODowKSksUC53cml0ZV9zaGlmdCgxLDApfSh5LFApLFAud3JpdGVfc2hpZnQoMix5LmJvbGQ/NzAwOjQwMCk7'@;
put 'dmFyIEk9MDsic3VwZXIiPT15LnZhbGlnbj9JPTE6InN1YiI9PXkudmFsaWduJiYoST0yKSxQLndyaXRlX3NoaWZ0KDIsSSksUC53cml0ZV9zaGlmdCgxLHkudW5kZXJsaW5lfHwwKSxQLndyaXRlX3NoaWZ0KDEseS5mYW1pbHl8fDApLFAud3JpdGVfc2hpZnQoMSx5LmNoYXJzZXR8fDApLFAu'@;
put 'd3JpdGVfc2hpZnQoMSwwKSxSMih5LmNvbG9yLFApO3ZhciBRPTA7cmV0dXJuIm1ham9yIj09eS5zY2hlbWUmJihRPTEpLCJtaW5vciI9PXkuc2NoZW1lJiYoUT0yKSxQLndyaXRlX3NoaWZ0KDEsUSkscmMoeS5uYW1lLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfShRKSl9KSx1'@;
put 'aSh5LCJCcnRFbmRGb250cyIpKX0oSSwoeS5TdHlsZXN8fHt9KS5Gb250c3x8W10pLGZ1bmN0aW9uIF9DKHksUCl7dmFyIEk9UC5sZW5ndGg7MCE9SSYmKHVpKHksIkJydEJlZ2luRmlsbHMiLGt1KEkpKSxQLmZvckVhY2goZnVuY3Rpb24oUSl7dWkoeSwiQnJ0RmlsbCIsZnVuY3Rpb24gQUQo'@;
put 'eSxQKXtQfHwoUD1wcig4NCkpO3ZhciBJPVkyW3kucGF0dGVyblR5cGVdO251bGw9PUkmJihJPTQwKSxQLndyaXRlX3NoaWZ0KDQsST0rSSk7dmFyIFE9MDtpZig0MCE9SSlmb3IoUjIoeS5mZ0NvbG9yfHx7aW5kZXg6NjR9LFApLFIyKHkuYmdDb2xvcnx8e2luZGV4OjY1fSxQKTtRPDEyOysr'@;
put 'USlQLndyaXRlX3NoaWZ0KDQsMCk7ZWxzZXtmb3IoO1E8NDsrK1EpUC53cml0ZV9zaGlmdCg0LDApO2Zvcig7UTwxMjsrK1EpUC53cml0ZV9zaGlmdCg0LDApfXJldHVybiBQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oUSkpfSksdWkoeSwiQnJ0RW5kRmlsbHMiKSl9KEksKHkuU3R5'@;
put 'bGVzfHx7fSkuRmlsbHN8fFtdKSxmdW5jdGlvbiBiQyh5LFApe3ZhciBJPVAubGVuZ3RoOzAhPUkmJih1aSh5LCJCcnRCZWdpbkJvcmRlcnMiLGt1KEkpKSxQLmZvckVhY2goZnVuY3Rpb24oUSl7dWkoeSwiQnJ0Qm9yZGVyIixmdW5jdGlvbiBERCh5LFApe3JldHVybiBQfHwoUD1wcig1MSkp'@;
put 'LFAud3JpdGVfc2hpZnQoMSwwKSxQMyh5LnRvcCxQKSxQMyh5LmJvdHRvbSxQKSxQMyh5LmxlZnQsUCksUDMoeS5yaWdodCxQKSxQMyhudWxsLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfShRKSl9KSx1aSh5LCJCcnRFbmRCb3JkZXJzIikpfShJLCh5LlN0eWxlc3x8e30pLkJv'@;
put 'cmRlcnN8fFtdKSxmdW5jdGlvbiBMRCh5LFApe3ZhciBJPTE7aWYoUCYmKEk9UC5sZW5ndGgpLHVpKHksIkJydEJlZ2luQ2VsbFN0eWxlWEZzIixrdShJKSksdWkoeSwiQnJ0WEYiLE45KHtudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjB9LDY1NTM1KSksUClmb3IodmFy'@;
put 'IFE9MTtRPFAubGVuZ3RoOysrUSl1aSh5LCJCcnRYRiIsTjkoe251bUZtdElkOlBbUV0ubnVtRm10SWR8fDAsZm9udElkOlBbUV0uZm9udElkfHwwLGZpbGxJZDpQW1FdLmZpbGxJZHx8MCxib3JkZXJJZDpQW1FdLmJvcmRlcklkfHwwfSw2NTUzNSkpO3VpKHksIkJydEVuZENlbGxTdHlsZVhG'@;
put 'cyIpfShJLFAuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiB5Qyh5LFApe3VpKHksIkJydEJlZ2luQ2VsbFhGcyIsa3UoUC5sZW5ndGgpKSxQLmZvckVhY2goZnVuY3Rpb24oSSl7dWkoeSwiQnJ0WEYiLE45KEksMCkpfSksdWkoeSwiQnJ0RW5kQ2VsbFhGcyIpfShJLFAuY2VsbFhmcyksZnVuY3Rp'@;
put 'b24gSUQoeSxQKXt2YXIgST0xO2lmKFAmJihJPVAubGVuZ3RoKSx1aSh5LCJCcnRCZWdpblN0eWxlcyIsa3UoSSkpLHVpKHksIkJydFN0eWxlIix0dSh7eGZJZDowLGJ1aWx0aW5JZDowLG5hbWU6Ik5vcm1hbCJ9KSksUClmb3IodmFyIFE9MTtRPFAubGVuZ3RoOysrUSl1aSh5LCJCcnRTdHls'@;
put 'ZSIsdHUoe3hmSWQ6USxidWlsdGluSWQ6MCxuYW1lOlBbUV0ubmFtZX0pKTt1aSh5LCJCcnRFbmRTdHlsZXMiKX0oSSxQLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24gd0MoeSl7dWkoeSwiQnJ0QmVnaW5EWEZzIixrdSgwKSksdWkoeSwiQnJ0RW5kRFhGcyIpfShJKSxmdW5jdGlvbiBSRCh5KXt1'@;
put 'aSh5LCJCcnRCZWdpblRhYmxlU3R5bGVzIixmdW5jdGlvbiBWOSh5LFAsSSl7dmFyIFE9cHIoMjA1Mik7cmV0dXJuIFEud3JpdGVfc2hpZnQoNCx5KSxBZChQLFEpLEFkKEksUSksUS5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlF9KDAsIlRhYmxlU3R5bGVNZWRpdW05IiwiUGl2b3RTdHls'@;
put 'ZU1lZGl1bTQiKSksdWkoeSwiQnJ0RW5kVGFibGVTdHlsZXMiKX0oSSksdWkoSSwiQnJ0RW5kU3R5bGVTaGVldCIpLEkuZW5kKCl9SGkuVEhFTUU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGhlbWUiO3ZhciBG'@;
put 'RD1bIjwvYTpsdDE+IiwiPC9hOmRrMT4iLCI8L2E6bHQyPiIsIjwvYTpkazI+IiwiPC9hOmFjY2VudDE+IiwiPC9hOmFjY2VudDI+IiwiPC9hOmFjY2VudDM+IiwiPC9hOmFjY2VudDQ+IiwiPC9hOmFjY2VudDU+IiwiPC9hOmFjY2VudDY+IiwiPC9hOmhsaW5rPiIsIjwvYTpmb2xIbGluaz4i'@;
put 'XTtmdW5jdGlvbiBqOSh5LFAsSSl7UC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZT1bXTt2YXIgUT17fTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9bG4ocmUpO3N3aXRjaChnZVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVt'@;
put 'ZT4iOmNhc2UiPC9hOnNyZ2JDbHI+IjpjYXNlIjwvYTpzeXNDbHI+IjpicmVhaztjYXNlIjxhOnNyZ2JDbHIiOlEucmdiPWdlLnZhbDticmVhaztjYXNlIjxhOnN5c0NsciI6US5yZ2I9Z2UubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6'@;
put 'Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxhOmx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6'@;
put 'Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2VudDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNh'@;
put 'c2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWdlWzBdLmNoYXJBdCgxKT8oUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtGRC5pbmRleE9mKGdlWzBdKV09USxRPXt9KTpRLm5hbWU9Z2VbMF0uc2xpY2UoMyxnZVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDpp'@;
put 'ZihJJiZJLldURil0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2xyU2NoZW1lIil9fSl9ZnVuY3Rpb24gejkoKXt9ZnVuY3Rpb24gSEQoKXt9dmFyIFo0PS88YTpjbHJTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLE5EPS88YTpmb250U2No'@;
put 'ZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmb250U2NoZW1lPi8sVkQ9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sU0M9LzxhOnRoZW1lRWxlbWVudHMoW14+XSopPltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBHbSh5LFApe2lmKCF5fHww'@;
put 'PT09eS5sZW5ndGgpcmV0dXJuIEdtKHJmKCkpO3ZhciBJLFE9e307aWYoIShJPXkubWF0Y2goU0MpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7cmV0dXJuIGZ1bmN0aW9uIENDKHksUCxJKXt2YXIgUTtQLnRoZW1lRWxlbWVudHM9e30sW1si'@;
put 'Y2xyU2NoZW1lIixaNCxqOV0sWyJmb250U2NoZW1lIixORCx6OV0sWyJmbXRTY2hlbWUiLFZELEhEXV0uZm9yRWFjaChmdW5jdGlvbihyZSl7aWYoIShRPXkubWF0Y2gocmVbMV0pKSl0aHJvdyBuZXcgRXJyb3IocmVbMF0rIiBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cyIpO3JlWzJdKFEs'@;
put 'UCxJKX0pfShJWzBdLFEsUCksUS5yYXc9eSxRfWZ1bmN0aW9uIHJmKHksUCl7aWYoUCYmUC50aGVtZVhMU1gpcmV0dXJuIFAudGhlbWVYTFNYO2lmKHkmJiJzdHJpbmciPT10eXBlb2YgeS5yYXcpcmV0dXJuIHkucmF3O3ZhciBJPVtCbl07cmV0dXJuIElbSS5sZW5ndGhdPSc8YTp0aGVtZSB4'@;
put 'bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0iT2ZmaWNlIFRoZW1lIj4nLElbSS5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIsSVtJLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicsSVtJLmxl'@;
put 'bmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPicsSVtJLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxJW0kubGVuZ3RoXT0nPGE6ZGsyPjxhOnNy'@;
put 'Z2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsSVtJLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+PC9hOmx0Mj4nLElbSS5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLElbSS5sZW5ndGhdPSc8YTph'@;
put 'Y2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLElbSS5sZW5ndGhdPSc8YTphY2NlbnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLElbSS5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNj'@;
put 'ZW50ND4nLElbSS5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4nLElbSS5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLElbSS5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xy'@;
put 'IHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsSVtJLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz48L2E6Zm9sSGxpbms+JyxJW0kubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLElbSS5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxJ'@;
put 'W0kubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsSVtJLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+JyxJW0kubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsSVtJLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlw'@;
put 'dD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNj'@;
put 'cmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBO'@;
put 'ZXcgUm9tYW4iLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0'@;
put 'aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i'@;
put 'S2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0'@;
put 'aSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEi'@;
put 'IHR5cGVmYWNlPSJNYW5nYWwiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5'@;
put 'cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsSVtJLmxlbmd0aF09Jzxh'@;
put 'OmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0'@;
put 'aSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9'@;
put 'Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxJW0kubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLElbSS5sZW5ndGhdPSI8YTptaW5vckZvbnQ+IixJW0kubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLElbSS5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxJ'@;
put 'W0kubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBl'@;
put 'ZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlh'@;
put 'ZDQiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFo'@;
put 'b21hIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJT'@;
put 'aHJ1dGkiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFj'@;
put 'ZT0iUmFhdmkiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2Ny'@;
put 'aXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGki'@;
put 'Lz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0'@;
put 'aGEiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0i'@;
put 'IHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLElbSS5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQg'@;
put 'c2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxJW0kubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicsSVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPics'@;
put 'SVtJLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsSVtJLmxlbmd0aF09IjwvYTptaW5vckZvbnQ+IixJW0kubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixJW0kubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxJW0kubGVu'@;
put 'Z3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsSVtJLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxJW0kubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLElbSS5sZW5ndGhdPSI8YTpnc0xzdD4iLElbSS5s'@;
put 'ZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLElbSS5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJw'@;
put 'aENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxJW0kubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFs'@;
put 'PSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLElbSS5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixJW0kubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicsSVtJLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLElbSS5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RX'@;
put 'aXRoU2hhcGU9IjEiPicsSVtJLmxlbmd0aF09IjxhOmdzTHN0PiIsSVtJLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpz'@;
put 'Y2hlbWVDbHI+PC9hOmdzPicsSVtJLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4n'@;
put 'LElbSS5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixJW0kubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPicsSVtJLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLElbSS5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIsSVtJLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixJ'@;
put 'W0kubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29s'@;
put 'aWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxJW0kubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERh'@;
put 'c2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLElbSS5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+'@;
put 'PC9hOmxuPicsSVtJLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsSVtJLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0PiIsSVtJLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsSVtJLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLElbSS5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0i'@;
put 'NDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxJW0kubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLElbSS5sZW5ndGhd'@;
put 'PSI8L2E6ZWZmZWN0U3R5bGU+IixJW0kubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixJW0kubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsSVtJLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48'@;
put 'YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLElbSS5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsSVtJLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLElbSS5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLElb'@;
put 'SS5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixJW0kubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3Jn'@;
put 'YkNscj48L2E6b3V0ZXJTaGR3PicsSVtJLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixJW0kubGVuZ3RoXT0nPGE6c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyBy'@;
put 'aWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRSaWc+PC9hOnNjZW5lM2Q+JyxJW0kubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxJW0kubGVuZ3RoXT0iPC9h'@;
put 'OmVmZmVjdFN0eWxlPiIsSVtJLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLElbSS5sZW5ndGhdPSI8YTpiZ0ZpbGxTdHlsZUxzdD4iLElbSS5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsSVtJLmxlbmd0aF09Jzxh'@;
put 'OmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxJW0kubGVuZ3RoXT0iPGE6Z3NMc3Q+IixJW0kubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48'@;
put 'L2E6Z3M+JyxJW0kubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLElbSS5sZW5ndGhd'@;
put 'PSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLElbSS5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixJW0kubGVuZ3RoXT0nPGE6cGF0aCBwYXRo'@;
put 'PSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwvYTpwYXRoPicsSVtJLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLElbSS5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsSVtJLmxlbmd0aF09Ijxh'@;
put 'OmdzTHN0PiIsSVtJLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsSVtJLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpz'@;
put 'Y2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsSVtJLmxlbmd0aF09IjwvYTpnc0xzdD4iLElbSS5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBs'@;
put 'PSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsSVtJLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLElbSS5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixJW0kubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLElbSS5sZW5ndGhdPSI8L2E6dGhlbWVF'@;
put 'bGVtZW50cz4iLElbSS5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLElbSS5sZW5ndGhdPSI8YTpzcERlZj4iLElbSS5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEi'@;
put 'Lz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVt'@;
put 'ZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLElbSS5sZW5ndGhdPSI8L2E6c3BEZWY+IixJW0kubGVuZ3RoXT0iPGE6bG5EZWY+IixJW0kubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpz'@;
put 'Y2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJl'@;
put 'ZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxJW0kubGVuZ3RoXT0iPC9hOmxuRGVmPiIsSVtJLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLElbSS5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixJW0kubGVu'@;
put 'Z3RoXT0iPC9hOnRoZW1lPiIsSS5qb2luKCIiKX1mdW5jdGlvbiBqRCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksST15LnJlYWRfc2hpZnQoMiktNCxRPVtQXTtzd2l0Y2goUCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpRWzFd'@;
put 'PWZ1bmN0aW9uIFU5KHkpe3ZhciBQPXt9O3N3aXRjaChQLnhjbHJUeXBlPXkucmVhZF9zaGlmdCgyKSxQLm5UaW50U2hhZGU9eS5yZWFkX3NoaWZ0KDIpLFAueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6eS5sKz00O2JyZWFrO2Nhc2UgMTpQLnhjbHJWYWx1ZT1mdW5jdGlvbiBxbSh5LFApe3Jl'@;
put 'dHVybiB5Yyh5LFApfSh5LDQpO2JyZWFrO2Nhc2UgMjpQLnhjbHJWYWx1ZT12bSh5KTticmVhaztjYXNlIDM6UC54Y2xyVmFsdWU9ZnVuY3Rpb24gTUMoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCg0KX0oeSl9cmV0dXJuIHkubCs9OCxQfSh5KTticmVhaztjYXNlIDY6UVsxXT1mdW5jdGlvbiBC'@;
put 'RCh5LFApe3JldHVybiB5Yyh5LFApfSh5LEkpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpRWzFdPXkucmVhZF9zaGlmdCgxPT09ST8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK1ArIiAiK0kpfXJldHVybiBRfWZ1bmN0aW9u'@;
put 'IFVEKHksUCl7UC5mb3JFYWNoKGZ1bmN0aW9uKEkpe3N3aXRjaChJWzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTM6eS5mb250JiZ5LmZvbnQuY29sb3ImJkFycmF5LmlzQXJy'@;
put 'YXkoSVsxXS54Y2xyVmFsdWUpJiYoeS5mb250LmNvbG9yLnJnYj16MShJWzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0aW9uIGRhKHkpe3JldHVybiB5LzkxNDQwMCpuZn1mdW5jdGlvbiB4Qyh5LFApe3ZhciBJPXt9O2lmKHkucG9zKUkueD1kYSh5LnBvcy54KSxJLnk9ZGEoeS5wb3MueSk7ZWxz'@;
put 'ZXtpZigheS5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO0kucj15LmZyb20ucnx8MCxJLmM9eS5mcm9tLmN8fDAseS5mcm9tLmNPZmYmJihJLng9ZGEoeS5mcm9tLmNPZmYpKSx5LmZyb20uck9mZiYmKEkueT1kYSh5LmZyb20uck9mZikpfWlmKHkuZXh0KUkudz1kYSh5LmV4dC54KSxJ'@;
put 'Lmg9ZGEoeS5leHQueSk7ZWxzZXtpZigheS50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7SS5DPXkudG8uYyxJLlI9eS50by5yLHkudG8uY09mZiYmKEkuWD1kYSh5LnRvLmNPZmYpKSx5LnRvLnJPZmYmJihJLlk9ZGEoeS50by5yT2ZmKSl9cmV0dXJuIEl9ZnVuY3Rpb24gc2YoeSxQKXt2YXIg'@;
put 'ST17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoeS5wb3MpSS54PWRhKHkucG9zLngpLEkueT1kYSh5LnBvcy55KTtlbHNle2lmKCF5LmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7SS54PVkxKFAseS5mcm9tLmMsIkMiKStkYSh5LmZyb20uY09mZiksSS55PVkxKFAseS5mcm9tLnIsIlIi'@;
put 'KStkYSh5LmZyb20uck9mZil9aWYoeS5leHQpSS53PWRhKHkuZXh0LngpLEkuaD1kYSh5LmV4dC55KTtlbHNle2lmKCF5LnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtJLnc9WTEoUCx5LnRvLmMsIkMiKStkYSh5LnRvLmNPZmYpLUkueCxJLmg9WTEoUCx5LnRvLnIsIlIiKStkYSh5LnRvLnJP'@;
put 'ZmYpLUkueX1yZXR1cm4gSX1mdW5jdGlvbiBLbSh5LFApe3ZhciBJPXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEsQzotMSxYOi0xLFk6LTF9O3N3aXRjaCh5LnR5cGUpe2Nhc2UidHdvQ2VsbEFuY2hvciI6SS5yPXkuZnJvbS5yLEkueT1kYSh5LmZyb20uck9mZiksSS5SPXkudG8ucixJLlk9'@;
put 'ZGEoeS50by5yT2ZmKSxJLmM9eS5mcm9tLmMsSS54PWRhKHkuZnJvbS5jT2ZmKSxJLkM9eS50by5jLEkuWD1kYSh5LnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2VsbEFuY2hvciI6SS5yPXkuZnJvbS5yLEkueT1kYSh5LmZyb20uck9mZik7dmFyIFE9RzIoUCxJLnIsSS55K2RhKHkuZXh0Lnkp'@;
put 'KTtJLlI9UVswXSxJLlk9UVsxXSxJLmM9eS5mcm9tLmMsSS54PWRhKHkuZnJvbS5jT2ZmKTt2YXIgcmU9Sm0oUCxJLmMsSS54K2RhKHkuZXh0LngpKTtJLkM9cmVbMF0sSS5YPXJlWzFdO2JyZWFrO2Nhc2UiYWJzb2x1dGVBbmNob3IiOnZhciBnZT1HMihQLDAsZGEoeS5wb3MueSkpO0kucj1n'@;
put 'ZVswXSxJLnk9Z2VbMV07dmFyIF9lPUcyKFAsSS5yLEkueStkYSh5LmV4dC55KSk7SS5SPV9lWzBdLEkuWT1fZVsxXTt2YXIgdmU9RzIoUCwwLGRhKHkucG9zLngpKTtJLmM9dmVbMF0sSS54PXZlWzFdO3ZhciBTZT1HMihQLEkuYyxJLngrZGEoeS5leHQueCkpO0kuQz1TZVswXSxJLlg9U2Vb'@;
put 'MV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIit5LnR5cGV9cmV0dXJuIEl9ZnVuY3Rpb24gWG0oeSxQKXt2YXIgST15LnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pO1BbIiFwb3MiXT17YzorSVswXSx4OitJWzFdLHI6K0lbMl0seTorSVszXSxDOitJWzRdLFg6K0lbNV0s'@;
put 'UjorSVs2XSxZOitJWzddfX1mdW5jdGlvbiBFQyh5LFAsSSl7dmFyIFE9LTE7aWYobnVsbCE9eS5SfHxudWxsIT15LkMpUT0wO2Vsc2V7aWYobnVsbD09eS54fHxudWxsPT15Lnl8fG51bGw9PXkud3x8bnVsbD09eS5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmluZ2lm'@;
put 'eSh5KTtRPTErMiohKHkuY3x8eS5yKX1pZihRIT1QKXtzd2l0Y2goUCl7Y2FzZSAwOmNhc2UgMTppZigzIT1RKWJyZWFrO3ZhciByZT1KbShJLHkuY3x8MCx5Lnh8fDApO3kuYz1yZVswXSx5Lng9cmVbMV07dmFyIGdlPUcyKEkseS5yfHwwLHkueXx8MCk7eS5yPWdlWzBdLHkueT1nZVsxXTti'@;
put 'cmVhaztjYXNlIDM6aWYoMz09USlicmVhazt2YXIgX2U9eS5jfHwwLHZlPXkueHx8MDtkZWxldGUgeS5jLGRlbGV0ZSB5LngseS54PShfZT9ZNChJLF9lKTowKSt2ZTt2YXIgU2U9eS5yfHwwLEhlPXkueXx8MDtkZWxldGUgeS5yLGRlbGV0ZSB5LnkseS55PShTZT9GMyhJLFNlKTowKStIZTti'@;
put 'cmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUH1zd2l0Y2goUCl7Y2FzZSAwOmlmKDA9PVEpYnJlYWs7dmFyIEJlPUptKEkseS5jfHwwLCh5Lnh8fDApK3kudyk7ZGVsZXRlIHkudyx5LkM9QmVbMF0seS5YPUJlWzFdO3ZhciBHZT1HMihJLHku'@;
put 'cnx8MCwoeS55fHwwKSt5LmgpO2RlbGV0ZSB5LmgseS5SPUdlWzBdLHkuWT1HZVsxXTticmVhaztjYXNlIDE6Y2FzZSAzOmlmKDAhPVEpYnJlYWs7dmFyIG50PXkuQ3x8MCxkdD15Llh8fDA7ZGVsZXRlIHkuQyxkZWxldGUgeS5YLHkudz1ZNChJLG50KStkdC0oeS5jP1k0KEkseS5jKTowKS0o'@;
put 'eS54fHwwKTt2YXIgQ3Q9eS5SfHwwLGN0PXkuWXx8MDtkZWxldGUgeS5SLGRlbGV0ZSB5LlkseS5oPUYzKEksQ3QpK2N0LSh5LnI/RjMoSSx5LnIpOjApLSh5Lnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitQfX19ZnVuY3Rpb24g'@;
put 'a0MoeSl7dmFyIFA9W3kuY3x8MCxNYXRoLnJvdW5kKHkueHx8MCkseS5yfHwwLE1hdGgucm91bmQoeS55fHwwKV07cmV0dXJuKFA9UC5jb25jYXQoeS5oJiZ5Lnc/W1BbMF0sTWF0aC5yb3VuZChQWzFdK3kudyksUFsyXSxNYXRoLnJvdW5kKFBbM10reS5oKV06W3kuQ3x8MCxNYXRoLnJvdW5k'@;
put 'KHkuWHx8MCkseS5SfHwwLE1hdGgucm91bmQoeS5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIEYzKHksUCl7aWYoIXkpcmV0dXJuIDA7Zm9yKHZhciBJPTA7LS1QPj0wOyl7dmFyIFE9KCh5WyIhcm93cyJdfHxbXSlbUF18fHt9KS5ocHg7bnVsbD09USYmKFE9KCh5WyIhc2hlZXRGb3Jt'@;
put 'YXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09USYmKFE9MjQpLEkrPVF9cmV0dXJuIEl9ZnVuY3Rpb24gWTQoeSxQKXtpZigheSlyZXR1cm4gMDtmb3IodmFyIEk9MDstLVA+PTA7KXt2YXIgUT0oKHlbIiFjb2xzIl18fFtdKVtQXXx8e30pLndweDtpZihudWxsPT1RJiYoUT0oKHlbIiFz'@;
put 'aGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1RKXt2YXIgcmU9e3djaDo4LjQzfTtwdShyZSkseVsiIWNvbHMiXSYmKHlbIiFjb2xzIl1bUF09cmUpLFE9cmUud3B4fUkrPVF9cmV0dXJuIEl9ZnVuY3Rpb24gWTEoeSxQLEkpe3JldHVybiJDIj09ST9ZNCh5LFApOkYzKHks'@;
put 'UCl9ZnVuY3Rpb24gRzIoeSxQLEkpe3ZhciBRPVtQLEldO2lmKCF5KXJldHVybiBRO2Zvcig7Oyl7dmFyIHJlPSh5WyIhcm93cyJdfHxbXSlbUVswXV18fHt9O2lmKHJlLmhpZGRlbikrK1FbMF07ZWxzZXt2YXIgZ2U9cmUuaHB4O2lmKG51bGw9PWdlJiYoZ2U9KCh5WyIhc2hlZXRGb3JtYXQi'@;
put 'XXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09Z2UmJihnZT1VMSgxNSkpLFFbMV08Z2UpYnJlYWs7UVswXSsrLFFbMV0tPWdlfX1yZXR1cm4gUX1mdW5jdGlvbiBKbSh5LFAsSSl7dmFyIFE9W1AsSV07aWYoIXkpcmV0dXJuIFE7Zm9yKDs7KXt2YXIgcmU9KHlbIiFjb2xzIl18fFtdKVtRWzBd'@;
put 'XXx8e307aWYocmUuaGlkZGVufHwwPT09cmUud3B4KSsrUVswXTtlbHNle3ZhciBnZT1yZS53cHg7aWYobnVsbD09Z2UmJihnZT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1nZSl7dmFyIF9lPXt3Y2g6OC40M307cHUoX2UpLHlbIiFjb2xzIl0mJih5WyIh'@;
put 'Y29scyJdW1FbMF1dPV9lKSxnZT1fZS53cHh9aWYoUVsxXTxnZSlicmVhaztRWzBdKyssUVsxXS09Z2V9fXJldHVybiBRfWZ1bmN0aW9uIE91KHkpe3JldHVybigiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiB5P3kudG9TdHJpbmcoMTYpOnkpKS5zbGljZSgtNil9ZnVuY3Rpb24gVWQoeSxQ'@;
put 'LEkpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUD8hIUk6ISFQOyJzdHJpbmciIT10eXBlb2YgUCYmKFA9ImNvbG9yIik7dmFyIHJlPSI8IitQKyIgIjtyZXR1cm4geS5hdXRvP3JlKydhdXRvPSIxIi8+Jzp5LmluZGV4JiZudWxsPT15LnJnYj9yZSsnaW5kZXhlZD0iJyt5LmluZGV4KyciLz4n'@;
put 'Om51bGwhPXkudGhlbWU/cmUrJ3RoZW1lPSInK3kudGhlbWUrJyInKyh5LnRpbnQ/JyB0aW50PSInK3kudGludCsnIic6IiIpKyIvPiI6bnVsbCE9eS5yZ2I/cmUrJ3JnYj0iJysoUT8iRkYiOiIiKStPdSh5LnJnYikrJyIvPic6cmUrIi8+In1mdW5jdGlvbiBIMyh5LFApe2lmKCF5fHxudWxs'@;
put 'PT15LnJnYilyZXR1cm4gUDtmb3IodmFyIEk9KCIwMDAwMDAiK3kucmdiLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpLFE9W0kuc2xpY2UoMCwyKSxJLnNsaWNlKDIsNCksSS5zbGljZSg0LDYpXS5tYXAoZnVuY3Rpb24oX2Upe3JldHVybiBwYXJzZUludChfZSwxNil9KSxyZT0wO3JlPENyLmxl'@;
put 'bmd0aDsrK3JlKXt2YXIgZ2U9Q3JbcmVdO2lmKGdlWzBdPT1RWzBdJiZnZVsxXT09UVsxXSYmZ2VbMl09PVFbMl0pcmV0dXJuIHJlfXJldHVybiBDci5sZW5ndGg8NjQ/KENyLnB1c2goW1FbMF0sUVsxXSxRWzJdXSksQ3IubGVuZ3RoLTEpOlB9ZnVuY3Rpb24gVzEoeSl7dmFyIFA9WyIiLCIi'@;
put 'LCIiXTtpZigheSlyZXR1cm5bXTt2YXIgST0iIixRPXkmJnkucz9mdW5jdGlvbiBaRCh5KXt2YXIgUD1bIiIsIiJdO2lmKCF5KXJldHVybiBQO2lmKHkuc3omJihQWzBdKz0iJiIreS5zeixQWzFdPSImMTIiK1BbMV0pLHkubmFtZSYmKFBbMF0rPScmIicreS5uYW1lKycsUmVndWxhciInLFBb'@;
put 'MV09JyYiLSxSZWd1bGFyIicrUFsxXSkseS5ib2xkJiYoUFswXSs9IiZCIixQWzFdPSImQiIrUFsxXSkseS51bmRlcmxpbmUpe3ZhciBJPTI9PXkudW5kZXJsaW5lPyImRSI6IiZVIjtQWzBdKz1JLFBbMV09SStQWzFdfXJldHVybiB5Lml0YWxpYyYmKFBbMF0rPSImSSIsUFsxXT0iJkkiK1Bb'@;
put 'MV0pLHkuY29sb3ImJm51bGwhPXkuY29sb3IucmdiJiYoUFswXSs9IiZLIitPdSh5LmNvbG9yLnJnYiksUFsxXSs9IiZLMDAwMDAwIikseS5zdHJpa2UmJihQWzBdKz0iJlMiLFBbMV09IiZTIitQWzFdKSwic3VwZXIiPT15LnZhbGlnbiYmKFBbMF0rPSImWCIsUFsxXT0iJlgiK1BbMV0pLCJz'@;
put 'dWIiPT15LnZhbGlnbiYmKFBbMF0rPSImWSIsUFsxXT0iJlkiK1BbMV0pLFB9KHkucyk6WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHk/W3kseSx5XTpudWxsIT15LmZpcnN0fHxudWxsIT15LmV2ZW58fG51bGwhPXkub2RkPyhudWxsIT15Lm9kZCYmKFBbMF09VzEoeS5vZGQpWzBd'@;
put 'KSx2b2lkIDA9PT15LmZpcnN0JiZQWzBdJiYoUFsxXT1QWzBdKSxudWxsIT15LmZpcnN0JiYoUFsxXT1XMSh5LmZpcnN0KVswXSksbnVsbCE9eS5ldmVuJiYoUFsyXT1XMSh5LmV2ZW4pWzBdKSxQKTp5LmxlZnR8fHkuY2VudGVyfHx5LnJpZ2h0Pyh5LmxlZnQmJihJKz0iJkwiK1cxKHkubGVm'@;
put 'dClbMF0pLHkuY2VudGVyJiYoSSs9IiZDIitXMSh5LmNlbnRlcilbMF0pLHkucmlnaHQmJihJKz0iJlIiK1cxKHkucmlnaHQpWzBdKSxbSSxJLEldKTpudWxsIT15LnY/W0k9UVswXSt5LnYucmVwbGFjZSgvJi9nLCImJiIpK1FbMV0sSSxJXTpudWxsIT15Lnc/W0k9UVswXSt5LncrUVsxXSxJ'@;
put 'LEldOkFycmF5LmlzQXJyYXkoeS5SKT8oeS5SLmZvckVhY2goZnVuY3Rpb24ocmUpe0krPVcxKHJlKVswXX0pLFtJLEksSV0pOltdfXZhciBRbT17MToiTGV0dGVyIiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQiLDExOiJBNSIsMTI6IkI0IiwxMzoi'@;
put 'QjUiLDE0OiJGb2xpbyIsMjA6IkVudmVsb3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sWjk9YmUoUW0pO0hpLkNPTk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVjdGlvbnMiO3ZhciB0Nj1TcigiZXh0'@;
put 'ZXJuYWxMaW5rIixudWxsLHt4bWxuczppcy5tYWluWzBdfSk7SGkuSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixIaS5EUkFXPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2Zm'@;
put 'aWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciO3ZhciBZRD17dDoidG9wIixjdHI6ImNlbnRlciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRpc3Q6InRvcCJ9LElDPXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50ZXIiLGp1c3RMb3c6ImNlbnRlciIs'@;
put 'bDoibGVmdCIscjoicmlnaHQiLHRoYWlEaXN0OiJjZW50ZXIifTtmdW5jdGlvbiBSQygpe3ZhciB5PVtCbl07cmV0dXJuIHkucHVzaCgnPHhkcjp3c0RyIHhtbG5zOnhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3NwcmVhZHNoZWV0RHJhd2lu'@;
put 'ZyIgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iLz4nKSx5LmpvaW4oIiIpfWZ1bmN0aW9uIE9DKHkpe3ZhciBJLFA9eVsiIWRhdGEiXTtyZXR1cm4iYmFzZTY0Ij09PXlbIiFkYXRhdHlwZSJdPygoST1QLm1hdGNoKC9eZGF0'@;
put 'YTouKiwvKSkmJihQPVAuc2xpY2UoSVswXS5sZW5ndGgpKSxzZS5kZWNvZGUoUCkpOlB9SGkuVEFCTEU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGFibGUiO3ZhciBOMz0vPCg/Olx3KzopP3NoYXBlKD86W15c'@;
put 'd11bXj5dKik/PihbXHNcU10qPyk8XC8oPzpcdys6KT9zaGFwZT4vZztmdW5jdGlvbiBxRCh5LFAsSSxRKXt2YXIgcmU9WzIxNjAwLDIxNjAwXSxnZT1bIm0wLDBsMCIscmVbMV0scmVbMF0scmVbMV0scmVbMF0sIjB4ZSJdLmpvaW4oIiwiKSxfZT1bU3IoInhtbCIsbnVsbCx7InhtbG5zOnYi'@;
put 'OldpLnYsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLngsInhtbG5zOm12IjpXaS5tdn0pLnJlcGxhY2UoL1wvPi8sIj4iKSxTcigibzpzaGFwZWxheW91dCIsU3IoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLHZlPTEwMjQqeSxTZT1JfHxb'@;
put 'XTtTZS5sZW5ndGg+MCYmX2UucHVzaChTcigidjpzaGFwZXR5cGUiLFtTcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksU3IoInY6cGF0aCIsbnVsbCx7c2hhZG93b2s6ImYiLGV4dHJ1c2lvbm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlw'@;
put 'ZSI6InJlY3QifSksU3IoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAxIixjb29yZHNpemU6cmUuam9pbigiLCIpLCJvOnNwdCI6MjAxLHBhdGg6Z2V9KSksU2UuZm9yRWFjaChmdW5jdGlvbihCZSl7Kyt2ZSxf'@;
put 'ZT1fZS5jb25jYXQoZnVuY3Rpb24gRkMoeSxQKXt2YXIgST17aWQ6Il94MDAwMF9zIitQLHR5cGU6IiNfeDAwMDBfdDIwMSIsc3R5bGU6Im1zby13cmFwLXN0eWxlOnRpZ2h0In07KCJSYWRpbyI9PXlbIiF0eXBlIl18fCJDaGVja2JveCI9PXlbIiF0eXBlIl18fCJMaXN0Ij09eVsiIXR5cGUi'@;
put 'XXx8IkRyb3AiPT15WyIhdHlwZSJdKSYmKEkuc3Ryb2tlZD0iZiIpLCJMYWJlbCI9PXlbIiF0eXBlIl0mJihJLmZpbGxlZD0iZiIpO3ZhciBRPSIiO3kudCYmUENbeVsiIXR5cGUiXV0mJihRPVBDW3lbIiF0eXBlIl1dLnJlcGxhY2UoLyMjIyMvLEhyKHkudCkpKTt2YXIgcmU9W107cmV0dXJu'@;
put 'IHkubWFjcm8mJnJlLnB1c2goZnMoIng6Rm1sYU1hY3JvIix5Lm1hY3JvKSkseS5saW5rJiZyZS5wdXNoKGZzKCJ4OkZtbGFMaW5rIix5LmxpbmspKSx5LnZhbCYmcmUucHVzaChmcygiUmFkaW8iPT15WyIhdHlwZSJdfHwiQ2hlY2tib3giPT15WyIhdHlwZSJdPyJ4OkNoZWNrZWQiOiJ4OlZh'@;
put 'bCIsU3RyaW5nKHkudmFsKSkpLHkucmVmJiZyZS5wdXNoKGZzKCJ4OkZtbGFSYW5nZSIseS5yZWYpKSx5LnNlbCYmIkxpc3QiPT15WyIhdHlwZSJdJiZyZS5wdXNoKGZzKCJ4OlNlbFR5cGUiLHkuc2VsKSkseS5taW4mJnJlLnB1c2goZnMoIng6TWluIixTdHJpbmcoeS5taW4pKSkseS5tYXgm'@;
put 'JnJlLnB1c2goZnMoIng6TWF4IixTdHJpbmcoeS5tYXgpKSkseS5zdGVwJiZyZS5wdXNoKGZzKCJ4OkluYyIsU3RyaW5nKHkuc3RlcCkpKSx5LnBhZ2UmJnJlLnB1c2goZnMoIng6UGFnZSIsU3RyaW5nKHkucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrUGEoSSkrIj4iXSkuY29uY2F0'@;
put 'KEc5W3lbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFtRXSkuY29uY2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK3lbIiF0eXBlIl0rJyI+JyxmcygieDpBbmNob3IiLGtDKHlbIiFwb3MiXSkpLGZzKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChyZSkuY29uY2F0KFJa'@;
put 'W3lbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFsiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdKX0oQmUsdmUpKX0pO3ZhciBIZT1QfHxbXTtyZXR1cm4gSGUubGVuZ3RoPjAmJl9lLnB1c2goU3IoInY6c2hhcGV0eXBlIixbU3IoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVy'@;
put 'In0pLFNyKCJ2OnBhdGgiLG51bGwse2dyYWRpZW50c2hhcGVvazoidCIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAyIixjb29yZHNpemU6cmUuam9pbigiLCIpLCJvOnNwdCI6MjAyLHBhdGg6Z2V9KSksSGUuZm9yRWFjaChmdW5jdGlvbihCZSl7'@;
put 'Kyt2ZSxfZT1fZS5jb25jYXQoZnVuY3Rpb24gSzQoeSxQLEkpe3ZhciBRPXNzKHlbMF0pLHJlPXlbMV0uZmlsbHx8e307eVsxXS5zJiYocmU9e3R5cGU6eVsxXS5zLnBhdHRlcm5UeXBlfHwic29saWQifSx5WzFdLnMuZmdDb2xvciYmKHJlLmNvbG9yMj1yZS5jb2xvcjE9IiMiK091KHlbMV0u'@;
put 'cy5mZ0NvbG9yLnJnYikpLHlbMV0ucy5iZ0NvbG9yJiYocmUuY29sb3IyPSIjIitPdSh5WzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFyIGdlPXtjb2xvcjI6cmUuY29sb3IyfHwiI0JFRkY4MiIsdHlwZTpyZS50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1nZS50eXBlJiYoZ2UuYW5nbGU9'@;
put 'Ii0xODAiKTt2YXIgX2U9ImdyYWRpZW50Ij09Z2UudHlwZT9TcigibzpmaWxsIixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0pOm51bGwsdmU9U3IoInY6ZmlsbCIsX2UsZ2UpLFNlPXt9O3lbMV0uc2hhZG93JiYoeVsxXS5zaGFkb3cuY29sb3ImJihTZS5j'@;
put 'b2xvcj15WzFdLnNoYWRvdy5jb2xvcikseVsxXS5zaGFkb3cub24mJihTZS5vbj15WzFdLnNoYWRvdy5vbikpLFNlLm9ic2N1cmVkPSJ0Ijt2YXIgSGU9ITAsQmU9ITAsR2U9eVsxXVsiIXBvcyJdP29uKHlbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gR2UmJihCZT1udWxsPT1HZS5SJiZudWxs'@;
put 'PT1HZS5DJiZudWxsPT1HZS5YJiZudWxsPT1HZS5ZLEhlPSFHZS5yJiYhR2UuYyxFQyhHZSwwLEkpKSxbIjx2OnNoYXBlIitQYSh7aWQ6Il94MDAwMF9zIitQLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6'@;
put 'NXB0O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTAiKyh5WzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOnJlLmNvbG9yMXx8IiNFQ0ZBRDQiLHN0cm9rZWNvbG9yOih5WzFdLnN0cm9rZXx8e30pLmNvbG9yfHwiI2VkZWFhMSJ9KSsiPiIsdmUs'@;
put 'U3IoInY6c2hhZG93IixudWxsLFNlKSxTcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L2Rpdj48L3Y6dGV4dGJveD4nLCc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Ik5vdGUiPicsSGU/'@;
put 'Ijx4Ok1vdmVXaXRoQ2VsbHMvPiI6IiIsQmU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsZnMoIng6QW5jaG9yIixHZT9rQyhHZSk6eVsxXS5yYXdhbmNob3J8fFtRLmMrMSwwLFEucisxLDAsUS5jKzMsMjAsUS5yKzUsMjBdLmpvaW4oIiwiKSksZnMoIng6QXV0b0ZpbGwiLCJGYWxzZSIpLGZz'@;
put 'KCJ4OlJvdyIsU3RyaW5nKFEucikpLGZzKCJ4OkNvbHVtbiIsU3RyaW5nKFEuYykpLHlbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4iLCI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il19KEJlLHZlLFEpKX0pLF9lLnB1c2goIjwveG1sPiIpLF9lLmpvaW4oIiIpfXZhciBSWj17QnV0'@;
put 'dG9uOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6VGV4dEhBbGlnbj5DZW50ZXI8L3g6VGV4dEhBbGlnbj4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiJdLEdCb3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpB'@;
put 'dXRvRmlsbD4iLCI8eDpOb1RocmVlRC8+Il0sTGFiZWw6WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iXSxSYWRpbzpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4'@;
put 'OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLENoZWNrYm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFs'@;
put 'c2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sRHJvcDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6U2VsVHlwZT5TaW5n'@;
put 'bGU8L3g6U2VsVHlwZT4iLCI8eDpEcm9wU3R5bGU+Q29tYm88L3g6RHJvcFN0eWxlPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OkRyb3BMaW5lcz40PC94OkRyb3BMaW5lcz4iXSxMaXN0OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+'@;
put 'IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpWYWw+MDwveDpWYWw+IiwiPHg6TWluPjA8L3g6TWluPiIsIjx4Ok1heD41PC94Ok1heD4iLCI8eDpJbmM+MTwveDpJbmM+IiwiPHg6UGFnZT40PC94OlBhZ2U+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU2Nyb2xs'@;
put 'OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6SG9yaXovPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNwaW46WyI8eDpEeD4xNTwveDpEeD4iXX0sUEM9e0J1dHRvbjoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0n'@;
put 'dGV4dC1hbGlnbjpjZW50ZXInPjxmb250IGZhY2U9J0NhbGlicmknIHNpemU9JzI0MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixHQm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48'@;
put 'ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixSYWRpbzoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpz'@;
put 'aW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPSdhdXRvJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsTGFiZWw6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24t'@;
put 'YWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLENoZWNrYm94OiI8djp0ZXh0Ym94IHN0'@;
put 'eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixzaGVl'@;
put 'dGpzOiJkYWZ1cSJ9LEc5PXtCdXR0b246Wyc8djpmaWxsIGNvbG9yMj0iI2YwZjBmMCBbNjddIiBvOmRldGVjdG1vdXNlY2xpY2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLEdCb3g6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPidd'@;
put 'LERyb3A6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExpc3Q6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNwaW46Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNj'@;
put 'cm9sbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGFiZWw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLFJhZGlvOlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sg'@;
put 'djpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sQ2hlY2tib3g6Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxzaGVldGpzOltdfTtmdW5jdGlvbiBuNih5LFAsSSxRKXt2YXIg'@;
put 'cmU9eyIhaWQiOnt9fSxnZT1bU3IoInhtbCIsbnVsbCx7InhtbG5zOnYiOldpLnYsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLnh9KS5yZXBsYWNlKC9cLz4vLCI+IiksU3IoIm86c2hhcGVsYXlvdXQiLFNyKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0IixkYXRhOjF9KSx7InY6'@;
put 'ZXh0IjoiZWRpdCJ9KSwnPHY6c2hhcGV0eXBlIGlkPSJfeDAwMDBfdDc1IiBjb29yZHNpemU9IjIxNjAwLDIxNjAwIiBvOnNwdD0iNzUiIG86cHJlZmVycmVsYXRpdmU9InQiIHBhdGg9Im1ANEA1bEA0QDExQDlAMTFAOUA1eGUiIGZpbGxlZD0iZiIgc3Ryb2tlZD0iZiI+JywnPHY6c3Ryb2tl'@;
put 'IGpvaW5zdHlsZT0ibWl0ZXIiLz4nLCI8djpmb3JtdWxhcz4iLCc8djpmIGVxbj0iaWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDEgMCIvPicsJzx2OmYgZXFuPSJzdW0gMCAwIEAxIi8+JywnPHY6ZiBlcW49InByb2QgQDIgMSAyIi8+JywnPHY6'@;
put 'ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMCAwIDEiLz4nLCc8djpmIGVxbj0icHJvZCBANiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbFdpZHRo'@;
put 'Ii8+JywnPHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAxMCAyMTYwMCAwIi8+JywiPC92OmZvcm11bGFzPiIsJzx2OnBhdGggbzpleHRydXNpb25vaz0iZiIgZ3JhZGllbnRzaGFwZW9r'@;
put 'PSJ0IiBvOmNvbm5lY3R0eXBlPSJyZWN0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgYXNwZWN0cmF0aW89InQiLz4nLCI8L3Y6c2hhcGV0eXBlPiJdLF9lPTE7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtRW3ZlXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKFNlKXtRW3ZlXVtTZV0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihIZSl7aWYoQXJyYXkuaXNBcnJheShRW3ZlXVtTZV1bSGVdKSlmb3IodmFyIEJlPTA7QmU8UVt2ZV1bU2VdW0hlXS5sZW5ndGg7KytCZSlpZihRW3ZlXVtTZV1b'@;
put 'SGVdW0JlXSl7dmFyIEdlPVFbdmVdW1NlXVtIZV1bQmVdO2lmKCJyZW1vdGUiPT1HZVsiIWRhdGF0eXBlIl0pdGhyb3ciQ2Fubm90IHVzZSBsaW5rZWQgaW1hZ2UgaW4gaGVhZGVyIG9yIGZvb3RlciI7Zm9yKDttbih5LCJ4bC9tZWRpYS9pbWFnZSIrX2UrIi5qcGciKTspKytfZTt5LmZpbGUo'@;
put 'InhsL21lZGlhL2ltYWdlIitfZSsiLmpwZyIsT0MoR2UpLHtiaW5hcnk6ITB9KSx6byhyZSwtMSwiLi4vbWVkaWEvaW1hZ2UiK19lKyIuanBnIixIaS5JTUcpO3ZhciBudD0iX3gwMDAwX3MiKygxMDI1K0dlLl9jbnQpLGR0PSJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDowO21hcmdp'@;
put 'bi10b3A6MDt6LWluZGV4OiIrKEdlLl9jbnQrMSkrIjsiO2R0Kz0id2lkdGg6IitHZVsiIXBvcyJdLncrInB4OyIsZHQrPSJoZWlnaHQ6IitHZVsiIXBvcyJdLmgrInB4OyI7dmFyIEN0PUhlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3ZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyJvZGQi'@;
put 'IT09U2UmJihDdCs9U2UudG9VcHBlckNhc2UoKSksUVt2ZV1bU2VdW0hlXS5sZW5ndGg+MSYmKEN0Kz1CZSksZ2UucHVzaChTcigidjpzaGFwZSIsWyc8djppbWFnZWRhdGEgbzpyZWxpZD0icklkJysoR2UuX2NudCsxKSsnIiBvOnRpdGxlPSJzaGVldGpzIi8+JywnPG86bG9jayB2OmV4dD0i'@;
put 'ZWRpdCIgcm90YXRpb249InQiLz4nXS5qb2luKCIiKSx7aWQ6Q3QsIm86c3BpZCI6bnQsdHlwZToiI194MDAwMF90NzUiLHN0eWxlOmR0fSkpfX0pfSl9KSxnZS5wdXNoKCI8L3htbD4iKSx5LmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK0krIkhGLnZtbCIsZ2Uuam9pbigiIikpLHku'@;
put 'ZmlsZSgieGwvZHJhd2luZ3MvX3JlbHMvdm1sRHJhd2luZyIrSSsiSEYudm1sLnJlbHMiLFhhKHJlKSl9SGkuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIE5DPVNyKCJjb21tZW50'@;
put 'cyIsbnVsbCx7eG1sbnM6aXMubWFpblswXX0pO2Z1bmN0aW9uIFZDKHkpe3ZhciBQPVtCbixOQ10sST1bXTtyZXR1cm4gUC5wdXNoKCI8YXV0aG9ycz4iKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9SHIocmUuYSk7SS5pbmRleE9mKGdl'@;
put 'KT4tMXx8KEkucHVzaChnZSksUC5wdXNoKCI8YXV0aG9yPiIrZ2UrIjwvYXV0aG9yPiIpKX0pfSksUC5wdXNoKCI8L2F1dGhvcnM+IiksUC5wdXNoKCI8Y29tbWVudExpc3Q+IikseS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7UC5wdXNoKCc8Y29tbWVu'@;
put 'dCByZWY9IicrUVswXSsnIiBhdXRob3JJZD0iJytJLmluZGV4T2YoSHIocmUuYSkpKyciPjx0ZXh0PicpLFAucHVzaChyZS5SP0poKHJlLlIpOmZzKCJ0IixudWxsPT1yZS50PyIiOkhyKHJlLnQpKSksUC5wdXNoKCI8L3RleHQ+PC9jb21tZW50PiIpfSl9KSxQLnB1c2goIjwvY29tbWVudExp'@;
put 'c3Q+IiksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L2NvbW1lbnRzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfXZhciBYRD1DYztmdW5jdGlvbiBlTCh5KXt2YXIgUD13YygpLEk9W107cmV0dXJuIHVpKFAsIkJydEJlZ2luQ29tbWVudHMiKSx1aShQLCJC'@;
put 'cnRCZWdpbkNvbW1lbnRBdXRob3JzIikseS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7SS5pbmRleE9mKHJlLmEpPi0xfHwoSS5wdXNoKHJlLmEuc2xpY2UoMCw1NCkpLHVpKFAsIkJydENvbW1lbnRBdXRob3IiLGZ1bmN0aW9uIEpEKHkpe3JldHVybiBy'@;
put 'Yyh5LnNsaWNlKDAsNTQpKX0ocmUuYSkpKX0pfSksdWkoUCwiQnJ0RW5kQ29tbWVudEF1dGhvcnMiKSx1aShQLCJCcnRCZWdpbkNvbW1lbnRMaXN0IikseS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7cmUuaWF1dGhvcj1JLmluZGV4T2YocmUuYSk7dmFy'@;
put 'IGdlPXtzOnNzKFFbMF0pLGU6c3MoUVswXSl9O3VpKFAsIkJydEJlZ2luQ29tbWVudCIsZnVuY3Rpb24gS0QoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9cHIoMzYpKSxQLndyaXRlX3NoaWZ0KDQseVsxXS5pYXV0aG9yKSxEMSh5WzBdLFApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3No'@;
put 'aWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQfShbZ2UscmVdKSkscmUudCYmcmUudC5sZW5ndGg+MCYmdWkoUCwiQnJ0Q29tbWVudFRleHQiLGZ1bmN0aW9uIGFyKHksUCl7dmFyIEk9ITE7cmV0dXJuIG51bGw9PVAmJihJPSEwLFA9cHIoMjMrNCp5LnQu'@;
put 'bGVuZ3RoKSksUC53cml0ZV9zaGlmdCgxLDEpLHJjKHkudCxQKSxQLndyaXRlX3NoaWZ0KDQsMSksZnVuY3Rpb24ga2QoeSxQKXtQfHwoUD1wcig0KSksUC53cml0ZV9zaGlmdCgyLHkuaWNofHwwKSxQLndyaXRlX3NoaWZ0KDIseS5pZm50fHwwKX0oe2ljaDowLGlmbnQ6MH0sUCksST9QLnNs'@;
put 'aWNlKDAsUC5sKTpQfShyZSkpLHVpKFAsIkJydEVuZENvbW1lbnQiKSxkZWxldGUgcmUuaWF1dGhvcn0pfSksdWkoUCwiQnJ0RW5kQ29tbWVudExpc3QiKSx1aShQLCJCcnRFbmRDb21tZW50cyIpLFAuZW5kKCl9dmFyICQyPSJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3Qi'@;
put 'LE9aPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTtIaS5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIsSGkuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20v'@;
put 'b2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBhZj1mdW5jdGlvbigpe3ZhciB5PS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2csUD17cjowLGM6MH07ZnVuY3Rpb24g'@;
put 'SShRLHJlLGdlLF9lKXt2YXIgdmU9ITEsU2U9ITE7MD09Z2UubGVuZ3RoP1NlPSEwOiJbIj09Z2UuY2hhckF0KDApJiYoU2U9ITAsZ2U9Z2Uuc2xpY2UoMSwtMSkpLDA9PV9lLmxlbmd0aD92ZT0hMDoiWyI9PV9lLmNoYXJBdCgwKSYmKHZlPSEwLF9lPV9lLnNsaWNlKDEsLTEpKTt2YXIgSGU9'@;
put 'Z2UubGVuZ3RoPjA/MHxwYXJzZUludChnZSwxMCk6MCxCZT1fZS5sZW5ndGg+MD8wfHBhcnNlSW50KF9lLDEwKTowO3JldHVybiB2ZT9CZSs9UC5jOi0tQmUsU2U/SGUrPVAucjotLUhlLHJlKyh2ZT8iIjoiJCIpK05zKEJlKSsoU2U/IiI6IiQiKStIcyhIZSl9cmV0dXJuIGZ1bmN0aW9uKHJl'@;
put 'LGdlKXtyZXR1cm4gUD1nZSxyZS5yZXBsYWNlKHksSSl9fSgpLHE5PS8oXnxbXi5fQS1aMC05XSkoWyRdPykoW0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAt'@;
put 'Nl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pKD8hW18uXChBLVphLXowLTldKS9nLEs5PWZ1bmN0aW9uKFAsSSl7cmV0dXJuIFAucmVwbGFjZShxOSxmdW5jdGlvbihRLHJlLGdlLF9lLHZlLFNlKXt2YXIgSGU9amgoX2UpLShnZT8wOkkuYyksQmU9QjAoU2UpLSh2ZT8wOkkucik7cmV0'@;
put 'dXJuIHJlKyJSIisoMD09QmU/IiI6dmU/QmUrMToiWyIrQmUrIl0iKSsiQyIrKDA9PUhlPyIiOmdlP0hlKzE6IlsiK0hlKyJdIil9KX07ZnVuY3Rpb24gakMoeSxQKXtyZXR1cm4geS5yZXBsYWNlKHE5LGZ1bmN0aW9uKEksUSxyZSxnZSxfZSx2ZSl7cmV0dXJuIFErKCIkIj09cmU/cmUrZ2U6'@;
put 'TnMoamgoZ2UpK1AuYykpKygiJCI9PV9lP19lK3ZlOkhzKEIwKHZlKStQLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oSSxRLHJlKXtyZXR1cm4gSHMoQjAoUSkrUC5yKSsiOiIrSHMoQjAocmUpK1Aucil9KX1mdW5jdGlvbiBuTCh5LFAsSSl7dmFyIHJlPVdzKFApLnMs'@;
put 'Z2U9c3MoSSk7cmV0dXJuIGpDKHkse3I6Z2Uuci1yZS5yLGM6Z2UuYy1yZS5jfSl9ZnVuY3Rpb24gRzEoeSl7cmV0dXJuIHkucmVwbGFjZSgvX3hsZm5cLi9nLCIiKX1mdW5jdGlvbiBCYSh5KXt5LmwrPTF9ZnVuY3Rpb24gWmQoeSxQKXt2YXIgST15LnJlYWRfc2hpZnQoMT09UD8xOjIpO3Jl'@;
put 'dHVyblsxNjM4MyZJLEk+PjE0JjEsST4+MTUmMV19ZnVuY3Rpb24gSjkoeSxQLEkpe3ZhciBRPTI7aWYoSSl7aWYoSS5iaWZmPj0yJiZJLmJpZmY8PTUpcmV0dXJuIFE5KHkpOzEyPT1JLmJpZmYmJihRPTQpfXZhciByZT15LnJlYWRfc2hpZnQoUSksZ2U9eS5yZWFkX3NoaWZ0KFEpLF9lPVpk'@;
put 'KHksMiksdmU9WmQoeSwyKTtyZXR1cm57czp7cjpyZSxjOl9lWzBdLGNSZWw6X2VbMV0sclJlbDpfZVsyXX0sZTp7cjpnZSxjOnZlWzBdLGNSZWw6dmVbMV0sclJlbDp2ZVsyXX19fWZ1bmN0aW9uIFE5KHkpe3ZhciBQPVpkKHksMiksST1aZCh5LDIpLFE9eS5yZWFkX3NoaWZ0KDEpLHJlPXku'@;
put 'cmVhZF9zaGlmdCgxKTtyZXR1cm57czp7cjpQWzBdLGM6USxjUmVsOlBbMV0sclJlbDpQWzJdfSxlOntyOklbMF0sYzpyZSxjUmVsOklbMV0sclJlbDpJWzJdfX19ZnVuY3Rpb24gckwoeSxQLEkpe2lmKEkmJkkuYmlmZj49MiYmSS5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBCWih5KXt2YXIg'@;
put 'UD1aZCh5LDIpLEk9eS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOlBbMF0sYzpJLGNSZWw6UFsxXSxyUmVsOlBbMl19fSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoSSYmMTI9PUkuYmlmZj80OjIpLHJlPVpkKHksMik7cmV0dXJue3I6USxjOnJlWzBdLGNSZWw6cmVbMV0sclJlbDpyZVsyXX19ZnVu'@;
put 'Y3Rpb24gZXYoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEk9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntyOlAsYzoyNTUmSSxmUXVvdGVkOiEhKDE2Mzg0JkkpLGNSZWw6ST4+MTUsclJlbDpJPj4xNX19ZnVuY3Rpb24gcTIoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQo'@;
put 'MSldfWZ1bmN0aW9uICRDKHksUCl7dmFyIEk9W3kucmVhZF9zaGlmdCgxKV07aWYoMTI9PVApc3dpdGNoKElbMF0pe2Nhc2UgMjpJWzBdPTQ7YnJlYWs7Y2FzZSA0OklbMF09MTY7YnJlYWs7Y2FzZSAwOklbMF09MTticmVhaztjYXNlIDE6SVswXT0yfXN3aXRjaChJWzBdKXtjYXNlIDQ6SVsx'@;
put 'XT1Tbyh5LDEpPyJUUlVFIjoiRkFMU0UiLDEyIT1QJiYoeS5sKz03KTticmVhaztjYXNlIDM3OmNhc2UgMTY6SVsxXT1Rb1t5W3kubF1dLHkubCs9MTI9PVA/NDo4O2JyZWFrO2Nhc2UgMDp5LmwrPTg7YnJlYWs7Y2FzZSAxOklbMV09bWEoeSk7YnJlYWs7Y2FzZSAyOklbMV09VjIoeSwwLHti'@;
put 'aWZmOlA+MCYmUDw4PzI6UH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrSVswXSl9cmV0dXJuIEl9ZnVuY3Rpb24gaXYoeSxQLEkpe2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoMTI9PUkuYmlmZj80OjIpLHJlPVtdLGdlPTA7Z2UhPVE7KytnZSlyZS5wdXNo'@;
put 'KCgxMj09SS5iaWZmP0pjOktoKSh5LDgpKTtyZXR1cm4gcmV9ZnVuY3Rpb24gZ0woeSxQLEkpe3ZhciBRPTAscmU9MDsxMj09SS5iaWZmPyhRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCkpOihyZT0xK3kucmVhZF9zaGlmdCgxKSxRPTEreS5yZWFkX3NoaWZ0KDIpKSxJLmJp'@;
put 'ZmY+PTImJkkuYmlmZjw4JiYoLS1RLDA9PS0tcmUmJihyZT0yNTYpKTtmb3IodmFyIGdlPTAsX2U9W107Z2UhPVEmJihfZVtnZV09W10pOysrZ2UpZm9yKHZhciB2ZT0wO3ZlIT1yZTsrK3ZlKV9lW2dlXVt2ZV09JEMoeSxJLmJpZmYpO3JldHVybiBfZX1mdW5jdGlvbiBlNSh5LFAsSSl7cmV0'@;
put 'dXJuIHkubCs9MixbZXYoeSldfWZ1bmN0aW9uIHQ1KHkpe3JldHVybiB5LmwrPTYsW119dmFyIG82PWU1LHZMPXQ1LGx2PXQ1LHM2PWU1O2Z1bmN0aW9uIHEwKHkpe3JldHVybiB5LmwrPTIsW2hsKHkpLDEmeS5yZWFkX3NoaWZ0KDIpXX12YXIgY3Y9ZTUsdXY9cTAsX0w9dDUsYkw9ZTUsUUM9'@;
put 'ZTUsQjM9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIsIj8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxHcz17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIFpa'@;
put 'KHksUCxJKXtyZXR1cm4geS5sKyssSSYmMTI9PUkuYmlmZj9beS5yZWFkX3NoaWZ0KDQsImkiKSwwXTpbeS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdChJJiYyPT1JLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6eWN9LDM6e246IlB0Z0FkZCIsZjpCYX0sNDp7bjoiUHRnU3ViIixm'@;
put 'OkJhfSw1OntuOiJQdGdNdWwiLGY6QmF9LDY6e246IlB0Z0RpdiIsZjpCYX0sNzp7bjoiUHRnUG93ZXIiLGY6QmF9LDg6e246IlB0Z0NvbmNhdCIsZjpCYX0sOTp7bjoiUHRnTHQiLGY6QmF9LDEwOntuOiJQdGdMZSIsZjpCYX0sMTE6e246IlB0Z0VxIixmOkJhfSwxMjp7bjoiUHRnR2UiLGY6'@;
put 'QmF9LDEzOntuOiJQdGdHdCIsZjpCYX0sMTQ6e246IlB0Z05lIixmOkJhfSwxNTp7bjoiUHRnSXNlY3QiLGY6QmF9LDE2OntuOiJQdGdVbmlvbiIsZjpCYX0sMTc6e246IlB0Z1JhbmdlIixmOkJhfSwxODp7bjoiUHRnVXBsdXMiLGY6QmF9LDE5OntuOiJQdGdVbWludXMiLGY6QmF9LDIwOntu'@;
put 'OiJQdGdQZXJjZW50IixmOkJhfSwyMTp7bjoiUHRnUGFyZW4iLGY6QmF9LDIyOntuOiJQdGdNaXNzQXJnIixmOkJhfSwyMzp7bjoiUHRnU3RyIixmOmZ1bmN0aW9uIEdDKHksUCxJKXtyZXR1cm4geS5sKyssRmQoeSwwLEkpfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIENMKHksUCxJ'@;
put 'KXtyZXR1cm4geS5sKz01LHkubCs9Mix5LmwrPTI9PUkuYmlmZj8xOjQsWyJQVEdTSEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIGR2KHksUCxJKXtyZXR1cm4geS5sKz0yPT1JLmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rp'@;
put 'b24gSjQoeSl7cmV0dXJuIHkubCsrLFFvW3kucmVhZF9zaGlmdCgxKV19fSwyOTp7bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiBRNCh5KXtyZXR1cm4geS5sKyssMCE9PXkucmVhZF9zaGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gU2koeSl7cmV0dXJuIHkubCsrLHkucmVhZF9z'@;
put 'aGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVuY3Rpb24gV0MoeSl7cmV0dXJuIHkubCsrLG1hKHkpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIGFMKHksUCxJKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41O3JldHVybiB5LmwrPTI9PUkuYmlmZj82OjEyPT1JLmJpZmY/MTQ6Nyxb'@;
put 'UV19fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBmTCh5LFAsSSl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoSSYmSS5iaWZmPD0zPzE6Mik7cmV0dXJuW2J2W3JlXSxfdltyZV0sUV19fSwzNDp7bjoiUHRnRnVuY1ZhciIsZjpmdW5jdGlvbiBw'@;
put 'TCh5LFAsSSl7dmFyIFE9eVt5LmwrK10scmU9eS5yZWFkX3NoaWZ0KDEpLGdlPUkmJkkuYmlmZjw9Mz9bODg9PVE/LTE6MCx5LnJlYWRfc2hpZnQoMSldOmZ1bmN0aW9uIFlDKHkpe3JldHVyblt5W3kubCsxXT4+NywzMjc2NyZ5LnJlYWRfc2hpZnQoMildfSh5KTtyZXR1cm5bcmUsKDA9PT1n'@;
put 'ZVswXT9fdjprTClbZ2VbMV1dXX19LDM1OntuOiJQdGdOYW1lIixmOmZ1bmN0aW9uIHFDKHksUCxJKXt2YXIgUT15LnJlYWRfc2hpZnQoMSk+Pj41JjMsZ2U9eS5yZWFkX3NoaWZ0KCFJfHxJLmJpZmY+PTg/NDoyKTtzd2l0Y2goSS5iaWZmKXtjYXNlIDI6eS5sKz01O2JyZWFrO2Nhc2UgMzpj'@;
put 'YXNlIDQ6eS5sKz04O2JyZWFrO2Nhc2UgNTp5LmwrPTEyfXJldHVybltRLDAsZ2VdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBaQyh5LFAsSSl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7cmV0dXJuIHkubCs9MSxbUSxyTCh5LDAsSSldfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24g'@;
put 'elooeSxQLEkpe3JldHVyblsoOTYmeVt5LmwrK10pPj41LEo5KHksMCxJKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBZWih5LFAsSSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiB5LmwrPUkmJjI9PUkuYmlmZj8zOjQsW1EseS5yZWFkX3NoaWZ0KEkmJjI9'@;
put 'PUkuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6eWN9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjp5Y30sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gc3YoeSxQLEkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KEkmJjI9PUkuYmlmZj8xOjIp'@;
put 'XX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gbUwoeSxQLEkpe3ZhciBRPXkucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4geS5sKz00LEkuYmlmZjw4JiZ5LmwtLSwxMj09SS5iaWZmJiYoeS5sKz0yKSxbUV19fSw0Mzp7bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBpTCh5LFAs'@;
put 'SSl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NTtyZXR1cm4geS5sKz1JJiZJLmJpZmY+OD8xMjpJLmJpZmY8OD82OjgsW1FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gZEwoeSxQLEkpe3ZhciBRPSg5NiZ5W3kubF0pPj41O3kubCs9MTt2YXIgcmU9ZnVuY3Rpb24gdHYoeSxQLEkpe3Zh'@;
put 'ciBRPUkmJkkuYmlmZj9JLmJpZmY6ODtpZihRPj0yJiZRPD01KXJldHVybiBmdW5jdGlvbiBqWih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksST15LnJlYWRfc2hpZnQoMSksUT0oMzI3NjgmUCk+PjE1LHJlPSgxNjM4NCZQKT4+MTQ7cmV0dXJuIFAmPTE2MzgzLDE9PVEmJlA+PTgxOTImJihQ'@;
put 'LT0xNjM4NCksMT09cmUmJkk+PTEyOCYmKEktPTI1Nikse3I6UCxjOkksY1JlbDpyZSxyUmVsOlF9fSh5KTt2YXIgcmU9eS5yZWFkX3NoaWZ0KFE+PTEyPzQ6MiksZ2U9eS5yZWFkX3NoaWZ0KDIpLF9lPSgxNjM4NCZnZSk+PjE0LHZlPSgzMjc2OCZnZSk+PjE1O2lmKGdlJj0xNjM4MywxPT12'@;
put 'ZSlmb3IoO3JlPjUyNDI4NzspcmUtPTEwNDg1NzY7aWYoMT09X2UpZm9yKDtnZT44MTkxOylnZS09MTYzODQ7cmV0dXJue3I6cmUsYzpnZSxjUmVsOl9lLHJSZWw6dmV9fSh5LDAsSSk7cmV0dXJuW1EscmVdfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0aW9uIHNMKHksUCxJKXt2YXIgUT0o'@;
put 'OTYmeVt5LmwrK10pPj41LHJlPWZ1bmN0aW9uIFZaKHksUCxJKXtpZihJLmJpZmY8OClyZXR1cm4gUTkoeSk7dmFyIFE9eS5yZWFkX3NoaWZ0KDEyPT1JLmJpZmY/NDoyKSxyZT15LnJlYWRfc2hpZnQoMTI9PUkuYmlmZj80OjIpLGdlPVpkKHksMiksX2U9WmQoeSwyKTtyZXR1cm57czp7cjpR'@;
put 'LGM6Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfSxlOntyOnJlLGM6X2VbMF0sY1JlbDpfZVsxXSxyUmVsOl9lWzJdfX19KHksMCxJKTtyZXR1cm5bUSxyZV19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVuY3Rpb24gYTYoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJl'@;
put 'YWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiBTTCh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgiLGY6ZnVuY3Rpb24gS0MoeSxQLEkpe3JldHVybiA1PT1JLmJpZmY/ZnVuY3Rpb24g'@;
put 'b3YoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzLEk9eS5yZWFkX3NoaWZ0KDIsImkiKTt5LmwrPTg7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTEyLFtQLEksUV19KHkpOlt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCg0'@;
put 'KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gaEwoeSxQLEkpe3ZhciBRPSg5NiZ5W3kubF0pPj41O3kubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBJJiY1PT1JLmJpZmYmJih5LmwrPTEyKSxbUSxyZSxyTCh5LDAsSSldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpm'@;
put 'dW5jdGlvbiB6Qyh5LFAsSSl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NSxyZT15LnJlYWRfc2hpZnQoMiwiaSIpO2lmKEkmJjU9PT1JLmJpZmYpeS5sKz0xMjtyZXR1cm5bUSxyZSxKOSh5LDAsSSldfX0sNjA6e246IlB0Z1JlZkVycjNkIixmOmZ1bmN0aW9uIGF2KHksUCxJKXt2YXIgUT0oOTYm'@;
put 'eVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyKSxnZT00O2lmKEkpc3dpdGNoKEkuYmlmZil7Y2FzZSA1OmdlPTE1O2JyZWFrO2Nhc2UgMTI6Z2U9Nn1yZXR1cm4geS5sKz1nZSxbUSxyZV19fSw2MTp7bjoiUHRnQXJlYUVycjNkIixmOmZ1bmN0aW9uIG9MKHksUCxJKXt2YXIgUT0oOTYm'@;
put 'eVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyKSxnZT04O2lmKEkpc3dpdGNoKEkuYmlmZil7Y2FzZSA1OnkubCs9MTIsZ2U9NjticmVhaztjYXNlIDEyOmdlPTEyfXJldHVybiB5LmwrPWdlLFtRLHJlXX19LDI1NTp7fX0sTUw9ezY0OjMyLDk2OjMyLDY1OjMzLDk3OjMzLDY2OjM0LDk4'@;
put 'OjM0LDY3OjM1LDk5OjM1LDY4OjM2LDEwMDozNiw2OTozNywxMDE6MzcsNzA6MzgsMTAyOjM4LDcxOjM5LDEwMzozOSw3Mjo0MCwxMDQ6NDAsNzM6NDEsMTA1OjQxLDc0OjQyLDEwNjo0Miw3NTo0MywxMDc6NDMsNzY6NDQsMTA4OjQ0LDc3OjQ1LDEwOTo0NSw3ODo0NiwxMTA6NDYsNzk6NDcs'@;
put 'MTExOjQ3LDg4OjM0LDEyMDozNCw4OTo1NywxMjE6NTcsOTA6NTgsMTIyOjU4LDkxOjU5LDEyMzo1OSw5Mjo2MCwxMjQ6NjAsOTM6NjEsMTI1OjYxfTshZnVuY3Rpb24oKXtmb3IodmFyIHkgaW4gTUwpR3NbeV09R3NbTUxbeV1dfSgpO3ZhciB0Uz17MTp7bjoiUHRnRWxmTGVsIixmOnEwfSwy'@;
put 'OntuOiJQdGdFbGZSdyIsZjpiTH0sMzp7bjoiUHRnRWxmQ29sIixmOm82fSw2OntuOiJQdGdFbGZSd1YiLGY6UUN9LDc6e246IlB0Z0VsZkNvbFYiLGY6czZ9LDEwOntuOiJQdGdFbGZSYWRpY2FsIixmOmN2fSwxMTp7bjoiUHRnRWxmUmFkaWNhbFMiLGY6X0x9LDEzOntuOiJQdGdFbGZDb2xT'@;
put 'IixmOnZMfSwxNTp7bjoiUHRnRWxmQ29sU1YiLGY6bHZ9LDE2OntuOiJQdGdFbGZSYWRpY2FsTGVsIixmOnV2fSwyNTp7bjoiUHRnTGlzdCIsZjpmdW5jdGlvbiB5TCh5KXt5LmwrPTI7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEk9eS5yZWFkX3NoaWZ0KDIpLFE9eS5yZWFkX3NoaWZ0KDQpLHJl'@;
put 'PXkucmVhZF9zaGlmdCgyKSxnZT15LnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6UCxjb2x0eXBlOjMmSSxydDpCM1tJPj4yJjMxXSxpZHg6USxjOnJlLEM6Z2V9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiB3TCh5KXtyZXR1cm4geS5sKz0yLFt5LnJlYWRfc2hpZnQoNCldfX0s'@;
put 'MjU1Ont9fSxsNj17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gZVMoeSl7cmV0dXJuIHkubCs9NCxbMCwwXX19LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIFYzKHksUCxJKXt2YXIgUT0yNTUmeVt5LmwrMV0/MTowO3JldHVybiB5LmwrPUkmJjI9PUkuYmlmZj8zOjQsW1Fd'@;
put 'fX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIG52KHksUCxJKXt2YXIgUT0yNTUmeVt5LmwrMV0/MTowO3JldHVybiB5LmwrPTIsW1EseS5yZWFkX3NoaWZ0KEkmJjI9PUkuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gcjYoeSxQLEkpe3kubCs9Mjtm'@;
put 'b3IodmFyIFE9eS5yZWFkX3NoaWZ0KEkmJjI9PUkuYmlmZj8xOjIpLHJlPVtdLGdlPTA7Z2U8PVE7KytnZSlyZS5wdXNoKHkucmVhZF9zaGlmdChJJiYyPT1JLmJpZmY/MToyKSk7cmV0dXJuIHJlfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gbEwoeSxQLEkpe3ZhciBRPTI1NSZ5'@;
put 'W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9MixbUSx5LnJlYWRfc2hpZnQoSSYmMj09SS5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJTdW0iLGY6ZnVuY3Rpb24gVVooeSxQLEkpe3kubCs9SSYmMj09SS5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOmZ1bmN0aW9uIFVDKHkp'@;
put 'e3ZhciBQPTEmeVt5LmwrMV07cmV0dXJuIHkubCs9NCxbUCwxXX19LDY0OntuOiJQdGdBdHRyU3BhY2UiLGY6ZnVuY3Rpb24gdUwoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCgyKSxxMih5KX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1pIixmOmZ1bmN0aW9uIHJ2KHkpe3JldHVybiB5LnJlYWRf'@;
put 'c2hpZnQoMikscTIoeSl9fSwxMjg6e246IlB0Z0F0dHJJZkVycm9yIixmOmZ1bmN0aW9uIGNMKHkpe3ZhciBQPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9MixbUCx5LnJlYWRfc2hpZnQoMildfX0sMjU1Ont9fTtmdW5jdGlvbiBqMyh5LFAsSSxRLHJlKXtpZihRLmJpZmY8OClyZXR1'@;
put 'cm4geWMoeSxQKTtmb3IodmFyIGdlPXkubCtQLF9lPVtdLHZlPTA7dmUhPT1JLmxlbmd0aDsrK3ZlKXN3aXRjaChJW3ZlXVswXSl7Y2FzZSJQdGdBcnJheSI6SVt2ZV1bMV09Z0woeSwwLFEpLF9lLnB1c2goSVt2ZV1bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6SVt2ZV1bMl09aXYoeSww'@;
put 'LFEpLF9lLnB1c2goSVt2ZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpRJiYxMj09US5iaWZmJiYoSVt2ZV1bMV1bMV09eS5yZWFkX3NoaWZ0KDQpLF9lLnB1c2goSVt2ZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2Fz'@;
put 'ZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIitJW3ZlXVswXX1yZXR1cm4gUD1nZS15LmwsIXJlJiYwIT09UCYmX2UucHVzaCh5Yyh5LFApKSxfZX1mdW5jdGlvbiBuNSh5LFAsSSl7Zm9yKHZhciByZSxnZSxRPXkubCtQLF9lPVtdO1EhPXkubDspUD1RLXkubCxyZT1Hc1tnZT15'@;
put 'W3kubF1dLCgyND09PWdlfHwyNT09PWdlKSYmKHJlPSgyND09PWdlP3RTOmw2KVt5W3kubCsxXV0pLHJlJiZyZS5mP19lLnB1c2goW3JlLm4scmUuZih5LFAsSSldKTp5Yyh5LFApO3JldHVybiBfZX1mdW5jdGlvbiBXWih5KXtmb3IodmFyIFA9W10sST0wO0k8eS5sZW5ndGg7KytJKXtmb3Io'@;
put 'dmFyIFE9eVtJXSxyZT1bXSxnZT0wO2dlPFEubGVuZ3RoOysrZ2Upe3ZhciBfZT1RW2dlXTtyZS5wdXNoKF9lPzI9PT1fZVswXT8nIicrX2VbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJzpfZVsxXToiIil9UC5wdXNoKHJlLmpvaW4oIiwiKSl9cmV0dXJuIFAuam9pbigiOyIpfWw2WzMzXT1s'@;
put 'NlszMl07dmFyIGM2PXtQdGdBZGQ6IisiLFB0Z0NvbmNhdDoiJiIsUHRnRGl2OiIvIixQdGdFcToiPSIsUHRnR2U6Ij49IixQdGdHdDoiPiIsUHRnTGU6Ijw9IixQdGdMdDoiPCIsUHRnTXVsOiIqIixQdGdOZToiPD4iLFB0Z1Bvd2VyOiJeIixQdGdTdWI6Ii0ifSx4TD1uZXcgUmVnRXhwKC9b'@;
put 'Xlx3XHU0RTAwLVx1OUZGRlx1MzA0MC1cdTMwRkZdLyk7ZnVuY3Rpb24gdTYoeSxQLEkpe2lmKCF5KXJldHVybiJTSDMzVEpTRVJSMCI7aWYoSS5iaWZmPjgmJigheS5YVEl8fCF5LlhUSVtQXSkpcmV0dXJuIHkuU2hlZXROYW1lc1tQXTtpZigheS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2'@;
put 'YXIgUT15LlhUSVtQXTtpZihJLmJpZmY8OClyZXR1cm4gUD4xZTQmJihQLT02NTUzNiksUDwwJiYoUD0tUCksMD09UD8iIjp5LlhUSVtQLTFdO2lmKCFRKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIHJlPSIiO2lmKEkuYmlmZj44KXN3aXRjaCh5W1FbMF1dWzBdKXtjYXNlIDM1NzpyZXR1cm4g'@;
put 'cmU9LTE9PVFbMV0/IiNSRUYiOnkuU2hlZXROYW1lc1tRWzFdXSxRWzFdPT1RWzJdP3JlOnJlKyI6Iit5LlNoZWV0TmFtZXNbUVsyXV07Y2FzZSAzNTg6cmV0dXJuIG51bGwhPUkuU0lEP3kuU2hlZXROYW1lc1tJLlNJRF06IlNIMzNUSlNTQU1FIit5W1FbMF1dWzBdO2RlZmF1bHQ6cmV0dXJu'@;
put 'IlNIMzNUSlNTUkMiK3lbUVswXV1bMF19c3dpdGNoKHlbUVswXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4gcmU9LTE9PVFbMV0/IiNSRUYiOnkuU2hlZXROYW1lc1tRWzFdXXx8IlNIMzNUSlNFUlIzIixRWzFdPT1RWzJdP3JlOnJlKyI6Iit5LlNoZWV0TmFtZXNbUVsyXV07Y2FzZSAxNDg0'@;
put 'OTpyZXR1cm4geVtRWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiB5W1FbMF1dWzBdWzNdPyhyZT0tMT09UVsxXT8iI1JFRiI6eVtRWzBdXVswXVszXVtRWzFdXXx8IlNIMzNUSlNFUlI0IixRWzFdPT1RWzJd'@;
put 'P3JlOnJlKyI6Iit5W1FbMF1dWzBdWzNdW1FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBjZih5LFAsSSl7cmV0dXJuIGZ1bmN0aW9uIGh2KHksUCl7aWYoISh5fHxQJiZQLmJpZmY8PTUmJlAuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJu'@;
put 'LyNSRUYvLnRlc3QoeSk/eTp4TC50ZXN0KHkpPyInIit5KyInIjp5fSh1Nih5LFAsSSksSSl9ZnVuY3Rpb24geGwoeSxQLEksUSxyZSxnZSl7dmFyIEhlLEJlLEdlLEN0LF9lPXJlJiZyZS5iaWZmfHw4LHZlPWdlJiZudWxsIT1QP1A6e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxTZT1bXSxu'@;
put 'dD0wLGR0PTAsY3Q9IiI7aWYoIXlbMF18fCF5WzBdWzBdKXJldHVybiIiO2Zvcih2YXIgYnQ9LTEsRnQ9IiIsa3Q9MCxUdD15WzBdLmxlbmd0aDtrdDxUdDsrK2t0KXt2YXIgWnQ9eVswXVtrdF07c3dpdGNoKFp0WzBdKXtjYXNlIlB0Z1VtaW51cyI6U2UucHVzaCgiLSIrU2UucG9wKCkpO2Jy'@;
put 'ZWFrO2Nhc2UiUHRnVXBsdXMiOlNlLnB1c2goIisiK1NlLnBvcCgpKTticmVhaztjYXNlIlB0Z1BlcmNlbnQiOlNlLnB1c2goU2UucG9wKCkrIiUiKTticmVhaztjYXNlIlB0Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dlIjpjYXNlIlB0'@;
put 'Z0d0IjpjYXNlIlB0Z0xlIjpjYXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dlciI6Y2FzZSJQdGdTdWIiOmlmKEhlPVNlLnBvcCgpLEJlPVNlLnBvcCgpLGJ0Pj0wKXtzd2l0Y2goeVswXVtidF1bMV1bMF0pe2Nhc2UgMDpGdD1ibigiICIseVswXVtidF1b'@;
put 'MV1bMV0pO2JyZWFrO2Nhc2UgMTpGdD1ibigiXHIiLHlbMF1bYnRdWzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEZ0PSIiLHJlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK3lbMF1bYnRdWzFdWzBdKX1CZSs9RnQsYnQ9LTF9U2UucHVzaChCZStj'@;
put 'NltadFswXV0rSGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOkhlPVNlLnBvcCgpLEJlPVNlLnBvcCgpLFNlLnB1c2goQmUrIiAiK0hlKTticmVhaztjYXNlIlB0Z1VuaW9uIjpIZT1TZS5wb3AoKSxCZT1TZS5wb3AoKSxTZS5wdXNoKEJlKyIsIitIZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6SGU9'@;
put 'U2UucG9wKCksQmU9U2UucG9wKCksU2UucHVzaChCZSsiOiIrSGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRnQXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQ'@;
put 'dGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJy'@;
put 'ZWFrO2Nhc2UiUHRnUmVmIjpHZT1sdShadFsxXVsxXSx2ZSxyZSksU2UucHVzaChJMihHZSxfZSkpO2JyZWFrO2Nhc2UiUHRnUmVmTiI6R2U9ST9sdShadFsxXVsxXSxJLHJlKTpadFsxXVsxXSxTZS5wdXNoKEkyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdSZWYzZCI6bnQ9WnRbMV1bMV0sR2U9'@;
put 'bHUoWnRbMV1bMl0sdmUscmUpLGN0PWNmKFEsbnQscmUpLFNlLnB1c2goY3QrIiEiK0kyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBLbj1adFsxXVswXSx1bj1adFsxXVsxXTtLbnx8KEtuPTApO3ZhciBxbj0wPT0oS24mPTEyNyk/W106U2Uuc2xp'@;
put 'Y2UoLUtuKTtTZS5sZW5ndGgtPUtuLCJVc2VyIj09PXVuJiYodW49cW4uc2hpZnQoKSksU2UucHVzaCh1bisiKCIrcW4uam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpTZS5wdXNoKFp0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0ludCI6Y2FzZSJQdGdOdW0i'@;
put 'OlNlLnB1c2goU3RyaW5nKFp0WzFdKSk7YnJlYWs7Y2FzZSJQdGdTdHIiOlNlLnB1c2goJyInK1p0WzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UiUHRnRXJyIjpTZS5wdXNoKFp0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjpDdD1ocihadFsxXVsxXSxJP3tzOkl9OnZl'@;
put 'LHJlKSxTZS5wdXNoKG1pKEN0LHJlKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpDdD1ocihadFsxXVsxXSx2ZSxyZSksU2UucHVzaChtaShDdCxyZSkpO2JyZWFrO2Nhc2UiUHRnQXJlYTNkIjpudD1adFsxXVsxXSxDdD1ocihadFsxXVsyXSx2ZSxyZSksY3Q9Y2YoUSxudCxyZSksU2UucHVzaChj'@;
put 'dCsiISIrbWkoQ3QscmUpKTticmVhaztjYXNlIlB0Z0F0dHJTdW0iOlNlLnB1c2goIlNVTSgiK1NlLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSJQdGdOYW1lIjp2YXIgem49KFEubmFtZXN8fFtdKVsoZHQ9WnRbMV1bMl0pLTFdfHwoUVswXXx8W10pW2R0XSxrbj16bj96bi5OYW1lOiJTSDMzVEpT'@;
put 'TkFNRSIrU3RyaW5nKGR0KTtrbiBpbiBvNSYmKGtuPW81W2tuXSksU2UucHVzaChrbik7YnJlYWs7Y2FzZSJQdGdOYW1lWCI6dmFyIHRyLGVyPVp0WzFdWzFdO2lmKGR0PVp0WzFdWzJdLCEocmUuYmlmZjw9NSkpe3ZhciBabj0iIjtpZigxNDg0OT09KChRW2VyXXx8W10pWzBdfHxbXSlbMF18'@;
put 'fCgxMDI1PT0oKFFbZXJdfHxbXSlbMF18fFtdKVswXT9RW2VyXVtkdF0mJlFbZXJdW2R0XS5pdGFiPjAmJihabj1RLlNoZWV0TmFtZXNbUVtlcl1bZHRdLml0YWItMV0rIiEiKTpabj1RLlNoZWV0TmFtZXNbZHQtMV0rIiEiKSxRW2VyXSYmUVtlcl1bZHRdKVpuKz1RW2VyXVtkdF0uTmFtZTtl'@;
put 'bHNlIGlmKFFbMF0mJlFbMF1bZHRdKVpuKz1RWzBdW2R0XS5OYW1lO2Vsc2V7dmFyIHNpPSh1NihRLGVyLHJlKXx8IiIpLnNwbGl0KCI7OyIpO3NpW2R0LTFdP1puPXNpW2R0LTFdOlpuKz0iU0gzM1RKU0VSUlgifVNlLnB1c2goWm4pO2JyZWFrfWVyPDAmJihlcj0tZXIpLFFbZXJdJiYodHI9'@;
put 'UVtlcl1bZHRdKSx0cnx8KHRyPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxTZS5wdXNoKHRyLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciB4aT0iKCIsSWk9IikiO2lmKGJ0Pj0wKXtzd2l0Y2goRnQ9IiIseVswXVtidF1bMV1bMF0pe2Nhc2UgMjp4aT1ibigiICIseVswXVtidF1bMV1b'@;
put 'MV0pK3hpO2JyZWFrO2Nhc2UgMzp4aT1ibigiXHIiLHlbMF1bYnRdWzFdWzFdKSt4aTticmVhaztjYXNlIDQ6SWk9Ym4oIiAiLHlbMF1bYnRdWzFdWzFdKStJaTticmVhaztjYXNlIDU6SWk9Ym4oIlxyIix5WzBdW2J0XVsxXVsxXSkrSWk7YnJlYWs7ZGVmYXVsdDppZihyZS5XVEYpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIit5WzBdW2J0XVsxXVswXSl9YnQ9LTF9U2UucHVzaCh4aStTZS5wb3AoKStJaSk7YnJlYWs7Y2FzZSJQdGdSZWZFcnIiOmNhc2UiUHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOlNl'@;
put 'LnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciB1cj17YzpJLmMscjpJLnJ9O2lmKFEuc2hhcmVkZltkaShHZT17YzpadFsxXVsxXSxyOlp0WzFdWzBdfSldKXt2YXIgQW49US5zaGFyZWRmW2RpKEdlKV07U2UucHVzaCh4bChBbix2ZSx1cixRLHJlKSl9ZWxzZXt2YXIgdnI9'@;
put 'ITE7Zm9yKEhlPTA7SGUhPVEuYXJyYXlmLmxlbmd0aDsrK0hlKWlmKCEoR2UuYzwoQmU9US5hcnJheWZbSGVdKVswXS5zLmN8fEdlLmM+QmVbMF0uZS5jfHxHZS5yPEJlWzBdLnMucnx8R2Uucj5CZVswXS5lLnIpKXtTZS5wdXNoKHhsKEJlWzFdLHZlLHVyLFEscmUpKSx2cj0hMDticmVha312'@;
put 'cnx8U2UucHVzaChadFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6U2UucHVzaCgieyIrV1ooWnRbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6YnQ9a3Q7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjpTZS5wdXNoKCIiKTticmVhaztjYXNl'@;
put 'IlB0Z0xpc3QiOlNlLnB1c2goIlRhYmxlIitadFsxXS5pZHgrIlsjIitadFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6'@;
put 'Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAi'@;
put 'K1N0cmluZyhadCkpfWlmKDMhPXJlLmJpZmYmJmJ0Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKHlbMF1ba3RdWzBdKSl7dmFyIFNuPSEwO3N3aXRjaCgoWnQ9eVswXVtidF0pWzFdWzBdKXtjYXNlIDQ6U249ITE7Y2Fz'@;
put 'ZSAwOkZ0PWJuKCIgIixadFsxXVsxXSk7YnJlYWs7Y2FzZSA1OlNuPSExO2Nhc2UgMTpGdD1ibigiXHIiLFp0WzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEZ0PSIiLHJlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1p0WzFdWzBdKX1TZS5wdXNo'@;
put 'KChTbj9GdDoiIikrU2UucG9wKCkrKFNuPyIiOkZ0KSksYnQ9LTF9fWlmKFNlLmxlbmd0aD4xJiZyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBzdGFjayIpO3JldHVybiBTZVswXX1mdW5jdGlvbiBmdih5LFAsSSl7dmFyIGdlLFE9eS5sK1AscmU9Mj09SS5iaWZmPzE6Mixf'@;
put 'ZT15LnJlYWRfc2hpZnQocmUpO2lmKDY1NTM1PT1fZSlyZXR1cm5bW10seWMoeSxQLTIpXTt2YXIgdmU9bjUoeSxfZSxJKTtyZXR1cm4gUCE9PV9lK3JlJiYoZ2U9ajMoeSxQLV9lLXJlLHZlLEkpKSx5Lmw9USxbdmUsZ2VdfWZ1bmN0aW9uIGk1KHksUCxJKXt2YXIgcmUsUT15LmwrUCxnZT15'@;
put 'LnJlYWRfc2hpZnQoMiksX2U9bjUoeSxnZSxJKTtyZXR1cm4gNjU1MzU9PWdlP1tbXSx5Yyh5LFAtMildOihQIT09Z2UrMiYmKHJlPWozKHksUS1nZS0yLF9lLEkpKSxbX2UscmVdKX1mdW5jdGlvbiB6Myh5LFAsSSl7dmFyIFE9eS5sK1AscmU9SXUoeSk7Mj09SS5iaWZmJiYrK3kubDt2YXIg'@;
put 'Z2U9ZnVuY3Rpb24gblMoeSl7dmFyIFA7aWYoNjU1MzUhPT1Zbih5LHkubCs2KSlyZXR1cm5bbWEoeSksIm4iXTtzd2l0Y2goeVt5LmxdKXtjYXNlIDA6cmV0dXJuIHkubCs9OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIFA9MT09PXlbeS5sKzJdLHkubCs9OCxbUCwiYiJdO2Nhc2Ug'@;
put 'MjpyZXR1cm4gUD15W3kubCsyXSx5LmwrPTgsW1AsImUiXTtjYXNlIDM6cmV0dXJuIHkubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0oeSksX2U9eS5yZWFkX3NoaWZ0KDEpOzIhPUkuYmlmZiYmKHkucmVhZF9zaGlmdCgxKSxJLmJpZmY+PTUmJnkucmVhZF9zaGlmdCg0KSk7dmFyIHZlPWZ1bmN0'@;
put 'aW9uIHI1KHksUCxJKXt2YXIgZ2UsUT15LmwrUCxyZT0yPT1JLmJpZmY/MToyLF9lPXkucmVhZF9zaGlmdChyZSk7aWYoNjU1MzU9PV9lKXJldHVybltbXSx5Yyh5LFAtMildO3ZhciB2ZT1uNSh5LF9lLEkpO3JldHVybiBQIT09X2UrcmUmJihnZT1qMyh5LFAtX2UtcmUsdmUsSSkpLHkubD1R'@;
put 'LFt2ZSxnZV19KHksUS15LmwsSSk7cmV0dXJue2NlbGw6cmUsdmFsOmdlWzBdLGZvcm11bGE6dmUsc2hhcmVkOl9lPj4zJjEsdHQ6Z2VbMV19fWZ1bmN0aW9uIHVmKHksUCxJKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9bjUoeSxRLEkpLGdlPXkucmVhZF9zaGlmdCg0KTtyZXR1cm5bcmUs'@;
put 'Z2U+MD9qMyh5LGdlLHJlLEksITApOm51bGxdfXZhciByUz11ZixoNj11ZixpUz11ZixvUz1mdW5jdGlvbiBndih5LFAsSSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXkucmVhZF9zaGlmdCg0KSxnZT1uNSh5LFEsSSk7cmV0dXJuW2dlLHJlPjA/ajMoeSxyZSxnZSxJLCEwKTpudWxsXX0s'@;
put 'c1M9dWYsRUw9dWY7ZnVuY3Rpb24gbXYoeSl7aWYoKDB8eSk9PXkmJnk8TWF0aC5wb3coMiwxNikmJnk+PTApe3ZhciBQPXByKDExKTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDMpLFAud3JpdGVfc2hpZnQoMSwzMCksUC53cml0ZV9zaGlmdCgyLHkpLFAud3JpdGVfc2hpZnQoNCwwKSxQfXZh'@;
put 'ciBJPXByKDE3KTtyZXR1cm4gSS53cml0ZV9zaGlmdCg0LDExKSxJLndyaXRlX3NoaWZ0KDEsMzEpLEkud3JpdGVfc2hpZnQoOCx5KSxJLndyaXRlX3NoaWZ0KDQsMCksSX1mdW5jdGlvbiBhUyh5KXt2YXIgUD1wcig3KTtQLndyaXRlX3NoaWZ0KDQsMysyKnkubGVuZ3RoKSxQLndyaXRlX3No'@;
put 'aWZ0KDEsMjMpLFAud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCk7dmFyIEk9cHIoMip5Lmxlbmd0aCk7SS53cml0ZV9zaGlmdCgyKnkubGVuZ3RoLHksInV0ZjE2bGUiKTt2YXIgUT1wcig0KTtyZXR1cm4gUS53cml0ZV9zaGlmdCg0LDApLFMoW1AsSSxRXSl9ZnVuY3Rpb24gVTMoeSl7aWYoeS5t'@;
put 'YXRjaCgvXiMoRElWXC8wIXxHRVRUSU5HX0RBVEF8TlwvQXxOQU1FXD98TlVMTCF8TlVNIXxSRUYhfFZBTFVFISkkLykpcmV0dXJuIGZ1bmN0aW9uICRaKHkpe3ZhciBQPXByKDEwKTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDIpLFAud3JpdGVfc2hpZnQoMSwyOCksUC53cml0ZV9zaGlmdCgx'@;
put 'LHkpLFAud3JpdGVfc2hpZnQoNCwwKSxQfSgrS2FbeV0pO2lmKHkubWF0Y2goL15cJD8oPzpbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF18W0EtWl17MSwyfSlcJD8oPzoxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3'@;
put 'WzAtNl18WzEtOV1cZHswLDV9KSQvKSlyZXR1cm4gZnVuY3Rpb24gdnYoeSl7dmFyIFA9c3MoeSksST1wcigxNSk7cmV0dXJuIEkud3JpdGVfc2hpZnQoNCw3KSxJLndyaXRlX3NoaWZ0KDEsMzYpLEkud3JpdGVfc2hpZnQoNCxQLnIpLEkud3JpdGVfc2hpZnQoMixQLmN8KCIkIj09eS5jaGFy'@;
put 'QXQoMCk/MDoxKTw8MTR8KHkubWF0Y2goL1wkXGQvKT8wOjEpPDwxNSksSS53cml0ZV9zaGlmdCg0LDApLEl9KHkpO2lmKHkubWF0Y2goL14iLioiJC8pKXJldHVybiBhUyh5KTt0aHJvdyJGb3JtdWxhIHwiK3krInwgbm90IHN1cHBvcnRlZCBmb3IgWExTQiJ9dmFyIGtMPXswOiJCRUVQIiwx'@;
put 'OiJPUEVOIiwyOiJPUEVOLkxJTktTIiwzOiJDTE9TRS5BTEwiLDQ6IlNBVkUiLDU6IlNBVkUuQVMiLDY6IkZJTEUuREVMRVRFIiw3OiJQQUdFLlNFVFVQIiw4OiJQUklOVCIsOToiUFJJTlRFUi5TRVRVUCIsMTA6IlFVSVQiLDExOiJORVcuV0lORE9XIiwxMjoiQVJSQU5HRS5BTEwiLDEzOiJX'@;
put 'SU5ET1cuU0laRSIsMTQ6IldJTkRPVy5NT1ZFIiwxNToiRlVMTCIsMTY6IkNMT1NFIiwxNzoiUlVOIiwyMjoiU0VULlBSSU5ULkFSRUEiLDIzOiJTRVQuUFJJTlQuVElUTEVTIiwyNDoiU0VULlBBR0UuQlJFQUsiLDI1OiJSRU1PVkUuUEFHRS5CUkVBSyIsMjY6IkZPTlQiLDI3OiJESVNQTEFZ'@;
put 'IiwyODoiUFJPVEVDVC5ET0NVTUVOVCIsMjk6IlBSRUNJU0lPTiIsMzA6IkExLlIxQzEiLDMxOiJDQUxDVUxBVEUuTk9XIiwzMjoiQ0FMQ1VMQVRJT04iLDM0OiJEQVRBLkZJTkQiLDM1OiJFWFRSQUNUIiwzNjoiREFUQS5ERUxFVEUiLDM3OiJTRVQuREFUQUJBU0UiLDM4OiJTRVQuQ1JJVEVS'@;
put 'SUEiLDM5OiJTT1JUIiw0MDoiREFUQS5TRVJJRVMiLDQxOiJUQUJMRSIsNDI6IkZPUk1BVC5OVU1CRVIiLDQzOiJBTElHTk1FTlQiLDQ0OiJTVFlMRSIsNDU6IkJPUkRFUiIsNDY6IkNFTEwuUFJPVEVDVElPTiIsNDc6IkNPTFVNTi5XSURUSCIsNDg6IlVORE8iLDQ5OiJDVVQiLDUwOiJDT1BZ'@;
put 'Iiw1MToiUEFTVEUiLDUyOiJDTEVBUiIsNTM6IlBBU1RFLlNQRUNJQUwiLDU0OiJFRElULkRFTEVURSIsNTU6IklOU0VSVCIsNTY6IkZJTEwuUklHSFQiLDU3OiJGSUxMLkRPV04iLDYxOiJERUZJTkUuTkFNRSIsNjI6IkNSRUFURS5OQU1FUyIsNjM6IkZPUk1VTEEuR09UTyIsNjQ6IkZPUk1V'@;
put 'TEEuRklORCIsNjU6IlNFTEVDVC5MQVNULkNFTEwiLDY2OiJTSE9XLkFDVElWRS5DRUxMIiw2NzoiR0FMTEVSWS5BUkVBIiw2ODoiR0FMTEVSWS5CQVIiLDY5OiJHQUxMRVJZLkNPTFVNTiIsNzA6IkdBTExFUlkuTElORSIsNzE6IkdBTExFUlkuUElFIiw3MjoiR0FMTEVSWS5TQ0FUVEVSIiw3'@;
put 'MzoiQ09NQklOQVRJT04iLDc0OiJQUkVGRVJSRUQiLDc1OiJBREQuT1ZFUkxBWSIsNzY6IkdSSURMSU5FUyIsNzc6IlNFVC5QUkVGRVJSRUQiLDc4OiJBWEVTIiw3OToiTEVHRU5EIiw4MDoiQVRUQUNILlRFWFQiLDgxOiJBREQuQVJST1ciLDgyOiJTRUxFQ1QuQ0hBUlQiLDgzOiJTRUxFQ1Qu'@;
put 'UExPVC5BUkVBIiw4NDoiUEFUVEVSTlMiLDg1OiJNQUlOLkNIQVJUIiw4NjoiT1ZFUkxBWSIsODc6IlNDQUxFIiw4ODoiRk9STUFULkxFR0VORCIsODk6IkZPUk1BVC5URVhUIiw5MDoiRURJVC5SRVBFQVQiLDkxOiJQQVJTRSIsOTI6IkpVU1RJRlkiLDkzOiJISURFIiw5NDoiVU5ISURFIiw5'@;
put 'NToiV09SS1NQQUNFIiw5NjoiRk9STVVMQSIsOTc6IkZPUk1VTEEuRklMTCIsOTg6IkZPUk1VTEEuQVJSQVkiLDk5OiJEQVRBLkZJTkQuTkVYVCIsMTAwOiJEQVRBLkZJTkQuUFJFViIsMTAxOiJGT1JNVUxBLkZJTkQuTkVYVCIsMTAyOiJGT1JNVUxBLkZJTkQuUFJFViIsMTAzOiJBQ1RJVkFU'@;
put 'RSIsMTA0OiJBQ1RJVkFURS5ORVhUIiwxMDU6IkFDVElWQVRFLlBSRVYiLDEwNjoiVU5MT0NLRUQuTkVYVCIsMTA3OiJVTkxPQ0tFRC5QUkVWIiwxMDg6IkNPUFkuUElDVFVSRSIsMTA5OiJTRUxFQ1QiLDExMDoiREVMRVRFLk5BTUUiLDExMToiREVMRVRFLkZPUk1BVCIsMTEyOiJWTElORSIs'@;
put 'MTEzOiJITElORSIsMTE0OiJWUEFHRSIsMTE1OiJIUEFHRSIsMTE2OiJWU0NST0xMIiwxMTc6IkhTQ1JPTEwiLDExODoiQUxFUlQiLDExOToiTkVXIiwxMjA6IkNBTkNFTC5DT1BZIiwxMjE6IlNIT1cuQ0xJUEJPQVJEIiwxMjI6Ik1FU1NBR0UiLDEyNDoiUEFTVEUuTElOSyIsMTI1OiJBUFAu'@;
put 'QUNUSVZBVEUiLDEyNjoiREVMRVRFLkFSUk9XIiwxMjc6IlJPVy5IRUlHSFQiLDEyODoiRk9STUFULk1PVkUiLDEyOToiRk9STUFULlNJWkUiLDEzMDoiRk9STVVMQS5SRVBMQUNFIiwxMzE6IlNFTkQuS0VZUyIsMTMyOiJTRUxFQ1QuU1BFQ0lBTCIsMTMzOiJBUFBMWS5OQU1FUyIsMTM0OiJS'@;
put 'RVBMQUNFLkZPTlQiLDEzNToiRlJFRVpFLlBBTkVTIiwxMzY6IlNIT1cuSU5GTyIsMTM3OiJTUExJVCIsMTM4OiJPTi5XSU5ET1ciLDEzOToiT04uREFUQSIsMTQwOiJESVNBQkxFLklOUFVUIiwxNDI6Ik9VVExJTkUiLDE0MzoiTElTVC5OQU1FUyIsMTQ0OiJGSUxFLkNMT1NFIiwxNDU6IlNB'@;
put 'VkUuV09SS0JPT0siLDE0NjoiREFUQS5GT1JNIiwxNDc6IkNPUFkuQ0hBUlQiLDE0ODoiT04uVElNRSIsMTQ5OiJXQUlUIiwxNTA6IkZPUk1BVC5GT05UIiwxNTE6IkZJTEwuVVAiLDE1MjoiRklMTC5MRUZUIiwxNTM6IkRFTEVURS5PVkVSTEFZIiwxNTU6IlNIT1JULk1FTlVTIiwxNTk6IlNF'@;
put 'VC5VUERBVEUuU1RBVFVTIiwxNjE6IkNPTE9SLlBBTEVUVEUiLDE2MjoiREVMRVRFLlNUWUxFIiwxNjM6IldJTkRPVy5SRVNUT1JFIiwxNjQ6IldJTkRPVy5NQVhJTUlaRSIsMTY2OiJDSEFOR0UuTElOSyIsMTY3OiJDQUxDVUxBVEUuRE9DVU1FTlQiLDE2ODoiT04uS0VZIiwxNjk6IkFQUC5S'@;
put 'RVNUT1JFIiwxNzA6IkFQUC5NT1ZFIiwxNzE6IkFQUC5TSVpFIiwxNzI6IkFQUC5NSU5JTUlaRSIsMTczOiJBUFAuTUFYSU1JWkUiLDE3NDoiQlJJTkcuVE8uRlJPTlQiLDE3NToiU0VORC5UTy5CQUNLIiwxODU6Ik1BSU4uQ0hBUlQuVFlQRSIsMTg2OiJPVkVSTEFZLkNIQVJULlRZUEUiLDE4'@;
put 'NzoiU0VMRUNULkVORCIsMTg4OiJPUEVOLk1BSUwiLDE4OToiU0VORC5NQUlMIiwxOTA6IlNUQU5EQVJELkZPTlQiLDE5MToiQ09OU09MSURBVEUiLDE5MjoiU09SVC5TUEVDSUFMIiwxOTM6IkdBTExFUlkuM0QuQVJFQSIsMTk0OiJHQUxMRVJZLjNELkNPTFVNTiIsMTk1OiJHQUxMRVJZLjNE'@;
put 'LkxJTkUiLDE5NjoiR0FMTEVSWS4zRC5QSUUiLDE5NzoiVklFVy4zRCIsMTk4OiJHT0FMLlNFRUsiLDE5OToiV09SS0dST1VQIiwyMDA6IkZJTEwuR1JPVVAiLDIwMToiVVBEQVRFLkxJTksiLDIwMjoiUFJPTU9URSIsMjAzOiJERU1PVEUiLDIwNDoiU0hPVy5ERVRBSUwiLDIwNjoiVU5HUk9V'@;
put 'UCIsMjA3OiJPQkpFQ1QuUFJPUEVSVElFUyIsMjA4OiJTQVZFLk5FVy5PQkpFQ1QiLDIwOToiU0hBUkUiLDIxMDoiU0hBUkUuTkFNRSIsMjExOiJEVVBMSUNBVEUiLDIxMjoiQVBQTFkuU1RZTEUiLDIxMzoiQVNTSUdOLlRPLk9CSkVDVCIsMjE0OiJPQkpFQ1QuUFJPVEVDVElPTiIsMjE1OiJI'@;
put 'SURFLk9CSkVDVCIsMjE2OiJTRVQuRVhUUkFDVCIsMjE3OiJDUkVBVEUuUFVCTElTSEVSIiwyMTg6IlNVQlNDUklCRS5UTyIsMjE5OiJBVFRSSUJVVEVTIiwyMjA6IlNIT1cuVE9PTEJBUiIsMjIyOiJQUklOVC5QUkVWSUVXIiwyMjM6IkVESVQuQ09MT1IiLDIyNDoiU0hPVy5MRVZFTFMiLDIy'@;
put 'NToiRk9STUFULk1BSU4iLDIyNjoiRk9STUFULk9WRVJMQVkiLDIyNzoiT04uUkVDQUxDIiwyMjg6IkVESVQuU0VSSUVTIiwyMjk6IkRFRklORS5TVFlMRSIsMjQwOiJMSU5FLlBSSU5UIiwyNDM6IkVOVEVSLkRBVEEiLDI0OToiR0FMTEVSWS5SQURBUiIsMjUwOiJNRVJHRS5TVFlMRVMiLDI1'@;
put 'MToiRURJVElPTi5PUFRJT05TIiwyNTI6IlBBU1RFLlBJQ1RVUkUiLDI1MzoiUEFTVEUuUElDVFVSRS5MSU5LIiwyNTQ6IlNQRUxMSU5HIiwyNTY6IlpPT00iLDI1OToiSU5TRVJULk9CSkVDVCIsMjYwOiJXSU5ET1cuTUlOSU1JWkUiLDI2NToiU09VTkQuTk9URSIsMjY2OiJTT1VORC5QTEFZ'@;
put 'IiwyNjc6IkZPUk1BVC5TSEFQRSIsMjY4OiJFWFRFTkQuUE9MWUdPTiIsMjY5OiJGT1JNQVQuQVVUTyIsMjcyOiJHQUxMRVJZLjNELkJBUiIsMjczOiJHQUxMRVJZLjNELlNVUkZBQ0UiLDI3NDoiRklMTC5BVVRPIiwyNzY6IkNVU1RPTUlaRS5UT09MQkFSIiwyNzc6IkFERC5UT09MIiwyNzg6'@;
put 'IkVESVQuT0JKRUNUIiwyNzk6Ik9OLkRPVUJMRUNMSUNLIiwyODA6Ik9OLkVOVFJZIiwyODE6IldPUktCT09LLkFERCIsMjgyOiJXT1JLQk9PSy5NT1ZFIiwyODM6IldPUktCT09LLkNPUFkiLDI4NDoiV09SS0JPT0suT1BUSU9OUyIsMjg1OiJTQVZFLldPUktTUEFDRSIsMjg4OiJDSEFSVC5X'@;
put 'SVpBUkQiLDI4OToiREVMRVRFLlRPT0wiLDI5MDoiTU9WRS5UT09MIiwyOTE6IldPUktCT09LLlNFTEVDVCIsMjkyOiJXT1JLQk9PSy5BQ1RJVkFURSIsMjkzOiJBU1NJR04uVE8uVE9PTCIsMjk1OiJDT1BZLlRPT0wiLDI5NjoiUkVTRVQuVE9PTCIsMjk3OiJDT05TVFJBSU4uTlVNRVJJQyIs'@;
put 'Mjk4OiJQQVNURS5UT09MIiwzMDI6IldPUktCT09LLk5FVyIsMzA1OiJTQ0VOQVJJTy5DRUxMUyIsMzA2OiJTQ0VOQVJJTy5ERUxFVEUiLDMwNzoiU0NFTkFSSU8uQUREIiwzMDg6IlNDRU5BUklPLkVESVQiLDMwOToiU0NFTkFSSU8uU0hPVyIsMzEwOiJTQ0VOQVJJTy5TSE9XLk5FWFQiLDMx'@;
put 'MToiU0NFTkFSSU8uU1VNTUFSWSIsMzEyOiJQSVZPVC5UQUJMRS5XSVpBUkQiLDMxMzoiUElWT1QuRklFTEQuUFJPUEVSVElFUyIsMzE0OiJQSVZPVC5GSUVMRCIsMzE1OiJQSVZPVC5JVEVNIiwzMTY6IlBJVk9ULkFERC5GSUVMRFMiLDMxODoiT1BUSU9OUy5DQUxDVUxBVElPTiIsMzE5OiJP'@;
put 'UFRJT05TLkVESVQiLDMyMDoiT1BUSU9OUy5WSUVXIiwzMjE6IkFERElOLk1BTkFHRVIiLDMyMjoiTUVOVS5FRElUT1IiLDMyMzoiQVRUQUNILlRPT0xCQVJTIiwzMjQ6IlZCQUFjdGl2YXRlIiwzMjU6Ik9QVElPTlMuQ0hBUlQiLDMyODoiVkJBLklOU0VSVC5GSUxFIiwzMzA6IlZCQS5QUk9D'@;
put 'RURVUkUuREVGSU5JVElPTiIsMzM2OiJST1VUSU5HLlNMSVAiLDMzODoiUk9VVEUuRE9DVU1FTlQiLDMzOToiTUFJTC5MT0dPTiIsMzQyOiJJTlNFUlQuUElDVFVSRSIsMzQzOiJFRElULlRPT0wiLDM0NDoiR0FMTEVSWS5ET1VHSE5VVCIsMzUwOiJDSEFSVC5UUkVORCIsMzUyOiJQSVZPVC5J'@;
put 'VEVNLlBST1BFUlRJRVMiLDM1NDoiV09SS0JPT0suSU5TRVJUIiwzNTU6Ik9QVElPTlMuVFJBTlNJVElPTiIsMzU2OiJPUFRJT05TLkdFTkVSQUwiLDM3MDoiRklMVEVSLkFEVkFOQ0VEIiwzNzM6Ik1BSUwuQURELk1BSUxFUiIsMzc0OiJNQUlMLkRFTEVURS5NQUlMRVIiLDM3NToiTUFJTC5S'@;
put 'RVBMWSIsMzc2OiJNQUlMLlJFUExZLkFMTCIsMzc3OiJNQUlMLkZPUldBUkQiLDM3ODoiTUFJTC5ORVhULkxFVFRFUiIsMzc5OiJEQVRBLkxBQkVMIiwzODA6IklOU0VSVC5USVRMRSIsMzgxOiJGT05ULlBST1BFUlRJRVMiLDM4MjoiTUFDUk8uT1BUSU9OUyIsMzgzOiJXT1JLQk9PSy5ISURF'@;
put 'IiwzODQ6IldPUktCT09LLlVOSElERSIsMzg1OiJXT1JLQk9PSy5ERUxFVEUiLDM4NjoiV09SS0JPT0suTkFNRSIsMzg4OiJHQUxMRVJZLkNVU1RPTSIsMzkwOiJBREQuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkxOiJERUxFVEUuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkyOiJDSEFSVC5BREQuREFUQSIs'@;
put 'MzkzOiJBVVRPLk9VVExJTkUiLDM5NDoiVEFCLk9SREVSIiwzOTU6IlNIT1cuRElBTE9HIiwzOTY6IlNFTEVDVC5BTEwiLDM5NzoiVU5HUk9VUC5TSEVFVFMiLDM5ODoiU1VCVE9UQUwuQ1JFQVRFIiwzOTk6IlNVQlRPVEFMLlJFTU9WRSIsNDAwOiJSRU5BTUUuT0JKRUNUIiw0MTI6IldPUktC'@;
put 'T09LLlNDUk9MTCIsNDEzOiJXT1JLQk9PSy5ORVhUIiw0MTQ6IldPUktCT09LLlBSRVYiLDQxNToiV09SS0JPT0suVEFCLlNQTElUIiw0MTY6IkZVTEwuU0NSRUVOIiw0MTc6IldPUktCT09LLlBST1RFQ1QiLDQyMDoiU0NST0xMQkFSLlBST1BFUlRJRVMiLDQyMToiUElWT1QuU0hPVy5QQUdF'@;
put 'UyIsNDIyOiJURVhULlRPLkNPTFVNTlMiLDQyMzoiRk9STUFULkNIQVJUVFlQRSIsNDI0OiJMSU5LLkZPUk1BVCIsNDI1OiJUUkFDRVIuRElTUExBWSIsNDMwOiJUUkFDRVIuTkFWSUdBVEUiLDQzMToiVFJBQ0VSLkNMRUFSIiw0MzI6IlRSQUNFUi5FUlJPUiIsNDMzOiJQSVZPVC5GSUVMRC5H'@;
put 'Uk9VUCIsNDM0OiJQSVZPVC5GSUVMRC5VTkdST1VQIiw0MzU6IkNIRUNLQk9YLlBST1BFUlRJRVMiLDQzNjoiTEFCRUwuUFJPUEVSVElFUyIsNDM3OiJMSVNUQk9YLlBST1BFUlRJRVMiLDQzODoiRURJVEJPWC5QUk9QRVJUSUVTIiw0Mzk6IlBJVk9ULlJFRlJFU0giLDQ0MDoiTElOSy5DT01C'@;
put 'TyIsNDQxOiJPUEVOLlRFWFQiLDQ0MjoiSElERS5ESUFMT0ciLDQ0MzoiU0VULkRJQUxPRy5GT0NVUyIsNDQ0OiJFTkFCTEUuT0JKRUNUIiw0NDU6IlBVU0hCVVRUT04uUFJPUEVSVElFUyIsNDQ2OiJTRVQuRElBTE9HLkRFRkFVTFQiLDQ0NzoiRklMVEVSIiw0NDg6IkZJTFRFUi5TSE9XLkFM'@;
put 'TCIsNDQ5OiJDTEVBUi5PVVRMSU5FIiw0NTA6IkZVTkNUSU9OLldJWkFSRCIsNDUxOiJBREQuTElTVC5JVEVNIiw0NTI6IlNFVC5MSVNULklURU0iLDQ1MzoiUkVNT1ZFLkxJU1QuSVRFTSIsNDU0OiJTRUxFQ1QuTElTVC5JVEVNIiw0NTU6IlNFVC5DT05UUk9MLlZBTFVFIiw0NTY6IlNBVkUu'@;
put 'Q09QWS5BUyIsNDU4OiJPUFRJT05TLkxJU1RTLkFERCIsNDU5OiJPUFRJT05TLkxJU1RTLkRFTEVURSIsNDYwOiJTRVJJRVMuQVhFUyIsNDYxOiJTRVJJRVMuWCIsNDYyOiJTRVJJRVMuWSIsNDYzOiJFUlJPUkJBUi5YIiw0NjQ6IkVSUk9SQkFSLlkiLDQ2NToiRk9STUFULkNIQVJUIiw0NjY6'@;
put 'IlNFUklFUy5PUkRFUiIsNDY3OiJNQUlMLkxPR09GRiIsNDY4OiJDTEVBUi5ST1VUSU5HLlNMSVAiLDQ2OToiQVBQLkFDVElWQVRFLk1JQ1JPU09GVCIsNDcwOiJNQUlMLkVESVQuTUFJTEVSIiw0NzE6Ik9OLlNIRUVUIiw0NzI6IlNUQU5EQVJELldJRFRIIiw0NzM6IlNDRU5BUklPLk1FUkdF'@;
put 'Iiw0NzQ6IlNVTU1BUlkuSU5GTyIsNDc1OiJGSU5ELkZJTEUiLDQ3NjoiQUNUSVZFLkNFTEwuRk9OVCIsNDc3OiJFTkFCTEUuVElQV0laQVJEIiw0Nzg6IlZCQS5NQUtFLkFERElOIiw0ODA6IklOU0VSVERBVEFUQUJMRSIsNDgxOiJXT1JLR1JPVVAuT1BUSU9OUyIsNDgyOiJNQUlMLlNFTkQu'@;
put 'TUFJTEVSIiw0ODU6IkFVVE9DT1JSRUNUIiw0ODk6IlBPU1QuRE9DVU1FTlQiLDQ5MToiUElDS0xJU1QiLDQ5MzoiVklFVy5TSE9XIiw0OTQ6IlZJRVcuREVGSU5FIiw0OTU6IlZJRVcuREVMRVRFIiw1MDk6IlNIRUVULkJBQ0tHUk9VTkQiLDUxMDoiSU5TRVJULk1BUC5PQkpFQ1QiLDUxMToi'@;
put 'T1BUSU9OUy5NRU5PTk8iLDUxNzoiTVNPQ0hFQ0tTIiw1MTg6Ik5PUk1BTCIsNTE5OiJMQVlPVVQiLDUyMDoiUk0uUFJJTlQuQVJFQSIsNTIxOiJDTEVBUi5QUklOVC5BUkVBIiw1MjI6IkFERC5QUklOVC5BUkVBIiw1MjM6Ik1PVkUuQlJLIiw1NDU6IkhJREVDVVJSLk5PVEUiLDU0NjoiSElE'@;
put 'RUFMTC5OT1RFUyIsNTQ3OiJERUxFVEUuTk9URSIsNTQ4OiJUUkFWRVJTRS5OT1RFUyIsNTQ5OiJBQ1RJVkFURS5OT1RFUyIsNjIwOiJQUk9URUNULlJFVklTSU9OUyIsNjIxOiJVTlBST1RFQ1QuUkVWSVNJT05TIiw2NDc6Ik9QVElPTlMuTUUiLDY1MzoiV0VCLlBVQkxJU0giLDY2NzoiTkVX'@;
put 'V0VCUVVFUlkiLDY3MzoiUElWT1QuVEFCTEUuQ0hBUlQiLDc1MzoiT1BUSU9OUy5TQVZFIiw3NTU6Ik9QVElPTlMuU1BFTEwiLDgwODoiSElERUFMTC5JTktBTk5PVFMifSxfdj17MDoiQ09VTlQiLDE6IklGIiwyOiJJU05BIiwzOiJJU0VSUk9SIiw0OiJTVU0iLDU6IkFWRVJBR0UiLDY6Ik1J'@;
put 'TiIsNzoiTUFYIiw4OiJST1ciLDk6IkNPTFVNTiIsMTA6Ik5BIiwxMToiTlBWIiwxMjoiU1RERVYiLDEzOiJET0xMQVIiLDE0OiJGSVhFRCIsMTU6IlNJTiIsMTY6IkNPUyIsMTc6IlRBTiIsMTg6IkFUQU4iLDE5OiJQSSIsMjA6IlNRUlQiLDIxOiJFWFAiLDIyOiJMTiIsMjM6IkxPRzEwIiwy'@;
put 'NDoiQUJTIiwyNToiSU5UIiwyNjoiU0lHTiIsMjc6IlJPVU5EIiwyODoiTE9PS1VQIiwyOToiSU5ERVgiLDMwOiJSRVBUIiwzMToiTUlEIiwzMjoiTEVOIiwzMzoiVkFMVUUiLDM0OiJUUlVFIiwzNToiRkFMU0UiLDM2OiJBTkQiLDM3OiJPUiIsMzg6Ik5PVCIsMzk6Ik1PRCIsNDA6IkRDT1VO'@;
put 'VCIsNDE6IkRTVU0iLDQyOiJEQVZFUkFHRSIsNDM6IkRNSU4iLDQ0OiJETUFYIiw0NToiRFNUREVWIiw0NjoiVkFSIiw0NzoiRFZBUiIsNDg6IlRFWFQiLDQ5OiJMSU5FU1QiLDUwOiJUUkVORCIsNTE6IkxPR0VTVCIsNTI6IkdST1dUSCIsNTM6IkdPVE8iLDU0OiJIQUxUIiw1NToiUkVUVVJO'@;
put 'Iiw1NjoiUFYiLDU3OiJGViIsNTg6Ik5QRVIiLDU5OiJQTVQiLDYwOiJSQVRFIiw2MToiTUlSUiIsNjI6IklSUiIsNjM6IlJBTkQiLDY0OiJNQVRDSCIsNjU6IkRBVEUiLDY2OiJUSU1FIiw2NzoiREFZIiw2ODoiTU9OVEgiLDY5OiJZRUFSIiw3MDoiV0VFS0RBWSIsNzE6IkhPVVIiLDcyOiJN'@;
put 'SU5VVEUiLDczOiJTRUNPTkQiLDc0OiJOT1ciLDc1OiJBUkVBUyIsNzY6IlJPV1MiLDc3OiJDT0xVTU5TIiw3ODoiT0ZGU0VUIiw3OToiQUJTUkVGIiw4MDoiUkVMUkVGIiw4MToiQVJHVU1FTlQiLDgyOiJTRUFSQ0giLDgzOiJUUkFOU1BPU0UiLDg0OiJFUlJPUiIsODU6IlNURVAiLDg2OiJU'@;
put 'WVBFIiw4NzoiRUNITyIsODg6IlNFVC5OQU1FIiw4OToiQ0FMTEVSIiw5MDoiREVSRUYiLDkxOiJXSU5ET1dTIiw5MjoiU0VSSUVTIiw5MzoiRE9DVU1FTlRTIiw5NDoiQUNUSVZFLkNFTEwiLDk1OiJTRUxFQ1RJT04iLDk2OiJSRVNVTFQiLDk3OiJBVEFOMiIsOTg6IkFTSU4iLDk5OiJBQ09T'@;
put 'IiwxMDA6IkNIT09TRSIsMTAxOiJITE9PS1VQIiwxMDI6IlZMT09LVVAiLDEwMzoiTElOS1MiLDEwNDoiSU5QVVQiLDEwNToiSVNSRUYiLDEwNjoiR0VULkZPUk1VTEEiLDEwNzoiR0VULk5BTUUiLDEwODoiU0VULlZBTFVFIiwxMDk6IkxPRyIsMTEwOiJFWEVDIiwxMTE6IkNIQVIiLDExMjoi'@;
put 'TE9XRVIiLDExMzoiVVBQRVIiLDExNDoiUFJPUEVSIiwxMTU6IkxFRlQiLDExNjoiUklHSFQiLDExNzoiRVhBQ1QiLDExODoiVFJJTSIsMTE5OiJSRVBMQUNFIiwxMjA6IlNVQlNUSVRVVEUiLDEyMToiQ09ERSIsMTIyOiJOQU1FUyIsMTIzOiJESVJFQ1RPUlkiLDEyNDoiRklORCIsMTI1OiJD'@;
put 'RUxMIiwxMjY6IklTRVJSIiwxMjc6IklTVEVYVCIsMTI4OiJJU05VTUJFUiIsMTI5OiJJU0JMQU5LIiwxMzA6IlQiLDEzMToiTiIsMTMyOiJGT1BFTiIsMTMzOiJGQ0xPU0UiLDEzNDoiRlNJWkUiLDEzNToiRlJFQURMTiIsMTM2OiJGUkVBRCIsMTM3OiJGV1JJVEVMTiIsMTM4OiJGV1JJVEUi'@;
put 'LDEzOToiRlBPUyIsMTQwOiJEQVRFVkFMVUUiLDE0MToiVElNRVZBTFVFIiwxNDI6IlNMTiIsMTQzOiJTWUQiLDE0NDoiRERCIiwxNDU6IkdFVC5ERUYiLDE0NjoiUkVGVEVYVCIsMTQ3OiJURVhUUkVGIiwxNDg6IklORElSRUNUIiwxNDk6IlJFR0lTVEVSIiwxNTA6IkNBTEwiLDE1MToiQURE'@;
put 'LkJBUiIsMTUyOiJBREQuTUVOVSIsMTUzOiJBREQuQ09NTUFORCIsMTU0OiJFTkFCTEUuQ09NTUFORCIsMTU1OiJDSEVDSy5DT01NQU5EIiwxNTY6IlJFTkFNRS5DT01NQU5EIiwxNTc6IlNIT1cuQkFSIiwxNTg6IkRFTEVURS5NRU5VIiwxNTk6IkRFTEVURS5DT01NQU5EIiwxNjA6IkdFVC5D'@;
put 'SEFSVC5JVEVNIiwxNjE6IkRJQUxPRy5CT1giLDE2MjoiQ0xFQU4iLDE2MzoiTURFVEVSTSIsMTY0OiJNSU5WRVJTRSIsMTY1OiJNTVVMVCIsMTY2OiJGSUxFUyIsMTY3OiJJUE1UIiwxNjg6IlBQTVQiLDE2OToiQ09VTlRBIiwxNzA6IkNBTkNFTC5LRVkiLDE3MToiRk9SIiwxNzI6IldISUxF'@;
put 'IiwxNzM6IkJSRUFLIiwxNzQ6Ik5FWFQiLDE3NToiSU5JVElBVEUiLDE3NjoiUkVRVUVTVCIsMTc3OiJQT0tFIiwxNzg6IkVYRUNVVEUiLDE3OToiVEVSTUlOQVRFIiwxODA6IlJFU1RBUlQiLDE4MToiSEVMUCIsMTgyOiJHRVQuQkFSIiwxODM6IlBST0RVQ1QiLDE4NDoiRkFDVCIsMTg1OiJH'@;
put 'RVQuQ0VMTCIsMTg2OiJHRVQuV09SS1NQQUNFIiwxODc6IkdFVC5XSU5ET1ciLDE4ODoiR0VULkRPQ1VNRU5UIiwxODk6IkRQUk9EVUNUIiwxOTA6IklTTk9OVEVYVCIsMTkxOiJHRVQuTk9URSIsMTkyOiJOT1RFIiwxOTM6IlNUREVWUCIsMTk0OiJWQVJQIiwxOTU6IkRTVERFVlAiLDE5Njoi'@;
put 'RFZBUlAiLDE5NzoiVFJVTkMiLDE5ODoiSVNMT0dJQ0FMIiwxOTk6IkRDT1VOVEEiLDIwMDoiREVMRVRFLkJBUiIsMjAxOiJVTlJFR0lTVEVSIiwyMDQ6IlVTRE9MTEFSIiwyMDU6IkZJTkRCIiwyMDY6IlNFQVJDSEIiLDIwNzoiUkVQTEFDRUIiLDIwODoiTEVGVEIiLDIwOToiUklHSFRCIiwy'@;
put 'MTA6Ik1JREIiLDIxMToiTEVOQiIsMjEyOiJST1VORFVQIiwyMTM6IlJPVU5ERE9XTiIsMjE0OiJBU0MiLDIxNToiREJDUyIsMjE2OiJSQU5LIiwyMTk6IkFERFJFU1MiLDIyMDoiREFZUzM2MCIsMjIxOiJUT0RBWSIsMjIyOiJWREIiLDIyMzoiRUxTRSIsMjI0OiJFTFNFLklGIiwyMjU6IkVO'@;
put 'RC5JRiIsMjI2OiJGT1IuQ0VMTCIsMjI3OiJNRURJQU4iLDIyODoiU1VNUFJPRFVDVCIsMjI5OiJTSU5IIiwyMzA6IkNPU0giLDIzMToiVEFOSCIsMjMyOiJBU0lOSCIsMjMzOiJBQ09TSCIsMjM0OiJBVEFOSCIsMjM1OiJER0VUIiwyMzY6IkNSRUFURS5PQkpFQ1QiLDIzNzoiVk9MQVRJTEUi'@;
put 'LDIzODoiTEFTVC5FUlJPUiIsMjM5OiJDVVNUT00uVU5ETyIsMjQwOiJDVVNUT00uUkVQRUFUIiwyNDE6IkZPUk1VTEEuQ09OVkVSVCIsMjQyOiJHRVQuTElOSy5JTkZPIiwyNDM6IlRFWFQuQk9YIiwyNDQ6IklORk8iLDI0NToiR1JPVVAiLDI0NjoiR0VULk9CSkVDVCIsMjQ3OiJEQiIsMjQ4'@;
put 'OiJQQVVTRSIsMjUxOiJSRVNVTUUiLDI1MjoiRlJFUVVFTkNZIiwyNTM6IkFERC5UT09MQkFSIiwyNTQ6IkRFTEVURS5UT09MQkFSIiwyNTU6IlVzZXIiLDI1NjoiUkVTRVQuVE9PTEJBUiIsMjU3OiJFVkFMVUFURSIsMjU4OiJHRVQuVE9PTEJBUiIsMjU5OiJHRVQuVE9PTCIsMjYwOiJTUEVM'@;
put 'TElORy5DSEVDSyIsMjYxOiJFUlJPUi5UWVBFIiwyNjI6IkFQUC5USVRMRSIsMjYzOiJXSU5ET1cuVElUTEUiLDI2NDoiU0FWRS5UT09MQkFSIiwyNjU6IkVOQUJMRS5UT09MIiwyNjY6IlBSRVNTLlRPT0wiLDI2NzoiUkVHSVNURVIuSUQiLDI2ODoiR0VULldPUktCT09LIiwyNjk6IkFWRURF'@;
put 'ViIsMjcwOiJCRVRBRElTVCIsMjcxOiJHQU1NQUxOIiwyNzI6IkJFVEFJTlYiLDI3MzoiQklOT01ESVNUIiwyNzQ6IkNISURJU1QiLDI3NToiQ0hJSU5WIiwyNzY6IkNPTUJJTiIsMjc3OiJDT05GSURFTkNFIiwyNzg6IkNSSVRCSU5PTSIsMjc5OiJFVkVOIiwyODA6IkVYUE9ORElTVCIsMjgx'@;
put 'OiJGRElTVCIsMjgyOiJGSU5WIiwyODM6IkZJU0hFUiIsMjg0OiJGSVNIRVJJTlYiLDI4NToiRkxPT1IiLDI4NjoiR0FNTUFESVNUIiwyODc6IkdBTU1BSU5WIiwyODg6IkNFSUxJTkciLDI4OToiSFlQR0VPTURJU1QiLDI5MDoiTE9HTk9STURJU1QiLDI5MToiTE9HSU5WIiwyOTI6Ik5FR0JJ'@;
put 'Tk9NRElTVCIsMjkzOiJOT1JNRElTVCIsMjk0OiJOT1JNU0RJU1QiLDI5NToiTk9STUlOViIsMjk2OiJOT1JNU0lOViIsMjk3OiJTVEFOREFSRElaRSIsMjk4OiJPREQiLDI5OToiUEVSTVVUIiwzMDA6IlBPSVNTT04iLDMwMToiVERJU1QiLDMwMjoiV0VJQlVMTCIsMzAzOiJTVU1YTVkyIiwz'@;
put 'MDQ6IlNVTVgyTVkyIiwzMDU6IlNVTVgyUFkyIiwzMDY6IkNISVRFU1QiLDMwNzoiQ09SUkVMIiwzMDg6IkNPVkFSIiwzMDk6IkZPUkVDQVNUIiwzMTA6IkZURVNUIiwzMTE6IklOVEVSQ0VQVCIsMzEyOiJQRUFSU09OIiwzMTM6IlJTUSIsMzE0OiJTVEVZWCIsMzE1OiJTTE9QRSIsMzE2OiJU'@;
put 'VEVTVCIsMzE3OiJQUk9CIiwzMTg6IkRFVlNRIiwzMTk6IkdFT01FQU4iLDMyMDoiSEFSTUVBTiIsMzIxOiJTVU1TUSIsMzIyOiJLVVJUIiwzMjM6IlNLRVciLDMyNDoiWlRFU1QiLDMyNToiTEFSR0UiLDMyNjoiU01BTEwiLDMyNzoiUVVBUlRJTEUiLDMyODoiUEVSQ0VOVElMRSIsMzI5OiJQ'@;
put 'RVJDRU5UUkFOSyIsMzMwOiJNT0RFIiwzMzE6IlRSSU1NRUFOIiwzMzI6IlRJTlYiLDMzNDoiTU9WSUUuQ09NTUFORCIsMzM1OiJHRVQuTU9WSUUiLDMzNjoiQ09OQ0FURU5BVEUiLDMzNzoiUE9XRVIiLDMzODoiUElWT1QuQURELkRBVEEiLDMzOToiR0VULlBJVk9ULlRBQkxFIiwzNDA6IkdF'@;
put 'VC5QSVZPVC5GSUVMRCIsMzQxOiJHRVQuUElWT1QuSVRFTSIsMzQyOiJSQURJQU5TIiwzNDM6IkRFR1JFRVMiLDM0NDoiU1VCVE9UQUwiLDM0NToiU1VNSUYiLDM0NjoiQ09VTlRJRiIsMzQ3OiJDT1VOVEJMQU5LIiwzNDg6IlNDRU5BUklPLkdFVCIsMzQ5OiJPUFRJT05TLkxJU1RTLkdFVCIs'@;
put 'MzUwOiJJU1BNVCIsMzUxOiJEQVRFRElGIiwzNTI6IkRBVEVTVFJJTkciLDM1MzoiTlVNQkVSU1RSSU5HIiwzNTQ6IlJPTUFOIiwzNTU6Ik9QRU4uRElBTE9HIiwzNTY6IlNBVkUuRElBTE9HIiwzNTc6IlZJRVcuR0VUIiwzNTg6IkdFVFBJVk9UREFUQSIsMzU5OiJIWVBFUkxJTksiLDM2MDoi'@;
put 'UEhPTkVUSUMiLDM2MToiQVZFUkFHRUEiLDM2MjoiTUFYQSIsMzYzOiJNSU5BIiwzNjQ6IlNUREVWUEEiLDM2NToiVkFSUEEiLDM2NjoiU1RERVZBIiwzNjc6IlZBUkEiLDM2ODoiQkFIVFRFWFQiLDM2OToiVEhBSURBWU9GV0VFSyIsMzcwOiJUSEFJRElHSVQiLDM3MToiVEhBSU1PTlRIT0ZZ'@;
put 'RUFSIiwzNzI6IlRIQUlOVU1TT1VORCIsMzczOiJUSEFJTlVNU1RSSU5HIiwzNzQ6IlRIQUlTVFJJTkdMRU5HVEgiLDM3NToiSVNUSEFJRElHSVQiLDM3NjoiUk9VTkRCQUhURE9XTiIsMzc3OiJST1VOREJBSFRVUCIsMzc4OiJUSEFJWUVBUiIsMzc5OiJSVEQiLDM4MDoiQ1VCRVZBTFVFIiwz'@;
put 'ODE6IkNVQkVNRU1CRVIiLDM4MjoiQ1VCRU1FTUJFUlBST1BFUlRZIiwzODM6IkNVQkVSQU5LRURNRU1CRVIiLDM4NDoiSEVYMkJJTiIsMzg1OiJIRVgyREVDIiwzODY6IkhFWDJPQ1QiLDM4NzoiREVDMkJJTiIsMzg4OiJERUMySEVYIiwzODk6IkRFQzJPQ1QiLDM5MDoiT0NUMkJJTiIsMzkx'@;
put 'OiJPQ1QySEVYIiwzOTI6Ik9DVDJERUMiLDM5MzoiQklOMkRFQyIsMzk0OiJCSU4yT0NUIiwzOTU6IkJJTjJIRVgiLDM5NjoiSU1TVUIiLDM5NzoiSU1ESVYiLDM5ODoiSU1QT1dFUiIsMzk5OiJJTUFCUyIsNDAwOiJJTVNRUlQiLDQwMToiSU1MTiIsNDAyOiJJTUxPRzIiLDQwMzoiSU1MT0cx'@;
put 'MCIsNDA0OiJJTVNJTiIsNDA1OiJJTUNPUyIsNDA2OiJJTUVYUCIsNDA3OiJJTUFSR1VNRU5UIiw0MDg6IklNQ09OSlVHQVRFIiw0MDk6IklNQUdJTkFSWSIsNDEwOiJJTVJFQUwiLDQxMToiQ09NUExFWCIsNDEyOiJJTVNVTSIsNDEzOiJJTVBST0RVQ1QiLDQxNDoiU0VSSUVTU1VNIiw0MTU6'@;
put 'IkZBQ1RET1VCTEUiLDQxNjoiU1FSVFBJIiw0MTc6IlFVT1RJRU5UIiw0MTg6IkRFTFRBIiw0MTk6IkdFU1RFUCIsNDIwOiJJU0VWRU4iLDQyMToiSVNPREQiLDQyMjoiTVJPVU5EIiw0MjM6IkVSRiIsNDI0OiJFUkZDIiw0MjU6IkJFU1NFTEoiLDQyNjoiQkVTU0VMSyIsNDI3OiJCRVNTRUxZ'@;
put 'Iiw0Mjg6IkJFU1NFTEkiLDQyOToiWElSUiIsNDMwOiJYTlBWIiw0MzE6IlBSSUNFTUFUIiw0MzI6IllJRUxETUFUIiw0MzM6IklOVFJBVEUiLDQzNDoiUkVDRUlWRUQiLDQzNToiRElTQyIsNDM2OiJQUklDRURJU0MiLDQzNzoiWUlFTERESVNDIiw0Mzg6IlRCSUxMRVEiLDQzOToiVEJJTExQ'@;
put 'UklDRSIsNDQwOiJUQklMTFlJRUxEIiw0NDE6IlBSSUNFIiw0NDI6IllJRUxEIiw0NDM6IkRPTExBUkRFIiw0NDQ6IkRPTExBUkZSIiw0NDU6Ik5PTUlOQUwiLDQ0NjoiRUZGRUNUIiw0NDc6IkNVTVBSSU5DIiw0NDg6IkNVTUlQTVQiLDQ0OToiRURBVEUiLDQ1MDoiRU9NT05USCIsNDUxOiJZ'@;
put 'RUFSRlJBQyIsNDUyOiJDT1VQREFZQlMiLDQ1MzoiQ09VUERBWVMiLDQ1NDoiQ09VUERBWVNOQyIsNDU1OiJDT1VQTkNEIiw0NTY6IkNPVVBOVU0iLDQ1NzoiQ09VUFBDRCIsNDU4OiJEVVJBVElPTiIsNDU5OiJNRFVSQVRJT04iLDQ2MDoiT0RETFBSSUNFIiw0NjE6Ik9ERExZSUVMRCIsNDYy'@;
put 'OiJPRERGUFJJQ0UiLDQ2MzoiT0RERllJRUxEIiw0NjQ6IlJBTkRCRVRXRUVOIiw0NjU6IldFRUtOVU0iLDQ2NjoiQU1PUkRFR1JDIiw0Njc6IkFNT1JMSU5DIiw0Njg6IkNPTlZFUlQiLDcyNDoiU0hFRVRKUyIsNDY5OiJBQ0NSSU5UIiw0NzA6IkFDQ1JJTlRNIiw0NzE6IldPUktEQVkiLDQ3'@;
put 'MjoiTkVUV09SS0RBWVMiLDQ3MzoiR0NEIiw0NzQ6Ik1VTFRJTk9NSUFMIiw0NzU6IkxDTSIsNDc2OiJGVlNDSEVEVUxFIiw0Nzc6IkNVQkVLUElNRU1CRVIiLDQ3ODoiQ1VCRVNFVCIsNDc5OiJDVUJFU0VUQ09VTlQiLDQ4MDoiSUZFUlJPUiIsNDgxOiJDT1VOVElGUyIsNDgyOiJTVU1JRlMi'@;
put 'LDQ4MzoiQVZFUkFHRUlGIiw0ODQ6IkFWRVJBR0VJRlMifSxidj17MjoxLDM6MSwxMDowLDE1OjEsMTY6MSwxNzoxLDE4OjEsMTk6MCwyMDoxLDIxOjEsMjI6MSwyMzoxLDI0OjEsMjU6MSwyNjoxLDI3OjIsMzA6MiwzMTozLDMyOjEsMzM6MSwzNDowLDM1OjAsMzg6MSwzOToyLDQwOjMsNDE6'@;
put 'Myw0MjozLDQzOjMsNDQ6Myw0NTozLDQ3OjMsNDg6Miw1MzoxLDYxOjMsNjM6MCw2NTozLDY2OjMsNjc6MSw2ODoxLDY5OjEsNzA6MSw3MToxLDcyOjEsNzM6MSw3NDowLDc1OjEsNzY6MSw3NzoxLDc5OjIsODA6Miw4MzoxLDg1OjAsODY6MSw4OTowLDkwOjEsOTQ6MCw5NTowLDk3OjIsOTg6'@;
put 'MSw5OToxLDEwMTozLDEwMjozLDEwNToxLDEwNjoxLDEwODoyLDExMToxLDExMjoxLDExMzoxLDExNDoxLDExNzoyLDExODoxLDExOTo0LDEyMToxLDEyNjoxLDEyNzoxLDEyODoxLDEyOToxLDEzMDoxLDEzMToxLDEzMzoxLDEzNDoxLDEzNToxLDEzNjoyLDEzNzoyLDEzODoyLDE0MDoxLDE0'@;
put 'MToxLDE0MjozLDE0Mzo0LDE0NDo0LDE2MToxLDE2MjoxLDE2MzoxLDE2NDoxLDE2NToyLDE3MjoxLDE3NToyLDE3NjoyLDE3NzozLDE3ODoyLDE3OToxLDE4NDoxLDE4NjoxLDE4OTozLDE5MDoxLDE5NTozLDE5NjozLDE5NzoxLDE5ODoxLDE5OTozLDIwMToxLDIwNzo0LDIxMDozLDIxMTox'@;
put 'LDIxMjoyLDIxMzoyLDIxNDoxLDIxNToxLDIyNTowLDIyOToxLDIzMDoxLDIzMToxLDIzMjoxLDIzMzoxLDIzNDoxLDIzNTozLDI0NDoxLDI0Nzo0LDI1MjoyLDI1NzoxLDI2MToxLDI3MToxLDI3Mzo0LDI3NDoyLDI3NToyLDI3NjoyLDI3NzozLDI3ODozLDI3OToxLDI4MDozLDI4MTozLDI4'@;
put 'MjozLDI4MzoxLDI4NDoxLDI4NToyLDI4Njo0LDI4NzozLDI4ODoyLDI4OTo0LDI5MDozLDI5MTozLDI5MjozLDI5Mzo0LDI5NDoxLDI5NTozLDI5NjoxLDI5NzozLDI5ODoxLDI5OToyLDMwMDozLDMwMTozLDMwMjo0LDMwMzoyLDMwNDoyLDMwNToyLDMwNjoyLDMwNzoyLDMwODoyLDMwOToz'@;
put 'LDMxMDoyLDMxMToyLDMxMjoyLDMxMzoyLDMxNDoyLDMxNToyLDMxNjo0LDMyNToyLDMyNjoyLDMyNzoyLDMyODoyLDMzMToyLDMzMjoyLDMzNzoyLDM0MjoxLDM0MzoxLDM0NjoyLDM0NzoxLDM1MDo0LDM1MTozLDM1MjoxLDM1MzoyLDM2MDoxLDM2ODoxLDM2OToxLDM3MDoxLDM3MToxLDM3'@;
put 'MjoxLDM3MzoxLDM3NDoxLDM3NToxLDM3NjoxLDM3NzoxLDM3ODoxLDM4MjozLDM4NToxLDM5MjoxLDM5MzoxLDM5NjoyLDM5NzoyLDM5ODoyLDM5OToxLDQwMDoxLDQwMToxLDQwMjoxLDQwMzoxLDQwNDoxLDQwNToxLDQwNjoxLDQwNzoxLDQwODoxLDQwOToxLDQxMDoxLDQxNDo0LDQxNTox'@;
put 'LDQxNjoxLDQxNzoyLDQyMDoxLDQyMToxLDQyMjoyLDQyNDoxLDQyNToyLDQyNjoyLDQyNzoyLDQyODoyLDQzMDozLDQzODozLDQzOTozLDQ0MDozLDQ0MzoyLDQ0NDoyLDQ0NToyLDQ0NjoyLDQ0Nzo2LDQ0ODo2LDQ0OToyLDQ1MDoyLDQ2NDoyLDQ2ODozLDQ3NjoyLDQ3OToxLDQ4MDoyLDY1'@;
put 'NTM1OjB9LG81PXsiX3hsZm4uQUNPVCI6IkFDT1QiLCJfeGxmbi5BQ09USCI6IkFDT1RIIiwiX3hsZm4uQUdHUkVHQVRFIjoiQUdHUkVHQVRFIiwiX3hsZm4uQVJBQklDIjoiQVJBQklDIiwiX3hsZm4uQVZFUkFHRUlGIjoiQVZFUkFHRUlGIiwiX3hsZm4uQVZFUkFHRUlGUyI6IkFWRVJBR0VJ'@;
put 'RlMiLCJfeGxmbi5CQVNFIjoiQkFTRSIsIl94bGZuLkJFVEEuRElTVCI6IkJFVEEuRElTVCIsIl94bGZuLkJFVEEuSU5WIjoiQkVUQS5JTlYiLCJfeGxmbi5CSU5PTS5ESVNUIjoiQklOT00uRElTVCIsIl94bGZuLkJJTk9NLkRJU1QuUkFOR0UiOiJCSU5PTS5ESVNULlJBTkdFIiwiX3hsZm4u'@;
put 'QklOT00uSU5WIjoiQklOT00uSU5WIiwiX3hsZm4uQklUQU5EIjoiQklUQU5EIiwiX3hsZm4uQklUTFNISUZUIjoiQklUTFNISUZUIiwiX3hsZm4uQklUT1IiOiJCSVRPUiIsIl94bGZuLkJJVFJTSElGVCI6IkJJVFJTSElGVCIsIl94bGZuLkJJVFhPUiI6IkJJVFhPUiIsIl94bGZuLkNFSUxJ'@;
put 'TkcuTUFUSCI6IkNFSUxJTkcuTUFUSCIsIl94bGZuLkNFSUxJTkcuUFJFQ0lTRSI6IkNFSUxJTkcuUFJFQ0lTRSIsIl94bGZuLkNISVNRLkRJU1QiOiJDSElTUS5ESVNUIiwiX3hsZm4uQ0hJU1EuRElTVC5SVCI6IkNISVNRLkRJU1QuUlQiLCJfeGxmbi5DSElTUS5JTlYiOiJDSElTUS5JTlYi'@;
put 'LCJfeGxmbi5DSElTUS5JTlYuUlQiOiJDSElTUS5JTlYuUlQiLCJfeGxmbi5DSElTUS5URVNUIjoiQ0hJU1EuVEVTVCIsIl94bGZuLkNPTUJJTkEiOiJDT01CSU5BIiwiX3hsZm4uQ09OQ0FUIjoiQ09OQ0FUIiwiX3hsZm4uQ09ORklERU5DRS5OT1JNIjoiQ09ORklERU5DRS5OT1JNIiwiX3hs'@;
put 'Zm4uQ09ORklERU5DRS5UIjoiQ09ORklERU5DRS5UIiwiX3hsZm4uQ09UIjoiQ09UIiwiX3hsZm4uQ09USCI6IkNPVEgiLCJfeGxmbi5DT1VOVElGUyI6IkNPVU5USUZTIiwiX3hsZm4uQ09WQVJJQU5DRS5QIjoiQ09WQVJJQU5DRS5QIiwiX3hsZm4uQ09WQVJJQU5DRS5TIjoiQ09WQVJJQU5D'@;
put 'RS5TIiwiX3hsZm4uQ1NDIjoiQ1NDIiwiX3hsZm4uQ1NDSCI6IkNTQ0giLCJfeGxmbi5EQVlTIjoiREFZUyIsIl94bGZuLkRFQ0lNQUwiOiJERUNJTUFMIiwiX3hsZm4uRUNNQS5DRUlMSU5HIjoiRUNNQS5DRUlMSU5HIiwiX3hsZm4uRVJGLlBSRUNJU0UiOiJFUkYuUFJFQ0lTRSIsIl94bGZu'@;
put 'LkVSRkMuUFJFQ0lTRSI6IkVSRkMuUFJFQ0lTRSIsIl94bGZuLkVYUE9OLkRJU1QiOiJFWFBPTi5ESVNUIiwiX3hsZm4uRi5ESVNUIjoiRi5ESVNUIiwiX3hsZm4uRi5ESVNULlJUIjoiRi5ESVNULlJUIiwiX3hsZm4uRi5JTlYiOiJGLklOViIsIl94bGZuLkYuSU5WLlJUIjoiRi5JTlYuUlQi'@;
put 'LCJfeGxmbi5GLlRFU1QiOiJGLlRFU1QiLCJfeGxmbi5GSUxURVJYTUwiOiJGSUxURVJYTUwiLCJfeGxmbi5GTE9PUi5NQVRIIjoiRkxPT1IuTUFUSCIsIl94bGZuLkZMT09SLlBSRUNJU0UiOiJGTE9PUi5QUkVDSVNFIiwiX3hsZm4uRk9SRUNBU1QuRVRTIjoiRk9SRUNBU1QuRVRTIiwiX3hs'@;
put 'Zm4uRk9SRUNBU1QuRVRTLkNPTkZJTlQiOiJGT1JFQ0FTVC5FVFMuQ09ORklOVCIsIl94bGZuLkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSI6IkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSIsIl94bGZuLkZPUkVDQVNULkVUUy5TVEFUIjoiRk9SRUNBU1QuRVRTLlNUQVQiLCJfeGxmbi5GT1JF'@;
put 'Q0FTVC5MSU5FQVIiOiJGT1JFQ0FTVC5MSU5FQVIiLCJfeGxmbi5GT1JNVUxBVEVYVCI6IkZPUk1VTEFURVhUIiwiX3hsZm4uR0FNTUEiOiJHQU1NQSIsIl94bGZuLkdBTU1BLkRJU1QiOiJHQU1NQS5ESVNUIiwiX3hsZm4uR0FNTUEuSU5WIjoiR0FNTUEuSU5WIiwiX3hsZm4uR0FNTUFMTi5Q'@;
put 'UkVDSVNFIjoiR0FNTUFMTi5QUkVDSVNFIiwiX3hsZm4uR0FVU1MiOiJHQVVTUyIsIl94bGZuLkhZUEdFT00uRElTVCI6IkhZUEdFT00uRElTVCIsIl94bGZuLklGRVJST1IiOiJJRkVSUk9SIiwiX3hsZm4uSUZOQSI6IklGTkEiLCJfeGxmbi5JRlMiOiJJRlMiLCJfeGxmbi5JTUNPU0giOiJJ'@;
put 'TUNPU0giLCJfeGxmbi5JTUNPVCI6IklNQ09UIiwiX3hsZm4uSU1DU0MiOiJJTUNTQyIsIl94bGZuLklNQ1NDSCI6IklNQ1NDSCIsIl94bGZuLklNU0VDIjoiSU1TRUMiLCJfeGxmbi5JTVNFQ0giOiJJTVNFQ0giLCJfeGxmbi5JTVNJTkgiOiJJTVNJTkgiLCJfeGxmbi5JTVRBTiI6IklNVEFO'@;
put 'IiwiX3hsZm4uSVNGT1JNVUxBIjoiSVNGT1JNVUxBIiwiX3hsZm4uSVNPLkNFSUxJTkciOiJJU08uQ0VJTElORyIsIl94bGZuLklTT1dFRUtOVU0iOiJJU09XRUVLTlVNIiwiX3hsZm4uTE9HTk9STS5ESVNUIjoiTE9HTk9STS5ESVNUIiwiX3hsZm4uTE9HTk9STS5JTlYiOiJMT0dOT1JNLklO'@;
put 'ViIsIl94bGZuLk1BWElGUyI6Ik1BWElGUyIsIl94bGZuLk1JTklGUyI6Ik1JTklGUyIsIl94bGZuLk1PREUuTVVMVCI6Ik1PREUuTVVMVCIsIl94bGZuLk1PREUuU05HTCI6Ik1PREUuU05HTCIsIl94bGZuLk1VTklUIjoiTVVOSVQiLCJfeGxmbi5ORUdCSU5PTS5ESVNUIjoiTkVHQklOT00u'@;
put 'RElTVCIsIl94bGZuLk5FVFdPUktEQVlTLklOVEwiOiJORVRXT1JLREFZUy5JTlRMIiwiX3hsZm4uTklHQklOT00iOiJOSUdCSU5PTSIsIl94bGZuLk5PUk0uRElTVCI6Ik5PUk0uRElTVCIsIl94bGZuLk5PUk0uSU5WIjoiTk9STS5JTlYiLCJfeGxmbi5OT1JNLlMuRElTVCI6Ik5PUk0uUy5E'@;
put 'SVNUIiwiX3hsZm4uTk9STS5TLklOViI6Ik5PUk0uUy5JTlYiLCJfeGxmbi5OVU1CRVJWQUxVRSI6Ik5VTUJFUlZBTFVFIiwiX3hsZm4uUERVUkFUSU9OIjoiUERVUkFUSU9OIiwiX3hsZm4uUEVSQ0VOVElMRS5FWEMiOiJQRVJDRU5USUxFLkVYQyIsIl94bGZuLlBFUkNFTlRJTEUuSU5DIjoi'@;
put 'UEVSQ0VOVElMRS5JTkMiLCJfeGxmbi5QRVJDRU5UUkFOSy5FWEMiOiJQRVJDRU5UUkFOSy5FWEMiLCJfeGxmbi5QRVJDRU5UUkFOSy5JTkMiOiJQRVJDRU5UUkFOSy5JTkMiLCJfeGxmbi5QRVJNVVRBVElPTkEiOiJQRVJNVVRBVElPTkEiLCJfeGxmbi5QSEkiOiJQSEkiLCJfeGxmbi5QT0lT'@;
put 'U09OLkRJU1QiOiJQT0lTU09OLkRJU1QiLCJfeGxmbi5RVUFSVElMRS5FWEMiOiJRVUFSVElMRS5FWEMiLCJfeGxmbi5RVUFSVElMRS5JTkMiOiJRVUFSVElMRS5JTkMiLCJfeGxmbi5RVUVSWVNUUklORyI6IlFVRVJZU1RSSU5HIiwiX3hsZm4uUkFOSy5BVkciOiJSQU5LLkFWRyIsIl94bGZu'@;
put 'LlJBTksuRVEiOiJSQU5LLkVRIiwiX3hsZm4uUlJJIjoiUlJJIiwiX3hsZm4uU0VDIjoiU0VDIiwiX3hsZm4uU0VDSCI6IlNFQ0giLCJfeGxmbi5TSEVFVCI6IlNIRUVUIiwiX3hsZm4uU0hFRVRTIjoiU0hFRVRTIiwiX3hsZm4uU0tFVy5QIjoiU0tFVy5QIiwiX3hsZm4uU1RERVYuUCI6IlNU'@;
put 'REVWLlAiLCJfeGxmbi5TVERFVi5TIjoiU1RERVYuUyIsIl94bGZuLlNVTUlGUyI6IlNVTUlGUyIsIl94bGZuLlNXSVRDSCI6IlNXSVRDSCIsIl94bGZuLlQuRElTVCI6IlQuRElTVCIsIl94bGZuLlQuRElTVC4yVCI6IlQuRElTVC4yVCIsIl94bGZuLlQuRElTVC5SVCI6IlQuRElTVC5SVCIs'@;
put 'Il94bGZuLlQuSU5WIjoiVC5JTlYiLCJfeGxmbi5ULklOVi4yVCI6IlQuSU5WLjJUIiwiX3hsZm4uVC5URVNUIjoiVC5URVNUIiwiX3hsZm4uVEVYVEpPSU4iOiJURVhUSk9JTiIsIl94bGZuLlVOSUNIQVIiOiJVTklDSEFSIiwiX3hsZm4uVU5JQ09ERSI6IlVOSUNPREUiLCJfeGxmbi5WQVIu'@;
put 'UCI6IlZBUi5QIiwiX3hsZm4uVkFSLlMiOiJWQVIuUyIsIl94bGZuLldFQlNFUlZJQ0UiOiJXRUJTRVJWSUNFIiwiX3hsZm4uV0VJQlVMTC5ESVNUIjoiV0VJQlVMTC5ESVNUIiwiX3hsZm4uV09SS0RBWS5JTlRMIjoiV09SS0RBWS5JTlRMIiwiX3hsZm4uWE9SIjoiWE9SIiwiX3hsZm4uWi5U'@;
put 'RVNUIjoiWi5URVNUIn07ZnVuY3Rpb24gbFMoeSl7cmV0dXJuIm9mOiI9PXkuc2xpY2UoMCwzKSYmKHk9eS5zbGljZSgzKSksNjE9PXkuY2hhckNvZGVBdCgwKSYmNjE9PSh5PXkuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkmJih5PXkuc2xpY2UoMSkpLCh5PSh5PSh5PXkucmVwbGFjZSgvQ09N'@;
put 'XC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbihQLEkpe3JldHVybiBJLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxhY2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNl'@;
put 'KC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gY1MoeSl7cmV0dXJuKCJvZjo9Iit5LnJlcGxhY2UocTksIiQxWy4kMiQzJDQkNV0iKS5yZXBsYWNlKC9cXTpcWy9nLCI6IikpLnJlcGxhY2UoLzsvZywifCIpLnJlcGxhY2UoLywvZywiOyIpfWZ1bmN0aW9uIHl2KHkp'@;
put 'e3ZhciBQPXkuc3BsaXQoIjoiKTtyZXR1cm5bUFswXS5zcGxpdCgiLiIpWzBdLFBbMF0uc3BsaXQoIi4iKVsxXSsoUC5sZW5ndGg+MT8iOiIrKFBbMV0uc3BsaXQoIi4iKVsxXXx8UFsxXS5zcGxpdCgiLiIpWzBdKToiIildfWZ1bmN0aW9uIHVTKHkpe3JldHVybiB5LnJlcGxhY2UoL1wuLywi'@;
put 'ISIpfXZhciBmNj17fSxaMz17fTtIaS5XUz1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93'@;
put 'b3Jrc2hlZXQiXTt2YXIgSzA9dHlwZW9mIE1hcDwidSI7ZnVuY3Rpb24gd3YoeSxQLEksUSl7dmFyIHJlPTAsZ2U9eS5sZW5ndGg7aWYoUSl7aWYoSzA/US5oYXMoUCk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFEsUCkpZm9yKHZhciBfZT1LMD9RLmdldChQKTpRW1Bd'@;
put 'O3JlPF9lLmxlbmd0aDsrK3JlKWlmKHlbX2VbcmVdXS50PT09UCYmKCF5W19lW3JlXV0uciYmIUl8fHlbX2VbcmVdXS5yPT1JKSlyZXR1cm4geS5Db3VudCsrLF9lW3JlXX1lbHNlIGZvcig7cmU8Z2U7KytyZSlpZih5W3JlXS50PT09UCYmKCF5W3JlXS5yJiYhSXx8eVtyZV0ucj09SSkpcmV0'@;
put 'dXJuIHkuQ291bnQrKyxyZTtyZXR1cm4geVtnZV09e3Q6UCxyOkl9LHkuQ291bnQrKyx5LlVuaXF1ZSsrLFEmJihLMD8oUS5oYXMoUCl8fFEuc2V0KFAsW10pLFEuZ2V0KFApLnB1c2goZ2UpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFEsUCl8fChRW1BdPVtdKSxR'@;
put 'W1BdLnB1c2goZ2UpKSksZ2V9ZnVuY3Rpb24gWWQoeSxQKXt2YXIgST17bWluOnkrMSxtYXg6eSsxfSxRPXBsO2lmKCFQKXJldHVybiBQO3ZhciByZT0tMTtyZXR1cm4gUC5hdXRvJiYoSS5iZXN0Rml0PTEsUC5iZXN0d2lkdGgmJihyZT1QLmJlc3R3aWR0aCksZGVsZXRlIFAuYmVzdHdpZHRo'@;
put 'KSxudWxsIT1QLndweD9yZT10ZihQLndweCk6bnVsbCE9UC53Y2g/cmU9UC53Y2g6bnVsbCE9UC53aWR0aCYmKEkuY3VzdG9tV2lkdGg9MSkscmU+LTE/KEkud2lkdGg9amQocmUpLEkuY3VzdG9tV2lkdGg9MSk6bnVsbCE9UC53aWR0aCYmKEkud2lkdGg9UC53aWR0aCksUC5oaWRkZW4mJihJ'@;
put 'LmhpZGRlbj0hMCksSS5iZXN0Rml0JiZkZWxldGUgSS5jdXN0b21XaWR0aCxwbD1RLG51bGwhPVAubGV2ZWwmJihJLm91dGxpbmVMZXZlbD1JLmxldmVsPVAubGV2ZWwpLG51bGwhPVAuc3R5bGUmJihJLnN0eWxlPVAuc3R5bGUpLEl9ZnVuY3Rpb24gTmkoeSxQLEkpe3ZhciBRPVdzKHlbIiFy'@;
put 'ZWYiXSkscmU9MCxnZT15WyIhbWVyZ2VzIl18fFtdLF9lPUFycmF5LmlzQXJyYXkoeSk7ZTpmb3IodmFyIHZlPTA7dmU8PVEuZS5yOysrdmUpe2Zvcih2YXIgU2U9MDtTZTxnZS5sZW5ndGg7KytTZSlpZihnZVtTZV0ucy5yPD12ZSYmdmU8PWdlW1NlXS5lLnImJmdlW1NlXS5zLmM8PUkmJkk8'@;
put 'PWdlW1NlXS5lLmMpY29udGludWUgZTt2YXIgSGU9X2U/KHlbdmVdfHxbXSlbSV06eVtkaSh7cjp2ZSxjOkl9KV07aWYoSGUpe3ZhciBCZT0xO2lmKEhlLnMmJihCZT1WbShIZS5zKS9ObS5DYWxpYnJpWzEyXXx8MSksSGUudylyZT1NYXRoLm1heChyZSxIZS53Lmxlbmd0aCpCZSk7ZWxzZSBz'@;
put 'd2l0Y2goSGUudCl7Y2FzZSJiIjpjYXNlImUiOnJlPU1hdGgubWF4KHJlLDUqQmUpO2JyZWFrO2Nhc2UicyI6cmU9TWF0aC5tYXgocmUsSGUudi5sZW5ndGgqQmUqMS4yfDApO2JyZWFrO2Nhc2UibiI6cm0oSGUsSGUudikscmU9TWF0aC5tYXgocmUsU3RyaW5nKEhlLnd8fEhlLnYpLmxlbmd0'@;
put 'aCpCZSk7YnJlYWs7Y2FzZSJkIjpyZT1NYXRoLm1heChyZSw4KkJlKX19fXJlPDEmJihyZT0xKSxQLmJlc3R3aWR0aD1yZX1mdW5jdGlvbiBkZih5LFApe2lmKHkpe3ZhciBJPVsuNywuNywuNzUsLjc1LC4zLC4zXTsieGxtbCI9PVAmJihJPVsxLDEsMSwxLC41LC41XSksbnVsbD09eS5sZWZ0'@;
put 'JiYoeS5sZWZ0PUlbMF0pLG51bGw9PXkucmlnaHQmJih5LnJpZ2h0PUlbMV0pLG51bGw9PXkudG9wJiYoeS50b3A9SVsyXSksbnVsbD09eS5ib3R0b20mJih5LmJvdHRvbT1JWzNdKSxudWxsPT15LmhlYWRlciYmKHkuaGVhZGVyPUlbNF0pLG51bGw9PXkuZm9vdGVyJiYoeS5mb290ZXI9SVs1'@;
put 'XSl9fWZ1bmN0aW9uIEZvKHksUCl7Zm9yKHZhciBJPWx0KFApLFE9MDtRPHkubGVuZ3RoOysrUSl7dmFyIHJlPSEwLGdlPXlbUV07aWYoZ2UmJkkubGVuZ3RoPT1sdChnZSkubGVuZ3RoJiYoSS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZihyZSl7aWYobnVsbD09PVBbX2VdIT0obnVsbD09PWdl'@;
put 'W19lXSkpcmV0dXJuIHZvaWQocmU9ITEpO2lmKCJvYmplY3QiPT10eXBlb2YgUFtfZV0paWYoWyJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uaW5kZXhPZihfZSk+LTEpe2lmKCQwKFBbX2VdLGdlW19lXSkpcmV0dXJuIHZvaWQocmU9ITEpfWVsc2V7aWYoIShbImxlZnQiLCJyaWdodCIs'@;
put 'InRvcCIsImJvdHRvbSJdLmluZGV4T2YoX2UpPi0xKSlyZXR1cm4gdm9pZChyZT0hMSk7aWYoUG0oUFtfZV0sZ2VbX2VdKSlyZXR1cm4gdm9pZChyZT0hMSl9aWYoUFtfZV0hPWdlW19lXSlyZXR1cm4gdm9pZChyZT0hMSl9fSkscmUpKXJldHVybiBRfXJldHVybiB5W3kubGVuZ3RoXT1vbihQ'@;
put 'KSx5Lmxlbmd0aC0xfWZ1bmN0aW9uIGd1KHksUCxJLFEpe3ZhciByZT1RLnJldnNzZltudWxsIT1JLno/SS56OiJHZW5lcmFsIl0sZ2U9NjAsX2U9eS5sZW5ndGg7aWYobnVsbD09cmUmJlEuc3NmKWZvcig7Z2U8MzkyOysrZ2UpaWYobnVsbD09US5zc2ZbZ2VdKXt3LmxvYWQoSS56LGdlKSxR'@;
put 'LnNzZltnZV09SS56LFEucmV2c3NmW0kuel09cmU9Z2U7YnJlYWt9dmFyIHZlPTAsU2U9MCxIZT0wLEJlPTA7aWYoUS5jZWxsU3R5bGVzKXtpZihJLnMpe2lmKFEuRm9udHMpe0kucy5jb2xvcnx8KEkucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIEdlPShJLnMuYm9s'@;
put 'ZD8xOjApfChJLnMuaXRhbGljPzI6MCl8KEkucy5zdHJpa2U/NDowKXwoSS5zLnNoYWRvdz84OjApO3ZlPFEuRm9udHMubGVuZ3RoOysrdmUpe3ZhciBudD1RLkZvbnRzW3ZlXTtpZihudWxsPT1udC5mb250aGFzaCYmKG50LmZvbnRoYXNoPShudC5ib2xkPzE6MCl8KG50Lml0YWxpYz8yOjAp'@;
put 'fChudC5zdHJpa2U/NDowKXwobnQuc2hhZG93Pzg6MCkpLCEoR2UhPW50LmZvbnRoYXNofHwhIUkucy5jb2xvciE9ISFudC5jb2xvcnx8SS5zLnZhbGlnbiE9bnQudmFsaWdufHwoSS5zLnN6fHxudC5zeikmJihJLnMuc3p8fDEyKSE9KG50LnN6fHwxMil8fEkucy5uYW1lJiZJLnMubmFtZSE9'@;
put 'bnQubmFtZXx8KEkucy51bmRlcmxpbmV8fDApIT0obnQudW5kZXJsaW5lfHwwKXx8SS5zLmNvbG9yJiYkMChJLnMuY29sb3IsbnQuY29sb3IpKSlicmVha312ZT09US5Gb250cy5sZW5ndGgmJihRLkZvbnRzLnB1c2goe3N6Okkucy5zenx8MTIsY29sb3I6SS5zLmNvbG9yfHx7dGhlbWU6MSxy'@;
put 'Z2I6IjAwMDAwMCJ9LG5hbWU6SS5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6SS5zLmZhbWlseXx8MixzY2hlbWU6SS5zLnNjaGVtZSxib2xkOkkucy5ib2xkLGl0YWxpYzpJLnMuaXRhbGljLHN0cmlrZTpJLnMuc3RyaWtlLHNoYWRvdzpJLnMuc2hhZG93LHZhbGlnbjpJLnMudmFsaWduLHVu'@;
put 'ZGVybGluZTpJLnMudW5kZXJsaW5lfSksMT09US5Gb250cy5sZW5ndGgmJloxKFEuRm9udHNbMF0pKX1pZihRLkZpbGxzKXtmb3IoO1NlPFEuRmlsbHMubGVuZ3RoOysrU2Upe3ZhciBkdD1RLkZpbGxzW1NlXTtpZighIUkucy5zdG9wcz09ISFkdC5zdG9wcyl7aWYoSS5zLnN0b3BzKXtpZihJ'@;
put 'LnMuYW5nbGUhPWR0LmFuZ2xlKWNvbnRpbnVlO3ZhciBDdD0hMDtpZihJLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihrdCxUdCl7JDAoa3QsZHQuc3RvcHNbVHRdKSYmKEN0PSExKSxrdC52IT1kdC5zdG9wc1tUdF0udiYmKEN0PSExKX0pLCFDdCljb250aW51ZX1lbHNle2lmKG51bGw9PUku'@;
put 'cy5wYXR0ZXJuVHlwZSYmSS5zLmZnQ29sb3ImJihJLnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09SS5zLnBhdHRlcm5UeXBlKWJyZWFrO2lmKEkucy5wYXR0ZXJuVHlwZSE9ZHQucGF0dGVyblR5cGV8fCQwKEkucy5mZ0NvbG9yLGR0LmZnQ29sb3IpfHwkMChJLnMuYmdDb2xvcixkdC5i'@;
put 'Z0NvbG9yKSljb250aW51ZX1icmVha319aWYoU2U9PVEuRmlsbHMubGVuZ3RoKXt2YXIgY3Q9e307SS5zLnN0b3BzPyhudWxsIT1JLnMuYW5nbGUmJihjdC5hbmdsZT1JLnMuYW5nbGUpLGN0LnN0b3BzPVtdLEkucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtjdC5zdG9wcy5wdXNoKG9u'@;
put 'KGt0KSl9KSk6Y3Q9e3BhdHRlcm5UeXBlOkkucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOkkucy5mZ0NvbG9yLGJnQ29sb3I6SS5zLmJnQ29sb3J9LFEuRmlsbHMucHVzaChjdCl9fWlmKFEuQm9yZGVycyl7Zm9yKDtIZTxRLkJvcmRlcnMubGVuZ3RoOysrSGUpe3ZhciBidD1RLkJvcmRlcnNbSGVd'@;
put 'LEZ0PSJ0b3AiO2lmKEkuc1tGdF0pe2lmKCFidFtGdF18fEkuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoSS5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKEkuc1tGdD0iYm90dG9tIl0pe2lmKCFidFtGdF18'@;
put 'fEkuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoSS5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKEkuc1tGdD0ibGVmdCJdKXtpZighYnRbRnRdfHxJLnNbRnRdLnN0eWxlIT1idFtGdF0uc3R5bGV8fCQwKEku'@;
put 'c1tGdF0uY29sb3IsYnRbRnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0Z0XSljb250aW51ZTtpZihJLnNbRnQ9InJpZ2h0Il0pe2lmKCFidFtGdF18fEkuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoSS5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVl'@;
put 'fWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2JyZWFrfUhlPT1RLkJvcmRlcnMubGVuZ3RoJiZRLkJvcmRlcnMucHVzaCh7dG9wOkkucy50b3AmJm9uKEkucy50b3ApfHx2b2lkIDAsYm90dG9tOkkucy5ib3R0b20mJm9uKEkucy5ib3R0b20pfHx2b2lkIDAsbGVmdDpJLnMubGVmdCYm'@;
put 'b24oSS5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6SS5zLnJpZ2h0JiZvbihJLnMucmlnaHQpfHx2b2lkIDB9KX1pZihQJiZJLnMuc3R5bGUmJiJOb3JtYWwiIT09SS5zLnN0eWxlKXtmb3IoQmU9MTtCZTxQLmxlbmd0aCYmUFtCZV0ubmFtZSE9SS5zLnN0eWxlOysrQmUpO0JlPT1QLmxlbmd0aCYm'@;
put 'UC5wdXNoKHtuYW1lOkkucy5zdHlsZSxudW1GbXRJZDpyZSxmb250SWQ6dmUsZmlsbElkOlNlLGJvcmRlcklkOkhlfSl9fWZvcihnZT0wO2dlIT1fZTsrK2dlKWlmKHlbZ2VdLm51bUZtdElkPT1yZSYmeVtnZV0uZm9udElkPT12ZSYmeVtnZV0uZmlsbElkPT1TZSYmeVtnZV0uYm9yZGVySWQ9'@;
put 'PUhlJiZ5W2dlXS54ZklkPT1CZSl7aWYoSS5zJiZJLnMuYWxpZ25tZW50KXtpZigheVtnZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKEkucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9eVtnZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fEkucy5hbGlnbm1lbnQudmVydGljYWwhPXlbZ2VdLmFsaWdu'@;
put 'bWVudC52ZXJ0aWNhbHx8SS5zLmFsaWdubWVudC53cmFwVGV4dCE9eVtnZV0uYWxpZ25tZW50LndyYXBUZXh0fHxJLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT15W2dlXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fEkucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT15W2dlXS5hbGlnbm1lbnQu'@;
put 'dGV4dFJvdGF0aW9ufHxJLnMuYWxpZ25tZW50LmluZGVudCE9eVtnZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKHlbZ2VdLmFsaWdubWVudCljb250aW51ZTtpZihJLnMpe2lmKCEhSS5zLmhpZGRlbj09KCF5W2dlXS5wcm90ZWN0aW9ufHwheVtnZV0ucHJvdGVjdGlvbi5o'@;
put 'aWRkZW4pfHwhIUkucy5lZGl0YWJsZT09KCF5W2dlXS5wcm90ZWN0aW9ufHwheVtnZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZih5W2dlXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBnZX19ZWxzZSBmb3IoZ2U9MDtnZSE9X2U7KytnZSlpZih5W2dlXS5udW1G'@;
put 'bXRJZD09PXJlKXJldHVybiBnZTtyZXR1cm4geVtfZV09e251bUZtdElkOnJlLGZvbnRJZDp2ZSxmaWxsSWQ6U2UsYm9yZGVySWQ6SGUseGZJZDpCZSxhcHBseU51bWJlckZvcm1hdDoxfSx2ZT4wJiYoeVtfZV0uYXBwbHlGb250PTEpLFNlPjAmJih5W19lXS5hcHBseUZpbGw9MSksSGU+MCYm'@;
put 'KHlbX2VdLmFwcGx5Qm9yZGVyPTEpLCFQJiZJLnMmJkkucy5zdHlsZSYmIk5vcm1hbCIhPUkucy5zdHlsZSYmKHlbX2VdLnN0eWxlPUkucy5zdHlsZSksSS5zJiZJLnMuYWxpZ25tZW50JiYoeVtfZV0uYWxpZ25tZW50PXt9LFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwid3JhcFRleHQiLCJz'@;
put 'aHJpbmtUb0ZpdCIsImluZGVudCIsInRleHRSb3RhdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oa3Qpe251bGwhPUkucy5hbGlnbm1lbnRba3RdJiYoeVtfZV0uYWxpZ25tZW50W2t0XT1JLnMuYWxpZ25tZW50W2t0XSl9KSksSS5zJiZJLnMuaGlkZGVuJiYoeVtfZV0ucHJvdGVjdGlvbnx8KHlb'@;
put 'X2VdLnByb3RlY3Rpb249e30pLHlbX2VdLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxJLnMmJkkucy5lZGl0YWJsZSYmKHlbX2VdLnByb3RlY3Rpb258fCh5W19lXS5wcm90ZWN0aW9uPXt9KSx5W19lXS5wcm90ZWN0aW9uLmVkaXRhYmxlPSEwKSxfZX1mdW5jdGlvbiBwNih5LFAsSSxRLHJlLGdl'@;
put 'LF9lLHZlKXsiZCI9PT15LnQmJiJzdHJpbmciPT10eXBlb2YgeS52JiYoeS52PUh0KHkudikpO3RyeXtnZS5jZWxsTkYmJih5Lno9dy5fdGFibGVbUF0pfWNhdGNoKEhlKXtpZihnZS5XVEYpdGhyb3cgSGV9aWYoKCFnZXx8ITEhPT1nZS5jZWxsVGV4dCkmJiJ6IiE9eS50KXRyeXtpZihudWxs'@;
put 'PT13Ll90YWJsZVtQXSYmdy5sb2FkKGRlW1BdfHwiR2VuZXJhbCIsUCksImUiPT09eS50KXkudz15Lnd8fFFvW3kudl07ZWxzZSBpZigwPT09UClpZigibiI9PT15LnQpeS53PSgwfHkudik9PT15LnY/dy5fZ2VuZXJhbF9pbnQoeS52KTp3Ll9nZW5lcmFsX251bSh5LnYpO2Vsc2UgaWYoImQi'@;
put 'PT09eS50KXt2YXIgU2U9VWUoeS52KTt5Lnc9KDB8U2UpPT09U2U/dy5fZ2VuZXJhbF9pbnQoU2UpOncuX2dlbmVyYWxfbnVtKFNlKX1lbHNle2lmKHZvaWQgMD09PXkudilyZXR1cm4iIjt5Lnc9dy5fZ2VuZXJhbCh5LnYsWjMpfWVsc2UgeS53PXcuZm9ybWF0KFAsImQiPT09eS50P1VlKHku'@;
put 'dik6eS52LFozKX1jYXRjaChIZSl7aWYoZ2UuV1RGKXRocm93IEhlfWlmKGdlLmNlbGxTdHlsZXMmJnZlKXtpZih5LnM9e30sbnVsbCE9SSYmdmUuRmlsbHMpdHJ5e1V0KHkucyx2ZS5GaWxsc1tJXSl9Y2F0Y2goSGUpe2lmKGdlLldURil0aHJvdyBIZX1pZihudWxsIT1RJiZ2ZS5Gb250cyl0'@;
put 'cnl7VXQoeS5zLHZlLkZvbnRzW1FdKX1jYXRjaChIZSl7aWYoZ2UuV1RGKXRocm93IEhlfWlmKG51bGwhPXJlJiZ2ZS5Cb3JkZXJzKXRyeXtVdCh5LnMsdmUuQm9yZGVyc1tyZV0pfWNhdGNoKEhlKXtpZihnZS5XVEYpdGhyb3cgSGV9fX1mdW5jdGlvbiBzNSh5LFAsSSl7aWYoeSYmeVsiIXJl'@;
put 'ZiJdKXt2YXIgUT1PaSh5WyIhcmVmIl0pO2lmKFEuZS5jPFEucy5jfHxRLmUucjxRLnMucil0aHJvdyBuZXcgRXJyb3IoIkJhZCByYW5nZSAoIitJKyIpOiAiK3lbIiFyZWYiXSl9fXZhciBDdj0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxhNT0vPCg/'@;
put 'Olx3KzopP3NoZWV0RGF0YVtePl0qPihbXHNcU10qKTxcLyg/Olx3KzopP3NoZWV0RGF0YT4vLGRTPS88KD86XHc6KT9oeXBlcmxpbmsgW14+XSo+L2dtLHFaPS8iKFx3KjpcdyopIi8sU3Y9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyxoZj0vPCg/Olx3Oik/Y29udHJvbFxiW14+XSpb'@;
put 'XC9dPz4vZyxnNj0vPCg/Olx3Oik/YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0b0ZpbHRlcik+L2csTXY9LzwoPzpcdzopP3BhZ2VNYXJnaW5zW14+XSpcLz4vZyx4dj0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLFRMPS88KD86'@;
put 'XHc6KT9zaGVldFByb3RlY3Rpb25cYig/OltePmEtel1bXj5dKik/XC8+LyxETD0vPCg/Olx3Oik/c2hlZXRQcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFByKT4vLExMPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzop'@;
put 'P3NoZWV0Vmlld3MpPi8saFM9LzwoPzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9kYXRhVmFsaWRhdGlvbnMpPi8sbTY9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/'@;
put 'Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZyk+L2csZmY9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwvPi8sRXY9LzwoPzpcdys6KT90YWJsZVBhcnRzLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sVzM9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+LyxX'@;
put 'ZD0vPCg/Olx3Oik/cm93QnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+LyxmUz0vPCg/Olx3Oik/Y29sQnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxLWj0vPCg/Olx3Oik/aGVhZGVyRm9vdGVyW14+'@;
put 'XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2hlYWRlckZvb3Rlcik+LyxJTD0vPCg/Olx3Oik/cHJpbnRPcHRpb25zXGJbXj5cL10qXC8+Lzt2YXIgcFM9LzwoPzpcdzopP3RhYmxlUGFydFxiW15cLz5dKltcL10/Pi9nO2Z1bmN0aW9uIHY2KHksUCxJLFEpe3ZhciByZT1sbih5KTtJ'@;
put 'LlNoZWV0c1tRXXx8KEkuU2hlZXRzW1FdPXt9KSxyZS5jb2RlTmFtZSYmKEkuU2hlZXRzW1FdLkNvZGVOYW1lPXJlLmNvZGVOYW1lKX12YXIgXzY9LzwoPzpcdzopP3RhYkNvbG9yW14+XSpbXC9dPz4vLG1TPS88KD86XHc6KT9wYWdlU2V0VXBQcltePl0qW1wvXT8+Lyx2Uz0vPCg/Olx3Oik/'@;
put 'b3V0bGluZVByW14+XSpbXC9dPz4vLENlPXtkaXNwbGF5ZWQ6ImFzRGlzcGxheWVkIixlbmQ6ImF0RW5kIixub25lOiJub25lIn0sa3Y9YmUoQ2UpLFJMPXtkaXNwbGF5ZWQ6ImRpc3BsYXllZCIsbm9uZToiYmxhbmsiLGRhc2g6ImRhc2giLCJuL2EiOiJOQSJ9LGJTPWJlKFJMKSxDUz0vPCg/'@;
put 'Olx3Oik/YnJrW14+XSpcLz4vZyxBdj1bIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJzZWxlY3RMb2NrZWRDZWxscyIsInNlbGVjdFVubG9ja2VkQ2VsbHMiXSxUdj1bImZvcm1hdENvbHVtbnMiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Q2VsbHMiLCJpbnNlcnRDb2x1bW5zIiwiaW5zZXJ0Um93cyIs'@;
put 'Imluc2VydEh5cGVybGlua3MiLCJkZWxldGVDb2x1bW5zIiwiZGVsZXRlUm93cyIsInNvcnQiLCJhdXRvRmlsdGVyIiwicGl2b3RUYWJsZXMiXTtmdW5jdGlvbiB4Uyh5KXt2YXIgUD17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oSSl7eVtJXSYmKFBbSV09cGFyc2VGbG9hdCh5W0ldKSl9KSxQfXZhciB5Nj17Q3VzdG9tOiJjdXN0b20iLERhdGU6ImRhdGUiLFRpbWU6InRpbWUiLExlbmd0aDoidGV4dExlbmd0aCIsTGlzdDoibGlzdCIsRGVjaW1hbDoiZGVjaW1hbCIsV2hvbGU6Indob2xlIixB'@;
put 'bnk6Im5vbmUifSxrUz1iZSh5NiksJDM9e0lOOiJiZXR3ZWVuIixPVDoibm90QmV0d2VlbiIsRVE6ImVxdWFsIixORToibm90RXF1YWwiLEdUOiJncmVhdGVyVGhhbiIsTFQ6Imxlc3NUaGFuIixHRToiZ3JlYXRlclRoYW5PckVxdWFsIixMRToibGVzc1RoYW5PckVxdWFsIn0sQVM9YmUoJDMp'@;
put 'O2Z1bmN0aW9uIFRTKHksUCxJKXt2YXIgUT1bXSxyZT17fSxnZT0iIixfZT0hMSx2ZT0wLFNlPTA7cmV0dXJuIHkucmVwbGFjZSgkdCxmdW5jdGlvbihIZSxCZSl7dmFyIEdlPWxuKEhlKTtzd2l0Y2goam4oR2VbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0'@;
put 'aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6cmU9e3Q6a1NbR2UudHlwZXx8Im5vbmUiXSxyZWY6KGdlPUdlLnNxcmVmKT9nZS5pbmRleE9mKCIgIik+LTE/Z2U6T2koZ2UpOiIifSxHZS5vcGVyYXRvciYmKHJlLm9wPUFTW0dlLm9w'@;
put 'ZXJhdG9yXSkscmUuYmxhbms9ISFHZS5hbGxvd0JsYW5rJiZ5cihHZS5hbGxvd0JsYW5rKSwoIUdlLnNob3dJbnB1dE1lc3NhZ2V8fCF5cihHZS5zaG93SW5wdXRNZXNzYWdlKSkmJihyZS5pbnB1dD0hMSksR2UucHJvbXB0VGl0bGUmJigocmUuaW5wdXR8fChyZS5pbnB1dD17fSkpLnRpdGxl'@;
put 'PXhyKEdlLnByb21wdFRpdGxlKSksR2UucHJvbXB0JiYoKHJlLmlucHV0fHwocmUuaW5wdXQ9e30pKS5tZXNzYWdlPXhyKEdlLnByb21wdCkpLCghR2Uuc2hvd0Vycm9yTWVzc2FnZXx8IXlyKEdlLnNob3dFcnJvck1lc3NhZ2UpKSYmKHJlLmVycm9yPSExKSxHZS5lcnJvclRpdGxlJiYoKHJl'@;
put 'LmVycm9yfHwocmUuZXJyb3I9e30pKS50aXRsZT14cihHZS5lcnJvclRpdGxlKSksR2UuZXJyb3ImJigocmUuZXJyb3J8fChyZS5lcnJvcj17fSkpLm1lc3NhZ2U9eHIoR2UuZXJyb3IpKSxyZS5lcnJvcj9yZS5lcnJvci5zdHlsZT1HZS5lcnJvclN0eWxlfHwic3RvcCI6R2UuZXJyb3JTdHls'@;
put 'ZSYmKHJlLmVycm9yPXtzdHlsZTpHZS5lcnJvclN0eWxlfSkscmUudCYmUS5wdXNoKHJlKTticmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOlNlPUJlK0hlLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+Ijpn'@;
put 'ZT15LnNsaWNlKFNlLEJlKSxyZS5yZWY9Z2U/Z2UuaW5kZXhPZigiICIpPi0xP2dlOk9pKGdlKToiIjticmVhaztjYXNlIjxmPiI6Y2FzZSI8Zm9ybXVsYTEiOmNhc2UiPGZvcm11bGExPiI6Y2FzZSI8Zm9ybXVsYTIiOmNhc2UiPGZvcm11bGEyPiI6dmU9QmUrSGUubGVuZ3RoO2JyZWFrO2Nh'@;
put 'c2UiPC9mb3JtdWxhMT4iOmNhc2UiPC9mb3JtdWxhMj4iOmlmKEkpYnJlYWs7Y2FzZSI8L2Y+Ijp2YXIgbnQ9eHIoUGkoeS5zbGljZSh2ZSxCZSkpKTtzd2l0Y2gocmUudCl7Y2FzZSJMaXN0IjppZihyZS5sfHxyZS5mKWJyZWFrO2lmKDM0PT1udC5jaGFyQ29kZUF0KDApKXtyZS5sPW50LnNs'@;
put 'aWNlKDEsLTEpLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOm51bGw9PXJlLmYmJihyZS5mPW50KTticmVhaztjYXNlIkRhdGUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiVGltZSI6Y2FzZSJXaG9sZSI6cmUub3B8fChyZS5vcD0iSU4iKSxudWxsPT1yZS52P3JlLnY9'@;
put 'aXNOYU4oK250KT9udDorbnQ6KHJlLm1pbj1yZS52LHJlLm1heD1pc05hTigrbnQpP250OitudCxkZWxldGUgcmUudil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZXh0PiI6X2U9'@;
put 'ITE7YnJlYWs7ZGVmYXVsdDppZihQJiZQLldURiYmIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrR2VbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gSGV9KSxRfXZhciBSdj17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2lu'@;
put 'c1dpdGgiLE5EOiJlbmRzV2l0aCJ9LERTPWJlKFJ2KSxMUz17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIsTFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlT'@;
put 'OiJ5ZXN0ZXJkYXkifSxWTD1iZShMUyk7ZnVuY3Rpb24gdzYoeSl7dmFyIFA9e307cmV0dXJuIG51bGwhPXkudmFsJiYoaXNOYU4oK3kudmFsKT9QLmY9eS52YWw6UC52PSt5LnZhbCksUC50PXkudHlwZSxQfWZ1bmN0aW9uIHBmKHkpe3JldHVybiBTcigiY2Z2byIsbnVsbCx7dHlwZTp5LnQs'@;
put 'dmFsOm51bGwhPXkudj95LnY6SHIoeS5mKX0pfWZ1bmN0aW9uIEM2KHksUCxJLFEpe3ZhciByZT13Nih5KTtyZXR1cm4gcmUuY29sb3I9VTIoUCxJLFEpLHJlfWZ1bmN0aW9uIElTKHksUCxJLFEscmUpe3ZhciBnZT0oeS5tYXRjaCgvc3FyZWY9IihbXHc6JCBdKikiLyl8fFtdKVsxXTtyZXR1'@;
put 'cm4gZnVuY3Rpb24gQkwoeSxQLEksUSxyZSxnZSl7dmFyIF9lPSExLHZlPVtdLFNlPXtmOltdfSxIZT0wLEJlPTAsR2U9e2Nmdm9zOltdLGNvbG9yczpbXX0sbnQ9e30sZHQ9LTEsQ3Q9MCxjdD0iIjtyZXR1cm4geS5yZXBsYWNlKCR0LGZ1bmN0aW9uKGJ0LEZ0KXt2YXIga3Q9bG4oYnQpO3N3'@;
put 'aXRjaChqbihrdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0dGluZyI6Y2FzZSI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4iOmJyZWFrO2Nhc2UiPGNmUnVsZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoQmU9RnQsbnQ9a3QsU2U9e3JlZjpQLGY6W119LCFidC5tYXRjaCgvXC8+LykpYnJlYWs7'@;
put 'Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChudC5keGZJZCYmcmUmJnJlLkRYRiYmKFNlLnM9cmUuRFhGWytudC5keGZJZF0pLG50LnR5cGUpe2Nhc2UiZHVwbGljYXRlVmFsdWVzIjpTZS50PSJkdXAiO2JyZWFrO2Nhc2UidW5pcXVlVmFsdWVzIjpTZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29u'@;
put 'dGFpbnNCbGFua3MiOlNlLnQ9ImJsYW5rIixTZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNCbGFua3MiOlNlLnQ9ImJsYW5rIixTZS52PSExO2JyZWFrO2Nhc2UiY29udGFpbnNFcnJvcnMiOlNlLnQ9ImVycm9yIixTZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOlNl'@;
put 'LnQ9ImVycm9yIixTZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0Y2gobnQub3BlcmF0b3Ipe2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zIjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKFNlLnQ9InRleHQiLFNlLm9wPURTW250Lm9wZXJhdG9yXSxu'@;
put 'dWxsPT1udC50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrU2Uub3ArIiBtaXNzaW5nIHRleHQiKTtTZS52PW50LnRleHQsU2UuZj1TZS5mWzBdLG51bGw9PVNlLmYmJmRlbGV0ZSBTZS5mO2JyZWFrO2RlZmF1bHQ6U2UudD0idmFsIixTZS5vcD1BU1tudC5vcGVyYXRvcl0s'@;
put 'MT09U2UuZi5sZW5ndGg/aXNOYU4oK1NlLmZbMF0pP1NlLmY9U2UuZlswXTooU2Uudj0rU2UuZlswXSxkZWxldGUgU2UuZik6KFNlLm1pbj1pc05hTigrU2UuZlswXSk/U2UuZlswXTorU2UuZlswXSxTZS5tYXg9aXNOYU4oK1NlLmZbMV0pP1NlLmZbMV06K1NlLmZbMV0sZGVsZXRlIFNlLmYp'@;
put 'fWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6U2UudD0iZm9ybXVsYSIsU2UuZj1TZS5mWzBdO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zVGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihTZS50PSJ0ZXh0IixTZS5vcD1EU1tudC50eXBlXSxu'@;
put 'dWxsPT1udC50ZXh0JiZTZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrU2Uub3ArIiBtaXNzaW5nIHRleHQiKTtTZS52PW51bGwhPW50LnRleHQ/bnQudGV4dDpTZS5mWzFdLm1hdGNoKC8iLioiLyk/U2UuZlsxXS5zbGljZSgxLC0xKTpTZS5mWzFdLFNlLmY9'@;
put 'U2UuZlswXSxudWxsPT1TZS5mJiZkZWxldGUgU2UuZjticmVhaztjYXNlImNvbG9yU2NhbGUiOmlmKFNlLnQ9InNjYWxlIiwhU2UuY29sb3JTY2FsZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2FsZSIpO1NlLmNtaW49QzYoKEdlPVNlLmNvbG9yU2NhbGUpLmNmdm9zWzBdLEdl'@;
put 'LmNvbG9yc1swXSxyZSxRKSwzPT1HZS5jZnZvcy5sZW5ndGgmJihTZS5jbWlkPUM2KEdlLmNmdm9zWzFdLEdlLmNvbG9yc1sxXSxyZSxRKSksU2UuY21heD1DNihHZS5jZnZvc1tHZS5jZnZvcy5sZW5ndGgtMV0sR2UuY29sb3JzW0dlLmNmdm9zLmxlbmd0aC0xXSxyZSxRKTticmVhaztjYXNl'@;
put 'ImRhdGFCYXIiOmlmKFNlLnQ9ImJhciIsIVNlLmRhdGFCYXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGRhdGFCYXIiKTsoR2U9U2UuZGF0YUJhcikuY29sb3JzWzBdJiYoU2UuY29sb3I9VTIoR2UuY29sb3JzWzBdLHJlLFEpKSxTZS5jbWluPXc2KEdlLmNmdm9zWzBdKSxTZS5jbWF4PXc2'@;
put 'KEdlLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKFNlLnQ9Imljb24iLCFTZS5pY29uU2V0KXRocm93IG5ldyBFcnJvcigibWlzc2luZyBpY29uU2V0Iik7U2UudGhyZXNoPShHZT1TZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oVHQpe3JldHVybiB3NihUdCl9KSxTZS52'@;
put 'PUdlLnRhZyYmR2UudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLFNlLnJldj15cihHZS50YWcucmV2ZXJzZXx8ImZhbHNlIiksU2UucGN0PXlyKEdlLnRhZy5wZXJjZW50fHwidHJ1ZSIpLFNlLmhpZGRlbj0heXIoR2UudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRp'@;
put 'bWVQZXJpb2QiOlNlLnQ9ImRhdGUiLFNlLm9wPVZMW250LnRpbWVQZXJpb2RdO2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjpTZS50PSJhdmciLFNlLm9wPSIwIj09bnQuYWJvdmVBdmVyYWdlPyJMIjoiRyIsU2Uub3ArPW50LnN0ZERldj9udC5zdGREZXY6eXIobnQuZXF1YWxBdmVyYWdlfHwi'@;
put 'MCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6U2UudD0icmFuayIsU2Uub3A9KHlyKG50LmJvdHRvbXx8IjAiKT8iQiI6IlQiKSsoeXIobnQucGVyY2VudHx8IjAiKT8iUCI6IlYiKSxTZS52PStudC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK250'@;
put 'LnR5cGV9aWYoZGVsZXRlIFNlLmNvbG9yU2NhbGUsZGVsZXRlIFNlLmRhdGFCYXIsZGVsZXRlIFNlLmljb25TZXQsIVNlLnQpdGhyb3cgY29uc29sZS5sb2coeS5zbGljZShCZSxGdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPVNlLmYmJiFTZS5mLmxlbmd0aCYmZGVsZXRlIFNl'@;
put 'LmYsU2UuZGVsfHx2ZS5wdXNoKFNlKTticmVhaztjYXNlIjxmb3JtdWxhIjpjYXNlIjxmb3JtdWxhPiI6SGU9RnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhPiI6U2UuZi5wdXNoKHhyKHkuc2xpY2UoSGUsRnQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOkhlPUZ0K2J0Lmxl'@;
put 'bmd0aDticmVhaztjYXNlIjwvZj4iOlNlLmYucHVzaCh4cih5LnNsaWNlKEhlLEZ0KSkpO2JyZWFrO2Nhc2UiPHNxcmVmPiI6Q3Q9RnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOmN0PXkuc2xpY2UoQ3QsRnQpLFA9Y3Q/Y3QuaW5kZXhPZigiICIpPi0xP2N0Ok9pKGN0KToiIixT'@;
put 'ZS5yZWY9UCx2ZS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtUdC5yZWY9UH0pO2JyZWFrO2Nhc2UiPGNvbG9yU2NhbGUiOmNhc2UiPGNvbG9yU2NhbGU+IjpjYXNlIjxkYXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOkdlPXtjZnZvczpbXSxjb2xv'@;
put 'cnM6W10sdGFnOmt0fSxIZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbG9yU2NhbGU+IjpTZS5jb2xvclNjYWxlPUdlO2JyZWFrO2Nhc2UiPC9kYXRhQmFyPiI6U2UuZGF0YUJhcj1HZTticmVhaztjYXNlIjwvaWNvblNldD4iOlNlLmljb25TZXQ9R2U7YnJlYWs7Y2FzZSI8Y2Z2byI6'@;
put 'Y2FzZSI8Y2Z2by8+IjpHZS5jZnZvcy5wdXNoKGt0KTticmVhaztjYXNlIjwvY2Z2bz4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpHZS5jb2xvcnMucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2Fz'@;
put 'ZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7Y2FzZSI8bmVnYXRpdmVGaWxsQ29sb3IiOmNhc2UiPGF4aXNDb2xvciI6Y2FzZSI8Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6U2UuZGVsPSEwO2JyZWFrO2Nh'@;
put 'c2UiPGR4Zj4iOl9lPSEwLGR0PUZ0O2JyZWFrO2Nhc2UiPC9keGY+IjpfZT0hMSxTZS5zPXhEKHkuc2xpY2UoZHQsRnQrYnQubGVuZ3RoKSxyZSxRLEkpO2JyZWFrO2RlZmF1bHQ6aWYoSSYmSS5XVEYpe2lmKGdlKWJyZWFrO2lmKCFfZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAi'@;
put 'K2t0WzBdKyIgaW4gY29uZGZtdCIpfX1yZXR1cm4gYnR9KSx2ZX0oeSxnZSxQLEksUSxyZSl9dmFyIHpMPS88KD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiBjNSh5LFApe3ZhciBJPTAsUT0wLHJlPTAsZ2U9MDtpZighUHx8IVAuQ2VsbFhmKXJldHVy'@;
put 'biBudWxsO3ZhciBfZT1QLkNlbGxYZlt5XTtudWxsIT1fZSYmKG51bGwhPV9lLm51bUZtdElkJiYoST1fZS5udW1GbXRJZCksbnVsbCE9X2UuZmlsbElkJiYoUT1fZS5maWxsSWQpLG51bGwhPV9lLmZvbnRJZCYmKHJlPV9lLmZvbnRJZCksbnVsbCE9X2UuYm9yZGVySWQmJihnZT1fZS5ib3Jk'@;
put 'ZXJJZCkpO3ZhciB2ZT17dDoieiJ9O3RyeXtwNih2ZSxJLFEscmUsZ2Use1dURjoxLGNlbGxTdHlsZXM6ITB9LDAsUCl9Y2F0Y2h7fXJldHVybiB2ZS5zfWZ1bmN0aW9uIFVMKHksUCxJLFEpe2lmKHZvaWQgMD09PXkudiYmdm9pZCAwPT09eS5mJiZudWxsPT15LnMmJiF5LmN8fCJ6Ij09PXku'@;
put 'dCYmIXkuYyYmIVEuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgcmU9IiIsZ2U9eS50LF9lPXkudjtpZigieiIhPT15LnQpc3dpdGNoKHkudCl7Y2FzZSJiIjpyZT15LnY/IjEiOiIwIjticmVhaztjYXNlIm4iOnJlPSIiK3kudjticmVhaztjYXNlImUiOnJlPVFvW3kudl07YnJlYWs7Y2FzZSJk'@;
put 'IjpRJiZRLmNlbGxEYXRlcz9yZT1IdCh5LnYsLTEpLnRvSVNPU3RyaW5nKCk6KCh5PW9uKHkpKS50PSJuIixyZT0iIisoeS52PVVlKEh0KHkudikpKSksdHlwZW9mIHkuej4idSImJih5Lno9dy5fdGFibGVbMTRdKTticmVhaztkZWZhdWx0OnJlPXkudn12YXIgdmU9InoiPT15LnQ/IiI6ZnMo'@;
put 'InYiLEhyKHJlKSksU2U9e3I6UH0sSGU9UT9ndShRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMseSxRKTowO3N3aXRjaCgwIT09SGUmJihTZS5zPUhlKSx5LnQpe2Nhc2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOlNlLnQ9ImQiO2JyZWFrO2Nhc2UiYiI6U2UudD0iYiI7YnJlYWs7Y2FzZSJl'@;
put 'IjpTZS50PSJlIjticmVhaztkZWZhdWx0OmlmKG51bGw9PXkudil7ZGVsZXRlIHkudDticmVha31pZihRJiZRLmJvb2tTU1Qpe3ZlPWZzKCJ2IiwiIit3dihRLlN0cmluZ3MseS52LHkuUj95LnI9SmgoeS5SKTpudWxsLFEucmV2U3RyaW5ncykpLFNlLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJy'@;
put 'YXkoeS5SKT8odmU9Ijxpcz4iK0poKHkuUikrIjwvaXM+IixTZS50PSJpbmxpbmVTdHIiKTpTZS50PSJzdHIifWlmKHkudCE9Z2UmJih5LnQ9Z2UseS52PV9lKSx5LmYpe3ZhciBCZT15LkYmJnkuRi5zbGljZSgwLFAubGVuZ3RoKT09UD97dDoiYXJyYXkiLHJlZjp5LkZ9Om51bGw7dmU9U3Io'@;
put 'ImYiLEhyKHkuZiksQmUpKyhudWxsIT15LnY/dmU6IiIpfXJldHVybiB5LmwmJklbIiFsaW5rcyJdLnB1c2goW1AseS5sXSkseS5jJiZJWyIhY29tbWVudHMiXS5wdXNoKFtQLHkuY10pLFNyKCJjIix2ZSxTZSl9dmFyIFpMPWZ1bmN0aW9uKCl7dmFyIHk9LzwoPzpcdys6KT9jWyBcLz5dLyxQ'@;
put 'PS88XC8oPzpcdys6KT9yb3c+LyxJPS9yPVsiJ10oW14iJ10qKVsiJ10vLFE9LzwoPzpcdys6KT9pcz4oW1xTXHNdKj8pPFwvKD86XHcrOik/aXM+LyxyZT0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGdlPXVsKCJ2IiksX2U9dWwoImYiKTtyZXR1cm4gZnVuY3Rpb24oU2UsSGUsQmUsR2UsbnQs'@;
put 'ZHQsQ3Qpe2Zvcih2YXIgdW4scW4sZXIsdHIsUXIsY3Q9MCxidD0iIixGdD1bXSxrdD1bXSxUdD0wLFp0PTAscG49MCxLbj0iIix6bj0wLGtuPTAsWm49MCxCcj0wLHNpPTAseGk9MCxJaT1BcnJheS5pc0FycmF5KEN0LkNlbGxYZiksdXI9W10sQW49W10sdnI9QXJyYXkuaXNBcnJheShCZSks'@;
put 'cnI9W10sU249e30sbXI9ITEsd2k9U2Uuc3BsaXQoUCksVXI9ISFHZS5zaGVldFN0dWJzLGppPSEhR2UuY2VsbEhUTUwsX289ISghMT09PUdlLmNlbGxUZXh0JiYhR2UuY2VsbE5GJiYhR2UuY2VsbFN0eWxlcyksVGk9MCxZbz13aS5sZW5ndGg7VGkhPVlvOysrVGkpe3ZhciBsbz0oYnQ9d2lb'@;
put 'VGldLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1sbyl7dmFyIEFvPTA7ZTpmb3IoY3Q9MDtjdDxsbzsrK2N0KXN3aXRjaChidFtjdF0pe2Nhc2UiPiI6aWYoIi8iIT1idFtjdC0xXSl7KytjdDticmVhayBlfUdlLmNlbGxTdHlsZXMmJm51bGwhPShxbj1sbihidC5zbGljZShBbyxjdCksITApKS5y'@;
put 'JiZwYXJzZUludChxbi5yLDEwKSYmKHpuPXBhcnNlSW50KHFuLnIsMTApLFNuPXt9LG1yPSExLHFuLmh0JiYobXI9ITAsU24uaHB0PXBhcnNlRmxvYXQocW4uaHQpLFNuLmhweD1VMShTbi5ocHQpKSxxbi5keURlc2NlbnQmJihtcj0hMCxTbi5keURlc2NlbnQ9cW4uZHlEZXNjZW50KSwiMSI9'@;
put 'PXFuLmhpZGRlbiYmKG1yPSEwLFNuLmhpZGRlbj0hMCksbnVsbCE9cW4ub3V0bGluZUxldmVsJiYobXI9ITAsU24ubGV2ZWw9K3FuLm91dGxpbmVMZXZlbCkscW4ucyYmQ3QmJkN0LkNlbGxYZiYmKG1yPSEwLFNuLnM9YzUocW4ucyxDdCkpLG1yJiYocnJbem4tMV09U24pKTticmVhaztjYXNl'@;
put 'IjwiOkFvPWN0fWlmKEFvPj1jdClicmVhaztpZih6bj1udWxsIT0ocW49bG4oYnQuc2xpY2UoQW8sY3QpLCEwKSkucj9wYXJzZUludChxbi5yLDEwKTp6bisxLGtuPS0xLCEoR2Uuc2hlZXRSb3dzJiZHZS5zaGVldFJvd3M8em4pKXtHZS5ub2RpbXx8KG50LnMucj56bi0xJiYobnQucy5yPXpu'@;
put 'LTEpLG50LmUucjx6bi0xJiYobnQuZS5yPXpuLTEpKTt2YXIgeG89e3Q6InJvdyIscm93OltdLFI6em4tMSxpZHg6SGV9O0dlLmNlbGxTdHlsZXMmJihTbj17fSxtcj0hMSxxbi5odCYmKG1yPSEwLFNuLmhwdD1wYXJzZUZsb2F0KHFuLmh0KSxTbi5ocHg9VTEoU24uaHB0KSkscW4uZHlEZXNj'@;
put 'ZW50JiYobXI9ITAsU24uZHlEZXNjZW50PXFuLmR5RGVzY2VudCksIjEiPT1xbi5oaWRkZW4mJihtcj0hMCxTbi5oaWRkZW49ITApLG51bGwhPXFuLm91dGxpbmVMZXZlbCYmKG1yPSEwLFNuLmxldmVsPStxbi5vdXRsaW5lTGV2ZWwpLHFuLnMmJihtcj0hMCxTbi5zPWM1KHFuLnMsQ3QpKSxt'@;
put 'ciYmKEdlLmNhbGxiYWNrP3hvLnByb3BzPVNuOnJyW3puLTFdPVNuKSksRnQ9YnQuc2xpY2UoY3QpLnNwbGl0KHkpO2Zvcih2YXIgaGk9MDtoaSE9RnQubGVuZ3RoJiYiPCI9PUZ0W2hpXS50cmltKCkuY2hhckF0KDApOysraGkpO2ZvcihGdD1GdC5zbGljZShoaSksY3Q9MDtjdCE9RnQubGVu'@;
put 'Z3RoOysrY3QpaWYoMCE9PShidD1GdFtjdF0udHJpbSgpKS5sZW5ndGgpe2lmKGt0PWJ0Lm1hdGNoKEkpLFR0PWN0LFp0PTAscG49MCxidD0iPGMgIisoIjwiPT1idC5zbGljZSgwLDEpPyI+IjoiIikrYnQsbnVsbCE9a3QmJjI9PT1rdC5sZW5ndGgpe2ZvcihUdD0wLEtuPWt0WzFdLFp0PTA7'@;
put 'WnQhPUtuLmxlbmd0aCYmISgocG49S24uY2hhckNvZGVBdChadCktNjQpPDF8fHBuPjI2KTsrK1p0KVR0PTI2KlR0K3BuO2tuPS0tVHR9ZWxzZSsra247Zm9yKFp0PTA7WnQhPWJ0Lmxlbmd0aCYmNjIhPT1idC5jaGFyQ29kZUF0KFp0KTsrK1p0KTtpZigrK1p0LChxbj1sbihidC5zbGljZSgw'@;
put 'LFp0KSwhMCkpLnJ8fChxbi5yPWRpKHtyOnpuLTEsYzprbn0pKSx1bj17dDoiIn0sbnVsbCE9KGt0PShLbj1idC5zbGljZShadCkpLm1hdGNoKGdlKSkmJiIiIT09a3RbMV0mJih1bi52PXhyKGt0WzFdKSksR2UuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrdD1Lbi5tYXRjaChfZSkpJiYiIiE9'@;
put 'PWt0WzFdKXtpZih1bi5mPXhyKFBpKGt0WzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLEdlLnhsZm58fCh1bi5mPUcxKHVuLmYpKSxrdFswXS5pbmRleE9mKCd0PSJhcnJheSInKT4tMSl1bi5GPShLbi5tYXRjaChyZSl8fFtdKVsxXSx1bi5GLmluZGV4T2YoIjoiKT4tMSYmdXIucHVzaChb'@;
put 'T2kodW4uRiksdW4uRl0pO2Vsc2UgaWYoa3RbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXt0cj1sbihrdFswXSk7dmFyIHRhPXhyKFBpKGt0WzFdKSk7R2UueGxmbnx8KHRhPUcxKHRhKSksQW5bcGFyc2VJbnQodHIuc2ksMTApXT1bdHIsdGEscW4ucl19fWVsc2Uoa3Q9S24ubWF0Y2go'@;
put 'LzxmW14+XSpcLz4vKSkmJkFuWyh0cj1sbihrdFswXSkpLnNpXSYmKHVuLmY9bkwoQW5bdHIuc2ldWzFdLEFuW3RyLnNpXVsyXSxxbi5yKSk7dmFyIE1uPXNzKHFuLnIpO2ZvcihadD0wO1p0PHVyLmxlbmd0aDsrK1p0KU1uLnI+PXVyW1p0XVswXS5zLnImJk1uLnI8PXVyW1p0XVswXS5lLnIm'@;
put 'Jk1uLmM+PXVyW1p0XVswXS5zLmMmJk1uLmM8PXVyW1p0XVswXS5lLmMmJih1bi5GPXVyW1p0XVsxXSl9aWYobnVsbD09cW4udCYmdm9pZCAwPT09dW4udilpZih1bi5mfHx1bi5GKXVuLnY9MCx1bi50PSJuIjtlbHNle2lmKCFVciljb250aW51ZTt1bi50PSJ6In1lbHNlIHVuLnQ9cW4udHx8'@;
put 'Im4iO3N3aXRjaChudC5zLmM+a24mJihudC5zLmM9a24pLG50LmUuYzxrbiYmKG50LmUuYz1rbiksdW4udCl7Y2FzZSJuIjppZigiIj09dW4udnx8bnVsbD09dW4udil7aWYoIVVyKWNvbnRpbnVlO3VuLnQ9InoifWVsc2UgdW4udj1wYXJzZUZsb2F0KHVuLnYpO2JyZWFrO2Nhc2UicyI6aWYo'@;
put 'dHlwZW9mIHVuLnY+InUiKXtpZighVXIpY29udGludWU7dW4udD0ieiJ9ZWxzZSBlcj1mNltwYXJzZUludCh1bi52LDEwKV0sdW4udj1lci50LHVuLnI9ZXIucixlci5SJiYodW4uUj1lci5SKSxqaSYmKHVuLmg9ZXIuaCk7YnJlYWs7Y2FzZSJzdHIiOnVuLnQ9InMiLHVuLnY9bnVsbCE9dW4u'@;
put 'dj9QaSh1bi52KToiIixqaSYmKHVuLmg9cm8odW4udikpO2JyZWFrO2Nhc2UiaW5saW5lU3RyIjprdD1Lbi5tYXRjaChRKSx1bi50PSJzIixudWxsIT1rdCYmKGVyPUQ5KGt0WzFdKSk/KHVuLnY9ZXIudCxlci5SJiYodW4uUj1lci5SKSxqaSYmKHVuLmg9ZXIuaCkpOnVuLnY9IiI7YnJlYWs7'@;
put 'Y2FzZSJiIjp1bi52PXlyKHVuLnYpO2JyZWFrO2Nhc2UiZCI6R2UuY2VsbERhdGVzP3VuLnY9SHQodW4udiwxKToodW4udj1VZShIdCh1bi52LDEpKSx1bi50PSJuIik7YnJlYWs7Y2FzZSJlIjohMSE9PUdlLmNlbGxUZXh0JiYodW4udz11bi52KSx1bi52PUthW3VuLnZdfWlmKF9vKXtabj1C'@;
put 'cj1zaT14aT0wLFFyPW51bGwsSWkmJnZvaWQgMCE9PXFuLnMmJm51bGwhPShRcj1DdC5DZWxsWGZbcW4uc10pJiYobnVsbCE9UXIubnVtRm10SWQmJihabj1Rci5udW1GbXRJZCksR2UuY2VsbFN0eWxlcyYmKG51bGwhPVFyLmZpbGxJZCYmKEJyPVFyLmZpbGxJZCksbnVsbCE9UXIuZm9udElk'@;
put 'JiYoc2k9UXIuZm9udElkKSxudWxsIT1Rci5ib3JkZXJJZCYmKHhpPVFyLmJvcmRlcklkKSkpO3RyeXtwNih1bixabixCcixzaSx4aSxHZSwwLEN0KX1jYXRjaHt9R2UuY2VsbFN0eWxlcyYmdW4ucyYmKFFyJiZRci5hbGlnbm1lbnQmJih1bi5zLmFsaWdubWVudD1vbihRci5hbGlnbm1lbnQp'@;
put 'KSxRciYmUXIucHJvdGVjdGlvbiYmKG51bGwhPVFyLnByb3RlY3Rpb24uaGlkZGVuJiYodW4ucy5oaWRkZW49UXIucHJvdGVjdGlvbi5oaWRkZW4pLG51bGwhPVFyLnByb3RlY3Rpb24uZWRpdGFibGUmJih1bi5zLmVkaXRhYmxlPVFyLnByb3RlY3Rpb24uZWRpdGFibGUpKSxRciYmUXIuc3R5'@;
put 'bGUmJih1bi5zLnN0eWxlPVFyLnN0eWxlKSksR2UuY2VsbERhdGVzJiZJaSYmIm4iPT11bi50JiZ3LmlzX2RhdGUody5fdGFibGVbWm5dKSYmKHVuLnQ9ImQiLHVuLnY9aHQodW4udikpfXZhciBNcztHZS5ub2RpbSYmKE1zPXNzKHFuLnIpLG50LnMucj5Ncy5yJiYobnQucy5yPU1zLnIpLG50'@;
put 'LmUucjxNcy5yJiYobnQuZS5yPU1zLnIpKSxHZS5jYWxsYmFjaz8oTXM9c3MocW4ucikseG8ucm93W01zLmNdPXVuKTp2cj8oQmVbKE1zPXNzKHFuLnIpKS5yXXx8KEJlW01zLnJdPVtdKSxCZVtNcy5yXVtNcy5jXT11bik6QmVbcW4ucl09dW59R2UuY2FsbGJhY2smJkdlLmNhbGxiYWNrKHhv'@;
put 'KX19fVVyJiYhR2UuY2FsbGJhY2smJmM1KDAsQ3QpLHJyLmxlbmd0aD4wJiYoQmVbIiFyb3dzIl09cnIpfX0oKSxSUz1Tcigid29ya3NoZWV0IixudWxsLHt4bWxuczppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20v'@;
put 'b2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIn0pO2Z1bmN0aW9uIFdMKHksUCxJLFEpe3ZhciBfZSxyZT1bQm4s'@;
put 'UlNdLHZlPSIiLFNlPUkuU2hlZXRzW0kuU2hlZXROYW1lc1t5XV07bnVsbD09U2UmJihTZT17fSk7dmFyIEhlPVNlWyIhcmVmIl18fCJBMSIsQmU9T2koSGUpO2lmKEJlLmUuYz4xNjM4M3x8QmUuZS5yPjEwNDg1NzUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitIZSsiIGV4'@;
put 'Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtCZS5lLmM9TWF0aC5taW4oQmUuZS5jLDE2MzgzKSxCZS5lLnI9TWF0aC5taW4oQmUuZS5jLDEwNDg1NzUpLEhlPU9vKEJlKX1RfHwoUT17fSksU2VbIiFjb21tZW50cyJdPVtdO3ZhciBHZT1bXSxudD1TZVsiIXByaW50Il07aWYo'@;
put 'ZnVuY3Rpb24gWm8oeSxQLEksUSxyZSl7dmFyIGdlPSExLF9lPXt9LHZlPW51bGw7aWYoInhsc3giIT09US5ib29rVHlwZSYmUC52YmFyYXcpe3ZhciBTZT1QLlNoZWV0TmFtZXNbSV07dHJ5e1AuV29ya2Jvb2smJihTZT1QLldvcmtib29rLlNoZWV0c1tJXS5Db2RlTmFtZXx8U2UpfWNhdGNo'@;
put 'e31nZT0hMCxfZS5jb2RlTmFtZT1IcihTZSl9eSYmeVsiIWNvbmRmbXQiXSYmKF9lLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLHkmJnlbIiF0YWJjb2xvciJdJiYodmU9KHZlfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytPdSh5WyIhdGFiY29sb3IiXS5yZ2IpKyci'@;
put 'Lz4nKTt2YXIgSGU9ITEsQmU9e307aWYoKCgoeXx8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoSGU9ITAsQmUuZml0VG9QYWdlPTEpLEhlJiYodmU9KHZlfHwiIikrU3IoInBhZ2VTZXRVcFByIixudWxsLEJlKSkseSYmeVsiIW91dGxpbmUiXSl7dmFyIEdlPXtzdW1tYXJ5'@;
put 'QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6MX07eVsiIW91dGxpbmUiXS5hYm92ZSYmKEdlLnN1bW1hcnlCZWxvdz0wKSx5WyIhb3V0bGluZSJdLmxlZnQmJihHZS5zdW1tYXJ5UmlnaHQ9MCksdmU9KHZlfHwiIikrU3IoIm91dGxpbmVQciIsbnVsbCxHZSl9IWdlJiYhdmV8fChyZVtyZS5sZW5ndGhd'@;
put 'PVNyKCJzaGVldFByIix2ZSxfZSkpfShTZSxJLHksUCxyZSkscmVbcmUubGVuZ3RoXT1TcigiZGltZW5zaW9uIixudWxsLHtyZWY6SGV9KSxyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIE92KHksUCxJLFEpe3ZhciByZT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChRfHx7fSkuV29ya2Jvb2t8'@;
put 'fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIGdlPVEuV29ya2Jvb2suVmlld3MsX2U9Z2VbSV18fGdlWzBdO3JlLnJpZ2h0VG9MZWZ0PV9lLlJUTD8iMSI6IjAiLF9lLnpvb20mJihyZS56b29tU2NhbGU9X2Uuem9vbSksbnVsbCE9X2UuZ3JpZCYmKHJlLnNob3dHcmlkTGluZXM9X2UuZ3Jp'@;
put 'ZCksX2UudmlldyYmKHJlLnZpZXc9X2Uudmlldyl9bnVsbCE9eVsiIWdyaWRsaW5lcyJdJiYocmUuc2hvd0dyaWRMaW5lcz0hIXlbIiFncmlkbGluZXMiXSk7dmFyIHZlPSIiLFNlPXtyOjAsYzowfTtpZih5WyIhc2VsIl0pe2lmKCEoU2U9eVsiIXNlbCJdLmNlbGwpKXtpZigheVsiIXNlbCJd'@;
put 'LnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtTZT1Xcyh5WyIhc2VsIl0ucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkuc30ic3RyaW5nIj09dHlwZW9mIFNlJiYoU2U9c3MoU2UpKX12YXIgQmU9eVsiIWZyZWV6ZSJdPyJz'@;
put 'dHJpbmciPT10eXBlb2YgeVsiIWZyZWV6ZSJdP3NzKHlbIiFmcmVlemUiXSk6eVsiIWZyZWV6ZSJdOntjOjAscjowfTtpZih5WyIhZnJlZXplIl0pe3ZhciBHZT1kaShCZSksbnQ9e3N0YXRlOiJmcm96ZW4iLHhTcGxpdDpCZS5jLHlTcGxpdDpCZS5yLHRvcExlZnRDZWxsOkdlfTt5WyIhc2Vs'@;
put 'Il0mJihudC5hY3RpdmVQYW5lPShTZS5yPj1CZS5yJiZCZS5yPjA/ImJvdHRvbSI6InRvcCIpKyhTZS5jPj1CZS5jJiZCZS5jPjA/IlJpZ2h0IjoiTGVmdCIpKSx2ZT1TcigicGFuZSIsbnVsbCxudCl9aWYoeVsiIXNlbCJdKXt2YXIgZHQ9e2FjdGl2ZUNlbGw6InN0cmluZyI9PXR5cGVvZiBT'@;
put 'ZT9TZTpkaShTZSl9O2R0LnNxcmVmPXlbIiFzZWwiXS5yYW5nZT95WyIhc2VsIl0ucmFuZ2U6ZHQuYWN0aXZlQ2VsbCsiOiIrZHQuYWN0aXZlQ2VsbCx2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkseVsiIWZyZWV6ZSJdJiYoQmUuYz4wJiYoZHQucGFuZT0idG9wUmlnaHQiLHZlKz1Tcigi'@;
put 'c2VsZWN0aW9uIixudWxsLGR0KSksQmUucj4wJiYoZHQucGFuZT0iYm90dG9tTGVmdCIsdmUrPVNyKCJzZWxlY3Rpb24iLG51bGwsZHQpKSxCZS5jPjAmJkJlLnI+MCYmKGR0LnBhbmU9ImJvdHRvbVJpZ2h0Iix2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkpKX1yZXR1cm4gU3IoInNoZWV0'@;
put 'Vmlld3MiLFNyKCJzaGVldFZpZXciLHZlfHxudWxsLHJlKSx7fSl9KFNlLDAseSxJKSxQLnNoZWV0Rm9ybWF0KXt2YXIgZHQ9e2RlZmF1bHRSb3dIZWlnaHQ6UC5zaGVldEZvcm1hdC5kZWZhdWx0Um93SGVpZ2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpQLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0'@;
put 'aHx8IjEwIn07bnVsbCE9UC5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihkdC5vdXRsaW5lTGV2ZWxSb3c9UC5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cpLHJlW3JlLmxlbmd0aF09U3IoInNoZWV0Rm9ybWF0UHIiLG51bGwsZHQpfWVsc2UgaWYoU2VbIiFzaGVldEZvcm1hdCJd'@;
put 'KXt2YXIgQ3Q9e30sY3Q9ITE7U2VbIiFzaGVldEZvcm1hdCJdLnJvdyYmKFNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0PyhjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PVNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0LEN0LmN1c3RvbUhlaWdodD0xKTpTZVsiIXNoZWV0Rm9ybWF0Il0ucm93'@;
put 'LmhweD8oY3Q9ITAsQ3QuZGVmYXVsdFJvd0hlaWdodD1qMihTZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweCksQ3QuY3VzdG9tSGVpZ2h0PTEpOigwPT09U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHR8fDA9PT1TZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweHx8U2VbIiFzaGVldEZvcm1hdCJd'@;
put 'LnJvdy5oaWRkZW4pJiYoY3Q9ITAsQ3QuZGVmYXVsdFJvd0hlaWdodD1DdC5kZWZhdWx0Um93SGVpZ2h0fHwxNixDdC5jdXN0b21IZWlnaHQ9MSxDdC56ZXJvSGVpZ2h0PTEpLFNlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQmJihDdFsieDE0YWM6ZHlEZXNjZW50Il09U2VbIiFzaGVldEZv'@;
put 'cm1hdCJdLmR5RGVzY2VudCkpLFNlWyIhc2hlZXRGb3JtYXQiXS5jb2wmJihTZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaHx8cHUoU2VbIiFzaGVldEZvcm1hdCJdLmNvbCksQ3QuZGVmYXVsdENvbFdpZHRoPVNlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NoKzUvcGx8fDAsY3Q9ITApLG51bGw9'@;
put 'PUN0LmRlZmF1bHRSb3dIZWlnaHQmJihDdC5kZWZhdWx0Um93SGVpZ2h0PTE2KSxudWxsPT1DdC5kZWZhdWx0Q29sV2lkdGgmJihDdC5kZWZhdWx0Q29sV2lkdGg9MTApLEN0Lm91dGxpbmVMZXZlbFJvdz1DdC5vdXRsaW5lTGV2ZWxSb3d8fDcsY3QmJihyZVtyZS5sZW5ndGhdPVNyKCJzaGVl'@;
put 'dEZvcm1hdFByIixudWxsLEN0KSl9bnVsbCE9U2VbIiFjb2xzIl0mJlNlWyIhY29scyJdLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBEdih5LFAsSSl7Zm9yKHZhciByZSxRPVsiPGNvbHM+Il0sZ2U9MDtnZSE9UC5sZW5ndGg7KytnZSlpZihyZT1QW2dlXSl7aWYocmUuYXV0'@;
put 'byYmTmkoeSxyZSxnZSkscmUuc3x8cmUueil7dmFyIF9lPXt0OiJ6In07bnVsbCE9cmUucyYmKF9lLnM9cmUucyksbnVsbCE9cmUueiYmKF9lLno9cmUueikscmUuc3R5bGU9Z3UoSS5jZWxsWGZzLEkuY2VsbFN0eWxlWGZzLF9lLEkpfVFbUS5sZW5ndGhdPVNyKCJjb2wiLG51bGwsWWQoZ2Us'@;
put 'cmUpKX1yZXR1cm4gUVtRLmxlbmd0aF09IjwvY29scz4iLFEuam9pbigiIil9KFNlLFNlWyIhY29scyJdLFApKSxyZVtfZT1yZS5sZW5ndGhdPSI8c2hlZXREYXRhLz4iLFNlWyIhbGlua3MiXT1bXSxudWxsIT1TZVsiIXJlZiJdJiYodmU9ZnVuY3Rpb24gWUwoeSxQLEksUSl7dmFyIFNlLGJ0'@;
put 'LHJlPVtdLGdlPVtdLF9lPU9pKHlbIiFyZWYiXSksdmU9IiIsSGU9IiIsQmU9W10sR2U9MCxudD0wLGR0PXlbIiFyb3dzIl0sQ3Q9QXJyYXkuaXNBcnJheSh5KSxjdD17cjpIZX0sRnQ9LTE7Zm9yKG50PV9lLnMuYztudDw9X2UuZS5jOysrbnQpQmVbbnRdPU5zKG50KTtmb3IoR2U9X2Uucy5y'@;
put 'O0dlPD1fZS5lLnI7KytHZSl7Zm9yKGdlPVtdLEhlPUhzKEdlKSxudD1fZS5zLmM7bnQ8PV9lLmUuYzsrK250KXtTZT1CZVtudF0rSGU7dmFyIGt0PUN0Pyh5W0dlXXx8W10pW250XTp5W1NlXTt2b2lkIDAhPT1rdCYmbnVsbCE9KHZlPVVMKGt0LFNlLHksUCkpJiZnZS5wdXNoKHZlKX0oZ2Uu'@;
put 'bGVuZ3RoPjB8fGR0JiZkdFtHZV0pJiYoY3Q9e3I6SGV9LGR0JiZkdFtHZV0mJigoYnQ9ZHRbR2VdKS5oaWRkZW4mJihjdC5oaWRkZW49MSksRnQ9LTEsYnQuaHB4P0Z0PWoyKGJ0LmhweCk6YnQuaHB0JiYoRnQ9YnQuaHB0KSxGdD4tMSYmKGN0Lmh0PUZ0LGN0LmN1c3RvbUhlaWdodD0xKSxi'@;
put 'dC5sZXZlbCYmKGN0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYoY3RbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYmKGN0LnM9Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmJ0LnN9LFApLGN0LmN1c3RvbUZvcm1hdD0xKSks'@;
put 'cmVbcmUubGVuZ3RoXT1Tcigicm93IixnZS5qb2luKCIiKSxjdCkpfWlmKGR0KWZvcig7R2U8ZHQubGVuZ3RoOysrR2UpZHQmJmR0W0dlXSYmKGN0PXtyOkdlKzF9LChidD1kdFtHZV0pLmhpZGRlbiYmKGN0LmhpZGRlbj0xKSxGdD0tMSxidC5ocHg/RnQ9ajIoYnQuaHB4KTpidC5ocHQmJihG'@;
put 'dD1idC5ocHQpLEZ0Pi0xJiYoY3QuaHQ9RnQsY3QuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoY3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxyZVtyZS5sZW5ndGhdPVNyKCJyb3ciLCIiLGN0KSk7cmV0dXJuIHJlLmpvaW4oIiIpfShTZSxQKSx2ZS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0'@;
put 'aF09dmUpKSxyZS5sZW5ndGg+X2UrMSYmKHJlW3JlLmxlbmd0aF09Ijwvc2hlZXREYXRhPiIscmVbX2VdPXJlW19lXS5yZXBsYWNlKCIvPiIsIj4iKSksU2VbIiFwcm90ZWN0Il0mJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEVhKHkpe3ZhciBQPXtzaGVldDoxfTtyZXR1cm4gQXYuZm9yRWFj'@;
put 'aChmdW5jdGlvbihJKXtudWxsIT15W0ldJiZ5W0ldJiYoUFtJXT0iMSIpfSksVHYuZm9yRWFjaChmdW5jdGlvbihJKXtudWxsIT15W0ldJiYheVtJXSYmKFBbSV09IjAiKX0pLHkucGFzc3dvcmQ/UC5wYXNzd29yZD1hQyh5LnBhc3N3b3JkKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTp5'@;
put 'LmVuY3J5cHRpb24mJihQLmFsZ29yaXRobU5hbWU9eS5lbmNyeXB0aW9uLmFsZ28sUC5oYXNoVmFsdWU9eS5lbmNyeXB0aW9uLmhhc2gsUC5zYWx0VmFsdWU9eS5lbmNyeXB0aW9uLnNhbHQsUC5zcGluQ291bnQ9eS5lbmNyeXB0aW9uLnNwaW4pLFNyKCJzaGVldFByb3RlY3Rpb24iLG51bGws'@;
put 'UCl9KFNlWyIhcHJvdGVjdCJdKSksbnVsbCE9U2VbIiFhdXRvZmlsdGVyIl0mJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEVTKHksUCxJLFEpe3ZhciByZT0ic3RyaW5nIj09dHlwZW9mIHkucmVmP3kucmVmOk9vKHkucmVmKTtJLldvcmtib29rfHwoSS5Xb3JrYm9vaz17U2hlZXRzOltdfSks'@;
put 'SS5Xb3JrYm9vay5OYW1lc3x8KEkuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBnZT1JLldvcmtib29rLk5hbWVzLF9lPVdzKHJlKTtfZS5zLnI9PV9lLmUuciYmKF9lLmUucj1XcyhQWyIhcmVmIl0pLmUucixyZT1PbyhfZSkpO2Zvcih2YXIgdmU9MDt2ZTxnZS5sZW5ndGg7Kyt2ZSl7dmFyIFNl'@;
put 'PWdlW3ZlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09U2UuTmFtZSYmU2UuU2hlZXQ9PVEpe1NlLlJlZj0iJyIrSS5TaGVldE5hbWVzW1FdKyInISIrcmU7YnJlYWt9fXJldHVybiB2ZT09Z2UubGVuZ3RoJiZnZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0'@;
put 'OlEsUmVmOiInIitJLlNoZWV0TmFtZXNbUV0rIichIityZX0pLFNyKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6cmV9KX0oU2VbIiFhdXRvZmlsdGVyIl0sU2UsSSx5KSksbnVsbCE9U2VbIiFtZXJnZXMiXSYmU2VbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24g'@;
put 'UVooeSl7aWYoMD09PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD0nPG1lcmdlQ2VsbHMgY291bnQ9IicreS5sZW5ndGgrJyI+JyxJPTA7SSE9eS5sZW5ndGg7KytJKVArPSc8bWVyZ2VDZWxsIHJlZj0iJytPbyh5W0ldKSsnIi8+JztyZXR1cm4gUCsiPC9tZXJnZUNlbGxzPiJ9KFNlWyIh'@;
put 'bWVyZ2VzIl0pKSxTZVsiIWNvbmRmbXQiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gakwoeSxQKXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oSSxRKXtyZXR1cm4gZnVuY3Rpb24gUHUoeSxQLEkpe3ZhciBRPXkucz9GbyhJLkRYRix5LnMpOi0xLHJlPSJzdHJpbmciPT10eXBlb2YgeS5yZWY/'@;
put 'eS5yZWY6T28oeS5yZWYpLF9lPU9pKHJlLnJlcGxhY2UoL1xzLiokLywiIikpLnM7X2UucjwwJiYoX2Uucj0wKSxfZS5jPDAmJihfZS5jPTApO3ZhciB2ZT0iIixTZT17cHJpb3JpdHk6UCsxfTtzd2l0Y2goUT4tMSYmKFNlLmR4ZklkPVEpLHkudCl7Y2FzZSJ1bmlxdWUiOlNlLnR5cGU9InVu'@;
put 'aXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOlNlLnR5cGU9ImR1cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6U2UudHlwZT0oeS52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIix2ZT0iPGZvcm11bGE+TEVOKFRSSU0oIitkaShfZSkrIikpIisoeS52PyI9IjoiJmd0OyIp'@;
put 'KyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6U2UudHlwZT0oeS52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEiOlNlLnR5cGU9ImV4cHJlc3Npb24iLHZlPVNyKCJmb3JtdWxhIixIcih5LmYpLHt9KTticmVhaztjYXNlImRhdGUiOlNlLnR5'@;
put 'cGU9InRpbWVQZXJpb2QiLFNlLnRpbWVQZXJpb2Q9TFNbeS5vcF07YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goU2UudHlwZT1TZS5vcGVyYXRvcj1Sdlt5Lm9wXSxTZS50ZXh0PXkudix5Lm9wKXtjYXNlIklOIjp2ZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK0hyKHkudikrJyIs'@;
put 'JytkaShfZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiT1QiOnZlPSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytIcih5LnYpKyciLCcrZGkoX2UpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnZlPSI8Zm9ybXVsYT5MRUZUKCIrZGkoX2UpKycsTEVOKCInK0hyKHkudikr'@;
put 'JyIpKT0iJytIcih5LnYpKyciPC9mb3JtdWxhPic7YnJlYWs7Y2FzZSJORCI6dmU9Ijxmb3JtdWxhPlJJR0hUKCIrZGkoX2UpKycsTEVOKCInK0hyKHkudikrJyIpKT0iJytIcih5LnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOlNlLnR5cGU9ImNlbGxJcyIsU2Uub3BlcmF0b3I9'@;
put 'JDNbeS5vcF0sdmU9bnVsbCE9eS5taW4/U3IoImZvcm11bGEiLEhyKFN0cmluZyh5Lm1pbikpLHt9KStTcigiZm9ybXVsYSIsSHIoU3RyaW5nKHkubWF4KSkse30pOlNyKCJmb3JtdWxhIixIcihudWxsIT15LnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgeS52PyciJyt5LnYucmVwbGFjZSgv'@;
put 'Ii9nLCciIicpKyciJzp5LnYpOnkuZikse30pO2JyZWFrO2Nhc2UiYXZnIjpzd2l0Y2goU2UudHlwZT0iYWJvdmVBdmVyYWdlIixTZS5hYm92ZUF2ZXJhZ2U9IkwiPT15Lm9wLmNoYXJBdCgwKT8iMCI6IjEiLHkub3AuY2hhckF0KDEpKXtjYXNlIlQiOlNlLmVxdWFsQXZlcmFnZT0iMCI7YnJl'@;
put 'YWs7Y2FzZSJFIjpTZS5lcXVhbEF2ZXJhZ2U9IjEiO2JyZWFrO2RlZmF1bHQ6U2Uuc3RkRGV2PXkub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6U2UudHlwZT0idG9wMTAiLFNlLmJvdHRvbT0iQiI9PXkub3AuY2hhckF0KDApPyIxIjoiMCIsU2UucGVyY2VudD0iUCI9PXkub3AuY2hh'@;
put 'ckF0KDEpPyIxIjoiMCIsU2UucmFuaz15LnY7YnJlYWs7Y2FzZSJpY29uIjpTZS50eXBlPSJpY29uU2V0Ijt2YXIgSGU9e2ljb25TZXQ6eS52LHBlcmNlbnQ6eS5wY3Q/InRydWUiOiJmYWxzZSJ9O3kucmV2JiYoSGUucmV2ZXJzZT0idHJ1ZSIpLHkuaGlkZGVuJiYoSGUuc2hvd1ZhbHVlPSJm'@;
put 'YWxzZSIpLHZlPVNyKCJpY29uU2V0Iix5LnRocmVzaC5tYXAocGYpLmpvaW4oIiIpLEhlKTticmVhaztjYXNlInNjYWxlIjpTZS50eXBlPSJjb2xvclNjYWxlIix2ZSs9cGYoeS5jbWluKSx5LmNtaWQmJih2ZSs9cGYoeS5jbWlkKSksdmUrPXBmKHkuY21heCksdmUrPVVkKHkuY21pbi5jb2xv'@;
put 'cikseS5jbWlkJiYodmUrPVVkKHkuY21pZC5jb2xvcikpLHZlPVNyKCJjb2xvclNjYWxlIix2ZSs9VWQoeS5jbWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIiOlNlLnR5cGU9ImRhdGFCYXIiLHZlKz1wZih5LmNtaW4pLHZlKz1wZih5LmNtYXgpLHZlPVNyKCJkYXRhQmFyIix2ZSs9VWQo'@;
put 'eS5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY29uc29sZS5sb2coeSksIkNGIG1pc3NpbmcgdHlwZSAiK3kudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytyZSsnIj4nK1NyKCJjZlJ1bGUiLCIiPT12ZT9udWxsOnZlLFNlKSsiPC9jb25kaXRpb25hbEZv'@;
put 'cm1hdHRpbmc+In0oSSxRLFApfSkuam9pbigiIil9KFNlWyIhY29uZGZtdCJdLFApKSxTZVsiIXZhbGlkYXRpb25zIl0mJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIE5MKHkpe2lmKCF5fHwwPT15Lmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFA9W10sST0wLFE9MDtRPHkubGVuZ3RoOysrUSl7'@;
put 'dmFyIHJlPXlbUV0sZ2U9eTZbcmUudF07aWYocmUucmVmJiYoInN0cmluZyIhPXR5cGVvZiByZS5yZWZ8fC0xIT1yZS5yZWYuaW5kZXhPZigiICIpfHwocmUucmVmPU9pKHJlLnJlZikscmUucmVmLnMmJiEocmUucmVmLnMuYzwwKSkpKXsrK0k7dmFyIF9lPXt0eXBlOmdlLGFsbG93Qmxhbms6'@;
put 'KygwIT1yZS5ibGFuayksc2hvd0lucHV0TWVzc2FnZTorKDAhPXJlLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9cmUuZXJyb3IpLHNxcmVmOiJzdHJpbmciPT10eXBlb2YgcmUucmVmP3JlLnJlZjpPbyhyZS5yZWYpfTtpZihyZS5pbnB1dCYmKHJlLmlucHV0LnRpdGxlJiYoX2UucHJv'@;
put 'bXB0VGl0bGU9cWkocmUuaW5wdXQudGl0bGUpKSxyZS5pbnB1dC5tZXNzYWdlJiYoX2UucHJvbXB0PXFpKHJlLmlucHV0Lm1lc3NhZ2UpKSkscmUuZXJyb3ImJihyZS5lcnJvci50aXRsZSYmKF9lLmVycm9yVGl0bGU9cWkocmUuZXJyb3IudGl0bGUpKSxyZS5lcnJvci5tZXNzYWdlJiYoX2Uu'@;
put 'ZXJyb3I9cWkocmUuZXJyb3IubWVzc2FnZSkpLHJlLmVycm9yLnN0eWxlJiYoX2UuZXJyb3JTdHlsZT1yZS5lcnJvci5zdHlsZSkpLCFnZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK3JlLnQpO3ZhciB2ZT0iIjtzd2l0Y2gocmUudCl7Y2Fz'@;
put 'ZSJBbnkiOmJyZWFrO2Nhc2UiTGlzdCI6Y2FzZSJDdXN0b20iOmlmKHJlLmwpe2lmKHJlLmwuam9pbigiLCIpLmxlbmd0aD4yNTApdGhyb3cgbmV3IEVycm9yKCJEViBsZW5ndGggPiAyNTAgdHJpZ2dlcnMgY29ycnVwdGlvbiBlcnJvcnMgaW4gRXhjZWwuICBVc2UgYSBsb29rdXAgdGFibGUi'@;
put 'KTt2ZT0nPGZvcm11bGExPiInK0hyKHJlLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIHZlPSI8Zm9ybXVsYTE+IitIcihyZS5mKSsiPC9mb3JtdWxhMT4iO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjpp'@;
put 'ZighJDNbcmUub3BdKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrcmUub3ArIiBmb3IgIityZS50KTtpZihfZS5vcGVyYXRvcj0kM1tyZS5vcF0sbnVsbCE9cmUudil2ZT0iPGZvcm11bGExPiIrSHIoU3RyaW5nKHJlLnYgaW5zdGFuY2VvZiBEYXRlP1VlKHJl'@;
put 'LnYpOnJlLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7aWYobnVsbD09cmUubWlufHxudWxsPT1yZS5tYXgpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIityZS50KTt2ZT0iPGZvcm11bGExPiIrSHIoU3Ry'@;
put 'aW5nKHJlLm1pbiBpbnN0YW5jZW9mIERhdGU/VWUocmUubWluKTpyZS5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitIcihTdHJpbmcocmUubWF4IGluc3RhbmNlb2YgRGF0ZT9VZShyZS5tYXgpOnJlLm1heCkpKyI8L2Zvcm11bGEyPiJ9fVAucHVzaChTcigiZGF0YVZhbGlkYXRpb24i'@;
put 'LHZlfHxudWxsLF9lKSl9fXJldHVybiBJPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9IicrSSsnIj4nK1Auam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KFNlWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBGdCxidD0tMSxrdD0tMTtpZihTZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihy'@;
put 'ZVtyZS5sZW5ndGhdPSI8aHlwZXJsaW5rcz4iLFNlWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt1blsxXS5UYXJnZXQmJihGdD17cmVmOnVuWzBdfSwiIyIhPXVuWzFdLlRhcmdldC5jaGFyQXQoMCkmJihrdD16byhRLC0xLEhyKHVuWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8s'@;
put 'IiIpLEhpLkhMSU5LKSxGdFsicjppZCJdPSJySWQiK2t0KSwoYnQ9dW5bMV0uVGFyZ2V0LmluZGV4T2YoIiMiKSk+LTEmJihGdC5sb2NhdGlvbj1Icih1blsxXS5UYXJnZXQuc2xpY2UoYnQrMSkpKSx1blsxXS5Ub29sdGlwJiYoRnQudG9vbHRpcD1Icih1blsxXS5Ub29sdGlwKSkscmVbcmUu'@;
put 'bGVuZ3RoXT1TcigiaHlwZXJsaW5rIixudWxsLEZ0KSl9KSxyZVtyZS5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIFNlWyIhbGlua3MiXSxudCl7dmFyIFR0PWZ1bmN0aW9uIHdTKHkpe2lmKHkucHJvcHMpe3ZhciBQPXt9LEk9eS5wcm9wcztyZXR1cm4gSS5ncmlkbGluZXMmJihQ'@;
put 'LmdyaWRMaW5lcz1QLmdyaWRMaW5lc1NldD0xKSxJLmhlYWRpbmdzJiYoUC5oZWFkaW5ncz0xKSxJLmNlbnRlclgmJihQLmhvcml6b250YWxDZW50ZXJlZD0xKSxJLmNlbnRlclkmJihQLnZlcnRpY2FsQ2VudGVyZWQ9MSksU3IoInByaW50T3B0aW9ucyIsbnVsbCxQKX1yZXR1cm4iIn0obnQp'@;
put 'O1R0Lmxlbmd0aCYmKHJlW3JlLmxlbmd0aF09VHQpfWlmKChudWxsIT1TZVsiIW1hcmdpbnMiXXx8bnQmJm50Lm1hcmdpbnMpJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBiNih5KXtyZXR1cm4gZGYoeSksU3IoInBhZ2VNYXJnaW5zIixudWxsLHkpfShTZVsiIW1hcmdpbnMiXXx8bnQubWFy'@;
put 'Z2lucykpLG50KXt2YXIgWnQ9ZnVuY3Rpb24gT0woeSl7aWYoeS5wcm9wcyl7dmFyIFA9e30sST15LnByb3BzO2lmKEkub3JpZW50YXRpb24mJihQLm9yaWVudGF0aW9uPUkub3JpZW50YXRpb24pLEkuc2NhbGUmJihQLnNjYWxlPUkuc2NhbGUpLEkuZml0JiYobnVsbCE9SS5maXQuaGVpZ2h0'@;
put 'JiYoUC5maXRUb0hlaWdodD1JLmZpdC5oZWlnaHQpLG51bGwhPUkuZml0LndpZHRoJiYoUC5maXRUb1dpZHRoPUkuZml0LndpZHRoKSksSS5kcGkmJihQLmhvcml6b250YWxEcGk9UC52ZXJ0aWNhbERwaT1JLmRwaSksbnVsbCE9SS5maXJzdCYmKFAuZmlyc3RQYWdlTnVtYmVyPUkuZmlyc3Qs'@;
put 'UC51c2VGaXJzdFBhZ2VOdW1iZXI9MSksSS5idyYmKFAuYmxhY2tBbmRXaGl0ZT0xKSxJLmRyYWZ0JiYoUC5kcmFmdD0xKSxJLmNvbW1lbnRzJiYoUC5jZWxsQ29tbWVudHM9Q2VbSS5jb21tZW50c118fCJub25lIiksSS5lcnJvcnMmJihQLmVycm9ycz1STFtJLmVycm9yc118fCJub25lIiks'@;
put 'SS5wYXBlcilzd2l0Y2godHlwZW9mIEkucGFwZXIpe2Nhc2UibnVtYmVyIjpQLnBhcGVyU2l6ZT1JLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjpaOVtJLnBhcGVyXT9QLnBhcGVyU2l6ZT1aOVtJLnBhcGVyXTorSS5wYXBlciYmKFAucGFwZXJTaXplPStJLnBhcGVyKTticmVhaztjYXNlIm9i'@;
put 'amVjdCI6aWYoIUkucGFwZXIuaGVpZ2h0fHwhSS5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO1AucGFwZXJIZWlnaHQ9SS5wYXBlci5oZWlnaHQsUC5wYXBlcldpZHRoPUkucGFwZXIud2lkdGh9cmV0dXJuWzEsITAs'@;
put 'InRydWUiLCJvdmVyIl0uaW5kZXhPZihJLm9yZGVyKT4tMSYmKFAucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxTcigicGFnZVNldHVwIixudWxsLFApfXJldHVybiIifShudCk7WnQubGVuZ3RoJiYocmVbcmUubGVuZ3RoXT1adCksWnQ9ZnVuY3Rpb24gSXYoeSl7dmFyIFA9W10sST0iIixR'@;
put 'PSIiLHJlPSIiLGdlPSIiLF9lPSIiLHZlPSIiLFNlPSIiLEhlPVcxKHkuaGVhZGVyKTtIZS5sZW5ndGgmJihRPUhlWzBdLHZlPUhlWzFdLGdlPUhlWzJdKTt2YXIgQmU9VzEoeS5mb290ZXIpO3JldHVybiBCZS5sZW5ndGgmJihyZT1CZVswXSxTZT1CZVsxXSxfZT1CZVsyXSksUSYmUC5wdXNo'@;
put 'KCI8b2RkSGVhZGVyPiIrSHIoUSkrIjwvb2RkSGVhZGVyPiIpLHJlJiZQLnB1c2goIjxvZGRGb290ZXI+IitIcihyZSkrIjwvb2RkRm9vdGVyPiIpLChfZSE9cmV8fGdlIT1RKSYmKEkrPScgZGlmZmVyZW50T2RkRXZlbj0iMSInLFAucHVzaCgiPGV2ZW5IZWFkZXI+IitIcihnZSkrIjwvZXZl'@;
put 'bkhlYWRlcj4iKSxQLnB1c2goIjxldmVuRm9vdGVyPiIrSHIoX2UpKyI8L2V2ZW5Gb290ZXI+IikpLChTZSE9cmV8fHZlIT1RKSYmKEkrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxQLnB1c2goIjxmaXJzdEhlYWRlcj4iK0hyKHZlKSsiPC9maXJzdEhlYWRlcj4iKSxQLnB1c2goIjxmaXJzdEZv'@;
put 'b3Rlcj4iK0hyKFNlKSsiPC9maXJzdEZvb3Rlcj4iKSksUC5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK0krIj4iK1Auam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KG50KSxadC5sZW5ndGgmJihyZVtyZS5sZW5ndGhdPVp0KX1pZigobnVsbCE9U2VbIiFyb3dCcmVha3MiXXx8bnQmJm50'@;
put 'LnJvd0JyZWFrcykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEZMKHkpe2lmKDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bJzxyb3dCcmVha3MgY291bnQ9IicreS5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJyt5Lmxlbmd0aCsnIj4nXSxJPTA7STx5Lmxlbmd0aDsrK0kp'@;
put 'UC5wdXNoKCc8YnJrIGlkPSInK3lbSV0uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gUC5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oU2VbIiFyb3dCcmVha3MiXXx8bnQucm93QnJlYWtzKSksKG51bGwhPVNlWyIhY29sQnJlYWtzIl18fG50JiZudC5jb2xCcmVha3MpJiYocmVbcmUubGVuZ3Ro'@;
put 'XT1mdW5jdGlvbiBlWSh5KXtpZigwPT15Lmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFA9Wyc8Y29sQnJlYWtzIGNvdW50PSInK3kubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicreS5sZW5ndGgrJyI+J10sST0wO0k8eS5sZW5ndGg7KytJKVAucHVzaCgnPGJyayBpZD0iJyt5W0ldLkMr'@;
put 'JyIgbWFuPSIxIi8+Jyk7cmV0dXJuIFAuam9pbigiIikrIjwvY29sQnJlYWtzPiJ9KFNlWyIhY29sQnJlYWtzIl18fG50LmNvbEJyZWFrcykpLCghUHx8UC5pZ25vcmVFQ3x8bnVsbD09UC5pZ25vcmVFQykmJihyZVtyZS5sZW5ndGhdPWZzKCJpZ25vcmVkRXJyb3JzIixTcigiaWdub3JlZEVy'@;
put 'cm9yIixudWxsLHtudW1iZXJTdG9yZWRBc1RleHQ6MSxzcXJlZjpIZX0pKSksU2VbIiFjaGFydHMiXSYmR2UucHVzaC5hcHBseShHZSxTZVsiIWNoYXJ0cyJdKSxTZVsiIWltYWdlcyJdJiZHZS5wdXNoLmFwcGx5KEdlLFNlWyIhaW1hZ2VzIl0pLFNlWyIhc2hhcGVzIl0mJkdlLnB1c2guYXBw'@;
put 'bHkoR2UsU2VbIiFzaGFwZXMiXSksR2UubGVuZ3RoPjAmJihrdD16byhRLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoeSsxKSsiLnhtbCIsSGkuRFJBVykscmVbcmUubGVuZ3RoXT1TcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksU2VbIiFkcmF3aW5nIl09R2UpLChTZVsi'@;
put 'IWNvbW1lbnRzIl0ubGVuZ3RoPjB8fChTZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihrdD16byhRLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoeSsxKSsiLnZtbCIsSGkuVk1MKSxyZVtyZS5sZW5ndGhdPVNyKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIr'@;
put 'a3R9KSxTZVsiIWxlZ2FjeSJdPWt0KSxTZVsiIXByaW50Il0mJlNlWyIhcHJpbnQiXS5pbWFnZXMpe3ZhciBwbj1TZVsiIXByaW50Il0uaW1hZ2VzLEtuPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXtwblt1bl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9y'@;
put 'RWFjaChmdW5jdGlvbihxbil7cG5bdW5dW3FuXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHpuKXtpZihBcnJheS5pc0FycmF5KHBuW3VuXVtxbl1bem5dKSlmb3IodmFyIGtuPTA7a248cG5bdW5dW3FuXVt6bl0ubGVuZ3RoOysra24pcG5bdW5dW3FuXVt6'@;
put 'bl1ba25dJiYocG5bdW5dW3FuXVt6bl1ba25dLl9jbnQ9S24rKyl9KX0pfSksS24+MCYmKGt0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyh5KzEpKyJIRi52bWwiLEhpLlZNTCkscmVbcmUubGVuZ3RoXT1TcigibGVnYWN5RHJhd2luZ0hGIixudWxsLHsicjppZCI6InJJZCIr'@;
put 'a3R9KSxTZVsiIWxlZ2FjeUhGIl09a3QpfXJldHVybihTZVsiIXRhYmxlcyJdfHxbXSkubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPSc8dGFibGVQYXJ0cyBjb3VudD0iJytTZVsiIXRhYmxlcyJdLmxlbmd0aCsnIj4nLFNlWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbih1bixxbil7a3Q9'@;
put 'em8oUSwtMSwiLi4vdGFibGVzL3RhYmxlIisoeSsxKSsiXyIrcW4rIi54bWwiLEhpLlRBQkxFKSxyZVtyZS5sZW5ndGhdPSc8dGFibGVQYXJ0IHI6aWQ9InJJZCcra3QrJyIvPid9KSxyZVtyZS5sZW5ndGhdPSI8L3RhYmxlUGFydHM+IikscmUubGVuZ3RoPjEmJihyZVtyZS5sZW5ndGhdPSI8'@;
put 'L3dvcmtzaGVldD4iLHJlWzFdPXJlWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxyZS5qb2luKCIiKX1mdW5jdGlvbiAkTCh5LFAsSSxRKXt2YXIgcmU9ZnVuY3Rpb24gUHYoeSxQLEkpe3ZhciBRPXByKDE0NSkscmU9KElbIiFyb3dzIl18fFtdKVt5XXx8e307US53cml0ZV9zaGlmdCg0LHkpLFEu'@;
put 'd3JpdGVfc2hpZnQoNCwwKTt2YXIgZ2U9MzIwO3JlLmhweD9nZT0yMCpqMihyZS5ocHgpOnJlLmhwdCYmKGdlPTIwKnJlLmhwdCksUS53cml0ZV9zaGlmdCgyLGdlKSxRLndyaXRlX3NoaWZ0KDEsMCk7dmFyIF9lPTA7cmUubGV2ZWwmJihfZXw9cmUubGV2ZWwpLHJlLmhpZGRlbiYmKF9lfD0x'@;
put 'NiksKHJlLmhweHx8cmUuaHB0KSYmKF9lfD0zMiksUS53cml0ZV9zaGlmdCgxLF9lKSxRLndyaXRlX3NoaWZ0KDEsMCk7dmFyIHZlPTAsU2U9US5sO1EubCs9NDtmb3IodmFyIEhlPXtyOnksYzowfSxCZT0wO0JlPDE2OysrQmUpaWYoIShQLnMuYz5CZSsxPDwxMHx8UC5lLmM8QmU8PDEwKSl7'@;
put 'Zm9yKHZhciBHZT0tMSxudD0tMSxkdD1CZTw8MTA7ZHQ8QmUrMTw8MTA7KytkdClIZS5jPWR0LChBcnJheS5pc0FycmF5KEkpPyhJW0hlLnJdfHxbXSlbSGUuY106SVtkaShIZSldKSYmKEdlPDAmJihHZT1kdCksbnQ9ZHQpO0dlPDB8fCgrK3ZlLFEud3JpdGVfc2hpZnQoNCxHZSksUS53cml0'@;
put 'ZV9zaGlmdCg0LG50KSl9dmFyIGN0PVEubDtyZXR1cm4gUS5sPVNlLFEud3JpdGVfc2hpZnQoNCx2ZSksUS5sPWN0LFEubGVuZ3RoPlEubD9RLnNsaWNlKDAsUS5sKTpRfShRLEksUCk7KHJlLmxlbmd0aD4xN3x8KFBbIiFyb3dzIl18fFtdKVtRXSkmJnVpKHksIkJydFJvd0hkciIscmUpfXZh'@;
put 'ciBxTD1KYyxLTD1EMTtmdW5jdGlvbiBqUyh5KXtyZXR1cm5bYTAoeSksbWEoeSksIm4iXX12YXIgbEk9SmMsWVM9RDEscVM9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxlbz1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwi'@;
put 'VGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLEJ2PVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIHdJKHkpe3ZhciBQPXByKDQpLEk9W1BdLFE9ZW8uaW5kZXhPZih5LnQpO2lmKFE8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJl'@;
put 'Y29nbml6ZWQgdHlwZSAiK3kudCk7dmFyIGdlPUJ2LmluZGV4T2YoeS5vcCk7c3dpdGNoKFEpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3OmdlPTA7YnJlYWs7ZGVmYXVsdDppZigtMT09Z2UpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIit5Lm9wKyIgZm9yICIreS50'@;
put 'KX1QLndyaXRlX3NoaWZ0KDEsMHxRKSxQLndyaXRlX3NoaWZ0KDEsMSksUC53cml0ZV9zaGlmdCgxLDEyfGdlPDw0KSxQLndyaXRlX3NoaWZ0KDEsMCksSS5wdXNoKGZ1bmN0aW9uIFpoKHkpe3ZhciBQPXkuc3BsaXQoL1xzKixccyovKSxJPXByKDQpO0kud3JpdGVfc2hpZnQoNCxQLmxlbmd0'@;
put 'aCk7dmFyIFE9W0ldO3JldHVybiBQLmZvckVhY2goZnVuY3Rpb24ocmUpe1EucHVzaChEMShPaShyZSkpKX0pLFMoUSl9KCJzdHJpbmciPT10eXBlb2YgeS5yZWY/eS5yZWY6T28oeS5yZWYpKSk7dmFyIF9lPXByKDE2KTtfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRlX3No'@;
put 'aWZ0KDQsNDI5NDk2NzI5NSksX2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLEkucHVzaChfZSk7dmFyIHZlPXByKDgpO3ZlLndyaXRlX3NoaWZ0KDQsMCksdmUud3JpdGVfc2hpZnQoNCwwKTt2YXIgU2U9MTtzd2l0Y2goeS50KXtjYXNl'@;
put 'IkFueSI6SS5wdXNoKHZlKSxJLnB1c2godmUpO2JyZWFrO2Nhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKG51bGwhPXkudnx8bnVsbCE9eS5mKUkucHVzaCgibnVtYmVyIj09dHlwZW9mIHkudj9tdih5LnYpOlUzKG51bGw9PXkudj95LmY6eS52KSk7ZWxzZXtpZihu'@;
put 'dWxsPT15Lm1pbnx8bnVsbD09eS5tYXgpdGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIit5LnQ7SS5wdXNoKCJudW1iZXIiPT10eXBlb2YgeS5taW4/bXYoeS5taW4pOlUzKHkubWluKSksSS5wdXNoKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgeS5tYXg/bXYoeS5tYXgpOlUzKHkubWF4KSksU2U9Mn1icmVhaztjYXNlIkxpc3QiOmlmKG51bGwhPXkubCl7SS5wdXNoKGFTKHkubC5qb2luKCIsIikpKTticmVha31jYXNlIkN1c3RvbSI6aWYoIm51bGwiIT15LmYpe0kucHVzaChVMyh5LmYpKTticmVha310aHJvdyJV'@;
put 'bnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGBmYCIrKCJMaXN0Ij09eS50PyIgb3IgYGxgIjoiIikrIiByZXF1aXJlZCBmb3IgVHlwZSAiK3kudDtkZWZhdWx0OnRocm93IlhMU0IgZG9lcyBub3Qgc3VwcG9ydCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK3kudH1yZXR1cm4gMT09U2UmJkku'@;
put 'cHVzaCh2ZSksUyhJKX1mdW5jdGlvbiBTSSh5LFAsSSxRLHJlLGdlLF9lKXtpZih2b2lkIDA9PT1QLnYmJm51bGw9PVAuc3x8InoiPT09UC50JiYhcmUuc2hlZXRTdHVicylyZXR1cm4hMTt2YXIgdmU9IiI7c3dpdGNoKFAudCl7Y2FzZSJiIjp2ZT1QLnY/IjEiOiIwIjticmVhaztjYXNlImQi'@;
put 'OihQPW9uKFApKS56PVAuenx8dy5fdGFibGVbMTRdLFAudj1VZShIdChQLnYpKSxQLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjp2ZT0iIitQLnY7YnJlYWs7ZGVmYXVsdDp2ZT1QLnZ9dmFyIFNlPXtyOkksYzpRfTtzd2l0Y2goU2Uucz1ndShyZS5jZWxsWGZzLHJlLmNlbGxTdHlsZVhm'@;
put 'cyxQLHJlKSxQLmwmJmdlWyIhbGlua3MiXS5wdXNoKFtkaShTZSksUC5sXSksUC5jJiZnZVsiIWNvbW1lbnRzIl0ucHVzaChbZGkoU2UpLFAuY10pLFAudCl7Y2FzZSJzIjpjYXNlInN0ciI6aWYocmUuYm9va1NTVCl7aWYodmU9d3YocmUuU3RyaW5ncyxQLnYsUC5SP1Aucj1KaChQLlIpOm51'@;
put 'bGwscmUucmV2U3RyaW5ncyksUC5SKWZvcih2YXIgSGU9MDtIZTxQLlIubGVuZ3RoOysrSGUpUC5SW0hlXS5zJiZndShyZS5jZWxsWGZzLHJlLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6UC5SW0hlXS5zfSxyZSk7U2UudD0icyIsU2Uudj12ZSxfZT91aSh5LCJCcnRTaG9ydElzc3QiLGZ1'@;
put 'bmN0aW9uIHRJKHksUCxJKXtyZXR1cm4gbnVsbD09SSYmKEk9cHIoOCkpLEtjKFAsSSksSS53cml0ZV9zaGlmdCg0LFAudiksSX0oMCxTZSkpOnVpKHksIkJydENlbGxJc3N0IixmdW5jdGlvbiBOdih5LFAsSSl7cmV0dXJuIG51bGw9PUkmJihJPXByKDEyKSksRmkoUCxJKSxJLndyaXRlX3No'@;
put 'aWZ0KDQsUC52KSxJfSgwLFNlKSl9ZWxzZSBTZS50PSJzdHIiLF9lP3VpKHksIkJydFNob3J0U3QiLGZ1bmN0aW9uIGlZKHksUCxJKXtyZXR1cm4gbnVsbD09SSYmKEk9cHIoOCs0Knkudi5sZW5ndGgpKSxLYyhQLEkpLHJjKHkudixJKSxJLmxlbmd0aD5JLmw/SS5zbGljZSgwLEkubCk6SX0o'@;
put 'UCxTZSkpOnVpKHksIkJydENlbGxTdCIsZnVuY3Rpb24gdTUoeSxQLEkpe3JldHVybiBudWxsPT1JJiYoST1wcigxMis0Knkudi5sZW5ndGgpKSxGaShQLEkpLHJjKHkudixJKSxJLmxlbmd0aD5JLmw/SS5zbGljZSgwLEkubCk6SX0oUCxTZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIFAu'@;
put 'dj09KDB8UC52KSYmUC52Pi0xZTMmJlAudjwxZTM/X2U/dWkoeSwiQnJ0U2hvcnRSayIsZnVuY3Rpb24gb0koeSxQLEkpe3JldHVybiBudWxsPT1JJiYoST1wcig4KSksS2MoUCxJKSxTcyh5LnYsSSksSX0oUCxTZSkpOnVpKHksIkJydENlbGxSayIsZnVuY3Rpb24gclkoeSxQLEkpe3JldHVy'@;
put 'biBudWxsPT1JJiYoST1wcigxMikpLEZpKFAsSSksU3MoeS52LEkpLEl9KFAsU2UpKTpfZT91aSh5LCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIHJJKHksUCxJKXtyZXR1cm4gbnVsbD09SSYmKEk9cHIoMTIpKSxLYyhQLEkpLEZjKHkudixJKSxJfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbFJlYWwi'@;
put 'LGZ1bmN0aW9uIFZ2KHksUCxJKXtyZXR1cm4gbnVsbD09SSYmKEk9cHIoMTYpKSxGaShQLEkpLEZjKHkudixJKSxJfShQLFNlKSksITA7Y2FzZSJiIjpyZXR1cm4gU2UudD0iYiIsX2U/dWkoeSwiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiBIdih5LFAsSSl7cmV0dXJuIG51bGw9PUkmJihJPXBy'@;
put 'KDUpKSxLYyhQLEkpLEkud3JpdGVfc2hpZnQoMSx5LnY/MTowKSxJfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIEZTKHksUCxJKXtyZXR1cm4gbnVsbD09SSYmKEk9cHIoOSkpLEZpKFAsSSksSS53cml0ZV9zaGlmdCgxLHkudj8xOjApLEl9KFAsU2UpKSwhMDtjYXNlImUi'@;
put 'OnJldHVybiBTZS50PSJlIixfZT91aSh5LCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBWUyh5LFAsSSl7cmV0dXJuIG51bGw9PUkmJihJPXByKDgpKSxLYyhQLEkpLEkud3JpdGVfc2hpZnQoMSx5LnYpLEkud3JpdGVfc2hpZnQoMiwwKSxJLndyaXRlX3NoaWZ0KDEsMCksSX0oUCxTZSkpOnVp'@;
put 'KHksIkJydENlbGxFcnJvciIsZnVuY3Rpb24gSFMoeSxQLEkpe3JldHVybiBudWxsPT1JJiYoST1wcig5KSksRmkoUCxJKSxJLndyaXRlX3NoaWZ0KDEseS52KSxJfShQLFNlKSksITB9cmV0dXJuIF9lP3VpKHksIkJydFNob3J0QmxhbmsiLGZ1bmN0aW9uIGVJKHksUCxJKXtyZXR1cm4gbnVs'@;
put 'bD09SSYmKEk9cHIoNCkpLEtjKFAsSSl9KDAsU2UpKTp1aSh5LCJCcnRDZWxsQmxhbmsiLGZ1bmN0aW9uIFFMKHksUCxJKXtyZXR1cm4gbnVsbD09SSYmKEk9cHIoOCkpLEZpKFAsSSl9KDAsU2UpKSwhMH1mdW5jdGlvbiBBSSh5LFAsSSxRKXt2YXIgcmU9d2MoKSxnZT1JLlNoZWV0TmFtZXNb'@;
put 'eV0sX2U9SS5TaGVldHNbZ2VdfHx7fSx2ZT1nZTt0cnl7SSYmSS5Xb3JrYm9vayYmKHZlPUkuV29ya2Jvb2suU2hlZXRzW3ldLkNvZGVOYW1lfHx2ZSl9Y2F0Y2h7fXZhciBTZT1PaShfZVsiIXJlZiJdfHwiQTEiKTtpZihTZS5lLmM+MTYzODN8fFNlLmUucj4xMDQ4NTc1KXtpZihQLldURil0'@;
put 'aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKF9lWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO1NlLmUuYz1NYXRoLm1pbihTZS5lLmMsMTYzODMpLFNlLmUucj1NYXRoLm1pbihTZS5lLmMsMTA0ODU3NSl9cmV0dXJuIF9lWyIhbGlua3MiXT1b'@;
put 'XSxfZVsiIWNvbW1lbnRzIl09W10sdWkocmUsIkJydEJlZ2luU2hlZXQiKSwoSS52YmFyYXd8fF9lWyIhb3V0bGluZSJdKSYmdWkocmUsIkJydFdzUHJvcCIsZnVuY3Rpb24gJDEoeSxQLEkpe251bGw9PUkmJihJPXByKDg0KzQqeS5sZW5ndGgpKTt2YXIgUT0xOTI7UCYmKFAuYWJvdmUmJihR'@;
put 'Jj0tNjUpLFAubGVmdCYmKFEmPS0xMjkpKSxJLndyaXRlX3NoaWZ0KDEsUSk7Zm9yKHZhciByZT0xO3JlPDM7KytyZSlJLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFIyKHthdXRvOjF9LEkpLEkud3JpdGVfc2hpZnQoLTQsLTEpLEkud3JpdGVfc2hpZnQoLTQsLTEpLHNtKHksSSksSS5zbGlj'@;
put 'ZSgwLEkubCl9KHZlLF9lWyIhb3V0bGluZSJdKSksdWkocmUsIkJydFdzRGltIixLTChTZSkpLGZ1bmN0aW9uIGVNKHksUCxJKXt1aSh5LCJCcnRCZWdpbldzVmlld3MiKSx1aSh5LCJCcnRCZWdpbldzVmlldyIsZnVuY3Rpb24gbUkoeSxQLEkpe251bGw9PUkmJihJPXByKDMwKSk7dmFyIFE9'@;
put 'OTI0O3JldHVybigoKFB8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiYoUXw9MzIpLGhuKHlbIiFncmlkbGluZXMiXSkmJihRJj0tNSksaG4oKCgoUHx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5ncmlkKSYmKFEmPS01KSxJLndyaXRlX3NoaWZ0KDIsUSksSS53cml0ZV9zaGlmdCg0LDAp'@;
put 'LEkud3JpdGVfc2hpZnQoNCwwKSxJLndyaXRlX3NoaWZ0KDQsMCksSS53cml0ZV9zaGlmdCgxLDApLEkud3JpdGVfc2hpZnQoMSwwKSxJLndyaXRlX3NoaWZ0KDIsMCksSS53cml0ZV9zaGlmdCgyLDEwMCksSS53cml0ZV9zaGlmdCgyLDApLEkud3JpdGVfc2hpZnQoMiwwKSxJLndyaXRlX3No'@;
put 'aWZ0KDIsMCksSS53cml0ZV9zaGlmdCg0LDApLEl9KFAsSSkpLFBbIiFmcmVlemUiXSYmdWkoeSwiQnJ0UGFuZSIsZnVuY3Rpb24gJFMoeSl7dmFyIFA9c3MoeVsiIWZyZWV6ZSJdKSxJPXByKDI5KTtyZXR1cm4gSS53cml0ZV9zaGlmdCg4LFAuYywiZiIpLEkud3JpdGVfc2hpZnQoOCxQLnIs'@;
put 'ImYiKSxJLndyaXRlX3NoaWZ0KDQsUC5yKSxJLndyaXRlX3NoaWZ0KDQsUC5jKSxJLndyaXRlX3NoaWZ0KDQsMCksSS53cml0ZV9zaGlmdCgxLDMpLEl9KFApKSxQWyIhc2VsIl0mJnVpKHksIkJydFNlbCIsZnVuY3Rpb24gZEkoeSxQKXt2YXIgST1wcigzNiksUT15LmNlbGw7aWYoIVEpe2lm'@;
put 'KCF5LnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtRPWRpKFdzKHkucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIHJlPSJzdHJpbmciPT10eXBlb2YgUT9zcyhRKTpRO2lmKFApe3ZhciBnZT0ic3RyaW5nIj09'@;
put 'dHlwZW9mIFA/c3MoUCk6UDtJLndyaXRlX3NoaWZ0KDQscmUucj49Z2UuciYmcmUuYz49Z2UuYz8wOnJlLnI+PWdlLnImJnJlLmM8Z2UuYz8yOnJlLnI8Z2UuciYmcmUuYz49Z2UuYz8xOjMpfWVsc2UgSS53cml0ZV9zaGlmdCg0LDMpO3JldHVybiBJLndyaXRlX3NoaWZ0KDQscmUuciksSS53'@;
put 'cml0ZV9zaGlmdCg0LHJlLmMpLEkud3JpdGVfc2hpZnQoNCwwKSxJLndyaXRlX3NoaWZ0KDQsMSksSS53cml0ZV9zaGlmdCg0LHJlLnIpLEkud3JpdGVfc2hpZnQoNCxyZS5yKSxJLndyaXRlX3NoaWZ0KDQscmUuYyksSS53cml0ZV9zaGlmdCg0LHJlLmMpLEl9KFBbIiFzZWwiXSxQWyIhZnJl'@;
put 'ZXplIl0pKSx1aSh5LCJCcnRFbmRXc1ZpZXciKSx1aSh5LCJCcnRFbmRXc1ZpZXdzIil9KHJlLF9lLEkuV29ya2Jvb2spLGZ1bmN0aW9uIFhTKHksUCl7IVB8fCFQWyIhY29scyJdfHwodWkoeSwiQnJ0QmVnaW5Db2xJbmZvcyIpLFBbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihJLFEpe0km'@;
put 'JnVpKHksIkJydENvbEluZm8iLGZ1bmN0aW9uIG9ZKHksUCxJKXtudWxsPT1JJiYoST1wcigxOCkpO3ZhciBRPVlkKHksUCk7SS53cml0ZV9zaGlmdCgtNCx5KSxJLndyaXRlX3NoaWZ0KC00LHkpLEkud3JpdGVfc2hpZnQoNCwyNTYqKFEud2lkdGh8fDEwKSksSS53cml0ZV9zaGlmdCg0LDAp'@;
put 'O3ZhciByZT0wO3JldHVybiBQLmhpZGRlbiYmKHJlfD0xKSwibnVtYmVyIj09dHlwZW9mIFEud2lkdGgmJihyZXw9MiksUC5sZXZlbCYmKHJlfD1QLmxldmVsPDw4KSxJLndyaXRlX3NoaWZ0KDIscmUpLEl9KFEsSSkpfSksdWkoeSwiQnJ0RW5kQ29sSW5mb3MiKSl9KHJlLF9lKSxmdW5jdGlv'@;
put 'biBNSSh5LFAsSSxRKXt2YXIgcmU9T2koUFsiIXJlZiJdfHwiQTEiKSxfZT0iIix2ZT1bXTt1aSh5LCJCcnRCZWdpblNoZWV0RGF0YSIpO3ZhciBTZT1BcnJheS5pc0FycmF5KFApLEhlPXJlLmUucjtQWyIhcm93cyJdJiYoSGU9TWF0aC5tYXgocmUuZS5yLFBbIiFyb3dzIl0ubGVuZ3RoLTEp'@;
put 'KTtmb3IodmFyIEJlPXJlLnMucjtCZTw9SGU7KytCZSl7X2U9SHMoQmUpLCRMKHksUCxyZSxCZSk7dmFyIEdlPSExO2lmKEJlPD1yZS5lLnIpZm9yKHZhciBudD1yZS5zLmM7bnQ8PXJlLmUuYzsrK250KXtCZT09PXJlLnMuciYmKHZlW250XT1OcyhudCkpO3ZhciBkdD1TZT8oUFtCZV18fFtd'@;
put 'KVtudF06UFt2ZVtudF0rX2VdO0dlPSEhZHQmJlNJKHksZHQsQmUsbnQsUSxQLEdlKX19dWkoeSwiQnJ0RW5kU2hlZXREYXRhIil9KHJlLF9lLDAsUCksZnVuY3Rpb24gazYoeSxQKXtQWyIhcHJvdGVjdCJdJiZ1aSh5LCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIF9JKHksUCl7cmV0'@;
put 'dXJuIG51bGw9PVAmJihQPXByKDY2KSksUC53cml0ZV9zaGlmdCgyLHkucGFzc3dvcmQ/YUMoeS5wYXNzd29yZCk6MCksUC53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIsITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZv'@;
put 'cm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxbInNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVy'@;
put 'IiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKEkpe1Aud3JpdGVfc2hpZnQoNCxJWzFdP251bGw9PXlbSVswXV18fHlbSVswXV0/MDoxOm51bGwhPXlbSVswXV0mJnlbSVswXV0/MDoxKX0pLFB9KFBbIiFwcm90ZWN0'@;
put 'Il0pKX0ocmUsX2UpLGZ1bmN0aW9uIFFTKHksUCxJLFEpe2lmKFBbIiFhdXRvZmlsdGVyIl0pe3ZhciByZT1QWyIhYXV0b2ZpbHRlciJdLGdlPSJzdHJpbmciPT10eXBlb2YgcmUucmVmP3JlLnJlZjpPbyhyZS5yZWYpO0kuV29ya2Jvb2t8fChJLldvcmtib29rPXtTaGVldHM6W119KSxJLldv'@;
put 'cmtib29rLk5hbWVzfHwoSS5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIF9lPUkuV29ya2Jvb2suTmFtZXMsdmU9V3MoZ2UpO3ZlLnMucj09dmUuZS5yJiYodmUuZS5yPVdzKFBbIiFyZWYiXSkuZS5yLGdlPU9vKHZlKSk7Zm9yKHZhciBTZT0wO1NlPF9lLmxlbmd0aDsrK1NlKXt2YXIgSGU9X2Vb'@;
put 'U2VdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1IZS5OYW1lJiZIZS5TaGVldD09USl7SGUuUmVmPSInIitJLlNoZWV0TmFtZXNbUV0rIichIitnZTticmVha319U2U9PV9lLmxlbmd0aCYmX2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpRLFJlZjoiJyIr'@;
put 'SS5TaGVldE5hbWVzW1FdKyInISIrZ2V9KSx1aSh5LCJCcnRCZWdpbkFGaWx0ZXIiLEQxKE9pKGdlKSkpLHVpKHksIkJydEVuZEFGaWx0ZXIiKX19KHJlLF9lLEkseSksZnVuY3Rpb24geEkoeSxQKXshUHx8IVBbIiFtZXJnZXMiXXx8KHVpKHksIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rp'@;
put 'b24gV1MoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9cHIoNCkpLFAud3JpdGVfc2hpZnQoNCx5KSxQfShQWyIhbWVyZ2VzIl0ubGVuZ3RoKSksUFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oSSl7dWkoeSwiQnJ0TWVyZ2VDZWxsIixZUyhJKSl9KSx1aSh5LCJCcnRFbmRNZXJnZUNlbGxz'@;
put 'IikpfShyZSxfZSksZnVuY3Rpb24ga0koeSxQKXtpZihQKXt1aSh5LCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiBLUyh5LFApe251bGw9PVAmJihQPXByKDE4KSksUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0'@;
put 'LDApO2Zvcih2YXIgST0wLFE9MDtRPHkubGVuZ3RoOysrUSkoKHlbUV18fHt9KS5yZWZ8fHt9KS5zJiZ5W1FdLnJlZi5zLmM8MHx8KytJO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsSSksUH0oUCkpO2Zvcih2YXIgST0wO0k8UC5sZW5ndGg7KytJKSgoUFtJXXx8e30pLnJlZnx8e30pLnMmJlBb'@;
put 'SV0ucmVmLnMuYzwwfHx1aSh5LCJCcnREVmFsIix3SShQW0ldKSk7dWkoeSwiQnJ0RW5kRFZhbHMiKX19KHJlLF9lWyIhdmFsaWRhdGlvbnMiXSksZnVuY3Rpb24gRUkoeSxQLEkpe1BbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoUVsxXS5UYXJnZXQpe3ZhciByZT16byhJLC0x'@;
put 'LFFbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxIaS5ITElOSyk7dWkoeSwiQnJ0SExpbmsiLGZ1bmN0aW9uIGNJKHksUCl7dmFyIEk9cHIoNTArNCooeVsxXS5UYXJnZXQubGVuZ3RoKyh5WzFdLlRvb2x0aXB8fCIiKS5sZW5ndGgpKTtEMSh7czpzcyh5WzBdKSxlOnNzKHlbMF0pfSxJ'@;
put 'KSxQYygicklkIitQLEkpO3ZhciBRPXlbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gcmMoKC0xPT1RPyIiOnlbMV0uVGFyZ2V0LnNsaWNlKFErMSkpfHwiIixJKSxyYyh5WzFdLlRvb2x0aXB8fCIiLEkpLHJjKCIiLEkpLEkuc2xpY2UoMCxJLmwpfShRLHJlKSl9fSksZGVsZXRlIFBb'@;
put 'IiFsaW5rcyJdfShyZSxfZSxRKSxfZVsiIW1hcmdpbnMiXSYmdWkocmUsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIHBJKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPXByKDQ4KSksZGYoeSkscVMuZm9yRWFjaChmdW5jdGlvbihJKXtGYyh5W0ldLFApfSksUH0oX2VbIiFtYXJnaW5zIl0pKSwoIVB8'@;
put 'fFAuaWdub3JlRUN8fG51bGw9PVAuaWdub3JlRUMpJiZmdW5jdGlvbiBKUyh5LFApeyFQfHwhUFsiIXJlZiJdfHwodWkoeSwiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksdWkoeSwiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiB2SSh5KXt2YXIgUD1wcigyNCk7cmV0dXJuIFAud3JpdGVfc2hp'@;
put 'ZnQoNCw0KSxQLndyaXRlX3NoaWZ0KDQsMSksRDEoeSxQKSxQfShPaShQWyIhcmVmIl0pKSksdWkoeSwiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0ocmUsX2UpLGZ1bmN0aW9uIHNZKHksUCxJLFEpe2lmKFBbIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgcmU9em8oUSwtMSwiLi4vZHJhd2lu'@;
put 'Z3Mvdm1sRHJhd2luZyIrKEkrMSkrIi52bWwiLEhpLlZNTCk7dWkoeSwiQnJ0TGVnYWN5RHJhd2luZyIsUGMoInJJZCIrcmUpKSxQWyIhbGVnYWN5Il09cmV9fShyZSxfZSx5LFEpLHVpKHJlLCJCcnRFbmRTaGVldCIpLHJlLmVuZCgpfWZ1bmN0aW9uIEE2KHkpe3ZhciBRLFA9W10sST15Lm1h'@;
put 'dGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KHkubWF0Y2goLzxjOnB0IGlkeD0iKFxkKikiPiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIF9lPWdlLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7X2UmJihQWytf'@;
put 'ZVsxXV09ST8rX2VbMl06X2VbMl0pfSk7dmFyIHJlPXhyKCh5Lm1hdGNoKC88Yzpmb3JtYXRDb2RlPihbXHNcU10qPyk8XC9jOmZvcm1hdENvZGU+Lyl8fFsiIiwiR2VuZXJhbCJdKVsxXSk7cmV0dXJuKHkubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rp'@;
put 'b24oZ2Upe1E9Z2UucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbUCxyZSxRXX1IaS5DSEFSVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsSGkuQ0hBUlRFWD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0'@;
put 'LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBmNT0vPCg/Olx3KzopP2NoYXJ0PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4vLGpjPS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3Bsb3RBcmVhPi8sZ2Y9LzwoPzpcdys6KT9s'@;
put 'ZWdlbmQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2xlZ2VuZD4vLFQ2PS88KD86XHcrOik/dGl0bGU+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RpdGxlPi87ZnVuY3Rpb24gbTAoeSxQLEksUSxyZSxnZSxfZSx2ZSl7dmFyIFNlPWdlfHx7IiF0eXBlIjoiY2hhcnQifTtpZigheSlyZXR1cm4gZ2U7'@;
put 'X2UmJl9lLkFuY2hvciYmKFNlWyIhcG9zIl09c2YoX2UuQW5jaG9yLHZlKSxTZVsiIXBvc1R5cGUiXT1fZS5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSxTZVsiIWFic3BvcyJdPXNmKF9lLkFuY2hvcix2ZSksU2VbIiFyZWxwb3MiXT1LbShfZS5BbmNob3IsdmUpKSxTZVsiIXBs'@;
put 'b3QiXT1bXTt2YXIgSGU9IiIsQmU9IiIsR2U9eS5tYXRjaChmNSk7R2U/KEhlPXkuc2xpY2UoMCxHZS5pbmRleCksQmU9eS5zbGljZShHZS5pbmRleCtHZVswXS5sZW5ndGgpKTpIZT1CZT15O3ZhciBudD1bXSxkdD1IZS5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8eS5tYXRjaCgvPGM6bGFuZy4q'@;
put 'Pz4vKXx8QmUubWF0Y2goLzxjOmxhbmcuKj8+Lyk7cmV0dXJuIGR0JiYoU2VbIiFsYW5nIl09KGxuKGR0WzBdKXx8e30pLnZhbHx8ImVuLVVTIiksR2UmJigobnQ9R2VbMV0ubWF0Y2goVDYpKSYmZnVuY3Rpb24gcTEoeSxQKXt2YXIgST0iIjt5Lm1hdGNoKC88YzpyaWNoPi8pJiZ5LnJlcGxh'@;
put 'Y2UoLzxhOnQ+KFtcc1xTXSo/KTxcL2E6dD4vZyxmdW5jdGlvbihRLHJlKXtJKz1yZX0pLFBbIiF0aXRsZSJdPUl8fCJDaGFydCBUaXRsZSJ9KG50WzFdLFNlKSxmdW5jdGlvbiBLMyh5LFApe2lmKHkpe3ZhciBJPTAsUT0wLHJlPSJBIixnZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9'@;
put 'fTt5LnJlcGxhY2UoVHIsZnVuY3Rpb24oX2UsdmUpe3ZhciBTZT17dDp2ZSxjOkksdzowLHNlcjpbXX0sSGU9W10sQmU9KF9lLm1hdGNoKC88YzpzZXIvKXx8W10pLmluZGV4LEdlPUJlP19lLnNsaWNlKDAsQmUpOl9lOyJzY2F0dGVyIj09dmUmJihIZT1fZS5tYXRjaCgvPGM6c2NhdHRlclN0'@;
put 'eWxlKFteXC8+XSopXC8+L20pKSYmbG4oSGVbMF0pLCJiYXIiPT12ZSYmKEhlPV9lLm1hdGNoKC88YzpiYXJEaXIoW15cLz5dKilcLz4vbSkpJiYoU2UuYmFyRGlyPSJiYXIiPT1sbihIZVswXSkudmFsPyJoIjoidiIpLChIZT1HZS5tYXRjaCgvPGM6Z3JvdXBpbmcoW15cLz5dKilcLz4vbSkp'@;
put 'JiYoU2UuZ3JvdXBpbmc9bG4oSGVbMF0pLnZhbHx8InN0YW5kYXJkIiksKF9lLm1hdGNoKHEzKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZHQpe3ZhciBDdD1bXSxjdD17fSxidD1bXTtpZihkdC5tYXRjaCgvPGM6dHg+Lykpe3ZhciBGdD1BNigoZHQubWF0Y2goLzxjOnR4PihbXHNcU10qPyk8'@;
put 'XC9jOnR4Pi8pfHxbXSlbMV18fCIiKXx8W107RnRbMF0mJkZ0WzBdWzBdJiYoY3QubmFtZT1GdFswXVswXSksRnRbMl0mJihjdC5uYW1lcmVmPUZ0WzJdKX1bInhWYWwiLCJ5VmFsIiwiY2F0IiwidmFsIiwiYnViYmxlU2l6ZSJdLmZvckVhY2goZnVuY3Rpb24oa3Qpe3ZhciBadCxUdD1kdC5t'@;
put 'YXRjaChuZXcgUmVnRXhwKCI8YzoiK2t0KyI+W1xcc1xcU10qPzxcXC9jOiIra3QrIj4iLCJnbSIpKTtUdCYmKChUdFswXS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwbil7WnQ9cG4ucmVwbGFjZSgvPC4qPz4vZywiIil9KSwoVHRbMF0ubWF0'@;
put 'Y2goLzxjOig/Olx3KilDYWNoZT5bXHNcU10qPzxcL2M6KD86XHcqKUNhY2hlPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBuKXt2YXIgS249QTYocG4pO2dlLnMucj1nZS5zLmM9MCxnZS5lLmM9SSxyZT1OcyhJKSxLblswXS5mb3JFYWNoKGZ1bmN0aW9uKHVuLHFuKXtQW3JlK0hzKHFu'@;
put 'KV09e3Q6Im51bWJlciI9PXR5cGVvZiB1bj8ibiI6InMiLHY6dW4sejpLblsxXX0sUT1xbn0pLGdlLmUucjxRJiYoZ2UuZS5yPVEpLCsrSSxTZS53KyssQ3QucHVzaChrdCksKEtuWzJdfHxadCkmJmJ0LnB1c2goS25bMl18fFp0KSwidmFsIj09a3QmJihjdC56PUtuWzFdfHwiR2VuZXJhbCIp'@;
put 'fSkpfSksKEhlPV9lLm1hdGNoKC88YzpzbW9vdGgoW15cLz5dKilcLz4vbSkpJiYoY3Quc21vb3RoPW51bGw9PWxuKEhlWzBdKS52YWx8fHlyKGxuKEhlWzBdKS52YWwpKSxjdC5jb2xzPUN0LGN0LnJhbmdlcz1idCxTZS5zZXIucHVzaChjdCl9KSwiZG91Z2hudXQiPT12ZSYmKEhlPV9lLm1h'@;
put 'dGNoKC88Yzpob2xlU2l6ZShbXlwvPl0qKVwvPi9tKSkmJihTZS5ob2xlPShsbihIZVswXSkudmFsfHwxMCkvMTAwKSxQWyIhcGxvdCJdLnB1c2goU2UpfSksST4wJiYoUFsiIXJlZiJdPU9vKGdlKSl9fSgoR2VbMV0ubWF0Y2goamMpfHxbXSlbMV0sU2UpLG51bGwhPShudD1HZVsxXS5tYXRj'@;
put 'aChnZikpJiZmdW5jdGlvbiBUSSh5LFApe3ZhciBJO1BbIiFsZWdlbmQiXT17cG9zOiJyIn0sKEk9eS5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKFBbIiFsZWdlbmQiXS5wb3M9bG4oSVswXSkudmFsfHwiciIpfShudFswXSxTZSkpLFNlfXZhciBUcj0vPGM6KCg/OmFy'@;
put 'ZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxi'@;
put 'dWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxxMz0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207SGkuQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVldCI7dmFyIFgzPVNyKCJjaGFydHNoZWV0'@;
put 'IixudWxsLHt4bWxuczppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yfSk7ZnVuY3Rpb24gUTMoeSxQLEksUSl7dmFyIHJlPVtCbixYM107cmV0dXJuIHJlLnB1c2goIjxzaGVldFByLz4iKSxyZS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1Zp'@;
put 'ZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLHJlW3JlLmxlbmd0aF09U3IoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkMSJ9KSx6byhRLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoeSsxKSsiLnhtbCIsSGkuRFJBVykscmUubGVuZ3RoPjImJihyZVtyZS5sZW5n'@;
put 'dGhdPSI8L2NoYXJ0c2hlZXQ+IixyZVsxXT1yZVsxXS5yZXBsYWNlKCIvPiIsIj4iKSkscmUuam9pbigiIil9ZnVuY3Rpb24gbnAoKXt2YXIgeT13YygpO3JldHVybiB1aSh5LCJCcnRCZWdpblNoZWV0IiksdWkoeSwiQnJ0RW5kU2hlZXQiKSx5LmVuZCgpfXZhciBLMj1bWyJhbGxvd1JlZnJl'@;
put 'c2hRdWVyeSIsITEsImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVt'@;
put 'ZVZlcnNpb24iLDAsImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwh'@;
put 'MSwiYm9vbCJdLFsic2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIi'@;
put 'LCExLCJib29sIl0sWyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sdE09W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFs'@;
put 'U2Nyb2xsIiwhMCwiYm9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbk09W10sck09W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxb'@;
put 'ImNhbGNNb2RlIiwiYXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJp'@;
put 'dGVyYXRlRGVsdGEiLCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIGp2KHksUCl7Zm9yKHZhciBJPTA7SSE9eS5sZW5ndGg7KytJKWZvcih2YXIgUT15W0ldLHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpe3ZhciBnZT1QW3JlXTtpZihudWxsPT1RW2dlWzBdXSlRW2dlWzBdXT1n'@;
put 'ZVsxXTtlbHNlIHN3aXRjaChnZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIFFbZ2VbMF1dJiYoUVtnZVswXV09eXIoUVtnZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBRW2dlWzBdXSYmKFFbZ2VbMF1dPXBhcnNlSW50KFFbZ2VbMF1dLDEwKSl9fX1m'@;
put 'dW5jdGlvbiB6dih5LFApe2Zvcih2YXIgST0wO0khPVAubGVuZ3RoOysrSSl7dmFyIFE9UFtJXTtpZihudWxsPT15W1FbMF1dKXlbUVswXV09UVsxXTtlbHNlIHN3aXRjaChRWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgeVtRWzBdXSYmKHlbUVswXV09eXIoeVtRWzBdXSkpO2Jy'@;
put 'ZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIHlbUVswXV0mJih5W1FbMF1dPXBhcnNlSW50KHlbUVswXV0sMTApKX19fWZ1bmN0aW9uIFV2KHkpe3p2KHkuV0JQcm9wcyxLMiksenYoeS5DYWxjUHIsck0pLGp2KHkuV0JWaWV3LHRNKSxqdih5LlNoZWV0cyxuTSksWjMuZGF0ZTE5MDQ9'@;
put 'eXIoeS5XQlByb3BzLmRhdGUxOTA0KX12YXIgb009Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBadih5LFApe2lmKHkubGVuZ3RoPjMxKXtpZihQKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBJPSEwO3JldHVy'@;
put 'biBvTS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKC0xIT15LmluZGV4T2YoUSkpe2lmKCFQKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO0k9ITF9fSksSX12YXIgYVk9Lzxcdys6d29ya2Jvb2svLGNZPVNyKCJ3b3JrYm9vayIsbnVs'@;
put 'bCx7eG1sbnM6aXMubWFpblswXSwieG1sbnM6ciI6aXMucn0pO2Z1bmN0aW9uIFJJKHksUCl7dmFyIEk9UHx8e30sUT1bQm5dO1FbUS5sZW5ndGhdPWNZO3ZhciByZT15Lldvcmtib29rJiYoeS5Xb3JrYm9vay5OYW1lc3x8W10pLmxlbmd0aD4wO3kuV29ya2Jvb2smJnkuV29ya2Jvb2suTW9k'@;
put 'aWZ5JiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gTEkoeSl7dmFyIFA9e307cmV0dXJuIHkud2FybiYmKFAucmVhZE9ubHlSZWNvbW1lbmRlZD0xKSxQLnVzZXJOYW1lPXkudXNlcnx8IlNoZWV0IEpTIix5LmVuY3J5cHRpb24mJih5LmVuY3J5cHRpb24uYWxnbyYmKFAuYWxnb3JpdGhtTmFtZT15'@;
put 'LmVuY3J5cHRpb24uYWxnbykseS5lbmNyeXB0aW9uLmhhc2gmJihQLmhhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCkseS5lbmNyeXB0aW9uLnNhbHQmJihQLnNhbHRWYWx1ZT15LmVuY3J5cHRpb24uc2FsdCkseS5lbmNyeXB0aW9uLnNwaW4mJihQLnNwaW5Db3VudD15LmVuY3J5cHRpb24u'@;
put 'c3BpbikpLFNyKCJmaWxlU2hhcmluZyIsbnVsbCxQKX0oeS5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgZ2U9e2NvZGVOYW1lOiJUaGlzV29ya2Jvb2sifTt5Lldvcmtib29rJiZ5Lldvcmtib29rLldCUHJvcHMmJihLMi5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtudWxsIT15Lldvcmtib29rLldCUHJv'@;
put 'cHNbSGVbMF1dJiZ5Lldvcmtib29rLldCUHJvcHNbSGVbMF1dIT1IZVsxXSYmKGdlW0hlWzBdXT15Lldvcmtib29rLldCUHJvcHNbSGVbMF1dKX0pLHkuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSYmKGdlLmNvZGVOYW1lPXkuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgZ2Uu'@;
put 'Q29kZU5hbWUpKSxRW1EubGVuZ3RoXT1Tcigid29ya2Jvb2tQciIsbnVsbCxnZSkseS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5Qcm90ZWN0aW9uJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gSUkoeSl7dmFyIFA9e307cmV0dXJuIHkubG9ja1N0cnVjdHVyZSYmKFAubG9ja1N0cnVjdHVyZT0xKSx5'@;
put 'LmxvY2tXaW5kb3dzJiYoUC5sb2NrV2luZG93cz0xKSx5LmVuY3J5cHRpb24mJih5LmVuY3J5cHRpb24uYWxnbyYmKFAud29ya2Jvb2tBbGdvcml0aG1OYW1lPXkuZW5jcnlwdGlvbi5hbGdvKSx5LmVuY3J5cHRpb24uaGFzaCYmKFAud29ya2Jvb2tIYXNoVmFsdWU9eS5lbmNyeXB0aW9uLmhh'@;
put 'c2gpLHkuZW5jcnlwdGlvbi5zYWx0JiYoUC53b3JrYm9va1NhbHRWYWx1ZT15LmVuY3J5cHRpb24uc2FsdCkseS5lbmNyeXB0aW9uLnNwaW4mJihQLndvcmtib29rU3BpbkNvdW50PXkuZW5jcnlwdGlvbi5zcGluKSksU3IoIndvcmtib29rUHJvdGVjdGlvbiIsbnVsbCxQKX0oeS5Xb3JrYm9v'@;
put 'ay5Qcm90ZWN0aW9uKSk7dmFyIF9lPXkuV29ya2Jvb2smJnkuV29ya2Jvb2suU2hlZXRzfHxbXSx2ZT0wO2lmKF9lJiZfZVswXSYmX2VbMF0uSGlkZGVuKXtmb3IoUVtRLmxlbmd0aF09Ijxib29rVmlld3M+Iix2ZT0wO3ZlIT15LlNoZWV0TmFtZXMubGVuZ3RoJiZfZVt2ZV0mJl9lW3ZlXS5I'@;
put 'aWRkZW47Kyt2ZSk7dmU9PXkuU2hlZXROYW1lcy5sZW5ndGgmJih2ZT0wKSxRW1EubGVuZ3RoXT0nPHdvcmtib29rVmlldyBmaXJzdFNoZWV0PSInK3ZlKyciIGFjdGl2ZVRhYj0iJyt2ZSsnIi8+JyxRW1EubGVuZ3RoXT0iPC9ib29rVmlld3M+In1mb3IoUVtRLmxlbmd0aF09IjxzaGVldHM+'@;
put 'Iix2ZT0wO3ZlIT15LlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBTZT17bmFtZTpIcih5LlNoZWV0TmFtZXNbdmVdLnNsaWNlKDAsMzEpKX07aWYoU2Uuc2hlZXRJZD0iIisodmUrMSksU2VbInI6aWQiXT0icklkIisodmUrMSksX2VbdmVdKXN3aXRjaChfZVt2ZV0uSGlkZGVuKXtjYXNl'@;
put 'IDE6U2Uuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOlNlLnN0YXRlPSJ2ZXJ5SGlkZGVuIn1RW1EubGVuZ3RoXT1Tcigic2hlZXQiLG51bGwsU2UpfXJldHVybiBRW1EubGVuZ3RoXT0iPC9zaGVldHM+Iix5LkV4dGVybmFsV0ImJnkuRXh0ZXJuYWxXQi5sZW5ndGgmJihRW1EubGVuZ3Ro'@;
put 'XT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLCh5LkV4dGVybmFsV0J8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEhlLEJlKXt2YXIgR2U9em8oSS53YnJlbHMsLTEsImV4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoQmUrMSkrIi54bWwiLEhpLlhMSU5LKTtRW1EubGVuZ3RoXT0nPGV4dGVybmFs'@;
put 'UmVmZXJlbmNlIHI6aWQ9InJJZCcrR2UrJyIvPid9KSxRW1EubGVuZ3RoXT0iPC9leHRlcm5hbFJlZmVyZW5jZXM+IikscmUmJihRW1EubGVuZ3RoXT0iPGRlZmluZWROYW1lcz4iLHkuV29ya2Jvb2smJnkuV29ya2Jvb2suTmFtZXMmJnkuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlv'@;
put 'bihIZSl7dmFyIEJlPXtuYW1lOkhlLk5hbWV9O0hlLkNvbW1lbnQmJihCZS5jb21tZW50PUhlLkNvbW1lbnQpLG51bGwhPUhlLlNoZWV0JiYoQmUubG9jYWxTaGVldElkPSIiK0hlLlNoZWV0KSxIZS5IaWRkZW4mJihCZS5oaWRkZW49IjEiKSxIZS5SZWYmJihRW1EubGVuZ3RoXT1TcigiZGVm'@;
put 'aW5lZE5hbWUiLEhyKEhlLlJlZiksQmUpKX0pLFFbUS5sZW5ndGhdPSI8L2RlZmluZWROYW1lcz4iKSxJJiZJLnBpdm90cyYmSS5waXZvdHMubGVuZ3RoPjAmJihRLnB1c2goIjxwaXZvdENhY2hlcz4iKSxJLnBpdm90cy5mb3JFYWNoKGZ1bmN0aW9uKEhlLEJlKXtRLnB1c2goJzxwaXZvdENh'@;
put 'Y2hlIGNhY2hlSWQ9IicrKEJlKzEpKyciIHI6aWQ9InJJZCcrSGVbMl0rJyIvPicpfSksUS5wdXNoKCI8L3Bpdm90Q2FjaGVzPiIpKSxRLmxlbmd0aD4yJiYoUVtRLmxlbmd0aF09Ijwvd29ya2Jvb2s+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9ZnVuY3Rpb24g'@;
put 'T0koeSxQKXtyZXR1cm4gUHx8KFA9cHIoMTI3KSksUC53cml0ZV9zaGlmdCg0LHkuSGlkZGVuKSxQLndyaXRlX3NoaWZ0KDQseS5pVGFiSUQpLFBjKHkuc3RyUmVsSUQsUCkscmMoeS5uYW1lLnNsaWNlKDAsMzEpLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIFd2'@;
put 'KHksUCl7dmFyIEk9e307cmV0dXJuIHkucmVhZF9zaGlmdCg0KSxJLkFyY2hJRD15LnJlYWRfc2hpZnQoNCkseS5sKz1QLTgsSX1mdW5jdGlvbiBISSh5LFApe3ZhciBJPXdjKCk7cmV0dXJuIHVpKEksIkJydEJlZ2luQm9vayIpLHVpKEksIkJydEZpbGVWZXJzaW9uIixmdW5jdGlvbiBzTSh5'@;
put 'LFApe1B8fChQPXByKDEyNykpO2Zvcih2YXIgST0wOzQhPUk7KytJKVAud3JpdGVfc2hpZnQoNCwwKTtyZXR1cm4gcmMoIlNoZWV0SlMiLFApLHJjKE0udmVyc2lvbixQKSxyYyhNLnZlcnNpb24sUCkscmMoIjcyNjIiLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfSgpKSx1aShJ'@;
put 'LCJCcnRXYlByb3AiLGZ1bmN0aW9uIEZJKHksUCl7UHx8KFA9cHIoNzIpKTt2YXIgST0wO3JldHVybiB5JiZ5LmZpbHRlclByaXZhY3kmJihJfD04KSxQLndyaXRlX3NoaWZ0KDQsSSksUC53cml0ZV9zaGlmdCg0LDApLHNtKHkmJnkuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siLFApLFAuc2xp'@;
put 'Y2UoMCxQLmwpfSh5Lldvcmtib29rJiZ5Lldvcmtib29rLldCUHJvcHN8fG51bGwpKSxmdW5jdGlvbiBhTSh5LFApe2lmKFAuV29ya2Jvb2smJlAuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIEk9UC5Xb3JrYm9vay5TaGVldHMsUT0wLHJlPS0xLGdlPS0xO1E8SS5sZW5ndGg7KytRKSFJW1Fd'@;
put 'fHwhSVtRXS5IaWRkZW4mJi0xPT1yZT9yZT1ROjE9PUlbUV0uSGlkZGVuJiYtMT09Z2UmJihnZT1RKTtnZT5yZXx8KHVpKHksIkJydEJlZ2luQm9va1ZpZXdzIiksdWkoeSwiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIGc1KHksUCl7cmV0dXJuIFB8fChQPXByKDI5KSksUC53cml0ZV9zaGlmdCgt'@;
put 'NCwwKSxQLndyaXRlX3NoaWZ0KC00LDQ2MCksUC53cml0ZV9zaGlmdCg0LDI4ODAwKSxQLndyaXRlX3NoaWZ0KDQsMTc2MDApLFAud3JpdGVfc2hpZnQoNCw1MDApLFAud3JpdGVfc2hpZnQoNCx5KSxQLndyaXRlX3NoaWZ0KDQseSksUC53cml0ZV9zaGlmdCgxLDEyMCksUC5sZW5ndGg+UC5s'@;
put 'P1Auc2xpY2UoMCxQLmwpOlB9KHJlKSksdWkoeSwiQnJ0RW5kQm9va1ZpZXdzIikpfX0oSSx5KSxmdW5jdGlvbiBENih5LFApe3VpKHksIkJydEJlZ2luQnVuZGxlU2hzIik7Zm9yKHZhciBJPTA7SSE9UC5TaGVldE5hbWVzLmxlbmd0aDsrK0kpdWkoeSwiQnJ0QnVuZGxlU2giLE9JKHtIaWRk'@;
put 'ZW46UC5Xb3JrYm9vayYmUC5Xb3JrYm9vay5TaGVldHMmJlAuV29ya2Jvb2suU2hlZXRzW0ldJiZQLldvcmtib29rLlNoZWV0c1tJXS5IaWRkZW58fDAsaVRhYklEOkkrMSxzdHJSZWxJRDoicklkIisoSSsxKSxuYW1lOlAuU2hlZXROYW1lc1tJXX0pKTt1aSh5LCJCcnRFbmRCdW5kbGVTaHMi'@;
put 'KX0oSSx5KSx1aShJLCJCcnRFbmRCb29rIiksSS5lbmQoKX1mdW5jdGlvbiBaSSh5LFAsSSxRLHJlKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/QUk6V0wpKHksSSxRLHJlKX1mdW5jdGlvbiBsTSh5LFAsSSxRLHJlKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/bnA6UTMpKHks'@;
put 'SSxRLHJlKX1mdW5jdGlvbiBXSSh5LFAsSSl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP3gzOkltKSh5LEkpfWZ1bmN0aW9uIEplKHksUCxJKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/ZUw6VkMpKHksSSl9dmFyIEt2PS8oW1x3Ol0rKT0oKD86IikoW14iXSopKD86Iil8KD86'@;
put 'JykoW14nXSopKD86JykpL2csWHY9LyhbXHc6XSspPSgoPzoiKSg/OlteIl0qKSg/OiIpfCg/OicpKD86W14nXSopKD86JykpLztmdW5jdGlvbiBtdSh5LFApe3ZhciBJPXkuc3BsaXQoL1xzKy8pLFE9W107aWYoUHx8KFFbMF09SVswXSksMT09PUkubGVuZ3RoKXJldHVybiBRO3ZhciBnZSxf'@;
put 'ZSxTZSxyZT15Lm1hdGNoKEt2KTtpZihyZSlmb3IoU2U9MDtTZSE9cmUubGVuZ3RoOysrU2UpLTE9PT0oX2U9KGdlPXJlW1NlXS5tYXRjaChYdikpWzFdLmluZGV4T2YoIjoiKSk/UVtnZVsxXV09Z2VbMl0uc2xpY2UoMSxnZVsyXS5sZW5ndGgtMSk6UVsieG1sbnM6Ij09PWdlWzFdLnNsaWNl'@;
put 'KDAsNik/InhtbG5zIitnZVsxXS5zbGljZSg2KTpnZVsxXS5zbGljZShfZSsxKV09Z2VbMl0uc2xpY2UoMSxnZVsyXS5sZW5ndGgtMSk7cmV0dXJuIFF9ZnVuY3Rpb24gY00oeSl7dmFyIEk9e307aWYoMT09PXkuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gSTt2YXIgcmUsZ2UsdmUsUT15'@;
put 'Lm1hdGNoKEt2KTtpZihRKWZvcih2ZT0wO3ZlIT1RLmxlbmd0aDsrK3ZlKS0xPT09KGdlPShyZT1RW3ZlXS5tYXRjaChYdikpWzFdLmluZGV4T2YoIjoiKSk/SVtyZVsxXV09cmVbMl0uc2xpY2UoMSxyZVsyXS5sZW5ndGgtMSk6SVsieG1sbnM6Ij09PXJlWzFdLnNsaWNlKDAsNik/InhtbG5z'@;
put 'IityZVsxXS5zbGljZSg2KTpyZVsxXS5zbGljZShnZSsxKV09cmVbMl0uc2xpY2UoMSxyZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEl9ZnVuY3Rpb24gR0koeSl7dmFyIFA9e307aWYoeS5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgST17aHB4OjQqcGFyc2VJbnQoeS5EZWZhdWx0Um93SGVpZ2h0KS8z'@;
put 'fTtMMyhJKSxQLnJvdz1JfWlmKHkuRGVmYXVsdENvbFdpZHRoKXt2YXIgUT17d3B4OjQqcGFyc2VJbnQoeS5EZWZhdWx0Q29sV2lkdGgpLzN9O3B1KFEpLFAuY29sPVF9cmV0dXJuIFB9ZnVuY3Rpb24gUmUoeSxQLEksUSl7dmFyIHJlPVE7c3dpdGNoKChJWzBdLm1hdGNoKC9kdDpkdD0iKFtc'@;
put 'dy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4iOnJlPXlyKFEpO2JyZWFrO2Nhc2UiaTIiOmNhc2UiaW50IjpyZT1wYXJzZUludChRLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjpyZT1wYXJzZUZsb2F0KFEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50'@;
put 'eiI6cmU9SHQoUSk7YnJlYWs7Y2FzZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVpZCI6Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIrSVswXSl9eVt4cihQKV09cmV9dmFyIHVNPXswOiJOb25lIiwxOiJT'@;
put 'aW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5nIn0sbWU9QWUodU0pO2Z1bmN0aW9uIHllKHksUCxJLFEpe2lmKFEuY2VsbFN0eWxlcyl7aWYoST1JLnJlcGxhY2UoL1xzKy9nLCIgIiksUC5JbnRlcmlvcil7dmFyIHJlPVAuSW50ZXJp'@;
put 'b3I7cmUuUGF0dGVybiYmKHJlLnBhdHRlcm5UeXBlPUg0W3JlLlBhdHRlcm5dfHxyZS5QYXR0ZXJuKSxyZS5Db2xvciYmcmUuQ29sb3IubWF0Y2goLyNbMC05QS1GYS1mXSovKSYmKHJlLmZnQ29sb3I9e3JnYjpyZS5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBkTSh5KXt5LkJvcmRlcnMm'@;
put 'Jih5LkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgST1QLlBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7eVtJXT17c3R5bGU6cXQoUC5MaW5lU3R5bGUsK1AuV2VpZ2h0KSxjb2xvcjp7cmdiOihQLkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUgeS5Cb3JkZXJzKX0o'@;
put 'UCk7dmFyIF9lLGdlPUkubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtnZSYmKHlyKChfZT1sbihnZVswXSkpLkJvbGQpJiYoUC5Cb2xkPSEwKSx5cihfZS5JdGFsaWMpJiYoUC5JdGFsaWM9ITApLHlyKF9lLlN0cmlrZVRocm91Z2gpJiYoUC5TdHJpa2U9ITApLF9lLlNpemUmJihQ'@;
put 'LlNpemU9K19lLlNpemUpLFAuRm9udE5hbWU9X2UuRm9udE5hbWU/X2UuRm9udE5hbWU6IkFyaWFsIixfZS5VbmRlcmxpbmUmJihQLlVuZGVybGluZT1tZVtfZS5VbmRlcmxpbmVdKSxfZS5Db2xvciYmKFAuUkdCPV9lLkNvbG9yLnNsaWNlKC02KSkpLFAuQWxpZ25tZW50JiYoUC5hbGlnbm1l'@;
put 'bnQ9e30sUC5BbGlnbm1lbnQuVmVydGljYWwmJihQLmFsaWdubWVudC52ZXJ0aWNhbD1QLkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxQLkFsaWdubWVudC5Ib3Jpem9udGFsJiYoUC5hbGlnbm1lbnQuaG9yaXpvbnRhbD1QLkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJD'@;
put 'YXNlKCkpLHlyKFAuQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP1AuYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PVAuQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgUC5hbGlnbm1lbnQud3JhcFRleHQseXIoUC5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihQLmFsaWdubWVudC5z'@;
put 'aHJpbmtUb0ZpdD0hMCksK1AuQWxpZ25tZW50LkluZGVudCYmKFAuYWxpZ25tZW50LmluZGVudD0rUC5BbGlnbm1lbnQuSW5kZW50fHwwKSwrUC5BbGlnbm1lbnQuUm90YXRlJiYoUC5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStQLkFsaWdubWVudC5Sb3RhdGV8fDApKX15W1AuSURdPVAsKCJE'@;
put 'ZWZhdWx0Ij09UC5JRHx8Ik5vcm1hbCI9PVAuTmFtZSkmJloxKFApfWZ1bmN0aW9uIHF0KHksUCl7c3dpdGNoKHkpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRh'@;
put 'c2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK1B8fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2Fz'@;
put 'ZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiB5fWZ1bmN0aW9uIGhNKHksUCxJLFEscmUsZ2UsX2UsdmUsU2UsSGUpe3ZhciBCZT0iR2VuZXJhbCIsR2U9US5TdHlsZUlELG50PXt9O0hlPUhlfHx7'@;
put 'fTt2YXIgZHQ9W10sQ3Q9MDtmb3Iodm9pZCAwPT09R2UmJnZlJiYoR2U9dmUuU3R5bGVJRCksdm9pZCAwPT09R2UmJl9lJiYoR2U9X2UuU3R5bGVJRCk7dm9pZCAwIT09Z2VbR2VdOyl7dmFyIGN0PWdlW0dlXTtpZigiR2VuZXJhbCI9PUJlJiZjdC5uZiYmKEJlPWdlW0dlXS5uZiksY3QuSW50'@;
put 'ZXJpb3ImJmR0LnB1c2goZ2VbR2VdLkludGVyaW9yKSxjdC5hbGlnbm1lbnQmJihudC5hbGlnbm1lbnR8fChudC5hbGlnbm1lbnQ9b24oY3QuYWxpZ25tZW50KSkpLG51bGw9PW50LmJvbGQmJmN0LkJvbGQmJihudC5ib2xkPSEwKSxudWxsPT1udC5pdGFsaWMmJmN0Lkl0YWxpYyYmKG50Lml0'@;
put 'YWxpYz0hMCksbnVsbD09bnQuc3RyaWtlJiZjdC5TdHJpa2UmJihudC5zdHJpa2U9ITApLG51bGw9PW50LnN6JiZjdC5TaXplJiYobnQuc3o9Y3QuU2l6ZSksbnVsbD09bnQubmFtZSYmY3QuRm9udE5hbWUmJihudC5uYW1lPWN0LkZvbnROYW1lKSxudWxsPT1udC51bmRlcmxpbmUmJmN0LlVu'@;
put 'ZGVybGluZSYmKG50LnVuZGVybGluZT1jdC5VbmRlcmxpbmUpLG51bGw9PW50LmNvbG9yJiZjdC5SR0ImJihudC5jb2xvcj17cmdiOmN0LlJHQn0pLFsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihUdCl7bnVsbD09bnRbVHRdJiZjdFtUdF0mJihudFtU'@;
put 'dF09b24oY3RbVHRdKSl9KSwiRGVmYXVsdCI9PUdlKWJyZWFrO0dlPWN0LlBhcmVudHx8IkRlZmF1bHQifW50Lm5hbWV8fChudC5uYW1lPWdlLkRlZmF1bHQmJmdlLkRlZmF1bHQuRm9udE5hbWV8fCJBcmlhbCIpLG50LnN6fHwobnQuc3o9Z2UuRGVmYXVsdCYmZ2UuRGVmYXVsdC5TaXplfHwx'@;
put 'Mik7dmFyIGJ0PSIiO2lmKHl8fFEuRm9ybXVsYXx8IlN0cmluZyI9PUkuVHlwZXx8Ik51bWJlciI9PUkuVHlwZSlzd2l0Y2goSS5UeXBlKXtjYXNlIkJvb2xlYW4iOlEudD0iYiIsUS52PXlyKHkpO2JyZWFrO2Nhc2UiU3RyaW5nIjpRLnQ9InMiLGJ0PUdpKHhyKHkpKSxRLnY9eS5pbmRleE9m'@;
put 'KCI8Iik+LTE/eHIoUHx8eSkucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCx5LmluZGV4T2YoIjwiKT4tMSYmKFEuUj1GdS5odG1sX3RvX3JzKHhyKHkpKSk7YnJlYWs7Y2FzZSJEYXRlVGltZSI6IloiIT15LnNsaWNlKC0xKSYmKHkrPSJaIiksUS52PShIdCh5KS1uZXcgRGF0ZShEYXRlLlVU'@;
put 'QygxODk5LDExLDMwKSkpLzg2NGU1LFEudiE9US52P1Eudj14cih5KTpRLnY8NjAmJihRLnY9US52LTEpLCghQmV8fCJHZW5lcmFsIj09QmUpJiYoQmU9Inl5eXktbW0tZGQiKTtjYXNlIk51bWJlciI6dm9pZCAwPT09US52JiYoUS52PSt5KSxRLnR8fChRLnQ9Im4iKTticmVhaztjYXNlIkVy'@;
put 'cm9yIjpRLnQ9ImUiLFEudj1LYVt5XSwhMSE9PUhlLmNlbGxUZXh0JiYoUS53PXkpO2JyZWFrO2RlZmF1bHQ6IiI9PXkmJiIiPT1QP1EudD0ieiI6KFEudD0icyIsYnQ9R2koeHIoeSkpLFEudj15LmluZGV4T2YoIjwiKT4tMT94cihQfHx5KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LHku'@;
put 'aW5kZXhPZigiPCIpPi0xJiYoUS5SPUZ1Lmh0bWxfdG9fcnMoeHIoeSkpKSl9ZWxzZSBRLnQ9InoiLGRlbGV0ZSBRLnY7aWYoZnVuY3Rpb24gSnYoeSxQLEkpe2lmKCJ6IiE9PXkudCl7aWYoIUl8fCExIT09SS5jZWxsVGV4dCl0cnl7eS53PSJlIj09PXkudD95Lnd8fFFvW3kudl06IkdlbmVy'@;
put 'YWwiPT09UD8ibiI9PT15LnQ/KDB8eS52KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik6dy5fZ2VuZXJhbCh5LnYpOmZ1bmN0aW9uICRpKHksUCl7dmFyIEk9bmVbeV18fHhyKHkpO3JldHVybiJHZW5lcmFsIj09PUk/dy5fZ2VuZXJhbChQKTp3LmZvcm1h'@;
put 'dChJLFApfShQfHwiR2VuZXJhbCIseS52KX1jYXRjaChnZSl7aWYoSS5XVEYpdGhyb3cgZ2V9dHJ5e3ZhciBRPW5lW1BdfHxQfHwiR2VuZXJhbCI7aWYoSS5jZWxsTkYmJih5Lno9USksSS5jZWxsRGF0ZXMmJiJuIj09eS50JiZ3LmlzX2RhdGUoUSkpe3ZhciByZT13LnBhcnNlX2RhdGVfY29k'@;
put 'ZSh5LnYpO3JlJiYoeS50PSJkIix5LnY9bmV3IERhdGUocmUueSxyZS5tLTEscmUuZCxyZS5ILHJlLk0scmUuUyxyZS51KSl9fWNhdGNoKGdlKXtpZihJLldURil0aHJvdyBnZX19fShRLEJlLEhlKSwhMSE9PUhlLmNlbGxGb3JtdWxhKWlmKFEuRm9ybXVsYSl7dmFyIEZ0PXhyKFEuRm9ybXVs'@;
put 'YSk7NjE9PUZ0LmNoYXJDb2RlQXQoMCkmJihGdD1GdC5zbGljZSgxKSksUS5mPWFmKEZ0LHJlKSxkZWxldGUgUS5Gb3JtdWxhLCJSQyI9PVEuQXJyYXlSYW5nZT9RLkY9YWYoIlJDOlJDIixyZSk6US5BcnJheVJhbmdlJiYoUS5GPWFmKFEuQXJyYXlSYW5nZSxyZSksU2UucHVzaChbT2koUS5G'@;
put 'KSxRLkZdKSl9ZWxzZSBmb3IoQ3Q9MDtDdDxTZS5sZW5ndGg7KytDdClyZS5yPj1TZVtDdF1bMF0ucy5yJiZyZS5yPD1TZVtDdF1bMF0uZS5yJiZyZS5jPj1TZVtDdF1bMF0ucy5jJiZyZS5jPD1TZVtDdF1bMF0uZS5jJiYoUS5GPVNlW0N0XVsxXSk7aWYoSGUuY2VsbFN0eWxlcyYmKGR0LmZv'@;
put 'ckVhY2goZnVuY3Rpb24oVHQpeyFudC5wYXR0ZXJuVHlwZSYmVHQucGF0dGVyblR5cGUmJihudC5wYXR0ZXJuVHlwZT1UdC5wYXR0ZXJuVHlwZSksIW50LmZnQ29sb3ImJlR0LmZnQ29sb3ImJihudC5mZ0NvbG9yPVR0LmZnQ29sb3IpfSksUS5zPW50KSx2b2lkIDAhPT1RLlN0eWxlSUQmJihR'@;
put 'Lml4ZmU9US5TdHlsZUlEKSxRLlImJlEucyl7dmFyIGt0PW9uKFEucyk7ZGVsZXRlIGt0LmJvbGQsZGVsZXRlIGt0Lml0YWxpYyxkZWxldGUga3QudW5kZXJsaW5lLGRlbGV0ZSBrdC5zdHJpa2UsUS5SLmZvckVhY2goZnVuY3Rpb24oVHQpe1R0LnM9VXQob24oa3QpLFR0LnMpfSl9fWZ1bmN0'@;
put 'aW9uICRJKHkpe3kudD15LnZ8fCIiLHkudD15LnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIikseS52PXkudz15Lml4ZmU9dm9pZCAwfWZ1bmN0aW9uIFF2KHkpe2lmKGhlJiZCdWZmZXIuaXNCdWZmZXIoeSkpcmV0dXJuIHkudG9TdHJpbmcoInV0ZjgiKTtpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIHkpcmV0dXJuIHk7aWYodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ5IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gUGkoTihDKHkpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIFZy'@;
put 'PS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/OjxcL11bXj5dKik/Pi9nbTtmdW5jdGlvbiB6cih5LFApe3ZhciBJPVB8fHt9LFE9VShRdih5KSk7KCJiaW5hcnkiPT1JLnR5cGV8fCJhcnJheSI9PUkudHlwZXx8ImJhc2U2NCI9PUkudHlwZSkmJihRPXR5'@;
put 'cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxCKFEpKTpQaShRKSk7dmFyIHJlPVEuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgpLGdlPSExO2lmKCgxMDIzJnJlLmluZGV4T2YoIj4iKSk+TWF0aC5taW4oMTAyMyZyZS5pbmRleE9mKCIsIiksMTAyMyZyZS5p'@;
put 'bmRleE9mKCI7IikpKXt2YXIgX2U9b24oSSk7cmV0dXJuIF9lLnR5cGU9InN0cmluZyIsQjEudG9fd29ya2Jvb2soUSxfZSl9aWYoLTE9PXJlLmluZGV4T2YoIjw/eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJzY3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVu'@;
put 'Y3Rpb24obnUpe3JlLmluZGV4T2YoIjwiK251KT49MCYmKGdlPSEwKX0pLGdlKXJldHVybiBGdS50b193b3JrYm9vayhRLEkpO3ZhciB2ZSxIZSxTZT1bXTtudWxsIT10ZSYmbnVsbD09SS5kZW5zZSYmKEkuZGVuc2U9dGUpO3ZhciB1cixCZT17fSxHZT1bXSxudD1JLmRlbnNlP1tdOnt9LGR0'@;
put 'PSIiLEN0PXt9LGN0PXt9LGJ0PXt9LEZ0PW11KCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicpLGt0PTAsVHQ9MCxadD0wLHBuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEtuPXt9LHVuPXt9LHFuPSIiLHpuPTAsa249W10sZXI9e30sdHI9e30sWm49MCxCcj1bXSxzaT17fSx4aT1b'@;
put 'XSxJaT17fSxRcj1bXSxBbj0hMSx2cj1bXSxycj1bXSxTbj17fSxtcj0wLHdpPTAsVXI9e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LGppPXt9O1ZyLmxhc3RJbmRleD0wLFE9US5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBfbz0iIjt2ZT1Wci5l'@;
put 'eGVjKFEpOylzd2l0Y2godmVbM109KF9vPXZlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRhdGEiOmlmKCJkYXRhIj09X28pe2lmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNl'@;
put 'Ii8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmU2UucHVzaChbdmVbM10sITBdKTticmVha31pZihTZVtTZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09dmVbMV0/aE0oUS5zbGljZShrdCx2ZS5pbmRleCkscW4sRnQsImNvbW1lbnQiPT1TZVtTZS5sZW5ndGgtMV1bMF0/SWk6'@;
put 'Y3Qse2M6VHQscjpadH0sS24sUXJbVHRdLGJ0LHZyLEkpOihxbj0iIixGdD1tdSh2ZVswXSksa3Q9dmUuaW5kZXgrdmVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwiOmlmKCIvIj09PXZlWzFdfHwiLz4iPT09dmVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKXtp'@;
put 'ZigoY3Q9Y00odmVbMF0pKS5JbmRleCYmKFR0PStjdC5JbmRleC0xKSxUdDxwbi5zLmMmJihwbi5zLmM9VHQpLFR0PnBuLmUuYyYmKHBuLmUuYz1UdCkseGk9W10sIUkuc2hlZXRTdHVicyl7KytUdDticmVha31oTSgiIiwiIix7fSwiY29tbWVudCI9PVNlW1NlLmxlbmd0aC0xXVswXT9JaTpj'@;
put 'dCx7YzpUdCxyOlp0fSxLbixRcltUdF0sYnQsdnIsSSl9aWYoeGkubGVuZ3RoPjAmJihjdC5jPXhpKSwoIUkuc2hlZXRSb3dzfHxJLnNoZWV0Um93cz5adCkmJih2b2lkIDAhPT1jdC52fHxJLnNoZWV0U3R1YnMpJiYoSS5kZW5zZT8obnRbWnRdfHwobnRbWnRdPVtdKSxudFtadF1bVHRdPWN0'@;
put 'KTpudFtOcyhUdCkrSHMoWnQpXT1jdCksY3QuSFJlZiYmKGN0Lmw9e1RhcmdldDp4cihjdC5IUmVmKX0sY3QuSFJlZlNjcmVlblRpcCYmKGN0LmwuVG9vbHRpcD1jdC5IUmVmU2NyZWVuVGlwKSxkZWxldGUgY3QuSFJlZixkZWxldGUgY3QuSFJlZlNjcmVlblRpcCksKGN0Lk1lcmdlQWNyb3Nz'@;
put 'fHxjdC5NZXJnZURvd24pJiYobXI9VHQrKDB8cGFyc2VJbnQoY3QuTWVyZ2VBY3Jvc3MsMTApKSx3aT1adCsoMHxwYXJzZUludChjdC5NZXJnZURvd24sMTApKSwobXI+VHR8fHdpPlp0KSYma24ucHVzaCh7czp7YzpUdCxyOlp0fSxlOntjOm1yLHI6d2l9fSkpLEkuc2hlZXRTdHVicylpZihj'@;
put 'dC5NZXJnZUFjcm9zc3x8Y3QuTWVyZ2VEb3duKXtmb3IodmFyIFRpPVR0O1RpPD1tcjsrK1RpKWZvcih2YXIgWW89WnQ7WW88PXdpOysrWW8pKFRpPlR0fHxZbz5adCkmJihJLmRlbnNlPyhudFtZb118fChudFtZb109W10pLG50W1lvXVtUaV09e3Q6InoifSk6bnRbTnMoVGkpK0hzKFlvKV09'@;
put 'e3Q6InoifSk7VHQ9bXIrMX1lbHNlKytUdDtlbHNlIGN0Lk1lcmdlQWNyb3NzP1R0PW1yKzE6KytUdH1lbHNlKGN0PWNNKHZlWzBdKSkuSW5kZXgmJihUdD0rY3QuSW5kZXgtMSksVHQ8cG4ucy5jJiYocG4ucy5jPVR0KSxUdD5wbi5lLmMmJihwbi5lLmM9VHQpLCIvPiI9PT12ZVswXS5zbGlj'@;
put 'ZSgtMikmJisrVHQseGk9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXZlWzFdfHwiLz4iPT09dmVbMF0uc2xpY2UoLTIpPyhadDxwbi5zLnImJihwbi5zLnI9WnQpLFp0PnBuLmUuciYmKHBuLmUucj1adCksIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSYmKGJ0PW11KHZlWzBdKSkuSW5kZXgmJiha'@;
put 'dD0rYnQuSW5kZXgtMSksVHQ9MCwrK1p0KTooKGJ0PW11KHZlWzBdKSkuSW5kZXgmJihadD0rYnQuSW5kZXgtMSksU249e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdodHx8YnQuSGVpZ2h0KSYmKFNuLmhwdD1wYXJzZUZsb2F0KGJ0LkhlaWdodCksU24uaHB4PVUxKFNuLmhwdCkscnJbWnRdPVNu'@;
put 'KSwiMSI9PWJ0LkhpZGRlbiYmKFNuLmhpZGRlbj0hMCxycltadF09U24pKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpO0dlLnB1c2goZHQp'@;
put 'LHBuLnMucjw9cG4uZS5yJiZwbi5zLmM8PXBuLmUuYyYmKG50WyIhcmVmIl09T28ocG4pLEkuc2hlZXRSb3dzJiZJLnNoZWV0Um93czw9cG4uZS5yJiYobnRbIiFmdWxscmVmIl09bnRbIiFyZWYiXSxwbi5lLnI9SS5zaGVldFJvd3MtMSxudFsiIXJlZiJdPU9vKHBuKSkpLGtuLmxlbmd0aCYm'@;
put 'KG50WyIhbWVyZ2VzIl09a24pLFFyLmxlbmd0aD4wJiYobnRbIiFjb2xzIl09UXIpLHJyLmxlbmd0aD4wJiYobnRbIiFyb3dzIl09cnIpLEN0JiYobnRbIiFzaGVldEZvcm1hdCJdPUdJKEN0KSksQmVbZHRdPW50fWVsc2UgcG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sWnQ9VHQ9'@;
put 'MCxTZS5wdXNoKFt2ZVszXSwhMV0pLEhlPW11KHZlWzBdKSxkdD14cihIZS5OYW1lKSxudD1JLmRlbnNlP1tdOnt9LGtuPVtdLHZyPVtdLHJyPVtdLFVyLlNoZWV0cy5wdXNoKGppPXtuYW1lOmR0LEhpZGRlbjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1T'@;
put 'ZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09dmVbMF0uc2xpY2UoLTIpKWJyZWFrO0N0PW11KHZlWzBdKSxTZS5wdXNoKFt2ZVszXSwhMV0pLFFyPVtdLEFuPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIv'@;
put 'Ij09PXZlWzFdP3llKEtuLHVuLHFuLEkpOih1bj1tdSh2ZVswXSkscW49IiIpO2JyZWFrO2Nhc2UibnVtYmVyZm9ybWF0Ijp1bi5uZj14cihtdSh2ZVswXSkuRm9ybWF0fHwiR2VuZXJhbCIpLG5lW3VuLm5mXSYmKHVuLm5mPW5lW3VuLm5mXSk7Zm9yKHZhciBsbz0wOzM5MiE9bG8mJncuX3Rh'@;
put 'YmxlW2xvXSE9dW4ubmY7Kytsbyk7aWYoMzkyPT1sbylmb3IobG89NTc7MzkyIT1sbzsrK2xvKWlmKG51bGw9PXcuX3RhYmxlW2xvXSl7dy5sb2FkKHVuLm5mLGxvKTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PVNlW1NlLmxlbmd0aC0xXVswXXx8Ii8iPT09dmVbMV0p'@;
put 'YnJlYWs7aWYoKHVyPW11KHZlWzBdKSkuSGlkZGVuJiYodXIuaGlkZGVuPSEwLGRlbGV0ZSB1ci5IaWRkZW4pLHVyLldpZHRoP3VyLndweD00KnBhcnNlSW50KHVyLldpZHRoLDEwKS8zOit1ci5BdXRvRml0V2lkdGgmJih1ci5hdXRvPTEpLCFBbiYmdXIud3B4PjEwKXtBbj0hMCxwbD1sQztm'@;
put 'b3IodmFyIEFvPTA7QW88UXIubGVuZ3RoOysrQW8pUXJbQW9dJiZwdShRcltBb10pfUFuJiZwdSh1ciksUXJbdXIuSW5kZXgtMXx8UXIubGVuZ3RoXT11cjtmb3IodmFyIHhvPTA7eG88K3VyLlNwYW47Kyt4bylRcltRci5sZW5ndGhdPW9uKHVyKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlm'@;
put 'KCIvIj09PXZlWzFdKWJyZWFrO1VyLk5hbWVzfHwoVXIuTmFtZXM9W10pO3ZhciBoaT1sbih2ZVswXSksdGE9e05hbWU6aGkuTmFtZSxSZWY6YWYoaGkuUmVmZXJzVG8uc2xpY2UoMSkse3I6MCxjOjB9KX07VXIuU2hlZXRzLmxlbmd0aD4wJiYodGEuU2hlZXQ9VXIuU2hlZXRzLmxlbmd0aC0x'@;
put 'KSxVci5OYW1lcy5wdXNoKHRhKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNlImkiOmNhc2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpjYXNlImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFncmFwaHMi'@;
put 'OmNhc2UibmFtZSI6YnJlYWs7Y2FzZSJhbGlnbm1lbnQiOmlmKCFJLmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO3VuLkFsaWdubWVudD1tdSh2ZVswXSk7YnJlYWs7Y2FzZSJib3JkZXJzIjoiLyIhPT12ZVsxXSYmKHVuLkJvcmRlcnM9W10pO2JyZWFrO2Nhc2UiYm9yZGVyIjppZigi'@;
put 'LyI9PT12ZVsxXSlicmVhazt1bi5Cb3JkZXJzfHwodW4uQm9yZGVycz1bXSksdW4uQm9yZGVycy5wdXNoKG11KHZlWzBdKSk7YnJlYWs7Y2FzZSJmb250IjppZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKXtxbis9dmVbMF07YnJlYWt9Ii8iPT09dmVbMV0/cW4rPVEuc2xpY2Uoem4sdmUuaW5k'@;
put 'ZXgrdmVbMF0ubGVuZ3RoKTp6bj12ZS5pbmRleDticmVhaztjYXNlImludGVyaW9yIjppZighSS5jZWxsU3R5bGVzfHwiLyI9PT12ZVsxXSlicmVhazt1bi5JbnRlcmlvcj1tdSh2ZVswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3Jl'@;
put 'YXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNvbXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2Ui'@;
put 'aHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRlbnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXZlWzFdP1JkKGVyLF9vLFEuc2xpY2UoWm4sdmUuaW5k'@;
put 'ZXgpKTpabj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIFNlLnB1c2go'@;
put 'W3ZlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSk7JEkoSWkpLHhpLnB1c2goSWkpfWVsc2UgU2UucHVzaChbdmVbM10sITFdKSxJ'@;
put 'aT17YTooSGU9bXUodmVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09dmVbMF0uY2hhckF0'@;
put 'KHZlWzBdLmxlbmd0aC0yKSl7dmFyIE1uPW11KHZlWzBdKTtudFsiIWF1dG9maWx0ZXIiXT17cmVmOmFmKE1uLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0sU2UucHVzaChbdmVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihudFsiIXZhbGlkYXRpb25zIl18fChudFsi'@;
put 'IXZhbGlkYXRpb25zIl09W10pLCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmU2UucHVzaChbdmVbM10sITBdKSxz'@;
put 'aT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXZlWzFdKXt2YXIgTXM9K1Euc2xpY2Uoa3QsdmUuaW5kZXgpOyg3Mj09TXN8fDk2PT1NcykmJkZtKE1zKX1lbHNlIGt0PXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2Ui'@;
put 'ZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6Y2FzZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVl'@;
put 'cnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0dGFncyI6Y2FzZSJleGNlbHdvcmtib29rIjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpp'@;
put 'ZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXZlWzBdLmNoYXJBdCh2ZVswXS5sZW5ndGgtMikmJlNlLnB1c2goW3ZlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigw'@;
put 'PT1TZS5sZW5ndGgmJiJkb2N1bWVudCI9PXZlWzNdfHwwPT1TZS5sZW5ndGgmJiJ1b2YiPT12ZVszXSlyZXR1cm4gYV8oUSxJKTt2YXIgeXM9ITA7c3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2godmVbM10pe2Nhc2UiYWxsb3dw'@;
put 'bmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJl'@;
put 'YWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2godmVbM10pe2Nhc2UidG9vbGJhciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlv'@;
put 'biI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVyIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiZXhjZWx3b3JrYm9vayI6c3dpdGNoKHZlWzNdKXtjYXNlImRhdGUxOTA0IjpVci5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Ui'@;
put 'd2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNh'@;
put 'c2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZv'@;
put 'cm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVu'@;
put 'Y2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2Fz'@;
put 'ZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tv'@;
put 'cHRpb25zIjpzd2l0Y2godmVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNhc2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2godmVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXZlWzBdLnNsaWNlKC0y'@;
put 'KSlpZigiLyI9PT12ZVsxXSlzd2l0Y2goUS5zbGljZShabix2ZS5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOmppLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRWZXJ5SGlkZGVuIjpqaS5IaWRkZW49Mn1lbHNlIFpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6'@;
put 'bnRbIiFtYXJnaW5zIl18fGRmKG50WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksbnRbIiFtYXJnaW5zIl0uaGVhZGVyPWxuKHZlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJmb290ZXIiOm50WyIhbWFyZ2lucyJdfHxkZihudFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLG50WyIhbWFyZ2lucyJdLmZv'@;
put 'b3Rlcj1sbih2ZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBFbD1sbih2ZVswXSk7bnRbIiFtYXJnaW5zIl18fGRmKG50WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksRWwuVG9wJiYobnRbIiFtYXJnaW5zIl0udG9wPUVsLlRvcCksRWwuTGVmdCYmKG50WyIhbWFyZ2lu'@;
put 'cyJdLmxlZnQ9RWwuTGVmdCksRWwuUmlnaHQmJihudFsiIW1hcmdpbnMiXS5yaWdodD1FbC5SaWdodCksRWwuQm90dG9tJiYobnRbIiFtYXJnaW5zIl0uYm90dG9tPUVsLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOlVyLlZpZXdzfHwoVXIuVmlld3M9W10pLFVyLlZp'@;
put 'ZXdzWzBdfHwoVXIuVmlld3NbMF09e30pLFVyLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNlImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2UiYWN0aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBh'@;
put 'bmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIiOmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2Fz'@;
put 'ZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNlInZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJv'@;
put 'd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNlInBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNh'@;
put 'c2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFs'@;
put 'bG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxsb3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5'@;
put 'aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2VicmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRp'@;
put 'b24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXZl'@;
put 'WzBdLnNsaWNlKC0yKSlpZigiLyI9PXZlWzFdKXtudFsiIWZyZWV6ZSJdfHwobnRbIiFmcmVlemUiXT0iQTEiKTt2YXIgc2w9c3MobnRbIiFmcmVlemUiXSk7InNwbGl0aG9yaXpvbnRhbCI9PXZlWzNdP3NsLnI9K1Euc2xpY2UoWm4sdmUuaW5kZXgpOnNsLmM9K1Euc2xpY2UoWm4sdmUuaW5k'@;
put 'ZXgpLG50WyIhZnJlZXplIl09ZGkoc2wpfWVsc2UgWm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpudFsiIWdyaWRsaW5lcyJdPSExO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpudFsiIW91dGxpbmUiXXx8KG50'@;
put 'WyIhb3V0bGluZSJdPXt9KSxudFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5vc3VtbWFyeWNvbHVtbnNyaWdodGRldGFpbCI6bnRbIiFvdXRsaW5lIl18fChudFsiIW91dGxpbmUiXT17fSksbnRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OnlzPSExfWJyZWFr'@;
put 'O2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2godmVbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNh'@;
put 'c2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpj'@;
put 'YXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2Fz'@;
put 'ZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0'@;
put 'aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJl'@;
put 'ZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHZlWzNdKXtjYXNl'@;
put 'ImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJlYWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2VuZCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhdXRv'@;
put 'ZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRlcmFuZCI6Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJxdWVyeXRhYmxlIjpzd2l0Y2godmVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQi'@;
put 'OmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1h'@;
put 'bmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJl'@;
put 'ciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6'@;
put 'Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaCh2ZVszXSl7Y2FzZSJyYW5nZSI6c2kucmVmPXZlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4'@;
put 'IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNh'@;
put 'c2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpjYXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2Fz'@;
put 'ZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHZlWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1'@;
put 'ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2Ui'@;
put 'cXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKHZlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6'@;
put 'Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNlImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpj'@;
put 'YXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9aWYoeXN8fHZlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lm'@;
put 'KCFTZVtTZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIit2ZVszXSsifCIrU2Uuam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09U2VbU2UubGVuZ3RoLTFdWzBdKXtpZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXZlWzFd'@;
put 'P1JlKHRyLF9vLEJyLFEuc2xpY2UoWm4sdmUuaW5kZXgpKTooQnI9dmUsWm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoKTticmVha31pZihJLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitTZS5qb2luKCJ8Iil9dmFyIGdsPXt9O3JldHVybiFJLmJvb2tTaGVldHMmJiFJ'@;
put 'LmJvb2tQcm9wcyYmKGdsLlNoZWV0cz1CZSksZ2wuU2hlZXROYW1lcz1HZSxnbC5Xb3JrYm9vaz1VcixnbC5TU0Y9dy5nZXRfdGFibGUoKSxnbC5Qcm9wcz1lcixnbC5DdXN0cHJvcHM9dHIsZ2wuU2hlZXRzJiZnbC5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24obnUpe3ZhciB0bD1nbC5T'@;
put 'aGVldHNbbnVdO3RsWyIhbWVyZ2VzIl0mJnRsWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihLdCl7InN0cmluZyI9PXR5cGVvZiBLdCYmKEt0PU0udXRpbHMuZGVjb2RlX3JhbmdlKEt0KSk7dmFyIGduPU0udXRpbHMuZW5jb2RlX2NlbGwoS3QucyksSW49QXJyYXkuaXNBcnJheSh0bCk/'@;
put 'KHRsW0t0LnMucl18fFtdKVtLdC5zLmNdOnRsW2duXTtJbiYmSW4ucyYmKG51bGwhPUluLnMudG9wJiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse3RvcDpJbi5zLnRvcH0pLG51bGwhPUluLnMuYm90dG9tJiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse2JvdHRvbTpJ'@;
put 'bi5zLmJvdHRvbX0pLG51bGwhPUluLnMubGVmdCYmcW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlKHRsLEt0LHtsZWZ0OkluLnMubGVmdH0pLG51bGwhPUluLnMucmlnaHQmJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7cmlnaHQ6SW4ucy5yaWdodH0pKX0pfSksZ2x9ZnVuY3Rpb24g'@;
put 'amEoeSxQKXtzd2l0Y2goUDYoUD1QfHx7fSksUC50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNlNjQiOnJldHVybiB6cihzZS5kZWNvZGUoeSksUCk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiB6cih5LFApO2Nhc2UiYXJyYXkiOnJldHVybiB6cihOKHkpLFAp'@;
put 'fX1mdW5jdGlvbiBWbih5KXtyZXR1cm4gU3IoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1lIjp5Lk5hbWUsInNzOlJlZmVyc1RvIjoiPSIrSzkoeS5SZWYse3I6MCxjOjB9KX0pfWZ1bmN0aW9uIGdNKHksUCxJLFEscmUsZ2UsX2Upe2lmKCF5fHxudWxsPT15LnYmJm51bGw9PXkuZiYmIVEu'@;
put 'c2hlZXRTdHVicylyZXR1cm4iIjt2YXIgdmU9e307aWYoeS5mJiYodmVbInNzOkZvcm11bGEiXT0iPSIrSHIoSzkoeS5mLF9lKSkpLHkuRiYmeS5GLnNsaWNlKDAsUC5sZW5ndGgpPT1QKXt2YXIgU2U9c3MoeS5GLnNsaWNlKFAubGVuZ3RoKzEpKTt2ZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpS'@;
put 'IisoU2Uucj09X2Uucj8iIjoiWyIrKFNlLnItX2UucikrIl0iKSsiQyIrKFNlLmM9PV9lLmM/IiI6IlsiKyhTZS5jLV9lLmMpKyJdIil9aWYoeS5sJiZ5LmwuVGFyZ2V0JiYodmVbInNzOkhSZWYiXT1Icih5LmwuVGFyZ2V0KSx5LmwuVG9vbHRpcCYmKHZlWyJ4OkhSZWZTY3JlZW5UaXAiXT1I'@;
put 'cih5LmwuVG9vbHRpcCkpKSxJWyIhbWVyZ2VzIl0pZm9yKHZhciBIZT1JWyIhbWVyZ2VzIl0sQmU9MDtCZSE9SGUubGVuZ3RoOysrQmUpSGVbQmVdLnMuYyE9X2UuY3x8SGVbQmVdLnMuciE9X2Uucnx8KEhlW0JlXS5lLmM+SGVbQmVdLnMuYyYmKHZlWyJzczpNZXJnZUFjcm9zcyJdPUhlW0Jl'@;
put 'XS5lLmMtSGVbQmVdLnMuYyksSGVbQmVdLmUucj5IZVtCZV0ucy5yJiYodmVbInNzOk1lcmdlRG93biJdPUhlW0JlXS5lLnItSGVbQmVdLnMucikpO3ZhciBHZT0iIixudD0iIjtzd2l0Y2goeS50KXtjYXNlInoiOmlmKCFRLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpHZT0i'@;
put 'TnVtYmVyIixudD1TdHJpbmcoeS52KTticmVhaztjYXNlImIiOkdlPSJCb29sZWFuIixudD15LnY/IjEiOiIwIjticmVhaztjYXNlImUiOkdlPSJFcnJvciIsbnQ9UW9beS52XTticmVhaztjYXNlImQiOkdlPSJEYXRlVGltZSIsbnQ9bmV3IERhdGUoeS52KS50b0lTT1N0cmluZygpLG51bGw9'@;
put 'PXkueiYmKHkuej15Lnp8fHcuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpHZT0iU3RyaW5nIixudD1pbyh5LnZ8fCIiKX12YXIgZHQ9Z3UoUS5jZWxsWGZzLG51bGwseSxRKTt2ZVsic3M6U3R5bGVJRCJdPSJzIisoMjErZHQpLHZlWyJzczpJbmRleCJdPV9lLmMrMTt2YXIgQ3Q9bnVsbCE9'@;
put 'eS52P250OiIiLGN0PSJ6Ij09eS50PyIiOnkuUj9mdW5jdGlvbiBYSSh5KXtyZXR1cm4nPHNzOkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Jyt5Lm1hcChmdW5jdGlvbihJKXt2YXIgUT1pbyhJLnYpO3JldHVybiBJLnMmJihJ'@;
put 'LnMuYm9sZCYmKFE9IjxCPiIrUSsiPC9CPiIpLEkucy5pdGFsaWMmJihRPSI8ST4iK1ErIjwvST4iKSxJLnMuc3RyaWtlJiYoUT0iPFM+IitRKyI8L1M+IiksSS5zLnVuZGVybGluZSYmKFE9IjxVPiIrUSsiPC9VPiIpLCJzdXBlciI9PUkucy52YWxpZ24mJihRPSI8U3VwPiIrUSsiPC9TdXA+'@;
put 'IiksInN1YiI9PUkucy52YWxpZ24mJihRPSI8U3ViPiIrUSsiPC9TdWI+IiksKEkucy5uYW1lfHxJLnMuc3p8fEkucy5jb2xvciYmbnVsbCE9SS5zLmNvbG9yLnJnYikmJihRPVsiPEZvbnQiLEkucy5uYW1lPycgaHRtbDpGYWNlPSInK0kucy5uYW1lKyciJzoiIixJLnMuc3o/JyBodG1sOlNp'@;
put 'emU9IicrSS5zLnN6KyciJzoiIixJLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgSS5zLmNvbG9yLnJnYj9JLnMuY29sb3IucmdiLnRvU3RyaW5nKDE2KTpJLnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsUSwiPC9Gb250PiJd'@;
put 'LmpvaW4oIiIpKSksUX0pLmpvaW4oIiIpKyI8L0RhdGE+In0oeS5SKTonPERhdGEgc3M6VHlwZT0iJytHZSsnIj4nK0N0KyI8L0RhdGE+IjtyZXR1cm4oeS5jfHxbXSkubGVuZ3RoPjAmJihjdCs9ZnVuY3Rpb24gZV8oeSl7cmV0dXJuIHkubWFwKGZ1bmN0aW9uKFApe3ZhciBRPVNyKCJzczpE'@;
put 'YXRhIixobyhQLnR8fCIiKSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSk7cmV0dXJuIFNyKCJDb21tZW50IixRLHsic3M6QXV0aG9yIjpQLmF9KX0pLmpvaW4oIiIpfSh5LmMpKSxTcigiQ2VsbCIsY3QsdmUpfWZ1bmN0aW9uIG1NKHksUCl7dmFyIEk9JzxSb3cg'@;
put 'c3M6SW5kZXg9IicrKHkrMSkrJyInO3JldHVybiBQJiYoUC5ocHgmJiFQLmhwdCYmKFAuaHB0PWoyKFAuaHB4KSksUC5ocHQmJihJKz0nIHNzOkF1dG9GaXRIZWlnaHQ9IjAiIHNzOkhlaWdodD0iJytQLmhwdCsnIicpLFAuaGlkZGVuJiYoSSs9JyBzczpIaWRkZW49IjEiJykpLEkrIj4ifWZ1'@;
put 'bmN0aW9uIFZlKHksUCxJKXt2YXIgUT1bXSxnZT1JLlNoZWV0c1tJLlNoZWV0TmFtZXNbeV1dLF9lPWdlP2Z1bmN0aW9uIHBNKHksUCxJLFEpe2lmKCF5fHwhKChRfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIHJlPVEuV29ya2Jvb2suTmFtZXMsZ2U9W10sX2U9'@;
put 'MDtfZTxyZS5sZW5ndGg7KytfZSl7dmFyIHZlPXJlW19lXTt2ZS5TaGVldD09SSYmKHZlLk5hbWUubWF0Y2goL15feGxmblwuLyl8fGdlLnB1c2goVm4odmUpKSl9cmV0dXJuIGdlLmpvaW4oIiIpfShnZSwwLHksSSk6IiI7cmV0dXJuIF9lLmxlbmd0aD4wJiZRLnB1c2goIjxOYW1lcz4iK19l'@;
put 'KyI8L05hbWVzPiIpLF9lPWdlP2Z1bmN0aW9uIHZNKHksUCxJLFEpe2lmKCF5WyIhcmVmIl0pcmV0dXJuIiI7dmFyIHJlPU9pKHlbIiFyZWYiXSksZ2U9eVsiIW1lcmdlcyJdfHxbXSxfZT0wLHZlPVtdO3lbIiFjb2xzIl0mJnlbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihidCxGdCl7cHUo'@;
put 'YnQpO3ZhciBrdD0hIWJ0LndpZHRoLFR0PVlkKEZ0LGJ0KSxadD17InNzOkluZGV4IjpGdCsxfTtrdCYmKFp0WyJzczpXaWR0aCJdPXhjKFR0LndpZHRoKSksYnQuaGlkZGVuJiYoWnRbInNzOkhpZGRlbiJdPSIxIiksdmUucHVzaChTcigiQ29sdW1uIixudWxsLFp0KSl9KTtmb3IodmFyIFNl'@;
put 'PUFycmF5LmlzQXJyYXkoeSksSGU9cmUucy5yO0hlPD1yZS5lLnI7KytIZSl7Zm9yKHZhciBCZT1bbU0oSGUsKHlbIiFyb3dzIl18fFtdKVtIZV0pXSxHZT1yZS5zLmM7R2U8PXJlLmUuYzsrK0dlKXt2YXIgbnQ9ITE7Zm9yKF9lPTA7X2UhPWdlLmxlbmd0aDsrK19lKWlmKCEoZ2VbX2VdLnMu'@;
put 'Yz5HZXx8Z2VbX2VdLnMucj5IZXx8Z2VbX2VdLmUuYzxHZXx8Z2VbX2VdLmUucjxIZSkpeyhnZVtfZV0ucy5jIT1HZXx8Z2VbX2VdLnMuciE9SGUpJiYobnQ9ITApO2JyZWFrfWlmKCFudCl7dmFyIGR0PXtyOkhlLGM6R2V9LEN0PWRpKGR0KTtCZS5wdXNoKGdNKFNlPyh5W0hlXXx8W10pW0dl'@;
put 'XTp5W0N0XSxDdCx5LFAsMCwwLGR0KSl9fUJlLnB1c2goIjwvUm93PiIpLEJlLmxlbmd0aD4yJiZ2ZS5wdXNoKEJlLmpvaW4oIiIpKX1yZXR1cm4gdmUuam9pbigiIil9KGdlLFApOiIiLF9lLmxlbmd0aD4wJiZRLnB1c2goIjxUYWJsZT4iK19lKyI8L1RhYmxlPiIpLFEucHVzaChmdW5jdGlv'@;
put 'biB4dCh5LFAsSSxRKXtpZigheSlyZXR1cm4iIjt2YXIgcmU9W107aWYoeVsiIW1hcmdpbnMiXSYmKHJlLnB1c2goIjxQYWdlU2V0dXA+IikseVsiIW1hcmdpbnMiXS5oZWFkZXImJnJlLnB1c2goU3IoIkhlYWRlciIsbnVsbCx7Ing6TWFyZ2luIjp5WyIhbWFyZ2lucyJdLmhlYWRlcn0pKSx5'@;
put 'WyIhbWFyZ2lucyJdLmZvb3RlciYmcmUucHVzaChTcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOnlbIiFtYXJnaW5zIl0uZm9vdGVyfSkpLHJlLnB1c2goU3IoIlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOnlbIiFtYXJnaW5zIl0uYm90dG9tfHwiMC43NSIsIng6TGVmdCI6eVsi'@;
put 'IW1hcmdpbnMiXS5sZWZ0fHwiMC43IiwieDpSaWdodCI6eVsiIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjp5WyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUifSkpLHJlLnB1c2goIjwvUGFnZVNldHVwPiIpKSxRJiZRLldvcmtib29rJiZRLldvcmtib29rLlNoZWV0cyYmUS5Xb3JrYm9v'@;
put 'ay5TaGVldHNbSV0paWYoUS5Xb3JrYm9vay5TaGVldHNbSV0uSGlkZGVuKXJlLnB1c2goU3IoIlZpc2libGUiLDE9PVEuV29ya2Jvb2suU2hlZXRzW0ldLkhpZGRlbj8iU2hlZXRIaWRkZW4iOiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3IodmFyIGdlPTA7Z2U8SSYmKCFRLldvcmti'@;
put 'b29rLlNoZWV0c1tnZV18fFEuV29ya2Jvb2suU2hlZXRzW2dlXS5IaWRkZW4pOysrZ2UpO2dlPT1JJiZyZS5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChRfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZyZS5wdXNoKCI8RGlzcGxheVJpZ2h0VG9MZWZ0Lz4i'@;
put 'KSxobih5WyIhZ3JpZGxpbmVzIl0pJiZyZS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSx5WyIhZnJlZXplIl0pe3JlLnB1c2goIjxGcmVlemVQYW5lcy8+IikscmUucHVzaCgiPEZyb3plbk5vU3BsaXQvPiIpO3ZhciBfZT1zcyh5WyIhZnJlZXplIl0pO19lLnI+MCYmKHJlLnB1'@;
put 'c2goZnMoIlNwbGl0SG9yaXpvbnRhbCIsIiIrX2UucikpLHJlLnB1c2goZnMoIlRvcFJvd0JvdHRvbVBhbmUiLCIiK19lLnIpKSksX2UuYz4wJiYocmUucHVzaChmcygiU3BsaXRWZXJ0aWNhbCIsIiIrX2UuYykpLHJlLnB1c2goZnMoIkxlZnRDb2x1bW5SaWdodFBhbmUiLCIiK19lLmMpKSl9'@;
put 'cmV0dXJuIHlbIiFwcm90ZWN0Il0mJihyZS5wdXNoKGZzKCJQcm90ZWN0Q29udGVudHMiLCJUcnVlIikpLHlbIiFwcm90ZWN0Il0ub2JqZWN0cyYmcmUucHVzaChmcygiUHJvdGVjdE9iamVjdHMiLCJUcnVlIikpLHlbIiFwcm90ZWN0Il0uc2NlbmFyaW9zJiZyZS5wdXNoKGZzKCJQcm90ZWN0'@;
put 'U2NlbmFyaW9zIiwiVHJ1ZSIpKSxudWxsPT15WyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHx5WyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzP251bGwhPXlbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmIXlbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxs'@;
put 'cyYmcmUucHVzaChmcygiRW5hYmxlU2VsZWN0aW9uIiwiVW5sb2NrZWRDZWxscyIpKTpyZS5wdXNoKGZzKCJFbmFibGVTZWxlY3Rpb24iLCJOb1NlbGVjdGlvbiIpKSxbWyJmb3JtYXRDZWxscyIsIkFsbG93Rm9ybWF0Q2VsbHMiXSxbImZvcm1hdENvbHVtbnMiLCJBbGxvd1NpemVDb2xzIl0s'@;
put 'WyJmb3JtYXRSb3dzIiwiQWxsb3dTaXplUm93cyJdLFsiaW5zZXJ0Q29sdW1ucyIsIkFsbG93SW5zZXJ0Q29scyJdLFsiaW5zZXJ0Um93cyIsIkFsbG93SW5zZXJ0Um93cyJdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsIkFsbG93SW5zZXJ0SHlwZXJsaW5rcyJdLFsiZGVsZXRlQ29sdW1ucyIsIkFs'@;
put 'bG93RGVsZXRlQ29scyJdLFsiZGVsZXRlUm93cyIsIkFsbG93RGVsZXRlUm93cyJdLFsic29ydCIsIkFsbG93U29ydCJdLFsiYXV0b0ZpbHRlciIsIkFsbG93RmlsdGVyIl0sWyJwaXZvdFRhYmxlcyIsIkFsbG93VXNlUGl2b3RUYWJsZXMiXV0uZm9yRWFjaChmdW5jdGlvbih2ZSl7eVsiIXBy'@;
put 'b3RlY3QiXVt2ZVswXV0mJnJlLnB1c2goIjwiK3ZlWzFdKyIvPiIpfSkpLDA9PXJlLmxlbmd0aD8iIjpTcigiV29ya3NoZWV0T3B0aW9ucyIscmUuam9pbigiIikse3htbG5zOldpLnh9KX0oZ2UsMCx5LEkpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIEpJKHksUCl7UHx8KFA9e30pLHkuU1NGfHwo'@;
put 'eS5TU0Y9dy5nZXRfdGFibGUoKSkseS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksUC5yZXZzc2Y9QWUoeS5TU0YpLFAucmV2c3NmW3kuU1NGWzY1NTM1XV09MCxQLnNzZj15LlNTRix5LlN0eWxlcz17Rm9udHM6UC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAw'@;
put 'MDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpQLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpQLkJvcmRlcnM9W3t9XX0sUC5jZWxsWGZzPVtdLFAuY2VsbFN0eWxlWGZzPVt7bmFt'@;
put 'ZToiTm9ybWFsIn1dLGd1KFAuY2VsbFhmcyxudWxsLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSk7dmFyIEk9W107SS5wdXNoKGZ1bmN0aW9uIGZNKHksUCl7dmFyIEk9W107cmV0dXJuIHkuUHJvcHMmJkkucHVzaChmdW5jdGlvbiBpYyh5LFApe3ZhciBJPVtdO3JldHVybiBsdChGMikubWFw'@;
put 'KGZ1bmN0aW9uKFEpe2Zvcih2YXIgcmU9MDtyZTxQbC5sZW5ndGg7KytyZSlpZihQbFtyZV1bMV09PVEpcmV0dXJuIFBsW3JlXTtmb3IocmU9MDtyZTxSMS5sZW5ndGg7KytyZSlpZihSMVtyZV1bMV09PVEpcmV0dXJuIFIxW3JlXTt0aHJvdyBRfSkuZm9yRWFjaChmdW5jdGlvbihRKXtpZihu'@;
put 'dWxsIT15W1FbMV1dKXt2YXIgcmU9UCYmUC5Qcm9wcyYmbnVsbCE9UC5Qcm9wc1tRWzFdXT9QLlByb3BzW1FbMV1dOnlbUVsxXV07ImRhdGUiPT09UVsyXSYmKHJlPW5ldyBEYXRlKHJlKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIloiKSksIm51bWJlciI9PXR5cGVvZiByZT9y'@;
put 'ZT1TdHJpbmcocmUpOiEwPT09cmV8fCExPT09cmU/cmU9cmU/IjEiOiIwIjpyZSBpbnN0YW5jZW9mIERhdGUmJihyZT1uZXcgRGF0ZShyZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCIiKSksSS5wdXNoKGZzKEYyW1FbMV1dfHxRWzFdLHJlKSl9fSksU3IoIkRvY3VtZW50UHJv'@;
put 'cGVydGllcyIsSS5qb2luKCIiKSx7eG1sbnM6V2kub30pfSh5LlByb3BzLFApKSx5LkN1c3Rwcm9wcyYmSS5wdXNoKGZ1bmN0aW9uIFR3KHksUCl7dmFyIEk9WyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLFE9IkN1c3RvbURvY3VtZW50UHJvcGVydGllcyIscmU9W107cmV0dXJuIHkmJmx0'@;
put 'KHkpLmZvckVhY2goZnVuY3Rpb24oZ2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LGdlKSl7Zm9yKHZhciBfZT0wO19lPFBsLmxlbmd0aDsrK19lKWlmKGdlPT1QbFtfZV1bMV0pcmV0dXJuO2ZvcihfZT0wO19lPFIxLmxlbmd0aDsrK19lKWlmKGdlPT1SMVtf'@;
put 'ZV1bMV0pcmV0dXJuO2ZvcihfZT0wO19lPEkubGVuZ3RoOysrX2UpaWYoZ2U9PUlbX2VdKXJldHVybjt2YXIgdmU9eVtnZV0sU2U9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiB2ZT8oU2U9ImZsb2F0Iix2ZT1TdHJpbmcodmUpKTohMD09PXZlfHwhMT09PXZlPyhTZT0iYm9vbGVhbiIsdmU9'@;
put 'dmU/IjEiOiIwIik6dmU9U3RyaW5nKHZlKSxyZS5wdXNoKFNyKEppKGdlKSx2ZSx7ImR0OmR0IjpTZX0pKX19KSxQJiZsdChQKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxnZSkmJigheXx8IU9iamVjdC5wcm90b3R5cGUu'@;
put 'aGFzT3duUHJvcGVydHkuY2FsbCh5LGdlKSkpe3ZhciBfZT1QW2dlXSx2ZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIF9lPyh2ZT0iZmxvYXQiLF9lPVN0cmluZyhfZSkpOiEwPT09X2V8fCExPT09X2U/KHZlPSJib29sZWFuIixfZT1fZT8iMSI6IjAiKTpfZSBpbnN0YW5jZW9mIERhdGU/'@;
put 'KHZlPSJkYXRlVGltZS50eiIsX2U9X2UudG9JU09TdHJpbmcoKSk6X2U9U3RyaW5nKF9lKSxyZS5wdXNoKFNyKEppKGdlKSxfZSx7ImR0OmR0Ijp2ZX0pKX19KSwiPCIrUSsnIHhtbG5zPSInK1dpLm8rJyI+JytyZS5qb2luKCIiKSsiPC8iK1ErIj4ifSh5LlByb3BzLHkuQ3VzdHByb3BzKSks'@;
put 'SS5qb2luKCIiKX0oeSxQKSksSS5wdXNoKCIiKSxJLnB1c2goIiIpLEkucHVzaCgiIik7Zm9yKHZhciBRPTA7UTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrUSlJLnB1c2goU3IoIldvcmtzaGVldCIsVmUoUSxQLHkpLHsic3M6TmFtZSI6SHIoeS5TaGVldE5hbWVzW1FdKX0pKTtyZXR1cm4gSVsy'@;
put 'XT1mdW5jdGlvbiBLSSh5LFApe3ZhciBRPVtbJzxTdHlsZSBzczpJRD0iRGVmYXVsdCIgc3M6TmFtZT0iTm9ybWFsIj4nLCc8QWxpZ25tZW50IHNzOlZlcnRpY2FsPSJCb3R0b20iLz4nLCI8Qm9yZGVycy8+IiwnPEZvbnQgc3M6Rm9udE5hbWU9IkNhbGlicmkiIHg6RmFtaWx5PSJTd2lzcyIg'@;
put 'c3M6U2l6ZT0iMTIiIHNzOkNvbG9yPSIjMDAwMDAwIi8+JywiPEludGVyaW9yLz4iLCI8TnVtYmVyRm9ybWF0Lz4iLCI8UHJvdGVjdGlvbi8+IiwiPC9TdHlsZT4iXS5qb2luKCIiKV07cmV0dXJuIFAuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKHJlLGdlKXt2YXIgX2U9W107aWYocmUuYWxp'@;
put 'Z25tZW50KXt2YXIgdmU9e307cmUuYWxpZ25tZW50LnNocmlua1RvRml0JiYodmVbInNzOlNocmlua1RvRml0Il09IjEiKSxyZS5hbGlnbm1lbnQud3JhcFRleHQmJih2ZVsic3M6V3JhcFRleHQiXT0iMSIpLHJlLmFsaWdubWVudC52ZXJ0aWNhbCYmKHZlWyJzczpWZXJ0aWNhbCJdPXd0KHJl'@;
put 'LmFsaWdubWVudC52ZXJ0aWNhbCkpLHJlLmFsaWdubWVudC5ob3Jpem9udGFsJiYodmVbInNzOkhvcml6b250YWwiXT13dChyZS5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpLHJlLmFsaWdubWVudC5pbmRlbnQmJih2ZVsic3M6SW5kZW50Il09cmUuYWxpZ25tZW50LmluZGVudCkscmUuYWxpZ25t'@;
put 'ZW50LnRleHRSb3RhdGlvbiYmKHZlWyJzczpSb3RhdGUiXT1yZS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uKSxfZS5wdXNoKFNyKCJBbGlnbm1lbnQiLG51bGwsdmUpKX1lOmlmKG51bGwhPXJlLmZvbnRJZCl7dmFyIFNlPVAuRm9udHNbcmUuZm9udElkXTtpZighU2UpYnJlYWsgZTt2YXIgSGU9'@;
put 'eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXplIjoiMTIifSxCZT0hMTtTZS5ib2xkJiYoQmU9ITAsSGVbInNzOkJvbGQiXT0iMSIpLFNlLml0YWxpYyYmKEJlPSEwLEhlWyJzczpJdGFsaWMiXT0iMSIpLFNlLnN0cmlrZSYmKEJlPSEwLEhlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEi'@;
put 'KSxudWxsIT1TZS51bmRlcmxpbmUmJihCZT0hMCxIZVsic3M6VW5kZXJsaW5lIl09dU1bU2UudW5kZXJsaW5lXXx8KFNlLnVuZGVybGluZT8iU2luZ2xlIjoiTm9uZSIpKSxudWxsIT1TZS5zeiYmKEJlPSEwLEhlWyJzczpTaXplIl09U2Uuc3opLG51bGwhPVNlLm5hbWUmJihCZT0hMCxIZVsi'@;
put 'c3M6Rm9udE5hbWUiXT1TZS5uYW1lKSxTZS5jb2xvciYmbnVsbCE9U2UuY29sb3IucmdiJiYoQmU9ITAsSGVbInNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09dHlwZW9mIFNlLmNvbG9yLnJnYj8iMDAwMDAwIitTZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOlNlLmNvbG9yLnJnYikuc2xpY2Uo'@;
put 'LTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZihTZS52YWxpZ24pPi0xJiYoSGVbInNzOlZlcnRpY2FsQWxpZ24iXT13dChTZS52YWxpZ24pKyJzY3JpcHQiKSxCZSYmX2UucHVzaChTcigiRm9udCIsbnVsbCxIZSkpfWU6aWYocmUuZmlsbElkPjApe3ZhciBHZT1QLkZpbGxzW3JlLmZpbGxJ'@;
put 'ZF07aWYoIUdlfHwhR2UuZmdDb2xvcnx8bnVsbD09R2UuZmdDb2xvci5yZ2IpYnJlYWsgZTtfZS5wdXNoKFNyKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4iOl9EW0dlLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBHZS5mZ0NvbG9y'@;
put 'LnJnYj8iMDAiK0dlLmZnQ29sb3IucmdiLnRvU3RyaW5nKDE2KTpHZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfV9lLnB1c2goU3IoIk51bWJlckZvcm1hdCIsbnVsbCx7InNzOkZvcm1hdCI6SHIody5fdGFibGVbcmUubnVtRm10SWRdKX0pKTt2YXIgbnQ9eyJzczpJRCI6InMiKygyMStn'@;
put 'ZSl9O3JlLnN0eWxlJiYobnRbInNzOk5hbWUiXT1yZS5zdHlsZSksUS5wdXNoKFNyKCJTdHlsZSIsX2Uuam9pbigiIiksbnQpKX0pLFNyKCJTdHlsZXMiLFEuam9pbigiIikpfSgwLFApLElbM109ZnVuY3Rpb24gdjUoeSl7aWYoISgoeXx8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJu'@;
put 'IiI7Zm9yKHZhciBQPXkuV29ya2Jvb2suTmFtZXMsST1bXSxRPTA7UTxQLmxlbmd0aDsrK1Epe3ZhciByZT1QW1FdO251bGw9PXJlLlNoZWV0JiYocmUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8SS5wdXNoKFZuKHJlKSkpfXJldHVybiBTcigiTmFtZXMiLEkuam9pbigiIikpfSh5KSxCbitT'@;
put 'cigiV29ya2Jvb2siLEkuam9pbigiIikse3htbG5zOldpLnNzLCJ4bWxuczpvIjpXaS5vLCJ4bWxuczp4IjpXaS54LCJ4bWxuczpzcyI6V2kuc3MsInhtbG5zOmR0IjpXaS5kdCwieG1sbnM6aHRtbCI6V2kuaHRtbH0pfWZ1bmN0aW9uIGtyKHksUCxJLFEpe3ZhciByZT1JLGdlPVtdLF9lPVAu'@;
put 'c2xpY2UoUC5sLFAubCtyZSk7aWYoUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmX2UubGVuZ3RoPjApc3dpdGNoKHkubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJSREluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JF'@;
put 'eGNsIjpjYXNlIkVPRiI6US5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6X2UubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDo0fSksInNraXAiKSxfZT1CdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShfZS5zbGljZSgwLDQpKSxC'@;
put 'dWZmZXIuZnJvbShRLmVuYy5pbnNpdHUoX2Uuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6X2U9US5lbmMuaW5zaXR1KF9lKX1BcnJheS5pc0FycmF5KFApJiYhQXJyYXkuaXNBcnJheShfZSkmJihfZT1BcnJheS5mcm9tKF9lKSksZ2UucHVzaChfZSksUC5sKz1yZTtmb3IodmFyIHZlPVgw'@;
put 'W1luKFAsUC5sKV0sU2U9MDtudWxsIT12ZSYmIkNvbnRpbnVlIj09PXZlLm4uc2xpY2UoMCw4KTspcmU9WW4oUCxQLmwrMiksU2U9UC5sKzQsUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmUS5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6NH0pLCJza2lwIiksIkNvbnRpbnVlRnJ0Ij09dmUubj9TZSs9'@;
put 'NDoiQ29udGludWVGcnQiPT12ZS5uLnNsaWNlKDAsMTEpJiYoU2UrPTEyLFEmJlEuZW5jJiZRLmVuYy5pbnNpdHUmJlEuZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOjh9KSwic2tpcCIpKSxfZT1QLnNsaWNlKFNlLFAubCs0K3JlKSxRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZfZS5sZW5ndGg+MCYm'@;
put 'KF9lPVEuZW5jLmluc2l0dShfZSkpLGdlLnB1c2goX2UpLFAubCs9NCtyZSx2ZT1YMFtZbihQLFAubCldO3ZhciBIZT1TKGdlKTtvbChIZSwwKTt2YXIgQmU9MDtIZS5sZW5zPVtdO2Zvcih2YXIgR2U9MDtHZTxnZS5sZW5ndGg7KytHZSlIZS5sZW5zLnB1c2goQmUpLEJlKz1nZVtHZV0ubGVu'@;
put 'Z3RoO2lmKEhlLmxlbmd0aDxJKXRocm93IlhMUyBSZWNvcmQgIisoeSYmeS5ufHwiPz8iKSsiIFRydW5jYXRlZDogIitIZS5sZW5ndGgrIiA8ICIrSTtyZXR1cm4geS5mKEhlLEhlLmxlbmd0aCxRKX1mdW5jdGlvbiBFYyh5LFAsSSl7aWYoInoiIT09eS50JiZ5LlhGKXt2YXIgUT0wO3RyeXtR'@;
put 'PXkuenx8eS5YRi5udW1GbXRJZHx8MCxQLmNlbGxORiYmKHkuej13Ll90YWJsZVtRXSl9Y2F0Y2goZ2Upe2lmKFAuV1RGKXRocm93IGdlfWlmKCFQfHwhMSE9PVAuY2VsbFRleHQpdHJ5e3kudz0iZSI9PT15LnQ/eS53fHxRb1t5LnZdOjA9PT1RfHwiR2VuZXJhbCI9PVE/Im4iPT09eS50Pygw'@;
put 'fHkudik9PT15LnY/dy5fZ2VuZXJhbF9pbnQoeS52KTp3Ll9nZW5lcmFsX251bSh5LnYpOncuX2dlbmVyYWwoeS52KTp3LmZvcm1hdChRLHkudix7ZGF0ZTE5MDQ6ISFJLGRhdGVORjpQJiZQLmRhdGVORn0pfWNhdGNoKGdlKXtpZihQLldURil0aHJvdyBnZX1pZihQLmNlbGxEYXRlcyYmUSYm'@;
put 'Im4iPT15LnQmJncuaXNfZGF0ZSh3Ll90YWJsZVtRXXx8U3RyaW5nKFEpKSl7dmFyIHJlPXcucGFyc2VfZGF0ZV9jb2RlKHkudik7cmUmJih5LnQ9ImQiLHkudj1uZXcgRGF0ZShyZS55LHJlLm0tMSxyZS5kLHJlLkgscmUuTSxyZS5TLHJlLnUpKX19fWZ1bmN0aW9uIFgyKHksUCxJKXtyZXR1'@;
put 'cm57djp5LGl4ZmU6UCx0Okl9fXZhciBfTT1mdW5jdGlvbih5LFAsSSl7UFsiIW9iamVjdHMiXT15fSxycD17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5Mzk3'@;
put 'MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gXzUoeSxQKXt2YXIgSSxRLHJlLGdlO2lmKFB8fChQPXt9KSxQNihQKSxWKCksUC5jb2RlcGFnZSYmayhQLmNvZGVwYWdlKSx5LkZ1bGxQYXRocyl7aWYoamUuZmluZCh5LCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNz'@;
put 'd29yZC1wcm90ZWN0ZWQiKTtJPWplLmZpbmQoeSwiIUNvbXBPYmoiKSxRPWplLmZpbmQoeSwiL1dvcmtib29rIil8fGplLmZpbmQoeSwiL0Jvb2siKX1lbHNle3N3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0Ijp5PUQoc2UuZGVjb2RlKHkpKTticmVhaztjYXNlImJpbmFyeSI6eT1EKHkpO2Jy'@;
put 'ZWFrO2Nhc2UiYnVmZmVyIjpicmVhaztjYXNlImFycmF5IjpBcnJheS5pc0FycmF5KHkpfHwoeT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KSl9b2woeSwwKSxRPXtjb250ZW50Onl9fWlmKEkmJmZ1bmN0aW9uIEFpKHkpe3ZhciBQPXt9LEk9eS5jb250ZW50O2lmKEkubD0yOCxQLkFu'@;
put 'c2lVc2VyVHlwZT1JLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLFAuQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBnNCh5KXtyZXR1cm4gcDQoeSwxKX0oSSksSS5sZW5ndGgtSS5sPD00KXJldHVybiBQO3ZhciBRPUkucmVhZF9zaGlmdCg0KTtpZigwPT1RfHxRPjQwfHwoSS5sLT00'@;
put 'LFAuUmVzZXJ2ZWQxPUkucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksSS5sZW5ndGgtSS5sPD00KXx8MTkwNzUwNTY1MiE9PShRPUkucmVhZF9zaGlmdCg0KSl8fChQLlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gSjcoeSl7cmV0dXJuIHA0KHksMil9KEkpLDA9PShRPUkucmVh'@;
put 'ZF9zaGlmdCg0KSl8fFE+NDApKXJldHVybiBQO0kubC09NCxQLlJlc2VydmVkMj1JLnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KEkpLFAuYm9va1Byb3BzJiYhUC5ib29rU2hlZXRzKXJlPXt9O2Vsc2V7dmFyIF9lPWhlPyJidWZmZXIiOiJhcnJheSI7aWYoUSYmUS5jb250ZW50KXJlPWZ1bmN0'@;
put 'aW9uIGJNKHksUCl7dmFyIEk9e29wdHM6e319LFE9e307bnVsbCE9dGUmJm51bGw9PVAuZGVuc2UmJihQLmRlbnNlPXRlKTt2YXIgR2UsZHQsY3QsYnQsVHQsWnQscmU9UC5kZW5zZT9bXTp7fSxnZT17fSxfZT17fSx2ZT1udWxsLFNlPVtdLEhlPSIiLEJlPXt9LG50PSIiLEZ0PXt9LGt0PVtd'@;
put 'LHBuPVtdLEtuPVtdLHVuPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LHFuPXt9LHpuPXtGb250czpbXX0sa249ZnVuY3Rpb24oSnIpe3JldHVybiBKcjw4P0NyW0pyXTpKcjw2NCYmS25bSnItOF18fENyW0pyXX0sZXI9ZnVuY3Rpb24oSnIsd3Mpe3ZhciBt'@;
put 'bCx2cz1Kci5YRi5kYXRhO3ZzJiYodnMucGF0dGVyblR5cGV8fG51bGwhPXZzLmljdkZvcmUpJiZ3cyYmd3MuY2VsbFN0eWxlcyYmKEpyLnM9e30sSnIucy5wYXR0ZXJuVHlwZT12cy5wYXR0ZXJuVHlwZSxKci5YRi5mb250JiZVdChKci5zLEpyLlhGLmZvbnQpLHZzLmZXcmFwJiYoKEpyLnMu'@;
put 'YWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS53cmFwVGV4dD0hMCksdnMuZlNocmlua1RvRml0JiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS5zaHJpbmtUb0ZpdD0hMCksdnMuaGFsaWduJiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30p'@;
put 'KS5ob3Jpem9udGFsPXZzLmhhbGlnbiksdnMudmFsaWduJiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS52ZXJ0aWNhbD12cy52YWxpZ24pLHZzLmNJbmRlbnQmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLmluZGVudD12cy5jSW5kZW50KSw2'@;
put 'NCE9dnMuaWN2Rm9yZSYmNjUhPXZzLmljdkJhY2smJigobWw9ejEoa24odnMuaWN2Rm9yZSkpKSYmKEpyLnMuZmdDb2xvcj17cmdiOm1sfSksKG1sPXoxKGtuKHZzLmljdkJhY2spKSkmJihKci5zLmJnQ29sb3I9e3JnYjptbH0pKSxbIkxlZnQiLCJSaWdodCIsIlRvcCIsIkJvdHRvbSJdLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oemwpe3ZzWyJkZyIremxdJiYoSnIuc1t6bC50b0xvd2VyQ2FzZSgpXT17c3R5bGU6VzJbdnNbImRnIit6bF1dLGNvbG9yOntyZ2I6ejEoa24odnNbImljdiIremxdKSl9fSl9KSl9LHRyPWZ1bmN0aW9uKEpyLHdzLHZzKXtpZighKHdpPjF8fHZzLnNoZWV0Um93cyYm'@;
put 'SnIucj49dnMuc2hlZXRSb3dzKSl7aWYodnMuY2VsbFN0eWxlcyYmd3MuWEYmJndzLlhGLmRhdGEmJmVyKHdzLHZzKSxkZWxldGUgd3MuaXhmZSxkZWxldGUgd3MuWEYsR2U9SnIsbnQ9ZGkoSnIpLCghX2V8fCFfZS5zfHwhX2UuZSkmJihfZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19KSxK'@;
put 'ci5yPF9lLnMuciYmKF9lLnMucj1Kci5yKSxKci5jPF9lLnMuYyYmKF9lLnMuYz1Kci5jKSxKci5yKzE+X2UuZS5yJiYoX2UuZS5yPUpyLnIrMSksSnIuYysxPl9lLmUuYyYmKF9lLmUuYz1Kci5jKzEpLHZzLmNlbGxGb3JtdWxhJiZ3cy5mKWZvcih2YXIgbWw9MDttbDxrdC5sZW5ndGg7Kytt'@;
put 'bClpZighKGt0W21sXVswXS5zLmM+SnIuY3x8a3RbbWxdWzBdLnMucj5Kci5yfHxrdFttbF1bMF0uZS5jPEpyLmN8fGt0W21sXVswXS5lLnI8SnIucikpe3dzLkY9T28oa3RbbWxdWzBdKSwoa3RbbWxdWzBdLnMuYyE9SnIuY3x8a3RbbWxdWzBdLnMuciE9SnIucikmJmRlbGV0ZSB3cy5mLHdz'@;
put 'LmYmJih3cy5mPSIiK3hsKGt0W21sXVsxXSxfZSxKcixTbixabikpO2JyZWFrfXZzLmRlbnNlPyhyZVtKci5yXXx8KHJlW0pyLnJdPVtdKSxyZVtKci5yXVtKci5jXT13cyk6cmVbbnRdPXdzfX0sWm49e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFyZWRmOkZ0LGFycmF5ZjprdCxycnRh'@;
put 'YmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFnZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISFQJiYhIVAuY2VsbFN0eWxlcyxXVEY6ISFQJiYhIVAud3RmfTtabi5wYXNzd29yZD1QLnBhc3N3b3JkP1AucGFzc3dvcmQ6IlZlbHZldFN3ZWF0c2hvcCI7dmFyIHNpLEJyPW51bGws'@;
put 'eGk9W10sSWk9W10sUXI9W10sdXI9W10scnI9ITEsU249W107U24uU2hlZXROYW1lcz1abi5zbmFtZXMsU24uc2hhcmVkZj1abi5zaGFyZWRmLFNuLmFycmF5Zj1abi5hcnJheWYsU24ubmFtZXM9W10sU24uWFRJPVtdO3ZhciBUaSxtcj0iIix3aT0wLFVyPTAsamk9W10sX289W107Wm4uY29k'@;
put 'ZXBhZ2U9MTIwMCxqKDEyMDApO2Zvcih2YXIgWW89ITE7eS5sPHkubGVuZ3RoLTE7KXt2YXIgbG89eS5sLEFvPXkucmVhZF9zaGlmdCgyKTtpZihabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDBdKSwiaGVhZGVyLTAiKSwwPT09QW8mJiJFT0YiPT09bXIp'@;
put 'YnJlYWs7dmFyIHhvPXkubD09PXkubGVuZ3RoPzA6eS5yZWFkX3NoaWZ0KDIpO1puJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMF0pLCJsZW5ndGgtMCIpO3ZhciBoaT1YMFtBb107aWYoaGkmJmhpLmYpe2lmKFAuYm9va1NoZWV0cyYmIkJvdW5kU2hlZXQ4'@;
put 'Ij09PW1yJiYiQm91bmRTaGVldDgiIT09aGkubilicmVhaztpZihtcj1oaS5uLDI9PT1oaS5yfHwxMj09aGkucil7dmFyIHRhPXkucmVhZF9zaGlmdCgyKTtpZih4by09MixabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDBdKSksIVpuLmVuYyYmdGEhPT1B'@;
put 'byYmKCgyNTUmdGEpPDw4fHRhPj44KSE9PUFvKXRocm93IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIrdGErIiE9IitBbyk7MTI9PWhpLnImJih5LmwrPTEwLHhvLT0xMCxabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDAsMCwwLDAsMCwwLDAsMCwwXSkp'@;
put 'KX12YXIgTW49a3IoaGkseSx4byxabiksTXM9aGkubjtpZigwPT13aSYmIkJPRiIhPU1zKWNvbnRpbnVlO3N3aXRjaChNcyl7Y2FzZSJEYXRlMTkwNCI6SS5vcHRzLkRhdGUxOTA0PXVuLldCUHJvcHMuZGF0ZTE5MDQ9TW47YnJlYWs7Y2FzZSJXcml0ZVByb3RlY3QiOkkub3B0cy5Xcml0ZVBy'@;
put 'b3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYoWm4uZW5jfHwoeS5sPTAsd2k9MCksWm4uZW5jPU1uLCFQLnBhc3N3b3JkJiZudWxsPT1Nbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7aWYobnVsbD09TW4udmFsaWQpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFNbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIpO2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOlpuLmxhc3R1c2VyPU1uO2JyZWFrO2Nhc2UiRmlsZVNoYXJpbmciOmNhc2UiVGVt'@;
put 'cGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VMRnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tFeHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2UiSW5kZXgiOmNhc2UiUHJvdDRSZXYiOmNhc2UiUHJv'@;
put 'dDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2YXIgeXM9TnVtYmVyKE1uKTtzd2l0Y2goeXMpe2Nhc2UgMjEwMTA6eXM9MTIwMDticmVhaztjYXNlIDMyNzY4OnlzPTFlNDticmVhaztjYXNlIDMyNzY5OnlzPTEyNTJ9aihabi5jb2RlcGFnZT15cyksWW89ITA7YnJlYWs7Y2FzZSJS'@;
put 'UlRhYklkIjpabi5ycnRhYmlkPU1uO2JyZWFrO2Nhc2UiV2luUHJvdGVjdCI6Wm4ud2lubG9ja2VkPU1uO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxjQ291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNlIkNhbGNNb2RlIjpjYXNlIkNhbGNQcmVjaXNpb24i'@;
put 'OmNhc2UiQ2FsY1NhdmVSZWNhbGMiOkkub3B0c1tNc109TW47YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6Wm4uQ2FsY1JlZk1vZGU9TW47YnJlYWs7Y2FzZSJGb3JjZUZ1bGxDYWxjdWxhdGlvbiI6SS5vcHRzLkZ1bGxDYWxjPU1uO2JyZWFrO2Nhc2UiV3NCb29sIjpNbi5mRGlhbG9nJiYocmVb'@;
put 'IiF0eXBlIl09ImRpYWxvZyIpLE1uLmZCZWxvd3x8KChyZVsiIW91dGxpbmUiXXx8KHJlWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLE1uLmZSaWdodHx8KChyZVsiIW91dGxpbmUiXXx8KHJlWyIhb3V0bGluZSJdPXt9KSkubGVmdD0hMCk7YnJlYWs7Y2FzZSJYRiI6TW4uZm9udD16bi5G'@;
put 'b250c1tNbi5pZm50PDQ/TW4uaWZudDpNbi5pZm50LTFdLHBuLnB1c2goTW4pO2JyZWFrO2Nhc2UiU3VwQm9vayI6U24ucHVzaChbTW5dKSxTbltTbi5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UiRXh0ZXJuTmFtZSI6U25bU24ubGVuZ3RoLTFdLnB1c2goTW4pO2JyZWFrO2Nhc2UiTGJs'@;
put 'IjpUaT17TmFtZTpNbi5OYW1lLFJlZjp4bChNbi5yZ2NlLF9lLG51bGwsU24sWm4pfSxNbi5pdGFiPjAmJihUaS5TaGVldD1Nbi5pdGFiLTEpLFNuLm5hbWVzLnB1c2goVGkpLFNuWzBdfHwoU25bMF09W10sU25bMF0uWFRJPVtdKSxTbltTbi5sZW5ndGgtMV0ucHVzaChNbiksIl94bG5tLl9G'@;
put 'aWx0ZXJEYXRhYmFzZSI9PU1uLk5hbWUmJk1uLml0YWI+MCYmTW4ucmdjZSYmTW4ucmdjZVswXSYmTW4ucmdjZVswXVswXSYmIlB0Z0FyZWEzZCI9PU1uLnJnY2VbMF1bMF1bMF0mJihfb1tNbi5pdGFiLTFdPXtyZWY6T28oTW4ucmdjZVswXVswXVsxXVsyXSl9KTticmVhaztjYXNlIkV4dGVy'@;
put 'bkNvdW50Ijpabi5FeHRlcm5Db3VudD1NbjticmVhaztjYXNlIkV4dGVyblNoZWV0IjowPT1Tbi5sZW5ndGgmJihTblswXT1bXSxTblswXS5YVEk9W10pLFNuW1NuLmxlbmd0aC0xXS5YVEk9U25bU24ubGVuZ3RoLTFdLlhUSS5jb25jYXQoTW4pLFNuLlhUST1Tbi5YVEkuY29uY2F0KE1uKTti'@;
put 'cmVhaztjYXNlIk5hbWVDbXQiOmlmKFpuLmJpZmY8OClicmVhaztudWxsIT1UaSYmKFRpLkNvbW1lbnQ9TW5bMV0pO2JyZWFrO2Nhc2UiUHJvdGVjdCI6cmVbIiFwcm90ZWN0Il09TW47YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PU1uJiZabi5XVEYmJmNvbnNvbGUuZXJyb3IoIlBhc3N3b3Jk'@;
put 'IHZlcmlmaWVyOiAiK01uKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpnZVtNbi5wb3NdPU1uLFpuLnNuYW1lcy5wdXNoKE1uLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihyZVsiIWdyaWRsaW5lcyJdPSFCcnx8QnIuZ3JpZCxCcj1udWxsLC0td2kpYnJlYWs7aWYoX2UuZSl7aWYoX2UuZS5y'@;
put 'PjAmJl9lLmUuYz4wKXtpZihfZS5lLnItLSxfZS5lLmMtLSxyZVsiIXJlZiJdPU9vKF9lKSxQLnNoZWV0Um93cyYmUC5zaGVldFJvd3M8PV9lLmUucil7dmFyIEVsPV9lLmUucjtfZS5lLnI9UC5zaGVldFJvd3MtMSxyZVsiIWZ1bGxyZWYiXT1yZVsiIXJlZiJdLHJlWyIhcmVmIl09T28oX2Up'@;
put 'LF9lLmUucj1FbH1fZS5lLnIrKyxfZS5lLmMrK314aS5sZW5ndGg+MCYmKHJlWyIhbWVyZ2VzIl09eGkpLElpLmxlbmd0aD4wJiZfTShJaSxyZSx6biksUXIubGVuZ3RoPjAmJihyZVsiIWNvbHMiXT1RciksdXIubGVuZ3RoPjAmJihyZVsiIXJvd3MiXT11ciksdW4uU2hlZXRzLnB1c2gocW4p'@;
put 'fSIiPT09SGU/QmU9cmU6UVtIZV09cmUscmU9UC5kZW5zZT9bXTp7fTticmVhaztjYXNlIkJPRiI6aWYoOD09PVpuLmJpZmYmJihabi5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtBb118fHs1MTI6Miw3Njg6MywxMDI0OjQsMTI4MDo1LDE1MzY6OCwyOjIsNzoyfVtNbi5CSUZGVmVyXXx8OCks'@;
put 'Wm4uYmlmZmd1ZXNzPTA9PU1uLkJJRkZWZXIsMD09TW4uQklGRlZlciYmNDA5Nj09TW4uZHQmJihabi5iaWZmPTUsWW89ITAsaihabi5jb2RlcGFnZT0yODU5MSkpLDg9PVpuLmJpZmYmJjA9PU1uLkJJRkZWZXImJjE2PT1Nbi5kdCYmKFpuLmJpZmY9Miksd2krKylicmVhaztpZihyZT1QLmRl'@;
put 'bnNlP1tdOnt9LFpuLmJpZmY8OCYmIVlvJiYoWW89ITAsaihabi5jb2RlcGFnZT1QLmNvZGVwYWdlfHwxMjUyKSksWm4uYmlmZjw1fHwwPT1Nbi5CSUZGVmVyJiY0MDk2PT1Nbi5kdCl7IiI9PT1IZSYmKEhlPSJTaGVldDEiKSxfZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBzbD17'@;
put 'cG9zOnkubC14byxuYW1lOkhlfTtnZVtzbC5wb3NdPXNsLFpuLnNuYW1lcy5wdXNoKEhlKX1lbHNlIEhlPShnZVtsb118fHtuYW1lOiIifSkubmFtZTszMj09TW4uZHQmJihyZVsiIXR5cGUiXT0iY2hhcnQiKSw2ND09TW4uZHQmJihyZVsiIXR5cGUiXT0ibWFjcm8iKSx4aT1bXSxJaT1bXSxa'@;
put 'bi5hcnJheWY9a3Q9W10sUXI9W10sdXI9W10scnI9ITEscW49e0hpZGRlbjooZ2VbbG9dfHx7aHM6MH0pLmhzLG5hbWU6SGV9O2JyZWFrO2Nhc2UiTnVtYmVyIjpjYXNlIkJJRkYyTlVNIjpjYXNlIkJJRkYySU5UIjoiY2hhcnQiPT1yZVsiIXR5cGUiXSYmKFAuZGVuc2U/KHJlW01uLnJdfHxb'@;
put 'XSlbTW4uY106cmVbZGkoe2M6TW4uYyxyOk1uLnJ9KV0pJiYrK01uLmMsVHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXXx8e30sdjpNbi52YWwsdDoibiJ9LFVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEkub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1u'@;
put 'LnJ9LFR0LFApO2JyZWFrO2Nhc2UiQm9vbEVyciI6VHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXSx2Ok1uLnZhbCx0Ok1uLnR9LFVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEkub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApO2JyZWFr'@;
put 'O2Nhc2UiUksiOlR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV0sdjpNbi5ya251bSx0OiJuIn0sVXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsSS5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJNdWxSayI6Zm9yKHZh'@;
put 'ciBnbD1Nbi5jO2dsPD1Nbi5DOysrZ2wpe3ZhciBudT1Nbi5ya3JlY1tnbC1Nbi5jXVswXTtUdD17aXhmZTpudSxYRjpwbltudV0sdjpNbi5ya3JlY1tnbC1Nbi5jXVsxXSx0OiJuIn0sVXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsSS5vcHRzLkRhdGUxOTA0KSx0cih7'@;
put 'YzpnbCxyOk1uLnJ9LFR0LFApfWJyZWFrO2Nhc2UiRm9ybXVsYSI6aWYoIlN0cmluZyI9PU1uLnZhbCl7dmU9TW47YnJlYWt9aWYoKFR0PVgyKE1uLnZhbCxNbi5jZWxsLml4ZmUsTW4udHQpKS5YRj1wbltUdC5peGZlXSxQLmNlbGxGb3JtdWxhKXt2YXIgdGw9TW4uZm9ybXVsYTtpZih0bCYm'@;
put 'dGxbMF0mJnRsWzBdWzBdJiYiUHRnRXhwIj09dGxbMF1bMF1bMF0pe3ZhciBLdD10bFswXVswXVsxXVswXSxnbj10bFswXVswXVsxXVsxXSxJbj1kaSh7cjpLdCxjOmdufSk7RnRbSW5dP1R0LmY9IiIreGwoTW4uZm9ybXVsYSxfZSxNbi5jZWxsLFNuLFpuKTpUdC5GPSgoUC5kZW5zZT8ocmVb'@;
put 'S3RdfHxbXSlbZ25dOnJlW0luXSl8fHt9KS5GfWVsc2UgVHQuZj0iIit4bChNbi5mb3JtdWxhLF9lLE1uLmNlbGwsU24sWm4pfVVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEkub3B0cy5EYXRlMTkwNCksdHIoTW4uY2VsbCxUdCxQKSx2ZT1NbjticmVhaztjYXNlIlN0'@;
put 'cmluZyI6aWYoIXZlKXRocm93IG5ldyBFcnJvcigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTt2ZS52YWw9TW4sKFR0PVgyKE1uLHZlLmNlbGwuaXhmZSwicyIpKS5YRj1wbltUdC5peGZlXSxQLmNlbGxGb3JtdWxhJiYoVHQuZj0iIit4bCh2ZS5mb3JtdWxhLF9lLHZlLmNlbGws'@;
put 'U24sWm4pKSxVcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxJLm9wdHMuRGF0ZTE5MDQpLHRyKHZlLmNlbGwsVHQsUCksdmU9bnVsbDticmVhaztjYXNlIkFycmF5IjprdC5wdXNoKE1uKTt2YXIgV3I9ZGkoTW5bMF0ucyk7aWYoZHQ9UC5kZW5zZT8ocmVbTW5bMF0ucy5y'@;
put 'XXx8W10pW01uWzBdLnMuY106cmVbV3JdLFAuY2VsbEZvcm11bGEmJmR0KXtpZighdmV8fCFXcnx8IWR0KWJyZWFrO2R0LmY9IiIreGwoTW5bMV0sX2UsTW5bMF0sU24sWm4pLGR0LkY9T28oTW5bMF0pfWJyZWFrO2Nhc2UiU2hyRm1sYSI6aWYoIVAuY2VsbEZvcm11bGEpYnJlYWs7aWYobnQp'@;
put 'e2lmKCF2ZSlicmVhaztGdFtkaSh2ZS5jZWxsKV09TW5bMF0sKChkdD1QLmRlbnNlPyhyZVt2ZS5jZWxsLnJdfHxbXSlbdmUuY2VsbC5jXTpyZVtkaSh2ZS5jZWxsKV0pfHx7fSkuZj0iIit4bChNblswXSxfZSxHZSxTbixabil9YnJlYWs7Y2FzZSJMYWJlbFNzdCI6VHQ9WDIoU2VbTW4uaXNz'@;
put 'dF0udCxNbi5peGZlLCJzIiksU2VbTW4uaXNzdF0uaCYmKFR0Lmg9U2VbTW4uaXNzdF0uaCksVHQuWEY9cG5bVHQuaXhmZV0sVXI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsSS5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCksU2VbTW4uaXNzdF0u'@;
put 'UiYmKFR0LlI9U2VbTW4uaXNzdF0uUi5tYXAoZnVuY3Rpb24oemkpe3ZhciBKcj1vbih6aSk7cmV0dXJuIHppLnM9PXpuLkZvbnRzWzBdJiYoSnIucz1UdC5zKSxKcn0pKTticmVhaztjYXNlIkJsYW5rIjpQLnNoZWV0U3R1YnMmJihUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdLHQ6'@;
put 'InoifSxVcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxJLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKSk7YnJlYWs7Y2FzZSJNdWxCbGFuayI6aWYoUC5zaGVldFN0dWJzKWZvcih2YXIgWG49TW4uYztYbjw9TW4uQzsrK1huKXt2YXIgZWk9TW4u'@;
put 'aXhmZVtYbi1Nbi5jXTtUdD17aXhmZTplaSxYRjpwbltlaV0sdDoieiJ9LFVyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEkub3B0cy5EYXRlMTkwNCksdHIoe2M6WG4scjpNbi5yfSxUdCxQKX1icmVhaztjYXNlIlJTdHJpbmciOmNhc2UiTGFiZWwiOmNhc2UiQklGRjJT'@;
put 'VFIiOihUdD1YMihNbi52YWwsTW4uaXhmZSwicyIpKS5YRj1wbltUdC5peGZlXSxVcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxJLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIkRpbWVuc2lvbnMiOjE9PT13aSYmKF9lPU1u'@;
put 'KTticmVhaztjYXNlIlNTVCI6KFNlPU1uKS5mb3JFYWNoKGZ1bmN0aW9uKHppKXt6aS5fUj8oemkuX1JbMF0mJnppLl9SWzBdLmlkeD4wJiZ6aS5fUi51bnNoaWZ0KHtpZHg6MCxpZm50OjB9KSx6aS5SPXppLl9SLm1hcChmdW5jdGlvbihKcix3cyl7cmV0dXJue3Q6InMiLHY6emkudC5zbGlj'@;
put 'ZShKci5pZHgsKHppLl9SW3dzKzFdfHx7fSkuaWR4KSxzOnpuLkZvbnRzW0pyLmlmbnQ8ND9Kci5pZm50OkpyLmlmbnQtMV19fSksUC5jZWxsSFRNTCYmKHppLmg9azkoemkuUikpKTpQLmNlbGxIVE1MJiYoemkuaD1ybyh6aS50KSksZGVsZXRlIHppLl9SfSk7YnJlYWs7Y2FzZSJGb3JtYXQi'@;
put 'OmlmKDQ9PVpuLmJpZmYpe2ppW1VyKytdPU1uWzFdO2Zvcih2YXIgaXI9MDtpcjxVcisxNjMmJncuX3RhYmxlW2lyXSE9TW5bMV07Kytpcik7aXI+PTE2MyYmdy5sb2FkKE1uWzFdLFVyKzE2Myl9ZWxzZSB3LmxvYWQoTW5bMV0sTW5bMF0pO2JyZWFrO2Nhc2UiQklGRjJGT1JNQVQiOmppW1Vy'@;
put 'KytdPU1uO2Zvcih2YXIgcmk9MDtyaTxVcisxNjMmJncuX3RhYmxlW3JpXSE9TW47KytyaSk7cmk+PTE2MyYmdy5sb2FkKE1uLFVyKzE2Myk7YnJlYWs7Y2FzZSJNZXJnZUNlbGxzIjp4aT14aS5jb25jYXQoTW4pO2JyZWFrO2Nhc2UiT2JqIjpJaVtNbi5jbW9bMF1dPVpuLmxhc3RvYmo9TW47'@;
put 'YnJlYWs7Y2FzZSJUeE8iOlpuLmxhc3RvYmouVHhPPU1uO2JyZWFrO2Nhc2UiSW1EYXRhIjpabi5sYXN0b2JqLkltRGF0YT1NbjticmVhaztjYXNlIkhMaW5rIjpmb3IoYnQ9TW5bMF0ucy5yO2J0PD1NblswXS5lLnI7KytidClmb3IoY3Q9TW5bMF0ucy5jO2N0PD1NblswXS5lLmM7KytjdCko'@;
put 'ZHQ9UC5kZW5zZT8ocmVbYnRdfHxbXSlbY3RdOnJlW2RpKHtjOmN0LHI6YnR9KV0pJiYoZHQubD1NblsxXSk7YnJlYWs7Y2FzZSJITGlua1Rvb2x0aXAiOmZvcihidD1NblswXS5zLnI7YnQ8PU1uWzBdLmUucjsrK2J0KWZvcihjdD1NblswXS5zLmM7Y3Q8PU1uWzBdLmUuYzsrK2N0KShkdD1Q'@;
put 'LmRlbnNlPyhyZVtidF18fFtdKVtjdF06cmVbZGkoe2M6Y3QscjpidH0pXSkmJmR0LmwmJihkdC5sLlRvb2x0aXA9TW5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYoWm4uYmlmZjw9NSYmWm4uYmlmZj49MilicmVhaztkdD1QLmRlbnNlPyhyZVtNblswXS5yXXx8W10pW01uWzBdLmNdOnJlW2Rp'@;
put 'KE1uWzBdKV07dmFyIG1vPUlpW01uWzJdXTtkdHx8KFAuZGVuc2U/KHJlW01uWzBdLnJdfHwocmVbTW5bMF0ucl09W10pLGR0PXJlW01uWzBdLnJdW01uWzBdLmNdPXt0OiJ6In0pOmR0PXJlW2RpKE1uWzBdKV09e3Q6InoifSxfZS5lLnI9TWF0aC5tYXgoX2UuZS5yLE1uWzBdLnIpLF9lLnMu'@;
put 'cj1NYXRoLm1pbihfZS5zLnIsTW5bMF0uciksX2UuZS5jPU1hdGgubWF4KF9lLmUuYyxNblswXS5jKSxfZS5zLmM9TWF0aC5taW4oX2Uucy5jLE1uWzBdLmMpKSxkdC5jfHwoZHQuYz1bXSksZHQuYy5wdXNoKHthOk1uWzFdLHQ6bW8uVHhPLnR9KTticmVhaztkZWZhdWx0OnN3aXRjaChoaS5u'@;
put 'KXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6Y2FzZSJMSFJlY29yZCI6Y2FzZSJEQkNlbGwiOmNhc2UiRW50RXhVMiI6Y2FzZSJTeFZpZXciOmNhc2UiU3h2ZCI6Y2FzZSJT'@;
put 'WFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2FzZSJTWEV4IjpjYXNlIlFzaVNYVGFnIjpjYXNlIkZlYXQiOmNhc2UiRmVhdEhkciI6Y2FzZSJGZWF0SGRyMTEiOmNhc2UiRmVh'@;
put 'dHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdlbEZyYW1lIjpjYXNlIlhGQ1JDIjpjYXNlIlN0eWxlIjpjYXNlIlN0eWxlRXh0IjpjYXNlIlNjZW5hcmlvUHJvdGVjdCI6Y2Fz'@;
put 'ZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVFbGVtZW50IjpjYXNlIlNYU3RyZWFtSUQiOmNhc2UiU1hWUyI6Y2FzZSJEQ29uUmVmIjpjYXNlIlNYQWRkbCI6Y2FzZSJEQ29u'@;
put 'QmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJTeEl0bSI6Y2FzZSJTeERYRiI6Y2FzZSJTY2VuTWFuIjpjYXNlIkRDb24iOmNhc2UiQ2VsbFdhdGNoIjpjYXNlIlByaW50Um93'@;
put 'Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRFeHRPcHRpb25hbCI6Y2FzZSJPYk5vTWFjcm9zIjpjYXNlIk9iUHJvaiI6Y2FzZSJHVUlEVHlwZUxpYiI6Y2FzZSJXT3B0Ijpj'@;
put 'YXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNlIkRYRk4xMk5vQ0IiOmNhc2UiRHYiOmNhc2UiRFZhbCI6Y2FzZSJCUkFJIjpjYXNlIlNlcmllcyI6Y2FzZSJTZXJpZXNUZXh0'@;
put 'IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJlY29yZCI6Y2FzZSJDb25kRm10IjpjYXNlIkNGIjpjYXNlIkNGMTIiOmNhc2UiQ0ZFeCI6Y2FzZSJFeGNlbDlGaWxlIjpjYXNl'@;
put 'IlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50IjpjYXNlIldpbmRvdzEiOmNhc2UiSGlkZU9iaiI6Y2FzZSJHcmlkU2V0IjpjYXNlIkd1dHMiOmNhc2UiVXNlckJWaWV3IjpjYXNl'@;
put 'IlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0IjpVRChwbltNbi5peGZlXSxNbi5leHQpO2JyZWFrO2Nhc2UiQ29sSW5mbyI6aWYoIVpuLmNlbGxTdHlsZXMpYnJlYWs7Zm9y'@;
put 'KDtNbi5lPj1Nbi5zOylRcltNbi5lLS1dPXt3aWR0aDpNbi53LzI1NixsZXZlbDpNbi5sZXZlbHx8MCxoaWRkZW46ISEoMSZNbi5mbGFncyl9LHJyfHwocnI9ITApLHB1KFFyW01uLmUrMV0pO2JyZWFrO2Nhc2UiUm93Ijp2YXIgb2k9e307bnVsbCE9TW4ubGV2ZWwmJih1cltNbi5yXT1vaSxv'@;
put 'aS5sZXZlbD1Nbi5sZXZlbCksTW4uaGlkZGVuJiYodXJbTW4ucl09b2ksb2kuaGlkZGVuPSEwKSxNbi5ocHQmJih1cltNbi5yXT1vaSxvaS5ocHQ9TW4uaHB0LG9pLmhweD1VMShNbi5ocHQpKSxNbi5peGZlJiYodXJbTW4ucl09b2ksZXIoVHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZl'@;
put 'XXx8e30sdjowLHQ6Im4ifSxQKSxvaS5zPVR0LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2UiQm90dG9tTWFyZ2luIjpyZVsiIW1hcmdpbnMiXXx8ZGYocmVbIiFtYXJnaW5zIl09e30pLHJlWyIhbWFyZ2lucyJdW01zLnNs'@;
put 'aWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPU1uO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpyZVsiIXNlbCJdPU1uO2JyZWFrO2Nhc2UiU2V0dXAiOnJlWyIhbWFyZ2lucyJdfHxkZihyZVsiIW1hcmdpbnMiXT17fSkscmVbIiFtYXJnaW5zIl0uaGVhZGVyPU1uLmhlYWRlcixyZVsiIW1hcmdpbnMi'@;
put 'XS5mb290ZXI9TW4uZm9vdGVyO2JyZWFrO2Nhc2UiV2luZG93MiI6TW4uUlRMJiYodW4uVmlld3NbMF0uUlRMPSEwKSxCcj1NbjticmVhaztjYXNlIkNvdW50cnkiOlp0PU1uO2JyZWFrO2Nhc2UiRm9udCI6TW4uaWN2JiZrbihNbi5pY3YpJiYoTW4uY29sb3I9e3JnYjp6MShrbihNbi5pY3Yp'@;
put 'KX0pLGRlbGV0ZSBNbi5pY3YsMD09em4uRm9udHMubGVuZ3RoJiZaMShNbiksem4uRm9udHMucHVzaChNbik7YnJlYWs7Y2FzZSJQYWxldHRlIjpLbj1NbjticmVhaztjYXNlIlRoZW1lIjpzaT1NbjticmVhaztjYXNlIkNvZGVOYW1lIjpIZT9xbi5Db2RlTmFtZT1Nbnx8cW4ubmFtZTp1bi5X'@;
put 'QlByb3BzLkNvZGVOYW1lPU1ufHwiVGhpc1dvcmtib29rIjticmVhaztjYXNlIlBhbmUiOihCcnx8e30pLmZyb3plbiYmKHJlWyIhZnJlZXplIl09ZGkoe3I6TW4ueXx8MCxjOk1uLnh8fDB9KSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goaGkubil7Y2FzZSJEYXQiOmNhc2UiQmVnaW4iOmNhc2Ui'@;
put 'RW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRpY2siOmNhc2UiQXhlc1VzZWQiOmNhc2UiQ3J0TGF5b3V0MTIiOmNhc2UiQ3J0TGF5b3V0MTJBIjpjYXNlIkNydExpbmsiOmNh'@;
put 'c2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFydCI6Y2FzZSJDaGFydDNkIjpjYXNlIkNoYXJ0M0RCYXJTaGFwZSI6Y2FzZSJDaGFydEZvcm1hdCI6Y2FzZSJDaGFydEZydElu'@;
put 'Zm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJEYXRhRm9ybWF0IjpjYXNlIlNlclRvQ3J0IjpjYXNlIkZvbnRYIjpjYXNlIkNhdFNlclJhbmdlIjpjYXNlIkF4Y0V4dCI6Y2Fz'@;
put 'ZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpjYXNlIkxlZ2VuZCI6Y2FzZSJMZWdlbmRFeGNlcHRpb24iOmNhc2UiUGllIjpjYXNlIlNjYXR0ZXIiOmNhc2UiUGllRm9ybWF0'@;
put 'IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJbmRleCI6Y2FzZSJBdHRhY2hlZExhYmVsIjpjYXNlIllNdWx0IjpjYXNlIkxpbmUiOmNhc2UiQmFyIjpjYXNlIlN1cmYiOmNh'@;
put 'c2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0cyI6Y2FzZSJTQmFzZVJlZiI6Y2FzZSJUZXh0UHJvcHNTdHJlYW0iOmNhc2UiTG5FeHQiOmNhc2UiTWtyRXh0IjpjYXNlIkNy'@;
put 'dENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0b0ZpbHRlciI6Y2FzZSJBdXRvRmlsdGVySW5mbyI6Y2FzZSJBdXRvRmlsdGVyMTIiOmNhc2UiRHJvcERvd25PYmpJZHMiOmNh'@;
put 'c2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1zb0RyYXdpbmdTZWxlY3Rpb24iOmNhc2UiV2ViUHViIjpjYXNlIkF1dG9XZWJQdWIiOmNhc2UiSGVhZGVyRm9vdGVyIjpjYXNl'@;
put 'IkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJDb21wcmVzc1BpY3R1cmVzIjpjYXNlIkNvbXBhdDEyIjpjYXNlIkNvbnRpbnVlIjpjYXNlIkNvbnRpbnVlRnJ0MTIiOmNhc2Ui'@;
put 'RnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goaGkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFkYXJBcmVhIjpjYXNlIkRyb3BCYXIiOmNhc2UiSW50bCI6Y2FzZSJDb29yZExpc3QiOmNhc2UiU2VyQXV4RXJyQmFyIjpjYXNl'@;
put 'IkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhGIjpjYXNlIkJJRkYyWEZJTkRFWCI6Y2FzZSJCSUZGNEZNVENOVCI6Y2FzZSJCSUZGMlJPVyI6Y2FzZSJCSUZGMldJTkRPVzIi'@;
put 'OmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BDdXN0b20iOmNhc2UiUmVhbFRpbWVEYXRhIjpjYXNlIk5hbWUiOmNhc2UiTEhOR3JhcGgiOmNhc2UiRm5Hcm91cE5hbWUiOmNh'@;
put 'c2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhkciI6Y2FzZSJUb29sYmFyRW5kIjpjYXNlIkRERU9iak5hbWUiOmNhc2UiRlJUQXJjaElkJCI6YnJlYWs7ZGVmYXVsdDppZihQ'@;
put 'LldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIraGkubn19fX19ZWxzZSB5LmwrPXhvLFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoe2xlbmd0aDp4b30pKX1yZXR1cm4gSS5TaGVldE5hbWVzPWx0KGdlKS5zb3J0KGZ1bmN0aW9uKHppLEpyKXtyZXR1'@;
put 'cm4gTnVtYmVyKHppKS1OdW1iZXIoSnIpfSkubWFwKGZ1bmN0aW9uKHppKXtyZXR1cm4gZ2VbemldLm5hbWV9KSxQLmJvb2tTaGVldHN8fChJLlNoZWV0cz1RKSwhSS5TaGVldE5hbWVzLmxlbmd0aCYmQmVbIiFyZWYiXT8oSS5TaGVldE5hbWVzLnB1c2goIlNoZWV0MSIpLEkuU2hlZXRzJiYo'@;
put 'SS5TaGVldHMuU2hlZXQxPUJlKSk6SS5QcmVhbWJsZT1CZSxJLlNoZWV0cyYmX28uZm9yRWFjaChmdW5jdGlvbih6aSxKcil7SS5TaGVldHNbSS5TaGVldE5hbWVzW0pyXV1bIiFhdXRvZmlsdGVyIl09eml9KSxJLlN0cmluZ3M9U2UsSS5TU0Y9dy5nZXRfdGFibGUoKSxabi5lbmMmJihJLkVu'@;
put 'Y3J5cHRpb249Wm4uZW5jKSxzaSYmKEkuVGhlbWVzPXNpKSxJLk1ldGFkYXRhPXt9LHZvaWQgMCE9PVp0JiYoSS5NZXRhZGF0YS5Db3VudHJ5PVp0KSxTbi5uYW1lcy5sZW5ndGg+MCYmKHVuLk5hbWVzPVNuLm5hbWVzKSxJLldvcmtib29rPXVuLEl9KFEuY29udGVudCxQKTtlbHNlIGlmKChn'@;
put 'ZT1qZS5maW5kKHksIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmZ2UuY29udGVudClyZT1UbS50b193b3JrYm9vayhnZS5jb250ZW50LChQLnR5cGU9X2UsUCkpO2Vsc2V7aWYoIShnZT1qZS5maW5kKHksIk5hdGl2ZUNvbnRlbnRfTUFJTiIpKXx8IWdlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtyZT1UbS50b193b3JrYm9vayhnZS5jb250ZW50LChQLnR5cGU9X2UsUCkpfVAuYm9va1ZCQSYmeS5GdWxsUGF0aHMmJmplLmZpbmQoeSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYocmUudmJhcmF3PWZ1bmN0aW9uIFg0KHkp'@;
put 'e3ZhciBQPWplLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIHkuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oSSxRKXtpZigiLyIhPT1JLnNsaWNlKC0xKSYmSS5tYXRjaCgvX1ZCQV9QUk9KRUNUX0NVUi8pKXt2YXIgcmU9SS5yZXBsYWNlKC9eW15cL10qLywiUiIpLnJlcGxh'@;
put 'Y2UoL1wvX1ZCQV9QUk9KRUNUX0NVUlx1MDAwMCovLCIiKTtqZS51dGlscy5jZmJfYWRkKFAscmUseS5GaWxlSW5kZXhbUV0uY29udGVudCl9fSksamUud3JpdGUoUCl9KHkpKX12YXIgdmU9e307cmV0dXJuIHkuRnVsbFBhdGhzJiZmdW5jdGlvbiB5TSh5LFAsSSl7dmFyIFE9amUuZmluZCh5'@;
put 'LCIhRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihRJiZRLnNpemU+MCl0cnl7dmFyIHJlPXU5KFEsXzQscnAuRFNJKTtmb3IodmFyIGdlIGluIHJlKVBbZ2VdPXJlW2dlXX1jYXRjaChIZSl7aWYoSS5XVEYpdGhyb3cgSGV9dmFyIF9lPWplLmZpbmQoeSwiIVN1bW1hcnlJbmZvcm1h'@;
put 'dGlvbiIpO2lmKF9lJiZfZS5zaXplPjApdHJ5e3ZhciB2ZT11OShfZSx3cixycC5TSSk7Zm9yKHZhciBTZSBpbiB2ZSludWxsPT1QW1NlXSYmKFBbU2VdPXZlW1NlXSl9Y2F0Y2goSGUpe2lmKEkuV1RGKXRocm93IEhlfVAuSGVhZGluZ1BhaXJzJiZQLlRpdGxlc09mUGFydHMmJih1MChQLkhl'@;
put 'YWRpbmdQYWlycyxQLlRpdGxlc09mUGFydHMsUCxJKSxkZWxldGUgUC5IZWFkaW5nUGFpcnMsZGVsZXRlIFAuVGl0bGVzT2ZQYXJ0cyl9KHksdmUsUCkscmUuUHJvcHM9cmUuQ3VzdHByb3BzPXZlLFAuYm9va0ZpbGVzJiYocmUuY2ZiPXkpLHJlfXZhciBtZj17MDp7bjoiQnJ0Um93SGRyIixm'@;
put 'OmZ1bmN0aW9uIEdMKHksUCl7dmFyIEk9e30sUT15LmwrUDtJLnI9eS5yZWFkX3NoaWZ0KDQpLHkubCs9NDt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9MTt2YXIgZ2U9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiB5Lmw9USw3JmdlJiYoSS5sZXZlbD03JmdlKSwxNiZnZSYmKEkuaGlkZGVu'@;
put 'PSEwKSwzMiZnZSYmKEkuaHB0PXJlLzIwKSxJfX0sMTp7bjoiQnJ0Q2VsbEJsYW5rIixmOmZ1bmN0aW9uIEZ2KHkpe3JldHVyblt1dSh5KV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gaUkoeSl7cmV0dXJuW3V1KHkpLFhjKHkpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6'@;
put 'ZnVuY3Rpb24gblkoeSl7cmV0dXJuW3V1KHkpLHkucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gUFMoeSl7cmV0dXJuW3V1KHkpLHkucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gbkkoeSl7cmV0dXJu'@;
put 'W3V1KHkpLG1hKHkpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gTTYoeSl7cmV0dXJuW3V1KHkpLENjKHkpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIEJTKHkpe3JldHVyblt1dSh5KSx5LnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZt'@;
put 'bGFTdHJpbmciLGY6ZnVuY3Rpb24gYUkoeSxQLEkpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9SVsiIXJvdyJdO3ZhciBfZT1bcmUsQ2MoeSksInN0ciJdO2lmKEkuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxJKTtfZVszXT14bCh2ZSxudWxsLHJlLEkuc3VwYm9v'@;
put 'a3MsSSl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSw5OntuOiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIFpTKHksUCxJKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5yPUlbIiFyb3ciXTt2YXIgX2U9W3JlLG1hKHkpLCJuIl07aWYoSS5jZWxsRm9ybXVsYSl7eS5sKz0yO3ZhciB2ZT1oNih5LFEt'@;
put 'eS5sLEkpO19lWzNdPXhsKHZlLG51bGwscmUsSS5zdXBib29rcyxJKX1lbHNlIHkubD1RO3JldHVybiBfZX19LDEwOntuOiJCcnRGbWxhQm9vbCIsZjpmdW5jdGlvbiBzSSh5LFAsSSl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1JWyIhcm93Il07dmFyIF9lPVtyZSx5LnJlYWRfc2hpZnQo'@;
put 'MSksImIiXTtpZihJLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15LmwsSSk7X2VbM109eGwodmUsbnVsbCxyZSxJLnN1cGJvb2tzLEkpfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sMTE6e246IkJydEZtbGFFcnJvciIsZjpmdW5jdGlvbiBVUyh5LFAsSSl7dmFyIFE9eS5sK1As'@;
put 'cmU9dXUoeSk7cmUucj1JWyIhcm93Il07dmFyIF9lPVtyZSx5LnJlYWRfc2hpZnQoMSksImUiXTtpZihJLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15LmwsSSk7X2VbM109eGwodmUsbnVsbCxyZSxJLnN1cGJvb2tzLEkpfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sMTI6e246'@;
put 'IkJydFNob3J0QmxhbmsiLGY6ZnVuY3Rpb24gT1MoeSl7cmV0dXJuW2EwKHkpXX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIHpTKHkpe3JldHVyblthMCh5KSxYYyh5KSwibiJdfX0sMTQ6e246IkJydFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24gTlMoeSl7cmV0dXJuW2EwKHkpLHku'@;
put 'cmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBTNih5KXtyZXR1cm5bYTAoeSkseS5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOmpTfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiB4Nih5KXtyZXR1cm5b'@;
put 'YTAoeSksQ2MoeSksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBHZCh5KXtyZXR1cm5bYTAoeSkseS5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjpjYX0sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIi'@;
put 'fSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJpbmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIi'@;
put 'fSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFTdHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4i'@;
put 'fSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoiQnJ0TmFtZSIsZjpmdW5jdGlvbiBwNSh5LFAsSSl7dmFyIFE9eS5sK1A7eS5sKz00LHkubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDQpLGdlPWR1KHkpLF9lPXNTKHksMCxJ'@;
put 'KSx2ZT1BdSh5KTt5Lmw9UTt2YXIgU2U9e05hbWU6Z2UsUHRnOl9lfTtyZXR1cm4gcmU8MjY4NDM1NDU1JiYoU2UuU2hlZXQ9cmUpLHZlJiYoU2UuQ29tbWVudD12ZSksU2V9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQi'@;
put 'LGY6ZnVuY3Rpb24gbUMoeSxQLEkpe3ZhciBRPXt9O1Euc3o9eS5yZWFkX3NoaWZ0KDIpLzIwO3ZhciByZT1mNCh5KTtzd2l0Y2gocmUuZkJvbGQmJihRLmJvbGQ9MSkscmUuZkl0YWxpYyYmKFEuaXRhbGljPTEpLHJlLmZVbmRlcmxpbmUmJihRLnVuZGVybGluZT0xKSxyZS5mQ29uZGVuc2Um'@;
put 'JihRLmNvbmRlbnNlPTEpLHJlLmZFeHRlbmQmJihRLmV4dGVuZD0xKSxyZS5mU2hhZG93JiYoUS5zaGFkb3c9MSkscmUuZk91dGxpbmUmJihRLm91dGxpbmU9MSkscmUuZlN0cmlrZW91dCYmKFEuc3RyaWtlPTEpLDcwMD09PXkucmVhZF9zaGlmdCgyKSYmKFEuYm9sZD0xKSx5LnJlYWRfc2hp'@;
put 'ZnQoMikpe2Nhc2UgMTpRLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0ic3ViIn12YXIgX2U9eS5yZWFkX3NoaWZ0KDEpOzAhPV9lJiYoUS51bmRlcmxpbmU9X2UpO3ZhciB2ZT15LnJlYWRfc2hpZnQoMSk7dmU+MCYmKFEuZmFtaWx5PXZlKTt2YXIgU2U9eS5yZWFkX3No'@;
put 'aWZ0KDEpO3N3aXRjaChTZT4wJiYoUS5jaGFyc2V0PVNlKSx5LmwrKyxRLmNvbG9yPURkKHkpLHkucmVhZF9zaGlmdCgxKSl7Y2FzZSAxOlEuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOlEuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIFEubmFtZT1DYyh5KSxRfX0sNDQ6e246IkJydEZtdCIs'@;
put 'ZjpmdW5jdGlvbiBnQyh5LFApe3JldHVyblt5LnJlYWRfc2hpZnQoMiksQ2MoeSldfX0sNDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24ga0QoeSxQKXt2YXIgST15LmwrUCxRPXt9LHJlPXkucmVhZF9zaGlmdCg0KTtpZig0MCE9cmUpe1EucGF0dGVyblR5cGU9VjRbcmVdO3ZhciBnZT1EZCh5'@;
put 'KTs2NCE9Z2UuaW5kZXgmJihRLmZnQ29sb3I9Z2UpO3ZhciBfZT1EZCh5KTs2NSE9X2UuaW5kZXgmJihRLmJnQ29sb3I9X2UpfWVsc2V7eS5sKz0xNix5LnJlYWRfc2hpZnQoNCksbWEoeSksbWEoeSksbWEoeSksbWEoeSksbWEoeSk7Zm9yKHZhciB2ZT15LnJlYWRfc2hpZnQoNCksU2U9W10s'@;
put 'SGU9MDtIZTx2ZTsrK0hlKVNlLnB1c2goWW0oeSkpfXJldHVybiB5Lmw9SSxRfX0sNDY6e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBURCh5KXt2YXIgUD17fTt5LnJlYWRfc2hpZnQoMSk7dmFyIEk9ajQoeSk7Im5vbmUiIT1JLnN0eWxlJiYoUC50b3A9SSk7dmFyIFE9ajQoeSk7Im5vbmUi'@;
put 'IT1RLnN0eWxlJiYoUC5ib3R0b209USk7dmFyIHJlPWo0KHkpOyJub25lIiE9cmUuc3R5bGUmJihQLmxlZnQ9cmUpO3ZhciBnZT1qNCh5KTsibm9uZSIhPWdlLnN0eWxlJiYoUC5yaWdodD1nZSk7dmFyIF9lPWo0KHkpO3JldHVybiJub25lIiE9X2Uuc3R5bGUmJihQLmRpYWc9X2UpLFB9fSw0'@;
put 'Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24gSDkoeSxQKXt2YXIgST15LmwrUCxRPXt9LHJlPXkucmVhZF9zaGlmdCgyKSxnZT15LnJlYWRfc2hpZnQoMiksX2U9eS5yZWFkX3NoaWZ0KDIpLHZlPXkucmVhZF9zaGlmdCgyKSxTZT15LnJlYWRfc2hpZnQoMiksSGU9eS5yZWFkX3NoaWZ0KDEpO3ku'@;
put 'cmVhZF9zaGlmdCgxKTt2YXIgQmU9eS5yZWFkX3NoaWZ0KDIpLEdlPXkucmVhZF9zaGlmdCgxKTt5Lmw9SSxRLnhmSWQ9cmUsUS5udW1GbXRJZD1nZSxRLmZvbnRJZD1fZSxRLmZpbGxJZD12ZSxRLmJvcmRlcklkPVNlLDEmR2UmJjAhPVEubnVtRm10SWQmJihRLmFwcGx5TnVtYmVyRm9ybWF0'@;
put 'PSEwKSxRLmFsaWdubWVudD17fSxIZT4wJiYoUS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPUhlKTt2YXIgbnQ9ITE7cmV0dXJuIDcmQmUmJihudD0hMCxRLmFsaWdubWVudC5ob3Jpem9udGFsPVdtWzcmQmVdKSxRLmFsaWdubWVudC52ZXJ0aWNhbD1CNFtCZT4+PjMmN10sUS5hbGlnbm1lbnQu'@;
put 'dmVydGljYWwmJihudD0hMCksQmU+Pj42JjEmJihRLmFsaWdubWVudC53cmFwVGV4dD0hMCksQmU+Pj44JjEmJihRLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksbnR8fGRlbGV0ZSBRLmFsaWdubWVudCw0JkdlJiZudCYmKFEuYXBwbHlBbGlnbm1lbnQ9ITApLFF9fSw0ODp7bjoiQnJ0U3R5'@;
put 'bGUifSw0OTp7bjoiQnJ0Q2VsbE1ldGEifSw1MDp7bjoiQnJ0VmFsdWVNZXRhIn0sNTE6e246IkJydE1kYiJ9LDUyOntuOiJCcnRCZWdpbkZtZCJ9LDUzOntuOiJCcnRFbmRGbWQifSw1NDp7bjoiQnJ0QmVnaW5NZHgifSw1NTp7bjoiQnJ0RW5kTWR4In0sNTY6e246IkJydEJlZ2luTWR4VHVw'@;
put 'bGUifSw1Nzp7bjoiQnJ0RW5kTWR4VHVwbGUifSw1ODp7bjoiQnJ0TWR4TWJySXN0ciJ9LDU5OntuOiJCcnRTdHIifSw2MDp7bjoiQnJ0Q29sSW5mbyIsZjpWZH0sNjI6e246IkJydENlbGxSU3RyaW5nIn0sNjM6e246IkJydENhbGNDaGFpbkl0ZW0kIixmOmZ1bmN0aW9uIFc0KHkpe3ZhciBQ'@;
put 'PXt9O1AuaT15LnJlYWRfc2hpZnQoNCk7dmFyIEk9e307SS5yPXkucmVhZF9zaGlmdCg0KSxJLmM9eS5yZWFkX3NoaWZ0KDQpLFAucj1kaShJKTt2YXIgUT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImUSYmKFAubD0iMSIpLDgmUSYmKFAuYT0iMSIpLFB9fSw2NDp7bjoiQnJ0RFZhbCIsZjpm'@;
put 'dW5jdGlvbiBFNih5LFAsSSl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3NoaWZ0KDQpLGdlPWwwKHkpLF9lPUF1KHkpLHZlPUF1KHkpLFNlPUF1KHkpLEhlPUF1KHkpLEJlPWlTKHksUCxJKSxHZT15Lmw8UT9pUyh5LFAsSSk6bnVsbCxudD0xNSZyZSxkdD17dDplb1tudF0sc3FyZng6Z2Usczpb'@;
put 'X2UsdmUsU2UsSGVdfTtyZXR1cm4gQmUmJihkdC5mMT1CZSksR2UmJihkdC5mMj1HZSksMD09bnR8fDM9PW50fHw3PT1udHx8KGR0Lm9wPUJ2W3JlPj4yMCYxNV0pLGR0fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9v'@;
put 'bCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0sNzA6e246IkJydFN4dmNlbGxOaWwifSwxMjg6e246IkJydEZpbGVWZXJzaW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29r'@;
put 'IixmOnljLHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldzVmlld3MifSwxMzQ6e246IkJydEVuZFdzVmlld3MifSwxMzU6e246IkJydEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1'@;
put 'bmN0aW9uIGdJKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4geS5sKz0yOCx7UlRMOjMyJlAsZ3JpZDohISg0JlApfX19LDEzODp7bjoiQnJ0RW5kV3NWaWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2lu'@;
put 'Q3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVuZGxlU2hzIn0sMTQ0OntuOiJCcnRFbmRCdW5kbGVTaHMifSwxNDU6e246IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5j'@;
put 'dGlvbiBKTCh5LFApe3ZhciBJPXt9LFE9eVt5LmxdO3JldHVybisreS5sLEkuYWJvdmU9ISg2NCZRKSxJLmxlZnQ9ISgxMjgmUSkseS5sKz0xOCxJLm5hbWU9emgoeSxQLTE5KSxJfX0sMTQ4OntuOiJCcnRXc0RpbSIsZjpxTCxwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24gR1Mo'@;
put 'eSxQKXt2YXIgST15LmwrUDttYSh5KSxtYSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoNCwiaSIpLHJlPXkucmVhZF9zaGlmdCg0LCJpIik7aWYoeS5yZWFkX3NoaWZ0KDQpLHkucmVhZF9zaGlmdCgxKSxJIT15LmwpdGhyb3cgbmV3IEVycm9yKCJCYWQgQnJ0UGFuZTogIitJKyIgIT0gIit5Lmwp'@;
put 'O3JldHVybltkaSh7cjpRLGM6cmV9KV19fSwxNTI6e246IkJydFNlbCIsZjpmdW5jdGlvbiB1SSh5LFApe3JldHVybiB5LnJlYWRfc2hpZnQoNCkse2NlbGw6ZGkoe3I6eS5yZWFkX3NoaWZ0KDQpLGM6eS5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24g'@;
put 'UEkoeSxQKXt2YXIgST17fSxRPXkucmVhZF9zaGlmdCg0KTtJLmRlZmF1bHRUaGVtZVZlcnNpb249eS5yZWFkX3NoaWZ0KDQpO3ZhciByZT1QPjg/Q2MoeSk6IiI7cmV0dXJuIHJlLmxlbmd0aD4wJiYoSS5Db2RlTmFtZT1yZSksSS5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZRKSxJ'@;
put 'LmJhY2t1cEZpbGU9ISEoNjQmUSksSS5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZRKSxJLmRhdGUxOTA0PSEhKDEmUSksSS5maWx0ZXJQcml2YWN5PSEhKDgmUSksSS5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZRKSxJLnByb21wdGVkU29sdXRpb25zPSEhKDE2JlEpLEkucHVibGlz'@;
put 'aEl0ZW1zPSEhKDIwNDgmUSksSS5yZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0JlEpLEkuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmUSksSS5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JlEpLEkuc2hvd0lua0Fubm90YXRpb249ISEoMzImUSksSS5zaG93T2Jq'@;
put 'ZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVtRPj4xMyYzXSxJLnNob3dQaXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JlEpLEkudXBkYXRlTGlua3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtRPj44JjNdLEl9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoi'@;
put 'QnJ0RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0aW9uIHVZKHksUCl7dmFyIEk9e307cmV0dXJuIEkuSGlkZGVuPXkucmVhZF9zaGlmdCg0KSxJLmlUYWJJRD15LnJlYWRfc2hpZnQoNCksSS5zdHJSZWxJRD1UMSh5LFAtOCksSS5uYW1lPUNjKHkpLEl9fSwxNTc6'@;
put 'e246IkJydENhbGNQcm9wIn0sMTU4OntuOiJCcnRCb29rVmlldyJ9LDE1OTp7bjoiQnJ0QmVnaW5Tc3QiLGY6ZnVuY3Rpb24gUWgoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCg0KSx5LnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIs'@;
put 'ZjpKY30sMTYyOntuOiJCcnRFbmRBRmlsdGVyIn0sMTYzOntuOiJCcnRCZWdpbkZpbHRlckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7'@;
put 'bjoiQnJ0Q29sb3JGaWx0ZXIifSwxNjk6e246IkJydEljb25GaWx0ZXIifSwxNzA6e246IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVyIn0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246'@;
put 'IkJydEN1c3RvbUZpbHRlciJ9LDE3NTp7bjoiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0ifSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjpsSX0sMTc3OntuOiJCcnRCZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURl'@;
put 'ZiJ9LDE4MDp7bjoiQnJ0RW5kUGl2b3RDYWNoZURlZiJ9LDE4MTp7bjoiQnJ0QmVnaW5QQ0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNl'@;
put 'In0sMTg2OntuOiJCcnRFbmRQQ0RTb3VyY2UifSwxODc6e246IkJydEJlZ2luUENEU1JhbmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJydEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6'@;
put 'e246IkJydEVuZFBDRElSdW4ifSwxOTM6e246IkJydEJlZ2luUGl2b3RDYWNoZVJlY29yZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0'@;
put 'QmVnaW5QQ0RIaWVyYXJjaHkifSwxOTg6e246IkJydEVuZFBDREhpZXJhcmNoeSJ9LDE5OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJydEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRD'@;
put 'b25uZWN0aW9uIn0sMjAzOntuOiJCcnRCZWdpbkVDRGJQcm9wcyJ9LDIwNDp7bjoiQnJ0RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3BzIn0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRF'@;
put 'bmRQQ0RTQ29uc29sIn0sMjA5OntuOiJCcnRCZWdpblBDRFNDUGFnZXMifSwyMTA6e246IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQYWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0'@;
put 'RW5kUENEU0NQSXRlbSJ9LDIxNTp7bjoiQnJ0QmVnaW5QQ0RTQ1NldHMifSwyMTY6e246IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1NldCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQ'@;
put 'Q0RGR3JvdXAifSwyMjE6e246IkJydEJlZ2luUENERkdJdGVtcyJ9LDIyMjp7bjoiQnJ0RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1JhbmdlIn0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJy'@;
put 'dEVuZFBDREZHRGlzY3JldGUifSwyMjc6e246IkJydEJlZ2luUENEU0RUdXBsZUNhY2hlIn0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdp'@;
put 'blBDRFNEVENFTWVtYmVycyJ9LDIzMjp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXJzIn0sMjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENE'@;
put 'U0RUQ1F1ZXJpZXMifSwyMzc6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJ5In0sMjM4OntuOiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENEU0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6'@;
put 'e246IkJydEVuZFBDRFNEVENTZXQifSwyNDM6e246IkJydEJlZ2luUENEQ2FsY0l0ZW1zIn0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJydEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0s'@;
put 'MjQ4OntuOiJCcnRFbmRQUnVsZSJ9LDI0OTp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMifSwyNTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5QUkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRF'@;
put 'bmRQTmFtZXMifSwyNTU6e246IkJydEJlZ2luUE5hbWUifSwyNTY6e246IkJydEVuZFBOYW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJydEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJy'@;
put 'dEJlZ2luRUNXZWJQcm9wcyJ9LDI2Mjp7bjoiQnJ0RW5kRUNXZWJQcm9wcyJ9LDI2Mzp7bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQVGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0'@;
put 'QmVnaW5FQ1BhcmFtIn0sMjY4OntuOiJCcnRFbmRFQ1BhcmFtIn0sMjY5OntuOiJCcnRCZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7'@;
put 'bjoiQnJ0RW5kRGltcyJ9LDI3NTp7bjoiQnJ0QmVnaW5EaW0ifSwyNzY6e246IkJydEVuZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJCcnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0s'@;
put 'MjgxOntuOiJCcnRFbmRTWFZJIn0sMjgyOntuOiJCcnRCZWdpblNYVkkifSwyODM6e246IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246'@;
put 'IkJydEVuZFNYVkRzIn0sMjg5OntuOiJCcnRCZWdpblNYUEkifSwyOTA6e246IkJydEVuZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJydEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2lu'@;
put 'U1hESXMifSwyOTY6e246IkJydEVuZFNYRElzIn0sMjk3OntuOiJCcnRCZWdpblNYTEkifSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hMSVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5k'@;
put 'U1hMSUNvbHMifSwzMDM6e246IkJydEJlZ2luU1hGb3JtYXQifSwzMDQ6e246IkJydEVuZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMwNjp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVj'@;
put 'dCJ9LDMwOTp7bjoiQnJ0QmVnaW5JU1hWRFJ3cyJ9LDMxMDp7bjoiQnJ0RW5kSVNYVkRSd3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJCcnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9'@;
put 'LDMxNTp7bjoiQnJ0RW5kU1hWaWV3In0sMzE2OntuOiJCcnRCZWdpblNYVEhzIn0sMzE3OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0sMzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9'@;
put 'LDMyMjp7bjoiQnJ0QmVnaW5JU1hUSENvbHMifSwzMjM6e246IkJydEVuZElTWFRIQ29scyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRFbmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRC'@;
put 'ZWdpblNYVEhJdGVtcyJ9LDMyOTp7bjoiQnJ0RW5kU1hUSEl0ZW1zIn0sMzMwOntuOiJCcnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNt'@;
put 'ZHRpbmZvIn0sMzM1OntuOiJCcnRNZHRpbmZvIn0sMzM2OntuOiJCcnRFbmRFc21kdGluZm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVuZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5T'@;
put 'aW5nbGVDZWxscyJ9LDM0Mjp7bjoiQnJ0RW5kU2luZ2xlQ2VsbHMifSwzNDM6e246IkJydEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoiQnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0'@;
put 'ODp7bjoiQnJ0RW5kTGlzdENvbCJ9LDM0OTp7bjoiQnJ0QmVnaW5MaXN0WG1sQ1ByIn0sMzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0'@;
put 'RW5kRXh0ZXJuYWxzIn0sMzU1OntuOiJCcnRTdXBCb29rU3JjIixmOlQxfSwzNTc6e246IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYy'@;
put 'OntuOiJCcnRFeHRlcm5TaGVldCIsZjpTbX0sMzYzOntuOiJCcnRFeHRlcm5UYWJsZVN0YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoiQnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFs'@;
put 'In0sMzY5OntuOiJCcnRFeHRlcm5DZWxsQm9vbCJ9LDM3MDp7bjoiQnJ0RXh0ZXJuQ2VsbEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcyOntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6'@;
put 'e246IkJydEVuZE1keFNldCJ9LDM3Njp7bjoiQnJ0QmVnaW5NZHhNYnJQcm9wIn0sMzc3OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1keEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0'@;
put 'ciJ9LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJdGVtIn0sMzgzOntuOiJCcnRFbmRQUkZJdGVtIn0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZv'@;
put 'dENhY2hlSUQifSwzODg6e246IkJydEJlZ2luSVNYVklzIn0sMzg5OntuOiJCcnRFbmRJU1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoi'@;
put 'QnJ0QmVnaW5Db2xCcmsifSwzOTU6e246IkJydEVuZENvbEJyayJ9LDM5Njp7bjoiQnJ0QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJydEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7'@;
put 'bjoiQnJ0RU9GIn0sNDA0OntuOiJCcnRVQ1IifSw0MDU6e246IkJydFJSSW5zRGVsIn0sNDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3ZlIn0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxs'@;
put 'In0sNDExOntuOiJCcnRSUkhlYWRlciJ9LDQxMjp7bjoiQnJ0UlJVc2VyVmlldyJ9LDQxMzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRTaCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0'@;
put 'MTg6e246IkJydFJSVFFTSUYifSw0MTk6e246IkJydFJSRm9ybWF0In0sNDIwOntuOiJCcnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIyOntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVz'@;
put 'ZXJTaFZpZXcifSw0MjU6e246IkJydEVuZFVzZXJTaFZpZXdzIn0sNDI2OntuOiJCcnRBcnJGbWxhIixmOmZ1bmN0aW9uIGg1KHksUCxJKXt2YXIgUT15LmwrUCxyZT1UZCh5KSxnZT15LnJlYWRfc2hpZnQoMSksX2U9W3JlXTtpZihfZVsyXT1nZSxJLmNlbGxGb3JtdWxhKXt2YXIgdmU9clMo'@;
put 'eSxRLXkubCxJKTtfZVsxXT12ZX1lbHNlIHkubD1RO3JldHVybiBfZX19LDQyNzp7bjoiQnJ0U2hyRm1sYSIsZjpmdW5jdGlvbiBoSSh5LFAsSSl7dmFyIFE9eS5sK1AsZ2U9W0pjKHksMTYpXTtpZihJLmNlbGxGb3JtdWxhKXt2YXIgX2U9RUwoeSxRLXkubCxJKTtnZVsxXT1fZSx5Lmw9UX1l'@;
put 'bHNlIHkubD1RO3JldHVybiBnZX19LDQyODp7bjoiQnJ0VGFibGUifSw0Mjk6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbnMifSw0MzA6e246IkJydEVuZEV4dENvbm5lY3Rpb25zIn0sNDMxOntuOiJCcnRCZWdpblBDRENhbGNNZW1zIn0sNDMyOntuOiJCcnRFbmRQQ0RDYWxjTWVtcyJ9LDQz'@;
put 'Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtIn0sNDM0OntuOiJCcnRFbmRQQ0RDYWxjTWVtIn0sNDM1OntuOiJCcnRCZWdpblBDREhHTGV2ZWxzIn0sNDM2OntuOiJCcnRFbmRQQ0RIR0xldmVscyJ9LDQzNzp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVsIn0sNDM4OntuOiJCcnRFbmRQQ0RIR0xldmVs'@;
put 'In0sNDM5OntuOiJCcnRCZWdpblBDREhHTEdyb3VwcyJ9LDQ0MDp7bjoiQnJ0RW5kUENESEdMR3JvdXBzIn0sNDQxOntuOiJCcnRCZWdpblBDREhHTEdyb3VwIn0sNDQyOntuOiJCcnRFbmRQQ0RIR0xHcm91cCJ9LDQ0Mzp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVycyJ9LDQ0NDp7bjoiQnJ0'@;
put 'RW5kUENESEdMR01lbWJlcnMifSw0NDU6e246IkJydEJlZ2luUENESEdMR01lbWJlciJ9LDQ0Njp7bjoiQnJ0RW5kUENESEdMR01lbWJlciJ9LDQ0Nzp7bjoiQnJ0QmVnaW5RU0kifSw0NDg6e246IkJydEVuZFFTSSJ9LDQ0OTp7bjoiQnJ0QmVnaW5RU0lSIn0sNDUwOntuOiJCcnRFbmRRU0lS'@;
put 'In0sNDUxOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lcyJ9LDQ1Mjp7bjoiQnJ0RW5kRGVsZXRlZE5hbWVzIn0sNDUzOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lIn0sNDU0OntuOiJCcnRFbmREZWxldGVkTmFtZSJ9LDQ1NTp7bjoiQnJ0QmVnaW5RU0lGcyJ9LDQ1Njp7bjoiQnJ0RW5kUVNJRnMi'@;
put 'fSw0NTc6e246IkJydEJlZ2luUVNJRiJ9LDQ1ODp7bjoiQnJ0RW5kUVNJRiJ9LDQ1OTp7bjoiQnJ0QmVnaW5BdXRvU29ydFNjb3BlIn0sNDYwOntuOiJCcnRFbmRBdXRvU29ydFNjb3BlIn0sNDYxOntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mjp7bjoiQnJ0RW5kQ29u'@;
put 'ZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYzOntuOiJCcnRCZWdpbkNGUnVsZSJ9LDQ2NDp7bjoiQnJ0RW5kQ0ZSdWxlIn0sNDY1OntuOiJCcnRCZWdpbkljb25TZXQifSw0NjY6e246IkJydEVuZEljb25TZXQifSw0Njc6e246IkJydEJlZ2luRGF0YWJhciJ9LDQ2ODp7bjoiQnJ0RW5kRGF0YWJh'@;
put 'ciJ9LDQ2OTp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlIn0sNDcwOntuOiJCcnRFbmRDb2xvclNjYWxlIn0sNDcxOntuOiJCcnRDRlZPIn0sNDcyOntuOiJCcnRFeHRlcm5WYWx1ZU1ldGEifSw0NzM6e246IkJydEJlZ2luQ29sb3JQYWxldHRlIn0sNDc0OntuOiJCcnRFbmRDb2xvclBhbGV0dGUi'@;
put 'fSw0NzU6e246IkJydEluZGV4ZWRDb2xvciJ9LDQ3Njp7bjoiQnJ0TWFyZ2lucyIsZjpmdW5jdGlvbiBmSSh5KXt2YXIgUD17fTtyZXR1cm4gcVMuZm9yRWFjaChmdW5jdGlvbihJKXtQW0ldPW1hKHkpfSksUH19LDQ3Nzp7bjoiQnJ0UHJpbnRPcHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0'@;
put 'dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRIZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRGb3JtYXQifSw0ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0'@;
put 'RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24gWEwoeSl7dmFyIFA9e30sST17fSxRPXt9LHJlPXkucmVhZF9zaGlmdCg0KSxnZT15LnJlYWRfc2hpZnQoMik7US53Y2g9cmU8PTY1NTM2P3JlLzI1NjpnZTt2YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO0ku'@;
put 'aHB0PV9lLzIwO3ZhciB2ZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIDImdmUmJihJLmhpZGRlbj0hMCksNCZ2ZSYmKFAudG9wdGhpY2s9ITApLDgmdmUmJihQLmJvdHRoaWNrPSEwKSxQLnJvd291dGxpbmU9eS5yZWFkX3NoaWZ0KDEpLFAuY29sb3V0bGluZT15LnJlYWRfc2hpZnQoMSksTDMo'@;
put 'SSksUC5yb3c9SSxwdShRKSxQLmNvbD1RLFB9fSw0ODY6e246IkJydEJlZ2luTWdzIn0sNDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBzIn0sNDg5OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0OTE6e246IkJydEVuZE1HIn0sNDkyOntu'@;
put 'OiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFwIn0sNDk0OntuOiJCcnRITGluayIsZjpmdW5jdGlvbiBkNSh5LFApe3ZhciBJPXkubCtQLFE9SmMoeSwxNikscmU9QXUoeSksZ2U9Q2MoeSksX2U9Q2MoeSksdmU9Q2MoeSk7eS5sPUk7dmFyIFNlPXtyZng6USxyZWxJZDpyZSxsb2M6'@;
put 'Z2UsZGlzcGxheTp2ZX07cmV0dXJuIF9lJiYoU2UuVG9vbHRpcD1fZSksU2V9fSw0OTU6e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0RW5kRENvbiJ9LDQ5Nzp7bjoiQnJ0QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJy'@;
put 'dEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9LDUwNDp7bjoiQnJ0U2xjIn0sNTA1OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7'@;
put 'bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUwOTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMifSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9LDUxMTp7bjoiQnJ0RW5kVGFibGVTdHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGll'@;
put 'bnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVwcyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVwcyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0sNTE3OntuOiJCcnRFbmRWb2xUeXBlIn0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJy'@;
put 'dEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJydEVuZFZvbFRvcGljIn0sNTIyOntuOiJCcnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9sUmVmIn0sNTI0OntuOiJCcnRWb2xOdW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29s'@;
put 'In0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFpbiQifSw1Mjk6e246IkJydEVuZENhbGNDaGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0YXRlIn0sNTMxOntuOiJCcnRFbmRTb3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0s'@;
put 'NTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rpb24ifSw1Mzc6e246IkJydFBob25ldGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1'@;
put 'NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QifSw1NDE6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVDVHdGbGRJbmZvIn0sNTQ4OntuOiJCcnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjpUMX0s'@;
put 'NTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0sNTUyOntuOiJCcnRMZWdhY3lEcmF3aW5nSEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtcyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1'@;
put 'Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQifSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2MDp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0'@;
put 'Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5kZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0QmVnaW5NUlVDb2xvcnMifSw1NzA6e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZh'@;
put 'bHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0sNTc3OntuOiJCcnRTdXBOYW1lU3RhcnQifSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0In0sNTc5OntuOiJCcnRTdXBOYW1lVmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6'@;
put 'e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoiQnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoiQnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1cE5hbWVGbWxhIn0sNTg2OntuOiJCcnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9'@;
put 'LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJvcGVydHkifSw1OTA6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRDZWxsU21hcnRUYWcifSw1OTI6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoi'@;
put 'QnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJCcnRCZWdpblNtYXJ0VGFnVHlwZXMifSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAw'@;
put 'OntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6e246IkJydEJlZ2luU1hGSUxURVIifSw2MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntuOiJCcnRCZWdpbkZpbGxzIn0sNjA0OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5k'@;
put 'Q2VsbFdhdGNoZXMifSw2MDc6e246IkJydENlbGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVnaW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJycyJ9LDYxMDp7bjoiQnJ0Q3Jhc2hSZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJC'@;
put 'cnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJydEVuZEJvcmRlcnMifSw2MTU6e246IkJydEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10cyJ9LDYxNzp7bjoiQnJ0QmVnaW5DZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7'@;
put 'bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJCcnRCaWdOYW1lIn0sNjI2OntuOiJCcnRCZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0RW5kQ2VsbFN0eWxlWEZzIn0sNjI4OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVn'@;
put 'aW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoiQnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6WER9LDYzMzp7bjoiQnJ0QmVnaW5Db21tZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIs'@;
put 'ZjpmdW5jdGlvbiBCQyh5KXt2YXIgUD17fTtQLmlhdXRob3I9eS5yZWFkX3NoaWZ0KDQpO3ZhciBJPUpjKHksMTYpO3JldHVybiBQLnJmeD1JLnMsUC5yZWY9ZGkoSS5zKSx5LmwrPTE2LFB9fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOlg3fSw2'@;
put 'Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0sNjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQxOntuOiJCcnRCZWdpblN4cnVsZXMifSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0'@;
put 'OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJCcnRFbmRBY3RpdmVYQ29udHJvbHMifSw2NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5In0sNjQ4OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2Vs'@;
put 'bElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQcm9wIixmOmZ1bmN0aW9uIGVwKHksUCl7cmV0dXJuIHkubCs9MTAse25hbWU6Q2MoeSl9fX0sNjUyOntuOiJCcnRDc1BhZ2VTZXR1cCJ9LDY1Mzp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3cyJ9LDY1NDp7bjoiQnJ0RW5kVXNlckNzVmlld3MifSw2'@;
put 'NTU6e246IkJydEJlZ2luVXNlckNzVmlldyJ9LDY1Njp7bjoiQnJ0RW5kVXNlckNzVmlldyJ9LDY1Nzp7bjoiQnJ0QmVnaW5QY2RTRkNJRW50cmllcyJ9LDY1ODp7bjoiQnJ0RW5kUENEU0ZDSUVudHJpZXMifSw2NTk6e246IkJydFBDRFNGQ0lFbnRyeSJ9LDY2MDp7bjoiQnJ0QmVnaW5MaXN0'@;
put 'UGFydHMifSw2NjE6e246IkJydExpc3RQYXJ0In0sNjYyOntuOiJCcnRFbmRMaXN0UGFydHMifSw2NjM6e246IkJydFNoZWV0Q2FsY1Byb3AifSw2NjQ6e246IkJydEJlZ2luRm5Hcm91cCJ9LDY2NTp7bjoiQnJ0Rm5Hcm91cCJ9LDY2Njp7bjoiQnJ0RW5kRm5Hcm91cCJ9LDY2Nzp7bjoiQnJ0'@;
put 'U3VwQWRkaW4ifSw2Njg6e246IkJydFNYVERNUE9yZGVyIn0sNjY5OntuOiJCcnRDc1Byb3RlY3Rpb24ifSw2NzE6e246IkJydEJlZ2luV3NTb3J0TWFwIn0sNjcyOntuOiJCcnRFbmRXc1NvcnRNYXAifSw2NzM6e246IkJydEJlZ2luUlJTb3J0In0sNjc0OntuOiJCcnRFbmRSUlNvcnQifSw2'@;
put 'NzU6e246IkJydFJSU29ydEl0ZW0ifSw2NzY6e246IkJydEZpbGVTaGFyaW5nSXNvIn0sNjc3OntuOiJCcnRCb29rUHJvdGVjdGlvbklzbyJ9LDY3ODp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uSXNvIn0sNjc5OntuOiJCcnRDc1Byb3RlY3Rpb25Jc28ifSw2ODA6e246IkJydFJhbmdlUHJvdGVj'@;
put 'dGlvbklzbyJ9LDY4MTp7bjoiQnJ0RFZhbExpc3QifSwxMDI0OntuOiJCcnRSd0Rlc2NlbnQifSwxMDI1OntuOiJCcnRLbm93bkZvbnRzIn0sMTAyNjp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0In0sMTAyNzp7bjoiQnJ0RW5kU1hUdXBsZVNldCJ9LDEwMjg6e246IkJydEJlZ2luU1hUdXBsZVNl'@;
put 'dEhlYWRlciJ9LDEwMjk6e246IkJydEVuZFNYVHVwbGVTZXRIZWFkZXIifSwxMDMwOntuOiJCcnRTWFR1cGxlU2V0SGVhZGVySXRlbSJ9LDEwMzE6e246IkJydEJlZ2luU1hUdXBsZVNldERhdGEifSwxMDMyOntuOiJCcnRFbmRTWFR1cGxlU2V0RGF0YSJ9LDEwMzM6e246IkJydEJlZ2luU1hU'@;
put 'dXBsZVNldFJvdyJ9LDEwMzQ6e246IkJydEVuZFNYVHVwbGVTZXRSb3cifSwxMDM1OntuOiJCcnRTWFR1cGxlU2V0Um93SXRlbSJ9LDEwMzY6e246IkJydE5hbWVFeHQifSwxMDM3OntuOiJCcnRQQ0RIMTQifSwxMDM4OntuOiJCcnRCZWdpblBDRENhbGNNZW0xNCJ9LDEwMzk6e246IkJydEVu'@;
put 'ZFBDRENhbGNNZW0xNCJ9LDEwNDA6e246IkJydFNYVEgxNCJ9LDEwNDE6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXAifSwxMDQyOntuOiJCcnRFbmRTcGFya2xpbmVHcm91cCJ9LDEwNDM6e246IkJydFNwYXJrbGluZSJ9LDEwNDQ6e246IkJydFNYREkxNCJ9LDEwNDU6e246IkJydFdzRm10'@;
put 'SW5mb0V4MTQifSwxMDQ2OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0Nzp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ4OntuOiJCcnRCZWdpbkNGUnVsZTE0In0sMTA0OTp7bjoiQnJ0RW5kQ0ZSdWxlMTQifSwxMDUwOntuOiJCcnRDRlZP'@;
put 'MTQifSwxMDUxOntuOiJCcnRCZWdpbkRhdGFiYXIxNCJ9LDEwNTI6e246IkJydEJlZ2luSWNvblNldDE0In0sMTA1Mzp7bjoiQnJ0RFZhbDE0IixmOmZ1bmN0aW9uIGJJKHksUCxJKXt2YXIgUT1mdW5jdGlvbiBHdCh5LFAsSSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXt9O3JldHVybiAx'@;
put 'JlEmJihyZS5yZWZzPWZ1bmN0aW9uIFVuKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksST1bXTtQLS0gPjA7KUkucHVzaChEcih5KSk7cmV0dXJuIEl9KHkpKSwyJlEmJihyZS5zcXJlZnM9ZnVuY3Rpb24geW8oeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxJPVtdO1AtLSA+MDsp'@;
put 'SS5wdXNoKGVzKHkpKTtyZXR1cm4gSX0oeSkpLDQmUSYmKHJlLmZvcm11bGFzPWZ1bmN0aW9uIHpzKHksUCxJKXtmb3IodmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPVtdO1EtLSA+MDspcmUucHVzaChzYyh5LDAsSSkpO3JldHVybiByZX0oeSwwLEkpKSw4JlEmJihyZS5yZWxJRD1mdW5jdGlv'@;
put 'biBpbSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMik7cmV0dXJuIDA9PT1QPyIiOnkucmVhZF9zaGlmdChQLCJ1dGYxNmxlIil9KHkpKSxyZX0oeSwwLEkpLHJlPXkucmVhZF9zaGlmdCg0KSxnZT1BdSh5KSxfZT1BdSh5KSx2ZT1BdSh5KSxTZT1BdSh5KSxIZT0oUS5mb3JtdWxhc3x8W10pWzBd'@;
put 'LEJlPShRLmZvcm11bGFzfHxbXSlbMV0sR2U9MTUmcmUsbnQ9e3Q6ZW9bR2VdLHNxcmZ4OlEuc3FyZWZzWzBdLHM6W2dlLF9lLHZlLFNlXX07cmV0dXJuIEhlJiYobnQuZjE9SGUpLEJlJiYobnQuZjI9QmUpLDA9PUdlfHwzPT1HZXx8Nz09R2V8fChudC5vcD1CdltyZT4+MjAmMTVdKSxudH19'@;
put 'LDEwNTQ6e246IkJydEJlZ2luRFZhbHMxNCJ9LDEwNTU6e246IkJydENvbG9yMTQifSwxMDU2OntuOiJCcnRCZWdpblNwYXJrbGluZXMifSwxMDU3OntuOiJCcnRFbmRTcGFya2xpbmVzIn0sMTA1ODp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cHMifSwxMDU5OntuOiJCcnRFbmRTcGFya2xp'@;
put 'bmVHcm91cHMifSwxMDYxOntuOiJCcnRTWFZEMTQifSwxMDYyOntuOiJCcnRCZWdpblNYVmlldzE0In0sMTA2Mzp7bjoiQnJ0RW5kU1hWaWV3MTQifSwxMDY0OntuOiJCcnRCZWdpblNYVmlldzE2In0sMTA2NTp7bjoiQnJ0RW5kU1hWaWV3MTYifSwxMDY2OntuOiJCcnRCZWdpblBDRDE0In0s'@;
put 'MTA2Nzp7bjoiQnJ0RW5kUENEMTQifSwxMDY4OntuOiJCcnRCZWdpbkV4dENvbm4xNCJ9LDEwNjk6e246IkJydEVuZEV4dENvbm4xNCJ9LDEwNzA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRHMifSwxMDcxOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEcyJ9LDEwNzI6e246IkJydEJlZ2luU2xp'@;
put 'Y2VyQ2FjaGVJRCJ9LDEwNzM6e246IkJydEVuZFNsaWNlckNhY2hlSUQifSwxMDc1OntuOiJCcnRCZWdpblNsaWNlckNhY2hlIn0sMTA3Njp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGUifSwxMDc3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlRGVmIn0sMTA3ODp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVE'@;
put 'ZWYifSwxMDc5OntuOiJCcnRCZWdpblNsaWNlcnNFeCJ9LDEwODA6e246IkJydEVuZFNsaWNlcnNFeCJ9LDEwODE6e246IkJydEJlZ2luU2xpY2VyRXgifSwxMDgyOntuOiJCcnRFbmRTbGljZXJFeCJ9LDEwODM6e246IkJydEJlZ2luU2xpY2VyIn0sMTA4NDp7bjoiQnJ0RW5kU2xpY2VyIn0s'@;
put 'MTA4NTp7bjoiQnJ0U2xpY2VyQ2FjaGVQaXZvdFRhYmxlcyJ9LDEwODY6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODc6e246IkJydEVuZFNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg4OntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwODk6e246IkJy'@;
put 'dEVuZFNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwOTA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkxOntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTM6e246IkJydEVuZFNsaWNl'@;
put 'ckNhY2hlU2lSYW5nZXMifSwxMDk0OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTU6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTY6e246IkJydFNsaWNlckNhY2hlT2xhcEl0ZW0ifSwxMDk3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9'@;
put 'LDEwOTg6e246IkJydFNsaWNlckNhY2hlU2VsZWN0aW9uIn0sMTA5OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTEwMDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDE6e246IkJydEVuZFNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMjp7bjoiQnJ0U2xpY2Vy'@;
put 'Q2FjaGVOYXRpdmVJdGVtIn0sMTEwMzp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uMTQifSwxMTA0OntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28xNCJ9LDExMDU6e246IkJydENlbGxJZ25vcmVFQzE0In0sMTExMTp7bjoiQnJ0TGlzdDE0In0sMTExMjp7bjoiQnJ0Q0ZJY29uIn0sMTExMzp7bjoi'@;
put 'QnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTU6e246IkJydEJlZ2luU2xpY2VycyJ9LDExMTY6e246IkJydEVuZFNsaWNlcnMifSwxMTE3OntuOiJCcnRXYlByb3AxNCJ9LDExMTg6e246IkJy'@;
put 'dEJlZ2luU1hFZGl0In0sMTExOTp7bjoiQnJ0RW5kU1hFZGl0In0sMTEyMDp7bjoiQnJ0QmVnaW5TWEVkaXRzIn0sMTEyMTp7bjoiQnJ0RW5kU1hFZGl0cyJ9LDExMjI6e246IkJydEJlZ2luU1hDaGFuZ2UifSwxMTIzOntuOiJCcnRFbmRTWENoYW5nZSJ9LDExMjQ6e246IkJydEJlZ2luU1hD'@;
put 'aGFuZ2VzIn0sMTEyNTp7bjoiQnJ0RW5kU1hDaGFuZ2VzIn0sMTEyNjp7bjoiQnJ0U1hUdXBsZUl0ZW1zIn0sMTEyODp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZSJ9LDExMjk6e246IkJydEVuZFNsaWNlclN0eWxlIn0sMTEzMDp7bjoiQnJ0U2xpY2VyU3R5bGVFbGVtZW50In0sMTEzMTp7bjoi'@;
put 'QnJ0QmVnaW5TdHlsZVNoZWV0RXh0MTQifSwxMTMyOntuOiJCcnRFbmRTdHlsZVNoZWV0RXh0MTQifSwxMTMzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzU6e246IkJydEJlZ2luQ29u'@;
put 'ZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzY6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM3OntuOiJCcnRCZWdpblBDRENhbGNNZW1FeHQifSwxMTM4OntuOiJCcnRFbmRQQ0RDYWxjTWVtRXh0In0sMTEzOTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtc0V4dCJ9LDExNDA6'@;
put 'e246IkJydEVuZFBDRENhbGNNZW1zRXh0In0sMTE0MTp7bjoiQnJ0UENERmllbGQxNCJ9LDExNDI6e246IkJydEJlZ2luU2xpY2VyU3R5bGVzIn0sMTE0Mzp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVzIn0sMTE0NDp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0NTp7bjoiQnJ0'@;
put 'RW5kU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDY6e246IkJydENGUnVsZUV4dCJ9LDExNDc6e246IkJydEJlZ2luU1hDb25kRm10MTQifSwxMTQ4OntuOiJCcnRFbmRTWENvbmRGbXQxNCJ9LDExNDk6e246IkJydEJlZ2luU1hDb25kRm10czE0In0sMTE1MDp7bjoiQnJ0RW5kU1hDb25kRm10'@;
put 'czE0In0sMTE1Mjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZDE0In0sMTE1Mzp7bjoiQnJ0RW5kU29ydENvbmQxNCJ9LDExNTQ6e246IkJydEVuZERWYWxzMTQifSwxMTU1OntuOiJCcnRFbmRJY29uU2V0MTQifSwxMTU2OntuOiJCcnRFbmREYXRhYmFyMTQifSwxMTU3OntuOiJCcnRCZWdpbkNvbG9y'@;
put 'U2NhbGUxNCJ9LDExNTg6e246IkJydEVuZENvbG9yU2NhbGUxNCJ9LDExNTk6e246IkJydEJlZ2luU3hydWxlczE0In0sMTE2MDp7bjoiQnJ0RW5kU3hydWxlczE0In0sMTE2MTp7bjoiQnJ0QmVnaW5QUnVsZTE0In0sMTE2Mjp7bjoiQnJ0RW5kUFJ1bGUxNCJ9LDExNjM6e246IkJydEJlZ2lu'@;
put 'UFJGaWx0ZXJzMTQifSwxMTY0OntuOiJCcnRFbmRQUkZpbHRlcnMxNCJ9LDExNjU6e246IkJydEJlZ2luUFJGaWx0ZXIxNCJ9LDExNjY6e246IkJydEVuZFBSRmlsdGVyMTQifSwxMTY3OntuOiJCcnRCZWdpblBSRkl0ZW0xNCJ9LDExNjg6e246IkJydEVuZFBSRkl0ZW0xNCJ9LDExNjk6e246'@;
put 'IkJydEJlZ2luQ2VsbElnbm9yZUVDczE0In0sMTE3MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDczE0In0sMTE3MTp7bjoiQnJ0RHhmMTQifSwxMTcyOntuOiJCcnRCZWdpbkR4RjE0cyJ9LDExNzM6e246IkJydEVuZER4ZjE0cyJ9LDExNzc6e246IkJydEZpbHRlcjE0In0sMTE3ODp7bjoiQnJ0'@;
put 'QmVnaW5DdXN0b21GaWx0ZXJzMTQifSwxMTgwOntuOiJCcnRDdXN0b21GaWx0ZXIxNCJ9LDExODE6e246IkJydEljb25GaWx0ZXIxNCJ9LDExODI6e246IkJydFBpdm90Q2FjaGVDb25uZWN0aW9uTmFtZSJ9LDIwNDg6e246IkJydEJlZ2luRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNDk6'@;
put 'e246IkJydEVuZERlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDUwOntuOiJCcnREZWNvdXBsZWRQaXZvdENhY2hlSUQifSwyMDUxOntuOiJCcnRCZWdpblBpdm90VGFibGVSZWZzIn0sMjA1Mjp7bjoiQnJ0RW5kUGl2b3RUYWJsZVJlZnMifSwyMDUzOntuOiJCcnRQaXZvdFRhYmxlUmVmIn0s'@;
put 'MjA1NDp7bjoiQnJ0U2xpY2VyQ2FjaGVCb29rUGl2b3RUYWJsZXMifSwyMDU1OntuOiJCcnRCZWdpblN4dmNlbGxzIn0sMjA1Njp7bjoiQnJ0RW5kU3h2Y2VsbHMifSwyMDU3OntuOiJCcnRCZWdpblN4Um93In0sMjA1ODp7bjoiQnJ0RW5kU3hSb3cifSwyMDYwOntuOiJCcnRQY2RDYWxjTWVt'@;
put 'MTUifSwyMDY3OntuOiJCcnRRc2kxNSJ9LDIwNjg6e246IkJydEJlZ2luV2ViRXh0ZW5zaW9ucyJ9LDIwNjk6e246IkJydEVuZFdlYkV4dGVuc2lvbnMifSwyMDcwOntuOiJCcnRXZWJFeHRlbnNpb24ifSwyMDcxOntuOiJCcnRBYnNQYXRoMTUifSwyMDcyOntuOiJCcnRCZWdpblBpdm90VGFi'@;
put 'bGVVSVNldHRpbmdzIn0sMjA3Mzp7bjoiQnJ0RW5kUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDc1OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSURzIn0sMjA3Njp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEIn0sMjA3Nzp7bjoiQnJ0QmVnaW5UYWJsZVNsaWNlckNhY2hlIn0sMjA3ODp7bjoi'@;
put 'QnJ0RW5kVGFibGVTbGljZXJDYWNoZSJ9LDIwNzk6e246IkJydFN4RmlsdGVyMTUifSwyMDgwOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4MTp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgyOntuOiJCcnRUaW1lbGluZUNhY2hl'@;
put 'UGl2b3RDYWNoZUlEIn0sMjA4Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSURzIn0sMjA4NDp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEcyJ9LDIwODU6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEIn0sMjA4Njp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEIn0sMjA4Nzp7bjoiQnJ0'@;
put 'QmVnaW5UaW1lbGluZXNFeCJ9LDIwODg6e246IkJydEVuZFRpbWVsaW5lc0V4In0sMjA4OTp7bjoiQnJ0QmVnaW5UaW1lbGluZUV4In0sMjA5MDp7bjoiQnJ0RW5kVGltZWxpbmVFeCJ9LDIwOTE6e246IkJydFdvcmtCb29rUHIxNSJ9LDIwOTI6e246IkJydFBDREgxNSJ9LDIwOTM6e246IkJy'@;
put 'dEJlZ2luVGltZWxpbmVTdHlsZSJ9LDIwOTQ6e246IkJydEVuZFRpbWVsaW5lU3R5bGUifSwyMDk1OntuOiJCcnRUaW1lbGluZVN0eWxlRWxlbWVudCJ9LDIwOTY6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk3OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlc2hlZXRF'@;
put 'eHQxNSJ9LDIwOTg6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXMifSwyMDk5OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlcyJ9LDIxMDA6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMjp7bjoiQnJ0'@;
put 'RHhmMTUifSwyMTAzOntuOiJCcnRCZWdpbkR4ZnMxNSJ9LDIxMDQ6e246ImJydEVuZER4ZnMxNSJ9LDIxMDU6e246IkJydFNsaWNlckNhY2hlSGlkZUl0ZW1zV2l0aE5vRGF0YSJ9LDIxMDY6e246IkJydEJlZ2luSXRlbVVuaXF1ZU5hbWVzIn0sMjEwNzp7bjoiQnJ0RW5kSXRlbVVuaXF1ZU5h'@;
put 'bWVzIn0sMjEwODp7bjoiQnJ0SXRlbVVuaXF1ZU5hbWUifSwyMTA5OntuOiJCcnRCZWdpbkV4dENvbm4xNSJ9LDIxMTA6e246IkJydEVuZEV4dENvbm4xNSJ9LDIxMTE6e246IkJydEJlZ2luT2xlZGJQcjE1In0sMjExMjp7bjoiQnJ0RW5kT2xlZGJQcjE1In0sMjExMzp7bjoiQnJ0QmVnaW5E'@;
put 'YXRhRmVlZFByMTUifSwyMTE0OntuOiJCcnRFbmREYXRhRmVlZFByMTUifSwyMTE1OntuOiJCcnRUZXh0UHIxNSJ9LDIxMTY6e246IkJydFJhbmdlUHIxNSJ9LDIxMTc6e246IkJydERiQ29tbWFuZDE1In0sMjExODp7bjoiQnJ0QmVnaW5EYlRhYmxlczE1In0sMjExOTp7bjoiQnJ0RW5kRGJU'@;
put 'YWJsZXMxNSJ9LDIxMjA6e246IkJydERiVGFibGUxNSJ9LDIxMjE6e246IkJydEJlZ2luRGF0YU1vZGVsIn0sMjEyMjp7bjoiQnJ0RW5kRGF0YU1vZGVsIn0sMjEyMzp7bjoiQnJ0QmVnaW5Nb2RlbFRhYmxlcyJ9LDIxMjQ6e246IkJydEVuZE1vZGVsVGFibGVzIn0sMjEyNTp7bjoiQnJ0TW9k'@;
put 'ZWxUYWJsZSJ9LDIxMjY6e246IkJydEJlZ2luTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyNzp7bjoiQnJ0RW5kTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyODp7bjoiQnJ0TW9kZWxSZWxhdGlvbnNoaXAifSwyMTI5OntuOiJCcnRCZWdpbkVDVHh0V2l6MTUifSwyMTMwOntuOiJCcnRFbmRFQ1R4'@;
put 'dFdpejE1In0sMjEzMTp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdDE1In0sMjEzMjp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzM6e246IkJydEJlZ2luRUNUV0ZsZEluZm8xNSJ9LDIxMzQ6e246IkJydEZpZWxkTGlzdEFjdGl2ZUl0ZW0ifSwyMTM1OntuOiJCcnRQaXZvdENh'@;
put 'Y2hlSWRWZXJzaW9uIn0sMjEzNjp7bjoiQnJ0U1hESTE1In0sMjEzNzp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZ3MifSwyMTM4OntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZ3MifSwyMTM5OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MDp7bjoiQnJ0RW5kTW9k'@;
put 'ZWxUaW1lR3JvdXBpbmcifSwyMTQxOntuOiJCcnRNb2RlbFRpbWVHcm91cGluZ0NhbGNDb2wifSwzMDcyOntuOiJCcnRVaWQifSwzMDczOntuOiJCcnRSZXZpc2lvblB0ciJ9LDUwOTU6e246IkJydEJlZ2luQ2FsY0ZlYXR1cmVzIn0sNTA5Njp7bjoiQnJ0RW5kQ2FsY0ZlYXR1cmVzIn0sNTA5'@;
put 'Nzp7bjoiQnJ0Q2FsY0ZlYXR1cmUifSw2NTUzNTp7bjoiIn19LGI1PVBlKG1mLCJuIik7YjUuQnJ0RlJUQXJjaElEJD0xNjt2YXIgWDA9ezY6e246IkZvcm11bGEiLGY6ejN9LDEwOntuOiJFT0YiLGY6UGR9LDEyOntuOiJDYWxjQ291bnQiLGY6aGx9LDEzOntuOiJDYWxjTW9kZSIsZjpobH0s'@;
put 'MTQ6e246IkNhbGNQcmVjaXNpb24iLGY6U299LDE1OntuOiJDYWxjUmVmTW9kZSIsZjpTb30sMTY6e246IkNhbGNEZWx0YSIsZjptYX0sMTc6e246IkNhbGNJdGVyIixmOlNvfSwxODp7bjoiUHJvdGVjdCIsZjpTb30sMTk6e246IlBhc3N3b3JkIixmOmhsfSwyMDp7bjoiSGVhZGVyIixmOlYx'@;
put 'fSwyMTp7bjoiRm9vdGVyIixmOlYxfSwyMzp7bjoiRXh0ZXJuU2hlZXQiLGY6U219LDI0OntuOiJMYmwiLGY6Vnd9LDI1OntuOiJXaW5Qcm90ZWN0IixmOlNvfSwyNjp7bjoiVmVydGljYWxQYWdlQnJlYWtzIn0sMjc6e246Ikhvcml6b250YWxQYWdlQnJlYWtzIn0sMjg6e246Ik5vdGUiLGY6'@;
put 'ZnVuY3Rpb24gVXcoeSxQLEkpe3JldHVybiBmdW5jdGlvbiBTOSh5LFAsSSl7aWYoIShJLmJpZmY8OCkpe3ZhciBRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFkX3NoaWZ0KDIpLF9lPXkucmVhZF9zaGlmdCgyKSx2ZT1WMih5LDAsSSk7cmV0dXJuIEkuYmlm'@;
put 'Zjw4JiZ5LnJlYWRfc2hpZnQoMSksW3tyOlEsYzpyZX0sdmUsX2UsZ2VdfX0oeSwwLEkpfX0sMjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiBTMyh5LFAsSSl7cmV0dXJuIEkmJkkuYmlmZjw1Pyh5LmwrPVAse2NlbGw6e3I6MCxjOjB9fSk6KHkucmVhZF9zaGlmdCgxKSx7Y2VsbDpkaSh7'@;
put 'cjp5LnJlYWRfc2hpZnQoMiksYzp5LnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRhdGUxOTA0IixmOlNvfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjp5OX0sMzg6e246IkxlZnRNYXJnaW4iLGY6bWF9LDM5OntuOiJSaWdodE1hcmdpbiIsZjptYX0sNDA6e246IlRvcE1hcmdpbiIsZjptYX0s'@;
put 'NDE6e246IkJvdHRvbU1hcmdpbiIsZjptYX0sNDI6e246IlByaW50Um93Q29sIixmOlNvfSw0Mzp7bjoiUHJpbnRHcmlkIixmOlNvfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gVmwoeSxQLEkpe2lmKEkuZW5jKXJldHVybiBJLmVuYzt2YXIgUT17VHlwZTpJLmJpZmY+PTg/eS5yZWFk'@;
put 'X3NoaWZ0KDIpOjB9O3JldHVybiBRLlR5cGU/ZnVuY3Rpb24gZ0QoeSxQLEksUSl7dmFyIHJlPVF8fHt9O2lmKHJlLkluZm89eS5yZWFkX3NoaWZ0KDIpLHkubC09MiwxPT09cmUuSW5mbyl7aWYocmUuRGF0YT1mdW5jdGlvbiBiWih5KXt2YXIgUD17fSxJPVAuRW5jcnlwdGlvblZlcnNpb25J'@;
put 'bmZvPUcwKHksNCk7aWYoMSE9SS5NYWpvcnx8MSE9SS5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIrSS5NYWpvcisiIDogIitJLk1pbm9yO3JldHVybiBQLlNhbHQ9eS5yZWFkX3NoaWZ0KDE2KSxQLkVuY3J5cHRlZFZlcmlmaWVyPXkucmVhZF9zaGlmdCgxNiksUC5F'@;
put 'bmNyeXB0ZWRWZXJpZmllckhhc2g9eS5yZWFkX3NoaWZ0KDE2KSxQfSh5KSxJLnBhc3N3b3JkJiZ0eXBlb2YgTzY8InUiKXt2YXIgZ2U9TzYoSS5wYXNzd29yZCxyZS5EYXRhLlNhbHQsIjAwMDAwMDAwIiksX2U9dWUocmUuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcityZS5EYXRhLkVuY3J5cHRl'@;
put 'ZFZlcmlmaWVySGFzaCwiaGV4IiksdmU9eGQucmM0KHVlKGdlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IiksX2UpO1EudmFsaWQ9eGQubWQ1KHZlLnNsaWNlKDAsMTYpKT09QnVmZmVyLmZyb20odmUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IikscmUuRGF0YS5LZXk9Z2UsUS5pbnNpdHU9'@;
put 'ZnVuY3Rpb24gb3IoeSxQKXt2YXIgST1uZXcgQXJyYXkoMjU2KSxRPTAscmU9MCxnZT0wLF9lPTA7ZnVuY3Rpb24gdmUobnQpe2ZvcihRPTAscmU9MCxnZT0wLF9lPTAscmU9MDsyNTYhPXJlOysrcmUpSVtyZV09cmU7Zm9yKGdlPTAscmU9MDsyNTYhPXJlOysrcmUpe3RyeXtnZT1nZStJW3Jl'@;
put 'XStudFtyZSVudC5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1fWNhdGNoKGR0KXt0aHJvdyBjb25zb2xlLmxvZyhyZSxudFtyZSVudC5sZW5ndGhdKSxkdH1fZT1JW3JlXSxJW3JlXT1JW2dlXSxJW2dlXT1fZX1yZT1nZT0wfWZ1bmN0aW9uIFNlKG50KXt2YXIgZHQ9RyhudC5sZW5ndGgpO2Zv'@;
put 'cihRPTA7USE9bnQubGVuZ3RoOysrUSlfZT1JW3JlPXJlKzEmMjU1XSxJW3JlXT1JW2dlPShnZStJW3JlXSklMjU2XSxJW2dlXT1fZSxkdFtRXT1udFtRXV5JW0lbcmVdK0lbZ2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGR0KX12YXIgSGU9eS5LZXksQmU9MDt2ZSh1ZShIZSwiaGV4Iiku'@;
put 'dG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgR2U9MDtyZXR1cm4gZnVuY3Rpb24obnQpe2lmKEdlK250Lmxlbmd0aDwxMDI0KXJldHVybiBHZSs9bnQubGVuZ3RoLFNlKG50KTt2YXIgY3Q9MCxidD11ZShudC5zbGljZShjdCxjdCsoQ3Q9MTAyNC1HZSkpKTtjdCs9Q3QsR2U9MDt2YXIgRnQ9U2Uo'@;
put 'YnQpO2ZvcihjdD09bnQubGVuZ3RoJiYoKytCZSxIZT1PNihQLHkuU2FsdCxSNihCZSkpLHZlKHVlKEhlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtjdDxudC5sZW5ndGg7KXsrK0JlLEhlPU82KFAseS5TYWx0LFI2KEJlKSksdmUoQnVmZmVyLmZyb20oSGUsImhleCIpLnRvU3RyaW5n'@;
put 'KCJiaW5hcnkiKSk7dmFyIEN0PU1hdGgubWluKDEwMjQsbnQubGVuZ3RoLWN0KTtidD11ZShudC5zbGljZShjdCxjdCtDdCkpLGN0Kz1DdCxHZT1DdCxGdD1CdWZmZXIuY29uY2F0KFtGdCxTZShidCldKX1yZXR1cm4gRnR9fShyZS5EYXRhLEkucGFzc3dvcmQpfX1lbHNlIGlmKHJlLkRhdGE9'@;
put 'ZnVuY3Rpb24gX1ooeSxQKXt2YXIgST17fSxRPUkuRW5jcnlwdGlvblZlcnNpb25JbmZvPUcwKHksNCk7aWYoUC09NCwyIT1RLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIitRLk1pbm9yKTtpZihRLk1ham9yPjR8fFEuTWFqb3I8Mil0'@;
put 'aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrUS5NYWpvcik7SS5GbGFncz15LnJlYWRfc2hpZnQoNCksUC09NDt2YXIgcmU9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiBQLT00LEkuRW5jcnlwdGlvbkhlYWRlcj1MOSh5LHJlKSxJLkVuY3J5cHRpb25W'@;
put 'ZXJpZmllcj1SbSh5LFAtPXJlKSxJfSh5LFApLHJlLkRhdGEmJnJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1yZS5EYXRhLkVuY3J5cHRpb25IZWFkZXIuQWxnSUQmJkkucGFzc3dvcmQmJnR5cGVvZiBncjwidSIpe3ZhciBTZT1ncihJLnBhc3N3b3JkLHJlLkRhdGEuRW5jcnlw'@;
put 'dGlvblZlcmlmaWVyLlNhbHQudG9TdHJpbmcoImhleCIpLCIwMDAwMDAwMCIpLEhlPXJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1IZXx8SGU8U2UubGVuZ3RoJiYoU2U9U2Uuc2xpY2UoMCxIZSkpO3ZhciBCZT11ZShyZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5W'@;
put 'ZXJpZmllci50b1N0cmluZygiaGV4IikrcmUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4IiksR2U9eGQucmM0KFNlLnRvU3RyaW5nKCJiaW5hcnkiKSxCZSk7US52YWxpZD1lbChHZS5zbGljZSgwLEhlKSwiU0hBMSIpLnRvU3RyaW5n'@;
put 'KCJoZXgiKT09R2Uuc2xpY2UoSGUpLnRvU3RyaW5nKCJoZXgiKSxyZS5EYXRhLktleT1TZSxRLnZhbGlkJiYoUS5pbnNpdHU9ZnVuY3Rpb24gemMoeSxQKXt2YXIgST1uZXcgQXJyYXkoMjU2KSxRPTAscmU9MCxnZT0wLF9lPTAsdmU9eS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zO2Z1'@;
put 'bmN0aW9uIFNlKGR0KXtmb3IoZHQ9QnVmZmVyLmZyb20oZHQuc2xpY2UoMCx2ZSkpLFE9MCxyZT0wLGdlPTAsX2U9MCxyZT0wOzI1NiE9cmU7KytyZSlJW3JlXT1yZTtmb3IoZ2U9MCxyZT0wOzI1NiE9cmU7KytyZSl7dmFyIEN0PWR0W3JlJWR0Lmxlbmd0aF07Z2U9Z2UrSVtyZV0rKCJzdHJp'@;
put 'bmciPT10eXBlb2YgQ3Q/Q3QuY2hhckNvZGVBdCgwKTpDdCkmMjU1LF9lPUlbcmVdLElbcmVdPUlbZ2VdLElbZ2VdPV9lfXJlPWdlPTB9ZnVuY3Rpb24gSGUoZHQpe3ZhciBDdD1HKGR0Lmxlbmd0aCk7Zm9yKFE9MDtRIT1kdC5sZW5ndGg7KytRKV9lPUlbcmU9cmUrMSYyNTVdLElbcmVdPUlb'@;
put 'Z2U9KGdlK0lbcmVdKSUyNTZdLElbZ2VdPV9lLEN0W1FdPWR0W1FdXklbSVtyZV0rSVtnZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oQ3QpfXZhciBCZT15LktleSxHZT0wO1NlKHVlKEJlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBudD0wO3JldHVybiBmdW5jdGlvbihkdCl7'@;
put 'aWYobnQrZHQubGVuZ3RoPDEwMjQpcmV0dXJuIG50Kz1kdC5sZW5ndGgsSGUoZHQpO3ZhciBjdD0xMDI0LW50LGJ0PTAsRnQ9QnVmZmVyLmZyb20oZHQuc2xpY2UoYnQsYnQrY3QpKTtidCs9Y3QsbnQ9MDt2YXIga3Q9SGUoRnQpO2ZvcihidD09ZHQubGVuZ3RoJiYoKytHZSxCZT1ncihQLHku'@;
put 'RW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsUjYoR2UpKSxTZShCdWZmZXIuZnJvbShCZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7YnQ8ZHQubGVuZ3RoOykrK0dlLEJlPWdyKFAseS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxSNihHZSkpLFNlKEJ1ZmZlci5mcm9tKEJlLCJoZXgiKS50'@;
put 'b1N0cmluZygiYmluYXJ5IikpLGN0PU1hdGgubWluKDEwMjQsZHQubGVuZ3RoLWJ0KSxGdD1CdWZmZXIuZnJvbShkdC5zbGljZShidCxidCtjdCkpLGJ0Kz1jdCxjdDwxMDI0JiYobnQ9Y3QpLGt0PUJ1ZmZlci5jb25jYXQoW2t0LEhlKEZ0KV0pO3JldHVybiBrdH19KHJlLkRhdGEsSS5wYXNz'@;
put 'd29yZCkpfXJldHVybiByZX0oeSxQLTIsSSxRKTpmdW5jdGlvbiBwRCh5LFAsSSxRKXt2YXIgcmU9e2tleTpobCh5KSx2ZXJpZmljYXRpb25CeXRlczpobCh5KX07SS5wYXNzd29yZCYmKHJlLnZlcmlmaWVyPWFDKEkucGFzc3dvcmQpKSxRLnZhbGlkPXJlLnZlcmlmaWNhdGlvbkJ5dGVzPT09'@;
put 'cmUudmVyaWZpZXIsUS52YWxpZCYmKFEuaW5zaXR1PWZ1bmN0aW9uKHksUCl7dmFyIEk9UHx8MCxRPWZEKHkpO3JldHVybiBmdW5jdGlvbihyZSl7dmFyIGdlPWZ1bmN0aW9uKHksUCxJLFEscmUpe3ZhciBnZSxfZTtmb3IocmV8fChyZT1QKSxRfHwoUT1mRCgiIikpLGdlPTA7Z2UhPVAubGVu'@;
put 'Z3RoOysrZ2UpX2U9MjU1JigoX2U9UFtnZV0pPj41fF9lPDwzKSxyZVtnZV09X2VePVFbSV0sST1JKzEmMTU7cmV0dXJuW3JlLEksUV19KDAscmUsSSxRKTtyZXR1cm4gST1nZVsxXSxnZVswXX19KEkucGFzc3dvcmQsMCkpfSh5LDAsSSxRKSxRfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24g'@;
put 'UHcoeSxQLEkpe3ZhciBRPXtzejp5LnJlYWRfc2hpZnQoMikvMjB9LHJlPWY0KHkpO3JlLmZCb2xkJiYoUS5ib2xkPTEpLHJlLmZJdGFsaWMmJihRLml0YWxpYz0xKSxyZS5mVW5kZXJsaW5lJiYoUS51bmRlcmxpbmU9MSkscmUuZkNvbmRlbnNlJiYoUS5jb25kZW5zZT0xKSxyZS5mRXh0ZW5k'@;
put 'JiYoUS5leHRlbmQ9MSkscmUuZlNoYWRvdyYmKFEuc2hhZG93PTEpLHJlLmZPdXRsaW5lJiYoUS5vdXRsaW5lPTEpLHJlLmZTdHJpa2VvdXQmJihRLnN0cmlrZT0xKTt2YXIgZ2U9SSYmSS5iaWZmfHw4O2lmKDIhPWdlJiYoUS5pY3Y9eS5yZWFkX3NoaWZ0KDIpLDMhPWdlJiY0IT1nZSkpe3N3'@;
put 'aXRjaCg3MDA9PT15LnJlYWRfc2hpZnQoMikmJihRLmJvbGQ9MSkseS5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6US52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6US52YWxpZ249InN1YiJ9dmFyIHZlPXkucmVhZF9zaGlmdCgxKTswIT12ZSYmKFEudW5kZXJsaW5lPXZlKTt2YXIgU2U9eS5y'@;
put 'ZWFkX3NoaWZ0KDEpO1NlPjAmJihRLmZhbWlseT1TZSk7dmFyIEhlPXkucmVhZF9zaGlmdCgxKTtIZT4wJiYoUS5jaGFyc2V0PUhlKSx5LmwrPTF9cmV0dXJuIFEubmFtZT1GZCh5LDAsSSksUX19LDUxOntuOiJQcmludFNpemUiLGY6aGx9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5k'@;
put 'b3cxIixmOmZ1bmN0aW9uIFBvKHkpe3JldHVybntQb3M6W3kucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoMildLERpbTpbeS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCgyKV0sRmxhZ3M6eS5yZWFkX3NoaWZ0KDIpLEN1clRhYjp5LnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6eS5yZWFk'@;
put 'X3NoaWZ0KDIpLFNlbGVjdGVkOnkucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzp5LnJlYWRfc2hpZnQoMil9fX0sNjQ6e246IkJhY2t1cCIsZjpTb30sNjU6e246IlBhbmUiLGY6ZnVuY3Rpb24galQoeSxQLEkpe2lmKEkmJkkuYmlmZjw1KXJldHVybnt9O3ZhciBRPXt9O3JldHVybiBRLng9eS5y'@;
put 'ZWFkX3NoaWZ0KDIpLFEueT15LnJlYWRfc2hpZnQoMiksUS5yd1RvcD15LnJlYWRfc2hpZnQoMiksUS5jb2xMZWZ0PXkucmVhZF9zaGlmdCgyKSxRLnBubkFjY3Q9eS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKSxRfX0sNjY6e246IkNvZGVQYWdlIixmOmhsfSw3Nzp7bjoiUGxzIixm'@;
put 'OnljfSw4MDp7bjoiRENvbiJ9LDgxOntuOiJEQ29uUmVmIn0sODI6e246IkRDb25OYW1lIn0sODU6e246IkRlZkNvbFdpZHRoIixmOmhsfSw4OTp7bjoiWENUIn0sOTA6e246IkNSTiJ9LDkxOntuOiJGaWxlU2hhcmluZyJ9LDkyOntuOiJXcml0ZUFjY2VzcyIsZjpmdW5jdGlvbiB5bSh5LFAs'@;
put 'SSl7aWYoSS5lbmMpcmV0dXJuIHkubCs9UCwiIjt2YXIgUT15LmwscmU9VjIoeSwwLEkpO3JldHVybiB5LnJlYWRfc2hpZnQoUCtRLXkubCkscmV9fSw5Mzp7bjoiT2JqIixmOmZ1bmN0aW9uIFd3KHksUCxJKXtpZihJJiZJLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gWFQoeSxQLEkpe3kubCs9'@;
put 'NDt2YXIgUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPXkucmVhZF9zaGlmdCgyKTt5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTY7dmFyIF9lPVtdO3JldHVybiBfZS5wdXNoKChNbVtRXXx8'@;
put 'eWMpKHksUC09MzYsSSkpLHtjbW86W3JlLFEsZ2VdLGZ0Ol9lfX0oeSxQLEkpO3ZhciBRPVQ0KHkpLHJlPWZ1bmN0aW9uIFowKHksUCxJKXtmb3IodmFyIFE9eS5sK1AscmU9W107eS5sPFE7KXt2YXIgZ2U9eS5yZWFkX3NoaWZ0KDIpO3kubC09Mjt0cnl7cmVbZ2VdPWJtW2dlXSh5LFEteS5s'@;
put 'KX1jYXRjaHtyZXR1cm4geS5sPVEscmV9fXJldHVybiB5LmwhPVEmJih5Lmw9USkscmV9KHksUC0yMik7cmV0dXJue2NtbzpRLGZ0OnJlfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjpTb30sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7'@;
put 'bjoiT2JqUHJvdGVjdCIsZjpTb30sMTI1OntuOiJDb2xJbmZvIixmOlZkfSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gdVooeSl7eS5sKz00O3ZhciBQPVt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDIpXTtpZigwIT09UFswXSYmUFswXS0tLDAhPT1QWzFdJiZQWzFdLS0sUFswXT43'@;
put 'fHxQWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitQLmpvaW4oInwiKSk7cmV0dXJuIFB9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBfYSh5LFAsSSl7dmFyIFE9SSYmOD09SS5iaWZmfHwyPT1QP3kucmVhZF9zaGlmdCgyKTooeS5sKz1QLDApO3JldHVybntmRGlh'@;
put 'bG9nOjE2JlEsZkJlbG93OjY0JlEsZlJpZ2h0OjEyOCZRfX19LDEzMDp7bjoiR3JpZFNldCIsZjpobH0sMTMxOntuOiJIQ2VudGVyIixmOlNvfSwxMzI6e246IlZDZW50ZXIiLGY6U299LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gTDQoeSxQLEkpe3ZhciBRPXkucmVhZF9zaGlm'@;
put 'dCg0KSxyZT0zJnkucmVhZF9zaGlmdCgxKSxnZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKGdlKXtjYXNlIDA6Z2U9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOmdlPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6Z2U9IkNoYXJ0c2hlZXQiO2JyZWFrO2Nhc2UgNjpnZT0iVkJBTW9kdWxlIn12'@;
put 'YXIgX2U9RmQoeSwwLEkpO3JldHVybiAwPT09X2UubGVuZ3RoJiYoX2U9IlNoZWV0MSIpLHtwb3M6USxoczpyZSxkdDpnZSxuYW1lOl9lfX19LDEzNDp7bjoiV3JpdGVQcm90ZWN0In0sMTQwOntuOiJDb3VudHJ5IixmOmZ1bmN0aW9uIGVEKHkpe3ZhciBJLFA9WzAsMF07cmV0dXJuIEk9eS5y'@;
put 'ZWFkX3NoaWZ0KDIpLFBbMF09bG1bSV18fEksST15LnJlYWRfc2hpZnQoMiksUFsxXT1sbVtJXXx8SSxQfX0sMTQxOntuOiJIaWRlT2JqIixmOmhsfSwxNDQ6e246IlNvcnQifSwxNDY6e246IlBhbGV0dGUiLGY6ZnVuY3Rpb24gR3coeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxJPVtd'@;
put 'O1AtLSA+MDspSS5wdXNoKGg5KHkpKTtyZXR1cm4gSX19LDE1MTp7bjoiU3luYyJ9LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3JvdXBOYW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91cENvdW50IixmOmhsfSwxNTc6e246'@;
put 'IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntuOiJTY2wiLGY6S3d9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gRW0oeSxQKXt2YXIgST17fTtyZXR1cm4gUDwzMnx8KHkubCs9MTYsSS5oZWFkZXI9bWEoeSksSS5mb290ZXI9bWEoeSkseS5sKz0yKSxJfX0s'@;
put 'MTc0OntuOiJTY2VuTWFuIn0sMTc1OntuOiJTQ0VOQVJJTyJ9LDE3Njp7bjoiU3hWaWV3In0sMTc3OntuOiJTeHZkIn0sMTc4OntuOiJTWFZJIn0sMTgwOntuOiJTeEl2ZCJ9LDE4MTp7bjoiU1hMSSJ9LDE4Mjp7bjoiU1hQSSJ9LDE4NDp7bjoiRG9jUm91dGUifSwxODU6e246IlJlY2lwTmFt'@;
put 'ZSJ9LDE4OTp7bjoiTXVsUmsiLGY6ZnVuY3Rpb24gRncoeSxQKXtmb3IodmFyIEk9eS5sK1AtMixRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMiksZ2U9W107eS5sPEk7KWdlLnB1c2goZzkoeSkpO2lmKHkubCE9PUkpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9y'@;
put 'Iik7dmFyIF9lPXkucmVhZF9zaGlmdCgyKTtpZihnZS5sZW5ndGghPV9lLXJlKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpRLGM6cmUsQzpfZSxya3JlYzpnZX19fSwxOTA6e246Ik11bEJsYW5rIixmOmZ1bmN0aW9uIEk0KHksUCl7Zm9yKHZh'@;
put 'ciBJPXkubCtQLTIsUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPVtdO3kubDxJOylnZS5wdXNoKHkucmVhZF9zaGlmdCgyKSk7aWYoeS5sIT09SSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO2lmKGdl'@;
put 'Lmxlbmd0aCE9X2UtcmUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOlEsYzpyZSxDOl9lLGl4ZmU6Z2V9fX0sMTkzOntuOiJNbXMiLGY6UGR9LDE5Nzp7bjoiU1hESSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoiU1hGREIifSwyMDA6e246'@;
put 'IlNYREJCIn0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOlNvfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJpbmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJTeE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6e246IlNYVEJSR0lJVE0i'@;
put 'fSwyMTA6e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tCb29sIixmOmhsfSwyMjA6e246IkRiT3JQYXJhbVFyeSJ9LDIyMTp7bjoi'@;
put 'U2NlbmFyaW9Qcm90ZWN0IixmOlNvfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIGI5KHksUCxJKXt2YXIgUT17fTtyZXR1cm4gUS5pZm50PXkucmVhZF9zaGlmdCgyKSxRLm51bUZtdElkPXkucmVhZF9zaGlmdCgyKSxRLmZsYWdzPXkucmVhZF9zaGlm'@;
put 'dCgyKSxRLmZTdHlsZT1RLmZsYWdzPj4yJjEsUS5kYXRhPWZ1bmN0aW9uIE4xKHksUCxJLFEpe3ZhciByZT17fSxnZT15LnJlYWRfc2hpZnQoNCksX2U9eS5yZWFkX3NoaWZ0KDQpLHZlPXkucmVhZF9zaGlmdCg0KSxTZT15LnJlYWRfc2hpZnQoMik7aWYocmUucGF0dGVyblR5cGU9dmlbdmU+'@;
put 'PjI2XSwhUS5jZWxsU3R5bGVzKXJldHVybiByZTt2YXIgSGU9NyZnZTtzd2l0Y2goSGUpe2Nhc2UgMTpyZS5oYWxpZ249ImxlZnQiO2JyZWFrO2Nhc2UgMjpyZS5oYWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOnJlLmhhbGlnbj0icmlnaHQifXN3aXRjaChyZS5mV3JhcD1nZT4+MyYxLEhl'@;
put 'PWdlPj40Jjcpe2Nhc2UgMDpyZS52YWxpZ249InRvcCI7YnJlYWs7Y2FzZSAxOnJlLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6cmUudmFsaWduPSJib3R0b20ifXJldHVybiByZS5mSnVzdExhc3Q9Z2U+PjcmMSxyZS50cm90PWdlPj44JjI1NSxyZS5jSW5kZW50PWdlPj4xNiYxNSxy'@;
put 'ZS5mU2hyaW5rVG9GaXQ9Z2U+PjIwJjEscmUuaVJlYWRPcmRlcj1nZT4+MjImMixyZS5mQXRyTnVtPWdlPj4yNiYxLHJlLmZBdHJGbnQ9Z2U+PjI3JjEscmUuZkF0ckFsYz1nZT4+MjgmMSxyZS5mQXRyQmRyPWdlPj4yOSYxLHJlLmZBdHJQYXQ9Z2U+PjMwJjEscmUuZkF0clByb3Q9Z2U+PjMx'@;
put 'JjEscmUuZGdMZWZ0PTE1Jl9lLHJlLmRnUmlnaHQ9X2U+PjQmMTUscmUuZGdUb3A9X2U+PjgmMTUscmUuZGdCb3R0b209X2U+PjEyJjE1LHJlLmljdkxlZnQ9X2U+PjE2JjEyNyxyZS5pY3ZSaWdodD1fZT4+MjMmMTI3LHJlLmdyYml0RGlhZz1fZT4+MzAmMyxyZS5pY3ZUb3A9MTI3JnZlLHJl'@;
put 'LmljdkJvdHRvbT12ZT4+NyYxMjcscmUuaWN2RGlhZz12ZT4+MTQmMTI3LHJlLmRnRGlhZz12ZT4+MjEmMTUscmUuaWN2Rm9yZT0xMjcmU2UscmUuaWN2QmFjaz1TZT4+NyYxMjcscmUuZnN4QnV0dG9uPVNlPj4xNCYxLHJlfSh5LDAsMCxJKSxRfX0sMjI1OntuOiJJbnRlcmZhY2VIZHIiLGY6'@;
put 'ZnVuY3Rpb24gaDAoeSxQKXtyZXR1cm4gMD09PVB8fHkucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6UGR9LDIyNzp7bjoiU1hWUyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBadyh5LFApe2Zvcih2YXIgST1bXSxRPXkucmVhZF9zaGlmdCgy'@;
put 'KTtRLS07KUkucHVzaChLaCh5KSk7cmV0dXJuIEl9fSwyMzM6e246IkJrSGltIn0sMjM1OntuOiJNc29EcmF3aW5nR3JvdXAifSwyMzY6e246Ik1zb0RyYXdpbmcifSwyMzc6e246Ik1zb0RyYXdpbmdTZWxlY3Rpb24ifSwyMzk6e246IlBob25ldGljSW5mbyJ9LDI0MDp7bjoiU3hSdWxlIn0s'@;
put 'MjQxOntuOiJTWEV4In0sMjQyOntuOiJTeEZpbHQifSwyNDQ6e246IlN4RFhGIn0sMjQ1OntuOiJTeEl0bSJ9LDI0Njp7bjoiU3hOYW1lIn0sMjQ3OntuOiJTeFNlbGVjdCJ9LDI0ODp7bjoiU1hQYWlyIn0sMjQ5OntuOiJTeEZtbGEifSwyNTE6e246IlN4Rm9ybWF0In0sMjUyOntuOiJTU1Qi'@;
put 'LGY6ZnVuY3Rpb24gTmwoeSxQKXtmb3IodmFyIEk9eS5sK1AsUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDQpLGdlPVtdLF9lPTA7X2UhPXJlJiZ5Lmw8STsrK19lKWdlLnB1c2goZ20oeSkpO3JldHVybiBnZS5Db3VudD1RLGdlLlVuaXF1ZT1yZSxnZX19LDI1Mzp7bjoiTGFi'@;
put 'ZWxTc3QiLGY6ZnVuY3Rpb24gVVQoeSl7dmFyIFA9SXUoeSk7cmV0dXJuIFAuaXNzdD15LnJlYWRfc2hpZnQoNCksUH19LDI1NTp7bjoiRXh0U1NUIixmOmZ1bmN0aW9uIGtlKHksUCl7dmFyIEk9e307cmV0dXJuIEkuZHNzdD15LnJlYWRfc2hpZnQoMikseS5sKz1QLTIsSX19LDI1Njp7bjoi'@;
put 'U1hWREV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOkgxfSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQi'@;
put 'fSwzMjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0Rl'@;
put 'bEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwzNTI6e246IlVzZXNFTEZzIixmOlNvfSwzNTM6e246IkRTRiIsZjpQZH0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7'@;
put 'bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQwODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdF'@;
put 'bmQifSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gcVQoeSxQLEkpe3ZhciBRPXkubCtQLHJlPXkucmVhZF9zaGlmdCgyKSxnZT15LnJlYWRfc2hpZnQoMik7aWYoSS5zYmNjaD1nZSwxMDI1PT1nZXx8MTQ4NDk9PWdlKXJl'@;
put 'dHVybltnZSxyZV07aWYoZ2U8MXx8Z2U+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIrZ2UpO2Zvcih2YXIgX2U9SGQoeSxnZSksdmU9W107UT55Lmw7KXZlLnB1c2goTjIoeSkpO3JldHVybltnZSxyZSxfZSx2ZV19fSw0MzE6e246IlByb3Q0UmV2Iixm'@;
put 'OlNvfSw0MzI6e246IkNvbmRGbXQifSw0MzM6e246IkNGIn0sNDM0OntuOiJEVmFsIn0sNDM3OntuOiJEQ29uQmluIn0sNDM4OntuOiJUeE8iLGY6ZnVuY3Rpb24gSlQoeSxQLEkpe3ZhciBRPXkubCxyZT0iIixnZT0tMTt0cnl7eS5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2Yo'@;
put 'KEkubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sxXSk/eS5sKz02OmZ1bmN0aW9uIER1KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTt5LmwrKzt2YXIgST15LnJlYWRfc2hpZnQoMik7eS5sKz0yfSh5KTt2YXIgU2U9eS5yZWFkX3NoaWZ0KDIpO3kucmVhZF9zaGlmdCgyKSxnZT15LnJlYWRf'@;
put 'c2hpZnQoMik7dmFyIEJlPXkucmVhZF9zaGlmdCgyKTt5LmwrPUJlO2Zvcih2YXIgR2U9MTtHZTx5LmxlbnMubGVuZ3RoLTE7KytHZSl7aWYoeS5sLVEhPXkubGVuc1tHZV0pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbnQ9eVt5LmxdO2lmKChyZSs9'@;
put 'SGQoeSx5LmxlbnNbR2UrMV0teS5sZW5zW0dlXS0xKSkubGVuZ3RoPj0obnQ/U2U6MipTZSkpYnJlYWt9aWYocmUubGVuZ3RoIT09U2UmJnJlLmxlbmd0aCE9PTIqU2UpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK1NlKyIgIT0gIityZS5sZW5ndGgpO3JldHVybiB5Lmw9UStQLHt0OnJl'@;
put 'LGlmbnQ6Z2V9fWNhdGNoe3JldHVybiB5Lmw9UStQLHt0OnJlLGlmbnQ6Z2V9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjpTb30sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBldSh5LFApe3ZhciBJPUtoKHkpO3kubCs9MTY7dmFyIFE9ZnVuY3Rpb24gTHUoeSxQKXt2YXIgST15LmwrUCxR'@;
put 'PXkucmVhZF9zaGlmdCg0KTtpZigyIT09USl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK1EpO3ZhciByZT15LnJlYWRfc2hpZnQoMik7eS5sKz0yO3ZhciBnZSxfZSx2ZSxTZSxCZSxHZSxIZT0iIjsxNiZyZSYmKGdlPUE0KHkpKSwxMjgmcmUmJihfZT1B'@;
put 'NCh5KSksMjU3PT0oMjU3JnJlKSYmKHZlPUE0KHkpKSwxPT0oMjU3JnJlKSYmKFNlPWZ1bmN0aW9uIHYzKHksUCl7dmFyIEk9eS5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2goSSl7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJuIGZ1bmN0aW9uIG0zKHkpe3ZhciBQ'@;
put 'PXkucmVhZF9zaGlmdCg0KSxJPXkubCxRPSExO1A+MjQmJih5LmwrPVAtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PXkucmVhZF9zaGlmdCgxNikmJihRPSEwKSx5Lmw9SSk7dmFyIHJlPXkucmVhZF9zaGlmdCgoUT9QLTI0OlApPj4xLCJ1dGYxNmxlIikucmVwbGFj'@;
put 'ZSh2LCIiKTtyZXR1cm4gUSYmKHkubCs9MjQpLHJlfSh5KTtjYXNlIjAzMDMwMDAwMDAwMDAwMDBjMDAwMDAwMDAwMDAwMDQ2IjpyZXR1cm4gZnVuY3Rpb24gZmwoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxJPSIiO1AtLSA+MDspSSs9Ii4uLyI7dmFyIFE9eS5yZWFkX3NoaWZ0KDAs'@;
put 'Imxwc3RyLWFuc2kiKTtpZih5LmwrPTIsNTcwMDUhPXkucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO2lmKDA9PT15LnJlYWRfc2hpZnQoNCkpcmV0dXJuIEkrUS5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIGdlPXkucmVhZF9zaGlmdCg0KTtpZigzIT15'@;
put 'LnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtyZXR1cm4gSSt5LnJlYWRfc2hpZnQoZ2U+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKHYsIiIpfSh5KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTW9uaWtlciAiK0kpfX0oeSkpLDgm'@;
put 'cmUmJihIZT1BNCh5KSksMzImcmUmJihCZT15LnJlYWRfc2hpZnQoMTYpKSw2NCZyZSYmKEdlPVNjKHkpKSx5Lmw9STt2YXIgbnQ9X2V8fHZlfHxTZXx8IiI7bnQmJkhlJiYobnQrPSIjIitIZSksbnR8fChudD0iIyIrSGUpLDImcmUmJiIvIj09bnQuY2hhckF0KDApJiYiLyIhPW50LmNoYXJB'@;
put 'dCgxKSYmKG50PSJmaWxlOi8vIitudCk7dmFyIGR0PXtUYXJnZXQ6bnR9O3JldHVybiBCZSYmKGR0Lmd1aWQ9QmUpLEdlJiYoZHQudGltZT1HZSksZ2UmJihkdC5Ub29sdGlwPWdlKSxkdH0oeSxQLTI0KTtyZXR1cm5bSSxRXX19LDQ0MTp7bjoiTGVsIn0sNDQyOntuOiJDb2RlTmFtZSIsZjpO'@;
put 'Mn0sNDQzOntuOiJTWEZEQlR5cGUifSw0NDQ6e246IlByb3Q0UmV2UGFzcyIsZjpobH0sNDQ1OntuOiJPYk5vTWFjcm9zIn0sNDQ2OntuOiJEdiJ9LDQ0ODp7bjoiRXhjZWw5RmlsZSIsZjpQZH0sNDQ5OntuOiJSZWNhbGNJZCIsZjpmdW5jdGlvbiBmMCh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0'@;
put 'KDIpLHkucmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e246IkVudEV4VTIiLGY6UGR9LDUxMjp7bjoiRGltZW5zaW9ucyIsZjpCdH0sNTEzOntuOiJCbGFuayIsZjpxd30sNTE1OntuOiJOdW1iZXIiLGY6ZnVuY3Rpb24gTncoeSxQLEkpe0kuYmlmZmd1ZXNzJiYyPT1JLmJpZmYmJihJLmJpZmY9'@;
put 'NSk7dmFyIFE9SXUoeSkscmU9bWEoeSk7cmV0dXJuIFEudmFsPXJlLFF9fSw1MTY6e246IkxhYmVsIixmOmZ1bmN0aW9uIFlUKHksUCxJKXtJLmJpZmZndWVzcyYmMj09SS5iaWZmJiYoSS5iaWZmPTUpO3ZhciByZT1JdSh5KTsyPT1JLmJpZmYmJnkubCsrO3ZhciBnZT1OMih5LDAsSSk7cmV0'@;
put 'dXJuIHJlLnZhbD1nZSxyZX19LDUxNzp7bjoiQm9vbEVyciIsZjpWY30sNTE5OntuOiJTdHJpbmciLGY6aUR9LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uICRlKHkpe3ZhciBQPXt9O1Aucj15LnJlYWRfc2hpZnQoMiksUC5jPXkucmVhZF9zaGlmdCgyKSxQLmNudD15LnJlYWRfc2hpZnQoMikt'@;
put 'UC5jO3ZhciBJPXkucmVhZF9zaGlmdCgyKTt5LmwrPTQ7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpO3kubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBQLml4ZmU9NDA5NSZyZSw3JlEmJihQLmxldmVsPTcmUSksMzImUSYmKFAuaGlkZGVuPSEwKSw2NCZRJiYoUC5ocHQ9SS8yMCks'@;
put 'UH19LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOmp3fSw1NDk6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6VzB9LDU2Njp7bjoiVGFibGUifSw1NzQ6e246IldpbmRvdzIiLGY6ZnVuY3Rpb24gY1ooeSxQLEkpe2lmKEkmJkkuYmlmZj49MiYmSS5iaWZmPDUpcmV0dXJue307dmFy'@;
put 'IFE9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntSVEw6NjQmUSxncmlkOiEhKDImUSksZnJvemVuOiEhKDgmUSl9fX0sNjM4OntuOiJSSyIsZjpmdW5jdGlvbiBNYyh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksST15LnJlYWRfc2hpZnQoMiksUT1nOSh5KTtyZXR1cm57cjpQLGM6SSxpeGZlOlFb'@;
put 'MF0scmtudW06UVsxXX19fSw2NTk6e246IlN0eWxlIixmOmZ1bmN0aW9uICRUKHksUCxJKXtyZXR1cm4geS5sKz1QLHt9fX0sMTA0ODp7bjoiQmlnTmFtZSJ9LDEwNTQ6e246IkZvcm1hdCIsZjpmdW5jdGlvbiBHVCh5LFAsSSl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSxWMih5LDAsSSldfX0s'@;
put 'MTA4NDp7bjoiQ29udGludWVCaWdOYW1lIn0sMTIxMjp7bjoiU2hyRm1sYSIsZjpmdW5jdGlvbiBDOSh5LFAsSSl7dmFyIFE9X20oeSk7eS5sKys7dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm5baTUoeSxQLT04LEkpLHJlLFFdfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0'@;
put 'aW9uIFFhKHksUCl7eS5yZWFkX3NoaWZ0KDIpO3ZhciBJPUtoKHkpLFE9eS5yZWFkX3NoaWZ0KChQLTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bSSxRPVEucmVwbGFjZSh2LCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQi'@;
put 'fSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0sMjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOlJ1fSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3'@;
put 'RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3Jh'@;
put 'cHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RD'@;
put 'aGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOlBkfSwyMTUyOntu'@;
put 'OiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGlu'@;
put 'dWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVhdHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiB4bSh5KXt5LmwrPTI7dmFyIFA9'@;
put 'e2N4ZnM6MCxjcmM6MH07cmV0dXJuIFAuY3hmcz15LnJlYWRfc2hpZnQoMiksUC5jcmM9eS5yZWFkX3NoaWZ0KDQpLFB9LHI6MTJ9LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIHpEKHksUCl7eS5sKz0yO3ZhciBRPXkucmVhZF9zaGlmdCgyKTt5LmwrPTI7Zm9yKHZhciByZT15LnJlYWRf'@;
put 'c2hpZnQoMiksZ2U9W107cmUtLSA+MDspZ2UucHVzaChqRCh5KSk7cmV0dXJue2l4ZmU6USxleHQ6Z2V9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1E'@;
put 'WFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBhdDEyIixmOlNvLHI6MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEy'@;
put 'fSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5jdGlvbiBCdyh5LFAsSSl7aWYoIShJLmJpZmY8OCkpe3ZhciBRPXkucmVhZF9z'@;
put 'aGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuW0hkKHksUSxJKSxIZCh5LHJlLEkpXX15LmwrPVB9LHI6MTJ9LDIxOTc6e246IlNvcnREYXRhIn0sMjE5ODp7bjoiVGhlbWUiLGY6ZnVuY3Rpb24gJG0oeSxQLEkpe3ZhciBRPXkubCtQO2lmKDEyNDIyNiE9PXkucmVhZF9zaGlmdCg0'@;
put 'KSl7aWYoIUkuY2VsbFN0eWxlcylyZXR1cm4gdm9pZCh5Lmw9USk7dmFyIF9lLGdlPXkuc2xpY2UoeS5sKTt5Lmw9UTt0cnl7X2U9eG4oZ2Use3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgdmU9UXQoX2UsInRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZih2ZSlyZXR1cm4g'@;
put 'R20odmUsSSl9fSxyOjEyfSwyMTk5OntuOiJHVUlEVHlwZUxpYiJ9LDIyMDA6e246IkZuR3JwMTIifSwyMjAxOntuOiJOYW1lRm5HcnAxMiJ9LDIyMDI6e246Ik1UUlNldHRpbmdzIixmOmZ1bmN0aW9uIHp3KHkpe3JldHVyblswIT09eS5yZWFkX3NoaWZ0KDQpLDAhPT15LnJlYWRfc2hpZnQo'@;
put 'NCkseS5yZWFkX3NoaWZ0KDQpXX0scjoxMn0sMjIwMzp7bjoiQ29tcHJlc3NQaWN0dXJlcyIsZjpQZH0sMjIwNDp7bjoiSGVhZGVyRm9vdGVyIn0sMjIwNTp7bjoiQ3J0TGF5b3V0MTIifSwyMjA2OntuOiJDcnRNbEZydCJ9LDIyMDc6e246IkNydE1sRnJ0Q29udGludWUifSwyMjExOntuOiJG'@;
put 'b3JjZUZ1bGxDYWxjdWxhdGlvbiIsZjpmdW5jdGlvbiBJdCh5KXt2YXIgUD1mdW5jdGlvbiBmOSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksST15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9OCx7dHlwZTpQLGZsYWdzOkl9fSh5KTtpZigyMjExIT1QLnR5cGUpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgIitQLnR5cGUpO3JldHVybiAwIT09eS5yZWFkX3NoaWZ0KDQpfX0sMjIxMjp7bjoiU2hhcGVQcm9wc1N0cmVhbSJ9LDIyMTM6e246IlRleHRQcm9wc1N0cmVhbSJ9LDIyMTQ6e246IlJpY2hUZXh0U3RyZWFtIn0sMjIxNTp7bjoiQ3J0TGF5b3V0MTJB'@;
put 'In0sNDA5Nzp7bjoiVW5pdHMifSw0MDk4OntuOiJDaGFydCJ9LDQwOTk6e246IlNlcmllcyJ9LDQxMDI6e246IkRhdGFGb3JtYXQifSw0MTAzOntuOiJMaW5lRm9ybWF0In0sNDEwNTp7bjoiTWFya2VyRm9ybWF0In0sNDEwNjp7bjoiQXJlYUZvcm1hdCJ9LDQxMDc6e246IlBpZUZvcm1hdCJ9'@;
put 'LDQxMDg6e246IkF0dGFjaGVkTGFiZWwifSw0MTA5OntuOiJTZXJpZXNUZXh0In0sNDExNjp7bjoiQ2hhcnRGb3JtYXQifSw0MTE3OntuOiJMZWdlbmQifSw0MTE4OntuOiJTZXJpZXNMaXN0In0sNDExOTp7bjoiQmFyIn0sNDEyMDp7bjoiTGluZSJ9LDQxMjE6e246IlBpZSJ9LDQxMjI6e246'@;
put 'IkFyZWEifSw0MTIzOntuOiJTY2F0dGVyIn0sNDEyNDp7bjoiQ3J0TGluZSJ9LDQxMjU6e246IkF4aXMifSw0MTI2OntuOiJUaWNrIn0sNDEyNzp7bjoiVmFsdWVSYW5nZSJ9LDQxMjg6e246IkNhdFNlclJhbmdlIn0sNDEyOTp7bjoiQXhpc0xpbmUifSw0MTMwOntuOiJDcnRMaW5rIn0sNDEz'@;
put 'Mjp7bjoiRGVmYXVsdFRleHQifSw0MTMzOntuOiJUZXh0In0sNDEzNDp7bjoiRm9udFgiLGY6aGx9LDQxMzU6e246Ik9iamVjdExpbmsifSw0MTQ2OntuOiJGcmFtZSJ9LDQxNDc6e246IkJlZ2luIn0sNDE0ODp7bjoiRW5kIn0sNDE0OTp7bjoiUGxvdEFyZWEifSw0MTU0OntuOiJDaGFydDNk'@;
put 'In0sNDE1Njp7bjoiUGljRiJ9LDQxNTc6e246IkRyb3BCYXIifSw0MTU4OntuOiJSYWRhciJ9LDQxNTk6e246IlN1cmYifSw0MTYwOntuOiJSYWRhckFyZWEifSw0MTYxOntuOiJBeGlzUGFyZW50In0sNDE2Mzp7bjoiTGVnZW5kRXhjZXB0aW9uIn0sNDE2NDp7bjoiU2h0UHJvcHMiLGY6ZnVu'@;
put 'Y3Rpb24gQW0oeSxQLEkpe3ZhciBRPXthcmVhOiExfTtpZig1IT1JLmJpZmYpcmV0dXJuIHkubCs9UCxRO3ZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkubCs9MywxNiZyZSYmKFEuYXJlYT0hMCksUX19LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4'@;
put 'OntuOiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBhcmVudCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3NDp7bjoiSUZtdFJlY29yZCJ9LDQxNzU6e246IlBvcyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJD'@;
put 'bHJ0Q2xpZW50IixmOmZ1bmN0aW9uIG5EKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoMiksST1bXTtQLS0gPjA7KUkucHVzaChoOSh5KSk7cmV0dXJuIEl9fSw0MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQ'@;
put 'b3AifSw0MTk0OntuOiJBeGNFeHQifSw0MTk1OntuOiJEYXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5Nzp7bjoiU0lJbmRleCJ9LDQxOTg6e246IkdlbEZyYW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6QnR9LDE6'@;
put 'e246IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklOVCIsZjpmdW5jdGlvbiBzRCh5KXt2YXIgUD1JdSh5KTsrK3kubDt2YXIgST15LnJlYWRfc2hpZnQoMik7cmV0dXJuIFAudD0ibiIsUC52YWw9SSxQfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24geDkoeSl7dmFyIFA9SXUoeSk7Kyt5'@;
put 'Lmw7dmFyIEk9bWEoeSk7cmV0dXJuIFAudD0ibiIsUC52YWw9SSxQfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVuY3Rpb24gZFooeSxQLEkpe0kuYmlmZmd1ZXNzJiY1PT1JLmJpZmYmJihJLmJpZmY9Mik7dmFyIFE9SXUoeSk7Kyt5Lmw7dmFyIHJlPVYyKHksMCxJKTtyZXR1cm4gUS50PSJzdHIi'@;
put 'LFEudmFsPXJlLFF9fSw1OntuOiJCb29sRXJyIixmOlZjfSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gZlooeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09UD8oeS5sKyssIiIpOnkucmVhZF9zaGlmdChQLCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoi'@;
put 'Qk9GIixmOlJ1fSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6aGx9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjpUc30sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntuOiJBcnJheSIsZjpqd30sMzY6e246IkNPTFdJRFRIIn0sMzc6e246'@;
put 'IkRlZmF1bHRSb3dIZWlnaHQiLGY6VzB9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIHBaKHksUCl7eS5sKz02LHkubCs9Mix5LmwrPTEseS5sKz0zLHkubCs9MSx5LmwrPVAtMTN9fSw2Mjp7bjoiQklGRjJXSU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklG'@;
put 'RjJYRiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6aGx9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gb0QoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEk9eS5yZWFkX3NoaWZ0KDIpLFE9'@;
put 'eS5yZWFkX3NoaWZ0KDQpLHJlPXtmbXQ6UCxlbnY6SSxsZW46USxkYXRhOnkuc2xpY2UoeS5sLHkubCtRKX07cmV0dXJuIHkubCs9USxyZX19LDEzNTp7bjoiQWRkaW4ifSwxMzY6e246IkVkZyJ9LDEzNzp7bjoiUHViIn0sMTQ1OntuOiJTdWIifSwxNDg6e246IkxIUmVjb3JkIn0sMTQ5Ontu'@;
put 'OiJMSE5HcmFwaCJ9LDE1MDp7bjoiU291bmQifSwxNjk6e246IkNvb3JkTGlzdCJ9LDE3MTp7bjoiR0NXIn0sMTg4OntuOiJTaHJGbWxhIn0sMTkxOntuOiJUb29sYmFySGRyIn0sMTkyOntuOiJUb29sYmFyRW5kIn0sMTk0OntuOiJBZGRNZW51In0sMTk1OntuOiJEZWxNZW51In0sMjE0Ontu'@;
put 'OiJSU3RyaW5nIixmOmZ1bmN0aW9uIFh3KHksUCxJKXt2YXIgUT15LmwrUCxyZT1JdSh5KSxnZT15LnJlYWRfc2hpZnQoMiksX2U9SGQoeSxnZSxJKTtyZXR1cm4geS5sPVEscmUudD0ic3RyIixyZS52YWw9X2UscmV9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0'@;
put 'OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjp6M30sNTIxOntuOiJCT0YiLGY6UnV9LDUzNjp7bjoiTGJsIixmOlZ3fSw1NDc6e246IkV4dGVybk5hbWUiLGY6eTl9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6'@;
put 'e246IkZvcm11bGEiLGY6ejN9LDEwMzM6e246IkJPRiIsZjpSdX0sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQy'@;
put 'OntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUx'@;
put 'OntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxTTT1QZShYMCwibiIpO2Z1bmN0aW9uIENpKHksUCxJLFEpe3ZhciByZT0rUHx8K1NNW1BdO2lmKCFpc05hTihyZSkpe3ZhciBnZT1RfHwoSXx8W10pLmxlbmd0aHx8MCxfZT15Lm5leHQoNCk7X2Uu'@;
put 'd3JpdGVfc2hpZnQoMixyZSksX2Uud3JpdGVfc2hpZnQoMixnZSksZ2U+MCYmTmgoSSkmJnkucHVzaChJKX19ZnVuY3Rpb24gSjAoeSxQLEkpe3JldHVybiB5fHwoeT1wcig3KSkseS53cml0ZV9zaGlmdCgyLFApLHkud3JpdGVfc2hpZnQoMixJKSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0'@;
put 'ZV9zaGlmdCgxLDApLHl9ZnVuY3Rpb24gcl8oeSxQLEksUSl7aWYobnVsbCE9UC52KXN3aXRjaChQLnQpe2Nhc2UiZCI6Y2FzZSJuIjp2YXIgcmU9ImQiPT1QLnQ/VWUoSHQoUC52KSk6UC52O3JldHVybiB2b2lkKHJlPT0oMHxyZSkmJnJlPj0wJiZyZTw2NTUzNj9DaSh5LDIsZnVuY3Rpb24g'@;
put 'YUQoeSxQLEkpe3ZhciBRPXByKDkpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCgyLEkpLFF9KEksUSxyZSkpOkNpKHksMyxmdW5jdGlvbiBoWih5LFAsSSl7dmFyIFE9cHIoMTUpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCg4LEksImYiKSxRfShJLFEscmUpKSk7Y2Fz'@;
put 'ZSJiIjpjYXNlImUiOnJldHVybiB2b2lkIENpKHksNSxmdW5jdGlvbiBuXyh5LFAsSSxRKXt2YXIgcmU9cHIoOSk7cmV0dXJuIEowKHJlLHksUCksZDkoSSxRfHwiYiIscmUpLHJlfShJLFEsUC52LFAudCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2b2lkIENpKHksNCxmdW5jdGlvbiBR'@;
put 'SSh5LFAsSSl7dmFyIFE9cHIoOCsyKkkubGVuZ3RoKTtyZXR1cm4gSjAoUSx5LFApLFEud3JpdGVfc2hpZnQoMSxJLmxlbmd0aCksUS53cml0ZV9zaGlmdChJLmxlbmd0aCxJLCJzYmNzIiksUS5sPFEubGVuZ3RoP1Euc2xpY2UoMCxRLmwpOlF9KEksUSwoUC52fHwiIikuc2xpY2UoMCwyNTUp'@;
put 'KSl9Q2koeSwxLEowKG51bGwsSSxRKSl9ZnVuY3Rpb24gclIoeSxQLEksUSxyZSl7dmFyIGdlPTE2K2d1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLFAscmUpO2lmKG51bGwhPVAudnx8UC5iZilpZihQLmJmKUNpKHksIkZvcm11bGEiLGZ1bmN0aW9uIEdaKHksUCxJLFEscmUpe3ZhciBn'@;
put 'ZT16MChQLEkscmUpLF9lPWZ1bmN0aW9uIHB2KHkpe2lmKG51bGw9PXkpe3ZhciBQPXByKDgpO3JldHVybiBQLndyaXRlX3NoaWZ0KDEsMyksUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCgyLDY1NTM1KSxQfXJl'@;
put 'dHVybiBGYygibnVtYmVyIj09dHlwZW9mIHk/eTowKX0oeS52KSx2ZT1wcig2KTt2ZS53cml0ZV9zaGlmdCgyLDMzKSx2ZS53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgSGU9cHIoeS5iZi5sZW5ndGgpLEJlPTA7QmU8eS5iZi5sZW5ndGg7KytCZSlIZVtCZV09eS5iZltCZV07cmV0dXJuIFMo'@;
put 'W2dlLF9lLHZlLEhlXSl9KFAsSSxRLDAsZ2UpKTtlbHNlIHN3aXRjaChQLnQpe2Nhc2UiZCI6Y2FzZSJuIjpDaSh5LCJOdW1iZXIiLGZ1bmN0aW9uIEMzKHksUCxJLFEpe3ZhciByZT1wcigxNCk7cmV0dXJuIHowKHksUCxRLHJlKSxGYyhJLHJlKSxyZX0oSSxRLCJkIj09UC50P1VlKEh0KFAu'@;
put 'dikpOlAudixnZSkpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJlIjpDaSh5LDUxNyxmdW5jdGlvbiBOZCh5LFAsSSxRLHJlLGdlKXt2YXIgX2U9cHIoOCk7cmV0dXJuIHowKHksUCxRLF9lKSxkOShJLGdlLF9lKSxfZX0oSSxRLFAudixnZSwwLFAudCkpO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOmlm'@;
put 'KHJlLmJvb2tTU1Qpe3ZhciB2ZT13dihyZS5TdHJpbmdzLFAudixQLlI/UC5yPUpoKFAuUik6bnVsbCxyZS5yZXZTdHJpbmdzKTtpZihQLlIpZm9yKHZhciBTZT0wO1NlPFAuUi5sZW5ndGg7KytTZSlQLlJbU2VdLnMmJmd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAs'@;
put 'czpQLlJbU2VdLnN9LHJlKTtDaSh5LCJMYWJlbFNzdCIsZnVuY3Rpb24gWlQoeSxQLEksUSl7dmFyIHJlPXByKDEwKTtyZXR1cm4gejAoeSxQLFEscmUpLHJlLndyaXRlX3NoaWZ0KDQsSSkscmV9KEksUSx2ZSxnZSkpfWVsc2UgQ2koeSwiTGFiZWwiLGZ1bmN0aW9uIFdUKHksUCxJLFEscmUp'@;
put 'e3ZhciBnZT0hcmV8fDg9PXJlLmJpZmYsX2U9cHIoK2dlKzgrKDErZ2UpKkkubGVuZ3RoKTtyZXR1cm4gejAoeSxQLFEsX2UpLF9lLndyaXRlX3NoaWZ0KDIsSS5sZW5ndGgpLGdlJiZfZS53cml0ZV9zaGlmdCgxLDEpLF9lLndyaXRlX3NoaWZ0KCgxK2dlKSpJLmxlbmd0aCxJLGdlPyJ1dGYx'@;
put 'NmxlIjoic2JjcyIpLF9lfShJLFEsKFAudnx8IiIpLnNsaWNlKDAsMjU1KSxnZSxyZSkpO2JyZWFrO2RlZmF1bHQ6Q2koeSwiQmxhbmsiLHowKEksUSxnZSkpfWVsc2UgQ2koeSwiQmxhbmsiLHowKEksUSxnZSkpfWZ1bmN0aW9uIGlSKHksUCxJKXt2YXIgQmUsUT13YygpLHJlPUkuU2hlZXRO'@;
put 'YW1lc1t5XSxnZT1JLlNoZWV0c1tyZV18fHt9LF9lPShJfHx7fSkuV29ya2Jvb2t8fHt9LHZlPShfZS5TaGVldHN8fFtdKVt5XXx8e30sU2U9QXJyYXkuaXNBcnJheShnZSksSGU9OD09UC5iaWZmLEdlPSIiLG50PVtdLGR0PU9pKGdlWyIhcmVmIl18fCJBMSIpLEN0PUhlPzY1NTM2OjE2Mzg0'@;
put 'O2lmKGR0LmUuYz4yNTV8fGR0LmUucj49Q3Qpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoZ2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7ZHQuZS5jPU1hdGgubWluKGR0LmUuYywyNTUpLGR0LmUucj1NYXRoLm1pbihkdC5l'@;
put 'LmMsQ3QtMSl9Q2koUSwyMDU3LEQ0KDAsMTYsUCkpLENpKFEsIkNhbGNNb2RlIixmdSgxKSksQ2koUSwiQ2FsY0NvdW50IixmdSgxMDApKSxDaShRLCJDYWxjUmVmTW9kZSIsRmwoITApKSxDaShRLCJDYWxjSXRlciIsRmwoITEpKSxDaShRLCJDYWxjRGVsdGEiLEZjKC4wMDEpKSxDaShRLCJD'@;
put 'YWxjU2F2ZVJlY2FsYyIsRmwoITApKSxDaShRLCJQcmludFJvd0NvbCIsRmwoITEpKSxDaShRLCJQcmludEdyaWQiLEZsKCExKSksQ2koUSwiR3JpZFNldCIsZnUoMSkpLENpKFEsIkd1dHMiLGZ1bmN0aW9uIEh3KHkpe3ZhciBQPXByKDgpO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMCksUC53'@;
put 'cml0ZV9zaGlmdCgyLHlbMF0/eVswXSsxOjApLFAud3JpdGVfc2hpZnQoMix5WzFdP3lbMV0rMTowKSxQfShbMCwwXSkpLENpKFEsIkhDZW50ZXIiLEZsKCExKSksQ2koUSwiVkNlbnRlciIsRmwoITEpKTt2YXIgY3Q9Z2VbIiFwcmludCJdJiZnZVsiIXByaW50Il0ubWFyZ2luc3x8Z2VbIiFt'@;
put 'YXJnaW5zIl07Y3QmJihudWxsIT1jdC5sZWZ0JiZDaShRLCJMZWZ0TWFyZ2luIixGYyhjdC5sZWZ0KSksbnVsbCE9Y3QucmlnaHQmJkNpKFEsIlJpZ2h0TWFyZ2luIixGYyhjdC5yaWdodCkpLG51bGwhPWN0LnRvcCYmQ2koUSwiVG9wTWFyZ2luIixGYyhjdC50b3ApKSxudWxsIT1jdC5ib3R0'@;
put 'b20mJkNpKFEsIkJvdHRvbU1hcmdpbiIsRmMoY3QuYm90dG9tKSksKG51bGwhPWN0LmhlYWRlcnx8bnVsbCE9Y3QuZm9vdGVyKSYmQ2koUSwiU2V0dXAiLGZ1bmN0aW9uIGttKHksUCl7dmFyIEk9cHIoMzQpLFE9ITEscmU9NzA7cmV0dXJuImxhbmRzY2FwZSI9PShQLnByb3BzfHx7fSkub3Jp'@;
put 'ZW50YXRpb24mJihRPSEwLHJlJj0tNjcpLFEmJihyZSY9LTUpLEkud3JpdGVfc2hpZnQoMiwxKSxJLndyaXRlX3NoaWZ0KDIsMTAwKSxJLndyaXRlX3NoaWZ0KDIsMCksSS53cml0ZV9zaGlmdCgyLDApLEkud3JpdGVfc2hpZnQoMiwwKSxJLndyaXRlX3NoaWZ0KDEscmUpLEkud3JpdGVfc2hp'@;
put 'ZnQoMSwwKSxJLndyaXRlX3NoaWZ0KDIsNjAwKSxJLndyaXRlX3NoaWZ0KDIsNjAwKSxGYyhudWxsPT15LmhlYWRlcj8uNTp5LmhlYWRlcixJKSxGYyhudWxsPT15LmZvb3Rlcj8uNTp5LmZvb3RlcixJKSxJLndyaXRlX3NoaWZ0KDIsMSksSX0oY3QsZ2VbIiFwcmludCJdfHx7fSkpKSxIZSYm'@;
put 'ZnVuY3Rpb24geE0oeSxQLEkpe2lmKFApe3ZhciBRPTA7UC5mb3JFYWNoKGZ1bmN0aW9uKHJlLGdlKXsrK1E8PTI1NiYmcmUmJihyZS5hdXRvJiZOaShJLHJlLGdlKSxDaSh5LCJDb2xJbmZvIixmdW5jdGlvbiByRCh5LFApe3ZhciBJPXByKDEyKTtJLndyaXRlX3NoaWZ0KDIsUCksSS53cml0'@;
put 'ZV9zaGlmdCgyLFApLEkud3JpdGVfc2hpZnQoMiwyNTYqeS53aWR0aCksSS53cml0ZV9zaGlmdCgyLDApO3ZhciBRPTA7cmV0dXJuIHkuaGlkZGVuJiYoUXw9MSksSS53cml0ZV9zaGlmdCgxLFEpLEkud3JpdGVfc2hpZnQoMSxRPXkubGV2ZWx8fDApLEkud3JpdGVfc2hpZnQoMiwwKSxJfShZ'@;
put 'ZChnZSxyZSksZ2UpKSl9KX19KFEsZ2VbIiFjb2xzIl0sZ2UpLENpKFEsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIGp0KHksUCl7dmFyIEk9OCE9UC5iaWZmJiZQLmJpZmY/Mjo0LFE9cHIoMipJKzYpO3JldHVybiBRLndyaXRlX3NoaWZ0KEkseS5zLnIpLFEud3JpdGVfc2hpZnQoSSx5LmUucisx'@;
put 'KSxRLndyaXRlX3NoaWZ0KDIseS5zLmMpLFEud3JpdGVfc2hpZnQoMix5LmUuYysxKSxRLndyaXRlX3NoaWZ0KDIsMCksUX0oZHQsUCkpLEhlJiYoZ2VbIiFsaW5rcyJdPVtdKSxnZVsiIXJvd3MiXSYmSGUmJmdlWyIhcm93cyJdLmZvckVhY2goZnVuY3Rpb24oWnQscG4pe2Zvcih2YXIgS249'@;
put 'SHMocG4pLHVuPTI1Nixxbj0wLHpuPVp0LnM/MTYrZ3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpadC5zfSxQKTowLGtuPWR0LnMuYztrbjw9ZHQuZS5jOysra24pKFNlPyhnZVtwbl18fFtdKVtrbl06Z2VbbnRba25dK0tuXSkmJihrbjx1biYmKHVuPWtuKSxrbj5x'@;
put 'biYmKHFuPWtuKSk7cW48dW4mJih1bj1xbj0wKSxDaShRLCJSb3ciLGZ1bmN0aW9uIG10KHksUCxJKXt2YXIgUT1wcigxNik7US53cml0ZV9zaGlmdCgyLFApLFEud3JpdGVfc2hpZnQoMixJWzBdKSxRLndyaXRlX3NoaWZ0KDIsSVsxXSsxKSxRLndyaXRlX3NoaWZ0KDIsMjAqeS5ocHR8fDIw'@;
put 'KmoyKHkuaHB4KXx8MzMwKSxRLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHJlPTA7cmV0dXJuIHJlfD0wfHkubGV2ZWwseS5oaWRkZW4mJihyZXw9MzIpLHJlfD02NCxJWzJdJiYocmV8PTEyOCksUS53cml0ZV9zaGlmdCgxLHJlKSxRLndyaXRlX3NoaWZ0KDEsMSksUS53cml0ZV9zaGlmdCgyLElb'@;
put 'Ml18fDApLFF9KFp0LHBuLFt1bixxbix6bl0pKX0pO2Zvcih2YXIgYnQ9ZHQucy5yO2J0PD1kdC5lLnI7KytidCl7R2U9SHMoYnQpO2Zvcih2YXIgRnQ9ZHQucy5jO0Z0PD1kdC5lLmM7KytGdCl7YnQ9PT1kdC5zLnImJihudFtGdF09TnMoRnQpKSxCZT1udFtGdF0rR2U7dmFyIGt0PVNlPyhn'@;
put 'ZVtidF18fFtdKVtGdF06Z2VbQmVdO2t0JiYoclIoUSxrdCxidCxGdCxQKSxIZSYma3QubCYmZ2VbIiFsaW5rcyJdLnB1c2goW0JlLGt0LmxdKSl9fXZhciBUdD12ZS5Db2RlTmFtZXx8dmUubmFtZXx8cmU7cmV0dXJuKEhlfHw1PT1QLmJpZmYmJmdlWyIhZnJlZXplIl0pJiZDaShRLCJXaW5k'@;
put 'b3cyIixmdW5jdGlvbiBCVCh5LFAsSSxRKXt2YXIgcmU9USYmUS5iaWZmfHw4LGdlPXByKDg9PXJlPzE4OjEwKSxfZT0xNzE4O3JldHVybiBJPjAmJihfZSY9LTUxMyksaG4oUFsiIWdyaWRsaW5lcyJdKSYmKF9lJj0tMyksUFsiIWZyZWV6ZSJdJiYoX2V8PTgpLHkmJnkuUlRMJiYoX2V8PTY0'@;
put 'KSw1PT1yZSYmKF9lPTQ0NiksZ2Uud3JpdGVfc2hpZnQoMixfZSksOD09cmU/KGdlLndyaXRlX3NoaWZ0KDQsMCksZ2Uud3JpdGVfc2hpZnQoNCw2NCksZ2Uud3JpdGVfc2hpZnQoNCwwKSxnZS53cml0ZV9zaGlmdCg0LDApKTooZ2Uud3JpdGVfc2hpZnQoNCwwKSxnZS53cml0ZV9zaGlmdCg0'@;
put 'LDApKSxnZX0oKF9lLlZpZXdzfHxbXSlbMF0sZ2UseSkpLChIZXx8NT09UC5iaWZmKSYmZ2VbIiFmcmVlemUiXSYmQ2koUSwiUGFuZSIsZnVuY3Rpb24gelQoeSl7InN0cmluZyI9PXR5cGVvZiB5JiYoeT1zcyh5KSk7dmFyIFA9cHIoMTApO3JldHVybiBQLndyaXRlX3NoaWZ0KDIseS5jKSxQ'@;
put 'LndyaXRlX3NoaWZ0KDIseS5yKSxQLndyaXRlX3NoaWZ0KDIseS5yKSxQLndyaXRlX3NoaWZ0KDIseS5jKSxQLndyaXRlX3NoaWZ0KDEsMyksUC53cml0ZV9zaGlmdCgxLDApLFB9KGdlWyIhZnJlZXplIl0pKSxIZSYmZ2VbIiFzZWwiXSYmQ2koUSwiU2VsZWN0aW9uIixmdW5jdGlvbiBSNCh5'@;
put 'LFApe3ZhciBJPXByKDE1KSxRPXkuY2VsbDtpZighUSl7aWYoIXkucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1E9ZGkoV3MoeS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgcmU9InN0cmluZyI9PXR5cGVv'@;
put 'ZiBRP3NzKFEpOlE7aWYoUCl7dmFyIGdlPSJzdHJpbmciPT10eXBlb2YgUD9zcyhQKTpQO0kud3JpdGVfc2hpZnQoMSxyZS5yPj1nZS5yJiZyZS5jPj1nZS5jPzA6cmUucj49Z2UuciYmcmUuYzxnZS5jPzI6cmUucjxnZS5yJiZyZS5jPj1nZS5jPzE6Myl9ZWxzZSBJLndyaXRlX3NoaWZ0KDEs'@;
put 'Myk7cmV0dXJuIEkud3JpdGVfc2hpZnQoMixyZS5yKSxJLndyaXRlX3NoaWZ0KDIscmUuYyksSS53cml0ZV9zaGlmdCgyLDApLEkud3JpdGVfc2hpZnQoMiwxKSxmdW5jdGlvbiBtOSh5LFApe1B8fChQPXByKDYpKSxQLndyaXRlX3NoaWZ0KDIseS5zP3kucy5yOnkuciksUC53cml0ZV9zaGlm'@;
put 'dCgyLHkuZT95LmUucjp5LnIpLFAud3JpdGVfc2hpZnQoMSx5LnM/eS5zLmM6eS5jKSxQLndyaXRlX3NoaWZ0KDEseS5lP3kuZS5jOnkuYyl9KHtzOnJlLGU6cmV9LEkpLEl9KGdlWyIhc2VsIl0sZ2VbIiFmcmVlemUiXSkpLEhlJiYoZ2VbIiFtZXJnZXMiXXx8W10pLmxlbmd0aCYmQ2koUSwi'@;
put 'TWVyZ2VDZWxscyIsZnVuY3Rpb24gWXcoeSl7dmFyIFA9cHIoMis4KnkubGVuZ3RoKTtQLndyaXRlX3NoaWZ0KDIseS5sZW5ndGgpO2Zvcih2YXIgST0wO0k8eS5sZW5ndGg7KytJKVUwKHlbSV0sUCk7cmV0dXJuIFB9KGdlWyIhbWVyZ2VzIl0pKSxIZSYmZnVuY3Rpb24gQmwoeSxQKXtmb3Io'@;
put 'dmFyIEk9MDtJPFBbIiFsaW5rcyJdLmxlbmd0aDsrK0kpe3ZhciBRPVBbIiFsaW5rcyJdW0ldO0NpKHksIkhMaW5rIixYaChRKSksUVsxXS5Ub29sdGlwJiZDaSh5LCJITGlua1Rvb2x0aXAiLFFUKFEpKX1kZWxldGUgUFsiIWxpbmtzIl19KFEsZ2UpLENpKFEsIkNvZGVOYW1lIixtbShUdCkp'@;
put 'LEhlJiZmdW5jdGlvbiBNTSh5LFApe3ZhciBJPXByKDE5KTtJLndyaXRlX3NoaWZ0KDQsMjE1MSksSS53cml0ZV9zaGlmdCg0LDApLEkud3JpdGVfc2hpZnQoNCwwKSxJLndyaXRlX3NoaWZ0KDIsMyksSS53cml0ZV9zaGlmdCgxLDEpLEkud3JpdGVfc2hpZnQoNCwwKSxDaSh5LCJGZWF0SGRy'@;
put 'IixJKSwoST1wcigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1MiksSS53cml0ZV9zaGlmdCg0LDApLEkud3JpdGVfc2hpZnQoNCwwKSxJLndyaXRlX3NoaWZ0KDIsMyksSS53cml0ZV9zaGlmdCgxLDApLEkud3JpdGVfc2hpZnQoNCwwKSxJLndyaXRlX3NoaWZ0KDIsMSksSS53cml0ZV9zaGlmdCg0'@;
put 'LDQpLEkud3JpdGVfc2hpZnQoMiwwKSxVMChPaShQWyIhcmVmIl18fCJBMSIpLEkpLEkud3JpdGVfc2hpZnQoNCw0KSxDaSh5LCJGZWF0IixJKX0oUSxnZSksQ2koUSwiRU9GIiksUS5lbmQoKX1mdW5jdGlvbiBFTSh5LFAsSSl7dmFyIFE9d2MoKSxyZT0oeXx8e30pLldvcmtib29rfHx7fSxn'@;
put 'ZT1yZS5TaGVldHN8fFtdLF9lPXJlLldCUHJvcHN8fHt9LHZlPTg9PUkuYmlmZixTZT01PT1JLmJpZmY7Q2koUSwyMDU3LEQ0KDAsNSxJKSksInhsYSI9PUkuYm9va1R5cGUmJkNpKFEsIkFkZGluIiksQ2koUSwiSW50ZXJmYWNlSGRyIix2ZT9mdSgxMjAwKTpudWxsKSxDaShRLCJNbXMiLGZ1'@;
put 'bmN0aW9uIEl3KHksUCl7UHx8KFA9cHIoeSkpO2Zvcih2YXIgST0wO0k8eTsrK0kpUC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBQfSgyKSksU2UmJkNpKFEsIlRvb2xiYXJIZHIiKSxTZSYmQ2koUSwiVG9vbGJhckVuZCIpLENpKFEsIkludGVyZmFjZUVuZCIpLENpKFEsIldyaXRlQWNjZXNz'@;
put 'IixmdW5jdGlvbiB3bSh5LFApe3ZhciBJPSFQfHw4PT1QLmJpZmYsUT1wcihJPzExMjo1NCk7Zm9yKFEud3JpdGVfc2hpZnQoOD09UC5iaWZmPzI6MSw3KSxJJiZRLndyaXRlX3NoaWZ0KDEsMCksUS53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksUS53cml0ZV9zaGlmdCg0LDU0NTg1NDh8KEk/'@;
put 'MDo1MzY4NzA5MTIpKTtRLmw8US5sZW5ndGg7KVEud3JpdGVfc2hpZnQoMSxJPzA6MzIpO3JldHVybiBRfSgwLEkpKSxDaShRLCJDb2RlUGFnZSIsZnUodmU/MTIwMDoxMjUyKSksdmUmJkNpKFEsIkRTRiIsZnUoMCkpLHZlJiZDaShRLCJFeGNlbDlGaWxlIiksQ2koUSwiUlJUYWJJZCIsZnVu'@;
put 'Y3Rpb24gTTkoeSl7Zm9yKHZhciBQPXByKDIqeSksST0wO0k8eTsrK0kpUC53cml0ZV9zaGlmdCgyLEkrMSk7cmV0dXJuIFB9KHkuU2hlZXROYW1lcy5sZW5ndGgpKSx2ZSYmeS52YmFyYXcmJkNpKFEsIk9iUHJvaiIpLHZlJiZ5LnZiYXJhdyYmQ2koUSwiQ29kZU5hbWUiLG1tKF9lLkNvZGVO'@;
put 'YW1lfHwiVGhpc1dvcmtib29rIikpLENpKFEsIkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGZ1KDE3KSksQ2koUSwiV2luUHJvdGVjdCIsRmwoITEpKSxDaShRLCJQcm90ZWN0IixGbCghMSkpLENpKFEsIlBhc3N3b3JkIixmdSgwKSksdmUmJkNpKFEsIlByb3Q0UmV2IixGbCghMSkpLHZlJiZDaShR'@;
put 'LCJQcm90NFJldlBhc3MiLGZ1KDApKSxDaShRLCJXaW5kb3cxIixmdW5jdGlvbiBPdygpe3ZhciB5PXByKDE4KTtyZXR1cm4geS53cml0ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMjkyODApLHkud3JpdGVfc2hpZnQoMiwxNzYwMCkseS53cml0ZV9z'@;
put 'aGlmdCgyLDU2KSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hpZnQoMiwxKSx5LndyaXRlX3NoaWZ0KDIsNTAwKSx5fSgpKSxDaShRLCJCYWNrdXAiLEZsKCExKSksQ2koUSwiSGlkZU9iaiIsZnUoMCkpLENpKFEsIkRhdGUxOTA0IixGbCgidHJ1ZSI9'@;
put 'PWZ1bmN0aW9uIGlNKHkpe3JldHVybiB5Lldvcmtib29rJiZ5Lldvcmtib29rLldCUHJvcHMmJnlyKHkuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KHkpKSksQ2koUSwiQ2FsY1ByZWNpc2lvbiIsRmwoITApKSx2ZSYmQ2koUSwiUmVmcmVzaEFsbCIsRmwoITEp'@;
put 'KSxDaShRLCJCb29rQm9vbCIsZnUoMCkpLENyPXc0KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIGVSKHksUCxJKXsoKChQ'@;
put 'fHx7fSkuU3R5bGVzfHx7fSkuRm9udHN8fFt7c3o6MTIsY29sb3I6e3RoZW1lOjF9LG5hbWU6IkFyaWFsIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe0NpKHksIkZvbnQiLGZ1bmN0aW9uIHczKHksUCl7dmFyIEk9eS5uYW1lfHwiQXJpYWwiLFE9UCYm'@;
put 'NT09UC5iaWZmLGdlPXByKFE/MTUrSS5sZW5ndGg6MTYrMipJLmxlbmd0aCk7Z2Uud3JpdGVfc2hpZnQoMiwyMCooeS5zenx8MTIpKTt2YXIgX2U9MDtyZXR1cm4geS5ib2xkJiYoX2V8PTEpLHkuaXRhbGljJiYoX2V8PTIpLHkuc3RyaWtlJiYoX2V8PTgpLHkuc2hhZG93JiYoX2V8PTMyKSxn'@;
put 'ZS53cml0ZV9zaGlmdCgxLF9lKSxnZS53cml0ZV9zaGlmdCgxLDApLGdlLndyaXRlX3NoaWZ0KDIseS5jb2xvcj9IMyh5LmNvbG9yLDY0KTo2NCksZ2Uud3JpdGVfc2hpZnQoMix5LmJvbGQ/NzAwOjQwMCksZ2Uud3JpdGVfc2hpZnQoMiwic3VwZXIiPT15LnZhbGlnbj8xOiJzdWIiPT15LnZh'@;
put 'bGlnbj8yOjApLGdlLndyaXRlX3NoaWZ0KDEseS51bmRlcmxpbmV8fDApLGdlLndyaXRlX3NoaWZ0KDEsZ2UuZmFtaWx5fHwwKSxnZS53cml0ZV9zaGlmdCgxLGdlLmNoYXJzZXR8fDApLGdlLndyaXRlX3NoaWZ0KDEsMCksZ2Uud3JpdGVfc2hpZnQoMSxJLmxlbmd0aCksUXx8Z2Uud3JpdGVf'@;
put 'c2hpZnQoMSwxKSxnZS53cml0ZV9zaGlmdCgoUT8xOjIpKkkubGVuZ3RoLEksUT8ic2JjcyI6InV0ZjE2bGUiKSxnZX0oUSxJKSl9KX0oUSx5LEkpLGZ1bmN0aW9uIHRSKHksUCxJKXtQJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2Zvcih2'@;
put 'YXIgcmU9UVswXTtyZTw9UVsxXTsrK3JlKW51bGwhPVBbcmVdJiZDaSh5LCJGb3JtYXQiLFhyKHJlLFBbcmVdLEkpKX0pfShRLHkuU1NGLEkpLGZ1bmN0aW9uIG5SKHksUCl7Zm9yKHZhciBJPTA7STwxNjsrK0kpQ2koeSwiWEYiLENtKHtudW1GbXRJZDowLHN0eWxlOiEwfSwwLFApKTtQLmNl'@;
put 'bGxYZnMuZm9yRWFjaChmdW5jdGlvbihRKXtDaSh5LCJYRiIsQ20oUSwwLFApKX0pfShRLEkpLENpKFEsIlBhbGV0dGUiLGZ1bmN0aW9uICR3KHkpe3ZhciBQPXByKDIyNik7UC53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIEk9MDtJPDU2OysrSSl7dmFyIFE9eVtJKzhdfHxoM1tJKzhdO1Au'@;
put 'd3JpdGVfc2hpZnQoMSxRWzBdKSxQLndyaXRlX3NoaWZ0KDEsUVsxXSksUC53cml0ZV9zaGlmdCgxLFFbMl0pLFAud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gUH0oQ3IpKSxDcj1vbihoMyksdmUmJkNpKFEsIlVzZXNFTEZzIixGbCghMSkpO3ZhciBCZT1RLmVuZCgpLEdlPXdjKCk7dmUmJkNp'@;
put 'KEdlLCJDb3VudHJ5IixmdW5jdGlvbiB0RCh5KXtyZXR1cm4geXx8KHk9cHIoNCkpLHkud3JpdGVfc2hpZnQoMiwxKSx5LndyaXRlX3NoaWZ0KDIsMSkseX0oKSksdmUmJkkuU3RyaW5ncyYmZnVuY3Rpb24gdF8oeSxQLEksUSl7dmFyIHJlPVF8fChJfHxbXSkubGVuZ3RofHwwO2lmKHJlPD04'@;
put 'MjI0KXJldHVybiBDaSh5LFAsSSxyZSk7dmFyIGdlPStQfHwrU01bUF07aWYoIWlzTmFOKGdlKSl7Zm9yKHZhciBfZT1JLnBhcnRzfHxbXSx2ZT0wLFNlPTAsSGU9MDtIZSsoX2VbdmVdfHw4MjI0KTw9ODIyNDspSGUrPV9lW3ZlXXx8ODIyNCx2ZSsrO3ZhciBCZT15Lm5leHQoNCk7Zm9yKEJl'@;
put 'LndyaXRlX3NoaWZ0KDIsZ2UpLEJlLndyaXRlX3NoaWZ0KDIsSGUpLHkucHVzaChJLnNsaWNlKFNlLFNlK0hlKSksU2UrPUhlO1NlPHJlOyl7Zm9yKChCZT15Lm5leHQoNCkpLndyaXRlX3NoaWZ0KDIsNjApLEhlPTA7SGUrKF9lW3ZlXXx8ODIyNCk8PTgyMjQ7KUhlKz1fZVt2ZV18fDgyMjQs'@;
put 'dmUrKztCZS53cml0ZV9zaGlmdCgyLEhlKSx5LnB1c2goSS5zbGljZShTZSxTZStIZSkpLFNlKz1IZX19fShHZSwiU1NUIixmdW5jdGlvbiBicyh5LFApe3ZhciBJPXByKDgpO0kud3JpdGVfc2hpZnQoNCx5LkNvdW50KSxJLndyaXRlX3NoaWZ0KDQseS5VbmlxdWUpO2Zvcih2YXIgUT1bXSxy'@;
put 'ZT0wO3JlPHkubGVuZ3RoOysrcmUpUVtyZV09ajAoeVtyZV0sUCk7dmFyIGdlPVMoW0ldLmNvbmNhdChRKSk7cmV0dXJuIGdlLnBhcnRzPVtJLmxlbmd0aF0uY29uY2F0KFEubWFwKGZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UubGVuZ3RofSkpLGdlfShJLlN0cmluZ3MsSSkpLENpKEdlLCJFT0Yi'@;
put 'KTt2YXIgbnQ9R2UuZW5kKCksZHQ9d2MoKSxDdD0wLGN0PTA7Zm9yKGN0PTA7Y3Q8eS5TaGVldE5hbWVzLmxlbmd0aDsrK2N0KUN0Kz0odmU/MTI6MTEpKyh2ZT8yOjEpKnkuU2hlZXROYW1lc1tjdF0ubGVuZ3RoO3ZhciBidD1CZS5sZW5ndGgrQ3QrbnQubGVuZ3RoO2ZvcihjdD0wO2N0PHku'@;
put 'U2hlZXROYW1lcy5sZW5ndGg7KytjdClDaShkdCwiQm91bmRTaGVldDgiLFkwKHtwb3M6YnQsaHM6KGdlW2N0XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6eS5TaGVldE5hbWVzW2N0XX0sSSkpLGJ0Kz1QW2N0XS5sZW5ndGg7dmFyIGt0PWR0LmVuZCgpO2lmKEN0IT1rdC5sZW5ndGgpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJCUzggIitDdCsiICE9ICIra3QubGVuZ3RoKTt2YXIgVHQ9W107cmV0dXJuIEJlLmxlbmd0aCYmVHQucHVzaChCZSksa3QubGVuZ3RoJiZUdC5wdXNoKGt0KSxudC5sZW5ndGgmJlR0LnB1c2gobnQpLFNhKFtUdF0pfWZ1bmN0aW9uIGlfKHksUCl7dmFyIEk9UHx8e307'@;
put 'c3dpdGNoKEkuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24gb1IoeSxQKXt2YXIgST1QfHx7fSxRPVtdO0ZtKFAmJlAuUFBJfHw5NikseSYmIXkuU1NGJiYoeS5TU0Y9dy5nZXRfdGFibGUoKSkseSYmeS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksSS5yZXZz'@;
put 'c2Y9QWUoeS5TU0YpLEkucmV2c3NmW3kuU1NGWzY1NTM1XV09MCxJLnNzZj15LlNTRikseS5TdHlsZXM9e0ZvbnRzOkkuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6SS5GaWxs'@;
put 'cz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6SS5Cb3JkZXJzPVt7fV0sRFhGOkkuRFhGPXkuU3R5bGVzJiZ5LlN0eWxlcy5EWEZ8fFtdfSxaMShJLkZvbnRzWzBdKSxJLlN0cmluZ3M9W10sSS5TdHJpbmdzLkNvdW50PTAsSS5TdHJpbmdz'@;
put 'LlVuaXF1ZT0wLEswP0kucmV2U3RyaW5ncz1uZXcgTWFwOihJLnJldlN0cmluZ3M9e30sSS5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgSS5yZXZTdHJpbmdzLmZvbyksaF8oSSksSS5jZWxsWGZzPVtdLEkuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGd1KEkuY2VsbFhmcyxJLmNl'@;
put 'bGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkseS5Qcm9wc3x8KHkuUHJvcHM9e30pO2Zvcih2YXIgcmU9MDtyZTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrcmUpUVtRLmxlbmd0aF09aVIocmUsSSx5KTtyZXR1cm4gUS51bnNoaWZ0KEVNKHksUSxJKSksU2EoW1FdKX0oeSxQKTtj'@;
put 'YXNlIDQ6Y2FzZSAzOmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24gZlkoeSxQKXt2YXIgST1QfHx7fTtudWxsIT10ZSYmbnVsbD09SS5kZW5zZSYmKEkuZGVuc2U9dGUpO2Zvcih2YXIgUT13YygpLHJlPTAsZ2U9MDtnZTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrZ2UpeS5TaGVldE5hbWVzW2dlXT09'@;
put 'SS5zaGVldCYmKHJlPWdlKTtpZigwPT1yZSYmSS5zaGVldCYmeS5TaGVldE5hbWVzWzBdIT1JLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK0kuc2hlZXQpO3JldHVybiBDaShRLDQ9PUkuYmlmZj8xMDMzOjM9PUkuYmlmZj81MjE6OSxENCgwLDE2LEkpKSxmdW5j'@;
put 'dGlvbiBoWSh5LFAsSSxRKXt2YXIgX2UscmU9QXJyYXkuaXNBcnJheShQKSxnZT1PaShQWyIhcmVmIl18fCJBMSIpLHZlPSIiLFNlPVtdO2lmKGdlLmUuYz4yNTV8fGdlLmUucj4xNjM4Myl7aWYoUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhQWyIhcmVmIl18fCJBMSIpKyIgZXhj'@;
put 'ZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO2dlLmUuYz1NYXRoLm1pbihnZS5lLmMsMjU1KSxnZS5lLnI9TWF0aC5taW4oZ2UuZS5jLDE2MzgzKSxfZT1PbyhnZSl9Zm9yKHZhciBIZT1nZS5zLnI7SGU8PWdlLmUucjsrK0hlKXt2ZT1IcyhIZSk7Zm9yKHZhciBCZT1nZS5zLmM7QmU8'@;
put 'PWdlLmUuYzsrK0JlKXtIZT09PWdlLnMuciYmKFNlW0JlXT1OcyhCZSkpLF9lPVNlW0JlXSt2ZTt2YXIgR2U9cmU/KFBbSGVdfHxbXSlbQmVdOlBbX2VdO0dlJiZyXyh5LEdlLEhlLEJlKX19fShRLHkuU2hlZXRzW3kuU2hlZXROYW1lc1tyZV1dLDAsSSksQ2koUSwxMCksUS5lbmQoKX0oeSxQ'@;
put 'KX10aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK0kuYm9va1R5cGUrIiBmb3IgQklGRiIpfXZhciBGdT1mdW5jdGlvbigpe3ZhciB5PXtjZW50ZXJDb250aW51b3VzOiJjZW50ZXIiLGp1c3RpZnk6ImxlZnQifTtmdW5jdGlvbiBJKEdlLG50KXt2YXIgZHQ9bnR8fHt9O251bGwhPXRl'@;
put 'JiZudWxsPT1kdC5kZW5zZSYmKGR0LmRlbnNlPXRlKTt2YXIgQ3Q9ZHQuZGVuc2U/W106e30sY3Q9KEdlPUdlLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIWN0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8dGFi'@;
put 'bGU+Iik7dmFyIGJ0PUdlLm1hdGNoKC88XC90YWJsZS9pKSxGdD1jdC5pbmRleCxrdD1idCYmYnQuaW5kZXh8fEdlLmxlbmd0aCxUdD1mdW5jdGlvbiBmdCh5LFAsSSl7aWYoSG58fCJzdHJpbmciPT10eXBlb2YgUClyZXR1cm4geS5zcGxpdChQKTtmb3IodmFyIFE9eS5zcGxpdChQKSxyZT1b'@;
put 'UVswXV0sZ2U9MTtnZTxRLmxlbmd0aDsrK2dlKXJlLnB1c2goSSkscmUucHVzaChRW2dlXSk7cmV0dXJuIHJlfShHZS5zbGljZShGdCxrdCksLyg6Pzx0cltePl0qPikvaSwiPHRyPiIpLFp0PS0xLHBuPTAsS249MCx1bj0wLHFuPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LHpuPVtd'@;
put 'O2ZvcihGdD0wO0Z0PFR0Lmxlbmd0aDsrK0Z0KXt2YXIga249VHRbRnRdLnRyaW0oKSxlcj1rbi5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPWVyKXtpZigiPHRkIj09ZXJ8fCI8dGgiPT1lcil7dmFyIHRyPWtuLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGt0PTA7a3Q8dHIu'@;
put 'bGVuZ3RoOysra3Qpe3ZhciBabj10cltrdF0udHJpbSgpO2lmKFpuLm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIgQnI9Wm4sc2k9MDsiPCI9PUJyLmNoYXJBdCgwKSYmKHNpPUJyLmluZGV4T2YoIj4iKSk+LTE7KUJyPUJyLnNsaWNlKHNpKzEpO2Zvcih2YXIgeGk9MDt4aTx6bi5sZW5ndGg7'@;
put 'Kyt4aSl7dmFyIElpPXpuW3hpXTtJaS5zLmM9PXBuJiZJaS5zLnI8WnQmJlp0PD1JaS5lLnImJihwbj1JaS5lLmMrMSx4aT0tMSl9dmFyIFFyPWxuKFpuLnNsaWNlKDAsWm4uaW5kZXhPZigiPiIpKSk7dW49UXIuY29sc3Bhbj8rUXIuY29sc3BhbjoxLCgoS249K1FyLnJvd3NwYW4pPjF8fHVu'@;
put 'PjEpJiZ6bi5wdXNoKHtzOntyOlp0LGM6cG59LGU6e3I6WnQrKEtufHwxKS0xLGM6cG4rdW4tMX19KTt2YXIgdXI9UXIudHx8UXJbImRhdGEtdCJdfHwiIjtpZighQnIubGVuZ3RoKXtwbis9dW47Y29udGludWV9aWYoQnI9T2MoQnIpLHFuLnMucj5adCYmKHFuLnMucj1adCkscW4uZS5yPFp0'@;
put 'JiYocW4uZS5yPVp0KSxxbi5zLmM+cG4mJihxbi5zLmM9cG4pLHFuLmUuYzxwbiYmKHFuLmUuYz1wbiksQnIubGVuZ3RoKXt2YXIgQW49e3Q6InMiLHY6QnJ9O2R0LnJhd3x8IUJyLnRyaW0oKS5sZW5ndGh8fCJzIj09dXJ8fChBbj0kbihCcixkdCkpLGR0LmRlbnNlPyhDdFtadF18fChDdFta'@;
put 'dF09W10pLEN0W1p0XVtwbl09QW4pOkN0W2RpKHtyOlp0LGM6cG59KV09QW4scG4rPXVufX19fX1lbHNle2lmKCsrWnQsZHQuc2hlZXRSb3dzJiZkdC5zaGVldFJvd3M8PVp0KXstLVp0O2JyZWFrfXBuPTB9fXJldHVybiBDdFsiIXJlZiJdPU9vKHFuKSx6bi5sZW5ndGgmJihDdFsiIW1lcmdl'@;
put 'cyJdPXpuKSxDdH1mdW5jdGlvbiByZShHZSxudCxkdCxDdCxjdCxidCl7dmFyIFR0LEZ0PUdlWyIhbWVyZ2VzIl18fFtdLGt0PVtdLFp0PXtzdHlsZTpbXX0scG49ITE7ZnVuY3Rpb24gS24oVGksWW8sbG8pe3ZhciBBbz0iIix4bz0wO2lmKFR0W1RpXSlzd2l0Y2goVHRbVGldLnN0eWxlKXtj'@;
put 'YXNlInRoaW4iOmNhc2UiaGFpciI6QW89InNvbGlkIix4bz0xO2JyZWFrO2Nhc2UibWVkaXVtIjpBbz0ic29saWQiLHhvPTI7YnJlYWs7Y2FzZSJ0aGljayI6QW89InNvbGlkIix4bz0zO2JyZWFrO2Nhc2UiZG91YmxlIjpBbz0iZG91YmxlIix4bz0zO2JyZWFrO2Nhc2UiZG90dGVkIjpjYXNl'@;
put 'ImRhc2hEb3REb3QiOkFvPSJkb3R0ZWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90IjpBbz0iZG90dGVkIix4bz0yO2JyZWFrO2Nhc2UiZGFzaGVkIjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90IjpBbz0iZGFzaGVkIix4bz0xO2JyZWFrO2Nhc2UibWVkaXVtRGFz'@;
put 'aGVkIjpjYXNlIm1lZGl1bURhc2hEb3QiOkFvPSJkYXNoZWQiLHhvPTJ9ZTppZigwPT14byl7c3dpdGNoKFRpKXtjYXNlInRvcCI6LS1ZbzticmVhaztjYXNlImxlZnQiOi0tbG87YnJlYWs7Y2FzZSJib3R0b20iOisrWW87YnJlYWs7Y2FzZSJyaWdodCI6Kytsb312YXIgaGk9WW8+PTAmJmxv'@;
put 'Pj0wP0N0LmRlbnNlPyhHZVtZb118fFtdKVtsb106R2VbZGkoe3I6WW8sYzpsb30pXTpudWxsO2lmKGhpKXtpZihoaS5zJiZoaS5zW3t0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W1RpXV0pYnJlYWsgZTtoaS5zJiZoaS5zLmZnQ29sb3ImJih4'@;
put 'bz0xKX1UdC5mZ0NvbG9yJiYoeG89MSksIWhpJiZwbiYmMD09eG8mJih4bz0xKX0wIT14byYmeG8mJihadC5zdHlsZS5wdXNoKCJib3JkZXItIitUaSsiLXN0eWxlOiIrKEFvfHwidHJhbnNwYXJlbnQiKSksWnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrVGkrIi13aWR0aDoiK3hvKyJweCIpLCIi'@;
put 'PT1Bbz9adC5zdHlsZS5wdXNoKCJib3JkZXItIitUaSsiLWNvbG9yOiB0cmFuc3BhcmVudCIpOlR0W1RpXS5jb2xvciYmVHRbVGldLmNvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrVGkrIi1jb2xvcjojIitPdShUdFtUaV0uY29sb3IucmdiKSkpfWZvcih2YXIgdW49bnQucy5j'@;
put 'O3VuPD1udC5lLmM7Kyt1bil7Zm9yKHZhciBxbj0wLHpuPTAsa249MDtrbjxGdC5sZW5ndGg7KytrbilpZighKEZ0W2tuXS5zLnI+ZHR8fEZ0W2tuXS5zLmM+dW58fEZ0W2tuXS5lLnI8ZHR8fEZ0W2tuXS5lLmM8dW4pKXtpZihGdFtrbl0ucy5yPGR0fHxGdFtrbl0ucy5jPHVuKXtxbj0tMTti'@;
put 'cmVha31xbj1GdFtrbl0uZS5yLUZ0W2tuXS5zLnIrMSx6bj1GdFtrbl0uZS5jLUZ0W2tuXS5zLmMrMTticmVha31pZighKHFuPDApKXt2YXIgZXI9ZGkoe3I6ZHQsYzp1bn0pLHRyPUN0LmRlbnNlPyhHZVtkdF18fFtdKVt1bl06R2VbZXJdO3RyP3BuPSExOihwbj0hMCx0cj17dDoieiIsczp7'@;
put 'fX0pO3ZhciBabj0ieiI9PXRyLnQ/IiI6dHIuaHx8cm8odHIud3x8KGN1KHRyKSx0ci53KXx8IiIpO2lmKFp0PXtzdHlsZTpbXX0sVHQ9dHIucyl7dmFyIEJyPTE7aWYoKCJzdXBlciI9PVR0LnZhbGlnbnx8InN1YiI9PVR0LnZhbGlnbikmJihCcj0uODMsWm49U3IoInNwYW4iLFpuLHtzdHls'@;
put 'ZToidmVydGljYWwtYWxpZ246ICIrVHQudmFsaWdufSkpLFp0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKFR0LmJvbGQ/NzAwOjQwMCkpLFR0Lml0YWxpYyYmWnQuc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKFR0LnVuZGVybGluZXx8VHQuc3RyaWtlKSYmWnQuc3R5bGUu'@;
put 'cHVzaCgidGV4dC1kZWNvcmF0aW9uOiIrKFR0LnVuZGVybGluZT8iIHVuZGVybGluZSI6IiIpKyhUdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksVHQuY29sb3ImJlR0LmNvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiY29sb3I6ICMiK091KFR0LmNvbG9yLnJnYikpLFR0Lm5hbWUmJlp0'@;
put 'LnN0eWxlLnB1c2goImZvbnQtZmFtaWx5OiIrVHQubmFtZSsiLCBzYW5zLXNlcmlmIiksVHQuc3omJlp0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK1R0LnN6KkJyKyJwdCIpLG51bGwhPT1UdC5wYXR0ZXJuVHlwZSYmVHQuZmdDb2xvciYmVHQuZmdDb2xvci5yZ2ImJlp0LnN0eWxlLnB1c2go'@;
put 'ImJhY2tncm91bmQtY29sb3I6ICMiK091KFR0LmZnQ29sb3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihUaSl7S24oVGksZHQsdW4pfSkscW4+MXx8em4+MSl7dmFyIHNpPWRpKHtyOmR0K3FuLTEsYzp1bit6bi0xfSkseGk9Q3QuZGVuc2U/KEdlW2R0K3FuLTFdfHxb'@;
put 'XSlbdW4rem4tMV06R2Vbc2ldLFFyPVR0O1R0PXhpJiZ4aS5zfHxUdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihUaSl7S24oVGksZHQsdW4pfSksVHQ9UXJ9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKFRpKXtLbihUaSxkdCx1bil9KTtpZihU'@;
put 'dC5hbGlnbm1lbnQpe2lmKFR0LmFsaWdubWVudC5ob3Jpem9udGFsP1p0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKHlbVHQuYWxpZ25tZW50Lmhvcml6b250YWxdfHxUdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09dHIudCYmWnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmln'@;
put 'aHQiKSxUdC5hbGlnbm1lbnQudmVydGljYWwpe3ZhciB1cj1UdC5hbGlnbm1lbnQudmVydGljYWw7WnQuc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJjZW50ZXIiPT11cj8ibWlkZGxlIjp1cikpfWlmKFR0LmFsaWdubWVudC53cmFwVGV4dCladC5zdHlsZS5wdXNoKCJ3aGl0ZS1z'@;
put 'cGFjZTogcHJlLXdyYXAiKTtlbHNle3ZhciBBbj1DdC5kZW5zZT8oR2VbZHRdfHxbXSlbdW4rMV06R2VbZGkoe3I6ZHQsYzp1bisxfSldO0FuJiYieiIhPUFuLnQmJlp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpfX1lbHNlIm4iPT10ci50JiZadC5zdHlsZS5wdXNoKCJ0'@;
put 'ZXh0LWFsaWduOiByaWdodCIpO3ZhciB2cj0oKEdlWyIhY29scyJdfHxbXSlbdW5dfHx7fSkud3B4O251bGw9PXZyJiYodnI9KChHZVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpfXZhciBycj0wO2lmKHpuPD0xJiZxbjw9MSYmKHJyPSgoR2VbIiFjb2xzIl18fFtdKVt1bl18'@;
put 'fHt9KS53cHgpJiZadC5zdHlsZS5wdXNoKCJ3aWR0aDogIitycisicHgiKSxHZVsiIWNvbmRmbXQiXSYmZ2UodHIsZHQsdW4sR2VbIiFjb25kZm10Il0sWnQuc3R5bGUsR2UpLDA9PVp0LnN0eWxlLmxlbmd0aD9kZWxldGUgWnQuc3R5bGU6WnQuc3R5bGU9WnQuc3R5bGUuam9pbigiOyIpLEN0'@;
put 'LmNzcyl7dmFyIFNuPWN0LmluZGV4T2YoWnQuc3R5bGUpOy0xPT1TbiYmKGN0LnB1c2goWnQuc3R5bGUpLFNuPWN0Lmxlbmd0aC0xKSxkZWxldGUgWnQuc3R5bGUsWnQuY2xhc3M9InNqcyIrKGJ0fHwiIikrIi0iK1NufXFuPjEmJihadC5yb3dzcGFuPXFuKSx6bj4xJiYoWnQuY29sc3Bhbj16'@;
put 'biksQ3QuZWRpdGFibGU/Wm49JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+JytabisiPC9zcGFuPiI6dHImJihadFsiZGF0YS10Il09dHImJnRyLnR8fCJ6IixudWxsIT10ci52JiYoWnRbImRhdGEtdiJdPXRyLnYpLG51bGwhPXRyLnomJihadFsiZGF0YS16Il09dHIueikpLFp0Lmlk'@;
put 'PShDdC5pZHx8InNqcyIpKyItIitlcixrdC5wdXNoKFNyKCJ0ZCIsWm4sWnQpKX19dmFyIHdpLG1yPXtzdHlsZTpbXX07KHdpPUdlWyIhc2hlZXRGb3JtYXQiXSkmJndpLnJvdyYmKEwzKHdpLnJvdyksd2kucm93LmhweCYmKG1yLnN0eWxlLnB1c2goWyJoZWlnaHQiLHdpLnJvdy5ocHgrInB4'@;
put 'Il0pLG1yLmhlaWdodD1NYXRoLnJvdW5kKHdpLnJvdy5ocHgpKSk7dmFyIFVyPUdlWyIhcm93cyJdO2lmKFVyJiZVcltkdF0pe3ZhciBqaT1VcltkdF07amkuaHB4JiYobXIuc3R5bGUucHVzaChbImhlaWdodCIsK2ppLmhweCsicHgiXSksbXIuaGVpZ2h0PU1hdGgucm91bmQoamkuaHB4KSks'@;
put 'amkuaGlkZGVuJiZtci5zdHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUiXSl9dmFyIF9vPVtdO3JldHVybiBtci5zdHlsZT1tci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKFRpKXtyZXR1cm4hKF9vLmluZGV4T2YoVGlbMF0pPi0xfHwoX28ucHVzaChUaVswXSksMCkpfSkubWFw'@;
put 'KGZ1bmN0aW9uKFRpKXtyZXR1cm4gVGlbMF0rIjoiK1RpWzFdfSksMD09bXIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBtci5zdHlsZTptci5zdHlsZT1tci5zdHlsZS5qb2luKCI7IiksU3IoInRyIixrdC5qb2luKCIiKSxtcil9ZnVuY3Rpb24gZ2UoR2UsbnQsZHQsQ3QsY3QsYnQpe0N0LmZvckVh'@;
put 'Y2goZnVuY3Rpb24oRnQpe2lmKEZ0Ll9yZWZ8fChGdC5fcmVmPSJzdHJpbmciPT10eXBlb2YgRnQucmVmP1dzKEZ0LnJlZik6RnQucmVmKSwhKEZ0Ll9yZWYucy5jPmR0fHxGdC5fcmVmLmUuYzxkdHx8RnQuX3JlZi5zLnI+bnR8fEZ0Ll9yZWYuZS5yPG50fHwic2NhbGUiIT09RnQudCkpe2lm'@;
put 'KCJuIiE9R2UudClyZXR1cm47dmFyIGt0O2lmKG51bGw9PUZ0Ll9taW4pe0Z0Ll92YWx1ZXM9W107Zm9yKHZhciBUdD1GdC5fcmVmLnMucjtUdDw9RnQuX3JlZi5lLnI7KytUdClmb3IodmFyIFp0PUZ0Ll9yZWYucy5jO1p0PD1GdC5fcmVmLmUuYzsrK1p0KXt2YXIgcG49QXJyYXkuaXNBcnJh'@;
put 'eShidCk/KGJ0W1R0XXx8W10pW1p0XTpidFtkaSh7cjpUdCxjOlp0fSldO3BuJiYibiI9PXBuLnQmJkZ0Ll92YWx1ZXMucHVzaChwbi52KX1pZihGdC5fdmFsdWVzLnNvcnQoZnVuY3Rpb24oS24sdW4pe3JldHVybiBLbi11bn0pLEZ0Ll9taW49RnQuX3ZhbHVlc1swXSxGdC5fbWF4PUZ0Ll92'@;
put 'YWx1ZXMuc2xpY2UoLTEpWzBdLEZ0Ll9iYW5kPUZ0Ll9tYXgtRnQuX21pbixGdC5jbWlkKXtzd2l0Y2goRnQuY21pZC50KXtjYXNlIm51bSI6RnQuX21pZD1GdC5jbWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpGdC5fbWlkPUZ0LmNtaWQudi8xMDAqRnQuX2JhbmQrRnQuX21pbjticmVhaztj'@;
put 'YXNlInBlcmNlbnRpbGUiOkZ0Ll9taWQ9ZnVuY3Rpb24gZm4oeSxQKXtpZigwPT1QKXJldHVybiB5WzBdO2lmKDEwMD09UClyZXR1cm4geVt5Lmxlbmd0aC0xXTt2YXIgUT1QLzEwMCooeS5sZW5ndGgtMSkscmU9US1NYXRoLmZsb29yKFEpO3JldHVybiByZSp5W01hdGguY2VpbChRKV0rKDEt'@;
put 'cmUpKnlbTWF0aC5mbG9vcihRKV19KEZ0Ll92YWx1ZXMsRnQuY21pZC52KX1GdC5fYmFuZGg9RnQuX21heC1GdC5fbWlkLEZ0Ll9iYW5kbD1GdC5fbWlkLUZ0Ll9taW59fShrdD1GdC5jbWlkP0dlLnY+PUZ0Ll9taWQ/UjkoRnQuY21pZC5jb2xvcixGdC5jbWF4LmNvbG9yLChHZS52LUZ0Ll9t'@;
put 'aWQpL0Z0Ll9iYW5kaCk6UjkoRnQuY21pbi5jb2xvcixGdC5jbWlkLmNvbG9yLChHZS52LUZ0Ll9taW4pL0Z0Ll9iYW5kbCk6UjkoRnQuY21pbi5jb2xvcixGdC5jbWF4LmNvbG9yLChHZS52LUZ0Ll9taW4pL0Z0Ll9iYW5kKSkmJmN0LnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK2t0KX19'@;
put 'KX1mdW5jdGlvbiBfZShHZSxudCl7dmFyIGR0PXtzcGFuOm50fHwxLHN0eWxlOiIifSxDdD1bXTtyZXR1cm4gR2UmJkdlLndweCYmKGR0LndpZHRoPU1hdGgucm91bmQoNCpHZS53cHgvMyksQ3QucHVzaCgid2lkdGg6IisoR2Uud3B4fHwwKSsicHgiKSksQ3QubGVuZ3RoPjAmJihkdC5zdHls'@;
put 'ZT1DdC5qb2luKCI7IikpLFNyKCJjb2wiLG51bGwsZHQpfWZ1bmN0aW9uIHZlKEdlLG50LGR0KXt2YXIgQ3Q9e2JvcmRlcjowLGNlbGxwYWRkaW5nOjAsY2VsbHNwYWNpbmc6MCxzdHlsZTpbImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSIsInRhYmxlLWxheW91dDpmaXhlZCJdLmpvaW4oIjsi'@;
put 'KX07ZHQmJmR0LmlkJiYoQ3QuaWQ9ZHQuaWQpO3ZhciBjdD1HZVsiIWNvbHMiXSxidD1HZVsiIXNoZWV0Rm9ybWF0Il07aWYoR2UmJmN0KXtmb3IodmFyIEZ0PTAsVHQ9bnQucy5jO1R0PD1udC5lLmM7KytUdCl7dmFyIFp0PWN0W1R0XTtGdCs9WnQmJlp0LndweD9adC53cHg6YnQmJmJ0LmNv'@;
put 'bCYmYnQuY29sLndweD9idC5jb2wud3B4OjUzfUN0LnN0eWxlKz0iO3dpZHRoOiIrRnQrInB4In12YXIgS24scG49WyI8dGFibGUiK1BhKEN0KSsiPiJdO2lmKHBuLnB1c2goIjxzdHlsZT50ZCB7IHBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctcmlnaHQ6MXB4OyBwYWRkaW5nLWxlZnQ6MXB4'@;
put 'OyB0ZXh0LWFsaWduOmdlbmVyYWw7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsgYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiIrKGR0JiZkdC5ncmlkY29sb3I/ZHQuZ3JpZGNvbG9yOmhuKEdlWyIhZ3JpZGxpbmVzIl0pPyJ0cmFuc3BhcmVudCI6ImJsYWNrIikrIjsgd2hpdGUtc3Bh'@;
put 'Y2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTwvc3R5bGU+IikscG4ucHVzaCgnPGNvbGdyb3VwIHNwYW49IicrKG50LmUuYy1udC5zLmMrMSkrJyI+JyksY3Qpe2Zvcih2YXIgdW49bnQucy5jO3VuPE1hdGgubWluKGN0Lmxlbmd0aCxudC5lLmMrMSk7Kyt1bikhKEtuPWN0W3Vu'@;
put 'XSkmJmJ0JiZidC5jb2wmJihLbj1idC5jb2wpLEtufHwoS249e3dweDo1M30pLHBuLnB1c2goX2UoS24sMSkpO250LmUuYy1udC5zLmMrMT5jdC5sZW5ndGgmJihLbj1udWxsLGJ0JiZidC5jb2wmJihLbj1idC5jb2wpLEtufHwoS249e3dweDo1M30pLHBuLnB1c2goX2UoS24sbnQuZS5jLW50'@;
put 'LnMuYysxLWN0Lmxlbmd0aCkpKX1lbHNlIEtuPW51bGwsYnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbixudC5lLmMtbnQucy5jKzEpKTtyZXR1cm4gcG4ucHVzaCgiPC9jb2xncm91cD4iKSxwbi5qb2luKCIiKX12YXIgU2U9JzxodG1sPjxo'@;
put 'ZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PHRpdGxlPlNoZWV0SlMgVGFibGUgRXhwb3J0PC90aXRsZT48L2hlYWQ+PGJvZHk+JyxIZT0iPC9ib2R5PjwvaHRtbD4iO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBRKEdlLG50KXtyZXR1cm4gRWQoSShHZSxudCksbnQpfSx0b19zaGVl'@;
put 'dDpJLF9yb3c6cmUsQkVHSU46U2UsRU5EOkhlLF9wcmVhbWJsZTp2ZSxodG1sX3RvX3JzOmZ1bmN0aW9uIFAoR2Upe3ZhciBudD1bXSxkdD17fSxDdD0wO3JldHVybiBHZS5yZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVtePl0qPi9nbSxmdW5jdGlvbihjdCxi'@;
put 'dCxGdCxrdCxUdCl7dmFyIHBuPWpuKGxuKGN0KVswXSkucmVwbGFjZSgvWzxcLz5dL2csIiIpLEtuPUdlLnNsaWNlKEN0LFR0KS5yZXBsYWNlKC9ccy9nLCIgIik7c3dpdGNoKEtuLmxlbmd0aD4wJiYobnQucHVzaCh7dDoicyIsdjpLbixzOmR0fSksZHQ9b24oZHQpKSxwbi50b0xvd2VyQ2Fz'@;
put 'ZSgpKXtjYXNlImIiOiIvIiE9YnQ/ZHQuYm9sZD0hMDpkZWxldGUgZHQuYm9sZDticmVhaztjYXNlImkiOiIvIiE9YnQ/ZHQuaXRhbGljPSEwOmRlbGV0ZSBkdC5pdGFsaWM7YnJlYWs7Y2FzZSJ1IjoiLyIhPWJ0P2R0LnVuZGVybGluZT0xOmRlbGV0ZSBkdC51bmRlcmxpbmU7YnJlYWs7Y2Fz'@;
put 'ZSJzIjoiLyIhPWJ0P2R0LnN0cmlrZT0hMDpkZWxldGUgZHQuc3RyaWtlfXJldHVybiBDdD1UdCtjdC5sZW5ndGgsY3R9KSxudH0sZnJvbV9zaGVldDpmdW5jdGlvbiBCZShHZSxudCl7dmFyIGR0PW50fHx7fSxjdD1udWxsIT1kdC5mb290ZXI/ZHQuZm9vdGVyOkhlLGJ0PVtudWxsIT1kdC5o'@;
put 'ZWFkZXI/ZHQuaGVhZGVyOlNlLCIiXSxGdD1bXSxrdD0obmV3IERhdGUpLnZhbHVlT2YoKTtHZXx8KEdlPXt9KSxHZVsiIXJlZiJdfHwoR2VbIiFyZWYiXT0iQTE6QTEiKTt2YXIgVHQ9V3MoR2VbIiFyZWYiXSk7aWYoZHQuZGVuc2U9QXJyYXkuaXNBcnJheShHZSksZHQuc2tpcGVuZCl7dmFy'@;
put 'IFp0PVR0LmUucjtlOmZvcig7WnQ+PVR0LnMucjstLVp0KWZvcih2YXIgcG49VHQuZS5jO3BuPj1UdC5zLmM7LS1wbilpZihudWxsIT0oKGR0LmRlbnNlPyhHZVtadF18fFtdKVtwbl06R2VbZGkoe3I6WnQsYzpwbn0pXSl8fHt9KS52KWJyZWFrIGU7VHQuZS5yPVp0O3ZhciBLbj1UdC5lLmM7'@;
put 'ZTpmb3IoO0tuPj1UdC5zLmM7LS1Lbilmb3IodmFyIHVuPVR0LmUucjt1bj49VHQucy5yOy0tdW4paWYobnVsbCE9KChkdC5kZW5zZT8oR2VbdW5dfHxbXSlbS25dOkdlW2RpKHtyOnVuLGM6S259KV0pfHx7fSkudilicmVhayBlO1R0LmUuYz1Lbn1idC5wdXNoKHZlKEdlLFR0LGR0KSk7Zm9y'@;
put 'KHZhciBxbj1UdC5zLnI7cW48PVR0LmUucjsrK3FuKWJ0LnB1c2gocmUoR2UsVHQscW4sZHQsRnQsa3QpKTtyZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK2N0KSxkdC5jc3MmJihidFsxXT0iPHN0eWxlPlxuIitGdC5tYXAoZnVuY3Rpb24oem4sa24pe3JldHVybiIuc2pzIitrdCsiLSIra24r'@;
put 'IiB7Iit6bisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24gdmYoeSxQLEkpe3ZhciBRPXt9O2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gUTt2YXIgcmU9Z2V0Q29tcHV0ZWRTdHlsZSh5KTtpZigoNzAwPT1yZVsiZm9u'@;
put 'dC13ZWlnaHQiXXx8ImJvbGQiPT1yZVsiZm9udC13ZWlnaHQiXSkmJihRLmJvbGQ9ITApLChyZVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYoUS5pdGFsaWM9ITApLChyZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvdW5kZXJsaW5lLykmJihRLnVuZGVybGlu'@;
put 'ZT0xKSwocmVbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoUS5zdHJpa2U9MSkscGFyc2VJbnQocmVbImZvbnQtc2l6ZSJdKSYmKFEuc3o9cGFyc2VGbG9hdChyZVsiZm9udC1zaXplIl0pKihyZVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEp'@;
put 'KSxyZVsiZm9udC1mYW1pbHkiXSYmKFEubmFtZT1yZVsiZm9udC1mYW1pbHkiXS5zcGxpdCgiLCIpWzBdLnJlcGxhY2UoL1xzKiJccyovZywiIikpLHJlLmNvbG9yKXt2YXIgZ2U9TjQocmUuY29sb3IudG9Mb3dlckNhc2UoKSwhMCk7Z2U+PTAmJihRLmNvbG9yPXtyZ2I6Z2V9KX1zd2l0Y2go'@;
put 'cmVbInRleHQtdHJhbnNmb3JtIl0mJihRLnRleHRfdHJhbnNmb3JtPXJlWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJub25lIiE9KHJlWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoUS5zaGFkb3c9ITApLHJlWyJ0ZXh0LWFsaWduIl0pe2Nhc2UiY2VudGVyIjpRLmFsaWdu'@;
put 'bWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7Y2FzZSJyaWdodCI6US5hbGlnbm1lbnQ9e2hvcml6b250YWw6InJpZ2h0In07YnJlYWs7Y2FzZSJsZWZ0IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoibGVmdCJ9O2JyZWFrO2Nhc2UianVzdGlmeSI6US5hbGlnbm1lbnQ9e2hvcml6'@;
put 'b250YWw6Imp1c3RpZnkifX1zd2l0Y2gocmVbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20iOlEuYWxpZ25tZW50fHwoUS5hbGlnbm1lbnQ9e30pLFEuYWxpZ25tZW50LnZlcnRpY2FsPXJlWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJtaWRkbGUiPT1R'@;
put 'LmFsaWdubWVudC52ZXJ0aWNhbCYmKFEuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIiKTticmVhaztjYXNlInN1YiI6Y2FzZSJzdXBlciI6US52YWxpZ249cmVbInZlcnRpY2FsLWFsaWduIl0sUS5zeiYmKFEuc3ovPS44Myl9dmFyIF9lPVAmJmdldENvbXB1dGVkU3R5bGUoUCk7cmV0dXJu'@;
put 'IF9lJiZJJiZQJiZbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT12ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt2ZS5zbGljZSgxKSxIZT1fZVsiYm9yZGVyLSIrdmUrIi1zdHlsZSJdO2lmKCgibm9uZSI9PUhlfHwhSGUpJiYoSGU9'@;
put 'X2VbImJvcmRlciIrU2UrIlN0eWxlIl0pLCJub25lIiE9SGUmJkhlKXt2YXIgQmU9cGFyc2VJbnQoX2VbImJvcmRlci0iK3ZlKyItd2lkdGgiXXx8X2VbImJvcmRlciIrU2UrIldpZHRoIl0sMTApLEdlPSJ0aGluIjtpZihCZT4wKXtzd2l0Y2goSGUpe2Nhc2UiZG91YmxlIjpHZT0iZG91Ymxl'@;
put 'IjticmVhaztjYXNlImRhc2hlZCI6R2U9QmU+PTI/Im1lZGl1bURhc2hlZCI6ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOkdlPUJlPj0yPyJtZWRpdW1EYXNoRG90RG90IjoiZG90dGVkIjticmVhaztjYXNlInNvbGlkIjpHZT1CZT49Mz8idGhpY2siOkJlPj0yPyJtZWRpdW0iOiJ0aGlu'@;
put 'In1pZihRW3ZlXT17c3R5bGU6R2V9LF9lWyJib3JkZXItIit2ZSsiLWNvbG9yIl18fF9lWyJib3JkZXIiK1NlKyJDb2xvciJdKXt2YXIgbnQ9TjQoKF9lWyJib3JkZXItIit2ZSsiLWNvbG9yIl18fF9lWyJib3JkZXIiK1NlKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtudD49MCYmKFFb'@;
put 'dmVdLmNvbG9yPXtyZ2I6bnR9KX19fX0pLFF9ZnVuY3Rpb24gb18oeSxQLEkpe3ZhciBRPXkuY2hpbGROb2RlcztpZigxPT15Lm5vZGVUeXBlKXN3aXRjaCh5LnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJwIjpQLmxlbmd0aD4wJiZQLnB1c2goe3Q6InQiLHY6IlxuIixzOkl9KTticmVh'@;
put 'aztjYXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIGFSKHksUCxJKXtQLnB1c2goe3Q6InQiLHY6eS5jaGlsZHJlblt5LnNlbGVjdGVkSW5kZXhdLmlubmVyVGV4dCxzOkl9KX0oeSxQLEkpfWlmKFEubGVuZ3RoPjApe3ZhciByZT12Zih5LG51bGwsITEpO0kmJihJLnVuZGVybGluZSYmKHJl'@;
put 'LnVuZGVybGluZT1JLnVuZGVybGluZSksSS5zdHJpa2UmJihyZS5zdHJpa2U9SS5zdHJpa2UpKTtmb3IodmFyIGdlPTA7Z2U8US5sZW5ndGg7KytnZSl7dHJ5e2lmKFFbZ2VdLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSljb250aW51ZX1jYXRjaHt9b18oUVtnZV0sUCxyZSl9ZGVsZXRl'@;
put 'IHJlLnRleHRfdHJhbnNmb3JtfWVsc2UgaWYoMz09eS5ub2RlVHlwZSl7dmFyIF9lPXt0OiJ0Iix2Onkubm9kZVZhbHVlLnJlcGxhY2UoL15bXG4gXSsvLCIgIikucmVwbGFjZSgvW1xuIF0rJC8sIiAiKSxzOkl9O3N3aXRjaChJLnRleHRfdHJhbnNmb3JtKXtjYXNlInVwcGVyY2FzZSI6X2Uu'@;
put 'dj1fZS52LnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOl9lLnY9X2Uudi50b0xvd2VyQ2FzZSgpfShQLmxlbmd0aD4wfHxfZS52JiYiICIhPV9lLnYpJiZQLnB1c2goX2UpfWVsc2UgMT09eS5ub2RlVHlwZSYmImJyIj09PXkudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZQLnB1'@;
put 'c2goe3Q6InQiLHY6IlxuIixzOkl9KX1mdW5jdGlvbiBzXyh5LFAsSSxRLHJlKXt2YXIgX2UsZ2U9eS5pbm5lckhUTUw7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiKXN3aXRjaChfZT1nZXRDb21wdXRlZFN0eWxlKHkpLChfZVsid2hpdGUtc3BhY2UiXXx8IiIpLm1hdGNoKC9wcmUv'@;
put 'KSYmKGdlPWdlLnJlcGxhY2UoL1xuL2csIjxici8+IikpLChfZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpnZT1nZS50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpnZT1nZS50b0xvd2VyQ2FzZSgpfXZhciB2ZT1mdW5j'@;
put 'dGlvbiBzUih5LFAsSSxRKXt2YXIgcmU9e3Q6InMiLHY6UH0sZ2U9IiI7aWYoeSl7ST15LmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fHkuZ2V0QXR0cmlidXRlKCJ0Iik7dmFyIF9lPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKXx8eS5nZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0oZ2U9eS5n'@;
put 'ZXRBdHRyaWJ1dGUoImRhdGEteiIpfHx5LmdldEF0dHJpYnV0ZSgieiIpKSYmKHJlLno9Z2UpLG51bGwhPUkmJm51bGwhPV9lKXJldHVybiByZS50PUkscmUudj1fZSxyZX1yZXR1cm4gbnVsbCE9UCYmKDA9PVAubGVuZ3RoP3JlLnQ9SXx8InoiOlEucmF3fHwhUC50cmltKCkubGVuZ3RofHwi'@;
put 'cyI9PUl8fChyZT0kbihQLFEpKSksZ2UmJihyZS56PWdlKSxyZX0oeSxPYyhnZSksSSxyZSk7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiJiYodmUucz12Zih5LFAscmUuYm9yZGVycyksZGVsZXRlIHZlLnMudGV4dF90cmFuc2Zvcm0seS5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT15'@;
put 'LmNoaWxkTm9kZXMubGVuZ3RoJiYzIT15LmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUpKXN3aXRjaChvXyh5LHZlLlI9W10sbnVsbCksdmUuUiYmdmUuUlt2ZS5SLmxlbmd0aC0xXSYmIlxuIj09dmUuUlt2ZS5SLmxlbmd0aC0xXS52JiZ2ZS5SLmxlbmd0aC0tLChfZVsidGV4dC10cmFuc2Zvcm0i'@;
put 'XXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjp2ZS5SLmZvckVhY2goZnVuY3Rpb24obnQpe250LnY9bnQudi50b1VwcGVyQ2FzZSgpfSk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihudCl7bnQudj1udC52LnRvTG93ZXJDYXNlKCl9KX1p'@;
put 'ZigicyI9PXZlLnQpe3ZhciBTZT12ZS52Lm1hdGNoKC9cbi8pOyFTZSYmdmUuUiYmdmUuUi5mb3JFYWNoKGZ1bmN0aW9uKG50KXsic3RyaW5nIj09dHlwZW9mIG50LnYmJm50LnYubWF0Y2goL1xuLykmJihTZT0hMCl9KSwicyI9PXZlLnQmJlNlJiYodmUuc3x8KHZlLnM9e30pLHZlLnMuYWxp'@;
put 'Z25tZW50fHwodmUucy5hbGlnbm1lbnQ9e30pLHZlLnMuYWxpZ25tZW50LndyYXBUZXh0PSEwKX1pZihQKXt2YXIgSGU9IiIsQmU9UC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQSIpO2lmKEJlJiZCZS5sZW5ndGgpZm9yKHZhciBHZT0wO0dlPEJlLmxlbmd0aCYmKCFCZVtHZV0uaGFzQXR0cmli'@;
put 'dXRlKCJocmVmIil8fCIjIj09KEhlPUJlW0dlXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSkuY2hhckF0KDApKTsrK0dlKTtIZSYmIiMiIT1IZS5jaGFyQXQoMCkmJih2ZS5sPXtUYXJnZXQ6SGV9KX1yZXR1cm4gdmV9ZnVuY3Rpb24gQU0oeSxQLEkpe3ZhciByZSxRPVAucm93cztpZighUSl7aWYo'@;
put 'SSYmbnVsbCE9SS5vcmlnaW4pdGhyb3ciVW5zdXBwb3J0ZWQgb3JpZ2luIHdoZW4gIitQLnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9uIGtNKHksUCxJKXtJPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoSXx8e30pKTt2YXIgZ2U9e3M6e3I6MCxjOjB9LGU6e3I6'@;
put 'MCxjOjB9fTt5WyIhbWVyZ2VzIl18fCh5WyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgdmUsX2U9UC5jaGlsZHJlbixTZT0wLEhlPTA7SGU8X2UubGVuZ3RoOysrSGUpe3ZhciBudCxCZT1fZVtIZV0sR2U9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9udD1nZXRDb21wdXRlZFN0'@;
put 'eWxlOkJlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBCZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihudD1CZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighbnR8'@;
put 'fCJub25lIiE9bnQoQmUpLmRpc3BsYXkpc3dpdGNoKEJlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6U2U9LTEseVsiIXJlZiJdJiYoSS5vcmlnaW49LTEpLEFNKHksQmUsSSk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6U2U9LTEseVsiIXJlZiJdPygrKyhnZT1Xcyh5WyIh'@;
put 'cmVmIl0pKS5lLnIseVsiIXJlZiJdPU9vKGdlKSk6eVsiIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6U2U9LTEsdmU9c18oQmUsbnVsbCwiIiwwLEkpLHlbIiFyZWYiXT8o'@;
put 'SS5vcmlnaW49LTEsczAoeSxbW3ZlXV0sSSkpOih5WyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5KHkpPyh5WzBdfHwoeVswXT1bXSkseVswXVswXT12ZSk6eS5BMT12ZSkseVsiIXJvd3MiXXx8KHlbIiFyb3dzIl09W10pLG50JiYoZ2U9V3MoeVsiIXJlZiJdKSwoR2U9bnQoQmUpLmhlaWdo'@;
put 'dCkmJiJhdXRvIiE9R2UmJih5WyIhcm93cyJdW2dlLmUucl09e2hwdDpwYXJzZUludChHZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNlIlUiOnZlPXNfKEJl'@;
put 'LG51bGwsIiIsMCxJKSx5WyIhcmVmIl18fCh5WyIhcmVmIl09IkExOkExIiksczAoeSxbW3ZlXV0se29yaWdpbjpkaSh7cjooU2U8MD8xOjApKyhnZT1Xcyh5WyIhcmVmIl0pKS5lLnIsYzorK1NlfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjpTZT0tMSxjb25zb2xlLmVy'@;
put 'cm9yKCJIVE1MIENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitCZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6U2U9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitCZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1yZXR1cm4geX0oeSxQ'@;
put 'LEkpfXRyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/cmU9Z2V0Q29tcHV0ZWRTdHlsZTpQLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBQLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKHJlPVAub3duZXJEb2N1'@;
put 'bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIGdlPUl8fHt9O251bGwhPXRlJiYoZ2UuZGVuc2U9dGUpO3ZhciBfZT0wLHZlPTA7aWYobnVsbCE9Z2Uub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgZ2Uub3JpZ2luKV9lPWdlLm9yaWdpbjtlbHNle3ZhciBT'@;
put 'ZT0ic3RyaW5nIj09dHlwZW9mIGdlLm9yaWdpbj9zcyhnZS5vcmlnaW4pOmdlLm9yaWdpbjtfZT1TZS5yLHZlPVNlLmN9dmFyIEhlPU1hdGgubWluKGdlLnNoZWV0Um93c3x8MWU3LFEubGVuZ3RoKSxCZT17czp7cjowLGM6MH0sZTp7cjpfZSxjOnZlfX07aWYoeVsiIXJlZiJdKXt2YXIgR2U9'@;
put 'V3MoeVsiIXJlZiJdKTtCZS5zLnI9TWF0aC5taW4oQmUucy5yLEdlLnMuciksQmUucy5jPU1hdGgubWluKEJlLnMuYyxHZS5zLmMpLEJlLmUucj1NYXRoLm1heChCZS5lLnIsR2UuZS5yKSxCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLEdlLmUuYyksLTE9PV9lJiYoQmUuZS5yPV9lPUdlLmUucisx'@;
put 'KX12YXIgbnQ9W10sZHQ9MCxDdD15WyIhcm93cyJdfHwoeVsiIXJvd3MiXT1bXSksY3Q9MCxidD0wLEZ0PTAsa3Q9MCxUdD0wLFp0PTA7Zm9yKHlbIiFjb2xzIl18fCh5WyIhY29scyJdPVtdKTtjdDxRLmxlbmd0aCYmYnQ8SGU7KytjdCl7Zm9yKHZhciBwbj1RW2N0XSxLbj1wbi5wYXJlbnRF'@;
put 'bGVtZW50OyJUQUJMRSIhPUtuLnRhZ05hbWUudG9VcHBlckNhc2UoKTspS249S24ucGFyZW50RWxlbWVudDtpZihLbj09UCl7ZTppZih0eXBlb2YgcmU8InUiKXt2YXIgdW49cmUocG4pO2lmKG51bGw9PXVuKWJyZWFrIGU7aWYodW4uc3R5bGV8fCh1bi5zdHlsZT17fSksZ2UuZGlzcGxheSYm'@;
put 'Im5vbmUiPT0odW4uZGlzcGxheXx8dW4uc3R5bGUuZGlzcGxheSkpY29udGludWU7Im5vbmUiPT0odW4uZGlzcGxheXx8dW4uc3R5bGUuZGlzcGxheSkmJigoQ3RbYnRdfHwoQ3RbYnRdPXt9KSkuaGlkZGVuPSEwKX12YXIgcW49cG4uY2VsbHM7Zm9yKEZ0PWt0PTA7RnQ8cW4ubGVuZ3RoOysr'@;
put 'RnQpe3ZhciB6bj1xbltGdF0sa249bnVsbDtpZighKHR5cGVvZiByZTwidSImJihudWxsPT1rbiYmKGtuPXJlKHpuKSksa24uc3R5bGV8fChrbi5zdHlsZT17fSksZ2UuZGlzcGxheSYmbnVsbCE9a24mJiJub25lIj09KGtuLmRpc3BsYXl8fGtuLnN0eWxlLmRpc3BsYXkpKSkpe2ZvcihadD0r'@;
put 'em4uZ2V0QXR0cmlidXRlKCJjb2xzcGFuIil8fDEsZHQ9MDtkdDxudC5sZW5ndGg7KytkdCl7dmFyIGVyPW50W2R0XTtlci5zLmM9PWt0K3ZlJiZlci5zLnI8YnQrX2UmJmJ0K19lPD1lci5lLnImJihrdD1lci5lLmMrMS12ZSxkdD0tMSl9KChUdD0rem4uZ2V0QXR0cmlidXRlKCJyb3dzcGFu'@;
put 'Iil8fDEpPjF8fFp0PjEpJiZudC5wdXNoKHtzOntyOmJ0K19lLGM6a3QrdmV9LGU6e3I6YnQrX2UrKFR0fHwxKS0xLGM6a3QrdmUrKFp0fHwxKS0xfX0pO3ZhciB0cj16bi5nZXRBdHRyaWJ1dGUoInQiKXx8IiIsWm49em4uZ2V0QXR0cmlidXRlKCJiZ2NvbG9yIik7ZTppZih0eXBlb2YgcmU8'@;
put 'InUiKXtpZihudWxsPT1rbiYmKGtuPXJlKHpuKSksbnVsbD09a24pYnJlYWsgZTtpZihrbi5zdHlsZXx8KGtuLnN0eWxlPXt9KSwxPT1adCYma24ud2lkdGgmJih5WyIhY29scyJdW2t0K3ZlXT15WyIhY29scyJdW2t0K3ZlXXx8e30sa24ud2lkdGgubWF0Y2goL3B4Lyk/eVsiIWNvbHMiXVtr'@;
put 'dCt2ZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KGtuLndpZHRoLDEwKSs1LHlbIiFjb2xzIl1ba3QrdmVdLndweHx8MCk6a24ud2lkdGgubWF0Y2goL3B0LykmJih5WyIhY29scyJdW2t0K3ZlXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChrbi53aWR0aCwxMCkvMys1LHlbIiFjb2xzIl1ba3Qr'@;
put 'dmVdLndweHx8MCkpKSxUdDw9MSl7Q3RbYnQrX2VdfHwoQ3RbYnQrX2VdPXt9KTt2YXIgQnI9a24uaGVpZ2h0OyhCcj1Cci5tYXRjaCgvcHQvKT9VMShwYXJzZUludChCciwxMCkpOnBhcnNlSW50KEJyLDEwKSk+KEN0W2J0K19lXS5ocHh8fFUxKEN0W2J0K19lXS5ocHQpfHwwKSYmKGRlbGV0'@;
put 'ZSBDdFtidCtfZV0uaHB0LEN0W2J0K19lXS5ocHg9QnIpfX12YXIgc2k9em47aWYoem4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PXpuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT16bi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIHhpPTAsSWk9em4u'@;
put 'Y2hpbGROb2RlcyxRcj0wO1FyPElpLmxlbmd0aDsrK1FyKTM9PUlpW1FyXS5ub2RlVHlwZSYmKyt4aTswPT14aSYmKHpuPXpuLmZpcnN0RWxlbWVudENoaWxkKX12YXIgdXI9c18oem4sc2ksdHIsMCxnZSk7aWYoa24pe3ZhciBBbj1yZSh6bik7aWYoQW4mJiFBbi5zdHlsZSYmKEFuLnN0eWxl'@;
put 'PXt9KSwoQW4mJkFuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fGtuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pJiYodXIuc3x8KHVyLnM9e30pLCF1ci5zLmZnQ29sb3IpKXRyeXt2YXIgdnI9QW4mJkFuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fGtuWyJiYWNrZ3JvdW5kLWNvbG9yIl07dnIubWF0Y2goL3Jn'@;
put 'YmFbKF1ccyowLipbKV0vaSkmJih2cj1rblsiYmFja2dyb3VuZC1jb2xvciJdKTt2YXIgcnI9TjQodnIudG9Mb3dlckNhc2UoKSwhMCk7cnI+PTAmJih1ci5zLmZnQ29sb3I9e3JnYjpycn0pfWNhdGNoe31zd2l0Y2goa25bInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UibWlkZGxlIjpjYXNlImJh'@;
put 'c2VsaW5lIjp1ci5zfHwodXIucz17fSksdXIucy5hbGlnbm1lbnR8fCh1ci5zLmFsaWdubWVudD17fSksdXIucy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciJ9fWlmKFpuJiYodXIuc3x8KHVyLnM9e30pLCF1ci5zLmZnQ29sb3IpKXRyeXt2YXIgU249TjQoWm4udG9Mb3dlckNhc2UoKSwh'@;
put 'MCk7U24+PTAmJih1ci5zLmZnQ29sb3I9e3JnYjpTbn0pfWNhdGNoe31pZihnZS5kZW5zZT8oeVtidCtfZV18fCh5W2J0K19lXT1bXSkseVtidCtfZV1ba3QrdmVdPXVyKTp5W2RpKHtjOmt0K3ZlLHI6YnQrX2V9KV09dXIsVHQ+MXx8WnQ+MSlmb3IodmFyIG1yPWJ0O21yPGJ0K1R0OysrbXIp'@;
put 'Zm9yKHZhciB3aT1rdDt3aTxrdCtadDsrK3dpKWJ0PT1tciYma3Q9PXdpfHwoZ2UuZGVuc2U/KHlbbXIrX2VdfHwoeVttcitfZV09W10pLHlbbXIrX2VdW3dpK3ZlXT17dDoieiIsczpvbih1ci5zfHx7fSl9KTp5W2RpKHtjOndpK3ZlLHI6bXIrX2V9KV09e3Q6InoiLHM6b24odXIuc3x8e30p'@;
put 'fSk7QmUuZS5jPGt0K3ZlJiYoQmUuZS5jPWt0K3ZlKSxrdCs9WnR9fSsrYnR9fWlmKG50Lmxlbmd0aCYmKHlbIiFtZXJnZXMiXT0oeVsiIW1lcmdlcyJdfHxbXSkuY29uY2F0KG50KSksQmUuZS5yPU1hdGgubWF4KEJlLmUucixidC0xK19lKSx5WyIhcmVmIl09T28oQmUpLGJ0Pj1IZSYmKHlb'@;
put 'IiFmdWxscmVmIl09T28oKEJlLmUucj1RLmxlbmd0aC1jdCtidC0xK19lLEJlKSkpLGdlLmJvcmRlcnMpZm9yKGJ0PUJlLnMucjtidDw9QmUuZS5yOysrYnQpZm9yKGt0PUJlLnMuYztrdDw9QmUuZS5jOysra3QpaWYoIWdlLmRlbnNlKXt2YXIgVXI9eVtkaSh7cjpidCxjOmt0fSldO2lmKCFV'@;
put 'cnx8IVVyLnMpY29udGludWU7aWYoYnQ+MCl7dmFyIGppPXlbZGkoe3I6YnQtMSxjOmt0fSldO2ppJiZqaS5zJiZqaS5zLmJvdHRvbSYmZGVsZXRlIFVyLnMudG9wfWlmKGt0PjApe3ZhciBfbz15W2RpKHtyOmJ0LGM6a3QtMX0pXTtfbyYmX28ucyYmX28ucy5ib3R0b20mJmRlbGV0ZSBVci5z'@;
put 'LmxlZnR9fXJldHVybiB5fWZ1bmN0aW9uIEh1KHksUCl7cmV0dXJuIEFNKChQfHx7fSkuZGVuc2U/W106e30seSxQKX12YXIgUTA9ZnVuY3Rpb24oKXt2YXIgeT1mdW5jdGlvbihRLHJlLGdlKXt2YXIgX2U9US5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2cs'@;
put 'IiAiKS5yZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oQmUsR2Upe3JldHVybiBBcnJheShwYXJzZUludChHZSwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5y'@;
put 'ZXBsYWNlKC88dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIiksdmU9eHIoX2UucmVwbGFjZSgvPFtePl0qPi9nLCIiKSksU2U9W10sSGU9MDtyZXR1cm4gX2UucmVwbGFjZSgvKDx0ZXh0OnNwYW4uKj8+KSguKj8pPFtcL110ZXh0OnNwYW4+L2csZnVuY3Rpb24oQmUsR2UsbnQsZHQpe2R0IT1I'@;
put 'ZSYmU2UucHVzaCh7dDoicyIsdjp4cihfZS5zbGljZShIZSxkdCkpfSk7dmFyIEN0PXt0OiJzIix2OnhyKG50KX0sY3Q9bG4oR2UpWyJzdHlsZS1uYW1lIl07cmV0dXJuIGN0JiZnZVtjdF0mJihDdC5zPW9uKGdlW2N0XSkpLFNlLnB1c2goQ3QpLEhlPWR0K0JlLmxlbmd0aCwiIn0pLEhlPF9l'@;
put 'Lmxlbmd0aCYmU2UucHVzaCh7dDoicyIsdjp4cihfZS5zbGljZShIZSkpfSksW3ZlLFNlXX0sUD17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpbInMiLCJzcyJdLCJhbS1w'@;
put 'bSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX0sST1mdW5jdGlvbihRLHJlKXt2YXIgZ2U9bG4oUS5zbGljZSgwLFEuaW5kZXhPZigiPiIpKSksX2U9US5zbGljZShR'@;
put 'LmluZGV4T2YoIj4iKSsxKSx2ZT17bmFtZTpnZS5uYW1lLGZhbWlseTpnZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKEhl'@;
put 'KXtnZVtIZVsxXV0mJih2ZVtIZVswXV09Z2VbSGVbMV1dKX0pO3ZhciBTZT17fTtfZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEhlKXt2YXIgQmU9bG4oSGUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0aWVzIj09PUJlWzBdKXtpZihCZVsiZm9udC13ZWlnaHQiXSYmKFNlLmJvbGQ9KygiYm9sZCI9'@;
put 'PUJlWyJmb250LXdlaWdodCJdfHwiNzAwIj09QmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PUJlWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09QmVbImZvbnQtc3R5bGUiXSkmJihTZS5pdGFsaWM9MSksIm5vbmUiIT0oQmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/'@;
put 'U2UudW5kZXJsaW5lPSJkb3VibGUiPT1CZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooQmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09QmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXSkmJihTZS51bmRlcmxpbmU9MCksKEJlWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9w'@;
put 'dCQvKSYmKFNlLnN6PStCZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oQmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJihTZS5zdHJpa2U9MSksQmVbImZvbnQtbmFtZSJdJiYoU2UubmFtZT1CZVsiZm9udC1uYW1lIl0pLEJlLmNvbG9yKXt2'@;
put 'YXIgR2U9TjQoQmUuY29sb3IsITApO0dlPj0wJiYoU2UuY29sb3I9R2UpfXN3aXRjaChCZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjpTZS52YWxpZ249InN1cGVyIjticmVhaztjYXNlInN1YiI6U2UudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KEJlWyJ0ZXh0LXBvc2l0aW9u'@;
put 'Il18fCIiKS5tYXRjaCgvJS8pJiYoU2UudmFsaWduPSItIj09QmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oQmVbInRleHQtc2hhZG93Il18fCJub25lIikmJihTZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxyZVtnZS5uYW1lXT1TZX07cmV0dXJu'@;
put 'IGZ1bmN0aW9uKHJlLGdlKXt2YXIgX2U9Z2V8fHt9O251bGwhPXRlJiZudWxsPT1fZS5kZW5zZSYmKF9lLmRlbnNlPXRlKTt2YXIgSGUsQmUsQ3QsY3QsVHQsWnQsdmU9UXYocmUpLFNlPVtdLEdlPXtuYW1lOiIifSxudD0iIixkdD0wLGJ0PXt9LEZ0PVtdLGt0PV9lLmRlbnNlP1tdOnt9LHBu'@;
put 'PXt2YWx1ZToiIn0sS249IiIsdW49MCx6bj1bXSxrbj0tMSxlcj0tMSx0cj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxabj0wLEJyPXt9LHNpPVtdLHhpPXt9LElpPTAsUXI9MCx1cj1bXSxBbj0xLHZyPTEscnI9W10sU249e05hbWVzOltdfSxtcj17fSx3aT1bIiIsIiJdLFVyPVtd'@;
put 'LGppPXt9LF9vPXt9LFRpPTAsWW89IiIsbG89MCxBbz0hMSx4bz0hMSxoaT0wO2ZvcihWci5sYXN0SW5kZXg9MCx2ZT12ZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO1R0PVZyLmV4ZWModmUpOylz'@;
put 'd2l0Y2goVHRbM109VHRbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09VHRbMV0/KGt0WyIhcmVmIl09dHIuZS5jPj10ci5zLmMmJnRyLmUucj49dHIucy5yP09vKHRyKToiQTE6QTEiLF9lLnNoZWV0Um93cz4wJiZfZS5z'@;
put 'aGVldFJvd3M8PXRyLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0sdHIuZS5yPV9lLnNoZWV0Um93cy0xLGt0WyIhcmVmIl09T28odHIpKSxzaS5sZW5ndGgmJihrdFsiIW1lcmdlcyJdPXNpKSx1ci5sZW5ndGgmJihrdFsiIXJvd3MiXT11ciksQ3QubmFtZT1DdC5cdTU0MGRcdTc5'@;
put 'ZjB8fEN0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShDdCksRnQucHVzaChDdC5uYW1lKSxidFtDdC5uYW1lXT1rdCx4bz0hMSk6Ii8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmKEN0PWxuKFR0WzBdLCExKSxrbj1lcj0tMSx0ci5zLnI9dHIucy5jPTFl'@;
put 'Nyx0ci5lLnI9dHIuZS5jPTAsa3Q9X2UuZGVuc2U/W106e30sc2k9W10sdXI9W10seG89ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1UdFsxXT8tLVpuOisrWm47YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1UdFsxXSl7a24rPUFuLEFu'@;
put 'PTE7YnJlYWt9aWYoKGN0PWxuKFR0WzBdLCExKSkuXHU4ODRjXHU1M2Y3P2tuPWN0Llx1ODg0Y1x1NTNmNy0xOi0xPT1rbiYmKGtuPTApLChBbj0rY3RbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcihoaT0wO2hpPEFuOysraGkpWm4+MCYmKHVyW2tuK2hpXT17bGV2ZWw6Wm59'@;
put 'KTtlcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09VHRbMV0mJisrZXIsX2Uuc2hlZXRTdHVicyYmKF9lLmRlbnNlPyhrdFtrbl18fChrdFtrbl09W10pLGt0W2tuXVtlcl09e3Q6InoifSk6a3RbZGkoe3I6a24sYzplcn0pXT17dDoieiJ9KSxLbj0iIix6bj1bXTti'@;
put 'cmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpKSsrZXIscG49bG4oVHRbMF0sITEpLHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLFp0PXt0OiJ6Iix2Om51'@;
put 'bGx9LHBuLmZvcm11bGEmJjAhPV9lLmNlbGxGb3JtdWxhJiYoWnQuZj1sUyh4cihwbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0ocG4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxwblsidmFsdWUtdHlwZSJdKSYmKFp0LnQ9InMiLFp0LnY9eHIocG5bInN0cmluZy12YWx1ZSJdfHwiIiksX2Uu'@;
put 'ZGVuc2U/KGt0W2tuXXx8KGt0W2tuXT1bXSksa3Rba25dW2VyXT1adCk6a3RbZGkoe3I6a24sYzplcn0pXT1adCksZXIrPXZyLTE7ZWxzZSBpZigiLyIhPT1UdFsxXSl7dnI9MTt2YXIgdGE9QW4/a24rQW4tMTprbjtpZigrK2VyPnRyLmUuYyYmKHRyLmUuYz1lciksZXI8dHIucy5jJiYodHIu'@;
put 'cy5jPWVyKSxrbjx0ci5zLnImJih0ci5zLnI9a24pLHRhPnRyLmUuciYmKHRyLmUucj10YSksVXI9W10samk9e30sWnQ9e3Q6KHBuPWxuKFR0WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxwblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sX2UuY2VsbEZvcm11bGEpaWYocG4uZm9y'@;
put 'bXVsYSYmKHBuLmZvcm11bGE9eHIocG4uZm9ybXVsYSkpLHBuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZwblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKElpPXBhcnNlSW50KHBuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxRcj1wYXJz'@;
put 'ZUludChwblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsWnQuRj1Pbyh4aT17czp7cjprbixjOmVyfSxlOntyOmtuK0lpLTEsYzplcitRci0xfX0pLHJyLnB1c2goW3hpLFp0LkZdKSkscG4uZm9ybXVsYSladC5mPWxTKHBuLmZvcm11bGEpO2Vsc2UgZm9yKGhpPTA7'@;
put 'aGk8cnIubGVuZ3RoOysraGkpa24+PXJyW2hpXVswXS5zLnImJmtuPD1ycltoaV1bMF0uZS5yJiZlcj49cnJbaGldWzBdLnMuYyYmZXI8PXJyW2hpXVswXS5lLmMmJihadC5GPXJyW2hpXVsxXSk7c3dpdGNoKChwblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxwblsibnVtYmVyLXJvd3Mt'@;
put 'c3Bhbm5lZCJdKSYmKElpPXBhcnNlSW50KHBuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLFFyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLHNpLnB1c2goeGk9e3M6e3I6a24sYzplcn0sZTp7cjprbitJaS0xLGM6ZXIrUXItMX19KSkscG5bIm51'@;
put 'bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJih2cj1wYXJzZUludChwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLFp0LnQpe2Nhc2UiYm9vbGVhbiI6WnQudD0iYiIsWnQudj15cihwblsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2Ui'@;
put 'OmNhc2UiY3VycmVuY3kiOlp0LnQ9Im4iLFp0LnY9cGFyc2VGbG9hdChwbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpadC50PSJkIixadC52PUh0KHBuWyJkYXRlLXZhbHVlIl0pLF9lLmNlbGxEYXRlc3x8KFp0LnQ9Im4iLFp0LnY9VWUoWnQudikpLFp0Lno9Im0vZC95eSI7YnJlYWs7Y2Fz'@;
put 'ZSJ0aW1lIjpadC50PSJuIixadC52PW90KHBuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLF9lLmNlbGxEYXRlcyYmKFp0LnQ9ImQiLFp0LnY9aHQoWnQudikpLFp0Lno9IkhIOk1NOlNTIjticmVhaztjYXNlIm51bWJlciI6WnQudD0ibiIsWnQudj1wYXJzZUZsb2F0KHBuLlx1NjU3MFx1NjM2ZVx1'@;
put 'NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PVp0LnQmJiJ0ZXh0IiE9PVp0LnQmJlp0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrWnQudCk7WnQudD0icyIsbnVsbCE9cG5bInN0cmluZy12YWx1ZSJdJiYoS249eHIocG5bInN0cmlu'@;
put 'Zy12YWx1ZSJdKSx6bj1bXSl9fWVsc2V7aWYoQW89ITEsInMiPT09WnQudCYmKFp0LnY9S258fCIiLHpuLmxlbmd0aCYmKFp0LlI9em4pLEFvPTA9PXVuKSxtci5UYXJnZXQmJihadC5sPW1yKSxVci5sZW5ndGg+MCYmKFp0LmM9VXIsVXI9W10pLEtuJiYhMSE9PV9lLmNlbGxUZXh0JiYoWnQu'@;
put 'dz1LbiksQW8mJihadC50PSJ6IixkZWxldGUgWnQudiksX2UuY2VsbEhUTUwmJihadC5oPVp0LlI/azkoWnQuUik6cm8oIiIrWnQudikpLCghQW98fF9lLnNoZWV0U3R1YnMpJiYhKF9lLnNoZWV0Um93cyYmX2Uuc2hlZXRSb3dzPD1rbikpZm9yKHZhciBNbj0wO01uPEFuOysrTW4pe2lmKHZy'@;
put 'PXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLF9lLmRlbnNlKWZvcihrdFtrbitNbl18fChrdFtrbitNbl09W10pLGt0W2tuK01uXVtlcl09MD09TW4/WnQ6b24oWnQpOy0tdnI+MDspa3Rba24rTW5dW2VyK3ZyXT1vbihadCk7ZWxzZSBmb3Ioa3RbZGko'@;
put 'e3I6a24rTW4sYzplcn0pXT1adDstLXZyPjA7KWt0W2RpKHtyOmtuK01uLGM6ZXIrdnJ9KV09b24oWnQpO3RyLmUuYzw9ZXImJih0ci5lLmM9ZXIpfWVyKz0odnI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsdnI9MCxadD17fSxLbj0iIix6bj1b'@;
put 'XX1tcj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJm'@;
put 'b250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09VHRbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJlNlLnB1c2goW1R0WzNdLCEwXSk7YnJl'@;
put 'YWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZTtqaS50PUtuLHpuLmxlbmd0aCYmKGppLlI9em4pLGppLmE9WW8sVXIucHVzaChqaSl9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5s'@;
put 'ZW5ndGgtMikmJlNlLnB1c2goW1R0WzNdLCExXSk7WW89IiIsbG89MCxLbj0iIix1bj0wLHpuPVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09VHRbMV0/WW89dmUuc2xpY2UobG8sVHQuaW5kZXgpOmxvPVR0LmluZGV4K1R0WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1'@;
put 'MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6'@;
put 'Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09VHRbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0h'@;
put 'PT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJlNlLnB1c2goW1R0WzNdLCExXSk7S249IiIsdW49MCx6bj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJj'@;
put 'dXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRh'@;
put 'YmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxl'@;
put 'IjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2Ui'@;
put 'dGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4'@;
put 'cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2Ui'@;
put 'ZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRl'@;
put 'bnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHls'@;
put 'ZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVy'@;
put 'LXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2Vu'@;
put 'ZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJz'@;
put 'aGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1k'@;
put 'dXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRl'@;
put 'ZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90'@;
put 'LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmll'@;
put 'bGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1s'@;
put 'aW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUi'@;
put 'OmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PVR0WzFdKXtpZihCcltHZS5uYW1lXT1udCwoSGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0hlfWVsc2UiLyIhPT1UdFswXS5jaGFyQXQoVHRb'@;
put 'MF0ubGVuZ3RoLTIpJiYobnQ9IiIsR2U9bG4oVHRbMF0sITEpLFNlLnB1c2goW1R0WzNdLCEwXSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1UdFswXS5zbGljZSgtMik/SShUdFswXSxfbyk6Ii8iPT1UdFsxXT9JKHZlLnNsaWNlKFRpLFR0LmluZGV4K1R0WzBdLmxlbmd0aCksX28pOlRp'@;
put 'PVR0LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNh'@;
put 'c2UiYW0tcG0iOnN3aXRjaChTZVtTZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpCZT1sbihUdFswXSwhMSksbnQrPVBbVHRbM11dWyJsb25nIj09PUJlLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09VHRbMF0uc2xpY2UoLTIp'@;
put 'KWJyZWFrO2lmKCIvIj09PVR0WzFdKXN3aXRjaChTZVtTZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6bnQrPXZlLnNsaWNlKGR0LFR0LmluZGV4KX1lbHNlIGR0PVR0LmluZGV4K1R0WzBdLmxlbmd0aDticmVhaztj'@;
put 'YXNlIm5hbWVkLXJhbmdlIjp3aT15digoQmU9bG4oVHRbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBNcz17TmFtZTpCZS5uYW1lLFJlZjp3aVswXSsiISIrd2lbMV19O3hvJiYoTXMuU2hlZXQ9RnQubGVuZ3RoKSxTbi5OYW1lcy5wdXNoKE1zKTticmVhaztjYXNlInAiOmNh'@;
put 'c2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKFNlW1NlLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09VHRbMV18fHBuJiZwblsic3RyaW5nLXZhbHVlIl0pbG4oVHRbMF0sITEpLHVuPVR0LmluZGV4K1R0WzBdLmxlbmd0aDtlbHNle3Zh'@;
put 'ciB5cz15KHZlLnNsaWNlKHVuLFR0LmluZGV4KSwwLF9vKTtLbj0oS24ubGVuZ3RoPjA/S24rIlxuIjoiIikreXNbMF0sem49eXNbMV19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09VHRbMV0pYnJlYWs7dHJ5e2J0Wyh3aT15dihsbihUdFswXSlbInRhcmdldC1yYW5nZS1h'@;
put 'ZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjp3aVsxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09VHRbMV0pe2lmKCEobXI9bG4oVHRbMF0sITEpKS5ocmVmKWJyZWFrO21yLlRhcmdldD14cihtci5ocmVmKSxkZWxldGUgbXIuaHJlZiwiIyI9PW1yLlRhcmdldC5j'@;
put 'aGFyQXQoMCkmJm1yLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KHdpPXl2KG1yLlRhcmdldC5zbGljZSgxKSksbXIuVGFyZ2V0PSIjIit3aVswXSsiISIrd2lbMV0pOm1yLlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKG1yLlRhcmdldD1tci5UYXJnZXQuc2xpY2UoMykpfWJyZWFrO2Rl'@;
put 'ZmF1bHQ6c3dpdGNoKFR0WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2Ui'@;
put 'XHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihfZS5XVEYpdGhyb3cgbmV3IEVycm9yKFR0KX19dmFyIEVsPXtTaGVldHM6YnQsU2hlZXROYW1lczpGdCxXb3JrYm9vazpTbn07cmV0dXJuIF9lLmJvb2tTaGVldHMmJmRlbGV0ZSBFbC5TaGVldHMsRWx9fSgpO2Z1bmN0aW9uIGFfKHksUCl7cmV0'@;
put 'dXJuIFEwKHksUCl9dmFyIEsxPWZ1bmN0aW9uKCl7dmFyIHk9WyIgIDxvZmZpY2U6bWFzdGVyLXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxlOm5hbWU9Im1wMSIgc3R5bGU6cGFnZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVhZGVyLz4iLCcgICAg'@;
put 'ICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwvb2ZmaWNlOm1hc3Rl'@;
put 'ci1zdHlsZXM+Il0uam9pbigiXG4iKSxQPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK1BhKHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3Vt'@;
put 'ZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46'@;
put 'b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIs'@;
put 'InhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5z'@;
put 'OnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSsiPlxuIit5KyJcbjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5jdGlvbigpe3JldHVy'@;
put 'biBCbitQfX0oKSx2MD1mdW5jdGlvbigpe3ZhciB5PWZ1bmN0aW9uKHZlLFNlKXtyZXR1cm4gSHIodmUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKEhlKXtyZXR1cm4nPHRleHQ6cyB0ZXh0OmM9IicrSGUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6dGFiLz4iKS5yZXBs'@;
put 'YWNlKC9cbi9nLFNlPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIpLnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQvLCI8dGV4dDpzLz4iKX0sUD1mdW5jdGlvbih2ZSl7cmV0dXJuIHZlLm1hcChmdW5jdGlvbihTZSl7dmFyIEhlPSIiO3JldHVy'@;
put 'biBudWxsIT1TZS5vZHMmJihIZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK1NlLm9kcysnIicpLFNlLnY/Ijx0ZXh0OnNwYW4iK0hlKyI+Iit5KFNlLnYsITApKyI8L3RleHQ6c3Bhbj4iOiIifSkuam9pbigiIil9LEk9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAvPlxuIixyZT1mdW5j'@;
put 'dGlvbih2ZSxTZSxIZSl7dmFyIEJlPVtdO0JlLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK0hyKFNlLlNoZWV0TmFtZXNbSGVdKSsnIiB0YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIEdlPTAsbnQ9MCxkdD1Xcyh2ZVsiIXJlZiJdfHwiQTEiKSxDdD12ZVsi'@;
put 'IW1lcmdlcyJdfHxbXSxjdD0wLGJ0PUFycmF5LmlzQXJyYXkodmUpO2lmKHZlWyIhY29scyJdKWZvcihudD0wO250PD1kdC5lLmM7KytudClCZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyh2ZVsiIWNvbHMiXVtudF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrdmVbIiFj'@;
put 'b2xzIl1bbnRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIga3Q9dmVbIiFyb3dzIl18fFtdO2ZvcihHZT0wO0dlPGR0LnMucjsrK0dlKUJlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W0dlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytr'@;
put 'dFtHZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7R2U8PWR0LmUucjsrK0dlKXtmb3IoQmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W0dlXS5vZHMrJyInOiIiKSsiPlxuIiksbnQ9'@;
put 'MDtudDxkdC5zLmM7KytudClCZS5wdXNoKEkpO2Zvcig7bnQ8PWR0LmUuYzsrK250KXt2YXIgVHQ9ITEsWnQ9e30scG49IiI7Zm9yKGN0PTA7Y3QhPUN0Lmxlbmd0aDsrK2N0KWlmKCEoQ3RbY3RdLnMuYz5udHx8Q3RbY3RdLnMucj5HZXx8Q3RbY3RdLmUuYzxudHx8Q3RbY3RdLmUucjxHZSkp'@;
put 'eyhDdFtjdF0ucy5jIT1udHx8Q3RbY3RdLnMuciE9R2UpJiYoVHQ9ITApLFp0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkIl09Q3RbY3RdLmUuYy1DdFtjdF0ucy5jKzEsWnRbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1DdFtjdF0uZS5yLUN0W2N0XS5zLnIrMTticmVha31p'@;
put 'ZihUdClCZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBLbj1kaSh7cjpHZSxjOm50fSksdW49YnQ/KHZlW0dlXXx8W10pW250XTp2ZVtLbl07aWYodW4mJnVuLmYmJihadFsidGFibGU6Zm9ybXVsYSJdPUhyKGNTKHVuLmYpKSx1bi5G'@;
put 'JiZ1bi5GLnNsaWNlKDAsS24ubGVuZ3RoKT09S24pKXt2YXIgcW49V3ModW4uRik7WnRbInRhYmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09cW4uZS5jLXFuLnMuYysxLFp0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPXFuLmUuci1xbi5zLnIrMX1pZih1'@;
put 'bil7c3dpdGNoKHVuLnQpe2Nhc2UiYiI6cG49dW4udj8iVFJVRSI6IkZBTFNFIixadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsWnRbIm9mZmljZTpib29sZWFuLXZhbHVlIl09dW4udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOnBuPXVuLnd8fFN0cmluZyh1bi52fHww'@;
put 'KSxadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLFp0WyJvZmZpY2U6dmFsdWUiXT11bi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOnBuPXVuLnYsWnRbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpwbj11bi53fHxIdCh1bi52KS50b0lTT1N0'@;
put 'cmluZygpLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixadFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1IdCh1bi52KS50b0lTT1N0cmluZygpLFp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpCZS5wdXNoKEkpO2NvbnRpbnVlfW51bGwhPXVuLm9kcyYmIVp0'@;
put 'WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihadFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrdW4ub2RzKTt2YXIgem49IXVuLlJ8fHVuLmwmJnVuLmwuVGFyZ2V0P3kocG4pOlAodW4uUik7aWYodW4ubCYmdW4ubC5UYXJnZXQpe3ZhciBrbj11bi5sLlRhcmdldDsiIyIhPShrbj0iIyI9PWtuLmNo'@;
put 'YXJBdCgwKT8iIyIrdVMoa24uc2xpY2UoMSkpOmtuKS5jaGFyQXQoMCkmJiFrbi5tYXRjaCgvXlx3KzovKSYmKGtuPSIuLi8iK2tuKSx6bj1TcigidGV4dDphIix6bix7InhsaW5rOmhyZWYiOmtuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfUJlLnB1c2goIiAgICAgICAgICAiK1NyKCJ0YWJs'@;
put 'ZTp0YWJsZS1jZWxsIixTcigidGV4dDpwIix6bix7fSksWnQpKyJcbiIpfWVsc2UgQmUucHVzaChJKX19QmUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBCZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksQmUuam9pbigiIil9LGdlPXtjZW50ZXI6'@;
put 'ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oU2UsSGUpe3ZhciBCZT1bQm5dLEdlPVBhKHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2Fz'@;
put 'aXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEu'@;
put 'MCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3'@;
put 'dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0Yzpv'@;
put 'cGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3Zn'@;
put 'LWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93'@;
put 'd3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9v'@;
put 'byI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3Jn'@;
put 'LzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5j'@;
put 'ZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjox'@;
put 'LjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdv'@;
put 'b28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlv'@;
put 'bjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhw'@;
put 'ZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksbnQ9UGEoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRv'@;
put 'Y3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09SGUuYm9va1R5cGU/KEJlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK0dlK250KyI+XG4iKSxCZS5wdXNoKFM0'@;
put 'KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOkJlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrR2UrIj5cbiIpLGZ1bmN0aW9uKHZlLFNlKXt2YXIgSGU9W10sQmU9e307SGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5c'@;
put 'biIpLEhlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxIZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksSGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88'@;
put 'L251bWJlcjp0ZXh0PlxuIiksSGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxIZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxIZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksSGUucHVzaCgiICA8L251bWJlcjpk'@;
put 'YXRlLXN0eWxlPlxuIik7dmFyIEdlPTA7U2UuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBTZS5TaGVldHNbY3RdfSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYoY3QmJmN0WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxjdFsiIWNvbHMiXS5sZW5ndGg7KytidClpZihjdFsi'@;
put 'IWNvbHMiXVtidF0pe3ZhciBGdD1jdFsiIWNvbHMiXVtidF07aWYobnVsbD09RnQud2lkdGgmJm51bGw9PUZ0LndweCYmbnVsbD09RnQud2NoKWNvbnRpbnVlO3B1KEZ0KSxGdC5vZHM9R2U7dmFyIGt0PWN0WyIhY29scyJdW2J0XS53cHgrInB4IjtIZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBz'@;
put 'dHlsZTpuYW1lPSJjbycrR2UrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksSGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicpLEhlLnB1c2goIiAg'@;
put 'PC9zdHlsZTpzdHlsZT5cbiIpLCsrR2V9fSk7dmFyIG50PTA7U2UuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBTZS5TaGVldHNbY3RdfSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYoY3QmJmN0WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxjdFsiIXJvd3MiXS5sZW5ndGg7'@;
put 'KytidClpZihjdFsiIXJvd3MiXVtidF0pe2N0WyIhcm93cyJdW2J0XS5vZHM9bnQ7dmFyIEZ0PWN0WyIhcm93cyJdW2J0XS5ocHgrInB4IjtIZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrbnQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksSGUucHVzaCgn'@;
put 'ICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0iJytGdCsnIi8+XG4nKSxIZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK250fX0pLEhlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIg'@;
put 'c3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLEhlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLEhlLnB1c2goIiAgPC9zdHlsZTpz'@;
put 'dHlsZT5cbiIpLEhlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBkdD0yO250PTAsU2UuU2hl'@;
put 'ZXROYW1lcy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBTZS5TaGVldHNbY3RdfSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYoY3QpZm9yKHZhciBidD0wLEZ0PTAsa3Q9V3MoY3RbIiFyZWYiXSksVHQ9QXJyYXkuaXNBcnJheShjdCk7YnQ8PWt0LmUucjsrK2J0KWZvcihGdD0wO0Z0PD1rdC5l'@;
put 'LmM7KytGdCl7dmFyIFp0PWRpKHtyOmJ0LGM6RnR9KSxwbj1UdD8oY3RbYnRdfHxbXSlbRnRdOmN0W1p0XTtpZihwbiYmKHBuLnN8fHBuLlIpKXt2YXIgS249W107cG4ucyYmS24ucHVzaChbcG4sITBdKSxwbi5SJiZwbi5SLmZvckVhY2goZnVuY3Rpb24odW4pe3VuJiZ1bi5zJiZLbi5wdXNo'@;
put 'KFt1biwhMV0pfSksS24uZm9yRWFjaChmdW5jdGlvbih1bil7dmFyIHFuPXVuWzBdLHpuPXFuLnMsa249IiIsZXI9eyJzdHlsZTpuYW1lIjoodW5bMV0/ImNlIjoiVCIpK2R0LCJzdHlsZTpmYW1pbHkiOnVuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O3VuWzFdJiYoZXJbInN0eWxlOnBhcmVu'@;
put 'dC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLGVyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgdHI9e30sWm49ITEsQnI9e30sc2k9ITEseGk9e30sSWk9ITE7aWYoem4uY29sb3ImJihCclsiZm86Y29sb3IiXT0iIyIrT3Uoem4uY29sb3IucmdiKSxzaT0hMCksem4uc3omJihC'@;
put 'clsiZm86Zm9udC1zaXplIl09em4uc3orInB0IixzaT0hMCksem4uYm9sZCYmKEJyWyJmbzpmb250LXdlaWdodCJdPSJib2xkIixzaT0hMCksem4uaXRhbGljJiYoQnJbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixzaT0hMCksem4ubmFtZSYmKEJlW3puLm5hbWVdfHwoQmVbem4ubmFtZV09'@;
put 'em4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK3puLm5hbWUrIiZhcG9zOyI6em4ubmFtZSksQnJbInN0eWxlOmZvbnQtbmFtZSJdPXpuLm5hbWUsc2k9ITApLHpuLnN0cmlrZSYmKEJyWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsQnJbInN0eWxlOnRleHQtbGlu'@;
put 'ZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixzaT0hMCksem4udW5kZXJsaW5lJiYoQnJbInN0eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixCclsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsQnJbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZv'@;
put 'bnQtY29sb3IiLHNpPSEwKSx1blsxXSl7aWYoem4uYWxpZ25tZW50KXt2YXIgUXI9em4uYWxpZ25tZW50O1FyLndyYXBUZXh0JiYodHJbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLFpuPSEwKSxRci52ZXJ0aWNhbCYmKHRyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1Rci52'@;
put 'ZXJ0aWNhbD8ibWlkZGxlIjpRci52ZXJ0aWNhbCxabj0hMCksZ2VbUXIuaG9yaXpvbnRhbF0mJih4aVsiZm86dGV4dC1hbGlnbiJdPWdlW1FyLmhvcml6b250YWxdLElpPSEwKX16bi5mZ0NvbG9yJiYodHJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrT3Uoem4uZmdDb2xvci5yZ2IpLFpu'@;
put 'PSEwKX1abiYmKGtuKz1Tcigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLHRyKSksc2kmJihrbis9U3IoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCxCcikpLElpJiYoa24rPVNyKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCx4aSkpLEhlLnB1c2goIiAg'@;
put 'IitTcigic3R5bGU6c3R5bGUiLGtuLGVyKSsiXG4iKSxxbi5vZHM9ZHQsKytkdH0pfX19KSxIZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciBDdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitsdChCZSkubWFwKGZ1bmN0aW9uKGN0KXtyZXR1cm4nICA8'@;
put 'c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrY3QrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK0JlW2N0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iO3ZlLnB1c2goQ3QpLHZlLnB1c2goSGUuam9pbigiIikpfShCZSxTZSksQmUucHVzaCgiICA8'@;
put 'b2ZmaWNlOmJvZHk+XG4iKSxCZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgZHQ9MDtkdCE9U2UuU2hlZXROYW1lcy5sZW5ndGg7KytkdClCZS5wdXNoKHJlKFNlLlNoZWV0c1tTZS5TaGVldE5hbWVzW2R0XV0sU2UsZHQpKTtyZXR1cm4gQmUucHVzaCgiICAg'@;
put 'IDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksQmUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksQmUucHVzaCgiZm9kcyI9PUhlLmJvb2tUeXBlPyI8L29mZmljZTpkb2N1bWVudD4iOiI8L29mZmljZTpkb2N1bWVudC1jb250ZW50PiIpLEJlLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBfMCh5'@;
put 'LFApe2lmKCJmb2RzIj09UC5ib29rVHlwZSlyZXR1cm4gdjAoeSxQKTt2YXIgST15bigpLFE9IiIscmU9W10sZ2U9W107cmV0dXJuIFl0KEksUT0ibWltZXR5cGUiLCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IiksWXQoSSxRPSJjb250ZW50LnhtbCIs'@;
put 'djAoeSxQKSkscmUucHVzaChbUSwidGV4dC94bWwiXSksZ2UucHVzaChbUSwiQ29udGVudEZpbGUiXSksWXQoSSxRPSJzdHlsZXMueG1sIixLMSh5LFApKSxyZS5wdXNoKFtRLCJ0ZXh0L3htbCJdKSxnZS5wdXNoKFtRLCJTdHlsZXNGaWxlIl0pLFl0KEksUT0ibWV0YS54bWwiLEJuK1M0KCkp'@;
put 'LHJlLnB1c2goW1EsInRleHQveG1sIl0pLGdlLnB1c2goW1EsIk1ldGFkYXRhRmlsZSJdKSxZdChJLFE9Im1hbmlmZXN0LnJkZiIsZnVuY3Rpb24gR2goeSl7dmFyIFA9W0JuXTtQLnB1c2goJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3lu'@;
put 'dGF4LW5zIyI+XG4nKTtmb3IodmFyIEk9MDtJIT15Lmxlbmd0aDsrK0kpUC5wdXNoKEkxKHlbSV1bMF0seVtJXVsxXSkpLFAucHVzaChWbygiIix5W0ldWzBdKSk7cmV0dXJuIFAucHVzaChJMSgiIiwiRG9jdW1lbnQiLCJwa2ciKSksUC5wdXNoKCI8L3JkZjpSREY+IiksUC5qb2luKCIiKX0o'@;
put 'Z2UpKSxyZS5wdXNoKFtRLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLFl0KEksUT0iTUVUQS1JTkYvbWFuaWZlc3QueG1sIixmdW5jdGlvbiBJZCh5KXt2YXIgUD1bQm5dO1AucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRv'@;
put 'Y3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLFAucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24v'@;
put 'dm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciBJPTA7STx5Lmxlbmd0aDsrK0kpUC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJyt5W0ldWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicreVtJXVsxXSsn'@;
put 'Ii8+XG4nKTtyZXR1cm4gUC5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLFAuam9pbigiIil9KHJlKSksSX1mdW5jdGlvbiBYMSh5KXtyZXR1cm4gZnVuY3Rpb24oSSxRKXt2YXIgcmU9ZnVuY3Rpb24gRE0oeSxQKXtpZighUClyZXR1cm4gMDt2YXIgST15LlNoZWV0TmFtZXMuaW5kZXhP'@;
put 'ZihQKTtpZigtMT09SSl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitQKTtyZXR1cm4gSX0oSSxRLnNoZWV0KTtyZXR1cm4geS5mcm9tX3NoZWV0KEkuU2hlZXRzW0kuU2hlZXROYW1lc1tyZV1dLFEsSSl9fXZhciBsUj1YMShGdSksY1I9WDEoe2Zyb21fc2hlZXQ6amx9KSx1'@;
put 'Uj1YMSh0eXBlb2YgRTk8InUiP0U5Ont9KSxkUj1YMSh0eXBlb2YgTTM8InUiP00zOnt9KSxsXz1YMSh0eXBlb2YgQjE8InUiP0IxOnt9KSx5NT1YMSh0eXBlb2YgT208InUiP09tOnt9KSxoUj1YMSh7ZnJvbV9zaGVldDp4Un0pLExNPVgxKHR5cGVvZiBCMjwidSI/QjI6e30pLGZSPVgxKHR5'@;
put 'cGVvZiBPNDwidSI/TzQ6e30pLGFjPUYoNzc5MDMpfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0b0Jyb3dzZXJpZnk7aWYoIWFjKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgY3J5cHRvIGV4dGVuc2lvbnMhIik7dmFyIGNfPXtTSEE1MTI6InNoYTUxMiIsU0hBMjU2OiJz'@;
put 'aGEyNTYiLFNIQTM4NDoic2hhMzg0IixTSEExOiJzaGExIixNRDU6Im1kNSIsTUQ0OiJtZDQiLE1EMjoibWQyIn07ZnVuY3Rpb24gZWwoeSxQKXtzd2l0Y2goUD0oUHx8IiIpLnJlcGxhY2UoLy0vZywiIikpe2Nhc2UiU0hBLTUxMiI6Y2FzZSJTSEE1MTIiOnJldHVybiBuZXcgYWMuY3JlYXRl'@;
put 'SGFzaCgic2hhNTEyIikudXBkYXRlKHkpLmRpZ2VzdCgpO2Nhc2UiU0hBLTEiOmNhc2UiU0hBMSI6cmV0dXJuIG5ldyBhYy5jcmVhdGVIYXNoKCJzaGExIikudXBkYXRlKHkpLmRpZ2VzdCgpO2Nhc2UiTUQyIjpyZXR1cm4gbmV3IGFjLmNyZWF0ZUhhc2goIm1kMiIpLnVwZGF0ZSh5KS5kaWdl'@;
put 'c3QoKTtkZWZhdWx0OmlmKGNfW1BdKXJldHVybiBuZXcgYWMuY3JlYXRlSGFzaChjX1tQXSkudXBkYXRlKHkpLmRpZ2VzdCgpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitQKX19ZnVuY3Rpb24gSjEoeSxQLEkpe2lmKCJyYzIiPT1JKXRocm93IlVuc3Vw'@;
put 'cG9ydGVkIFJDMiI7dmFyIFE9YWMuY3JlYXRlRGVjaXBoZXJpdihJfHwiYWVzLTI1Ni1jYmMiLHksUCk7cmV0dXJuIFEuc2V0QXV0b1BhZGRpbmcoITEpLFF9ZnVuY3Rpb24gUjYoeSl7cmV0dXJuWygiMDAiKygyNTUmeSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj44JjI1'@;
put 'NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj4xNiYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyh5Pj4+MjQmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKV0uam9pbigiIil9dmFyIE82PWZ1bmN0aW9uKHksUCxJKXtmb3IodmFyIFE9InN0cmluZyI9'@;
put 'PXR5cGVvZiBQP0J1ZmZlci5mcm9tKFAsImhleCIpOlAscmU9InN0cmluZyI9PXR5cGVvZiB5P0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAseSkpOnksZ2U9InN0cmluZyI9PXR5cGVvZiBJP0J1ZmZlci5mcm9tKEksImhleCIpOkksX2U9ZWwocmUsIk1ENSIpLHZlPUJ1'@;
put 'ZmZlci5jb25jYXQoW19lLnNsaWNlKDAsNSksUV0pLFNlPTA7U2U8NDsrK1NlKXZlPUJ1ZmZlci5jb25jYXQoW3ZlLHZlXSk7dmFyIEhlPWVsKHZlLCJNRDUiKTtyZXR1cm4oZWwoQnVmZmVyLmNvbmNhdChbSGUuc2xpY2UoMCw1KSxnZV0pLCJNRDUiKS50b1N0cmluZygiaGV4IikrIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikuc2xpY2UoMCwzMil9LGdyPWZ1bmN0aW9uKHksUCxJKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/QnVmZmVyLmZyb20oUCwiaGV4Iik6UCxyZT0ic3RyaW5nIj09dHlwZW9mIHk/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUo'@;
put 'MTIwMCx5KSk6eSxnZT0ic3RyaW5nIj09dHlwZW9mIEk/QnVmZmVyLmZyb20oSSwiaGV4Iik6SSxfZT1lbChCdWZmZXIuY29uY2F0KFtRLHJlXSksIlNIQTEiKTtyZXR1cm4gZWwoQnVmZmVyLmNvbmNhdChbX2UsZ2VdKSwiU0hBMSIpfSxiMD1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoKXt9UC5w'@;
put 'cm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oY3Qpe3RoaXMuX2k9MDt2YXIgYnQ9dGhpcy5fYnVpbGQoY3QsIiIpO3JldHVybiIiPT09YnQ/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2J0fSxQLnByb3RvdHlwZS5fYnVpbGQ9ZnVu'@;
put 'Y3Rpb24oY3QsYnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWJ0WzBdKSxudWxsPT1jdHx8Im9iamVjdCIhPXR5cGVvZiBjdCYmImZ1bmN0aW9uIiE9dHlwZW9mIGN0KW51bGwhPWN0JiYoYnQrPWZ1bmN0aW9uIHkoY3QsYnQpe3JldHVybiBudWxsPT1jdHx8KGN0PWN0LnRvU3Ry'@;
put 'aW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGJ0JiYoY3Q9Y3QucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLGN0fShjdCkpO2Vsc2V7aWYoIWN0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5v'@;
put 'dCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoY3QpKTtidCs9IjwiK2N0Lm5hbWU7dmFyIEZ0PXRoaXM7YnQrPWN0LmF0dHJpYnV0ZXMmJlBhKGN0LmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KGN0LmNoaWxkcmVuKSYmMCE9Y3QuY2hpbGRyZW4ubGVuZ3RoPyhidCs9Ij4iLGN0'@;
put 'LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oa3Qpe2J0PUZ0Ll9idWlsZChrdCxidCl9KSxidCs9IjwvIitjdC5uYW1lKyI+Iik6YnQrPSIvPiJ9cmV0dXJuIGJ0fTt2YXIgST1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLGdlPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZl'@;
put 'ci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3LDIsMTc4LDQ0LDEzMiw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZm'@;
put 'ZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKX19O2Z1bmN0aW9uIF9lKGN0LGJ0LEZ0LGt0LFR0LFp0KXt2YXIgcG49YnQudG9Mb3dlckNhc2UoKSsiLSIrOCprdC5sZW5ndGg7aWYo'@;
put 'IkNoYWluaW5nTW9kZUNCQyIhPT1GdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK0Z0KTt2YXIgS249YWNbY3Q/ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKHBuKz0iLWNiYyIsa3QsVHQpO0tuLnNldEF1dG9QYWRkaW5nKCExKTt2YXIg'@;
put 'dW49S24udXBkYXRlKFp0KSxxbj1bdW5dO3RyeXt2YXIgem49S24uZmluYWwoKTtxbi5wdXNoKHpuKX1jYXRjaHt9cmV0dXJuIEJ1ZmZlci5jb25jYXQocW4pfWZ1bmN0aW9uIHZlKGN0KXtjdD1jdC50b0xvd2VyQ2FzZSgpO3ZhciBidD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihh'@;
put 'Yy5nZXRIYXNoZXMoKS5pbmRleE9mKGN0KTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitjdCk7dmFyIGt0PWFjLmNyZWF0ZUhhc2goY3QpO3JldHVybiBrdC51cGRhdGUoQnVmZmVyLmNvbmNhdChidCkpLGt0LmRpZ2VzdCgpfWZ1bmN0aW9uIFNlKGN0'@;
put 'LGJ0LEZ0LGt0KXsibnVtYmVyIj09dHlwZW9mIGt0JiYoa3Q9SGUoa3QpKTt2YXIgVHQ9dmUoY3QsYnQsa3QpO2lmKFR0Lmxlbmd0aDxGdCl7dmFyIFp0PUJ1ZmZlci5hbGxvYyhGdCw1NCk7VHQuY29weShadCksVHQ9WnR9ZWxzZSBUdC5sZW5ndGg+RnQmJihUdD1UdC5zbGljZSgwLEZ0KSk7'@;
put 'cmV0dXJuIFR0fWZ1bmN0aW9uIEhlKGN0LGJ0KXt2YXIgRnQ9QnVmZmVyLmFsbG9jKGJ0fHw0KTtyZXR1cm4gRnQud3JpdGVVSW50MzJMRShjdCwwKSxGdH1mdW5jdGlvbiBCZShjdCxidCxGdCxrdCxUdCxadCl7Zm9yKHZhciBLbj12ZShidCxGdCxCdWZmZXIuZnJvbShjdCwidXRmMTZsZSIp'@;
put 'KSx1bj0wO3VuPGt0O3VuKyspS249dmUoYnQsSGUodW4pLEtuKTt2YXIgem49VHQvODtpZigoS249dmUoYnQsS24sWnQpKS5sZW5ndGg8em4pe3ZhciBrbj1CdWZmZXIuYWxsb2Moem4sNTQpO0tuLmNvcHkoa24pLEtuPWtufWVsc2UgS24ubGVuZ3RoPnpuJiYoS249S24uc2xpY2UoMCx6bikp'@;
put 'O3JldHVybiBLbn1yZXR1cm4gYWMucmFuZG9tQnl0ZXN8fChhYy5yYW5kb21CeXRlcz1mdW5jdGlvbihjdCl7Zm9yKHZhciBidD1CdWZmZXIuYWxsb2MoY3QpLEZ0PTA7RnQ8Y3Q7KytGdClidFtGdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGJ0fSksZnVuY3Rpb24g'@;
put 'Q3QoY3QsYnQpe2lmKCJzdHJpbmciPT10eXBlb2YgY3QpcmV0dXJuIEN0KEJ1ZmZlci5mcm9tKGN0LCJiaW5hcnkiKSxidCk7dmFyIEZ0PWFjLnJhbmRvbUJ5dGVzKDMyKSxrdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMi'@;
put 'LHNhbHRWYWx1ZTphYy5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsa2V5Qml0czo4KkZ0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZh'@;
put 'bHVlOmFjLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixzcGluQ291bnQ6MSxrZXlCaXRzOjI1Nn19LFR0PWZ1bmN0aW9uIEdlKGN0LGJ0LEZ0LGt0LFR0LFp0LHBuLEtuKXtmb3IodmFyIHVuPVtdLHFuPWN0PzA6OCx6bj0w'@;
put 'LGtuPTAsZXI9MDtlcjxLbi5sZW5ndGg7KXsoZXI9KGtuPWVyKSs0MDk2KT5Lbi5sZW5ndGgmJihlcj1Lbi5sZW5ndGgpO3ZhciB0cj1Lbi5zbGljZShrbitxbixlcitxbiksWm49dHIubGVuZ3RoJVR0O1puJiYodHI9QnVmZmVyLmNvbmNhdChbdHIsQnVmZmVyLmFsbG9jKFR0LVpuKV0pKTt2'@;
put 'YXIgc2k9X2UoY3QsYnQsRnQscG4sU2Uoa3QsWnQsVHQsem4pLHRyKTt1bi5wdXNoKHNpKSx6bisrfXZhciB4aT1CdWZmZXIuY29uY2F0KHVuKTtpZihjdCl4aT1CdWZmZXIuY29uY2F0KFtIZShLbi5sZW5ndGgsOCkseGldKTtlbHNle3ZhciBJaT1Lbi5yZWFkVUludDMyTEUoMCk7eGk9eGku'@;
put 'c2xpY2UoMCxJaSl9cmV0dXJuIHhpfSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxGdCxjdCksWnQ9YWMucmFuZG9t'@;
put 'Qnl0ZXMoNjQpLHBuPVNlKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxnZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLEtuPV9lKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hh'@;
put 'aW5pbmcsRnQscG4sWnQpLHVuPWZ1bmN0aW9uIG50KGN0LGJ0KXtjdD1jdC50b0xvd2VyQ2FzZSgpO3ZhciBGdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtpZihhYy5nZXRIYXNoZXMoKS5pbmRleE9mKGN0KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrY3QrIicg'@;
put 'bm90IHN1cHBvcnRlZCEiKTt2YXIgVHQ9YWMuY3JlYXRlSG1hYyhjdCxidCk7cmV0dXJuIFR0LnVwZGF0ZShCdWZmZXIuY29uY2F0KEZ0KSksVHQuZGlnZXN0KCl9KGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxadCxUdCkscW49U2Uoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2th'@;
put 'Z2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLGdlLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSx6bj1fZSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEZ0LHFuLHVuKTtrdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFj'@;
put 'S2V5OktuLGVuY3J5cHRlZEhtYWNWYWx1ZTp6bn07dmFyIGtuPUJlKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxnZS5rZXkpO2t0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1fZSghMCxrdC5rZXkuY2lwaGVy'@;
put 'QWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxrbixrdC5rZXkuc2FsdFZhbHVlLEZ0KTt2YXIgZXI9YWMucmFuZG9tQnl0ZXMoMTYpLHRyPUJlKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxnZS52'@;
put 'ZXJpZmllckhhc2guaW5wdXQpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1fZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyx0cixrdC5rZXkuc2FsdFZhbHVlLGVyKTt2YXIgWm49dmUoa3Qua2V5Lmhhc2hBbGdvcml0aG0sZXIpLEJy'@;
put 'PUJlKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxnZS52ZXJpZmllckhhc2gudmFsdWUpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1fZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0'@;
put 'LmtleS5jaXBoZXJDaGFpbmluZyxCcixrdC5rZXkuc2FsdFZhbHVlLFpuKTt2YXIgc2k9ZnVuY3Rpb24gZHQoY3Qpe3ZhciBidD17bmFtZToiZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIs'@;
put 'InhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIsInhtbG5zOmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7'@;
put 'bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6Y3QucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpjdC5wYWNrYWdlLmJsb2NrU2l6ZSxrZXlCaXRzOmN0LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTpjdC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRo'@;
put 'bTpjdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpjdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06Y3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpjdC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFt'@;
put 'ZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTpjdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNLZXkudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTpjdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygi'@;
put 'YmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0ZXM6e3VyaToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6'@;
put 'ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6Y3Qua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTpjdC5rZXkuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6Y3Qua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOmN0LmtleS5rZXlCaXRzLGhhc2hTaXplOmN0LmtleS5oYXNoU2l6ZSxjaXBo'@;
put 'ZXJBbGdvcml0aG06Y3Qua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpjdC5rZXkuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTpjdC5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6Y3Qua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVy'@;
put 'aWZpZXJIYXNoSW5wdXQ6Y3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZTpjdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVl'@;
put 'OmN0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxrdD0obmV3IFApLmJ1aWxkKGJ0KTtyZXR1cm4gQnVmZmVyLmNvbmNhdChbSSxCdWZmZXIuZnJvbShrdCwidXRmOCIpXSl9KGt0KSx4aT1qZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIGplLnV0aWxz'@;
put 'LmNmYl9hZGQoeGksIkVuY3J5cHRpb25JbmZvIixzaSksamUudXRpbHMuY2ZiX2FkZCh4aSwiRW5jcnlwdGVkUGFja2FnZSIsVHQpLHhpfX0oKTtmdW5jdGlvbiB3NSh5KXtyZXR1cm4gZnVuY3Rpb24oSSl7Zm9yKHZhciBRPTA7USE9eS5sZW5ndGg7KytRKXt2YXIgcmU9eVtRXTt2b2lkIDA9'@;
put 'PT1JW3JlWzBdXSYmKElbcmVbMF1dPXJlWzFdKSwibiI9PT1yZVsyXSYmKElbcmVbMF1dPU51bWJlcihJW3JlWzBdXSkpfX19dmFyIFA2PWZ1bmN0aW9uKHkpe3c1KFtbImNlbGxORiIsITFdLFsiY2VsbEhUTUwiLCEwXSxbImNlbGxGb3JtdWxhIiwhMF0sWyJjZWxsU3R5bGVzIiwhMV0sWyJj'@;
put 'ZWxsVGV4dCIsITBdLFsiY2VsbERhdGVzIiwhMV0sWyJzaGVldFN0dWJzIiwhMV0sWyJzaGVldFJvd3MiLDAsIm4iXSxbImJvb2tEZXBzIiwhMV0sWyJib29rU2hlZXRzIiwhMV0sWyJib29rUHJvcHMiLCExXSxbImJvb2tGaWxlcyIsITFdLFsiYm9va1ZCQSIsITFdLFsicGFzc3dvcmQiLCIi'@;
put 'XSxbIldURiIsITFdXSkoeSkseS5ib29rSW1hZ2VzJiYoeS5jZWxsU3R5bGVzPSEwKX0saF89dzUoW1siY2VsbERhdGVzIiwhMV0sWyJib29rU1NUIiwhMV0sWyJib29rVHlwZSIsInhsc3giXSxbImNvbXByZXNzaW9uIiwhMV0sWyJXVEYiLCExXV0pO2Z1bmN0aW9uIFJNKHkpe3JldHVybiBI'@;
put 'aS5XUy5pbmRleE9mKHkpPi0xPyJzaGVldCI6SGkuQ1MmJnk9PUhpLkNTPyJjaGFydCI6SGkuRFMmJnk9PUhpLkRTPyJkaWFsb2ciOkhpLk1TJiZ5PT1IaS5NUz8ibWFjcm8iOnkmJnkubGVuZ3RoP3k6InNoZWV0In12YXIgRjY9W107ZnVuY3Rpb24gZ1IoeSxQLEksUSxyZSxnZSxfZSx2ZSxT'@;
put 'ZSxIZSxCZSxHZSl7dHJ5e2dlW1FdPURvKFF0KHksSSwhMCksUCk7dmFyIGR0LG50PUx0KHksUCk7c3dpdGNoKHZlKXtjYXNlInNoZWV0IjpkdD1mdW5jdGlvbiBOSSh5LFAsSSxRLHJlLGdlLF9lLHZlKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBDSSh5LFAsSSxRLHJl'@;
put 'LGdlLF9lKXtpZigheSlyZXR1cm4geTt2YXIgdmU9UHx8e307UXx8KFE9eyIhaWQiOnt9fSksbnVsbCE9dGUmJm51bGw9PXZlLmRlbnNlJiYodmUuZGVuc2U9dGUpO3ZhciBIZSxDdCxjdCxidCxGdCxrdCxUdCxadCxwbixLbixTZT12ZS5kZW5zZT9bXTp7fSxCZT17czp7cjoyZTYsYzoyZTZ9'@;
put 'LGU6e3I6MCxjOjB9fSxHZT1bXSxudD0hMSxkdD0hMSx1bj1bXTt2ZS5iaWZmPTEyLHZlWyIhcm93Il09MDt2YXIgcW49MCx6bj0hMSxrbj1bXSxlcj17fSx0cj12ZS5zdXBib29rc3x8cmUuc3VwYm9va3N8fFtbXV07aWYodHIuc2hhcmVkZj1lcix0ci5hcnJheWY9a24sdHIuU2hlZXROYW1l'@;
put 'cz1yZS5TaGVldE5hbWVzfHxyZS5TaGVldHMubWFwKGZ1bmN0aW9uKFFyKXtyZXR1cm4gUXIubmFtZX0pLCF2ZS5zdXBib29rcyYmKHZlLnN1cGJvb2tzPXRyLHJlLk5hbWVzKSlmb3IodmFyIFpuPTA7Wm48cmUuTmFtZXMubGVuZ3RoOysrWm4pdHJbMF1bWm4rMV09cmUuTmFtZXNbWm5dO3Zh'@;
put 'ciBCcj1bXSxzaT1bXSx4aT0hMTtpZihtZlsxNl09e246IkJydFNob3J0UmVhbCIsZjpqU30sSG8oeSxmdW5jdGlvbih1cixBbix2cil7aWYoIWR0KXN3aXRjaCh2cil7Y2FzZSAxNDg6SGU9dXI7YnJlYWs7Y2FzZSAwOkN0PXVyLHZlLnNoZWV0Um93cyYmdmUuc2hlZXRSb3dzPD1DdC5yJiYo'@;
put 'ZHQ9ITApLHBuPUhzKEZ0PUN0LnIpLHZlWyIhcm93Il09Q3QuciwodXIuaGlkZGVufHx1ci5ocHR8fG51bGwhPXVyLmxldmVsKSYmKHVyLmhwdCYmKHVyLmhweD1VMSh1ci5ocHQpKSxzaVt1ci5yXT11cik7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6'@;
put 'Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6c3dpdGNoKGN0PXt0OnVyWzJdfSx1clsyXSl7Y2FzZSJuIjpjdC52PXVyWzFdO2JyZWFrO2Nhc2UicyI6Y3Qudj0oWnQ9ZjZbdXJbMV1dKS50LHZlLmNl'@;
put 'bGxTdHlsZXMmJihjdC5SPWZ1bmN0aW9uIHVEKHksUCl7aWYoeS5SKXJldHVybiB5LlI7aWYoUCYmUC5Gb250cyYmKDEhPXkuci5sZW5ndGh8fDAhPXkuclswXS5pY2gpKXt5LlI9W107dmFyIEk9MCxRPXkucltJXSxyZT15LnJbSSsxXTtmb3IoUS5pY2g+MCYmeS5SLnB1c2goe3Q6InMiLHY6'@;
put 'eS50LnNsaWNlKDAsUS5pY2gpfSk7STx5LnIubGVuZ3RoLTE7KytJKXkuUi5wdXNoKHt0OiJzIix2OnkudC5zbGljZSgoUT15LnJbSV0pLmljaCwocmU9eS5yW0krMV0pLmljaCksczpQLkZvbnRzW1EuaWZudF19KTtyZXR1cm4geS5SLnB1c2goe3Q6InMiLHY6eS50LnNsaWNlKChyZXx8USku'@;
put 'aWNoKSxzOlAuRm9udHNbKHJlfHxRKS5pZm50XX0pLHkuUn19KFp0LF9lKSk7YnJlYWs7Y2FzZSJiIjpjdC52PSEhdXJbMV07YnJlYWs7Y2FzZSJlIjpjdC52PXVyWzFdLCExIT09dmUuY2VsbFRleHQmJihjdC53PVFvW2N0LnZdKTticmVhaztjYXNlInN0ciI6Y3QudD0icyIsY3Qudj11clsx'@;
put 'XX1pZigoYnQ9X2UuQ2VsbFhmW3VyWzBdLmlTdHlsZVJlZl0pJiZwNihjdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHZlLDAsX2UpLHZlLmNlbGxTdHlsZXMmJmN0LnMmJmJ0LmFsaWdubWVudCYmKGN0LnMuYWxpZ25tZW50PW9uKGJ0LmFsaWdubWVudCkp'@;
put 'LGt0PS0xPT11clswXS5jP2t0KzE6dXJbMF0uYyx2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtGdF1ba3RdPWN0KTpTZVtOcyhrdCkrcG5dPWN0LHZlLmNlbGxGb3JtdWxhKXtmb3Ioem49ITEscW49MDtxbjxrbi5sZW5ndGg7Kytxbil7dmFyIHJyPWtuW3FuXTtDdC5yPj1yclsw'@;
put 'XS5zLnImJkN0LnI8PXJyWzBdLmUuciYma3Q+PXJyWzBdLnMuYyYma3Q8PXJyWzBdLmUuYyYmKGN0LkY9T28ocnJbMF0pLHpuPSEwKX0hem4mJnVyLmxlbmd0aD4zJiYoY3QuZj11clszXSl9aWYoQmUucy5yPkN0LnImJihCZS5zLnI9Q3QuciksQmUucy5jPmt0JiYoQmUucy5jPWt0KSxCZS5l'@;
put 'LnI8Q3QuciYmKEJlLmUucj1DdC5yKSxCZS5lLmM8a3QmJihCZS5lLmM9a3QpLHZlLmNlbGxEYXRlcyYmYnQmJiJuIj09Y3QudCYmdy5pc19kYXRlKHcuX3RhYmxlW2J0Lm51bUZtdElkXSkpe3ZhciBTbj13LnBhcnNlX2RhdGVfY29kZShjdC52KTtTbiYmKGN0LnQ9ImQiLGN0LnY9bmV3IERh'@;
put 'dGUoU24ueSxTbi5tLTEsU24uZCxTbi5ILFNuLk0sU24uUyxTbi51KSl9YnJlYWs7Y2FzZSAxOmNhc2UgMTI6aWYoIXZlLnNoZWV0U3R1YnN8fG50KWJyZWFrO2N0PXt0OiJ6Iix2OnZvaWQgMH0sa3Q9LTE9PXVyWzBdLmM/a3QrMTp1clswXS5jLChidD1fZS5DZWxsWGZbdXJbMF0uaVN0eWxl'@;
put 'UmVmXSkmJnA2KGN0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQsdmUsMCxfZSksdmUuY2VsbFN0eWxlcyYmY3QucyYmYnQuYWxpZ25tZW50JiYoY3Qucy5hbGlnbm1lbnQ9b24oYnQuYWxpZ25tZW50KSksdmUuZGVuc2U/KFNlW0Z0XXx8KFNlW0Z0XT1bXSks'@;
put 'U2VbRnRdW2t0XT1jdCk6U2VbTnMoa3QpK3BuXT1jdCxCZS5zLnI+Q3QuciYmKEJlLnMucj1DdC5yKSxCZS5zLmM+a3QmJihCZS5zLmM9a3QpLEJlLmUucjxDdC5yJiYoQmUuZS5yPUN0LnIpLEJlLmUuYzxrdCYmKEJlLmUuYz1rdCk7YnJlYWs7Y2FzZSAxNzY6dW4ucHVzaCh1cik7YnJlYWs7'@;
put 'Y2FzZSA0OTQ6dmFyIG1yPVFbIiFpZCJdW3VyLnJlbElkXTtmb3IobXI/KHVyLlRhcmdldD1tci5UYXJnZXQsdXIubG9jJiYodXIuVGFyZ2V0Kz0iIyIrdXIubG9jKSx1ci5SZWw9bXIpOiIiPT11ci5yZWxJZCYmKHVyLlRhcmdldD0iIyIrdXIubG9jKSxGdD11ci5yZngucy5yO0Z0PD11ci5y'@;
put 'ZnguZS5yOysrRnQpZm9yKGt0PXVyLnJmeC5zLmM7a3Q8PXVyLnJmeC5lLmM7KytrdCl2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtGdF1ba3RdfHwoU2VbRnRdW2t0XT17dDoieiIsdjp2b2lkIDB9KSxTZVtGdF1ba3RdLmw9dXIpOihUdD1kaSh7YzprdCxyOkZ0fSksU2VbVHRd'@;
put 'fHwoU2VbVHRdPXt0OiJ6Iix2OnZvaWQgMH0pLFNlW1R0XS5sPXVyKTticmVhaztjYXNlIDQyNjppZighdmUuY2VsbEZvcm11bGEpYnJlYWs7a24ucHVzaCh1ciksKEtuPXZlLmRlbnNlP1NlW0Z0XVtrdF06U2VbTnMoa3QpK3BuXSkuZj14bCh1clsxXSxCZSx7cjpDdC5yLGM6a3R9LHRyLHZl'@;
put 'KSxLbi5GPU9vKHVyWzBdKTticmVhaztjYXNlIDQyNzppZighdmUuY2VsbEZvcm11bGEpYnJlYWs7ZXJbZGkodXJbMF0ucyldPXVyWzFdLChLbj12ZS5kZW5zZT9TZVtGdF1ba3RdOlNlW05zKGt0KStwbl0pLmY9eGwodXJbMV0sQmUse3I6Q3QucixjOmt0fSx0cix2ZSk7YnJlYWs7Y2FzZSA2'@;
put 'MDppZighdmUuY2VsbFN0eWxlcylicmVhaztmb3IoO3VyLmU+PXVyLnM7KUJyW3VyLmUtLV09e3dpZHRoOnVyLncvMjU2LGhpZGRlbjohISgxJnVyLmZsYWdzKSxsZXZlbDp1ci5sZXZlbH0seGl8fCh4aT0hMCkscHUoQnJbdXIuZSsxXSk7YnJlYWs7Y2FzZSAxNjE6U2VbIiFhdXRvZmlsdGVy'@;
put 'Il09e3JlZjpPbyh1cil9O2JyZWFrO2Nhc2UgNDc2OlNlWyIhbWFyZ2lucyJdPXVyO2JyZWFrO2Nhc2UgMTQ3OnJlLlNoZWV0c1tJXXx8KHJlLlNoZWV0c1tJXT17fSksdXIubmFtZSYmKHJlLlNoZWV0c1tJXS5Db2RlTmFtZT11ci5uYW1lKSwodXIuYWJvdmV8fHVyLmxlZnQpJiYoU2VbIiFv'@;
put 'dXRsaW5lIl09e2Fib3ZlOnVyLmFib3ZlLGxlZnQ6dXIubGVmdH0pO2JyZWFrO2Nhc2UgMTM3OnJlLlZpZXdzfHwocmUuVmlld3M9W3t9XSkscmUuVmlld3NbMF18fChyZS5WaWV3c1swXT17fSksdXIuUlRMJiYocmUuVmlld3NbMF0uUlRMPSEwKSx1ci5ncmlkfHwocmUuVmlld3NbMF0uZ3Jp'@;
put 'ZD0hMSxTZVsiIWdyaWRsaW5lcyJdPSExKTticmVhaztjYXNlIDQ4NTpTZVsiIXNoZWV0Rm9ybWF0Il09dXI7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0aW9uIHlJKHksUCxJLFEpe2lmKFApe3ZhciByZT17cmVmOlAuc3FyZngsdDpQLnR9O1Aub3AmJihyZS5vcD1QLm9wKTt2YXIg'@;
put 'Z2U9IiIsX2U9IiIsdmU9UC5zcXJmeD8ic3RyaW5nIj09dHlwZW9mIFAuc3FyZng/T2koUC5zcXJmeC5zcGxpdCgiLCIpWzBdKTpQLnNxcmZ4Om51bGw7aWYoUC5mMSYmKGdlPXhsKFAuZjEsdmUsbnVsbCxJLFEsITApKSxQLmYyJiYoX2U9eGwoUC5mMix2ZSxudWxsLEksUSwhMCkpLFAub3Am'@;
put 'JlsiSU4iLCJPVCJdLmluZGV4T2YoUC5vcCk+PS0xKXJlLm1pbj1nZSxyZS5tYXg9X2U7ZWxzZSBpZihQLm9wKXJlLnY9Z2U7ZWxzZSB0cnl7c3dpdGNoKFAudCl7Y2FzZSJMaXN0IjppZigiUHRnU3RyIj09PVAuZjFbMF1bMF1bMF0mJjE9PVAuZjFbMF0ubGVuZ3RoKXtyZS5sPVAuZjFbMF1b'@;
put 'MF1bMV0uc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6cmUuZj1nZX19Y2F0Y2h7fXlbIiF2YWxpZGF0aW9ucyJdfHwoeVsiIXZhbGlkYXRpb25zIl09W10pLHlbIiF2YWxpZGF0aW9ucyJdLnB1c2gocmUpfX0oU2UsdXIsdHIsdmUpO2JyZWFrO2Nhc2UgMTUxOlNlWyIhZnJlZXplIl09'@;
put 'dXJbMF07YnJlYWs7Y2FzZSAxNTI6U2VbIiFzZWwiXT11cjticmVhaztjYXNlIDE3NTpjYXNlIDY0NDpjYXNlIDYyNTpjYXNlIDU2MjpjYXNlIDM5NjpjYXNlIDExMTI6Y2FzZSAxMTQ2OmNhc2UgNDcxOmNhc2UgMTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNl'@;
put 'IDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2Fz'@;
put 'ZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEwMjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpj'@;
put 'YXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTpudD0hMDticmVhaztjYXNlIDM2Om50PSExO2JyZWFrO2Nhc2UgMzc6R2UucHVzaChBbiksbnQ9ITA7YnJlYWs7Y2FzZSAzODpHZS5wb3AoKSxudD0hMTticmVhaztkZWZhdWx0OmlmKCEoKEFufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoQW58'@;
put 'fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFudHx8dmUuV1RGJiYiQnJ0QUNCZWdpbiIhPUdlW0dlLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3ZyKyIgIitBbil9fSx2ZSksZGVsZXRlIHZlLnN1cGJvb2tzLGRlbGV0ZSB2ZVsiIXJvdyJdLCFTZVsi'@;
put 'IXJlZiJdJiYoQmUucy5yPDJlNnx8SGUmJihIZS5lLnI+MHx8SGUuZS5jPjB8fEhlLnMucj4wfHxIZS5zLmM+MCkpJiYoU2VbIiFyZWYiXT1PbyhIZXx8QmUpKSx2ZS5zaGVldFJvd3MmJlNlWyIhcmVmIl0pe3ZhciBJaT1PaShTZVsiIXJlZiJdKTt2ZS5zaGVldFJvd3M8PStJaS5lLnImJihJ'@;
put 'aS5lLnI9dmUuc2hlZXRSb3dzLTEsSWkuZS5yPkJlLmUuciYmKElpLmUucj1CZS5lLnIpLElpLmUucjxJaS5zLnImJihJaS5zLnI9SWkuZS5yKSxJaS5lLmM+QmUuZS5jJiYoSWkuZS5jPUJlLmUuYyksSWkuZS5jPElpLnMuYyYmKElpLnMuYz1JaS5lLmMpLFNlWyIhZnVsbHJlZiJdPVNlWyIh'@;
put 'cmVmIl0sU2VbIiFyZWYiXT1PbyhJaSkpfXJldHVybiB1bi5sZW5ndGg+MCYmKFNlWyIhbWVyZ2VzIl09dW4pLEJyLmxlbmd0aD4wJiYoU2VbIiFjb2xzIl09QnIpLHNpLmxlbmd0aD4wJiYoU2VbIiFyb3dzIl09c2kpLFNlfSh5LFEsSSxyZSxnZSwwLHZlKTpmdW5jdGlvbiBYWih5LFAsSSxR'@;
put 'LHJlLGdlLF9lKXtpZigheSlyZXR1cm4geTtRfHwoUT17IiFpZCI6e319KSxudWxsIT10ZSYmbnVsbD09UC5kZW5zZSYmKFAuZGVuc2U9dGUpO3ZhciB2ZT1QLmRlbnNlP1tdOnt9LFNlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEhlPSIiLEJlPSIiLEdlPXkubWF0Y2goYTUpO0dl'@;
put 'PyhIZT15LnNsaWNlKDAsR2UuaW5kZXgpLEJlPXkuc2xpY2UoR2UuaW5kZXgrR2VbMF0ubGVuZ3RoKSk6SGU9QmU9eTt2YXIgbnQ9QmUubGFzdEluZGV4T2YoImV4dExzdCIpLEN0PSgtMT09bnR8fEJlLnNsaWNlKG50KSxIZS5tYXRjaCh4dikpO0N0P3Y2KEN0WzBdLDAscmUsSSk6KEN0PUhl'@;
put 'Lm1hdGNoKERMKSkmJmZ1bmN0aW9uIF9TKHksUCxJLFEscmUsZ2UsX2Upe3Y2KHkuc2xpY2UoMCx5LmluZGV4T2YoIj4iKSksMCxRLHJlKTt2YXIgdmU9UC5tYXRjaChfNik7aWYodmUpe3ZhciBIZT1VMihsbih2ZVswXSksZ2UsX2UpO0lbIiF0YWJjb2xvciJdPUhlfWlmKCh2ZT1QLm1hdGNo'@;
put 'KG1TKSkmJmxuKHZlWzBdKS5maXRUb1BhZ2UmJihJWyIhcHJpbnQiXXx8KElbIiFwcmludCJdPXt9KSxJWyIhcHJpbnQiXS5wcm9wc3x8KElbIiFwcmludCJdLnByb3BzPXt9KSxJWyIhcHJpbnQiXS5wcm9wcy5maXR8fChJWyIhcHJpbnQiXS5wcm9wcy5maXQ9e30pLG51bGw9PUlbIiFwcmlu'@;
put 'dCJdLnByb3BzLmZpdC5oZWlnaHQmJihJWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0PTEpLG51bGw9PUlbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aCYmKElbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aD0xKSksdmU9UC5tYXRjaCh2Uykpe0lbIiFvdXRsaW5lIl09e307dmFyIEdlPWxu'@;
put 'KHZlWzBdKTtHZS5zdW1tYXJ5QmVsb3cmJihJWyIhb3V0bGluZSJdLmFib3ZlPSF5cihHZS5zdW1tYXJ5QmVsb3cpKSxHZS5zdW1tYXJ5UmlnaHQmJihJWyIhb3V0bGluZSJdLmxlZnQ9IXlyKEdlLnN1bW1hcnlSaWdodCkpfX0oQ3RbMF0sQ3RbMV18fCIiLHZlLHJlLEksX2UsZ2UpO3ZhciBj'@;
put 'dD0oSGUubWF0Y2goLzwoPzpcdyo6KT9kaW1lbnNpb24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYoY3Q+MCl7dmFyIGJ0PUhlLnNsaWNlKGN0LGN0KzUwKS5tYXRjaChxWik7YnQmJighUHx8IVAubm9kaW0pJiZmdW5jdGlvbiBBTCh5LFApe3ZhciBJPU9pKFApO0kucy5yPD1JLmUuciYmSS5z'@;
put 'LmM8PUkuZS5jJiZJLnMucj49MCYmSS5zLmM+PTAmJih5WyIhcmVmIl09T28oSSkpfSh2ZSxidFsxXSl9dmFyIEZ0PUhlLm1hdGNoKExMKTtGdCYmRnRbMV0mJmZ1bmN0aW9uIHRZKHksUCxJLFEpe0kuVmlld3N8fChJLlZpZXdzPVt7fV0pO3ZhciByZT0wO3kucmVwbGFjZSh6TCxmdW5jdGlv'@;
put 'bihnZSxfZSl7dmFyIHZlPWxuKGdlKTtpZihJLlZpZXdzW1FdfHwoSS5WaWV3c1tRXT17fSkseXIodmUucmlnaHRUb0xlZnQpJiYoSS5WaWV3c1tRXS5SVEw9ITApLHZlLnNob3dHcmlkTGluZXMmJihJLlZpZXdzW1FdLmdyaWQ9eXIodmUuc2hvd0dyaWRMaW5lcyksbnVsbD09UFsiIWdyaWRs'@;
put 'aW5lcyJdJiYoUFsiIWdyaWRsaW5lcyJdPXlyKHZlLnNob3dHcmlkTGluZXMpKSksK3ZlLnpvb21TY2FsZSYmKEkuVmlld3NbUV0uem9vbT0rdmUuem9vbVNjYWxlKSx2ZS52aWV3JiYoSS5WaWV3c1tRXS52aWV3PXZlLnZpZXcpLDE9PSsrcmUmJiIvPiIhPWdlLnNsaWNlKC0yKSl7dmFyIFNl'@;
put 'PXkuc2xpY2UoX2UrZ2UubGVuZ3RoKSxIZT1TZS5tYXRjaCgvPFwvKD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZighSGUpcmV0dXJuIiI7dmFyIEJlPShTZT1TZS5zbGljZSgwLEhlLmluZGV4KSkubWF0Y2goLzwoPzpcdzopP3BhbmUoPzpbXj5hLXpdW14+XSop'@;
put 'P1wvPz4vKTtpZihCZSl7dmFyIEdlPWxuKEJlWzBdKTsiZnJvemVuIj09R2Uuc3RhdGU/UFsiIWZyZWV6ZSJdPU5zKCtHZS54U3BsaXR8fDApK0hzKCtHZS55U3BsaXR8fDApOkdlLnRvcExlZnRDZWxsJiYoUFsiIWZyZWV6ZSJdPUdlLnRvcExlZnRDZWxsKX12YXIgbnQ9U2UubWF0Y2goLzwo'@;
put 'PzpcdzopP3NlbGVjdGlvbig/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKG50KXt2YXIgZHQ9bG4obnRbMF0pO2lmKGR0LmFjdGl2ZUNlbGwmJihQWyIhc2VsIl09e2NlbGw6ZHQuYWN0aXZlQ2VsbH0pLGR0LnNxcmVmKXt2YXIgQ3Q9ZHQuc3FyZWYucmVwbGFjZSgvXHMuKiQvLCIiKTtQWyIh'@;
put 'c2VsIl18fChQWyIhc2VsIl09e2NlbGw6ZGkoV3MoQ3QpLnMpfSksUFsiIXNlbCJdLnJhbmdlPWR0LnNxcmVmfX19cmV0dXJuIiJ9KX0oRnRbMV0sdmUscmUsSSk7dmFyIGt0PUhlLm1hdGNoKGZmKSxUdD1bXTtpZihQLmNlbGxTdHlsZXMpe3ZhciBadD1IZS5tYXRjaChTdik7WnQmJmZ1bmN0'@;
put 'aW9uIEczKHksUCxJKXtmb3IodmFyIFE9ITEscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIGdlPWxuKFBbcmVdLCEwKTtnZS5oaWRkZW4mJihnZS5oaWRkZW49eXIoZ2UuaGlkZGVuKSk7dmFyIF9lPXBhcnNlSW50KGdlLm1pbiwxMCktMSx2ZT1wYXJzZUludChnZS5tYXgsMTApLTE7Zm9y'@;
put 'KGdlLm91dGxpbmVMZXZlbCYmKGdlLmxldmVsPStnZS5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBnZS5taW4sZGVsZXRlIGdlLm1heCxnZS53aWR0aD0rZ2Uud2lkdGgsIVEmJmdlLndpZHRoJiYoUT0hMCkscHUoZ2UpLGdlLnN0eWxlJiYoZ2Uucz1jNShnZS5zdHlsZSxJKSk7X2U8PXZlOyl5'@;
put 'W19lKytdPW9uKGdlKX19KFR0LFp0LF9lKX1pZihHZSYmWkwoR2VbMV0sSSx2ZSxQLFNlLGdlLF9lKSxQLmNhbGxiYWNrKXJldHVybiB2ZTt2YXIgcG49QmUubWF0Y2goVEwpO3BuJiYodmVbIiFwcm90ZWN0Il09ZnVuY3Rpb24gdHQoeSl7dmFyIFA9bG4oeSwhMCwhMCksST17fTtpZih5cihQ'@;
put 'LnNoZWV0KSlyZXR1cm4gQXYuZm9yRWFjaChmdW5jdGlvbihRKXtJW1FdPW51bGwhPVBbUV0mJnlyKFBbUV0pfSksVHYuZm9yRWFjaChmdW5jdGlvbihRKXtJW1FdPW51bGw9PVBbUV18fHlyKFBbUV0pfSksUC5hbGdvcml0aG1OYW1lJiYoSS5lbmNyeXB0aW9uPXthbGdvOlAuYWxnb3JpdGht'@;
put 'TmFtZSxoYXNoOlAuaGFzaFZhbHVlLHNhbHQ6UC5zYWx0VmFsdWUsc3BpbjorUC5zcGluQ291bnR8fDFlNX0pLEl9KHBuWzBdKSk7dmFyIEtuPUJlLm1hdGNoKGc2KTtLbiYmKHZlWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIGw1KHkpe3JldHVybntyZWY6KHkubWF0Y2goL3JlZj0iKFteIl0q'@;
put 'KSIvKXx8W10pWzFdfX0oS25bMF0pKTt2YXIgdW49W10scW49QmUubWF0Y2goQ3YpO2lmKHFuKWZvcihjdD0wO2N0IT1xbi5sZW5ndGg7KytjdCl1bltjdF09T2kocW5bY3RdLnNsaWNlKHFuW2N0XS5pbmRleE9mKCciJykrMSkpO3ZhciB6bj0oLTE9PW50P0JlOkJlLnNsaWNlKDAsbnQpKS5t'@;
put 'YXRjaChtNik7em4mJih2ZVsiIWNvbmRmbXQiXT1bXS5jb25jYXQuYXBwbHkoW10sem4ubWFwKGZ1bmN0aW9uKEFuKXtyZXR1cm4gSVMoQW4sUCxnZSxfZSl9KSkpLG50Pi0xJiYoem49QmUuc2xpY2UobnQpLm1hdGNoKG02KSkmJih2ZVsiIWNvbmRmbXQiXXx8KHZlWyIhY29uZGZtdCJdPVtd'@;
put 'KSx2ZVsiIWNvbmRmbXQiXT12ZVsiIWNvbmRmbXQiXS5jb25jYXQuYXBwbHkodmVbIiFjb25kZm10Il0sem4ubWFwKGZ1bmN0aW9uKEFuKXtyZXR1cm4gSVMoQW4sUCxnZSxfZSwhMCl9KSkpO3ZhciBrbj0oLTE9PW50P0JlOkJlLnNsaWNlKDAsbnQpKS5tYXRjaChoUyk7a24mJih2ZVsiIXZh'@;
put 'bGlkYXRpb25zIl09VFMoa25bMF0sUCkpLG50Pi0xJiYoa249QmUuc2xpY2UobnQpLm1hdGNoKGhTKSkmJih2ZVsiIXZhbGlkYXRpb25zIl18fCh2ZVsiIXZhbGlkYXRpb25zIl09W10pLHZlWyIhdmFsaWRhdGlvbnMiXT12ZVsiIXZhbGlkYXRpb25zIl0uY29uY2F0KFRTKGtuWzBdLFAsITAp'@;
put 'KSk7dmFyIGVyPUJlLm1hdGNoKGRTKTtlciYmZnVuY3Rpb24gTVMoeSxQLEkpe2Zvcih2YXIgUT1BcnJheS5pc0FycmF5KHkpLHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpe3ZhciBnZT1sbihQaShQW3JlXSksITApO2lmKCFnZS5yZWYpcmV0dXJuO3ZhciBfZT0oKEl8fHt9KVsiIWlkIl18fFtd'@;
put 'KVtnZS5pZF07X2U/KGdlLlRhcmdldD1fZS5UYXJnZXQsZ2UubG9jYXRpb24mJihnZS5UYXJnZXQrPSIjIit4cihnZS5sb2NhdGlvbikpKTooZ2UuVGFyZ2V0PSIjIit4cihnZS5sb2NhdGlvbiksX2U9e1RhcmdldDpnZS5UYXJnZXQsVGFyZ2V0TW9kZToiSW50ZXJuYWwifSksZ2UuUmVsPV9l'@;
put 'LGdlLnRvb2x0aXAmJihnZS5Ub29sdGlwPWdlLnRvb2x0aXAsZGVsZXRlIGdlLnRvb2x0aXApO2Zvcih2YXIgdmU9T2koZ2UucmVmKSxTZT12ZS5zLnI7U2U8PXZlLmUucjsrK1NlKWZvcih2YXIgSGU9dmUucy5jO0hlPD12ZS5lLmM7KytIZSl7dmFyIEJlPWRpKHtjOkhlLHI6U2V9KTtRPyh5'@;
put 'W1NlXXx8KHlbU2VdPVtdKSx5W1NlXVtIZV18fCh5W1NlXVtIZV09e3Q6InoiLHY6dm9pZCAwfSkseVtTZV1bSGVdLmw9Z2UpOih5W0JlXXx8KHlbQmVdPXt0OiJ6Iix2OnZvaWQgMH0pLHlbQmVdLmw9Z2UpfX19KHZlLGVyLFEpO3ZhciB0cj1CZS5tYXRjaChJTCk7dHImJmZ1bmN0aW9uIFBM'@;
put 'KHksUCl7dmFyIEk9bG4oeSwhMSwhMCk7UFsiIXByaW50Il18fChQWyIhcHJpbnQiXT17fSksUFsiIXByaW50Il0ucHJvcHN8fChQWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFE9UFsiIXByaW50Il0ucHJvcHM7SS5ncmlkTGluZXMmJihRLmdyaWRsaW5lcz15cihJLmdyaWRMaW5lcykpLG51'@;
put 'bGwhPUkuaG9yaXpvbnRhbENlbnRlcmVkJiYoUS5jZW50ZXJYPXlyKEkuaG9yaXpvbnRhbENlbnRlcmVkKSksbnVsbCE9SS52ZXJ0aWNhbENlbnRlcmVkJiYoUS5jZW50ZXJZPXlyKEkudmVydGljYWxDZW50ZXJlZCkpfSh0clswXSx2ZSk7dmFyIFpuPUJlLm1hdGNoKE12KTtabiYmKCh2ZVsi'@;
put 'IXByaW50Il18fCh2ZVsiIXByaW50Il09e30pKS5tYXJnaW5zPXZlWyIhbWFyZ2lucyJdPXhTKGxuKFpuWzBdKSkpO3ZhciBCcj1CZS5tYXRjaChXMyk7QnImJmZ1bmN0aW9uIHlTKHksUCl7dmFyIEk9bG4oeSwhMSwhMCk7ZGVsZXRlIEkuaWQsZGVsZXRlIElbMF0sUFsiIXByaW50Il18fChQ'@;
put 'WyIhcHJpbnQiXT17fSksUFsiIXByaW50Il0ucHJvcHN8fChQWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFE9UFsiIXByaW50Il0ucHJvcHM7SS5vcmllbnRhdGlvbiYmKFEub3JpZW50YXRpb249SS5vcmllbnRhdGlvbiksSS5zY2FsZSYmKFEuc2NhbGU9K0kuc2NhbGUpLCtJLmZpdFRvSGVp'@;
put 'Z2h0Pj0wJiYoKFEuZml0fHwoUS5maXQ9e30pKS5oZWlnaHQ9K0kuZml0VG9IZWlnaHQpLCtJLmZpdFRvV2lkdGg+PTAmJigoUS5maXR8fChRLmZpdD17fSkpLndpZHRoPStJLmZpdFRvV2lkdGgpLEkucGFwZXJIZWlnaHQmJkkucGFwZXJXaWR0aD9RLnBhcGVyPXt3aWR0aDpJLnBhcGVyV2lk'@;
put 'dGgsaGVpZ2h0OkkucGFwZXJIZWlnaHR9OkkucGFwZXJTaXplJiYoUS5wYXBlcj1RbVtRLnBhcGVyPStJLnBhcGVyU2l6ZV18fFEucGFwZXIpLEkuaG9yaXpvbnRhbERwaT9RLmRwaT0rSS5ob3Jpem9udGFsRHBpOkkudmVydGljYWxEcGkmJihRLmRwaT0rSS52ZXJ0aWNhbERwaSksImF1dG9t'@;
put 'YXRpYyIhPShJLmZpcnN0UGFnZU51bWJlcnx8ImF1dG9tYXRpYyIpJiYoUS5maXJzdD0rSS5maXJzdFBhZ2VOdW1iZXIpLHlyKEkuYmxhY2tBbmRXaGl0ZSkmJihRLmJ3PSEwKSx5cihJLmRyYWZ0KSYmKFEuZHJhZnQ9ITApLCJvdmVyVGhlbkRvd24iPT1JLnBhZ2VPcmRlciYmKFEub3JkZXI9'@;
put 'Im92ZXIiKSxrdltJLmNlbGxDb21tZW50c10mJihRLmNvbW1lbnRzPWt2W0kuY2VsbENvbW1lbnRzXSksYlNbSS5lcnJvcnNdJiYoUS5lcnJvcnM9YlNbSS5lcnJvcnNdKX0oQnJbMF0sdmUpO3ZhciBzaT1CZS5tYXRjaChLWik7c2kmJmZ1bmN0aW9uIEx2KHksUCl7aWYoUFsiIXByaW50Il18'@;
put 'fChQWyIhcHJpbnQiXT17fSkseVsxXSl7dmFyIEk9IiIsUT0wO3lbMV0ucmVwbGFjZSgkdCxmdW5jdGlvbihyZSxnZSl7aWYoIi8iIT1yZS5jaGFyQXQoMSkpST1yZS5zbGljZSgxLC0xKSxRPWdlK3JlLmxlbmd0aDtlbHNlIGlmKEkpe3ZhciBfZT1JLm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVy'@;
put 'IjoiZm9vdGVyIix2ZT1JLnJlcGxhY2UoL0hlYWRlcnxGb290ZXIvLCIiKTtJPSIiLFBbIiFwcmludCJdW19lXXx8KFBbIiFwcmludCJdW19lXT17fSksUFsiIXByaW50Il1bX2VdW3ZlXT14cihQaSh5WzFdLnNsaWNlKFEsZ2UpKSl9fSl9fShzaSx2ZSk7dmFyIHhpPUJlLm1hdGNoKFdkKTt4'@;
put 'aSYmKCh2ZVsiIXByaW50Il18fCh2ZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9dmVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBTUyh5KXt2YXIgUD1bXTtyZXR1cm4oeS5tYXRjaChDUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3ZhciBRPWxuKEkpO1AucHVzaCh7UjorUS5pZH0pfSks'@;
put 'UH0oeGlbMF0pKTt2YXIgSWk9QmUubWF0Y2goZlMpO0lpJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz12ZVsiIWNvbEJyZWFrcyJdPWZ1bmN0aW9uIEhMKHkpe3ZhciBQPVtdO3JldHVybih5Lm1hdGNoKENTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oSSl7'@;
put 'dmFyIFE9bG4oSSk7UC5wdXNoKHtDOitRLmlkfSl9KSxQfShJaVswXSkpO3ZhciBRcj1bXTtpZigoUXI9QmUubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYodmVbIiFyZWwiXT1RclsxXSksKFFyPUJlLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHZlWyIh'@;
put 'bGVncmVsIl09UXJbMV0pLChRcj1CZS5tYXRjaChoZikpJiYodmVbIiFjdHJsaWQiXT1Rci5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBsbihBbil9KSksKFFyPUJlLm1hdGNoKEV2KSkmJmZ1bmN0aW9uIGdTKHksUCl7eVsiIXRhYmxlcmVmcyJdfHwoeVsiIXRhYmxlcmVmcyJdPVtdKSwoUC5t'@;
put 'YXRjaChwUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3lbIiF0YWJsZXJlZnMiXS5wdXNoKGxuKEkpLmlkKX0pfSh2ZSxRclsxXSksUCYmUC5ub2RpbSYmKFNlLnMuYz1TZS5zLnI9MCksIXZlWyIhcmVmIl0mJlNlLmUuYz49U2Uucy5jJiZTZS5lLnI+PVNlLnMuciYmKHZlWyIhcmVmIl09'@;
put 'T28oU2UpKSxQLnNoZWV0Um93cz4wJiZ2ZVsiIXJlZiJdKXt2YXIgdXI9T2kodmVbIiFyZWYiXSk7UC5zaGVldFJvd3M8PSt1ci5lLnImJih1ci5lLnI9UC5zaGVldFJvd3MtMSx1ci5lLnI+U2UuZS5yJiYodXIuZS5yPVNlLmUuciksdXIuZS5yPHVyLnMuciYmKHVyLnMucj11ci5lLnIpLHVy'@;
put 'LmUuYz5TZS5lLmMmJih1ci5lLmM9U2UuZS5jKSx1ci5lLmM8dXIucy5jJiYodXIucy5jPXVyLmUuYyksdmVbIiFmdWxscmVmIl09dmVbIiFyZWYiXSx2ZVsiIXJlZiJdPU9vKHVyKSl9cmV0dXJuIGt0JiYodmVbIiFzaGVldEZvcm1hdCJdPWZ1bmN0aW9uIEpaKHkpe3ZhciBQPXt9LEk9e30s'@;
put 'UT0hMSxyZT17fSxnZT0hMTtyZXR1cm4geS5kZWZhdWx0Um93SGVpZ2h0JiYoUT0hMCxJLmhwdD1wYXJzZUZsb2F0KHkuZGVmYXVsdFJvd0hlaWdodCkpLHkuemVyb0hlaWdodCYmKFE9ITAsSS5oaWRkZW49eXIoeS56ZXJvSGVpZ2h0KSkseS5iYXNlQ29sV2lkdGg/KGdlPSEwLHJlLndjaD1w'@;
put 'YXJzZUZsb2F0KHkuYmFzZUNvbFdpZHRoKSk6eS5kZWZhdWx0Q29sV2lkdGgmJihnZT0hMCxyZS53Y2g9cGFyc2VGbG9hdCh5LmRlZmF1bHRDb2xXaWR0aCktNS9wbCkseS5vdXRsaW5lTGV2ZWxDb2wmJihQLmNvbG91dGxpbmU9cGFyc2VJbnQoeS5vdXRsaW5lTGV2ZWxDb2wpKSx5Lm91dGxp'@;
put 'bmVMZXZlbFJvdyYmKFAucm93b3V0bGluZT1wYXJzZUludCh5Lm91dGxpbmVMZXZlbFJvdykpLHkudGhpY2tCb3R0b20mJihQLmJvdHRoaWNrPXlyKHkudGhpY2tCb3R0b20pKSx5LnRoaWNrVG9wJiYoUC50b3B0aGljaz15cih5LnRoaWNrVG9wKSkseS5keURlc2NlbnQmJihQLmR5RGVzY2Vu'@;
put 'dD1wYXJzZUZsb2F0KHkuZHlEZXNjZW50KSksUSYmKEwzKEkpLFAucm93PUkpLGdlJiYocHUocmUpLFAuY29sPXJlKSxQfShsbihrdFswXSkpKSxUdC5sZW5ndGg+MCYmKHZlWyIhY29scyJdPVR0KSx1bi5sZW5ndGg+MCYmKHZlWyIhbWVyZ2VzIl09dW4pLFFbIiFpZCJdW3ZlWyIhcmVsIl1d'@;
put 'JiYodmVbIiFkcmF3ZWwiXT1RWyIhaWQiXVt2ZVsiIXJlbCJdXSksUVsiIWlkIl1bdmVbIiFsZWdyZWwiXV0mJih2ZVsiIWxlZ2RyYXdlbCJdPVFbIiFpZCJdW3ZlWyIhbGVncmVsIl1dKSwodmVbIiFjdHJsaWQiXXx8W10pLmZvckVhY2goZnVuY3Rpb24oQW4pe0FuLnJlbD1RWyIhaWQiXVtB'@;
put 'bi5pZF19KSxudWxsPT12ZVsiIWdyaWRsaW5lcyJdJiYodmVbIiFncmlkbGluZXMiXT0hMCksdmV9KHksUSxJLHJlLGdlLF9lLHZlKX0obnQsUCxyZSxTZSxnZVtRXSxIZSxCZSxHZSk7YnJlYWs7Y2FzZSJjaGFydCI6ZHQ9ZnVuY3Rpb24gVkkoeSxQLEksUSxyZSxnZSxfZSx2ZSl7cmV0dXJu'@;
put 'Ii5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gdHAoeSxQLEksUSxyZSl7aWYoIXkpcmV0dXJuIHk7UXx8KFE9eyIhaWQiOnt9fSk7dmFyIGdlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxfZT1bXSx2ZT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbihIZSxC'@;
put 'ZSxHZSl7c3dpdGNoKEdlKXtjYXNlIDU1MDpnZVsiIXJlbCJdPUhlO2JyZWFrO2Nhc2UgNjUxOnJlLlNoZWV0c1tJXXx8KHJlLlNoZWV0c1tJXT17fSksSGUubmFtZSYmKHJlLlNoZWV0c1tJXS5Db2RlTmFtZT1IZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1MjpjYXNlIDY2OTpjYXNl'@;
put 'IDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3NjpjYXNlIDMwNzI6YnJlYWs7Y2FzZSAzNTp2ZT0hMDticmVhaztjYXNlIDM2OnZlPSExO2JyZWFrO2Nhc2UgMzc6X2UucHVzaChCZSk7YnJlYWs7Y2FzZSAzODpfZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChCZXx8IiIpLmluZGV4T2Yo'@;
put 'IkJlZ2luIik+MClfZS5wdXNoKEJlKTtlbHNlIGlmKChCZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApX2UucG9wKCk7ZWxzZSBpZighdmV8fFAuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitHZSsiICIrQmUpfX0sUCksUVsiIWlkIl1bZ2VbIiFyZWwiXV0mJihnZVsi'@;
put 'IWRyYXdlbCJdPVFbIiFpZCJdW2dlWyIhcmVsIl1dKSxnZX0oeSxRLEkscmUsZ2UpOmZ1bmN0aW9uIEozKHksUCxJLFEscmUpe2lmKCF5KXJldHVybiB5O1F8fChRPXsiIWlkIjp7fX0pO3ZhciBfZSxnZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sdmU9eS5t'@;
put 'YXRjaCh4dik7dmUmJnY2KHZlWzBdLDAscmUsSSk7dmFyIFNlPXkubWF0Y2goTXYpO3JldHVybiBTZSYmKGdlWyIhbWFyZ2lucyJdPXhTKGxuKFNlWzBdKSkpLChfZT15Lm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKGdlWyIhcmVsIl09X2VbMV0pLFFbIiFpZCJdW2dlWyIhcmVs'@;
put 'Il1dJiYoZ2VbIiFkcmF3ZWwiXT1RWyIhaWQiXVtnZVsiIXJlbCJdXSksZ2V9KHksMCxJLHJlLGdlKX0obnQsUCxyZSxTZSxnZVtRXSxIZSk7YnJlYWs7Y2FzZSJtYWNybyI6ZHQ9ZnVuY3Rpb24gQkkoeSxQLEksUSxyZSxnZSxfZSx2ZSl7cmV0dXJuIFAuc2xpY2UoLTQpLHsiIXR5cGUiOiJt'@;
put 'YWNybyJ9fSgwLFApO2JyZWFrO2Nhc2UiZGlhbG9nIjpkdD1mdW5jdGlvbiBqSSh5LFAsSSxRLHJlLGdlLF9lLHZlKXtyZXR1cm4gUC5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLFApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc2hlZXQgdHlw'@;
put 'ZSAiK3ZlKX1pZihTZS5jYWxsYmFjaylyZXR1cm47X2VbUV09ZHQsZnVuY3Rpb24gUE0oeSxQLEksUSxyZSxnZSxfZSx2ZSl7aWYoeSYmeVsiIWRyYXdlbCJdKXt2YXIgU2U9c24oeVsiIWRyYXdlbCJdLlRhcmdldCxRKSxIZT1CaShTZSksQmU9ZnVuY3Rpb24gR0QoeSxQLEksUSxyZSl7dmFy'@;
put 'IGdlPXtjaGFydHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYoIXkpcmV0dXJuIGdlO3ZhciBfZT1yZXx8e307cmV0dXJuKHkubWF0Y2goLzxbXjxdKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9y'@;
put 'fHR3b0NlbGxBbmNob3IpLio/Pi9nKXx8W10pLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT0iIixIZT17dHlwZToiIn0sQmU9e30sR2U9ITAsbnQ9ITEsZHQ9ITEsQ3Q9ITEsY3Q9e3M6e319LGJ0PS0xLEZ0PVtdLGt0PVtdLFR0PXtzOnthbGlnbm1lbnQ6e2hvcml6b250YWw6ImNlbnRl'@;
put 'ciIsdmVydGljYWw6ImNlbnRlciJ9fX0sWnQ9IiIscG49LTEsdW49e307dmUucmVwbGFjZSgkdCxmdW5jdGlvbihxbix6bil7RnQ9bnVsbDt2YXIga249bG4ocW4pLGVyPWpuKGtuWzBdKS5yZXBsYWNlKC9bXC9dPz4kLywiIik7c3dpdGNoKGVyKXtjYXNlIjxjbGllbnREYXRhIjpicmVhaztj'@;
put 'YXNlIjxhYnNvbHV0ZUFuY2hvciI6Y2FzZSI8b25lQ2VsbEFuY2hvciI6Y2FzZSI8dHdvQ2VsbEFuY2hvciI6SGUudHlwZT1qbihrblswXSkucmVwbGFjZSgvWzw+XS9nLCIiKTticmVhaztjYXNlIjwvYWJzb2x1dGVBbmNob3IiOmNhc2UiPC9vbmVDZWxsQW5jaG9yIjpjYXNlIjwvdHdvQ2Vs'@;
put 'bEFuY2hvciI6YnJlYWs7Y2FzZSI8cG9zIjpIZS5wb3M9e3g6K2tuLngseTora24ueX07YnJlYWs7Y2FzZSI8ZXh0IjpHZSYmKEhlLmV4dD17eDora24uY3gseTora24uY3l9KTticmVhaztjYXNlIjxmcm9tIjpjYXNlIjx0byI6QmU9e307YnJlYWs7Y2FzZSI8L2Zyb20iOkdlJiYoSGUuZnJv'@;
put 'bT1CZSk7YnJlYWs7Y2FzZSI8L3RvIjpHZSYmKEhlLnRvPUJlKTticmVhaztjYXNlIjxjb2wiOmNhc2UiPGNvbE9mZiI6Y2FzZSI8cm93IjpjYXNlIjxyb3dPZmYiOmJ0PXpuK3FuLmxlbmd0aDticmVhaztjYXNlIjwvY29sIjpCZS5jPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8L2Nv'@;
put 'bE9mZiI6QmUuY09mZj0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPC9yb3ciOkJlLnI9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjwvcm93T2ZmIjpCZS5yT2ZmPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8c3AiOlNlPSJzaGFwZSIsVHQuQW5jaG9yPUhlLGdlLnNoYXBl'@;
put 'cy5wdXNoKFR0KSxHZT0hMTticmVhaztjYXNlIjwvc3AiOkdlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6U2U9ImdyYXBoaWMiLEdlPSExO2JyZWFrO2Nhc2UiPC9ncmFwaGljRnJhbWUiOkdlPSEwO2JyZWFrO2Nhc2UiPHBpYyI6U2U9InBpY3R1cmUiLEdlPSExO2JyZWFrO2Nhc2Ui'@;
put 'PC9waWMiOkdlPSEwO2JyZWFrO2Nhc2UiPGdycFNwIjpTZT0iZ3JvdXBzaGFwZSIsR2U9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpHZT0hMDticmVhaztjYXNlIjxncmFwaGljIjpjYXNlIjwvZ3JhcGhpYyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNhc2UiPG9mZiI6YnJlYWs7Y2FzZSI8'@;
put 'Z3JhcGhpY0RhdGEiOm50PSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6bnQ9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOm50PSEwO2JyZWFrO2Nhc2UiPC9ibGlwRmlsbCI6bnQ9ITE7YnJlYWs7Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1JlY3QiOm50PSEwO2JyZWFrO2Nhc2Ui'@;
put 'PC9zcmNSZWN0IjpudD0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKGR0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0xKVswXSYmKFR0LnMuZmdDb2xvcj1udWxsKTticmVhaztjYXNlIjwvc29saWRGaWxsIjppZihkdHx8Q3QpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTIpWzBdP1R0LnMu'@;
put 'ZmdDb2xvcj11bjoiPHJQciI9PWt0LnNsaWNlKC0yKVswXSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5jb2xvcj11biksdW49e30sQ3Q9ITE7YnJlYWs7Y2FzZSI8cHJzdEdlb20iOiJzaGFwZSI9PVNlJiYoVHRbIiFzaGFwZSJdPWtuLnByc3QpO2JyZWFrO2Nhc2UiPC9wcnN0'@;
put 'R2VvbSI6Y2FzZSI8YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6bnQ9ITAsVHQuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpudD0hMTticmVhaztjYXNlIjxib2R5UHIiOlR0LnMuYWxpZ25tZW50LnZlcnRpY2FsPVlEW2tuLmFuY2hvcnx8InQiXXx8InRvcCI7YnJlYWs7Y2FzZSI8bHN0'@;
put 'U3R5bGUiOmJyZWFrO2Nhc2UiPHQiOnBuPXpuK3FuLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6WnQrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOlp0Kz12ZS5zbGljZShwbix6bik7YnJlYWs7Y2FzZSI8cFByIjpUdC5zLmFsaWdubWVudC5ob3Jpem9udGFsfHwoVHQucy5hbGln'@;
put 'bm1lbnQuaG9yaXpvbnRhbD1JQ1trbi5hbGdufHwibCJdfHwibGVmdCIpLGt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGN0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9SUNba24uYWxnbnx8ImwiXXx8ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOmtuLnN6JiZrdC5pbmRleE9mKCI8dHhCb2R5'@;
put 'Iik+LTEmJihUdC5zLnN6PWN0LnMuc3o9K2tuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6WnQ9IiIsY3Q9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJlYWs7Y2FzZSI8L3AiOiJzaGFwZSI9PVNlJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihUdC52PShUdC52fHwiIikrWnQs'@;
put 'Y3Qudj1adCxUdC5SLnB1c2goY3QpKTticmVhaztjYXNlIjxsYXRpbiI6a24udHlwZWZhY2UmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGN0LnMubmFtZT1rbi50eXBlZmFjZSk7YnJlYWs7Y2FzZSI8c3R5bGUiOm50PSEwLGR0PSEwO2JyZWFrO2Nhc2UiPC9zdHlsZSI6bnQ9ITEsZHQ9'@;
put 'ITE7YnJlYWs7Y2FzZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiFkdCYmInNoYXBlIj09U2UmJihUdC5zLmZnQ29sb3I9dW4pLHVuPXt9O2JyZWFrO2Nhc2UiPC9mb250UmVmIjohZHQmJiJzaGFw'@;
put 'ZSI9PVNlJiYoVHQucy5jb2xvcj11biksdW49e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgdHI9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4MjoiZGsyIn1ba24udmFsXXx8a24udmFsLFpuPSgoUS50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2NoZW1lfHxbXSkuZmluZChm'@;
put 'dW5jdGlvbihzaSl7cmV0dXJuIHNpLm5hbWU9PXRyfSk7Wm4/dW4ucmdiPVpuLnJnYjpDdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6Q3Q9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6dW4ucmdiPWtuLnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpjYXNlIjxzeXNDbHIiOmNh'@;
put 'c2UiPHByc3RDbHIiOkN0PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpGdD1nZS5jaGFydHM7dmFyIEJyPWtuLmlkO2Nhc2UiPGJsaXAiOkZ0fHwoRnQ9Z2UuaW1hZ2VzLEJyPWtuLmVtYmVkKSxGdC5wdXNoKHtBbmNob3I6SGUsVGFyZ2V0OihQWyIhaWQiXVtCcl18fHt9KS5UYXJnZXR9KSxrbi5s'@;
put 'aW5rJiYoRnRbRnQubGVuZ3RoLTFdLkxpbms9KFBbIiFpZCJdW2tuLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjpudD0hMDticmVhaztjYXNlIjwvZ3JwU3BQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8bnZHcnBTcFByIjpudD0hMDticmVhaztjYXNlIjwvbnZHcnBTcFBy'@;
put 'IjpudD0hMTticmVhaztjYXNlIjxzcFByIjpudD0hMDticmVhaztjYXNlIjwvc3BQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2giOmNhc2UiPGZpbGxSZWN0IjpjYXNlIjxudkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvbnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8'@;
put 'Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9udlBpY1ByIjpjYXNlIjxjTnZQaWNQciI6Y2FzZSI8L2NOdlBpY1ByIjpjYXNlIjxwaWNMb2NrcyI6Y2FzZSI8Y052R3JwU3BQ'@;
put 'ciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NOdlNwUHIiOmNhc2UiPHNwTG9ja3MiOmJyZWFrO2Nhc2UiPGNOdlByIjpudD0hMDticmVhaztjYXNlIjwvY052UHIiOm50PSEx'@;
put 'O2JyZWFrO2Nhc2UiPGN4blNwIjpudD0hMDticmVhaztjYXNlIjwvY3huU3AiOm50PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9jTnZDeG5TcFByIjpudD0hMTticmVhaztjYXNlIjxudkN4blNwUHIiOmNhc2UiPC9udkN4blNwUHIiOmJyZWFrO2Nhc2Ui'@;
put 'PGV4dExzdCI6bnQ9ITAsZHQ9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6bnQ9ITEsZHQ9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihfZSYmX2UuV1RGJiYhbnQpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitrblswXSsiIGluIGRyYXdpbmciKX1yZXR1cm4i'@;
put 'PC8iPT1lci5zbGljZSgwLDIpP2t0LnBvcCgpOiIvPiIhPXFuLnNsaWNlKHFuLmxlbmd0aC0yKSYma3QucHVzaChlciksIiJ9KX0pLGdlfShRdChJLFNlLCEwKSxEbyhRdChJLEhlLCEwKSxTZSksMCx2ZSxyZSk7aWYoQmUpe2lmKEJlLmNoYXJ0cylmb3IodmFyIEdlPTA7R2U8QmUuY2hhcnRz'@;
put 'Lmxlbmd0aDsrK0dlKXt2YXIgbnQ9QmUuY2hhcnRzW0dlXSxkdD1zbihudC5UYXJnZXQsU2UpLEN0PUJpKGR0KSxjdD0iY2hhcnQiPT1QJiYwPT1HZSxidD1tMChRdChJLGR0LCEwKSwwLDAsRG8oUXQoSSxDdCwhMCksZHQpLDAsY3Q/eTpudWxsLG50LGN0P251bGw6eSk7Y3R8fCh5WyIhY2hh'@;
put 'cnRzIl18fCh5WyIhY2hhcnRzIl09W10pLHlbIiFjaGFydHMiXS5wdXNoKGJ0KSl9aWYocmUuYm9va0ltYWdlcyYmQmUuaW1hZ2VzKWZvcih2YXIgRnQ9MDtGdDxCZS5pbWFnZXMubGVuZ3RoOysrRnQpe3ZhciBrdD1CZS5pbWFnZXNbRnRdLFR0PXsiIXR5cGUiOiJpbWFnZSIsIiFwb3MiOnhD'@;
put 'KGt0LkFuY2hvciksIiFwb3NUeXBlIjprdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6c2Yoa3QuQW5jaG9yLHkpLCIhcmVscG9zIjpLbShrdC5BbmNob3IseSl9O2lmKGt0LlRhcmdldCYmKFR0WyIhcGF0aCJdPXNuKGt0LlRhcmdldCxTZSksVHRbIiFkYXRh'@;
put 'Il09THQoSSxUdFsiIXBhdGgiXSksVHRbIiFkYXRhdHlwZSJdPSJzdHJpbmciPT10eXBlb2YgVHRbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIpLGt0LkxpbmsmJihUdFsiIWRhdGF0eXBlIl18fChUdFsiIWRhdGF0eXBlIl09InJlbW90ZSIpLFR0WyIhbGluayJdPWt0LkxpbmspLCFUdFsi'@;
put 'IWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91bmQiO3lbIiFpbWFnZXMiXXx8KHlbIiFpbWFnZXMiXT1bXSkseVsiIWltYWdlcyJdLnB1c2goVHQpfXZhciBadCxwbjtpZihCZS5zaGFwZXMpZm9yKHZhciB1bj0wO3VuPEJlLnNoYXBlcy5sZW5ndGg7Kyt1bilwbj17'@;
put 'IiF0eXBlIjoic2hhcGUiLCIhcG9zIjpzZigoWnQ9QmUuc2hhcGVzW3VuXSkuQW5jaG9yLHkpLCIhcG9zVHlwZSI6WnQuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOnNmKFp0LkFuY2hvcix5KSwiIXJlbHBvcyI6S20oWnQuQW5jaG9yLHkpfSxbInYiLCIhc2hh'@;
put 'cGUiLCJzIiwiUiJdLmZvckVhY2goS24pLHlbIiFzaGFwZXMiXXx8KHlbIiFzaGFwZXMiXT1bXSkseVsiIXNoYXBlcyJdLnB1c2gocG4pfX1mdW5jdGlvbiBLbihxbil7WnRbcW5dJiYocG5bcW5dPVp0W3FuXSl9fShkdCx2ZSx5LFAsU2UsMCwwLEJlKTt2YXIgQ3Q9W107cmV0dXJuIGdlJiZn'@;
put 'ZVtRXSYmbHQoZ2VbUV0pLmZvckVhY2goZnVuY3Rpb24oY3Qpe2lmKGdlW1FdW2N0XS5UeXBlPT1IaS5DTU5UKXt2YXIgYnQ9c24oZ2VbUV1bY3RdLlRhcmdldCxQKTtpZighKEN0PWZ1bmN0aW9uIGRZKHksUCxJKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBRRCh5LFAp'@;
put 'e3ZhciBJPVtdLFE9W10scmU9e30sZ2U9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24odmUsU2UsSGUpe3N3aXRjaChIZSl7Y2FzZSA2MzI6US5wdXNoKHZlKTticmVhaztjYXNlIDYzNTpyZT12ZTticmVhaztjYXNlIDYzNzpyZS50PXZlLnQscmUuaD12ZS5oLHJlLnI9dmUucjticmVhaztjYXNl'@;
put 'IDYzNjppZihyZS5hdXRob3I9UVtyZS5pYXV0aG9yXSxkZWxldGUgcmUuaWF1dGhvcixQLnNoZWV0Um93cyYmcmUucmZ4JiZQLnNoZWV0Um93czw9cmUucmZ4LnIpYnJlYWs7cmUudHx8KHJlLnQ9IiIpLGRlbGV0ZSByZS5yZngsSS5wdXNoKHJlKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpj'@;
put 'YXNlIDM4OmJyZWFrO2Nhc2UgMzU6Z2U9ITA7YnJlYWs7Y2FzZSAzNjpnZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKFNlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoU2V8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFnZXx8UC5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3Rl'@;
put 'ZCByZWNvcmQgIitIZSsiICIrU2UpfX0pLEl9KHksSSk6ZnVuY3Rpb24gSEMoeSxQKXtpZih5Lm1hdGNoKC88KD86XHcrOik/Y29tbWVudHMgKlwvPi8pKXJldHVybltdO3ZhciBJPVtdLFE9W10scmU9eS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0'@;
put 'aG9ycz4vKTtyZSYmcmVbMV0mJnJlWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZigiIiE9PV9lJiYiIiE9PV9lLnRyaW0oKSl7dmFyIHZlPV9lLm1hdGNoKC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3ZlJiZJLnB1c2godmVbMV0pfX0p'@;
put 'O3ZhciBnZT15Lm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIGdlJiZnZVsxXSYmZ2VbMV0uc3BsaXQoLzxcL1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZigiIiE9PV9lJiYiIiE9PV9l'@;
put 'LnRyaW0oKSl7dmFyIHZlPV9lLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHZlKXt2YXIgU2U9bG4odmVbMF0pLEhlPXthdXRob3I6U2UuYXV0aG9ySWQmJklbU2UuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6U2UucmVmLGd1aWQ6U2UuZ3VpZH0sQmU9c3MoU2Uu'@;
put 'cmVmKTtpZighKFAuc2hlZXRSb3dzJiZQLnNoZWV0Um93czw9QmUucikpe3ZhciBHZT1fZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4vKSxudD0hIUdlJiYhIUdlWzFdJiZEOShHZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07SGUucj1udC5yLCI8dD48'@;
put 'L3Q+Ij09bnQuciYmKG50LnQ9bnQuaD0iIiksSGUudD0obnQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFAuY2VsbEhUTUwmJihIZS5oPW50LmgpLFEucHVzaChIZSl9fX19KSxRfSh5LEkpfShMdCh5LGJ0LCEwKSxidCxTZSkpfHwhQ3QubGVuZ3Ro'@;
put 'KXJldHVybjshZnVuY3Rpb24gJDkoeSxQKXt2YXIgUSxJPUFycmF5LmlzQXJyYXkoeSk7UC5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgZ2U9c3MocmUucmVmKTtpZihJPyh5W2dlLnJdfHwoeVtnZS5yXT1bXSksUT15W2dlLnJdW2dlLmNdKTpRPXlbcmUucmVmXSwhUSl7UT17dDoieiJ9LEk/'@;
put 'eVtnZS5yXVtnZS5jXT1ROnlbcmUucmVmXT1RO3ZhciBfZT1PaSh5WyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtfZS5zLnI+Z2UuciYmKF9lLnMucj1nZS5yKSxfZS5lLnI8Z2UuciYmKF9lLmUucj1nZS5yKSxfZS5zLmM+Z2UuYyYmKF9lLnMuYz1nZS5jKSxfZS5lLmM8Z2UuYyYmKF9l'@;
put 'LmUuYz1nZS5jKTt2YXIgdmU9T28oX2UpO3ZlIT09eVsiIXJlZiJdJiYoeVsiIXJlZiJdPXZlKX1RLmN8fChRLmM9W10pO3ZhciBTZT17YTpyZS5hdXRob3IsdDpyZS50LHI6cmUucn07U2UuciYmInN0cmluZyI9PXR5cGVvZiBTZS5yJiYoU2UuUj1EbShTZS5yKSkscmUuaCYmKFNlLmg9cmUu'@;
put 'aCksUS5jLnB1c2goU2UpfSl9KGR0LEN0KX19KSxmdW5jdGlvbiBwUih5LFAsSSxRLHJlLGdlLF9lKXsheXx8IXlbIiF0YWJsZXJlZnMiXXx8IUl8fCFJWyIhaWQiXXx8KHlbIiF0YWJsZXMiXT1bXSx5WyIhdGFibGVyZWZzIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPUlbIiFpZCJd'@;
put 'W3ZlXTtpZihTZSYmU2UuVGFyZ2V0KXt2YXIgSGU9c24oU2UuVGFyZ2V0LFEpOyFmdW5jdGlvbiAkNCh5LFAsSSxRLHJlKXt2YXIgZ2U9e3N0eWxlOnt9LGhlYWRlcjowfSxfZT0hMTt5LnJlcGxhY2UoJHQsZnVuY3Rpb24odmUpe3ZhciBTZT1sbih2ZSk7c3dpdGNoKGpuKFNlWzBdKSl7Y2Fz'@;
put 'ZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0ZT4iOmNhc2UiPC9zb3J0U3RhdGU+IjpjYXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6Y2Fz'@;
put 'ZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3JtdWxh'@;
put 'PiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENvbmRpdGlvbj4iOmNhc2UiPHNvcnRDb25kaXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+'@;
put 'IjpicmVhaztjYXNlIjx0YWJsZSI6U2UucmVmJiYoZ2UucmVmPVNlLnJlZiksU2UubmFtZT9nZS5uYW1lPVNlLm5hbWU6U2UuZGlzcGxheU5hbWUmJihnZS5uYW1lPVNlLmRpc3BsYXlOYW1lKSxudWxsIT1TZS5oZWFkZXJyb3djb3VudCYmMSE9K1NlLmhlYWRlcnJvd2NvdW50P2dlLmhlYWRl'@;
put 'cj0rU2UuaGVhZGVycm93Y291bnQ6bnVsbD09U2UuaGVhZGVycm93Y291bnQmJihnZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8YXV0b0ZpbHRlciI6Y2FzZSI8YXV0b0ZpbHRlcj4iOmdlLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4iOmdl'@;
put 'LmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOlNlLnNob3dSb3dTdHJpcGVzJiYoZ2Uuc3R5bGUucm93c3RyaXBlPXlyKFNlLnNob3dSb3dTdHJpcGVzKSksU2Uuc2hvd0NvbHVtblN0cmlwZXMmJihnZS5zdHlsZS5jb2xzdHJpcGU9eXIoU2Uuc2hvd0NvbHVtblN0cmlwZXMp'@;
put 'KSxTZS5zaG93Rmlyc3RDb2x1bW4mJihnZS5zdHlsZS5jb2xmaXJzdD15cihTZS5zaG93Rmlyc3RDb2x1bW4pKSxTZS5zaG93TGFzdENvbHVtbiYmKGdlLnN0eWxlLmNvbGxhc3Q9eXIoU2Uuc2hvd0xhc3RDb2x1bW4pKSxTZS5uYW1lJiYoZ2Uuc3R5bGUubmFtZT1TZS5uYW1lLnJlcGxhY2Uo'@;
put 'L15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOmdlLmNvbHMucHVzaCh7aWQ6K1NlLmlkLG5hbWU6U2UubmFtZX0pO2JyZWFrO2Nhc2UiPGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6Y2FzZSI8Y3VzdG9tRmls'@;
put 'dGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4iOmNhc2UiPC9jdXN0b21GaWx0ZXJzPiI6Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoIV9lJiZyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJl'@;
put 'Y29nbml6ZWQgIitTZVswXSsiIGluIHRhYmxlIil9cmV0dXJuIHZlfSksZ2UuZmlsdGVyfHwoZ2UuZmlsdGVyPSExKSxnZS5zdHlsZS5uYW1lJiYhZ2Uuc3R5bGUubmFtZS5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLykmJkkuVGFibGUmJkkuVGFibGUuZm9yRWFjaChmdW5jdGlv'@;
put 'bih2ZSl7KHZlLm5hbWU9PWdlLnN0eWxlLm5hbWV8fHZlLnJhd25hbWU9PWdlLnN0eWxlLm5hbWUpJiYoZ2Uuc3R5bGUucmF3PW9uKHZlKSl9KSxQWyIhdGFibGVzIl0ucHVzaChnZSl9KEx0KFAsSGUsITApLHkscmUsMCxfZSl9fSksZGVsZXRlIHlbIiF0YWJsZXJlZnMiXSl9KGR0LHksZ2Vb'@;
put 'UV0sUCxHZSwwLFNlKSx0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiJiZGNi5wdXNoKFtkdCx5LGdlW1FdLFAse1NoZWV0czpfZX0sR2UsU2VdKSxmdW5jdGlvbiBGTSh5LFAsSSxRLHJlLGdlLF9lLHZlKXtpZih5JiZ5WyIhbGVnZHJhd2VsIl0pe3ZhciBTZT1zbih5WyIhbGVnZHJhd2Vs'@;
put 'Il0uVGFyZ2V0LFEpLEhlPVF0KEksU2UsITApO0hlJiZmdW5jdGlvbiAkRCh5LFAsSSl7dmFyIFE9MDsoeS5tYXRjaChOMyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgRnQsa3QsVHQsWnQscG4sS24sdW4scW4sZ2U9IiIsX2U9ITAsdmU9IiIsU2U9LTEsSGU9e30sQmU9e30sR2U9'@;
put 'e30sbnQ9LTEsZHQ9LTEsQ3Q9IiIsY3Q9IiIsYnQ9IiIsem49ITEsa249ITE7c3dpdGNoKHJlLnJlcGxhY2UoJHQsZnVuY3Rpb24oWm4sQnIpe3ZhciBzaT1sbihabik7c3dpdGNoKGpuKHNpWzBdKSl7Y2FzZSI8c2hhcGUiOnNpLmZpbGxjb2xvciYmKEhlLmNvbG9yMT1zaS5maWxsY29sb3Ip'@;
put 'LHNpLnN0cm9rZWNvbG9yJiYoR2UuY29sb3I9c2kuc3Ryb2tlY29sb3IpO2JyZWFrO2Nhc2UiPGZpbGwiOmNhc2UiPGZpbGw+IjoiPHY6ZmlsbCI9PXNpWzBdJiYoc2kuY29sb3IyJiYoSGUuY29sb3IyPXNpLmNvbG9yMiksc2kudHlwZSYmKEhlLnR5cGU9c2kudHlwZSkpO2JyZWFrO2Nhc2Ui'@;
put 'PC9maWxsPiI6Y2FzZSI8bG9jayI6Y2FzZSI8bG9jay8+IjpicmVhaztjYXNlIjxzaGFkb3ciOnNpLmNvbG9yJiYoQmUuY29sb3I9c2kuY29sb3IpLHNpLm9uJiYoQmUub249c2kub24pO2JyZWFrO2Nhc2UiPENsaWVudERhdGEiOnNpLk9iamVjdFR5cGUmJihnZT1zaS5PYmplY3RUeXBlKTti'@;
put 'cmVhaztjYXNlIjxWaXNpYmxlIjpjYXNlIjxWaXNpYmxlLz4iOl9lPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNlIjxSb3c+IjpjYXNlIjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2FzZSI8Rm1sYU1hY3JvPiI6'@;
put 'Y2FzZSI8Rm1sYUxpbmsiOmNhc2UiPEZtbGFMaW5rPiI6Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxUeXBlPiI6Y2FzZSI8VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2UiPE1heCI6Y2FzZSI8TWF4'@;
put 'PiI6Y2FzZSI8SW5jIjpjYXNlIjxJbmM+IjpjYXNlIjxQYWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRib3giOmNhc2UiPHRleHRib3g+IjpTZT1Ccitabi5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4iOnZlPXJlLnNsaWNlKFNl'@;
put 'LEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1Jvdz4iOm50PStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9Db2x1bW4+IjpkdD0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6Q3Q9cmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztj'@;
put 'YXNlIjwvRm1sYUxpbms+IjpjdD1yZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhUmFuZ2U+Ijp1bj1yZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9TZWxUeXBlPiI6cW49cmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvVmFsPiI6RnQ9'@;
put 'K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L01pbj4iOmt0PStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpUdD0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvSW5jPiI6WnQ9K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJl'@;
put 'YWs7Y2FzZSI8L1BhZ2U+Ijpwbj0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvQ2hlY2tlZD4iOktuPStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC90ZXh0Ym94PiI6YnQ9cmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjxNb3ZlV2l0aENl'@;
put 'bGxzLz4iOmNhc2UiPE1vdmVXaXRoQ2VsbHM+Ijp6bj0hMDticmVhaztjYXNlIjxTaXplV2l0aENlbGxzLz4iOmNhc2UiPFNpemVXaXRoQ2VsbHM+Ijprbj0hMH1yZXR1cm4iIn0pLGdlKXtjYXNlIk5vdGUiOnZhciBlcj1xby5zaGVldF9nZXRfY2VsbChQLG50Pj0wJiZkdD49MD9kaSh7cjpu'@;
put 'dCxjOmR0fSk6SVtRXS5yZWYpO2VyLmMmJihlci5jLmhpZGRlbj1fZSx2ZSYmKGVyLmMucmF3YW5jaG9yPXZlLFhtKHZlLGVyLmMpLEVDKGVyLmNbIiFwb3MiXSwyKiEhem4rISFrbixQKSksSGUuY29sb3IxJiYoZXIuYy5maWxsPUhlKSxCZS5jb2xvciYmKGVyLmMuc2hhZG93PUJlKSxHZS5j'@;
put 'b2xvciYmKGVyLmMuc3Ryb2tlPUdlKSksKytRO2JyZWFrO2Nhc2UiQnV0dG9uIjpjYXNlIkdCb3giOmNhc2UiRHJvcCI6Y2FzZSJMYWJlbCI6Y2FzZSJDaGVja2JveCI6Y2FzZSJTY3JvbGwiOmNhc2UiTGlzdCI6Y2FzZSJSYWRpbyI6Y2FzZSJTcGluIjpjYXNlIkVkaXQiOlBbIiFjb250cm9s'@;
put 'cyJdfHwoUFsiIWNvbnRyb2xzIl09W10pO3ZhciB0cj17IiF0eXBlIjpnZX07dmUmJlhtKHZlLHRyKSxDdCYmKHRyLm1hY3JvPUN0LnJlcGxhY2UoIlswXSEiLCIiKSksY3QmJih0ci5saW5rPWN0KSwiU2Nyb2xsIj09Z2V8fCJTcGluIj09Z2U/KG51bGw9PUZ0JiYoRnQ9MCksbnVsbD09a3Qm'@;
put 'JihrdD0wKSxudWxsPT1UdCYmKFR0PTNlNCksbnVsbD09WnQmJihadD0xKSwiU2Nyb2xsIj09Z2UmJm51bGw9PXBuJiYocG49MTApKToiUmFkaW8iPT1nZXx8IkNoZWNrYm94Ij09Z2U/KG51bGw9PUtuJiYoS249MCksRnQ9S24pOigiTGlzdCI9PWdlfHwiRHJvcCI9PWdlKSYmKG51bGwhPXVu'@;
put 'JiYodHIucmVmPXVuKSxudWxsPT1xbiYmKHFuPSJTaW5nbGUiKSwiTGlzdCI9PWdlJiYodHIuc2VsPXFuKSksbnVsbCE9RnQmJih0ci52YWw9RnQpLG51bGwhPWt0JiYodHIubWluPWt0KSxudWxsIT1UdCYmKHRyLm1heD1UdCksbnVsbCE9WnQmJih0ci5zdGVwPVp0KSxudWxsIT1wbiYmKHRy'@;
put 'LnBhZ2U9cG4pLGJ0JiYodHIudD1idC5yZXBsYWNlKC9ccyo8W1xzXFNdKj8+XHMqL2csIiIpKSxQWyIhY29udHJvbHMiXS5wdXNoKHRyKX19KX0oUGkoSGUpLHksdmV8fFtdKSx5WyIhTERQIl09U2UseVsiIWN0cmxpZCJdJiZ5WyIhY3RybGlkIl0uZm9yRWFjaChmdW5jdGlvbihCZSl7aWYo'@;
put 'QmUucmVsJiZCZS5yZWwuVGFyZ2V0KXt2YXIgR2U9c24oQmUucmVsLlRhcmdldCxRKTtCZS5wYXRoPUdlLGRlbGV0ZSBCZS5yZWx9fSl9fShkdCwwLHksUCwwLDAsMCxDdCksZHR9Y2F0Y2goY3Qpe2lmKFNlLldURil0aHJvdyBjdH19ZnVuY3Rpb24gbGMoeSl7cmV0dXJuIi8iPT15LmNoYXJB'@;
put 'dCgwKT95LnNsaWNlKDEpOnl9dmFyIG1SPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBITSh5LFApe2lmKEY2PVtdLFA2KFA9UHx8e30pLG1uKHksIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxtbih5LCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBmdW5jdGlvbiBUTSh5LFApe1A9UHx8e30sbW4o'@;
put 'eSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIFZhKHksUCl7Zm9yKHZhciBRLHJlLEk9UXYoeSk7UT1Wci5leGVjKEkpOylzd2l0Y2goUVszXSl7Y2FzZSJtYW5pZmVzdCI6YnJlYWs7Y2FzZSJmaWxlLWVudHJ5IjppZigiLyI9PShyZT1sbihRWzBdLCExKSkucGF0aCYmcmUu'@;
put 'dHlwZSE9PVR1KXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93'@;
put 'IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKFAmJlAuV1RGKXRocm93IFF9fShMdCh5LCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSxQKTt2YXIgST1RdCh5LCJjb250ZW50LnhtbCIpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBjb250'@;
put 'ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBRPVEwKFBpKEkpLFApO3JldHVybiBtbih5LCJtZXRhLnhtbCIpJiYoUS5Qcm9wcz1PMihMdCh5LCJtZXRhLnhtbCIpKSksUX0oeSxQKTtpZihtbih5LCJJbmRleC9Eb2N1bWVudC5pd2EiKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9y'@;
put 'dGVkIE5VTUJFUlMgZmlsZSIpO3ZhciBnZSxfZSxJPWZ1bmN0aW9uIHB0KHkpe2Zvcih2YXIgUD15LkZ1bGxQYXRoc3x8bHQoeS5maWxlcyksST1bXSxRPTA7UTxQLmxlbmd0aDsrK1EpIi8iIT1QW1FdLnNsaWNlKC0xKSYmSS5wdXNoKFBbUV0pO3JldHVybiBJLnNvcnQoKX0oeSksUT1mdW5j'@;
put 'dGlvbiBjbSh5KXt2YXIgUD17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpb'@;
put 'XSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxj'@;
put 'dHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIXl8fCF5Lm1hdGNoKXJldHVybiBQO3ZhciBJPXt9O2lmKCh5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIHJlPWxuKFEpO3N3aXRjaChyZVswXS5yZXBsYWNlKEZuLCI8Iikp'@;
put 'e2Nhc2UiPD94bWwiOmJyZWFrO2Nhc2UiPFR5cGVzIjpQLnhtbG5zPXJlWyJ4bWxucyIrKHJlWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpJW3JlLkV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpXT1yZS5Db250ZW50VHlwZTticmVhaztjYXNl'@;
put 'IjxPdmVycmlkZSI6dm9pZCAwIT09UFtPbFtyZS5Db250ZW50VHlwZV1dJiZQW09sW3JlLkNvbnRlbnRUeXBlXV0ucHVzaChyZS5QYXJ0TmFtZSl9fSksUC54bWxucyE9PWlzLkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrUC54bWxucyk7cmV0dXJuIFAuY2FsY2No'@;
put 'YWluPVAuY2FsY2NoYWlucy5sZW5ndGg+MD9QLmNhbGNjaGFpbnNbMF06IiIsUC5zc3Q9UC5zdHJzLmxlbmd0aD4wP1Auc3Ryc1swXToiIixQLnN0eWxlPVAuc3R5bGVzLmxlbmd0aD4wP1Auc3R5bGVzWzBdOiIiLFAuY29ubj1QLmNvbm5zLmxlbmd0aD4wP1AuY29ubnNbMF06IiIsUC5kZWZh'@;
put 'dWx0cz1JLGRlbGV0ZSBQLmNhbGNjaGFpbnMsUH0oUXQoeSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxyZT0hMTtpZigwPT09US53b3JrYm9va3MubGVuZ3RoJiZMdCh5LF9lPSJ4bC93b3JrYm9vay54bWwiLCEwKSYmUS53b3JrYm9va3MucHVzaChfZSksMD09PVEud29ya2Jvb2tzLmxlbmd0'@;
put 'aCl7aWYoIUx0KHksX2U9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29ya2Jvb2siKTtRLndvcmtib29rcy5wdXNoKF9lKSxyZT0hMH0iYmluIj09US53b3JrYm9va3NbMF0uc2xpY2UoLTMpJiYocmU9ITApO3ZhciB2ZT17fSxTZT17fTtp'@;
put 'ZighUC5ib29rU2hlZXRzJiYhUC5ib29rUHJvcHMpe2lmKGY2PVtdLFEuc3N0KXRyeXtmNj1mdW5jdGlvbiBJNih5LFAsSSl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gY0QoeSxQKXt2YXIgST1bXSxRPSExO3JldHVybiBIbyh5LGZ1bmN0aW9uKGdlLF9lLHZlKXtzd2l0'@;
put 'Y2godmUpe2Nhc2UgMTU5OkkuQ291bnQ9Z2VbMF0sSS5VbmlxdWU9Z2VbMV07YnJlYWs7Y2FzZSAxOTpJLnB1c2goZ2UpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEwO2Nhc2UgMzU6UT0hMDticmVhaztjYXNlIDM2OlE9ITE7YnJlYWs7ZGVmYXVsdDppZihfZS5pbmRleE9mKCJCZWdpbiIpPjB8'@;
put 'fF9lLmluZGV4T2YoIkVuZCIpLCFRfHxQLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrdmUrIiAiK19lKX19KSxJfSh5LEkpOmZ1bmN0aW9uIHJDKHksUCl7dmFyIEk9W10sUT0iIjtpZigheSlyZXR1cm4gSTt2YXIgcmU9eS5tYXRjaChlQyk7aWYocmUpe1E9cmVb'@;
put 'Ml0ucmVwbGFjZSh0QywiIikuc3BsaXQobkMpO2Zvcih2YXIgZ2U9MDtnZSE9US5sZW5ndGg7KytnZSl7dmFyIF9lPUQ5KFFbZ2VdLnRyaW0oKSxQKTtudWxsIT1fZSYmKElbSS5sZW5ndGhdPV9lKX1yZT1sbihyZVsxXSksSS5Db3VudD1yZS5jb3VudCxJLlVuaXF1ZT1yZS51bmlxdWVDb3Vu'@;
put 'dH1yZXR1cm4gSX0oeSxJKX0oTHQoeSxsYyhRLnNzdCkpLFEuc3N0LFApfWNhdGNoKHJyKXtpZihQLldURil0aHJvdyBycn1QLmNlbGxTdHlsZXMmJlEudGhlbWVzLmxlbmd0aCYmKHZlPWZ1bmN0aW9uIEw2KHksUCxJKXtyZXR1cm4gR20oeSxJKX0oUXQoeSxRLnRoZW1lc1swXS5yZXBsYWNl'@;
put 'KC9eXC8vLCIiKSwhMCl8fCIiLDAsUCkpLFEuc3R5bGUmJihTZT1mdW5jdGlvbiAkdih5LFAsSSxRKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBCOSh5LFAsSSl7dmFyIFE9e051bWJlckZtdDpbXX07Zm9yKHZhciByZSBpbiB3Ll90YWJsZSlRLk51bWJlckZtdFtyZV09'@;
put 'dy5fdGFibGVbcmVdO1EuQ2VsbFhmPVtdLFEuRm9udHM9W10sUS5GaWxscz1bXSxRLkJvcmRlcnM9W107dmFyIGdlPVtdLF9lPSExO3JldHVybiBIbyh5LGZ1bmN0aW9uKFNlLEhlLEJlKXtzd2l0Y2goQmUpe2Nhc2UgNDQ6US5OdW1iZXJGbXRbU2VbMF1dPVNlWzFdLHcubG9hZChTZVsxXSxT'@;
put 'ZVswXSk7YnJlYWs7Y2FzZSA0Mzp6NChTZS5jb2xvcixQKSxRLkZvbnRzLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJl'@;
put 'YWs7Y2FzZSA0NTpTZS5mZ0NvbG9yJiZ6NChTZS5mZ0NvbG9yLFApLFNlLmJnQ29sb3ImJno0KFNlLmJnQ29sb3IsUCksUS5GaWxscy5wdXNoKFNlKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oR2Upe1NlW0dl'@;
put 'XSYmU2VbR2VdLmNvbG9yJiZ6NChTZVtHZV0uY29sb3IsUCl9KSxRLkJvcmRlcnMucHVzaChTZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09Z2VbZ2UubGVuZ3RoLTFdJiZRLkNlbGxYZi5wdXNoKFNlKTticmVhaztjYXNlIDM1Ol9lPSEwO2JyZWFrO2Nhc2UgMzY6X2U9ITE7'@;
put 'YnJlYWs7Y2FzZSAzNzpnZS5wdXNoKEhlKSxfZT0hMDticmVhaztjYXNlIDM4OmdlLnBvcCgpLF9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoKEhlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKWdlLnB1c2goSGUpO2Vsc2UgaWYoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MClnZS5wb3AoKTtlbHNl'@;
put 'IGlmKCFfZXx8SS5XVEYmJiJCcnRBQ0JlZ2luIiE9Z2VbZ2UubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitCZSsiICIrSGUpfX0pLChRLkZvbnRzfHxbXSlbMF0mJloxKFEuRm9udHNbMF0pLFF9KHksSSxRKTpabSh5LEksUSl9KEx0KHksbGMoUS5zdHls'@;
put 'ZSkpLFEuc3R5bGUsdmUsUCkpfXZhciBIZT1RLmxpbmtzLm1hcChmdW5jdGlvbihycil7dHJ5e3ZhciBTbj1EbyhRdCh5LEJpKGxjKHJyKSkpLHJyKTtyZXR1cm4gZnVuY3Rpb24gVUkoeSxQLEksUSl7cmV0dXJuIi5iaW4iPT09SS5zbGljZSgtNCk/ZnVuY3Rpb24gRzQoeSxQLEksUSl7aWYo'@;
put 'IXkpcmV0dXJuIHk7dmFyIHJlPVF8fHt9LGdlPSExO0hvKHksZnVuY3Rpb24oU2UsSGUsQmUpe3N3aXRjaChCZSl7Y2FzZSAzNTk6Y2FzZSAzNjM6Y2FzZSAzNjQ6Y2FzZSAzNjY6Y2FzZSAzNjc6Y2FzZSAzNjg6Y2FzZSAzNjk6Y2FzZSAzNzA6Y2FzZSAzNzE6Y2FzZSA0NzI6Y2FzZSA1Nzc6'@;
put 'Y2FzZSA1Nzg6Y2FzZSA1Nzk6Y2FzZSA1ODA6Y2FzZSA1ODE6Y2FzZSA1ODI6Y2FzZSA1ODM6Y2FzZSA1ODQ6Y2FzZSA1ODU6Y2FzZSA1ODY6Y2FzZSA1ODc6YnJlYWs7Y2FzZSAzNTpnZT0hMDticmVhaztjYXNlIDM2OmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoSGV8fCIiKS5pbmRleE9m'@;
put 'KCJCZWdpbiIpPjApJiYhKChIZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWdlfHxyZS5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitCZS50b1N0cmluZygxNikrIiAiK0hlKX19LHJlKX0oeSwwLDAsUSk6ZnVuY3Rpb24gWTkoeSxQLEksUSl7dmFyIHJlPVF8'@;
put 'fHt9LGdlPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX0sdmU9ITEsU2U9e30sSGU9LTEsQmU9LTEsR2U9e3M6e3I6MCxjOjB9LGU6e3I6LTEsYzotMX19LG50PXt9LGR0PTA7cmV0dXJuKHl8fCIiKS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9bG4oQ3QpO3N3aXRjaChqbihi'@;
put 'dFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGV4dGVybmFsTGluayI6Y2FzZSI8L2V4dGVybmFsTGluaz4iOmNhc2UiPC9leHRlcm5hbEJvb2s+IjpjYXNlIjxzaGVldE5hbWVzIjpjYXNlIjxzaGVldE5hbWVzPiI6Y2FzZSI8L3NoZWV0TmFtZXM+IjpjYXNlIjxzaGVldERhdGFTZXQ+IjpjYXNl'@;
put 'IjxzaGVldERhdGFTZXQvPiI6Y2FzZSI8L3NoZWV0RGF0YVNldD4iOmNhc2UiPC9yb3c+IjpicmVhaztjYXNlIjxleHRlcm5hbEJvb2siOmNhc2UiPGV4dGVybmFsQm9vaz4iOmdlLlRhcmdldD1QWyIhaWQiXVtidC5pZF0uVGFyZ2V0LGdlLk1pc3Npbmc9UFsiIWlkIl1bYnQuaWRdLlR5cGU9'@;
put 'PUhpLlhNSVNTO2JyZWFrO2Nhc2UiPHNoZWV0TmFtZSI6Z2UuU2hlZXROYW1lcy5wdXNoKHhyKFBpKGJ0LnZhbCkpKTticmVhaztjYXNlIjxzaGVldERhdGEiOlNlPXt9LGdlLlNoZWV0c1tnZS5TaGVldE5hbWVzW2J0LnNoZWV0SWRdXT15cihidC5yZWZyZXNoRXJyb3J8fCIwIik/bnVsbDpT'@;
put 'ZTticmVhaztjYXNlIjwvc2hlZXREYXRhPiI6R2UuZS5jPj0wJiYoU2VbIiFyZWYiXT1PbyhHZSkpO2JyZWFrO2Nhc2UiPHJvdyI6Y2FzZSI8cm93PiI6YnQucj9IZT1wYXJzZUludChidC5yLDEwKS0xOkhlKyssQmU9LTE7YnJlYWs7Y2FzZSI8Y2VsbCI6Y2FzZSI8Y2VsbD4iOmJ0LnI/QmU9'@;
put 'c3MoYnQucikuYzorK0JlLG50LnQ9YnQudHx8Im4iLCJzdHIiPT1udC50JiYobnQudD0icyIpO2JyZWFrO2Nhc2UiPC9jZWxsPiI6R2UuZS5yPEhlJiYoR2UuZS5yPUhlKSxHZS5lLmM8QmUmJihHZS5lLmM9QmUpLFNlW2RpKHtyOkhlLGM6QmV9KV09bnQsbnQ9e307YnJlYWs7Y2FzZSI8diI6'@;
put 'Y2FzZSI8dj4iOmR0PUN0Lmxlbmd0aCtjdDticmVhaztjYXNlIjwvdj4iOnZhciBGdD14cih5LnNsaWNlKGR0LGN0KSk7bnQudj0ibiI9PW50LnQ/cGFyc2VGbG9hdChGdCk6RnQ7YnJlYWs7Y2FzZSI8di8+IjpudC52PSIiO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOnZlPSEwO2JyZWFr'@;
put 'O2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKCF2ZSYmcmUuV1RGKXRocm93InVucmVjb2duaXplZCAiK2J0WzBdKyIgaW4gZXh0ZXJuYWwgbGluayJ9fSksZ2V9KHksUCwwLFEpfShMdCh5LGxjKHJyKSksU24scnIsUCl9Y2F0Y2h7fX0pLEJlPWZ1bmN0aW9u'@;
put 'IG01KHksUCxJKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBHdih5LFApe3ZhciBJPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30seG1sbnM6IiJ9LFE9W10scmU9ITE7UHx8KFA9e30pLFAuYmlmZj0xMjt2YXIgZ2U9'@;
put 'W10sX2U9W1tdXTtyZXR1cm4gX2UuU2hlZXROYW1lcz1bXSxfZS5YVEk9W10sbWZbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOld2fSxIbyh5LGZ1bmN0aW9uKFNlLEhlLEJlKXtzd2l0Y2goQmUpe2Nhc2UgMTU2Ol9lLlNoZWV0TmFtZXMucHVzaChTZS5uYW1lKSxJLlNoZWV0cy5wdXNoKFNl'@;
put 'KTticmVhaztjYXNlIDE1MzpJLldCUHJvcHM9U2U7YnJlYWs7Y2FzZSAzOTpudWxsIT1TZS5TaGVldCYmKFAuU0lEPVNlLlNoZWV0KSxTZS5SZWY9eGwoU2UuUHRnLG51bGwsbnVsbCxfZSxQKSxkZWxldGUgUC5TSUQsZGVsZXRlIFNlLlB0ZyxnZS5wdXNoKFNlKTticmVhaztjYXNlIDEwMzY6'@;
put 'Y2FzZSAzNjE6Y2FzZSAyMDcxOmNhc2UgMTU4OmNhc2UgMTQzOmNhc2UgNjY0OmNhc2UgMzUzOmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSA1MzQ6Y2FzZSA2Nzc6Y2FzZSAxNTc6Y2FzZSA2MTA6Y2FzZSAyMDUwOmNhc2UgMTU1OmNhc2UgNTQ4OmNhc2UgNjc2OmNhc2UgMTI4OmNhc2UgNjY1'@;
put 'OmNhc2UgMjEyODpjYXNlIDIxMjU6Y2FzZSA1NDk6Y2FzZSAyMDUzOmNhc2UgNTk2OmNhc2UgMjA3NjpjYXNlIDIwNzU6Y2FzZSAyMDgyOmNhc2UgMzk3OmNhc2UgMTU0OmNhc2UgMTExNzpjYXNlIDU1MzpjYXNlIDIwOTE6Y2FzZSAxNjpicmVhaztjYXNlIDM1NzpjYXNlIDM1ODpjYXNlIDM1'@;
put 'NTpjYXNlIDY2NzpfZVswXS5sZW5ndGg/X2UucHVzaChbQmUsU2VdKTpfZVswXT1bQmUsU2VdLF9lW19lLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSAzNjI6MD09PV9lLmxlbmd0aCYmKF9lWzBdPVtdLF9lWzBdLlhUST1bXSksX2VbX2UubGVuZ3RoLTFdLlhUST1fZVtfZS5sZW5ndGgt'@;
put 'MV0uWFRJLmNvbmNhdChTZSksX2UuWFRJPV9lLlhUSS5jb25jYXQoU2UpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNzpRLnB1c2goSGUpLHJlPSEwO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzODpRLnBvcCgpLHJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoSGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjAp'@;
put 'JiYhKChIZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIXJlfHxQLldURiYmIkJydEFDQmVnaW4iIT1RW1EubGVuZ3RoLTFdJiYiQnJ0RlJUQmVnaW4iIT1RW1EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQmUrIiAiK0hlKX19LFApLFV2KEkpLEku'@;
put 'TmFtZXM9Z2UsSS5zdXBib29rcz1fZSxJfSh5LEkpOmZ1bmN0aW9uIGxZKHksUCl7aWYoIXkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIik7dmFyIEk9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSxOYW1lczpbXSxF'@;
put 'eHRlcm46W10seG1sbnM6IiJ9LFE9ITEscmU9InhtbG5zIixnZT17fSxfZT0wO2lmKHkucmVwbGFjZSgkdCxmdW5jdGlvbihTZSxIZSl7dmFyIEJlPWxuKFNlKTtzd2l0Y2goam4oQmVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvd29ya2Jvb2s+IjpjYXNlIjxmaWxlVmVyc2lvbi8+IjpjYXNl'@;
put 'IjwvZmlsZVZlcnNpb24+IjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbi8+IjpjYXNlIjxib29rVmlld3MiOmNhc2UiPGJvb2tWaWV3cz4iOmNhc2UiPC9ib29rVmlld3M+IjpjYXNlIjwvd29ya2Jvb2tWaWV3PiI6Y2Fz'@;
put 'ZSI8c2hlZXRzIjpjYXNlIjxzaGVldHM+IjpjYXNlIjwvc2hlZXRzPiI6Y2FzZSI8L3NoZWV0PiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMiOmNhc2UiPGZ1bmN0aW9uR3JvdXBzLz4iOmNhc2UiPGZ1bmN0aW9uR3JvdXAiOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcyI6Y2FzZSI8L2V4dGVybmFs'@;
put 'UmVmZXJlbmNlcz4iOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxkZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1Zp'@;
put 'ZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6'@;
put 'Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFydFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcv'@;
put 'PiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6'@;
put 'Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJldmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6U2UubWF0Y2goYVkpJiYocmU9InhtbG5zIitTZS5tYXRjaCgvPChcdyspOi8pWzFdKSxJLnhtbG5zPUJlW3Jl'@;
put 'XTticmVhaztjYXNlIjxmaWxlVmVyc2lvbiI6ZGVsZXRlIEJlWzBdLEkuQXBwVmVyc2lvbj1CZTticmVhaztjYXNlIjxmaWxlU2hhcmluZyI6SS5Nb2RpZnk9e3VzZXI6QmUudXNlck5hbWUsd2Fybjp5cihCZS5yZWFkT25seVJlY29tbWVuZGVkfHwiZmFsc2UiKX0sKEJlLmFsZ29yaXRobU5h'@;
put 'bWV8fEJlLmhhc2hWYWx1ZXx8QmUuc2FsdFZhbHVlfHxCZS5zcGluQ291bnQpJiYoSS5Nb2RpZnkuZW5jcnlwdGlvbj17YWxnbzpCZS5hbGdvcml0aG1OYW1lLGhhc2g6QmUuaGFzaFZhbHVlLHNhbHQ6QmUuc2FsdFZhbHVlLHNwaW46K0JlLnNwaW5Db3VudHx8MWU1fSk7YnJlYWs7Y2FzZSI8'@;
put 'd29ya2Jvb2tQciI6Y2FzZSI8d29ya2Jvb2tQci8+IjpLMi5mb3JFYWNoKGZ1bmN0aW9uKG50KXtpZihudWxsIT1CZVtudFswXV0pc3dpdGNoKG50WzJdKXtjYXNlImJvb2wiOkkuV0JQcm9wc1tudFswXV09eXIoQmVbbnRbMF1dKTticmVhaztjYXNlImludCI6SS5XQlByb3BzW250WzBdXT1w'@;
put 'YXJzZUludChCZVtudFswXV0sMTApO2JyZWFrO2RlZmF1bHQ6SS5XQlByb3BzW250WzBdXT1CZVtudFswXV19fSksQmUuY29kZU5hbWUmJihJLldCUHJvcHMuQ29kZU5hbWU9UGkoQmUuY29kZU5hbWUpKTticmVhaztjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24iOnZhciBHZT1JLlByb3RlY3Rp'@;
put 'b258fHt9O0dlLmxvY2tTdHJ1Y3R1cmU9eXIoQmUubG9ja1N0cnVjdHVyZXx8ImZhbHNlIiksR2UubG9ja1dpbmRvd3M9eXIoQmUubG9ja1dpbmRvd3N8fCJmYWxzZSIpLEJlLndvcmtib29rQWxnb3JpdGhtTmFtZSYmKEdlLmVuY3J5cHRpb249e2FsZ286QmUud29ya2Jvb2tBbGdvcml0aG1O'@;
put 'YW1lLGhhc2g6QmUud29ya2Jvb2tIYXNoVmFsdWUsc2FsdDpCZS53b3JrYm9va1NhbHRWYWx1ZSxzcGluOitCZS53b3JrYm9va1NwaW5Db3VudHx8MWU1fSksSS5Qcm90ZWN0aW9uPUdlO2JyZWFrO2Nhc2UiPHdvcmtib29rVmlldyI6Y2FzZSI8d29ya2Jvb2tWaWV3Lz4iOmRlbGV0ZSBCZVsw'@;
put 'XSxJLldCVmlldy5wdXNoKEJlKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKEJlLnN0YXRlKXtjYXNlImhpZGRlbiI6QmUuSGlkZGVuPTE7YnJlYWs7Y2FzZSJ2ZXJ5SGlkZGVuIjpCZS5IaWRkZW49MjticmVhaztkZWZhdWx0OkJlLkhpZGRlbj0wfWRlbGV0ZSBCZS5zdGF0ZSxCZS5uYW1l'@;
put 'PXhyKFBpKEJlLm5hbWUpKSxkZWxldGUgQmVbMF0sSS5TaGVldHMucHVzaChCZSk7YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOkkuRXh0ZXJuLnB1c2goQmUuaWQpO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOmNhc2UiPGRlZmluZWROYW1lcyI6Y2FzZSI8ZXh0IjpjYXNlIjxB'@;
put 'bHRlcm5hdGVDb250ZW50IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50PiI6UT0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6UT0hMTticmVhaztjYXNlIjxkZWZpbmVkTmFtZSI6KGdlPXt9KS5OYW1lPVBpKEJlLm5h'@;
put 'bWUpLEJlLmNvbW1lbnQmJihnZS5Db21tZW50PUJlLmNvbW1lbnQpLEJlLmxvY2FsU2hlZXRJZCYmKGdlLlNoZWV0PStCZS5sb2NhbFNoZWV0SWQpLHlyKEJlLmhpZGRlbnx8IjAiKSYmKGdlLkhpZGRlbj0hMCksX2U9SGUrU2UubGVuZ3RoO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZT4iOmdl'@;
put 'LlJlZj14cihQaSh5LnNsaWNlKF9lLEhlKSkpLEkuTmFtZXMucHVzaChnZSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIEJlWzBdLEkuQ2FsY1ByPUJlO2JyZWFrO2RlZmF1bHQ6aWYoIVEmJlAuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIr'@;
put 'QmVbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBTZX0pLC0xPT09aXMubWFpbi5pbmRleE9mKEkueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrSS54bWxucyk7cmV0dXJuIFV2KEkpLEl9KHksSSl9KEx0KHksbGMoUS53b3JrYm9va3NbMF0pKSxRLndvcmti'@;
put 'b29rc1swXSxQKSxHZT17fSxudD0iIjtRLmNvcmVwcm9wcy5sZW5ndGgmJigobnQ9THQoeSxsYyhRLmNvcmVwcm9wc1swXSksITApKSYmKEdlPU8yKG50KSksMCE9PVEuZXh0cHJvcHMubGVuZ3RoJiYobnQ9THQoeSxsYyhRLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiBwMyh5LFAsSSl7'@;
put 'dmFyIFE9e307UHx8KFA9e30pLHk9UGkoeSksUjEuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIGdlPSh5Lm1hdGNoKHVsKHJlWzBdKSl8fFtdKVsxXTtzd2l0Y2gocmVbMl0pe2Nhc2Uic3RyaW5nIjpnZSYmKFBbcmVbMV1dPXhyKGdlKSk7YnJlYWs7Y2FzZSJib29sIjpQW3JlWzFdXT0idHJ1'@;
put 'ZSI9PT1nZTticmVhaztjYXNlInJhdyI6dmFyIF9lPXkubWF0Y2gobmV3IFJlZ0V4cCgiPCIrcmVbMF0rIltePl0qPihbXFxzXFxTXSo/KTwvIityZVswXSsiPiIpKTtfZSYmX2UubGVuZ3RoPjAmJihRW3JlWzFdXT1fZVsxXSl9fSksUS5IZWFkaW5nUGFpcnMmJlEuVGl0bGVzT2ZQYXJ0cyYm'@;
put 'dTAoUS5IZWFkaW5nUGFpcnMsUS5UaXRsZXNPZlBhcnRzLFAsSSl9KG50LEdlLFApKTt2YXIgZHQ9e307KCFQLmJvb2tTaGVldHN8fFAuYm9va1Byb3BzKSYmMCE9PVEuY3VzdHByb3BzLmxlbmd0aCYmKG50PVF0KHksbGMoUS5jdXN0cHJvcHNbMF0pLCEwKSkmJihkdD1mdW5jdGlvbiBNNCh5'@;
put 'LFApe3ZhciBJPXt9LFE9IiIscmU9eS5tYXRjaChBdyk7aWYocmUpZm9yKHZhciBnZT0wO2dlIT1yZS5sZW5ndGg7KytnZSl7dmFyIF9lPXJlW2dlXSx2ZT1sbihfZSk7c3dpdGNoKHZlWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpicmVhaztjYXNlIjxwcm9wZXJ0eSI6UT14'@;
put 'cih2ZS5uYW1lKTticmVhaztjYXNlIjwvcHJvcGVydHk+IjpRPW51bGw7YnJlYWs7ZGVmYXVsdDppZigwPT09X2UuaW5kZXhPZigiPHZ0OiIpKXt2YXIgU2U9X2Uuc3BsaXQoIj4iKSxIZT1TZVswXS5zbGljZSg0KSxCZT1TZVsxXTtzd2l0Y2goSGUpe2Nhc2UibHBzdHIiOmNhc2UiYnN0ciI6'@;
put 'Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOklbUV09eHIoQmUpO2JyZWFrO2Nhc2UiYm9vbCI6SVtRXT15cihCZSk7YnJlYWs7Y2FzZSJpMSI6Y2FzZSJpMiI6Y2FzZSJpNCI6Y2FzZSJpOCI6Y2FzZSJpbnQiOmNhc2UidWludCI6SVtRXT1wYXJzZUludChCZSwxMCk7YnJlYWs7'@;
put 'Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpJW1FdPXBhcnNlRmxvYXQoQmUpO2JyZWFrO2Nhc2UiZmlsZXRpbWUiOmNhc2UiZGF0ZSI6SVtRXT1IdChCZSk7YnJlYWs7ZGVmYXVsdDppZigiLyI9PUhlLnNsaWNlKC0xKSlicmVhaztQLldURiYmdHlwZW9mIGNvbnNvbGU8InUiJiZj'@;
put 'b25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLF9lLEhlLFNlKX19ZWxzZSBpZigiPC8iIT09X2Uuc2xpY2UoMCwyKSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKF9lKX19cmV0dXJuIEl9KG50LFApKTt2YXIgQ3Q9e307aWYoKFAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYoQmUuU2hlZXRzP2dl'@;
put 'PUJlLlNoZWV0cy5tYXAoZnVuY3Rpb24oU24pe3JldHVybiBTbi5uYW1lfSk6R2UuV29ya3NoZWV0cyYmR2UuU2hlZXROYW1lcy5sZW5ndGg+MCYmKGdlPUdlLlNoZWV0TmFtZXMpLFAuYm9va1Byb3BzJiYoQ3QuUHJvcHM9R2UsQ3QuQ3VzdHByb3BzPWR0KSxQLmJvb2tTaGVldHMmJnR5cGVv'@;
put 'ZiBnZTwidSImJihDdC5TaGVldE5hbWVzPWdlKSxQLmJvb2tTaGVldHM/Q3QuU2hlZXROYW1lczpQLmJvb2tQcm9wcykpcmV0dXJuIEN0O2dlPXt9O3ZhciBjdD17fTtQLmJvb2tEZXBzJiZRLmNhbGNjaGFpbiYmKGN0PWZ1bmN0aW9uIHpJKHksUCxJKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNl'@;
put 'KC00KT9mdW5jdGlvbiBEQyh5LFAsSSl7dmFyIFE9W107cmV0dXJuIEhvKHksZnVuY3Rpb24oX2UsdmUsU2Upe2lmKDYzPT09U2UpUS5wdXNoKF9lKTtlbHNlIGlmKCEoKHZlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wfHwodmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrU2UrIiAiK3ZlKX0pLFF9KHkpOmZ1bmN0aW9uIGU2KHkpe3ZhciBQPVtdO2lmKCF5KXJldHVybiBQO3ZhciBJPTE7cmV0dXJuKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgcmU9bG4oUSk7c3dpdGNoKHJlWzBdKXtjYXNl'@;
put 'Ijw/eG1sIjpjYXNlIjxjYWxjQ2hhaW4iOmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgcmVbMF0scmUuaT9JPXJlLmk6cmUuaT1JLFAucHVzaChyZSl9fSksUH0oeSl9KEx0KHksbGMoUS5jYWxjY2hhaW4pKSxRLmNhbGNjaGFpbikp'@;
put 'O3ZhciBrdCxUdCxidD0wLEZ0PXt9LFp0PUJlLlNoZWV0cztHZS5Xb3Jrc2hlZXRzPVp0Lmxlbmd0aCxHZS5TaGVldE5hbWVzPVtdO2Zvcih2YXIgcG49MDtwbiE9WnQubGVuZ3RoOysrcG4pR2UuU2hlZXROYW1lc1twbl09WnRbcG5dLm5hbWU7dmFyIEtuPXJlPyJiaW4iOiJ4bWwiLHVuPVEu'@;
put 'd29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIikscW49KFEud29ya2Jvb2tzWzBdLnNsaWNlKDAsdW4rMSkrIl9yZWxzLyIrUS53b3JrYm9va3NbMF0uc2xpY2UodW4rMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7bW4oeSxxbil8fChxbj0ieGwvX3JlbHMvd29ya2Jvb2suIitLbisi'@;
put 'LnJlbHMiKTt2YXIgem49RG8oUXQoeSxxbiwhMCkscW4pLGtuPXpuLGVyPVtdO3puJiYoQmUmJkJlLkV4dGVybiYmQmUuRXh0ZXJuLmxlbmd0aCYmQmUuRXh0ZXJuLmZvckVhY2goZnVuY3Rpb24ocnIsU24pe3ZhciB3aT0oIi94bC8iK3puWyIhaWQiXVtycl0uVGFyZ2V0KS5yZXBsYWNlKC9b'@;
put 'XC9dW1wvXS9nLCIvIiksVXI9US5saW5rcy5pbmRleE9mKHdpKTtVcj4tMSYmKGVyW1NuXT1IZVtVcl0pfSksQmUmJmRlbGV0ZSBCZS5FeHRlcm4pLHpuJiYoem49ZnVuY3Rpb24gT00oeSxQKXtpZigheSlyZXR1cm4gMDt0cnl7eT1QLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5pZHx8KFEu'@;
put 'aWQ9US5zdHJSZWxJRCksW1EubmFtZSx5WyIhaWQiXVtRLmlkXS5UYXJnZXQsUk0oeVsiIWlkIl1bUS5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIHkmJjAhPT15Lmxlbmd0aD95Om51bGx9KHpuLEJlLlNoZWV0cykpO3ZhciB0cj1tbih5LCJ4bC93b3Jrc2hlZXRzL3No'@;
put 'ZWV0LnhtbCIpPzE6MCxabj1bXSxCcj1bXTtlOmZvcihidD0wO2J0IT1HZS5Xb3Jrc2hlZXRzOysrYnQpe3ZhciBzaT0ic2hlZXQiO2lmKHpuJiZ6bltidF0/KGt0PSJ4bC8iK3puW2J0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxtbih5LGt0KXx8KGt0PXpuW2J0XVsxXSksbW4oeSxr'@;
put 'dCl8fChrdD1xbi5yZXBsYWNlKC9fcmVsc1wvLiokLywiIikrem5bYnRdWzFdKSxzaT16bltidF1bMl0pOmt0PShrdD0ieGwvd29ya3NoZWV0cy9zaGVldCIrKGJ0KzEtdHIpKyIuIitLbikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxUdD1rdC5yZXBsYWNlKC9eKC4qKShcLykoW15c'@;
put 'L10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksWm4ucHVzaChrdCksUCYmbnVsbCE9UC5zaGVldHMpc3dpdGNoKHR5cGVvZiBQLnNoZWV0cyl7Y2FzZSJudW1iZXIiOmlmKGJ0IT1QLnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihHZS5TaGVldE5hbWVzW2J0XS50b0xv'@;
put 'd2VyQ2FzZSgpIT1QLnNoZWV0cy50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVmYXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KFAuc2hlZXRzKSl7Zm9yKHZhciB4aT0wLElpPTA7SWkhPVAuc2hlZXRzLmxlbmd0aDsrK0lpKSJudW1iZXIiPT10eXBlb2YgUC5z'@;
put 'aGVldHNbSWldJiZQLnNoZWV0c1tJaV09PWJ0JiYoeGk9MSksInN0cmluZyI9PXR5cGVvZiBQLnNoZWV0c1tJaV0mJlAuc2hlZXRzW0lpXS50b0xvd2VyQ2FzZSgpPT1HZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpJiYoeGk9MSk7aWYoIXhpKWNvbnRpbnVlIGV9fWlmKCFQLnNraXBQ'@;
put 'YXJzZSl7dmFyIFFyPWdSKHksa3QsVHQsR2UuU2hlZXROYW1lc1tidF0sYnQsRnQsZ2Usc2ksUCxCZSx2ZSxTZSk7UXImJlFyWyIhTERQIl0mJihCcltidF09UXJbIiFMRFAiXSxkZWxldGUgUXJbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIpZm9yKGJ0PTA7YnQ8'@;
put 'RjYubGVuZ3RoOysrYnQpcGFyc2Vfc2hlZXRfcGl2b3QuYXBwbHkobnVsbCxGNltidF0pO2lmKEN0PXtEaXJlY3Rvcnk6USxXb3JrYm9vazpCZSxQcm9wczpHZSxDdXN0cHJvcHM6ZHQsRGVwczpjdCxTaGVldHM6Z2UsU2hlZXROYW1lczpHZS5TaGVldE5hbWVzLFN0cmluZ3M6ZjYsU3R5bGVz'@;
put 'OlNlLFRoZW1lczp2ZSxTU0Y6dy5nZXRfdGFibGUoKX0sIVAuc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBBQyh5KXsheXx8IXkuV29ya2Jvb2t8fCF5Lldvcmtib29rLk5hbWVzfHx5Lldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oUCl7aWYoUC5OYW1lJiYiX3hsbm0uIj09UC5OYW1l'@;
put 'LnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJlYSI9PVAuTmFtZXx8Il94bG5tLlByaW50X1RpdGxlcyI9PVAuTmFtZSkpe3ZhciBJPXkuU2hlZXRzW3kuU2hlZXROYW1lc1tQLlNoZWV0XV07aWYoSSl7SVsiIXByaW50Il18fChJWyIhcHJpbnQiXT17fSksSVsiIXByaW50Il0ucHJvcHN8'@;
put 'fChJWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFE9SVsiIXByaW50Il0scmU9UC5SZWY7aWYoIl94bG5tLlByaW50X0FyZWEiPT1QLk5hbWUpe3JlLmluZGV4T2YoIiEiKT4tMSYmKHJlPXJlLnNsaWNlKHJlLmluZGV4T2YoIiEiKSsxKSk7dmFyIGdlPU9pKHJlPXJlLnJlcGxhY2UoL1skXS9n'@;
put 'LCIiKSk7US5hcmVhPWdlfWVsc2UiX3hsbm0uUHJpbnRfVGl0bGVzIj09UC5OYW1lJiYoUS50aXRsZXM9e3M6e3I6LTEsYzotMX0sZTp7cjotMSxjOi0xfX0scmUuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXt2YXIgU2U9V3MoX2Uuc2xpY2UoX2UuaW5kZXhPZigiISIpKzEpLnJl'@;
put 'cGxhY2UoL1skXS9nLCIiKSk7U2Uucy5jPi0xJiYoUS50aXRsZXMucy5jPVNlLnMuYyksU2UuZS5jPi0xJiYoUS50aXRsZXMuZS5jPVNlLmUuYyksU2Uucy5yPi0xJiYoUS50aXRsZXMucy5yPVNlLnMuciksU2UuZS5yPi0xJiYoUS50aXRsZXMuZS5yPVNlLmUucil9KSl9fX0pfShDdCksUCYm'@;
put 'UC5ib29rRmlsZXMmJihDdC5rZXlzPUksQ3QuZmlsZXM9eS5maWxlcyksUCYmUC5ib29rVkJBJiYoUS52YmEubGVuZ3RoPjA/Q3QudmJhcmF3PUx0KHksbGMoUS52YmFbMF0pLCEwKTpRLmRlZmF1bHRzJiZRLmRlZmF1bHRzLmJpbj09PSQyJiYoQ3QudmJhcmF3PUx0KHksInhsL3ZiYVByb2pl'@;
put 'Y3QuYmluIiwhMCkpKSxrbiYma25bIiFpZCJdKXtmb3IodmFyIHVyPVtdLEFuPTE7QW48PTEwMjQ7KytBbilrblsiIWlkIl1bInJJZCIrQW5dJiZrblsiIWlkIl1bInJJZCIrQW5dLlR5cGUmJi9jdXN0b21YbWwkLy50ZXN0KGtuWyIhaWQiXVsicklkIitBbl0uVHlwZSkmJnVyLnB1c2goc24o'@;
put 'a25bIiFpZCJdWyJySWQiK0FuXS5UYXJnZXQsUS53b3JrYm9va3NbMF0pKTt1ci5sZW5ndGg+MCYmKEN0LkN1c3RvbVhNTD1bXSx1ci5mb3JFYWNoKGZ1bmN0aW9uKHJyKXt2YXIgU249e2RhdGE6UXQoeSxsYyhycikpfSxtcj1CaShycik7dHJ5e3ZhciB3aT1EbyhRdCh5LGxjKG1yKSwhMCks'@;
put 'bXIpO2lmKHdpKWZvcih2YXIgVXI9MTtVcjw9MTAyNDsrK1VyKXdpWyIhaWQiXVsicklkIitVcl0mJndpWyIhaWQiXVsicklkIitVcl0uVHlwZSYmL2N1c3RvbVhtbFByb3BzJC8udGVzdCh3aVsiIWlkIl1bInJJZCIrVXJdLlR5cGUpJiYoU24ucHJvcHM9UXQoeSxsYyhzbih3aVsiIWlkIl1b'@;
put 'InJJZCIrVXJdLlRhcmdldCxycikpKSl9Y2F0Y2h7fUN0LkN1c3RvbVhNTC5wdXNoKFNuKX0pKX12YXIgdnI9RHQoeSwieGwvbW9kZWwvaXRlbS5kYXRhIiwhMCk7dnImJihDdC5tb2RlbD12ciksUS5jb25uJiYoQ3QuY29ubj1MdCh5LGxjKFEuY29ubiksITApKSxlci5sZW5ndGgmJihDdC5F'@;
put 'eHRlcm5hbFdCPWVyKSxCZSYmKEJlLlBQST1uZil9cmV0dXJuIFAudGVtcGxhdGUmJihDdC5fd3NwYXRocz1abixDdC5fc3R5cGF0aD1sYyhRLnN0eWxlfHwiIiksQ3QuX3dicGF0aD1sYyhRLndvcmtib29rc1swXXx8InhsL3dvcmtib29rLnhtbCIpLEN0Ll92bWxwYXRocz1CcixDdC5fd2Jy'@;
put 'ZWxzcGF0aD1xbixDdC5fY3Q9UXQoeSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpLEN0LmZpbGVzPXkuZmlsZXMsbVIoQ3QseSxQKSksQ3R9ZnVuY3Rpb24gdlIoeSxQKXt2YXIgST1QfHx7fTtJLnBhc3N3b3JkfHwoSS5wYXNzd29yZD0iVmVsdmV0U3dlYXRzaG9wIik7dmFyIFE9Ildvcmtib29r'@;
put 'IixyZT1qZS5maW5kKHksUSk7dHJ5e2lmKCEocmU9amUuZmluZCh5LFE9Ii8hRGF0YVNwYWNlcy9WZXJzaW9uIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTtpZihmdW5jdGlvbiBkRCh5KXt2YXIgUD17fTtQLmlk'@;
put 'PXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5SPUcwKHksNCksUC5VPUcwKHksNCksUC5XPUcwKHksNCl9KHJlLmNvbnRlbnQpLCEocmU9amUuZmluZCh5LFE9Ii8hRGF0YVNwYWNlcy9EYXRhU3BhY2VNYXAiKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlw'@;
put 'dGVkIGZpbGUgbWlzc2luZyAiK1EpO3ZhciBnZT1mdW5jdGlvbiBQNCh5KXt2YXIgUD1bXTt5LmwrPTQ7Zm9yKHZhciBJPXkucmVhZF9zaGlmdCg0KTtJLS0gPjA7KVAucHVzaChzQyh5KSk7cmV0dXJuIFB9KHJlLmNvbnRlbnQpO2lmKDEhPT1nZS5sZW5ndGh8fDEhPT1nZVswXS5jb21wcy5s'@;
put 'ZW5ndGh8fDAhPT1nZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1nZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1nZVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrUSk7aWYoIShy'@;
put 'ZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZUluZm8vU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7dmFyIF9lPWZ1bmN0aW9uIEUzKHkpe3ZhciBQ'@;
put 'PVtdO3kubCs9NDtmb3IodmFyIEk9eS5yZWFkX3NoaWZ0KDQpO0ktLSA+MDspUC5wdXNoKHkucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiBQfShyZS5jb250ZW50KTtpZigxIT1fZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9X2VbMF0pdGhyb3cgbmV3IEVycm9y'@;
put 'KCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitRKTtpZighKHJlPWplLmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvVHJhbnNmb3JtSW5mby9TdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtLyFQcmltYXJ5IikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5'@;
put 'cHRlZCBmaWxlIG1pc3NpbmcgIitRKTshZnVuY3Rpb24gQTMoeSl7dmFyIFA9ZnVuY3Rpb24gazMoeSl7dmFyIFA9e307cmV0dXJuIHkucmVhZF9zaGlmdCg0KSx5LmwrPTQsUC5pZD15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAubmFtZT15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAuUj1HMCh5'@;
put 'LDQpLFAuVT1HMCh5LDQpLFAuVz1HMCh5LDQpLFB9KHkpO2lmKFAuZW5hbWU9eS5yZWFkX3NoaWZ0KDAsIjhscHA0IiksUC5ibGtzej15LnJlYWRfc2hpZnQoNCksUC5jbW9kZT15LnJlYWRfc2hpZnQoNCksNCE9eS5yZWFkX3NoaWZ0KDQpKXRocm93IG5ldyBFcnJvcigiQmFkICFQcmltYXJ5'@;
put 'IHJlY29yZCIpO3JldHVybiBQfShyZS5jb250ZW50KX1jYXRjaHt9aWYoIShyZT1qZS5maW5kKHksUT0iL0VuY3J5cHRpb25JbmZvIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTt2YXIgdmU9ZnVuY3Rpb24gVDMo'@;
put 'eSl7dmFyIFA9RzAoeSk7c3dpdGNoKFAuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bUC5NaW5vcixtWih5KV07Y2FzZSAzOnJldHVybltQLk1pbm9yLGhEKCldO2Nhc2UgNDpyZXR1cm5bUC5NaW5vcix2Wih5KV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29n'@;
put 'bml6ZWQgVmVyc2lvbjogIitQLk1pbm9yKX0ocmUuY29udGVudCk7aWYoIShyZT1qZS5maW5kKHksUT0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO2lmKDQ9PXZlWzBdKXJldHVy'@;
put 'biBmdW5jdGlvbiBOZSh5LFAsSSxRKXt2YXIgcmU9amUudXRpbHMucHJlcF9ibG9iO2lmKCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIhPXkudXJpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUNNQS0zNzYgQWdp'@;
put 'bGUgVVJJICIreS51cmkpO3ZhciBnZT15LmVuY3NbMF0sX2U9Z2UuaGFzaEFsZ29yaXRobSx2ZT0iYWVzLTI1Ni1jYmMiLFNlPUJ1ZmZlci5mcm9tKGdlLnNhbHRWYWx1ZSwiYmFzZTY0IiksSGU9QnVmZmVyLmZyb20oeS5zYWx0VmFsdWUsImJhc2U2NCIpLEJlPStnZS5ibG9ja1NpemUsR2U9'@;
put 'K2dlLmtleUJpdHM+PjMsbnQ9ZWwoQnVmZmVyLmNvbmNhdChbU2UsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxJKSldKSxfZSksZHQ9QnVmZmVyLmFsbG9jKDQpO3JlKGR0LDApO2Zvcih2YXIgQ3Q9MDtDdDxnZS5zcGluQ291bnQ7KytDdClkdC5sPTAsZHQud3JpdGVf'@;
put 'c2hpZnQoNCxDdCksbnQ9ZWwoQnVmZmVyLmNvbmNhdChbZHQsbnRdKSxfZSk7dmFyIGN0PWZ1bmN0aW9uKHRyLFpuLEJyLHNpKXt2YXIgeGk9ZWwoQnVmZmVyLmNvbmNhdChbdHIsQnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSldKSxzaSksSWk9eGkubGVuZ3Ro'@;
put 'Pj1Ccj94aS5zbGljZSgwLEJyKTpCdWZmZXIuYWxsb2MoQnIpO2lmKHhpLmxlbmd0aDxCcil7Zm9yKHZhciBRcj0wO1FyPHhpLmxlbmd0aDsrK1FyKUlpW1FyXT14aVtRcl07Zm9yKDtRcjxCcjsrK1FyKUlpW1FyXT01NH1yZXR1cm4gSWl9KG50LDAsR2UsX2UpO3N3aXRjaChnZS5jaXBoZXJB'@;
put 'bGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hhaW5pbmdNb2RlQ0JDIiE9Z2UuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgY2hhaW5pbmcgIitnZS5jaXBoZXJDaGFpbmluZyk7dmU9ImFlcy0iK2dlLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2Ui'@;
put 'UkMyIjp2ZT0icmMyIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitnZS5jaXBoZXJBbGdvcml0aG0pfVNlPWZ1bmN0aW9uKGVyKXtmb3IodmFyIHRyPUJ1ZmZlci5hbGxvYyhCZSksWm49MDtabjxCZTsrK1puKXRyW1puXT1abjxlci5s'@;
put 'ZW5ndGg/ZXJbWm5dOjU0O3JldHVybiB0cn0oU2UpO3ZhciBidD1CdWZmZXIuZnJvbShnZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0IiksRnQ9SjEoY3QsU2UsdmUpLnVwZGF0ZShidCksa3Q9SjEoZWwoQnVmZmVyLmNvbmNhdChbbnQsQnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4'@;
put 'LDk3LDUyLDc4XSldKSxfZSkuc2xpY2UoMCxHZSksU2UsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShnZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0IikpLFR0PWVsKEoxKGVsKEJ1ZmZlci5jb25jYXQoW250LEJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4'@;
put 'LDEyMV0pXSksX2UpLnNsaWNlKDAsR2UpLFNlLHZlKS51cGRhdGUoQnVmZmVyLmZyb20oZ2UuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQsImJhc2U2NCIpKSxfZSksWnQ9K2dlLmhhc2hTaXplfHxNYXRoLm1pbihrdC5sZW5ndGgsVHQubGVuZ3RoKTtpZigwIT1rdC5zbGljZSgwLFp0KS5j'@;
put 'b21wYXJlKFR0LnNsaWNlKDAsWnQpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO3JlKFAsMCk7dmFyIHBuPVAucmVhZF9zaGlmdCg0KTtQLmwrPTQ7dmFyIEtuPVtdLHVuPUJ1ZmZlci5jb25jYXQoW0hlLEJ1ZmZlci5hbGxvYyg0KV0pO2ZvcihyZSh1biksQ3Q9MDtQ'@;
put 'Lmw8UC5sZW5ndGg7KXVuLmw9U2UubGVuZ3RoLHVuLndyaXRlX3NoaWZ0KDQsQ3QpLEtuLnB1c2goSjEoRnQsZWwoQnVmZmVyLmZyb20odW4pLF9lKS5zbGljZSgwLDE2KSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKFAuc2xpY2UoUC5sLFAubCs0MDk2KSkpKSxQLmwrPTQwOTYsKytDdDt2YXIg'@;
put 'em49QnVmZmVyLmNvbmNhdChLbikuc2xpY2UoMCxwbiksa249b24oUSk7cmV0dXJuIGtuLnR5cGU9ImJ1ZmZlciIsX2Yoem4sa24pfSh2ZVsxXSxyZS5jb250ZW50LEkucGFzc3dvcmR8fCIiLEkpO2lmKDI9PXZlWzBdKXJldHVybiBmdW5jdGlvbiBkXyh5LFAsSSxRKXt2YXIgcmU9amUudXRp'@;
put 'bHMucHJlcF9ibG9iO2lmKCJTdGQiIT09eS50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTt2YXIgZ2U9eS52LlNhbHQsX2U9eS52LlZlcmlmaWVyLHZlPXkudi5WZXJpZmllckhhc2g7aWYoMzYhPXkuaC5GbGFncyl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkVDTUEtMzc2IFN0YW5kYXJkIEVuY3J5cHRpb24gYmFkIEZsYWdzIik7dmFyIFNlPTAsSGU9IiI7c3dpdGNoKHkuaC5BbGdJRCl7Y2FzZSAyNjEyNjpTZT0xMjgsSGU9ImFlcy0xMjgtZWNiIjticmVhaztjYXNlIDI2MTI3OlNlPTE5NixIZT0iYWVzLTE5Mi1lY2IiO2JyZWFrO2Nhc2UgMjYx'@;
put 'Mjg6U2U9MjU2LEhlPSJhZXMtMjU2LWVjYiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIil9aWYoMzI3NzIhPXkuaC5BbGdJREhhc2gpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlv'@;
put 'biIpO2lmKHkuaC5LZXlTaXplIT1TZSl0aHJvdyBuZXcgRXJyb3IoIkFsZ0lEL0tleVNpemUgbWlzbWF0Y2giKTtpZigyNCE9eS5oLlByb3ZpZGVyVHlwZSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IHVuc3VwcG9ydGVkIFByb3ZpZGVyVHlwZSAiK3kuaC5Qcm92aWRlclR5cGUpO2lmKCJN'@;
put 'aWNyb3NvZnQgRW5oYW5jZWQgUlNBIGFuZCBBRVMgQ3J5cHRvZ3JhcGhpYyBQcm92aWRlciIhPT15LmguQ1NQTmFtZS5zbGljZSgwLDUzKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENyeXB0byBQcm92aWRlciAiK3kuaC5DU1BOYW1lKTt2YXIgR2U9IlNIQS0xIixudD1TZT4+Myxk'@;
put 'dD1lbChCdWZmZXIuY29uY2F0KFtnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEkpXSksR2UpLEN0PUJ1ZmZlci5hbGxvYyg0KTtyZShDdCwwKTtmb3IodmFyIGN0PTA7Y3Q8NWU0OysrY3QpQ3QubD0wLEN0LndyaXRlX3NoaWZ0KDQsY3QpLGR0PWVsKEJ1ZmZlci5jb25jYXQoW0N0LGR0'@;
put 'XSksR2UpO0N0Lmw9MCxDdC53cml0ZV9zaGlmdCg0LDApO3ZhciBLbix1bixxbix6bixrbixGdD0oem49KHFuPWZ1bmN0aW9uKHRyLFpuLEJyKXtmb3IodmFyIHNpPUJ1ZmZlci5hbGxvYyg2NCkseGk9MDt4aTxzaS5sZW5ndGg7Kyt4aSlzaVt4aV09dHI7Zm9yKHhpPTA7eGk8Wm4ubGVuZ3Ro'@;
put 'OysreGkpc2lbeGldXj1ablt4aV07cmV0dXJuIGVsKHNpLEJyKX0pKDU0LEtuPWVsKEJ1ZmZlci5jb25jYXQoW2R0LEN0XSksR2UpLHVuPUdlKSxrbj1xbig5MixLbix1biksQnVmZmVyLmNvbmNhdChbem4sa25dKS5zbGljZSgwLG50KSk7aWYoSjEoRnQsQnVmZmVyLmFsbG9jKDApLEhlKS51'@;
put 'cGRhdGUodmUpLnNsaWNlKDAsMjApLmNvbXBhcmUoZWwoSjEoRnQsQnVmZmVyLmFsbG9jKDApLEhlKS51cGRhdGUoX2UpLEdlKSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtyZShQLDApO3ZhciBrdD1QLnJlYWRfc2hpZnQoNCk7UC5sKz00O3ZhciBUdD1bXTtmb3Io'@;
put 'Y3Q9MDtQLmw8UC5sZW5ndGg7KVR0LnB1c2goSjEoRnQsQnVmZmVyLmFsbG9jKDApLEhlKS51cGRhdGUoUC5zbGljZShQLmwsUC5sKzQwOTYpKSksUC5sKz00MDk2LCsrY3Q7cmV0dXJuIF9mKEJ1ZmZlci5jb25jYXQoVHQpLnNsaWNlKDAsa3QpLFEpfSh2ZVsxXSxyZS5jb250ZW50LEkucGFz'@;
put 'c3dvcmR8fCIiLEkpO3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKX12YXIgX1I9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGJSKHksUCl7aWYoUC50ZW1wbGF0ZSlyZXR1cm4gX1IoeSxQKTtpZigib2RzIj09UC5ib29rVHlwZSlyZXR1cm4gXzAoeSxQKTtGbShQ'@;
put 'JiZQLlBQSXx8OTYpLHkmJiF5LlNTRiYmKHkuU1NGPXcuZ2V0X3RhYmxlKCkpLHkmJnkuU1NGJiYoSih3KSx3LmxvYWRfdGFibGUoeS5TU0YpLFAucmV2c3NmPUFlKHkuU1NGKSxQLnJldnNzZlt5LlNTRls2NTUzNV1dPTAsUC5zc2Y9eS5TU0YpLHkuU3R5bGVzPXtGb250czpQLkZvbnRzPVt7'@;
put 'c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlAuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlAuQm9yZGVycz1be31dLERYRjpQ'@;
put 'LkRYRj15LlN0eWxlcyYmeS5TdHlsZXMuRFhGfHxbXSxUYWJsZTpQLlRhYmxlPXkuU3R5bGVzJiZ5LlN0eWxlcy5UYWJsZXx8W119LFAub3ZlcnJpZGVNRFc/cGw9UC5vdmVycmlkZU1EVzpaMShQLkZvbnRzWzBdKSxQLnJlbHM9e30sUC53YnJlbHM9e30sUC5TdHJpbmdzPVtdLFAuU3RyaW5n'@;
put 'cy5Db3VudD0wLFAuU3RyaW5ncy5VbmlxdWU9MCxLMD9QLnJldlN0cmluZ3M9bmV3IE1hcDooUC5yZXZTdHJpbmdzPXt9LFAucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIFAucmV2U3RyaW5ncy5mb28pO3ZhciBJPSJ4bHNiIj09UC5ib29rVHlwZT8iYmluIjoieG1sIixRPU9aLmluZGV4T2Yo'@;
put 'UC5ib29rVHlwZSk+LTEscmU9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6'@;
put 'W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10s'@;
put 'Y3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O2hfKFA9UHx8e30pO3ZhciBnZT15bigpLF9lPSIiLHZlPTA7aWYoUC5jZWxsWGZzPVtdLFAuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGd1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7fSx7'@;
put 'cmV2c3NmOntHZW5lcmFsOjB9fSkseS5Qcm9wc3x8KHkuUHJvcHM9e30pLFl0KGdlLF9lPSJkb2NQcm9wcy9jb3JlLnhtbCIsZnVuY3Rpb24gJGgoeSxQKXt2YXIgST1QfHx7fSxRPVtCbixQMl0scmU9e307aWYoIXkmJiFJLlByb3BzKXJldHVybiBRLmpvaW4oIiIpO3kmJihudWxsIT15LkNy'@;
put 'ZWF0ZWREYXRlJiZodSgiZGN0ZXJtczpjcmVhdGVkIiwic3RyaW5nIj09dHlwZW9mIHkuQ3JlYXRlZERhdGU/eS5DcmVhdGVkRGF0ZTpQaCh5LkNyZWF0ZWREYXRlLEkuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxRLHJlKSxudWxsIT15Lk1vZGlmaWVkRGF0ZSYmaHUoImRj'@;
put 'dGVybXM6bW9kaWZpZWQiLCJzdHJpbmciPT10eXBlb2YgeS5Nb2RpZmllZERhdGU/eS5Nb2RpZmllZERhdGU6UGgoeS5Nb2RpZmllZERhdGUsSS5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LFEscmUpKTtmb3IodmFyIGdlPTA7Z2UhPVBsLmxlbmd0aDsrK2dlKXt2YXIgX2U9'@;
put 'UGxbZ2VdLHZlPUkuUHJvcHMmJm51bGwhPUkuUHJvcHNbX2VbMV1dP0kuUHJvcHNbX2VbMV1dOnk/eVtfZVsxXV06bnVsbDshMD09PXZlP3ZlPSIxIjohMT09PXZlP3ZlPSIwIjoibnVtYmVyIj09dHlwZW9mIHZlJiYodmU9U3RyaW5nKHZlKSksbnVsbCE9dmUmJmh1KF9lWzBdLHZlLG51bGws'@;
put 'USxyZSl9cmV0dXJuIFEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC9jcDpjb3JlUHJvcGVydGllcz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX0oeS5Qcm9wcyxQKSkscmUuY29yZXByb3BzLnB1c2goX2UpLHpvKFAucmVscywyLF9lLEhpLkNPUkVfUFJPUFMp'@;
put 'LF9lPSJkb2NQcm9wcy9hcHAueG1sIiwheS5Qcm9wc3x8IXkuUHJvcHMuU2hlZXROYW1lcylpZih5Lldvcmtib29rJiZ5Lldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBTZT1bXSxIZT0wO0hlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytIZSkyIT0oeS5Xb3JrYm9vay5TaGVldHNbSGVdfHx7fSku'@;
put 'SGlkZGVuJiZTZS5wdXNoKHkuU2hlZXROYW1lc1tIZV0pO3kuUHJvcHMuU2hlZXROYW1lcz1TZX1lbHNlIHkuUHJvcHMuU2hlZXROYW1lcz15LlNoZWV0TmFtZXM7eS5Qcm9wcy5Xb3Jrc2hlZXRzPXkuUHJvcHMuU2hlZXROYW1lcy5sZW5ndGgsWXQoZ2UsX2UsZnVuY3Rpb24gcHMoeSl7dmFy'@;
put 'IFA9W10sST1TcjtyZXR1cm4geXx8KHk9e30pLHkuQXBwbGljYXRpb249IlNoZWV0SlMiLFBbUC5sZW5ndGhdPUJuLFBbUC5sZW5ndGhdPWczLFIxLmZvckVhY2goZnVuY3Rpb24oUSl7aWYodm9pZCAwIT09eVtRWzFdXSl7dmFyIHJlO3N3aXRjaChRWzJdKXtjYXNlInN0cmluZyI6cmU9SHIo'@;
put 'U3RyaW5nKHlbUVsxXV0pKTticmVhaztjYXNlImJvb2wiOnJlPXlbUVsxXV0/InRydWUiOiJmYWxzZSJ9dm9pZCAwIT09cmUmJihQW1AubGVuZ3RoXT1JKFFbMF0scmUpKX19KSxQW1AubGVuZ3RoXT1JKCJIZWFkaW5nUGFpcnMiLEkoInZ0OnZlY3RvciIsSSgidnQ6dmFyaWFudCIsIjx2dDps'@;
put 'cHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0cj4iKStJKCJ2dDp2YXJpYW50IixJKCJ2dDppNCIsU3RyaW5nKHkuV29ya3NoZWV0cykpKSx7c2l6ZToyLGJhc2VUeXBlOiJ2YXJpYW50In0pKSxQW1AubGVuZ3RoXT1JKCJUaXRsZXNPZlBhcnRzIixJKCJ2dDp2ZWN0b3IiLHkuU2hlZXROYW1lcy5t'@;
put 'YXAoZnVuY3Rpb24oUSl7cmV0dXJuIjx2dDpscHN0cj4iK0hyKFEpKyI8L3Z0Omxwc3RyPiJ9KS5qb2luKCIiKSx7c2l6ZTp5LldvcmtzaGVldHMsYmFzZVR5cGU6Imxwc3RyIn0pKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLFBbMV09UFsxXS5yZXBsYWNlKCIv'@;
put 'PiIsIj4iKSksUC5qb2luKCIiKX0oeS5Qcm9wcykpLHJlLmV4dHByb3BzLnB1c2goX2UpLHpvKFAucmVscywzLF9lLEhpLkVYVF9QUk9QUykseS5DdXN0cHJvcHMhPT15LlByb3BzJiZsdCh5LkN1c3Rwcm9wc3x8e30pLmxlbmd0aD4wJiYoWXQoZ2UsX2U9ImRvY1Byb3BzL2N1c3RvbS54bWwi'@;
put 'LGZ1bmN0aW9uIGQwKHkpe3ZhciBQPVtCbix1bV07aWYoIXkpcmV0dXJuIFAuam9pbigiIik7dmFyIEk9MTtyZXR1cm4gbHQoeSkuZm9yRWFjaChmdW5jdGlvbihyZSl7KytJLFBbUC5sZW5ndGhdPVNyKCJwcm9wZXJ0eSIsZnVuY3Rpb24gZWEoeSxQKXtzd2l0Y2godHlwZW9mIHkpe2Nhc2Ui'@;
put 'c3RyaW5nIjp2YXIgST1TcigidnQ6bHB3c3RyIixIcih5KSk7cmV0dXJuIFAmJihJPUkucmVwbGFjZSgvJnF1b3Q7L2csIl94MDAyMl8iKSksSTtjYXNlIm51bWJlciI6cmV0dXJuIFNyKCgwfHkpPT15PyJ2dDppNCI6InZ0OnI4IixIcihTdHJpbmcoeSkpKTtjYXNlImJvb2xlYW4iOnJldHVy'@;
put 'biBTcigidnQ6Ym9vbCIseT8idHJ1ZSI6ImZhbHNlIil9aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFNyKCJ2dDpmaWxldGltZSIsUGgoeSkpO3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHNlcmlhbGl6ZSAiK3kpfSh5W3JlXSwhMCkse2ZtdGlkOiJ7RDVDREQ1MDUtMkU5Qy0xMDFC'@;
put 'LTkzOTctMDgwMDJCMkNGOUFFfSIscGlkOkksbmFtZTpIcihyZSl9KX0pLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfSh5LkN1c3Rwcm9wcykpLHJlLmN1c3Rwcm9wcy5wdXNoKF9lKSx6byhQ'@;
put 'LnJlbHMsNCxfZSxIaS5DVVNUX1BST1BTKSk7dmFyIEJlPVtdLEdlPVtdO2Z1bmN0aW9uIG50KHBuLEtuKXtHZS5wdXNoKFt2ZS0xLEtuLHBuXSl9ZnVuY3Rpb24gZHQocG4pe0JlLnB1c2goW3ZlLTEscG5dKSx6byhDdCwtMSwiLi4vcGl2b3RUYWJsZXMvcGl2b3RUYWJsZSIrQmUubGVuZ3Ro'@;
put 'KyIuIitJLEhpLlBJVk9UKX1mb3IodmU9MTt2ZTw9eS5TaGVldE5hbWVzLmxlbmd0aDsrK3ZlKXt2YXIgQ3Q9eyIhaWQiOnt9fSxjdD15LlNoZWV0c1t5LlNoZWV0TmFtZXNbdmUtMV1dLGJ0PShjdHx8e30pWyIhdHlwZSJdfHwic2hlZXQiO3N3aXRjaChidCl7Y2FzZSJjaGFydCI6aWYodHlw'@;
put 'ZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Iil7WXQoZ2UsX2U9InhsL2NoYXJ0c2hlZXRzL3NoZWV0Iit2ZSsiLiIrSSxsTSh2ZS0xLF9lLFAseSxDdCkpLHJlLmNoYXJ0cy5wdXNoKF9lKSx6byhQLndicmVscywtMSwiY2hhcnRzaGVldHMvc2hlZXQiK3ZlKyIuIitJLEhpLkNTKTticmVha31kZWZh'@;
put 'dWx0Oll0KGdlLF9lPSJ4bC93b3Jrc2hlZXRzL3NoZWV0Iit2ZSsiLiIrSSxaSSh2ZS0xLF9lLFAseSxDdCkpLHJlLnNoZWV0cy5wdXNoKF9lKSx6byhQLndicmVscywtMSwid29ya3NoZWV0cy9zaGVldCIrdmUrIi4iK0ksSGkuV1NbMF0pfWlmKGN0KXsiY2hhcnQiPT1idCYmIWN0WyIhcG9z'@;
put 'Il0mJihjdFsiIXBvcyJdPXt4OjAseTowLHc6OTAwLGg6NjAwfSk7dmFyIEZ0PWN0WyIhY29tbWVudHMiXSxrdD0hMTtpZihGdCYmRnQubGVuZ3RoPjApe3ZhciBUdD0ieGwvY29tbWVudHMiK3ZlKyIuIitJO1l0KGdlLFR0LEplKEZ0LFR0LFApKSxyZS5jb21tZW50cy5wdXNoKFR0KSx6byhD'@;
put 'dCwtMSwiLi4vY29tbWVudHMiK3ZlKyIuIitJLEhpLkNNTlQpLGt0PSEwfShjdFsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCYmKGt0PSEwKSxjdFsiIWxlZ2FjeSJdJiZrdCYmWXQoZ2UsInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK3ZlKyIudm1sIixxRCh2ZSxjdFsiIWNvbW1lbnRzIl0s'@;
put 'Y3RbIiFjb250cm9scyJdLGN0KSksY3RbIiFsZWdhY3lIRiJdJiZuNihnZSwwLHZlLGN0WyIhcHJpbnQiXS5pbWFnZXMpO3ZhciBadD0oImNoYXJ0Ij09Y3RbIiF0eXBlIl0/W2N0XTpjdFsiIWNoYXJ0cyJdfHxbXSkuY29uY2F0KChjdFsiIWltYWdlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKHBu'@;
put 'KXtyZXR1cm4gcG5bIiF0eXBlIl18fChwblsiIXR5cGUiXT0iaW1hZ2UiKSxwbn0pKS5jb25jYXQoKGN0WyIhc2hhcGVzIl18fFtdKS5tYXAoZnVuY3Rpb24ocG4pe3JldHVybiBwblsiIXR5cGUiXXx8KHBuWyIhdHlwZSJdPSJzaGFwZSIpLHBufSkpO1p0JiZadC5sZW5ndGgmJih0eXBlb2Yg'@;
put 'd3JpdGVfZHJhd2luZ188InUiP3dyaXRlX2RyYXdpbmdfKGdlLHJlLHZlLGN0LFp0KTooWXQoZ2UsInhsL2RyYXdpbmdzL2RyYXdpbmciK3ZlKyIueG1sIixSQygpKSxyZS5kcmF3aW5ncy5wdXNoKCJ4bC9kcmF3aW5ncy9kcmF3aW5nIit2ZSsiLnhtbCIpKSksZGVsZXRlIGN0WyIhY29tbWVu'@;
put 'dHMiXSxkZWxldGUgY3RbIiFsZWdhY3kiXSxkZWxldGUgY3RbIiFsZWdhY3lIRiJdfWN0JiZjdFsiIXBpdm90cyJdJiYieG1sIj09SSYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJmN0WyIhcGl2b3RzIl0uZm9yRWFjaChkdCksQ3RbIiFpZCJdLnJJZDEmJll0KGdlLEJpKF9lKSxYYShD'@;
put 'dCkpLGN0JiZjdFsiIXRhYmxlcyJdJiYieG1sIj09SSYmY3RbIiF0YWJsZXMiXS5mb3JFYWNoKG50KX1yZXR1cm4gbnVsbCE9UC5TdHJpbmdzJiZQLlN0cmluZ3MubGVuZ3RoPjAmJihZdChnZSxfZT0ieGwvc2hhcmVkU3RyaW5ncy4iK0ksV0koUC5TdHJpbmdzLF9lLFApKSxyZS5zdHJzLnB1'@;
put 'c2goX2UpLHpvKFAud2JyZWxzLC0xLCJzaGFyZWRTdHJpbmdzLiIrSSxIaS5TU1QpKSwieG1sIj09SSYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJndyaXRlX3Bpdm90X3htbChCZSx5LGdlLHJlLFApLCJ4bWwiPT1JJiZmdW5jdGlvbiBxNCh5LFAsSSxRKXt5LmZvckVhY2goZnVuY3Rp'@;
put 'b24ocmUsZ2Upe3ZhciBfZT1QLlNoZWV0c1tQLlNoZWV0TmFtZXNbcmVbMF1dXSx2ZT0ieGwvdGFibGVzL3RhYmxlIisocmVbMF0rMSkrIl8iK3JlWzFdKyIueG1sIjtRLnRhYmxlcy5wdXNoKHZlKTt2YXIgU2U9cmVbMl0ucmVmfHxfZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgU2UmJihT'@;
put 'ZT1PbyhTZSkpO3ZhciBIZT1PaShTZSksQmU9cmVbMl0ubmFtZXx8InNqc3RibF8iK3JlWzBdKyJfIityZVsxXSxHZT1bQm5dLG50PSFobihyZVsyXS5oZWFkZXIpLGR0PW50JiYhaG4ocmVbMl0uZmlsdGVyKTtHZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxm'@;
put 'b3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgaWQ9IicrKGdlKzEpKyciIG5hbWU9IicrSHIoQmUpKyciIGRpc3BsYXlOYW1lPSInK0hyKEJlKSsnIiByZWY9IicrU2UrJyIgJysobnVsbCE9cmVbMl0uaGVhZGVyJiYxIT1yZVsyXS5oZWFkZXI/J2hlYWRlclJvd0NvdW50PSIn'@;
put 'KyhyZVsyXS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksZHQmJkdlLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJytTZSsnIi8+JyksR2UucHVzaCgnPHRhYmxlQ29sdW1ucyBjb3VudD0iJysoSGUuZS5jLUhlLnMuYysxKSsnIj4nKTtmb3IodmFyIEN0PVtdLGN0PUhlLnMuYztjdDw9SGUuZS5j'@;
put 'OysrY3QpaWYobnQpe2Zvcih2YXIgYnQ9ZGkoe3I6SGUucy5yLGM6Y3R9KSxGdD1fZVtidF0sa3Q9cmVbMl0uY29scyYmcmVbMl0uY29sc1tjdC1IZS5zLmNdJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10ubmFtZXx8RnQmJihGdC53fHxGdC52KXx8IkNvbHVtbiAiKyhjdC1IZS5zLmMrMSksVHQ9'@;
put 'a3QsWnQ9MTtDdC5pbmRleE9mKFR0KT4tMSYmKytadDwxNjM4NDspVHQ9a3QrWnQ7aWYoVHQhPWt0KXRocm93InRhYmxlIGNvbHVtbnMgIitjdCsiIGFuZCAiKyhDdC5pbmRleE9mKGt0KStIZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIra3QrIic7IHRyeSBzZXR0aW5nIGNlbGwg'@;
put 'IitidCsiIHRvICciK1R0KyInIjtDdC5wdXNoKFR0KSxHZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKHJlWzJdLmNvbHMmJnJlWzJdLmNvbHNbY3QtSGUucy5jXSYmbnVsbCE9cmVbMl0uY29sc1tjdC1IZS5zLmNdLmlkP3JlWzJdLmNvbHNbY3QtSGUucy5jXS5pZDpjdC1IZS5zLmMrMSkr'@;
put 'JyIgbmFtZT0iJytIcihUdCkrJyIvPicpfWVsc2UgR2UucHVzaChyZVsyXS5jb2xzJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJytyZVsyXS5jb2xzW2N0LUhlLnMuY10uaWQrJyIgbmFtZT0iJytyZVsyXS5jb2xzW2N0LUhlLnMuY10ubmFtZSsnIi8+JzonPHRh'@;
put 'YmxlQ29sdW1uIGlkPSInKyhjdC1IZS5zLmMrMSkrJyIgdW5pcXVlTmFtZT0iJysoY3QtSGUucy5jKzEpKyciIG5hbWU9IicrKGN0LUhlLnMuYysxKSsnIi8+Jyk7R2UucHVzaCgiPC90YWJsZUNvbHVtbnM+Iik7dmFyIEtuPSsoITEhPT0ocmVbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLHVu'@;
put 'PSshIShyZVsyXS5zdHlsZXx8e30pLmNvbHN0cmlwZSxxbj0rISEocmVbMl0uc3R5bGV8fHt9KS5jb2xmaXJzdCx6bj0rISEocmVbMl0uc3R5bGV8fHt9KS5jb2xsYXN0LGtuPShyZVsyXS5zdHlsZXx8e30pLm5hbWV8fCJNZWRpdW05Ijtrbj1rbi5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFy'@;
put 'aylcZCskLyk/IlRhYmxlU3R5bGUiK2tuOmtuLEdlLnB1c2goJzx0YWJsZVN0eWxlSW5mbyBuYW1lPSInK2tuKyciIHNob3dGaXJzdENvbHVtbj0iJytxbisnIiBzaG93TGFzdENvbHVtbj0iJyt6bisnIiBzaG93Um93U3RyaXBlcz0iJytLbisnIiBzaG93Q29sdW1uU3RyaXBlcz0iJyt1bisn'@;
put 'Ii8+JyksR2UucHVzaCgiPC90YWJsZT4iKSxZdChJLHZlLEdlLmpvaW4oIiIpKX0pfShHZSx5LGdlLHJlKSwieG1sIj09SSYmKHkuRXh0ZXJuYWxXQnx8W10pLmxlbmd0aCYmZnVuY3Rpb24gVzkoeSxQLEkpe0kubGlua3N8fChJLmxpbmtzPVtdKSx5LkV4dGVybmFsV0ImJnkuRXh0ZXJuYWxX'@;
put 'Qi5mb3JFYWNoKGZ1bmN0aW9uKFEscmUpe3ZhciBnZT0iL3hsL2V4dGVybmFsTGlua3MvX3JlbHMvZXh0ZXJuYWxMaW5rIisocmUrMSkrIi54bWwucmVscyIsX2U9e307em8oX2UsLTEsUS5UYXJnZXQsUS5NaXNzaW5nP0hpLlhNSVNTOkhpLlhQQVRIKSxZdChQLGxjKGdlKSxYYShfZSkpO3Zh'@;
put 'ciB2ZT0iL3hsL2V4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisocmUrMSkrIi54bWwiO0kubGlua3MucHVzaCh2ZSksWXQoUCxsYyh2ZSksZnVuY3Rpb24gTEMoeSl7dmFyIFA9W0JuLHQ2XTtyZXR1cm4oeS5TaGVldE5hbWVzfHxbXSkubGVuZ3RoJiYoUC5wdXNoKCc8ZXh0ZXJuYWxCb29r'@;
put 'IHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiIHI6aWQ9InJJZDEiPicpLFAucHVzaCgiPHNoZWV0TmFtZXM+IikseS5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oSSl7UC5wdXNoKCc8c2hlZXRO'@;
put 'YW1lIHZhbD0iJytIcihJKSsnIi8+Jyl9KSxQLnB1c2goIjwvc2hlZXROYW1lcz4iKSxQLnB1c2goIjxzaGVldERhdGFTZXQ+IikseS5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oSSxRKXt2YXIgcmU9eS5TaGVldHNbSV0sZ2U9e3NoZWV0SWQ6UX0sX2U9bnVsbDtpZihudWxsPT1yZSln'@;
put 'ZS5yZWZyZXNoRXJyb3I9MTtlbHNlIGlmKHJlWyIhcmVmIl0pe3ZhciB2ZT1XcyhyZVsiIXJlZiJdKTtfZT0iIjtmb3IodmFyIFNlPXZlLnMucjtTZTw9dmUuZS5yOysrU2Upe2Zvcih2YXIgSGU9IiIsQmU9dmUucy5jO0JlPD12ZS5lLmM7KytCZSl7dmFyIEdlPWRpKHtyOlNlLGM6QmV9KTty'@;
put 'ZVtHZV0mJihIZXx8KEhlPSc8cm93IHI9IicrKFNlKzEpKyciPicpLEhlKz0nPGNlbGwgcj0iJytHZSsnIicrKHJlW0dlXS50PycgdD0iJytyZVtHZV0udCsnIic6IiIpKyI+PHY+IitIcihyZVtHZV0udikrIjwvdj48L2NlbGw+Iil9SGUmJihfZSs9SGUrIjwvcm93PiIpfX1QLnB1c2goU3Io'@;
put 'InNoZWV0RGF0YSIsX2UsZ2UpKX0pLFAucHVzaCgiPC9zaGVldERhdGFTZXQ+IiksUC5wdXNoKCI8L2V4dGVybmFsQm9vaz4iKSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L2V4dGVybmFsTGluaz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX0oUSkpfSl9'@;
put 'KHksZ2UscmUpLCJ4bWwiPT1JJiZmdW5jdGlvbiBUQyh5KXt2YXIgUCxJO3kuV29ya2Jvb2t8fCh5Lldvcmtib29rPXtOYW1lczpbXX0pLHkuV29ya2Jvb2suTmFtZXN8fCh5Lldvcmtib29rLk5hbWVzPVtdKTtmb3IodmFyIFE9eS5Xb3JrYm9vay5OYW1lcyxyZT0wO3JlPHkuU2hlZXROYW1l'@;
put 'cy5sZW5ndGg7KytyZSl7dmFyIGdlPXkuU2hlZXROYW1lc1tyZV0sX2U9eS5TaGVldHNbZ2VdO2lmKF9lJiZfZVsiIXByaW50Il0pe3ZhciB2ZT0iJyIrZ2UrIichIixTZT1fZVsiIXByaW50Il07aWYoU2Upe3ZhciBIZT0hKFA9U2UuYXJlYSksQmU9IShJPVNlLnRpdGxlcyksR2U9UD8ic3Ry'@;
put 'aW5nIj09dHlwZW9mIFA/UDpPbyhQKToiIjtpZihQJiYoUS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtkdC5TaGVldD09cmUmJiFIZSYmIl94bG5tLlByaW50X0FyZWEiPT1kdC5OYW1lJiYoSGU9ITAsZHQuUmVmPXZlK0dlKX0pLEhlfHxRLnB1c2goe05hbWU6Il94bG5tLlByaW50X0FyZWEiLFJl'@;
put 'Zjp2ZStHZSxTaGVldDpyZX0pKSxJKXt2YXIgbnQ9IiI7SS5zLmM+LTEmJkkuZS5jPi0xJiYobnQrPXZlK05zKEkucy5jKSsiOiIrTnMoSS5lLmMpKyIsIiksSS5zLnI+LTEmJkkuZS5yPi0xJiYobnQrPXZlK0hzKEkucy5yKSsiOiIrSHMoSS5lLnIpKyIsIiksbnQ9bnQuc2xpY2UoMCwtMSks'@;
put 'US5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtkdC5TaGVldD09cmUmJiFCZSYmIl94bG5tLlByaW50X1RpdGxlcyI9PWR0Lk5hbWUmJihIZT0hMCxkdC5SZWY9bnQpfSksQmV8fFEucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixSZWY6bnQsU2hlZXQ6cmV9KX19fX19KHkpLFl0KGdlLF9l'@;
put 'PSJ4bC93b3JrYm9vay4iK0ksZnVuY3Rpb24gcXYoeSxQLEkpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9ISTpSSSkoeSxJKX0oeSxfZSxQKSkscmUud29ya2Jvb2tzLnB1c2goX2UpLHpvKFAucmVscywxLF9lLEhpLldCKSxZdChnZSxfZT0ieGwvdGhlbWUvdGhlbWUxLnhtbCIscmYo'@;
put 'eS5UaGVtZXMsUCkpLHJlLnRoZW1lcy5wdXNoKF9lKSx6byhQLndicmVscywtMSwidGhlbWUvdGhlbWUxLnhtbCIsSGkuVEhFTUUpLFl0KGdlLF9lPSJ4bC9zdHlsZXMuIitJLGZ1bmN0aW9uIFlJKHksUCxJKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/UEQ6cEMpKHksSSl9KHksX2Us'@;
put 'UCkpLHJlLnN0eWxlcy5wdXNoKF9lKSx6byhQLndicmVscywtMSwic3R5bGVzLiIrSSxIaS5TVFkpLHkudmJhcmF3JiZRJiYoWXQoZ2UsX2U9InhsL3ZiYVByb2plY3QuYmluIix5LnZiYXJhdykscmUudmJhLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ2YmFQcm9qZWN0LmJpbiIsSGkuVkJB'@;
put 'KSkseS5tb2RlbCYmeS5tb2RlbC5sZW5ndGgmJihZdChnZSwieGwvbW9kZWwvaXRlbS5kYXRhIix5Lm1vZGVsKSx6byhQLndicmVscywtMSwibW9kZWwvaXRlbS5kYXRhIixIaS5QV1JQRCkpLHkuY29ubiYmKFl0KGdlLCJ4bC9jb25uZWN0aW9ucy54bWwiLHkuY29ubikscmUuY29ubnMucHVz'@;
put 'aCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLHpvKFAud2JyZWxzLC0xLCJjb25uZWN0aW9ucy54bWwiLEhpLkNPTk4pKSx5LkN1c3RvbVhNTCYmeS5DdXN0b21YTUwuZm9yRWFjaChmdW5jdGlvbihwbixLbil7aWYoWXQoZ2UsImN1c3RvbVhtbC9pdGVtIisoS24rMSkrIi54bWwiLHBuLmRhdGEp'@;
put 'LHpvKFAud2JyZWxzLC0xLCIuLi9jdXN0b21YbWwvaXRlbSIrKEtuKzEpKyIueG1sIixIaS5DWE1MKSxwbi5wcm9wcyl7WXQoZ2UsImN1c3RvbVhtbC9pdGVtUHJvcHMiKyhLbisxKSsiLnhtbCIscG4ucHJvcHMpLHJlLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVByb3Bz'@;
put 'IisoS24rMSkrIi54bWwiKTt2YXIgdW49e307em8odW4sLTEsIml0ZW1Qcm9wcyIrKEtuKzEpKyIueG1sIixIaS5DWE1MUCksWXQoZ2UsImN1c3RvbVhtbC9fcmVscy9pdGVtIisoS24rMSkrIi54bWwucmVscyIsWGEodW4pKX19KSxZdChnZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIsZnVuY3Rp'@;
put 'b24gcjkoeSxQLEkpe3ZhciByZSxRPVtdO0l8fChRW1EubGVuZ3RoXT1CbixRW1EubGVuZ3RoXT1mMyxRPVEuY29uY2F0KG45KSk7dmFyIGdlPWZ1bmN0aW9uKFNlKXt5W1NlXSYmeVtTZV0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1TcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9'@;
put 'PShyZT15W1NlXVswXSlbMF0/IiI6Ii8iKStyZSxDb250ZW50VHlwZTpMZFtTZV1bUC5ib29rVHlwZXx8Inhsc3giXX0pKX0sX2U9ZnVuY3Rpb24oU2Upeyh5W1NlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUpe1FbUS5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIv'@;
put 'Ij09SGVbMF0/IiI6Ii8iKStIZSxDb250ZW50VHlwZTpMZFtTZV1bUC5ib29rVHlwZXx8Inhsc3giXX0pfSl9LHZlPWZ1bmN0aW9uKFNlKXsoeVtTZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtRW1EubGVuZ3RoXT1TcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PUhlWzBd'@;
put 'PyIiOiIvIikrSGUsQ29udGVudFR5cGU6TmNbU2VdWzBdfSl9KX07cmV0dXJuIGdlKCJ3b3JrYm9va3MiKSxfZSgic2hlZXRzIiksX2UoImNoYXJ0cyIpLHZlKCJ0aGVtZXMiKSxbInN0cnMiLCJzdHlsZXMiLCJjb25ucyJdLmZvckVhY2goZ2UpLFsiY29yZXByb3BzIiwiZXh0cHJvcHMiLCJj'@;
put 'dXN0cHJvcHMiXS5mb3JFYWNoKHZlKSx2ZSgidmJhIiksdmUoImNvbW1lbnRzIiksdmUoImRyYXdpbmdzIiksX2UoInRhYmxlcyIpLF9lKCJwaXZvdHMiKSxfZSgicGl2b3RjYWNoZXMiKSxfZSgicGl2b3RyZWNvcmRzIiksdmUoImRhdGFtb2RlbHMiKSx2ZSgiY3RybHByb3BzIiksdmUoImNo'@;
put 'YXJ0b2JqcyIpLHZlKCJjaGFydHN0eWxlcyIpLHZlKCJjaGFydGNvbG9ycyIpLHZlKCJjaGFydGV4cyIpLF9lKCJsaW5rcyIpLHZlKCJjdXN0b214bWxwcm9wcyIpLCFJJiZRLmxlbmd0aD4yJiYoUVtRLmxlbmd0aF09IjwvVHlwZXM+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEu'@;
put 'am9pbigiIil9KHJlLFApKSxZdChnZSwiX3JlbHMvLnJlbHMiLFhhKFAucmVscykpLFl0KGdlLCJ4bC9fcmVscy93b3JrYm9vay4iK0krIi5yZWxzIixYYShQLndicmVscykpLGRlbGV0ZSBQLkZvbnRzLGRlbGV0ZSBQLkZpbGxzLGRlbGV0ZSBQLkJvcmRlcnMsZGVsZXRlIFAucmV2c3NmLGRl'@;
put 'bGV0ZSBQLnNzZixnZX1mdW5jdGlvbiBmXyh5LFApe3ZhciBJPSIiO3N3aXRjaCgoUHx8e30pLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuW3lbMF0seVsxXSx5WzJdLHlbM10seVs0XSx5WzVdLHlbNl0seVs3XV07Y2FzZSJiYXNlNjQiOkk9c2UuZGVj'@;
put 'b2RlKHkuc2xpY2UoMCwxMikpO2JyZWFrO2Nhc2UiYmluYXJ5IjpJPXk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrKFAmJlAudHlwZXx8InVuZGVmaW5lZCIpKX1yZXR1cm5bSS5jaGFyQ29kZUF0KDApLEkuY2hhckNvZGVBdCgxKSxJLmNoYXJD'@;
put 'b2RlQXQoMiksSS5jaGFyQ29kZUF0KDMpLEkuY2hhckNvZGVBdCg0KSxJLmNoYXJDb2RlQXQoNSksSS5jaGFyQ29kZUF0KDYpLEkuY2hhckNvZGVBdCg3KV19ZnVuY3Rpb24gTk0oeSxQKXt2YXIgST0wO2U6Zm9yKDtJPHkubGVuZ3RoOylzd2l0Y2goeS5jaGFyQ29kZUF0KEkpKXtjYXNlIDEw'@;
put 'OmNhc2UgMTM6Y2FzZSAzMjorK0k7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gamEoeS5zbGljZShJKSxQKTtkZWZhdWx0OmJyZWFrIGV9cmV0dXJuIEIxLnRvX3dvcmtib29rKHksUCl9ZnVuY3Rpb24gcF8oeSxQLEksUSl7cmV0dXJuIFE/KEkudHlwZT0ic3RyaW5nIixCMS50b193b3JrYm9vayh5'@;
put 'LEkpKTpCMS50b193b3JrYm9vayhQLEkpfWZ1bmN0aW9uIF9mKHksUCl7dmFyIEk9dy5nZXRsb2NhbGUoKTtKKHcpLHcuc2V0bG9jYWxlKEkpLFYoKTt2YXIgUT1QfHx7fTtpZih0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIF9mKG5ldyBV'@;
put 'aW50OEFycmF5KHkpLCgoUT1vbihRKSkudHlwZT0iYXJyYXkiLFEpKTt2YXIgZ2UscmU9eSxfZT0hMTtpZihGbShuZj1RLlBQSXx8STkpLFEuY2VsbFN0eWxlcyYmKFEuY2VsbE5GPSEwLFEuc2hlZXRTdHVicz0hMCksWjM9e30sUS5kYXRlTkYmJihaMy5kYXRlTkY9US5kYXRlTkYpLFEudHlw'@;
put 'ZXx8KFEudHlwZT1oZSYmQnVmZmVyLmlzQnVmZmVyKHkpPyJidWZmZXIiOiJiYXNlNjQiKSwiZmlsZSI9PVEudHlwZSYmKFEudHlwZT1oZT8iYnVmZmVyIjoiYmluYXJ5IixyZT1mdW5jdGlvbiBRZSh5KXtpZih0eXBlb2YgV2U8InUiKXJldHVybiBXZS5yZWFkRmlsZVN5bmMoeSk7aWYodHlw'@;
put 'ZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgUD1GaWxlKHkpO1Aub3BlbigiciIpLFAuZW5jb2Rpbmc9ImJpbmFyeSI7dmFyIEk9UC5yZWFkKCk7cmV0dXJuIFAuY2xvc2UoKSxJfWNhdGNoKFEpe2lmKCFRLm1lc3NhZ2V8fCFRLm1lc3NhZ2Uu'@;
put 'bWF0Y2goL29uc3RydWN0LykpdGhyb3cgUX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK3kpfSh5KSksInN0cmluZyI9PVEudHlwZSYmKF9lPSEwLFEudHlwZT0iYmluYXJ5IixRLmNvZGVwYWdlPTY1MDAxLHJlPWZ1bmN0aW9uIE1SKHkpe3JldHVybiB5Lm1hdGNoKC9b'@;
put 'Xlx4MDAtXHg3Rl0vKT9Jbyh5KTp5fSh5KSksImFycmF5Ij09US50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJnkgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgdmU9bmV3IEFycmF5QnVmZmVyKDMpLFNlPW5ldyBVaW50OEFycmF5KHZlKTtp'@;
put 'ZihTZS5mb289ImJhciIsIVNlLmZvbylyZXR1cm4oUT1vbihRKSkudHlwZT0iYXJyYXkiLF9mKEMocmUpLFEpfXN3aXRjaCgoZ2U9Zl8ocmUsUSkpWzBdKXtjYXNlIDIwODppZigyMDc9PT1nZVsxXSYmMTc9PT1nZVsyXSYmMjI0PT09Z2VbM10mJjE2MT09PWdlWzRdJiYxNzc9PT1nZVs1XSYm'@;
put 'MjY9PT1nZVs2XSYmMjI1PT09Z2VbN10pcmV0dXJuIGZ1bmN0aW9uIHlSKHksUCl7cmV0dXJuIGplLmZpbmQoeSwiRW5jcnlwdGVkUGFja2FnZSIpP3ZSKHksUCk6XzUoeSxQKX0oamUucmVhZChyZSxRKSxRKTticmVhaztjYXNlIDk6aWYoZ2VbMV08PTgpcmV0dXJuIF81KHJlLFEpO2JyZWFr'@;
put 'O2Nhc2UgNjA6cmV0dXJuIGphKHJlLFEpO2Nhc2UgNzM6aWYoNzM9PT1nZVsxXSYmNDI9PT1nZVsyXSYmMD09PWdlWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1nZVsxXSlyZXR1cm4gZnVuY3Rpb24gZ1ooeSxQKXt2'@;
put 'YXIgST1QfHx7fSxRPSEhSS5XVEY7SS5XVEY9ITA7dHJ5e3ZhciByZT1FOS50b193b3JrYm9vayh5LEkpO3JldHVybiBJLldURj1RLHJlfWNhdGNoKGdlKXtpZihJLldURj1RLCFnZS5tZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQgSUQvKSYmUSl0aHJvdyBnZTtyZXR1cm4gQjEudG9f'@;
put 'd29ya2Jvb2soeSxQKX19KHJlLFEpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1nZVsxXSYmNjY9PT1nZVsyXSYmNzY9PT1nZVszXSlyZXR1cm4gTTMudG9fd29ya2Jvb2socmUsUSk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4gNzU9PT1nZVsxXSYmZ2VbMl08OSYmZ2VbM108OT9mdW5jdGlvbiB3Uih5'@;
put 'LFApe3ZhciBRPXkscmU9UHx8e307cmV0dXJuIHJlLnR5cGV8fChyZS50eXBlPWhlJiZCdWZmZXIuaXNCdWZmZXIoeSk/ImJ1ZmZlciI6ImJhc2U2NCIpLEhNKHhuKFEscmUpLHJlKX0ocmUsUSk6cF8oeSxyZSxRLF9lKTtjYXNlIDIzOTpyZXR1cm4gNjA9PT1nZVszXT9qYShyZSxRKTpwXyh5'@;
put 'LHJlLFEsX2UpO2Nhc2UgMjU1OmlmKDI1ND09PWdlWzFdKXJldHVybiBmdW5jdGlvbiBTUih5LFApe3ZhciBJPXk7cmV0dXJuImJhc2U2NCI9PVAudHlwZSYmKEk9c2UuZGVjb2RlKEkpKSxJPWNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsSS5zbGljZSgyKSwic3RyIiksUC50eXBlPSJiaW5h'@;
put 'cnkiLE5NKEksUCl9KHJlLFEpO2JyZWFrO2Nhc2UgMDppZigwPT09Z2VbMV0mJmdlWzJdPj0yJiYwPT09Z2VbM10pcmV0dXJuIFRtLnRvX3dvcmtib29rKHJlLFEpO2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gQjIudG9fd29ya2Jvb2socmUsUSk7Y2Fz'@;
put 'ZSAxMjM6aWYoOTI9PT1nZVsxXSYmMTE0PT09Z2VbMl0mJjExNj09PWdlWzNdKXJldHVybiBPbS50b193b3JrYm9vayhyZSxRKTticmVhaztjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gZnVuY3Rpb24gQ1IoeSxQKXt2YXIgST0iIixRPWZfKHksUCk7c3dpdGNoKFAudHlwZSl7Y2Fz'@;
put 'ZSJiYXNlNjQiOkk9c2UuZGVjb2RlKHkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpJPXk7YnJlYWs7Y2FzZSJidWZmZXIiOkk9eS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6ST1QdCh5KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUg'@;
put 'IitQLnR5cGUpfXJldHVybiAyMzk9PVFbMF0mJjE4Nz09UVsxXSYmMTkxPT1RWzJdJiYoST1QaShJKSksTk0oSSxQKX0ocmUsUSl9cmV0dXJuIEIyLnZlcnNpb25zLmluZGV4T2YoZ2VbMF0pPi0xJiZnZVsyXTw9MTImJmdlWzNdPD0zMT9CMi50b193b3JrYm9vayhyZSxRKTpwXyh5LHJlLFEs'@;
put 'X2UpfWZ1bmN0aW9uIGdfKHksUCl7dmFyIEk9UHx8e307cmV0dXJuIEkudHlwZT0iZmlsZSIsX2YoeSxJKX1mdW5jdGlvbiBtXyh5LFApe3N3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOlAudHlwZT0iIjticmVh'@;
put 'aztjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUsamUud3JpdGUoeSx7dHlwZTpoZT8iYnVmZmVyIjoiIn0pKTtjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitQLmJvb2tUeXBlKyInIGZpbGVzIik7ZGVmYXVsdDp0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1yZXR1cm4gamUud3JpdGUoeSxQKX1mdW5jdGlvbiBlMSh5LFAsSSl7SXx8KEk9IiIpO3ZhciBRPUkreTtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHNlLmVuY29kZShJbyhRKSk7Y2FzZSJiaW5hcnki'@;
put 'OnJldHVybiBJbyhRKTtjYXNlInN0cmluZyI6cmV0dXJuIHk7Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5maWxlLFEsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGhlP3VlKFEsInV0ZjgiKTplMShRLHt0eXBlOiJiaW5hcnkifSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihyZSl7cmV0dXJu'@;
put 'IHJlLmNoYXJDb2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1mdW5jdGlvbiB2Xyh5LFApe3N3aXRjaChQLnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmZvcih2YXIgST0iIixRPTA7UTx5Lmxlbmd0aDsr'@;
put 'K1EpSSs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W1FdKTtyZXR1cm4iYmFzZTY0Ij09UC50eXBlP3NlLmVuY29kZShJKToic3RyaW5nIj09UC50eXBlP1BpKEkpOkk7Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5maWxlLHkpO2Nhc2UiYnVmZmVyIjpyZXR1cm4geTtkZWZhdWx0OnRocm93IG5ldyBF'@;
put 'cnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfX1mdW5jdGlvbiBDNSh5LFApe1YoKSxmdW5jdGlvbiBESSh5KXtpZigheXx8IXkuU2hlZXROYW1lc3x8IXkuU2hlZXRzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBXb3JrYm9vayIpO2lmKCF5LlNoZWV0TmFtZXMubGVuZ3RoKXRo'@;
put 'cm93IG5ldyBFcnJvcigiV29ya2Jvb2sgaXMgZW1wdHkiKTshZnVuY3Rpb24gWXYoeSxQLEkpe3kuZm9yRWFjaChmdW5jdGlvbihRLHJlKXtadihRKTtmb3IodmFyIGdlPTA7Z2U8cmU7KytnZSlpZihRPT15W2dlXSl0aHJvdyBuZXcgRXJyb3IoIkR1cGxpY2F0ZSBTaGVldCBOYW1lOiAiK1Ep'@;
put 'O2lmKEkpe3ZhciBfZT1QJiZQW3JlXSYmUFtyZV0uQ29kZU5hbWV8fFE7aWYoOTU9PV9lLmNoYXJDb2RlQXQoMCkmJl9lLmxlbmd0aD4yMil0aHJvdyBuZXcgRXJyb3IoIkJhZCBDb2RlIE5hbWU6IFdvcmtzaGVldCIrX2UpfX0pfSh5LlNoZWV0TmFtZXMseS5Xb3JrYm9vayYmeS5Xb3JrYm9v'@;
put 'ay5TaGVldHN8fFtdLCEheS52YmFyYXcpO2Zvcih2YXIgST0wO0k8eS5TaGVldE5hbWVzLmxlbmd0aDsrK0kpczUoeS5TaGVldHNbeS5TaGVldE5hbWVzW0ldXSwwLEkpfSh5KTt2YXIgST1QfHx7fTtpZihJLmNlbGxTdHlsZXMmJihJLmNlbGxORj0hMCxJLnNoZWV0U3R1YnM9ITApLCJhcnJh'@;
put 'eSI9PUkudHlwZSl7SS50eXBlPSJiaW5hcnkiO3ZhciBRPUM1KHksSSk7cmV0dXJuIEkudHlwZT0iYXJyYXkiLEgoUSl9c3dpdGNoKEkuYm9va1R5cGV8fCJ4bHNiIil7Y2FzZSJ4bWwiOmNhc2UieGxtbCI6cmV0dXJuIGUxKEpJKHksSSksSSk7Y2FzZSJzbGsiOmNhc2Uic3lsayI6cmV0dXJu'@;
put 'IGUxKHVSKHksSSksSSk7Y2FzZSJodG0iOmNhc2UiaHRtbCI6cmV0dXJuIGUxKGxSKHksSSksSSk7Y2FzZSJ0eHQiOnJldHVybiBmdW5jdGlvbiBqTSh5LFApe3N3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKHkpO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6'@;
put 'cmV0dXJuIHk7Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5maWxlLHksImJpbmFyeSIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaGU/dWUoeSwiYmluYXJ5Iik6eS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKEkpe3JldHVybiBJLmNoYXJDb2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2du'@;
put 'aXplZCB0eXBlICIrUC50eXBlKX0oaFIoeSxJKSxJKTtjYXNlImNzdiI6cmV0dXJuIGUxKGNSKHksSSksSSwiXHVmZWZmIik7Y2FzZSJkaWYiOnJldHVybiBlMShkUih5LEkpLEkpO2Nhc2UiZGJmIjpyZXR1cm4gdl8oTE0oeSxJKSxJKTtjYXNlInBybiI6cmV0dXJuIGUxKGxfKHksSSksSSk7'@;
put 'Y2FzZSJydGYiOnJldHVybiBlMSh5NSh5LEkpLEkpO2Nhc2UiZXRoIjpyZXR1cm4gZTEoZlIoeSxJKSxJKTtjYXNlImZvZHMiOnJldHVybiBlMShfMCh5LEkpLEkpO2Nhc2UiYmlmZjIiOkkuYmlmZnx8KEkuYmlmZj0yKTtjYXNlImJpZmYzIjpJLmJpZmZ8fChJLmJpZmY9Myk7Y2FzZSJiaWZm'@;
put 'NCI6cmV0dXJuIEkuYmlmZnx8KEkuYmlmZj00KSx2XyhpXyh5LEkpLEkpO2Nhc2UiYmlmZjUiOkkuYmlmZnx8KEkuYmlmZj01KTtjYXNlImJpZmY4IjpjYXNlInhsYSI6Y2FzZSJ4bHMiOnJldHVybiBJLmJpZmZ8fChJLmJpZmY9OCksZnVuY3Rpb24gQk0oeSxQKXt2YXIgST1QfHx7fTtyZXR1'@;
put 'cm4gbV8oZnVuY3Rpb24gQ00oeSxQKXt2YXIgST1QfHx7fSxRPWplLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSkscmU9Ii9Xb3JrYm9vayI7c3dpdGNoKEkuYm9va1R5cGV8fCJ4bHMiKXtjYXNlInhscyI6SS5ib29rVHlwZT0iYmlmZjgiO2Nhc2UieGxhIjpJLmJvb2tUeXBlfHwoSS5ib29r'@;
put 'VHlwZT0ieGxhIik7Y2FzZSJiaWZmOCI6cmU9Ii9Xb3JrYm9vayIsSS5iaWZmPTg7YnJlYWs7Y2FzZSJiaWZmNSI6cmU9Ii9Cb29rIixJLmJpZmY9NTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrSS5ib29rVHlwZSsiIGZvciBYTFMgQ0ZCIil9cmV0dXJu'@;
put 'IGplLnV0aWxzLmNmYl9hZGQoUSxyZSxpXyh5LEkpKSw4PT1JLmJpZmYmJih5LlByb3BzfHx5LkN1c3Rwcm9wcykmJmZ1bmN0aW9uIHdNKHksUCl7dmFyIF9lLEk9W10sUT1bXSxyZT1bXSxnZT0wO2lmKHkuUHJvcHMpZm9yKF9lPWx0KHkuUHJvcHMpLGdlPTA7Z2U8X2UubGVuZ3RoOysrZ2Up'@;
put 'KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiNCxfZVtnZV0pP0k6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHk0LF9lW2dlXSk/UTpyZSkucHVzaChbX2VbZ2VdLHkuUHJvcHNbX2VbZ2VdXV0pO2lmKHkuQ3VzdHByb3BzKWZvcihfZT1sdCh5LkN1'@;
put 'c3Rwcm9wcyksZ2U9MDtnZTxfZS5sZW5ndGg7KytnZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeS5Qcm9wc3x8e30sX2VbZ2VdKXx8KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiNCxfZVtnZV0pP0k6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q'@;
put 'cm9wZXJ0eS5jYWxsKHk0LF9lW2dlXSk/UTpyZSkucHVzaChbX2VbZ2VdLHkuQ3VzdHByb3BzW19lW2dlXV1dKTt2YXIgdmU9W107Zm9yKGdlPTA7Z2U8cmUubGVuZ3RoOysrZ2UpZm0uaW5kZXhPZihyZVtnZV1bMF0pPi0xfHxudWxsIT1yZVtnZV1bMV0mJnZlLnB1c2gocmVbZ2VdKTtRLmxl'@;
put 'bmd0aCYmamUudXRpbHMuY2ZiX2FkZChQLCIvXHgwNVN1bW1hcnlJbmZvcm1hdGlvbiIseWkoUSxycC5TSSx5NCx3cikpLChJLmxlbmd0aHx8dmUubGVuZ3RoKSYmamUudXRpbHMuY2ZiX2FkZChQLCIvXHgwNURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIix5aShJLHJwLkRTSSxiNCxfNCx2'@;
put 'ZS5sZW5ndGg/dmU6bnVsbCxycC5VREkpKX0oeSxRKSw4PT1JLmJpZmYmJnkudmJhcmF3JiZmdW5jdGlvbiB0TCh5LFApe1AuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oSSxRKXtpZigwIT1RKXt2YXIgcmU9SS5yZXBsYWNlKC9bXlwvXSpbXC9dLywiL19WQkFfUFJPSkVDVF9DVVIvIik7'@;
put 'Ii8iIT09cmUuc2xpY2UoLTEpJiZqZS51dGlscy5jZmJfYWRkKHkscmUsUC5GaWxlSW5kZXhbUV0uY29udGVudCl9fSl9KFEsamUucmVhZCh5LnZiYXJhdyx7dHlwZToic3RyaW5nIj09dHlwZW9mIHkudmJhcmF3PyJiaW5hcnkiOiJidWZmZXIifSkpLFF9KHksSSksSSl9KHksSSk7Y2FzZSJ4'@;
put 'bHN4IjpjYXNlInhsc20iOmNhc2UieGxhbSI6Y2FzZSJ4bHNiIjpjYXNlIm9kcyI6cmV0dXJuIGZ1bmN0aW9uIFZNKHksUCl7dmFyIEk9UHx8e30sUT1iUih5LEkpLHJlPXt9O2lmKEkuY29tcHJlc3Npb24mJihyZS5jb21wcmVzc2lvbj0iREVGTEFURSIpLEkucGFzc3dvcmQpcmUudHlwZT1o'@;
put 'ZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7ZWxzZSBzd2l0Y2goSS50eXBlKXtjYXNlImJhc2U2NCI6cmUudHlwZT0iYmFzZTY0IjticmVhaztjYXNlImJpbmFyeSI6cmUudHlwZT0ic3RyaW5nIjticmVhaztjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlw'@;
put 'ZSBpbnZhbGlkIGZvciAnIitJLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmUudHlwZT1oZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrSS50eXBlKX12YXIgZ2U9US5G'@;
put 'dWxsUGF0aHM/amUud3JpdGUoUSx7ZmlsZVR5cGU6InppcCIsdHlwZTp7bm9kZWJ1ZmZlcjoiYnVmZmVyIixzdHJpbmc6ImJpbmFyeSJ9W3JlLnR5cGVdfHxyZS50eXBlfSk6US5nZW5lcmF0ZShyZSk7cmV0dXJuIEkucGFzc3dvcmQmJnR5cGVvZiBiMDwidSI/bV8oYjAoZ2UsSS5wYXNzd29y'@;
put 'ZCksSSk6ImZpbGUiPT09SS50eXBlP1llKEkuZmlsZSxnZSk6InN0cmluZyI9PUkudHlwZT9QaShnZSk6Z2V9KHksSSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBib29rVHlwZSB8IitJLmJvb2tUeXBlKyJ8Iil9fWZ1bmN0aW9uIHQxKHkpe2lmKCF5LmJvb2tUeXBl'@;
put 'KXt2YXIgST15LmZpbGUuc2xpY2UoeS5maWxlLmxhc3RJbmRleE9mKCIuIikpLnRvTG93ZXJDYXNlKCk7SS5tYXRjaCgvXlwuW2Etel0rJC8pJiYoeS5ib29rVHlwZT1JLnNsaWNlKDEpKSx5LmJvb2tUeXBlPXt4bHM6ImJpZmY4IixodG06Imh0bWwiLHNsazoic3lsayIsc29jaWFsY2FsYzoi'@;
put 'ZXRoIixTaDMzdEpTOiJXVEYifVt5LmJvb2tUeXBlXXx8eS5ib29rVHlwZX19ZnVuY3Rpb24gUzUoeSxQLEkpe3ZhciBRPUl8fHt9O3JldHVybiBRLnR5cGU9ImZpbGUiLFEuZmlsZT1QLHQxKFEpLEM1KHksUSl9ZnVuY3Rpb24gek0oeSxQLEksUSxyZSxnZSxfZSx2ZSl7dmFyIFNlPUhzKEkp'@;
put 'LEhlPXZlLmRlZnZhbCxCZT12ZS5yYXcsR2U9ITAsbnQ9MT09PXJlP1tdOnt9O2lmKDEhPT1yZSlpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShudCwiX19yb3dOdW1fXyIse3ZhbHVlOkksZW51bWVyYWJsZTohMX0pfWNhdGNoe250Ll9fcm93TnVt'@;
put 'X189SX1lbHNlIG50Ll9fcm93TnVtX189STtpZighX2V8fHlbSV0pZm9yKHZhciBkdD1QLnMuYztkdDw9UC5lLmM7KytkdCl7dmFyIEN0PV9lP3lbSV1bZHRdOnlbUVtkdF0rU2VdO2lmKHZvaWQgMCE9PUN0JiZ2b2lkIDAhPT1DdC50KXt2YXIgY3Q9Q3Qudjtzd2l0Y2goQ3QudCl7Y2FzZSJ6'@;
put 'IjppZihudWxsPT1jdClicmVhaztjb250aW51ZTtjYXNlImUiOmN0PTA9PWN0P251bGw6dm9pZCAwO2JyZWFrO2Nhc2UicyI6Y2FzZSJkIjpjYXNlImIiOmNhc2UibiI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0eXBlICIrQ3QudCl9aWYobnVsbCE9Z2Vb'@;
put 'ZHRdKXtpZihudWxsPT1jdClpZigiZSI9PUN0LnQmJm51bGw9PT1jdCludFtnZVtkdF1dPW51bGw7ZWxzZSBpZih2b2lkIDAhPT1IZSludFtnZVtkdF1dPUhlO2Vsc2V7aWYoIUJlfHxudWxsIT09Y3QpY29udGludWU7bnRbZ2VbZHRdXT1udWxsfWVsc2UgbnRbZ2VbZHRdXT1CZT9jdDpjdShD'@;
put 'dCxjdCx2ZSk7bnVsbCE9Y3QmJihHZT0hMSl9fWVsc2V7aWYodm9pZCAwPT09SGUpY29udGludWU7bnVsbCE9Z2VbZHRdJiYobnRbZ2VbZHRdXT1IZSl9fXJldHVybntyb3c6bnQsaXNlbXB0eTpHZX19ZnVuY3Rpb24gSDYoeSxQKXtpZihudWxsPT15fHxudWxsPT15WyIhcmVmIl0pcmV0dXJu'@;
put 'W107dmFyIEk9e3Q6Im4iLHY6MH0sUT0wLHJlPTEsZ2U9W10sX2U9MCx2ZT0iIixTZT1KU09OLnBhcnNlKCd7InMiOnsiciI6MCwiYyI6MH0sImUiOnsiciI6MCwiYyI6MH19JyksSGU9UHx8e30sQmU9bnVsbCE9SGUucmFuZ2U/SGUucmFuZ2U6eVsiIXJlZiJdO3N3aXRjaCgxPT09SGUuaGVh'@;
put 'ZGVyP1E9MToiQSI9PT1IZS5oZWFkZXI/UT0yOkFycmF5LmlzQXJyYXkoSGUuaGVhZGVyKT9RPTM6bnVsbD09SGUuaGVhZGVyJiYoUT0wKSx0eXBlb2YgQmUpe2Nhc2Uic3RyaW5nIjpTZT1PaShCZSk7YnJlYWs7Y2FzZSJudW1iZXIiOihTZT1PaSh5WyIhcmVmIl0pKS5zLnI9QmU7YnJlYWs7'@;
put 'ZGVmYXVsdDpTZT1CZX1RPjAmJihyZT0wKTt2YXIgR2U9SHMoU2Uucy5yKSxudD1bXSxkdD1bXSxDdD0wLGN0PTAsYnQ9QXJyYXkuaXNBcnJheSh5KSxGdD1TZS5zLnIsa3Q9MCxUdD0wO2ZvcihidCYmIXlbRnRdJiYoeVtGdF09W10pLGt0PVNlLnMuYztrdDw9U2UuZS5jOysra3Qpc3dpdGNo'@;
put 'KG50W2t0XT1OcyhrdCksST1idD95W0Z0XVtrdF06eVtudFtrdF0rR2VdLFEpe2Nhc2UgMTpnZVtrdF09a3QtU2Uucy5jO2JyZWFrO2Nhc2UgMjpnZVtrdF09bnRba3RdO2JyZWFrO2Nhc2UgMzpnZVtrdF09SGUuaGVhZGVyW2t0LVNlLnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09SSYm'@;
put 'KEk9SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSksdmU9X2U9Y3UoSSxudWxsLEhlKSxjdD0wLFR0PTA7VHQ8Z2UubGVuZ3RoOysrVHQpZ2VbVHRdPT12ZSYmKHZlPV9lKyJfIisgKytjdCk7Z2Vba3RdPXZlfWZvcihGdD1TZS5zLnIrcmU7RnQ8PVNlLmUucjsrK0Z0'@;
put 'KXt2YXIgWnQ9ek0oeSxTZSxGdCxudCxRLGdlLGJ0LEhlKTsoITE9PT1adC5pc2VtcHR5fHwoMT09PVE/ITEhPT1IZS5ibGFua3Jvd3M6SGUuYmxhbmtyb3dzKSkmJihkdFtDdCsrXT1adC5yb3cpfXJldHVybiBkdC5sZW5ndGg9Q3QsZHR9dmFyICRkPS8iL2c7ZnVuY3Rpb24gVU0oeSxQLEks'@;
put 'USxyZSxnZSxfZSx2ZSl7Zm9yKHZhciBTZT0hMCxIZT1bXSxCZT0iIixHZT1IcyhJKSxudD1QLnMuYztudDw9UC5lLmM7KytudClpZihRW250XSl7dmFyIGR0PXZlLmRlbnNlPyh5W0ldfHxbXSlbbnRdOnlbUVtudF0rR2VdO2lmKG51bGw9PWR0KUJlPSIiO2Vsc2UgaWYobnVsbCE9ZHQudil7'@;
put 'U2U9ITEsQmU9IiIrY3UoZHQsbnVsbCx2ZSk7Zm9yKHZhciBDdD0wLGN0PTA7Q3QhPT1CZS5sZW5ndGg7KytDdClpZigoY3Q9QmUuY2hhckNvZGVBdChDdCkpPT09cmV8fGN0PT09Z2V8fDM0PT09Y3Qpe0JlPSciJytCZS5yZXBsYWNlKCRkLCciIicpKyciJzticmVha30iSUQiPT1CZSYmKEJl'@;
put 'PSciSUQiJyl9ZWxzZSBudWxsPT1kdC5mfHxkdC5GP0JlPSIiOihTZT0hMSwoQmU9Ij0iK2R0LmYpLmluZGV4T2YoIiwiKT49MCYmKEJlPSciJytCZS5yZXBsYWNlKCRkLCciIicpKyciJykpO0hlLnB1c2goQmUpfXJldHVybiExPT09dmUuYmxhbmtyb3dzJiZTZT9udWxsOkhlLmpvaW4oX2Up'@;
put 'fWZ1bmN0aW9uIGpsKHksUCl7dmFyIEk9W10sUT1QPz97fTtpZihudWxsPT15fHxudWxsPT15WyIhcmVmIl0pcmV0dXJuIiI7dmFyIHJlPU9pKHlbIiFyZWYiXSksZ2U9dm9pZCAwIT09US5GUz9RLkZTOiIsIixfZT1nZS5jaGFyQ29kZUF0KDApLHZlPXZvaWQgMCE9PVEuUlM/US5SUzoiXG4i'@;
put 'LFNlPXZlLmNoYXJDb2RlQXQoMCksSGU9bmV3IFJlZ0V4cCgoInwiPT1nZT8iXFx8IjpnZSkrIiskIiksQmU9IiIsR2U9W107US5kZW5zZT1BcnJheS5pc0FycmF5KHkpO2Zvcih2YXIgbnQ9US5za2lwSGlkZGVuJiZ5WyIhY29scyJdfHxbXSxkdD1RLnNraXBIaWRkZW4mJnlbIiFyb3dzIl18'@;
put 'fFtdLEN0PXJlLnMuYztDdDw9cmUuZS5jOysrQ3QpKG50W0N0XXx8e30pLmhpZGRlbnx8KEdlW0N0XT1OcyhDdCkpO2Zvcih2YXIgY3Q9cmUucy5yO2N0PD1yZS5lLnI7KytjdCkoZHRbY3RdfHx7fSkuaGlkZGVufHxudWxsIT0oQmU9VU0oeSxyZSxjdCxHZSxfZSxTZSxnZSxRKSkmJihRLnN0'@;
put 'cmlwJiYoQmU9QmUucmVwbGFjZShIZSwiIikpLEkucHVzaChCZSt2ZSkpO3JldHVybiBkZWxldGUgUS5kZW5zZSxJLmpvaW4oIiIpfWZ1bmN0aW9uIHhSKHksUCl7UHx8KFA9e30pLFAuRlM9Ilx0IixQLlJTPSJcbiI7dmFyIEk9amwoeSxQKTtpZih0eXBlb2YgY3B0YWJsZT4idSJ8fCJzdHJp'@;
put 'bmciPT1QLnR5cGUpcmV0dXJuIEk7dmFyIFE9Y3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxJLCJzdHIiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU0KStRfWZ1bmN0aW9uIE42KHkpe3ZhciBJLFA9IiIsUT0iIjtpZihudWxsPT15fHxu'@;
put 'dWxsPT15WyIhcmVmIl0pcmV0dXJuW107dmFyIHZlLHJlPU9pKHlbIiFyZWYiXSksZ2U9IiIsX2U9W10sU2U9W10sSGU9QXJyYXkuaXNBcnJheSh5KTtmb3IodmU9cmUucy5jO3ZlPD1yZS5lLmM7Kyt2ZSlfZVt2ZV09TnModmUpO2Zvcih2YXIgQmU9cmUucy5yO0JlPD1yZS5lLnI7KytCZSlm'@;
put 'b3IoZ2U9SHMoQmUpLHZlPXJlLnMuYzt2ZTw9cmUuZS5jOysrdmUpaWYoUD1fZVt2ZV0rZ2UsUT0iIix2b2lkIDAhPT0oST1IZT8oeVtCZV18fFtdKVt2ZV06eVtQXSkpe2lmKG51bGwhPUkuRil7aWYoUD1JLkYsIUkuZiljb250aW51ZTtRPUkuZiwtMT09UC5pbmRleE9mKCI6IikmJihQPVAr'@;
put 'IjoiK1ApfWlmKG51bGwhPUkuZilRPUkuZjtlbHNle2lmKCJ6Ij09SS50KWNvbnRpbnVlO2lmKCJuIj09SS50JiZudWxsIT1JLnYpUT0iIitJLnY7ZWxzZSBpZigiYiI9PUkudClRPUkudj8iVFJVRSI6IkZBTFNFIjtlbHNlIGlmKHZvaWQgMCE9PUkudylRPSInIitJLnc7ZWxzZXtpZih2b2lk'@;
put 'IDA9PT1JLnYpY29udGludWU7UT0icyI9PUkudD8iJyIrSS52OiIiK0kudn19U2VbU2UubGVuZ3RoXT1QKyI9IitRfXJldHVybiBTZX1mdW5jdGlvbiBfXyh5LFAsSSl7dmFyIFE9SXx8e30scmU9KyFRLnNraXBIZWFkZXIsZ2U9eXx8e30sX2U9MCx2ZT0wO2lmKGdlJiZudWxsIT1RLm9yaWdp'@;
put 'bilpZigibnVtYmVyIj09dHlwZW9mIFEub3JpZ2luKV9lPVEub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmciPT10eXBlb2YgUS5vcmlnaW4/c3MoUS5vcmlnaW4pOlEub3JpZ2luO19lPVNlLnIsdmU9U2UuY312YXIgSGUsQmU9SlNPTi5wYXJzZSgneyJzIjogeyJjIjowLCAiciI6MH0sICJl'@;
put 'IjogeyJjIjowLCAiciI6MH19Jyk7aWYoQmUuZS5jPXZlLEJlLmUucj1fZStQLmxlbmd0aC0xK3JlLGdlWyIhcmVmIl0pe3ZhciBHZT1PaShnZVsiIXJlZiJdKTtCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLEdlLmUuYyksQmUuZS5yPU1hdGgubWF4KEJlLmUucixHZS5lLnIpLC0xPT1fZSYmKEJl'@;
put 'LmUucj0oX2U9R2UuZS5yKzEpK1AubGVuZ3RoLTErcmUpfWVsc2UtMT09X2UmJihfZT0wLEJlLmUucj1QLmxlbmd0aC0xK3JlKTt2YXIgbnQ9US5oZWFkZXJ8fFtdLGR0PTA7UC5mb3JFYWNoKGZ1bmN0aW9uKGN0LGJ0KXtsdChjdCkuZm9yRWFjaChmdW5jdGlvbihGdCl7LTE9PShkdD1udC5p'@;
put 'bmRleE9mKEZ0KSkmJihudFtkdD1udC5sZW5ndGhdPUZ0KTt2YXIga3Q9Y3RbRnRdLFR0PSJ6IixadD0iIixwbj1kaSh7Yzp2ZStkdCxyOl9lK2J0K3JlfSk7aWYoSGU9cW8uc2hlZXRfZ2V0X2NlbGwoZ2UscG4pLCFrdHx8Im9iamVjdCIhPXR5cGVvZiBrdHx8a3QgaW5zdGFuY2VvZiBEYXRl'@;
put 'KXtpZigibnVtYmVyIj09dHlwZW9mIGt0P1R0PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBrdD9UdD0iYiI6InN0cmluZyI9PXR5cGVvZiBrdD9UdD0icyI6a3QgaW5zdGFuY2VvZiBEYXRlPyhUdD0iZCIsUS5jZWxsRGF0ZXN8fChUdD0ibiIsa3Q9VWUoa3QpKSxadD1IZS56JiZ3LmlzX2RhdGUo'@;
put 'SGUueik/SGUuejpRLmRhdGVORnx8dy5fdGFibGVbMTRdKTpudWxsPT09a3QmJlEubnVsbEVycm9yJiYoVHQ9ImUiLGt0PTApLEhlPyhIZS50PVR0LEhlLnY9a3QsZGVsZXRlIEhlLncsZGVsZXRlIEhlLlIsWnQmJihIZS56PVp0KSk6Z2VbcG5dPUhlPXt0OlR0LHY6a3R9LFp0JiYoSGUuej1a'@;
put 'dCksSGUmJkhlLmgpdHJ5e2lmKEhlLlI9RnUuaHRtbF90b19ycyhIZS5oKSwhSGUudil7SGUudj0iIjtmb3IodmFyIEtuPTA7S248SGUuUi5sZW5ndGg7KytLbilIZS52Kz1IZS5SW0tuXS52fHwiIn19Y2F0Y2h7fX1lbHNlIGdlW3BuXT1rdH0pfSksQmUuZS5jPU1hdGgubWF4KEJlLmUuYyx2'@;
put 'ZStudC5sZW5ndGgtMSk7dmFyIEN0PUhzKF9lKTtpZihyZSlmb3IoZHQ9MDtkdDxudC5sZW5ndGg7KytkdClnZVtOcyhkdCt2ZSkrQ3RdPXt0OiJzIix2Om50W2R0XX07cmV0dXJuIGdlWyIhcmVmIl09T28oQmUpLGdlfXZhciBxbz17ZW5jb2RlX2NvbDpOcyxlbmNvZGVfcm93OkhzLGVuY29k'@;
put 'ZV9jZWxsOmRpLGVuY29kZV9yYW5nZTpPbyxkZWNvZGVfY29sOmpoLGRlY29kZV9yb3c6QjAsc3BsaXRfY2VsbDpmdW5jdGlvbiBoNCh5KXtyZXR1cm4geS5yZXBsYWNlKC8oXCQ/W0EtWl0qKShcJD9cZCopLywiJDEsJDIiKS5zcGxpdCgiLCIpfSxkZWNvZGVfY2VsbDpzcyxkZWNvZGVfcmFu'@;
put 'Z2U6V3MsZm9ybWF0X2NlbGw6Y3UsZ2V0X2Zvcm11bGFlOk42LG1ha2VfY3N2OmpsLG1ha2VfanNvbjpINixtYWtlX2Zvcm11bGFlOk42LGh0bWxfdG9fcnM6RnUuaHRtbF90b19ycyxzaGVldF9hZGRfYW9hOnMwLHNoZWV0X2FkZF9qc29uOl9fLHNoZWV0X2FkZF9kb206QU0sYW9hX3RvX3No'@;
put 'ZWV0OmsxLGpzb25fdG9fc2hlZXQ6ZnVuY3Rpb24gcFkoeSxQKXtyZXR1cm4gX18obnVsbCx5LFApfSx0YWJsZV90b19zaGVldDpIdSx0YWJsZV90b19ib29rOmZ1bmN0aW9uIGRyKHksUCl7cmV0dXJuIEVkKEh1KHksUCksUCl9LHNoZWV0X3RvX2NzdjpqbCxzaGVldF90b190eHQ6eFIsc2hl'@;
put 'ZXRfdG9fanNvbjpINixzaGVldF90b19odG1sOkZ1LmZyb21fc2hlZXQsc2hlZXRfdG9fZm9ybXVsYWU6TjYsc2hlZXRfdG9fcm93X29iamVjdF9hcnJheTpINn07ZnVuY3Rpb24gWk0oeSxQLEksUSxyZSl7dmFyIGdlO2lmKHkuc3R5bGUmJiEoeS5fcmFuZ2UmJihnZT0ic3RyaW5nIj09dHlw'@;
put 'ZW9mIHkuX3JhbmdlP00udXRpbHMuZGVjb2RlX3JhbmdlKHkuX3JhbmdlKTp5Ll9yYW5nZSxJLmM+Z2UuZS5jfHxJLmM8Z2Uucy5jfHxJLnI+Z2UuZS5yfHxJLnI8Z2Uucy5yKSkmJmdlKXt2YXIgX2U9eS5zdHlsZS5zdHlsZTtpZihfZSl7X2Uud2hvbGVUYWJsZSYmcW8uYXBwbHlfc3R5bGVf'@;
put 'ZGVsdGEoUSxfZS53aG9sZVRhYmxlKTtlOmlmKF9lLmhlYWRlclJvdylpZihyZSl7aWYoSS5yIT1nZS5zLnIpYnJlYWsgZTtobih5LnN0eWxlLmNvbGhlYWQpfHxxby5hcHBseV9zdHlsZV9kZWx0YShRLF9lLmhlYWRlclJvdyl9ZWxzZXtpZihJLnIhPWdlLnMucilicmVhayBlO2huKHkuaGVh'@;
put 'ZGVyKXx8cW8uYXBwbHlfc3R5bGVfZGVsdGEoUSxfZS5oZWFkZXJSb3cpfX19fXFvLnRlc3RfcGFzc3dvcmQ9ZnVuY3Rpb24gSU0oeSxQKXt2YXIgST1CdWZmZXIuZnJvbSh5LnNhbHQsImJhc2U2NCIpLFE9eS5hbGdvLHJlPWVsKEJ1ZmZlci5jb25jYXQoW0ksQnVmZmVyLmZyb20oY3B0YWJs'@;
put 'ZS51dGlscy5lbmNvZGUoMTIwMCxQKSldKSxRKSxnZT1CdWZmZXIuYWxsb2MoNCk7b2woZ2UsMCk7Zm9yKHZhciBfZT0wO19lPHkuc3BpbjsrK19lKWdlLmw9MCxnZS53cml0ZV9zaGlmdCg0LF9lKSxyZT1lbChCdWZmZXIuY29uY2F0KFtyZSxnZV0pLFEpO3ZhciB2ZT1CdWZmZXIuZnJvbSh5'@;
put 'Lmhhc2gsImJhc2U2NCIpO3JldHVybiAwPT1yZS5jb21wYXJlKHZlKX0scW8uaGFzaF9wYXNzd29yZD1mdW5jdGlvbiB1Xyh5KXt2YXIgUD17YWxnbzoiU0hBLTUxMiIsc2FsdDoiVTJobFpYUktVeTVqYjIwdmVHeHplQT09IixzcGluOjFlM30sST1CdWZmZXIuZnJvbShQLnNhbHQsImJhc2U2'@;
put 'NCIpLFE9UC5hbGdvLHJlPWVsKEJ1ZmZlci5jb25jYXQoW0ksQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCx5KSldKSxRKSxnZT1CdWZmZXIuYWxsb2MoNCk7b2woZ2UsMCk7Zm9yKHZhciBfZT0wO19lPFAuc3BpbjsrK19lKWdlLmw9MCxnZS53cml0ZV9zaGlmdCg0LF9l'@;
put 'KSxyZT1lbChCdWZmZXIuY29uY2F0KFtyZSxnZV0pLFEpO3JldHVybiBQLmhhc2g9cmUudG9TdHJpbmcoImJhc2U2NCIpLFB9LHFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZT1mdW5jdGlvbih5LFAsSSl7aWYoSSl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBQP09pKFApOlA7bnVsbCE9US5yJiZu'@;
put 'dWxsIT1RLmMmJihRPXtzOlEsZTpRfSk7dmFyIHZlLHJlPVEucy5yLGdlPTAsX2U9IiIsU2U9V3MoeVsiIXJlZiJdfHwiQTEiKTtTZS5zLnI+US5zLnImJihTZS5zLnI9US5zLnIpLFNlLnMuYz5RLnMuYyYmKFNlLnMuYz1RLnMuYyksU2UuZS5yPFEuZS5yJiYoU2UuZS5yPVEuZS5yKSxTZS5l'@;
put 'LmM8US5lLmMmJihTZS5lLmM9US5lLmMpLHlbIiFyZWYiXT1PbyhTZSk7Zm9yKHZhciBCZT1BcnJheS5pc0FycmF5KHkpO3JlPD1RLmUucjsrK3JlKWZvcihnZT1RLnMuYztnZTw9US5lLmM7KytnZSlCZT8oeVtyZV18fCh5W3JlXT1bXSkseVtyZV1bZ2VdfHwoeVtyZV1bZ2VdPXt0OiJ6In0p'@;
put 'LHZlPXlbcmVdW2dlXSk6KHlbX2U9ZGkoe3I6cmUsYzpnZX0pXXx8KHlbX2VdPXt0OiJ6In0pLHZlPXlbX2VdKSx2ZS5zfHwodmUucz17fSksT2JqZWN0LmtleXMoSSkuZm9yRWFjaChIZSksdmUucy5wYXR0ZXJuVHlwZSYmIXZlLnMuZmdDb2xvciYmKGRlbGV0ZSB2ZS5zLnBhdHRlcm5UeXBl'@;
put 'LGRlbGV0ZSB2ZS5zLmJnQ29sb3IpLCh2ZS5zLmZnQ29sb3J8fHZlLnMuYmdDb2xvcikmJiJub25lIj09KHZlLnMucGF0dGVyblR5cGV8fCJub25lIikmJih2ZS5zLnBhdHRlcm5UeXBlPSJzb2xpZCIpO2lmKHJlPVEucy5yLEkudG9wfHxudWxsPT09SS50b3ApZm9yKGdlPVEucy5jO2dlPD1R'@;
put 'LmUuYzsrK2dlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW2dlXX1lbHNlIF9lPWRpKHtyOnJlLGM6Z2V9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1JLnRvcD9kZWxldGUgdmUucy50b3A6dmUucy50b3A9b24oSS50b3ApKX1pZihyZT1RLmUucixJLmJvdHRvbXx8bnVsbD09'@;
put 'PUkuYm90dG9tKWZvcihnZT1RLnMuYztnZTw9US5lLmM7KytnZSl7aWYoQmUpe2lmKCF5W3JlXSljb250aW51ZTt2ZT15W3JlXVtnZV19ZWxzZSBfZT1kaSh7cjpyZSxjOmdlfSksdmU9eVtfZV07dmUmJihudWxsPT09SS5ib3R0b20/ZGVsZXRlIHZlLnMuYm90dG9tOnZlLnMuYm90dG9tPW9u'@;
put 'KEkuYm90dG9tKSl9aWYoZ2U9US5zLmMsSS5sZWZ0fHxudWxsPT09SS5sZWZ0KWZvcihyZT1RLnMucjtyZTw9US5lLnI7KytyZSl7aWYoQmUpe2lmKCF5W3JlXSljb250aW51ZTt2ZT15W3JlXVtnZV19ZWxzZSBfZT1kaSh7cjpyZSxjOmdlfSksdmU9eVtfZV07dmUmJihudWxsPT09SS5sZWZ0'@;
put 'P2RlbGV0ZSB2ZS5zLmxlZnQ6dmUucy5sZWZ0PW9uKEkubGVmdCkpfWlmKGdlPVEuZS5jLEkucmlnaHR8fG51bGw9PT1JLnJpZ2h0KWZvcihyZT1RLnMucjtyZTw9US5lLnI7KytyZSl7aWYoQmUpe2lmKCF5W3JlXSljb250aW51ZTt2ZT15W3JlXVtnZV19ZWxzZSBfZT1kaSh7cjpyZSxjOmdl'@;
put 'fSksdmU9eVtfZV07dmUmJihudWxsPT09SS5yaWdodD9kZWxldGUgdmUucy5yaWdodDp2ZS5zLnJpZ2h0PW9uKEkucmlnaHQpKX19ZnVuY3Rpb24gSGUoR2Upe2lmKCJ0b3AiIT1HZSYmImJvdHRvbSIhPUdlJiYibGVmdCIhPUdlJiYicmlnaHQiIT1HZSl7aWYoInoiPT1HZSlyZXR1cm4gdm9p'@;
put 'ZCh2ZS56PUkueik7aWYoImFsaWdubWVudCI9PUdlKXJldHVybiB2b2lkKHZlLnNbR2VdP09iamVjdC5rZXlzKElbR2VdKS5mb3JFYWNoKGZ1bmN0aW9uKG50KXt2ZS5zW0dlXVtudF09SVtHZV1bbnRdfSk6dmUuc1tHZV09b24oSVtHZV0pKTtpZigiaW5jb2wiPT1HZSlyZXR1cm4gZ2U+US5z'@;
put 'LmMmJihudWxsPT09SS5sZWZ0P2RlbGV0ZSB2ZS5zLmxlZnQ6dmUucy5sZWZ0PSJvYmplY3QiPT10eXBlb2YgSVtHZV0/b24oSVtHZV0pOklbR2VdKSx2b2lkKGdlPFEuZS5jJiYobnVsbD09PUkucmlnaHQ/ZGVsZXRlIHZlLnMucmlnaHQ6dmUucy5yaWdodD0ib2JqZWN0Ij09dHlwZW9mIElb'@;
put 'R2VdP29uKElbR2VdKTpJW0dlXSkpO2lmKCJpbnJvdyI9PUdlKXJldHVybiByZT5RLnMuciYmKG51bGw9PT1JLnRvcD9kZWxldGUgdmUucy50b3A6dmUucy50b3A9Im9iamVjdCI9PXR5cGVvZiBJW0dlXT9vbihJW0dlXSk6SVtHZV0pLHZvaWQocmU8US5lLnImJihudWxsPT09SS5ib3R0b20/'@;
put 'ZGVsZXRlIHZlLnMuYm90dG9tOnZlLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2YgSVtHZV0/b24oSVtHZV0pOklbR2VdKSk7bnVsbD09PUlbR2VdP2RlbGV0ZSB2ZS5zW0dlXTp2ZS5zW0dlXT1JW0dlXSYmQXJyYXkuaXNBcnJheShJW0dlXSk/SVtHZV0uc2xpY2UoKS5tYXAoZnVuY3Rpb24o'@;
put 'bnQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbnQ/b24obnQpOm50fSk6Im9iamVjdCI9PXR5cGVvZiBJW0dlXT9vbihJW0dlXSk6SVtHZV19fX0scW8uYXBwbHlfc3R5bGVfZGVsdGE9ZnVuY3Rpb24oeSxQKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZSIsIm5h'@;
put 'bWUiLCJ2YWxpZ24iXS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3ZhciBRPUk7ImJnQ29sb3IiPT1JP1E9ImZnQ29sb3IiOiJmZ0NvbG9yIj09SSYmKFE9ImJnQ29sb3IiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxJKSYmKG51bGw9PT1QW0ldP2RlbGV0ZSB5W1FdOm51'@;
put 'bGwhPVBbSV0mJih5W1FdPVBbSV0pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiYWxpZ25tZW50IiwicHJvdGVjdGlvbiIsImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKEkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs'@;
put 'bChQLEkpJiYobnVsbD09PVBbSV0/ZGVsZXRlIHlbSV06bnVsbCE9UFtJXSYmKHlbSV09b24oUFtJXSkpKX0pfSxxby5nZXRfY29tcHV0ZWRfc3R5bGU9ZnVuY3Rpb24oeSxQKXsic3RyaW5nIj09dHlwZW9mIFAmJihQPU0udXRpbHMuZGVjb2RlX2NlbGwoUCkpO3ZhciBJPUFycmF5LmlzQXJy'@;
put 'YXkoeSk/KHlbUC5yXXx8W10pW1AuY106eVtNLnV0aWxzLmVuY29kZV9jZWxsKFApXSxRPW9uKEkmJkkuc3x8e30pO3JldHVybiB5WyIhdGFibGVzIl0mJnlbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtaTShyZSwwLFAsUSl9KSx5WyIhcGl2b3RzIl0mJnlbIiFwaXZvdHMiXS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKHJlKXtaTShyZSwwLFAsUSwhMCl9KSxRfTt2YXIgWU09e307cW8uY2VsbF9hcnJheV90b19jc3Zfcm93PWZ1bmN0aW9uKHksUCl7dmFyIEk9UD8/e30sUT12b2lkIDAhPT1JLkZTP0kuRlM6IiwiLHJlPVEuY2hhckNvZGVBdCgwKSxnZT12b2lkIDAhPT1JLlJTP0ku'@;
put 'UlM6IlxuIixfZT1nZS5jaGFyQ29kZUF0KDApLHZlPVlNW1FdfHwoWU1bUV09bmV3IFJlZ0V4cCgoInwiPT1RPyJcXHwiOlEpKyIrJCIpKSxTZT1mdW5jdGlvbiBpcCh5LFAsSSxRLHJlKXtmb3IodmFyIGdlPSEwLF9lPVtdLHZlPSIiLFNlPTA7U2U8PXkubGVuZ3RoLTE7KytTZSl7dmFyIEhl'@;
put 'PXlbU2VdO2lmKG51bGw9PUhlKXZlPSIiO2Vsc2UgaWYobnVsbCE9SGUudil7Z2U9ITEsdmU9IiIrY3UoSGUsbnVsbCxyZSk7Zm9yKHZhciBCZT0wLEdlPTA7QmUhPT12ZS5sZW5ndGg7KytCZSlpZigoR2U9dmUuY2hhckNvZGVBdChCZSkpPT09UHx8R2U9PT1JfHwzND09PUdlKXt2ZT0nIicr'@;
put 'dmUucmVwbGFjZSgkZCwnIiInKSsnIic7YnJlYWt9IklEIj09dmUmJih2ZT0nIklEIicpfWVsc2UgbnVsbD09SGUuZnx8SGUuRj92ZT0iIjooZ2U9ITEsKHZlPSI9IitIZS5mKS5pbmRleE9mKCIsIik+PTAmJih2ZT0nIicrdmUucmVwbGFjZSgkZCwnIiInKSsnIicpKTtfZS5wdXNoKHZlKX1y'@;
put 'ZXR1cm4hMT09PXJlLmJsYW5rcm93cyYmZ2U/bnVsbDpfZS5qb2luKFEpfSh5LHJlLF9lLFEsSSk7cmV0dXJuIEkuc3RyaXAmJihTZT1TZS5yZXBsYWNlKHZlLCIiKSksU2UrZ2V9LGZ1bmN0aW9uKHkpe2Z1bmN0aW9uIEkoZ2UsX2UsdmUpe3JldHVybiBudWxsIT1nZVtfZV0/Z2VbX2VdOmdl'@;
put 'W19lXT12ZX1mdW5jdGlvbiBRKGdlLF9lLHZlKXtpZigic3RyaW5nIj09dHlwZW9mIF9lKXtpZihBcnJheS5pc0FycmF5KGdlKSl7dmFyIFNlPXNzKF9lKTtyZXR1cm4gZ2VbU2Uucl18fChnZVtTZS5yXT1bXSksZ2VbU2Uucl1bU2UuY118fChnZVtTZS5yXVtTZS5jXT17dDoieiJ9KX1yZXR1'@;
put 'cm4gZ2VbX2VdfHwoZ2VbX2VdPXt0OiJ6In0pfXJldHVybiBRKGdlLGRpKCJudW1iZXIiIT10eXBlb2YgX2U/X2U6e3I6X2UsYzp2ZXx8MH0pKX15LmNvbnN0cz15LmNvbnN0c3x8e30seS5zaGVldF9nZXRfY2VsbD1RLHkuYm9va19uZXc9ZnVuY3Rpb24oKXtyZXR1cm57U2hlZXROYW1lczpb'@;
put 'XSxTaGVldHM6e319fSx5LmJvb2tfYXBwZW5kX3NoZWV0PWZ1bmN0aW9uKGdlLF9lLHZlKXtpZighdmUpZm9yKHZhciBTZT0xO1NlPD02NTUzNSYmLTEhPWdlLlNoZWV0TmFtZXMuaW5kZXhPZih2ZT0iU2hlZXQiK1NlKTsrK1NlKTtpZihadih2ZSksZ2UuU2hlZXROYW1lcy5pbmRleE9mKHZl'@;
put 'KT49MCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzaGVldCB3aXRoIG5hbWUgfCIrdmUrInwgYWxyZWFkeSBleGlzdHMhIik7Z2UuU2hlZXROYW1lcy5wdXNoKHZlKSxnZS5TaGVldHNbdmVdPV9lfSx5LmJvb2tfc2V0X3NoZWV0X3Zpc2liaWxpdHk9ZnVuY3Rpb24oZ2UsX2UsdmUpe0koZ2UsIldv'@;
put 'cmtib29rIix7fSksSShnZS5Xb3JrYm9vaywiU2hlZXRzIixbXSk7dmFyIFNlPWZ1bmN0aW9uIHJlKGdlLF9lKXtpZigibnVtYmVyIj09dHlwZW9mIF9lKXtpZihfZT49MCYmZ2UuU2hlZXROYW1lcy5sZW5ndGg+X2UpcmV0dXJuIF9lO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hl'@;
put 'ZXQgIyAiK19lKX1pZigic3RyaW5nIj09dHlwZW9mIF9lKXt2YXIgdmU9Z2UuU2hlZXROYW1lcy5pbmRleE9mKF9lKTtpZih2ZT4tMSlyZXR1cm4gdmU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCBuYW1lIHwiK19lKyJ8Iil9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmlu'@;
put 'ZCBzaGVldCB8IitfZSsifCIpfShnZSxfZSk7c3dpdGNoKEkoZ2UuV29ya2Jvb2suU2hlZXRzLFNlLHt9KSx2ZSl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBzaGVldCB2aXNpYmlsaXR5IHNldHRpbmcgIit2ZSl9Z2UuV29ya2Jvb2su'@;
put 'U2hlZXRzW1NlXS5IaWRkZW49dmV9LGZ1bmN0aW9uIFAoZ2Upe2dlLmZvckVhY2goZnVuY3Rpb24oX2Upe3kuY29uc3RzW19lWzBdXT1fZVsxXX0pfShbWyJTSEVFVF9WSVNJQkxFIiwwXSxbIlNIRUVUX0hJRERFTiIsMV0sWyJTSEVFVF9WRVJZX0hJRERFTiIsMl1dKSx5LmNlbGxfc2V0X251'@;
put 'bWJlcl9mb3JtYXQ9ZnVuY3Rpb24oZ2UsX2Upe3JldHVybiBnZS56PV9lLGdlfSx5LmNlbGxfc2V0X2h5cGVybGluaz1mdW5jdGlvbihnZSxfZSx2ZSl7cmV0dXJuIF9lPyhnZS5sPXtUYXJnZXQ6X2V9LHZlJiYoZ2UubC5Ub29sdGlwPXZlKSxnZS5zfHwoZ2Uucz17fSksZ2Uucy5jb2xvcj17'@;
put 'dGhlbWU6MTB9KTooZGVsZXRlIGdlLmwsZ2UucyYmZ2Uucy5jb2xvciYmMTA9PWdlLnMuY29sb3IudGhlbWUmJmRlbGV0ZSBnZS5zLmNvbG9yKSxnZX0seS5jZWxsX3NldF9pbnRlcm5hbF9saW5rPWZ1bmN0aW9uKGdlLF9lLHZlKXtyZXR1cm4geS5jZWxsX3NldF9oeXBlcmxpbmsoZ2UsIiMi'@;
put 'K19lLHZlKX0seS5jZWxsX2FkZF9jb21tZW50PWZ1bmN0aW9uKGdlLF9lLHZlKXtnZS5jfHwoZ2UuYz1bXSksZ2UuYy5wdXNoKHt0Ol9lLGE6dmV8fCJTaGVldEpTIn0pfSx5LnNoZWV0X3NldF9hcnJheV9mb3JtdWxhPWZ1bmN0aW9uKGdlLF9lLHZlKXtmb3IodmFyIFNlPSJzdHJpbmciIT10'@;
put 'eXBlb2YgX2U/X2U6T2koX2UpLEhlPSJzdHJpbmciPT10eXBlb2YgX2U/X2U6T28oX2UpLEJlPVNlLnMucjtCZTw9U2UuZS5yOysrQmUpZm9yKHZhciBHZT1TZS5zLmM7R2U8PVNlLmUuYzsrK0dlKXt2YXIgbnQ9UShnZSxCZSxHZSk7bnQudD0ibiIsbnQuRj1IZSxkZWxldGUgbnQudixCZT09'@;
put 'U2Uucy5yJiZHZT09U2Uucy5jJiYobnQuZj12ZSl9cmV0dXJuIGdlfX0ocW8pLGhlJiZmdW5jdGlvbigpe3ZhciB5PUYoNTE3OTMpLlJlYWRhYmxlO00uc3RyZWFtPXt0b19qc29uOmZ1bmN0aW9uKHJlLGdlKXt2YXIgX2U9eSh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PXJlfHxudWxsPT1y'@;
put 'ZVsiIXJlZiJdKXJldHVybiBfZS5wdXNoKG51bGwpLF9lO3ZhciB2ZT17dDoibiIsdjowfSxTZT0wLEhlPTEsQmU9W10sR2U9MCxudD0iIixkdD17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LEN0PWdlfHx7fSxjdD1udWxsIT1DdC5yYW5nZT9DdC5yYW5nZTpyZVsiIXJlZiJdO3N3aXRjaCgx'@;
put 'PT09Q3QuaGVhZGVyP1NlPTE6IkEiPT09Q3QuaGVhZGVyP1NlPTI6QXJyYXkuaXNBcnJheShDdC5oZWFkZXIpJiYoU2U9MyksdHlwZW9mIGN0KXtjYXNlInN0cmluZyI6ZHQ9T2koY3QpO2JyZWFrO2Nhc2UibnVtYmVyIjooZHQ9T2kocmVbIiFyZWYiXSkpLnMucj1jdDticmVhaztkZWZhdWx0'@;
put 'OmR0PWN0fVNlPjAmJihIZT0wKTt2YXIgYnQ9SHMoZHQucy5yKSxGdD1bXSxrdD0wLFR0PUFycmF5LmlzQXJyYXkocmUpLFp0PWR0LnMucixwbj0wLEtuPTA7Zm9yKFR0JiYhcmVbWnRdJiYocmVbWnRdPVtdKSxwbj1kdC5zLmM7cG48PWR0LmUuYzsrK3BuKXN3aXRjaChGdFtwbl09TnMocG4p'@;
put 'LHZlPVR0P3JlW1p0XVtwbl06cmVbRnRbcG5dK2J0XSxTZSl7Y2FzZSAxOkJlW3BuXT1wbi1kdC5zLmM7YnJlYWs7Y2FzZSAyOkJlW3BuXT1GdFtwbl07YnJlYWs7Y2FzZSAzOkJlW3BuXT1DdC5oZWFkZXJbcG4tZHQucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT12ZSYmKHZlPXt3OiJf'@;
put 'X0VNUFRZIix0OiJzIn0pLG50PUdlPWN1KHZlLG51bGwsQ3QpLGt0PTAsS249MDtLbjxCZS5sZW5ndGg7KytLbilCZVtLbl09PW50JiYobnQ9R2UrIl8iKyArK2t0KTtCZVtwbl09bnR9cmV0dXJuIFp0PWR0LnMucitIZSxfZS5fcmVhZD1mdW5jdGlvbigpe2lmKFp0PmR0LmUucilyZXR1cm4g'@;
put 'X2UucHVzaChudWxsKTtmb3IoO1p0PD1kdC5lLnI7KXt2YXIgdW49ek0ocmUsZHQsWnQsRnQsU2UsQmUsVHQsQ3QpO2lmKCsrWnQsITE9PT11bi5pc2VtcHR5fHwoMT09PVNlPyExIT09Q3QuYmxhbmtyb3dzOkN0LmJsYW5rcm93cykpe19lLnB1c2godW4ucm93KTticmVha319fSxfZX0sdG9f'@;
put 'aHRtbDpmdW5jdGlvbihyZSxnZSl7dmFyIF9lPXkoKSx2ZT1nZXx8e30sSGU9bnVsbCE9dmUuZm9vdGVyP3ZlLmZvb3RlcjpGdS5FTkQ7X2UucHVzaChudWxsIT12ZS5oZWFkZXI/dmUuaGVhZGVyOkZ1LkJFR0lOKTt2YXIgQmU9V3MocmVbIiFyZWYiXSk7dmUuZGVuc2U9QXJyYXkuaXNBcnJh'@;
put 'eShyZSksX2UucHVzaChGdS5fcHJlYW1ibGUocmUsQmUsdmUpKTt2YXIgR2U9QmUucy5yLG50PSExLGR0PVtdO3JldHVybiBfZS5fcmVhZD1mdW5jdGlvbigpe2lmKEdlPkJlLmUucilyZXR1cm4gbnR8fChudD0hMCxfZS5wdXNoKCI8L3RhYmxlPiIrSGUpKSxfZS5wdXNoKG51bGwpO2Zvcig7'@;
put 'R2U8PUJlLmUucjspe19lLnB1c2goRnUuX3JvdyhyZSxCZSxHZSx2ZSxkdCwiIikpLCsrR2U7YnJlYWt9fSxfZX0sdG9fY3N2OmZ1bmN0aW9uKHJlLGdlKXt2YXIgX2U9eSgpLHZlPWdlPz97fTtpZihudWxsPT1yZXx8bnVsbD09cmVbIiFyZWYiXSlyZXR1cm4gX2UucHVzaChudWxsKSxfZTt2'@;
put 'YXIgU2U9T2kocmVbIiFyZWYiXSksSGU9dm9pZCAwIT09dmUuRlM/dmUuRlM6IiwiLEJlPUhlLmNoYXJDb2RlQXQoMCksR2U9dm9pZCAwIT09dmUuUlM/dmUuUlM6IlxuIixudD1HZS5jaGFyQ29kZUF0KDApLGR0PW5ldyBSZWdFeHAoKCJ8Ij09SGU/IlxcfCI6SGUpKyIrJCIpLEN0PSIiLGN0'@;
put 'PVtdO3ZlLmRlbnNlPUFycmF5LmlzQXJyYXkocmUpO2Zvcih2YXIgYnQ9dmUuc2tpcEhpZGRlbiYmcmVbIiFjb2xzIl18fFtdLEZ0PXZlLnNraXBIaWRkZW4mJnJlWyIhcm93cyJdfHxbXSxrdD1TZS5zLmM7a3Q8PVNlLmUuYzsrK2t0KShidFtrdF18fHt9KS5oaWRkZW58fChjdFtrdF09TnMo'@;
put 'a3QpKTt2YXIgVHQ9U2Uucy5yLFp0PSExO3JldHVybiBfZS5fcmVhZD1mdW5jdGlvbigpe2lmKCFadClyZXR1cm4gWnQ9ITAsX2UucHVzaCgiXHVmZWZmIik7Zm9yKDtUdDw9U2UuZS5yOylpZigrK1R0LCEoRnRbVHQtMV18fHt9KS5oaWRkZW4mJm51bGwhPShDdD1VTShyZSxTZSxUdC0xLGN0'@;
put 'LEJlLG50LEhlLHZlKSkpe3ZlLnN0cmlwJiYoQ3Q9Q3QucmVwbGFjZShkdCwiIikpLF9lLnB1c2goQ3QrR2UpO2JyZWFrfXJldHVybiBUdD5TZS5lLnI/X2UucHVzaChudWxsKTp2b2lkIDB9LF9lfX19KCksTS5wYXJzZV94bHNjZmI9XzUsTS5wYXJzZV96aXA9SE0sTS5yZWFkPV9mLE0ucmVh'@;
put 'ZEZpbGU9Z18sTS5yZWFkRmlsZVN5bmM9Z18sTS53cml0ZT1DNSxNLndyaXRlRmlsZT1TNSxNLndyaXRlRmlsZVN5bmM9UzUsTS53cml0ZUZpbGVBc3luYz1mdW5jdGlvbiBiZih5LFAsSSxRKXt2YXIgcmU9SXx8e307cmUudHlwZT0iZmlsZSIscmUuZmlsZT15LHQxKHJlKSxyZS50eXBlPSJi'@;
put 'dWZmZXIiO3ZhciBnZT1RO3JldHVybiBnZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwoZ2U9SSksV2Uud3JpdGVGaWxlKHksQzUoUCxyZSksZ2UpfSxNLnNldF9kYXRlX3N0eWxlPWZ1bmN0aW9uIHplKHkpe3N3aXRjaCh5KXtjYXNlIDA6TWUoKTticmVhaztjYXNlIDE6IWZ1bmN0aW9uIERlKCl7'@;
put 'dmFyIHk9bmV3IERhdGU7WGU9cWUuZ2V0VGltZSgpKzZlNCooeS5nZXRUaW1lem9uZU9mZnNldCgpLXFlLmdldFRpbWV6b25lT2Zmc2V0KCkpO3ZhciBQPXkuZ2V0VGltZXpvbmVPZmZzZXQoKTtVZT1mdW5jdGlvbihRLHJlKXt2YXIgZ2U9US5nZXRUaW1lKCk7cmV0dXJuIHJlJiYoZ2UtPTEy'@;
put 'NjMxNjhlNSksKGdlLShxZS5nZXRUaW1lKCkrNmU0KihRLmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX0saHQ9ZnVuY3Rpb24oUSl7dmFyIHJlPW5ldyBEYXRlO3JldHVybiByZS5zZXRUaW1lKDI0KlEqNjAqNjAqMWUzK1hlKSxyZS5nZXRUaW1l'@;
put 'em9uZU9mZnNldCgpIT09UCYmcmUuc2V0VGltZShyZS5nZXRUaW1lKCkrNmU0KihyZS5nZXRUaW1lem9uZU9mZnNldCgpLVApKSxyZX19KCl9fSxNLnV0aWxzPXFvLE0uU1NGPXcsdHlwZW9mIGplPCJ1IiYmKE0uQ0ZCPWplKX0oTGUpfSwyNzQxNDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7'@;
put 'Y29uc3QgYWU9TGU7YWUuYmlnbnVtPUYoNTA0NyksYWUuZGVmaW5lPUYoOTAzMDIpLmRlZmluZSxhZS5iYXNlPUYoNDA1MTApLGFlLmNvbnN0YW50cz1GKDQ0MTU1KSxhZS5kZWNvZGVycz1GKDcxMzAxKSxhZS5lbmNvZGVycz1GKDIzNjkzKX0sOTAzMDI6KGF0LExlLEYpPT57InVzZSBzdHJp'@;
put 'Y3QiO2NvbnN0IGFlPUYoMjM2OTMpLHg9Rig3MTMwMSksbT1GKDY2Njk4KTtmdW5jdGlvbiBNKE8sUil7dGhpcy5uYW1lPU8sdGhpcy5ib2R5PVIsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fUxlLmRlZmluZT1mdW5jdGlvbihSLHope3JldHVybiBuZXcgTShSLHopfSxNLnBy'@;
put 'b3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oUil7Y29uc3Qgej10aGlzLm5hbWU7ZnVuY3Rpb24gSyhMKXt0aGlzLl9pbml0TmFtZWQoTCx6KX1yZXR1cm4gbShLLFIpLEsucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oayxFKXtSLmNhbGwodGhpcyxrLEUpfSxuZXcgSyh0aGlz'@;
put 'KX0sTS5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoUj1SfHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW1JdPXRoaXMuX2NyZWF0ZU5hbWVkKHhbUl0pKSx0aGlzLmRlY29kZXJzW1JdfSxNLnByb3RvdHlwZS5kZWNv'@;
put 'ZGU9ZnVuY3Rpb24oUix6LEspe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKHopLmRlY29kZShSLEspfSxNLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShSPVJ8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNbUl09dGhp'@;
put 'cy5fY3JlYXRlTmFtZWQoYWVbUl0pKSx0aGlzLmVuY29kZXJzW1JdfSxNLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUix6LEspe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKHopLmVuY29kZShSLEspfX0sNzU3MjA6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgp'@;
put 'LHg9Rig5NTY4NCkuYixtPUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiBsZShPLFIpe3guY2FsbCh0aGlzLFIpLG0uaXNCdWZmZXIoTyk/KHRoaXMuYmFzZT1PLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9Ty5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlv'@;
put 'biBNKE8sUil7aWYoQXJyYXkuaXNBcnJheShPKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9Ty5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIE0uaXNFbmNvZGVyQnVmZmVyKHopfHwoej1uZXcgTSh6LFIpKSx0aGlzLmxlbmd0aCs9ei5sZW5ndGgsen0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09'@;
put 'dHlwZW9mIE8pe2lmKCEoMDw9TyYmTzw9MjU1KSlyZXR1cm4gUi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9Tyx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBPKXRoaXMudmFsdWU9Tyx0aGlzLmxlbmd0aD1tLmJ5dGVMZW5n'@;
put 'dGgoTyk7ZWxzZXtpZighbS5pc0J1ZmZlcihPKSlyZXR1cm4gUi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgTyk7dGhpcy52YWx1ZT1PLHRoaXMubGVuZ3RoPU8ubGVuZ3RofX1hZShsZSx4KSxMZS5DPWxlLGxlLmlzRGVjb2RlckJ1ZmZlcj1mdW5jdGlvbihSKXtyZXR1cm4g'@;
put 'UiBpbnN0YW5jZW9mIGxlfHwib2JqZWN0Ij09dHlwZW9mIFImJm0uaXNCdWZmZXIoUi5iYXNlKSYmIkRlY29kZXJCdWZmZXIiPT09Ui5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIFIub2Zmc2V0JiYibnVtYmVyIj09dHlwZW9mIFIubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgUi5zYXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5yZXN0b3JlJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5pc0VtcHR5JiYiZnVuY3Rpb24iPT10eXBlb2YgUi5yZWFkVUludDgmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnNraXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJhd30sbGUucHJvdG90'@;
put 'eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOngucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LGxlLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKFIpe2NvbnN0IHo9bmV3IGxlKHRoaXMuYmFzZSk7cmV0dXJuIHoub2Zmc2V0PVIub2Zm'@;
put 'c2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PVIub2Zmc2V0LHgucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLFIucmVwb3J0ZXIpLHp9LGxlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LGxlLnByb3Rv'@;
put 'dHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihSfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LGxlLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9u'@;
put 'KFIseil7aWYoISh0aGlzLm9mZnNldCtSPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3Ioenx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO2NvbnN0IEs9bmV3IGxlKHRoaXMuYmFzZSk7cmV0dXJuIEsuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxLLm9mZnNldD10'@;
put 'aGlzLm9mZnNldCxLLmxlbmd0aD10aGlzLm9mZnNldCtSLHRoaXMub2Zmc2V0Kz1SLEt9LGxlLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShSP1Iub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sTGUuUj1NLE0uaXNFbmNvZGVyQnVmZmVy'@;
put 'PWZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2YgTXx8Im9iamVjdCI9PXR5cGVvZiBSJiYiRW5jb2RlckJ1ZmZlciI9PT1SLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmpvaW59LE0ucHJvdG90eXBlLmpvaW49'@;
put 'ZnVuY3Rpb24oUix6KXtyZXR1cm4gUnx8KFI9bS5hbGxvYyh0aGlzLmxlbmd0aCkpLHp8fCh6PTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKEspe0suam9pbihSLHopLHorPUsubGVuZ3RofSk6KCJudW1i'@;
put 'ZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9SW3pdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP1Iud3JpdGUodGhpcy52YWx1ZSx6KTptLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoUix6KSx6Kz10aGlzLmxlbmd0aCkpLFJ9fSw0MDUxMDooYXQs'@;
put 'TGUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9TGU7YWUuUmVwb3J0ZXI9Rig5NTY4NCkuYixhZS5EZWNvZGVyQnVmZmVyPUYoNzU3MjApLkMsYWUuRW5jb2RlckJ1ZmZlcj1GKDc1NzIwKS5SLGFlLk5vZGU9Rig1ODUzMyl9LDU4NTMzOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z'@;
put 'dCBhZT1GKDk1Njg0KS5iLHg9Rig3NTcyMCkuUixtPUYoNzU3MjApLkMsbGU9Rig1Nzc5OCksTT1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBz'@;
put 'dHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLE89WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0'@;
put 'IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdChNKTtmdW5jdGlvbiB6KEwsayxFKXtjb25zdCBqPXt9O3RoaXMuX2Jhc2VTdGF0ZT1qLGoubmFtZT1FLGouZW5jPUwsai5wYXJlbnQ9a3x8bnVsbCxqLmNoaWxkcmVuPW51bGwsai50YWc9bnVsbCxq'@;
put 'LmFyZ3M9bnVsbCxqLnJldmVyc2VBcmdzPW51bGwsai5jaG9pY2U9bnVsbCxqLm9wdGlvbmFsPSExLGouYW55PSExLGoub2JqPSExLGoudXNlPW51bGwsai51c2VEZWNvZGVyPW51bGwsai5rZXk9bnVsbCxqLmRlZmF1bHQ9bnVsbCxqLmV4cGxpY2l0PW51bGwsai5pbXBsaWNpdD1udWxsLGou'@;
put 'Y29udGFpbnM9bnVsbCxqLnBhcmVudHx8KGouY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1hdC5leHBvcnRzPXo7Y29uc3QgSz1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2Ui'@;
put 'LCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO3oucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7Y29uc3Qgaz10aGlzLl9iYXNlU3RhdGUsRT17fTtLLmZvckVhY2goZnVuY3Rpb24oVil7RVtWXT1rW1ZdfSk7Y29uc3Qgaj1u'@;
put 'ZXcgdGhpcy5jb25zdHJ1Y3RvcihFLnBhcmVudCk7cmV0dXJuIGouX2Jhc2VTdGF0ZT1FLGp9LHoucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7Y29uc3Qgaz10aGlzLl9iYXNlU3RhdGU7Ty5mb3JFYWNoKGZ1bmN0aW9uKEUpe3RoaXNbRV09ZnVuY3Rpb24oKXtjb25zdCBWPW5ldyB0aGlz'@;
put 'LmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBrLmNoaWxkcmVuLnB1c2goViksVltFXS5hcHBseShWLGFyZ3VtZW50cyl9fSx0aGlzKX0sei5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7bGUobnVsbD09PUUucGFyZW50KSxrLmNhbGwodGhpcyks'@;
put 'RS5jaGlsZHJlbj1FLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4gai5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLGxlLmVxdWFsKEUuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSx6LnByb3RvdHlwZS5fdXNl'@;
put 'QXJncz1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZSxqPWsuZmlsdGVyKGZ1bmN0aW9uKFYpe3JldHVybiBWIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7az1rLmZpbHRlcihmdW5jdGlvbihWKXtyZXR1cm4hKFYgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVj'@;
put 'dG9yKX0sdGhpcyksMCE9PWoubGVuZ3RoJiYobGUobnVsbD09PUUuY2hpbGRyZW4pLEUuY2hpbGRyZW49aixqLmZvckVhY2goZnVuY3Rpb24oVil7Vi5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PWsubGVuZ3RoJiYobGUobnVsbD09PUUuYXJncyksRS5hcmdzPWssRS5yZXZl'@;
put 'cnNlQXJncz1rLm1hcChmdW5jdGlvbihWKXtpZigib2JqZWN0IiE9dHlwZW9mIFZ8fFYuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFY7Y29uc3QgQj17fTtyZXR1cm4gT2JqZWN0LmtleXMoVikuZm9yRWFjaChmdW5jdGlvbihZKXtZPT0oMHxZKSYmKFl8PTApLEJbVltZXV09WX0pLEJ9'@;
put 'KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIs'@;
put 'Il9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3oucHJvdG90eXBlW0xdPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEwrIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5n'@;
put 'OiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLE0uZm9yRWFjaChmdW5jdGlvbihMKXt6LnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlLGo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbGUobnVsbD09PUUudGFnKSxF'@;
put 'LnRhZz1MLHRoaXMuX3VzZUFyZ3MoaiksdGhpc319KSx6LnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oayl7bGUoayk7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLnVzZSksRS51c2U9ayx0aGlzfSx6LnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sei5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5kZWZhdWx0KSxFLmRlZmF1bHQ9ayxFLm9wdGlvbmFsPSEwLHRoaXN9LHoucHJvdG90eXBlLmV4cGxp'@;
put 'Y2l0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5leHBsaWNpdCYmbnVsbD09PUUuaW1wbGljaXQpLEUuZXhwbGljaXQ9ayx0aGlzfSx6LnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTty'@;
put 'ZXR1cm4gbGUobnVsbD09PUUuZXhwbGljaXQmJm51bGw9PT1FLmltcGxpY2l0KSxFLmltcGxpY2l0PWssdGhpc30sei5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7Y29uc3Qgaz10aGlzLl9iYXNlU3RhdGUsRT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBr'@;
put 'Lm9iaj0hMCwwIT09RS5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoRSksdGhpc30sei5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5rZXkpLEUua2V5PWssdGhpc30sei5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sei5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5jaG9pY2UpLEUuY2hvaWNlPWssdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhrKS5tYXAoZnVuY3Rp'@;
put 'b24oail7cmV0dXJuIGtbal19KSksdGhpc30sei5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLnVzZSksRS5jb250YWlucz1rLHRoaXN9LHoucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oayxFKXtjb25z'@;
put 'dCBqPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ai5wYXJlbnQpcmV0dXJuIGsud3JhcFJlc3VsdChqLmNoaWxkcmVuWzBdLl9kZWNvZGUoayxFKSk7bGV0IFgsVj1qLmRlZmF1bHQsQj0hMCxZPW51bGw7aWYobnVsbCE9PWoua2V5JiYoWT1rLmVudGVyS2V5KGoua2V5KSksai5vcHRpb25h'@;
put 'bCl7bGV0IFU9bnVsbDtpZihudWxsIT09ai5leHBsaWNpdD9VPWouZXhwbGljaXQ6bnVsbCE9PWouaW1wbGljaXQ/VT1qLmltcGxpY2l0Om51bGwhPT1qLnRhZyYmKFU9ai50YWcpLG51bGwhPT1VfHxqLmFueSl7aWYoQj10aGlzLl9wZWVrVGFnKGssVSxqLmFueSksay5pc0Vycm9yKEIpKXJl'@;
put 'dHVybiBCfWVsc2V7Y29uc3QgcT1rLnNhdmUoKTt0cnl7bnVsbD09PWouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoai50YWcsayxFKTp0aGlzLl9kZWNvZGVDaG9pY2UoayxFKSxCPSEwfWNhdGNoe0I9ITF9ay5yZXN0b3JlKHEpfX1pZihqLm9iaiYmQiYmKFg9ay5lbnRlck9iamVjdCgp'@;
put 'KSxCKXtpZihudWxsIT09ai5leHBsaWNpdCl7Y29uc3QgcT10aGlzLl9kZWNvZGVUYWcoayxqLmV4cGxpY2l0KTtpZihrLmlzRXJyb3IocSkpcmV0dXJuIHE7az1xfWNvbnN0IFU9ay5vZmZzZXQ7aWYobnVsbD09PWoudXNlJiZudWxsPT09ai5jaG9pY2Upe2xldCBxO2ouYW55JiYocT1rLnNh'@;
put 'dmUoKSk7Y29uc3QgZWU9dGhpcy5fZGVjb2RlVGFnKGssbnVsbCE9PWouaW1wbGljaXQ/ai5pbXBsaWNpdDpqLnRhZyxqLmFueSk7aWYoay5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7ai5hbnk/Vj1rLnJhdyhxKTprPWVlfWlmKEUmJkUudHJhY2smJm51bGwhPT1qLnRhZyYmRS50cmFjayhrLnBh'@;
put 'dGgoKSxVLGsubGVuZ3RoLCJ0YWdnZWQiKSxFJiZFLnRyYWNrJiZudWxsIT09ai50YWcmJkUudHJhY2soay5wYXRoKCksay5vZmZzZXQsay5sZW5ndGgsImNvbnRlbnQiKSxqLmFueXx8KFY9bnVsbD09PWouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoai50YWcsayxFKTp0aGlzLl9kZWNv'@;
put 'ZGVDaG9pY2UoayxFKSksay5pc0Vycm9yKFYpKXJldHVybiBWO2lmKCFqLmFueSYmbnVsbD09PWouY2hvaWNlJiZudWxsIT09ai5jaGlsZHJlbiYmai5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtlZS5fZGVjb2RlKGssRSl9KSxqLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1qLnRhZ3x8'@;
put 'ImJpdHN0ciI9PT1qLnRhZykpe2NvbnN0IHE9bmV3IG0oVik7Vj10aGlzLl9nZXRVc2Uoai5jb250YWlucyxrLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShxLEUpfX1yZXR1cm4gai5vYmomJkImJihWPWsubGVhdmVPYmplY3QoWCkpLG51bGw9PT1qLmtleXx8bnVsbD09PVYmJiEwIT09'@;
put 'Qj9udWxsIT09WSYmay5leGl0S2V5KFkpOmsubGVhdmVLZXkoWSxqLmtleSxWKSxWfSx6LnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihrLEUsail7Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1rfHwic2V0Ij09PWs/bnVsbDoic2Vxb2YiPT09a3x8InNl'@;
put 'dG9mIj09PWs/dGhpcy5fZGVjb2RlTGlzdChFLGssVi5hcmdzWzBdLGopOi9zdHIkLy50ZXN0KGspP3RoaXMuX2RlY29kZVN0cihFLGssaik6Im9iamlkIj09PWsmJlYuYXJncz90aGlzLl9kZWNvZGVPYmppZChFLFYuYXJnc1swXSxWLmFyZ3NbMV0saik6Im9iamlkIj09PWs/dGhpcy5fZGVj'@;
put 'b2RlT2JqaWQoRSxudWxsLG51bGwsaik6ImdlbnRpbWUiPT09a3x8InV0Y3RpbWUiPT09az90aGlzLl9kZWNvZGVUaW1lKEUsayxqKToibnVsbF8iPT09az90aGlzLl9kZWNvZGVOdWxsKEUsaik6ImJvb2wiPT09az90aGlzLl9kZWNvZGVCb29sKEUsaik6Im9iakRlc2MiPT09az90aGlzLl9k'@;
put 'ZWNvZGVTdHIoRSxrLGopOiJpbnQiPT09a3x8ImVudW0iPT09az90aGlzLl9kZWNvZGVJbnQoRSxWLmFyZ3MmJlYuYXJnc1swXSxqKTpudWxsIT09Vi51c2U/dGhpcy5fZ2V0VXNlKFYudXNlLEUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKEUsaik6RS5lcnJvcigidW5rbm93biB0YWc6'@;
put 'ICIrayl9LHoucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gai51c2VEZWNvZGVyPXRoaXMuX3VzZShrLEUpLGxlKG51bGw9PT1qLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLGoudXNlRGVjb2Rlcj1qLnVzZURlY29k'@;
put 'ZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxqLmltcGxpY2l0IT09ai51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihqLnVzZURlY29kZXI9ai51c2VEZWNvZGVyLmNsb25lKCksai51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ai5pbXBsaWNpdCksai51c2VEZWNvZGVy'@;
put 'fSx6LnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7bGV0IFY9bnVsbCxCPSExO3JldHVybiBPYmplY3Qua2V5cyhqLmNob2ljZSkuc29tZShmdW5jdGlvbihZKXtjb25zdCBYPWsuc2F2ZSgpLFU9ai5jaG9pY2VbWV07dHJ5e2Nv'@;
put 'bnN0IHE9VS5fZGVjb2RlKGssRSk7aWYoay5pc0Vycm9yKHEpKXJldHVybiExO1Y9e3R5cGU6WSx2YWx1ZTpxfSxCPSEwfWNhdGNoe3JldHVybiBrLnJlc3RvcmUoWCksITF9cmV0dXJuITB9LHRoaXMpLEI/VjprLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sei5wcm90b3R5cGUuX2Ny'@;
put 'ZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyB4KGssdGhpcy5yZXBvcnRlcil9LHoucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGwhPT1WLmRlZmF1bHQmJlYuZGVmYXVsdD09PWspcmV0dXJuO2Nv'@;
put 'bnN0IEI9dGhpcy5fZW5jb2RlVmFsdWUoayxFLGopO3JldHVybiB2b2lkIDA9PT1CfHx0aGlzLl9za2lwRGVmYXVsdChCLEUsaik/dm9pZCAwOkJ9LHoucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihrLEUsail7Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVYucGFy'@;
put 'ZW50KXJldHVybiBWLmNoaWxkcmVuWzBdLl9lbmNvZGUoayxFfHxuZXcgYWUpO2xldCBCPW51bGw7aWYodGhpcy5yZXBvcnRlcj1FLFYub3B0aW9uYWwmJnZvaWQgMD09PWspe2lmKG51bGw9PT1WLmRlZmF1bHQpcmV0dXJuO2s9Vi5kZWZhdWx0fWxldCBZPW51bGwsWD0hMTtpZihWLmFueSlC'@;
put 'PXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoayk7ZWxzZSBpZihWLmNob2ljZSlCPXRoaXMuX2VuY29kZUNob2ljZShrLEUpO2Vsc2UgaWYoVi5jb250YWlucylZPXRoaXMuX2dldFVzZShWLmNvbnRhaW5zLGopLl9lbmNvZGUoayxFKSxYPSEwO2Vsc2UgaWYoVi5jaGlsZHJlbilZPVYuY2hp'@;
put 'bGRyZW4ubWFwKGZ1bmN0aW9uKFUpe2lmKCJudWxsXyI9PT1VLl9iYXNlU3RhdGUudGFnKXJldHVybiBVLl9lbmNvZGUobnVsbCxFLGspO2lmKG51bGw9PT1VLl9iYXNlU3RhdGUua2V5KXJldHVybiBFLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO2NvbnN0IHE9RS5lbnRlcktl'@;
put 'eShVLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIGspcmV0dXJuIEUuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO2NvbnN0IGVlPVUuX2VuY29kZShrW1UuX2Jhc2VTdGF0ZS5rZXldLEUsayk7cmV0dXJuIEUubGVhdmVLZXkocSks'@;
put 'ZWV9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVX0pLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKCJzZXFvZiI9PT1WLnRhZ3x8InNldG9mIj09PVYudGFnKXtpZighVi5hcmdzfHwxIT09Vi5hcmdzLmxlbmd0aClyZXR1cm4gRS5lcnJvcigiVG9vIG1h'@;
put 'bnkgYXJncyBmb3IgOiAiK1YudGFnKTtpZighQXJyYXkuaXNBcnJheShrKSlyZXR1cm4gRS5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO2NvbnN0IFU9dGhpcy5jbG9uZSgpO1UuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFk9dGhpcy5fY3JlYXRlRW5jb2Rl'@;
put 'ckJ1ZmZlcihrLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLGspLl9lbmNvZGUocSxFKX0sVSkpfWVsc2UgbnVsbCE9PVYudXNlP0I9dGhpcy5fZ2V0VXNlKFYudXNlLGopLl9lbmNvZGUoayxFKTooWT10aGlzLl9lbmNvZGVQcmlt'@;
put 'aXRpdmUoVi50YWcsayksWD0hMCk7aWYoIVYuYW55JiZudWxsPT09Vi5jaG9pY2Upe2NvbnN0IFU9bnVsbCE9PVYuaW1wbGljaXQ/Vi5pbXBsaWNpdDpWLnRhZyxxPW51bGw9PT1WLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09VT9udWxsPT09Vi51c2UmJkUuZXJyb3Io'@;
put 'IlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1WLnVzZSYmKEI9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFUsWCxxLFkpKX1yZXR1cm4gbnVsbCE9PVYuZXhwbGljaXQmJihCPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShWLmV4cGxpY2l0LCExLCJjb250ZXh0IixC'@;
put 'KSksQn0sei5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlLFY9ai5jaG9pY2Vbay50eXBlXTtyZXR1cm4gVnx8bGUoITEsay50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoai5jaG9pY2Up'@;
put 'KSksVi5fZW5jb2RlKGsudmFsdWUsRSl9LHoucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChrKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEUsayk7aWYoIm9iamlkIj09PWsmJmouYXJncylyZXR1'@;
put 'cm4gdGhpcy5fZW5jb2RlT2JqaWQoRSxqLnJldmVyc2VBcmdzWzBdLGouYXJnc1sxXSk7aWYoIm9iamlkIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEUsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1rfHwidXRjdGltZSI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEUsayk7'@;
put 'aWYoIm51bGxfIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PWt8fCJlbnVtIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZUludChFLGouYXJncyYmai5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChFKTtpZigib2Jq'@;
put 'RGVzYyI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoRSxrKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitrKX0sei5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKGspe3JldHVybi9eWzAtOSBdKiQvLnRlc3Qoayl9LHoucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1'@;
put 'bmN0aW9uKGspe3JldHVybi9eW0EtWmEtejAtOSAnKCkrLC0uLzo9P10qJC8udGVzdChrKX19LDk1Njg0OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KTtmdW5jdGlvbiB4KGxlKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6'@;
put 'bGV8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gbShsZSxNKXt0aGlzLnBhdGg9bGUsdGhpcy5yZXRocm93KE0pfUxlLmI9eCx4LnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKE0pe3JldHVybiBNIGluc3RhbmNlb2YgbX0seC5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe2NvbnN0IE09dGhp'@;
put 'cy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOk0ub2JqLHBhdGhMZW46TS5wYXRoLmxlbmd0aH19LHgucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oTSl7Y29uc3QgTz10aGlzLl9yZXBvcnRlclN0YXRlO08ub2JqPU0ub2JqLE8ucGF0aD1PLnBhdGguc2xpY2UoMCxNLnBhdGhMZW4pfSx4'@;
put 'LnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goTSl9LHgucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oTSl7Y29uc3QgTz10aGlzLl9yZXBvcnRlclN0YXRlO08ucGF0aD1PLnBhdGguc2xpY2UoMCxNLTEpfSx4LnBy'@;
put 'b3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbihNLE8sUil7Y29uc3Qgej10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleShNKSxudWxsIT09ei5vYmomJih6Lm9ialtPXT1SKX0seC5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgu'@;
put 'am9pbigiLyIpfSx4LnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe2NvbnN0IE09dGhpcy5fcmVwb3J0ZXJTdGF0ZSxPPU0ub2JqO3JldHVybiBNLm9iaj17fSxPfSx4LnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGUs'@;
put 'Uj1PLm9iajtyZXR1cm4gTy5vYmo9TSxSfSx4LnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihNKXtsZXQgTztjb25zdCBSPXRoaXMuX3JlcG9ydGVyU3RhdGUsej1NIGluc3RhbmNlb2YgbTtpZihPPXo/TTpuZXcgbShSLnBhdGgubWFwKGZ1bmN0aW9uKEspe3JldHVybiJbIitKU09OLnN0cmlu'@;
put 'Z2lmeShLKSsiXSJ9KS5qb2luKCIiKSxNLm1lc3NhZ2V8fE0sTS5zdGFjayksIVIub3B0aW9ucy5wYXJ0aWFsKXRocm93IE87cmV0dXJuIHp8fFIuZXJyb3JzLnB1c2goTyksT30seC5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7'@;
put 'cmV0dXJuIE8ub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKE0pP251bGw6TSxlcnJvcnM6Ty5lcnJvcnN9Ok19LGFlKG0sRXJyb3IpLG0ucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24oTSl7aWYodGhpcy5tZXNzYWdlPU0rIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxs'@;
put 'b3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsbSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKE8pe3RoaXMuc3RhY2s9Ty5zdGFja31yZXR1cm4gdGhpc319LDY1MDg2OihhdCxMZSk9'@;
put 'PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRihhZSl7Y29uc3QgeD17fTtyZXR1cm4gT2JqZWN0LmtleXMoYWUpLmZvckVhY2goZnVuY3Rpb24obSl7KDB8bSk9PW0mJihtfD0wKSx4W2FlW21dXT1tfSkseH1MZS50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29u'@;
put 'dGV4dCIsMzoicHJpdmF0ZSJ9LExlLnRhZ0NsYXNzQnlOYW1lPUYoTGUudGFnQ2xhc3MpLExlLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoi'@;
put 'ZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhz'@;
put 'dHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sTGUudGFnQnlOYW1lPUYoTGUudGFnKX0sNDQxNTU6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUxlO2FlLl9yZXZlcnNlPWZ1bmN0aW9uKG0pe2NvbnN0'@;
put 'IGxlPXt9O3JldHVybiBPYmplY3Qua2V5cyhtKS5mb3JFYWNoKGZ1bmN0aW9uKE0peygwfE0pPT1NJiYoTXw9MCksbGVbbVtNXV09TX0pLGxlfSxhZS5kZXI9Rig2NTA4Nil9LDk2ODM1OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoNTA0NyksbT1GKDc1'@;
put 'NzIwKS5DLGxlPUYoNTg1MzMpLE09Rig2NTA4Nik7ZnVuY3Rpb24gTyhMKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9TC5uYW1lLHRoaXMuZW50aXR5PUwsdGhpcy50cmVlPW5ldyBSLHRoaXMudHJlZS5faW5pdChMLmJvZHkpfWZ1bmN0aW9uIFIoTCl7bGUuY2FsbCh0aGlzLCJkZXIiLEwp'@;
put 'fWZ1bmN0aW9uIHooTCxrKXtsZXQgRT1MLnJlYWRVSW50OChrKTtpZihMLmlzRXJyb3IoRSkpcmV0dXJuIEU7Y29uc3Qgaj1NLnRhZ0NsYXNzW0U+PjZdLFY9MD09KDMyJkUpO2lmKDMxPT0oMzEmRSkpe2xldCBZPUU7Zm9yKEU9MDsxMjg9PSgxMjgmWSk7KXtpZihZPUwucmVhZFVJbnQ4KGsp'@;
put 'LEwuaXNFcnJvcihZKSlyZXR1cm4gWTtFPDw9NyxFfD0xMjcmWX19ZWxzZSBFJj0zMTtyZXR1cm57Y2xzOmoscHJpbWl0aXZlOlYsdGFnOkUsdGFnU3RyOk0udGFnW0VdfX1mdW5jdGlvbiBLKEwsayxFKXtsZXQgaj1MLnJlYWRVSW50OChFKTtpZihMLmlzRXJyb3IoaikpcmV0dXJuIGo7aWYo'@;
put 'IWsmJjEyOD09PWopcmV0dXJuIG51bGw7aWYoISgxMjgmaikpcmV0dXJuIGo7Y29uc3QgVj0xMjcmajtpZihWPjQpcmV0dXJuIEwuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtqPTA7Zm9yKGxldCBCPTA7QjxWO0IrKyl7ajw8PTg7Y29uc3QgWT1MLnJlYWRVSW50OChFKTtp'@;
put 'ZihMLmlzRXJyb3IoWSkpcmV0dXJuIFk7anw9WX1yZXR1cm4gan1hdC5leHBvcnRzPU8sTy5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGssRSl7cmV0dXJuIG0uaXNEZWNvZGVyQnVmZmVyKGspfHwoaz1uZXcgbShrLEUpKSx0aGlzLnRyZWUuX2RlY29kZShrLEUpfSxhZShSLGxlKSxSLnBy'@;
put 'b3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihrLEUsail7aWYoay5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3QgVj1rLnNhdmUoKSxCPXooaywnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytFKyciJyk7cmV0dXJuIGsuaXNFcnJvcihCKT9COihrLnJlc3RvcmUoViksQi50YWc9PT1FfHxCLnRhZ1N0'@;
put 'cj09PUV8fEIudGFnU3RyKyJvZiI9PT1FfHxqKX0sUi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihrLEUsail7Y29uc3QgVj16KGssJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK0UrJyInKTtpZihrLmlzRXJyb3IoVikpcmV0dXJuIFY7bGV0IEI9SyhrLFYucHJpbWl0aXZlLCdG'@;
put 'YWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytFKyciJyk7aWYoay5pc0Vycm9yKEIpKXJldHVybiBCO2lmKCFqJiZWLnRhZyE9PUUmJlYudGFnU3RyIT09RSYmVi50YWdTdHIrIm9mIiE9PUUpcmV0dXJuIGsuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0UrJyInKTtpZihWLnByaW1p'@;
put 'dGl2ZXx8bnVsbCE9PUIpcmV0dXJuIGsuc2tpcChCLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrRSsnIicpO2NvbnN0IFk9ay5zYXZlKCksWD10aGlzLl9za2lwVW50aWxFbmQoaywnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTty'@;
put 'ZXR1cm4gay5pc0Vycm9yKFgpP1g6KEI9ay5vZmZzZXQtWS5vZmZzZXQsay5yZXN0b3JlKFkpLGsuc2tpcChCLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrRSsnIicpKX0sUi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihrLEUpe2Zvcig7Oyl7Y29uc3Qgaj16KGssRSk7'@;
put 'aWYoay5pc0Vycm9yKGopKXJldHVybiBqO2NvbnN0IFY9SyhrLGoucHJpbWl0aXZlLEUpO2lmKGsuaXNFcnJvcihWKSlyZXR1cm4gVjtsZXQgQjtpZihCPWoucHJpbWl0aXZlfHxudWxsIT09Vj9rLnNraXAoVik6dGhpcy5fc2tpcFVudGlsRW5kKGssRSksay5pc0Vycm9yKEIpKXJldHVybiBC'@;
put 'O2lmKCJlbmQiPT09ai50YWdTdHIpYnJlYWt9fSxSLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihrLEUsaixWKXtjb25zdCBCPVtdO2Zvcig7IWsuaXNFbXB0eSgpOyl7Y29uc3QgWT10aGlzLl9wZWVrVGFnKGssImVuZCIpO2lmKGsuaXNFcnJvcihZKSlyZXR1cm4gWTtjb25zdCBY'@;
put 'PWouZGVjb2RlKGssImRlciIsVik7aWYoay5pc0Vycm9yKFgpJiZZKWJyZWFrO0IucHVzaChYKX1yZXR1cm4gQn0sUi5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbihrLEUpe2lmKCJiaXRzdHIiPT09RSl7Y29uc3Qgaj1rLnJlYWRVSW50OCgpO3JldHVybiBrLmlzRXJyb3Ioaik/ajp7'@;
put 'dW51c2VkOmosZGF0YTprLnJhdygpfX1pZigiYm1wc3RyIj09PUUpe2NvbnN0IGo9ay5yYXcoKTtpZihqLmxlbmd0aCUyPT0xKXJldHVybiBrLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2xldCBWPSIiO2ZvcihsZXQgQj0wO0I8ai5s'@;
put 'ZW5ndGgvMjtCKyspVis9U3RyaW5nLmZyb21DaGFyQ29kZShqLnJlYWRVSW50MTZCRSgyKkIpKTtyZXR1cm4gVn1pZigibnVtc3RyIj09PUUpe2NvbnN0IGo9ay5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoaik/ajprLmVycm9yKCJEZWNvZGluZyBvZiBz'@;
put 'dHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUUpcmV0dXJuIGsucmF3KCk7aWYoIm9iakRlc2MiPT09RSlyZXR1cm4gay5yYXcoKTtpZigicHJpbnRzdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVy'@;
put 'biB0aGlzLl9pc1ByaW50c3RyKGopP2o6ay5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdChFKT9rLnJhdygpLnRvU3RyaW5nKCk6ay5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6'@;
put 'ICIrRSsiIHVuc3VwcG9ydGVkIil9LFIucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihrLEUsail7bGV0IFY7Y29uc3QgQj1bXTtsZXQgWT0wLFg9MDtmb3IoOyFrLmlzRW1wdHkoKTspWD1rLnJlYWRVSW50OCgpLFk8PD03LFl8PTEyNyZYLDEyOCZYfHwoQi5wdXNoKFkpLFk9MCk7'@;
put 'aWYoMTI4JlgmJkIucHVzaChZKSxWPWo/QjpbQlswXS80MHwwLEJbMF0lNDBdLmNvbmNhdChCLnNsaWNlKDEpKSxFKXtsZXQgZWU9RVtWLmpvaW4oIiAiKV07dm9pZCAwPT09ZWUmJihlZT1FW1Yuam9pbigiLiIpXSksdm9pZCAwIT09ZWUmJihWPWVlKX1yZXR1cm4gVn0sUi5wcm90b3R5cGUu'@;
put 'X2RlY29kZVRpbWU9ZnVuY3Rpb24oayxFKXtjb25zdCBqPWsucmF3KCkudG9TdHJpbmcoKTtsZXQgVixCLFksWCxVLHE7aWYoImdlbnRpbWUiPT09RSlWPTB8ai5zbGljZSgwLDQpLEI9MHxqLnNsaWNlKDQsNiksWT0wfGouc2xpY2UoNiw4KSxYPTB8ai5zbGljZSg4LDEwKSxVPTB8ai5zbGlj'@;
put 'ZSgxMCwxMikscT0wfGouc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09RSlyZXR1cm4gay5lcnJvcigiRGVjb2RpbmcgIitFKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO1Y9MHxqLnNsaWNlKDAsMiksQj0wfGouc2xpY2UoMiw0KSxZPTB8ai5zbGljZSg0LDYpLFg9MHxq'@;
put 'LnNsaWNlKDYsOCksVT0wfGouc2xpY2UoOCwxMCkscT0wfGouc2xpY2UoMTAsMTIpLFY9Vjw3MD8yZTMrVjoxOTAwK1Z9cmV0dXJuIERhdGUuVVRDKFYsQi0xLFksWCxVLHEsMCl9LFIucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFIucHJvdG90eXBlLl9k'@;
put 'ZWNvZGVCb29sPWZ1bmN0aW9uKGspe2NvbnN0IEU9ay5yZWFkVUludDgoKTtyZXR1cm4gay5pc0Vycm9yKEUpP0U6MCE9PUV9LFIucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oayxFKXtjb25zdCBqPWsucmF3KCk7bGV0IFY9bmV3IHgoaik7cmV0dXJuIEUmJihWPUVbVi50b1N0cmlu'@;
put 'ZygxMCldfHxWKSxWfSxSLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKGssRSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGsmJihrPWsoRSkpLGsuX2dldERlY29kZXIoImRlciIpLnRyZWV9fSw3MTMwMTooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9TGU7YWUuZGVyPUYoOTY4'@;
put 'MzUpLGFlLnBlbT1GKDIyMDgpfSwyMjA4OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoMjQxNzkpLkJ1ZmZlcixtPUYoOTY4MzUpO2Z1bmN0aW9uIGxlKE0pe20uY2FsbCh0aGlzLE0pLHRoaXMuZW5jPSJwZW0ifWFlKGxlLG0pLGF0LmV4cG9ydHM9bGUs'@;
put 'bGUucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihPLFIpe2NvbnN0IHo9Ty50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLEs9Ui5sYWJlbC50b1VwcGVyQ2FzZSgpLEw9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBrPS0xLEU9LTE7Zm9yKGxldCBCPTA7Qjx6Lmxl'@;
put 'bmd0aDtCKyspe2NvbnN0IFk9eltCXS5tYXRjaChMKTtpZihudWxsIT09WSYmWVsyXT09PUspe2lmKC0xIT09ayl7aWYoIkVORCIhPT1ZWzFdKWJyZWFrO0U9QjticmVha31pZigiQkVHSU4iIT09WVsxXSlicmVhaztrPUJ9fWlmKC0xPT09a3x8LTE9PT1FKXRocm93IG5ldyBFcnJvcigiUEVN'@;
put 'IHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIitLKTtjb25zdCBqPXouc2xpY2UoaysxLEUpLmpvaW4oIiIpO2oucmVwbGFjZSgvW15hLXowLTkrLz1dKy9naSwiIik7Y29uc3QgVj14LmZyb20oaiwiYmFzZTY0Iik7cmV0dXJuIG0ucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsVixSKX19LDY5'@;
put 'MTMzOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoMjQxNzkpLkJ1ZmZlcixtPUYoNTg1MzMpLGxlPUYoNjUwODYpO2Z1bmN0aW9uIE0oSyl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUsubmFtZSx0aGlzLmVudGl0eT1LLHRoaXMudHJlZT1uZXcgTyx0'@;
put 'aGlzLnRyZWUuX2luaXQoSy5ib2R5KX1mdW5jdGlvbiBPKEspe20uY2FsbCh0aGlzLCJkZXIiLEspfWZ1bmN0aW9uIFIoSyl7cmV0dXJuIEs8MTA/IjAiK0s6S31hdC5leHBvcnRzPU0sTS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEwsayl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKEws'@;
put 'aykuam9pbigpfSxhZShPLG0pLE8ucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oTCxrLEUsail7Y29uc3QgVj1mdW5jdGlvbiB6KEssTCxrLEUpe2xldCBqO2lmKCJzZXFvZiI9PT1LP0s9InNlcSI6InNldG9mIj09PUsmJihLPSJzZXQiKSxsZS50YWdCeU5hbWUuaGFzT3du'@;
put 'UHJvcGVydHkoSykpaj1sZS50YWdCeU5hbWVbS107ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIEt8fCgwfEspIT09SylyZXR1cm4gRS5lcnJvcigiVW5rbm93biB0YWc6ICIrSyk7aj1LfXJldHVybiBqPj0zMT9FLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQi'@;
put 'KTooTHx8KGp8PTMyKSxqfD1sZS50YWdDbGFzc0J5TmFtZVtrfHwidW5pdmVyc2FsIl08PDYsail9KEwsayxFLHRoaXMucmVwb3J0ZXIpO2lmKGoubGVuZ3RoPDEyOCl7Y29uc3QgWD14LmFsbG9jKDIpO3JldHVybiBYWzBdPVYsWFsxXT1qLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVm'@;
put 'ZmVyKFtYLGpdKX1sZXQgQj0xO2ZvcihsZXQgWD1qLmxlbmd0aDtYPj0yNTY7WD4+PTgpQisrO2NvbnN0IFk9eC5hbGxvYygyK0IpO1lbMF09VixZWzFdPTEyOHxCO2ZvcihsZXQgWD0xK0IsVT1qLmxlbmd0aDtVPjA7WC0tLFU+Pj04KVlbWF09MjU1JlU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVu'@;
put 'Y29kZXJCdWZmZXIoW1ksal0pfSxPLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsayl7aWYoImJpdHN0ciI9PT1rKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09ayl7Y29uc3QgRT14LmFsbG9jKDIqTC5s'@;
put 'ZW5ndGgpO2ZvcihsZXQgaj0wO2o8TC5sZW5ndGg7aisrKUUud3JpdGVVSW50MTZCRShMLmNoYXJDb2RlQXQoaiksMipqKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihFKX1yZXR1cm4ibnVtc3RyIj09PWs/dGhpcy5faXNOdW1zdHIoTCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1'@;
put 'ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1rP3RoaXMuX2lzUHJpbnRzdHIoTCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJl'@;
put 'cG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBj'@;
put 'b21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KGspfHwib2JqRGVzYyI9PT1rP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6'@;
put 'ICIraysiIHVuc3VwcG9ydGVkIil9LE8ucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihMLGssRSl7aWYoInN0cmluZyI9PXR5cGVvZiBMKXtpZighaylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIp'@;
put 'O2lmKCFrLmhhc093blByb3BlcnR5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO0w9a1tMXS5zcGxpdCgvW1xzLl0rL2cpO2ZvcihsZXQgWT0wO1k8TC5sZW5ndGg7WSsrKUxbWV18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5'@;
put 'KEwpKXtMPUwuc2xpY2UoKTtmb3IobGV0IFk9MDtZPEwubGVuZ3RoO1krKylMW1ldfD0wfWlmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnko'@;
put 'TCkpO2lmKCFFKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9bGV0IGo9MDtmb3IobGV0IFk9MDtZPEwubGVuZ3RoO1krKyl7bGV0IFg9TFtZXTtmb3IoaisrO1g+'@;
put 'PTEyODtYPj49NylqKyt9Y29uc3QgVj14LmFsbG9jKGopO2xldCBCPVYubGVuZ3RoLTE7Zm9yKGxldCBZPUwubGVuZ3RoLTE7WT49MDtZLS0pe2xldCBYPUxbWV07Zm9yKFZbQi0tXT0xMjcmWDsoWD4+PTcpPjA7KVZbQi0tXT0xMjh8MTI3Jlh9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJC'@;
put 'dWZmZXIoVil9LE8ucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsayl7bGV0IEU7Y29uc3Qgaj1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1rP0U9W1Ioai5nZXRVVENGdWxsWWVhcigpKSxSKGouZ2V0VVRDTW9udGgoKSsxKSxSKGouZ2V0VVRDRGF0ZSgpKSxSKGouZ2V0'@;
put 'VVRDSG91cnMoKSksUihqLmdldFVUQ01pbnV0ZXMoKSksUihqLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1rP0U9W1Ioai5nZXRVVENGdWxsWWVhcigpJTEwMCksUihqLmdldFVUQ01vbnRoKCkrMSksUihqLmdldFVUQ0RhdGUoKSksUihqLmdldFVUQ0hvdXJz'@;
put 'KCkpLFIoai5nZXRVVENNaW51dGVzKCkpLFIoai5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitrKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihFLCJvY3RzdHIiKX0sTy5wcm90b3R5cGUu'@;
put 'X2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LE8ucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxrKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFrKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50'@;
put 'IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIWsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEwpKTtMPWtbTF19aWYoIm51bWJlciIhPXR5cGVvZiBM'@;
put 'JiYheC5pc0J1ZmZlcihMKSl7Y29uc3QgVj1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVlswXSYmVi51bnNoaWZ0KDApLEw9eC5mcm9tKFYpfWlmKHguaXNCdWZmZXIoTCkpe2xldCBWPUwubGVuZ3RoOzA9PT1MLmxlbmd0aCYmVisrO2NvbnN0IEI9eC5hbGxvYyhWKTtyZXR1cm4gTC5jb3B5'@;
put 'KEIpLDA9PT1MLmxlbmd0aCYmKEJbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKX1pZihMPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTtpZihMPDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxMXSk7bGV0IEU9MTtmb3IobGV0'@;
put 'IFY9TDtWPj0yNTY7Vj4+PTgpRSsrO2NvbnN0IGo9bmV3IEFycmF5KEUpO2ZvcihsZXQgVj1qLmxlbmd0aC0xO1Y+PTA7Vi0tKWpbVl09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZqWzBdJiZqLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih4LmZyb20oaikpfSxPLnByb3Rv'@;
put 'dHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMPzI1NTowKX0sTy5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLGspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKGspKSxMLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVl'@;
put 'fSxPLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24oTCxrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2xldCBWO2lmKG51bGw9PT1qLmRlZmF1bHQpcmV0dXJuITE7Y29uc3QgQj1MLmpvaW4oKTtpZih2b2lkIDA9PT1qLmRlZmF1bHRCdWZmZXImJihqLmRlZmF1bHRCdWZmZXI9'@;
put 'dGhpcy5fZW5jb2RlVmFsdWUoai5kZWZhdWx0LGssRSkuam9pbigpKSxCLmxlbmd0aCE9PWouZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFY9MDtWPEIubGVuZ3RoO1YrKylpZihCW1ZdIT09ai5kZWZhdWx0QnVmZmVyW1ZdKXJldHVybiExO3JldHVybiEwfX0sMjM2OTM6KGF0'@;
put 'LExlLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUxlO2FlLmRlcj1GKDY5MTMzKSxhZS5wZW09Rig3OTAwKX0sNzkwMDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDY5MTMzKTtmdW5jdGlvbiBtKGxlKXt4LmNhbGwodGhpcyxsZSksdGhpcy5lbmM9'@;
put 'InBlbSJ9YWUobSx4KSxhdC5leHBvcnRzPW0sbS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKE0sTyl7Y29uc3Qgej14LnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLE0pLnRvU3RyaW5nKCJiYXNlNjQiKSxLPVsiLS0tLS1CRUdJTiAiK08ubGFiZWwrIi0tLS0tIl07Zm9yKGxldCBMPTA7'@;
put 'TDx6Lmxlbmd0aDtMKz02NClLLnB1c2goei5zbGljZShMLEwrNjQpKTtyZXR1cm4gSy5wdXNoKCItLS0tLUVORCAiK08ubGFiZWwrIi0tLS0tIiksSy5qb2luKCJcbiIpfX0sNTA0NzpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxi'@;
put 'KXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVu'@;
put 'Y3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8'@;
put 'fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODA5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVu'@;
put 'Y3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcs'@;
put 'YixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9m'@;
put 'IE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4g'@;
put 'Yi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQm'@;
put 'JihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VC'@;
put 'YXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0'@;
put 'aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhp'@;
put 'cy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0'@;
put 'aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5s'@;
put 'ZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9'@;
put 'MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlw'@;
put 'ZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJi'@;
put 'ZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtO'@;
put 'Kz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5n'@;
put 'dGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3'@;
put 'MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRu'@;
put 'KHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9'@;
put 'dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3Ro'@;
put 'aXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1T'@;
put 'aWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYp'@;
put 'KyI+In07dmFyIEw9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs'@;
put 'NSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4'@;
put 'ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0Qu'@;
put 'bmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7'@;
put 'cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAs'@;
put 'Sj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9'@;
put 'IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9MWzYtdi5sZW5ndGhdK3YrSDp2K0gs'@;
put 'KE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0i'@;
put 'Ijt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOkxbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxl'@;
put 'bmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlz'@;
put 'Lmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAg'@;
put 'dG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxp'@;
put 'a2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTtt'@;
put 'KE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJv'@;
put 'KCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0u'@;
put 'cHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQp'@;
put 'LEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMm'@;
put 'RHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5j'@;
put 'dGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlv'@;
put 'bigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhp'@;
put 'cy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2'@;
put 'ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxl'@;
put 'bmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRz'@;
put 'W0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9u'@;
put 'KGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5p'@;
put 'dWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRo'@;
put 'aXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRo'@;
put 'aXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVu'@;
put 'Z3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zv'@;
put 'cih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlz'@;
put 'LndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRo'@;
put 'aXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3Io'@;
put 'dmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cp'@;
put 'LGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlw'@;
put 'ZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIu'@;
put 'c3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMu'@;
put 'aWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53'@;
put 'b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4u'@;
put 'd29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9u'@;
put 'KGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsSWU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldl'@;
put 'LFllPVdlPj4+MTMsUWU9MHxOWzRdLGx0PTgxOTEmUWUsUGU9UWU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0sb3Q9ODE5MSZ6ZSx1dD16'@;
put 'ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4x'@;
put 'MyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEx0PW1uPj4+MTMsUXQ9MHxnWzZdLER0PTgxOTEmUXQscHQ9UXQ+Pj4xMyxZdD0wfGdbN10sTG49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49'@;
put 'MHxnWzldLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgRm49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8'@;
put 'MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoRm4+Pj4yNil8MCxGbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKEllLENuKXwwLHc9TWF0aC5pbXVsKEllLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmlt'@;
put 'dWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9'@;
put 'KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChJZSxXbil8MCx3PXcrTWF0aC5pbXVsKEllLGVuKXwwO3ZhciBsbj0oUysodj12'@;
put 'K01hdGguaW11bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChL'@;
put 'ZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01h'@;
put 'dGguaW11bCh4ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoSWUsSG4pfDAsdz13K01hdGguaW11bChJZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5p'@;
put 'bXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0'@;
put 'KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9'@;
put 'dytNYXRoLmltdWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsdz13K01hdGguaW11bChJZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1w'@;
put 'K01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVs'@;
put 'KFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChJZSxfdCl8MCx3PXcrTWF0aC5pbXVsKEllLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEx0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMp'@;
put 'fDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTHQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUs'@;
put 'V24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8'@;
put 'MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9'@;
put 'dytNYXRoLmltdWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEx0KXwwKStNYXRoLmltdWwoSWUscnQpfDAsdz13K01hdGguaW11bChJZSxMdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1w'@;
put 'K01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVs'@;
put 'KERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxMdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwoamUsTHQpfDAsdj12K01h'@;
put 'dGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoSWUsRHQpfDAsdz13K01hdGguaW11bChJZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsTG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5p'@;
put 'bXVsKGRlLExuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwob3QsQ24pLHA9KHA9TWF0aC5pbXVsKG90LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0'@;
put 'KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9'@;
put 'dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01h'@;
put 'dGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxMdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsTHQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChJZSxMbil8MCx3PXcrTWF0aC5pbXVsKEllLHp0KXwwO3ZhciBLcj0oUysodj12'@;
put 'K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChI'@;
put 'dCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwob3QsV24pfDAscD0ocD1wK01hdGguaW11bChvdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01h'@;
put 'dGguaW11bChNZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEx0KXwwKStNYXRoLmltdWwo'@;
put 'UGUscnQpfDAsdz13K01hdGguaW11bChQZSxMdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsTG4pfDAscD0ocD1wK01hdGguaW11bChP'@;
put 'ZSx6dCl8MCkrTWF0aC5pbXVsKGplLExuKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoSWUseG4pfDAsdz13K01hdGguaW11bChJZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmlt'@;
put 'dWwobmUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9'@;
put 'KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKG90LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'TWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxO'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTHQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEx0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXww'@;
put 'LHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsTG4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDAp'@;
put 'K01hdGguaW11bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoSWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoSWUs'@;
put 'JHQpfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwob3QsaG4pfDAscD0ocD1wK01hdGguaW11bChv'@;
put 'dCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoWGUsTHQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEx0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12'@;
put 'K01hdGguaW11bChsdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsTG4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0'@;
put 'aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2'@;
put 'KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGguaW11bChvdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXww'@;
put 'LHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEx0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxMdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDAp'@;
put 'K01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsTG4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLExuKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9'@;
put 'KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKG90LHJ0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwob3QsTHQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEx0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12'@;
put 'K01hdGguaW11bChYZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsTG4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0'@;
put 'aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2'@;
put 'KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsTHQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsTHQpLHY9ditNYXRoLmltdWwob3QsRHQpfDAscD0ocD1wK01hdGguaW11bChvdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXww'@;
put 'LHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsTG4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDAp'@;
put 'K01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUs'@;
put 'JHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwob3QsTG4pfDAscD0ocD1wK01hdGguaW11bChv'@;
put 'dCx6dCl8MCkrTWF0aC5pbXVsKHV0LExuKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmlt'@;
put 'dWwoWGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsTG4pLHA9'@;
put 'KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LExuKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKG90LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12'@;
put 'K01hdGguaW11bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChI'@;
put 'dCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChvdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMp'@;
put 'fDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1'@;
put 'cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09Rm4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sx'@;
put 'Ml09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMu'@;
put 'eT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rp'@;
put 'b24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgt'@;
put 'MSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYs'@;
put 'QyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0u'@;
put 'cHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZi'@;
put 'KTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBl'@;
put 'cm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVd'@;
put 'LEllPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2ZlXT1JZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUllLU9lLGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cq'@;
put 'bmUsbmU9amUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYo'@;
put 'IShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtO'@;
put 'Kyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBn'@;
put 'PTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcg'@;
put 'QXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9'@;
put 'bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5n'@;
put 'dGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1'@;
put 'cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0'@;
put 'cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTty'@;
put 'ZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09'@;
put 'dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4'@;
put 'ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMp'@;
put 'fSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7'@;
put 'dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZh'@;
put 'ciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+'@;
put 'PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1p'@;
put 'ZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRo'@;
put 'aXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0'@;
put 'aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1tw'@;
put 'XTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlv'@;
put 'bihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'Lml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYs'@;
put 'SD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29y'@;
put 'ZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlz'@;
put 'Lm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0Qr'@;
put 'Kyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZiht'@;
put 'KCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10'@;
put 'aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0t'@;
put 'PTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIg'@;
put 'QyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtn'@;
put 'KyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhp'@;
put 'cy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJp'@;
put 'dHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0w'@;
put 'O3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5n'@;
put 'dGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5u'@;
put 'ZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVy'@;
put 'bygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAh'@;
put 'PT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVn'@;
put 'YXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1v'@;
put 'ZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5t'@;
put 'b2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9k'@;
put 'IiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIg'@;
put 'SD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90'@;
put 'b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4'@;
put 'ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3'@;
put 'IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYm'@;
put 'SjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUs'@;
put 'ZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihE'@;
put 'KSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51'@;
put 'bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7'@;
put 'KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1'@;
put 'YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSly'@;
put 'ZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5p'@;
put 'dXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBl'@;
put 'LmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsx'@;
put 'KSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5s'@;
put 'ZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lm'@;
put 'KDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3Jl'@;
put 'dHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2'@;
put 'YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09'@;
put 'dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8'@;
put 'PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBl'@;
put 'LmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRo'@;
put 'aXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'bSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUu'@;
put 'cmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0'@;
put 'aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0'@;
put 'aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90'@;
put 'b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0'@;
put 'aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhp'@;
put 'cy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7'@;
put 'ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJp'@;
put 'bWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlz'@;
put 'Lmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5t'@;
put 'aW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlz'@;
put 'LnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2'@;
put 'b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJv'@;
put 'dG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7'@;
put 'dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0'@;
put 'aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2'@;
put 'MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11'@;
put 'bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5j'@;
put 'dGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUg'@;
put 'IitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJv'@;
put 'dG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5p'@;
put 'bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlz'@;
put 'Lm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5p'@;
put 'YWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1'@;
put 'cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5'@;
put 'cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9'@;
put 'ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11'@;
put 'bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhi'@;
put 'LEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhp'@;
put 'cy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1n'@;
put 'OzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBJZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChJZSksdz1JZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwo'@;
put 'dyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVu'@;
put 'Y3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2cr'@;
put 'KylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0m'@;
put 'JihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2Qo'@;
put 'dGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5'@;
put 'cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90'@;
put 'eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0p'@;
put 'LGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5p'@;
put 'c1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQp'@;
put 'LEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwo'@;
put 'dGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sMzYwNzI6KGF0LExlKT0+eyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIEY9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8i'@;
put 'LGFlPW5ldyBVaW50OEFycmF5KDI1NikseD0wO3g8NjQ7eCsrKWFlW0YuY2hhckNvZGVBdCh4KV09eDtMZS5jPWZ1bmN0aW9uKG0pe3ZhciBNLGxlPW5ldyBVaW50OEFycmF5KG0pLE89bGUubGVuZ3RoLFI9IiI7Zm9yKE09MDtNPE87TSs9MylSKz1GW2xlW01dPj4yXSxSKz1GWygzJmxlW01d'@;
put 'KTw8NHxsZVtNKzFdPj40XSxSKz1GWygxNSZsZVtNKzFdKTw8MnxsZVtNKzJdPj42XSxSKz1GWzYzJmxlW00rMl1dO3JldHVybiBPJTM9PTI/Uj1SLnN1YnN0cmluZygwLFIubGVuZ3RoLTEpKyI9IjpPJTM9PTEmJihSPVIuc3Vic3RyaW5nKDAsUi5sZW5ndGgtMikrIj09IiksUn0sTGUuSj1m'@;
put 'dW5jdGlvbihtKXt2YXIgTyx6LEssTCxrLGxlPS43NSptLmxlbmd0aCxNPW0ubGVuZ3RoLFI9MDsiPSI9PT1tW20ubGVuZ3RoLTFdJiYobGUtLSwiPSI9PT1tW20ubGVuZ3RoLTJdJiZsZS0tKTt2YXIgRT1uZXcgQXJyYXlCdWZmZXIobGUpLGo9bmV3IFVpbnQ4QXJyYXkoRSk7Zm9yKE89MDtP'@;
put 'PE07Tys9NCl6PWFlW20uY2hhckNvZGVBdChPKV0sSz1hZVttLmNoYXJDb2RlQXQoTysxKV0sTD1hZVttLmNoYXJDb2RlQXQoTysyKV0saz1hZVttLmNoYXJDb2RlQXQoTyszKV0saltSKytdPXo8PDJ8Sz4+NCxqW1IrK109KDE1JkspPDw0fEw+PjIsaltSKytdPSgzJkwpPDw2fDYzJms7cmV0'@;
put 'dXJuIEV9fSgpfSw5OTE5OihhdCxMZSk9PnsidXNlIHN0cmljdCI7TGUuYnl0ZUxlbmd0aD1mdW5jdGlvbiBSKGope3ZhciBWPU8oaiksWT1WWzFdO3JldHVybiAzKihWWzBdK1kpLzQtWX0sTGUudG9CeXRlQXJyYXk9ZnVuY3Rpb24gSyhqKXt2YXIgVix0ZSxCPU8oaiksWT1CWzBdLFg9Qlsx'@;
put 'XSxVPW5ldyB4KGZ1bmN0aW9uIHooaixWLEIpe3JldHVybiAzKihWK0IpLzQtQn0oMCxZLFgpKSxxPTAsZWU9WD4wP1ktNDpZO2Zvcih0ZT0wO3RlPGVlO3RlKz00KVY9YWVbai5jaGFyQ29kZUF0KHRlKV08PDE4fGFlW2ouY2hhckNvZGVBdCh0ZSsxKV08PDEyfGFlW2ouY2hhckNvZGVBdCh0'@;
put 'ZSsyKV08PDZ8YWVbai5jaGFyQ29kZUF0KHRlKzMpXSxVW3ErK109Vj4+MTYmMjU1LFVbcSsrXT1WPj44JjI1NSxVW3ErK109MjU1JlY7cmV0dXJuIDI9PT1YJiYoVj1hZVtqLmNoYXJDb2RlQXQodGUpXTw8MnxhZVtqLmNoYXJDb2RlQXQodGUrMSldPj40LFVbcSsrXT0yNTUmViksMT09PVgm'@;
put 'JihWPWFlW2ouY2hhckNvZGVBdCh0ZSldPDwxMHxhZVtqLmNoYXJDb2RlQXQodGUrMSldPDw0fGFlW2ouY2hhckNvZGVBdCh0ZSsyKV0+PjIsVVtxKytdPVY+PjgmMjU1LFVbcSsrXT0yNTUmViksVX0sTGUuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbiBFKGope2Zvcih2YXIgVixCPWoubGVuZ3Ro'@;
put 'LFk9QiUzLFg9W10sVT0xNjM4MyxxPTAsZWU9Qi1ZO3E8ZWU7cSs9VSlYLnB1c2goayhqLHEscStVPmVlP2VlOnErVSkpO3JldHVybiAxPT09WT9YLnB1c2goRlsoVj1qW0ItMV0pPj4yXStGW1Y8PDQmNjNdKyI9PSIpOjI9PT1ZJiZYLnB1c2goRlsoVj0oaltCLTJdPDw4KStqW0ItMV0pPj4x'@;
put 'MF0rRltWPj40JjYzXStGW1Y8PDImNjNdKyI9IiksWC5qb2luKCIiKX07Zm9yKHZhciBGPVtdLGFlPVtdLHg9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksbT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3'@;
put 'ODkrLyIsbGU9MDtsZTw2NDsrK2xlKUZbbGVdPW1bbGVdLGFlW20uY2hhckNvZGVBdChsZSldPWxlO2Z1bmN0aW9uIE8oail7dmFyIFY9ai5sZW5ndGg7aWYoViU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFy'@;
put 'IEI9ai5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1CJiYoQj1WKSxbQixCPT09Vj8wOjQtQiU0XX1mdW5jdGlvbiBMKGope3JldHVybiBGW2o+PjE4JjYzXStGW2o+PjEyJjYzXStGW2o+PjYmNjNdK0ZbNjMmal19ZnVuY3Rpb24gayhqLFYsQil7Zm9yKHZhciBYPVtdLFU9VjtVPEI7VSs9MylY'@;
put 'LnB1c2goTCgoaltVXTw8MTYmMTY3MTE2ODApKyhqW1UrMV08PDgmNjUyODApKygyNTUmaltVKzJdKSkpO3JldHVybiBYLmpvaW4oIiIpfWFlWyItIi5jaGFyQ29kZUF0KDApXT02MixhZVsiXyIuY2hhckNvZGVBdCgwKV09NjN9LDYyNjYyOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihh'@;
put 'ZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShILE4pe2lmKCFIKXRocm93IG5ldyBFcnJvcihOfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEgsTil7SC5zdXBlcl89Tjt2YXIgZz1mdW5jdGlvbigpe307Zy5wcm90b3R5cGU9Ti5wcm90b3R5cGUsSC5wcm90b3R5cGU9bmV3'@;
put 'IGcsSC5wcm90b3R5cGUuY29uc3RydWN0b3I9SH1mdW5jdGlvbiBNKEgsTixnKXtpZihNLmlzQk4oSCkpcmV0dXJuIEg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUgmJigoImxlIj09PU58fCJiZSI9PT1OKSYmKGc9'@;
put 'TixOPTEwKSx0aGlzLl9pbml0KEh8fDAsTnx8MTAsZ3x8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5C'@;
put 'dWZmZXI6Rig0NjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEgsTil7dmFyIGc9SC5jaGFyQ29kZUF0KE4pO3JldHVybiBnPj00OCYmZzw9NTc/Zy00ODpnPj02NSYmZzw9NzA/Zy01NTpnPj05NyYmZzw9MTAyP2ctODc6dm9pZCBtKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK0gp'@;
put 'fWZ1bmN0aW9uIHooSCxOLGcpe3ZhciBDPVIoSCxnKTtyZXR1cm4gZy0xPj1OJiYoQ3w9UihILGctMSk8PDQpLEN9ZnVuY3Rpb24gSyhILE4sZyxDKXtmb3IodmFyIFM9MCx2PTAscD1NYXRoLm1pbihILmxlbmd0aCxnKSx3PU47dzxwO3crKyl7dmFyIEo9SC5jaGFyQ29kZUF0KHcpLTQ4O1Mq'@;
put 'PUMsdj1KPj00OT9KLTQ5KzEwOko+PTE3P0otMTcrMTA6SixtKEo+PTAmJnY8QywiSW52YWxpZCBjaGFyYWN0ZXIiKSxTKz12fXJldHVybiBTfWZ1bmN0aW9uIEwoSCxOKXtILndvcmRzPU4ud29yZHMsSC5sZW5ndGg9Ti5sZW5ndGgsSC5uZWdhdGl2ZT1OLm5lZ2F0aXZlLEgucmVkPU4ucmVk'@;
put 'fWlmKE0uaXNCTj1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIE18fG51bGwhPT1OJiYib2JqZWN0Ij09dHlwZW9mIE4mJk4uY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KE4ud29yZHMpfSxNLm1heD1mdW5jdGlvbihOLGcpe3JldHVybiBO'@;
put 'LmNtcChnKT4wP046Z30sTS5taW49ZnVuY3Rpb24oTixnKXtyZXR1cm4gTi5jbXAoZyk8MD9OOmd9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKE4sZyxDKXtpZigibnVtYmVyIj09dHlwZW9mIE4pcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoTixnLEMpO2lmKCJvYmplY3QiPT10eXBlb2Yg'@;
put 'TilyZXR1cm4gdGhpcy5faW5pdEFycmF5KE4sZyxDKTsiaGV4Ij09PWcmJihnPTE2KSxtKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpO3ZhciBTPTA7Ii0iPT09KE49Ti50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihTKyssdGhpcy5uZWdhdGl2ZT0xKSxTPE4ubGVuZ3RoJiYo'@;
put 'MTY9PT1nP3RoaXMuX3BhcnNlSGV4KE4sUyxDKToodGhpcy5fcGFyc2VCYXNlKE4sZyxTKSwibGUiPT09QyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGcsQykpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oTixnLEMpe048MCYmKHRoaXMubmVnYXRpdmU9MSxO'@;
put 'PS1OKSxOPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZOXSx0aGlzLmxlbmd0aD0xKTpOPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJk4sTi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oTjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndv'@;
put 'cmRzPVs2NzEwODg2MyZOLE4vNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxnLEMpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKE4sZyxDKXtpZihtKCJudW1iZXIiPT10eXBlb2YgTi5s'@;
put 'ZW5ndGgpLE4ubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKE4ubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl0aGlzLndv'@;
put 'cmRzW1NdPTA7dmFyIHYscCx3PTA7aWYoImJlIj09PUMpZm9yKFM9Ti5sZW5ndGgtMSx2PTA7Uz49MDtTLT0zKXRoaXMud29yZHNbdl18PShwPU5bU118TltTLTFdPDw4fE5bUy0yXTw8MTYpPDx3JjY3MTA4ODYzLHRoaXMud29yZHNbdisxXT1wPj4+MjYtdyY2NzEwODg2Mywodys9MjQpPj0y'@;
put 'NiYmKHctPTI2LHYrKyk7ZWxzZSBpZigibGUiPT09Qylmb3IoUz0wLHY9MDtTPE4ubGVuZ3RoO1MrPTMpdGhpcy53b3Jkc1t2XXw9KHA9TltTXXxOW1MrMV08PDh8TltTKzJdPDwxNik8PHcmNjcxMDg4NjMsdGhpcy53b3Jkc1t2KzFdPXA+Pj4yNi13JjY3MTA4ODYzLCh3Kz0yNCk+PTI2JiYo'@;
put 'dy09MjYsdisrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKE4sZyxDKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKE4ubGVuZ3RoLWcpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFM9MDtTPHRoaXMubGVu'@;
put 'Z3RoO1MrKyl0aGlzLndvcmRzW1NdPTA7dmFyIHcsdj0wLHA9MDtpZigiYmUiPT09Qylmb3IoUz1OLmxlbmd0aC0xO1M+PWc7Uy09Mil3PXooTixnLFMpPDx2LHRoaXMud29yZHNbcF18PTY3MTA4ODYzJncsdj49MTg/KHYtPTE4LHRoaXMud29yZHNbcCs9MV18PXc+Pj4yNik6dis9ODtlbHNl'@;
put 'IGZvcihTPShOLmxlbmd0aC1nKSUyPT0wP2crMTpnO1M8Ti5sZW5ndGg7Uys9Mil3PXooTixnLFMpPDx2LHRoaXMud29yZHNbcF18PTY3MTA4ODYzJncsdj49MTg/KHYtPTE4LHRoaXMud29yZHNbcCs9MV18PXc+Pj4yNik6dis9ODt0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VC'@;
put 'YXNlPWZ1bmN0aW9uKE4sZyxDKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgUz0wLHY9MTt2PD02NzEwODg2Mzt2Kj1nKVMrKztTLS0sdj12L2d8MDtmb3IodmFyIHA9Ti5sZW5ndGgtQyx3PXAlUyxKPU1hdGgubWluKHAscC13KStDLG5lPTAsZGU9QztkZTxKO2RlKz1T'@;
put 'KW5lPUsoTixkZSxkZStTLGcpLHRoaXMuaW11bG4odiksdGhpcy53b3Jkc1swXStuZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1uZTp0aGlzLl9pYWRkbihuZSk7aWYoMCE9PXcpe3ZhciBmZT0xO2ZvcihuZT1LKE4sZGUsTi5sZW5ndGgsZyksZGU9MDtkZTx3O2RlKyspZmUqPWc7dGhpcy5p'@;
put 'bXVsbihmZSksdGhpcy53b3Jkc1swXStuZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1uZTp0aGlzLl9pYWRkbihuZSl9dGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihOKXtOLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBnPTA7Zzx0aGlzLmxl'@;
put 'bmd0aDtnKyspTi53b3Jkc1tnXT10aGlzLndvcmRzW2ddO04ubGVuZ3RoPXRoaXMubGVuZ3RoLE4ubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxOLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oTil7TChOLHRoaXMpfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigp'@;
put 'e3ZhciBOPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoTiksTn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihOKXtmb3IoO3RoaXMubGVuZ3RoPE47KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7'@;
put 'Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0m'@;
put 'Jih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7TS5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09a31jYXRjaHtNLnByb3RvdHlwZS5pbnNwZWN0PWt9ZWxz'@;
put 'ZSBNLnByb3RvdHlwZS5pbnNwZWN0PWs7ZnVuY3Rpb24gaygpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBFPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCJdLGo9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sVj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQz'@;
put 'MDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIw'@;
put 'NTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBYKEgsTixnKXtnLm5lZ2F0aXZlPU4ubmVnYXRpdmVeSC5uZWdhdGl2ZTt2YXIgQz1ILmxlbmd0aCtOLmxlbmd0aHwwO2cubGVuZ3RoPUMsQz1DLTF8MDt2'@;
put 'YXIgUz0wfEgud29yZHNbMF0sdj0wfE4ud29yZHNbMF0scD1TKnYsSj1wLzY3MTA4ODY0fDA7Zy53b3Jkc1swXT02NzEwODg2MyZwO2Zvcih2YXIgbmU9MTtuZTxDO25lKyspe2Zvcih2YXIgZGU9Sj4+PjI2LGZlPTY3MTA4ODYzJkoseGU9TWF0aC5taW4obmUsTi5sZW5ndGgtMSksSWU9TWF0'@;
put 'aC5tYXgoMCxuZS1ILmxlbmd0aCsxKTtJZTw9eGU7SWUrKylkZSs9KHA9KFM9MHxILndvcmRzW25lLUllfDBdKSoodj0wfE4ud29yZHNbSWVdKStmZSkvNjcxMDg4NjR8MCxmZT02NzEwODg2MyZwO2cud29yZHNbbmVdPTB8ZmUsSj0wfGRlfXJldHVybiAwIT09Sj9nLndvcmRzW25lXT0wfEo6'@;
put 'Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKE4sZyl7dmFyIEM7aWYoZz0wfGd8fDEsMTY9PT0oTj1OfHwxMCl8fCJoZXgiPT09Til7Qz0iIjtmb3IodmFyIFM9MCx2PTAscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz10aGlzLndvcmRzW3Bd'@;
put 'LEo9KDE2Nzc3MjE1Jih3PDxTfHYpKS50b1N0cmluZygxNik7dj13Pj4+MjQtUyYxNjc3NzIxNSwoUys9Mik+PTI2JiYoUy09MjYscC0tKSxDPTAhPT12fHxwIT09dGhpcy5sZW5ndGgtMT9FWzYtSi5sZW5ndGhdK0orQzpKK0N9Zm9yKDAhPT12JiYoQz12LnRvU3RyaW5nKDE2KStDKTtDLmxl'@;
put 'bmd0aCVnIT0wOylDPSIwIitDO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEM9Ii0iK0MpLEN9aWYoTj09PSgwfE4pJiZOPj0yJiZOPD0zNil7dmFyIG5lPWpbTl0sZGU9VltOXTtDPSIiO3ZhciBmZT10aGlzLmNsb25lKCk7Zm9yKGZlLm5lZ2F0aXZlPTA7IWZlLmlzWmVybygpOyl7dmFy'@;
put 'IHhlPWZlLm1vZHJuKGRlKS50b1N0cmluZyhOKTtDPShmZT1mZS5pZGl2bihkZSkpLmlzWmVybygpP3hlK0M6RVtuZS14ZS5sZW5ndGhdK3hlK0N9Zm9yKHRoaXMuaXNaZXJvKCkmJihDPSIwIitDKTtDLmxlbmd0aCVnIT0wOylDPSIwIitDO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEM9'@;
put 'Ii0iK0MpLEN9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBOPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9OKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0'@;
put 'aCYmMT09PXRoaXMud29yZHNbMl0/Tis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1OOk59LE0ucHJvdG90eXBl'@;
put 'LnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxPJiYoTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShPLE4sZyl9KSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMu'@;
put 'dG9BcnJheUxpa2UoQXJyYXksTixnKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oTixnLEMpe3RoaXMuX3N0cmlwKCk7dmFyIFM9dGhpcy5ieXRlTGVuZ3RoKCksdj1DfHxNYXRoLm1heCgxLFMpO20oUzw9diwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0'@;
put 'aCIpLG0odj4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgcD1mdW5jdGlvbihOLGcpe3JldHVybiBOLmFsbG9jVW5zYWZlP04uYWxsb2NVbnNhZmUoZyk6bmV3IE4oZyl9KE4sdik7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1nPyJMRSI6IkJFIildKHAs'@;
put 'UykscH0sTS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9MCxTPTAsdj0wLHA9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHc9dGhpcy53b3Jkc1t2XTw8cHxTO05bQysrXT0yNTUmdyxDPE4ubGVuZ3RoJiYoTltDKytdPXc+PjgmMjU1KSxDPE4ubGVu'@;
put 'Z3RoJiYoTltDKytdPXc+PjE2JjI1NSksNj09PXA/KEM8Ti5sZW5ndGgmJihOW0MrK109dz4+MjQmMjU1KSxTPTAscD0wKTooUz13Pj4+MjQscCs9Mil9aWYoQzxOLmxlbmd0aClmb3IoTltDKytdPVM7QzxOLmxlbmd0aDspTltDKytdPTB9LE0ucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1'@;
put 'bmN0aW9uKE4sZyl7Zm9yKHZhciBDPU4ubGVuZ3RoLTEsUz0wLHY9MCxwPTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciB3PXRoaXMud29yZHNbdl08PHB8UztOW0MtLV09MjU1JncsQz49MCYmKE5bQy0tXT13Pj44JjI1NSksQz49MCYmKE5bQy0tXT13Pj4xNiYyNTUpLDY9PT1wPyhDPj0wJiYo'@;
put 'TltDLS1dPXc+PjI0JjI1NSksUz0wLHA9MCk6KFM9dz4+PjI0LHArPTIpfWlmKEM+PTApZm9yKE5bQy0tXT1TO0M+PTA7KU5bQy0tXT0wfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oTil7cmV0dXJuIDMyLU1hdGguY2x6MzIoTil9OmZ1bmN0aW9uKE4pe3Zh'@;
put 'ciBnPU4sQz0wO3JldHVybiBnPj00MDk2JiYoQys9MTMsZz4+Pj0xMyksZz49NjQmJihDKz03LGc+Pj49NyksZz49OCYmKEMrPTQsZz4+Pj00KSxnPj0yJiYoQys9MixnPj4+PTIpLEMrZ30sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiAyNjt2YXIg'@;
put 'Zz1OLEM9MDtyZXR1cm4gODE5MSZnfHwoQys9MTMsZz4+Pj0xMyksMTI3Jmd8fChDKz03LGc+Pj49NyksMTUmZ3x8KEMrPTQsZz4+Pj00KSwzJmd8fChDKz0yLGc+Pj49MiksMSZnfHxDKyssQ30sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fY291bnRCaXRz'@;
put 'KHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZ30sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgTj0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIEM9dGhpcy5femVy'@;
put 'b0JpdHModGhpcy53b3Jkc1tnXSk7aWYoTis9QywyNiE9PUMpYnJlYWt9cmV0dXJuIE59LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihOKXtyZXR1cm4gMCE9'@;
put 'PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihOKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLnRlc3RuKE4tMSk/dGhpcy5ub3RuKE4pLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90'@;
put 'eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2'@;
put 'ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihOKXtmb3IoO3RoaXMubGVuZ3RoPE4ubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBnPTA7ZzxOLmxlbmd0aDtnKyspdGhpcy53b3Jkc1tnXT10aGlzLndvcmRzW2ddfE4ud29yZHNbZ107cmV0'@;
put 'dXJuIHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihOKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxOLm5lZ2F0aXZlKSksdGhpcy5pdW9yKE4pfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9u'@;
put 'ZSgpLmlvcihOKTpOLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKE4pOk4uY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihOKXt2YXIg'@;
put 'ZztnPXRoaXMubGVuZ3RoPk4ubGVuZ3RoP046dGhpcztmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ10mTi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Zy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlv'@;
put 'bihOKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxOLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChOKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChOKTpOLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90'@;
put 'b3R5cGUudWFuZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKE4pOk4uY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oTil7dmFyIGcsQzt0aGlzLmxlbmd0aD5OLmxlbmd0aD8oZz10aGlzLEM9'@;
put 'Tik6KGc9TixDPXRoaXMpO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Zy53b3Jkc1tTXV5DLndvcmRzW1NdO2lmKHRoaXMhPT1nKWZvcig7UzxnLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1nLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1nLmxlbmd0aCx0'@;
put 'aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1eG9yKE4pfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUo'@;
put 'KS5peG9yKE4pOk4uY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoTik6Ti5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihOKXtt'@;
put 'KCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9MHxNYXRoLmNlaWwoTi8yNiksQz1OJTI2O3RoaXMuX2V4cGFuZChnKSxDPjAmJmctLTtmb3IodmFyIFM9MDtTPGc7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmfnRoaXMud29yZHNbU107cmV0dXJuIEM+MCYmKHRoaXMud29yZHNb'@;
put 'U109fnRoaXMud29yZHNbU10mNjcxMDg4NjM+PjI2LUMpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihOKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihOLGcpe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0w'@;
put 'KTt2YXIgQz1OLzI2fDAsUz1OJTI2O3JldHVybiB0aGlzLl9leHBhbmQoQysxKSx0aGlzLndvcmRzW0NdPWc/dGhpcy53b3Jkc1tDXXwxPDxTOnRoaXMud29yZHNbQ10mfigxPDxTKSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKE4pe3ZhciBnLEMsUztpZigwIT09'@;
put 'dGhpcy5uZWdhdGl2ZSYmMD09PU4ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxnPXRoaXMuaXN1YihOKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0aXZlKXJldHVybiBOLm5lZ2F0aXZlPTAsZz10aGlz'@;
put 'LmlzdWIoTiksTi5uZWdhdGl2ZT0xLGcuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Ti5sZW5ndGg/KEM9dGhpcyxTPU4pOihDPU4sUz10aGlzKTtmb3IodmFyIHY9MCxwPTA7cDxTLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyYoZz0oMHxDLndvcmRzW3BdKSsoMHxTLndvcmRz'@;
put 'W3BdKSt2KSx2PWc+Pj4yNjtmb3IoOzAhPT12JiZwPEMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJihnPSgwfEMud29yZHNbcF0pK3YpLHY9Zz4+PjI2O2lmKHRoaXMubGVuZ3RoPUMubGVuZ3RoLDAhPT12KXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXYsdGhpcy5sZW5ndGgr'@;
put 'KztlbHNlIGlmKEMhPT10aGlzKWZvcig7cDxDLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT1DLndvcmRzW3BdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7dmFyIGc7cmV0dXJuIDAhPT1OLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oTi5uZWdhdGl2ZT0w'@;
put 'LGc9dGhpcy5zdWIoTiksTi5uZWdhdGl2ZV49MSxnKTowPT09Ti5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxnPU4uc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxnKTp0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChOKTpOLmNsb25l'@;
put 'KCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihOKXtpZigwIT09Ti5uZWdhdGl2ZSl7Ti5uZWdhdGl2ZT0wO3ZhciBnPXRoaXMuaWFkZChOKTtyZXR1cm4gTi5uZWdhdGl2ZT0xLGcuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzLmlhZGQoTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixDPXRoaXMuY21wKE4pO2lmKDA9PT1DKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztDPjA/KFM9dGhpcyx2PU4pOihTPU4s'@;
put 'dj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspcD0oZz0oMHxTLndvcmRzW3ddKS0oMHx2LndvcmRzW3ddKStwKT4+MjYsdGhpcy53b3Jkc1t3XT02NzEwODg2MyZnO2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXA9KGc9KDB8Uy53b3Jkc1t3XSkrcCk+PjI2LHRoaXMu'@;
put 'd29yZHNbd109NjcxMDg4NjMmZztpZigwPT09cCYmdzxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHcpLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0x'@;
put 'KSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKE4pfTt2YXIgVT1mdW5jdGlvbihOLGcsQyl7dmFyIEosbmUsZGUsUz1OLndvcmRzLHY9Zy53b3JkcyxwPUMud29yZHMsdz0wLGZlPTB8U1swXSx4ZT04MTkxJmZlLEll'@;
put 'PWZlPj4+MTMsRmU9MHxTWzFdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfFNbMl0sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLFFlPTB8U1szXSxsdD04MTkxJlFlLFBlPVFlPj4+MTMsYmU9MHxTWzRdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfFNbNV0sWGU9ODE5MSZxZSxVZT1xZT4+'@;
put 'PjEzLGh0PTB8U1s2XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxTWzddLG90PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfFNbOF0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8U1s5XSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHx2WzBdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywk'@;
put 'bj0wfHZbMV0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8dlsyXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHx2WzNdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfHZbNF0scnQ9ODE5MSZtbixMdD1tbj4+PjEzLFF0PTB8dls1XSxEdD04MTkxJlF0LHB0PVF0Pj4+MTMsWXQ9MHx2'@;
put 'WzZdLExuPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfHZbN10seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8dls4XSxSbj04MTkxJkJuLCR0PUJuPj4+MTMsRm49MHx2WzldLG5pPTgxOTEmRm4sbG49Rm4+Pj4xMztDLm5lZ2F0aXZlPU4ubmVnYXRpdmVeZy5uZWdhdGl2ZSxDLmxlbmd0aD0x'@;
put 'OTt2YXIgam49KHcrKEo9TWF0aC5pbXVsKHhlLFduKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKHhlLGVuKSkrTWF0aC5pbXVsKEllLFduKXwwKSk8PDEzKXwwO3c9KChkZT1NYXRoLmltdWwoSWUsZW4pKSsobmU+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLEo9TWF0'@;
put 'aC5pbXVsKE9lLFduKSxuZT0obmU9TWF0aC5pbXVsKE9lLGVuKSkrTWF0aC5pbXVsKGplLFduKXwwLGRlPU1hdGguaW11bChqZSxlbik7dmFyIHFyPSh3KyhKPUorTWF0aC5pbXVsKHhlLEhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChJ'@;
put 'ZSxIbil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKEllLGZ0KXwwKSsobmU+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKEtlLFduKSxuZT0obmU9TWF0aC5pbXVsKEtlLGVuKSkrTWF0aC5pbXVsKFllLFduKXwwLGRlPU1hdGguaW11bChZZSxl'@;
put 'biksSj1KK01hdGguaW11bChPZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGplLGZ0KXwwO3ZhciBnaT0odysoSj1KK01hdGguaW11bCh4ZSxobil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVs'@;
put 'KHhlLHd0KXwwKStNYXRoLmltdWwoSWUsaG4pfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChJZSx3dCl8MCkrKG5lPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2MyxKPU1hdGguaW11bChsdCxXbiksbmU9KG5lPU1hdGguaW11bChsdCxlbikpK01hdGguaW11bChQZSxX'@;
put 'bil8MCxkZT1NYXRoLmltdWwoUGUsZW4pLEo9SitNYXRoLmltdWwoS2UsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLGRlPWRlK01hdGguaW11bChZZSxmdCl8MCxKPUorTWF0aC5pbXVsKE9lLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'T2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCxkZT1kZStNYXRoLmltdWwoamUsd3QpfDA7dmFyIHhyPSh3KyhKPUorTWF0aC5pbXVsKHhlLF90KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChJZSxfdCl8MCkpPDwxMyl8MDt3PSgoZGU9'@;
put 'ZGUrTWF0aC5pbXVsKEllLE50KXwwKSsobmU+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKEFlLFduKSxuZT0obmU9TWF0aC5pbXVsKEFlLGVuKSkrTWF0aC5pbXVsKFRlLFduKXwwLGRlPU1hdGguaW11bChUZSxlbiksSj1KK01hdGguaW11bChsdCxIbil8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLGZ0KXwwLEo9SitNYXRoLmltdWwoS2UsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLGRlPWRlK01hdGguaW11bChZ'@;
put 'ZSx3dCl8MCxKPUorTWF0aC5pbXVsKE9lLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoamUsTnQpfDA7dmFyIFVpPSh3KyhKPUorTWF0aC5pbXVsKHhlLHJ0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoeGUsTHQpfDApK01hdGguaW11bChJZSxydCl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKEllLEx0KXwwKSsobmU+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFhlLFduKSxuZT0obmU9TWF0aC5pbXVsKFhlLGVuKSkrTWF0aC5pbXVs'@;
put 'KFVlLFduKXwwLGRlPU1hdGguaW11bChVZSxlbiksSj1KK01hdGguaW11bChBZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLGZ0KXwwLEo9SitNYXRoLmltdWwobHQsaG4pfDAsbmU9KG5lPW5lK01hdGgu'@;
put 'aW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLGRlPWRlK01hdGguaW11bChQZSx3dCl8MCxKPUorTWF0aC5pbXVsKEtlLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoWWUsTnQpfDAsSj1KK01hdGgu'@;
put 'aW11bChPZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLEx0KXwwKStNYXRoLmltdWwoamUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKGplLEx0KXwwO3ZhciBLcj0odysoSj1KK01hdGguaW11bCh4ZSxEdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHB0KXwwKStN'@;
put 'YXRoLmltdWwoSWUsRHQpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChJZSxwdCl8MCkrKG5lPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2MyxKPU1hdGguaW11bChNZSxXbiksbmU9KG5lPU1hdGguaW11bChNZSxlbikpK01hdGguaW11bChEZSxXbil8MCxkZT1NYXRo'@;
put 'LmltdWwoRGUsZW4pLEo9SitNYXRoLmltdWwoWGUsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLGRlPWRlK01hdGguaW11bChVZSxmdCl8MCxKPUorTWF0aC5pbXVsKEFlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsd3QpfDApK01h'@;
put 'dGguaW11bChUZSxobil8MCxkZT1kZStNYXRoLmltdWwoVGUsd3QpfDAsSj1KK01hdGguaW11bChsdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLE50KXwwLEo9SitNYXRoLmltdWwoS2UscnQpfDAsbmU9'@;
put 'KG5lPW5lK01hdGguaW11bChLZSxMdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLGRlPWRlK01hdGguaW11bChZZSxMdCl8MCxKPUorTWF0aC5pbXVsKE9lLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoamUscHQp'@;
put 'fDA7dmFyIG5vPSh3KyhKPUorTWF0aC5pbXVsKHhlLExuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChJZSxMbil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKEllLHp0KXwwKSsobmU+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8m'@;
put 'PTY3MTA4ODYzLEo9TWF0aC5pbXVsKG90LFduKSxuZT0obmU9TWF0aC5pbXVsKG90LGVuKSkrTWF0aC5pbXVsKHV0LFduKXwwLGRlPU1hdGguaW11bCh1dCxlbiksSj1KK01hdGguaW11bChNZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAs'@;
put 'ZGU9ZGUrTWF0aC5pbXVsKERlLGZ0KXwwLEo9SitNYXRoLmltdWwoWGUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLGRlPWRlK01hdGguaW11bChVZSx3dCl8MCxKPUorTWF0aC5pbXVsKEFlLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'QWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoVGUsTnQpfDAsSj1KK01hdGguaW11bChsdCxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LEx0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLEx0KXwwLEo9SitNYXRoLmltdWwo'@;
put 'S2UsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLGRlPWRlK01hdGguaW11bChZZSxwdCl8MCxKPUorTWF0aC5pbXVsKE9lLExuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxMbil8MCxkZT1kZStNYXRo'@;
put 'LmltdWwoamUsenQpfDA7dmFyIEhyPSh3KyhKPUorTWF0aC5pbXVsKHhlLHhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChJZSx4bil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKEllLHNuKXwwKSsobmU+Pj4xMyl8MCkrKEhy'@;
put 'Pj4+MjYpfDAsSHImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKEh0LFduKSxuZT0obmU9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLGRlPU1hdGguaW11bChQdCxlbiksSj1KK01hdGguaW11bChvdCxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LGZ0KXwwKStNYXRoLmlt'@;
put 'dWwodXQsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LGZ0KXwwLEo9SitNYXRoLmltdWwoTWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLGRlPWRlK01hdGguaW11bChEZSx3dCl8MCxKPUorTWF0aC5pbXVsKFhlLF90KXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoVWUsTnQpfDAsSj1KK01hdGguaW11bChBZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLEx0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLEx0KXwwLEo9'@;
put 'SitNYXRoLmltdWwobHQsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLGRlPWRlK01hdGguaW11bChQZSxwdCl8MCxKPUorTWF0aC5pbXVsKEtlLExuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxMbil8'@;
put 'MCxkZT1kZStNYXRoLmltdWwoWWUsenQpfDAsSj1KK01hdGguaW11bChPZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBxaT0odysoSj1KK01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4'@;
put 'MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoSWUsUm4pfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChJZSwkdCl8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxKPU1hdGguaW11bChDbixXbiksbmU9KG5lPU1hdGguaW11'@;
put 'bChDbixlbikpK01hdGguaW11bChVdCxXbil8MCxkZT1NYXRoLmltdWwoVXQsZW4pLEo9SitNYXRoLmltdWwoSHQsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxmdCl8MCkrTWF0aC5pbXVsKFB0LEhuKXwwLGRlPWRlK01hdGguaW11bChQdCxmdCl8MCxKPUorTWF0aC5pbXVsKG90LGhu'@;
put 'KXwwLG5lPShuZT1uZStNYXRoLmltdWwob3Qsd3QpfDApK01hdGguaW11bCh1dCxobil8MCxkZT1kZStNYXRoLmltdWwodXQsd3QpfDAsSj1KK01hdGguaW11bChNZSxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVs'@;
put 'KERlLE50KXwwLEo9SitNYXRoLmltdWwoWGUscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxMdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLGRlPWRlK01hdGguaW11bChVZSxMdCl8MCxKPUorTWF0aC5pbXVsKEFlLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUscHQpfDApK01hdGgu'@;
put 'aW11bChUZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoVGUscHQpfDAsSj1KK01hdGguaW11bChsdCxMbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsTG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHp0KXwwLEo9SitNYXRoLmltdWwoS2UseG4pfDAsbmU9KG5l'@;
put 'PW5lK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLGRlPWRlK01hdGguaW11bChZZSxzbil8MCxKPUorTWF0aC5pbXVsKE9lLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCxkZT1kZStNYXRoLmltdWwoamUsJHQpfDA7'@;
put 'dmFyIEppPSh3KyhKPUorTWF0aC5pbXVsKHhlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChJZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKEllLGxuKXwwKSsobmU+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3'@;
put 'MTA4ODYzLEo9TWF0aC5pbXVsKENuLEhuKSxuZT0obmU9TWF0aC5pbXVsKENuLGZ0KSkrTWF0aC5pbXVsKFV0LEhuKXwwLGRlPU1hdGguaW11bChVdCxmdCksSj1KK01hdGguaW11bChIdCxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHd0KXwwKStNYXRoLmltdWwoUHQsaG4pfDAsZGU9'@;
put 'ZGUrTWF0aC5pbXVsKFB0LHd0KXwwLEo9SitNYXRoLmltdWwob3QsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLGRlPWRlK01hdGguaW11bCh1dCxOdCl8MCxKPUorTWF0aC5pbXVsKE1lLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUs'@;
put 'THQpfDApK01hdGguaW11bChEZSxydCl8MCxkZT1kZStNYXRoLmltdWwoRGUsTHQpfDAsSj1KK01hdGguaW11bChYZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHB0KXwwLEo9SitNYXRoLmltdWwoQWUs'@;
put 'TG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLExuKXwwLGRlPWRlK01hdGguaW11bChUZSx6dCl8MCxKPUorTWF0aC5pbXVsKGx0LHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCxkZT1kZStNYXRoLmlt'@;
put 'dWwoUGUsc24pfDAsSj1KK01hdGguaW11bChLZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLCR0KXwwO3ZhciBhbz0odysoSj1KK01hdGguaW11bChPZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwoamUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChqZSxsbil8MCkrKG5lPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixobiksbmU9KG5lPU1hdGguaW11bChDbix3dCkpK01hdGgu'@;
put 'aW11bChVdCxobil8MCxkZT1NYXRoLmltdWwoVXQsd3QpLEo9SitNYXRoLmltdWwoSHQsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxOdCl8MCkrTWF0aC5pbXVsKFB0LF90KXwwLGRlPWRlK01hdGguaW11bChQdCxOdCl8MCxKPUorTWF0aC5pbXVsKG90LHJ0KXwwLG5lPShuZT1uZStN'@;
put 'YXRoLmltdWwob3QsTHQpfDApK01hdGguaW11bCh1dCxydCl8MCxkZT1kZStNYXRoLmltdWwodXQsTHQpfDAsSj1KK01hdGguaW11bChNZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKERlLHB0KXwwLEo9SitN'@;
put 'YXRoLmltdWwoWGUsTG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLExuKXwwLGRlPWRlK01hdGguaW11bChVZSx6dCl8MCxKPUorTWF0aC5pbXVsKEFlLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCxk'@;
put 'ZT1kZStNYXRoLmltdWwoVGUsc24pfDAsSj1KK01hdGguaW11bChsdCxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLCR0KXwwO3ZhciBybz0odysoSj1KK01hdGguaW11bChLZSxuaSl8MCl8MCkrKCg4MTkx'@;
put 'JihuZT0obmU9bmUrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChZZSxsbil8MCkrKG5lPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixfdCksbmU9KG5lPU1hdGguaW11bChD'@;
put 'bixOdCkpK01hdGguaW11bChVdCxfdCl8MCxkZT1NYXRoLmltdWwoVXQsTnQpLEo9SitNYXRoLmltdWwoSHQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxMdCl8MCkrTWF0aC5pbXVsKFB0LHJ0KXwwLGRlPWRlK01hdGguaW11bChQdCxMdCl8MCxKPUorTWF0aC5pbXVsKG90LER0KXww'@;
put 'LG5lPShuZT1uZStNYXRoLmltdWwob3QscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCxkZT1kZStNYXRoLmltdWwodXQscHQpfDAsSj1KK01hdGguaW11bChNZSxMbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsTG4pfDAsZGU9ZGUrTWF0aC5pbXVsKERl'@;
put 'LHp0KXwwLEo9SitNYXRoLmltdWwoWGUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLGRlPWRlK01hdGguaW11bChVZSxzbil8MCxKPUorTWF0aC5pbXVsKEFlLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11'@;
put 'bChUZSxSbil8MCxkZT1kZStNYXRoLmltdWwoVGUsJHQpfDA7dmFyIGlvPSh3KyhKPUorTWF0aC5pbXVsKGx0LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwobHQsbG4pfDApK01hdGguaW11bChQZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFBlLGxu'@;
put 'KXwwKSsobmU+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLHJ0KSxuZT0obmU9TWF0aC5pbXVsKENuLEx0KSkrTWF0aC5pbXVsKFV0LHJ0KXwwLGRlPU1hdGguaW11bChVdCxMdCksSj1KK01hdGguaW11bChIdCxEdCl8MCxuZT0obmU9bmUrTWF0aC5p'@;
put 'bXVsKEh0LHB0KXwwKStNYXRoLmltdWwoUHQsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHB0KXwwLEo9SitNYXRoLmltdWwob3QsTG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCx6dCl8MCkrTWF0aC5pbXVsKHV0LExuKXwwLGRlPWRlK01hdGguaW11bCh1dCx6dCl8MCxKPUorTWF0aC5p'@;
put 'bXVsKE1lLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCxkZT1kZStNYXRoLmltdWwoRGUsc24pfDAsSj1KK01hdGguaW11bChYZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDAsZGU9ZGUr'@;
put 'TWF0aC5pbXVsKFVlLCR0KXwwO3ZhciBHaT0odysoSj1KK01hdGguaW11bChBZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEFlLGxuKXwwKStNYXRoLmltdWwoVGUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChUZSxsbil8MCkrKG5lPj4+MTMpfDAp'@;
put 'KyhHaT4+PjI2KXwwLEdpJj02NzEwODg2MyxKPU1hdGguaW11bChDbixEdCksbmU9KG5lPU1hdGguaW11bChDbixwdCkpK01hdGguaW11bChVdCxEdCl8MCxkZT1NYXRoLmltdWwoVXQscHQpLEo9SitNYXRoLmltdWwoSHQsTG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCx6dCl8MCkrTWF0'@;
put 'aC5pbXVsKFB0LExuKXwwLGRlPWRlK01hdGguaW11bChQdCx6dCl8MCxKPUorTWF0aC5pbXVsKG90LHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3Qsc24pfDApK01hdGguaW11bCh1dCx4bil8MCxkZT1kZStNYXRoLmltdWwodXQsc24pfDAsSj1KK01hdGguaW11bChNZSxSbil8MCxuZT0o'@;
put 'bmU9bmUrTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLCR0KXwwO3ZhciBobz0odysoSj1KK01hdGguaW11bChYZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFhlLGxuKXwwKStNYXRoLmltdWwoVWUsbmkpfDAp'@;
put 'KTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChVZSxsbil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixMbiksbmU9KG5lPU1hdGguaW11bChDbix6dCkpK01hdGguaW11bChVdCxMbil8MCxkZT1NYXRoLmltdWwoVXQsenQpLEo9SitN'@;
put 'YXRoLmltdWwoSHQseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxzbil8MCkrTWF0aC5pbXVsKFB0LHhuKXwwLGRlPWRlK01hdGguaW11bChQdCxzbil8MCxKPUorTWF0aC5pbXVsKG90LFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCxk'@;
put 'ZT1kZStNYXRoLmltdWwodXQsJHQpfDA7dmFyIHlyPSh3KyhKPUorTWF0aC5pbXVsKE1lLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoTWUsbG4pfDApK01hdGguaW11bChEZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKERlLGxuKXwwKSsobmU+Pj4x'@;
put 'Myl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLHhuKSxuZT0obmU9TWF0aC5pbXVsKENuLHNuKSkrTWF0aC5pbXVsKFV0LHhuKXwwLGRlPU1hdGguaW11bChVdCxzbiksSj1KK01hdGguaW11bChIdCxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LCR0KXww'@;
put 'KStNYXRoLmltdWwoUHQsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LCR0KXwwO3ZhciBQaT0odysoSj1KK01hdGguaW11bChvdCxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKG90LGxuKXwwKStNYXRoLmltdWwodXQsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGgu'@;
put 'aW11bCh1dCxsbil8MCkrKG5lPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2MyxKPU1hdGguaW11bChDbixSbiksbmU9KG5lPU1hdGguaW11bChDbiwkdCkpK01hdGguaW11bChVdCxSbil8MCxkZT1NYXRoLmltdWwoVXQsJHQpO3ZhciBJbz0odysoSj1KK01hdGguaW11bChIdCxu'@;
put 'aSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEh0LGxuKXwwKStNYXRoLmltdWwoUHQsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChQdCxsbil8MCkrKG5lPj4+MTMpfDApKyhJbz4+PjI2KXwwLElvJj02NzEwODg2Mzt2YXIgaHM9KHcrKEo9TWF0aC5pbXVs'@;
put 'KENuLG5pKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKENuLGxuKSkrTWF0aC5pbXVsKFV0LG5pKXwwKSk8PDEzKXwwO3JldHVybiB3PSgoZGU9TWF0aC5pbXVsKFV0LGxuKSkrKG5lPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2MyxwWzBdPWpuLHBbMV09cXIscFsyXT1n'@;
put 'aSxwWzNdPXhyLHBbNF09VWkscFs1XT1LcixwWzZdPW5vLHBbN109SHIscFs4XT1xaSxwWzldPUppLHBbMTBdPWFvLHBbMTFdPXJvLHBbMTJdPWlvLHBbMTNdPUdpLHBbMTRdPWhvLHBbMTVdPXlyLHBbMTZdPVBpLHBbMTddPUlvLHBbMThdPWhzLDAhPT13JiYocFsxOV09dyxDLmxlbmd0aCsr'@;
put 'KSxDfTtmdW5jdGlvbiBxKEgsTixnKXtnLm5lZ2F0aXZlPU4ubmVnYXRpdmVeSC5uZWdhdGl2ZSxnLmxlbmd0aD1ILmxlbmd0aCtOLmxlbmd0aDtmb3IodmFyIEM9MCxTPTAsdj0wO3Y8Zy5sZW5ndGgtMTt2Kyspe3ZhciBwPVM7Uz0wO2Zvcih2YXIgdz02NzEwODg2MyZDLEo9TWF0aC5taW4o'@;
put 'dixOLmxlbmd0aC0xKSxuZT1NYXRoLm1heCgwLHYtSC5sZW5ndGgrMSk7bmU8PUo7bmUrKyl7dmFyIEllPSgwfEgud29yZHNbdi1uZV0pKigwfE4ud29yZHNbbmVdKSxGZT02NzEwODg2MyZJZTt3PTY3MTA4ODYzJihGZT1GZSt3fDApLFMrPShwPShwPXArKEllLzY3MTA4ODY0fDApfDApKyhG'@;
put 'ZT4+PjI2KXwwKT4+PjI2LHAmPTY3MTA4ODYzfWcud29yZHNbdl09dyxDPXAscD1TfXJldHVybiAwIT09Qz9nLndvcmRzW3ZdPUM6Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfWZ1bmN0aW9uIGVlKEgsTixnKXtyZXR1cm4gcShILE4sZyl9ZnVuY3Rpb24gdGUoSCxOKXt0aGlzLng9SCx0aGlzLnk9'@;
put 'Tn1NYXRoLmltdWx8fChVPVgpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKE4sZyl7dmFyIFM9dGhpcy5sZW5ndGgrTi5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Ti5sZW5ndGg/VSh0aGlzLE4sZyk6Uzw2Mz9YKHRoaXMsTixnKTpTPDEwMjQ/cSh0aGlzLE4sZyk6'@;
put 'ZWUodGhpcyxOLGcpfSx0ZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihOKXtmb3IodmFyIGc9bmV3IEFycmF5KE4pLEM9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhOKS0xLFM9MDtTPE47UysrKWdbU109dGhpcy5yZXZCaW4oUyxDLE4pO3JldHVybiBnfSx0ZS5wcm90b3R5cGUucmV2Qmlu'@;
put 'PWZ1bmN0aW9uKE4sZyxDKXtpZigwPT09Tnx8Tj09PUMtMSlyZXR1cm4gTjtmb3IodmFyIFM9MCx2PTA7djxnO3YrKylTfD0oMSZOKTw8Zy12LTEsTj4+PTE7cmV0dXJuIFN9LHRlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKE4sZyxDLFMsdixwKXtmb3IodmFyIHc9MDt3PHA7dysrKVNb'@;
put 'd109Z1tOW3ddXSx2W3ddPUNbTlt3XV19LHRlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oTixnLEMsUyx2LHApe3RoaXMucGVybXV0ZShwLE4sZyxDLFMsdik7Zm9yKHZhciB3PTE7dzx2O3c8PD0xKWZvcih2YXIgSj13PDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS9KKSxkZT1NYXRo'@;
put 'LnNpbigyKk1hdGguUEkvSiksZmU9MDtmZTx2O2ZlKz1KKWZvcih2YXIgeGU9bmUsSWU9ZGUsRmU9MDtGZTx3O0ZlKyspe3ZhciBPZT1DW2ZlK0ZlXSxqZT1TW2ZlK0ZlXSxXZT1DW2ZlK0ZlK3ddLEtlPVNbZmUrRmUrd10sWWU9eGUqV2UtSWUqS2U7S2U9eGUqS2UrSWUqV2UsQ1tmZStGZV09'@;
put 'T2UrKFdlPVllKSxTW2ZlK0ZlXT1qZStLZSxDW2ZlK0ZlK3ddPU9lLVdlLFNbZmUrRmUrd109amUtS2UsRmUhPT1KJiYoWWU9bmUqeGUtZGUqSWUsSWU9bmUqSWUrZGUqeGUseGU9WWUpfX0sdGUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKE4sZyl7dmFyIEM9MXxNYXRoLm1heChn'@;
put 'LE4pLFM9MSZDLHY9MDtmb3IoQz1DLzJ8MDtDO0M+Pj49MSl2Kys7cmV0dXJuIDE8PHYrMStTfSx0ZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKE4sZyxDKXtpZighKEM8PTEpKWZvcih2YXIgUz0wO1M8Qy8yO1MrKyl7dmFyIHY9TltTXTtOW1NdPU5bQy1TLTFdLE5bQy1TLTFdPXYs'@;
put 'dj1nW1NdLGdbU109LWdbQy1TLTFdLGdbQy1TLTFdPS12fX0sdGUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcvMjtTKyspe3ZhciB2PTgxOTIqTWF0aC5yb3VuZChOWzIqUysxXS9nKStNYXRoLnJvdW5kKE5bMipTXS9nKStDO05bU109'@;
put 'NjcxMDg4NjMmdixDPXY8NjcxMDg4NjQ/MDp2LzY3MTA4ODY0fDB9cmV0dXJuIE59LHRlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKE4sZyxDLFMpe2Zvcih2YXIgdj0wLHA9MDtwPGc7cCsrKUNbMipwXT04MTkxJih2Kz0wfE5bcF0pLENbMipwKzFdPTgxOTEmKHY+Pj49MTMpLHY+'@;
put 'Pj49MTM7Zm9yKHA9MipnO3A8UzsrK3ApQ1twXT0wO20oMD09PXYpLG0oMD09KC04MTkyJnYpKX0sdGUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oTil7Zm9yKHZhciBnPW5ldyBBcnJheShOKSxDPTA7QzxOO0MrKylnW0NdPTA7cmV0dXJuIGd9LHRlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9u'@;
put 'KE4sZyxDKXt2YXIgUz0yKnRoaXMuZ3Vlc3NMZW4xM2IoTi5sZW5ndGgsZy5sZW5ndGgpLHY9dGhpcy5tYWtlUkJUKFMpLHA9dGhpcy5zdHViKFMpLHc9bmV3IEFycmF5KFMpLEo9bmV3IEFycmF5KFMpLG5lPW5ldyBBcnJheShTKSxkZT1uZXcgQXJyYXkoUyksZmU9bmV3IEFycmF5KFMpLHhl'@;
put 'PW5ldyBBcnJheShTKSxJZT1DLndvcmRzO0llLmxlbmd0aD1TLHRoaXMuY29udmVydDEzYihOLndvcmRzLE4ubGVuZ3RoLHcsUyksdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsZGUsUyksdGhpcy50cmFuc2Zvcm0odyxwLEosbmUsUyx2KSx0aGlzLnRyYW5zZm9ybShkZSxwLGZl'@;
put 'LHhlLFMsdik7Zm9yKHZhciBGZT0wO0ZlPFM7RmUrKyl7dmFyIE9lPUpbRmVdKmZlW0ZlXS1uZVtGZV0qeGVbRmVdO25lW0ZlXT1KW0ZlXSp4ZVtGZV0rbmVbRmVdKmZlW0ZlXSxKW0ZlXT1PZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoSixuZSxTKSx0aGlzLnRyYW5zZm9ybShKLG5lLEllLHAs'@;
put 'Uyx2KSx0aGlzLmNvbmp1Z2F0ZShJZSxwLFMpLHRoaXMubm9ybWFsaXplMTNiKEllLFMpLEMubmVnYXRpdmU9Ti5uZWdhdGl2ZV5nLm5lZ2F0aXZlLEMubGVuZ3RoPU4ubGVuZ3RoK2cubGVuZ3RoLEMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihOKXt2YXIgZz1uZXcgTShu'@;
put 'dWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrTi5sZW5ndGgpLHRoaXMubXVsVG8oTixnKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihOKXt2YXIgZz1uZXcgTShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrTi5sZW5ndGgpLGVl'@;
put 'KHRoaXMsTixnKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKE4sdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKE4pe3ZhciBnPU48MDtnJiYoTj0tTiksbSgibnVtYmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCk7Zm9y'@;
put 'KHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpOLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53'@;
put 'b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLGc/dGhpcy5pbmVnKCk6dGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKE4pfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBl'@;
put 'LmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihOKXt2YXIgZz1mdW5jdGlvbiBZKEgpe2Zvcih2YXIgTj1uZXcgQXJyYXkoSC5iaXRMZW5ndGgoKSksZz0wO2c8Ti5sZW5ndGg7ZysrKU5bZ109SC53b3Jkc1tn'@;
put 'LzI2fDBdPj4+ZyUyNiYxO3JldHVybiBOfShOKTtpZigwPT09Zy5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgQz10aGlzLFM9MDtTPGcubGVuZ3RoJiYwPT09Z1tTXTtTKyssQz1DLnNxcigpKTtpZigrK1M8Zy5sZW5ndGgpZm9yKHZhciB2PUMuc3FyKCk7UzxnLmxlbmd0aDtTKyss'@;
put 'dj12LnNxcigpKTAhPT1nW1NdJiYoQz1DLm11bCh2KSk7cmV0dXJuIEN9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIHYsZz1OJTI2LEM9KE4tZykvMjYsUz02NzEwODg2Mz4+PjI2LWc8PDI2LWc7aWYoMCE9PWcpe3ZhciBw'@;
put 'PTA7Zm9yKHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHc9dGhpcy53b3Jkc1t2XSZTO3RoaXMud29yZHNbdl09KDB8dGhpcy53b3Jkc1t2XSktdzw8Z3xwLHA9dz4+PjI2LWd9cCYmKHRoaXMud29yZHNbdl09cCx0aGlzLmxlbmd0aCsrKX1pZigwIT09Qyl7Zm9yKHY9dGhpcy5sZW5ndGgt'@;
put 'MTt2Pj0wO3YtLSl0aGlzLndvcmRzW3YrQ109dGhpcy53b3Jkc1t2XTtmb3Iodj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT0wO3RoaXMubGVuZ3RoKz1DfXJldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihOKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2'@;
put 'ZSksdGhpcy5pdXNobG4oTil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihOLGcsQyl7dmFyIFM7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApLFM9Zz8oZy1nJTI2KS8yNjowO3ZhciB2PU4lMjYscD1NYXRoLm1pbigoTi12KS8yNix0aGlzLmxlbmd0aCksdz02NzEwODg2M142NzEw'@;
put 'ODg2Mz4+PnY8PHYsSj1DO2lmKFMtPXAsUz1NYXRoLm1heCgwLFMpLEope2Zvcih2YXIgbmU9MDtuZTxwO25lKyspSi53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZV07Si5sZW5ndGg9cH1pZigwIT09cClpZih0aGlzLmxlbmd0aD5wKWZvcih0aGlzLmxlbmd0aC09cCxuZT0wO25lPHRoaXMubGVu'@;
put 'Z3RoO25lKyspdGhpcy53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZStwXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBkZT0wO2ZvcihuZT10aGlzLmxlbmd0aC0xO25lPj0wJiYoMCE9PWRlfHxuZT49Uyk7bmUtLSl7dmFyIGZlPTB8dGhpcy53b3Jkc1tuZV07dGhpcy53'@;
put 'b3Jkc1tuZV09ZGU8PDI2LXZ8ZmU+Pj52LGRlPWZlJnd9cmV0dXJuIEomJjAhPT1kZSYmKEoud29yZHNbSi5sZW5ndGgrK109ZGUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlv'@;
put 'bihOLGcsQyl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKE4sZyxDKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKE4pfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'Lml1c2hsbihOKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKE4pfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihOKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oTil7bSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciBnPU4lMjYsQz0oTi1nKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1DfHwhKHRoaXMud29yZHNbQ10mMTw8ZykpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciBnPU4lMjYs'@;
put 'Qz0oTi1nKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUM/dGhpczooMCE9PWcmJkMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihDLHRoaXMubGVuZ3RoKSwwIT09ZyYmKHRoaXMud29y'@;
put 'ZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8ZyksdGhpcy5fc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKE4pfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihOKXtyZXR1cm4gbSgibnVt'@;
put 'YmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCksTjwwP3RoaXMuaXN1Ym4oLU4pOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PU4/KHRoaXMud29yZHNbMF09Ti0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRo'@;
put 'aXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKE4pLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihOKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKE4pe3RoaXMud29yZHNbMF0rPU47Zm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tnXT49NjcxMDg4NjQ7'@;
put 'ZysrKXRoaXMud29yZHNbZ10tPTY3MTA4ODY0LGc9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZysxXT0xOnRoaXMud29yZHNbZysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxnKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKE4pe2lm'@;
put 'KG0oIm51bWJlciI9PXR5cGVvZiBOKSxtKE48NjcxMDg4NjQpLE48MClyZXR1cm4gdGhpcy5pYWRkbigtTik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKE4pLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPU4sMT09'@;
put 'PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ddPDA7ZysrKXRoaXMud29yZHNbZ10rPTY3MTA4ODY0LHRoaXMud29yZHNbZysx'@;
put 'XS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKE4pfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oTil9LE0ucHJvdG90eXBlLmlhYnM9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oTixnLEMpe3ZhciB2O3RoaXMuX2V4cGFuZChOLmxlbmd0aCtDKTt2'@;
put 'YXIgcCx3PTA7Zm9yKHY9MDt2PE4ubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrQ10pK3c7dmFyIEo9KDB8Ti53b3Jkc1t2XSkqZzt3PSgocC09NjcxMDg4NjMmSik+PjI2KS0oSi82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrQ109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgt'@;
put 'Qzt2Kyspdz0ocD0oMHx0aGlzLndvcmRzW3YrQ10pK3cpPj4yNix0aGlzLndvcmRzW3YrQ109NjcxMDg4NjMmcDtpZigwPT09dylyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IobSgtMT09PXcpLHc9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspdz0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrdyk+PjI2'@;
put 'LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKE4sZyl7dmFyIEMsUz10aGlzLmNsb25lKCksdj1OLHA9MHx2LndvcmRzW3YubGVuZ3RoLTFdOzAhPShDPTI2LXRoaXMuX2Nv'@;
put 'dW50Qml0cyhwKSkmJih2PXYudXNobG4oQyksUy5pdXNobG4oQykscD0wfHYud29yZHNbdi5sZW5ndGgtMV0pO3ZhciBuZSxKPVMubGVuZ3RoLXYubGVuZ3RoO2lmKCJtb2QiIT09Zyl7KG5lPW5ldyBNKG51bGwpKS5sZW5ndGg9SisxLG5lLndvcmRzPW5ldyBBcnJheShuZS5sZW5ndGgpO2Zv'@;
put 'cih2YXIgZGU9MDtkZTxuZS5sZW5ndGg7ZGUrKyluZS53b3Jkc1tkZV09MH12YXIgZmU9Uy5jbG9uZSgpLl9pc2hsbnN1Ym11bCh2LDEsSik7MD09PWZlLm5lZ2F0aXZlJiYoUz1mZSxuZSYmKG5lLndvcmRzW0pdPTEpKTtmb3IodmFyIHhlPUotMTt4ZT49MDt4ZS0tKXt2YXIgSWU9NjcxMDg4'@;
put 'NjQqKDB8Uy53b3Jkc1t2Lmxlbmd0aCt4ZV0pKygwfFMud29yZHNbdi5sZW5ndGgreGUtMV0pO2ZvcihJZT1NYXRoLm1pbihJZS9wfDAsNjcxMDg4NjMpLFMuX2lzaGxuc3VibXVsKHYsSWUseGUpOzAhPT1TLm5lZ2F0aXZlOylJZS0tLFMubmVnYXRpdmU9MCxTLl9pc2hsbnN1Ym11bCh2LDEs'@;
put 'eGUpLFMuaXNaZXJvKCl8fChTLm5lZ2F0aXZlXj0xKTtuZSYmKG5lLndvcmRzW3hlXT1JZSl9cmV0dXJuIG5lJiZuZS5fc3RyaXAoKSxTLl9zdHJpcCgpLCJkaXYiIT09ZyYmMCE9PUMmJlMuaXVzaHJuKEMpLHtkaXY6bmV8fG51bGwsbW9kOlN9fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rp'@;
put 'b24oTixnLEMpe3JldHVybiBtKCFOLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PU4ubmVnYXRpdmU/KHA9dGhpcy5uZWcoKS5kaXZtb2QoTixnKSwibW9kIiE9PWcmJihTPXAuZGl2Lm5lZygpKSwiZGl2'@;
put 'IiE9PWcmJih2PXAubW9kLm5lZygpLEMmJjAhPT12Lm5lZ2F0aXZlJiZ2LmlhZGQoTikpLHtkaXY6Uyxtb2Q6dn0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Ti5uZWdhdGl2ZT8ocD10aGlzLmRpdm1vZChOLm5lZygpLGcpLCJtb2QiIT09ZyYmKFM9cC5kaXYubmVnKCkpLHtkaXY6Uyxtb2Q6'@;
put 'cC5tb2R9KTp0aGlzLm5lZ2F0aXZlJk4ubmVnYXRpdmU/KHA9dGhpcy5uZWcoKS5kaXZtb2QoTi5uZWcoKSxnKSwiZGl2IiE9PWcmJih2PXAubW9kLm5lZygpLEMmJjAhPT12Lm5lZ2F0aXZlJiZ2LmlzdWIoTikpLHtkaXY6cC5kaXYsbW9kOnZ9KTpOLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhp'@;
put 'cy5jbXAoTik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Ti5sZW5ndGg/ImRpdiI9PT1nP3tkaXY6dGhpcy5kaXZuKE4ud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWc/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZHJuKE4ud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4o'@;
put 'Ti53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kcm4oTi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KE4sZyk7dmFyIFMsdixwfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZGl2bW9kKE4sImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9u'@;
put 'KE4pe3JldHVybiB0aGlzLmRpdm1vZChOLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZGl2bW9kKE4sIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oTil7dmFyIGc9dGhpcy5kaXZtb2QoTik7aWYoZy5t'@;
put 'b2QuaXNaZXJvKCkpcmV0dXJuIGcuZGl2O3ZhciBDPTAhPT1nLmRpdi5uZWdhdGl2ZT9nLm1vZC5pc3ViKE4pOmcubW9kLFM9Ti51c2hybigxKSx2PU4uYW5kbG4oMSkscD1DLmNtcChTKTtyZXR1cm4gcDwwfHwxPT09diYmMD09PXA/Zy5kaXY6MCE9PWcuZGl2Lm5lZ2F0aXZlP2cuZGl2Lmlz'@;
put 'dWJuKDEpOmcuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihOKXt2YXIgZz1OPDA7ZyYmKE49LU4pLG0oTjw9NjcxMDg4NjMpO2Zvcih2YXIgQz0oMTw8MjYpJU4sUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJU47'@;
put 'cmV0dXJuIGc/LVM6U30sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5tb2RybihOKX0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oTil7dmFyIGc9TjwwO2cmJihOPS1OKSxtKE48PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtT'@;
put 'LS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L058MCxDPXYlTn1yZXR1cm4gdGhpcy5fc3RyaXAoKSxnP3RoaXMuaW5lZygpOnRoaXN9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihOKX0s'@;
put 'TS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihOKXttKDA9PT1OLm5lZ2F0aXZlKSxtKCFOLmlzWmVybygpKTt2YXIgZz10aGlzLEM9Ti5jbG9uZSgpO2c9MCE9PWcubmVnYXRpdmU/Zy51bW9kKE4pOmcuY2xvbmUoKTtmb3IodmFyIFM9bmV3IE0oMSksdj1uZXcgTSgwKSxwPW5ldyBNKDApLHc9'@;
put 'bmV3IE0oMSksSj0wO2cuaXNFdmVuKCkmJkMuaXNFdmVuKCk7KWcuaXVzaHJuKDEpLEMuaXVzaHJuKDEpLCsrSjtmb3IodmFyIG5lPUMuY2xvbmUoKSxkZT1nLmNsb25lKCk7IWcuaXNaZXJvKCk7KXtmb3IodmFyIGZlPTAseGU9MTshKGcud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9'@;
put 'MSk7aWYoZmU+MClmb3IoZy5pdXNocm4oZmUpO2ZlLS0gPjA7KShTLmlzT2RkKCl8fHYuaXNPZGQoKSkmJihTLmlhZGQobmUpLHYuaXN1YihkZSkpLFMuaXVzaHJuKDEpLHYuaXVzaHJuKDEpO2Zvcih2YXIgSWU9MCxGZT0xOyEoQy53b3Jkc1swXSZGZSkmJkllPDI2OysrSWUsRmU8PD0xKTtp'@;
put 'ZihJZT4wKWZvcihDLml1c2hybihJZSk7SWUtLSA+MDspKHAuaXNPZGQoKXx8dy5pc09kZCgpKSYmKHAuaWFkZChuZSksdy5pc3ViKGRlKSkscC5pdXNocm4oMSksdy5pdXNocm4oMSk7Zy5jbXAoQyk+PTA/KGcuaXN1YihDKSxTLmlzdWIocCksdi5pc3ViKHcpKTooQy5pc3ViKGcpLHAuaXN1'@;
put 'YihTKSx3LmlzdWIodikpfXJldHVybnthOnAsYjp3LGdjZDpDLml1c2hsbihKKX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihOKXttKDA9PT1OLm5lZ2F0aXZlKSxtKCFOLmlzWmVybygpKTt2YXIgZmUsZz10aGlzLEM9Ti5jbG9uZSgpO2c9MCE9PWcubmVnYXRpdmU/Zy51bW9kKE4p'@;
put 'OmcuY2xvbmUoKTtmb3IodmFyIFM9bmV3IE0oMSksdj1uZXcgTSgwKSxwPUMuY2xvbmUoKTtnLmNtcG4oMSk+MCYmQy5jbXBuKDEpPjA7KXtmb3IodmFyIHc9MCxKPTE7IShnLndvcmRzWzBdJkopJiZ3PDI2OysrdyxKPDw9MSk7aWYodz4wKWZvcihnLml1c2hybih3KTt3LS0gPjA7KVMuaXNP'@;
put 'ZGQoKSYmUy5pYWRkKHApLFMuaXVzaHJuKDEpO2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspdi5pc09kZCgpJiZ2LmlhZGQocCksdi5pdXNocm4oMSk7Zy5jbXAoQyk+PTA/KGcu'@;
put 'aXN1YihDKSxTLmlzdWIodikpOihDLmlzdWIoZyksdi5pc3ViKFMpKX1yZXR1cm4oZmU9MD09PWcuY21wbigxKT9TOnYpLmNtcG4oMCk8MCYmZmUuaWFkZChOKSxmZX0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIE4uYWJzKCk7aWYoTi5pc1pl'@;
put 'cm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZz10aGlzLmNsb25lKCksQz1OLmNsb25lKCk7Zy5uZWdhdGl2ZT0wLEMubmVnYXRpdmU9MDtmb3IodmFyIFM9MDtnLmlzRXZlbigpJiZDLmlzRXZlbigpO1MrKylnLml1c2hybigxKSxDLml1c2hybigxKTtmb3IoOzspe2Zvcig7Zy5pc0V2ZW4o'@;
put 'KTspZy5pdXNocm4oMSk7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTt2YXIgdj1nLmNtcChDKTtpZih2PDApe3ZhciBwPWc7Zz1DLEM9cH1lbHNlIGlmKDA9PT12fHwwPT09Qy5jbXBuKDEpKWJyZWFrO2cuaXN1YihDKX1yZXR1cm4gQy5pdXNobG4oUyl9LE0ucHJvdG90eXBlLmludm09'@;
put 'ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZWdjZChOKS5hLnVtb2QoTil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJv'@;
put 'dG90eXBlLmFuZGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLndvcmRzWzBdJk59LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOKTt2YXIgZz1OJTI2LEM9KE4tZykvMjYsUz0xPDxnO2lmKHRoaXMubGVuZ3RoPD1DKXJldHVybiB0aGlzLl9leHBh'@;
put 'bmQoQysxKSx0aGlzLndvcmRzW0NdfD1TLHRoaXM7Zm9yKHZhciB2PVMscD1DOzAhPT12JiZwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIHc9MHx0aGlzLndvcmRzW3BdO3Y9KHcrPXYpPj4+MjYsdGhpcy53b3Jkc1twXT13Jj02NzEwODg2M31yZXR1cm4gMCE9PXYmJih0aGlzLndvcmRzW3BdPXYs'@;
put 'dGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oTil7dmFyIEMsZz1OPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFnKXJldHVy'@;
put 'bi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZnKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtnJiYoTj0tTiksbShOPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgUz0wfHRoaXMud29yZHNbMF07Qz1TPT09Tj8wOlM8Tj8tMToxfXJl'@;
put 'dHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihOKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PU4ubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBnPXRoaXMudWNt'@;
put 'cChOKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZzpnfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKE4pe2lmKHRoaXMubGVuZ3RoPk4ubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPE4ubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZz0wLEM9dGhpcy5sZW5ndGgtMTtDPj0w'@;
put 'O0MtLSl7dmFyIFM9MHx0aGlzLndvcmRzW0NdLHY9MHxOLndvcmRzW0NdO2lmKFMhPT12KXtTPHY/Zz0tMTpTPnYmJihnPTEpO2JyZWFrfX1yZXR1cm4gZ30sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKE4pe3JldHVybiAxPT09dGhpcy5jbXBuKE4pfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlv'@;
put 'bihOKXtyZXR1cm4gMT09PXRoaXMuY21wKE4pfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcG4oTik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXAoTik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihOKXtyZXR1'@;
put 'cm4tMT09PXRoaXMuY21wbihOKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oTil7cmV0dXJuLTE9PT10aGlzLmNtcChOKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXBuKE4pPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMu'@;
put 'Y21wKE4pPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oTil7cmV0dXJuIDA9PT10aGlzLmNtcG4oTil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe3JldHVybiAwPT09dGhpcy5jbXAoTil9LE0ucmVkPWZ1bmN0aW9uKE4pe3JldHVybiBuZXcgYihOKX0sTS5wcm90b3R5cGUudG9S'@;
put 'ZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxOLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoTil9LE0ucHJv'@;
put 'dG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oTil7cmV0'@;
put 'dXJuIHRoaXMucmVkPU4sdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoTil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihOKXty'@;
put 'ZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLmlhZGQodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oTil7'@;
put 'cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KSx0aGlzLnJlZC5zaGwodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxOKSx0aGlzLnJlZC5tdWwodGhpcyxOKX0sTS5wcm90'@;
put 'b3R5cGUucmVkSU11bD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsTiksdGhpcy5yZWQuaW11bCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy'@;
put 'aWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0s'@;
put 'TS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihOKXtyZXR1'@;
put 'cm4gbSh0aGlzLnJlZCYmIU4ucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLE4pfTt2YXIgb2U9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBzZShILE4pe3RoaXMubmFt'@;
put 'ZT1ILHRoaXMucD1uZXcgTShOLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gaGUoKXtzZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIHVlKCl7c2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlv'@;
put 'biBjZSgpe3NlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRygpe3NlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gYihIKXtpZigic3RyaW5nIj09dHlwZW9mIEgpe3ZhciBOPU0uX3ByaW1lKEgpO3RoaXMubT1OLnAsdGhpcy5wcmltZT1OfWVsc2UgbShILmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUgsdGhp'@;
put 'cy5wcmltZT1udWxsfWZ1bmN0aW9uIEQoSCl7Yi5jYWxsKHRoaXMsSCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10'@;
put 'aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhp'@;
put 'cy5taW52KX1zZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBOPW5ldyBNKG51bGwpO3JldHVybiBOLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksTn0sc2UucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oTil7dmFyIEMsZz1OO2Rve3RoaXMuc3BsaXQoZyx0'@;
put 'aGlzLnRtcCksQz0oZz0oZz10aGlzLmltdWxLKGcpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciBTPUM8dGhpcy5uPy0xOmcudWNtcCh0aGlzLnApO3JldHVybiAwPT09Uz8oZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEpOlM+MD9nLmlzdWIodGhpcy5w'@;
put 'KTp2b2lkIDAhPT1nLnN0cmlwP2cuc3RyaXAoKTpnLl9zdHJpcCgpLGd9LHNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihOLGcpe04uaXVzaHJuKHRoaXMubiwwLGcpfSxzZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTil7cmV0dXJuIE4uaW11bCh0aGlzLmspfSxsZShoZSxzZSksaGUu'@;
put 'cHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPTQxOTQzMDMsUz1NYXRoLm1pbihOLmxlbmd0aCw5KSx2PTA7djxTO3YrKylnLndvcmRzW3ZdPU4ud29yZHNbdl07aWYoZy5sZW5ndGg9UyxOLmxlbmd0aDw9OSlyZXR1cm4gTi53b3Jkc1swXT0wLHZvaWQoTi5sZW5ndGg9'@;
put 'MSk7dmFyIHA9Ti53b3Jkc1s5XTtmb3IoZy53b3Jkc1tnLmxlbmd0aCsrXT1wJkMsdj0xMDt2PE4ubGVuZ3RoO3YrKyl7dmFyIHc9MHxOLndvcmRzW3ZdO04ud29yZHNbdi0xMF09KHcmQyk8PDR8cD4+PjIyLHA9d31OLndvcmRzW3YtMTBdPXA+Pj49MjIsTi5sZW5ndGgtPTA9PT1wJiZOLmxl'@;
put 'bmd0aD4xMD8xMDo5fSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTil7Ti53b3Jkc1tOLmxlbmd0aF09MCxOLndvcmRzW04ubGVuZ3RoKzFdPTAsTi5sZW5ndGgrPTI7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXt2YXIgUz0wfE4ud29yZHNbQ107Ti53b3Jkc1tDXT02NzEw'@;
put 'ODg2MyYoZys9OTc3KlMpLGc9NjQqUysoZy82NzEwODg2NHwwKX1yZXR1cm4gMD09PU4ud29yZHNbTi5sZW5ndGgtMV0mJihOLmxlbmd0aC0tLDA9PT1OLndvcmRzW04ubGVuZ3RoLTFdJiZOLmxlbmd0aC0tKSxOfSxsZSh1ZSxzZSksbGUoY2Usc2UpLGxlKEcsc2UpLEcucHJvdG90eXBlLmlt'@;
put 'dWxLPWZ1bmN0aW9uKE4pe2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl7dmFyIFM9MTkqKDB8Ti53b3Jkc1tDXSkrZyx2PTY3MTA4ODYzJlM7Uz4+Pj0yNixOLndvcmRzW0NdPXYsZz1TfXJldHVybiAwIT09ZyYmKE4ud29yZHNbTi5sZW5ndGgrK109ZyksTn0sTS5fcHJpbWU9ZnVu'@;
put 'Y3Rpb24oTil7aWYob2VbTl0pcmV0dXJuIG9lW05dO3ZhciBnO2lmKCJrMjU2Ij09PU4pZz1uZXcgaGU7ZWxzZSBpZigicDIyNCI9PT1OKWc9bmV3IHVlO2Vsc2UgaWYoInAxOTIiPT09TilnPW5ldyBjZTtlbHNle2lmKCJwMjU1MTkiIT09Til0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJp'@;
put 'bWUgIitOKTtnPW5ldyBHfXJldHVybiBvZVtOXT1nLGd9LGIucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShOLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxiLnBy'@;
put 'b3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihOLGcpe20oMD09KE4ubmVnYXRpdmV8Zy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShOLnJlZCYmTi5yZWQ9PT1nLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxiLnByb3RvdHlwZS5p'@;
put 'bW9kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShOKS5fZm9yY2VSZWQodGhpcyk6KEwoTixOLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLE4pfSxiLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oTil7cmV0dXJuIE4uaXNaZXJvKCk/Ti5jbG9u'@;
put 'ZSgpOnRoaXMubS5zdWIoTikuX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5hZGQoZyk7cmV0dXJuIEMuY21wKHRoaXMubSk+PTAmJkMuaXN1Yih0aGlzLm0pLEMuX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3Rv'@;
put 'dHlwZS5pYWRkPWZ1bmN0aW9uKE4sZyl7dGhpcy5fdmVyaWZ5MihOLGcpO3ZhciBDPU4uaWFkZChnKTtyZXR1cm4gQy5jbXAodGhpcy5tKT49MCYmQy5pc3ViKHRoaXMubSksQ30sYi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKE4sZyl7dGhpcy5fdmVyaWZ5MihOLGcpO3ZhciBDPU4uc3ViKGcp'@;
put 'O3JldHVybiBDLmNtcG4oMCk8MCYmQy5pYWRkKHRoaXMubSksQy5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5pc3ViKGcpO3JldHVybiBDLmNtcG4oMCk8MCYmQy5pYWRkKHRoaXMubSksQ30sYi5wcm90'@;
put 'b3R5cGUuc2hsPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoTiksdGhpcy5pbW9kKE4udXNobG4oZykpfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoTixnKSx0aGlzLmltb2QoTi5pbXVsKGcpKX0sYi5wcm90b3R5cGUubXVs'@;
put 'PWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoTixnKSx0aGlzLmltb2QoTi5tdWwoZykpfSxiLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmltdWwoTixOLmNsb25lKCkpfSxiLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubXVs'@;
put 'KE4sTil9LGIucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oTil7aWYoTi5pc1plcm8oKSlyZXR1cm4gTi5jbG9uZSgpO3ZhciBnPXRoaXMubS5hbmRsbigzKTtpZihtKGclMj09MSksMz09PWcpe3ZhciBDPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coTixD'@;
put 'KX1mb3IodmFyIFM9dGhpcy5tLnN1Ym4oMSksdj0wOyFTLmlzWmVybygpJiYwPT09Uy5hbmRsbigxKTspdisrLFMuaXVzaHJuKDEpO20oIVMuaXNaZXJvKCkpO3ZhciBwPW5ldyBNKDEpLnRvUmVkKHRoaXMpLHc9cC5yZWROZWcoKSxKPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxuZT10aGlz'@;
put 'Lm0uYml0TGVuZ3RoKCk7Zm9yKG5lPW5ldyBNKDIqbmUqbmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhuZSxKKS5jbXAodyk7KW5lLnJlZElBZGQodyk7Zm9yKHZhciBkZT10aGlzLnBvdyhuZSxTKSxmZT10aGlzLnBvdyhOLFMuYWRkbigxKS5pdXNocm4oMSkpLHhlPXRoaXMucG93KE4s'@;
put 'UyksSWU9djswIT09eGUuY21wKHApOyl7Zm9yKHZhciBGZT14ZSxPZT0wOzAhPT1GZS5jbXAocCk7T2UrKylGZT1GZS5yZWRTcXIoKTttKE9lPEllKTt2YXIgamU9dGhpcy5wb3coZGUsbmV3IE0oMSkuaXVzaGxuKEllLU9lLTEpKTtmZT1mZS5yZWRNdWwoamUpLGRlPWplLnJlZFNxcigpLHhl'@;
put 'PXhlLnJlZE11bChkZSksSWU9T2V9cmV0dXJuIGZlfSxiLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKE4pe3ZhciBnPU4uX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGcpLnJlZE5lZygpKTp0aGlzLmltb2QoZyl9LGIucHJvdG90'@;
put 'eXBlLnBvdz1mdW5jdGlvbihOLGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1nLmNtcG4oMSkpcmV0dXJuIE4uY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IE0oMSkudG9SZWQodGhpcyksU1sxXT1OO2Zvcih2YXIgdj0yO3Y8'@;
put 'Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLE4pO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1nLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1nLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPWcud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIg'@;
put 'eGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxiLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVu'@;
put 'Y3Rpb24oTil7dmFyIGc9Ti51bW9kKHRoaXMubSk7cmV0dXJuIGc9PT1OP2cuY2xvbmUoKTpnfSxiLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihOKXt2YXIgZz1OLmNsb25lKCk7cmV0dXJuIGcucmVkPW51bGwsZ30sTS5tb250PWZ1bmN0aW9uKE4pe3JldHVybiBuZXcgRChOKX0s'@;
put 'bGUoRCxiKSxELnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuaW1vZChOLnVzaGxuKHRoaXMuc2hpZnQpKX0sRC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oTil7dmFyIGc9dGhpcy5pbW9kKE4ubXVsKHRoaXMucmludikpO3JldHVybiBnLnJlZD1u'@;
put 'dWxsLGd9LEQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oTixnKXtpZihOLmlzWmVybygpfHxnLmlzWmVybygpKXJldHVybiBOLndvcmRzWzBdPTAsTi5sZW5ndGg9MSxOO3ZhciBDPU4uaW11bChnKSxTPUMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hp'@;
put 'ZnQpLm11bCh0aGlzLm0pLHY9Qy5pc3ViKFMpLml1c2hybih0aGlzLnNoaWZ0KSxwPXY7cmV0dXJuIHYuY21wKHRoaXMubSk+PTA/cD12LmlzdWIodGhpcy5tKTp2LmNtcG4oMCk8MCYmKHA9di5pYWRkKHRoaXMubSkpLHAuX2ZvcmNlUmVkKHRoaXMpfSxELnByb3RvdHlwZS5tdWw9ZnVuY3Rp'@;
put 'b24oTixnKXtpZihOLmlzWmVybygpfHxnLmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEM9Ti5tdWwoZyksUz1DLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx2PUMuaXN1YihTKS5pdXNo'@;
put 'cm4odGhpcy5zaGlmdCkscD12O3JldHVybiB2LmNtcCh0aGlzLm0pPj0wP3A9di5pc3ViKHRoaXMubSk6di5jbXBuKDApPDAmJihwPXYuaWFkZCh0aGlzLm0pKSxwLl9mb3JjZVJlZCh0aGlzKX0sRC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5pbW9kKE4uX2ludm1w'@;
put 'KHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDYwMDgyOihhdCxMZSxGKT0+e3ZhciBhZTtmdW5jdGlvbiB4KGxlKXt0aGlzLnJhbmQ9bGV9aWYoYXQuZXhwb3J0cz1mdW5jdGlvbihNKXtyZXR1cm4gYWV8fChhZT1uZXcgeChudWxs'@;
put 'KSksYWUuZ2VuZXJhdGUoTSl9LGF0LmV4cG9ydHMuUmFuZD14LHgucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLl9yYW5kKE0pfSx4LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRC'@;
put 'eXRlcyhNKTtmb3IodmFyIE89bmV3IFVpbnQ4QXJyYXkoTSksUj0wO1I8Ty5sZW5ndGg7UisrKU9bUl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gT30sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/eC5wcm90b3R5cGUu'@;
put 'X3JhbmQ9ZnVuY3Rpb24oTSl7dmFyIE89bmV3IFVpbnQ4QXJyYXkoTSk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhPKSxPfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz94LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXt2YXIgTz1u'@;
put 'ZXcgVWludDhBcnJheShNKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoTyksT306Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJih4LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7'@;
put 'dmFyIG09Rig3NzkwMyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG0ucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7eC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oTSl7cmV0dXJuIG0ucmFuZG9tQnl0ZXMoTSl9fWNhdGNoe319LDY0MDM6KGF0LExlLEYpPT57'@;
put 'dmFyIGFlPUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24geCh6KXthZS5pc0J1ZmZlcih6KXx8KHo9YWUuZnJvbSh6KSk7Zm9yKHZhciBLPXoubGVuZ3RoLzR8MCxMPW5ldyBBcnJheShLKSxrPTA7azxLO2srKylMW2tdPXoucmVhZFVJbnQzMkJFKDQqayk7cmV0dXJuIEx9ZnVuY3Rpb24gbSh6KXtm'@;
put 'b3IoOzA8ei5sZW5ndGg7eisrKXpbMF09MH1mdW5jdGlvbiBsZSh6LEssTCxrLEUpe2Zvcih2YXIgdGUsb2Usc2UsaGUsaj1MWzBdLFY9TFsxXSxCPUxbMl0sWT1MWzNdLFg9elswXV5LWzBdLFU9elsxXV5LWzFdLHE9elsyXV5LWzJdLGVlPXpbM11eS1szXSx1ZT00LGNlPTE7Y2U8RTtjZSsr'@;
put 'KXRlPWpbWD4+PjI0XV5WW1U+Pj4xNiYyNTVdXkJbcT4+PjgmMjU1XV5ZWzI1NSZlZV1eS1t1ZSsrXSxvZT1qW1U+Pj4yNF1eVltxPj4+MTYmMjU1XV5CW2VlPj4+OCYyNTVdXllbMjU1JlhdXktbdWUrK10sc2U9altxPj4+MjRdXlZbZWU+Pj4xNiYyNTVdXkJbWD4+PjgmMjU1XV5ZWzI1NSZV'@;
put 'XV5LW3VlKytdLGhlPWpbZWU+Pj4yNF1eVltYPj4+MTYmMjU1XV5CW1U+Pj44JjI1NV1eWVsyNTUmcV1eS1t1ZSsrXSxYPXRlLFU9b2UscT1zZSxlZT1oZTtyZXR1cm4gdGU9KGtbWD4+PjI0XTw8MjR8a1tVPj4+MTYmMjU1XTw8MTZ8a1txPj4+OCYyNTVdPDw4fGtbMjU1JmVlXSleS1t1ZSsr'@;
put 'XSxvZT0oa1tVPj4+MjRdPDwyNHxrW3E+Pj4xNiYyNTVdPDwxNnxrW2VlPj4+OCYyNTVdPDw4fGtbMjU1JlhdKV5LW3VlKytdLHNlPShrW3E+Pj4yNF08PDI0fGtbZWU+Pj4xNiYyNTVdPDwxNnxrW1g+Pj44JjI1NV08PDh8a1syNTUmVV0pXktbdWUrK10saGU9KGtbZWU+Pj4yNF08PDI0fGtb'@;
put 'WD4+PjE2JjI1NV08PDE2fGtbVT4+PjgmMjU1XTw8OHxrWzI1NSZxXSleS1t1ZSsrXSxbdGU+Pj49MCxvZT4+Pj0wLHNlPj4+PTAsaGU+Pj49MF19dmFyIE09WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLE89ZnVuY3Rpb24oKXtmb3IodmFyIHo9bmV3IEFycmF5KDI1NiksSz0wO0s8'@;
put 'MjU2O0srKyl6W0tdPUs8MTI4P0s8PDE6Szw8MV4yODM7Zm9yKHZhciBMPVtdLGs9W10sRT1bW10sW10sW10sW11dLGo9W1tdLFtdLFtdLFtdXSxWPTAsQj0wLFk9MDtZPDI1NjsrK1kpe3ZhciBYPUJeQjw8MV5CPDwyXkI8PDNeQjw8NDtMW1ZdPVg9WD4+PjheMjU1JlheOTksa1tYXT1WO3Zh'@;
put 'ciBVPXpbVl0scT16W1VdLGVlPXpbcV0sdGU9MjU3KnpbWF1eMTY4NDMwMDgqWDtFWzBdW1ZdPXRlPDwyNHx0ZT4+PjgsRVsxXVtWXT10ZTw8MTZ8dGU+Pj4xNixFWzJdW1ZdPXRlPDw4fHRlPj4+MjQsRVszXVtWXT10ZSxqWzBdW1hdPSh0ZT0xNjg0MzAwOSplZV42NTUzNypxXjI1NypVXjE2'@;
put 'ODQzMDA4KlYpPDwyNHx0ZT4+PjgsalsxXVtYXT10ZTw8MTZ8dGU+Pj4xNixqWzJdW1hdPXRlPDw4fHRlPj4+MjQsalszXVtYXT10ZSwwPT09Vj9WPUI9MTooVj1VXnpbelt6W2VlXlVdXV0sQl49elt6W0JdXSl9cmV0dXJue1NCT1g6TCxJTlZfU0JPWDprLFNVQl9NSVg6RSxJTlZfU1VCX01J'@;
put 'WDpqfX0oKTtmdW5jdGlvbiBSKHope3RoaXMuX2tleT14KHopLHRoaXMuX3Jlc2V0KCl9Ui5ibG9ja1NpemU9MTYsUi5rZXlTaXplPTMyLFIucHJvdG90eXBlLmJsb2NrU2l6ZT1SLmJsb2NrU2l6ZSxSLnByb3RvdHlwZS5rZXlTaXplPVIua2V5U2l6ZSxSLnByb3RvdHlwZS5fcmVzZXQ9ZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIHo9dGhpcy5fa2V5LEs9ei5sZW5ndGgsTD1LKzYsaz00KihMKzEpLEU9W10saj0wO2o8SztqKyspRVtqXT16W2pdO2ZvcihqPUs7ajxrO2orKyl7dmFyIFY9RVtqLTFdO2olSz09MD8oVj1PLlNCT1hbKFY9Vjw8OHxWPj4+MjQpPj4+MjRdPDwyNHxPLlNCT1hbVj4+'@;
put 'PjE2JjI1NV08PDE2fE8uU0JPWFtWPj4+OCYyNTVdPDw4fE8uU0JPWFsyNTUmVl0sVl49TVtqL0t8MF08PDI0KTpLPjYmJmolSz09NCYmKFY9Ty5TQk9YW1Y+Pj4yNF08PDI0fE8uU0JPWFtWPj4+MTYmMjU1XTw8MTZ8Ty5TQk9YW1Y+Pj44JjI1NV08PDh8Ty5TQk9YWzI1NSZWXSksRVtqXT1F'@;
put 'W2otS11eVn1mb3IodmFyIEI9W10sWT0wO1k8aztZKyspe3ZhciBYPWstWSxVPUVbWC0oWSU0PzA6NCldO0JbWV09WTw0fHxYPD00P1U6Ty5JTlZfU1VCX01JWFswXVtPLlNCT1hbVT4+PjI0XV1eTy5JTlZfU1VCX01JWFsxXVtPLlNCT1hbVT4+PjE2JjI1NV1dXk8uSU5WX1NVQl9NSVhbMl1b'@;
put 'Ty5TQk9YW1U+Pj44JjI1NV1dXk8uSU5WX1NVQl9NSVhbM11bTy5TQk9YWzI1NSZVXV19dGhpcy5fblJvdW5kcz1MLHRoaXMuX2tleVNjaGVkdWxlPUUsdGhpcy5faW52S2V5U2NoZWR1bGU9Qn0sUi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKHope3JldHVybiBsZSh6PXgo'@;
put 'eiksdGhpcy5fa2V5U2NoZWR1bGUsTy5TVUJfTUlYLE8uU0JPWCx0aGlzLl9uUm91bmRzKX0sUi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKHope3ZhciBLPXRoaXMuZW5jcnlwdEJsb2NrUmF3KHopLEw9YWUuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMyQkUo'@;
put 'S1swXSwwKSxMLndyaXRlVUludDMyQkUoS1sxXSw0KSxMLndyaXRlVUludDMyQkUoS1syXSw4KSxMLndyaXRlVUludDMyQkUoS1szXSwxMiksTH0sUi5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKHope3ZhciBLPSh6PXgoeikpWzFdO3pbMV09elszXSx6WzNdPUs7dmFyIEw9bGUo'@;
put 'eix0aGlzLl9pbnZLZXlTY2hlZHVsZSxPLklOVl9TVUJfTUlYLE8uSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksaz1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGsud3JpdGVVSW50MzJCRShMWzBdLDApLGsud3JpdGVVSW50MzJCRShMWzNdLDQpLGsud3JpdGVVSW50MzJCRShMWzJdLDgpLGsu'@;
put 'd3JpdGVVSW50MzJCRShMWzFdLDEyKSxrfSxSLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe20odGhpcy5fa2V5U2NoZWR1bGUpLG0odGhpcy5faW52S2V5U2NoZWR1bGUpLG0odGhpcy5fa2V5KX0sYXQuZXhwb3J0cy5BRVM9Un0sNTYwODc6KGF0LExlLEYpPT57dmFyIGFlPUYoNjQwMyks'@;
put 'eD1GKDg0MykuQnVmZmVyLG09Rig4NjQyMCksbGU9Rig2NjY5OCksTT1GKDE1MDMpLE89Rig2MzYzNiksUj1GKDkxMDcpO2Z1bmN0aW9uIEwoayxFLGosVil7bS5jYWxsKHRoaXMpO3ZhciBCPXguYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IGFlLkFFUyhFKTt2YXIgWT10aGlzLl9jaXBo'@;
put 'ZXIuZW5jcnlwdEJsb2NrKEIpO3RoaXMuX2doYXNoPW5ldyBNKFkpLGo9ZnVuY3Rpb24gSyhrLEUsail7aWYoMTI9PT1FLmxlbmd0aClyZXR1cm4gay5fZmluSUQ9eC5jb25jYXQoW0UseC5mcm9tKFswLDAsMCwxXSldKSx4LmNvbmNhdChbRSx4LmZyb20oWzAsMCwwLDJdKV0pO3ZhciBWPW5l'@;
put 'dyBNKGopLEI9RS5sZW5ndGgsWT1CJTE2O1YudXBkYXRlKEUpLFkmJlYudXBkYXRlKHguYWxsb2MoWT0xNi1ZLDApKSxWLnVwZGF0ZSh4LmFsbG9jKDgsMCkpO3ZhciBYPTgqQixVPXguYWxsb2MoOCk7VS53cml0ZVVJbnRCRShYLDAsOCksVi51cGRhdGUoVSksay5fZmluSUQ9Vi5zdGF0ZTt2'@;
put 'YXIgcT14LmZyb20oay5fZmluSUQpO3JldHVybiBSKHEpLHF9KHRoaXMsaixZKSx0aGlzLl9wcmV2PXguZnJvbShqKSx0aGlzLl9jYWNoZT14LmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1WLHRoaXMuX2FsZW49MCx0aGlzLl9s'@;
put 'ZW49MCx0aGlzLl9tb2RlPWssdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1sZShMLG0pLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oayl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIEU9MTYtdGhpcy5fYWxlbiUxNjtFPDE2JiYoRT14LmFsbG9jKEUs'@;
put 'MCksdGhpcy5fZ2hhc2gudXBkYXRlKEUpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIGo9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsayk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P2s6aiksdGhpcy5fbGVuKz1rLmxlbmd0aCxqfSxMLnByb3RvdHlwZS5fZmluYWw9ZnVu'@;
put 'Y3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBrPU8odGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlz'@;
put 'Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24geihrLEUpe3ZhciBqPTA7ay5sZW5ndGghPT1FLmxlbmd0aCYmaisrO2Zvcih2YXIgVj1NYXRoLm1pbihrLmxlbmd0aCxFLmxlbmd0aCksQj0wO0I8VjsrK0Ipais9a1tCXV5FW0Jd'@;
put 'O3JldHVybiBqfShrLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1rLHRoaXMuX2NpcGhlci5zY3J1YigpfSxMLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9u'@;
put 'KCl7aWYodGhpcy5fZGVjcnlwdHx8IXguaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxMLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0'@;
put 'aW9uKEUpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPUV9LEwucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihFKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoRSksdGhpcy5fYWxlbis9RS5sZW5ndGh9LGF0LmV4cG9ydHM9TH0sODI0ODk6KGF0LExlLEYpPT57dmFyIGFlPUYoMTI2ODkpLHg9Rig1MDA0NiksbT1GKDQ0OTQ2'@;
put 'KTtMZS5jcmVhdGVDaXBoZXI9TGUuQ2lwaGVyPWFlLmNyZWF0ZUNpcGhlcixMZS5jcmVhdGVDaXBoZXJpdj1MZS5DaXBoZXJpdj1hZS5jcmVhdGVDaXBoZXJpdixMZS5jcmVhdGVEZWNpcGhlcj1MZS5EZWNpcGhlcj14LmNyZWF0ZURlY2lwaGVyLExlLmNyZWF0ZURlY2lwaGVyaXY9TGUuRGVj'@;
put 'aXBoZXJpdj14LmNyZWF0ZURlY2lwaGVyaXYsTGUubGlzdENpcGhlcnM9TGUuZ2V0Q2lwaGVycz1mdW5jdGlvbiBsZSgpe3JldHVybiBPYmplY3Qua2V5cyhtKX19LDUwMDQ2OihhdCxMZSxGKT0+e3ZhciBhZT1GKDU2MDg3KSx4PUYoODQzKS5CdWZmZXIsbT1GKDEyNDIxKSxsZT1GKDg5MzU0'@;
put 'KSxNPUYoODY0MjApLE89Rig2NDAzKSxSPUYoMzY1MDUpO2Z1bmN0aW9uIEsoVixCLFkpe00uY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTCx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IE8uQUVTKEIpLHRoaXMuX3ByZXY9eC5mcm9tKFkpLHRoaXMuX21vZGU9Vix0aGlz'@;
put 'Ll9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBMKCl7dGhpcy5jYWNoZT14LmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEUoVixCLFkpe3ZhciBYPW1bVi50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIFkmJihZPXguZnJvbShZKSksIkdDTSIhPT1YLm1vZGUmJlkubGVuZ3RoIT09WC5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK1kubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIEImJihCPXguZnJvbShCKSksQi5sZW5ndGghPT1YLmtleS84KXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0IubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVgudHlwZT9uZXcgbGUoWC5tb2R1bGUsQixZLCEwKToiYXV0aCI9PT1YLnR5cGU/bmV3IGFlKFgubW9kdWxlLEIsWSwhMCk6bmV3IEsoWC5tb2R1bGUsQixZKX1GKDY2Njk4KShL'@;
put 'LE0pLEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5fY2FjaGUuYWRkKFYpO2Zvcih2YXIgQixZLFg9W107Qj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOylZPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLEIpLFgucHVzaChZKTtyZXR1cm4geC5jb25jYXQo'@;
put 'WCl9LEsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBWPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIGsoVil7dmFyIEI9VlsxNV07aWYoQjwxfHxCPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0'@;
put 'YSIpO2Zvcih2YXIgWT0tMTsrK1k8QjspaWYoVltZKygxNi1CKV0hPT1CKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09QilyZXR1cm4gVi5zbGljZSgwLDE2LUIpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxWKSk7aWYoVil0aHJvdyBuZXcgRXJy'@;
put 'b3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxLLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFWLHRoaXN9LEwucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXt0aGlzLmNhY2hlPXguY29uY2F0KFt0'@;
put 'aGlzLmNhY2hlLFZdKX0sTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFYpe3ZhciBCO2lmKFYpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBCPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxCfWVsc2UgaWYodGhpcy5jYWNoZS5s'@;
put 'ZW5ndGg+PTE2KXJldHVybiBCPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxCO3JldHVybiBudWxsfSxMLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxMZS5jcmVh'@;
put 'dGVEZWNpcGhlcj1mdW5jdGlvbiBqKFYsQil7dmFyIFk9bVtWLnRvTG93ZXJDYXNlKCldO2lmKCFZKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBYPVIoQiwhMSxZLmtleSxZLml2KTtyZXR1cm4gRShWLFgua2V5LFguaXYpfSxMZS5jcmVhdGVEZWNpcGhl'@;
put 'cml2PUV9LDEyNjg5OihhdCxMZSxGKT0+e3ZhciBhZT1GKDEyNDIxKSx4PUYoNTYwODcpLG09Rig4NDMpLkJ1ZmZlcixsZT1GKDg5MzU0KSxNPUYoODY0MjApLE89Rig2NDAzKSxSPUYoMzY1MDUpO2Z1bmN0aW9uIEsoVixCLFkpe00uY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgayx0aGlz'@;
put 'Ll9jaXBoZXI9bmV3IE8uQUVTKEIpLHRoaXMuX3ByZXY9bS5mcm9tKFkpLHRoaXMuX21vZGU9Vix0aGlzLl9hdXRvcGFkZGluZz0hMH1GKDY2Njk4KShLLE0pLEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5fY2FjaGUuYWRkKFYpO2Zvcih2YXIgQixZLFg9W107Qj10aGlz'@;
put 'Ll9jYWNoZS5nZXQoKTspWT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxCKSxYLnB1c2goWSk7cmV0dXJuIG0uY29uY2F0KFgpfTt2YXIgTD1tLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBrKCl7dGhpcy5jYWNoZT1tLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEUoVixCLFkpe3ZhciBYPWFlW1Yu'@;
put 'dG9Mb3dlckNhc2UoKV07aWYoIVgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBCJiYoQj1tLmZyb20oQikpLEIubGVuZ3RoIT09WC5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitCLmxl'@;
put 'bmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1tLmZyb20oWSkpLCJHQ00iIT09WC5tb2RlJiZZLmxlbmd0aCE9PVguaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitZLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1YLnR5cGU/bmV3IGxlKFgubW9kdWxl'@;
put 'LEIsWSk6ImF1dGgiPT09WC50eXBlP25ldyB4KFgubW9kdWxlLEIsWSk6bmV3IEsoWC5tb2R1bGUsQixZKX1LLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBWPXRoaXMuX21vZGUuZW5jcnlw'@;
put 'dCh0aGlzLFYpLHRoaXMuX2NpcGhlci5zY3J1YigpLFY7aWYoIVYuZXF1YWxzKEwpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEsucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFYpe3Jl'@;
put 'dHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVYsdGhpc30say5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFYpe3RoaXMuY2FjaGU9bS5jb25jYXQoW3RoaXMuY2FjaGUsVl0pfSxrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIFY9dGhpcy5jYWNo'@;
put 'ZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxWfXJldHVybiBudWxsfSxrLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgVj0xNi10aGlzLmNhY2hlLmxlbmd0aCxCPW0uYWxsb2NVbnNhZmUoViksWT0tMTsrK1k8VjspQi53cml0'@;
put 'ZVVJbnQ4KFYsWSk7cmV0dXJuIG0uY29uY2F0KFt0aGlzLmNhY2hlLEJdKX0sTGUuY3JlYXRlQ2lwaGVyaXY9RSxMZS5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gaihWLEIpe3ZhciBZPWFlW1YudG9Mb3dlckNhc2UoKV07aWYoIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0'@;
put 'eXBlIik7dmFyIFg9UihCLCExLFkua2V5LFkuaXYpO3JldHVybiBFKFYsWC5rZXksWC5pdil9fSwxNTAzOihhdCxMZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9YWUuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gbGUoTyl7dmFyIFI9YWUuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBSLndyaXRl'@;
put 'VUludDMyQkUoT1swXT4+PjAsMCksUi53cml0ZVVJbnQzMkJFKE9bMV0+Pj4wLDQpLFIud3JpdGVVSW50MzJCRShPWzJdPj4+MCw4KSxSLndyaXRlVUludDMyQkUoT1szXT4+PjAsMTIpLFJ9ZnVuY3Rpb24gTShPKXt0aGlzLmg9Tyx0aGlzLnN0YXRlPWFlLmFsbG9jKDE2LDApLHRoaXMuY2Fj'@;
put 'aGU9YWUuYWxsb2NVbnNhZmUoMCl9TS5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oTyl7Zm9yKHZhciBSPS0xOysrUjxPLmxlbmd0aDspdGhpcy5zdGF0ZVtSXV49T1tSXTt0aGlzLl9tdWx0aXBseSgpfSxNLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHosTCxPPWZ1'@;
put 'bmN0aW9uIG0oTyl7cmV0dXJuW08ucmVhZFVJbnQzMkJFKDApLE8ucmVhZFVJbnQzMkJFKDQpLE8ucmVhZFVJbnQzMkJFKDgpLE8ucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksUj1bMCwwLDAsMF0saz0tMTsrK2s8MTI4Oyl7Zm9yKDAhPSh0aGlzLnN0YXRlW35+KGsvOCldJjE8PDctayU4'@;
put 'KSYmKFJbMF1ePU9bMF0sUlsxXV49T1sxXSxSWzJdXj1PWzJdLFJbM11ePU9bM10pLEw9MCE9KDEmT1szXSksej0zO3o+MDt6LS0pT1t6XT1PW3pdPj4+MXwoMSZPW3otMV0pPDwzMTtPWzBdPU9bMF0+Pj4xLEwmJihPWzBdPU9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1sZShSKX0sTS5wcm90'@;
put 'b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8pe3RoaXMuY2FjaGU9YWUuY29uY2F0KFt0aGlzLmNhY2hlLE9dKTtmb3IodmFyIFI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylSPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKFIp'@;
put 'fSxNLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihPLFIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChhZS5jb25jYXQoW3RoaXMuY2FjaGUseF0sMTYpKSx0aGlzLmdoYXNoKGxlKFswLE8sMCxSXSkpLHRoaXMuc3RhdGV9LGF0LmV4cG9ydHM9TX0sOTEwNzphdD0+e2F0'@;
put 'LmV4cG9ydHM9ZnVuY3Rpb24gTGUoRil7Zm9yKHZhciB4LGFlPUYubGVuZ3RoO2FlLS07KXtpZigyNTUhPT0oeD1GLnJlYWRVSW50OChhZSkpKXt4KyssRi53cml0ZVVJbnQ4KHgsYWUpO2JyZWFrfUYud3JpdGVVSW50OCgwLGFlKX19fSwzMTE3NTooYXQsTGUsRik9Pnt2YXIgYWU9Rig2MzYz'@;
put 'Nik7TGUuZW5jcnlwdD1mdW5jdGlvbih4LG0pe3ZhciBsZT1hZShtLHguX3ByZXYpO3JldHVybiB4Ll9wcmV2PXguX2NpcGhlci5lbmNyeXB0QmxvY2sobGUpLHguX3ByZXZ9LExlLmRlY3J5cHQ9ZnVuY3Rpb24oeCxtKXt2YXIgbGU9eC5fcHJldjt4Ll9wcmV2PW07dmFyIE09eC5fY2lwaGVy'@;
put 'LmRlY3J5cHRCbG9jayhtKTtyZXR1cm4gYWUoTSxsZSl9fSw0MzYzMTooYXQsTGUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNjM2MzYpO2Z1bmN0aW9uIG0obGUsTSxPKXt2YXIgUj1NLmxlbmd0aCx6PXgoTSxsZS5fY2FjaGUpO3JldHVybiBsZS5fY2FjaGU9bGUuX2NhY2hlLnNs'@;
put 'aWNlKFIpLGxlLl9wcmV2PWFlLmNvbmNhdChbbGUuX3ByZXYsTz9NOnpdKSx6fUxlLmVuY3J5cHQ9ZnVuY3Rpb24obGUsTSxPKXtmb3IodmFyIHosUj1hZS5hbGxvY1Vuc2FmZSgwKTtNLmxlbmd0aDspe2lmKDA9PT1sZS5fY2FjaGUubGVuZ3RoJiYobGUuX2NhY2hlPWxlLl9jaXBoZXIuZW5j'@;
put 'cnlwdEJsb2NrKGxlLl9wcmV2KSxsZS5fcHJldj1hZS5hbGxvY1Vuc2FmZSgwKSksIShsZS5fY2FjaGUubGVuZ3RoPD1NLmxlbmd0aCkpe1I9YWUuY29uY2F0KFtSLG0obGUsTSxPKV0pO2JyZWFrfVI9YWUuY29uY2F0KFtSLG0obGUsTS5zbGljZSgwLHo9bGUuX2NhY2hlLmxlbmd0aCksTyld'@;
put 'KSxNPU0uc2xpY2Uoeil9cmV0dXJuIFJ9fSwzMzg5MjooYXQsTGUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KGxlLE0sTyl7Zm9yKHZhciBrLEUsej0tMSxMPTA7Kyt6PDg7KUwrPSgxMjgmKEU9bGUuX2NpcGhlci5lbmNyeXB0QmxvY2sobGUuX3ByZXYpWzBdXihrPU0m'@;
put 'MTw8Ny16PzEyODowKSkpPj56JTgsbGUuX3ByZXY9bShsZS5fcHJldixPP2s6RSk7cmV0dXJuIEx9ZnVuY3Rpb24gbShsZSxNKXt2YXIgTz1sZS5sZW5ndGgsUj0tMSx6PWFlLmFsbG9jVW5zYWZlKGxlLmxlbmd0aCk7Zm9yKGxlPWFlLmNvbmNhdChbbGUsYWUuZnJvbShbTV0pXSk7KytSPE87'@;
put 'KXpbUl09bGVbUl08PDF8bGVbUisxXT4+NztyZXR1cm4gen1MZS5lbmNyeXB0PWZ1bmN0aW9uKGxlLE0sTyl7Zm9yKHZhciBSPU0ubGVuZ3RoLHo9YWUuYWxsb2NVbnNhZmUoUiksSz0tMTsrK0s8UjspeltLXT14KGxlLE1bS10sTyk7cmV0dXJuIHp9fSwzNjc4NzooYXQsTGUsRik9Pnt2YXIg'@;
put 'YWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KG0sbGUsTSl7dmFyIFI9bS5fY2lwaGVyLmVuY3J5cHRCbG9jayhtLl9wcmV2KVswXV5sZTtyZXR1cm4gbS5fcHJldj1hZS5jb25jYXQoW20uX3ByZXYuc2xpY2UoMSksYWUuZnJvbShbTT9sZTpSXSldKSxSfUxlLmVuY3J5cHQ9ZnVuY3Rpb24o'@;
put 'bSxsZSxNKXtmb3IodmFyIE89bGUubGVuZ3RoLFI9YWUuYWxsb2NVbnNhZmUoTyksej0tMTsrK3o8TzspUlt6XT14KG0sbGVbel0sTSk7cmV0dXJuIFJ9fSw4NTI2ODooYXQsTGUsRik9Pnt2YXIgYWU9Rig2MzYzNikseD1GKDg0MykuQnVmZmVyLG09Rig5MTA3KTtmdW5jdGlvbiBsZShPKXt2'@;
put 'YXIgUj1PLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KE8uX3ByZXYpO3JldHVybiBtKE8uX3ByZXYpLFJ9TGUuZW5jcnlwdD1mdW5jdGlvbihPLFIpe3ZhciB6PU1hdGguY2VpbChSLmxlbmd0aC8xNiksSz1PLl9jYWNoZS5sZW5ndGg7Ty5fY2FjaGU9eC5jb25jYXQoW08uX2NhY2hlLHguYWxs'@;
put 'b2NVbnNhZmUoMTYqeildKTtmb3IodmFyIEw9MDtMPHo7TCsrKXt2YXIgaz1sZShPKSxFPUsrMTYqTDtPLl9jYWNoZS53cml0ZVVJbnQzMkJFKGtbMF0sRSswKSxPLl9jYWNoZS53cml0ZVVJbnQzMkJFKGtbMV0sRSs0KSxPLl9jYWNoZS53cml0ZVVJbnQzMkJFKGtbMl0sRSs4KSxPLl9jYWNo'@;
put 'ZS53cml0ZVVJbnQzMkJFKGtbM10sRSsxMil9dmFyIGo9Ty5fY2FjaGUuc2xpY2UoMCxSLmxlbmd0aCk7cmV0dXJuIE8uX2NhY2hlPU8uX2NhY2hlLnNsaWNlKFIubGVuZ3RoKSxhZShSLGopfX0sNDU5OTU6KGF0LExlKT0+e0xlLmVuY3J5cHQ9ZnVuY3Rpb24oRixhZSl7cmV0dXJuIEYuX2Np'@;
put 'cGhlci5lbmNyeXB0QmxvY2soYWUpfSxMZS5kZWNyeXB0PWZ1bmN0aW9uKEYsYWUpe3JldHVybiBGLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGFlKX19LDEyNDIxOihhdCxMZSxGKT0+e3ZhciBhZT17RUNCOkYoNDU5OTUpLENCQzpGKDMxMTc1KSxDRkI6Rig0MzYzMSksQ0ZCODpGKDM2Nzg3KSxD'@;
put 'RkIxOkYoMzM4OTIpLE9GQjpGKDM0NTMyKSxDVFI6Rig4NTI2OCksR0NNOkYoODUyNjgpfSx4PUYoNDQ5NDYpO2Zvcih2YXIgbSBpbiB4KXhbbV0ubW9kdWxlPWFlW3hbbV0ubW9kZV07YXQuZXhwb3J0cz14fSwzNDUzMjooYXQsTGUsRik9Pnt2YXIgYWU9Rig2MzYzNik7ZnVuY3Rpb24geCht'@;
put 'KXtyZXR1cm4gbS5fcHJldj1tLl9jaXBoZXIuZW5jcnlwdEJsb2NrKG0uX3ByZXYpLG0uX3ByZXZ9TGUuZW5jcnlwdD1mdW5jdGlvbihtLGxlKXtmb3IoO20uX2NhY2hlLmxlbmd0aDxsZS5sZW5ndGg7KW0uX2NhY2hlPUJ1ZmZlci5jb25jYXQoW20uX2NhY2hlLHgobSldKTt2YXIgTT1tLl9j'@;
put 'YWNoZS5zbGljZSgwLGxlLmxlbmd0aCk7cmV0dXJuIG0uX2NhY2hlPW0uX2NhY2hlLnNsaWNlKGxlLmxlbmd0aCksYWUobGUsTSl9fSw4OTM1NDooYXQsTGUsRik9Pnt2YXIgYWU9Rig2NDAzKSx4PUYoODQzKS5CdWZmZXIsbT1GKDg2NDIwKTtmdW5jdGlvbiBNKE8sUix6LEspe20uY2FsbCh0'@;
put 'aGlzKSx0aGlzLl9jaXBoZXI9bmV3IGFlLkFFUyhSKSx0aGlzLl9wcmV2PXguZnJvbSh6KSx0aGlzLl9jYWNoZT14LmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1LLHRoaXMuX21vZGU9T31GKDY2Njk4KShNLG0pLE0ucHJvdG90'@;
put 'eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE8sdGhpcy5fZGVjcnlwdCl9LE0ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxhdC5leHBvcnRzPU19LDI1NjAwOihhdCxMZSxGKT0+e3ZhciBhZT1G'@;
put 'KDE0OTQ4KSx4PUYoODI0ODkpLG09RigxMjQyMSksbGU9Rig4OTQwMiksTT1GKDM2NTA1KTtmdW5jdGlvbiB6KGssRSxqKXtpZihrPWsudG9Mb3dlckNhc2UoKSxtW2tdKXJldHVybiB4LmNyZWF0ZUNpcGhlcml2KGssRSxqKTtpZihsZVtrXSlyZXR1cm4gbmV3IGFlKHtrZXk6RSxpdjpqLG1v'@;
put 'ZGU6a30pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIEsoayxFLGope2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10pcmV0dXJuIHguY3JlYXRlRGVjaXBoZXJpdihrLEUsaik7aWYobGVba10pcmV0dXJuIG5ldyBhZSh7a2V5OkUsaXY6aixtb2Rl'@;
put 'OmssZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfUxlLmNyZWF0ZUNpcGhlcj1MZS5DaXBoZXI9ZnVuY3Rpb24gTyhrLEUpe3ZhciBqLFY7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlqPW1ba10ua2V5LFY9bVtrXS5pdjtlbHNle2lmKCFs'@;
put 'ZVtrXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtqPTgqbGVba10ua2V5LFY9bGVba10uaXZ9dmFyIEI9TShFLCExLGosVik7cmV0dXJuIHooayxCLmtleSxCLml2KX0sTGUuY3JlYXRlQ2lwaGVyaXY9TGUuQ2lwaGVyaXY9eixMZS5jcmVhdGVEZWNpcGhlcj1M'@;
put 'ZS5EZWNpcGhlcj1mdW5jdGlvbiBSKGssRSl7dmFyIGosVjtpZihrPWsudG9Mb3dlckNhc2UoKSxtW2tdKWo9bVtrXS5rZXksVj1tW2tdLml2O2Vsc2V7aWYoIWxlW2tdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2o9OCpsZVtrXS5rZXksVj1sZVtrXS5pdn12'@;
put 'YXIgQj1NKEUsITEsaixWKTtyZXR1cm4gSyhrLEIua2V5LEIuaXYpfSxMZS5jcmVhdGVEZWNpcGhlcml2PUxlLkRlY2lwaGVyaXY9SyxMZS5saXN0Q2lwaGVycz1MZS5nZXRDaXBoZXJzPWZ1bmN0aW9uIEwoKXtyZXR1cm4gT2JqZWN0LmtleXMobGUpLmNvbmNhdCh4LmdldENpcGhlcnMoKSl9'@;
put 'fSwxNDk0ODooYXQsTGUsRik9Pnt2YXIgYWU9Rig4NjQyMCkseD1GKDQwMTMyKSxtPUYoNjY2OTgpLGxlPUYoODQzKS5CdWZmZXIsTT17ImRlcy1lZGUzLWNiYyI6eC5DQkMuaW5zdGFudGlhdGUoeC5FREUpLCJkZXMtZWRlMyI6eC5FREUsImRlcy1lZGUtY2JjIjp4LkNCQy5pbnN0YW50aWF0'@;
put 'ZSh4LkVERSksImRlcy1lZGUiOnguRURFLCJkZXMtY2JjIjp4LkNCQy5pbnN0YW50aWF0ZSh4LkRFUyksImRlcy1lY2IiOnguREVTfTtmdW5jdGlvbiBPKFIpe2FlLmNhbGwodGhpcyk7dmFyIEwsej1SLm1vZGUudG9Mb3dlckNhc2UoKSxLPU1bel07TD1SLmRlY3J5cHQ/ImRlY3J5cHQiOiJl'@;
put 'bmNyeXB0Ijt2YXIgaz1SLmtleTtsZS5pc0J1ZmZlcihrKXx8KGs9bGUuZnJvbShrKSksKCJkZXMtZWRlIj09PXp8fCJkZXMtZWRlLWNiYyI9PT16KSYmKGs9bGUuY29uY2F0KFtrLGsuc2xpY2UoMCw4KV0pKTt2YXIgRT1SLml2O2xlLmlzQnVmZmVyKEUpfHwoRT1sZS5mcm9tKEUpKSx0aGlz'@;
put 'Ll9kZXM9Sy5jcmVhdGUoe2tleTprLGl2OkUsdHlwZTpMfSl9TS5kZXM9TVsiZGVzLWNiYyJdLE0uZGVzMz1NWyJkZXMtZWRlMy1jYmMiXSxhdC5leHBvcnRzPU8sbShPLGFlKSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBsZS5mcm9tKHRoaXMuX2Rlcy51cGRhdGUo'@;
put 'UikpfSxPLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbGUuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw4OTQwMjooYXQsTGUpPT57TGVbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sTGVbImRlcy1jYmMiXT1MZS5kZXM9e2tleTo4LGl2Ojh9LExlWyJkZXMtZWRlMy1jYmMi'@;
put 'XT1MZS5kZXMzPXtrZXk6MjQsaXY6OH0sTGVbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxMZVsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LExlWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sNzE5NDY6KGF0LExlLEYpPT57dmFyIGFlPUYoNjI2NjIpLHg9Rig0NDAxOSk7ZnVuY3Rp'@;
put 'b24gbGUoTyl7dmFyIHosUj1PLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IGFlKHgoUikpfXdoaWxlKHouY21wKE8ubW9kdWx1cyk+PTB8fCF6LnVtb2QoTy5wcmltZTEpfHwhei51bW9kKE8ucHJpbWUyKSk7cmV0dXJuIHp9ZnVuY3Rpb24gTShPLFIpe3ZhciB6PWZ1bmN0aW9uIG0o'@;
put 'Tyl7dmFyIFI9bGUoTyk7cmV0dXJue2JsaW5kZXI6Ui50b1JlZChhZS5tb250KE8ubW9kdWx1cykpLnJlZFBvdyhuZXcgYWUoTy5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ui5pbnZtKE8ubW9kdWx1cyl9fShSKSxLPVIubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcg'@;
put 'YWUoTykubXVsKHouYmxpbmRlcikudW1vZChSLm1vZHVsdXMpLGs9TC50b1JlZChhZS5tb250KFIucHJpbWUxKSksRT1MLnRvUmVkKGFlLm1vbnQoUi5wcmltZTIpKSxqPVIuY29lZmZpY2llbnQsVj1SLnByaW1lMSxCPVIucHJpbWUyLFk9ay5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQo'@;
put 'KSxYPUUucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCksVT1ZLmlzdWIoWCkuaW11bChqKS51bW9kKFYpLmltdWwoQik7cmV0dXJuIFguaWFkZChVKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKFIubW9kdWx1cykudG9BcnJheUxpa2UoQnVmZmVyLCJiZSIsSyl9TS5nZXRyPWxlLGF0LmV4'@;
put 'cG9ydHM9TX0sODE2OTk6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9Rig3NTIwNyl9LDI3Njg2OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoOTYzNjIpLG09Rig5Njc0NSksbGU9Rig2NjY5OCksTT1GKDYzNjAyKSxPPUYoNTEx'@;
put 'NzMpLFI9Rig3NTIwNyk7ZnVuY3Rpb24geihFKXttLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGo9UltFXTtpZighail0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1qLmhhc2gsdGhpcy5faGFzaD14KGouaGFzaCksdGhpcy5fdGFnPWou'@;
put 'aWQsdGhpcy5fc2lnblR5cGU9ai5zaWdufWZ1bmN0aW9uIEsoRSl7bS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBqPVJbRV07aWYoIWopdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD14KGouaGFzaCksdGhpcy5fdGFnPWouaWQsdGhpcy5fc2ln'@;
put 'blR5cGU9ai5zaWdufWZ1bmN0aW9uIEwoRSl7cmV0dXJuIG5ldyB6KEUpfWZ1bmN0aW9uIGsoRSl7cmV0dXJuIG5ldyBLKEUpfU9iamVjdC5rZXlzKFIpLmZvckVhY2goZnVuY3Rpb24oRSl7UltFXS5pZD1hZS5mcm9tKFJbRV0uaWQsImhleCIpLFJbRS50b0xvd2VyQ2FzZSgpXT1SW0VdfSks'@;
put 'bGUoeixtLldyaXRhYmxlKSx6LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oaixWLEIpe3RoaXMuX2hhc2gudXBkYXRlKGopLEIoKX0sei5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGosVil7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2Ygaj9hZS5mcm9tKGos'@;
put 'Vik6aiksdGhpc30sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihqLFYpe3RoaXMuZW5kKCk7dmFyIEI9dGhpcy5faGFzaC5kaWdlc3QoKSxZPU0oQixqLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFY/WS50b1N0cmluZyhWKTpZfSxsZShLLG0uV3Jp'@;
put 'dGFibGUpLEsucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihqLFYsQil7dGhpcy5faGFzaC51cGRhdGUoaiksQigpfSxLLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oaixWKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBqP2FlLmZyb20oaixWKTpqKSx0aGlz'@;
put 'fSxLLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oaixWLEIpe3ZhciBZPSJzdHJpbmciPT10eXBlb2YgVj9hZS5mcm9tKFYsQik6Vjt0aGlzLmVuZCgpO3ZhciBYPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIE8oWSxYLGosdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sYXQuZXhwb3J0'@;
put 'cz17U2lnbjpMLFZlcmlmeTprLGNyZWF0ZVNpZ246TCxjcmVhdGVWZXJpZnk6a319LDYzNjAyOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoODU4MjUpLG09Rig3MTk0NiksbGU9Rig4ODY1MSkuZWMsTT1GKDYyNjYyKSxPPUYoODc5ODMpLFI9Rigx'@;
put 'MzA4KTtmdW5jdGlvbiBqKFUscSxlZSx0ZSl7aWYoKFU9YWUuZnJvbShVLnRvQXJyYXkoKSkpLmxlbmd0aDxxLmJ5dGVMZW5ndGgoKSl7dmFyIG9lPWFlLmFsbG9jKHEuYnl0ZUxlbmd0aCgpLVUubGVuZ3RoKTtVPWFlLmNvbmNhdChbb2UsVV0pfXZhciBzZT1lZS5sZW5ndGgsaGU9ZnVuY3Rp'@;
put 'b24gQihVLHEpe1U9KFU9VihVLHEpKS5tb2QocSk7dmFyIGVlPWFlLmZyb20oVS50b0FycmF5KCkpO2lmKGVlLmxlbmd0aDxxLmJ5dGVMZW5ndGgoKSl7dmFyIHRlPWFlLmFsbG9jKHEuYnl0ZUxlbmd0aCgpLWVlLmxlbmd0aCk7ZWU9YWUuY29uY2F0KFt0ZSxlZV0pfXJldHVybiBlZX0oZWUs'@;
put 'cSksdWU9YWUuYWxsb2Moc2UpO3VlLmZpbGwoMSk7dmFyIGNlPWFlLmFsbG9jKHNlKTtyZXR1cm4gY2U9eCh0ZSxjZSkudXBkYXRlKHVlKS51cGRhdGUoYWUuZnJvbShbMF0pKS51cGRhdGUoVSkudXBkYXRlKGhlKS5kaWdlc3QoKSx1ZT14KHRlLGNlKS51cGRhdGUodWUpLmRpZ2VzdCgpLHtr'@;
put 'OmNlPXgodGUsY2UpLnVwZGF0ZSh1ZSkudXBkYXRlKGFlLmZyb20oWzFdKSkudXBkYXRlKFUpLnVwZGF0ZShoZSkuZGlnZXN0KCksdjp1ZT14KHRlLGNlKS51cGRhdGUodWUpLmRpZ2VzdCgpfX1mdW5jdGlvbiBWKFUscSl7dmFyIGVlPW5ldyBNKFUpLHRlPShVLmxlbmd0aDw8MyktcS5iaXRM'@;
put 'ZW5ndGgoKTtyZXR1cm4gdGU+MCYmZWUuaXNocm4odGUpLGVlfWZ1bmN0aW9uIFkoVSxxLGVlKXt2YXIgdGUsb2U7ZG97Zm9yKHRlPWFlLmFsbG9jKDApOzgqdGUubGVuZ3RoPFUuYml0TGVuZ3RoKCk7KXEudj14KGVlLHEuaykudXBkYXRlKHEudikuZGlnZXN0KCksdGU9YWUuY29uY2F0KFt0'@;
put 'ZSxxLnZdKTtvZT1WKHRlLFUpLHEuaz14KGVlLHEuaykudXBkYXRlKHEudikudXBkYXRlKGFlLmZyb20oWzBdKSkuZGlnZXN0KCkscS52PXgoZWUscS5rKS51cGRhdGUocS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW9lLmNtcChVKSk7cmV0dXJuIG9lfWZ1bmN0aW9uIFgoVSxxLGVlLHRlKXty'@;
put 'ZXR1cm4gVS50b1JlZChNLm1vbnQoZWUpKS5yZWRQb3cocSkuZnJvbVJlZCgpLm1vZCh0ZSl9YXQuZXhwb3J0cz1mdW5jdGlvbiBLKFUscSxlZSx0ZSxvZSl7dmFyIHNlPU8ocSk7aWYoc2UuY3VydmUpe2lmKCJlY2RzYSIhPT10ZSYmImVjZHNhL3JzYSIhPT10ZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'Indyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTChVLHEpe3ZhciBlZT1SW3EuY3VydmUuam9pbigiLiIpXTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrcS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBzZT1uZXcgbGUoZWUpLmtleUZyb21Qcml2'@;
put 'YXRlKHEucHJpdmF0ZUtleSkuc2lnbihVKTtyZXR1cm4gYWUuZnJvbShzZS50b0RFUigpKX0oVSxzZSl9aWYoImRzYSI9PT1zZS50eXBlKXtpZigiZHNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBrKFUscSxlZSl7Zm9y'@;
put 'KHZhciBjZSx0ZT1xLnBhcmFtcy5wcml2X2tleSxvZT1xLnBhcmFtcy5wLHNlPXEucGFyYW1zLnEsaGU9cS5wYXJhbXMuZyx1ZT1uZXcgTSgwKSxHPVYoVSxzZSkubW9kKHNlKSxiPSExLEQ9aih0ZSxzZSxVLGVlKTshMT09PWI7KXVlPVgoaGUsY2U9WShzZSxELGVlKSxvZSxzZSksMD09PShi'@;
put 'PWNlLmludm0oc2UpLmltdWwoRy5hZGQodGUubXVsKHVlKSkpLm1vZChzZSkpLmNtcG4oMCkmJihiPSExLHVlPW5ldyBNKDApKTtyZXR1cm4gZnVuY3Rpb24gRShVLHEpe1U9VS50b0FycmF5KCkscT1xLnRvQXJyYXkoKSwxMjgmVVswXSYmKFU9WzBdLmNvbmNhdChVKSksMTI4JnFbMF0mJihx'@;
put 'PVswXS5jb25jYXQocSkpO3ZhciB0ZT1bNDgsVS5sZW5ndGgrcS5sZW5ndGgrNCwyLFUubGVuZ3RoXTtyZXR1cm4gdGU9dGUuY29uY2F0KFUsWzIscS5sZW5ndGhdLHEpLGFlLmZyb20odGUpfSh1ZSxiKX0oVSxzZSxlZSl9aWYoInJzYSIhPT10ZSYmImVjZHNhL3JzYSIhPT10ZSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1xLnBhZGRpbmcmJjEhPT1xLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcgbW9kZSIpO1U9YWUuY29uY2F0KFtvZSxVXSk7Zm9yKHZhciBoZT1zZS5tb2R1'@;
put 'bHVzLmJ5dGVMZW5ndGgoKSx1ZT1bMCwxXTtVLmxlbmd0aCt1ZS5sZW5ndGgrMTxoZTspdWUucHVzaCgyNTUpO3VlLnB1c2goMCk7Zm9yKHZhciBjZT0tMTsrK2NlPFUubGVuZ3RoOyl1ZS5wdXNoKFVbY2VdKTtyZXR1cm4gbSh1ZSxzZSl9LGF0LmV4cG9ydHMuZ2V0S2V5PWosYXQuZXhwb3J0'@;
put 'cy5tYWtlS2V5PVl9LDUxMTczOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNjI2NjIpLG09Rig4ODY1MSkuZWMsbGU9Rig4Nzk4MyksTT1GKDEzMDgpO2Z1bmN0aW9uIEsoTCxrKXtpZihMLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZh'@;
put 'bGlkIHNpZyIpO2lmKEwuY21wKGspPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1hdC5leHBvcnRzPWZ1bmN0aW9uIE8oTCxrLEUsaixWKXt2YXIgQj1sZShFKTtpZigiZWMiPT09Qi50eXBlKXtpZigiZWNkc2EiIT09aiYmImVjZHNhL3JzYSIhPT1qKXRocm93IG5ldyBFcnJv'@;
put 'cigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIFIoTCxrLEUpe3ZhciBqPU1bRS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFqKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0UuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIp'@;
put 'KTtyZXR1cm4gbmV3IG0oaikudmVyaWZ5KGssTCxFLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KEwsayxCKX1pZigiZHNhIj09PUIudHlwZSl7aWYoImRzYSIhPT1qKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIHooTCxrLEUp'@;
put 'e3ZhciBqPUUuZGF0YS5wLFY9RS5kYXRhLnEsQj1FLmRhdGEuZyxZPUUuZGF0YS5wdWJfa2V5LFg9bGUuc2lnbmF0dXJlLmRlY29kZShMLCJkZXIiKSxVPVgucyxxPVgucjtLKFUsViksSyhxLFYpO3ZhciBlZT14Lm1vbnQoaiksdGU9VS5pbnZtKFYpO3JldHVybiAwPT09Qi50b1JlZChlZSku'@;
put 'cmVkUG93KG5ldyB4KGspLm11bCh0ZSkubW9kKFYpKS5mcm9tUmVkKCkubXVsKFkudG9SZWQoZWUpLnJlZFBvdyhxLm11bCh0ZSkubW9kKFYpKS5mcm9tUmVkKCkpLm1vZChqKS5tb2QoVikuY21wKHEpfShMLGssQil9aWYoInJzYSIhPT1qJiYiZWNkc2EvcnNhIiE9PWopdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtrPWFlLmNvbmNhdChbVixrXSk7Zm9yKHZhciBZPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCksWD1bMV0sVT0wO2subGVuZ3RoK1gubGVuZ3RoKzI8WTspWC5wdXNoKDI1NSksVSs9MTtYLnB1c2goMCk7Zm9yKHZhciBxPS0xOysrcTxrLmxlbmd0'@;
put 'aDspWC5wdXNoKGtbcV0pO1g9YWUuZnJvbShYKTt2YXIgZWU9eC5tb250KEIubW9kdWx1cyk7TD0oTD1uZXcgeChMKS50b1JlZChlZSkpLnJlZFBvdyhuZXcgeChCLnB1YmxpY0V4cG9uZW50KSksTD1hZS5mcm9tKEwuZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIHRlPVU8OD8xOjA7Zm9yKFk9'@;
put 'TWF0aC5taW4oTC5sZW5ndGgsWC5sZW5ndGgpLEwubGVuZ3RoIT09WC5sZW5ndGgmJih0ZT0xKSxxPS0xOysrcTxZOyl0ZXw9TFtxXV5YW3FdO3JldHVybiAwPT09dGV9fSw2MzYzNjphdD0+e2F0LmV4cG9ydHM9ZnVuY3Rpb24oRixhZSl7Zm9yKHZhciB4PU1hdGgubWluKEYubGVuZ3RoLGFl'@;
put 'Lmxlbmd0aCksbT1uZXcgQnVmZmVyKHgpLGxlPTA7bGU8eDsrK2xlKW1bbGVdPUZbbGVdXmFlW2xlXTtyZXR1cm4gbX19LDM5MDA3OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig5OTE5KSx4PUYoMjI2MDEpLG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO0xlLkJ1ZmZlcj1SLExlLlNsb3dCdWZmZXI9ZnVuY3Rpb24gVShQZSl7cmV0dXJuK1BlIT1QZSYmKFBlPTApLFIuYWxsb2MoK1BlKX0sTGUuSU5TUEVDVF9NQVhfQllURVM9'@;
put 'NTA7dmFyIGxlPTIxNDc0ODM2NDc7ZnVuY3Rpb24gTyhQZSl7aWYoUGU+bGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytQZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIGJlPW5ldyBVaW50OEFycmF5KFBlKTtyZXR1cm4gT2JqZWN0LnNldFByb3Rv'@;
put 'dHlwZU9mKGJlLFIucHJvdG90eXBlKSxiZX1mdW5jdGlvbiBSKFBlLGJlLEFlKXtpZigibnVtYmVyIj09dHlwZW9mIFBlKXtpZigic3RyaW5nIj09dHlwZW9mIGJlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNl'@;
put 'aXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBrKFBlKX1yZXR1cm4geihQZSxiZSxBZSl9ZnVuY3Rpb24geihQZSxiZSxBZSl7aWYoInN0cmluZyI9PXR5cGVvZiBQZSlyZXR1cm4gZnVuY3Rpb24gRShQZSxiZSl7aWYoKCJzdHJpbmciIT10eXBlb2YgYmV8fCIiPT09YmUpJiYoYmU9InV0Zjgi'@;
put 'KSwhUi5pc0VuY29kaW5nKGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2JlKTt2YXIgQWU9MHxxKFBlLGJlKSxUZT1PKEFlKSxxZT1UZS53cml0ZShQZSxiZSk7cmV0dXJuIHFlIT09QWUmJihUZT1UZS5zbGljZSgwLHFlKSksVGV9KFBlLGJlKTtpZihBcnJh'@;
put 'eUJ1ZmZlci5pc1ZpZXcoUGUpKXJldHVybiBmdW5jdGlvbiBWKFBlKXtpZihZZShQZSxVaW50OEFycmF5KSl7dmFyIGJlPW5ldyBVaW50OEFycmF5KFBlKTtyZXR1cm4gQihiZS5idWZmZXIsYmUuYnl0ZU9mZnNldCxiZS5ieXRlTGVuZ3RoKX1yZXR1cm4gaihQZSl9KFBlKTtpZihudWxsPT1Q'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBQZSk7aWYoWWUoUGUsQXJyYXlCdWZm'@;
put 'ZXIpfHxQZSYmWWUoUGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKFllKFBlLFNoYXJlZEFycmF5QnVmZmVyKXx8UGUmJlllKFBlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBCKFBlLGJlLEFlKTtpZigibnVtYmVyIj09dHlw'@;
put 'ZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBUZT1QZS52YWx1ZU9mJiZQZS52YWx1ZU9mKCk7aWYobnVsbCE9VGUmJlRlIT09UGUpcmV0dXJuIFIuZnJv'@;
put 'bShUZSxiZSxBZSk7dmFyIHFlPWZ1bmN0aW9uIFkoUGUpe2lmKFIuaXNCdWZmZXIoUGUpKXt2YXIgYmU9MHxYKFBlLmxlbmd0aCksQWU9TyhiZSk7cmV0dXJuIDA9PT1BZS5sZW5ndGh8fFBlLmNvcHkoQWUsMCwwLGJlKSxBZX1yZXR1cm4gdm9pZCAwIT09UGUubGVuZ3RoPyJudW1iZXIiIT10'@;
put 'eXBlb2YgUGUubGVuZ3RofHxRZShQZS5sZW5ndGgpP08oMCk6aihQZSk6IkJ1ZmZlciI9PT1QZS50eXBlJiZBcnJheS5pc0FycmF5KFBlLmRhdGEpP2ooUGUuZGF0YSk6dm9pZCAwfShQZSk7aWYocWUpcmV0dXJuIHFlO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9Qcmlt'@;
put 'aXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBQZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBSLmZyb20oUGVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksYmUsQWUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0'@;
put 'cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFBlKX1mdW5jdGlvbiBLKFBlKXtpZigibnVtYmVyIiE9dHlwZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJl'@;
put 'IG9mIHR5cGUgbnVtYmVyJyk7aWYoUGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1BlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBrKFBlKXtyZXR1cm4gSyhQZSksTyhQZTwwPzA6MHxYKFBlKSl9ZnVuY3Rpb24gaihQZSl7Zm9yKHZh'@;
put 'ciBiZT1QZS5sZW5ndGg8MD8wOjB8WChQZS5sZW5ndGgpLEFlPU8oYmUpLFRlPTA7VGU8YmU7VGUrPTEpQWVbVGVdPTI1NSZQZVtUZV07cmV0dXJuIEFlfWZ1bmN0aW9uIEIoUGUsYmUsQWUpe2lmKGJlPDB8fFBlLmJ5dGVMZW5ndGg8YmUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQi'@;
put 'IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKFBlLmJ5dGVMZW5ndGg8YmUrKEFlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIFRlO3JldHVybiBUZT12b2lkIDA9PT1iZSYmdm9pZCAwPT09QWU/bmV3'@;
put 'IFVpbnQ4QXJyYXkoUGUpOnZvaWQgMD09PUFlP25ldyBVaW50OEFycmF5KFBlLGJlKTpuZXcgVWludDhBcnJheShQZSxiZSxBZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKFRlLFIucHJvdG90eXBlKSxUZX1mdW5jdGlvbiBYKFBlKXtpZihQZT49bGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0'@;
put 'dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2xlLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8UGV9ZnVuY3Rpb24gcShQZSxiZSl7aWYoUi5pc0J1ZmZlcihQZSkpcmV0dXJuIFBlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1Zp'@;
put 'ZXcoUGUpfHxZZShQZSxBcnJheUJ1ZmZlcikpcmV0dXJuIFBlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBQZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIu'@;
put 'IFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUGUpO3ZhciBBZT1QZS5sZW5ndGgsVGU9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighVGUmJjA9PT1BZSlyZXR1cm4gMDtmb3IodmFyIHFlPSExOzspc3dpdGNoKGJlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2Fz'@;
put 'ZSJiaW5hcnkiOnJldHVybiBBZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBGZShQZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipBZTtjYXNlImhleCI6cmV0dXJuIEFlPj4+MTtjYXNlImJhc2U2NCI6'@;
put 'cmV0dXJuIFdlKFBlKS5sZW5ndGg7ZGVmYXVsdDppZihxZSlyZXR1cm4gVGU/LTE6RmUoUGUpLmxlbmd0aDtiZT0oIiIrYmUpLnRvTG93ZXJDYXNlKCkscWU9ITB9fWZ1bmN0aW9uIGVlKFBlLGJlLEFlKXt2YXIgVGU9ITE7aWYoKHZvaWQgMD09PWJlfHxiZTwwKSYmKGJlPTApLGJlPnRoaXMu'@;
put 'bGVuZ3RofHwoKHZvaWQgMD09PUFlfHxBZT50aGlzLmxlbmd0aCkmJihBZT10aGlzLmxlbmd0aCksQWU8PTApfHwoQWU+Pj49MCk8PShiZT4+Pj0wKSlyZXR1cm4iIjtmb3IoUGV8fChQZT0idXRmOCIpOzspc3dpdGNoKFBlKXtjYXNlImhleCI6cmV0dXJuIHYodGhpcyxiZSxBZSk7Y2FzZSJ1'@;
put 'dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gSCh0aGlzLGJlLEFlKTtjYXNlImFzY2lpIjpyZXR1cm4gQyh0aGlzLGJlLEFlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBTKHRoaXMsYmUsQWUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRCh0aGlzLGJlLEFlKTtjYXNlInVjczIiOmNh'@;
put 'c2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHAodGhpcyxiZSxBZSk7ZGVmYXVsdDppZihUZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1BlKTtQZT0oUGUrIiIpLnRvTG93ZXJDYXNlKCksVGU9ITB9fWZ1bmN0aW9uIHRlKFBl'@;
put 'LGJlLEFlKXt2YXIgVGU9UGVbYmVdO1BlW2JlXT1QZVtBZV0sUGVbQWVdPVRlfWZ1bmN0aW9uIG9lKFBlLGJlLEFlLFRlLHFlKXtpZigwPT09UGUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgQWU/KFRlPUFlLEFlPTApOkFlPjIxNDc0ODM2NDc/QWU9MjE0NzQ4MzY0NzpB'@;
put 'ZTwtMjE0NzQ4MzY0OCYmKEFlPS0yMTQ3NDgzNjQ4KSxRZShBZT0rQWUpJiYoQWU9cWU/MDpQZS5sZW5ndGgtMSksQWU8MCYmKEFlPVBlLmxlbmd0aCtBZSksQWU+PVBlLmxlbmd0aCl7aWYocWUpcmV0dXJuLTE7QWU9UGUubGVuZ3RoLTF9ZWxzZSBpZihBZTwwKXtpZighcWUpcmV0dXJuLTE7'@;
put 'QWU9MH1pZigic3RyaW5nIj09dHlwZW9mIGJlJiYoYmU9Ui5mcm9tKGJlLFRlKSksUi5pc0J1ZmZlcihiZSkpcmV0dXJuIDA9PT1iZS5sZW5ndGg/LTE6c2UoUGUsYmUsQWUsVGUscWUpO2lmKCJudW1iZXIiPT10eXBlb2YgYmUpcmV0dXJuIGJlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVp'@;
put 'bnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/cWU/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFBlLGJlLEFlKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKFBlLGJlLEFlKTpzZShQZSxbYmVdLEFlLFRlLHFlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2'@;
put 'YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBzZShQZSxiZSxBZSxUZSxxZSl7dmFyIERlLFhlPTEsVWU9UGUubGVuZ3RoLGh0PWJlLmxlbmd0aDtpZih2b2lkIDAhPT1UZSYmKCJ1Y3MyIj09PShUZT1TdHJpbmcoVGUpLnRvTG93ZXJDYXNlKCkpfHwidWNz'@;
put 'LTIiPT09VGV8fCJ1dGYxNmxlIj09PVRlfHwidXRmLTE2bGUiPT09VGUpKXtpZihQZS5sZW5ndGg8Mnx8YmUubGVuZ3RoPDIpcmV0dXJuLTE7WGU9MixVZS89MixodC89MixBZS89Mn1mdW5jdGlvbiBNZShNdCxIdCl7cmV0dXJuIDE9PT1YZT9NdFtIdF06TXQucmVhZFVJbnQxNkJFKEh0Klhl'@;
put 'KX1pZihxZSl7dmFyIHplPS0xO2ZvcihEZT1BZTtEZTxVZTtEZSsrKWlmKE1lKFBlLERlKT09PU1lKGJlLC0xPT09emU/MDpEZS16ZSkpe2lmKC0xPT09emUmJih6ZT1EZSksRGUtemUrMT09PWh0KXJldHVybiB6ZSpYZX1lbHNlLTEhPT16ZSYmKERlLT1EZS16ZSksemU9LTF9ZWxzZSBmb3Io'@;
put 'QWUraHQ+VWUmJihBZT1VZS1odCksRGU9QWU7RGU+PTA7RGUtLSl7Zm9yKHZhciBvdD0hMCx1dD0wO3V0PGh0O3V0KyspaWYoTWUoUGUsRGUrdXQpIT09TWUoYmUsdXQpKXtvdD0hMTticmVha31pZihvdClyZXR1cm4gRGV9cmV0dXJuLTF9ZnVuY3Rpb24gaGUoUGUsYmUsQWUsVGUpe0FlPU51'@;
put 'bWJlcihBZSl8fDA7dmFyIHFlPVBlLmxlbmd0aC1BZTtUZT8oVGU9TnVtYmVyKFRlKSk+cWUmJihUZT1xZSk6VGU9cWU7dmFyIFhlPWJlLmxlbmd0aDtUZT5YZS8yJiYoVGU9WGUvMik7Zm9yKHZhciBVZT0wO1VlPFRlOysrVWUpe3ZhciBodD1wYXJzZUludChiZS5zdWJzdHIoMipVZSwyKSwx'@;
put 'Nik7aWYoUWUoaHQpKXJldHVybiBVZTtQZVtBZStVZV09aHR9cmV0dXJuIFVlfWZ1bmN0aW9uIHVlKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoRmUoYmUsUGUubGVuZ3RoLUFlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gY2UoUGUsYmUsQWUsVGUpe3JldHVybiBLZShmdW5jdGlvbiBPZShQZSl7Zm9y'@;
put 'KHZhciBiZT1bXSxBZT0wO0FlPFBlLmxlbmd0aDsrK0FlKWJlLnB1c2goMjU1JlBlLmNoYXJDb2RlQXQoQWUpKTtyZXR1cm4gYmV9KGJlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gRyhQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKFdlKGJlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gYihQZSxiZSxBZSxUZSl7'@;
put 'cmV0dXJuIEtlKGZ1bmN0aW9uIGplKFBlLGJlKXtmb3IodmFyIEFlLFRlLFhlPVtdLFVlPTA7VWU8UGUubGVuZ3RoJiYhKChiZS09Mik8MCk7KytVZSlUZT0oQWU9UGUuY2hhckNvZGVBdChVZSkpPj44LFhlLnB1c2goQWUlMjU2KSxYZS5wdXNoKFRlKTtyZXR1cm4gWGV9KGJlLFBlLmxlbmd0'@;
put 'aC1BZSksUGUsQWUsVGUpfWZ1bmN0aW9uIEQoUGUsYmUsQWUpe3JldHVybiBhZS5mcm9tQnl0ZUFycmF5KDA9PT1iZSYmQWU9PT1QZS5sZW5ndGg/UGU6UGUuc2xpY2UoYmUsQWUpKX1mdW5jdGlvbiBIKFBlLGJlLEFlKXtBZT1NYXRoLm1pbihQZS5sZW5ndGgsQWUpO2Zvcih2YXIgVGU9W10s'@;
put 'cWU9YmU7cWU8QWU7KXt2YXIgTWUsRGUsemUsb3QsWGU9UGVbcWVdLFVlPW51bGwsaHQ9WGU+MjM5PzQ6WGU+MjIzPzM6WGU+MTkxPzI6MTtpZihxZStodDw9QWUpc3dpdGNoKGh0KXtjYXNlIDE6WGU8MTI4JiYoVWU9WGUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKE1lPVBlW3FlKzFdKSkm'@;
put 'JihvdD0oMzEmWGUpPDw2fDYzJk1lKT4xMjcmJihVZT1vdCk7YnJlYWs7Y2FzZSAzOkRlPVBlW3FlKzJdLDEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmMTI4PT0oMTkyJkRlKSYmKG90PSgxNSZYZSk8PDEyfCg2MyZNZSk8PDZ8NjMmRGUpPjIwNDcmJihvdDw1NTI5Nnx8b3Q+NTczNDMpJiYo'@;
put 'VWU9b3QpO2JyZWFrO2Nhc2UgNDpEZT1QZVtxZSsyXSx6ZT1QZVtxZSszXSwxMjg9PSgxOTImKE1lPVBlW3FlKzFdKSkmJjEyOD09KDE5MiZEZSkmJjEyOD09KDE5MiZ6ZSkmJihvdD0oMTUmWGUpPDwxOHwoNjMmTWUpPDwxMnwoNjMmRGUpPDw2fDYzJnplKT42NTUzNSYmb3Q8MTExNDExMiYm'@;
put 'KFVlPW90KX1udWxsPT09VWU/KFVlPTY1NTMzLGh0PTEpOlVlPjY1NTM1JiYoVGUucHVzaCgoVWUtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLFVlPTU2MzIwfDEwMjMmVWUpLFRlLnB1c2goVWUpLHFlKz1odH1yZXR1cm4gZnVuY3Rpb24gZyhQZSl7dmFyIGJlPVBlLmxlbmd0aDtpZihiZTw9'@;
put 'TilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsUGUpO2Zvcih2YXIgQWU9IiIsVGU9MDtUZTxiZTspQWUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFBlLnNsaWNlKFRlLFRlKz1OKSk7cmV0dXJuIEFlfShUZSl9TGUua01heExlbmd0aD1sZSwhKFIu'@;
put 'VFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBNKCl7dHJ5e3ZhciBQZT1uZXcgVWludDhBcnJheSgxKSxiZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihiZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlw'@;
put 'ZU9mKFBlLGJlKSw0Mj09PVBlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9y'@;
put 'dCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o'@;
put 'KXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoUi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFIu'@;
put 'cG9vbFNpemU9ODE5MixSLmZyb209ZnVuY3Rpb24oUGUsYmUsQWUpe3JldHVybiB6KFBlLGJlLEFlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKFIucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUixVaW50OEFycmF5KSxSLmFsbG9jPWZ1bmN0'@;
put 'aW9uKFBlLGJlLEFlKXtyZXR1cm4gZnVuY3Rpb24gTChQZSxiZSxBZSl7cmV0dXJuIEsoUGUpLFBlPD0wP08oUGUpOnZvaWQgMCE9PWJlPyJzdHJpbmciPT10eXBlb2YgQWU/TyhQZSkuZmlsbChiZSxBZSk6TyhQZSkuZmlsbChiZSk6TyhQZSl9KFBlLGJlLEFlKX0sUi5hbGxvY1Vuc2FmZT1m'@;
put 'dW5jdGlvbihQZSl7cmV0dXJuIGsoUGUpfSxSLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihQZSl7cmV0dXJuIGsoUGUpfSxSLmlzQnVmZmVyPWZ1bmN0aW9uKGJlKXtyZXR1cm4gbnVsbCE9YmUmJiEwPT09YmUuX2lzQnVmZmVyJiZiZSE9PVIucHJvdG90eXBlfSxSLmNvbXBhcmU9ZnVuY3Rp'@;
put 'b24oYmUsQWUpe2lmKFllKGJlLFVpbnQ4QXJyYXkpJiYoYmU9Ui5mcm9tKGJlLGJlLm9mZnNldCxiZS5ieXRlTGVuZ3RoKSksWWUoQWUsVWludDhBcnJheSkmJihBZT1SLmZyb20oQWUsQWUub2Zmc2V0LEFlLmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcihiZSl8fCFSLmlzQnVmZmVyKEFlKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihiZT09PUFlKXJldHVybiAwO2Zvcih2YXIgVGU9YmUubGVuZ3RoLHFlPUFlLmxlbmd0aCxYZT0wLFVlPU1hdGgubWluKFRl'@;
put 'LHFlKTtYZTxVZTsrK1hlKWlmKGJlW1hlXSE9PUFlW1hlXSl7VGU9YmVbWGVdLHFlPUFlW1hlXTticmVha31yZXR1cm4gVGU8cWU/LTE6cWU8VGU/MTowfSxSLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oYmUpe3N3aXRjaChTdHJpbmcoYmUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0'@;
put 'ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sUi5jb25jYXQ9ZnVuY3Rpb24o'@;
put 'YmUsQWUpe2lmKCFBcnJheS5pc0FycmF5KGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWJlLmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTt2YXIgVGU7aWYodm9pZCAwPT09QWUpZm9yKEFlPTAsVGU9'@;
put 'MDtUZTxiZS5sZW5ndGg7KytUZSlBZSs9YmVbVGVdLmxlbmd0aDt2YXIgcWU9Ui5hbGxvY1Vuc2FmZShBZSksWGU9MDtmb3IoVGU9MDtUZTxiZS5sZW5ndGg7KytUZSl7dmFyIFVlPWJlW1RlXTtpZihZZShVZSxVaW50OEFycmF5KSlYZStVZS5sZW5ndGg+cWUubGVuZ3RoP1IuZnJvbShVZSku'@;
put 'Y29weShxZSxYZSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwocWUsVWUsWGUpO2Vsc2V7aWYoIVIuaXNCdWZmZXIoVWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtVZS5jb3B5KHFlLFhlKX1YZSs9VWUu'@;
put 'bGVuZ3RofXJldHVybiBxZX0sUi5ieXRlTGVuZ3RoPXEsUi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0aDtpZihiZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVs'@;
put 'dGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9Mil0ZSh0aGlzLEFlLEFlKzEpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5sZW5ndGg7aWYoYmUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNp'@;
put 'emUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIEFlPTA7QWU8YmU7QWUrPTQpdGUodGhpcyxBZSxBZSszKSx0ZSh0aGlzLEFlKzEsQWUrMik7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0aDtpZihiZSU4'@;
put 'IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9OCl0ZSh0aGlzLEFlLEFlKzcpLHRlKHRoaXMsQWUrMSxBZSs2KSx0ZSh0aGlzLEFlKzIsQWUrNSksdGUodGhpcyxBZSszLEFl'@;
put 'KzQpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWJlPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0godGhpcywwLGJlKTplZS5hcHBseSh0aGlzLGFyZ3Vt'@;
put 'ZW50cyl9LFIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiZSl7aWYoIVIuaXNCdWZmZXIoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWJlfHwwPT09Ui5jb21wYXJlKHRoaXMsYmUpfSxSLnByb3RvdHlwZS5pbnNw'@;
put 'ZWN0PWZ1bmN0aW9uKCl7dmFyIGJlPSIiLEFlPUxlLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBiZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsQWUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+QWUmJihiZSs9IiAuLi4gIiksIjxCdWZmZXIgIitiZSsiPiJ9'@;
put 'LG0mJihSLnByb3RvdHlwZVttXT1SLnByb3RvdHlwZS5pbnNwZWN0KSxSLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGJlLEFlLFRlLHFlLFhlKXtpZihZZShiZSxVaW50OEFycmF5KSYmKGJlPVIuZnJvbShiZSxiZS5vZmZzZXQsYmUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKGJlKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBiZSk7aWYodm9pZCAwPT09QWUmJihBZT0wKSx2b2lkIDA9PT1UZSYmKFRlPWJlP2JlLmxlbmd0aDow'@;
put 'KSx2b2lkIDA9PT1xZSYmKHFlPTApLHZvaWQgMD09PVhlJiYoWGU9dGhpcy5sZW5ndGgpLEFlPDB8fFRlPmJlLmxlbmd0aHx8cWU8MHx8WGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHFlPj1YZSYmQWU+PVRlKXJldHVybiAwO2lm'@;
put 'KHFlPj1YZSlyZXR1cm4tMTtpZihBZT49VGUpcmV0dXJuIDE7aWYodGhpcz09PWJlKXJldHVybiAwO2Zvcih2YXIgVWU9KFhlPj4+PTApLShxZT4+Pj0wKSxodD0oVGU+Pj49MCktKEFlPj4+PTApLE1lPU1hdGgubWluKFVlLGh0KSxEZT10aGlzLnNsaWNlKHFlLFhlKSx6ZT1iZS5zbGljZShB'@;
put 'ZSxUZSksb3Q9MDtvdDxNZTsrK290KWlmKERlW290XSE9PXplW290XSl7VWU9RGVbb3RdLGh0PXplW290XTticmVha31yZXR1cm4gVWU8aHQ/LTE6aHQ8VWU/MTowfSxSLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoYmUsQWUs'@;
put 'VGUpfSxSLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gb2UodGhpcyxiZSxBZSxUZSwhMCl9LFIucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gb2UodGhpcyxiZSxBZSxUZSwhMSl9LFIucHJvdG90eXBlLndyaXRlPWZ1'@;
put 'bmN0aW9uKGJlLEFlLFRlLHFlKXtpZih2b2lkIDA9PT1BZSlxZT0idXRmOCIsVGU9dGhpcy5sZW5ndGgsQWU9MDtlbHNlIGlmKHZvaWQgMD09PVRlJiYic3RyaW5nIj09dHlwZW9mIEFlKXFlPUFlLFRlPXRoaXMubGVuZ3RoLEFlPTA7ZWxzZXtpZighaXNGaW5pdGUoQWUpKXRocm93IG5ldyBF'@;
put 'cnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtBZT4+Pj0wLGlzRmluaXRlKFRlKT8oVGU+Pj49MCx2b2lkIDA9PT1xZSYmKHFlPSJ1dGY4IikpOihxZT1UZSxUZT12b2lkIDApfXZhciBYZT10aGlz'@;
put 'Lmxlbmd0aC1BZTtpZigodm9pZCAwPT09VGV8fFRlPlhlKSYmKFRlPVhlKSxiZS5sZW5ndGg+MCYmKFRlPDB8fEFlPDApfHxBZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtxZXx8KHFlPSJ1dGY4Iik7'@;
put 'Zm9yKHZhciBVZT0hMTs7KXN3aXRjaChxZSl7Y2FzZSJoZXgiOnJldHVybiBoZSh0aGlzLGJlLEFlLFRlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB1ZSh0aGlzLGJlLEFlLFRlKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBjZSh0aGlzLGJl'@;
put 'LEFlLFRlKTtjYXNlImJhc2U2NCI6cmV0dXJuIEcodGhpcyxiZSxBZSxUZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBiKHRoaXMsYmUsQWUsVGUpO2RlZmF1bHQ6aWYoVWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBl'@;
put 'bmNvZGluZzogIitxZSk7cWU9KCIiK3FlKS50b0xvd2VyQ2FzZSgpLFVlPSEwfX0sUi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgTj00MDk2O2Z1'@;
put 'bmN0aW9uIEMoUGUsYmUsQWUpe3ZhciBUZT0iIjtBZT1NYXRoLm1pbihQZS5sZW5ndGgsQWUpO2Zvcih2YXIgcWU9YmU7cWU8QWU7KytxZSlUZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmUGVbcWVdKTtyZXR1cm4gVGV9ZnVuY3Rpb24gUyhQZSxiZSxBZSl7dmFyIFRlPSIiO0FlPU1hdGgu'@;
put 'bWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBxZT1iZTtxZTxBZTsrK3FlKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFBlW3FlXSk7cmV0dXJuIFRlfWZ1bmN0aW9uIHYoUGUsYmUsQWUpe3ZhciBUZT1QZS5sZW5ndGg7KCFiZXx8YmU8MCkmJihiZT0wKSwoIUFlfHxBZTwwfHxBZT5UZSkmJihB'@;
put 'ZT1UZSk7Zm9yKHZhciBxZT0iIixYZT1iZTtYZTxBZTsrK1hlKXFlKz1sdFtQZVtYZV1dO3JldHVybiBxZX1mdW5jdGlvbiBwKFBlLGJlLEFlKXtmb3IodmFyIFRlPVBlLnNsaWNlKGJlLEFlKSxxZT0iIixYZT0wO1hlPFRlLmxlbmd0aC0xO1hlKz0yKXFlKz1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KFRlW1hlXSsyNTYqVGVbWGUrMV0pO3JldHVybiBxZX1mdW5jdGlvbiB3KFBlLGJlLEFlKXtpZihQZSUxIT0wfHxQZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihQZStiZT5BZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBi'@;
put 'ZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIEooUGUsYmUsQWUsVGUscWUsWGUpe2lmKCFSLmlzQnVmZmVyKFBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoYmU+cWV8fGJlPFhlKXRocm93IG5ldyBS'@;
put 'YW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihBZStUZT5QZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIG5lKFBlLGJlLEFlLFRlLHFlLFhlKXtpZihBZStUZT5QZS5sZW5ndGgpdGhyb3cg'@;
put 'bmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEFlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGRlKFBlLGJlLEFlLFRlLHFlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAscWV8fG5lKFBlLDAsQWUsNCkseC53cml0ZShQ'@;
put 'ZSxiZSxBZSxUZSwyMyw0KSxBZSs0fWZ1bmN0aW9uIGZlKFBlLGJlLEFlLFRlLHFlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAscWV8fG5lKFBlLDAsQWUsOCkseC53cml0ZShQZSxiZSxBZSxUZSw1Miw4KSxBZSs4fVIucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGU9dGhp'@;
put 'cy5sZW5ndGg7KGJlPX5+YmUpPDA/KGJlKz1UZSk8MCYmKGJlPTApOmJlPlRlJiYoYmU9VGUpLChBZT12b2lkIDA9PT1BZT9UZTp+fkFlKTwwPyhBZSs9VGUpPDAmJihBZT0wKTpBZT5UZSYmKEFlPVRlKSxBZTxiZSYmKEFlPWJlKTt2YXIgcWU9dGhpcy5zdWJhcnJheShiZSxBZSk7cmV0dXJu'@;
put 'IE9iamVjdC5zZXRQcm90b3R5cGVPZihxZSxSLnByb3RvdHlwZSkscWV9LFIucHJvdG90eXBlLnJlYWRVaW50TEU9Ui5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPXRoaXNb'@;
put 'YmVdLFhlPTEsVWU9MDsrK1VlPEFlJiYoWGUqPTI1Nik7KXFlKz10aGlzW2JlK1VlXSpYZTtyZXR1cm4gcWV9LFIucHJvdG90eXBlLnJlYWRVaW50QkU9Ui5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVu'@;
put 'Z3RoKTtmb3IodmFyIHFlPXRoaXNbYmUrLS1BZV0sWGU9MTtBZT4wJiYoWGUqPTI1Nik7KXFlKz10aGlzW2JlKy0tQWVdKlhlO3JldHVybiBxZX0sUi5wcm90b3R5cGUucmVhZFVpbnQ4PVIucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHco'@;
put 'YmUsMSx0aGlzLmxlbmd0aCksdGhpc1tiZV19LFIucHJvdG90eXBlLnJlYWRVaW50MTZMRT1SLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5ndGgpLHRoaXNbYmVdfHRoaXNbYmUrMV08PDh9LFIucHJvdG90'@;
put 'eXBlLnJlYWRVaW50MTZCRT1SLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5ndGgpLHRoaXNbYmVdPDw4fHRoaXNbYmUrMV19LFIucHJvdG90eXBlLnJlYWRVaW50MzJMRT1SLnByb3RvdHlwZS5yZWFkVUlu'@;
put 'dDMyTEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2JlXXx0aGlzW2JlKzFdPDw4fHRoaXNbYmUrMl08PDE2KSsxNjc3NzIxNip0aGlzW2JlKzNdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ui5wcm90b3R5cGUucmVhZFVJ'@;
put 'bnQzMkJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2JlXSsodGhpc1tiZSsxXTw8MTZ8dGhpc1tiZSsyXTw8OHx0aGlzW2JlKzNdKX0sUi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGJlLEFlLFRlKXti'@;
put 'ZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZV0sWGU9MSxVZT0wOysrVWU8QWUmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrVWVdKlhlO3JldHVybiBxZT49KFhlKj0xMjgpJiYocWUtPU1hdGgucG93KDIsOCpBZSkpLHFlfSxSLnByb3Rv'@;
put 'dHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT1BZSxYZT0xLFVlPXRoaXNbYmUrLS1xZV07cWU+MCYmKFhlKj0yNTYpOylVZSs9dGhpc1tiZSstLXFlXSpYZTtyZXR1cm4gVWU+PShYZSo9'@;
put 'MTI4KSYmKFVlLT1NYXRoLnBvdygyLDgqQWUpKSxVZX0sUi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2JlXT8tMSooMjU1LXRoaXNbYmVdKzEpOnRoaXNbYmVdfSxSLnByb3RvdHlwZS5y'@;
put 'ZWFkSW50MTZMRT1mdW5jdGlvbihiZSxBZSl7YmU+Pj49MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKTt2YXIgVGU9dGhpc1tiZV18dGhpc1tiZSsxXTw8ODtyZXR1cm4gMzI3NjgmVGU/NDI5NDkwMTc2MHxUZTpUZX0sUi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYmUsQWUpe2Jl'@;
put 'Pj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCk7dmFyIFRlPXRoaXNbYmUrMV18dGhpc1tiZV08PDg7cmV0dXJuIDMyNzY4JlRlPzQyOTQ5MDE3NjB8VGU6VGV9LFIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMu'@;
put 'bGVuZ3RoKSx0aGlzW2JlXXx0aGlzW2JlKzFdPDw4fHRoaXNbYmUrMl08PDE2fHRoaXNbYmUrM108PDI0fSxSLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksdGhpc1tiZV08PDI0fHRoaXNbYmUrMV08'@;
put 'PDE2fHRoaXNbYmUrMl08PDh8dGhpc1tiZSszXX0sUi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLHgucmVhZCh0aGlzLGJlLCEwLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlv'@;
put 'bihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMsYmUsITEsMjMsNCl9LFIucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsOCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMs'@;
put 'YmUsITAsNTIsOCl9LFIucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsOCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMsYmUsITEsNTIsOCl9LFIucHJvdG90eXBlLndyaXRlVWludExFPVIucHJvdG90eXBlLndyaXRlVUludExF'@;
put 'PWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtiZT0rYmUsQWU+Pj49MCxUZT4+Pj0wLHFlfHxKKHRoaXMsYmUsQWUsVGUsTWF0aC5wb3coMiw4KlRlKS0xLDApO3ZhciBVZT0xLGh0PTA7Zm9yKHRoaXNbQWVdPTI1NSZiZTsrK2h0PFRlJiYoVWUqPTI1Nik7KXRoaXNbQWUraHRdPWJlL1VlJjI1NTty'@;
put 'ZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndyaXRlVWludEJFPVIucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtiZT0rYmUsQWU+Pj49MCxUZT4+Pj0wLHFlfHxKKHRoaXMsYmUsQWUsVGUsTWF0aC5wb3coMiw4KlRlKS0xLDApO3ZhciBVZT1UZS0xLGh0PTE7'@;
put 'Zm9yKHRoaXNbQWUrVWVdPTI1NSZiZTstLVVlPj0wJiYoaHQqPTI1Nik7KXRoaXNbQWUrVWVdPWJlL2h0JjI1NTtyZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndyaXRlVWludDg9Ui5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0w'@;
put 'LFRlfHxKKHRoaXMsYmUsQWUsMSwyNTUsMCksdGhpc1tBZV09MjU1JmJlLEFlKzF9LFIucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiw2NTUz'@;
put 'NSwwKSx0aGlzW0FlXT0yNTUmYmUsdGhpc1tBZSsxXT1iZT4+PjgsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1SLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwyLDY1NTM1LDAp'@;
put 'LHRoaXNbQWVdPWJlPj4+OCx0aGlzW0FlKzFdPTI1NSZiZSxBZSsyfSxSLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPVIucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDQsNDI5NDk2NzI5NSww'@;
put 'KSx0aGlzW0FlKzNdPWJlPj4+MjQsdGhpc1tBZSsyXT1iZT4+PjE2LHRoaXNbQWUrMV09YmU+Pj44LHRoaXNbQWVdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPVIucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUs'@;
put 'QWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0FlXT1iZT4+PjI0LHRoaXNbQWUrMV09YmU+Pj4xNix0aGlzW0FlKzJdPWJlPj4+OCx0aGlzW0FlKzNdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtp'@;
put 'ZihiZT0rYmUsQWU+Pj49MCwhcWUpe3ZhciBYZT1NYXRoLnBvdygyLDgqVGUtMSk7Sih0aGlzLGJlLEFlLFRlLFhlLTEsLVhlKX12YXIgVWU9MCxodD0xLE1lPTA7Zm9yKHRoaXNbQWVdPTI1NSZiZTsrK1VlPFRlJiYoaHQqPTI1Nik7KWJlPDAmJjA9PT1NZSYmMCE9PXRoaXNbQWUrVWUtMV0m'@;
put 'JihNZT0xKSx0aGlzW0FlK1VlXT0oYmUvaHQ+PjApLU1lJjI1NTtyZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKGJlPStiZSxBZT4+Pj0wLCFxZSl7dmFyIFhlPU1hdGgucG93KDIsOCpUZS0xKTtKKHRoaXMsYmUsQWUsVGUsWGUt'@;
put 'MSwtWGUpfXZhciBVZT1UZS0xLGh0PTEsTWU9MDtmb3IodGhpc1tBZStVZV09MjU1JmJlOy0tVWU+PTAmJihodCo9MjU2KTspYmU8MCYmMD09PU1lJiYwIT09dGhpc1tBZStVZSsxXSYmKE1lPTEpLHRoaXNbQWUrVWVdPShiZS9odD4+MCktTWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5'@;
put 'cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwxLDEyNywtMTI4KSxiZTwwJiYoYmU9MjU1K2JlKzEpLHRoaXNbQWVdPTI1NSZiZSxBZSsxfSxSLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oYmUsQWUs'@;
put 'VGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT0yNTUmYmUsdGhpc1tBZSsxXT1iZT4+PjgsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAs'@;
put 'VGV8fEoodGhpcyxiZSxBZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tBZV09YmU+Pj44LHRoaXNbQWUrMV09MjU1JmJlLEFlKzJ9LFIucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCwyMTQ3NDgz'@;
put 'NjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0FlXT0yNTUmYmUsdGhpc1tBZSsxXT1iZT4+PjgsdGhpc1tBZSsyXT1iZT4+PjE2LHRoaXNbQWUrM109YmU+Pj4yNCxBZSs0fSxSLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8'@;
put 'Sih0aGlzLGJlLEFlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYmU8MCYmKGJlPTQyOTQ5NjcyOTUrYmUrMSksdGhpc1tBZV09YmU+Pj4yNCx0aGlzW0FlKzFdPWJlPj4+MTYsdGhpc1tBZSsyXT1iZT4+PjgsdGhpc1tBZSszXT0yNTUmYmUsQWUrNH0sUi5wcm90b3R5cGUud3JpdGVGbG9h'@;
put 'dExFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gZGUodGhpcyxiZSxBZSwhMCxUZSl9LFIucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGRlKHRoaXMsYmUsQWUsITEsVGUpfSxSLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGJlLEFl'@;
put 'LFRlKXtyZXR1cm4gZmUodGhpcyxiZSxBZSwhMCxUZSl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBmZSh0aGlzLGJlLEFlLCExLFRlKX0sUi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYoIVIuaXNCdWZmZXIoYmUp'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKFRlfHwoVGU9MCksIXFlJiYwIT09cWUmJihxZT10aGlzLmxlbmd0aCksQWU+PWJlLmxlbmd0aCYmKEFlPWJlLmxlbmd0aCksQWV8fChBZT0wKSxxZT4wJiZxZTxUZSYmKHFlPVRlKSxxZT09PVRl'@;
put 'fHwwPT09YmUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoQWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKFRlPDB8fFRlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdl'@;
put 'Iik7aWYocWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtxZT50aGlzLmxlbmd0aCYmKHFlPXRoaXMubGVuZ3RoKSxiZS5sZW5ndGgtQWU8cWUtVGUmJihxZT1iZS5sZW5ndGgtQWUrVGUpO3ZhciBYZT1xZS1UZTtyZXR1cm4gdGhpcz09PWJlJiYi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oQWUsVGUscWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGJlLHRoaXMuc3ViYXJyYXkoVGUscWUpLEFlKSxYZX0sUi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihi'@;
put 'ZSxBZSxUZSxxZSl7aWYoInN0cmluZyI9PXR5cGVvZiBiZSl7aWYoInN0cmluZyI9PXR5cGVvZiBBZT8ocWU9QWUsQWU9MCxUZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBUZSYmKHFlPVRlLFRlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1xZSYmInN0cmluZyIhPXR5cGVvZiBxZSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBxZSYmIVIuaXNFbmNvZGluZyhxZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitxZSk7aWYoMT09PWJlLmxlbmd0aCl7dmFyIFhlPWJlLmNo'@;
put 'YXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXFlJiZYZTwxMjh8fCJsYXRpbjEiPT09cWUpJiYoYmU9WGUpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBiZT9iZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIGJlJiYoYmU9TnVtYmVyKGJlKSk7aWYoQWU8MHx8dGhpcy5sZW5ndGg8QWV8fHRoaXMubGVuZ3Ro'@;
put 'PFRlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihUZTw9QWUpcmV0dXJuIHRoaXM7dmFyIFVlO2lmKEFlPj4+PTAsVGU9dm9pZCAwPT09VGU/dGhpcy5sZW5ndGg6VGU+Pj4wLGJlfHwoYmU9MCksIm51bWJlciI9PXR5cGVvZiBiZSlmb3IoVWU9QWU7VWU8'@;
put 'VGU7KytVZSl0aGlzW1VlXT1iZTtlbHNle3ZhciBodD1SLmlzQnVmZmVyKGJlKT9iZTpSLmZyb20oYmUscWUpLE1lPWh0Lmxlbmd0aDtpZigwPT09TWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK2JlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3Io'@;
put 'VWU9MDtVZTxUZS1BZTsrK1VlKXRoaXNbVWUrQWVdPWh0W1VlJU1lXX1yZXR1cm4gdGhpc307dmFyIHhlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gRmUoUGUsYmUpe2JlPWJlfHwxLzA7Zm9yKHZhciBBZSxUZT1QZS5sZW5ndGgscWU9bnVsbCxYZT1bXSxVZT0wO1VlPFRlOysrVWUp'@;
put 'e2lmKChBZT1QZS5jaGFyQ29kZUF0KFVlKSk+NTUyOTUmJkFlPDU3MzQ0KXtpZighcWUpe2lmKEFlPjU2MzE5KXsoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihVZSsxPT09VGUpeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfXFl'@;
put 'PUFlO2NvbnRpbnVlfWlmKEFlPDU2MzIwKXsoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEsMTg5KSxxZT1BZTtjb250aW51ZX1BZT02NTUzNisocWUtNTUyOTY8PDEwfEFlLTU2MzIwKX1lbHNlIHFlJiYoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEsMTg5KTtpZihxZT1udWxsLEFlPDEy'@;
put 'OCl7aWYoKGJlLT0xKTwwKWJyZWFrO1hlLnB1c2goQWUpfWVsc2UgaWYoQWU8MjA0OCl7aWYoKGJlLT0yKTwwKWJyZWFrO1hlLnB1c2goQWU+PjZ8MTkyLDYzJkFlfDEyOCl9ZWxzZSBpZihBZTw2NTUzNil7aWYoKGJlLT0zKTwwKWJyZWFrO1hlLnB1c2goQWU+PjEyfDIyNCxBZT4+NiY2M3wx'@;
put 'MjgsNjMmQWV8MTI4KX1lbHNle2lmKCEoQWU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoYmUtPTQpPDApYnJlYWs7WGUucHVzaChBZT4+MTh8MjQwLEFlPj4xMiY2M3wxMjgsQWU+PjYmNjN8MTI4LDYzJkFlfDEyOCl9fXJldHVybiBYZX1mdW5j'@;
put 'dGlvbiBXZShQZSl7cmV0dXJuIGFlLnRvQnl0ZUFycmF5KGZ1bmN0aW9uIEllKFBlKXtpZigoUGU9KFBlPVBlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKHhlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtQZS5sZW5ndGglNCE9MDspUGUrPSI9IjtyZXR1cm4gUGV9KFBlKSl9'@;
put 'ZnVuY3Rpb24gS2UoUGUsYmUsQWUsVGUpe2Zvcih2YXIgcWU9MDtxZTxUZSYmIShxZStBZT49YmUubGVuZ3RofHxxZT49UGUubGVuZ3RoKTsrK3FlKWJlW3FlK0FlXT1QZVtxZV07cmV0dXJuIHFlfWZ1bmN0aW9uIFllKFBlLGJlKXtyZXR1cm4gUGUgaW5zdGFuY2VvZiBiZXx8bnVsbCE9UGUm'@;
put 'Jm51bGwhPVBlLmNvbnN0cnVjdG9yJiZudWxsIT1QZS5jb25zdHJ1Y3Rvci5uYW1lJiZQZS5jb25zdHJ1Y3Rvci5uYW1lPT09YmUubmFtZX1mdW5jdGlvbiBRZShQZSl7cmV0dXJuIFBlIT1QZX12YXIgbHQ9ZnVuY3Rpb24oKXtmb3IodmFyIFBlPSIwMTIzNDU2Nzg5YWJjZGVmIixiZT1uZXcg'@;
put 'QXJyYXkoMjU2KSxBZT0wO0FlPDE2OysrQWUpZm9yKHZhciBUZT0xNipBZSxxZT0wO3FlPDE2OysrcWUpYmVbVGUrcWVdPVBlW0FlXStQZVtxZV07cmV0dXJuIGJlfSgpfSw4NjQyMDooYXQsTGUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNTE3OTMpLlRyYW5zZm9ybSxtPUYoNzIw'@;
put 'MjQpLnM7ZnVuY3Rpb24gTShPKXt4LmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIE8sdGhpcy5oYXNoTW9kZT90aGlzW09dPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFs'@;
put 'PXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfUYoNjY2OTgpKE0seCksTS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8sUix6KXsic3RyaW5nIj09dHlwZW9mIE8mJihPPWFlLmZyb20oTyxSKSk7dmFyIEs9dGhp'@;
put 'cy5fdXBkYXRlKE8pO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KHomJihLPXRoaXMuX3RvU3RyaW5nKEsseikpLEspfSxNLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sTS5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5'@;
put 'aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxNLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LE0ucHJvdG90eXBlLnNldEFBRD1mdW5j'@;
put 'dGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sTS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLFIseil7dmFyIEs7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKE8pOnRoaXMucHVzaCh0aGlzLl91cGRh'@;
put 'dGUoTykpfWNhdGNoKEwpe0s9TH1maW5hbGx5e3ooSyl9fSxNLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIFI7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goeil7Uj16fU8oUil9LE0ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKE8pe3ZhciBS'@;
put 'PXRoaXMuX19maW5hbCgpfHxhZS5hbGxvYygwKTtyZXR1cm4gTyYmKFI9dGhpcy5fdG9TdHJpbmcoUixPLCEwKSksUn0sTS5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKE8sUix6KXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgbShSKSx0aGlzLl9lbmNvZGluZz1S'@;
put 'KSx0aGlzLl9lbmNvZGluZyE9PVIpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZShPKTtyZXR1cm4geiYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LGF0LmV4cG9ydHM9TX0sMzg4NDA6KGF0LExlLEYpPT57dmFy'@;
put 'IGFlPUYoODg2NTEpLHg9RigzMTg1KTthdC5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgbGUoUil9O3ZhciBtPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntu'@;
put 'YW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIs'@;
put 'Ynl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIGxlKE8pe3RoaXMuY3VydmVUeXBlPW1bT10sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpPfSksdGhpcy5jdXJ2ZT1uZXcgYWUuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBNKE8s'@;
put 'Uix6KXtBcnJheS5pc0FycmF5KE8pfHwoTz1PLnRvQXJyYXkoKSk7dmFyIEs9bmV3IEJ1ZmZlcihPKTtpZih6JiZLLmxlbmd0aDx6KXt2YXIgTD1uZXcgQnVmZmVyKHotSy5sZW5ndGgpO0wuZmlsbCgwKSxLPUJ1ZmZlci5jb25jYXQoW0wsS10pfXJldHVybiBSP0sudG9TdHJpbmcoUik6S31t'@;
put 'LnAyMjQ9bS5zZWNwMjI0cjEsbS5wMjU2PW0uc2VjcDI1NnIxPW0ucHJpbWUyNTZ2MSxtLnAxOTI9bS5zZWNwMTkycjE9bS5wcmltZTE5MnYxLG0ucDM4ND1tLnNlY3AzODRyMSxtLnA1MjE9bS5zZWNwNTIxcjEsbGUucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihPLFIpe3JldHVy'@;
put 'biB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoTyxSKX0sbGUucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oTyxSLHope3JldHVybiBSPVJ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxSKSksTSh0'@;
put 'aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoTykuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSx6LHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxsZS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKE8sUil7dmFyIHo9dGhpcy5rZXlzLmdldFB1'@;
put 'YmxpYygiY29tcHJlc3NlZCI9PT1SLCEwKTtyZXR1cm4iaHlicmlkIj09PVImJih6WzBdPXpbei5sZW5ndGgtMV0lMj83OjYpLE0oeixPKX0sbGUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oTyl7cmV0dXJuIE0odGhpcy5rZXlzLmdldFByaXZhdGUoKSxPKX0sbGUucHJvdG90'@;
put 'eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihPLFIpe3JldHVybiBSPVJ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxSKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoTyksdGhpc30sbGUucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oTyxSKXtS'@;
put 'PVJ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxSKSk7dmFyIHo9bmV3IHgoTyk7cmV0dXJuIHo9ei50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZSh6KSx0aGlzfX0sMzE4NTpm'@;
put 'dW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBl'@;
put 'PWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1H'@;
put 'JiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVv'@;
put 'ZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODYyMykuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2'@;
put 'YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0x'@;
put 'Nz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0'@;
put 'aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYo'@;
put 'Im9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZl'@;
put 'PTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYo'@;
put 'dGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTky'@;
put 'NTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51'@;
put 'bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5s'@;
put 'ZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3'@;
put 'MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4'@;
put 'NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZh'@;
put 'ciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1T'@;
put 'Pj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnBy'@;
put 'b3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3'@;
put 'PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11'@;
put 'bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0Qr'@;
put 'KyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90'@;
put 'b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFd'@;
put 'Oyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5j'@;
put 'dGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEs'@;
put 'MTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgs'@;
put 'NjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQz'@;
put 'MiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRz'@;
put 'WzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3'@;
put 'Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1'@;
put 'bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1T'@;
put 'Pj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0xbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYo'@;
put 'SD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygp'@;
put 'P25lK0g6TFtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90'@;
put 'eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29y'@;
put 'ZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50'@;
put 'b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1m'@;
put 'dW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxD'@;
put 'PSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1pl'@;
put 'cm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5'@;
put 'NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8'@;
put 'KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3Ro'@;
put 'LTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lm'@;
put 'KGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJz'@;
put 'KCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBl'@;
put 'Lml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJv'@;
put 'dG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9y'@;
put 'KHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3Ro'@;
put 'P2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5l'@;
put 'Z2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBO'@;
put 'PTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUu'@;
put 'aXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0'@;
put 'aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTAp'@;
put 'O3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYz'@;
put 'Pj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVy'@;
put 'biB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2'@;
put 'ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9y'@;
put 'bVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcm'@;
put 'JkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgu'@;
put 'bGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0x'@;
put 'LEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5p'@;
put 'c3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5l'@;
put 'Z2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcu'@;
put 'bGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1D'@;
put 'JiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUu'@;
put 'c3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxJZT1m'@;
put 'ZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxRZT0wfE5bNF0sbHQ9ODE5MSZRZSxQZT1RZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4x'@;
put 'MyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxvdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49'@;
put 'MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sTHQ9bW4+Pj4xMyxRdD0wfGdbNl0sRHQ9ODE5MSZRdCxwdD1RdD4+PjEzLFl0PTB8Z1s3'@;
put 'XSxMbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBGbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXww'@;
put 'KSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhGbj4+PjI2KXwwLEZuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStN'@;
put 'YXRoLmltdWwoSWUsQ24pfDAsdz1NYXRoLmltdWwoSWUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDAp'@;
put 'KyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8'@;
put 'MCkrTWF0aC5pbXVsKEllLFduKXwwLHc9dytNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChk'@;
put 'ZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChJZSxIbil8MCx3PXcrTWF0aC5pbXVsKEllLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGgu'@;
put 'aW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbiks'@;
put 'cD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11'@;
put 'bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChJZSxobil8MCx3PXcrTWF0aC5pbXVsKEll'@;
put 'LHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02'@;
put 'NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRo'@;
put 'LmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11'@;
put 'bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKEllLF90KXwwLHc9dytNYXRoLmltdWwoSWUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSso'@;
put 'KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTHQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxMdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxV'@;
put 'dCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11'@;
put 'bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTHQpfDApK01hdGguaW11bChJZSxydCl8MCx3PXcrTWF0aC5pbXVsKEll'@;
put 'LEx0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02'@;
put 'NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRo'@;
put 'LmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11'@;
put 'bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KE9lLEx0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxMdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChJZSxEdCl8MCx3PXcrTWF0aC5pbXVsKEllLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGgu'@;
put 'aW11bChuZSxMbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsTG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChvdCxDbiks'@;
put 'cD0ocD1NYXRoLmltdWwob3QsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11'@;
put 'bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRl'@;
put 'LHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEx0KXwwKStNYXRoLmltdWwoWWUscnQp'@;
put 'fDAsdz13K01hdGguaW11bChZZSxMdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsTG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8'@;
put 'MCkrTWF0aC5pbXVsKEllLExuKXwwLHc9dytNYXRoLmltdWwoSWUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChk'@;
put 'ZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChvdCxXbil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KG90LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4p'@;
put 'fDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2'@;
put 'PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTHQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEx0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytN'@;
put 'YXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsTG4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGgu'@;
put 'aW11bChJZSx4bil8MCx3PXcrTWF0aC5pbXVsKEllLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDAp'@;
put 'KyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwob3QsSG4pfDAscD0ocD1wK01hdGguaW11bChvdCxmdCl8'@;
put 'MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxMdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsTHQpfDAsdj12K01hdGgu'@;
put 'aW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxMbil8MCx3PXcrTWF0aC5pbXVs'@;
put 'KFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'eGUsJHQpfDApK01hdGguaW11bChJZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChJZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3'@;
put 'PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChvdCxobil8MCxwPShwPXArTWF0aC5pbXVsKG90LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGgu'@;
put 'aW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxMdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsTHQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxMbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2Us'@;
put 'eG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8'@;
put 'MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGgu'@;
put 'aW11bChvdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTHQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KERlLEx0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUs'@;
put 'TG4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkx'@;
put 'JihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStN'@;
put 'YXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwob3QscnQpfDAscD0ocD1wK01hdGguaW11bChvdCxMdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsTHQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxMbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUs'@;
put 'eG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8'@;
put 'MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxMdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxMdCksdj12K01hdGgu'@;
put 'aW11bChvdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxMbil8MCx3PXcrTWF0aC5pbXVs'@;
put 'KERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'QWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3'@;
put 'PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChvdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKG90LHp0KXwwKStNYXRoLmltdWwodXQsTG4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGgu'@;
put 'aW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDAp'@;
put 'KyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxMbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsTG4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwob3QseG4pfDAscD0ocD1wK01hdGguaW11bChvdCxzbil8'@;
put 'MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChE'@;
put 'ZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKG90LFJuKXwwKXwwKSso'@;
put 'KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1GbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENb'@;
put 'NV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIs'@;
put 'RCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0'@;
put 'aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtn'@;
put 'Kyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYo'@;
put 'ZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0s'@;
put 'VS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgp'@;
put 'e2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1I'@;
put 'W2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9'@;
put 'MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sSWU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUllK09lLEhbSitm'@;
put 'ZStTXT14ZS1GZSxOW0orZmUrU109SWUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysr'@;
put 'O3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5w'@;
put 'cm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1y'@;
put 'ZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxt'@;
put 'KDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxE'@;
put 'Lmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252'@;
put 'ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2Zl'@;
put 'XS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVn'@;
put 'YXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5t'@;
put 'dWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4'@;
put 'ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBq'@;
put 'KEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0w'@;
put 'O048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51'@;
put 'bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRz'@;
put 'W2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5s'@;
put 'ZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBi'@;
put 'JiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53'@;
put 'b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9'@;
put 'dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNb'@;
put 'MF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBl'@;
put 'LmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09'@;
put 'RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRo'@;
put 'aXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNb'@;
put 'MF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1h'@;
put 'eCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0'@;
put 'aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0'@;
put 'aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hs'@;
put 'bnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3'@;
put 'MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxT'@;
put 'PTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlz'@;
put 'LmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcg'@;
put 'TShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtm'@;
put 'b3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZl'@;
put 'OylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxt'@;
put 'b2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQp'@;
put 'LCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIh'@;
put 'PT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixt'@;
put 'b2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9k'@;
put 'bihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEp'@;
put 'LmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24o'@;
put 'Yil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5k'@;
put 'aXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jk'@;
put 'c1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJl'@;
put 'dHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9'@;
put 'MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9'@;
put 'RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSks'@;
put 'Zy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNo'@;
put 'cm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxt'@;
put 'KCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQu'@;
put 'd29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7'@;
put 'cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9'@;
put 'ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVu'@;
put 'KCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkp'@;
put 'YnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlw'@;
put 'ZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYs'@;
put 'SD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlz'@;
put 'LndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1m'@;
put 'dW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0'@;
put 'b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10'@;
put 'aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0'@;
put 'aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMu'@;
put 'Y21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIp'@;
put 'fSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3'@;
put 'aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29u'@;
put 'dmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQi'@;
put 'KSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0'@;
put 'aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlz'@;
put 'LnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJ'@;
put 'U3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVk'@;
put 'LCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRo'@;
put 'aXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpu'@;
put 'dWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgp'@;
put 'fWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIy'@;
put 'NTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShH'@;
put 'Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhp'@;
put 'cy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0'@;
put 'aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5w'@;
put 'cm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7'@;
put 'cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlw'@;
put 'ZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihE'@;
put 'Lmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8'@;
put 'NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9'@;
put 'MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIu'@;
put 'bGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1n'@;
put 'LEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9'@;
put 'bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9z'@;
put 'aXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVk'@;
put 'PT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVl'@;
put 'LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0'@;
put 'aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5'@;
put 'cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBI'@;
put 'PWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJu'@;
put 'IHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11'@;
put 'bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9'@;
put 'PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgx'@;
put 'KS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhw'@;
put 'LE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIEllPXRoaXMucG93KHcsbmV3IE0oMSku'@;
put 'aXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKEllKSx3PUllLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9'@;
put 'MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYp'@;
put 'O05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtm'@;
put 'b3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2'@;
put 'fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxE'@;
put 'fSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBE'@;
put 'PXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNr'@;
put 'bih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5t'@;
put 'KSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmlt'@;
put 'YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90'@;
put 'eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw5NjM2MjooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig3NTgyOSks'@;
put 'bT1GKDM5NzA2KSxsZT1GKDk3OTY1KSxNPUYoODY0MjApO2Z1bmN0aW9uIE8oUil7TS5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Un1hZShPLE0pLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7dGhpcy5faGFzaC51cGRhdGUoUil9LE8ucHJvdG90eXBlLl9maW5hbD1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxhdC5leHBvcnRzPWZ1bmN0aW9uKHope3JldHVybiJtZDUiPT09KHo9ei50b0xvd2VyQ2FzZSgpKT9uZXcgeDoicm1kMTYwIj09PXp8fCJyaXBlbWQxNjAiPT09ej9uZXcgbTpuZXcgTyhsZSh6KSl9fSw4NzU4ODooYXQsTGUs'@;
put 'Rik9Pnt2YXIgYWU9Rig3NTgyOSk7YXQuZXhwb3J0cz1mdW5jdGlvbih4KXtyZXR1cm4obmV3IGFlKS51cGRhdGUoeCkuZGlnZXN0KCl9fSw4NTgyNTooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig5NTkyMiksbT1GKDg2NDIwKSxsZT1GKDg0MykuQnVmZmVy'@;
put 'LE09Rig4NzU4OCksTz1GKDM5NzA2KSxSPUYoOTc5NjUpLHo9bGUuYWxsb2MoMTI4KTtmdW5jdGlvbiBLKEwsayl7bS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgayYmKGs9bGUuZnJvbShrKSk7dmFyIEU9InNoYTUxMiI9PT1MfHwic2hhMzg0Ij09PUw/MTI4OjY0O3Ro'@;
put 'aXMuX2FsZz1MLHRoaXMuX2tleT1rLGsubGVuZ3RoPkU/az0oInJtZDE2MCI9PT1MP25ldyBPOlIoTCkpLnVwZGF0ZShrKS5kaWdlc3QoKTprLmxlbmd0aDxFJiYoaz1sZS5jb25jYXQoW2ssel0sRSkpO2Zvcih2YXIgVj10aGlzLl9pcGFkPWxlLmFsbG9jVW5zYWZlKEUpLEI9dGhpcy5fb3Bh'@;
put 'ZD1sZS5hbGxvY1Vuc2FmZShFKSxZPTA7WTxFO1krKylWW1ldPTU0XmtbWV0sQltZXT05Ml5rW1ldO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1MP25ldyBPOlIoTCksdGhpcy5faGFzaC51cGRhdGUoVil9YWUoSyxtKSxLLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe3RoaXMuX2hhc2gu'@;
put 'dXBkYXRlKEwpfSxLLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgTzpSKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoTCkuZGlnZXN0KCl9LGF0LmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oayxFKXtyZXR1cm4icm1kMTYwIj09PShrPWsudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09az9uZXcgSygicm1kMTYwIixFKToibWQ1Ij09PWs/bmV3IHgoTSxFKTpuZXcgSyhrLEUpfX0sOTU5MjI6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2Njk4'@;
put 'KSx4PUYoODQzKS5CdWZmZXIsbT1GKDg2NDIwKSxsZT14LmFsbG9jKDEyOCksTT02NDtmdW5jdGlvbiBPKFIseil7bS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgeiYmKHo9eC5mcm9tKHopKSx0aGlzLl9hbGc9Uix0aGlzLl9rZXk9eix6Lmxlbmd0aD5NP3o9Uih6KTp6'@;
put 'Lmxlbmd0aDxNJiYoej14LmNvbmNhdChbeixsZV0sTSkpO2Zvcih2YXIgSz10aGlzLl9pcGFkPXguYWxsb2NVbnNhZmUoTSksTD10aGlzLl9vcGFkPXguYWxsb2NVbnNhZmUoTSksaz0wO2s8TTtrKyspS1trXT01NF56W2tdLExba109OTJeeltrXTt0aGlzLl9oYXNoPVtLXX1hZShPLG0pLE8u'@;
put 'cHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7dGhpcy5faGFzaC5wdXNoKFIpfSxPLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgUj10aGlzLl9hbGcoeC5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoeC5jb25jYXQoW3RoaXMuX29wYWQsUl0pKX0sYXQu'@;
put 'ZXhwb3J0cz1PfSw3NzkwMzooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7TGUucmFuZG9tQnl0ZXM9TGUucm5nPUxlLnBzZXVkb1JhbmRvbUJ5dGVzPUxlLnBybmc9Rig0NDAxOSksTGUuY3JlYXRlSGFzaD1MZS5IYXNoPUYoOTYzNjIpLExlLmNyZWF0ZUhtYWM9TGUuSG1hYz1GKDg1ODI1KTt2'@;
put 'YXIgYWU9Rig4MTY5OSkseD1PYmplY3Qua2V5cyhhZSksbT1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoeCk7TGUuZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG19O3ZhciBsZT1GKDU3MTAwKTtMZS5wYmtkZjI9'@;
put 'bGUucGJrZGYyLExlLnBia2RmMlN5bmM9bGUucGJrZGYyU3luYzt2YXIgTT1GKDI1NjAwKTtMZS5DaXBoZXI9TS5DaXBoZXIsTGUuY3JlYXRlQ2lwaGVyPU0uY3JlYXRlQ2lwaGVyLExlLkNpcGhlcml2PU0uQ2lwaGVyaXYsTGUuY3JlYXRlQ2lwaGVyaXY9TS5jcmVhdGVDaXBoZXJpdixMZS5E'@;
put 'ZWNpcGhlcj1NLkRlY2lwaGVyLExlLmNyZWF0ZURlY2lwaGVyPU0uY3JlYXRlRGVjaXBoZXIsTGUuRGVjaXBoZXJpdj1NLkRlY2lwaGVyaXYsTGUuY3JlYXRlRGVjaXBoZXJpdj1NLmNyZWF0ZURlY2lwaGVyaXYsTGUuZ2V0Q2lwaGVycz1NLmdldENpcGhlcnMsTGUubGlzdENpcGhlcnM9TS5s'@;
put 'aXN0Q2lwaGVyczt2YXIgTz1GKDQ1MTQ0KTtMZS5EaWZmaWVIZWxsbWFuR3JvdXA9Ty5EaWZmaWVIZWxsbWFuR3JvdXAsTGUuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPU8uY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLExlLmdldERpZmZpZUhlbGxtYW49Ty5nZXREaWZmaWVIZWxsbWFuLExl'@;
put 'LmNyZWF0ZURpZmZpZUhlbGxtYW49Ty5jcmVhdGVEaWZmaWVIZWxsbWFuLExlLkRpZmZpZUhlbGxtYW49Ty5EaWZmaWVIZWxsbWFuO3ZhciBSPUYoMjc2ODYpO0xlLmNyZWF0ZVNpZ249Ui5jcmVhdGVTaWduLExlLlNpZ249Ui5TaWduLExlLmNyZWF0ZVZlcmlmeT1SLmNyZWF0ZVZlcmlmeSxM'@;
put 'ZS5WZXJpZnk9Ui5WZXJpZnksTGUuY3JlYXRlRUNESD1GKDM4ODQwKTt2YXIgej1GKDI3MDUwKTtMZS5wdWJsaWNFbmNyeXB0PXoucHVibGljRW5jcnlwdCxMZS5wcml2YXRlRW5jcnlwdD16LnByaXZhdGVFbmNyeXB0LExlLnB1YmxpY0RlY3J5cHQ9ei5wdWJsaWNEZWNyeXB0LExlLnByaXZh'@;
put 'dGVEZWNyeXB0PXoucHJpdmF0ZURlY3J5cHQ7dmFyIEs9Rig2MTIzNyk7TGUucmFuZG9tRmlsbD1LLnJhbmRvbUZpbGwsTGUucmFuZG9tRmlsbFN5bmM9Sy5yYW5kb21GaWxsU3luYyxMZS5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbInNvcnJ5LCBjcmVh'@;
put 'dGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwid2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMiLCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiXS5qb2luKCJcbiIpKX0sTGUuY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9T'@;
put 'QUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixS'@;
put 'U0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZ'@;
put 'QlJJRDo2fX0sMTAwMTI6ZnVuY3Rpb24oYXQsTGUsRil7dmFyIGFlO2F0LmV4cG9ydHM9KGFlPWFlfHxmdW5jdGlvbih4LG0pe3ZhciBsZTtpZih0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0byYmKGxlPXdpbmRvdy5jcnlwdG8pLHR5cGVvZiBzZWxmPCJ1IiYmc2VsZi5jcnlwdG8m'@;
put 'JihsZT1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKGxlPWdsb2JhbFRoaXMuY3J5cHRvKSwhbGUmJnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubXNDcnlwdG8mJihsZT13aW5kb3cubXNDcnlwdG8pLCFsZSYmdHlwZW9mIGdsb2JhbDwi'@;
put 'dSImJmdsb2JhbC5jcnlwdG8mJihsZT1nbG9iYWwuY3J5cHRvKSwhbGUpdHJ5e2xlPUYoNzc5MDMpfWNhdGNoe312YXIgTT1mdW5jdGlvbigpe2lmKGxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbGUuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gbGUuZ2V0UmFuZG9tVmFsdWVzKG5ldyBV'@;
put 'aW50MzJBcnJheSgxKSlbMF19Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBsZS5yYW5kb21CeXRlcyl0cnl7cmV0dXJuIGxlLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1'@;
put 'c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sTz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIFUoKXt9cmV0dXJuIGZ1bmN0aW9uKHEpe3ZhciBlZTtyZXR1cm4gVS5wcm90b3R5cGU9cSxlZT1uZXcgVSxVLnByb3RvdHlwZT1udWxsLGVlfX0oKSxSPXt9LHo9'@;
put 'Ui5saWI9e30sSz16LkJhc2U9e2V4dGVuZDpmdW5jdGlvbihVKXt2YXIgcT1PKHRoaXMpO3JldHVybiBVJiZxLm1peEluKFUpLCghcS5oYXNPd25Qcm9wZXJ0eSgiaW5pdCIpfHx0aGlzLmluaXQ9PT1xLmluaXQpJiYocS5pbml0PWZ1bmN0aW9uKCl7cS4kc3VwZXIuaW5pdC5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9KSxxLmluaXQucHJvdG90eXBlPXEscS4kc3VwZXI9dGhpcyxxfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgVT10aGlzLmV4dGVuZCgpO3JldHVybiBVLmluaXQuYXBwbHkoVSxhcmd1bWVudHMpLFV9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKFUpe2Zvcih2'@;
put 'YXIgcSBpbiBVKVUuaGFzT3duUHJvcGVydHkocSkmJih0aGlzW3FdPVVbcV0pO1UuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPVUudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19LEw9'@;
put 'ei5Xb3JkQXJyYXk9Sy5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oVSxxKXtVPXRoaXMud29yZHM9VXx8W10sdGhpcy5zaWdCeXRlcz1udWxsIT1xP3E6NCpVLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oVSl7cmV0dXJuKFV8fEUpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKFUp'@;
put 'e3ZhciBxPXRoaXMud29yZHMsZWU9VS53b3Jkcyx0ZT10aGlzLnNpZ0J5dGVzLG9lPVUuc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLHRlJTQpZm9yKHZhciBzZT0wO3NlPG9lO3NlKyspcVt0ZStzZT4+PjJdfD0oZWVbc2U+Pj4yXT4+PjI0LXNlJTQqOCYyNTUpPDwyNC0odGUrc2UpJTQqODtl'@;
put 'bHNlIGZvcih2YXIgdWU9MDt1ZTxvZTt1ZSs9NClxW3RlK3VlPj4+Ml09ZWVbdWU+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9b2UsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgVT10aGlzLndvcmRzLHE9dGhpcy5zaWdCeXRlcztVW3E+Pj4yXSY9NDI5NDk2NzI5NTw8MzItcSU0Kjgs'@;
put 'VS5sZW5ndGg9eC5jZWlsKHEvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFU9Sy5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBVLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksVX0scmFuZG9tOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1bXSxlZT0wO2VlPFU7ZWUrPTQpcS5wdXNoKE0oKSk7cmV0'@;
put 'dXJuIG5ldyBMLmluaXQocSxVKX19KSxrPVIuZW5jPXt9LEU9ay5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS53b3JkcyxlZT1VLnNpZ0J5dGVzLHRlPVtdLG9lPTA7b2U8ZWU7b2UrKyl7dmFyIHNlPXFbb2U+Pj4yXT4+PjI0LW9lJTQqOCYyNTU7dGUucHVzaCgoc2U+'@;
put 'Pj40KS50b1N0cmluZygxNikpLHRlLnB1c2goKDE1JnNlKS50b1N0cmluZygxNikpfXJldHVybiB0ZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVUubGVuZ3RoLGVlPVtdLHRlPTA7dGU8cTt0ZSs9MillZVt0ZT4+PjNdfD1wYXJzZUludChVLnN1YnN0cih0ZSwyKSwx'@;
put 'Nik8PDI0LXRlJTgqNDtyZXR1cm4gbmV3IEwuaW5pdChlZSxxLzIpfX0saj1rLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLndvcmRzLGVlPVUuc2lnQnl0ZXMsdGU9W10sb2U9MDtvZTxlZTtvZSsrKXRlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShxW29lPj4+'@;
put 'Ml0+Pj4yNC1vZSU0KjgmMjU1KSk7cmV0dXJuIHRlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS5sZW5ndGgsZWU9W10sdGU9MDt0ZTxxO3RlKyspZWVbdGU+Pj4yXXw9KDI1NSZVLmNoYXJDb2RlQXQodGUpKTw8MjQtdGUlNCo4O3JldHVybiBuZXcgTC5pbml0KGVl'@;
put 'LHEpfX0sVj1rLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihVKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoai5zdHJpbmdpZnkoVSkpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihVKXtyZXR1cm4g'@;
put 'ai5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoVSkpKX19LEI9ei5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPUsuZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IEwuaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oVSl7InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBVJiYoVT1WLnBhcnNlKFUpKSx0aGlzLl9kYXRhLmNvbmNhdChVKSx0aGlzLl9uRGF0YUJ5dGVzKz1VLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbihVKXt2YXIgcSxlZT10aGlzLl9kYXRhLHRlPWVlLndvcmRzLG9lPWVlLnNpZ0J5dGVzLHNlPXRoaXMuYmxvY2tTaXpl'@;
put 'LHVlPW9lLyg0KnNlKSxjZT0odWU9VT94LmNlaWwodWUpOngubWF4KCgwfHVlKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpzZSxHPXgubWluKDQqY2Usb2UpO2lmKGNlKXtmb3IodmFyIGI9MDtiPGNlO2IrPXNlKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKHRlLGIpO3E9dGUuc3BsaWNlKDAsY2Up'@;
put 'LGVlLnNpZ0J5dGVzLT1HfXJldHVybiBuZXcgTC5pbml0KHEsRyl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFU9Sy5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBVLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxVfSxfbWluQnVmZmVyU2l6ZTowfSksWD0oei5IYXNoZXI9Qi5leHRlbmQoe2NmZzpL'@;
put 'LmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oVSl7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKFUpLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtCLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuX2FwcGVuZChVKSx0'@;
put 'aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oVSl7cmV0dXJuIFUmJnRoaXMuX2FwcGVuZChVKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxLGVlKXtyZXR1cm4gbmV3IFUuaW5p'@;
put 'dChlZSkuZmluYWxpemUocSl9fSxfY3JlYXRlSG1hY0hlbHBlcjpmdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24ocSxlZSl7cmV0dXJuIG5ldyBYLkhNQUMuaW5pdChVLGVlKS5maW5hbGl6ZShxKX19fSksUi5hbGdvPXt9KTtyZXR1cm4gUn0oTWF0aCksYWUpfSw5Mjg3MzpmdW5jdGlvbihh'@;
put 'dCxMZSxGKXt2YXIgYWU7YXQuZXhwb3J0cz0oYWU9RigxMDAxMiksZnVuY3Rpb24oeCl7dmFyIG09YWUsbGU9bS5saWIsTT1sZS5Xb3JkQXJyYXksTz1sZS5IYXNoZXIsUj1tLmFsZ28sej1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFY9MDtWPDY0O1YrKyl6W1ZdPTQyOTQ5NjcyOTYqeC5hYnMo'@;
put 'eC5zaW4oVisxKSl8MH0oKTt2YXIgSz1SLk1ENT1PLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBNLmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oVixCKXtmb3IodmFy'@;
put 'IFk9MDtZPDE2O1krKyl7dmFyIFg9QitZLFU9VltYXTtWW1hdPTE2NzExOTM1JihVPDw4fFU+Pj4yNCl8NDI3ODI1NTM2MCYoVTw8MjR8VT4+PjgpfXZhciBxPXRoaXMuX2hhc2gud29yZHMsZWU9VltCKzBdLHRlPVZbQisxXSxvZT1WW0IrMl0sc2U9VltCKzNdLGhlPVZbQis0XSx1ZT1WW0Ir'@;
put 'NV0sY2U9VltCKzZdLEc9VltCKzddLGI9VltCKzhdLEQ9VltCKzldLEg9VltCKzEwXSxOPVZbQisxMV0sZz1WW0IrMTJdLEM9VltCKzEzXSxTPVZbQisxNF0sdj1WW0IrMTVdLHA9cVswXSx3PXFbMV0sSj1xWzJdLG5lPXFbM107cD1MKHAsdyxKLG5lLGVlLDcselswXSksbmU9TChuZSxwLHcs'@;
put 'Six0ZSwxMix6WzFdKSxKPUwoSixuZSxwLHcsb2UsMTcselsyXSksdz1MKHcsSixuZSxwLHNlLDIyLHpbM10pLHA9TChwLHcsSixuZSxoZSw3LHpbNF0pLG5lPUwobmUscCx3LEosdWUsMTIsels1XSksSj1MKEosbmUscCx3LGNlLDE3LHpbNl0pLHc9TCh3LEosbmUscCxHLDIyLHpbN10pLHA9'@;
put 'TChwLHcsSixuZSxiLDcsels4XSksbmU9TChuZSxwLHcsSixELDEyLHpbOV0pLEo9TChKLG5lLHAsdyxILDE3LHpbMTBdKSx3PUwodyxKLG5lLHAsTiwyMix6WzExXSkscD1MKHAsdyxKLG5lLGcsNyx6WzEyXSksbmU9TChuZSxwLHcsSixDLDEyLHpbMTNdKSxKPUwoSixuZSxwLHcsUywxNyx6'@;
put 'WzE0XSkscD1rKHAsdz1MKHcsSixuZSxwLHYsMjIselsxNV0pLEosbmUsdGUsNSx6WzE2XSksbmU9ayhuZSxwLHcsSixjZSw5LHpbMTddKSxKPWsoSixuZSxwLHcsTiwxNCx6WzE4XSksdz1rKHcsSixuZSxwLGVlLDIwLHpbMTldKSxwPWsocCx3LEosbmUsdWUsNSx6WzIwXSksbmU9ayhuZSxw'@;
put 'LHcsSixILDkselsyMV0pLEo9ayhKLG5lLHAsdyx2LDE0LHpbMjJdKSx3PWsodyxKLG5lLHAsaGUsMjAselsyM10pLHA9ayhwLHcsSixuZSxELDUselsyNF0pLG5lPWsobmUscCx3LEosUyw5LHpbMjVdKSxKPWsoSixuZSxwLHcsc2UsMTQselsyNl0pLHc9ayh3LEosbmUscCxiLDIwLHpbMjdd'@;
put 'KSxwPWsocCx3LEosbmUsQyw1LHpbMjhdKSxuZT1rKG5lLHAsdyxKLG9lLDkselsyOV0pLEo9ayhKLG5lLHAsdyxHLDE0LHpbMzBdKSxwPUUocCx3PWsodyxKLG5lLHAsZywyMCx6WzMxXSksSixuZSx1ZSw0LHpbMzJdKSxuZT1FKG5lLHAsdyxKLGIsMTEselszM10pLEo9RShKLG5lLHAsdyxO'@;
put 'LDE2LHpbMzRdKSx3PUUodyxKLG5lLHAsUywyMyx6WzM1XSkscD1FKHAsdyxKLG5lLHRlLDQselszNl0pLG5lPUUobmUscCx3LEosaGUsMTEselszN10pLEo9RShKLG5lLHAsdyxHLDE2LHpbMzhdKSx3PUUodyxKLG5lLHAsSCwyMyx6WzM5XSkscD1FKHAsdyxKLG5lLEMsNCx6WzQwXSksbmU9'@;
put 'RShuZSxwLHcsSixlZSwxMSx6WzQxXSksSj1FKEosbmUscCx3LHNlLDE2LHpbNDJdKSx3PUUodyxKLG5lLHAsY2UsMjMsels0M10pLHA9RShwLHcsSixuZSxELDQsels0NF0pLG5lPUUobmUscCx3LEosZywxMSx6WzQ1XSksSj1FKEosbmUscCx3LHYsMTYsels0Nl0pLHA9aihwLHc9RSh3LEos'@;
put 'bmUscCxvZSwyMyx6WzQ3XSksSixuZSxlZSw2LHpbNDhdKSxuZT1qKG5lLHAsdyxKLEcsMTAsels0OV0pLEo9aihKLG5lLHAsdyxTLDE1LHpbNTBdKSx3PWoodyxKLG5lLHAsdWUsMjEsels1MV0pLHA9aihwLHcsSixuZSxnLDYsels1Ml0pLG5lPWoobmUscCx3LEosc2UsMTAsels1M10pLEo9'@;
put 'aihKLG5lLHAsdyxILDE1LHpbNTRdKSx3PWoodyxKLG5lLHAsdGUsMjEsels1NV0pLHA9aihwLHcsSixuZSxiLDYsels1Nl0pLG5lPWoobmUscCx3LEosdiwxMCx6WzU3XSksSj1qKEosbmUscCx3LGNlLDE1LHpbNThdKSx3PWoodyxKLG5lLHAsQywyMSx6WzU5XSkscD1qKHAsdyxKLG5lLGhl'@;
put 'LDYsels2MF0pLG5lPWoobmUscCx3LEosTiwxMCx6WzYxXSksSj1qKEosbmUscCx3LG9lLDE1LHpbNjJdKSx3PWoodyxKLG5lLHAsRCwyMSx6WzYzXSkscVswXT1xWzBdK3B8MCxxWzFdPXFbMV0rd3wwLHFbMl09cVsyXStKfDAscVszXT1xWzNdK25lfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9u'@;
put 'KCl7dmFyIFY9dGhpcy5fZGF0YSxCPVYud29yZHMsWT04KnRoaXMuX25EYXRhQnl0ZXMsWD04KlYuc2lnQnl0ZXM7QltYPj4+NV18PTEyODw8MjQtWCUzMjt2YXIgVT14LmZsb29yKFkvNDI5NDk2NzI5NikscT1ZO0JbMTUrKFgrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKFU8PDh8VT4+PjI0KXw0'@;
put 'Mjc4MjU1MzYwJihVPDwyNHxVPj4+OCksQlsxNCsoWCs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYocTw8OHxxPj4+MjQpfDQyNzgyNTUzNjAmKHE8PDI0fHE+Pj44KSxWLnNpZ0J5dGVzPTQqKEIubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGVlPXRoaXMuX2hhc2gsdGU9ZWUud29y'@;
put 'ZHMsb2U9MDtvZTw0O29lKyspe3ZhciBzZT10ZVtvZV07dGVbb2VdPTE2NzExOTM1JihzZTw8OHxzZT4+PjI0KXw0Mjc4MjU1MzYwJihzZTw8MjR8c2U+Pj44KX1yZXR1cm4gZWV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFY9Ty5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBWLl9oYXNoPXRoaXMu'@;
put 'X2hhc2guY2xvbmUoKSxWfX0pO2Z1bmN0aW9uIEwoVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhCJll8fkImWCkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStCfWZ1bmN0aW9uIGsoVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhCJlh8WSZ+WCkrVStlZTtyZXR1cm4odGU8PHF8dGU+'@;
put 'Pj4zMi1xKStCfWZ1bmN0aW9uIEUoVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhCXlleWCkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStCfWZ1bmN0aW9uIGooVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhZXihCfH5YKSkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStCfW0u'@;
put 'TUQ1PU8uX2NyZWF0ZUhlbHBlcihLKSxtLkhtYWNNRDU9Ty5fY3JlYXRlSG1hY0hlbHBlcihLKX0oTWF0aCksYWUuTUQ1KX0sNDAxMzI6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO0xlLnV0aWxzPUYoNTIyOTQpLExlLkNpcGhlcj1GKDI5NDg0KSxMZS5ERVM9RigxNDM3NCksTGUuQ0JDPUYo'@;
put 'MTIwNjYpLExlLkVERT1GKDU5NzEwKX0sMTIwNjY6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09e307ZnVuY3Rpb24gbGUoTyl7YWUuZXF1YWwoTy5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtm'@;
put 'b3IodmFyIFI9MDtSPHRoaXMuaXYubGVuZ3RoO1IrKyl0aGlzLml2W1JdPU9bUl19TGUuaW5zdGFudGlhdGU9ZnVuY3Rpb24gTShPKXtmdW5jdGlvbiBSKGspe08uY2FsbCh0aGlzLGspLHRoaXMuX2NiY0luaXQoKX14KFIsTyk7Zm9yKHZhciB6PU9iamVjdC5rZXlzKG0pLEs9MDtLPHoubGVu'@;
put 'Z3RoO0srKyl7dmFyIEw9eltLXTtSLnByb3RvdHlwZVtMXT1tW0xdfXJldHVybiBSLmNyZWF0ZT1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IFIoRSl9LFJ9LG0uX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgUj1uZXcgbGUodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1SfSxtLl91cGRh'@;
put 'dGU9ZnVuY3Rpb24oUix6LEssTCl7dmFyIEU9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLGo9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylqW1ZdXj1SW3orVl07Zm9yKEUuX3VwZGF0'@;
put 'ZS5jYWxsKHRoaXMsaiwwLEssTCksVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKWpbVl09S1tMK1ZdfWVsc2V7Zm9yKEUuX3VwZGF0ZS5jYWxsKHRoaXMsUix6LEssTCksVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKUtbTCtWXV49altWXTtmb3IoVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKWpb'@;
put 'Vl09Ult6K1ZdfX19LDI5NDg0OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCk7ZnVuY3Rpb24geChtKXt0aGlzLm9wdGlvbnM9bSx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFy'@;
put 'cmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0hMSE9PW0ucGFkZGluZ31hdC5leHBvcnRzPXgseC5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LHgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihsZSl7cmV0dXJuIDA9PT1sZS5sZW5ndGg/W106'@;
put 'ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQobGUpOnRoaXMuX3VwZGF0ZUVuY3J5cHQobGUpfSx4LnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKGxlLE0pe2Zvcih2YXIgTz1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsbGUubGVu'@;
put 'Z3RoLU0pLFI9MDtSPE87UisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK1JdPWxlW00rUl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1PLE99LHgucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihsZSxNKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsbGUsTSks'@;
put 'dGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0seC5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24obGUpe3ZhciBNPTAsTz0wLHo9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrbGUubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRo'@;
put 'aXMuYnVmZmVyT2ZmJiYoTSs9dGhpcy5fYnVmZmVyKGxlLE0pLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYoTys9dGhpcy5fZmx1c2hCdWZmZXIoeixPKSkpO2Zvcih2YXIgSz1sZS5sZW5ndGgtKGxlLmxlbmd0aC1NKSV0aGlzLmJsb2NrU2l6ZTtNPEs7TSs9dGhpcy5i'@;
put 'bG9ja1NpemUpdGhpcy5fdXBkYXRlKGxlLE0seixPKSxPKz10aGlzLmJsb2NrU2l6ZTtmb3IoO008bGUubGVuZ3RoO00rKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1sZVtNXTtyZXR1cm4gen0seC5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rp'@;
put 'b24obGUpe2Zvcih2YXIgTT0wLE89MCxSPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrbGUubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSx6PW5ldyBBcnJheShSKnRoaXMuYmxvY2tTaXplKTtSPjA7Ui0tKU0rPXRoaXMuX2J1ZmZlcihsZSxNKSxPKz10aGlzLl9mbHVzaEJ1ZmZlcih6LE8p'@;
put 'O3JldHVybiBNKz10aGlzLl9idWZmZXIobGUsTSksen0seC5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24obGUpe3ZhciBNLE87cmV0dXJuIGxlJiYoTT10aGlzLnVwZGF0ZShsZSkpLE89ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlw'@;
put 'dCgpLE0/TS5jb25jYXQoTyk6T30seC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihsZSxNKXtpZigwPT09TSlyZXR1cm4hMTtmb3IoO008bGUubGVuZ3RoOylsZVtNKytdPTA7cmV0dXJuITB9LHgucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMu'@;
put 'YnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgbGU9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsbGUsMCksbGV9LHgucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihsZSl7cmV0dXJuIGxlfSx4LnByb3RvdHlwZS5f'@;
put 'ZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7YWUuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIGxlPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKGxlLDApLHRoaXMuX3Vu'@;
put 'cGFkKGxlKX19LDE0Mzc0OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KSxtPUYoNTIyOTQpLGxlPUYoMjk0ODQpO2Z1bmN0aW9uIE0oKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gTyh6KXtsZS5jYWxsKHRo'@;
put 'aXMseik7dmFyIEs9bmV3IE07dGhpcy5fZGVzU3RhdGU9Syx0aGlzLmRlcml2ZUtleXMoSyx6LmtleSl9eChPLGxlKSxhdC5leHBvcnRzPU8sTy5jcmVhdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBPKEspfTt2YXIgUj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07Ty5wcm90'@;
put 'b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihLLEwpe0sua2V5cz1uZXcgQXJyYXkoMzIpLGFlLmVxdWFsKEwubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgaz1tLnJlYWRVSW50MzJCRShMLDApLEU9bS5yZWFkVUludDMyQkUoTCw0KTttLnBjMShrLEUs'@;
put 'Sy50bXAsMCksaz1LLnRtcFswXSxFPUsudG1wWzFdO2Zvcih2YXIgaj0wO2o8Sy5rZXlzLmxlbmd0aDtqKz0yKXt2YXIgVj1SW2o+Pj4xXTtrPW0ucjI4c2hsKGssViksRT1tLnIyOHNobChFLFYpLG0ucGMyKGssRSxLLmtleXMsail9fSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEss'@;
put 'TCxrLEUpe3ZhciBqPXRoaXMuX2Rlc1N0YXRlLFY9bS5yZWFkVUludDMyQkUoSyxMKSxCPW0ucmVhZFVJbnQzMkJFKEssTCs0KTttLmlwKFYsQixqLnRtcCwwKSxWPWoudG1wWzBdLEI9ai50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoaixWLEIsai50bXAsMCk6'@;
put 'dGhpcy5fZGVjcnlwdChqLFYsQixqLnRtcCwwKSxCPWoudG1wWzFdLG0ud3JpdGVVSW50MzJCRShrLFY9ai50bXBbMF0sRSksbS53cml0ZVVJbnQzMkJFKGssQixFKzQpfSxPLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEssTCl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZh'@;
put 'ciBrPUsubGVuZ3RoLUwsRT1MO0U8Sy5sZW5ndGg7RSsrKUtbRV09aztyZXR1cm4hMH0sTy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEspe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiBLO2Zvcih2YXIgTD1LW0subGVuZ3RoLTFdLGs9Sy5sZW5ndGgtTDtrPEsubGVuZ3RoO2srKylh'@;
put 'ZS5lcXVhbChLW2tdLEwpO3JldHVybiBLLnNsaWNlKDAsSy5sZW5ndGgtTCl9LE8ucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKEssTCxrLEUsail7Zm9yKHZhciBWPUwsQj1rLFk9MDtZPEsua2V5cy5sZW5ndGg7WSs9Mil7dmFyIFg9Sy5rZXlzW1ldLFU9Sy5rZXlzW1krMV07bS5leHBh'@;
put 'bmQoQixLLnRtcCwwKTt2YXIgcT1tLnN1YnN0aXR1dGUoWF49Sy50bXBbMF0sVV49Sy50bXBbMV0pLHRlPUI7Qj0oVl5tLnBlcm11dGUocSkpPj4+MCxWPXRlfW0ucmlwKEIsVixFLGopfSxPLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihLLEwsayxFLGope2Zvcih2YXIgVj1rLEI9TCxZ'@;
put 'PUsua2V5cy5sZW5ndGgtMjtZPj0wO1ktPTIpe3ZhciBYPUsua2V5c1tZXSxVPUsua2V5c1tZKzFdO20uZXhwYW5kKFYsSy50bXAsMCk7dmFyIHE9bS5zdWJzdGl0dXRlKFhePUsudG1wWzBdLFVePUsudG1wWzFdKSx0ZT1WO1Y9KEJebS5wZXJtdXRlKHEpKT4+PjAsQj10ZX1tLnJpcChWLEIs'@;
put 'RSxqKX19LDU5NzEwOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KSxtPUYoMjk0ODQpLGxlPUYoMTQzNzQpO2Z1bmN0aW9uIE0oUix6KXthZS5lcXVhbCh6Lmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEs9ei5zbGljZSgwLDgp'@;
put 'LEw9ei5zbGljZSg4LDE2KSxrPXouc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1SP1tsZS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpLfSksbGUuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLGxlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Omt9KV06'@;
put 'W2xlLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Omt9KSxsZS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpMfSksbGUuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6S30pXX1mdW5jdGlvbiBPKFIpe20uY2FsbCh0aGlzLFIpO3ZhciB6PW5ldyBNKHRoaXMudHlwZSx0aGlzLm9wdGlv'@;
put 'bnMua2V5KTt0aGlzLl9lZGVTdGF0ZT16fXgoTyxtKSxhdC5leHBvcnRzPU8sTy5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBPKHopfSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosSyxMLGspe3ZhciBFPXRoaXMuX2VkZVN0YXRlO0UuY2lwaGVyc1swXS5fdXBkYXRlKHos'@;
put 'SyxMLGspLEUuY2lwaGVyc1sxXS5fdXBkYXRlKEwsayxMLGspLEUuY2lwaGVyc1syXS5fdXBkYXRlKEwsayxMLGspfSxPLnByb3RvdHlwZS5fcGFkPWxlLnByb3RvdHlwZS5fcGFkLE8ucHJvdG90eXBlLl91bnBhZD1sZS5wcm90b3R5cGUuX3VucGFkfSw1MjI5NDooYXQsTGUpPT57InVzZSBz'@;
put 'dHJpY3QiO0xlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihsZSxNKXtyZXR1cm4obGVbMCtNXTw8MjR8bGVbMStNXTw8MTZ8bGVbMitNXTw8OHxsZVszK01dKT4+PjB9LExlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24obGUsTSxPKXtsZVswK09dPU0+Pj4yNCxsZVsxK09dPU0+Pj4xNiYyNTUsbGVb'@;
put 'MitPXT1NPj4+OCYyNTUsbGVbMytPXT0yNTUmTX0sTGUuaXA9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxMPTY7TD49MDtMLT0yKXtmb3IodmFyIGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PU0+Pj5rK0wmMTtmb3Ioaz0wO2s8PTI0O2srPTgpejw8PTEsenw9bGU+Pj5rK0wm'@;
put 'MX1mb3IoTD02O0w+PTA7TC09Mil7Zm9yKGs9MTtrPD0yNTtrKz04KUs8PD0xLEt8PU0+Pj5rK0wmMTtmb3Ioaz0xO2s8PTI1O2srPTgpSzw8PTEsS3w9bGU+Pj5rK0wmMX1PW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxMZS5yaXA9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9'@;
put 'MCxMPTA7TDw0O0wrKylmb3IodmFyIGs9MjQ7az49MDtrLT04KXo8PD0xLHp8PU0+Pj5rK0wmMSx6PDw9MSx6fD1sZT4+PmsrTCYxO2ZvcihMPTQ7TDw4O0wrKylmb3Ioaz0yNDtrPj0wO2stPTgpSzw8PTEsS3w9TT4+PmsrTCYxLEs8PD0xLEt8PWxlPj4+aytMJjE7T1tSKzBdPXo+Pj4wLE9b'@;
put 'UisxXT1LPj4+MH0sTGUucGMxPWZ1bmN0aW9uKGxlLE0sTyxSKXtmb3IodmFyIHo9MCxLPTAsTD03O0w+PTU7TC0tKXtmb3IodmFyIGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PU0+PmsrTCYxO2ZvcihrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1sZT4+aytMJjF9Zm9yKGs9MDtrPD0yNDtrKz04'@;
put 'KXo8PD0xLHp8PU0+PmsrTCYxO2ZvcihMPTE7TDw9MztMKyspe2ZvcihrPTA7azw9MjQ7ays9OClLPDw9MSxLfD1NPj5rK0wmMTtmb3Ioaz0wO2s8PTI0O2srPTgpSzw8PTEsS3w9bGU+PmsrTCYxfWZvcihrPTA7azw9MjQ7ays9OClLPDw9MSxLfD1sZT4+aytMJjE7T1tSKzBdPXo+Pj4wLE9b'@;
put 'UisxXT1LPj4+MH0sTGUucjI4c2hsPWZ1bmN0aW9uKGxlLE0pe3JldHVybiBsZTw8TSYyNjg0MzU0NTV8bGU+Pj4yOC1NfTt2YXIgRj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUs'@;
put 'MTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtMZS5wYzI9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxMPUYubGVuZ3RoPj4+MSxrPTA7azxMO2srKyl6PDw9MSx6fD1sZT4+PkZba10mMTtmb3Ioaz1MO2s8Ri5sZW5ndGg7aysrKUs8PD0xLEt8PU0+'@;
put 'Pj5GW2tdJjE7T1tSKzBdPXo+Pj4wLE9bUisxXT1LPj4+MH0sTGUuZXhwYW5kPWZ1bmN0aW9uKGxlLE0sTyl7dmFyIFI9MCx6PTA7Uj0oMSZsZSk8PDV8bGU+Pj4yNztmb3IodmFyIEs9MjM7Sz49MTU7Sy09NClSPDw9NixSfD1sZT4+PksmNjM7Zm9yKEs9MTE7Sz49MztLLT00KXp8PWxlPj4+'@;
put 'SyY2Myx6PDw9Njt6fD0oMzEmbGUpPDwxfGxlPj4+MzEsTVtPKzBdPVI+Pj4wLE1bTysxXT16Pj4+MH07dmFyIGFlPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEz'@;
put 'LDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0'@;
put 'LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwy'@;
put 'LDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUs'@;
put 'MTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0'@;
put 'LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAs'@;
put 'MiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEw'@;
put 'LDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO0xlLnN1YnN0aXR1dGU9ZnVuY3Rpb24obGUsTSl7Zm9yKHZh'@;
put 'ciBPPTAsUj0wO1I8NDtSKyspTzw8PTQsT3w9YWVbNjQqUisobGU+Pj4xOC02KlImNjMpXTtmb3IoUj0wO1I8NDtSKyspTzw8PTQsT3w9YWVbMjU2KzY0KlIrKE0+Pj4xOC02KlImNjMpXTtyZXR1cm4gTz4+PjB9O3ZhciB4PVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0'@;
put 'LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtMZS5wZXJtdXRlPWZ1bmN0aW9uKGxlKXtmb3IodmFyIE09MCxPPTA7Tzx4Lmxlbmd0aDtPKyspTTw8PTEsTXw9bGU+Pj54W09dJjE7cmV0dXJuIE0+Pj4wfSxMZS5wYWRTcGxpdD1mdW5jdGlvbihsZSxN'@;
put 'LE8pe2Zvcih2YXIgUj1sZS50b1N0cmluZygyKTtSLmxlbmd0aDxNOylSPSIwIitSO2Zvcih2YXIgej1bXSxLPTA7SzxNO0srPU8pei5wdXNoKFIuc2xpY2UoSyxLK08pKTtyZXR1cm4gei5qb2luKCIgIil9fSw0NTE0NDooYXQsTGUsRik9Pnt2YXIgYWU9Rig3MTA5NikseD1GKDI5Nzk5KSxt'@;
put 'PUYoOTU1ODApLE09e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtMZS5EaWZmaWVIZWxsbWFuR3JvdXA9TGUuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPUxlLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gbGUoUil7dmFyIHo9bmV3IEJ1ZmZlcih4W1JdLnByaW1lLCJoZXgiKSxLPW5l'@;
put 'dyBCdWZmZXIoeFtSXS5nZW4sImhleCIpO3JldHVybiBuZXcgbSh6LEspfSxMZS5jcmVhdGVEaWZmaWVIZWxsbWFuPUxlLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gTyhSLHosSyxMKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHopfHx2b2lkIDA9PT1NW3pdP08oUiwiYmluYXJ5Iix6LEspOih6'@;
put 'PXp8fCJiaW5hcnkiLEw9THx8ImJpbmFyeSIsSz1LfHxuZXcgQnVmZmVyKFsyXSksQnVmZmVyLmlzQnVmZmVyKEspfHwoSz1uZXcgQnVmZmVyKEssTCkpLCJudW1iZXIiPT10eXBlb2YgUj9uZXcgbShhZShSLEspLEssITApOihCdWZmZXIuaXNCdWZmZXIoUil8fChSPW5ldyBCdWZmZXIoUix6'@;
put 'KSksbmV3IG0oUixLLCEwKSkpfX0sOTU1ODA6KGF0LExlLEYpPT57dmFyIGFlPUYoODczMDEpLG09bmV3KEYoNDg2MDYpKSxsZT1uZXcgYWUoMjQpLE09bmV3IGFlKDExKSxPPW5ldyBhZSgxMCksUj1uZXcgYWUoMyksej1uZXcgYWUoNyksSz1GKDcxMDk2KSxMPUYoNDQwMTkpO2Z1bmN0aW9u'@;
put 'IGsoWCxVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFgpfHwoWD1uZXcgQnVmZmVyKFgsVSkpLHRoaXMuX3B1Yj1uZXcgYWUoWCksdGhpc31mdW5jdGlvbiBFKFgsVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihYKXx8KFg9bmV3IEJ1ZmZlcihYLFUp'@;
put 'KSx0aGlzLl9wcml2PW5ldyBhZShYKSx0aGlzfWF0LmV4cG9ydHM9Qjt2YXIgaj17fTtmdW5jdGlvbiBCKFgsVSxxKXt0aGlzLnNldEdlbmVyYXRvcihVKSx0aGlzLl9fcHJpbWU9bmV3IGFlKFgpLHRoaXMuX3ByaW1lPWFlLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1YLmxl'@;
put 'bmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAscT8odGhpcy5zZXRQdWJsaWNLZXk9ayx0aGlzLnNldFByaXZhdGVLZXk9RSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gWShYLFUpe3ZhciBxPW5ldyBCdWZmZXIoWC50b0Fy'@;
put 'cmF5KCkpO3JldHVybiBVP3EudG9TdHJpbmcoVSk6cX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29k'@;
put 'ZT1mdW5jdGlvbiBWKFgsVSl7dmFyIHE9VS50b1N0cmluZygiaGV4IiksZWU9W3EsWC50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihlZSBpbiBqKXJldHVybiBqW2VlXTt2YXIgb2UsdGU9MDtpZihYLmlzRXZlbigpfHwhSy5zaW1wbGVTaWV2ZXx8IUsuZmVybWF0VGVzdChYKXx8IW0udGVz'@;
put 'dChYKSlyZXR1cm4gdGUrPTEsaltlZV09dGUrPSIwMiI9PT1xfHwiMDUiPT09cT84OjQsdGU7c3dpdGNoKG0udGVzdChYLnNocm4oMSkpfHwodGUrPTIpLHEpe2Nhc2UiMDIiOlgubW9kKGxlKS5jbXAoTSkmJih0ZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KG9lPVgubW9kKE8pKS5jbXAoUikmJm9l'@;
put 'LmNtcCh6KSYmKHRlKz04KTticmVhaztkZWZhdWx0OnRlKz00fXJldHVybiBqW2VlXT10ZSx0ZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksQi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9w'@;
put 'cml2PW5ldyBhZShMKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sQi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihYKXt2YXIgVT0o'@;
put 'WD0oWD1uZXcgYWUoWCkpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxxPW5ldyBCdWZmZXIoVS50b0FycmF5KCkpLGVlPXRoaXMuZ2V0UHJpbWUoKTtpZihxLmxlbmd0aDxlZS5sZW5ndGgpe3ZhciB0ZT1uZXcgQnVmZmVyKGVlLmxlbmd0aC1xLmxl'@;
put 'bmd0aCk7dGUuZmlsbCgwKSxxPUJ1ZmZlci5jb25jYXQoW3RlLHFdKX1yZXR1cm4gcX0sQi5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKFUpe3JldHVybiBZKHRoaXMuX3B1YixVKX0sQi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihVKXtyZXR1cm4gWSh0aGlzLl9w'@;
put 'cml2LFUpfSxCLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihYKXtyZXR1cm4gWSh0aGlzLl9fcHJpbWUsWCl9LEIucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihYKXtyZXR1cm4gWSh0aGlzLl9nZW4sWCl9LEIucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihYLFUp'@;
put 'e3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoWCl8fChYPW5ldyBCdWZmZXIoWCxVKSksdGhpcy5fX2dlbj1YLHRoaXMuX2dlbj1uZXcgYWUoWCksdGhpc319LDcxMDk2OihhdCxMZSxGKT0+e3ZhciBhZT1GKDQ0MDE5KTthdC5leHBvcnRzPXRlLHRlLnNpbXBsZVNpZXZlPXEs'@;
put 'dGUuZmVybWF0VGVzdD1lZTt2YXIgeD1GKDg3MzAxKSxtPW5ldyB4KDI0KSxNPW5ldyhGKDQ4NjA2KSksTz1uZXcgeCgxKSxSPW5ldyB4KDIpLHo9bmV3IHgoNSksaz0obmV3IHgoMTYpLG5ldyB4KDgpLG5ldyB4KDEwKSksRT1uZXcgeCgzKSxWPShuZXcgeCg3KSxuZXcgeCgxMSkpLEI9bmV3'@;
put 'IHgoNCksWD0obmV3IHgoMTIpLG51bGwpO2Z1bmN0aW9uIHEob2Upe2Zvcih2YXIgc2U9ZnVuY3Rpb24gVSgpe2lmKG51bGwhPT1YKXJldHVybiBYO3ZhciBzZT1bXTtzZVswXT0yO2Zvcih2YXIgaGU9MSx1ZT0zO3VlPDEwNDg1NzY7dWUrPTIpe2Zvcih2YXIgY2U9TWF0aC5jZWlsKE1hdGgu'@;
put 'c3FydCh1ZSkpLEc9MDtHPGhlJiZzZVtHXTw9Y2UmJnVlJXNlW0ddIT0wO0crKyk7aGUhPT1HJiZzZVtHXTw9Y2V8fChzZVtoZSsrXT11ZSl9cmV0dXJuIFg9c2Usc2V9KCksaGU9MDtoZTxzZS5sZW5ndGg7aGUrKylpZigwPT09b2UubW9kbihzZVtoZV0pKXJldHVybiAwPT09b2UuY21wbihz'@;
put 'ZVtoZV0pO3JldHVybiEwfWZ1bmN0aW9uIGVlKG9lKXt2YXIgc2U9eC5tb250KG9lKTtyZXR1cm4gMD09PVIudG9SZWQoc2UpLnJlZFBvdyhvZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiB0ZShvZSxzZSl7aWYob2U8MTYpcmV0dXJuIG5ldyB4KDI9PT1zZXx8NT09PXNl'@;
put 'P1sxNDAsMTIzXTpbMTQwLDM5XSk7c2U9bmV3IHgoc2UpO2Zvcih2YXIgaGUsdWU7Oyl7Zm9yKGhlPW5ldyB4KGFlKE1hdGguY2VpbChvZS84KSkpO2hlLmJpdExlbmd0aCgpPm9lOyloZS5pc2hybigxKTtpZihoZS5pc0V2ZW4oKSYmaGUuaWFkZChPKSxoZS50ZXN0bigxKXx8aGUuaWFkZChS'@;
put 'KSxzZS5jbXAoUikpe2lmKCFzZS5jbXAoeikpZm9yKDtoZS5tb2QoaykuY21wKEUpOyloZS5pYWRkKEIpfWVsc2UgZm9yKDtoZS5tb2QobSkuY21wKFYpOyloZS5pYWRkKEIpO2lmKHEodWU9aGUuc2hybigxKSkmJnEoaGUpJiZlZSh1ZSkmJmVlKGhlKSYmTS50ZXN0KHVlKSYmTS50ZXN0KGhl'@;
put 'KSlyZXR1cm4gaGV9fX0sODczMDE6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1'@;
put 'bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAs'@;
put 'dGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5'@;
put 'cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgm'@;
put 'MTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1I'@;
put 'LE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5'@;
put 'KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMu'@;
put 'X2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlb'@;
put 'MF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9'@;
put 'ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5s'@;
put 'ZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1'@;
put 'bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'KTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMu'@;
put 'd29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jk'@;
put 'c1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJy'@;
put 'YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09'@;
put 'MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpn'@;
put 'Kz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1N'@;
put 'YXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0w'@;
put 'O3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZh'@;
put 'ciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4g'@;
put 'dGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhp'@;
put 'cy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0u'@;
put 'cHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEw9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'Il0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEs'@;
put 'MWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDks'@;
put 'MjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8'@;
put 'Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5s'@;
put 'ZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1N'@;
put 'LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSku'@;
put 'dG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9MWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0o'@;
put 'Sj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOkxbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2Vl'@;
put 'biAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3'@;
put 'MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3Ry'@;
put 'aW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5w'@;
put 'cm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiks'@;
put 'dGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKysp'@;
put 'U1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFy'@;
put 'IEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBE'@;
put 'PWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHMo'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJv'@;
put 'Qml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09'@;
put 'dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5'@;
put 'cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZl'@;
put 'Xj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1'@;
put 'cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUo'@;
put 'KS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7'@;
put 'RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5'@;
put 'cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6'@;
put 'KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlz'@;
put 'LnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4'@;
put 'b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51'@;
put 'bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+'@;
put 'dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFy'@;
put 'IEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5u'@;
put 'ZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIo'@;
put 'YiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStn'@;
put 'KSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNl'@;
put 'IGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhp'@;
put 'cy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFk'@;
put 'ZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlz'@;
put 'KTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNb'@;
put 'U109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlz'@;
put 'LnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9'@;
put 'MHxOWzFdLHhlPTgxOTEmZmUsSWU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsUWU9MHxOWzRdLGx0PTgxOTEmUWUsUGU9UWU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2'@;
put 'XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0sb3Q9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249'@;
put 'ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEx0PW1uPj4+MTMsUXQ9MHxnWzZdLER0PTgxOTEm'@;
put 'UXQscHQ9UXQ+Pj4xMyxZdD0wfGdbN10sTG49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgRm49KFMr'@;
put 'KHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoRm4+Pj4yNil8MCxGbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9'@;
put 'KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKEllLENuKXwwLHc9TWF0aC5pbXVsKEllLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3'@;
put 'PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChJZSxXbil8MCx3PXcrTWF0aC5pbXVsKEllLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMp'@;
put 'fDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2Us'@;
put 'V24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoSWUsSG4pfDAsdz13K01hdGguaW11bChJZSxmdCl8'@;
put 'MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4'@;
put 'NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVs'@;
put 'KFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9dytNYXRoLmltdWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoSWUs'@;
put 'aG4pfDAsdz13K01hdGguaW11bChJZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEz'@;
put 'KXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGgu'@;
put 'aW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChJZSxfdCl8MCx3PXcrTWF0aC5pbXVsKEllLE50KXwwO3ZhciBnaT0oUysodj12K01h'@;
put 'dGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEx0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTHQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxD'@;
put 'bikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGgu'@;
put 'aW11bChsdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVs'@;
put 'KFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9dytNYXRoLmltdWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEx0KXwwKStNYXRoLmltdWwoSWUs'@;
put 'cnQpfDAsdz13K01hdGguaW11bChJZSxMdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEz'@;
put 'KXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGgu'@;
put 'aW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2Us'@;
put 'cnQpfDAscD0ocD1wK01hdGguaW11bChPZSxMdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwoamUsTHQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoSWUsRHQpfDAsdz13K01hdGguaW11bChJZSxwdCl8'@;
put 'MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsTG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLExuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4'@;
put 'NjMsdj1NYXRoLmltdWwob3QsQ24pLHA9KHA9TWF0aC5pbXVsKG90LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVs'@;
put 'KERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUs'@;
put 'aG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxM'@;
put 'dCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsTHQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLExuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChJZSxMbil8MCx3PXcrTWF0aC5pbXVsKEllLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMp'@;
put 'fDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwob3Qs'@;
put 'V24pfDAscD0ocD1wK01hdGguaW11bChvdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8'@;
put 'MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9'@;
put 'dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEx0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxMdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01h'@;
put 'dGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsTG4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLExuKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoSWUseG4pfDAsdz13K01hdGguaW11bChJZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3'@;
put 'PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKG90LEhuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwob3QsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01h'@;
put 'dGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTHQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKFRlLEx0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwo'@;
put 'WWUsTG4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoSWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoSWUsJHQpfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQp'@;
put 'KStNYXRoLmltdWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwob3QsaG4pfDAscD0ocD1wK01hdGguaW11bChvdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTHQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEx0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'QWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsTG4pfDAsdz13K01hdGguaW11bChQZSx6'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0'@;
put 'KXwwKStNYXRoLmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRo'@;
put 'LmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGguaW11bChvdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEx0KXwwKStNYXRoLmltdWwo'@;
put 'RGUscnQpfDAsdz13K01hdGguaW11bChEZSxMdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsTG4pfDAscD0ocD1wK01hdGguaW11bChB'@;
put 'ZSx6dCl8MCkrTWF0aC5pbXVsKFRlLExuKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmlt'@;
put 'dWwoS2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9'@;
put 'KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsTHQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEx0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'TWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsTG4pfDAsdz13K01hdGguaW11bChVZSx6'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0'@;
put 'KXwwKStNYXRoLmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsTHQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRo'@;
put 'LmltdWwoUHQsTHQpLHY9ditNYXRoLmltdWwob3QsRHQpfDAscD0ocD1wK01hdGguaW11bChvdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwo'@;
put 'RGUsTG4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQp'@;
put 'KStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwob3QsTG4pfDAscD0ocD1wK01hdGguaW11bChvdCx6dCl8MCkrTWF0aC5pbXVsKHV0LExuKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3'@;
put 'PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsTG4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LExuKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKG90LHhuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwob3Qsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMp'@;
put 'fDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01h'@;
put 'dGguaW11bChvdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0'@;
put 'aC5pbXVsKEh0LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09Rm4sQ1sxXT1uaSxDWzJd'@;
put 'PWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3Ro'@;
put 'KyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3Jl'@;
put 'dHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAs'@;
put 'Tj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3'@;
put 'MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhp'@;
put 'cyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUu'@;
put 'cmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztT'@;
put 'KyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1h'@;
put 'dGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLEllPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1q'@;
put 'ZSksTltKK2ZlXT1JZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUllLU9lLGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9amUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2Zv'@;
put 'cihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gt'@;
put 'Ti0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8Njcx'@;
put 'MDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxO'@;
put 'OysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMu'@;
put 'Z3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRz'@;
put 'O2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8Tjtm'@;
put 'ZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5v'@;
put 'cm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5s'@;
put 'ZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9u'@;
put 'KGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpi'@;
put 'LGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24o'@;
put 'Yil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rp'@;
put 'b24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBN'@;
put 'KDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1'@;
put 'c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMu'@;
put 'd29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKysp'@;
put 'dGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIg'@;
put 'TjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxD'@;
put 'O3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5s'@;
put 'ZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhp'@;
put 'cy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51'@;
put 'c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNb'@;
put 'SF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhp'@;
put 'cy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYo'@;
put 'MHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1m'@;
put 'dW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1'@;
put 'cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZh'@;
put 'ciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxN'@;
put 'LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFi'@;
put 'cygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09'@;
put 'NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5z'@;
put 'dHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5j'@;
put 'dGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3Ro'@;
put 'O2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49'@;
put 'SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChn'@;
put 'LGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1'@;
put 'c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9'@;
put 'dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRp'@;
put 'dm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZn'@;
put 'LmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2Rpdjpu'@;
put 'dWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0'@;
put 'aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90'@;
put 'eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJu'@;
put 'IEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtO'@;
put 'LS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53'@;
put 'b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFy'@;
put 'IEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7'@;
put 'Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxn'@;
put 'LmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIo'@;
put 'dykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24o'@;
put 'Yil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7'@;
put 'KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtp'@;
put 'ZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQo'@;
put 'YiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49'@;
put 'MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlm'@;
put 'KDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlz'@;
put 'LndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9'@;
put 'PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRz'@;
put 'W0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNb'@;
put 'MF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8'@;
put 'PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdh'@;
put 'dGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgp'@;
put 'cmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxN'@;
put 'LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5'@;
put 'cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdh'@;
put 'dGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24g'@;
put 'Y29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVy'@;
put 'IGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5y'@;
put 'ZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25s'@;
put 'eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlw'@;
put 'ZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25s'@;
put 'eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk'@;
put 'Ll92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0'@;
put 'aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0g'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2'@;
put 'YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5w'@;
put 'KSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQi'@;
put 'LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlv'@;
put 'biBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5w'@;
put 'LHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9'@;
put 'MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMuciku'@;
put 'aXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNl'@;
put 'aWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhp'@;
put 'cy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRo'@;
put 'aXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndv'@;
put 'cmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2dd'@;
put 'O2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAs'@;
put 'Yi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1i'@;
put 'LndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMm'@;
put 'TjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9l'@;
put 'O2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJy'@;
put 'ZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3Np'@;
put 'dGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMu'@;
put 'bSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1i'@;
put 'LmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3Vi'@;
put 'KHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3Ro'@;
put 'aXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11'@;
put 'bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFu'@;
put 'ZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5p'@;
put 'c1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChT'@;
put 'KTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBJ'@;
put 'ZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChJZSksdz1JZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1E'@;
put 'Lm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25l'@;
put 'KCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9'@;
put 'RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5b'@;
put 'U10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25l'@;
put 'KCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0'@;
put 'RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3Zh'@;
put 'ciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4o'@;
put 'MCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNo'@;
put 'aWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9y'@;
put 'Y2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sNzA4OTY6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rp'@;
put 'b24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTGUoTWUpe3JldHVybihMZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihEZSl7cmV0dXJuIHR5cGVvZiBEZX06ZnVuY3Rpb24oRGUpe3JldHVybiBEZSYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmRGUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkRlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgRGV9KShNZSl9ZnVuY3Rpb24gRihNZSxEZSl7cmV0dXJuKEY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihvdCx1dCl7cmV0dXJu'@;
put 'IG90Ll9fcHJvdG9fXz11dCxvdH0pKE1lLERlKX1mdW5jdGlvbiB4KE1lLERlLHplKXtyZXR1cm4oeD1mdW5jdGlvbiBhZSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKT9SZWZsZWN0LmNvbnN0cnVjdDpmdW5jdGlvbih1dCxNdCxIdCl7'@;
put 'dmFyIFB0PVtudWxsXTtQdC5wdXNoLmFwcGx5KFB0LE10KTt2YXIgQ249bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkodXQsUHQpKTtyZXR1cm4gSHQmJkYoQ24sSHQucHJvdG90eXBlKSxDbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBtKE1lKXtyZXR1cm4gZnVuY3Rpb24gbGUo'@;
put 'TWUpe2lmKEFycmF5LmlzQXJyYXkoTWUpKXJldHVybiBSKE1lKX0oTWUpfHxmdW5jdGlvbiBNKE1lKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9TWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9TWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShNZSl9KE1lKXx8ZnVuY3Rp'@;
put 'b24gTyhNZSxEZSl7aWYoTWUpe2lmKCJzdHJpbmciPT10eXBlb2YgTWUpcmV0dXJuIFIoTWUsRGUpO3ZhciB6ZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoTWUpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09emUmJk1lLmNvbnN0cnVjdG9yJiYoemU9TWUuY29uc3RydWN0b3Iu'@;
put 'bmFtZSksIk1hcCI9PT16ZXx8IlNldCI9PT16ZSlyZXR1cm4gQXJyYXkuZnJvbShNZSk7aWYoIkFyZ3VtZW50cyI9PT16ZXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoemUpKXJldHVybiBSKE1lLERlKX19KE1lKXx8ZnVuY3Rpb24geigpe3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFIo'@;
put 'TWUsRGUpeyhudWxsPT1EZXx8RGU+TWUubGVuZ3RoKSYmKERlPU1lLmxlbmd0aCk7Zm9yKHZhciB6ZT0wLG90PW5ldyBBcnJheShEZSk7emU8RGU7emUrKylvdFt6ZV09TWVbemVdO3JldHVybiBvdH12YXIgSz1PYmplY3QuaGFzT3duUHJvcGVydHksTD1PYmplY3Quc2V0UHJvdG90eXBlT2Ys'@;
put 'az1PYmplY3QuaXNGcm96ZW4sRT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysaj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFY9T2JqZWN0LmZyZWV6ZSxCPU9iamVjdC5zZWFsLFk9T2JqZWN0LmNyZWF0ZSxYPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdCxVPVguYXBwbHkscT1Y'@;
put 'LmNvbnN0cnVjdDtVfHwoVT1mdW5jdGlvbihEZSx6ZSxvdCl7cmV0dXJuIERlLmFwcGx5KHplLG90KX0pLFZ8fChWPWZ1bmN0aW9uKERlKXtyZXR1cm4gRGV9KSxCfHwoQj1mdW5jdGlvbihEZSl7cmV0dXJuIERlfSkscXx8KHE9ZnVuY3Rpb24oRGUsemUpe3JldHVybiB4KERlLG0oemUpKX0p'@;
put 'O3ZhciBlZT1OKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSx0ZT1OKEFycmF5LnByb3RvdHlwZS5wb3ApLG9lPU4oQXJyYXkucHJvdG90eXBlLnB1c2gpLHNlPU4oU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksaGU9TihTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSx1ZT1OKFN0cmlu'@;
put 'Zy5wcm90b3R5cGUubWF0Y2gpLGNlPU4oU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxHPU4oU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxiPU4oU3RyaW5nLnByb3RvdHlwZS50cmltKSxEPU4oUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxIPWZ1bmN0aW9uIGcoTWUpe3JldHVybiBmdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aCx6ZT1uZXcgQXJyYXkoRGUpLG90PTA7b3Q8RGU7b3QrKyl6ZVtvdF09YXJndW1lbnRzW290XTtyZXR1cm4gcShNZSx6ZSl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uIE4oTWUpe3JldHVybiBmdW5jdGlvbihEZSl7Zm9yKHZhciB6ZT1hcmd1'@;
put 'bWVudHMubGVuZ3RoLG90PW5ldyBBcnJheSh6ZT4xP3plLTE6MCksdXQ9MTt1dDx6ZTt1dCsrKW90W3V0LTFdPWFyZ3VtZW50c1t1dF07cmV0dXJuIFUoTWUsRGUsb3QpfX1mdW5jdGlvbiBDKE1lLERlLHplKXt2YXIgb3Q7emU9bnVsbCE9PShvdD16ZSkmJnZvaWQgMCE9PW90P290OnNlLEwm'@;
put 'JkwoTWUsbnVsbCk7Zm9yKHZhciB1dD1EZS5sZW5ndGg7dXQtLTspe3ZhciBNdD1EZVt1dF07aWYoInN0cmluZyI9PXR5cGVvZiBNdCl7dmFyIEh0PXplKE10KTtIdCE9PU10JiYoayhEZSl8fChEZVt1dF09SHQpLE10PUh0KX1NZVtNdF09ITB9cmV0dXJuIE1lfWZ1bmN0aW9uIFMoTWUpe3Zh'@;
put 'ciB6ZSxEZT1ZKG51bGwpO2Zvcih6ZSBpbiBNZSkhMD09PVUoSyxNZSxbemVdKSYmKERlW3plXT1NZVt6ZV0pO3JldHVybiBEZX1mdW5jdGlvbiB2KE1lLERlKXtmb3IoO251bGwhPT1NZTspe3ZhciB6ZT1qKE1lLERlKTtpZih6ZSl7aWYoemUuZ2V0KXJldHVybiBOKHplLmdldCk7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIHplLnZhbHVlKXJldHVybiBOKHplLnZhbHVlKX1NZT1FKE1lKX1yZXR1cm4gZnVuY3Rpb24gb3QodXQpe3JldHVybiBjb25zb2xlLndhcm4oImZhbGxiYWNrIHZhbHVlIGZvciIsdXQpLG51bGx9fXZhciBwPVYoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNz'@;
put 'IiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVu'@;
put 'dCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgx'@;
put 'IiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwi'@;
put 'bWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNw'@;
put 'YWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIs'@;
put 'InZpZGVvIiwid2JyIl0pLHc9VihbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIs'@;
put 'ImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGll'@;
put 'bnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksSj1WKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3Np'@;
put 'dGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdl'@;
put 'IiwiZmVNZXJnZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLG5lPVYoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2Nh'@;
put 'cmQiLCJmZWRyb3BzaGFkb3ciLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0'@;
put 'Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLGRlPVYoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3Jp'@;
put 'cHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciJd'@;
put 'KSxmZT1WKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3Jp'@;
put 'cHRzIiwibm9uZSJdKSx4ZT1WKFsiI3RleHQiXSksSWU9VihbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29tcGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIi'@;
put 'LCJjYXB0dXJlIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJjbGVhciIsImNvbG9yIiwiY29scyIsImNvbHNwYW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGlu'@;
put 'ZyIsImRlZmF1bHQiLCJkaXIiLCJkaXNhYmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJlbW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRk'@;
put 'ZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxl'@;
put 'bmd0aCIsIm11bHRpcGxlIiwibXV0ZWQiLCJuYW1lIiwibm9uY2UiLCJub3NoYWRlIiwibm92YWxpZGF0ZSIsIm5vd3JhcCIsIm9wZW4iLCJvcHRpbXVtIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3N0ZXIiLCJwcmVsb2FkIiwicHViZGF0ZSIsInJhZGlvZ3Jv'@;
put 'dXAiLCJyZWFkb25seSIsInJlbCIsInJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUiLCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic3BhbiIsInNyY2xhbmciLCJzdGFydCIsInNyYyIsInNyY3Nl'@;
put 'dCIsInN0ZXAiLCJzdHlsZSIsInN1bW1hcnkiLCJ0YWJpbmRleCIsInRpdGxlIiwidHJhbnNsYXRlIiwidHlwZSIsInVzZW1hcCIsInZhbGlnbiIsInZhbHVlIiwid2lkdGgiLCJ4bWxucyIsInNsb3QiXSksRmU9VihbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJh'@;
put 'bGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgi'@;
put 'LCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlz'@;
put 'cGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwi'@;
put 'Zm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0Iiwi'@;
put 'aHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwi'@;
put 'a2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4Iiwi'@;
put 'bWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxl'@;
put 'bmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJy'@;
put 'ZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9u'@;
put 'Iiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwi'@;
put 'c3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIs'@;
put 'InRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5n'@;
put 'LW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLE9lPVYoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNh'@;
put 'bGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVz'@;
put 'cyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJv'@;
put 'd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlw'@;
put 'dHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksamU9VihbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLFdlPUIoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSxLZT1CKC88JVtcd1xX'@;
put 'XSp8W1x3XFddKiU+L2dtKSxZZT1CKC9cJHtbXHdcV10qfS9nbSksUWU9QigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxsdD1CKC9eYXJpYS1bXC1cd10rJC8pLFBlPUIoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98Y2lkfHhtcHApOnxbXmEtel18W2Eteisu'@;
put 'XC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSxiZT1CKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxBZT1CKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFRlPUIoL15odG1sJC9pKTtyZXR1cm4gZnVuY3Rpb24gVWUoKXt2YXIg'@;
put 'TWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LERlPWZ1bmN0aW9uKFluKXtyZXR1cm4gVWUoWW4pfTtpZihEZS52ZXJzaW9uPSIyLjQuNyIsRGUucmVtb3ZlZD1bXSwhTWV8fCFNZS5k'@;
put 'b2N1bWVudHx8OSE9PU1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBEZS5pc1N1cHBvcnRlZD0hMSxEZTt2YXIgemU9TWUuZG9jdW1lbnQsb3Q9TWUuZG9jdW1lbnQsdXQ9TWUuRG9jdW1lbnRGcmFnbWVudCxNdD1NZS5IVE1MVGVtcGxhdGVFbGVtZW50LEh0PU1lLk5vZGUsUHQ9TWUuRWxl'@;
put 'bWVudCxvbj1NZS5Ob2RlRmlsdGVyLENuPU1lLk5hbWVkTm9kZU1hcCxVdD12b2lkIDA9PT1Dbj9NZS5OYW1lZE5vZGVNYXB8fE1lLk1vek5hbWVkQXR0ck1hcDpDbixibj1NZS5IVE1MRm9ybUVsZW1lbnQsV249TWUuRE9NUGFyc2VyLGVuPU1lLnRydXN0ZWRUeXBlcywkbj1QdC5wcm90b3R5'@;
put 'cGUsSG49digkbiwiY2xvbmVOb2RlIiksZnQ9digkbiwibmV4dFNpYmxpbmciKSxmbj12KCRuLCJjaGlsZE5vZGVzIiksaG49digkbiwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNdCl7dmFyIHd0PW90LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7d3QuY29udGVudCYm'@;
put 'd3QuY29udGVudC5vd25lckRvY3VtZW50JiYob3Q9d3QuY29udGVudC5vd25lckRvY3VtZW50KX12YXIgWHQ9ZnVuY3Rpb24oRGUsemUpe2lmKCJvYmplY3QiIT09TGUoRGUpfHwiZnVuY3Rpb24iIT10eXBlb2YgRGUuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO3ZhciBvdD1udWxsLHV0PSJk'@;
put 'YXRhLXR0LXBvbGljeS1zdWZmaXgiO3plLmN1cnJlbnRTY3JpcHQmJnplLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKHV0KSYmKG90PXplLmN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKHV0KSk7dmFyIE10PSJkb21wdXJpZnkiKyhvdD8iIyIrb3Q6IiIpO3RyeXtyZXR1cm4gRGUuY3Jl'@;
put 'YXRlUG9saWN5KE10LHtjcmVhdGVIVE1MOmZ1bmN0aW9uKFB0KXtyZXR1cm4gUHR9LGNyZWF0ZVNjcmlwdFVSTDpmdW5jdGlvbihQdCl7cmV0dXJuIFB0fX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitNdCsiIGNvdWxkIG5vdCBiZSBjcmVhdGVk'@;
put 'LiIpLG51bGx9fShlbix6ZSksX3Q9WHQ/WHQuY3JlYXRlSFRNTCgiIik6IiIsbW49b3QuaW1wbGVtZW50YXRpb24scnQ9b3QuY3JlYXRlTm9kZUl0ZXJhdG9yLEx0PW90LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQsUXQ9b3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUsRHQ9emUuaW1wb3J0Tm9kZSxw'@;
put 'dD17fTt0cnl7cHQ9UyhvdCkuZG9jdW1lbnRNb2RlP290LmRvY3VtZW50TW9kZTp7fX1jYXRjaHt9dmFyIFl0PXt9O0RlLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBobiYmbW4mJnZvaWQgMCE9PW1uLmNyZWF0ZUhUTUxEb2N1bWVudCYmOSE9PXB0O3ZhciBlYSwkYSxMbj1XZSx6'@;
put 'dD1LZSx5bj1ZZSx4bj1RZSxzbj1sdCxCbj1iZSxSbj1BZSwkdD1QZSxGbj1udWxsLG5pPUMoe30sW10uY29uY2F0KG0ocCksbSh3KSxtKEopLG0oZGUpLG0oeGUpKSksbG49bnVsbCxqbj1DKHt9LFtdLmNvbmNhdChtKEllKSxtKEZlKSxtKE9lKSxtKGplKSkpLHFyPU9iamVjdC5zZWFsKE9i'@;
put 'amVjdC5jcmVhdGUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93'@;
put 'Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGdpPW51bGwseHI9bnVsbCxVaT0hMCxLcj0hMCxubz0hMSxIcj0hMCxxaT0hMSxKaT0hMSxhbz0hMSxybz0hMSxpbz0hMSxHaT0hMSxobz0hMSx5'@;
put 'cj0hMCxQaT0hMSxocz0hMCxycz0hMSxSYz17fSx1bD1udWxsLE9jPUMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQi'@;
put 'LCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKSxOMD1udWxsLHMzPUMoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJd'@;
put 'KSxrMj1udWxsLGUwPUMoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSx4dT0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRo'@;
put 'L01hdGhNTCIsZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixQYT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsU3I9UGEsQTI9ITEsYTM9bnVsbCxQaD1DKHt9LFt4dSxmcyxQYV0saGUpLGlzPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sdDA9bnVs'@;
put 'bCxTYT1vdC5jcmVhdGVFbGVtZW50KCJmb3JtIiksRmg9ZnVuY3Rpb24oWW4pe3JldHVybiBZbiBpbnN0YW5jZW9mIFJlZ0V4cHx8WW4gaW5zdGFuY2VvZiBGdW5jdGlvbn0sRXU9ZnVuY3Rpb24oWW4pe3QwJiZ0MD09PVlufHwoKCFZbnx8Im9iamVjdCIhPT1MZShZbikpJiYoWW49e30pLFlu'@;
put 'PVMoWW4pLGVhPWVhPS0xPT09aXMuaW5kZXhPZihZbi5QQVJTRVJfTUVESUFfVFlQRSk/InRleHQvaHRtbCI6WW4uUEFSU0VSX01FRElBX1RZUEUsJGE9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1lYT9oZTpzZSxGbj0iQUxMT1dFRF9UQUdTImluIFluP0Moe30sWW4uQUxMT1dFRF9UQUdT'@;
put 'LCRhKTpuaSxsbj0iQUxMT1dFRF9BVFRSImluIFluP0Moe30sWW4uQUxMT1dFRF9BVFRSLCRhKTpqbixhMz0iQUxMT1dFRF9OQU1FU1BBQ0VTImluIFluP0Moe30sWW4uQUxMT1dFRF9OQU1FU1BBQ0VTLGhlKTpQaCxrMj0iQUREX1VSSV9TQUZFX0FUVFIiaW4gWW4/QyhTKGUwKSxZbi5BRERf'@;
put 'VVJJX1NBRkVfQVRUUiwkYSk6ZTAsTjA9IkFERF9EQVRBX1VSSV9UQUdTImluIFluP0MoUyhzMyksWW4uQUREX0RBVEFfVVJJX1RBR1MsJGEpOnMzLHVsPSJGT1JCSURfQ09OVEVOVFMiaW4gWW4/Qyh7fSxZbi5GT1JCSURfQ09OVEVOVFMsJGEpOk9jLGdpPSJGT1JCSURfVEFHUyJpbiBZbj9D'@;
put 'KHt9LFluLkZPUkJJRF9UQUdTLCRhKTp7fSx4cj0iRk9SQklEX0FUVFIiaW4gWW4/Qyh7fSxZbi5GT1JCSURfQVRUUiwkYSk6e30sUmM9IlVTRV9QUk9GSUxFUyJpbiBZbiYmWW4uVVNFX1BST0ZJTEVTLFVpPSExIT09WW4uQUxMT1dfQVJJQV9BVFRSLEtyPSExIT09WW4uQUxMT1dfREFUQV9B'@;
put 'VFRSLG5vPVluLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSxIcj0hMSE9PVluLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUixxaT1Zbi5TQUZFX0ZPUl9URU1QTEFURVN8fCExLEppPVluLldIT0xFX0RPQ1VNRU5UfHwhMSxpbz1Zbi5SRVRVUk5fRE9NfHwhMSxHaT1Zbi5SRVRVUk5fRE9N'@;
put 'X0ZSQUdNRU5UfHwhMSxobz1Zbi5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxybz1Zbi5GT1JDRV9CT0RZfHwhMSx5cj0hMSE9PVluLlNBTklUSVpFX0RPTSxQaT1Zbi5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsaHM9ITEhPT1Zbi5LRUVQX0NPTlRFTlQscnM9WW4uSU5fUExBQ0V8fCExLCR0'@;
put 'PVluLkFMTE9XRURfVVJJX1JFR0VYUHx8JHQsU3I9WW4uTkFNRVNQQUNFfHxQYSxxcj1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElOR3x8e30sWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJkZoKFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykmJihxci50YWdOYW1l'@;
put 'Q2hlY2s9WW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSxZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmRmgoWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSYmKHFyLmF0dHJpYnV0ZU5hbWVDaGVjaz1Zbi5DVVNUT01fRUxFTUVO'@;
put 'VF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiBZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihxci5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxl'@;
put 'bWVudHM9WW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSxxaSYmKEtyPSExKSxHaSYmKGlvPSEwKSxSYyYmKEZuPUMoe30sbSh4ZSkpLGxuPVtdLCEwPT09UmMuaHRtbCYmKEMoRm4scCksQyhsbixJZSkpLCEwPT09UmMuc3ZnJiYoQyhG'@;
put 'bix3KSxDKGxuLEZlKSxDKGxuLGplKSksITA9PT1SYy5zdmdGaWx0ZXJzJiYoQyhGbixKKSxDKGxuLEZlKSxDKGxuLGplKSksITA9PT1SYy5tYXRoTWwmJihDKEZuLGRlKSxDKGxuLE9lKSxDKGxuLGplKSkpLFluLkFERF9UQUdTJiYoRm49PT1uaSYmKEZuPVMoRm4pKSxDKEZuLFluLkFERF9U'@;
put 'QUdTLCRhKSksWW4uQUREX0FUVFImJihsbj09PWpuJiYobG49UyhsbikpLEMobG4sWW4uQUREX0FUVFIsJGEpKSxZbi5BRERfVVJJX1NBRkVfQVRUUiYmQyhrMixZbi5BRERfVVJJX1NBRkVfQVRUUiwkYSksWW4uRk9SQklEX0NPTlRFTlRTJiYodWw9PT1PYyYmKHVsPVModWwpKSxDKHVsLFlu'@;
put 'LkZPUkJJRF9DT05URU5UUywkYSkpLGhzJiYoRm5bIiN0ZXh0Il09ITApLEppJiZDKEZuLFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLEZuLnRhYmxlJiYoQyhGbixbInRib2R5Il0pLGRlbGV0ZSBnaS50Ym9keSksViYmVihZbiksdDA9WW4pfSxBcz1DKHt9LFsibWkiLCJtbyIsIm1uIiwibXMi'@;
put 'LCJtdGV4dCJdKSxuMD1DKHt9LFsiZm9yZWlnbm9iamVjdCIsImRlc2MiLCJ0aXRsZSIsImFubm90YXRpb24teG1sIl0pLHFhPUMoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksX2M9Qyh7fSx3KTtDKF9jLEopLEMoX2MsbmUpO3ZhciBIaD1DKHt9LGRlKTtDKEho'@;
put 'LGZlKTt2YXIgYm89ZnVuY3Rpb24oWW4pe29lKERlLnJlbW92ZWQse2VsZW1lbnQ6WW59KTt0cnl7WW4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChZbil9Y2F0Y2h7dHJ5e1luLm91dGVySFRNTD1fdH1jYXRjaHtZbi5yZW1vdmUoKX19fSxyMD1mdW5jdGlvbihZbixfaSl7dHJ5e29lKERlLnJl'@;
put 'bW92ZWQse2F0dHJpYnV0ZTpfaS5nZXRBdHRyaWJ1dGVOb2RlKFluKSxmcm9tOl9pfSl9Y2F0Y2h7b2UoRGUucmVtb3ZlZCx7YXR0cmlidXRlOm51bGwsZnJvbTpfaX0pfWlmKF9pLnJlbW92ZUF0dHJpYnV0ZShZbiksImlzIj09PVluJiYhbG5bWW5dKWlmKGlvfHxHaSl0cnl7Ym8oX2kpfWNh'@;
put 'dGNoe31lbHNlIHRyeXtfaS5zZXRBdHRyaWJ1dGUoWW4sIiIpfWNhdGNoe319LFQyPWZ1bmN0aW9uKFluKXt2YXIgX2ksYmk7aWYocm8pWW49IjxyZW1vdmU+PC9yZW1vdmU+IitZbjtlbHNle3ZhciBvcz11ZShZbiwvXltcclxuXHQgXSsvKTtiaT1vcyYmb3NbMF19ImFwcGxpY2F0aW9uL3ho'@;
put 'dG1sK3htbCI9PT1lYSYmU3I9PT1QYSYmKFluPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrWW4rIjwvYm9keT48L2h0bWw+Iik7dmFyIEZhPVh0P1h0LmNyZWF0ZUhUTUwoWW4pOlluO2lmKFNyPT09UGEpdHJ5e19pPShu'@;
put 'ZXcgV24pLnBhcnNlRnJvbVN0cmluZyhGYSxlYSl9Y2F0Y2h7fWlmKCFfaXx8IV9pLmRvY3VtZW50RWxlbWVudCl7X2k9bW4uY3JlYXRlRG9jdW1lbnQoU3IsInRlbXBsYXRlIixudWxsKTt0cnl7X2kuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1BMj9fdDpGYX1jYXRjaHt9fXZhciBIYT1f'@;
put 'aS5ib2R5fHxfaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIFluJiZiaSYmSGEuaW5zZXJ0QmVmb3JlKG90LmNyZWF0ZVRleHROb2RlKGJpKSxIYS5jaGlsZE5vZGVzWzBdfHxudWxsKSxTcj09PVBhP1F0LmNhbGwoX2ksSmk/Imh0bWwiOiJib2R5IilbMF06Smk/X2kuZG9jdW1lbnRFbGVtZW50'@;
put 'OkhhfSxEMj1mdW5jdGlvbihZbil7cmV0dXJuIHJ0LmNhbGwoWW4ub3duZXJEb2N1bWVudHx8WW4sWW4sb24uU0hPV19FTEVNRU5UfG9uLlNIT1dfQ09NTUVOVHxvbi5TSE9XX1RFWFQsbnVsbCwhMSl9LEFyPWZ1bmN0aW9uKFluKXtyZXR1cm4ib2JqZWN0Ij09PUxlKEh0KT9ZbiBpbnN0YW5j'@;
put 'ZW9mIEh0OlluJiYib2JqZWN0Ij09PUxlKFluKSYmIm51bWJlciI9PXR5cGVvZiBZbi5ub2RlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBZbi5ub2RlTmFtZX0sYmM9ZnVuY3Rpb24oWW4sX2ksYmkpe1l0W1luXSYmZWUoWXRbWW5dLGZ1bmN0aW9uKG9zKXtvcy5jYWxsKERlLF9pLGJpLHQwKX0p'@;
put 'fSxrbz1mdW5jdGlvbihZbil7dmFyIF9pO2lmKGJjKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIixZbixudWxsKSxmdW5jdGlvbihZbil7cmV0dXJuIFluIGluc3RhbmNlb2YgYm4mJigic3RyaW5nIiE9dHlwZW9mIFluLm5vZGVOYW1lfHwic3RyaW5nIiE9dHlwZW9mIFluLnRleHRDb250ZW50'@;
put 'fHwiZnVuY3Rpb24iIT10eXBlb2YgWW4ucmVtb3ZlQ2hpbGR8fCEoWW4uYXR0cmlidXRlcyBpbnN0YW5jZW9mIFV0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLnJlbW92ZUF0dHJpYnV0ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLnNldEF0dHJpYnV0ZXx8InN0cmluZyIhPXR5cGVvZiBZbi5u'@;
put 'YW1lc3BhY2VVUkl8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5pbnNlcnRCZWZvcmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5oYXNDaGlsZE5vZGVzKX0oWW4pfHxEKC9bXHUwMDgwLVx1RkZGRl0vLFluLm5vZGVOYW1lKSlyZXR1cm4gYm8oWW4pLCEwO3ZhciBiaT0kYShZbi5ub2RlTmFtZSk7'@;
put 'aWYoYmMoInVwb25TYW5pdGl6ZUVsZW1lbnQiLFluLHt0YWdOYW1lOmJpLGFsbG93ZWRUYWdzOkZufSksWW4uaGFzQ2hpbGROb2RlcygpJiYhQXIoWW4uZmlyc3RFbGVtZW50Q2hpbGQpJiYoIUFyKFluLmNvbnRlbnQpfHwhQXIoWW4uY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpJiZEKC88'@;
put 'Wy9cd10vZyxZbi5pbm5lckhUTUwpJiZEKC88Wy9cd10vZyxZbi50ZXh0Q29udGVudCl8fCJzZWxlY3QiPT09YmkmJkQoLzx0ZW1wbGF0ZS9pLFluLmlubmVySFRNTCkpcmV0dXJuIGJvKFluKSwhMDtpZighRm5bYmldfHxnaVtiaV0pe2lmKCFnaVtiaV0mJm8wKGJpKSYmKHFyLnRhZ05hbWVD'@;
put 'aGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci50YWdOYW1lQ2hlY2ssYmkpfHxxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIudGFnTmFtZUNoZWNrKGJpKSkpcmV0dXJuITE7aWYoaHMmJiF1bFtiaV0pe3ZhciBvcz1obihZbil8fFluLnBhcmVudE5vZGUsRmE9Zm4o'@;
put 'WW4pfHxZbi5jaGlsZE5vZGVzO2lmKEZhJiZvcylmb3IodmFyICRvPUZhLmxlbmd0aC0xOyRvPj0wOy0tJG8pb3MuaW5zZXJ0QmVmb3JlKEhuKEZhWyRvXSwhMCksZnQoWW4pKX1yZXR1cm4gYm8oWW4pLCEwfXJldHVybiBZbiBpbnN0YW5jZW9mIFB0JiYhZnVuY3Rpb24oWW4pe3ZhciBfaT1o'@;
put 'bihZbik7KCFfaXx8IV9pLnRhZ05hbWUpJiYoX2k9e25hbWVzcGFjZVVSSTpTcix0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTt2YXIgYmk9c2UoWW4udGFnTmFtZSksb3M9c2UoX2kudGFnTmFtZSk7cmV0dXJuISFhM1tZbi5uYW1lc3BhY2VVUkldJiYoWW4ubmFtZXNwYWNlVVJJPT09ZnM/X2kubmFt'@;
put 'ZXNwYWNlVVJJPT09UGE/InN2ZyI9PT1iaTpfaS5uYW1lc3BhY2VVUkk9PT14dT8ic3ZnIj09PWJpJiYoImFubm90YXRpb24teG1sIj09PW9zfHxBc1tvc10pOiEhX2NbYmldOlluLm5hbWVzcGFjZVVSST09PXh1P19pLm5hbWVzcGFjZVVSST09PVBhPyJtYXRoIj09PWJpOl9pLm5hbWVzcGFj'@;
put 'ZVVSST09PWZzPyJtYXRoIj09PWJpJiZuMFtvc106ISFIaFtiaV06WW4ubmFtZXNwYWNlVVJJPT09UGE/IShfaS5uYW1lc3BhY2VVUkk9PT1mcyYmIW4wW29zXXx8X2kubmFtZXNwYWNlVVJJPT09eHUmJiFBc1tvc10pJiYhSGhbYmldJiYocWFbYmldfHwhX2NbYmldKTohKCJhcHBsaWNhdGlv'@;
put 'bi94aHRtbCt4bWwiIT09ZWF8fCFhM1tZbi5uYW1lc3BhY2VVUkldKSl9KFluKXx8KCJub3NjcmlwdCI9PT1iaXx8Im5vZW1iZWQiPT09Yml8fCJub2ZyYW1lcyI9PT1iaSkmJkQoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksWW4uaW5uZXJIVE1MKT8oYm8oWW4pLCEwKToocWkmJjM9'@;
put 'PT1Zbi5ub2RlVHlwZSYmKF9pPWNlKF9pPVluLnRleHRDb250ZW50LExuLCIgIiksX2k9Y2UoX2ksenQsIiAiKSxfaT1jZShfaSx5biwiICIpLFluLnRleHRDb250ZW50IT09X2kmJihvZShEZS5yZW1vdmVkLHtlbGVtZW50OlluLmNsb25lTm9kZSgpfSksWW4udGV4dENvbnRlbnQ9X2kpKSxi'@;
put 'YygiYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzIixZbixudWxsKSwhMSl9LENzPWZ1bmN0aW9uKFluLF9pLGJpKXtpZih5ciYmKCJpZCI9PT1faXx8Im5hbWUiPT09X2kpJiYoYmkgaW4gb3R8fGJpIGluIFNhKSlyZXR1cm4hMTtpZigoIUtyfHx4cltfaV18fCFEKHhuLF9pKSkmJighVWl8fCFEKHNu'@;
put 'LF9pKSkpaWYoIWxuW19pXXx8eHJbX2ldKXtpZighKG8wKFluKSYmKHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci50YWdOYW1lQ2hlY2ssWW4pfHxxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIudGFnTmFtZUNoZWNrKFluKSkmJihxci5hdHRy'@;
put 'aWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkQocXIuYXR0cmlidXRlTmFtZUNoZWNrLF9pKXx8cXIuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJnFyLmF0dHJpYnV0ZU5hbWVDaGVjayhfaSkpfHwiaXMiPT09X2kmJnFyLmFsbG93Q3VzdG9taXplZEJ1'@;
put 'aWx0SW5FbGVtZW50cyYmKHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci50YWdOYW1lQ2hlY2ssYmkpfHxxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIudGFnTmFtZUNoZWNrKGJpKSkpKXJldHVybiExfWVsc2UgaWYoIWsyW19pXSYmIUQoJHQs'@;
put 'Y2UoYmksUm4sIiIpKSYmKCJzcmMiIT09X2kmJiJ4bGluazpocmVmIiE9PV9pJiYiaHJlZiIhPT1faXx8InNjcmlwdCI9PT1Zbnx8MCE9PUcoYmksImRhdGE6Iil8fCFOMFtZbl0pJiYoIW5vfHxEKEJuLGNlKGJpLFJuLCIiKSkpJiZiaSlyZXR1cm4hMTtyZXR1cm4hMH0sbzA9ZnVuY3Rpb24o'@;
put 'WW4pe3JldHVybiBZbi5pbmRleE9mKCItIik+MH0sTDI9ZnVuY3Rpb24oWW4pe3ZhciBfaSxiaSxvcyxGYTtiYygiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIixZbixudWxsKTt2YXIgSGE9WW4uYXR0cmlidXRlcztpZihIYSl7dmFyICRvPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2Vl'@;
put 'cEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6bG59O2ZvcihGYT1IYS5sZW5ndGg7RmEtLTspe3ZhciBEYT0oX2k9SGFbRmFdKS5uYW1lLFZoPV9pLm5hbWVzcGFjZVVSSTtpZihiaT0idmFsdWUiPT09RGE/X2kudmFsdWU6YihfaS52YWx1ZSksb3M9JGEoRGEpLCRvLmF0dHJOYW1lPW9zLCRv'@;
put 'LmF0dHJWYWx1ZT1iaSwkby5rZWVwQXR0cj0hMCwkby5mb3JjZUtlZXBBdHRyPXZvaWQgMCxiYygidXBvblNhbml0aXplQXR0cmlidXRlIixZbiwkbyksYmk9JG8uYXR0clZhbHVlLCEkby5mb3JjZUtlZXBBdHRyJiYocjAoRGEsWW4pLCRvLmtlZXBBdHRyKSl7aWYoIUhyJiZEKC9cLz4vaSxi'@;
put 'aSkpe3IwKERhLFluKTtjb250aW51ZX1xaSYmKGJpPWNlKGJpLExuLCIgIiksYmk9Y2UoYmksenQsIiAiKSxiaT1jZShiaSx5biwiICIpKTt2YXIgQmg9JGEoWW4ubm9kZU5hbWUpO2lmKENzKEJoLG9zLGJpKSl7aWYoUGkmJigiaWQiPT09b3N8fCJuYW1lIj09PW9zKSYmKHIwKERhLFluKSxi'@;
put 'aT0idXNlci1jb250ZW50LSIrYmkpLFh0JiYib2JqZWN0Ij09PUxlKGVuKSYmImZ1bmN0aW9uIj09dHlwZW9mIGVuLmdldEF0dHJpYnV0ZVR5cGUmJiFWaClzd2l0Y2goZW4uZ2V0QXR0cmlidXRlVHlwZShCaCxvcykpe2Nhc2UiVHJ1c3RlZEhUTUwiOmJpPVh0LmNyZWF0ZUhUTUwoYmkpO2Jy'@;
put 'ZWFrO2Nhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6Ymk9WHQuY3JlYXRlU2NyaXB0VVJMKGJpKX10cnl7Vmg/WW4uc2V0QXR0cmlidXRlTlMoVmgsRGEsYmkpOlluLnNldEF0dHJpYnV0ZShEYSxiaSksdGUoRGUucmVtb3ZlZCl9Y2F0Y2h7fX19fWJjKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIs'@;
put 'WW4sbnVsbCl9fSxOaD1mdW5jdGlvbiBRaShZbil7dmFyIF9pLGJpPUQyKFluKTtmb3IoYmMoImJlZm9yZVNhbml0aXplU2hhZG93RE9NIixZbixudWxsKTtfaT1iaS5uZXh0Tm9kZSgpOyliYygidXBvblNhbml0aXplU2hhZG93Tm9kZSIsX2ksbnVsbCksIWtvKF9pKSYmKF9pLmNvbnRlbnQg'@;
put 'aW5zdGFuY2VvZiB1dCYmUWkoX2kuY29udGVudCksTDIoX2kpKTtiYygiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsWW4sbnVsbCl9O3JldHVybiBEZS5zYW5pdGl6ZT1mdW5jdGlvbihRaSl7dmFyIF9pLGJpLG9zLEZhLEhhLFluPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZigoQTI9IVFpKSYmKFFpPSJceDNjIS0tXHgzZSIpLCJzdHJpbmciIT10eXBlb2YgUWkmJiFBcihRaSkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBRaS50b1N0cmluZyl0aHJvdyBIKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJzdHJp'@;
put 'bmciIT10eXBlb2YoUWk9UWkudG9TdHJpbmcoKSkpdGhyb3cgSCgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFEZS5pc1N1cHBvcnRlZCl7aWYoIm9iamVjdCI9PT1MZShNZS50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2YgTWUudG9TdGF0aWNIVE1MKXtp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIFFpKXJldHVybiBNZS50b1N0YXRpY0hUTUwoUWkpO2lmKEFyKFFpKSlyZXR1cm4gTWUudG9TdGF0aWNIVE1MKFFpLm91dGVySFRNTCl9cmV0dXJuIFFpfWlmKGFvfHxFdShZbiksRGUucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIFFpJiYocnM9ITEpLHJz'@;
put 'KXtpZihRaS5ub2RlTmFtZSl7dmFyICRvPSRhKFFpLm5vZGVOYW1lKTtpZighRm5bJG9dfHxnaVskb10pdGhyb3cgSCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKFFpIGluc3RhbmNlb2YgSHQpMT09PShiaT0oX2k9'@;
put 'VDIoIlx4M2MhLS0tLVx4M2UiKSkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKFFpLCEwKSkubm9kZVR5cGUmJiJCT0RZIj09PWJpLm5vZGVOYW1lfHwiSFRNTCI9PT1iaS5ub2RlTmFtZT9faT1iaTpfaS5hcHBlbmRDaGlsZChiaSk7ZWxzZXtpZighaW8mJiFxaSYmIUppJiYtMT09PVFpLmlu'@;
put 'ZGV4T2YoIjwiKSlyZXR1cm4gWHQmJmhvP1h0LmNyZWF0ZUhUTUwoUWkpOlFpO2lmKCEoX2k9VDIoUWkpKSlyZXR1cm4gaW8/bnVsbDpobz9fdDoiIn1faSYmcm8mJmJvKF9pLmZpcnN0Q2hpbGQpO2Zvcih2YXIgVjA9RDIocnM/UWk6X2kpO29zPVYwLm5leHROb2RlKCk7KTM9PT1vcy5ub2Rl'@;
put 'VHlwZSYmb3M9PT1GYXx8a28ob3MpfHwob3MuY29udGVudCBpbnN0YW5jZW9mIHV0JiZOaChvcy5jb250ZW50KSxMMihvcyksRmE9b3MpO2lmKEZhPW51bGwscnMpcmV0dXJuIFFpO2lmKGlvKXtpZihHaSlmb3IoSGE9THQuY2FsbChfaS5vd25lckRvY3VtZW50KTtfaS5maXJzdENoaWxkOylI'@;
put 'YS5hcHBlbmRDaGlsZChfaS5maXJzdENoaWxkKTtlbHNlIEhhPV9pO3JldHVybihsbi5zaGFkb3dyb290fHxsbi5zaGFkb3dyb290bW9kKSYmKEhhPUR0LmNhbGwoemUsSGEsITApKSxIYX12YXIgRGE9Smk/X2kub3V0ZXJIVE1MOl9pLmlubmVySFRNTDtyZXR1cm4gSmkmJkZuWyIhZG9jdHlw'@;
put 'ZSJdJiZfaS5vd25lckRvY3VtZW50JiZfaS5vd25lckRvY3VtZW50LmRvY3R5cGUmJl9pLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZEKFRlLF9pLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKERhPSI8IURPQ1RZUEUgIitfaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSsi'@;
put 'PlxuIitEYSkscWkmJihEYT1jZShEYSxMbiwiICIpLERhPWNlKERhLHp0LCIgIiksRGE9Y2UoRGEseW4sIiAiKSksWHQmJmhvP1h0LmNyZWF0ZUhUTUwoRGEpOkRhfSxEZS5zZXRDb25maWc9ZnVuY3Rpb24oUWkpe0V1KFFpKSxhbz0hMH0sRGUuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXt0MD1u'@;
put 'dWxsLGFvPSExfSxEZS5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKFFpLFluLF9pKXt0MHx8RXUoe30pO3ZhciBiaT0kYShRaSksb3M9JGEoWW4pO3JldHVybiBDcyhiaSxvcyxfaSl9LERlLmFkZEhvb2s9ZnVuY3Rpb24oUWksWW4peyJmdW5jdGlvbiI9PXR5cGVvZiBZbiYmKFl0W1FpXT1Z'@;
put 'dFtRaV18fFtdLG9lKFl0W1FpXSxZbikpfSxEZS5yZW1vdmVIb29rPWZ1bmN0aW9uKFFpKXtpZihZdFtRaV0pcmV0dXJuIHRlKFl0W1FpXSl9LERlLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKFFpKXtZdFtRaV0mJihZdFtRaV09W10pfSxEZS5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe1l0PXt9'@;
put 'fSxEZX0oKX0oKX0sODg2NTE6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1MZTthZS52ZXJzaW9uPUYoMTg1OTcpLmk4LGFlLnV0aWxzPUYoNDY3NjcpLGFlLnJhbmQ9Rig2MDA4MiksYWUuY3VydmU9Rig5MTMyKSxhZS5jdXJ2ZXM9Rig4MDQ5KSxhZS5lYz1GKDY0NDMpLGFlLmVk'@;
put 'ZHNhPUYoOTk1NzcpfSw3MTMyNDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig0Njc2NyksbT14LmdldE5BRixsZT14LmdldEpTRixNPXguYXNzZXJ0O2Z1bmN0aW9uIE8oeixLKXt0aGlzLnR5cGU9eix0aGlzLnA9bmV3IGFlKEsucCwxNiksdGhpcy5yZWQ9'@;
put 'Sy5wcmltZT9hZS5yZWQoSy5wcmltZSk6YWUubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgYWUoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBhZSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IGFlKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49Sy5uJiZuZXcgYWUo'@;
put 'Sy5uLDE2KSx0aGlzLmc9Sy5nJiZ0aGlzLnBvaW50RnJvbUpTT04oSy5nLEsuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRM'@;
put 'ZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBMPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFMfHxMLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9u'@;
put 'IFIoeixLKXt0aGlzLmN1cnZlPXosdGhpcy50eXBlPUssdGhpcy5wcmVjb21wdXRlZD1udWxsfWF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LE8ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7'@;
put 'dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sTy5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKEssTCl7TShLLnByZWNvbXB1dGVkKTt2YXIgaz1LLl9nZXREb3VibGVzKCksRT1tKEwsMSx0aGlzLl9iaXRMZW5ndGgpLGo9KDE8PGsuc3RlcCsxKS0oay5zdGVwJTI9'@;
put 'PTA/MjoxKTtqLz0zO3ZhciBCLFksVj1bXTtmb3IoQj0wO0I8RS5sZW5ndGg7Qis9ay5zdGVwKXtZPTA7Zm9yKHZhciBYPUIray5zdGVwLTE7WD49QjtYLS0pWT0oWTw8MSkrRVtYXTtWLnB1c2goWSl9Zm9yKHZhciBVPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPXRoaXMuanBvaW50'@;
put 'KG51bGwsbnVsbCxudWxsKSxlZT1qO2VlPjA7ZWUtLSl7Zm9yKEI9MDtCPFYubGVuZ3RoO0IrKykoWT1WW0JdKT09PWVlP3E9cS5taXhlZEFkZChrLnBvaW50c1tCXSk6WT09PS1lZSYmKHE9cS5taXhlZEFkZChrLnBvaW50c1tCXS5uZWcoKSkpO1U9VS5hZGQocSl9cmV0dXJuIFUudG9QKCl9'@;
put 'LE8ucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKEssTCl7Zm9yKHZhciBrPTQsRT1LLl9nZXROQUZQb2ludHMoayksaj1FLnBvaW50cyxWPW0oTCxrPUUud25kLHRoaXMuX2JpdExlbmd0aCksQj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksWT1WLmxlbmd0aC0xO1k+PTA7WS0tKXtm'@;
put 'b3IodmFyIFg9MDtZPj0wJiYwPT09VltZXTtZLS0pWCsrO2lmKFk+PTAmJlgrKyxCPUIuZGJscChYKSxZPDApYnJlYWs7dmFyIFU9VltZXTtNKDAhPT1VKSxCPSJhZmZpbmUiPT09Sy50eXBlP0IubWl4ZWRBZGQoVT4wP2pbVS0xPj4xXTpqWy1VLTE+PjFdLm5lZygpKTpCLmFkZChVPjA/altV'@;
put 'LTE+PjFdOmpbLVUtMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09Sy50eXBlP0IudG9QKCk6Qn0sTy5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oSyxMLGssRSxqKXt2YXIgVSxxLGVlLFY9dGhpcy5fd25hZlQxLEI9dGhpcy5fd25hZlQyLFk9dGhpcy5fd25hZlQzLFg9MDtm'@;
put 'b3IoVT0wO1U8RTtVKyspe3ZhciB0ZT0oZWU9TFtVXSkuX2dldE5BRlBvaW50cyhLKTtWW1VdPXRlLnduZCxCW1VdPXRlLnBvaW50c31mb3IoVT1FLTE7VT49MTtVLT0yKXt2YXIgb2U9VS0xLHNlPVU7aWYoMT09PVZbb2VdJiYxPT09VltzZV0pe3ZhciBoZT1bTFtvZV0sbnVsbCxudWxsLExb'@;
put 'c2VdXTswPT09TFtvZV0ueS5jbXAoTFtzZV0ueSk/KGhlWzFdPUxbb2VdLmFkZChMW3NlXSksaGVbMl09TFtvZV0udG9KKCkubWl4ZWRBZGQoTFtzZV0ubmVnKCkpKTowPT09TFtvZV0ueS5jbXAoTFtzZV0ueS5yZWROZWcoKSk/KGhlWzFdPUxbb2VdLnRvSigpLm1peGVkQWRkKExbc2VdKSxo'@;
put 'ZVsyXT1MW29lXS5hZGQoTFtzZV0ubmVnKCkpKTooaGVbMV09TFtvZV0udG9KKCkubWl4ZWRBZGQoTFtzZV0pLGhlWzJdPUxbb2VdLnRvSigpLm1peGVkQWRkKExbc2VdLm5lZygpKSk7dmFyIHVlPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGNlPWxlKGtbb2VdLGtbc2VdKTtmb3IoWD1NYXRo'@;
put 'Lm1heChjZVswXS5sZW5ndGgsWCksWVtvZV09bmV3IEFycmF5KFgpLFlbc2VdPW5ldyBBcnJheShYKSxxPTA7cTxYO3ErKylZW29lXVtxXT11ZVszKigxKygwfGNlWzBdW3FdKSkrKDErKDB8Y2VbMV1bcV0pKV0sWVtzZV1bcV09MCxCW29lXT1oZX1lbHNlIFlbb2VdPW0oa1tvZV0sVltvZV0s'@;
put 'dGhpcy5fYml0TGVuZ3RoKSxZW3NlXT1tKGtbc2VdLFZbc2VdLHRoaXMuX2JpdExlbmd0aCksWD1NYXRoLm1heChZW29lXS5sZW5ndGgsWCksWD1NYXRoLm1heChZW3NlXS5sZW5ndGgsWCl9dmFyIEQ9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLEg9dGhpcy5fd25hZlQ0O2ZvcihVPVg7'@;
put 'VT49MDtVLS0pe2Zvcih2YXIgTj0wO1U+PTA7KXt2YXIgZz0hMDtmb3IocT0wO3E8RTtxKyspSFtxXT0wfFlbcV1bVV0sMCE9PUhbcV0mJihnPSExKTtpZighZylicmVhaztOKyssVS0tfWlmKFU+PTAmJk4rKyxEPUQuZGJscChOKSxVPDApYnJlYWs7Zm9yKHE9MDtxPEU7cSsrKXt2YXIgQz1I'@;
put 'W3FdOzAhPT1DJiYoQz4wP2VlPUJbcV1bQy0xPj4xXTpDPDAmJihlZT1CW3FdWy1DLTE+PjFdLm5lZygpKSxEPSJhZmZpbmUiPT09ZWUudHlwZT9ELm1peGVkQWRkKGVlKTpELmFkZChlZSkpfX1mb3IoVT0wO1U8RTtVKyspQltVXT1udWxsO3JldHVybiBqP0Q6RC50b1AoKX0sTy5CYXNlUG9p'@;
put 'bnQ9UixSLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LE8ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9u'@;
put 'KEssTCl7Sz14LnRvQXJyYXkoSyxMKTt2YXIgaz10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09S1swXXx8Nj09PUtbMF18fDc9PT1LWzBdKSYmSy5sZW5ndGgtMT09MiprKXJldHVybiA2PT09S1swXT9NKEtbSy5sZW5ndGgtMV0lMj09MCk6Nz09PUtbMF0mJk0oS1tLLmxlbmd0aC0xXSUy'@;
put 'PT0xKSx0aGlzLnBvaW50KEsuc2xpY2UoMSwxK2spLEsuc2xpY2UoMStrLDErMiprKSk7aWYoKDI9PT1LWzBdfHwzPT09S1swXSkmJksubGVuZ3RoLTE9PT1rKXJldHVybiB0aGlzLnBvaW50RnJvbVgoSy5zbGljZSgxLDErayksMz09PUtbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBw'@;
put 'b2ludCBmb3JtYXQiKX0sUi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5lbmNvZGUoSywhMCl9LFIucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oSyl7dmFyIEw9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxrPXRoaXMuZ2V0WCgpLnRvQXJy'@;
put 'YXkoImJlIixMKTtyZXR1cm4gSz9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoayk6WzRdLmNvbmNhdChrLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixMKSl9LFIucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihLLEwpe3JldHVybiB4LmVuY29kZSh0aGlzLl9lbmNvZGUoTCks'@;
put 'Syl9LFIucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oSyl7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTD17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIEwubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxMLmRvdWJsZXM9dGhpcy5fZ2V0'@;
put 'RG91Ymxlcyg0LEspLEwuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1MLHRoaXN9LFIucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKEspe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBMPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4h'@;
put 'IUwmJkwucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKChLLmJpdExlbmd0aCgpKzEpL0wuc3RlcCl9LFIucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKEssTCl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVk'@;
put 'LmRvdWJsZXM7Zm9yKHZhciBrPVt0aGlzXSxFPXRoaXMsaj0wO2o8TDtqKz1LKXtmb3IodmFyIFY9MDtWPEs7VisrKUU9RS5kYmwoKTtrLnB1c2goRSl9cmV0dXJue3N0ZXA6Syxwb2ludHM6a319LFIucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oSyl7aWYodGhpcy5wcmVjb21w'@;
put 'dXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgTD1bdGhpc10saz0oMTw8SyktMSxFPTE9PT1rP251bGw6dGhpcy5kYmwoKSxqPTE7ajxrO2orKylMW2pdPUxbai0xXS5hZGQoRSk7cmV0dXJue3duZDpLLHBvaW50czpMfX0sUi5w'@;
put 'cm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihLKXtmb3IodmFyIEw9dGhpcyxrPTA7azxLO2srKylMPUwuZGJsKCk7cmV0dXJuIEx9fSwyNzY2NTooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY3Njcp'@;
put 'LHg9RigzMTM4NyksbT1GKDY2Njk4KSxsZT1GKDcxMzI0KSxNPWFlLmFzc2VydDtmdW5jdGlvbiBPKHope3RoaXMudHdpc3RlZD0xIT0oMHx6LmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8ei5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsbGUuY2FsbCh0aGlzLCJlZHdh'@;
put 'cmRzIix6KSx0aGlzLmE9bmV3IHgoei5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgeCh6LmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IHgoei5kLDE2KS50b1JlZCh0'@;
put 'aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksTSghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8ei5jKX1mdW5jdGlvbiBSKHosSyxMLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJwcm9qZWN0aXZl'@;
put 'IiksbnVsbD09PUsmJm51bGw9PT1MJiZudWxsPT09az8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyB4KEssMTYpLHRoaXMueT1u'@;
put 'ZXcgeChMLDE2KSx0aGlzLno9az9uZXcgeChrLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9RSYmbmV3IHgoRSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJl'@;
put 'ZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRl'@;
put 'ZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9bShPLGxlKSxhdC5leHBvcnRzPU8sTy5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMubU9uZUE/'@;
put 'Sy5yZWROZWcoKTp0aGlzLmEucmVkTXVsKEspfSxPLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5vbmVDP0s6dGhpcy5jLnJlZE11bChLKX0sTy5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKEssTCxrLEUpe3JldHVybiB0aGlzLnBvaW50KEssTCxrLEUpfSxPLnBy'@;
put 'b3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKEssTCl7KEs9bmV3IHgoSywxNikpLnJlZHx8KEs9Sy50b1JlZCh0aGlzLnJlZCkpO3ZhciBrPUsucmVkU3FyKCksRT10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKGspKSxqPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlz'@;
put 'LmQpLnJlZE11bChrKSksVj1FLnJlZE11bChqLnJlZEludm0oKSksQj1WLnJlZFNxcnQoKTtpZigwIT09Qi5yZWRTcXIoKS5yZWRTdWIoVikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFk9Qi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTCYm'@;
put 'IVl8fCFMJiZZKSYmKEI9Qi5yZWROZWcoKSksdGhpcy5wb2ludChLLEIpfSxPLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKEssTCl7KEs9bmV3IHgoSywxNikpLnJlZHx8KEs9Sy50b1JlZCh0aGlzLnJlZCkpO3ZhciBrPUsucmVkU3FyKCksRT1rLnJlZFN1Yih0aGlzLmMyKSxqPWsu'@;
put 'cmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLFY9RS5yZWRNdWwoai5yZWRJbnZtKCkpO2lmKDA9PT1WLmNtcCh0aGlzLnplcm8pKXtpZihMKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxLKX12'@;
put 'YXIgQj1WLnJlZFNxcnQoKTtpZigwIT09Qi5yZWRTcXIoKS5yZWRTdWIoVikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIEIuZnJvbVJlZCgpLmlzT2RkKCkhPT1MJiYoQj1CLnJlZE5lZygpKSx0aGlzLnBvaW50KEIsSyl9LE8ucHJvdG90'@;
put 'eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKEspe2lmKEsuaXNJbmZpbml0eSgpKXJldHVybiEwO0subm9ybWFsaXplKCk7dmFyIEw9Sy54LnJlZFNxcigpLGs9Sy55LnJlZFNxcigpLEU9TC5yZWRNdWwodGhpcy5hKS5yZWRBZGQoayksaj10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhp'@;
put 'cy5kLnJlZE11bChMKS5yZWRNdWwoaykpKTtyZXR1cm4gMD09PUUuY21wKGopfSxtKFIsbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKEspe3JldHVybiBSLmZyb21KU09OKHRoaXMsSyl9LE8ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKEssTCxrLEUp'@;
put 'e3JldHVybiBuZXcgUih0aGlzLEssTCxrLEUpfSxSLmZyb21KU09OPWZ1bmN0aW9uKEssTCl7cmV0dXJuIG5ldyBSKEssTFswXSxMWzFdLExbMl0pfSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+Ijoi'@;
put 'PEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFIucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sUi5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciBLPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKSxr'@;
put 'PXRoaXMuei5yZWRTcXIoKTtrPWsucmVkSUFkZChrKTt2YXIgRT10aGlzLmN1cnZlLl9tdWxBKEspLGo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoSykucmVkSVN1YihMKSxWPUUucmVkQWRkKEwpLEI9Vi5yZWRTdWIoayksWT1FLnJlZFN1YihMKSxYPWoucmVkTXVs'@;
put 'KEIpLFU9Vi5yZWRNdWwoWSkscT1qLnJlZE11bChZKSxlZT1CLnJlZE11bChWKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChYLFUsZWUscSl9LFIucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEUsaixWLEIsWSxYLEs9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLEw9'@;
put 'dGhpcy54LnJlZFNxcigpLGs9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIFU9KEI9dGhpcy5jdXJ2ZS5fbXVsQShMKSkucmVkQWRkKGspO3RoaXMuek9uZT8oRT1LLnJlZFN1YihMKS5yZWRTdWIoaykucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUudHdvKSks'@;
put 'aj1VLnJlZE11bChCLnJlZFN1YihrKSksVj1VLnJlZFNxcigpLnJlZFN1YihVKS5yZWRTdWIoVSkpOihZPXRoaXMuei5yZWRTcXIoKSxYPVUucmVkU3ViKFkpLnJlZElTdWIoWSksRT1LLnJlZFN1YihMKS5yZWRJU3ViKGspLnJlZE11bChYKSxqPVUucmVkTXVsKEIucmVkU3ViKGspKSxWPVUu'@;
put 'cmVkTXVsKFgpKX1lbHNlIEI9TC5yZWRBZGQoayksWT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksWD1CLnJlZFN1YihZKS5yZWRTdWIoWSksRT10aGlzLmN1cnZlLl9tdWxDKEsucmVkSVN1YihCKSkucmVkTXVsKFgpLGo9dGhpcy5jdXJ2ZS5fbXVsQyhCKS5yZWRNdWwoTC5y'@;
put 'ZWRJU3ViKGspKSxWPUIucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEUsaixWKX0sUi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9'@;
put 'LFIucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oSyl7dmFyIEw9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChLLnkucmVkU3ViKEsueCkpLGs9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChLLnkucmVkQWRkKEsueCkpLEU9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5y'@;
put 'ZWRNdWwoSy50KSxqPXRoaXMuei5yZWRNdWwoSy56LnJlZEFkZChLLnopKSxWPWsucmVkU3ViKEwpLEI9ai5yZWRTdWIoRSksWT1qLnJlZEFkZChFKSxYPWsucmVkQWRkKEwpLFU9Vi5yZWRNdWwoQikscT1ZLnJlZE11bChYKSxlZT1WLnJlZE11bChYKSx0ZT1CLnJlZE11bChZKTtyZXR1cm4g'@;
put 'dGhpcy5jdXJ2ZS5wb2ludChVLHEsdGUsZWUpfSxSLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihLKXt2YXIgcSxlZSxMPXRoaXMuei5yZWRNdWwoSy56KSxrPUwucmVkU3FyKCksRT10aGlzLngucmVkTXVsKEsueCksaj10aGlzLnkucmVkTXVsKEsueSksVj10aGlzLmN1cnZlLmQucmVk'@;
put 'TXVsKEUpLnJlZE11bChqKSxCPWsucmVkU3ViKFYpLFk9ay5yZWRBZGQoViksWD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKEsueC5yZWRBZGQoSy55KSkucmVkSVN1YihFKS5yZWRJU3ViKGopLFU9TC5yZWRNdWwoQikucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/'@;
put 'KHE9TC5yZWRNdWwoWSkucmVkTXVsKGoucmVkU3ViKHRoaXMuY3VydmUuX211bEEoRSkpKSxlZT1CLnJlZE11bChZKSk6KHE9TC5yZWRNdWwoWSkucmVkTXVsKGoucmVkU3ViKEUpKSxlZT10aGlzLmN1cnZlLl9tdWxDKEIpLnJlZE11bChZKSksdGhpcy5jdXJ2ZS5wb2ludChVLHEsZWUpfSxS'@;
put 'LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP0s6Sy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChLKTp0aGlzLl9wcm9qQWRkKEspfSxSLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oSyl7cmV0dXJuIHRo'@;
put 'aXMuX2hhc0RvdWJsZXMoSyk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxLKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsSyl9LFIucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihLLEwsayl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxMXSxbSyxrXSwyLCEx'@;
put 'KX0sUi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihLLEwsayl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxMXSxbSyxrXSwyLCEwKX0sUi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBLPXRoaXMuei5y'@;
put 'ZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKEspLHRoaXMueT10aGlzLnkucmVkTXVsKEspLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKEspKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sUi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LFIucHJvdG90eXBlLmdl'@;
put 'dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcz09PUt8fDA9PT10aGlzLmdldFgoKS5jbXAoSy5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKEsuZ2V0WSgpKX0sUi5w'@;
put 'cm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEspe3ZhciBMPUsudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKEwpKXJldHVybiEwO2Zvcih2YXIgaz1LLmNsb25lKCksRT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoay5p'@;
put 'YWRkKHRoaXMuY3VydmUubiksay5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihMLnJlZElBZGQoRSksMD09PXRoaXMueC5jbXAoTCkpcmV0dXJuITB9fSxSLnByb3RvdHlwZS50b1A9Ui5wcm90b3R5cGUubm9ybWFsaXplLFIucHJvdG90eXBlLm1peGVkQWRkPVIucHJvdG90eXBl'@;
put 'LmFkZH0sOTEzMjooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUxlO2FlLmJhc2U9Rig3MTMyNCksYWUuc2hvcnQ9Rig4OTk5NiksYWUubW9udD1GKDI5MjUzKSxhZS5lZHdhcmRzPUYoMjc2NjUpfSwyOTI1MzooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcp'@;
put 'LHg9Rig2NjY5OCksbT1GKDcxMzI0KSxsZT1GKDQ2NzY3KTtmdW5jdGlvbiBNKFIpe20uY2FsbCh0aGlzLCJtb250IixSKSx0aGlzLmE9bmV3IGFlKFIuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYWUoUi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgYWUoNCku'@;
put 'dG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYWUoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBPKFIseixLKXttLkJhc2VQb2ludC5jYWxsKHRoaXMsUiwicHJvamVjdGl2ZSIp'@;
put 'LG51bGw9PT16JiZudWxsPT09Sz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IGFlKHosMTYpLHRoaXMuej1uZXcgYWUoSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnou'@;
put 'cmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX14KE0sbSksYXQuZXhwb3J0cz1NLE0ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHope3ZhciBLPXoubm9ybWFsaXplKCkueCxMPUsucmVkU3FyKCksaz1MLnJlZE11bChLKS5yZWRBZGQoTC5yZWRNdWwodGhp'@;
put 'cy5hKSkucmVkQWRkKEspO3JldHVybiAwPT09ay5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKGspfSx4KE8sbS5CYXNlUG9pbnQpLE0ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosSyl7cmV0dXJuIHRoaXMucG9pbnQobGUudG9BcnJheSh6LEspLDEpfSxNLnByb3RvdHlwZS5wb2lu'@;
put 'dD1mdW5jdGlvbih6LEspe3JldHVybiBuZXcgTyh0aGlzLHosSyl9LE0ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oeil7cmV0dXJuIE8uZnJvbUpTT04odGhpcyx6KX0sTy5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sTy5wcm90b3R5cGUuX2VuY29kZT1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LE8uZnJvbUpTT049ZnVuY3Rpb24oeixLKXtyZXR1cm4gbmV3IE8oeixLWzBdLEtbMV18fHoub25lKX0sTy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sTy5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLGs9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEU9Sy5yZWRTdWIoayksaj1LLnJlZE11bChrKSxWPUUucmVkTXVsKGsu'@;
put 'cmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChFKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGosVil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmRpZmZBZGQ9'@;
put 'ZnVuY3Rpb24oeixLKXt2YXIgTD10aGlzLngucmVkQWRkKHRoaXMueiksaz10aGlzLngucmVkU3ViKHRoaXMueiksRT16LngucmVkQWRkKHoueiksVj16LngucmVkU3ViKHoueikucmVkTXVsKEwpLEI9RS5yZWRNdWwoayksWT1LLnoucmVkTXVsKFYucmVkQWRkKEIpLnJlZFNxcigpKSxYPUsu'@;
put 'eC5yZWRNdWwoVi5yZWRJU3ViKEIpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLFgpfSxPLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeil7Zm9yKHZhciBLPXouY2xvbmUoKSxMPXRoaXMsaz10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksaj1bXTswIT09Sy5jbXBuKDAp'@;
put 'O0suaXVzaHJuKDEpKWoucHVzaChLLmFuZGxuKDEpKTtmb3IodmFyIFY9ai5sZW5ndGgtMTtWPj0wO1YtLSkwPT09altWXT8oTD1MLmRpZmZBZGQoayx0aGlzKSxrPWsuZGJsKCkpOihrPUwuZGlmZkFkZChrLHRoaXMpLEw9TC5kYmwoKSk7cmV0dXJuIGt9LE8ucHJvdG90eXBlLm11bEFkZD1m'@;
put 'dW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxPLnByb3RvdHlwZS5lcT1m'@;
put 'dW5jdGlvbih6KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSl9LE8ucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sTy5wcm90b3R5'@;
put 'cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw4OTk5NjooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY3NjcpLHg9RigzMTM4NyksbT1GKDY2Njk4KSxsZT1GKDcxMzI0KSxNPWFlLmFzc2VydDtmdW5jdGlvbiBP'@;
put 'KEspe2xlLmNhbGwodGhpcywic2hvcnQiLEspLHRoaXMuYT1uZXcgeChLLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHgoSy5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNt'@;
put 'cG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShLKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBS'@;
put 'KEssTCxrLEUpe2xlLkJhc2VQb2ludC5jYWxsKHRoaXMsSywiYWZmaW5lIiksbnVsbD09PUwmJm51bGw9PT1rPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgeChMLDE2KSx0aGlzLnk9bmV3IHgoaywxNiksRSYmKHRoaXMueC5mb3JjZVJlZCh0aGlz'@;
put 'LmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlv'@;
put 'biB6KEssTCxrLEUpe2xlLkJhc2VQb2ludC5jYWxsKHRoaXMsSywiamFjb2JpYW4iKSxudWxsPT09TCYmbnVsbD09PWsmJm51bGw9PT1FPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgeCgwKSk6KHRoaXMueD1uZXcgeChMLDE2KSx0aGlz'@;
put 'Lnk9bmV3IHgoaywxNiksdGhpcy56PW5ldyB4KEUsMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9S'@;
put 'ZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9bShPLGxlKSxhdC5leHBvcnRzPU8sTy5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihMKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMp'@;
put 'KXt2YXIgayxFO2lmKEwuYmV0YSlrPW5ldyB4KEwuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIGo9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7az0oaz1qWzBdLmNtcChqWzFdKTwwP2pbMF06alsxXSkudG9SZWQodGhpcy5yZWQpfWlmKEwubGFtYmRhKUU9bmV3IHgoTC5s'@;
put 'YW1iZGEsMTYpO2Vsc2V7dmFyIFY9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoVlswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGspKT9FPVZbMF06TSgwPT09dGhpcy5nLm11bChFPVZbMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChrKSkpfXJldHVybntiZXRh'@;
put 'OmssbGFtYmRhOkUsYmFzaXM6TC5iYXNpcz9MLmJhc2lzLm1hcChmdW5jdGlvbihZKXtyZXR1cm57YTpuZXcgeChZLmEsMTYpLGI6bmV3IHgoWS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoRSl9fX0sTy5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihMKXt2YXIgaz1MPT09'@;
put 'dGhpcy5wP3RoaXMucmVkOngubW9udChMKSxFPW5ldyB4KDIpLnRvUmVkKGspLnJlZEludm0oKSxqPUUucmVkTmVnKCksVj1uZXcgeCgzKS50b1JlZChrKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKEUpO3JldHVybltqLnJlZEFkZChWKS5mcm9tUmVkKCksai5yZWRTdWIoVikuZnJvbVJl'@;
put 'ZCgpXX0sTy5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihMKXtmb3IodmFyIFUscSxlZSx0ZSxvZSxzZSxoZSxjZSxHLGs9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxFPUwsaj10aGlzLm4uY2xvbmUoKSxWPW5ldyB4KDEpLEI9bmV3IHgo'@;
put 'MCksWT1uZXcgeCgwKSxYPW5ldyB4KDEpLHVlPTA7MCE9PUUuY21wbigwKTspe3ZhciBiPWouZGl2KEUpO2NlPWouc3ViKGIubXVsKEUpKSxHPVkuc3ViKGIubXVsKFYpKTt2YXIgRD1YLnN1YihiLm11bChCKSk7aWYoIWVlJiZjZS5jbXAoayk8MClVPWhlLm5lZygpLHE9VixlZT1jZS5uZWco'@;
put 'KSx0ZT1HO2Vsc2UgaWYoZWUmJjI9PSsrdWUpYnJlYWs7aGU9Y2Usaj1FLEU9Y2UsWT1WLFY9RyxYPUIsQj1EfW9lPWNlLm5lZygpLHNlPUc7dmFyIEg9ZWUuc3FyKCkuYWRkKHRlLnNxcigpKTtyZXR1cm4gb2Uuc3FyKCkuYWRkKHNlLnNxcigpKS5jbXAoSCk+PTAmJihvZT1VLHNlPXEpLGVl'@;
put 'Lm5lZ2F0aXZlJiYoZWU9ZWUubmVnKCksdGU9dGUubmVnKCkpLG9lLm5lZ2F0aXZlJiYob2U9b2UubmVnKCksc2U9c2UubmVnKCkpLFt7YTplZSxiOnRlfSx7YTpvZSxiOnNlfV19LE8ucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oTCl7dmFyIGs9dGhpcy5lbmRvLmJhc2lzLEU9a1sw'@;
put 'XSxqPWtbMV0sVj1qLmIubXVsKEwpLmRpdlJvdW5kKHRoaXMubiksQj1FLmIubmVnKCkubXVsKEwpLmRpdlJvdW5kKHRoaXMubiksWT1WLm11bChFLmEpLFg9Qi5tdWwoai5hKSxVPVYubXVsKEUuYikscT1CLm11bChqLmIpO3JldHVybntrMTpMLnN1YihZKS5zdWIoWCksazI6VS5hZGQocSku'@;
put 'bmVnKCl9fSxPLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKEwsayl7KEw9bmV3IHgoTCwxNikpLnJlZHx8KEw9TC50b1JlZCh0aGlzLnJlZCkpO3ZhciBFPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoTC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLGo9RS5yZWRT'@;
put 'cXJ0KCk7aWYoMCE9PWoucmVkU3FyKCkucmVkU3ViKEUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBWPWouZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGsmJiFWfHwhayYmVikmJihqPWoucmVkTmVnKCkpLHRoaXMucG9pbnQoTCxqKX0sTy5w'@;
put 'cm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTCl7aWYoTC5pbmYpcmV0dXJuITA7dmFyIGs9TC54LEU9TC55LGo9dGhpcy5hLnJlZE11bChrKSxWPWsucmVkU3FyKCkucmVkTXVsKGspLnJlZElBZGQoaikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09RS5yZWRTcXIoKS5yZWRJU3ViKFYp'@;
put 'LmNtcG4oMCl9LE8ucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihMLGssRSl7Zm9yKHZhciBqPXRoaXMuX2VuZG9XbmFmVDEsVj10aGlzLl9lbmRvV25hZlQyLEI9MDtCPEwubGVuZ3RoO0IrKyl7dmFyIFk9dGhpcy5fZW5kb1NwbGl0KGtbQl0pLFg9TFtCXSxVPVguX2dldEJl'@;
put 'dGEoKTtZLmsxLm5lZ2F0aXZlJiYoWS5rMS5pbmVnKCksWD1YLm5lZyghMCkpLFkuazIubmVnYXRpdmUmJihZLmsyLmluZWcoKSxVPVUubmVnKCEwKSksalsyKkJdPVgsalsyKkIrMV09VSxWWzIqQl09WS5rMSxWWzIqQisxXT1ZLmsyfWZvcih2YXIgcT10aGlzLl93bmFmTXVsQWRkKDEsaixW'@;
put 'LDIqQixFKSxlZT0wO2VlPDIqQjtlZSsrKWpbZWVdPW51bGwsVltlZV09bnVsbDtyZXR1cm4gcX0sbShSLGxlLkJhc2VQb2ludCksTy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTCxrLEUpe3JldHVybiBuZXcgUih0aGlzLEwsayxFKX0sTy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5j'@;
put 'dGlvbihMLGspe3JldHVybiBSLmZyb21KU09OKHRoaXMsTCxrKX0sUi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBMPXRoaXMucHJlY29tcHV0ZWQ7aWYoTCYmTC5iZXRhKXJldHVybiBMLmJldGE7dmFyIGs9dGhpcy5jdXJ2ZS5wb2ludCh0'@;
put 'aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKEwpe3ZhciBFPXRoaXMuY3VydmUsaj1mdW5jdGlvbihWKXtyZXR1cm4gRS5wb2ludChWLngucmVkTXVsKEUuZW5kby5iZXRhKSxWLnkpfTtMLmJldGE9ayxrLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOkwu'@;
put 'bmFmJiZ7d25kOkwubmFmLnduZCxwb2ludHM6TC5uYWYucG9pbnRzLm1hcChqKX0sZG91YmxlczpMLmRvdWJsZXMmJntzdGVwOkwuZG91Ymxlcy5zdGVwLHBvaW50czpMLmRvdWJsZXMucG9pbnRzLm1hcChqKX19fXJldHVybiBrfX0sUi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5z'@;
put 'bGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sUi5mcm9tSlNPTj1mdW5jdGlvbihMLGssRSl7InN0cmluZyI9'@;
put 'PXR5cGVvZiBrJiYoaz1KU09OLnBhcnNlKGspKTt2YXIgaj1MLnBvaW50KGtbMF0sa1sxXSxFKTtpZigha1syXSlyZXR1cm4gajtmdW5jdGlvbiBWKFkpe3JldHVybiBMLnBvaW50KFlbMF0sWVsxXSxFKX12YXIgQj1rWzJdO3JldHVybiBqLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91Ymxl'@;
put 'czpCLmRvdWJsZXMmJntzdGVwOkIuZG91Ymxlcy5zdGVwLHBvaW50czpbal0uY29uY2F0KEIuZG91Ymxlcy5wb2ludHMubWFwKFYpKX0sbmFmOkIubmFmJiZ7d25kOkIubmFmLnduZCxwb2ludHM6W2pdLmNvbmNhdChCLm5hZi5wb2ludHMubWFwKFYpKX19LGp9LFIucHJvdG90eXBlLmluc3Bl'@;
put 'Y3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUu'@;
put 'aXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sUi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEwpe2lmKHRoaXMuaW5mKXJldHVybiBMO2lmKEwuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoTCkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShMKSlyZXR1'@;
put 'cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKEwueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgaz10aGlzLnkucmVkU3ViKEwueSk7MCE9PWsuY21wbigwKSYmKGs9ay5yZWRNdWwodGhpcy54LnJlZFN1YihMLngpLnJlZElu'@;
put 'dm0oKSkpO3ZhciBFPWsucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTC54KSxqPWsucmVkTXVsKHRoaXMueC5yZWRTdWIoRSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChFLGopfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmlu'@;
put 'ZilyZXR1cm4gdGhpczt2YXIgTD10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PUwuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBrPXRoaXMuY3VydmUuYSxFPXRoaXMueC5yZWRTcXIoKSxqPUwucmVkSW52bSgpLFY9RS5yZWRBZGQoRSkucmVkSUFk'@;
put 'ZChFKS5yZWRJQWRkKGspLnJlZE11bChqKSxCPVYucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLFk9Vi5yZWRNdWwodGhpcy54LnJlZFN1YihCKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsWSl9LFIucHJvdG90eXBlLmdldFg9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sUi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTCl7cmV0dXJuIEw9bmV3IHgoTCwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9o'@;
put 'YXNEb3VibGVzKEwpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTCk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTF0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxMKX0sUi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKEwsayxFKXt2'@;
put 'YXIgaj1bdGhpcyxrXSxWPVtMLEVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoaixWKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsaixWLDIpfSxSLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEwsayxFKXt2YXIgaj1bdGhpcyxrXSxWPVtM'@;
put 'LEVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoaixWLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsaixWLDIsITApfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcz09PUx8fHRoaXMuaW5mPT09TC5pbmYmJih0aGlz'@;
put 'LmluZnx8MD09PXRoaXMueC5jbXAoTC54KSYmMD09PXRoaXMueS5jbXAoTC55KSl9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbihMKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgaz10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKEwmJnRoaXMucHJlY29t'@;
put 'cHV0ZWQpe3ZhciBFPXRoaXMucHJlY29tcHV0ZWQsaj1mdW5jdGlvbihWKXtyZXR1cm4gVi5uZWcoKX07ay5wcmVjb21wdXRlZD17bmFmOkUubmFmJiZ7d25kOkUubmFmLnduZCxwb2ludHM6RS5uYWYucG9pbnRzLm1hcChqKX0sZG91YmxlczpFLmRvdWJsZXMmJntzdGVwOkUuZG91Ymxlcy5z'@;
put 'dGVwLHBvaW50czpFLmRvdWJsZXMucG9pbnRzLm1hcChqKX19fXJldHVybiBrfSxSLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2'@;
put 'ZS5vbmUpfSxtKHosbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oTCxrLEUpe3JldHVybiBuZXcgeih0aGlzLEwsayxFKX0sei5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxu'@;
put 'dWxsKTt2YXIgTD10aGlzLnoucmVkSW52bSgpLGs9TC5yZWRTcXIoKSxFPXRoaXMueC5yZWRNdWwoayksaj10aGlzLnkucmVkTXVsKGspLnJlZE11bChMKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChFLGopfSx6LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5q'@;
put 'cG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSx6LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIEw7aWYoTC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGs9TC56LnJlZFNxcigpLEU9dGhpcy56LnJlZFNxcigpLGo9'@;
put 'dGhpcy54LnJlZE11bChrKSxWPUwueC5yZWRNdWwoRSksQj10aGlzLnkucmVkTXVsKGsucmVkTXVsKEwueikpLFk9TC55LnJlZE11bChFLnJlZE11bCh0aGlzLnopKSxYPWoucmVkU3ViKFYpLFU9Qi5yZWRTdWIoWSk7aWYoMD09PVguY21wbigwKSlyZXR1cm4gMCE9PVUuY21wbigwKT90aGlz'@;
put 'LmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcT1YLnJlZFNxcigpLGVlPXEucmVkTXVsKFgpLHRlPWoucmVkTXVsKHEpLG9lPVUucmVkU3FyKCkucmVkSUFkZChlZSkucmVkSVN1Yih0ZSkucmVkSVN1Yih0ZSksc2U9VS5yZWRNdWwodGUucmVkSVN1YihvZSkp'@;
put 'LnJlZElTdWIoQi5yZWRNdWwoZWUpKSxoZT10aGlzLnoucmVkTXVsKEwueikucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChvZSxzZSxoZSl9LHoucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKEwpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBMLnRvSigpO2lmKEwu'@;
put 'aXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBrPXRoaXMuei5yZWRTcXIoKSxFPXRoaXMueCxqPUwueC5yZWRNdWwoayksVj10aGlzLnksQj1MLnkucmVkTXVsKGspLnJlZE11bCh0aGlzLnopLFk9RS5yZWRTdWIoaiksWD1WLnJlZFN1YihCKTtpZigwPT09WS5jbXBuKDApKXJldHVybiAw'@;
put 'IT09WC5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBVPVkucmVkU3FyKCkscT1VLnJlZE11bChZKSxlZT1FLnJlZE11bChVKSx0ZT1YLnJlZFNxcigpLnJlZElBZGQocSkucmVkSVN1YihlZSkucmVkSVN1YihlZSksb2U9WC5yZWRNdWwo'@;
put 'ZWUucmVkSVN1Yih0ZSkpLnJlZElTdWIoVi5yZWRNdWwocSkpLHNlPXRoaXMuei5yZWRNdWwoWSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLG9lLHNlKX0sei5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihMKXtpZigwPT09TClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSly'@;
put 'ZXR1cm4gdGhpcztpZighTClyZXR1cm4gdGhpcy5kYmwoKTt2YXIgaztpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIEU9dGhpcztmb3Ioaz0wO2s8TDtrKyspRT1FLmRibCgpO3JldHVybiBFfXZhciBqPXRoaXMuY3VydmUuYSxWPXRoaXMuY3VydmUudGludixC'@;
put 'PXRoaXMueCxZPXRoaXMueSxYPXRoaXMueixVPVgucmVkU3FyKCkucmVkU3FyKCkscT1ZLnJlZEFkZChZKTtmb3Ioaz0wO2s8TDtrKyspe3ZhciBlZT1CLnJlZFNxcigpLHRlPXEucmVkU3FyKCksb2U9dGUucmVkU3FyKCksc2U9ZWUucmVkQWRkKGVlKS5yZWRJQWRkKGVlKS5yZWRJQWRkKGou'@;
put 'cmVkTXVsKFUpKSxoZT1CLnJlZE11bCh0ZSksdWU9c2UucmVkU3FyKCkucmVkSVN1YihoZS5yZWRBZGQoaGUpKSxjZT1oZS5yZWRJU3ViKHVlKSxHPXNlLnJlZE11bChjZSk7Rz1HLnJlZElBZGQoRykucmVkSVN1YihvZSk7dmFyIGI9cS5yZWRNdWwoWCk7aysxPEwmJihVPVUucmVkTXVsKG9l'@;
put 'KSksQj11ZSxYPWIscT1HfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChCLHEucmVkTXVsKFYpLFgpfSx6LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVl'@;
put 'QT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSx6LnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBMLGssRTtpZih0aGlzLnpPbmUpe3ZhciBqPXRoaXMueC5yZWRTcXIoKSxWPXRoaXMueS5yZWRTcXIoKSxCPVYucmVkU3FyKCksWT10aGlzLngucmVkQWRkKFYpLnJlZFNx'@;
put 'cigpLnJlZElTdWIoaikucmVkSVN1YihCKTtZPVkucmVkSUFkZChZKTt2YXIgWD1qLnJlZEFkZChqKS5yZWRJQWRkKGopLFU9WC5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoWSkscT1CLnJlZElBZGQoQik7cT0ocT1xLnJlZElBZGQocSkpLnJlZElBZGQocSksTD1VLGs9WC5yZWRNdWwo'@;
put 'WS5yZWRJU3ViKFUpKS5yZWRJU3ViKHEpLEU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGVlPXRoaXMueC5yZWRTcXIoKSx0ZT10aGlzLnkucmVkU3FyKCksb2U9dGUucmVkU3FyKCksc2U9dGhpcy54LnJlZEFkZCh0ZSkucmVkU3FyKCkucmVkSVN1YihlZSkucmVkSVN1YihvZSk7'@;
put 'c2U9c2UucmVkSUFkZChzZSk7dmFyIGhlPWVlLnJlZEFkZChlZSkucmVkSUFkZChlZSksdWU9aGUucmVkU3FyKCksY2U9b2UucmVkSUFkZChvZSk7Y2U9KGNlPWNlLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxMPXVlLnJlZElTdWIoc2UpLnJlZElTdWIoc2UpLGs9aGUucmVkTXVsKHNlLnJl'@;
put 'ZElTdWIoTCkpLnJlZElTdWIoY2UpLEU9KEU9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKEUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChMLGssRSl9LHoucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBMLGssRTtpZih0aGlzLnpPbmUpe3ZhciBqPXRoaXMueC5y'@;
put 'ZWRTcXIoKSxWPXRoaXMueS5yZWRTcXIoKSxCPVYucmVkU3FyKCksWT10aGlzLngucmVkQWRkKFYpLnJlZFNxcigpLnJlZElTdWIoaikucmVkSVN1YihCKTtZPVkucmVkSUFkZChZKTt2YXIgWD1qLnJlZEFkZChqKS5yZWRJQWRkKGopLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxVPVgucmVkU3Fy'@;
put 'KCkucmVkSVN1YihZKS5yZWRJU3ViKFkpO0w9VTt2YXIgcT1CLnJlZElBZGQoQik7cT0ocT1xLnJlZElBZGQocSkpLnJlZElBZGQocSksaz1YLnJlZE11bChZLnJlZElTdWIoVSkpLnJlZElTdWIocSksRT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgZWU9dGhpcy56LnJlZFNxcigp'@;
put 'LHRlPXRoaXMueS5yZWRTcXIoKSxvZT10aGlzLngucmVkTXVsKHRlKSxzZT10aGlzLngucmVkU3ViKGVlKS5yZWRNdWwodGhpcy54LnJlZEFkZChlZSkpO3NlPXNlLnJlZEFkZChzZSkucmVkSUFkZChzZSk7dmFyIGhlPW9lLnJlZElBZGQob2UpLHVlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVk'@;
put 'QWRkKGhlKTtMPXNlLnJlZFNxcigpLnJlZElTdWIodWUpLEU9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIodGUpLnJlZElTdWIoZWUpO3ZhciBjZT10ZS5yZWRTcXIoKTtjZT0oY2U9KGNlPWNlLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSkucmVkSUFkZChjZSksaz1z'@;
put 'ZS5yZWRNdWwoaGUucmVkSVN1YihMKSkucmVkSVN1YihjZSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEwsayxFKX0sei5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuY3VydmUuYSxrPXRoaXMueCxFPXRoaXMueSxqPXRoaXMueixWPWoucmVkU3FyKCkucmVkU3FyKCks'@;
put 'Qj1rLnJlZFNxcigpLFk9RS5yZWRTcXIoKSxYPUIucmVkQWRkKEIpLnJlZElBZGQoQikucmVkSUFkZChMLnJlZE11bChWKSksVT1rLnJlZEFkZChrKSxxPShVPVUucmVkSUFkZChVKSkucmVkTXVsKFkpLGVlPVgucmVkU3FyKCkucmVkSVN1YihxLnJlZEFkZChxKSksdGU9cS5yZWRJU3ViKGVl'@;
put 'KSxvZT1ZLnJlZFNxcigpO29lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKTt2YXIgc2U9WC5yZWRNdWwodGUpLnJlZElTdWIob2UpLGhlPUUucmVkQWRkKEUpLnJlZE11bChqKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZWUsc2UsaGUpfSx6LnBy'@;
put 'b3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBMPXRoaXMueC5yZWRTcXIoKSxrPXRoaXMueS5yZWRTcXIoKSxFPXRoaXMuei5yZWRTcXIoKSxqPWsucmVkU3FyKCksVj1MLnJlZEFkZChMKS5yZWRJQWRk'@;
put 'KEwpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoaykucmVkU3FyKCkucmVkSVN1YihMKS5yZWRJU3ViKGopLFg9KFk9KFk9KFk9WS5yZWRJQWRkKFkpKS5yZWRBZGQoWSkucmVkSUFkZChZKSkucmVkSVN1YihCKSkucmVkU3FyKCksVT1qLnJlZElBZGQoaik7VT0oVT0oVT1VLnJlZElB'@;
put 'ZGQoVSkpLnJlZElBZGQoVSkpLnJlZElBZGQoVSk7dmFyIHE9Vi5yZWRJQWRkKFkpLnJlZFNxcigpLnJlZElTdWIoQikucmVkSVN1YihYKS5yZWRJU3ViKFUpLGVlPWsucmVkTXVsKHEpO2VlPShlZT1lZS5yZWRJQWRkKGVlKSkucmVkSUFkZChlZSk7dmFyIHRlPXRoaXMueC5yZWRNdWwoWCku'@;
put 'cmVkSVN1YihlZSk7dGU9KHRlPXRlLnJlZElBZGQodGUpKS5yZWRJQWRkKHRlKTt2YXIgb2U9dGhpcy55LnJlZE11bChxLnJlZE11bChVLnJlZElTdWIocSkpLnJlZElTdWIoWS5yZWRNdWwoWCkpKTtvZT0ob2U9KG9lPW9lLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSk7'@;
put 'dmFyIHNlPXRoaXMuei5yZWRBZGQoWSkucmVkU3FyKCkucmVkSVN1YihFKS5yZWRJU3ViKFgpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0ZSxvZSxzZSl9LHoucHJvdG90eXBlLm11bD1mdW5jdGlvbihMLGspe3JldHVybiBMPW5ldyB4KEwsayksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlz'@;
put 'LEwpfSx6LnByb3RvdHlwZS5lcT1mdW5jdGlvbihMKXtpZigiYWZmaW5lIj09PUwudHlwZSlyZXR1cm4gdGhpcy5lcShMLnRvSigpKTtpZih0aGlzPT09TClyZXR1cm4hMDt2YXIgaz10aGlzLnoucmVkU3FyKCksRT1MLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoRSkucmVkSVN1'@;
put 'YihMLngucmVkTXVsKGspKS5jbXBuKDApKXJldHVybiExO3ZhciBqPWsucmVkTXVsKHRoaXMueiksVj1FLnJlZE11bChMLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChWKS5yZWRJU3ViKEwueS5yZWRNdWwoaikpLmNtcG4oMCl9LHoucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihMKXt2'@;
put 'YXIgaz10aGlzLnoucmVkU3FyKCksRT1MLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoayk7aWYoMD09PXRoaXMueC5jbXAoRSkpcmV0dXJuITA7Zm9yKHZhciBqPUwuY2xvbmUoKSxWPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoayk7Oyl7aWYoai5pYWRkKHRoaXMuY3VydmUubiksai5j'@;
put 'bXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihFLnJlZElBZGQoViksMD09PXRoaXMueC5jbXAoRSkpcmV0dXJuITB9fSx6LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQg'@;
put 'eDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sei5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw4MDQ5OihhdCxMZSxG'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixhZT1MZSx4PUYoNzEwNzYpLG09Rig5MTMyKSxNPUYoNDY3NjcpLmFzc2VydDtmdW5jdGlvbiBPKEspe3RoaXMuY3VydmU9InNob3J0Ij09PUsudHlwZT9uZXcgbS5zaG9ydChLKToiZWR3YXJkcyI9PT1LLnR5cGU/bmV3IG0uZWR3YXJkcyhLKTpuZXcg'@;
put 'bS5tb250KEspLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9Sy5oYXNoLE0odGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSxNKHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9'@;
put 'ZnVuY3Rpb24gUihLLEwpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhZSxLLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgaz1uZXcgTyhMKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFlLEsse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxl'@;
put 'OiEwLHZhbHVlOmt9KSxrfX0pfWFlLlByZXNldEN1cnZlPU8sUigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsi'@;
put 'MTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksUigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhi'@;
put 'YSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgw'@;
put 'ZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksUigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNj'@;
put 'M2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIz'@;
put 'M2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLFIoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYg'@;
put 'MDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDp4LnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5'@;
put 'OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVm'@;
put 'Il19KSxSKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1'@;
put 'MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEz'@;
put 'ODY0MDkiLGhhc2g6eC5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQy'@;
put 'OWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3'@;
put 'NiA5ZmQxNjY1MCJdfSksUigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAw'@;
put 'IDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLFIoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRl'@;
put 'YTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2'@;
put 'NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e3o9RigyNzI3NCl9Y2F0Y2h7ej12b2lkIDB9Uigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZm'@;
put 'ZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6eC5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4'@;
put 'OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3'@;
put 'ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2Zjgx'@;
put 'Nzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsel19KX0sNjQ0MzooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig5MjQ0NyksbT1GKDQ2NzY3KSxsZT1GKDgwNDkpLE09Rig2MDA4'@;
put 'MiksTz1tLmFzc2VydCxSPUYoOTEzNzMpLHo9Rig1Nzc0Nik7ZnVuY3Rpb24gSyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBLKSlyZXR1cm4gbmV3IEsoTCk7InN0cmluZyI9PXR5cGVvZiBMJiYoTyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGUsTCksIlVua25vd24g'@;
put 'Y3VydmUgIitMKSxMPWxlW0xdKSxMIGluc3RhbmNlb2YgbGUuUHJlc2V0Q3VydmUmJihMPXtjdXJ2ZTpMfSksdGhpcy5jdXJ2ZT1MLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9TC5jdXJ2'@;
put 'ZS5nLHRoaXMuZy5wcmVjb21wdXRlKEwuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9TC5oYXNofHxMLmN1cnZlLmhhc2h9YXQuZXhwb3J0cz1LLEsucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBSKHRoaXMsayl9LEsucHJvdG90eXBlLmtleUZyb21Q'@;
put 'cml2YXRlPWZ1bmN0aW9uKGssRSl7cmV0dXJuIFIuZnJvbVByaXZhdGUodGhpcyxrLEUpfSxLLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKGssRSl7cmV0dXJuIFIuZnJvbVB1YmxpYyh0aGlzLGssRSl9LEsucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oayl7a3x8KGs9'@;
put 'e30pO2Zvcih2YXIgRT1uZXcgeCh7aGFzaDp0aGlzLmhhc2gscGVyczprLnBlcnMscGVyc0VuYzprLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OmsuZW50cm9weXx8TSh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOmsuZW50cm9weSYmay5lbnRyb3B5RW5jfHwidXRmOCIsbm9u'@;
put 'Y2U6dGhpcy5uLnRvQXJyYXkoKX0pLGo9dGhpcy5uLmJ5dGVMZW5ndGgoKSxWPXRoaXMubi5zdWIobmV3IGFlKDIpKTs7KXt2YXIgQj1uZXcgYWUoRS5nZW5lcmF0ZShqKSk7aWYoIShCLmNtcChWKT4wKSlyZXR1cm4gQi5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKEIpfX0sSy5wcm90'@;
put 'b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKGssRSl7dmFyIGo9OCprLmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIGo+MCYmKGs9ay51c2hybihqKSksIUUmJmsuY21wKHRoaXMubik+PTA/ay5zdWIodGhpcy5uKTprfSxLLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9u'@;
put 'KGssRSxqLFYpeyJvYmplY3QiPT10eXBlb2YgaiYmKFY9aixqPW51bGwpLFZ8fChWPXt9KSxFPXRoaXMua2V5RnJvbVByaXZhdGUoRSxqKSxrPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBhZShrLDE2KSk7Zm9yKHZhciBCPXRoaXMubi5ieXRlTGVuZ3RoKCksWT1FLmdldFByaXZhdGUoKS50b0Fy'@;
put 'cmF5KCJiZSIsQiksWD1rLnRvQXJyYXkoImJlIixCKSxVPW5ldyB4KHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5Olksbm9uY2U6WCxwZXJzOlYucGVycyxwZXJzRW5jOlYucGVyc0VuY3x8InV0ZjgifSkscT10aGlzLm4uc3ViKG5ldyBhZSgxKSksZWU9MDs7ZWUrKyl7dmFyIHRlPVYuaz9WLmso'@;
put 'ZWUpOm5ldyBhZShVLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKCh0ZT10aGlzLl90cnVuY2F0ZVRvTih0ZSwhMCkpLmNtcG4oMSk8PTB8fHRlLmNtcChxKT49MCkpe3ZhciBvZT10aGlzLmcubXVsKHRlKTtpZighb2UuaXNJbmZpbml0eSgpKXt2YXIgc2U9b2UuZ2V0WCgp'@;
put 'LGhlPXNlLnVtb2QodGhpcy5uKTtpZigwIT09aGUuY21wbigwKSl7dmFyIHVlPXRlLmludm0odGhpcy5uKS5tdWwoaGUubXVsKEUuZ2V0UHJpdmF0ZSgpKS5pYWRkKGspKTtpZigwIT09KHVlPXVlLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIGNlPShvZS5nZXRZKCkuaXNPZGQoKT8xOjAp'@;
put 'fCgwIT09c2UuY21wKGhlKT8yOjApO3JldHVybiBWLmNhbm9uaWNhbCYmdWUuY21wKHRoaXMubmgpPjAmJih1ZT10aGlzLm4uc3ViKHVlKSxjZV49MSksbmV3IHooe3I6aGUsczp1ZSxyZWNvdmVyeVBhcmFtOmNlfSl9fX19fX0sSy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGssRSxqLFYp'@;
put 'e2s9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGFlKGssMTYpKSxqPXRoaXMua2V5RnJvbVB1YmxpYyhqLFYpO3ZhciBCPShFPW5ldyB6KEUsImhleCIpKS5yLFk9RS5zO2lmKEIuY21wbigxKTwwfHxCLmNtcCh0aGlzLm4pPj0wfHxZLmNtcG4oMSk8MHx8WS5jbXAodGhpcy5uKT49MClyZXR1cm4h'@;
put 'MTt2YXIgZWUsWD1ZLmludm0odGhpcy5uKSxVPVgubXVsKGspLnVtb2QodGhpcy5uKSxxPVgubXVsKEIpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEoZWU9dGhpcy5nLmptdWxBZGQoVSxqLmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJmVlLmVx'@;
put 'WFRvUChCKTohKGVlPXRoaXMuZy5tdWxBZGQoVSxqLmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJjA9PT1lZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChCKX0sSy5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihMLGssRSxqKXtPKCgzJkUpPT09RSwiVGhlIHJlY292ZXJ5'@;
put 'IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLGs9bmV3IHooayxqKTt2YXIgVj10aGlzLm4sQj1uZXcgYWUoTCksWT1rLnIsWD1rLnMsVT0xJkUscT1FPj4xO2lmKFkuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZxKXRocm93IG5ldyBFcnJvcigiVW5hYmxl'@;
put 'IHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7WT10aGlzLmN1cnZlLnBvaW50RnJvbVgocT9ZLmFkZCh0aGlzLmN1cnZlLm4pOlksVSk7dmFyIGVlPWsuci5pbnZtKFYpLHRlPVYuc3ViKEIpLm11bChlZSkudW1vZChWKSxvZT1YLm11bChlZSkudW1vZChWKTtyZXR1cm4gdGhpcy5n'@;
put 'Lm11bEFkZCh0ZSxZLG9lKX0sSy5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihMLGssRSxqKXtpZihudWxsIT09KGs9bmV3IHooayxqKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4gay5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVj0wO1Y8NDtWKyspe3ZhciBCO3RyeXtCPXRo'@;
put 'aXMucmVjb3ZlclB1YktleShMLGssVil9Y2F0Y2h7Y29udGludWV9aWYoQi5lcShFKSlyZXR1cm4gVn10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sOTEzNzM6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSxt'@;
put 'PUYoNDY3NjcpLmFzc2VydDtmdW5jdGlvbiBsZShNLE8pe3RoaXMuZWM9TSx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLE8ucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShPLnByaXYsTy5wcml2RW5jKSxPLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKE8ucHViLE8ucHViRW5jKX1hdC5l'@;
put 'eHBvcnRzPWxlLGxlLmZyb21QdWJsaWM9ZnVuY3Rpb24oTyxSLHope3JldHVybiBSIGluc3RhbmNlb2YgbGU/UjpuZXcgbGUoTyx7cHViOlIscHViRW5jOnp9KX0sbGUuZnJvbVByaXZhdGU9ZnVuY3Rpb24oTyxSLHope3JldHVybiBSIGluc3RhbmNlb2YgbGU/UjpuZXcgbGUoTyx7cHJpdjpS'@;
put 'LHByaXZFbmM6en0pfSxsZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLmdldFB1YmxpYygpO3JldHVybiBPLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06Ty52YWxpZGF0ZSgpP08ubXVsKHRoaXMuZWMuY3VydmUu'@;
put 'bikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sbGUucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihPLFIp'@;
put 'e3JldHVybiJzdHJpbmciPT10eXBlb2YgTyYmKFI9TyxPPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxSP3RoaXMucHViLmVuY29kZShSLE8pOnRoaXMucHVifSxsZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihPKXtyZXR1cm4iaGV4'@;
put 'Ij09PU8/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sbGUucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKE8sUil7dGhpcy5wcml2PW5ldyBhZShPLFJ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sbGUucHJvdG90eXBl'@;
put 'Ll9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oTyxSKXtpZihPLnh8fE8ueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/bShPLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkm'@;
put 'Jm0oTy54JiZPLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoTy54LE8ueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoTyxSKX0sbGUucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihPKXtyZXR1'@;
put 'cm4gTy52YWxpZGF0ZSgpfHxtKE8udmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxPLm11bCh0aGlzLnByaXYpLmdldFgoKX0sbGUucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTyxSLHope3JldHVybiB0aGlzLmVjLnNpZ24oTyx0aGlzLFIseil9LGxlLnByb3RvdHlw'@;
put 'ZS52ZXJpZnk9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoTyxSLHRoaXMpfSxsZS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWIm'@;
put 'JnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDU3NzQ2OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguYXNzZXJ0O2Z1bmN0aW9uIGxlKEssTCl7aWYoSyBpbnN0YW5jZW9mIGxlKXJldHVybiBLO3RoaXMuX2ltcG9ydERFUihLLEwpfHwo'@;
put 'bShLLnImJksucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBhZShLLnIsMTYpLHRoaXMucz1uZXcgYWUoSy5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09Sy5yZWNvdmVyeVBhcmFtP251bGw6Sy5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiBNKCl7dGhp'@;
put 'cy5wbGFjZT0wfWZ1bmN0aW9uIE8oSyxMKXt2YXIgaz1LW0wucGxhY2UrK107aWYoISgxMjgmaykpcmV0dXJuIGs7dmFyIEU9MTUmaztpZigwPT09RXx8RT40KXJldHVybiExO2Zvcih2YXIgaj0wLFY9MCxCPUwucGxhY2U7VjxFO1YrKyxCKyspajw8PTgsanw9S1tCXSxqPj4+PTA7cmV0dXJu'@;
put 'IShqPD0xMjcpJiYoTC5wbGFjZT1CLGopfWZ1bmN0aW9uIFIoSyl7Zm9yKHZhciBMPTAsaz1LLmxlbmd0aC0xOyFLW0xdJiYhKDEyOCZLW0wrMV0pJiZMPGs7KUwrKztyZXR1cm4gMD09PUw/SzpLLnNsaWNlKEwpfWZ1bmN0aW9uIHooSyxMKXtpZihMPDEyOClLLnB1c2goTCk7ZWxzZXt2YXIg'@;
put 'az0xKyhNYXRoLmxvZyhMKS9NYXRoLkxOMj4+PjMpO2ZvcihLLnB1c2goMTI4fGspOy0tazspSy5wdXNoKEw+Pj4oazw8MykmMjU1KTtLLnB1c2goTCl9fWF0LmV4cG9ydHM9bGUsbGUucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTCxrKXtMPXgudG9BcnJheShMLGspO3ZhciBFPW5l'@;
put 'dyBNO2lmKDQ4IT09TFtFLnBsYWNlKytdKXJldHVybiExO3ZhciBqPU8oTCxFKTtpZighMT09PWp8fGorRS5wbGFjZSE9PUwubGVuZ3RofHwyIT09TFtFLnBsYWNlKytdKXJldHVybiExO3ZhciBWPU8oTCxFKTtpZighMT09PVYpcmV0dXJuITE7dmFyIEI9TC5zbGljZShFLnBsYWNlLFYrRS5w'@;
put 'bGFjZSk7aWYoRS5wbGFjZSs9ViwyIT09TFtFLnBsYWNlKytdKXJldHVybiExO3ZhciBZPU8oTCxFKTtpZighMT09PVl8fEwubGVuZ3RoIT09WStFLnBsYWNlKXJldHVybiExO3ZhciBYPUwuc2xpY2UoRS5wbGFjZSxZK0UucGxhY2UpO2lmKDA9PT1CWzBdKXtpZighKDEyOCZCWzFdKSlyZXR1'@;
put 'cm4hMTtCPUIuc2xpY2UoMSl9aWYoMD09PVhbMF0pe2lmKCEoMTI4JlhbMV0pKXJldHVybiExO1g9WC5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBhZShCKSx0aGlzLnM9bmV3IGFlKFgpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxsZS5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24o'@;
put 'TCl7dmFyIGs9dGhpcy5yLnRvQXJyYXkoKSxFPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZrWzBdJiYoaz1bMF0uY29uY2F0KGspKSwxMjgmRVswXSYmKEU9WzBdLmNvbmNhdChFKSksaz1SKGspLEU9UihFKTshKEVbMF18fDEyOCZFWzFdKTspRT1FLnNsaWNlKDEpO3ZhciBqPVsyXTt6KGos'@;
put 'ay5sZW5ndGgpLChqPWouY29uY2F0KGspKS5wdXNoKDIpLHooaixFLmxlbmd0aCk7dmFyIFY9ai5jb25jYXQoRSksQj1bNDhdO3JldHVybiB6KEIsVi5sZW5ndGgpLEI9Qi5jb25jYXQoVikseC5lbmNvZGUoQixMKX19LDk5NTc3OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3'@;
put 'MTA3NikseD1GKDgwNDkpLG09Rig0Njc2NyksbGU9bS5hc3NlcnQsTT1tLnBhcnNlQnl0ZXMsTz1GKDE3MDEyKSxSPUYoNzgwNjIpO2Z1bmN0aW9uIHooSyl7aWYobGUoImVkMjU1MTkiPT09Sywib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIHop'@;
put 'KXJldHVybiBuZXcgeihLKTt0aGlzLmN1cnZlPUs9eFtLXS5jdXJ2ZSx0aGlzLmc9Sy5nLHRoaXMuZy5wcmVjb21wdXRlKEsubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9Sy5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKEsubi5iaXRM'@;
put 'ZW5ndGgoKS84KSx0aGlzLmhhc2g9YWUuc2hhNTEyfWF0LmV4cG9ydHM9eix6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEwsayl7TD1NKEwpO3ZhciBFPXRoaXMua2V5RnJvbVNlY3JldChrKSxqPXRoaXMuaGFzaEludChFLm1lc3NhZ2VQcmVmaXgoKSxMKSxWPXRoaXMuZy5tdWwoaiksQj10'@;
put 'aGlzLmVuY29kZVBvaW50KFYpLFk9dGhpcy5oYXNoSW50KEIsRS5wdWJCeXRlcygpLEwpLm11bChFLnByaXYoKSksWD1qLmFkZChZKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpWLFM6WCxSZW5jb2RlZDpCfSl9LHoucHJvdG90eXBlLnZlcmlmeT1m'@;
put 'dW5jdGlvbihMLGssRSl7TD1NKEwpLGs9dGhpcy5tYWtlU2lnbmF0dXJlKGspO3ZhciBqPXRoaXMua2V5RnJvbVB1YmxpYyhFKSxWPXRoaXMuaGFzaEludChrLlJlbmNvZGVkKCksai5wdWJCeXRlcygpLEwpLEI9dGhpcy5nLm11bChrLlMoKSk7cmV0dXJuIGsuUigpLmFkZChqLnB1YigpLm11'@;
put 'bChWKSkuZXEoQil9LHoucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIEw9dGhpcy5oYXNoKCksaz0wO2s8YXJndW1lbnRzLmxlbmd0aDtrKyspTC51cGRhdGUoYXJndW1lbnRzW2tdKTtyZXR1cm4gbS5pbnRGcm9tTEUoTC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4p'@;
put 'fSx6LnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEwpe3JldHVybiBPLmZyb21QdWJsaWModGhpcyxMKX0sei5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihMKXtyZXR1cm4gTy5mcm9tU2VjcmV0KHRoaXMsTCl9LHoucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVu'@;
put 'Y3Rpb24oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBSP0w6bmV3IFIodGhpcyxMKX0sei5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oTCl7dmFyIGs9TC5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBrW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18'@;
put 'PUwuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsa30sei5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTCl7dmFyIGs9KEw9bS5wYXJzZUJ5dGVzKEwpKS5sZW5ndGgtMSxFPUwuc2xpY2UoMCxrKS5jb25jYXQoLTEyOSZMW2tdKSxqPTAhPSgxMjgmTFtrXSksVj1tLmludEZyb21MRShFKTty'@;
put 'ZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFYsail9LHoucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihMKXtyZXR1cm4gTC50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LHoucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihMKXtyZXR1cm4gbS5pbnRGcm9tTEUo'@;
put 'TCl9LHoucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSwxNzAxMjooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY3NjcpLHg9YWUuYXNzZXJ0LG09YWUucGFyc2VCeXRlcyxsZT1hZS5jYWNoZWRQcm9w'@;
put 'ZXJ0eTtmdW5jdGlvbiBNKE8sUil7dGhpcy5lZGRzYT1PLHRoaXMuX3NlY3JldD1tKFIuc2VjcmV0KSxPLmlzUG9pbnQoUi5wdWIpP3RoaXMuX3B1Yj1SLnB1Yjp0aGlzLl9wdWJCeXRlcz1tKFIucHViKX1NLmZyb21QdWJsaWM9ZnVuY3Rpb24oUix6KXtyZXR1cm4geiBpbnN0YW5jZW9mIE0/'@;
put 'ejpuZXcgTShSLHtwdWI6en0pfSxNLmZyb21TZWNyZXQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4geiBpbnN0YW5jZW9mIE0/ejpuZXcgTShSLHtzZWNyZXQ6en0pfSxNLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxsZShNLCJwdWJCeXRlcyIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLGxlKE0sInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxs'@;
put 'ZShNLCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5lZGRzYSx6PXRoaXMuaGFzaCgpLEs9Ui5lbmNvZGluZ0xlbmd0aC0xLEw9ei5zbGljZSgwLFIuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBMWzBdJj0yNDgsTFtLXSY9MTI3LExbS118PTY0LEx9KSxsZShNLCJwcml2IixmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLGxlKE0sImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLGxlKE0sIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksTS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihSKXtyZXR1cm4geCh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKFIsdGhpcyl9LE0ucHJv'@;
put 'dG90eXBlLnZlcmlmeT1mdW5jdGlvbihSLHope3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShSLHosdGhpcyl9LE0ucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihSKXtyZXR1cm4geCh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxhZS5lbmNvZGUodGhpcy5zZWNy'@;
put 'ZXQoKSxSKX0sTS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFIpe3JldHVybiBhZS5lbmNvZGUodGhpcy5wdWJCeXRlcygpLFIpfSxhdC5leHBvcnRzPU19LDc4MDYyOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguYXNzZXJ0LGxl'@;
put 'PXguY2FjaGVkUHJvcGVydHksTT14LnBhcnNlQnl0ZXM7ZnVuY3Rpb24gTyhSLHope3RoaXMuZWRkc2E9Uiwib2JqZWN0IiE9dHlwZW9mIHomJih6PU0oeikpLEFycmF5LmlzQXJyYXkoeikmJih6PXtSOnouc2xpY2UoMCxSLmVuY29kaW5nTGVuZ3RoKSxTOnouc2xpY2UoUi5lbmNvZGluZ0xl'@;
put 'bmd0aCl9KSxtKHouUiYmei5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxSLmlzUG9pbnQoei5SKSYmKHRoaXMuX1I9ei5SKSx6LlMgaW5zdGFuY2VvZiBhZSYmKHRoaXMuX1M9ei5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KHouUik/ei5SOnouUmVuY29kZWQsdGhpcy5f'@;
put 'U2VuY29kZWQ9QXJyYXkuaXNBcnJheSh6LlMpP3ouUzp6LlNlbmNvZGVkfWxlKE8sIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxsZShPLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMu'@;
put 'UmVuY29kZWQoKSl9KSxsZShPLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxsZShPLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksTy5wcm90b3R5cGUudG9C'@;
put 'eXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LE8ucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHguZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxhdC5leHBvcnRzPU99LDI3Mjc0'@;
put 'OmF0PT57YXQuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJj'@;
put 'Y2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2'@;
put 'NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1'@;
put 'NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBh'@;
put 'NmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2'@;
put 'MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5'@;
put 'Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdh'@;
put 'NGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2'@;
put 'ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJi'@;
put 'YzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0'@;
put 'MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVl'@;
put 'ZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBm'@;
put 'ZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZi'@;
put 'ZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJm'@;
put 'YTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4'@;
put 'OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhk'@;
put 'NDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2'@;
put 'YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFk'@;
put 'MGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMw'@;
put 'Yjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZm'@;
put 'Il0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFh'@;
put 'NzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5'@;
put 'ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFl'@;
put 'NGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMy'@;
put 'MmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFk'@;
put 'ODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4'@;
put 'OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUx'@;
put 'MSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2Ez'@;
put 'NzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0'@;
put 'MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0'@;
put 'MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0'@;
put 'OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUx'@;
put 'MDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMy'@;
put 'NmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJd'@;
put 'LFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5'@;
put 'ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTlj'@;
put 'MDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUy'@;
put 'OWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNl'@;
put 'YjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlm'@;
put 'MjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2'@;
put 'ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTki'@;
put 'LCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3Zjlk'@;
put 'NGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdk'@;
put 'M2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkw'@;
put 'NzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUw'@;
put 'OGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUy'@;
put 'ODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBm'@;
put 'NzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODki'@;
put 'XSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFl'@;
put 'ODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNh'@;
put 'MGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMz'@;
put 'NzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhl'@;
put 'OTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5'@;
put 'ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMx'@;
put 'MDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYx'@;
put 'OWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNh'@;
put 'NDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRk'@;
put 'ODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFi'@;
put 'Il0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMw'@;
put 'OTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZh'@;
put 'YTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkz'@;
put 'YjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEw'@;
put 'MzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3'@;
put 'OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1'@;
put 'NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2Ri'@;
put 'IiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYx'@;
put 'NmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2'@;
put 'M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5'@;
put 'NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4'@;
put 'YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5'@;
put 'ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0'@;
put 'NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0s'@;
put 'WyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3'@;
put 'YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUw'@;
put 'YzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEz'@;
put 'ZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJh'@;
put 'NWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3'@;
put 'MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJi'@;
put 'MzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4Iiwi'@;
put 'NTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4'@;
put 'MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2Yy'@;
put 'YmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRh'@;
put 'MTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3'@;
put 'MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJl'@;
put 'YWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTcz'@;
put 'OWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0s'@;
put 'WyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFi'@;
put 'ZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThh'@;
put 'M2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhl'@;
put 'MTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYz'@;
put 'MGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgw'@;
put 'ZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2'@;
put 'YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAi'@;
put 'LCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUz'@;
put 'YTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEy'@;
put 'ODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFj'@;
put 'MTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2Mjcw'@;
put 'ODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4'@;
put 'OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFm'@;
put 'ZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0s'@;
put 'WyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZh'@;
put 'NzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIz'@;
put 'NWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzli'@;
put 'YTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZh'@;
put 'MTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNh'@;
put 'NTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4'@;
put 'MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJk'@;
put 'MjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIz'@;
put 'MzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNk'@;
put 'ZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2Yz'@;
put 'MGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcy'@;
put 'YTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUw'@;
put 'OTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0'@;
put 'NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEw'@;
put 'MTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUx'@;
put 'MjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4'@;
put 'OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1'@;
put 'NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3Njdi'@;
put 'ZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBk'@;
put 'ZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1'@;
put 'M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2'@;
put 'OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNl'@;
put 'YjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgi'@;
put 'XSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgz'@;
put 'MDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNl'@;
put 'ZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4'@;
put 'YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVk'@;
put 'NGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYz'@;
put 'ZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAw'@;
put 'MzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2Vk'@;
put 'YSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1'@;
put 'N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5'@;
put 'MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0'@;
put 'ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNl'@;
put 'MjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEw'@;
put 'ZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMx'@;
put 'ZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1'@;
put 'OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0'@;
put 'ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3'@;
put 'ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4'@;
put 'MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIy'@;
put 'NzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0'@;
put 'NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1'@;
put 'ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgz'@;
put 'ZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcw'@;
put 'MDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5'@;
put 'MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2Mz'@;
put 'MDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRm'@;
put 'NTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFl'@;
put 'MDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5'@;
put 'MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2'@;
put 'Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMx'@;
put 'YmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYx'@;
put 'NTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRm'@;
put 'YTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEz'@;
put 'ODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2'@;
put 'ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIz'@;
put 'MTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4'@;
put 'MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sNDY3Njc6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1MZSx4PUYoMzEzODcpLG09Rig1Nzc5OCksbGU9Rig3ODI0Nyk7YWUuYXNzZXJ0PW0sYWUu'@;
put 'dG9BcnJheT1sZS50b0FycmF5LGFlLnplcm8yPWxlLnplcm8yLGFlLnRvSGV4PWxlLnRvSGV4LGFlLmVuY29kZT1sZS5lbmNvZGUsYWUuZ2V0TkFGPWZ1bmN0aW9uIE0oTCxrLEUpe3ZhciBqPW5ldyBBcnJheShNYXRoLm1heChMLmJpdExlbmd0aCgpLEUpKzEpO2ouZmlsbCgwKTtmb3IodmFy'@;
put 'IFY9MTw8aysxLEI9TC5jbG9uZSgpLFk9MDtZPGoubGVuZ3RoO1krKyl7dmFyIFgsVT1CLmFuZGxuKFYtMSk7Qi5pc09kZCgpP0IuaXN1Ym4oWD1VPihWPj4xKS0xPyhWPj4xKS1VOlUpOlg9MCxqW1ldPVgsQi5pdXNocm4oMSl9cmV0dXJuIGp9LGFlLmdldEpTRj1mdW5jdGlvbiBPKEwsayl7'@;
put 'dmFyIEU9W1tdLFtdXTtMPUwuY2xvbmUoKSxrPWsuY2xvbmUoKTtmb3IodmFyIEIsaj0wLFY9MDtMLmNtcG4oLWopPjB8fGsuY21wbigtVik+MDspe3ZhciBVLHEsWT1MLmFuZGxuKDMpK2omMyxYPWsuYW5kbG4oMykrViYzOzM9PT1ZJiYoWT0tMSksMz09PVgmJihYPS0xKSxVPTEmWT8zIT0o'@;
put 'Qj1MLmFuZGxuKDcpK2omNykmJjUhPT1CfHwyIT09WD9ZOi1ZOjAsRVswXS5wdXNoKFUpLHE9MSZYPzMhPShCPWsuYW5kbG4oNykrViY3KSYmNSE9PUJ8fDIhPT1ZP1g6LVg6MCxFWzFdLnB1c2gocSksMipqPT09VSsxJiYoaj0xLWopLDIqVj09PXErMSYmKFY9MS1WKSxMLml1c2hybigxKSxr'@;
put 'Lml1c2hybigxKX1yZXR1cm4gRX0sYWUuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gUihMLGssRSl7dmFyIGo9Il8iK2s7TC5wcm90b3R5cGVba109ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tqXT90aGlzW2pdOnRoaXNbal09RS5jYWxsKHRoaXMpfX0sYWUucGFyc2VCeXRlcz1m'@;
put 'dW5jdGlvbiB6KEwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgTD9hZS50b0FycmF5KEwsImhleCIpOkx9LGFlLmludEZyb21MRT1mdW5jdGlvbiBLKEwpe3JldHVybiBuZXcgeChMLCJoZXgiLCJsZSIpfX0sMzEzODc6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlw'@;
put 'ZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMu'@;
put 'X2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDg1NTY4'@;
put 'KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8'@;
put 'PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1'@;
put 'bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJh'@;
put 'eShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChi'@;
put 'LE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53'@;
put 'b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4'@;
put 'ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1'@;
put 'cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lm'@;
put 'KCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYo'@;
put 'ImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMu'@;
put 'c3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7'@;
put 'dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0w'@;
put 'P0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMu'@;
put 'd29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcp'@;
put 'LHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jk'@;
put 'c1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlz'@;
put 'Lmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5n'@;
put 'dGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9'@;
put 'LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAi'@;
put 'KSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBMPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3'@;
put 'NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtm'@;
put 'dW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEw'@;
put 'ODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNb'@;
put 'ZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8'@;
put 'fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/TFs2'@;
put 'LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3Zh'@;
put 'ciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpMW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVy'@;
put 'bygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRz'@;
put 'WzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9u'@;
put 'bHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88'@;
put 'InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxn'@;
put 'PUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihD'@;
put 'KXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ct'@;
put 'cC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49Nyks'@;
put 'RD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUm'@;
put 'RHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90'@;
put 'b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBl'@;
put 'LmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJv'@;
put 'dG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVu'@;
put 'Z3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlz'@;
put 'Lm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1'@;
put 'cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMu'@;
put 'd29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJv'@;
put 'dG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5p'@;
put 'dWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNb'@;
put 'Tl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0'@;
put 'aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4'@;
put 'cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlz'@;
put 'LndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiks'@;
put 'dGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1i'@;
put 'KTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYo'@;
put 'RD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1'@;
put 'cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0'@;
put 'aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVn'@;
put 'YXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlz'@;
put 'LmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jk'@;
put 'c1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtT'@;
put 'KyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vi'@;
put 'KGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLEllPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxX'@;
put 'ZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLFFlPTB8Tls0XSxsdD04MTkxJlFlLFBlPVFlPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxO'@;
put 'WzhdLG90PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxo'@;
put 'bj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixMdD1tbj4+PjEzLFF0PTB8Z1s2XSxEdD04MTkxJlF0LHB0PVF0Pj4+MTMsWXQ9MHxnWzddLExuPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5'@;
put 'MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIEZuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmlt'@;
put 'dWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKEZuPj4+MjYpfDAsRm4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChJZSxDbil8MCx3PU1hdGguaW11bChJZSxVdCk7dmFy'@;
put 'IG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoSWUsV24pfDAsdz13K01hdGguaW11bChJZSxl'@;
put 'bil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5p'@;
put 'bXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKEllLEhuKXwwLHc9dytNYXRoLmltdWwoSWUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt'@;
put 'dWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8'@;
put 'MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01h'@;
put 'dGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLHc9dytNYXRoLmltdWwoSWUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11'@;
put 'bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01h'@;
put 'dGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoSWUsX3QpfDAsdz13K01hdGguaW11bChJZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxMdCl8MCkrTWF0aC5p'@;
put 'bXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEx0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0'@;
put 'KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9'@;
put 'dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01h'@;
put 'dGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxMdCl8MCkrTWF0aC5pbXVsKEllLHJ0KXwwLHc9dytNYXRoLmltdWwoSWUsTHQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11'@;
put 'bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01h'@;
put 'dGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTHQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5p'@;
put 'bXVsKGplLEx0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKEllLER0KXwwLHc9dytNYXRoLmltdWwoSWUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLExuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt'@;
put 'dWwobmUsenQpfDApK01hdGguaW11bChkZSxMbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKG90LENuKSxwPShwPU1hdGguaW11bChvdCxVdCkpK01hdGguaW11bCh1dCxDbil8'@;
put 'MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01h'@;
put 'dGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTHQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEx0KXwwLHY9ditNYXRoLmltdWwo'@;
put 'T2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4ZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoSWUsTG4pfDAsdz13K01hdGguaW11bChJZSx6'@;
put 'dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKG90LFduKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5p'@;
put 'bXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwo'@;
put 'VWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChs'@;
put 'dCxMdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsTHQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLExuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxMbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKEllLHhuKXwwLHc9dytNYXRoLmltdWwoSWUsc24pfDA7dmFy'@;
put 'IG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChvdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGZ0KXwwKStNYXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxm'@;
put 'dCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXww'@;
put 'LHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEx0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxMdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDAp'@;
put 'K01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsTG4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLExuKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKEllLFJuKXwwKSk8PDEzKXwwO1M9'@;
put 'KCh3PXcrTWF0aC5pbXVsKEllLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKG90LGhuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwob3Qsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12'@;
put 'K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEx0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxMdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsTG4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLExuKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmlt'@;
put 'dWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSso'@;
put 'cD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKG90LF90KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsTnQpfDAp'@;
put 'K01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxMdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsTHQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxMbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmlt'@;
put 'dWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZ'@;
put 'ZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12'@;
put 'K01hdGguaW11bChvdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEx0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxMdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsTG4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLExuKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmlt'@;
put 'dWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSso'@;
put 'cD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEx0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEx0KSx2PXYrTWF0aC5pbXVsKG90LER0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDAp'@;
put 'K01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsTG4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLExuKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9'@;
put 'KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKG90LExuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwob3QsenQpfDApK01hdGguaW11bCh1dCxMbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFy'@;
put 'IGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9'@;
put 'TWF0aC5pbXVsKEh0LExuKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxMbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChvdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKG90LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxz'@;
put 'bil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9Njcx'@;
put 'MDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwob3QsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChvdCwkdCl8MCkrTWF0aC5p'@;
put 'bXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQs'@;
put 'Um4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPUZuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENb'@;
put 'MTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUo'@;
put 'RyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlz'@;
put 'LGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1N'@;
put 'YXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDAp'@;
put 'KyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIg'@;
put 'RD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAs'@;
put 'Zz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihi'@;
put 'LEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8Uztm'@;
put 'ZSsrKXt2YXIgeGU9SFtKK2ZlXSxJZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09SWUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1JZS1PZSxmZSE9PXYmJihqZT1w'@;
put 'Km5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9'@;
put 'ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3Io'@;
put 'dmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9u'@;
put 'KGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlv'@;
put 'bihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihO'@;
put 'KSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVy'@;
put 'dDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0q'@;
put 'SltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5s'@;
put 'ZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7'@;
put 'dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0'@;
put 'aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYs'@;
put 'dGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxE'@;
put 'PTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYo'@;
put 'KytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShi'@;
put 'LUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2dd'@;
put 'PUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlw'@;
put 'ZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1N'@;
put 'YXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5n'@;
put 'dGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2'@;
put 'YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90'@;
put 'b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRl'@;
put 'c3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBi'@;
put 'JiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0'@;
put 'aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndv'@;
put 'cmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1'@;
put 'Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhp'@;
put 'cy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4'@;
put 'NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnBy'@;
put 'b3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBh'@;
put 'bmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9y'@;
put 'KDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53'@;
put 'b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9'@;
put 'KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAu'@;
put 'bGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2'@;
put 'NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxu'@;
put 'ZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxI'@;
put 'KXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYo'@;
put 'Zz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6'@;
put 'dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIp'@;
put 'PDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1sw'@;
put 'XSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8o'@;
put 'KSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5k'@;
put 'aXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVu'@;
put 'Y3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2'@;
put 'YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0x'@;
put 'OyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNb'@;
put 'MF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxn'@;
put 'LmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtE'@;
put 'PTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3Io'@;
put 'RC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEp'@;
put 'O0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFi'@;
put 'cygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtm'@;
put 'b3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnBy'@;
put 'b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29y'@;
put 'ZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1'@;
put 'cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhp'@;
put 'cy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8w'@;
put 'Ok48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3Zh'@;
put 'ciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5s'@;
put 'ZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlw'@;
put 'ZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0u'@;
put 'cHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNl'@;
put 'UmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9'@;
put 'ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3Vi'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRo'@;
put 'aXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNx'@;
put 'ciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk'@;
put 'Lmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShH'@;
put 'LGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAw'@;
put 'MDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZm'@;
put 'IGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEi'@;
put 'KSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMu'@;
put 'c2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWlu'@;
put 'dj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtk'@;
put 'b3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpO'@;
put 'PjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5r'@;
put 'KX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09'@;
put 'MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVu'@;
put 'Z3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hd'@;
put 'O2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxl'@;
put 'ZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109'@;
put 'RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJl'@;
put 'ZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1pl'@;
put 'cm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRo'@;
put 'aXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7'@;
put 'dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRo'@;
put 'aXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkp'@;
put 'fSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlv'@;
put 'bihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigy'@;
put 'KTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJu'@;
put 'KDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5l'@;
put 'PXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgSWU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoSWUpLHc9SWUucmVk'@;
put 'U3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1'@;
put 'ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZh'@;
put 'ciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIg'@;
put 'bmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rp'@;
put 'b24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxs'@;
put 'ZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJl'@;
put 'ZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlz'@;
put 'LnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1m'@;
put 'dW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4p'@;
put 'Lml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIu'@;
put 'X2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDgyMDE2OmF0PT57InVzZSBzdHJpY3QiO3ZhciBhZSxMZT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLEY9TGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBM'@;
put 'ZS5hcHBseT9MZS5hcHBseTpmdW5jdGlvbihlZSx0ZSxvZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGVlLHRlLG9lKX07YWU9TGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBMZS5vd25LZXlzP0xlLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5j'@;
put 'dGlvbihlZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlZSkpfTpmdW5jdGlvbihlZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVlKX07dmFyIG09TnVtYmVyLmlzTmFOfHxmdW5j'@;
put 'dGlvbihlZSl7cmV0dXJuIGVlIT1lZX07ZnVuY3Rpb24gbGUoKXtsZS5pbml0LmNhbGwodGhpcyl9YXQuZXhwb3J0cz1sZSxhdC5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gWShxLGVlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKHVlKXtxLnJlbW92ZUxp'@;
put 'c3RlbmVyKGVlLGhlKSxvZSh1ZSl9ZnVuY3Rpb24gaGUoKXsiZnVuY3Rpb24iPT10eXBlb2YgcS5yZW1vdmVMaXN0ZW5lciYmcS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHNlKSx0ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfVUocSxlZSxoZSx7b25jZTohMH0pLCJlcnJvciIhPT1lZSYm'@;
put 'ZnVuY3Rpb24gWChxLGVlLHRlKXsiZnVuY3Rpb24iPT10eXBlb2YgcS5vbiYmVShxLCJlcnJvciIsZWUsdGUpfShxLHNlLHtvbmNlOiEwfSl9KX0sbGUuRXZlbnRFbWl0dGVyPWxlLGxlLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxsZS5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsbGUucHJv'@;
put 'dG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBNPTEwO2Z1bmN0aW9uIE8ocSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlw'@;
put 'ZW9mIHEpfWZ1bmN0aW9uIFIocSl7cmV0dXJuIHZvaWQgMD09PXEuX21heExpc3RlbmVycz9sZS5kZWZhdWx0TWF4TGlzdGVuZXJzOnEuX21heExpc3RlbmVyc31mdW5jdGlvbiB6KHEsZWUsdGUsb2Upe3ZhciBzZSxoZSx1ZTtpZihPKHRlKSx2b2lkIDA9PT0oaGU9cS5fZXZlbnRzKT8oaGU9'@;
put 'cS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkscS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PWhlLm5ld0xpc3RlbmVyJiYocS5lbWl0KCJuZXdMaXN0ZW5lciIsZWUsdGUubGlzdGVuZXI/dGUubGlzdGVuZXI6dGUpLGhlPXEuX2V2ZW50cyksdWU9aGVbZWVdKSx2b2lkIDA9PT11ZSl1'@;
put 'ZT1oZVtlZV09dGUsKytxLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB1ZT91ZT1oZVtlZV09b2U/W3RlLHVlXTpbdWUsdGVdOm9lP3VlLnVuc2hpZnQodGUpOnVlLnB1c2godGUpLChzZT1SKHEpKT4wJiZ1ZS5sZW5ndGg+c2UmJiF1ZS53YXJuZWQpe3VlLndhcm5l'@;
put 'ZD0hMDt2YXIgY2U9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrdWUubGVuZ3RoKyIgIitTdHJpbmcoZWUpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2Nl'@;
put 'Lm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsY2UuZW1pdHRlcj1xLGNlLnR5cGU9ZWUsY2UuY291bnQ9dWUubGVuZ3RoLGZ1bmN0aW9uIHgocSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4ocSl9KGNlKX1yZXR1cm4gcX1mdW5jdGlvbiBLKCl7aWYoIXRo'@;
put 'aXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQs'@;
put 'YXJndW1lbnRzKX1mdW5jdGlvbiBMKHEsZWUsdGUpe3ZhciBvZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6cSx0eXBlOmVlLGxpc3RlbmVyOnRlfSxzZT1LLmJpbmQob2UpO3JldHVybiBzZS5saXN0ZW5lcj10ZSxvZS53cmFwRm49c2Usc2V9ZnVuY3Rpb24gayhxLGVlLHRlKXt2'@;
put 'YXIgb2U9cS5fZXZlbnRzO2lmKHZvaWQgMD09PW9lKXJldHVybltdO3ZhciBzZT1vZVtlZV07cmV0dXJuIHZvaWQgMD09PXNlP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBzZT90ZT9bc2UubGlzdGVuZXJ8fHNlXTpbc2VdOnRlP2Z1bmN0aW9uIEIocSl7Zm9yKHZhciBlZT1uZXcgQXJyYXkocS5s'@;
put 'ZW5ndGgpLHRlPTA7dGU8ZWUubGVuZ3RoOysrdGUpZWVbdGVdPXFbdGVdLmxpc3RlbmVyfHxxW3RlXTtyZXR1cm4gZWV9KHNlKTpqKHNlLHNlLmxlbmd0aCl9ZnVuY3Rpb24gRShxKXt2YXIgZWU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWVlKXt2YXIgdGU9ZWVbcV07aWYoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIHRlKXJldHVybiAxO2lmKHZvaWQgMCE9PXRlKXJldHVybiB0ZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gaihxLGVlKXtmb3IodmFyIHRlPW5ldyBBcnJheShlZSksb2U9MDtvZTxlZTsrK29lKXRlW29lXT1xW29lXTtyZXR1cm4gdGV9ZnVuY3Rpb24gVShxLGVlLHRlLG9l'@;
put 'KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcS5vbilvZS5vbmNlP3Eub25jZShlZSx0ZSk6cS5vbihlZSx0ZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0'@;
put 'eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBxKTtxLmFkZEV2ZW50TGlzdGVuZXIoZWUsZnVuY3Rpb24gc2UoaGUpe29lLm9uY2UmJnEucmVtb3ZlRXZlbnRMaXN0ZW5lcihlZSxzZSksdGUoaGUpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdE1h'@;
put 'eExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldDpmdW5jdGlvbihxKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHE8MHx8bShxKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQg'@;
put 'b2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3ErIi4iKTtNPXF9fSksbGUuaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYm'@;
put 'KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sbGUucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihlZSl7aWYoIm51bWJlciIhPXR5cGVvZiBl'@;
put 'ZXx8ZWU8MHx8bShlZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZWUsdGhpc30sbGUucHJv'@;
put 'dG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBSKHRoaXMpfSxsZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlZSl7Zm9yKHZhciB0ZT1bXSxvZT0xO29lPGFyZ3VtZW50cy5sZW5ndGg7b2UrKyl0ZS5wdXNoKGFyZ3VtZW50c1tvZV0pO3ZhciBzZT0iZXJyb3IiPT09'@;
put 'ZWUsaGU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWhlKXNlPXNlJiZ2b2lkIDA9PT1oZS5lcnJvcjtlbHNlIGlmKCFzZSlyZXR1cm4hMTtpZihzZSl7dmFyIHVlO2lmKHRlLmxlbmd0aD4wJiYodWU9dGVbMF0pLHVlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgdWU7dmFyIGNlPW5ldyBFcnJv'@;
put 'cigiVW5oYW5kbGVkIGVycm9yLiIrKHVlPyIgKCIrdWUubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBjZS5jb250ZXh0PXVlLGNlfXZhciBHPWhlW2VlXTtpZih2b2lkIDA9PT1HKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBHKUYoRyx0aGlzLHRlKTtlbHNle3ZhciBiPUcubGVuZ3Ro'@;
put 'LEQ9aihHLGIpO2ZvcihvZT0wO29lPGI7KytvZSlGKERbb2VdLHRoaXMsdGUpfXJldHVybiEwfSxsZS5wcm90b3R5cGUub249bGUucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4geih0aGlzLGVlLHRlLCExKX0sbGUucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5l'@;
put 'cj1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuIHoodGhpcyxlZSx0ZSwhMCl9LGxlLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4gTyh0ZSksdGhpcy5vbihlZSxMKHRoaXMsZWUsdGUpKSx0aGlzfSxsZS5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihl'@;
put 'ZSx0ZSl7cmV0dXJuIE8odGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGVlLEwodGhpcyxlZSx0ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5vZmY9bGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U7aWYoTyh0ZSksdm9pZCAwPT09KHNl'@;
put 'PXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG9lPXNlW2VlXSkpcmV0dXJuIHRoaXM7aWYob2U9PT10ZXx8b2UubGlzdGVuZXI9PT10ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgc2VbZWVdLHNl'@;
put 'LnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlZSxvZS5saXN0ZW5lcnx8dGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBvZSl7Zm9yKGhlPS0xLHVlPW9lLmxlbmd0aC0xO3VlPj0wO3VlLS0paWYob2VbdWVdPT09dGV8fG9lW3VlXS5saXN0ZW5lcj09'@;
put 'PXRlKXtjZT1vZVt1ZV0ubGlzdGVuZXIsaGU9dWU7YnJlYWt9aWYoaGU8MClyZXR1cm4gdGhpczswPT09aGU/b2Uuc2hpZnQoKTpmdW5jdGlvbiBWKHEsZWUpe2Zvcig7ZWUrMTxxLmxlbmd0aDtlZSsrKXFbZWVdPXFbZWUrMV07cS5wb3AoKX0ob2UsaGUpLDE9PT1vZS5sZW5ndGgmJihzZVtl'@;
put 'ZV09b2VbMF0pLHZvaWQgMCE9PXNlLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlZSxjZXx8dGUpfXJldHVybiB0aGlzfSxsZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXt2YXIgdGUsb2Usc2U7aWYodm9pZCAwPT09KG9lPXRo'@;
put 'aXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09b2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1vZVtlZV0mJigwPT0tLXRoaXMu'@;
put 'X2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBvZVtlZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB1ZSxoZT1PYmplY3Qua2V5cyhvZSk7Zm9yKHNlPTA7c2U8aGUubGVuZ3RoOysrc2UpInJlbW92ZUxpc3RlbmVyIiE9PSh1'@;
put 'ZT1oZVtzZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyh1ZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YodGU9b2VbZWVdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGVlLHRlKTtlbHNlIGlmKHZvaWQgMCE9PXRlKWZvcihzZT10ZS5sZW5ndGgtMTtzZT49MDtzZS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZWUsdGVbc2VdKTtyZXR1cm4gdGhpc30sbGUucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlv'@;
put 'bihlZSl7cmV0dXJuIGsodGhpcyxlZSwhMCl9LGxlLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3JldHVybiBrKHRoaXMsZWUsITEpfSxsZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHEsZWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBxLmxpc3RlbmVyQ291bnQ/cS5s'@;
put 'aXN0ZW5lckNvdW50KGVlKTpFLmNhbGwocSxlZSl9LGxlLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PUUsbGUucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9hZSh0aGlzLl9ldmVudHMpOltdfX0sMzY1MDU6KGF0LExlLEYpPT57dmFy'@;
put 'IGFlPUYoODQzKS5CdWZmZXIseD1GKDc1ODI5KTthdC5leHBvcnRzPWZ1bmN0aW9uIG0obGUsTSxPLFIpe2lmKGFlLmlzQnVmZmVyKGxlKXx8KGxlPWFlLmZyb20obGUsImJpbmFyeSIpKSxNJiYoYWUuaXNCdWZmZXIoTSl8fChNPWFlLmZyb20oTSwiYmluYXJ5IikpLDghPT1NLmxlbmd0aCkp'@;
put 'dGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIHo9Ty84LEs9YWUuYWxsb2MoeiksTD1hZS5hbGxvYyhSfHwwKSxrPWFlLmFsbG9jKDApO3o+MHx8Uj4wOyl7dmFyIEU9bmV3IHg7RS51cGRhdGUoayksRS51cGRh'@;
put 'dGUobGUpLE0mJkUudXBkYXRlKE0pLGs9RS5kaWdlc3QoKTt2YXIgaj0wO2lmKHo+MCl7dmFyIFY9Sy5sZW5ndGgtejtqPU1hdGgubWluKHosay5sZW5ndGgpLGsuY29weShLLFYsMCxqKSx6LT1qfWlmKGo8ay5sZW5ndGgmJlI+MCl7dmFyIEI9TC5sZW5ndGgtUixZPU1hdGgubWluKFIsay5s'@;
put 'ZW5ndGgtaik7ay5jb3B5KEwsQixqLGorWSksUi09WX19cmV0dXJuIGsuZmlsbCgwKSx7a2V5OkssaXY6TH19fSw2MDM4MDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDk2NzQ1KS5UcmFuc2Zvcm07ZnVuY3Rpb24gTShPKXt4LmNhbGwodGhpcyks'@;
put 'dGhpcy5fYmxvY2s9YWUuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1GKDY2Njk4KShNLHgpLE0ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxSLHope3Zh'@;
put 'ciBLPW51bGw7dHJ5e3RoaXMudXBkYXRlKE8sUil9Y2F0Y2goTCl7Sz1MfXooSyl9LE0ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgUj1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goeil7Uj16fU8oUil9LE0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlv'@;
put 'bihPLFIpe2lmKGZ1bmN0aW9uIGxlKE8sUil7aWYoIWFlLmlzQnVmZmVyKE8pJiYic3RyaW5nIiE9dHlwZW9mIE8pdGhyb3cgbmV3IFR5cGVFcnJvcihSKyIgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlciIpfShPLCJEYXRhIiksdGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigi'@;
put 'RGlnZXN0IGFscmVhZHkgY2FsbGVkIik7YWUuaXNCdWZmZXIoTyl8fChPPWFlLmZyb20oTyxSKSk7Zm9yKHZhciB6PXRoaXMuX2Jsb2NrLEs9MDt0aGlzLl9ibG9ja09mZnNldCtPLmxlbmd0aC1LPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIEw9dGhpcy5fYmxvY2tPZmZzZXQ7TDx0aGlz'@;
put 'Ll9ibG9ja1NpemU7KXpbTCsrXT1PW0srK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO0s8Ty5sZW5ndGg7KXpbdGhpcy5fYmxvY2tPZmZzZXQrK109T1tLKytdO2Zvcih2YXIgaz0wLEU9OCpPLmxlbmd0aDtFPjA7KytrKXRoaXMuX2xlbmd0aFtrXSs9RSwoRT10'@;
put 'aGlzLl9sZW5ndGhba10vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW2tdLT00Mjk0OTY3Mjk2KkUpO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxNLnByb3RvdHlw'@;
put 'ZS5kaWdlc3Q9ZnVuY3Rpb24oTyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciBSPXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PU8mJihSPVIudG9TdHJpbmcoTykpLHRoaXMuX2Jsb2NrLmZp'@;
put 'bGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIHo9MDt6PDQ7Kyt6KXRoaXMuX2xlbmd0aFt6XT0wO3JldHVybiBSfSxNLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxhdC5leHBvcnRzPU19'@;
put 'LDcxMDc2OihhdCxMZSxGKT0+e3ZhciBhZT1MZTthZS51dGlscz1GKDE5ODc1KSxhZS5jb21tb249Rig5MjA4NSksYWUuc2hhPUYoNTc2NTgpLGFlLnJpcGVtZD1GKDQ4MzQ0KSxhZS5obWFjPUYoNzYxOTIpLGFlLnNoYTE9YWUuc2hhLnNoYTEsYWUuc2hhMjU2PWFlLnNoYS5zaGEyNTYsYWUu'@;
put 'c2hhMjI0PWFlLnNoYS5zaGEyMjQsYWUuc2hhMzg0PWFlLnNoYS5zaGEzODQsYWUuc2hhNTEyPWFlLnNoYS5zaGE1MTIsYWUucmlwZW1kMTYwPWFlLnJpcGVtZC5yaXBlbWQxNjB9LDkyMDg1OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDU3Nzk4KTtmdW5j'@;
put 'dGlvbiBtKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1h'@;
put 'Y1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1MZS5CbG9ja0hhc2g9bSxtLnByb3RvdHlwZS51cGRh'@;
put 'dGU9ZnVuY3Rpb24oTSxPKXtpZihNPWFlLnRvQXJyYXkoTSxPKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQoTSk6TSx0aGlzLnBlbmRpbmdUb3RhbCs9TS5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2YXIgUj0oTT10aGlz'@;
put 'LnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPU0uc2xpY2UoTS5sZW5ndGgtUixNLmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksTT1hZS5qb2luMzIoTSwwLE0ubGVuZ3RoLVIsdGhpcy5lbmRpYW4pO2Zvcih2YXIg'@;
put 'ej0wO3o8TS5sZW5ndGg7eis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoTSx6LHordGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG0ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLHgobnVsbD09PXRoaXMucGVuZGluZyks'@;
put 'dGhpcy5fZGlnZXN0KE0pfSxtLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIE09dGhpcy5wZW5kaW5nVG90YWwsTz10aGlzLl9kZWx0YTgsUj1PLShNK3RoaXMucGFkTGVuZ3RoKSVPLHo9bmV3IEFycmF5KFIrdGhpcy5wYWRMZW5ndGgpO3pbMF09MTI4O2Zvcih2YXIgSz0xO0s8UjtL'@;
put 'KyspeltLXT0wO2lmKE08PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTD04O0w8dGhpcy5wYWRMZW5ndGg7TCsrKXpbSysrXT0wO3pbSysrXT0wLHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT1NPj4+MjQmMjU1LHpbSysrXT1NPj4+MTYmMjU1LHpbSysrXT1NPj4+'@;
put 'OCYyNTUseltLKytdPTI1NSZNfWVsc2UgZm9yKHpbSysrXT0yNTUmTSx6W0srK109TT4+PjgmMjU1LHpbSysrXT1NPj4+MTYmMjU1LHpbSysrXT1NPj4+MjQmMjU1LHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT0wLEw9ODtMPHRoaXMucGFkTGVuZ3RoO0wrKyl6W0srK109MDty'@;
put 'ZXR1cm4gen19LDc2MTkyOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDU3Nzk4KTtmdW5jdGlvbiBtKGxlLE0sTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBtKGxlLE0sTyk7dGhpcy5IYXNoPWxlLHRoaXMuYmxvY2tTaXplPWxlLmJs'@;
put 'b2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1sZS5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KGFlLnRvQXJyYXkoTSxPKSl9YXQuZXhwb3J0cz1tLG0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKE0pe00ubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYo'@;
put 'TT0obmV3IHRoaXMuSGFzaCkudXBkYXRlKE0pLmRpZ2VzdCgpKSx4KE0ubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBPPU0ubGVuZ3RoO088dGhpcy5ibG9ja1NpemU7TysrKU0ucHVzaCgwKTtmb3IoTz0wO088TS5sZW5ndGg7TysrKU1bT11ePTU0O2Zvcih0aGlzLmlubmVyPShu'@;
put 'ZXcgdGhpcy5IYXNoKS51cGRhdGUoTSksTz0wO088TS5sZW5ndGg7TysrKU1bT11ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoTSl9LG0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihNLE8pe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShNLE8pLHRoaXN9LG0ucHJv'@;
put 'dG90eXBlLmRpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QoTSl9fSw0ODM0NDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1hZS5yb3RsMzIs'@;
put 'bGU9YWUuc3VtMzIsTT1hZS5zdW0zMl8zLE89YWUuc3VtMzJfNCxSPXguQmxvY2tIYXNoO2Z1bmN0aW9uIHooKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHo7Ui5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4'@;
put 'LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIEsoWSxYLFUscSl7cmV0dXJuIFk8PTE1P1heVV5xOlk8PTMxP1gmVXx+WCZxOlk8PTQ3PyhYfH5VKV5xOlk8PTYzP1gmcXxVJn5xOlheKFV8fnEpfWZ1bmN0aW9uIGsoWSl7cmV0dXJuIFk8PTE1PzEzNTI4Mjk5MjY6'@;
put 'WTw9MzE/MTU0ODYwMzY4NDpZPD00Nz8xODM2MDcyNjkxOlk8PTYzPzIwNTM5OTQyMTc6MH1hZS5pbmhlcml0cyh6LFIpLExlLnJpcGVtZDE2MD16LHouYmxvY2tTaXplPTUxMix6Lm91dFNpemU9MTYwLHouaG1hY1N0cmVuZ3RoPTE5Mix6LnBhZExlbmd0aD02NCx6LnByb3RvdHlwZS5fdXBk'@;
put 'YXRlPWZ1bmN0aW9uKFgsVSl7Zm9yKHZhciBxPXRoaXMuaFswXSxlZT10aGlzLmhbMV0sdGU9dGhpcy5oWzJdLG9lPXRoaXMuaFszXSxzZT10aGlzLmhbNF0saGU9cSx1ZT1lZSxjZT10ZSxHPW9lLGI9c2UsRD0wO0Q8ODA7RCsrKXt2YXIgSD1sZShtKE8ocSxLKEQsZWUsdGUsb2UpLFhbRVtE'@;
put 'XStVXSwoWT1EKTw9MTU/MDpZPD0zMT8xNTE4NTAwMjQ5Olk8PTQ3PzE4NTk3NzUzOTM6WTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxWW0RdKSxzZSk7cT1zZSxzZT1vZSxvZT1tKHRlLDEwKSx0ZT1lZSxlZT1ILEg9bGUobShPKGhlLEsoNzktRCx1ZSxjZSxHKSxYW2pbRF0rVV0sayhE'@;
put 'KSksQltEXSksYiksaGU9YixiPUcsRz1tKGNlLDEwKSxjZT11ZSx1ZT1IfXZhciBZO0g9TSh0aGlzLmhbMV0sdGUsRyksdGhpcy5oWzFdPU0odGhpcy5oWzJdLG9lLGIpLHRoaXMuaFsyXT1NKHRoaXMuaFszXSxzZSxoZSksdGhpcy5oWzNdPU0odGhpcy5oWzRdLHEsdWUpLHRoaXMuaFs0XT1N'@;
put 'KHRoaXMuaFswXSxlZSxjZSksdGhpcy5oWzBdPUh9LHoucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oWCl7cmV0dXJuImhleCI9PT1YP2FlLnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTphZS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBFPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEw'@;
put 'LDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUs'@;
put 'MTNdLGo9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUs'@;
put 'MTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQs'@;
put 'MTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sQj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEs'@;
put 'OCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDU3NjU4OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0IjtMZS5zaGExPUYoNzUwMTApLExlLnNo'@;
put 'YTIyND1GKDgzNTc4KSxMZS5zaGEyNTY9Rig5Nzg1NyksTGUuc2hhMzg0PUYoNjg3MjMpLExlLnNoYTUxMj1GKDQ1MzA0KX0sNzUwMTA6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTIwODUpLG09Rig3MjIxKSxsZT1hZS5yb3RsMzIsTT1hZS5zdW0zMixP'@;
put 'PWFlLnN1bTMyXzUsUj1tLmZ0XzEsej14LkJsb2NrSGFzaCxLPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBMKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTCkpcmV0dXJuIG5ldyBMO3ouY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMs'@;
put 'NDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1hZS5pbmhlcml0cyhMLHopLGF0LmV4cG9ydHM9TCxMLmJsb2NrU2l6ZT01MTIsTC5vdXRTaXplPTE2MCxMLmhtYWNTdHJlbmd0aD04MCxMLnBhZExlbmd0aD02NCxMLnByb3Rv'@;
put 'dHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUsail7Zm9yKHZhciBWPXRoaXMuVyxCPTA7QjwxNjtCKyspVltCXT1FW2orQl07Zm9yKDtCPFYubGVuZ3RoO0IrKylWW0JdPWxlKFZbQi0zXV5WW0ItOF1eVltCLTE0XV5WW0ItMTZdLDEpO3ZhciBZPXRoaXMuaFswXSxYPXRoaXMuaFsxXSxVPXRoaXMu'@;
put 'aFsyXSxxPXRoaXMuaFszXSxlZT10aGlzLmhbNF07Zm9yKEI9MDtCPFYubGVuZ3RoO0IrKyl7dmFyIHRlPX5+KEIvMjApLG9lPU8obGUoWSw1KSxSKHRlLFgsVSxxKSxlZSxWW0JdLEtbdGVdKTtlZT1xLHE9VSxVPWxlKFgsMzApLFg9WSxZPW9lfXRoaXMuaFswXT1NKHRoaXMuaFswXSxZKSx0'@;
put 'aGlzLmhbMV09TSh0aGlzLmhbMV0sWCksdGhpcy5oWzJdPU0odGhpcy5oWzJdLFUpLHRoaXMuaFszXT1NKHRoaXMuaFszXSxxKSx0aGlzLmhbNF09TSh0aGlzLmhbNF0sZWUpfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEUpe3JldHVybiJoZXgiPT09RT9hZS50b0hleDMyKHRoaXMu'@;
put 'aCwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sODM1Nzg6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTc4NTcpO2Z1bmN0aW9uIG0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG07eC5jYWxsKHRoaXMpLHRoaXMuaD1b'@;
put 'MzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19YWUuaW5oZXJpdHMobSx4KSxhdC5leHBvcnRzPW0sbS5ibG9ja1NpemU9NTEyLG0ub3V0U2l6ZT0yMjQsbS5obWFjU3RyZW5ndGg9MTky'@;
put 'LG0ucGFkTGVuZ3RoPTY0LG0ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oTSl7cmV0dXJuImhleCI9PT1NP2FlLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTc4NTc6KGF0LExlLEYpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTIwODUpLG09Rig3MjIxKSxsZT1GKDU3Nzk4KSxNPWFlLnN1bTMyLE89YWUuc3VtMzJfNCxSPWFlLnN1bTMyXzUsej1tLmNoMzIsSz1tLm1hajMyLEw9bS5zMF8yNTYsaz1tLnMxXzI1NixFPW0uZzBfMjU2LGo9bS5nMV8yNTYsVj14LkJsb2NrSGFz'@;
put 'aCxCPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEw'@;
put 'MywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwx'@;
put 'MTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAz'@;
put 'NTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQs'@;
put 'Mjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIFkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBZKSlyZXR1cm4gbmV3IFk7Vi5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4'@;
put 'MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1CLHRoaXMuVz1uZXcgQXJyYXkoNjQpfWFlLmluaGVyaXRzKFksViksYXQuZXhwb3J0cz1ZLFkuYmxvY2tTaXplPTUxMixZLm91dFNpemU9MjU2LFkuaG1hY1N0cmVuZ3RoPTE5MixZLnBhZExlbmd0aD02NCxZLnByb3RvdHlwZS5f'@;
put 'dXBkYXRlPWZ1bmN0aW9uKFUscSl7Zm9yKHZhciBlZT10aGlzLlcsdGU9MDt0ZTwxNjt0ZSsrKWVlW3RlXT1VW3ErdGVdO2Zvcig7dGU8ZWUubGVuZ3RoO3RlKyspZWVbdGVdPU8oaihlZVt0ZS0yXSksZWVbdGUtN10sRShlZVt0ZS0xNV0pLGVlW3RlLTE2XSk7dmFyIG9lPXRoaXMuaFswXSxz'@;
put 'ZT10aGlzLmhbMV0saGU9dGhpcy5oWzJdLHVlPXRoaXMuaFszXSxjZT10aGlzLmhbNF0sRz10aGlzLmhbNV0sYj10aGlzLmhbNl0sRD10aGlzLmhbN107Zm9yKGxlKHRoaXMuay5sZW5ndGg9PT1lZS5sZW5ndGgpLHRlPTA7dGU8ZWUubGVuZ3RoO3RlKyspe3ZhciBIPVIoRCxrKGNlKSx6KGNl'@;
put 'LEcsYiksdGhpcy5rW3RlXSxlZVt0ZV0pLE49TShMKG9lKSxLKG9lLHNlLGhlKSk7RD1iLGI9RyxHPWNlLGNlPU0odWUsSCksdWU9aGUsaGU9c2Usc2U9b2Usb2U9TShILE4pfXRoaXMuaFswXT1NKHRoaXMuaFswXSxvZSksdGhpcy5oWzFdPU0odGhpcy5oWzFdLHNlKSx0aGlzLmhbMl09TSh0'@;
put 'aGlzLmhbMl0saGUpLHRoaXMuaFszXT1NKHRoaXMuaFszXSx1ZSksdGhpcy5oWzRdPU0odGhpcy5oWzRdLGNlKSx0aGlzLmhbNV09TSh0aGlzLmhbNV0sRyksdGhpcy5oWzZdPU0odGhpcy5oWzZdLGIpLHRoaXMuaFs3XT1NKHRoaXMuaFs3XSxEKX0sWS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j'@;
put 'dGlvbihVKXtyZXR1cm4iaGV4Ij09PVU/YWUudG9IZXgzMih0aGlzLmgsImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDY4NzIzOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDQ1MzA0KTtmdW5jdGlvbiBtKCl7aWYoISh0aGlzIGluc3RhbmNl'@;
put 'b2YgbSkpcmV0dXJuIG5ldyBtO3guY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAz'@;
put 'MDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfWFlLmluaGVyaXRzKG0seCksYXQuZXhwb3J0cz1tLG0uYmxvY2tTaXplPTEwMjQsbS5vdXRTaXplPTM4NCxtLmhtYWNTdHJlbmd0aD0xOTIsbS5wYWRMZW5ndGg9MTI4LG0ucHJvdG90eXBlLl9kaWdlc3Q9'@;
put 'ZnVuY3Rpb24oTSl7cmV0dXJuImhleCI9PT1NP2FlLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw0NTMwNDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1G'@;
put 'KDU3Nzk4KSxsZT1hZS5yb3RyNjRfaGksTT1hZS5yb3RyNjRfbG8sTz1hZS5zaHI2NF9oaSxSPWFlLnNocjY0X2xvLHo9YWUuc3VtNjQsSz1hZS5zdW02NF9oaSxMPWFlLnN1bTY0X2xvLGs9YWUuc3VtNjRfNF9oaSxFPWFlLnN1bTY0XzRfbG8saj1hZS5zdW02NF81X2hpLFY9YWUuc3VtNjRf'@;
put 'NV9sbyxCPXguQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5'@;
put 'Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4'@;
put 'ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1'@;
put 'LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEs'@;
put 'MjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2'@;
put 'NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4'@;
put 'MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMx'@;
put 'ODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4'@;
put 'NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIz'@;
put 'OTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4'@;
put 'Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO0IuY2FsbCh0aGlzKSx0aGlzLmg9'@;
put 'WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwz'@;
put 'MjcwMzMyMDldLHRoaXMuaz1ZLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBVKEgsTixnLEMsUyl7dmFyIHY9SCZnXn5IJlM7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gcShILE4sZyxDLFMsdil7dmFyIHA9TiZDXn5OJnY7cmV0dXJuIHA8MCYmKHArPTQy'@;
put 'OTQ5NjcyOTYpLHB9ZnVuY3Rpb24gZWUoSCxOLGcsQyxTKXt2YXIgdj1IJmdeSCZTXmcmUztyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiB0ZShILE4sZyxDLFMsdil7dmFyIHA9TiZDXk4mdl5DJnY7cmV0dXJuIHA8MCYmKHArPTQyOTQ5NjcyOTYpLHB9ZnVuY3Rpb24g'@;
put 'b2UoSCxOKXt2YXIgdj1sZShILE4sMjgpXmxlKE4sSCwyKV5sZShOLEgsNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gc2UoSCxOKXt2YXIgdj1NKEgsTiwyOCleTShOLEgsMileTShOLEgsNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24g'@;
put 'aGUoSCxOKXt2YXIgdj1sZShILE4sMTQpXmxlKEgsTiwxOClebGUoTixILDkpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHVlKEgsTil7dmFyIHY9TShILE4sMTQpXk0oSCxOLDE4KV5NKE4sSCw5KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlv'@;
put 'biBjZShILE4pe3ZhciB2PWxlKEgsTiwxKV5sZShILE4sOCleTyhILE4sNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gRyhILE4pe3ZhciB2PU0oSCxOLDEpXk0oSCxOLDgpXlIoSCxOLDcpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIGIo'@;
put 'SCxOKXt2YXIgdj1sZShILE4sMTkpXmxlKE4sSCwyOSleTyhILE4sNik7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gRChILE4pe3ZhciB2PU0oSCxOLDE5KV5NKE4sSCwyOSleUihILE4sNik7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9YWUuaW5oZXJpdHMo'@;
put 'WCxCKSxhdC5leHBvcnRzPVgsWC5ibG9ja1NpemU9MTAyNCxYLm91dFNpemU9NTEyLFguaG1hY1N0cmVuZ3RoPTE5MixYLnBhZExlbmd0aD0xMjgsWC5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz10aGlzLlcsUz0wO1M8MzI7UysrKUNbU109TltnK1Nd'@;
put 'O2Zvcig7UzxDLmxlbmd0aDtTKz0yKXt2YXIgdj1iKENbUy00XSxDW1MtM10pLHA9RChDW1MtNF0sQ1tTLTNdKSx3PUNbUy0xNF0sSj1DW1MtMTNdLG5lPWNlKENbUy0zMF0sQ1tTLTI5XSksZGU9RyhDW1MtMzBdLENbUy0yOV0pLGZlPUNbUy0zMl0seGU9Q1tTLTMxXTtDW1NdPWsodixwLHcs'@;
put 'SixuZSxkZSxmZSx4ZSksQ1tTKzFdPUUodixwLHcsSixuZSxkZSxmZSx4ZSl9fSxYLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4sZyl7dGhpcy5fcHJlcGFyZUJsb2NrKE4sZyk7dmFyIEM9dGhpcy5XLFM9dGhpcy5oWzBdLHY9dGhpcy5oWzFdLHA9dGhpcy5oWzJdLHc9dGhpcy5oWzNd'@;
put 'LEo9dGhpcy5oWzRdLG5lPXRoaXMuaFs1XSxkZT10aGlzLmhbNl0sZmU9dGhpcy5oWzddLHhlPXRoaXMuaFs4XSxJZT10aGlzLmhbOV0sRmU9dGhpcy5oWzEwXSxPZT10aGlzLmhbMTFdLGplPXRoaXMuaFsxMl0sV2U9dGhpcy5oWzEzXSxLZT10aGlzLmhbMTRdLFllPXRoaXMuaFsxNV07bSh0'@;
put 'aGlzLmsubGVuZ3RoPT09Qy5sZW5ndGgpO2Zvcih2YXIgUWU9MDtRZTxDLmxlbmd0aDtRZSs9Mil7dmFyIGx0PUtlLFBlPVllLGJlPWhlKHhlLEllKSxBZT11ZSh4ZSxJZSksVGU9VSh4ZSwwLEZlLDAsamUpLHFlPXEoMCxJZSwwLE9lLDAsV2UpLFhlPXRoaXMua1tRZV0sVWU9dGhpcy5rW1Fl'@;
put 'KzFdLGh0PUNbUWVdLE1lPUNbUWUrMV0sRGU9aihsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodCxNZSksemU9VihsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodCxNZSk7bHQ9b2UoUyx2KSxQZT1zZShTLHYpLGJlPWVlKFMsMCxwLDAsSiksQWU9dGUoMCx2LDAsdywwLG5lKTt2YXIgb3Q9Syhs'@;
put 'dCxQZSxiZSxBZSksdXQ9TChsdCxQZSxiZSxBZSk7S2U9amUsWWU9V2UsamU9RmUsV2U9T2UsRmU9eGUsT2U9SWUseGU9SyhkZSxmZSxEZSx6ZSksSWU9TChmZSxmZSxEZSx6ZSksZGU9SixmZT1uZSxKPXAsbmU9dyxwPVMsdz12LFM9SyhEZSx6ZSxvdCx1dCksdj1MKERlLHplLG90LHV0KX16'@;
put 'KHRoaXMuaCwwLFMsdikseih0aGlzLmgsMixwLHcpLHoodGhpcy5oLDQsSixuZSkseih0aGlzLmgsNixkZSxmZSkseih0aGlzLmgsOCx4ZSxJZSkseih0aGlzLmgsMTAsRmUsT2UpLHoodGhpcy5oLDEyLGplLFdlKSx6KHRoaXMuaCwxNCxLZSxZZSl9LFgucHJvdG90eXBlLl9kaWdlc3Q9ZnVu'@;
put 'Y3Rpb24oTil7cmV0dXJuImhleCI9PT1OP2FlLnRvSGV4MzIodGhpcy5oLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MjIxOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeD1GKDE5ODc1KS5yb3RyMzI7ZnVuY3Rpb24gbGUoayxFLGope3JldHVybiBrJkVefmsman1m'@;
put 'dW5jdGlvbiBNKGssRSxqKXtyZXR1cm4gayZFXmsmal5FJmp9ZnVuY3Rpb24gTyhrLEUsail7cmV0dXJuIGteRV5qfUxlLmZ0XzE9ZnVuY3Rpb24gbShrLEUsaixWKXtyZXR1cm4gMD09PWs/bGUoRSxqLFYpOjE9PT1rfHwzPT09az9PKEUsaixWKToyPT09az9NKEUsaixWKTp2b2lkIDB9LExl'@;
put 'LmNoMzI9bGUsTGUubWFqMzI9TSxMZS5wMzI9TyxMZS5zMF8yNTY9ZnVuY3Rpb24gUihrKXtyZXR1cm4geChrLDIpXngoaywxMyleeChrLDIyKX0sTGUuczFfMjU2PWZ1bmN0aW9uIHooayl7cmV0dXJuIHgoayw2KV54KGssMTEpXngoaywyNSl9LExlLmcwXzI1Nj1mdW5jdGlvbiBLKGspe3Jl'@;
put 'dHVybiB4KGssNyleeChrLDE4KV5rPj4+M30sTGUuZzFfMjU2PWZ1bmN0aW9uIEwoayl7cmV0dXJuIHgoaywxNyleeChrLDE5KV5rPj4+MTB9fSwxOTg3NTooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCk7ZnVuY3Rpb24gbShELEgpe3JldHVybiEo'@;
put 'NTUyOTYhPSg2NDUxMiZELmNoYXJDb2RlQXQoSCkpfHxIPDB8fEgrMT49RC5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJkQuY2hhckNvZGVBdChIKzEpKX1mdW5jdGlvbiBPKEQpe3JldHVybihEPj4+MjR8RD4+PjgmNjUyODB8RDw8OCYxNjcxMTY4MHwoMjU1JkQpPDwyNCk+Pj4wfWZ1bmN0aW9u'@;
put 'IHooRCl7cmV0dXJuIDE9PT1ELmxlbmd0aD8iMCIrRDpEfWZ1bmN0aW9uIEsoRCl7cmV0dXJuIDc9PT1ELmxlbmd0aD8iMCIrRDo2PT09RC5sZW5ndGg/IjAwIitEOjU9PT1ELmxlbmd0aD8iMDAwIitEOjQ9PT1ELmxlbmd0aD8iMDAwMCIrRDozPT09RC5sZW5ndGg/IjAwMDAwIitEOjI9PT1E'@;
put 'Lmxlbmd0aD8iMDAwMDAwIitEOjE9PT1ELmxlbmd0aD8iMDAwMDAwMCIrRDpEfUxlLmluaGVyaXRzPXgsTGUudG9BcnJheT1mdW5jdGlvbiBsZShELEgpe2lmKEFycmF5LmlzQXJyYXkoRCkpcmV0dXJuIEQuc2xpY2UoKTtpZighRClyZXR1cm5bXTt2YXIgTj1bXTtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIEQpaWYoSCl7aWYoImhleCI9PT1IKWZvcigoRD1ELnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEQ9IjAiK0QpLEM9MDtDPEQubGVuZ3RoO0MrPTIpTi5wdXNoKHBhcnNlSW50KERbQ10rRFtDKzFdLDE2KSl9ZWxzZSBmb3IodmFyIGc9MCxDPTA7QzxELmxl'@;
put 'bmd0aDtDKyspe3ZhciBTPUQuY2hhckNvZGVBdChDKTtTPDEyOD9OW2crK109UzpTPDIwNDg/KE5bZysrXT1TPj42fDE5MixOW2crK109NjMmU3wxMjgpOm0oRCxDKT8oUz02NTUzNisoKDEwMjMmUyk8PDEwKSsoMTAyMyZELmNoYXJDb2RlQXQoKytDKSksTltnKytdPVM+PjE4fDI0MCxOW2cr'@;
put 'K109Uz4+MTImNjN8MTI4LE5bZysrXT1TPj42JjYzfDEyOCxOW2crK109NjMmU3wxMjgpOihOW2crK109Uz4+MTJ8MjI0LE5bZysrXT1TPj42JjYzfDEyOCxOW2crK109NjMmU3wxMjgpfWVsc2UgZm9yKEM9MDtDPEQubGVuZ3RoO0MrKylOW0NdPTB8RFtDXTtyZXR1cm4gTn0sTGUudG9IZXg9'@;
put 'ZnVuY3Rpb24gTShEKXtmb3IodmFyIEg9IiIsTj0wO048RC5sZW5ndGg7TisrKUgrPXooRFtOXS50b1N0cmluZygxNikpO3JldHVybiBIfSxMZS5odG9ubD1PLExlLnRvSGV4MzI9ZnVuY3Rpb24gUihELEgpe2Zvcih2YXIgTj0iIixnPTA7ZzxELmxlbmd0aDtnKyspe3ZhciBDPURbZ107Imxp'@;
put 'dHRsZSI9PT1IJiYoQz1PKEMpKSxOKz1LKEMudG9TdHJpbmcoMTYpKX1yZXR1cm4gTn0sTGUuemVybzI9eixMZS56ZXJvOD1LLExlLmpvaW4zMj1mdW5jdGlvbiBMKEQsSCxOLGcpe3ZhciBDPU4tSDthZShDJTQ9PTApO2Zvcih2YXIgUz1uZXcgQXJyYXkoQy80KSx2PTAscD1IO3Y8Uy5sZW5n'@;
put 'dGg7disrLHArPTQpU1t2XT0oImJpZyI9PT1nP0RbcF08PDI0fERbcCsxXTw8MTZ8RFtwKzJdPDw4fERbcCszXTpEW3ArM108PDI0fERbcCsyXTw8MTZ8RFtwKzFdPDw4fERbcF0pPj4+MDtyZXR1cm4gU30sTGUuc3BsaXQzMj1mdW5jdGlvbiBrKEQsSCl7Zm9yKHZhciBOPW5ldyBBcnJheSg0'@;
put 'KkQubGVuZ3RoKSxnPTAsQz0wO2c8RC5sZW5ndGg7ZysrLEMrPTQpe3ZhciBTPURbZ107ImJpZyI9PT1IPyhOW0NdPVM+Pj4yNCxOW0MrMV09Uz4+PjE2JjI1NSxOW0MrMl09Uz4+PjgmMjU1LE5bQyszXT0yNTUmUyk6KE5bQyszXT1TPj4+MjQsTltDKzJdPVM+Pj4xNiYyNTUsTltDKzFdPVM+'@;
put 'Pj44JjI1NSxOW0NdPTI1NSZTKX1yZXR1cm4gTn0sTGUucm90cjMyPWZ1bmN0aW9uIEUoRCxIKXtyZXR1cm4gRD4+Pkh8RDw8MzItSH0sTGUucm90bDMyPWZ1bmN0aW9uIGooRCxIKXtyZXR1cm4gRDw8SHxEPj4+MzItSH0sTGUuc3VtMzI9ZnVuY3Rpb24gVihELEgpe3JldHVybiBEK0g+Pj4w'@;
put 'fSxMZS5zdW0zMl8zPWZ1bmN0aW9uIEIoRCxILE4pe3JldHVybiBEK0grTj4+PjB9LExlLnN1bTMyXzQ9ZnVuY3Rpb24gWShELEgsTixnKXtyZXR1cm4gRCtIK04rZz4+PjB9LExlLnN1bTMyXzU9ZnVuY3Rpb24gWChELEgsTixnLEMpe3JldHVybiBEK0grTitnK0M+Pj4wfSxMZS5zdW02ND1m'@;
put 'dW5jdGlvbiBVKEQsSCxOLGcpe3ZhciB2PWcrRFtIKzFdPj4+MDtEW0hdPSh2PGc/MTowKStOK0RbSF0+Pj4wLERbSCsxXT12fSxMZS5zdW02NF9oaT1mdW5jdGlvbiBxKEQsSCxOLGcpe3JldHVybihIK2c+Pj4wPEg/MTowKStEK04+Pj4wfSxMZS5zdW02NF9sbz1mdW5jdGlvbiBlZShELEgs'@;
put 'TixnKXtyZXR1cm4gSCtnPj4+MH0sTGUuc3VtNjRfNF9oaT1mdW5jdGlvbiB0ZShELEgsTixnLEMsUyx2LHApe3ZhciB3PTAsSj1IO3JldHVybiB3Kz0oSj1KK2c+Pj4wKTxIPzE6MCx3Kz0oSj1KK1M+Pj4wKTxTPzE6MCxEK04rQyt2Kyh3Kz0oSj1KK3A+Pj4wKTxwPzE6MCk+Pj4wfSxMZS5z'@;
put 'dW02NF80X2xvPWZ1bmN0aW9uIG9lKEQsSCxOLGcsQyxTLHYscCl7cmV0dXJuIEgrZytTK3A+Pj4wfSxMZS5zdW02NF81X2hpPWZ1bmN0aW9uIHNlKEQsSCxOLGcsQyxTLHYscCx3LEope3ZhciBuZT0wLGRlPUg7cmV0dXJuIG5lKz0oZGU9ZGUrZz4+PjApPEg/MTowLG5lKz0oZGU9ZGUrUz4+'@;
put 'PjApPFM/MTowLG5lKz0oZGU9ZGUrcD4+PjApPHA/MTowLEQrTitDK3YrdysobmUrPShkZT1kZStKPj4+MCk8Sj8xOjApPj4+MH0sTGUuc3VtNjRfNV9sbz1mdW5jdGlvbiBoZShELEgsTixnLEMsUyx2LHAsdyxKKXtyZXR1cm4gSCtnK1MrcCtKPj4+MH0sTGUucm90cjY0X2hpPWZ1bmN0aW9u'@;
put 'IHVlKEQsSCxOKXtyZXR1cm4oSDw8MzItTnxEPj4+Tik+Pj4wfSxMZS5yb3RyNjRfbG89ZnVuY3Rpb24gY2UoRCxILE4pe3JldHVybihEPDwzMi1OfEg+Pj5OKT4+PjB9LExlLnNocjY0X2hpPWZ1bmN0aW9uIEcoRCxILE4pe3JldHVybiBEPj4+Tn0sTGUuc2hyNjRfbG89ZnVuY3Rpb24gYihE'@;
put 'LEgsTil7cmV0dXJuKEQ8PDMyLU58SD4+Pk4pPj4+MH19LDkyNDQ3OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MTA3NikseD1GKDc4MjQ3KSxtPUYoNTc3OTgpO2Z1bmN0aW9uIGxlKE0pe2lmKCEodGhpcyBpbnN0YW5jZW9mIGxlKSlyZXR1cm4gbmV3IGxlKE0pO3RoaXMu'@;
put 'aGFzaD1NLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhTS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1NLm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1u'@;
put 'dWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBPPXgudG9BcnJheShNLmVudHJvcHksTS5lbnRyb3B5RW5jfHwiaGV4IiksUj14LnRvQXJyYXkoTS5ub25jZSxNLm5vbmNlRW5jfHwiaGV4Iiksej14LnRvQXJyYXkoTS5wZXJzLE0ucGVyc0VuY3x8ImhleCIpO20oTy5sZW5ndGg+PXRo'@;
put 'aXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoTyxSLHopfWF0LmV4cG9ydHM9bGUsbGUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKE8sUix6KXt2YXIgSz1PLmNvbmNhdChSKS5jb25j'@;
put 'YXQoeik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgTD0wO0w8dGhpcy5WLmxlbmd0aDtMKyspdGhpcy5LW0xdPTAsdGhpcy5WW0xdPTE7dGhpcy5fdXBkYXRlKEspLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVz'@;
put 'ZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxsZS5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFlLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LGxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe3ZhciBSPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51'@;
put 'cGRhdGUoWzBdKTtPJiYoUj1SLnVwZGF0ZShPKSksdGhpcy5LPVIuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxPJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoTykuZGlnZXN0KCksdGhp'@;
put 'cy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LGxlLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oTyxSLHosSyl7InN0cmluZyIhPXR5cGVvZiBSJiYoSz16LHo9UixSPW51bGwpLE89eC50b0FycmF5KE8sUiksej14LnRvQXJyYXkoeixLKSxtKE8ubGVuZ3RoPj10'@;
put 'aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoTy5jb25jYXQoenx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sbGUucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKE8sUix6LEspe2lm'@;
put 'KHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBSJiYoSz16LHo9UixSPW51bGwpLHomJih6PXgudG9BcnJheSh6LEt8fCJoZXgiKSx0aGlzLl91cGRhdGUoeikpO2Zvcih2YXIgTD1b'@;
put 'XTtMLmxlbmd0aDxPOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLEw9TC5jb25jYXQodGhpcy5WKTt2YXIgaz1MLnNsaWNlKDAsTyk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh6KSx0aGlzLl9yZXNlZWQrKyx4LmVuY29kZShrLFIpfX0sNTU4MzM6KGF0LExlLEYp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7TGUuX2RiY3M9Sztmb3IodmFyIHg9LTEsbT0tMixsZT0tMTAsTT0tMWUzLE89bmV3IEFycmF5KDI1Niksej0wO3o8MjU2O3orKylPW3pdPXg7ZnVuY3Rpb24gSyhqLFYpe2lmKHRoaXMuZW5jb2RpbmdOYW1lPWouZW5jb2Rp'@;
put 'bmdOYW1lLCFqKXRocm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighai50YWJsZSl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3RoaXMuZW5jb2RpbmdOYW1lKyInIGhhcyBubyBkYXRhLiIpO3ZhciBCPWoudGFibGUoKTt0aGlz'@;
put 'LmRlY29kZVRhYmxlcz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1PLnNsaWNlKDApLHRoaXMuZGVjb2RlVGFibGVTZXE9W107Zm9yKHZhciBZPTA7WTxCLmxlbmd0aDtZKyspdGhpcy5fYWRkRGVjb2RlQ2h1bmsoQltZXSk7dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vi5kZWZhdWx0Q2hhclVu'@;
put 'aWNvZGUsdGhpcy5lbmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBYPXt9O2lmKGouZW5jb2RlU2tpcFZhbHMpZm9yKFk9MDtZPGouZW5jb2RlU2tpcFZhbHMubGVuZ3RoO1krKyl7dmFyIFU9ai5lbmNvZGVTa2lwVmFsc1tZXTtpZigibnVtYmVyIj09dHlwZW9mIFUp'@;
put 'WFtVXT0hMDtlbHNlIGZvcih2YXIgcT1VLmZyb207cTw9VS50bztxKyspWFtxXT0hMH1pZih0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwwLFgpLGouZW5jb2RlQWRkKWZvcih2YXIgZWUgaW4gai5lbmNvZGVBZGQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGouZW5jb2Rl'@;
put 'QWRkLGVlKSYmdGhpcy5fc2V0RW5jb2RlQ2hhcihlZS5jaGFyQ29kZUF0KDApLGouZW5jb2RlQWRkW2VlXSk7aWYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVUYWJsZVswXVtWLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXSx0aGlzLmRlZkNoYXJTQj09PXgmJih0aGlz'@;
put 'LmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdWyI/Il0pLHRoaXMuZGVmQ2hhclNCPT09eCYmKHRoaXMuZGVmQ2hhclNCPSI/Ii5jaGFyQ29kZUF0KDApKSwiZnVuY3Rpb24iPT10eXBlb2Ygai5nYjE4MDMwKXt0aGlzLmdiMTgwMzA9ai5nYjE4MDMwKCk7dmFyIHRlPXRoaXMuZGVjb2Rl'@;
put 'VGFibGVzLmxlbmd0aCxvZT10aGlzLmRlY29kZVRhYmxlc1t0ZV09Ty5zbGljZSgwKSxzZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsaGU9dGhpcy5kZWNvZGVUYWJsZXNbc2VdPU8uc2xpY2UoMCk7Zm9yKFk9MTI5O1k8PTI1NDtZKyspe3ZhciBjZT10aGlzLmRlY29kZVRhYmxlc1tNLXRo'@;
put 'aXMuZGVjb2RlVGFibGVzWzBdW1ldXTtmb3IocT00ODtxPD01NztxKyspY2VbcV09TS10ZX1mb3IoWT0xMjk7WTw9MjU0O1krKylvZVtZXT1NLXNlO2ZvcihZPTQ4O1k8PTU3O1krKyloZVtZXT1tfX1mdW5jdGlvbiBMKGosVil7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZv'@;
put 'aWQgMCx0aGlzLmVuY29kZVRhYmxlPVYuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1WLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPVYuZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1WLmdiMTgwMzB9ZnVuY3Rpb24gayhqLFYpe3RoaXMubm9kZUlkeD0w'@;
put 'LHRoaXMucHJldkJ1Zj1hZS5hbGxvYygwKSx0aGlzLmRlY29kZVRhYmxlcz1WLmRlY29kZVRhYmxlcyx0aGlzLmRlY29kZVRhYmxlU2VxPVYuZGVjb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vi5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5nYjE4MDMwPVYuZ2IxODAzMH1m'@;
put 'dW5jdGlvbiBFKGosVil7aWYoalswXT5WKXJldHVybi0xO2Zvcih2YXIgQj0wLFk9ai5sZW5ndGg7QjxZLTE7KXt2YXIgWD1CK01hdGguZmxvb3IoKFktQisxKS8yKTtqW1hdPD1WP0I9WDpZPVh9cmV0dXJuIEJ9Sy5wcm90b3R5cGUuZW5jb2Rlcj1MLEsucHJvdG90eXBlLmRlY29kZXI9ayxL'@;
put 'LnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGU9ZnVuY3Rpb24oail7Zm9yKHZhciBWPVtdO2o+MDtqPj49OClWLnB1c2goMjU1JmopOzA9PVYubGVuZ3RoJiZWLnB1c2goMCk7Zm9yKHZhciBCPXRoaXMuZGVjb2RlVGFibGVzWzBdLFk9Vi5sZW5ndGgtMTtZPjA7WS0tKXt2YXIgWD1CW1Zb'@;
put 'WV1dO2lmKFg9PXgpQltWW1ldXT1NLXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlcy5wdXNoKEI9Ty5zbGljZSgwKSk7ZWxzZXtpZighKFg8PU0pKXRocm93IG5ldyBFcnJvcigiT3ZlcndyaXRlIGJ5dGUgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiLCBhZGRyOiAi'@;
put 'K2oudG9TdHJpbmcoMTYpKTtCPXRoaXMuZGVjb2RlVGFibGVzW00tWF19fXJldHVybiBCfSxLLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bms9ZnVuY3Rpb24oail7dmFyIFY9cGFyc2VJbnQoalswXSwxNiksQj10aGlzLl9nZXREZWNvZGVUcmllTm9kZShWKTtWJj0yNTU7Zm9yKHZhciBZPTE7'@;
put 'WTxqLmxlbmd0aDtZKyspe3ZhciBYPWpbWV07aWYoInN0cmluZyI9PXR5cGVvZiBYKWZvcih2YXIgVT0wO1U8WC5sZW5ndGg7KXt2YXIgcT1YLmNoYXJDb2RlQXQoVSsrKTtpZig1NTI5Njw9cSYmcTw1NjMyMCl7dmFyIGVlPVguY2hhckNvZGVBdChVKyspO2lmKCEoNTYzMjA8PWVlJiZlZTw1'@;
put 'NzM0NCkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIralswXSk7QltWKytdPTY1NTM2KzEwMjQqKHEtNTUyOTYpKyhlZS01NjMyMCl9ZWxzZSBpZig0MDgwPHEmJnE8PTQwOTUpe2Zvcih2YXIgdGU9'@;
put 'NDA5NS1xKzIsb2U9W10sc2U9MDtzZTx0ZTtzZSsrKW9lLnB1c2goWC5jaGFyQ29kZUF0KFUrKykpO0JbVisrXT1sZS10aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlU2VxLnB1c2gob2UpfWVsc2UgQltWKytdPXF9ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIFgp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2YgWCsiJyBnaXZlbiBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitqWzBdKTt2YXIgaGU9QltWLTFdKzE7Zm9yKFU9MDtVPFg7VSsrKUJbVisrXT1oZSsrfX1pZihWPjI1NSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK2pbMF0rIjogdG9vIGxvbmciK1YpfSxLLnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKGope3ZhciBWPWo+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVbVl0mJih0'@;
put 'aGlzLmVuY29kZVRhYmxlW1ZdPU8uc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbVl19LEsucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKGosVil7dmFyIEI9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KGopLFk9MjU1Jmo7QltZXTw9bGU/dGhpcy5lbmNvZGVUYWJsZVNlcVtsZS1C'@;
put 'W1ldXVstMV09VjpCW1ldPT14JiYoQltZXT1WKX0sSy5wcm90b3R5cGUuX3NldEVuY29kZVNlcXVlbmNlPWZ1bmN0aW9uKGosVil7dmFyIFUsQj1qWzBdLFk9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KEIpLFg9MjU1JkI7WVtYXTw9bGU/VT10aGlzLmVuY29kZVRhYmxlU2VxW2xlLVlbWF1dOihV'@;
put 'PXt9LFlbWF0hPT14JiYoVVstMV09WVtYXSksWVtYXT1sZS10aGlzLmVuY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmVuY29kZVRhYmxlU2VxLnB1c2goVSkpO2Zvcih2YXIgcT0xO3E8ai5sZW5ndGgtMTtxKyspe3ZhciBlZT1VW0JdOyJvYmplY3QiPT10eXBlb2YgZWU/VT1lZTooVT1VW0Jd'@;
put 'PXt9LHZvaWQgMCE9PWVlJiYoVVstMV09ZWUpKX1VW0I9altqLmxlbmd0aC0xXV09Vn0sSy5wcm90b3R5cGUuX2ZpbGxFbmNvZGVUYWJsZT1mdW5jdGlvbihqLFYsQil7Zm9yKHZhciBZPXRoaXMuZGVjb2RlVGFibGVzW2pdLFg9MDtYPDI1NjtYKyspe3ZhciBVPVlbWF0scT1WK1g7QltxXXx8'@;
put 'KFU+PTA/dGhpcy5fc2V0RW5jb2RlQ2hhcihVLHEpOlU8PU0/dGhpcy5fZmlsbEVuY29kZVRhYmxlKE0tVSxxPDw4LEIpOlU8PWxlJiZ0aGlzLl9zZXRFbmNvZGVTZXF1ZW5jZSh0aGlzLmRlY29kZVRhYmxlU2VxW2xlLVVdLHEpKX19LEwucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGope2Zv'@;
put 'cih2YXIgVj1hZS5hbGxvYyhqLmxlbmd0aCoodGhpcy5nYjE4MDMwPzQ6MykpLEI9dGhpcy5sZWFkU3Vycm9nYXRlLFk9dGhpcy5zZXFPYmosWD0tMSxVPTAscT0wOzspe2lmKC0xPT09WCl7aWYoVT09ai5sZW5ndGgpYnJlYWs7dmFyIGVlPWouY2hhckNvZGVBdChVKyspfWVsc2UgZWU9WCxY'@;
put 'PS0xO2lmKDU1Mjk2PD1lZSYmZWU8NTczNDQpaWYoZWU8NTYzMjApe2lmKC0xPT09Qil7Qj1lZTtjb250aW51ZX1CPWVlLGVlPXh9ZWxzZS0xIT09Qj8oZWU9NjU1MzYrMTAyNCooQi01NTI5NikrKGVlLTU2MzIwKSxCPS0xKTplZT14O2Vsc2UtMSE9PUImJihYPWVlLGVlPXgsQj0tMSk7dmFy'@;
put 'IHRlPXg7aWYodm9pZCAwIT09WSYmZWUhPXgpe3ZhciBvZT1ZW2VlXTtpZigib2JqZWN0Ij09dHlwZW9mIG9lKXtZPW9lO2NvbnRpbnVlfSJudW1iZXIiPT10eXBlb2Ygb2U/dGU9b2U6bnVsbD09b2UmJnZvaWQgMCE9PShvZT1ZWy0xXSkmJih0ZT1vZSxYPWVlKSxZPXZvaWQgMH1lbHNlIGlm'@;
put 'KGVlPj0wKXt2YXIgc2U9dGhpcy5lbmNvZGVUYWJsZVtlZT4+OF07aWYodm9pZCAwIT09c2UmJih0ZT1zZVsyNTUmZWVdKSx0ZTw9bGUpe1k9dGhpcy5lbmNvZGVUYWJsZVNlcVtsZS10ZV07Y29udGludWV9aWYodGU9PXgmJnRoaXMuZ2IxODAzMCl7dmFyIGhlPUUodGhpcy5nYjE4MDMwLnVD'@;
put 'aGFycyxlZSk7aWYoLTEhPWhlKXt0ZT10aGlzLmdiMTgwMzAuZ2JDaGFyc1toZV0rKGVlLXRoaXMuZ2IxODAzMC51Q2hhcnNbaGVdKSxWW3ErK109MTI5K01hdGguZmxvb3IodGUvMTI2MDApLHRlJT0xMjYwMCxWW3ErK109NDgrTWF0aC5mbG9vcih0ZS8xMjYwKSx0ZSU9MTI2MCxWW3ErK109'@;
put 'MTI5K01hdGguZmxvb3IodGUvMTApLFZbcSsrXT00OCsodGUlPTEwKTtjb250aW51ZX19fXRlPT09eCYmKHRlPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlKSx0ZTwyNTY/VltxKytdPXRlOnRlPDY1NTM2PyhWW3ErK109dGU+PjgsVltxKytdPTI1NSZ0ZSk6KFZbcSsrXT10ZT4+MTYsVltx'@;
put 'KytdPXRlPj44JjI1NSxWW3ErK109MjU1JnRlKX1yZXR1cm4gdGhpcy5zZXFPYmo9WSx0aGlzLmxlYWRTdXJyb2dhdGU9QixWLnNsaWNlKDAscSl9LEwucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0xIT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFy'@;
put 'IGo9YWUuYWxsb2MoMTApLFY9MDtpZih0aGlzLnNlcU9iail7dmFyIEI9dGhpcy5zZXFPYmpbLTFdO3ZvaWQgMCE9PUImJihCPDI1Nj9qW1YrK109QjooaltWKytdPUI+PjgsaltWKytdPTI1NSZCKSksdGhpcy5zZXFPYmo9dm9pZCAwfXJldHVybi0xIT09dGhpcy5sZWFkU3Vycm9nYXRlJiYo'@;
put 'altWKytdPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlLHRoaXMubGVhZFN1cnJvZ2F0ZT0tMSksai5zbGljZSgwLFYpfX0sTC5wcm90b3R5cGUuZmluZElkeD1FLGsucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGope3ZhciBWPWFlLmFsbG9jKDIqai5sZW5ndGgpLEI9dGhpcy5ub2RlSWR4'@;
put 'LFk9dGhpcy5wcmV2QnVmLFg9dGhpcy5wcmV2QnVmLmxlbmd0aCxVPS10aGlzLnByZXZCdWYubGVuZ3RoO1g+MCYmKFk9YWUuY29uY2F0KFtZLGouc2xpY2UoMCwxMCldKSk7Zm9yKHZhciBlZT0wLHRlPTA7ZWU8ai5sZW5ndGg7ZWUrKyl7dmFyIHEsb2U9ZWU+PTA/altlZV06WVtlZStYXTtp'@;
put 'ZighKChxPXRoaXMuZGVjb2RlVGFibGVzW0JdW29lXSk+PTApKWlmKHE9PT14KWVlPVUscT10aGlzLmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO2Vsc2UgaWYocT09PW0pe3ZhciBzZT1VPj0wP2ouc2xpY2UoVSxlZSsxKTpZLnNsaWNlKFUrWCxlZSsxK1gpLGhlPTEyNjAwKihz'@;
put 'ZVswXS0xMjkpKzEyNjAqKHNlWzFdLTQ4KSsxMCooc2VbMl0tMTI5KSsoc2VbM10tNDgpLHVlPUUodGhpcy5nYjE4MDMwLmdiQ2hhcnMsaGUpO3E9dGhpcy5nYjE4MDMwLnVDaGFyc1t1ZV0raGUtdGhpcy5nYjE4MDMwLmdiQ2hhcnNbdWVdfWVsc2V7aWYocTw9TSl7Qj1NLXE7Y29udGludWV9'@;
put 'aWYoIShxPD1sZSkpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrcSsiIGF0ICIrQisiLyIrb2UpO2Zvcih2YXIgY2U9dGhpcy5kZWNvZGVUYWJsZVNlcVtsZS1xXSxHPTA7RzxjZS5sZW5ndGgtMTtHKysp'@;
put 'Vlt0ZSsrXT0yNTUmKHE9Y2VbR10pLFZbdGUrK109cT4+ODtxPWNlW2NlLmxlbmd0aC0xXX1pZihxPjY1NTM1KXtxLT02NTUzNjt2YXIgYj01NTI5NitNYXRoLmZsb29yKHEvMTAyNCk7Vlt0ZSsrXT0yNTUmYixWW3RlKytdPWI+PjgscT01NjMyMCtxJTEwMjR9Vlt0ZSsrXT0yNTUmcSxWW3Rl'@;
put 'KytdPXE+PjgsQj0wLFU9ZWUrMX1yZXR1cm4gdGhpcy5ub2RlSWR4PUIsdGhpcy5wcmV2QnVmPVU+PTA/ai5zbGljZShVKTpZLnNsaWNlKFUrWCksVi5zbGljZSgwLHRlKS50b1N0cmluZygidWNzMiIpfSxrLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIGo9IiI7dGhpcy5wcmV2'@;
put 'QnVmLmxlbmd0aD4wOyl7ais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7dmFyIFY9dGhpcy5wcmV2QnVmLnNsaWNlKDEpO3RoaXMucHJldkJ1Zj1hZS5hbGxvYygwKSx0aGlzLm5vZGVJZHg9MCxWLmxlbmd0aD4wJiYoais9dGhpcy53cml0ZShWKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLGp9'@;
put 'fSwzMjU1NDooYXQsTGUsRik9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz17c2hpZnRqaXM6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDI3MDE0KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fSxlbmNvZGVTa2lwVmFsczpbe2Zyb206NjA3MzYs'@;
put 'dG86NjM4MDh9XX0sY3NzaGlmdGppczoic2hpZnRqaXMiLG1za2Fuamk6InNoaWZ0amlzIixzamlzOiJzaGlmdGppcyIsd2luZG93czMxajoic2hpZnRqaXMiLG1zMzFqOiJzaGlmdGppcyIseHNqaXM6InNoaWZ0amlzIix3aW5kb3dzOTMyOiJzaGlmdGppcyIsbXM5MzI6InNoaWZ0amlzIiw5'@;
put 'MzI6InNoaWZ0amlzIixjcDkzMjoic2hpZnRqaXMiLGV1Y2pwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigzMTUzMil9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn19LGdiMjMxMjoiY3A5MzYiLGdiMjMxMjgwOiJjcDkzNiIsZ2IyMzEyMTk4MDoi'@;
put 'Y3A5MzYiLGNzZ2IyMzEyOiJjcDkzNiIsY3Npc281OGdiMjMxMjgwOiJjcDkzNiIsZXVjY246ImNwOTM2Iix3aW5kb3dzOTM2OiJjcDkzNiIsbXM5MzY6ImNwOTM2Iiw5MzY6ImNwOTM2IixjcDkzNjp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMTMzMzYpfX0sZ2Jr'@;
put 'Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNikuY29uY2F0KEYoNDQzNDYpKX19LHhnYms6ImdiayIsaXNvaXI1ODoiZ2JrIixnYjE4MDMwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNikuY29uY2F0KEYoNDQzNDYpKX0s'@;
put 'Z2IxODAzMDpmdW5jdGlvbigpe3JldHVybiBGKDM2MjU4KX0sZW5jb2RlU2tpcFZhbHM6WzEyOF0sZW5jb2RlQWRkOnsiXHUyMGFjIjo0MTY5OX19LGNoaW5lc2U6ImdiMTgwMzAiLHdpbmRvd3M5NDk6ImNwOTQ5Iixtczk0OToiY3A5NDkiLDk0OToiY3A5NDkiLGNwOTQ5Ont0eXBlOiJfZGJj'@;
put 'cyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRig3NzM0OCl9fSxjc2V1Y2tyOiJjcDk0OSIsY3Nrc2M1NjAxMTk4NzoiY3A5NDkiLGV1Y2tyOiJjcDk0OSIsaXNvaXIxNDk6ImNwOTQ5Iixrb3JlYW46ImNwOTQ5Iixrc2M1NjAxMTk4NzoiY3A5NDkiLGtzYzU2MDExOTg5OiJjcDk0OSIsa3Nj'@;
put 'NTYwMToiY3A5NDkiLHdpbmRvd3M5NTA6ImNwOTUwIixtczk1MDoiY3A5NTAiLDk1MDoiY3A5NTAiLGNwOTUwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRig3NDI4NCl9fSxiaWc1OiJiaWc1aGtzY3MiLGJpZzVoa3Njczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEYoNzQyODQpLmNvbmNhdChGKDYzNDgwKSl9LGVuY29kZVNraXBWYWxzOls0MTY3Nl19LGNuYmlnNToiYmlnNWhrc2NzIixjc2JpZzU6ImJpZzVoa3NjcyIseHhiaWc1OiJiaWc1aGtzY3MifX0sNDQ2NTc6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO2Zvcih2YXIgYWU9'@;
put 'W0YoMjc2NDgpLEYoOTI4NDQpLEYoNDMyODApLEYoNzgzNTQpLEYoNzE3NjQpLEYoNjQ3NzMpLEYoMjA1MDMpLEYoNTU4MzMpLEYoMzI1NTQpXSx4PTA7eDxhZS5sZW5ndGg7eCsrKXt2YXIgbT1hZVt4XTtmb3IodmFyIGxlIGluIG0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKG0sbGUpJiYoTGVbbGVdPW1bbGVdKX19LDI3NjQ4OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgoSyxMKXt0aGlzLmVuYz1LLmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPUsuYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVu'@;
put 'Yz90aGlzLmVuY29kZXI9TzoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPVIsIlx1ezFmNGE5fSIhPT1hZS5mcm9tKCJlZGEwYmRlZGIyYTkiLCJoZXgiKS50b1N0cmluZygpJiYodGhpcy5kZWNvZGVyPXosdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9'@;
put 'TC5kZWZhdWx0Q2hhclVuaWNvZGUpKX1hdC5leHBvcnRzPXt1dGY4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSxjZXN1ODp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sdW5pY29kZTExdXRmODoidXRmOCIsdWNzMjp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0s'@;
put 'dXRmMTZsZToidWNzMiIsYmluYXJ5Ont0eXBlOiJfaW50ZXJuYWwifSxiYXNlNjQ6e3R5cGU6Il9pbnRlcm5hbCJ9LGhleDp7dHlwZToiX2ludGVybmFsIn0sX2ludGVybmFsOnh9LHgucHJvdG90eXBlLmVuY29kZXI9TSx4LnByb3RvdHlwZS5kZWNvZGVyPWxlO3ZhciBtPUYoNzIwMjQpLnM7'@;
put 'ZnVuY3Rpb24gbGUoSyxMKXttLmNhbGwodGhpcyxMLmVuYyl9ZnVuY3Rpb24gTShLLEwpe3RoaXMuZW5jPUwuZW5jfWZ1bmN0aW9uIE8oSyxMKXt0aGlzLnByZXZTdHI9IiJ9ZnVuY3Rpb24gUihLLEwpe31mdW5jdGlvbiB6KEssTCl7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMu'@;
put 'YWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1MLmRlZmF1bHRDaGFyVW5pY29kZX1tLnByb3RvdHlwZS5lbmR8fChtLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9KSxsZS5wcm90b3R5cGU9bS5wcm90b3R5cGUsTS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7cmV0dXJu'@;
put 'IGFlLmZyb20oSyx0aGlzLmVuYyl9LE0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7dmFyIEw9KEs9dGhpcy5wcmV2U3RyK0spLmxlbmd0aC1LLmxlbmd0aCU0O3JldHVybiB0aGlzLnByZXZTdHI9Sy5zbGljZShMKSxLPUsuc2xpY2Uo'@;
put 'MCxMKSxhZS5mcm9tKEssImJhc2U2NCIpfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYWUuZnJvbSh0aGlzLnByZXZTdHIsImJhc2U2NCIpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEw9YWUuYWxsb2MoMypLLmxlbmd0aCksaz0wLEU9MDtFPEsu'@;
put 'bGVuZ3RoO0UrKyl7dmFyIGo9Sy5jaGFyQ29kZUF0KEUpO2o8MTI4P0xbaysrXT1qOmo8MjA0OD8oTFtrKytdPTE5Misoaj4+PjYpLExbaysrXT0xMjgrKDYzJmopKTooTFtrKytdPTIyNCsoaj4+PjEyKSxMW2srK109MTI4KyhqPj4+NiY2MyksTFtrKytdPTEyOCsoNjMmaikpfXJldHVybiBM'@;
put 'LnNsaWNlKDAsayl9LFIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sei5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBMPXRoaXMuYWNjLGs9dGhpcy5jb250Qnl0ZXMsRT10aGlzLmFjY0J5dGVzLGo9IiIsVj0wO1Y8Sy5sZW5ndGg7VisrKXt2YXIgQj1LW1ZdOzEyOCE9'@;
put 'KDE5MiZCKT8oaz4wJiYoais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUsaz0wKSxCPDEyOD9qKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEIpOkI8MjI0PyhMPTMxJkIsaz0xLEU9MSk6QjwyNDA/KEw9MTUmQixrPTIsRT0xKTpqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSk6az4wPyhMPUw8PDZ8'@;
put 'NjMmQixFKyssMD09LS1rJiYoais9Mj09PUUmJkw8MTI4JiZMPjB8fDM9PT1FJiZMPDIwNDg/dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU6U3RyaW5nLmZyb21DaGFyQ29kZShMKSkpOmorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlfXJldHVybiB0aGlzLmFjYz1MLHRoaXMuY29udEJ5dGVzPWss'@;
put 'dGhpcy5hY2NCeXRlcz1FLGp9LHoucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBLPTA7cmV0dXJuIHRoaXMuY29udEJ5dGVzPjAmJihLKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSksS319LDcxNzY0OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVy'@;
put 'O2Z1bmN0aW9uIHgoTSxPKXtpZighTSl0aHJvdyBuZXcgRXJyb3IoIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIU0uY2hhcnN8fDEyOCE9PU0uY2hhcnMubGVuZ3RoJiYyNTYhPT1NLmNoYXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICci'@;
put 'K00udHlwZSsiJyBoYXMgaW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpIik7aWYoMTI4PT09TS5jaGFycy5sZW5ndGgpe2Zvcih2YXIgUj0iIix6PTA7ejwxMjg7eisrKVIrPVN0cmluZy5mcm9tQ2hhckNvZGUoeik7TS5jaGFycz1SK00uY2hhcnN9dGhpcy5k'@;
put 'ZWNvZGVCdWY9YWUuZnJvbShNLmNoYXJzLCJ1Y3MyIik7dmFyIEs9YWUuYWxsb2MoNjU1MzYsTy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKSk7Zm9yKHo9MDt6PE0uY2hhcnMubGVuZ3RoO3orKylLW00uY2hhcnMuY2hhckNvZGVBdCh6KV09ejt0aGlzLmVuY29kZUJ1Zj1L'@;
put 'fWZ1bmN0aW9uIG0oTSxPKXt0aGlzLmVuY29kZUJ1Zj1PLmVuY29kZUJ1Zn1mdW5jdGlvbiBsZShNLE8pe3RoaXMuZGVjb2RlQnVmPU8uZGVjb2RlQnVmfUxlLl9zYmNzPXgseC5wcm90b3R5cGUuZW5jb2Rlcj1tLHgucHJvdG90eXBlLmRlY29kZXI9bGUsbS5wcm90b3R5cGUud3JpdGU9ZnVu'@;
put 'Y3Rpb24oTSl7Zm9yKHZhciBPPWFlLmFsbG9jKE0ubGVuZ3RoKSxSPTA7UjxNLmxlbmd0aDtSKyspT1tSXT10aGlzLmVuY29kZUJ1ZltNLmNoYXJDb2RlQXQoUildO3JldHVybiBPfSxtLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LGxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNKXtm'@;
put 'b3IodmFyIE89dGhpcy5kZWNvZGVCdWYsUj1hZS5hbGxvYygyKk0ubGVuZ3RoKSx6PTAsSz0wLEw9MDtMPE0ubGVuZ3RoO0wrKylSW0s9MipMXT1PW3o9MipNW0xdXSxSW0srMV09T1t6KzFdO3JldHVybiBSLnRvU3RyaW5nKCJ1Y3MyIil9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9'@;
put 'fSwyMDUwMzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXs0Mzc6ImNwNDM3Iiw3Mzc6ImNwNzM3Iiw3NzU6ImNwNzc1Iiw4NTA6ImNwODUwIiw4NTI6ImNwODUyIiw4NTU6ImNwODU1Iiw4NTY6ImNwODU2Iiw4NTc6ImNwODU3Iiw4NTg6ImNwODU4Iiw4NjA6ImNwODYwIiw4NjE6ImNw'@;
put 'ODYxIiw4NjI6ImNwODYyIiw4NjM6ImNwODYzIiw4NjQ6ImNwODY0Iiw4NjU6ImNwODY1Iiw4NjY6ImNwODY2Iiw4Njk6ImNwODY5Iiw4NzQ6IndpbmRvd3M4NzQiLDkyMjoiY3A5MjIiLDEwNDY6ImNwMTA0NiIsMTEyNDoiY3AxMTI0IiwxMTI1OiJjcDExMjUiLDExMjk6ImNwMTEyOSIsMTEz'@;
put 'MzoiY3AxMTMzIiwxMTYxOiJjcDExNjEiLDExNjI6ImNwMTE2MiIsMTE2MzoiY3AxMTYzIiwxMjUwOiJ3aW5kb3dzMTI1MCIsMTI1MToid2luZG93czEyNTEiLDEyNTI6IndpbmRvd3MxMjUyIiwxMjUzOiJ3aW5kb3dzMTI1MyIsMTI1NDoid2luZG93czEyNTQiLDEyNTU6IndpbmRvd3MxMjU1'@;
put 'IiwxMjU2OiJ3aW5kb3dzMTI1NiIsMTI1Nzoid2luZG93czEyNTciLDEyNTg6IndpbmRvd3MxMjU4IiwyODU5MToiaXNvODg1OTEiLDI4NTkyOiJpc284ODU5MiIsMjg1OTM6Imlzbzg4NTkzIiwyODU5NDoiaXNvODg1OTQiLDI4NTk1OiJpc284ODU5NSIsMjg1OTY6Imlzbzg4NTk2IiwyODU5'@;
put 'NzoiaXNvODg1OTciLDI4NTk4OiJpc284ODU5OCIsMjg1OTk6Imlzbzg4NTk5IiwyODYwMDoiaXNvODg1OTEwIiwyODYwMToiaXNvODg1OTExIiwyODYwMzoiaXNvODg1OTEzIiwyODYwNDoiaXNvODg1OTE0IiwyODYwNToiaXNvODg1OTE1IiwyODYwNjoiaXNvODg1OTE2Iix3aW5kb3dzODc0'@;
put 'Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAx'@;
put 'NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBl'@;
put 'MTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVc'@;
put 'dTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBl'@;
put 'NGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx3aW44NzQ6IndpbmRvd3M4NzQiLGNwODc0OiJ3aW5kb3dz'@;
put 'ODc0Iix3aW5kb3dzMTI1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRc'@;
put 'dTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0'@;
put 'XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUw'@;
put 'MTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4'@;
put 'ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sd2luMTI1MDoid2luZG93czEyNTAiLGNwMTI1MDoid2luZG93czEyNTAiLHdpbmRvd3MxMjUxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1'@;
put 'MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVc'@;
put 'dTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1'@;
put 'MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQy'@;
put 'ZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1'@;
put 'MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHdpbjEyNTE6IndpbmRvd3MxMjUxIixjcDEyNTE6IndpbmRvd3MxMjUxIix3aW5kb3dzMTI1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIw'@;
put 'MjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhh'@;
put 'NFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNk'@;
put 'XHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZc'@;
put 'eGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSx3aW4xMjUyOiJ3aW5kb3dzMTI1MiIsY3AxMjUyOiJ3aW5kb3dzMTI1MiIsd2luZG93czEyNTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVm'@;
put 'ZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0'@;
put 'XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUw'@;
put 'Mzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2Ix'@;
put 'XHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUw'@;
put 'M2NkXHUwM2NlXHVmZmZkIn0sd2luMTI1Mzoid2luZG93czEyNTMiLGNwMTI1Mzoid2luZG93czEyNTMiLHdpbmRvd3MxMjU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAz'@;
put 'OVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFh'@;
put 'XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhk'@;
put 'M1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4'@;
put 'ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LHdpbjEyNTQ6IndpbmRvd3MxMjU0IixjcDEyNTQ6IndpbmRvd3MxMjU0Iix3aW5kb3dzMTI1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZm'@;
put 'ZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhh'@;
put 'OFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHUwNWJhXHUwNWJi'@;
put 'XHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUw'@;
put 'NWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sd2luMTI1NToid2luZG93'@;
put 'czEyNTUiLGNwMTI1NToid2luZG93czEyNTUiLHdpbmRvd3MxMjU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1'@;
put 'MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFc'@;
put 'eGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2'@;
put 'MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUw'@;
put 'NjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIifSx3aW4xMjU2OiJ3aW5kb3dzMTI1NiIsY3AxMjU2OiJ3aW5kb3dzMTI1NiIsd2luZG93czEyNTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUy'@;
put 'MGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZm'@;
put 'ZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEy'@;
put 'ZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1'@;
put 'MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUw'@;
put 'MTdlXHUwMmQ5In0sd2luMTI1Nzoid2luZG93czEyNTciLGNwMTI1Nzoid2luZG93czEyNTciLHdpbmRvd3MxMjU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1'@;
put 'Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4'@;
put 'YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhk'@;
put 'M1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4'@;
put 'XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSx3aW4xMjU4OiJ3aW5kb3dzMTI1OCIsY3AxMjU4OiJ3aW5kb3dzMTI1OCIsaXNvODg1OTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc'@;
put 'eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4'@;
put 'YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhl'@;
put 'MFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NTkxOiJpc284ODU5MSIsaXNvODg1OTI6e3R5cGU6Il9z'@;
put 'YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMmQ4XHUwMTQxXHhh'@;
put 'NFx1MDEzZFx1MDE1YVx4YTdceGE4XHUwMTYwXHUwMTVlXHUwMTY0XHUwMTc5XHhhZFx1MDE3ZFx1MDE3Ylx4YjBcdTAxMDVcdTAyZGJcdTAxNDJceGI0XHUwMTNlXHUwMTViXHUwMmM3XHhiOFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE3YVx1MDJkZFx1MDE3ZVx1MDE3Y1x1MDE1NFx4YzFceGMy'@;
put 'XHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEw'@;
put 'M1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSxjcDI4NTkyOiJpc284ODU5MiIs'@;
put 'aXNvODg1OTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUw'@;
put 'MTI2XHUwMmQ4XHhhM1x4YTRcdWZmZmRcdTAxMjRceGE3XHhhOFx1MDEzMFx1MDE1ZVx1MDExZVx1MDEzNFx4YWRcdWZmZmRcdTAxN2JceGIwXHUwMTI3XHhiMlx4YjNceGI0XHhiNVx1MDEyNVx4YjdceGI4XHUwMTMxXHUwMTVmXHUwMTFmXHUwMTM1XHhiZFx1ZmZmZFx1MDE3Y1x4YzBceGMx'@;
put 'XHhjMlx1ZmZmZFx4YzRcdTAxMGFcdTAxMDhceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdWZmZmRceGQxXHhkMlx4ZDNceGQ0XHUwMTIwXHhkNlx4ZDdcdTAxMWNceGQ5XHhkYVx4ZGJceGRjXHUwMTZjXHUwMTVjXHhkZlx4ZTBceGUxXHhlMlx1ZmZmZFx4ZTRcdTAxMGJc'@;
put 'dTAxMDlceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdWZmZmRceGYxXHhmMlx4ZjNceGY0XHUwMTIxXHhmNlx4ZjdcdTAxMWRceGY5XHhmYVx4ZmJceGZjXHUwMTZkXHUwMTVkXHUwMmQ5In0sY3AyODU5MzoiaXNvODg1OTMiLGlzbzg4NTk0Ont0eXBlOiJfc2JjcyIsY2hh'@;
put 'cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEzOFx1MDE1Nlx4YTRcdTAxMjhc'@;
put 'dTAxM2JceGE3XHhhOFx1MDE2MFx1MDExMlx1MDEyMlx1MDE2Nlx4YWRcdTAxN2RceGFmXHhiMFx1MDEwNVx1MDJkYlx1MDE1N1x4YjRcdTAxMjlcdTAxM2NcdTAyYzdceGI4XHUwMTYxXHUwMTEzXHUwMTIzXHUwMTY3XHUwMTRhXHUwMTdlXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4'@;
put 'YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx1MDEyYVx1MDExMFx1MDE0NVx1MDE0Y1x1MDEzNlx4ZDRceGQ1XHhkNlx4ZDdceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHUwMTY4XHUwMTZhXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEy'@;
put 'Zlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVcdTAxMmJcdTAxMTFcdTAxNDZcdTAxNGRcdTAxMzdceGY0XHhmNVx4ZjZceGY3XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x1MDE2OVx1MDE2Ylx1MDJkOSJ9LGNwMjg1OTQ6Imlzbzg4NTk0Iixpc284ODU5NTp7dHlwZToiX3NiY3Mi'@;
put 'LGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRc'@;
put 'dTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIw'@;
put 'XHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUw'@;
put 'NDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDUzXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3'@;
put 'XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGNwMjg1OTU6Imlzbzg4NTk1Iixpc284ODU5Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5'@;
put 'MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdWZmZmRcdWZmZmRceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjBjXHhhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxZlx1ZmZmZFx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYy'@;
put 'ZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1'@;
put 'MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg1OTY6Imlzbzg4NTk2Iixpc284ODU5'@;
put 'Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMThcdTIw'@;
put 'MTlceGEzXHUyMGFjXHUyMGFmXHhhNlx4YTdceGE4XHhhOVx1MDM3YVx4YWJceGFjXHhhZFx1ZmZmZFx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRcdTAzODVcdTAzODZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJc'@;
put 'dTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAz'@;
put 'YWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlc'@;
put 'dTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSxjcDI4NTk3OiJpc284ODU5NyIsaXNvODg1OTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4'@;
put 'OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJc'@;
put 'eGJjXHhiZFx4YmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMTdcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNc'@;
put 'dTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSxjcDI4NTk4OiJpc284ODU5OCIsaXNvODg1OTk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4'@;
put 'OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhi'@;
put 'M1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4'@;
put 'ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSxjcDI4NTk5OiJp'@;
put 'c284ODU5OSIsaXNvODg1OTEwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVc'@;
put 'eDlmXHhhMFx1MDEwNFx1MDExMlx1MDEyMlx1MDEyYVx1MDEyOFx1MDEzNlx4YTdcdTAxM2JcdTAxMTBcdTAxNjBcdTAxNjZcdTAxN2RceGFkXHUwMTZhXHUwMTRhXHhiMFx1MDEwNVx1MDExM1x1MDEyM1x1MDEyYlx1MDEyOVx1MDEzN1x4YjdcdTAxM2NcdTAxMTFcdTAxNjFcdTAxNjdcdTAx'@;
put 'N2VcdTIwMTVcdTAxNmJcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHhjZlx4ZDBcdTAxNDVcdTAxNGNceGQzXHhkNFx4ZDVceGQ2XHUwMTY4XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x4ZGRceGRlXHhk'@;
put 'Zlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVceGVmXHhmMFx1MDE0Nlx1MDE0ZFx4ZjNceGY0XHhmNVx4ZjZcdTAxNjlceGY4XHUwMTczXHhmYVx4ZmJceGZjXHhmZFx4ZmVcdTAxMzgifSxjcDI4NjAwOiJpc284'@;
put 'ODU5MTAiLGlzbzg4NTkxMTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5'@;
put 'Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBl'@;
put 'MWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZc'@;
put 'dTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBl'@;
put 'NTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NjAxOiJpc284ODU5MTEiLGlzbzg4NTkxMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4'@;
put 'N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMWRceGEyXHhhM1x4YTRcdTIwMWVceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4'@;
put 'YzZceGIwXHhiMVx4YjJceGIzXHUyMDFjXHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2'@;
put 'MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1'@;
put 'MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUyMDE5In0sY3AyODYwMzoiaXNvODg1OTEzIixpc284ODU5MTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRc'@;
put 'eDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUxZTAyXHUxZTAzXHhhM1x1MDEwYVx1MDEwYlx1MWUwYVx4YTdcdTFlODBceGE5XHUxZTgy'@;
put 'XHUxZTBiXHUxZWYyXHhhZFx4YWVcdTAxNzhcdTFlMWVcdTFlMWZcdTAxMjBcdTAxMjFcdTFlNDBcdTFlNDFceGI2XHUxZTU2XHUxZTgxXHUxZTU3XHUxZTgzXHUxZTYwXHUxZWYzXHUxZTg0XHUxZTg1XHUxZTYxXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2Fc'@;
put 'eGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE3NFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx1MWU2YVx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3Nlx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTc1XHhmMVx4'@;
put 'ZjJceGYzXHhmNFx4ZjVceGY2XHUxZTZiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTc3XHhmZiJ9LGNwMjg2MDQ6Imlzbzg4NTkxNCIsaXNvODg1OTE1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNc'@;
put 'eDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVcdTAxNjBceGE3XHUwMTYxXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAx'@;
put 'N2RceGI1XHhiNlx4YjdcdTAxN2VceGI5XHhiYVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhk'@;
put 'Ylx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg2MDU6Imlzbzg4NTkx'@;
put 'NSIsaXNvODg1OTE2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhh'@;
put 'MFx1MDEwNFx1MDEwNVx1MDE0MVx1MjBhY1x1MjAxZVx1MDE2MFx4YTdcdTAxNjFceGE5XHUwMjE4XHhhYlx1MDE3OVx4YWRcdTAxN2FcdTAxN2JceGIwXHhiMVx1MDEwY1x1MDE0Mlx1MDE3ZFx1MjAxZFx4YjZceGI3XHUwMTdlXHUwMTBkXHUwMjE5XHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx1'@;
put 'MDE3Y1x4YzBceGMxXHhjMlx1MDEwMlx4YzRcdTAxMDZceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTEwXHUwMTQzXHhkMlx4ZDNceGQ0XHUwMTUwXHhkNlx1MDE1YVx1MDE3MFx4ZDlceGRhXHhkYlx4ZGNcdTAxMThcdTAyMWFceGRmXHhlMFx4ZTFceGUyXHUw'@;
put 'MTAzXHhlNFx1MDEwN1x4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMTFcdTAxNDRceGYyXHhmM1x4ZjRcdTAxNTFceGY2XHUwMTViXHUwMTcxXHhmOVx4ZmFceGZiXHhmY1x1MDExOVx1MDIxYlx4ZmYifSxjcDI4NjA2OiJpc284ODU5MTYiLGNwNDM3Ont0eXBl'@;
put 'OiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFc'@;
put 'eGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1'@;
put 'MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5'@;
put 'MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1'@;
put 'MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNDM3OiJjcDQzNyIsY3NpYm00Mzc6ImNwNDM3IixjcDczNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVc'@;
put 'dTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAz'@;
put 'YzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBc'@;
put 'dTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAz'@;
put 'YzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhi'@;
put 'Mlx1MjVhMFx4YTAifSxpYm03Mzc6ImNwNzM3Iixjc2libTczNzoiY3A3MzciLGNwNzc1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDEwNlx4ZmNceGU5XHUwMTAxXHhlNFx1MDEyM1x4ZTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMmJcdTAxNzlceGM0XHhjNVx4YzlceGU2'@;
put 'XHhjNlx1MDE0ZFx4ZjZcdTAxMjJceGEyXHUwMTVhXHUwMTViXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHhhNFx1MDEwMFx1MDEyYVx4ZjNcdTAxN2JcdTAxN2NcdTAxN2FcdTIwMWRceGE2XHhhOVx4YWVceGFjXHhiZFx4YmNcdTAxNDFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUw'@;
put 'Mlx1MjUyNFx1MDEwNFx1MDEwY1x1MDExOFx1MDExNlx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDEyZVx1MDE2MFx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDE3Mlx1MDE2YVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1'@;
put 'MDE3ZFx1MDEwNVx1MDEwZFx1MDExOVx1MDExN1x1MDEyZlx1MDE2MVx1MDE3M1x1MDE2Ylx1MDE3ZVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx4ZDNceGRmXHUwMTRjXHUwMTQzXHhmNVx4ZDVceGI1XHUwMTQ0XHUwMTM2XHUwMTM3XHUwMTNiXHUwMTNjXHUw'@;
put 'MTQ2XHUwMTEyXHUwMTQ1XHUyMDE5XHhhZFx4YjFcdTIwMWNceGJlXHhiNlx4YTdceGY3XHUyMDFlXHhiMFx1MjIxOVx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtNzc1OiJjcDc3NSIsY3NpYm03NzU6ImNwNzc1IixjcDg1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4'@;
put 'ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNc'@;
put 'eGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5'@;
put 'XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZc'@;
put 'eGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTA6ImNwODUwIixjc2libTg1MDoiY3A4NTAiLGNwODUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3'@;
put 'XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2Rc'@;
put 'dTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1'@;
put 'MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhk'@;
put 'Zlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCJ9LGlibTg1'@;
put 'MjoiY3A4NTIiLGNzaWJtODUyOiJjcDg1MiIsY3A4NTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDUyXHUwNDAyXHUwNDUzXHUwNDAzXHUwNDUxXHUwNDAxXHUwNDU0XHUwNDA0XHUwNDU1XHUwNDA1XHUwNDU2XHUwNDA2XHUwNDU3XHUwNDA3XHUwNDU4XHUwNDA4XHUwNDU5XHUwNDA5XHUw'@;
put 'NDVhXHUwNDBhXHUwNDViXHUwNDBiXHUwNDVjXHUwNDBjXHUwNDVlXHUwNDBlXHUwNDVmXHUwNDBmXHUwNDRlXHUwNDJlXHUwNDRhXHUwNDJhXHUwNDMwXHUwNDEwXHUwNDMxXHUwNDExXHUwNDQ2XHUwNDI2XHUwNDM0XHUwNDE0XHUwNDM1XHUwNDE1XHUwNDQ0XHUwNDI0XHUwNDMzXHUwNDEz'@;
put 'XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTA0MzlcdTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTA0M2FcdTA0MWFcdTI1NWFcdTI1NTRc'@;
put 'dTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwNDNiXHUwNDFiXHUwNDNjXHUwNDFjXHUwNDNkXHUwNDFkXHUwNDNlXHUwNDFlXHUwNDNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwNDFmXHUwNDRmXHUyNTgwXHUwNDJmXHUwNDQwXHUwNDIwXHUwNDQxXHUwNDIxXHUwNDQy'@;
put 'XHUwNDIyXHUwNDQzXHUwNDIzXHUwNDM2XHUwNDE2XHUwNDMyXHUwNDEyXHUwNDRjXHUwNDJjXHUyMTE2XHhhZFx1MDQ0Ylx1MDQyYlx1MDQzN1x1MDQxN1x1MDQ0OFx1MDQyOFx1MDQ0ZFx1MDQyZFx1MDQ0OVx1MDQyOVx1MDQ0N1x1MDQyN1x4YTdcdTI1YTBceGEwIn0saWJtODU1OiJjcDg1'@;
put 'NSIsY3NpYm04NTU6ImNwODU1IixjcDg1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1'@;
put 'ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRceGEzXHVmZmZkXHhkN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWVceGFjXHhiZFx4YmNcdWZmZmRceGFiXHhiYlx1MjU5MVx1MjU5'@;
put 'Mlx1MjU5M1x1MjUwMlx1MjUyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1ZmZmZFx1ZmZmZFx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1'@;
put 'MjU2Y1x4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHVmZmZkXHUyNTgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhiNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTY6ImNwODU2Iixjc2libTg1NjoiY3A4NTYiLGNwODU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZj'@;
put 'XHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZc'@;
put 'eGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVh'@;
put 'XHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhk'@;
put 'OVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NzoiY3A4NTciLGNzaWJtODU3OiJjcDg1NyIsY3A4NTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4'@;
put 'ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNc'@;
put 'eGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1'@;
put 'MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MjBhY1x4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRc'@;
put 'eGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU4OiJjcDg1OCIsY3NpYm04NTg6ImNwODU4IixjcDg2MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlM1x4ZTBceGMxXHhlN1x4ZWFceGNh'@;
put 'XHhlOFx4Y2RceGQ0XHhlY1x4YzNceGMyXHhjOVx4YzBceGM4XHhmNFx4ZjVceGYyXHhkYVx4ZjlceGNjXHhkNVx4ZGNceGEyXHhhM1x4ZDlcdTIwYTdceGQzXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhkMlx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5'@;
put 'Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1'@;
put 'MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUw'@;
put 'Mzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYwOiJjcDg2MCIsY3NpYm04NjA6ImNwODYwIixjcDg2MTp7'@;
put 'dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNc'@;
put 'eGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1'@;
put 'MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNc'@;
put 'dTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIy'@;
put 'MWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MToiY3A4NjEiLGNzaWJtODYxOiJjcDg2MSIsY3A4NjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUw'@;
put 'NWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4'@;
put 'YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUy'@;
put 'NTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4'@;
put 'YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjI6ImNwODYyIixjc2libTg2'@;
put 'MjoiY3A4NjIiLGNwODYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGMyXHhlMFx4YjZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTIwMTdceGMwXHhhN1x4YzlceGM4XHhjYVx4ZjRceGNiXHhjZlx4ZmJceGY5XHhhNFx4ZDRceGRjXHhhMlx4YTNceGQ5XHhkYlx1'@;
put 'MDE5Mlx4YTZceGI0XHhmM1x4ZmFceGE4XHhiOFx4YjNceGFmXHhjZVx1MjMxMFx4YWNceGJkXHhiY1x4YmVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUx'@;
put 'MFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1'@;
put 'MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhc'@;
put 'eGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYzOiJjcDg2MyIsY3NpYm04NjM6ImNwODYzIixjcDg2NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4'@;
put 'MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyRcdTA2NmEmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhiMFx4Yjdc'@;
put 'dTIyMTlcdTIyMWFcdTI1OTJcdTI1MDBcdTI1MDJcdTI1M2NcdTI1MjRcdTI1MmNcdTI1MWNcdTI1MzRcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdTAzYjJcdTIyMWVcdTAzYzZceGIxXHhiZFx4YmNcdTIyNDhceGFiXHhiYlx1ZmVmN1x1ZmVmOFx1ZmZmZFx1ZmZmZFx1ZmVmYlx1ZmVmY1x1'@;
put 'ZmZmZFx4YTBceGFkXHVmZTgyXHhhM1x4YTRcdWZlODRcdWZmZmRcdWZmZmRcdWZlOGVcdWZlOGZcdWZlOTVcdWZlOTlcdTA2MGNcdWZlOWRcdWZlYTFcdWZlYTVcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlZDFcdTA2MWJc'@;
put 'dWZlYjFcdWZlYjVcdWZlYjlcdTA2MWZceGEyXHVmZTgwXHVmZTgxXHVmZTgzXHVmZTg1XHVmZWNhXHVmZThiXHVmZThkXHVmZTkxXHVmZTkzXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHVmZWE3XHVmZWE5XHVmZWFiXHVmZWFkXHVmZWFmXHVmZWIzXHVmZWI3XHVmZWJiXHVmZWJmXHVmZWMx'@;
put 'XHVmZWM1XHVmZWNiXHVmZWNmXHhhNlx4YWNceGY3XHhkN1x1ZmVjOVx1MDY0MFx1ZmVkM1x1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZmVlM1x1ZmVlN1x1ZmVlYlx1ZmVlZFx1ZmVlZlx1ZmVmM1x1ZmViZFx1ZmVjY1x1ZmVjZVx1ZmVjZFx1ZmVlMVx1ZmU3ZFx1MDY1MVx1ZmVlNVx1ZmVlOVx1ZmVl'@;
put 'Y1x1ZmVmMFx1ZmVmMlx1ZmVkMFx1ZmVkNVx1ZmVmNVx1ZmVmNlx1ZmVkZFx1ZmVkOVx1ZmVmMVx1MjVhMFx1ZmZmZCJ9LGlibTg2NDoiY3A4NjQiLGNzaWJtODY0OiJjcDg2NCIsY3A4NjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVh'@;
put 'XHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUy'@;
put 'NTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2'@;
put 'XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRc'@;
put 'dTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjU6ImNwODY1Iixjc2libTg2NToiY3A4NjUi'@;
put 'LGNwODY2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQy'@;
put 'Nlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1'@;
put 'MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1'@;
put 'MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1'@;
put 'MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm04NjY6ImNwODY2Iixjc2libTg2NjoiY3A4NjYiLGNw'@;
put 'ODY5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM4Nlx1ZmZmZFx4YjdceGFjXHhhNlx1MjAxOFx1MjAxOVx1MDM4OFx1MjAxNVx1MDM4OVx1MDM4YVx1MDNhYVx1MDM4Y1x1ZmZmZFx1ZmZmZFx1MDM4ZVx1MDNhYlx4YTlcdTAz'@;
put 'OGZceGIyXHhiM1x1MDNhY1x4YTNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzY2RcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdceGJkXHUwMzk4XHUwMzk5XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAzOWFc'@;
put 'dTAzOWJcdTAzOWNcdTAzOWRcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAzOWVcdTAzOWZcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAzYTBcdTAzYTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAzYTNcdTAzYTRcdTAz'@;
put 'YTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAzYjRcdTAzYjVcdTI1ODBcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNc'@;
put 'dTAzYzJcdTAzYzRcdTAzODRceGFkXHhiMVx1MDNjNVx1MDNjNlx1MDNjN1x4YTdcdTAzYzhcdTAzODVceGIwXHhhOFx1MDNjOVx1MDNjYlx1MDNiMFx1MDNjZVx1MjVhMFx4YTAifSxpYm04Njk6ImNwODY5Iixjc2libTg2OToiY3A4NjkiLGNwOTIyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4'@;
put 'ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhh'@;
put 'OVx4YWFceGFiXHhhY1x4YWRceGFlXHUyMDNlXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNjBceGQx'@;
put 'XHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTdkXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNjFceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4Zjlc'@;
put 'eGZhXHhmYlx4ZmNceGZkXHUwMTdlXHhmZiJ9LGlibTkyMjoiY3A5MjIiLGNzaWJtOTIyOiJjcDkyMiIsY3AxMDQ2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmU4OFx4ZDdceGY3XHVmOGY2XHVmOGY1XHVmOGY0XHVmOGY3XHVmZTcxXHg4OFx1MjVhMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUw'@;
put 'Y1x1MjUxNFx1MjUxOFx1ZmU3OVx1ZmU3Ylx1ZmU3ZFx1ZmU3Zlx1ZmU3N1x1ZmU4YVx1ZmVmMFx1ZmVmM1x1ZmVmMlx1ZmVjZVx1ZmVjZlx1ZmVkMFx1ZmVmNlx1ZmVmOFx1ZmVmYVx1ZmVmY1x4YTBcdWY4ZmFcdWY4ZjlcdWY4ZjhceGE0XHVmOGZiXHVmZThiXHVmZTkxXHVmZTk3XHVmZTli'@;
put 'XHVmZTlmXHVmZWEzXHUwNjBjXHhhZFx1ZmVhN1x1ZmViM1x1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmViN1x1MDYxYlx1ZmViYlx1ZmViZlx1ZmVjYVx1MDYxZlx1ZmVjYlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYy'@;
put 'NVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1ZmVjN1x1MDYzOVx1MDYzYVx1ZmVjY1x1ZmU4Mlx1ZmU4NFx1ZmU4ZVx1ZmVkM1x1MDY0MFx1'@;
put 'MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZjhmY1x1ZmVmNVx1ZmVmN1x1ZmVmOVx1ZmVmYlx1ZmVlM1x1ZmVl'@;
put 'N1x1ZmVlY1x1ZmVlOVx1ZmZmZCJ9LGlibTEwNDY6ImNwMTA0NiIsY3NpYm0xMDQ2OiJjcDEwNDYiLGNwMTEyNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5'@;
put 'M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0OTBcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEz'@;
put 'XHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUw'@;
put 'NDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRh'@;
put 'XHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkxXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGlibTExMjQ6ImNwMTEyNCIsY3NpYm0xMTI0OiJjcDExMjQiLGNw'@;
put 'MTEyNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZc'@;
put 'dTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1'@;
put 'OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc'@;
put 'dTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0'@;
put 'NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdcdTA0NTdceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm0xMTI1OiJjcDExMjUiLGNzaWJtMTEyNToiY3AxMTI1'@;
put 'IixjcDExMjk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhh'@;
put 'MVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4'@;
put 'XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRc'@;
put 'eGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTEyOToiY3AxMTI5Iixjc2libTExMjk6ImNwMTEyOSIsY3AxMTMzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNc'@;
put 'eDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGVhYVx1MGU4YVx1MGU4ZFx1'@;
put 'MGU5NFx1MGU5NVx1MGU5Nlx1MGU5N1x1MGU5OVx1MGU5YVx1MGU5Ylx1MGU5Y1x1MGU5ZFx1MGU5ZVx1MGU5Zlx1MGVhMVx1MGVhMlx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYlx1MGVhZFx1MGVhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVhZlx1MGViMFx1MGViMlx1MGViM1x1MGViNFx1MGVi'@;
put 'NVx1MGViNlx1MGViN1x1MGViOFx1MGViOVx1MGViY1x1MGViMVx1MGViYlx1MGViZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVjMFx1MGVjMVx1MGVjMlx1MGVjM1x1MGVjNFx1MGVjOFx1MGVjOVx1MGVjYVx1MGVjYlx1MGVjY1x1MGVjZFx1MGVjNlx1ZmZmZFx1MGVkY1x1MGVkZFx1MjBhZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVkMFx1MGVkMVx1MGVkMlx1MGVkM1x1MGVkNFx1MGVkNVx1MGVkNlx1MGVkN1x1MGVkOFx1MGVkOVx1ZmZmZFx1ZmZm'@;
put 'ZFx4YTJceGFjXHhhNlx1ZmZmZCJ9LGlibTExMzM6ImNwMTEzMyIsY3NpYm0xMTMzOiJjcDExMzMiLGNwMTE2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlNDhcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBl'@;
put 'MDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNc'@;
put 'dTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdTBlNDlcdTBlNGFcdTBlNGJcdTIwYWNcdTBl'@;
put 'M2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFc'@;
put 'dTBlNWJceGEyXHhhY1x4YTZceGEwIn0saWJtMTE2MToiY3AxMTYxIixjc2libTExNjE6ImNwMTE2MSIsY3AxMTYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x4ODFceDgyXHg4M1x4ODRcdTIwMjZceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx1MjAx'@;
put 'OFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1'@;
put 'MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUy'@;
put 'Ylx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1'@;
put 'MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlibTExNjI6ImNwMTE2'@;
put 'MiIsY3NpYm0xMTYyOiJjcDExNjIiLGNwMTE2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5'@;
put 'Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAx'@;
put 'MDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThc'@;
put 'eGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExNjM6ImNwMTE2MyIsY3NpYm0xMTYzOiJjcDExNjMiLG1hY2Nyb2F0aWFuOnt0eXBlOiJfc2Jj'@;
put 'cyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAy'@;
put 'Mlx4YjZceGRmXHhhZVx1MDE2MFx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTdkXHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTIyMDZceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwMTYxXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxN2VceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4'@;
put 'XHUwMTA2XHhhYlx1MDEwY1x1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTAxMTBcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHVmZmZkXHhhOVx1MjA0NFx4YTRcdTIwMzlcdTIwM2FceGM2XHhiYlx1MjAxM1x4YjdcdTIwMWFcdTIwMWVcdTIwMzBc'@;
put 'eGMyXHUwMTA3XHhjMVx1MDEwZFx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdTAxMTFceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDNjMFx4Y2JcdTAyZGFceGI4XHhjYVx4ZTZcdTAyYzcifSxtYWNjeXJpbGxpYzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0'@;
put 'MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJc'@;
put 'dTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0'@;
put 'MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAx'@;
put 'ZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1'@;
put 'MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxtYWNncmVlazp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4'@;
put 'ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4'@;
put 'N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1'@;
put 'MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdc'@;
put 'dTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQifSxtYWNpY2VsYW5kOnt0eXBlOiJfc2JjcyIs'@;
put 'Y2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2'@;
put 'XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhi'@;
put 'Ylx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4'@;
put 'Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4'@;
put 'ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2'@;
put 'MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1'@;
put 'MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhk'@;
put 'NFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuaWE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRc'@;
put 'eGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTAyXHUwMTVlXHUyMjFl'@;
put 'XHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxMDNcdTAxNWZceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNc'@;
put 'dTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdTAxNjJcdTAxNjNcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQy'@;
put 'XHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN0aGFpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YWJceGJiXHUyMDI2XHVmODhjXHVmODhmXHVmODkyXHVmODk1XHVmODk4XHVmODhiXHVmODhlXHVm'@;
put 'ODkxXHVmODk0XHVmODk3XHUyMDFjXHUyMDFkXHVmODk5XHVmZmZkXHUyMDIyXHVmODg0XHVmODg5XHVmODg1XHVmODg2XHVmODg3XHVmODg4XHVmODhhXHVmODhkXHVmODkwXHVmODkzXHVmODk2XHUyMDE4XHUyMDE5XHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1'@;
put 'MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUy'@;
put 'MVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmVmZlx1MjAwYlx1'@;
put 'MjAxM1x1MjAxNFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MjEyMlx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1'@;
put 'OFx1MGU1OVx4YWVceGE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sbWFjdHVya2lzaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhm'@;
put 'MVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1'@;
put 'MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDEx'@;
put 'ZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRh'@;
put 'XHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3VrcmFpbmU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIx'@;
put 'XHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx1MDQ5MFx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUw'@;
put 'NDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTA0OTFcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDVi'@;
put 'XHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQz'@;
put 'OFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxrb2k4cjp7dHlwZToiX3NiY3MiLGNoYXJz'@;
put 'OiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUy'@;
put 'MzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1'@;
put 'MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFc'@;
put 'dTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0'@;
put 'MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThc'@;
put 'dTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1'@;
put 'MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MjU2'@;
put 'Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0'@;
put 'MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNc'@;
put 'dTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4cnU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUy'@;
put 'NTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1'@;
put 'NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTA0NWVcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTA0MGVceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUw'@;
put 'NDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJl'@;
put 'XHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUw'@;
put 'NDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDliXHUwNDkzXHUyMDFhXHUwNDkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwNGIzXHUyMDM5XHUwNGIyXHUwNGI3XHUwNGI2XHVmZmZkXHUwNDlhXHUyMDE4XHUyMDE5'@;
put 'XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNGVmXHUwNGVlXHUwNDUxXHhhNFx1MDRlM1x4YTZceGE3XHVmZmZkXHVmZmZkXHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1ZmZmZFx4YjBc'@;
put 'eGIxXHhiMlx1MDQwMVx1ZmZmZFx1MDRlMlx4YjZceGI3XHVmZmZkXHUyMTE2XHVmZmZkXHhiYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0'@;
put 'M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThc'@;
put 'dTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxhcm1zY2lpODp7dHlwZToiX3NiY3MiLGNoYXJzOiJc'@;
put 'eDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdTA1ODdcdTA1ODkpKFx4YmJceGFiXHUyMDE0'@;
put 'Llx1MDU1ZCwtXHUwNThhXHUyMDI2XHUwNTVjXHUwNTViXHUwNTVlXHUwNTMxXHUwNTYxXHUwNTMyXHUwNTYyXHUwNTMzXHUwNTYzXHUwNTM0XHUwNTY0XHUwNTM1XHUwNTY1XHUwNTM2XHUwNTY2XHUwNTM3XHUwNTY3XHUwNTM4XHUwNTY4XHUwNTM5XHUwNTY5XHUwNTNhXHUwNTZhXHUwNTNi'@;
put 'XHUwNTZiXHUwNTNjXHUwNTZjXHUwNTNkXHUwNTZkXHUwNTNlXHUwNTZlXHUwNTNmXHUwNTZmXHUwNTQwXHUwNTcwXHUwNTQxXHUwNTcxXHUwNTQyXHUwNTcyXHUwNTQzXHUwNTczXHUwNTQ0XHUwNTc0XHUwNTQ1XHUwNTc1XHUwNTQ2XHUwNTc2XHUwNTQ3XHUwNTc3XHUwNTQ4XHUwNTc4XHUw'@;
put 'NTQ5XHUwNTc5XHUwNTRhXHUwNTdhXHUwNTRiXHUwNTdiXHUwNTRjXHUwNTdjXHUwNTRkXHUwNTdkXHUwNTRlXHUwNTdlXHUwNTRmXHUwNTdmXHUwNTUwXHUwNTgwXHUwNTUxXHUwNTgxXHUwNTUyXHUwNTgyXHUwNTUzXHUwNTgzXHUwNTU0XHUwNTg0XHUwNTU1XHUwNTg1XHUwNTU2XHUwNTg2'@;
put 'XHUwNTVhXHVmZmZkIn0scmsxMDQ4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQ5YVx1MDRiYVx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1'@;
put 'MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ5Ylx1MDRiYlx1MDQ1Zlx4YTBcdTA0YjBcdTA0YjFcdTA0ZDhceGE0XHUwNGU4XHhhNlx4YTdcdTA0MDFceGE5XHUwNDkyXHhhYlx4YWNceGFkXHhhZVx1MDRhZVx4YjBceGIxXHUwNDA2XHUw'@;
put 'NDU2XHUwNGU5XHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDkzXHhiYlx1MDRkOVx1MDRhMlx1MDRhM1x1MDRhZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1'@;
put 'MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQz'@;
put 'Ylx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHRjdm46e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceGRhXHUxZWU0XHgw'@;
put 'M1x1MWVlYVx1MWVlY1x1MWVlZVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBcdTFlZThcdTFlZjBcdTFlZjJcdTFlZjZcdTFlZjhceGRkXHUxZWY0XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktM'@;
put 'TU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzBcdTFlYTJceGMzXHhjMVx1MWVhMFx1MWViNlx1MWVhY1x4YzhcdTFlYmFcdTFlYmNceGM5XHUxZWI4XHUxZWM2XHhjY1x1MWVjOFx1MDEyOFx4Y2RcdTFlY2FceGQyXHUxZWNlXHhkNVx4'@;
put 'ZDNcdTFlY2NcdTFlZDhcdTFlZGNcdTFlZGVcdTFlZTBcdTFlZGFcdTFlZTJceGQ5XHUxZWU2XHUwMTY4XHhhMFx1MDEwMlx4YzJceGNhXHhkNFx1MDFhMFx1MDFhZlx1MDExMFx1MDEwM1x4ZTJceGVhXHhmNFx1MDFhMVx1MDFiMFx1MDExMVx1MWViMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMw'@;
put 'MVx1MDMyM1x4ZTBcdTFlYTNceGUzXHhlMVx1MWVhMVx1MWViMlx1MWViMVx1MWViM1x1MWViNVx1MWVhZlx1MWViNFx1MWVhZVx1MWVhNlx1MWVhOFx1MWVhYVx1MWVhNFx1MWVjMFx1MWViN1x1MWVhN1x1MWVhOVx1MWVhYlx1MWVhNVx1MWVhZFx4ZThcdTFlYzJcdTFlYmJcdTFlYmRceGU5'@;
put 'XHUxZWI5XHUxZWMxXHUxZWMzXHUxZWM1XHUxZWJmXHUxZWM3XHhlY1x1MWVjOVx1MWVjNFx1MWViZVx1MWVkMlx1MDEyOVx4ZWRcdTFlY2JceGYyXHUxZWQ0XHUxZWNmXHhmNVx4ZjNcdTFlY2RcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZDFcdTFlZDlcdTFlZGRcdTFlZGZcdTFlZTFcdTFlZGJc'@;
put 'dTFlZTNceGY5XHUxZWQ2XHUxZWU3XHUwMTY5XHhmYVx1MWVlNVx1MWVlYlx1MWVlZFx1MWVlZlx1MWVlOVx1MWVmMVx1MWVmM1x1MWVmN1x1MWVmOVx4ZmRcdTFlZjVcdTFlZDAifSxnZW9yZ2lhbmFjYWRlbXk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIw'@;
put 'MWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJc'@;
put 'eGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBkN1x1'@;
put 'MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBlZlx1MTBmMFx1MTBmMVx1MTBmMlx1MTBm'@;
put 'M1x1MTBmNFx1MTBmNVx1MTBmNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxnZW9yZ2lhbnBzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUy'@;
put 'MDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4'@;
put 'XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVc'@;
put 'dTEwZDZcdTEwZjFcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZjJcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZjNcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEw'@;
put 'ZWVcdTEwZjRcdTEwZWZcdTEwZjBcdTEwZjVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHB0MTU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5'@;
put 'Nlx1MDQ5Mlx1MDRlZVx1MDQ5M1x1MjAxZVx1MjAyNlx1MDRiNlx1MDRhZVx1MDRiMlx1MDRhZlx1MDRhMFx1MDRlMlx1MDRhMlx1MDQ5YVx1MDRiYVx1MDRiOFx1MDQ5N1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRiM1x1MDRiN1x1MDRhMVx1MDRlM1x1'@;
put 'MDRhM1x1MDQ5Ylx1MDRiYlx1MDRiOVx4YTBcdTA0MGVcdTA0NWVcdTA0MDhcdTA0ZThcdTA0OThcdTA0YjBceGE3XHUwNDAxXHhhOVx1MDRkOFx4YWJceGFjXHUwNGVmXHhhZVx1MDQ5Y1x4YjBcdTA0YjFcdTA0MDZcdTA0NTZcdTA0OTlcdTA0ZTlceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDRk'@;
put 'OVx4YmJcdTA0NThcdTA0YWFcdTA0YWJcdTA0OWRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0'@;
put 'MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFc'@;
put 'dTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx2aXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHUxZWIyXHgwM1x4MDRcdTFlYjRcdTFlYWFceDA3XGJcdFxuXHZcZlxyXHgw'@;
put 'ZVx4MGZceDEwXHgxMVx4MTJceDEzXHUxZWY2XHgxNVx4MTZceDE3XHgxOFx1MWVmOFx4MWFceDFiXHgxY1x4MWRcdTFlZjRceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3'@;
put 'eHl6e3x9flx4N2ZcdTFlYTBcdTFlYWVcdTFlYjBcdTFlYjZcdTFlYTRcdTFlYTZcdTFlYThcdTFlYWNcdTFlYmNcdTFlYjhcdTFlYmVcdTFlYzBcdTFlYzJcdTFlYzRcdTFlYzZcdTFlZDBcdTFlZDJcdTFlZDRcdTFlZDZcdTFlZDhcdTFlZTJcdTFlZGFcdTFlZGNcdTFlZGVcdTFlY2FcdTFl'@;
put 'Y2VcdTFlY2NcdTFlYzhcdTFlZTZcdTAxNjhcdTFlZTRcdTFlZjJceGQ1XHUxZWFmXHUxZWIxXHUxZWI3XHUxZWE1XHUxZWE3XHUxZWE5XHUxZWFkXHUxZWJkXHUxZWI5XHUxZWJmXHUxZWMxXHUxZWMzXHUxZWM1XHUxZWM3XHUxZWQxXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWUwXHUwMWEwXHUx'@;
put 'ZWQ5XHUxZWRkXHUxZWRmXHUxZWNiXHUxZWYwXHUxZWU4XHUxZWVhXHUxZWVjXHUwMWExXHUxZWRiXHUwMWFmXHhjMFx4YzFceGMyXHhjM1x1MWVhMlx1MDEwMlx1MWViM1x1MWViNVx4YzhceGM5XHhjYVx1MWViYVx4Y2NceGNkXHUwMTI4XHUxZWYzXHUwMTEwXHUxZWU5XHhkMlx4ZDNceGQ0'@;
put 'XHUxZWExXHUxZWY3XHUxZWViXHUxZWVkXHhkOVx4ZGFcdTFlZjlcdTFlZjVceGRkXHUxZWUxXHUwMWIwXHhlMFx4ZTFceGUyXHhlM1x1MWVhM1x1MDEwM1x1MWVlZlx1MWVhYlx4ZThceGU5XHhlYVx1MWViYlx4ZWNceGVkXHUwMTI5XHUxZWM5XHUwMTExXHUxZWYxXHhmMlx4ZjNceGY0XHhm'@;
put 'NVx1MWVjZlx1MWVjZFx1MWVlNVx4ZjlceGZhXHUwMTY5XHUxZWU3XHhmZFx1MWVlM1x1MWVlZSJ9LGlzbzY0NmNuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx'@;
put 'Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjXHhhNSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpc282NDZqcDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJc'@;
put 'eDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXHhhNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5'@;
put 'ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxocHJvbWFuODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4'@;
put 'ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGMwXHhjMlx4YzhceGNhXHhjYlx4Y2VceGNmXHhiNFx1MDJjYlx1MDJj'@;
put 'Nlx4YThcdTAyZGNceGQ5XHhkYlx1MjBhNFx4YWZceGRkXHhmZFx4YjBceGM3XHhlN1x4ZDFceGYxXHhhMVx4YmZceGE0XHhhM1x4YTVceGE3XHUwMTkyXHhhMlx4ZTJceGVhXHhmNFx4ZmJceGUxXHhlOVx4ZjNceGZhXHhlMFx4ZThceGYyXHhmOVx4ZTRceGViXHhmNlx4ZmNceGM1XHhlZVx4'@;
put 'ZDhceGM2XHhlNVx4ZWRceGY4XHhlNlx4YzRceGVjXHhkNlx4ZGNceGM5XHhlZlx4ZGZceGQ0XHhjMVx4YzNceGUzXHhkMFx4ZjBceGNkXHhjY1x4ZDNceGQyXHhkNVx4ZjVcdTAxNjBcdTAxNjFceGRhXHUwMTc4XHhmZlx4ZGVceGZlXHhiN1x4YjVceGI2XHhiZVx1MjAxNFx4YmNceGJkXHhh'@;
put 'YVx4YmFceGFiXHUyNWEwXHhiYlx4YjFcdWZmZmQifSxtYWNpbnRvc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4'@;
put 'ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhi'@;
put 'YVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5'@;
put 'XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUw'@;
put 'MmRiXHUwMmM3In0sYXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sdGlzNjIwOnt0eXBlOiJf'@;
put 'c2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUx'@;
put 'NFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1'@;
put 'MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0'@;
put 'Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9fX0sNjQ3NzM6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz17MTAw'@;
put 'Mjk6Im1hY2NlbnRldXJvIixtYWNjZW50ZXVybzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDEx'@;
put 'M1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2'@;
put 'XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNc'@;
put 'dTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1'@;
put 'MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyJ9LDgwODoiY3A4MDgiLGlibTgwODoiY3A4MDgiLGNwODA4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1'@;
put 'MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQy'@;
put 'ZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1'@;
put 'MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1'@;
put 'Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1'@;
put 'MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHUyMGFjXHUyNWEwXHhhMCJ9LG1pazp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThc'@;
put 'dTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0'@;
put 'MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZc'@;
put 'dTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NjNcdTI1NTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1MTBcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTIxMTZceGE3XHUyNTU3XHUyNTVkXHUyNTE4XHUyNTBjXHUyNTg4'@;
put 'XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBc'@;
put 'dTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxjcDcyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ZTlceGUyXHg4NFx4ZTBceDg2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHg4ZFx4OGVceDhmXHg5MFx1MDY1MVx1MDY1Mlx4ZjRceGE0XHUwNjQwXHhmYlx4'@;
put 'ZjlcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRceGEzXHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJc'@;
put 'dTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1'@;
put 'NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDFceGI1XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUw'@;
put 'NjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUyMjYxXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGFzY2lpOGJpdDoiYXNjaWkiLHVzYXNjaWk6ImFzY2lpIixhbnNpeDM0OiJhc2Np'@;
put 'aSIsYW5zaXgzNDE5Njg6ImFzY2lpIixhbnNpeDM0MTk4NjoiYXNjaWkiLGNzYXNjaWk6ImFzY2lpIixjcDM2NzoiYXNjaWkiLGlibTM2NzoiYXNjaWkiLGlzb2lyNjoiYXNjaWkiLGlzbzY0NnVzOiJhc2NpaSIsaXNvNjQ2aXJ2OiJhc2NpaSIsdXM6ImFzY2lpIixsYXRpbjE6Imlzbzg4NTkx'@;
put 'IixsYXRpbjI6Imlzbzg4NTkyIixsYXRpbjM6Imlzbzg4NTkzIixsYXRpbjQ6Imlzbzg4NTk0IixsYXRpbjU6Imlzbzg4NTk5IixsYXRpbjY6Imlzbzg4NTkxMCIsbGF0aW43OiJpc284ODU5MTMiLGxhdGluODoiaXNvODg1OTE0IixsYXRpbjk6Imlzbzg4NTkxNSIsbGF0aW4xMDoiaXNvODg1'@;
put 'OTE2Iixjc2lzb2xhdGluMToiaXNvODg1OTEiLGNzaXNvbGF0aW4yOiJpc284ODU5MiIsY3Npc29sYXRpbjM6Imlzbzg4NTkzIixjc2lzb2xhdGluNDoiaXNvODg1OTQiLGNzaXNvbGF0aW5jeXJpbGxpYzoiaXNvODg1OTUiLGNzaXNvbGF0aW5hcmFiaWM6Imlzbzg4NTk2Iixjc2lzb2xhdGlu'@;
put 'Z3JlZWs6Imlzbzg4NTk3Iixjc2lzb2xhdGluaGVicmV3OiJpc284ODU5OCIsY3Npc29sYXRpbjU6Imlzbzg4NTk5Iixjc2lzb2xhdGluNjoiaXNvODg1OTEwIixsMToiaXNvODg1OTEiLGwyOiJpc284ODU5MiIsbDM6Imlzbzg4NTkzIixsNDoiaXNvODg1OTQiLGw1OiJpc284ODU5OSIsbDY6'@;
put 'Imlzbzg4NTkxMCIsbDc6Imlzbzg4NTkxMyIsbDg6Imlzbzg4NTkxNCIsbDk6Imlzbzg4NTkxNSIsbDEwOiJpc284ODU5MTYiLGlzb2lyMTQ6ImlzbzY0NmpwIixpc29pcjU3OiJpc282NDZjbiIsaXNvaXIxMDA6Imlzbzg4NTkxIixpc29pcjEwMToiaXNvODg1OTIiLGlzb2lyMTA5OiJpc284'@;
put 'ODU5MyIsaXNvaXIxMTA6Imlzbzg4NTk0Iixpc29pcjE0NDoiaXNvODg1OTUiLGlzb2lyMTI3OiJpc284ODU5NiIsaXNvaXIxMjY6Imlzbzg4NTk3Iixpc29pcjEzODoiaXNvODg1OTgiLGlzb2lyMTQ4OiJpc284ODU5OSIsaXNvaXIxNTc6Imlzbzg4NTkxMCIsaXNvaXIxNjY6InRpczYyMCIs'@;
put 'aXNvaXIxNzk6Imlzbzg4NTkxMyIsaXNvaXIxOTk6Imlzbzg4NTkxNCIsaXNvaXIyMDM6Imlzbzg4NTkxNSIsaXNvaXIyMjY6Imlzbzg4NTkxNiIsY3A4MTk6Imlzbzg4NTkxIixpYm04MTk6Imlzbzg4NTkxIixjeXJpbGxpYzoiaXNvODg1OTUiLGFyYWJpYzoiaXNvODg1OTYiLGFyYWJpYzg6'@;
put 'Imlzbzg4NTk2IixlY21hMTE0OiJpc284ODU5NiIsYXNtbzcwODoiaXNvODg1OTYiLGdyZWVrOiJpc284ODU5NyIsZ3JlZWs4OiJpc284ODU5NyIsZWNtYTExODoiaXNvODg1OTciLGVsb3Q5Mjg6Imlzbzg4NTk3IixoZWJyZXc6Imlzbzg4NTk4IixoZWJyZXc4OiJpc284ODU5OCIsdHVya2lz'@;
put 'aDoiaXNvODg1OTkiLHR1cmtpc2g4OiJpc284ODU5OSIsdGhhaToiaXNvODg1OTExIix0aGFpODoiaXNvODg1OTExIixjZWx0aWM6Imlzbzg4NTkxNCIsY2VsdGljODoiaXNvODg1OTE0Iixpc29jZWx0aWM6Imlzbzg4NTkxNCIsdGlzNjIwMDoidGlzNjIwIix0aXM2MjAyNTI5MToidGlzNjIw'@;
put 'Iix0aXM2MjAyNTMzMDoidGlzNjIwIiwxZTQ6Im1hY3JvbWFuIiwxMDAwNjoibWFjZ3JlZWsiLDEwMDA3OiJtYWNjeXJpbGxpYyIsMTAwNzk6Im1hY2ljZWxhbmQiLDEwMDgxOiJtYWN0dXJraXNoIixjc3BjOGNvZGVwYWdlNDM3OiJjcDQzNyIsY3NwYzc3NWJhbHRpYzoiY3A3NzUiLGNzcGM4'@;
put 'NTBtdWx0aWxpbmd1YWw6ImNwODUwIixjc3BjcDg1MjoiY3A4NTIiLGNzcGM4NjJsYXRpbmhlYnJldzoiY3A4NjIiLGNwZ3I6ImNwODY5Iixtc2VlOiJjcDEyNTAiLG1zY3lybDoiY3AxMjUxIixtc2Fuc2k6ImNwMTI1MiIsbXNncmVlazoiY3AxMjUzIixtc3R1cms6ImNwMTI1NCIsbXNoZWJy'@;
put 'OiJjcDEyNTUiLG1zYXJhYjoiY3AxMjU2Iix3aW5iYWx0cmltOiJjcDEyNTciLGNwMjA4NjY6ImtvaThyIiwyMDg2Njoia29pOHIiLGlibTg3ODoia29pOHIiLGNza29pOHI6ImtvaThyIixjcDIxODY2OiJrb2k4dSIsMjE4NjY6ImtvaTh1IixpYm0xMTY4OiJrb2k4dSIsc3RyazEwNDgyMDAy'@;
put 'OiJyazEwNDgiLHRjdm41NzEyOiJ0Y3ZuIix0Y3ZuNTcxMjE6InRjdm4iLGdiMTk4ODgwOiJpc282NDZjbiIsY246ImlzbzY0NmNuIixjc2lzbzE0amlzYzYyMjBybzoiaXNvNjQ2anAiLGppc2M2MjIwMTk2OXJvOiJpc282NDZqcCIsanA6ImlzbzY0NmpwIixjc2hwcm9tYW44OiJocHJvbWFu'@;
put 'OCIscjg6Imhwcm9tYW44Iixyb21hbjg6Imhwcm9tYW44Iix4cm9tYW44OiJocHJvbWFuOCIsaWJtMTA1MToiaHByb21hbjgiLG1hYzoibWFjaW50b3NoIixjc21hY2ludG9zaDoibWFjaW50b3NoIn19LDQzMjgwOihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVm'@;
put 'ZmVyO2Z1bmN0aW9uIHgoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBsZSgpe3RoaXMub3ZlcmZsb3dCeXRlPS0xfWZ1bmN0aW9uIE0oSyxMKXt0aGlzLmljb252PUx9ZnVuY3Rpb24gTyhLLEwpe3ZvaWQgMD09PShLPUt8fHt9KS5hZGRCT00mJihLLmFkZEJPTT0hMCksdGhpcy5lbmNvZGVy'@;
put 'PUwuaWNvbnYuZ2V0RW5jb2RlcigidXRmLTE2bGUiLEspfWZ1bmN0aW9uIFIoSyxMKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz1LfHx7fSx0aGlzLmljb252PUwuaWNvbnZ9ZnVuY3Rpb24geihLLEwp'@;
put 'e3ZhciBrPUx8fCJ1dGYtMTZsZSI7aWYoSy5sZW5ndGg+PTIpaWYoMjU0PT1LWzBdJiYyNTU9PUtbMV0paz0idXRmLTE2YmUiO2Vsc2UgaWYoMjU1PT1LWzBdJiYyNTQ9PUtbMV0paz0idXRmLTE2bGUiO2Vsc2V7Zm9yKHZhciBFPTAsaj0wLFY9TWF0aC5taW4oSy5sZW5ndGgtSy5sZW5ndGgl'@;
put 'Miw2NCksQj0wO0I8VjtCKz0yKTA9PT1LW0JdJiYwIT09S1tCKzFdJiZqKyssMCE9PUtbQl0mJjA9PT1LW0IrMV0mJkUrKztqPkU/az0idXRmLTE2YmUiOmo8RSYmKGs9InV0Zi0xNmxlIil9cmV0dXJuIGt9TGUudXRmMTZiZT14LHgucHJvdG90eXBlLmVuY29kZXI9bSx4LnByb3RvdHlwZS5k'@;
put 'ZWNvZGVyPWxlLHgucHJvdG90eXBlLmJvbUF3YXJlPSEwLG0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgTD1hZS5mcm9tKEssInVjczIiKSxrPTA7azxMLmxlbmd0aDtrKz0yKXt2YXIgRT1MW2tdO0xba109TFtrKzFdLExbaysxXT1FfXJldHVybiBMfSxtLnByb3RvdHlw'@;
put 'ZS5lbmQ9ZnVuY3Rpb24oKXt9LGxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZigwPT1LLmxlbmd0aClyZXR1cm4iIjt2YXIgTD1hZS5hbGxvYyhLLmxlbmd0aCsxKSxrPTAsRT0wO2ZvcigtMSE9PXRoaXMub3ZlcmZsb3dCeXRlJiYoTFswXT1LWzBdLExbMV09dGhpcy5vdmVyZmxv'@;
put 'd0J5dGUsaz0xLEU9Mik7azxLLmxlbmd0aC0xO2srPTIsRSs9MilMW0VdPUtbaysxXSxMW0UrMV09S1trXTtyZXR1cm4gdGhpcy5vdmVyZmxvd0J5dGU9az09Sy5sZW5ndGgtMT9LW0subGVuZ3RoLTFdOi0xLEwuc2xpY2UoMCxFKS50b1N0cmluZygidWNzMiIpfSxsZS5wcm90b3R5cGUuZW5k'@;
put 'PWZ1bmN0aW9uKCl7fSxMZS51dGYxNj1NLE0ucHJvdG90eXBlLmVuY29kZXI9TyxNLnByb3RvdHlwZS5kZWNvZGVyPVIsTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShLKX0sTy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuZW5jb2Rlci5lbmQoKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaChLKSx0aGlzLmluaXRpYWxCeXRlc0xlbis9Sy5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIEw9'@;
put 'eihLPWFlLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihMLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0'@;
put 'dXJuIHRoaXMuZGVjb2Rlci53cml0ZShLKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIEs9YWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxMPXooSyx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29u'@;
put 'di5nZXREZWNvZGVyKEwsdGhpcy5vcHRpb25zKTt2YXIgaz10aGlzLmRlY29kZXIud3JpdGUoSyksRT10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEU/aytFOmt9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDkyODQ0OihhdCxMZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3'@;
put 'OSkuQnVmZmVyO2Z1bmN0aW9uIHgoSyxMKXt0aGlzLmljb252PUwsdGhpcy5ib21Bd2FyZT0hMCx0aGlzLmlzTEU9Sy5pc0xFfWZ1bmN0aW9uIG0oSyxMKXt0aGlzLmlzTEU9TC5pc0xFLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wfWZ1bmN0aW9uIGxlKEssTCl7dGhpcy5pc0xFPUwuaXNMRSx0aGlz'@;
put 'LmJhZENoYXI9TC5pY29udi5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKSx0aGlzLm92ZXJmbG93PW51bGx9ZnVuY3Rpb24gTShLLEwpe3RoaXMuaWNvbnY9TH1mdW5jdGlvbiBPKEssTCl7dm9pZCAwPT09KEs9S3x8e30pLmFkZEJPTSYmKEsuYWRkQk9NPSEwKSx0aGlzLmVuY29k'@;
put 'ZXI9TC5pY29udi5nZXRFbmNvZGVyKEsuZGVmYXVsdEVuY29kaW5nfHwidXRmLTMybGUiLEspfWZ1bmN0aW9uIFIoSyxMKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz1LfHx7fSx0aGlzLmljb252PUwu'@;
put 'aWNvbnZ9ZnVuY3Rpb24geihLLEwpe3ZhciBrPUx8fCJ1dGYtMzJsZSI7aWYoSy5sZW5ndGg+PTQpaWYoNjUyNzk9PT1LLnJlYWRVSW50MzJCRSgwKSlrPSJ1dGYtMzJiZSI7ZWxzZSBpZig2NTI3OT09PUsucmVhZFVJbnQzMkxFKDApKWs9InV0Zi0zMmxlIjtlbHNle2Zvcih2YXIgRT0wLGo9'@;
put 'MCxWPTAsQj0wLFk9TWF0aC5taW4oSy5sZW5ndGgtSy5sZW5ndGglNCwxMjgpLFg9MDtYPFk7WCs9NCl7dmFyIFU9S1tYXSxxPUtbWCsxXSxlZT1LW1grMl0sdGU9S1tYKzNdOygwIT09VXx8cT4xNikmJisraiwoMCE9PXRlfHxlZT4xNikmJisrRSwwPT09VSYmMD09PXEmJjA9PT1lZSYmMCE9'@;
put 'PXRlJiZCKyssMCE9PVUmJjA9PT1xJiYwPT09ZWUmJjA9PT10ZSYmVisrfWo8RT9rPSJ1dGYtMzJiZSI6RTxqJiYoaz0idXRmLTMybGUiKSxCPlY/az0idXRmLTMyYmUiOkI8ViYmKGs9InV0Zi0zMmxlIil9cmV0dXJuIGt9TGUuX3V0ZjMyPXgsTGUudXRmMzJsZT17dHlwZToiX3V0ZjMyIixp'@;
put 'c0xFOiEwfSxMZS51dGYzMmJlPXt0eXBlOiJfdXRmMzIiLGlzTEU6ITF9LExlLnVjczRsZT0idXRmMzJsZSIsTGUudWNzNGJlPSJ1dGYzMmJlIix4LnByb3RvdHlwZS5lbmNvZGVyPW0seC5wcm90b3R5cGUuZGVjb2Rlcj1sZSxtLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFy'@;
put 'IEw9YWUuZnJvbShLLCJ1Y3MyIiksaz1hZS5hbGxvYygyKkwubGVuZ3RoKSxFPXRoaXMuaXNMRT9rLndyaXRlVUludDMyTEU6ay53cml0ZVVJbnQzMkJFLGo9MCxWPTA7VjxMLmxlbmd0aDtWKz0yKXt2YXIgQj1MLnJlYWRVSW50MTZMRShWKSxZPTU1Mjk2PD1CJiZCPDU2MzIwO2lmKHRoaXMu'@;
put 'aGlnaFN1cnJvZ2F0ZSl7aWYoIVkmJjU2MzIwPD1CJiZCPDU3MzQ0KXtFLmNhbGwoayw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRlLTU1Mjk2PDwxMHxCLTU2MzIwKSxqKSxqKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wO2NvbnRpbnVlfUUuY2FsbChrLHRoaXMuaGlnaFN1cnJvZ2F0ZSxqKSxq'@;
put 'Kz00fVk/dGhpcy5oaWdoU3Vycm9nYXRlPUI6KEUuY2FsbChrLEIsaiksais9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJuIGo8ay5sZW5ndGgmJihrPWsuc2xpY2UoMCxqKSksa30sbS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXt2YXIgSz1h'@;
put 'ZS5hbGxvYyg0KTtyZXR1cm4gdGhpcy5pc0xFP0sud3JpdGVVSW50MzJMRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCk6Sy53cml0ZVVJbnQzMkJFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKSx0aGlzLmhpZ2hTdXJyb2dhdGU9MCxLfX0sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKDA9'@;
put 'PT1LLmxlbmd0aClyZXR1cm4iIjt0aGlzLm92ZXJmbG93JiYoSz1hZS5jb25jYXQoW3RoaXMub3ZlcmZsb3csS10pKTt2YXIgTD1LLmxlbmd0aC1LLmxlbmd0aCU0O0subGVuZ3RoIT09TD8odGhpcy5vdmVyZmxvdz1LLnNsaWNlKEwpLEs9Sy5zbGljZSgwLEwpKTp0aGlzLm92ZXJmbG93PW51'@;
put 'bGw7Zm9yKHZhciBrPWFlLmFsbG9jKEwpLEU9MCxqPTA7ajxMO2orPTQpe3ZhciBWPXRoaXMuaXNMRT9LLnJlYWRVSW50MzJMRShqKTpLLnJlYWRVSW50MzJCRShqKTtpZihWPDY1NTM2KWsud3JpdGVVSW50MTZMRShWLEUpLEUrPTI7ZWxzZSBpZihWPjExMTQxMTEpay53cml0ZVVJbnQxNkxF'@;
put 'KHRoaXMuYmFkQ2hhcixFKSxFKz0yO2Vsc2V7dmFyIFk9NTYzMjArKDEwMjMmKFYtPTY1NTM2KSk7ay53cml0ZVVJbnQxNkxFKDU1Mjk2fFY+PjEwLEUpLGsud3JpdGVVSW50MTZMRShZLEUrPTIpLEUrPTJ9fXJldHVybiBrLnNsaWNlKDAsRSkudG9TdHJpbmcoInVjczIiKX0sbGUucHJvdG90'@;
put 'eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMub3ZlcmZsb3c9bnVsbH0sTGUudXRmMzI9TSxMZS51Y3M0PU0sTS5wcm90b3R5cGUuZW5jb2Rlcj1PLE0ucHJvdG90eXBlLmRlY29kZXI9UixPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKEspfSxP'@;
put 'LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKEspLHRoaXMuaW5pdGlhbEJ5dGVzTGVuKz1LLmxlbmd0aCx0aGlz'@;
put 'LmluaXRpYWxCeXRlc0xlbjwzMilyZXR1cm4iIjt2YXIgaz16KGFlLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihrLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMu'@;
put 'bGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShLKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIEs9YWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxMPXooSyx0aGlzLm9wdGlvbnMuZGVmYXVs'@;
put 'dEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEwsdGhpcy5vcHRpb25zKTt2YXIgaz10aGlzLmRlY29kZXIud3JpdGUoSyksRT10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEU/aytFOmt9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDc4MzU0OihhdCxM'@;
put 'ZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgoWSxYKXt0aGlzLmljb252PVh9TGUudXRmNz14LExlLnVuaWNvZGUxMXV0Zjc9InV0ZjciLHgucHJvdG90eXBlLmVuY29kZXI9bGUseC5wcm90b3R5cGUuZGVjb2Rlcj1NLHgucHJvdG90eXBlLmJv'@;
put 'bUF3YXJlPSEwO3ZhciBtPS9bXkEtWmEtejAtOSdcKFwpLC1cLlwvOlw/IFxuXHJcdF0rL2c7ZnVuY3Rpb24gbGUoWSxYKXt0aGlzLmljb252PVguaWNvbnZ9ZnVuY3Rpb24gTShZLFgpe3RoaXMuaWNvbnY9WC5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9bGUu'@;
put 'cHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkpe3JldHVybiBhZS5mcm9tKFkucmVwbGFjZShtLGZ1bmN0aW9uKFgpe3JldHVybiIrIisoIisiPT09WD8iIjp0aGlzLmljb252LmVuY29kZShYLCJ1dGYxNi1iZSIpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQvLCIiKSkrIi0ifS5i'@;
put 'aW5kKHRoaXMpKSl9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9O2Zvcih2YXIgTz0vW0EtWmEtejAtOVwvK10vLFI9W10sej0wO3o8MjU2O3orKylSW3pdPU8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKHopKTt2YXIgSz0iKyIuY2hhckNvZGVBdCgwKSxMPSItIi5jaGFyQ29kZUF0'@;
put 'KDApLGs9IiYiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gRShZLFgpe3RoaXMuaWNvbnY9WH1mdW5jdGlvbiBqKFksWCl7dGhpcy5pY29udj1YLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT1hZS5hbGxvYyg2KSx0aGlzLmJhc2U2NEFjY3VtSWR4PTB9ZnVuY3Rpb24g'@;
put 'VihZLFgpe3RoaXMuaWNvbnY9WC5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9TS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYPSIiLFU9MCxxPXRoaXMuaW5CYXNlNjQsZWU9dGhpcy5iYXNlNjRBY2N1bSx0ZT0wO3RlPFkubGVuZ3RoO3Rl'@;
put 'KyspaWYocSl7aWYoIVJbWVt0ZV1dKXtpZih0ZT09VSYmWVt0ZV09PUwpWCs9IisiO2Vsc2V7dmFyIG9lPWVlK1kuc2xpY2UoVSx0ZSkudG9TdHJpbmcoKTtYKz10aGlzLmljb252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1ZW3RlXSE9TCYmdGUtLSxVPXRlKzEs'@;
put 'cT0hMSxlZT0iIn19ZWxzZSBZW3RlXT09SyYmKFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSx0ZSksImFzY2lpIiksVT10ZSsxLHE9ITApO2lmKHEpe3ZhciBzZT0ob2U9ZWUrWS5zbGljZShVKS50b1N0cmluZygpKS5sZW5ndGgtb2UubGVuZ3RoJTg7ZWU9b2Uuc2xpY2Uoc2UpLG9l'@;
put 'PW9lLnNsaWNlKDAsc2UpLFgrPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgWCs9dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVKSwiYXNjaWkiKTtyZXR1cm4gdGhpcy5pbkJhc2U2ND1xLHRoaXMuYmFzZTY0QWNjdW09ZWUsWH0sTS5w'@;
put 'cm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIFk9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihZPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9'@;
put 'ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixZfSxMZS51dGY3aW1hcD1FLEUucHJvdG90eXBlLmVuY29kZXI9aixFLnByb3RvdHlwZS5kZWNvZGVyPVYsRS5wcm90b3R5cGUuYm9tQXdhcmU9ITAsai5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYPXRoaXMuaW5CYXNlNjQsVT10'@;
put 'aGlzLmJhc2U2NEFjY3VtLHE9dGhpcy5iYXNlNjRBY2N1bUlkeCxlZT1hZS5hbGxvYyg1KlkubGVuZ3RoKzEwKSx0ZT0wLG9lPTA7b2U8WS5sZW5ndGg7b2UrKyl7dmFyIHNlPVkuY2hhckNvZGVBdChvZSk7MzI8PXNlJiZzZTw9MTI2PyhYJiYocT4wJiYodGUrPWVlLndyaXRlKFUuc2xpY2Uo'@;
put 'MCxxKS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLnJlcGxhY2UoLz0rJC8sIiIpLHRlKSxxPTApLGVlW3RlKytdPUwsWD0hMSksWHx8KGVlW3RlKytdPXNlLHNlPT09ayYmKGVlW3RlKytdPUwpKSk6KFh8fChlZVt0ZSsrXT1rLFg9ITApLFgmJihVW3ErK109c2U+Pjgs'@;
put 'VVtxKytdPTI1NSZzZSxxPT1VLmxlbmd0aCYmKHRlKz1lZS53cml0ZShVLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIiksdGUpLHE9MCkpKX1yZXR1cm4gdGhpcy5pbkJhc2U2ND1YLHRoaXMuYmFzZTY0QWNjdW1JZHg9cSxlZS5zbGljZSgwLHRlKX0sai5wcm90b3R5cGUu'@;
put 'ZW5kPWZ1bmN0aW9uKCl7dmFyIFk9YWUuYWxsb2MoMTApLFg9MDtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmKHRoaXMuYmFzZTY0QWNjdW1JZHg+MCYmKFgrPVkud3JpdGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBs'@;
put 'YWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksWCksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxZW1grK109TCx0aGlzLmluQmFzZTY0PSExKSxZLnNsaWNlKDAsWCl9O3ZhciBCPVIuc2xpY2UoKTtCWyIsIi5jaGFyQ29kZUF0KDApXT0hMCxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlv'@;
put 'bihZKXtmb3IodmFyIFg9IiIsVT0wLHE9dGhpcy5pbkJhc2U2NCxlZT10aGlzLmJhc2U2NEFjY3VtLHRlPTA7dGU8WS5sZW5ndGg7dGUrKylpZihxKXtpZighQltZW3RlXV0pe2lmKHRlPT1VJiZZW3RlXT09TClYKz0iJiI7ZWxzZXt2YXIgb2U9ZWUrWS5zbGljZShVLHRlKS50b1N0cmluZygp'@;
put 'LnJlcGxhY2UoLywvZywiLyIpO1grPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfVlbdGVdIT1MJiZ0ZS0tLFU9dGUrMSxxPSExLGVlPSIifX1lbHNlIFlbdGVdPT1rJiYoWCs9dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVLHRlKSwiYXNjaWki'@;
put 'KSxVPXRlKzEscT0hMCk7aWYocSl7dmFyIHNlPShvZT1lZStZLnNsaWNlKFUpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIikpLmxlbmd0aC1vZS5sZW5ndGglODtlZT1vZS5zbGljZShzZSksb2U9b2Uuc2xpY2UoMCxzZSksWCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFz'@;
put 'ZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUpLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PXEsdGhpcy5iYXNlNjRBY2N1bT1lZSxYfSxWLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2'@;
put 'NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKFk9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLFl9fSw2MzAxODooYXQsTGUpPT57InVzZSBzdHJp'@;
put 'Y3QiO2Z1bmN0aW9uIGFlKG0sbGUpe3RoaXMuZW5jb2Rlcj1tLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIHgobSxsZSl7dGhpcy5kZWNvZGVyPW0sdGhpcy5wYXNzPSExLHRoaXMub3B0aW9ucz1sZXx8e319TGUuUHJlcGVuZEJPTT1hZSxhZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSl7'@;
put 'cmV0dXJuIHRoaXMuYWRkQk9NJiYobT0iXHVmZWZmIittLHRoaXMuYWRkQk9NPSExKSx0aGlzLmVuY29kZXIud3JpdGUobSl9LGFlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxMZS5TdHJpcEJPTT14LHgucHJvdG90eXBlLndyaXRlPWZ1bmN0'@;
put 'aW9uKG0pe3ZhciBsZT10aGlzLmRlY29kZXIud3JpdGUobSk7cmV0dXJuIHRoaXMucGFzc3x8IWxlfHwoIlx1ZmVmZiI9PT1sZVswXSYmKGxlPWxlLnNsaWNlKDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlz'@;
put 'LnBhc3M9ITApLGxlfSx4LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sNTM6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXIseD1GKDYzMDE4KSxtPWF0LmV4cG9ydHM7bS5lbmNvZGluZ3M9bnVsbCxtLmRl'@;
put 'ZmF1bHRDaGFyVW5pY29kZT0iXHVmZmZkIixtLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT0iPyIsbS5lbmNvZGU9ZnVuY3Rpb24oUix6LEspe1I9IiIrKFJ8fCIiKTt2YXIgTD1tLmdldEVuY29kZXIoeixLKSxrPUwud3JpdGUoUiksRT1MLmVuZCgpO3JldHVybiBFJiZFLmxlbmd0aD4wP2FlLmNv'@;
put 'bmNhdChbayxFXSk6a30sbS5kZWNvZGU9ZnVuY3Rpb24oUix6LEspeyJzdHJpbmciPT10eXBlb2YgUiYmKG0uc2tpcERlY29kZVdhcm5pbmd8fChjb25zb2xlLmVycm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0'@;
put 'dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIiksbS5za2lwRGVjb2RlV2FybmluZz0hMCksUj1hZS5mcm9tKCIiKyhSfHwiIiksImJpbmFyeSIpKTt2YXIgTD1tLmdldERlY29kZXIoeixLKSxrPUwud3JpdGUoUiks'@;
put 'RT1MLmVuZCgpO3JldHVybiBFP2srRTprfSxtLmVuY29kaW5nRXhpc3RzPWZ1bmN0aW9uKFIpe3RyeXtyZXR1cm4gbS5nZXRDb2RlYyhSKSwhMH1jYXRjaHtyZXR1cm4hMX19LG0udG9FbmNvZGluZz1tLmVuY29kZSxtLmZyb21FbmNvZGluZz1tLmRlY29kZSxtLl9jb2RlY0RhdGFDYWNoZT17'@;
put 'fSxtLmdldENvZGVjPWZ1bmN0aW9uKFIpe20uZW5jb2RpbmdzfHwobS5lbmNvZGluZ3M9Rig0NDY1NykpO2Zvcih2YXIgej1tLl9jYW5vbmljYWxpemVFbmNvZGluZyhSKSxLPXt9Ozspe3ZhciBMPW0uX2NvZGVjRGF0YUNhY2hlW3pdO2lmKEwpcmV0dXJuIEw7dmFyIGs9bS5lbmNvZGluZ3Nb'@;
put 'el07c3dpdGNoKHR5cGVvZiBrKXtjYXNlInN0cmluZyI6ej1rO2JyZWFrO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIEUgaW4gaylLW0VdPWtbRV07Sy5lbmNvZGluZ05hbWV8fChLLmVuY29kaW5nTmFtZT16KSx6PWsudHlwZTticmVhaztjYXNlImZ1bmN0aW9uIjpyZXR1cm4gSy5lbmNvZGluZ05h'@;
put 'bWV8fChLLmVuY29kaW5nTmFtZT16KSxMPW5ldyBrKEssbSksbS5fY29kZWNEYXRhQ2FjaGVbSy5lbmNvZGluZ05hbWVdPUwsTDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICciK1IrIicgKHNlYXJjaGVkIGFzOiAnIit6KyInKSIpfX19LG0uX2Nh'@;
put 'bm9uaWNhbGl6ZUVuY29kaW5nPWZ1bmN0aW9uKE8pe3JldHVybigiIitPKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcZHs0fSR8W14wLTlhLXpdL2csIiIpfSxtLmdldEVuY29kZXI9ZnVuY3Rpb24oUix6KXt2YXIgSz1tLmdldENvZGVjKFIpLEw9bmV3IEsuZW5jb2Rlcih6LEspO3JldHVy'@;
put 'biBLLmJvbUF3YXJlJiZ6JiZ6LmFkZEJPTSYmKEw9bmV3IHguUHJlcGVuZEJPTShMLHopKSxMfSxtLmdldERlY29kZXI9ZnVuY3Rpb24oUix6KXt2YXIgSz1tLmdldENvZGVjKFIpLEw9bmV3IEsuZGVjb2Rlcih6LEspO3JldHVybiBLLmJvbUF3YXJlJiYhKHomJiExPT09ei5zdHJpcEJPTSkm'@;
put 'JihMPW5ldyB4LlN0cmlwQk9NKEwseikpLEx9O3ZhciBsZT10eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MudmVyc2lvbnMmJnByb2Nlc3MudmVyc2lvbnMubm9kZTtpZihsZSl7dmFyIE09bGUuc3BsaXQoIi4iKS5tYXAoTnVtYmVyKTsoTVswXT4wfHxNWzFdPj0xMCkmJkYoNjkzMzEpKG0p'@;
put 'LEYoMTk1MjcpKG0pfX0sMjI2MDE6KGF0LExlKT0+e0xlLnJlYWQ9ZnVuY3Rpb24oRixhZSx4LG0sbGUpe3ZhciBNLE8sUj04KmxlLW0tMSx6PSgxPDxSKS0xLEs9ej4+MSxMPS03LGs9eD9sZS0xOjAsRT14Py0xOjEsaj1GW2FlK2tdO2ZvcihrKz1FLE09aiYoMTw8LUwpLTEsaj4+PS1MLEwr'@;
put 'PVI7TD4wO009MjU2Kk0rRlthZStrXSxrKz1FLEwtPTgpO2ZvcihPPU0mKDE8PC1MKS0xLE0+Pj0tTCxMKz1tO0w+MDtPPTI1NipPK0ZbYWUra10says9RSxMLT04KTtpZigwPT09TSlNPTEtSztlbHNle2lmKE09PT16KXJldHVybiBPP05hTjoxLzAqKGo/LTE6MSk7Tys9TWF0aC5wb3coMixt'@;
put 'KSxNLT1LfXJldHVybihqPy0xOjEpKk8qTWF0aC5wb3coMixNLW0pfSxMZS53cml0ZT1mdW5jdGlvbihGLGFlLHgsbSxsZSxNKXt2YXIgTyxSLHosSz04Kk0tbGUtMSxMPSgxPDxLKS0xLGs9TD4+MSxFPTIzPT09bGU/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGo9bT8wOk0t'@;
put 'MSxWPW0/MTotMSxCPWFlPDB8fDA9PT1hZSYmMS9hZTwwPzE6MDtmb3IoYWU9TWF0aC5hYnMoYWUpLGlzTmFOKGFlKXx8YWU9PT0xLzA/KFI9aXNOYU4oYWUpPzE6MCxPPUwpOihPPU1hdGguZmxvb3IoTWF0aC5sb2coYWUpL01hdGguTE4yKSxhZSooej1NYXRoLnBvdygyLC1PKSk8MSYmKE8t'@;
put 'LSx6Kj0yKSwoYWUrPU8raz49MT9FL3o6RSpNYXRoLnBvdygyLDEtaykpKno+PTImJihPKyssei89MiksTytrPj1MPyhSPTAsTz1MKTpPK2s+PTE/KFI9KGFlKnotMSkqTWF0aC5wb3coMixsZSksTys9ayk6KFI9YWUqTWF0aC5wb3coMixrLTEpKk1hdGgucG93KDIsbGUpLE89MCkpO2xlPj04'@;
put 'O0ZbeCtqXT0yNTUmUixqKz1WLFIvPTI1NixsZS09OCk7Zm9yKE89Tzw8bGV8UixLKz1sZTtLPjA7Rlt4K2pdPTI1NSZPLGorPVYsTy89MjU2LEstPTgpO0ZbeCtqLVZdfD0xMjgqQn19LDY2Njk4OmF0PT57YXQuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5j'@;
put 'dGlvbihGLGFlKXthZSYmKEYuc3VwZXJfPWFlLEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6RixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKEYsYWUpe2lmKGFlKXtGLnN1cGVy'@;
put 'Xz1hZTt2YXIgeD1mdW5jdGlvbigpe307eC5wcm90b3R5cGU9YWUucHJvdG90eXBlLEYucHJvdG90eXBlPW5ldyB4LEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUZ9fX0sNzU4Mjk6KGF0LExlLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2Njk4KSx4PUYoNjAzODApLG09Rig4NDMpLkJ1'@;
put 'ZmZlcixsZT1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIE0oKXt4LmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gTyhrLEUpe3JldHVybiBrPDxFfGs+Pj4zMi1FfWZ1'@;
put 'bmN0aW9uIFIoayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoRSZqfH5FJlYpK0IrWXwwLFgpK0V8MH1mdW5jdGlvbiB6KGssRSxqLFYsQixZLFgpe3JldHVybiBPKGsrKEUmVnxqJn5WKStCK1l8MCxYKStFfDB9ZnVuY3Rpb24gSyhrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhFXmpeVikr'@;
put 'QitZfDAsWCkrRXwwfWZ1bmN0aW9uIEwoayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoal4oRXx+VikpK0IrWXwwLFgpK0V8MH1hZShNLHgpLE0ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGs9bGUsRT0wO0U8MTY7KytFKWtbRV09dGhpcy5fYmxvY2sucmVhZEludDMy'@;
put 'TEUoNCpFKTt2YXIgaj10aGlzLl9hLFY9dGhpcy5fYixCPXRoaXMuX2MsWT10aGlzLl9kO2o9UihqLFYsQixZLGtbMF0sMzYxNDA5MDM2MCw3KSxZPVIoWSxqLFYsQixrWzFdLDM5MDU0MDI3MTAsMTIpLEI9UihCLFksaixWLGtbMl0sNjA2MTA1ODE5LDE3KSxWPVIoVixCLFksaixrWzNdLDMy'@;
put 'NTA0NDE5NjYsMjIpLGo9UihqLFYsQixZLGtbNF0sNDExODU0ODM5OSw3KSxZPVIoWSxqLFYsQixrWzVdLDEyMDAwODA0MjYsMTIpLEI9UihCLFksaixWLGtbNl0sMjgyMTczNTk1NSwxNyksVj1SKFYsQixZLGosa1s3XSw0MjQ5MjYxMzEzLDIyKSxqPVIoaixWLEIsWSxrWzhdLDE3NzAwMzU0'@;
put 'MTYsNyksWT1SKFksaixWLEIsa1s5XSwyMzM2NTUyODc5LDEyKSxCPVIoQixZLGosVixrWzEwXSw0Mjk0OTI1MjMzLDE3KSxWPVIoVixCLFksaixrWzExXSwyMzA0NTYzMTM0LDIyKSxqPVIoaixWLEIsWSxrWzEyXSwxODA0NjAzNjgyLDcpLFk9UihZLGosVixCLGtbMTNdLDQyNTQ2MjYxOTUs'@;
put 'MTIpLEI9UihCLFksaixWLGtbMTRdLDI3OTI5NjUwMDYsMTcpLGo9eihqLFY9UihWLEIsWSxqLGtbMTVdLDEyMzY1MzUzMjksMjIpLEIsWSxrWzFdLDQxMjkxNzA3ODYsNSksWT16KFksaixWLEIsa1s2XSwzMjI1NDY1NjY0LDkpLEI9eihCLFksaixWLGtbMTFdLDY0MzcxNzcxMywxNCksVj16'@;
put 'KFYsQixZLGosa1swXSwzOTIxMDY5OTk0LDIwKSxqPXooaixWLEIsWSxrWzVdLDM1OTM0MDg2MDUsNSksWT16KFksaixWLEIsa1sxMF0sMzgwMTYwODMsOSksQj16KEIsWSxqLFYsa1sxNV0sMzYzNDQ4ODk2MSwxNCksVj16KFYsQixZLGosa1s0XSwzODg5NDI5NDQ4LDIwKSxqPXooaixWLEIs'@;
put 'WSxrWzldLDU2ODQ0NjQzOCw1KSxZPXooWSxqLFYsQixrWzE0XSwzMjc1MTYzNjA2LDkpLEI9eihCLFksaixWLGtbM10sNDEwNzYwMzMzNSwxNCksVj16KFYsQixZLGosa1s4XSwxMTYzNTMxNTAxLDIwKSxqPXooaixWLEIsWSxrWzEzXSwyODUwMjg1ODI5LDUpLFk9eihZLGosVixCLGtbMl0s'@;
put 'NDI0MzU2MzUxMiw5KSxCPXooQixZLGosVixrWzddLDE3MzUzMjg0NzMsMTQpLGo9SyhqLFY9eihWLEIsWSxqLGtbMTJdLDIzNjgzNTk1NjIsMjApLEIsWSxrWzVdLDQyOTQ1ODg3MzgsNCksWT1LKFksaixWLEIsa1s4XSwyMjcyMzkyODMzLDExKSxCPUsoQixZLGosVixrWzExXSwxODM5MDMw'@;
put 'NTYyLDE2KSxWPUsoVixCLFksaixrWzE0XSw0MjU5NjU3NzQwLDIzKSxqPUsoaixWLEIsWSxrWzFdLDI3NjM5NzUyMzYsNCksWT1LKFksaixWLEIsa1s0XSwxMjcyODkzMzUzLDExKSxCPUsoQixZLGosVixrWzddLDQxMzk0Njk2NjQsMTYpLFY9SyhWLEIsWSxqLGtbMTBdLDMyMDAyMzY2NTYs'@;
put 'MjMpLGo9SyhqLFYsQixZLGtbMTNdLDY4MTI3OTE3NCw0KSxZPUsoWSxqLFYsQixrWzBdLDM5MzY0MzAwNzQsMTEpLEI9SyhCLFksaixWLGtbM10sMzU3MjQ0NTMxNywxNiksVj1LKFYsQixZLGosa1s2XSw3NjAyOTE4OSwyMyksaj1LKGosVixCLFksa1s5XSwzNjU0NjAyODA5LDQpLFk9SyhZ'@;
put 'LGosVixCLGtbMTJdLDM4NzMxNTE0NjEsMTEpLEI9SyhCLFksaixWLGtbMTVdLDUzMDc0MjUyMCwxNiksaj1MKGosVj1LKFYsQixZLGosa1syXSwzMjk5NjI4NjQ1LDIzKSxCLFksa1swXSw0MDk2MzM2NDUyLDYpLFk9TChZLGosVixCLGtbN10sMTEyNjg5MTQxNSwxMCksQj1MKEIsWSxqLFYs'@;
put 'a1sxNF0sMjg3ODYxMjM5MSwxNSksVj1MKFYsQixZLGosa1s1XSw0MjM3NTMzMjQxLDIxKSxqPUwoaixWLEIsWSxrWzEyXSwxNzAwNDg1NTcxLDYpLFk9TChZLGosVixCLGtbM10sMjM5OTk4MDY5MCwxMCksQj1MKEIsWSxqLFYsa1sxMF0sNDI5MzkxNTc3MywxNSksVj1MKFYsQixZLGosa1sx'@;
put 'XSwyMjQwMDQ0NDk3LDIxKSxqPUwoaixWLEIsWSxrWzhdLDE4NzMzMTMzNTksNiksWT1MKFksaixWLEIsa1sxNV0sNDI2NDM1NTU1MiwxMCksQj1MKEIsWSxqLFYsa1s2XSwyNzM0NzY4OTE2LDE1KSxWPUwoVixCLFksaixrWzEzXSwxMzA5MTUxNjQ5LDIxKSxqPUwoaixWLEIsWSxrWzRdLDQx'@;
put 'NDk0NDQyMjYsNiksWT1MKFksaixWLEIsa1sxMV0sMzE3NDc1NjkxNywxMCksQj1MKEIsWSxqLFYsa1syXSw3MTg3ODcyNTksMTUpLFY9TChWLEIsWSxqLGtbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK2p8MCx0aGlzLl9iPXRoaXMuX2IrVnwwLHRoaXMuX2M9dGhpcy5fYytC'@;
put 'fDAsdGhpcy5fZD10aGlzLl9kK1l8MH0sTS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBk'@;
put 'YXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMu'@;
put 'X3VwZGF0ZSgpO3ZhciBrPW0uYWxsb2NVbnNhZmUoMTYpO3JldHVybiBrLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLGsud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksay53cml0ZUludDMyTEUodGhpcy5fYyw4KSxrLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxrfSxhdC5leHBvcnRzPU19LDQ4'@;
put 'NjA2OihhdCxMZSxGKT0+e3ZhciBhZT1GKDYwMzAzKSx4PUYoNjAwODIpO2Z1bmN0aW9uIG0obGUpe3RoaXMucmFuZD1sZXx8bmV3IHguUmFuZH1hdC5leHBvcnRzPW0sbS5jcmVhdGU9ZnVuY3Rpb24oTSl7cmV0dXJuIG5ldyBtKE0pfSxtLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9u'@;
put 'KE0pe3ZhciBPPU0uYml0TGVuZ3RoKCksUj1NYXRoLmNlaWwoTy84KTtkb3t2YXIgej1uZXcgYWUodGhpcy5yYW5kLmdlbmVyYXRlKFIpKX13aGlsZSh6LmNtcChNKT49MCk7cmV0dXJuIHp9LG0ucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24oTSxPKXt2YXIgUj1PLnN1YihNKTtyZXR1'@;
put 'cm4gTS5hZGQodGhpcy5fcmFuZGJlbG93KFIpKX0sbS5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihNLE8sUil7dmFyIHo9TS5iaXRMZW5ndGgoKSxLPWFlLm1vbnQoTSksTD1uZXcgYWUoMSkudG9SZWQoSyk7T3x8KE89TWF0aC5tYXgoMSx6LzQ4fDApKTtmb3IodmFyIGs9TS5zdWJuKDEpLEU9'@;
put 'MDshay50ZXN0bihFKTtFKyspO2Zvcih2YXIgaj1NLnNocm4oRSksVj1rLnRvUmVkKEspO08+MDtPLS0pe3ZhciBZPXRoaXMuX3JhbmRyYW5nZShuZXcgYWUoMiksayk7UiYmUihZKTt2YXIgWD1ZLnRvUmVkKEspLnJlZFBvdyhqKTtpZigwIT09WC5jbXAoTCkmJjAhPT1YLmNtcChWKSl7Zm9y'@;
put 'KHZhciBVPTE7VTxFO1UrKyl7aWYoMD09PShYPVgucmVkU3FyKCkpLmNtcChMKSlyZXR1cm4hMTtpZigwPT09WC5jbXAoVikpYnJlYWt9aWYoVT09PUUpcmV0dXJuITF9fXJldHVybiEwfSxtLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKE0sTyl7dmFyIFI9TS5iaXRMZW5ndGgoKSx6'@;
put 'PWFlLm1vbnQoTSksSz1uZXcgYWUoMSkudG9SZWQoeik7T3x8KE89TWF0aC5tYXgoMSxSLzQ4fDApKTtmb3IodmFyIEw9TS5zdWJuKDEpLGs9MDshTC50ZXN0bihrKTtrKyspO2Zvcih2YXIgRT1NLnNocm4oayksaj1MLnRvUmVkKHopO08+MDtPLS0pe3ZhciBWPXRoaXMuX3JhbmRyYW5nZShu'@;
put 'ZXcgYWUoMiksTCksQj1NLmdjZChWKTtpZigwIT09Qi5jbXBuKDEpKXJldHVybiBCO3ZhciBZPVYudG9SZWQoeikucmVkUG93KEUpO2lmKDAhPT1ZLmNtcChLKSYmMCE9PVkuY21wKGopKXtmb3IodmFyIFg9MTtYPGs7WCsrKXtpZigwPT09KFk9WS5yZWRTcXIoKSkuY21wKEspKXJldHVybiBZ'@;
put 'LmZyb21SZWQoKS5zdWJuKDEpLmdjZChNKTtpZigwPT09WS5jbXAoaikpYnJlYWt9aWYoWD09PWspcmV0dXJuKFk9WS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKE0pfX1yZXR1cm4hMX19LDYwMzAzOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmlj'@;
put 'dCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUu'@;
put 'Y29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9p'@;
put 'bml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig1NjYxOSku'@;
put 'QnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0'@;
put 'KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5j'@;
put 'dGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXko'@;
put 'YixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixO'@;
put 'LEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29y'@;
put 'ZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2'@;
put 'NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJu'@;
put 'IHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigi'@;
put 'YmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJs'@;
put 'ZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0'@;
put 'cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3Zh'@;
put 'ciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9E'@;
put 'KzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndv'@;
put 'cmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0'@;
put 'aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNb'@;
put 'MF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5s'@;
put 'ZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3Ro'@;
put 'PGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxN'@;
put 'LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikr'@;
put 'dGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2'@;
put 'OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVu'@;
put 'Y3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4'@;
put 'NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2Rl'@;
put 'XSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwx'@;
put 'MCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0xbNi12'@;
put 'Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIg'@;
put 'cD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6TFtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8o'@;
put 'KSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1sw'@;
put 'XTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5'@;
put 'IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1'@;
put 'IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1I'@;
put 'fHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7'@;
put 'Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAt'@;
put 'MV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+'@;
put 'PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8'@;
put 'fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90'@;
put 'eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5i'@;
put 'eXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3Rv'@;
put 'dHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0'@;
put 'aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5u'@;
put 'ZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndv'@;
put 'cmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3Rv'@;
put 'dHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVh'@;
put 'bmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05d'@;
put 'Xkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2'@;
put 'ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBh'@;
put 'bmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53'@;
put 'b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRo'@;
put 'aXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6'@;
put 'KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9'@;
put 'KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJu'@;
put 'IHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhp'@;
put 'cy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0'@;
put 'aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5j'@;
put 'bXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNb'@;
put 'U10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7Uysr'@;
put 'KXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yihi'@;
put 'KX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxJZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9'@;
put 'MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxRZT0wfE5bNF0sbHQ9ODE5MSZRZSxQZT1RZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4'@;
put 'XSxvdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49'@;
put 'ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sTHQ9bW4+Pj4xMyxRdD0wfGdbNl0sRHQ9ODE5MSZRdCxwdD1RdD4+PjEzLFl0PTB8Z1s3XSxMbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEm'@;
put 'eW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBGbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVs'@;
put 'KGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhGbj4+PjI2KXwwLEZuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoSWUsQ24pfDAsdz1NYXRoLmltdWwoSWUsVXQpO3ZhciBu'@;
put 'aT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1h'@;
put 'dGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKEllLFduKXwwLHc9dytNYXRoLmltdWwoSWUsZW4p'@;
put 'fDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11'@;
put 'bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChJZSxIbil8MCx3PXcrTWF0aC5pbXVsKEllLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAs'@;
put 'dz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRo'@;
put 'LmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChJZSxobil8MCx3PXcrTWF0aC5pbXVsKEllLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwo'@;
put 'QWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKEllLF90KXwwLHc9dytNYXRoLmltdWwoSWUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTHQpfDApK01hdGguaW11'@;
put 'bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxMdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCks'@;
put 'dj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRo'@;
put 'LmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTHQpfDApK01hdGguaW11bChJZSxydCl8MCx3PXcrTWF0aC5pbXVsKEllLEx0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwo'@;
put 'TWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEx0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11'@;
put 'bChqZSxMdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChJZSxEdCl8MCx3PXcrTWF0aC5pbXVsKEllLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxMbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KG5lLHp0KXwwKStNYXRoLmltdWwoZGUsTG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChvdCxDbikscD0ocD1NYXRoLmltdWwob3QsVXQpKStNYXRoLmltdWwodXQsQ24pfDAs'@;
put 'dz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRo'@;
put 'LmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEx0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxMdCl8MCx2PXYrTWF0aC5pbXVsKE9l'@;
put 'LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsTG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKEllLExuKXwwLHc9dytNYXRoLmltdWwoSWUsenQp'@;
put 'fDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChvdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11'@;
put 'bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVl'@;
put 'LGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQs'@;
put 'THQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEx0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxMbil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsTG4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChJZSx4bil8MCx3PXcrTWF0aC5pbXVsKEllLHNuKXwwO3ZhciBu'@;
put 'bz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1h'@;
put 'dGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwob3QsSG4pfDAscD0ocD1wK01hdGguaW11bChvdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQp'@;
put 'fDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxMdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsTHQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStN'@;
put 'YXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxMbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01h'@;
put 'dGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChJZSxSbil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChJZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChvdCxobil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKG90LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditN'@;
put 'YXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxMdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsTHQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGgu'@;
put 'aW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxMbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVs'@;
put 'KFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+'@;
put 'Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChvdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LE50KXwwKStN'@;
put 'YXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTHQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEx0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsTG4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUs'@;
put 'Um4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditN'@;
put 'YXRoLmltdWwob3QscnQpfDAscD0ocD1wK01hdGguaW11bChvdCxMdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsTHQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGgu'@;
put 'aW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxMbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVs'@;
put 'KFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+'@;
put 'Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxMdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxMdCksdj12K01hdGguaW11bChvdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LHB0KXwwKStN'@;
put 'YXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxMbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01h'@;
put 'dGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChvdCxMbil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKG90LHp0KXwwKStNYXRoLmltdWwodXQsTG4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBp'@;
put 'bz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1h'@;
put 'dGguaW11bChIdCxMbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsTG4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwob3QseG4pfDAscD0ocD1wK01hdGguaW11bChvdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24p'@;
put 'fDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4'@;
put 'ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKG90LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11'@;
put 'bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJu'@;
put 'KXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1GbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEw'@;
put 'XT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcs'@;
put 'Yil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxi'@;
put 'LEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0'@;
put 'aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSso'@;
put 'ZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9'@;
put 'bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9'@;
put 'MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixE'@;
put 'LEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUr'@;
put 'Kyl7dmFyIHhlPUhbSitmZV0sSWU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUllK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109SWUtT2UsZmUhPT12JiYoamU9cCpu'@;
put 'ZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1'@;
put 'bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZh'@;
put 'ciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihi'@;
put 'LEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24o'@;
put 'Yil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiks'@;
put 'Uz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQx'@;
put 'M2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpb'@;
put 'ZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVu'@;
put 'Z3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3Zh'@;
put 'ciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlv'@;
put 'bihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRo'@;
put 'aXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0w'@;
put 'O0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsr'@;
put 'TjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1E'@;
put 'KS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1D'@;
put 'LHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUu'@;
put 'aXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0'@;
put 'aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3Ro'@;
put 'PkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFy'@;
put 'IEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90'@;
put 'eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0'@;
put 'bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYm'@;
put 'Yj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgp'@;
put 'LDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24o'@;
put 'Yil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0'@;
put 'aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jk'@;
put 'c1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJu'@;
put 'PWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMu'@;
put 'd29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0'@;
put 'LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90'@;
put 'b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5k'@;
put 'KGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7'@;
put 'Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29y'@;
put 'ZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShI'@;
put 'PTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxl'@;
put 'bmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQq'@;
put 'KDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUp'@;
put 'LE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7'@;
put 'cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9'@;
put 'Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRo'@;
put 'aXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTww'@;
put 'P3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0p'@;
put 'LG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0'@;
put 'aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkp'@;
put 'cmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2'@;
put 'LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0'@;
put 'aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFy'@;
put 'IE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTsh'@;
put 'KEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBd'@;
put 'JmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5p'@;
put 'c3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0w'@;
put 'IT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQu'@;
put 'aXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtE'@;
put 'LmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMo'@;
put 'KTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9y'@;
put 'KDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90'@;
put 'b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRz'@;
put 'WzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJu'@;
put 'IHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMu'@;
put 'd29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpO'@;
put 'PGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIg'@;
put 'RD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVu'@;
put 'Z3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUu'@;
put 'Z3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3Jl'@;
put 'dHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnBy'@;
put 'b3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJl'@;
put 'ZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJl'@;
put 'ZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlz'@;
put 'LGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5j'@;
put 'dGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo'@;
put 'aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5p'@;
put 'bnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxi'@;
put 'KXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAx'@;
put 'Iil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiks'@;
put 'dGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNo'@;
put 'aWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9'@;
put 'dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97'@;
put 'dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4w'@;
put 'P0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9'@;
put 'LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAs'@;
put 'dm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0'@;
put 'aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTti'@;
put 'LndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUp'@;
put 'LGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQp'@;
put 'LGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJv'@;
put 'cigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJv'@;
put 'KCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlz'@;
put 'KX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3Zh'@;
put 'ciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlz'@;
put 'Lm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0s'@;
put 'dWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24o'@;
put 'Yil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7'@;
put 'cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3Vibigx'@;
put 'KS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10'@;
put 'aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIEllPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKEllKSx3PUllLnJlZFNx'@;
put 'cigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUu'@;
put 'cHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIg'@;
put 'Zz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5l'@;
put 'PXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9u'@;
put 'KGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUo'@;
put 'Y2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9'@;
put 'bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5z'@;
put 'aGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVu'@;
put 'Y3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5p'@;
put 'dXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9p'@;
put 'bnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw1Nzc5ODphdD0+e2Z1bmN0aW9uIExlKEYsYWUpe2lmKCFGKXRocm93IG5ldyBFcnJvcihhZXx8IkFzc2VydGlvbiBmYWlsZWQiKX1hdC5leHBvcnRzPUxlLExlLmVxdWFsPWZ1'@;
put 'bmN0aW9uKGFlLHgsbSl7aWYoYWUhPXgpdGhyb3cgbmV3IEVycm9yKG18fCJBc3NlcnRpb24gZmFpbGVkOiAiK2FlKyIgIT0gIit4KX19LDc4MjQ3OihhdCxMZSk9PnsidXNlIHN0cmljdCI7dmFyIEY9TGU7ZnVuY3Rpb24geChsZSl7cmV0dXJuIDE9PT1sZS5sZW5ndGg/IjAiK2xlOmxlfWZ1'@;
put 'bmN0aW9uIG0obGUpe2Zvcih2YXIgTT0iIixPPTA7TzxsZS5sZW5ndGg7TysrKU0rPXgobGVbT10udG9TdHJpbmcoMTYpKTtyZXR1cm4gTX1GLnRvQXJyYXk9ZnVuY3Rpb24gYWUobGUsTSl7aWYoQXJyYXkuaXNBcnJheShsZSkpcmV0dXJuIGxlLnNsaWNlKCk7aWYoIWxlKXJldHVybltdO3Zh'@;
put 'ciBPPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgbGUpe2Zvcih2YXIgUj0wO1I8bGUubGVuZ3RoO1IrKylPW1JdPTB8bGVbUl07cmV0dXJuIE99aWYoImhleCI9PT1NKWZvcigobGU9bGUucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYobGU9IjAiK2xlKSxSPTA7Ujxs'@;
put 'ZS5sZW5ndGg7Uis9MilPLnB1c2gocGFyc2VJbnQobGVbUl0rbGVbUisxXSwxNikpO2Vsc2UgZm9yKFI9MDtSPGxlLmxlbmd0aDtSKyspe3ZhciB6PWxlLmNoYXJDb2RlQXQoUiksSz16Pj44LEw9MjU1Jno7Sz9PLnB1c2goSyxMKTpPLnB1c2goTCl9cmV0dXJuIE99LEYuemVybzI9eCxGLnRv'@;
put 'SGV4PW0sRi5lbmNvZGU9ZnVuY3Rpb24oTSxPKXtyZXR1cm4iaGV4Ij09PU8/bShNKTpNfX0sODMyNzQ6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0Fwcmls'@;
put 'X01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNvbmRhZ19N'@;
put 'YWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dvX0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1l'@;
put 'cmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXm5tJC9pLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/TT8idm0iOiJWTSI6TT8ibm0iOiJOTSJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi'@;
put 'LEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5leHREYXk6IltNXHhmNHJlIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQg'@;
put 'W29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFhc10gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIsczoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29uZGVzIixt'@;
put 'OiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVyZSIsZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVkIG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxk'@;
put 'ZSkvLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG0rKDE9PT1tfHw4PT09bXx8bT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDYxODY3OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PWZ1bmN0aW9u'@;
put 'KFIpe3JldHVybiAwPT09Uj8wOjE9PT1SPzE6Mj09PVI/MjpSJTEwMD49MyYmUiUxMDA8PTEwPzM6UiUxMDA+PTExPzQ6NX0sbT17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUw'@;
put 'NjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2Iiwi'@;
put 'JWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQy'@;
put 'XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQy'@;
put 'IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1'@;
put 'MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUw'@;
put 'NjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVc'@;
put 'dTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2'@;
put 'NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3'@;
put 'XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIs'@;
put 'WyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19'@;
put 'LGxlPWZ1bmN0aW9uKFIpe3JldHVybiBmdW5jdGlvbih6LEssTCxrKXt2YXIgRT14KHopLGo9bVtSXVt4KHopXTtyZXR1cm4gMj09PUUmJihqPWpbSz8wOjFdKSxqLnJlcGxhY2UoLyVkL2kseil9fSxNPVsiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhIiwiXHUwNjQxXHUwNjRhXHUw'@;
put 'NjQxXHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5Iiwi'@;
put 'XHUwNjIzXHUwNjQ4XHUwNjJhIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUw'@;
put 'NjI4XHUwNjMxIl07YWUuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczpNLG1vbnRoc1Nob3J0Ok0sd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUw'@;
put 'NjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1'@;
put 'MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2'@;
put 'MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5'@;
put 'c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFy'@;
put 'c2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oUil7cmV0dXJuIlx1MDY0NSI9PT1SfSxtZXJpZGllbTpmdW5jdGlvbihSLHosSyl7cmV0dXJuIFI8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1'@;
put 'MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2Vlazoi'@;
put 'ZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVr'@;
put 'OiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6bGUoInMi'@;
put 'KSxzczpsZSgicyIpLG06bGUoIm0iKSxtbTpsZSgibSIpLGg6bGUoImgiKSxoaDpsZSgiaCIpLGQ6bGUoImQiKSxkZDpsZSgiZCIpLE06bGUoIk0iKSxNTTpsZSgiTSIpLHk6bGUoInkiKSx5eTpsZSgieSIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoLywvZywi'@;
put 'XHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo0fX0pfShGKDE2Njc2KSl9LDE3MDc4OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYXIta3ciLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFc'@;
put 'dTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0'@;
put 'OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgi'@;
put 'XyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0'@;
put 'YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUw'@;
put 'NjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2'@;
put 'NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUw'@;
put 'NjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYy'@;
put 'MV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'UGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1'@;
put 'MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUw'@;
put 'NjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2Mjdc'@;
put 'dTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2'@;
put 'XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUw'@;
put 'NjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYz'@;
put 'MSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfShGKDE2Njc2KSl9LDc3Nzc2OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiIxIiwy'@;
put 'OiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0sbT1mdW5jdGlvbih6KXtyZXR1cm4gMD09PXo/MDoxPT09ej8xOjI9PT16PzI6eiUxMDA+PTMmJnolMTAwPD0xMD8zOnolMTAwPj0xMT80OjV9LGxlPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1'@;
put 'MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYy'@;
put 'N1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0'@;
put 'NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1'@;
put 'MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1'@;
put 'MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0'@;
put 'YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJc'@;
put 'dTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVc'@;
put 'dTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYy'@;
put 'N1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBc'@;
put 'dTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2'@;
put 'NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sTT1mdW5jdGlvbih6KXtyZXR1cm4gZnVuY3Rpb24oSyxMLGssRSl7dmFyIGo9bShLKSxWPWxlW3pdW20oSyldO3JldHVybiAyPT09aiYmKFY9VltMPzA6MV0pLFYucmVwbGFj'@;
put 'ZSgvJWQvaSxLKX19LE89WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2'@;
put 'NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2'@;
put 'MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyLWx5Iix7bW9udGhzOk8sbW9udGhzU2hvcnQ6Tyx3ZWVrZGF5czoiXHUwNjI3'@;
put 'XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIx'@;
put 'X1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJc'@;
put 'dTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3Bs'@;
put 'aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBm'@;
put 'WVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih6KXtyZXR1cm4iXHUwNjQ1Ij09PXp9LG1lcmlkaWVtOmZ1bmN0aW9uKHos'@;
put 'SyxMKXtyZXR1cm4gejwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2Fc'@;
put 'dTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToi'@;
put 'W1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxz'@;
put 'ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpNKCJzIiksc3M6TSgicyIpLG06TSgibSIpLG1tOk0oIm0iKSxoOk0oImgiKSxoaDpNKCJoIiksZDpNKCJkIiksZGQ6TSgiZCIpLE06TSgiTSIp'@;
put 'LE1NOk0oIk0iKSx5Ok0oInkiKSx5eTpNKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKHope3JldHVybiB6LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihLKXtyZXR1cm4geFtLXX0pLnJlcGxhY2Uo'@;
put 'LywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSw1Njc4OTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFyLW1hIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFf'@;
put 'XHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2'@;
put 'NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIu'@;
put 'c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0'@;
put 'YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1'@;
put 'MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUw'@;
put 'NjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1'@;
put 'MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2'@;
put 'MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3'@;
put 'ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVE'@;
put 'YXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1'@;
put 'MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMz'@;
put 'XHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0'@;
put 'NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1'@;
put 'MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2'@;
put 'NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDY4OTc6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6'@;
put 'Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0Iiwi'@;
put 'XHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYy'@;
put 'N1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1'@;
put 'MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2Mjhc'@;
put 'dTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2'@;
put 'MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1'@;
put 'MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUw'@;
put 'NjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1'@;
put 'MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2'@;
put 'MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2'@;
put 'MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRk'@;
put 'ZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDY0NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb'@;
put 'XHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2Mjdc'@;
put 'dTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYy'@;
put 'N1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2'@;
put 'NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNc'@;
put 'dTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUw'@;
put 'NjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUw'@;
put 'NjYwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAs'@;
put 'ZG95OjZ9fSl9KEYoMTY2NzYpKX0sNzE1ODU6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhci10biIse21vbnRoczoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0'@;
put 'YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNc'@;
put 'dTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6'@;
put 'Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1'@;
put 'MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFf'@;
put 'XHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1'@;
put 'MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2Mjhc'@;
put 'dTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1'@;
put 'MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0'@;
put 'OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0'@;
put 'XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2Mjld'@;
put 'IExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy'@;
put 'OV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMi'@;
put 'LHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2Mzlc'@;
put 'dTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2'@;
put 'MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyMjA5NzpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2'@;
put 'NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUw'@;
put 'NjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxsZT1mdW5jdGlvbihLKXtyZXR1cm4gMD09PUs/MDoxPT09Sz8xOjI9PT1LPzI6SyUxMDA+PTMmJkslMTAwPD0xMD8zOkslMTAwPj0xMT80OjV9LE09e3M6WyJcdTA2MjNcdTA2NDJc'@;
put 'dTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUw'@;
put 'NjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2'@;
put 'NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJm'@;
put 'XHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJc'@;
put 'dTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUw'@;
put 'NjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1'@;
put 'MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0'@;
put 'OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUw'@;
put 'NjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1'@;
put 'XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1'@;
put 'MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxPPWZ1bmN0aW9uKEspe3JldHVybiBmdW5jdGlvbihMLGssRSxqKXt2YXIgVj1sZShMKSxCPU1bS11bbGUoTCldO3JldHVybiAyPT09ViYmKEI9QltrPzA6MV0p'@;
put 'LEIucmVwbGFjZSgvJWQvaSxMKX19LFI9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVc'@;
put 'dTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNc'@;
put 'dTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyIix7bW9udGhzOlIsbW9udGhzU2hvcnQ6Uix3ZWVrZGF5czoi'@;
put 'XHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3'@;
put 'XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVc'@;
put 'dTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYy'@;
put 'YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0v'@;
put 'XHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihLKXtyZXR1cm4iXHUwNjQ1Ij09PUt9LG1lcmlkaWVtOmZ1bmN0'@;
put 'aW9uKEssTCxrKXtyZXR1cm4gSzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6Iltc'@;
put 'dTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFz'@;
put 'dERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixz'@;
put 'YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpPKCJzIiksc3M6TygicyIpLG06TygibSIpLG1tOk8oIm0iKSxoOk8oImgiKSxoaDpPKCJoIiksZDpPKCJkIiksZGQ6TygiZCIpLE06'@;
put 'TygiTSIpLE1NOk8oIk0iKSx5Ok8oInkiKSx5eTpPKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKEspe3JldHVybiBLLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oTCl7cmV0dXJuIG1bTF19'@;
put 'KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEspe3JldHVybiBLLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTCl7cmV0dXJuIHhbTF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sMTU2MTE6ZnVu'@;
put 'Y3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoiLW5jaSIsNTA6Ii1uY2kiLDM6Ii1ceGZjbmNceGZjIiw0OiItXHhmY25j'@;
put 'XHhmYyIsMTAwOiItXHhmY25jXHhmYyIsNjoiLW5jXHUwMTMxIiw5OiItdW5jdSIsMTA6Ii11bmN1IiwzMDoiLXVuY3UiLDYwOiItXHUwMTMxbmNcdTAxMzEiLDkwOiItXHUwMTMxbmNcdTAxMzEifTthZS5kZWZpbmVMb2NhbGUoImF6Iix7bW9udGhzOiJ5YW52YXJfZmV2cmFsX21hcnRfYXBy'@;
put 'ZWxfbWF5X2l5dW5faXl1bF9hdnF1c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQmF6YXJfQmF6YXIgZXJ0'@;
put 'XHUwMjU5c2lfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTlfQ1x4ZmNtXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfQ1x4ZmNtXHUwMjU5X1x1MDE1ZVx1MDI1OW5iXHUwMjU5Ii5zcGxpdCgiXyIp'@;
put 'LHdlZWtkYXlzU2hvcnQ6IkJhel9CekVfXHhjN0F4X1x4YzdcdTAyNTlyX0NBeF9DXHhmY21fXHUwMTVlXHUwMjU5biIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQnpfQkVfXHhjN0FfXHhjN1x1MDI1OV9DQV9DXHhmY19cdTAxNWVcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4'@;
put 'YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNu'@;
put 'IHNhYXRdIExUIixuZXh0RGF5OiJbc2FiYWggc2FhdF0gTFQiLG5leHRXZWVrOiJbZ1x1MDI1OWxcdTAyNTluIGhcdTAyNTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltkXHhmY25cdTAyNTluXSBMVCIsbGFzdFdlZWs6IltrZVx4ZTdcdTAyNTluIGhcdTAyNTlmdFx1MDI1'@;
put 'OV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBcdTAyNTl2dlx1MDI1OWwiLHM6ImJpciBuZVx4ZTdcdTAyNTkgc2FuaXlcdTAyNTkiLHNzOiIlZCBzYW5peVx1MDI1OSIsbToiYmlyIGRcdTAyNTlxaXFcdTAy'@;
put 'NTkiLG1tOiIlZCBkXHUwMjU5cWlxXHUwMjU5IixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgaWwiLHl5OiIlZCBpbCJ9LG1lcmlkaWVtUGFyc2U6L2dlY1x1MDI1OXxzXHUwMjU5aFx1'@;
put 'MDI1OXJ8Z1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0vLGlzUE06ZnVuY3Rpb24obGUpe3JldHVybi9eKGdceGZjbmRceGZjenxheFx1MDE1ZmFtKSQvLnRlc3QobGUpfSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJnZWNcdTAyNTkiOmxlPDEyPyJzXHUwMjU5aFx1MDI1'@;
put 'OXIiOmxlPDE3PyJnXHhmY25kXHhmY3oiOiJheFx1MDE1ZmFtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwMTMxbmNcdTAxMzF8aW5jaXxuY2l8XHhmY25jXHhmY3xuY1x1MDEzMXx1bmN1KS8sb3JkaW5hbDpmdW5jdGlvbihsZSl7aWYoMD09PWxlKXJldHVybiBsZSsi'@;
put 'LVx1MDEzMW5jXHUwMTMxIjt2YXIgTT1sZSUxMDtyZXR1cm4gbGUrKHhbTV18fHhbbGUlMTAwLU1dfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjI0NTk6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7'@;
put 'ZnVuY3Rpb24gbShNLE8sUil7cmV0dXJuIm0iPT09Uj9PPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NDMiOiJoIj09PVI/Tz8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2'@;
put 'XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzIjpNKyIgIitmdW5jdGlvbiB4KE0sTyl7dmFyIFI9TS5zcGxpdCgiXyIpO3JldHVybiBPJTEwPT0xJiZPJTEwMCE9MTE/UlswXTpPJTEwPj0yJiZPJTEwPD00JiYoTyUxMDA8MTB8fE8lMTAw'@;
put 'Pj0yMCk/UlsxXTpSWzJdfSh7c3M6Tz8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0'@;
put 'M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Tz8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQ0NVx1'@;
put 'MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0'@;
put 'NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCIsaGg6Tz8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiOiJc'@;
put 'dTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRc'@;
put 'dTA0M2RcdTA0NTZfXHUwNDM0XHUwNDM3XHUwNDUxXHUwNDNkIixNTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ0Yl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBcdTA0NWUiLHl5OiJcdTA0MzNc'@;
put 'dTA0M2VcdTA0MzRfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzZVx1MDQ1ZSJ9W1JdLCtNKX1hZS5kZWZpbmVMb2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9c'@;
put 'dTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVc'@;
put 'dTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNk'@;
put 'XHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRm'@;
put 'Ii5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0'@;
put 'MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0'@;
put 'NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0'@;
put 'MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQw'@;
put 'XHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1'@;
put 'MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1'@;
put 'MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNf'@;
put 'XHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2Ff'@;
put 'XHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0'@;
put 'MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUw'@;
put 'NDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0'@;
put 'M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1N'@;
put 'TSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0M2RcdTA0M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1'@;
put 'MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA0MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2Vlazpm'@;
put 'dW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0NWVdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1'@;
put 'MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6'@;
put 'Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG0sbW06bSxoOm0saGg6bSxkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOm0sTToiXHUwNDNjXHUwNDM1XHUwNDQx'@;
put 'XHUwNDRmXHUwNDQ2IixNTTptLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6bX0sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRifFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YnxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUw'@;
put 'NDMwXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzApJC8udGVzdChNKX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0'@;
put 'N1x1MDQ0YiI6TTwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRiIjpNPDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NTZ8XHUwNDRi'@;
put 'fFx1MDQzM1x1MDQzMCkvLG9yZGluYWw6ZnVuY3Rpb24oTSxPKXtzd2l0Y2goTyl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIE0lMTAhPTImJk0lMTAhPTN8fE0lMTAwPT0xMnx8TSUxMDA9PTEzP00rIi1cdTA0NGIiOk0rIi1cdTA0NTYiO2Nhc2Ui'@;
put 'RCI6cmV0dXJuIE0rIi1cdTA0MzNcdTA0MzAiO2RlZmF1bHQ6cmV0dXJuIE19fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw5MTgyNTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImJnIix7bW9udGhzOiJcdTA0'@;
put 'NGZcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1'@;
put 'MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBc'@;
put 'dTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDQzX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0'@;
put 'M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQz'@;
put 'NV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQw'@;
put 'XHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQ0Zlx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NGFcdTA0NDBcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQ0MVx1MDQ0YVx1MDQzMVx1MDQzZVx1MDQ0'@;
put 'Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0NGZfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0NGFcdTA0'@;
put 'MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDpt'@;
put 'bTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE0XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMl0gTFQiLG5leHREYXk6IltcdTA0MjNc'@;
put 'dTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzMl0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpj'@;
put 'YXNlIDY6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzOFx1MDQ0Zl0gZGRk'@;
put 'ZCBbXHUwNDMyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzQgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOCAlcyIsczoiXHUwNDNkXHUwNDRmXHUwNDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUw'@;
put 'NDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNk'@;
put 'XHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1MDQzZFx1MDQzMCIsdzoiXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4'@;
put 'XHUwNDQ2XHUwNDMwIix3dzoiJWQgXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDM4IixNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLHk6Ilx1MDQzM1x1MDQzZVx1MDQz'@;
put 'NFx1MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8'@;
put 'XHUwNDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMCxNPW0lMTAwO3JldHVybiAwPT09bT9tKyItXHUwNDM1XHUwNDMyIjowPT09TT9tKyItXHUwNDM1XHUwNDNkIjpNPjEwJiZNPDIwP20rIi1cdTA0NDJcdTA0MzgiOjE9PT1sZT9tKyItXHUwNDMyXHUwNDM4Ijoy'@;
put 'PT09bGU/bSsiLVx1MDQ0MFx1MDQzOCI6Nz09PWxlfHw4PT09bGU/bSsiLVx1MDQzY1x1MDQzOCI6bSsiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDc1OTE4OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRl'@;
put 'ZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1Ym5rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0YnVydWthbG9fTm93'@;
put 'YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9Bd2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVidF9cdTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1Ym5fVGFyYXRhX0Fy'@;
put 'YWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiS2FyX050XHUwMjViX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6'@;
put 'bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1'@;
put 'MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dERheToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1YnJcdTAyNWJdIExU'@;
put 'IixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJcdTAyNWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBrXHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEgZGFtYSIsc3M6InNl'@;
put 'a29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoibFx1MDI1YnJcdTAyNWIga2VsZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoidGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4iLHl5OiJz'@;
put 'YW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0OTY4MzpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIs'@;
put 'NzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sbT17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIs'@;
put 'Ilx1MDllNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImJuLWJkIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1'@;
put 'MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDlj'@;
put 'N1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlh'@;
put 'ZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUw'@;
put 'OWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNi'@;
put 'X1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3'@;
put 'XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFj'@;
put 'XHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdf'@;
put 'XHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUw'@;
put 'OWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5'@;
put 'YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlh'@;
put 'ZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDli'@;
put 'ZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBc'@;
put 'dTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5'@;
put 'YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgi'@;
put 'LE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNl'@;
put 'KC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0p'@;
put 'fSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWFkXHUwOWNiXHUwOWIwfFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliOFx1MDlhOFx1MDljZFx1MDlh'@;
put 'N1x1MDljZFx1MDlhZlx1MDliZXxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09Tz9NPDQ/TTpNKzEyOiJcdTA5YWRcdTA5Y2JcdTA5YjAiPT09T3x8Ilx1MDliOFx1MDk5NVx1'@;
put 'MDliZVx1MDliMiI9PT1PP006Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1PP00+PTM/TTpNKzEyOiJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09T3x8Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI9PT1PP00rMTI6dm9pZCAw'@;
put 'fSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwOWIwXHUwOWJlXHUwOWE0IjpNPDY/Ilx1MDlhZFx1MDljYlx1MDliMCI6TTwxMj8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjpNPDE1PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOk08MTg/Ilx1MDlh'@;
put 'Y1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6TTwyMD8iXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMzQwNjU6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9u'@;
put 'KGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LG09eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIs'@;
put 'Ilx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRm'@;
put 'XHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5'@;
put 'OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUw'@;
put 'OWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJc'@;
put 'dTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5'@;
put 'ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5'@;
put 'YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUw'@;
put 'OWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi'@;
put 'XHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5'@;
put 'YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDlj'@;
put 'MVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIs'@;
put 'TExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVc'@;
put 'dTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm'@;
put 'dXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUw'@;
put 'OWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4'@;
put 'XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5'@;
put 'OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihP'@;
put 'KXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5'@;
put 'YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1PJiZNPj00fHwiXHUwOWE2XHUwOWMxXHUwOWFh'@;
put 'XHUwOWMxXHUwOWIwIj09PU8mJk08NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1PP00rMTI6TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6TTwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjpNPDE3PyJc'@;
put 'dTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOk08MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDExMDM0OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIsOToiXHUwZjI5IiwwOiJcdTBmMjAifSxtPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMi'@;
put 'OiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiYm8iLHttb250aHM6Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1'@;
put 'MGY0NFx1MGYwYlx1MGY1NFx1MGY3Y19cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjY2XHUwZjc0XHUwZjU4XHUwZjBiXHUwZjU0X1x1MGY1Zlx1'@;
put 'MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1ZVx1MGY3Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNjNcdTBmOTRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZmIyXHUwZjc0XHUwZjQyXHUw'@;
put 'ZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNjJcdTBmOTJcdTBmYjFcdTBmNTFcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUw'@;
put 'ZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQyXHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBm'@;
put 'NDJcdTBmNDVcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBmNWZcdTBmYjNcdTBm'@;
put 'MGIxX1x1MGY1Zlx1MGZiM1x1MGYwYjJfXHUwZjVmXHUwZmIzXHUwZjBiM19cdTBmNWZcdTBmYjNcdTBmMGI0X1x1MGY1Zlx1MGZiM1x1MGYwYjVfXHUwZjVmXHUwZmIzXHUwZjBiNl9cdTBmNWZcdTBmYjNcdTBmMGI3X1x1MGY1Zlx1MGZiM1x1MGYwYjhfXHUwZjVmXHUwZmIzXHUwZjBiOV9c'@;
put 'dTBmNWZcdTBmYjNcdTBmMGIxMF9cdTBmNWZcdTBmYjNcdTBmMGIxMV9cdTBmNWZcdTBmYjNcdTBmMGIxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MGY1Zlx1MGZiM1x1MGYwYlxkezEsMn0pLyxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBmNDJcdTBmNWZc'@;
put 'dTBmNjBcdTBmMGJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1'@;
put 'MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NFx1MGYwYlx1'@;
put 'MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY1Zlx1MGZiM1x1MGYw'@;
put 'Ylx1MGY1Nlx1MGYwYl9cdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNTRcdTBmMGJcdTBmNjZcdTBmNDRcdTBm'@;
put 'NjZcdTBmMGJfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBmNDlcdTBmNzJfXHUwZjVmXHUwZmIzX1x1MGY1OFx1MGY3Mlx1MGY0Ml9cdTBmNjNcdTBmYjdcdTBmNDJfXHUwZjU1XHUwZjc0XHUwZjYyX1x1MGY2'@;
put 'Nlx1MGY0NFx1MGY2Nl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwg'@;
put 'RCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZjUxXHUwZjcyXHUwZjBiXHUwZjYyXHUwZjcyXHUwZjQ0XSBMVCIsbmV4dERheToiW1x1MGY2Nlx1MGY0NFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGY1M10gTFQiLG5leHRXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0'@;
put 'XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjYyXHUwZjk3XHUwZjdhXHUwZjY2XHUwZjBiXHUwZjU4XSwgTFQiLGxhc3REYXk6IltcdTBmNDFcdTBmMGJcdTBmNjZcdTBmNDRdIExUIixsYXN0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1'@;
put 'NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY1OFx1MGY1MFx1MGY2MFx1MGYwYlx1MGY1OF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGY2M1x1MGYwYiIscGFzdDoiJXMgXHUwZjY2XHUwZjk0XHUwZjUzXHUwZjBiXHUwZjYzIixzOiJcdTBmNjNc'@;
put 'dTBmNThcdTBmMGJcdTBmNjZcdTBmNDQiLHNzOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNDZcdTBmMGQiLG06Ilx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsbW06IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYw'@;
put 'Ylx1MGY1OCIsaDoiXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixoaDoiJWQgXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxIixkOiJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNDVc'@;
put 'dTBmNzJcdTBmNDIiLGRkOiIlZCBcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGIiLE06Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsTU06IiVkIFx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1NiIseToiXHUwZjYzXHUwZjdjXHUwZjBiXHUwZjQy'@;
put 'XHUwZjQ1XHUwZjcyXHUwZjQyIix5eToiJWQgXHUwZjYzXHUwZjdjIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGYyMVx1MGYyMlx1MGYyM1x1MGYyNFx1MGYyNVx1MGYyNlx1MGYyN1x1MGYyOFx1MGYyOVx1MGYyMF0vZyxmdW5jdGlvbihPKXtyZXR1cm4g'@;
put 'bVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjfFx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1'@;
put 'MGY0MFx1MGY2NnxcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDR8XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyfFx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0'@;
put 'dXJuIDEyPT09TSYmKE09MCksIlx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI9PT1PJiZNPj00fHwiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ij09PU8mJk08NXx8Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0'@;
put 'MiI9PT1PP00rMTI6TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI6TTwxMD8iXHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2IjpNPDE3PyJcdTBmNDlcdTBmNzJcdTBmNTNc'@;
put 'dTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiOk08MjA/Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI6Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI3NjcxOmZ1bmN0aW9uKGF0'@;
put 'LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgoQixZLFgpe3JldHVybiBCKyIgIitmdW5jdGlvbiBNKEIsWSl7cmV0dXJuIDI9PT1ZP2Z1bmN0aW9uIE8oQil7dmFyIFk9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09WVtCLmNoYXJBdCgwKV0/'@;
put 'QjpZW0IuY2hhckF0KDApXStCLnN1YnN0cmluZygxKX0oQik6Qn0oe21tOiJtdW51dGVubiIsTU06Im1peiIsZGQ6ImRldmV6aCJ9W1hdLEIpfWZ1bmN0aW9uIGxlKEIpe3JldHVybiBCPjk/bGUoQiUxMCk6Qn12YXIgUj1bL15nZW4vaSwvXmNbXHUwMmJjXCddaHdlL2ksL15tZXUvaSwvXmVi'@;
put 'ci9pLC9ebWFlL2ksL14obWV6fGV2ZSkvaSwvXmdvdS9pLC9eZW9zL2ksL15nd2UvaSwvXmhlci9pLC9eZHUvaSwvXmtlci9pXSx6PS9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1'@;
put 'fGdlbnxjW1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxqPVsvXlN1L2ksL15MdS9pLC9eTWUoW15yXXwkKS9pLC9eTWVyL2ksL15ZYS9pLC9eR3cvaSwvXlNhL2ldO2FlLmRlZmluZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9DXHUw'@;
put 'MmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9DXHUwMmJjaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3VfR3dlbmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5c1BhcnNlOmosZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ks'@;
put 'L15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQYXJzZTpqLG1vbnRoc1JlZ2V4OnosbW9udGhzU2hvcnRSZWdleDp6LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8'@;
put 'ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLG1vbnRoc1BhcnNlOlIsbG9uZ01vbnRoc1BhcnNlOlIsc2hvcnRNb250aHNQYXJz'@;
put 'ZTpSLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRh'@;
put 'cjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNcdTAyYmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6IltEZWNcdTAyYmNoIGRhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2'@;
put 'ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1ciB2dW51dGVubiIsbW06eCxoOiJ1biBldXIiLGhoOiIlZCBldXIiLGQ6InVuIGRldmV6aCIsZGQ6eCxNOiJ1ciBtaXoiLE1N'@;
put 'OngseToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIG0oQil7c3dpdGNoKGxlKEIpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA5OnJldHVybiBCKyIgYmxvYXoiO2RlZmF1bHQ6cmV0dXJuIEIrIiB2bG9heiJ9fX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShhXHhm'@;
put 'MXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe3JldHVybiBCKygxPT09Qj8iYVx4ZjEiOiJ2ZXQiKX0sd2Vlazp7ZG93OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iZy5tLiI9PT1CfSxtZXJpZGllbTpmdW5jdGlvbihCLFksWCl7'@;
put 'cmV0dXJuIEI8MTI/ImEubS4iOiJnLm0uIn19KX0oRigxNjY3NikpfSwzODE1MzpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyl7dmFyIFI9bGUrIiAiO3N3aXRjaChPKXtjYXNlInNzIjpyZXR1cm4gUisoMT09PWxlPyJzZWt1'@;
put 'bmRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIE0/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2FzZSJtbSI6cmV0dXJuIFIrKDE9PT1sZT8ibWludXRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJtaW51dGUiOiJt'@;
put 'aW51dGEiKTtjYXNlImgiOnJldHVybiBNPyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIFIrKDE9PT1sZT8ic2F0IjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBSKygxPT09bGU/ImRhbiI6ImRhbmEiKTtjYXNl'@;
put 'Ik1NIjpyZXR1cm4gUisoMT09PWxlPyJtamVzZWMiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIFIrKDE9PT1sZT8iZ29kaW5hIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJnb2RpbmUiOiJnb2RpbmEiKX19YWUuZGVmaW5lTG9j'@;
put 'YWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcu'@;
put 'X3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0'@;
put 'by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZ'@;
put 'WSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMu'@;
put 'ZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExU'@;
put 'In19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtj'@;
put 'YXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOiJk'@;
put 'YW4iLGRkOngsTToibWplc2VjIixNTTp4LHk6ImdvZGludSIseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDU0Mjg3OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVz'@;
put 'ZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY2EiLHttb250aHM6e3N0YW5kYWxvbmU6ImdlbmVyX2ZlYnJlcl9tYXJceGU3X2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmVy'@;
put 'X2RlIGZlYnJlcl9kZSBtYXJceGU3X2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdl'@;
put 'bi5fZmVici5fbWFyXHhlN19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZHRfZGNfZGpfZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJI'@;
put 'Om1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoiRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxs'@;
put 'bDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbYXZ1aSBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltkZW1ceGUwIGEgIisoMSE9PXRoaXMuaG91cnMo'@;
put 'KT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2FoaXIgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJd'@;
put 'IExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNzYXQgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5zIHNl'@;
put 'Z29ucyIsc3M6IiVkIHNlZ29ucyIsbToidW4gbWludXQiLG1tOiIlZCBtaW51dHMiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yZXMiLGQ6InVuIGRpYSIsZGQ6IiVkIGRpZXMiLE06InVuIG1lcyIsTU06IiVkIG1lc29zIix5OiJ1biBhbnkiLHl5OiIlZCBhbnlzIn0sZGF5T2ZNb250aE9yZGlu'@;
put 'YWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3ZhciBNPTE9PT1tPyJyIjoyPT09bT8ibiI6Mz09PW0/InIiOjQ9PT1tPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PWxlfHwiVyI9PT1sZSkmJihNPSJhIiksbStNfSx3ZWVrOntkb3c6MSxkb3k6'@;
put 'NH19KX0oRigxNjY3NikpfSw3MjYxNjpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17Zm9ybWF0OiJsZWRlbl9ceGZhbm9yX2JcdTAxNTllemVuX2R1YmVuX2t2XHUwMTFidGVuX1x1MDEwZGVydmVuX1x1MDEwZGVydmVuZWNfc3JwZW5felx4ZTFc'@;
put 'dTAxNTlceGVkX1x1MDE1OVx4ZWRqZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToibGVkbmFfXHhmYW5vcmFfYlx1MDE1OWV6bmFfZHVibmFfa3ZcdTAxMWJ0bmFfXHUwMTBkZXJ2bmFfXHUwMTBkZXJ2ZW5jZV9zcnBuYV96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5'@;
put 'XHhlZGpuYV9saXN0b3BhZHVfcHJvc2luY2UiLnNwbGl0KCJfIil9LG09ImxlZF9ceGZhbm9fYlx1MDE1OWVfZHViX2t2XHUwMTFiX1x1MDEwZHZuX1x1MDEwZHZjX3NycF96XHhlMVx1MDE1OV9cdTAxNTlceGVkal9saXNfcHJvIi5zcGxpdCgiXyIpLGxlPVsvXmxlZC9pLC9eXHhmYW5vL2ks'@;
put 'L15iXHUwMTU5ZS9pLC9eZHViL2ksL15rdlx1MDExYi9pLC9eKFx1MDEwZHZufFx1MDEwZGVydmVuJHxcdTAxMGRlcnZuYSkvaSwvXihcdTAxMGR2Y3xcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2UpL2ksL15zcnAvaSwvXnpceGUxXHUwMTU5L2ksL15cdTAxNTlceGVkai9pLC9ebGlzL2ks'@;
put 'L15wcm8vaV0sTT0vXihsZWRlbnxceGZhbm9yfGJcdTAxNTllemVufGR1YmVufGt2XHUwMTFidGVufFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxsaXN0b3BhZHxwcm9zaW5lY3xs'@;
put 'ZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaTtmdW5jdGlvbiBPKEspe3JldHVybiBLPjEmJks8NSYmMSE9fn4oSy8xMCl9ZnVuY3Rpb24gUihLLEwsayxFKXt2YXIgaj1LKyIgIjtz'@;
put 'd2l0Y2goayl7Y2FzZSJzIjpyZXR1cm4gTHx8RT8icFx4ZTFyIHNla3VuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBMfHxFP2orKE8oSyk/InNla3VuZHkiOiJzZWt1bmQiKTpqKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIEw/Im1pbnV0YSI6RT8ibWludXR1Ijoi'@;
put 'bWludXRvdSI7Y2FzZSJtbSI6cmV0dXJuIEx8fEU/aisoTyhLKT8ibWludXR5IjoibWludXQiKTpqKyJtaW51dGFtaSI7Y2FzZSJoIjpyZXR1cm4gTD8iaG9kaW5hIjpFPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gTHx8RT9qKyhPKEspPyJob2RpbnkiOiJob2RpbiIpOmor'@;
put 'ImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBMfHxFPyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gTHx8RT9qKyhPKEspPyJkbnkiOiJkblx4ZWQiKTpqKyJkbnkiO2Nhc2UiTSI6cmV0dXJuIEx8fEU/Im1cdTAxMWJzXHhlZGMiOiJtXHUwMTFic1x4ZWRjZW0iO2Nhc2UiTU0iOnJldHVy'@;
put 'biBMfHxFP2orKE8oSyk/Im1cdTAxMWJzXHhlZGNlIjoibVx1MDExYnNceGVkY1x1MDE2ZiIpOmorIm1cdTAxMWJzXHhlZGNpIjtjYXNlInkiOnJldHVybiBMfHxFPyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIEx8fEU/aisoTyhLKT8icm9reSI6ImxldCIpOmorImxldHkifX1hZS5k'@;
put 'ZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOngsbW9udGhzU2hvcnQ6bSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUw'@;
put 'MTFidGVufGt2XHUwMTFidG5hfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnxzcnBuYXx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkv'@;
put 'aSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1Bh'@;
put 'cnNlOmxlLHdlZWtkYXlzOiJuZWRcdTAxMWJsZV9wb25kXHUwMTFibFx4ZWRfXHhmYXRlclx4ZmRfc3RcdTAxNTllZGFfXHUwMTBkdHZydGVrX3BceGUxdGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzTWluOiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJk'@;
put 'ZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbelx4ZWR0cmEgdl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkg'@;
put 'dl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVy'@;
put 'biJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmEgdl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRk'@;
put 'ZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bG91IHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBkZGRkIFt2XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6'@;
put 'e2Z1dHVyZToiemEgJXMiLHBhc3Q6InBcdTAxNTllZCAlcyIsczpSLHNzOlIsbTpSLG1tOlIsaDpSLGhoOlIsZDpSLGRkOlIsTTpSLE1NOlIseTpSLHl5OlJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigx'@;
put 'NjY3NikpfSwyNzA0OTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJcdTA0M2FcdTA0ZDFcdTA0NDBcdTA0M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1'@;
put 'MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0'@;
put 'NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDNhXHUwNGQxXHUwNDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNh'@;
put 'XHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBcdTA0MzJcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0'@;
put 'KCJfIiksd2Vla2RheXM6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJcdTA0NDNcdTA0M2RcdTA0NDJcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUw'@;
put 'NDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZVx1MDQzZFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1'@;
put 'MDQ0OFx1MDRkMVx1MDQzY1x1MDQzMFx1MDQ0Mlx1MDQzYVx1MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0NDBfXHUwNDQyXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1'@;
put 'MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUwNDRiXHUwNDQyX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1'@;
put 'MDRkN10iLExMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0'@;
put 'M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0'@;
put 'NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHREYXk6IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1'@;
put 'XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNk'@;
put 'XHUwNGQ3XSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3JldHVybiBtKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMobSk/Ilx1'@;
put 'MDQ0MFx1MDQzNVx1MDQzZCI6L1x1MDRhYlx1MDQ0M1x1MDQzYiQvaS5leGVjKG0pPyJcdTA0NDJcdTA0MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2QiKX0scGFzdDoiJXMgXHUwNDNhXHUwNDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUw'@;
put 'NDM4XHUwNDNhIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVkIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsbToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVk'@;
put 'IFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQz'@;
put 'ZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIseToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRh'@;
put 'Ylx1MDQ0M1x1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0ZDdcdTA0NDgiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDk5MTcyOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlv'@;
put 'bihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25f'@;
put 'Q2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5'@;
put 'c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQv'@;
put 'TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lmb3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIs'@;
put 'bGFzdERheToiW0Rkb2UgYW1dIExUIixsYXN0V2VlazoiZGRkZCBbZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJtZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQi'@;
put 'LG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVk'@;
put 'fGVnKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgTT0iIjtyZXR1cm4gbT4yMD9NPTQwPT09bXx8NTA9PT1tfHw2MD09PW18fDgwPT09bXx8MTAwPT09bT8iZmVkIjoiYWluIjptPjAmJihNPVsiIiwiYWYiLCJpbCIsInlkZCIsInlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZl'@;
put 'ZCIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImZlZCJdW21dKSxtK019LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIwNjA1OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2Fs'@;
put 'ZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rf'@;
put 'bm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9mcmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtk'@;
put 'YXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQu'@;
put 'IE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRk'@;
put 'W3Mga2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6'@;
put 'ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3Nikp'@;
put 'fSw5MzM5NTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5l'@;
put 'bSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsi'@;
put 'IEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4gTT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXpl'@;
put 'bWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0'@;
put 'd29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh'@;
put 'MCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0g'@;
put 'TFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZl'@;
put 'VGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4iLGg6eCxoaDoiJWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIlZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlP'@;
put 'Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTk4MzU6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e206WyJlaW5l'@;
put 'IE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2xlKyIgVGFnZSIsbGUrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0g'@;
put 'TW9uYXQiXSxNTTpbbGUrIiBNb25hdGUiLGxlKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbbGUrIiBKYWhyZSIsbGUrIiBKYWhyZW4iXX07cmV0dXJuIE0/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZGUtY2giLHttb250aHM6IkphbnVhcl9G'@;
put 'ZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4i'@;
put 'LnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIs'@;
put 'TExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4g'@;
put 'dW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4iLGg6eCxoaDoi'@;
put 'JWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIlZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTQwMTM6ZnVuY3Rpb24oYXQsTGUsRil7'@;
put 'IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2xlKyIgVGFnZSIsbGUr'@;
put 'IiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbbGUrIiBNb25hdGUiLGxlKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbbGUrIiBKYWhyZSIsbGUrIiBKYWhyZW4iXX07cmV0'@;
put 'dXJuIE0/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikph'@;
put 'bi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI'@;
put 'SDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21v'@;
put 'cmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIs'@;
put 'czoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp4LG1tOiIlZCBNaW51dGVuIixoOngsaGg6IiVkIFN0dW5kZW4iLGQ6eCxkZDp4LHc6eCx3dzoiJWQgV29jaGVuIixNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRp'@;
put 'bmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE0NTcwOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PVsiXHUwNzk2XHUwN2FjXHUwNzgyXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzhhXHUwN2Fj'@;
put 'XHUwNzg0XHUwN2IwXHUwNzgzXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzg5XHUwN2E3XHUwNzgzXHUwN2E4XHUwNzk3XHUwN2FhIiwiXHUwNzg3XHUwN2FkXHUwNzk1XHUwN2IwXHUwNzgzXHUwN2E5XHUwNzhkXHUwN2FhIiwiXHUwNzg5XHUwN2FkIiwiXHUwNzk2XHUw'@;
put 'N2FiXHUwNzgyXHUwN2IwIiwiXHUwNzk2XHUwN2FhXHUwNzhkXHUwN2E2XHUwNzg3XHUwN2E4IiwiXHUwNzg3XHUwN2FmXHUwNzhlXHUwN2E2XHUwNzkwXHUwN2IwXHUwNzkzXHUwN2FhIiwiXHUwNzkwXHUwN2FjXHUwNzk1XHUwN2IwXHUwNzkzXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUw'@;
put 'N2E2XHUwNzgzXHUwN2FhIiwiXHUwNzg3XHUwN2FlXHUwNzg2XHUwN2IwXHUwNzkzXHUwN2FmXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzgyXHUwN2FlXHUwNzg4XHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzkxXHUwN2E4XHUwNzkwXHUw'@;
put 'N2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIl0sbT1bIlx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOFx1MDc4N1x1MDdiMFx1MDc4Y1x1MDdhNiIsIlx1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNiIsIlx1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMFx1MDc4ZVx1MDdhN1x1MDc4'@;
put 'M1x1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN1x1MDc5MFx1MDdiMFx1MDc4YVx1MDdhNlx1MDc4Y1x1MDdhOCIsIlx1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhYSIsIlx1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOFx1'@;
put 'MDc4MFx1MDdhOFx1MDc4M1x1MDdhYSJdO2FlLmRlZmluZUxvY2FsZSgiZHYiLHttb250aHM6eCxtb250aHNTaG9ydDp4LHdlZWtkYXlzOm0sd2Vla2RheXNTaG9ydDptLHdlZWtkYXlzTWluOiJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThfXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2X1x1MDc4'@;
put 'N1x1MDdhNlx1MDc4Mlx1MDdiMF9cdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTZfXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3X1x1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYV9cdTA3ODBcdTA3YWVcdTA3ODJcdTA3YTgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI'@;
put 'SDptbTpzcyIsTDoiRC9NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDc4OVx1MDc4NnxcdTA3ODlcdTA3OGEvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDc4'@;
put 'OVx1MDc4YSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDc4OVx1MDc4NiI6Ilx1MDc4OVx1MDc4YSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNzg5XHUwN2E4XHUwNzg3XHUwN2E2XHUwNzhiXHUwN2FhXSBMVCIsbmV4dERheToiW1x1MDc4OVx1MDdh'@;
put 'N1x1MDc4Ylx1MDdhNlx1MDc4OVx1MDdhN10gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbXHUwNzg3XHUwN2E4XHUwNzg3XHUwN2IwXHUwNzk0XHUwN2FjXSBMVCIsbGFzdFdlZWs6IltcdTA3OGFcdTA3YTdcdTA3ODdcdTA3YThcdTA3OGNcdTA3YWFcdTA3ODhcdTA3YThdIGRk'@;
put 'ZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDc4Y1x1MDdhY1x1MDc4M1x1MDdhZFx1MDc4ZVx1MDdhNlx1MDc4N1x1MDdhOCAlcyIscGFzdDoiXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2E4XHUwNzgyXHUwN2IwICVzIixzOiJcdTA3OTBcdTA3YThcdTA3ODZc'@;
put 'dTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWFcdTA3ODZcdTA3YWVcdTA3ODVcdTA3YWNcdTA3ODdcdTA3YjAiLHNzOiJkJSBcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWEiLG06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhY1x1'@;
put 'MDc4N1x1MDdiMCIsbW06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhYSAlZCIsaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIixoaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUw'@;
put 'NzgzXHUwN2FhICVkIixkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLGRkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLE06Ilx1MDc4OVx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsTU06Ilx1MDc4OVx1'@;
put 'MDdhNlx1MDc5MFx1MDdiMCAlZCIseToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIix5eToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FhICVkIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXHUwNjBj'@;
put 'L2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nyxkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sMzE4NTk6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxl'@;
put 'KCJlbCIse21vbnRoc05vbWluYXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWNcdTAz'@;
put 'YWNcdTAzYzFcdTAzYzRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2FmXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUw'@;
put 'M2JmXHUwM2NkXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjZFx1MDNiM1x1MDNiZlx1MDNjNVx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjMl9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlmXHUw'@;
put 'M2JhXHUwM2M0XHUwM2NlXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5ZFx1MDNiZlx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzIiLnNw'@;
put 'bGl0KCJfIiksbW9udGhzR2VuaXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWNcdTAz'@;
put 'YjFcdTAzYzFcdTAzYzRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDM5MFx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk5XHUw'@;
put 'M2JmXHUwM2M1XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjNVx1MDNiM1x1MDNiZlx1MDNjZFx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjNV9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlmXHUw'@;
put 'M2JhXHUwM2M0XHUwM2M5XHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5ZFx1MDNiZlx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzUiLnNw'@;
put 'bGl0KCJfIiksbW9udGhzOmZ1bmN0aW9uKGxlLE0pe3JldHVybiBsZT8ic3RyaW5nIj09dHlwZW9mIE0mJi9ELy50ZXN0KE0uc3Vic3RyaW5nKDAsTS5pbmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW2xlLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbFts'@;
put 'ZS5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWx9LG1vbnRoc1Nob3J0OiJcdTAzOTlcdTAzYjFcdTAzYmRfXHUwM2E2XHUwM2I1XHUwM2IyX1x1MDM5Y1x1MDNiMVx1MDNjMV9cdTAzOTFcdTAzYzBcdTAzYzFfXHUwMzljXHUwM2IxXHUwM2NhX1x1MDM5OVx1MDNiZlx1MDNjNVx1'@;
put 'MDNiZF9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJfXHUwMzkxXHUwM2M1XHUwM2IzX1x1MDNhM1x1MDNiNVx1MDNjMF9cdTAzOWZcdTAzYmFcdTAzYzRfXHUwMzlkXHUwM2JmXHUwM2I1X1x1MDM5NFx1MDNiNVx1MDNiYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwMzlhXHUwM2M1XHUwM2Mx'@;
put 'XHUwM2I5XHUwM2IxXHUwM2JhXHUwM2FlX1x1MDM5NFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNhZFx1MDNjMVx1MDNiMV9cdTAzYTRcdTAzYzFcdTAzYWZcdTAzYzRcdTAzYjdfXHUwM2E0XHUwM2I1XHUwM2M0XHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNhZFx1MDNiY1x1MDNj'@;
put 'MFx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYjFcdTAzYzFcdTAzYjFcdTAzYzNcdTAzYmFcdTAzYjVcdTAzYzVcdTAzYWVfXHUwM2EzXHUwM2FjXHUwM2IyXHUwM2IyXHUwM2IxXHUwM2M0XHUwM2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDM5YVx1MDNjNVx1MDNjMV9cdTAzOTRc'@;
put 'dTAzYjVcdTAzYzVfXHUwM2E0XHUwM2MxXHUwM2I5X1x1MDNhNFx1MDNiNVx1MDNjNF9cdTAzYTBcdTAzYjVcdTAzYmNfXHUwM2EwXHUwM2IxXHUwM2MxX1x1MDNhM1x1MDNiMVx1MDNiMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMzlhXHUwM2M1X1x1MDM5NFx1MDNiNV9cdTAzYTRc'@;
put 'dTAzYzFfXHUwM2E0XHUwM2I1X1x1MDNhMFx1MDNiNV9cdTAzYTBcdTAzYjFfXHUwM2EzXHUwM2IxIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPjExP08/Ilx1MDNiY1x1MDNiYyI6Ilx1MDM5Y1x1MDM5YyI6Tz8iXHUwM2MwXHUwM2JjIjoiXHUwM2Ew'@;
put 'XHUwMzljIn0saXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuIlx1MDNiYyI9PT0obGUrIiIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tcdTAzYTBcdTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQv'@;
put 'TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXJFbDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNiMSB7fV0gTFQiLG5leHREYXk6IltcdTAz'@;
put 'OTFcdTAzY2RcdTAzYzFcdTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1XHUwM2MyIHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5KCk/IltcdTAzYzRcdTAzYmYgXHUwM2Mw'@;
put 'XHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUwM2I3XHUwM2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10g'@;
put 'ZGRkZCBbe31dIExUIn0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihsZSxNKXt2YXIgTz10aGlzLl9jYWxlbmRhckVsW2xlXSxSPU0mJk0uaG91cnMoKTtyZXR1cm4gZnVuY3Rpb24geChsZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJmxlIGluc3RhbmNlb2YgRnVuY3Rp'@;
put 'b258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobGUpfShPKSYmKE89Ty5hcHBseShNKSksTy5yZXBsYWNlKCJ7fSIsUiUxMj09MT8iXHUwM2MzXHUwM2M0XHUwM2I3IjoiXHUwM2MzXHUwM2M0XHUwM2I5XHUwM2MyIil9LHJlbGF0aXZlVGlt'@;
put 'ZTp7ZnV0dXJlOiJcdTAzYzNcdTAzYjUgJXMiLHBhc3Q6IiVzIFx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiZCIsczoiXHUwM2JiXHUwM2FmXHUwM2IzXHUwM2IxIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIs'@;
put 'c3M6IiVkIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsbToiXHUwM2FkXHUwM2JkXHUwM2IxIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNjYyIsbW06IiVkIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNj'@;
put 'NFx1MDNhYyIsaDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNjZVx1MDNjMVx1MDNiMSIsaGg6IiVkIFx1MDNjZVx1MDNjMVx1MDNiNVx1MDNjMiIsZDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiMSIsZGQ6IiVkIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiNVx1'@;
put 'MDNjMiIsTToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiMVx1MDNjMiIsTU06IiVkIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiNVx1MDNjMiIseToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiZlx1'@;
put 'MDNjMiIseXk6IiVkIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiOVx1MDNiMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTAzYjcvLG9yZGluYWw6IiVkXHUwM2I3Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw1NTc4NTpmdW5jdGlvbihhdCxMZSxG'@;
put 'KXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWF1Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRo'@;
put 'c1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3Vu'@;
put 'X01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJE'@;
put 'IE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIs'@;
put 'bGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGho'@;
put 'OiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEw'@;
put 'O3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KEYoMTY2NzYpKX0sODM3OTI6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVm'@;
put 'aW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVs'@;
put 'X0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1N'@;
put 'TU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixz'@;
put 'YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5'@;
put 'cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6'@;
put 'MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9fSl9KEYoMTY2NzYpKX0sNTc2NTE6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1nYiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9B'@;
put 'cHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9N'@;
put 'b25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9u'@;
put 'Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0'@;
put 'RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6'@;
put 'ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRh'@;
put 'eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95'@;
put 'OjR9fSl9KEYoMTY2NzYpKX0sODE5Mjk6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1pZSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0'@;
put 'b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5'@;
put 'X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs'@;
put 'TDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFth'@;
put 'dF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWlu'@;
put 'dXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0'@;
put 'aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxOTgxODpmdW5jdGlvbihhdCxMZSxG'@;
put 'KXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWlsIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRo'@;
put 'c1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3Vu'@;
put 'X01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN'@;
put 'TU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0'@;
put 'V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVk'@;
put 'IGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0'@;
put 'dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfX0pfShGKDE2Njc2KSl9LDY2MTI6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1pbiIse21vbnRo'@;
put 'czoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVf'@;
put 'V2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRh'@;
put 'cjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7'@;
put 'ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRo'@;
put 'cyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09'@;
put 'PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI0OTAwOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tbnoiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5'@;
put 'X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1'@;
put 'ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y'@;
put 'bWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6'@;
put 'IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBm'@;
put 'ZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZN'@;
put 'b250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19'@;
put 'KX0oRigxNjY3NikpfSw3MjcyMTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLXNnIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVy'@;
put 'X05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0'@;
put 'dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE'@;
put 'RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0g'@;
put 'TFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRl'@;
put 'IixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkv'@;
put 'LG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5NTE1OTpmdW5jdGlvbihhdCxMZSxGKXsh'@;
put 'ZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVvIix7bW9udGhzOiJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2FcdTAxNmRndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxt'@;
put 'b250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hXHUwMTZkZ19zZXB0X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkaW1hblx1MDEwOW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fXHUwMTM1YVx1MDE2ZGRvX3ZlbmRyZWRvX3NhYmF0byIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya19cdTAxMzVhXHUwMTZkX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX1x1MDEzNWFfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi'@;
put 'WVlZWS1NTS1ERCIsTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkiLExMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoiZGRkZFtuXSwgW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsbGxsbDoiZGRkLCBbbGFdIERbLWFuIGRlXSBNTU0sIFlZWVkg'@;
put 'SEg6bW0ifSxtZXJpZGllbVBhcnNlOi9bYXBdXC50XC5tL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4icCI9PT1tLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPjExP00/InAudC5tLiI6IlAuVC5NLiI6TT8iYS50Lm0uIjoiQS5U'@;
put 'Lk0uIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2RpYVx1MDE2ZCBqZV0gTFQiLG5leHREYXk6IltNb3JnYVx1MDE2ZCBqZV0gTFQiLG5leHRXZWVrOiJkZGRkW24gamVdIExUIixsYXN0RGF5OiJbSGllcmFcdTAxNmQgamVdIExUIixsYXN0V2VlazoiW3Bhc2ludGFuXSBkZGRkW24gamVdIExU'@;
put 'IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwb3N0ICVzIixwYXN0OiJhbnRhXHUwMTZkICVzIixzOiJrZWxrYWogc2VrdW5kb2oiLHNzOiIlZCBzZWt1bmRvaiIsbToidW51IG1pbnV0byIsbW06IiVkIG1pbnV0b2oiLGg6InVudSBob3JvIixoaDoiJWQgaG9yb2oiLGQ6'@;
put 'InVudSB0YWdvIixkZDoiJWQgdGFnb2oiLE06InVudSBtb25hdG8iLE1NOiIlZCBtb25hdG9qIix5OiJ1bnUgamFybyIseXk6IiVkIGphcm9qIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfWEvLG9yZGluYWw6IiVkYSIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0s'@;
put 'MTE3ODA6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29f'@;
put 'c2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98'@;
put 'anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMt'@;
put 'ZG8iLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/'@;
put 'bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGlj'@;
put 'aWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9u'@;
put 'dGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0g'@;
put 'TU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigp'@;
put 'e3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBh'@;
put 'IGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVz'@;
put 'IixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1h'@;
put 'bmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIzNDY4OmZ1bmN0aW9uKGF0'@;
put 'LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxtPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIu'@;
put 'c3BsaXQoIl8iKSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLE09L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0'@;
put 'b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzLW14Iix7bW9udGhzOiJlbmVy'@;
put 'b19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1Iu'@;
put 'bW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNT'@;
put 'aG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtk'@;
put 'YXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21h'@;
put 'X21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIs'@;
put 'TExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIr'@;
put 'KDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJz'@;
put 'IjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mg'@;
put 'c2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1l'@;
put 'c2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oRigxNjY3NikpfSw0NDkzODpmdW5j'@;
put 'dGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25v'@;
put 'dl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxp'@;
put 'b3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRo'@;
put 'czoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgo'@;
put 'KV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ks'@;
put 'bW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTps'@;
put 'ZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJk'@;
put 'b19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJNTS9ERC9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0g'@;
put 'WVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltt'@;
put 'YVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09'@;
put 'dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6Imhh'@;
put 'Y2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVu'@;
put 'IG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjE5NTQ6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1'@;
put 'bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIp'@;
put 'LGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1i'@;
put 'cmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFy'@;
put 'em9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxt'@;
put 'b250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVn'@;
put 'ZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29f'@;
put 'bHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4'@;
put 'ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBE'@;
put 'IFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91'@;
put 'cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9'@;
put 'LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6'@;
put 'IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFc'@;
put 'eGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfShGKDE2Njc2KSl9LDExNDUzOmZ1bmN0aW9uKGF0LExlLEYp'@;
put 'eyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsibVx4ZjVuZSBzZWt1bmRpIiwibVx4ZjVuaSBzZWt1bmQiLCJwYWFyIHNla3VuZGl0Il0sc3M6W2xlKyJzZWt1bmRpIixsZSsic2VrdW5kaXQiXSxtOlsiXHhmY2hlIG1pbnV0aSIsIlx4'@;
put 'ZmNrcyBtaW51dCJdLG1tOltsZSsiIG1pbnV0aSIsbGUrIiBtaW51dGl0Il0saDpbIlx4ZmNoZSB0dW5uaSIsInR1bmQgYWVnYSIsIlx4ZmNrcyB0dW5kIl0saGg6W2xlKyIgdHVubmkiLGxlKyIgdHVuZGkiXSxkOlsiXHhmY2hlIHBceGU0ZXZhIiwiXHhmY2tzIHBceGU0ZXYiXSxNOlsia3V1'@;
put 'IGFqYSIsImt1dSBhZWdhIiwiXHhmY2tzIGt1dSJdLE1NOltsZSsiIGt1dSIsbGUrIiBrdXVkIl0seTpbIlx4ZmNoZSBhYXN0YSIsImFhc3RhIiwiXHhmY2tzIGFhc3RhIl0seXk6W2xlKyIgYWFzdGEiLGxlKyIgYWFzdGF0Il19O3JldHVybiBNP3pbT11bMl0/eltPXVsyXTp6W09dWzFdOlI/'@;
put 'eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbVx4ZTRydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi'@;
put 'amFhbl92ZWVicl9tXHhlNHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoicFx4ZmNoYXBceGU0ZXZfZXNtYXNwXHhlNGV2X3RlaXNpcFx4ZTRldl9rb2xtYXBceGU0ZXZfbmVsamFwXHhlNGV2X3JlZWRlX2xhdXBceGU0'@;
put 'ZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZ'@;
put 'WSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RceGU0bmEsXSBMVCIsbmV4dERheToiW0hvbW1lLF0gTFQiLG5leHRXZWVrOiJbSlx4ZTRyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0g'@;
put 'TFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRyYXN0IixwYXN0OiIlcyB0YWdhc2kiLHM6eCxzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDoiJWQgcFx4ZTRldmEiLE06eCxNTTp4LHk6eCx5eTp4'@;
put 'fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDQ2OTc6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJldSIse21vbnRoczoi'@;
put 'dXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vy'@;
put 'ci5fYXphLl9hYmUuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImlnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0ZWF6a2VuYV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiaWcuX2FsLl9hci5fYXou'@;
put 'X29nLl9vbC5fbHIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJpZ19hbF9hcl9hel9vZ19vbF9sciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1N'@;
put 'TU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsbDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoi'@;
put 'ZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRbZXRhbl0iLG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10g'@;
put 'ZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRvIGJhdHp1ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3Jk'@;
put 'dSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJoaWxhYmV0ZSBiYXQiLE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2'@;
put 'Njc2KSl9LDUyOTAwOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2ZjEiLDI6Ilx1MDZmMiIsMzoiXHUwNmYzIiw0OiJcdTA2ZjQiLDU6Ilx1MDZmNSIsNjoiXHUwNmY2Iiw3OiJcdTA2ZjciLDg6Ilx1MDZmOCIsOToiXHUwNmY5Iiww'@;
put 'OiJcdTA2ZjAifSxtPXsiXHUwNmYxIjoiMSIsIlx1MDZmMiI6IjIiLCJcdTA2ZjMiOiIzIiwiXHUwNmY0IjoiNCIsIlx1MDZmNSI6IjUiLCJcdTA2ZjYiOiI2IiwiXHUwNmY3IjoiNyIsIlx1MDZmOCI6IjgiLCJcdTA2ZjkiOiI5IiwiXHUwNmYwIjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiZmEi'@;
put 'LHttb250aHM6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2'@;
put 'XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2'@;
put 'MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJc'@;
put 'dTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2'@;
put 'YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYy'@;
put 'Zlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYy'@;
put 'OFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdf'@;
put 'XHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3'@;
put 'X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2MmNfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6'@;
put 'IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzF8'@;
put 'XHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuL1x1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLy50ZXN0KE0pfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0'@;
put 'dXJuIE08MTI/Ilx1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIjoiXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NVx1MDYzMVx1MDY0OFx1MDYz'@;
put 'MiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjQxXHUwNjMxXHUwNjJmXHUwNjI3IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNmNj'@;
put 'XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2N2VcdTA2Y2NcdTA2MzRdIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MmZcdTA2MzEg'@;
put 'JXMiLHBhc3Q6IiVzIFx1MDY3ZVx1MDZjY1x1MDYzNCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsbToiXHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0'@;
put 'Mlx1MDY0NyIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsaDoiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsZDoiXHUwNmNjXHUwNmE5IFx1MDYzMVx1MDY0OFx1MDYzMiIsZGQ6IiVk'@;
put 'IFx1MDYzMVx1MDY0OFx1MDYzMiIsTToiXHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDY0NyIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0NyIseToiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9u'@;
put 'KE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA2ZjAtXHUwNmY5XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSkucmVw'@;
put 'bGFjZSgvLC9nLCJcdTA2MGMiKX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDY0NS8sb3JkaW5hbDoiJWRcdTA2NDUiLHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSw0OTc3NTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgeD0ibm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqXHhlNCB2aWlzaSBrdXVzaSBzZWl0c2VtXHhlNG4ga2FoZGVrc2FuIHloZGVrc1x4ZTRuIi5zcGxpdCgiICIpLG09WyJub2xsYSIsInloZGVuIiwia2FoZGVuIiwia29sbWVuIiwibmVsalx4ZTRuIiwidmlpZGVuIiwia3V1ZGVuIix4'@;
put 'WzddLHhbOF0seFs5XV07ZnVuY3Rpb24gbGUoUix6LEssTCl7dmFyIGs9IiI7c3dpdGNoKEspe2Nhc2UicyI6cmV0dXJuIEw/Im11dXRhbWFuIHNla3VubmluIjoibXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjprPUw/InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJu'@;
put 'IEw/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOms9TD8ibWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIEw/InR1bm5pbiI6InR1bnRpIjtjYXNlImhoIjprPUw/InR1bm5pbiI6InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gTD8icFx4ZTRpdlx4'@;
put 'ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOms9TD8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBMPyJrdXVrYXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJNTSI6az1MPyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0'@;
put 'dXJuIEw/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjprPUw/InZ1b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIE0oUix6KXtyZXR1cm4gUjwxMD96P21bUl06eFtSXTpSfShSLEwpKyIgIitrfWFlLmRlZmluZUxvY2FsZSgiZmkiLHttb250aHM6InRhbW1pa3V1X2hlbG1pa3V1X21h'@;
put 'YWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXNceGU0a3V1X2hlaW5ceGU0a3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2VzXHhlNF9oZWluXHhlNF9l'@;
put 'bG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1X21hX3RpX2tlX3RvX3BlX2xhIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTVt0YV0gWVlZWSIsTExMOiJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBI'@;
put 'SC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIixsbGxsOiJkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbSJ9LGNhbGVuZGFyOntzYW1lRGF5'@;
put 'OiJbdFx4ZTRuXHhlNFx4ZTRuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6IltlaWxlbl0gW2tsb10gTFQiLGxhc3RXZWVrOiJbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUIixzYW1lRWxzZToiTCJ9LHJl'@;
put 'bGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNFx4ZTRzdFx4ZTQiLHBhc3Q6IiVzIHNpdHRlbiIsczpsZSxzczpsZSxtOmxlLG1tOmxlLGg6bGUsaGg6bGUsZDpsZSxkZDpsZSxNOmxlLE1NOmxlLHk6bGUseXk6bGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5h'@;
put 'bDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2NDI4MjpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImZpbCIse21vbnRoczoiRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlv'@;
put 'X0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGluZ2dvX0x1bmVzX01hcnRlc19NaXll'@;
put 'cmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi'@;
put 'SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25nYXlvbmcgYXJhd10iLG5leHREYXk6IltCdWth'@;
put 'cyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToic2EgbG9vYiBuZyAlcyIscGFzdDoiJXMg'@;
put 'YW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixNOiJpc2FuZyBidXdhbiIsTU06IiVkIGJ1d2Fu'@;
put 'Iix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg0MjM2OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7'@;
put 'InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZm8iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByXHhlZGxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFy'@;
put 'X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbmFkYWd1cl90XHhmZHNkYWd1cl9taWt1ZGFndXJfaFx4ZjNzZGFndXJfZnJceGVkZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'U2hvcnQ6InN1bl9tXHhlMW5fdFx4ZmRzX21pa19oXHhmM3NfZnJceGVkX2xleSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTFfdFx4ZmRfbWlfaFx4ZjNfZnJfbGUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0v'@;
put 'WVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2QgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGNkIG1vcmdpbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBb'@;
put 'a2wuXSBMVCIsbGFzdERheToiW1x4Y2QgZ2pceGUxciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMHN0dV0gZGRkZCBba2xdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ1bSAlcyIscGFzdDoiJXMgc1x4ZWRceGYwYW5pIixzOiJmXHhlMSBzZWt1bmQiLHNz'@;
put 'OiIlZCBzZWt1bmRpciIsbToiZWluIG1pbnV0dHVyIixtbToiJWQgbWludXR0aXIiLGg6ImVpbiB0XHhlZG1pIixoaDoiJWQgdFx4ZWRtYXIiLGQ6ImVpbiBkYWd1ciIsZGQ6IiVkIGRhZ2FyIixNOiJlaW4gbVx4ZTFuYVx4ZjB1ciIsTU06IiVkIG1ceGUxbmFceGYwaXIiLHk6ImVpdHQgXHhl'@;
put 'MXIiLHl5OiIlZCBceGUxciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5MjgzMDpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2Nh'@;
put 'bGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9t'@;
put 'YWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0'@;
put 'OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZ'@;
put 'WS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2Vlazoi'@;
put 'ZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVk'@;
put 'IHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFy'@;
put 'c2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBtKygxPT09bT8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKygxPT09bT8icmUi'@;
put 'OiJlIil9fX0pfShGKDE2Njc2KSl9LDIxNDEyOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZnItY2giLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0'@;
put 'ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3'@;
put 'ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3Zl'@;
put 'X3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0i'@;
put 'fSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1l'@;
put 'RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpv'@;
put 'dXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNh'@;
put 'c2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIG0rKDE9PT1tPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rKDE9PT1tPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg5MzYxOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7'@;
put 'InVzZSBzdHJpY3QiO3ZhciBsZT0vKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuP3xqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8'@;
put 'c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksTT1bL15qYW52L2ksL15mXHhlOXZyL2ksL15tYXJzL2ksL15hdnIvaSwvXm1haS9pLC9eanVpbi9pLC9eanVpbC9pLC9eYW9ceGZidC9pLC9ec2VwdC9pLC9eb2N0L2ksL15ub3YvaSwvXmRceGU5Yy9pXTthZS5kZWZp'@;
put 'bmVMb2NhbGUoImZyIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZy'@;
put 'Ll9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4OmxlLG1vbnRoc1Nob3J0UmVnZXg6bGUsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxh'@;
put 'b1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6LyhqYW52XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj8pL2ks'@;
put 'bW9udGhzUGFyc2U6TSxsb25nTW9udGhzUGFyc2U6TSxzaG9ydE1vbnRoc1BhcnNlOk0sd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5f'@;
put 'dmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixM'@;
put 'TEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltI'@;
put 'aWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixt'@;
put 'bToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLHc6InVuZSBzZW1haW5lIix3dzoiJWQgc2VtYWluZXMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRp'@;
put 'bmFsUGFyc2U6L1xkezEsMn0oZXJ8KS8sb3JkaW5hbDpmdW5jdGlvbihSLHope3N3aXRjaCh6KXtjYXNlIkQiOnJldHVybiBSKygxPT09Uj8iZXIiOiIiKTtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gUisoMT09PVI/ImVyIjoiZSIpO2Nhc2UidyI6'@;
put 'Y2FzZSJXIjpyZXR1cm4gUisoMT09PVI/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjY5ODQ6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9Imphbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcu'@;
put 'X3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbT0iamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIik7YWUuZGVmaW5lTG9jYWxlKCJmeSIse21vbnRoczoiamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWll'@;
put 'X2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihNLE8pe3JldHVybiBNPy8tTU1NLS8udGVzdChPKT9tW00ubW9udGgoKV06eFtNLm1vbnRoKCldOnh9LG1vbnRoc1BhcnNlRXhhY3Q6'@;
put 'ITAsd2Vla2RheXM6InNuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU2lfTW9fVGlfV29fVG9fRnJf'@;
put 'U28iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9'@;
put 'LGNhbGVuZGFyOntzYW1lRGF5OiJbaGpvZWQgb21dIExUIixuZXh0RGF5OiJbbW9hcm4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbanVzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltceGY0ZnJceGZibmVdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh'@;
put 'dGl2ZVRpbWU6e2Z1dHVyZToib2VyICVzIixwYXN0OiIlcyBseW4iLHM6ImluIHBlYXIgc2Vrb25kZW4iLHNzOiIlZCBzZWtvbmRlbiIsbToiaWVuIG1pblx4ZmF0IixtbToiJWQgbWludXRlbiIsaDoiaWVuIG9lcmUiLGhoOiIlZCBvZXJlbiIsZDoiaWVuIGRlaSIsZGQ6IiVkIGRhZ2VuIixN'@;
put 'OiJpZW4gbW9hbm5lIixNTToiJWQgbW9hbm5lbiIseToiaWVuIGppZXIiLHl5OiIlZCBqaWVycmVuIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKE0pe3JldHVybiBNKygxPT09TXx8OD09PU18fE0+PTIwPyJzdGUiOiJkZSIpfSx3'@;
put 'ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5Mzk2MTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImdhIix7bW9udGhzOlsiRWFuXHhlMWlyIiwiRmVhYmhyYSIsIk1ceGUxcnRhIiwiQWlicmVceGUxbiIsIkJlYWx0'@;
put 'YWluZSIsIk1laXRoZWFtaCIsIklceGZhaWwiLCJMXHhmYW5hc2EiLCJNZVx4ZTFuIEZceGYzbWhhaXIiLCJEZWlyZWFkaCBGXHhmM21oYWlyIiwiU2FtaGFpbiIsIk5vbGxhaWciXSxtb250aHNTaG9ydDpbIkVhbiIsIkZlYWJoIiwiTVx4ZTFydCIsIkFpYiIsIkJlYWwiLCJNZWl0aCIsIklc'@;
put 'eGZhaWwiLCJMXHhmYW4iLCJNLkYuIiwiRC5GLiIsIlNhbWgiLCJOb2xsIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRceGU5IERvbWhuYWlnaCIsIkRceGU5IEx1YWluIiwiRFx4ZTkgTVx4ZTFpcnQiLCJEXHhlOSBDXHhlOWFkYW9pbiIsIkRceGU5YXJkYW9pbiIsIkRceGU5'@;
put 'IGhBb2luZSIsIkRceGU5IFNhdGhhaXJuIl0sd2Vla2RheXNTaG9ydDpbIkRvbWgiLCJMdWFuIiwiTVx4ZTFpcnQiLCJDXHhlOWFkIiwiRFx4ZTlhciIsIkFvaW5lIiwiU2F0aCJdLHdlZWtkYXlzTWluOlsiRG8iLCJMdSIsIk1ceGUxIiwiQ1x4ZTkiLCJEXHhlOSIsIkEiLCJTYSJdLGxvbmdE'@;
put 'YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lubml1IGFnXSBMVCIsbmV4dERh'@;
put 'eToiW0FtXHhlMXJhY2ggYWddIExUIixuZXh0V2VlazoiZGRkZCBbYWddIExUIixsYXN0RGF5OiJbSW5uXHhlOSBhZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImkgJXMiLHBhc3Q6IiVzIFx4ZjMg'@;
put 'c2hpbiIsczoiY1x4ZmFwbGEgc29pY2luZCIsc3M6IiVkIHNvaWNpbmQiLG06Im5ceGYzaW1ceGU5YWQiLG1tOiIlZCBuXHhmM2ltXHhlOWFkIixoOiJ1YWlyIGFuIGNobG9pZyIsaGg6IiVkIHVhaXIgYW4gY2hsb2lnIixkOiJsXHhlMSIsZGQ6IiVkIGxceGUxIixNOiJtXHhlZCIsTU06IiVk'@;
put 'IG1ceGVkb25uYSIseToiYmxpYWluIix5eToiJWQgYmxpYWluIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbih6KXtyZXR1cm4geisoMT09PXo/ImQiOnolMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYo'@;
put 'MTY2NzYpKX0sNzg4NDk6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJnZCIse21vbnRoczpbIkFtIEZhb2lsbGVhY2giLCJBbiBHZWFycmFuIiwiQW0gTVx4ZTBydCIsIkFuIEdpYmxlYW4iLCJBbiBDXHhlOGl0ZWFuIiwiQW4g'@;
put 'dC1ceGQyZ21oaW9zIiwiQW4gdC1JdWNoYXIiLCJBbiBMXHhmOW5hc3RhbCIsIkFuIHQtU3VsdGFpbiIsIkFuIERceGUwbWhhaXIiLCJBbiB0LVNhbWhhaW4iLCJBbiBEXHhmOWJobGFjaGQiXSxtb250aHNTaG9ydDpbIkZhb2kiLCJHZWFyIiwiTVx4ZTBydCIsIkdpYmwiLCJDXHhlOGl0Iiwi'@;
put 'XHhkMmdtaCIsIkl1Y2giLCJMXHhmOW4iLCJTdWx0IiwiRFx4ZTBtaCIsIlNhbWgiLCJEXHhmOWJoIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRpZFx4ZjJtaG5haWNoIiwiRGlsdWFpbiIsIkRpbVx4ZTBpcnQiLCJEaWNpYWRhaW4iLCJEaWFyZGFvaW4iLCJEaWhhb2luZSIs'@;
put 'IkRpc2F0aGFpcm5lIl0sd2Vla2RheXNTaG9ydDpbIkRpZCIsIkRpbCIsIkRpbSIsIkRpYyIsIkRpYSIsIkRpaCIsIkRpcyJdLHdlZWtkYXlzTWluOlsiRFx4ZjIiLCJMdSIsIk1ceGUwIiwiQ2kiLCJBciIsIkhhIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t'@;
put 'OnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBbi1kaXVnaCBhaWddIExUIixuZXh0RGF5OiJbQS1tXHhlMGlyZWFjaCBhaWddIExUIixu'@;
put 'ZXh0V2VlazoiZGRkZCBbYWlnXSBMVCIsbGFzdERheToiW0FuLWRceGU4IGFpZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2hhaWRoXSBbYWlnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYW5uIGFuICVzIixwYXN0OiJiaG8gY2hpb25uICVzIixzOiJiZWFn'@;
put 'YW4gZGlvZ2FuIixzczoiJWQgZGlvZ2FuIixtOiJtaW9uYWlkIixtbToiJWQgbWlvbmFpZGVhbiIsaDoidWFpciIsaGg6IiVkIHVhaXJlYW4iLGQ6ImxhdGhhIixkZDoiJWQgbGF0aGEiLE06Im1ceGVjb3MiLE1NOiIlZCBtXHhlY29zYW4iLHk6ImJsaWFkaG5hIix5eToiJWQgYmxpYWRobmEi'@;
put 'fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKHope3JldHVybiB6KygxPT09ej8iZCI6eiUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzNDI3MzpmdW5jdGlvbihhdCxMZSxGKXshZnVu'@;
put 'Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImdsIix7bW9udGhzOiJ4YW5laXJvX2ZlYnJlaXJvX21hcnpvX2FicmlsX21haW9feHVceGYxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9y'@;
put 'dDoieGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1XHhmMS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZG9taW5nb19sdW5zX21hcnRlc19tXHhlOXJjb3Jlc194b3Zlc192ZW5yZXNfc1x4ZTFiYWRvIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21ceGU5ci5feG92Ll92ZW4uX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21ceGU5X3hvX3ZlX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1h'@;
put 'dDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5j'@;
put 'dGlvbigpe3JldHVybiJbaG94ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMVx4ZTEgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigp'@;
put 'e3JldHVybiJkZGRkIFsiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW29udGUgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMSI6ImEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltvXSBkZGRkIFtw'@;
put 'YXNhZG8gIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3JldHVybiAwPT09bS5pbmRleE9mKCJ1biIpPyJuIittOiJlbiAiK219LHBhc3Q6ImhhaSAlcyIsczoidW5zIHNlZ3VuZG9z'@;
put 'IixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuaGEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9u'@;
put 'dGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQwNjIzOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsiXHUw'@;
put 'OTI1XHUwOTRiXHUwOTIxXHUwOTJmXHUwOTNlIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDk0NyBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxzczpbbGUrIiBcdTA5MzhcdTA5NDVc'@;
put 'dTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sbTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUw'@;
put 'OTNmXHUwOTI4XHUwOTQyXHUwOTFmIl0sbW06W2xlKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMiJdLGg6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUw'@;
put 'OTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMCJdLGhoOltsZSsiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDIiXSxkOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkz'@;
put 'ZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5NDBcdTA5MzgiXSxkZDpbbGUrIiBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTI2XHUwOTQwXHUwOTM4Il0sTTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5NGRcdTA5Mzlc'@;
put 'dTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRiIl0sTU06W2xlKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4XHUwOTQwIixsZSsi'@;
put 'IFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0NyJdLHk6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOCJdLHl5OltsZSsiIFx1MDkzNVx1MDkzMFx1'@;
put 'MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDIiXX07cmV0dXJuIFI/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZ29tLWRldmEiLHttb250aHM6e3N0YW5kYWxvbmU6Ilx1MDkxY1x1MDkz'@;
put 'ZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkz'@;
put 'Ml9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZl9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1'@;
put 'MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1'@;
put 'XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFcdTA5M2Vc'@;
put 'dTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDk0N1x1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDJcdTA5MjhcdTA5M2Vc'@;
put 'dTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZc'@;
put 'dTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1'@;
put 'MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRo'@;
put 'c1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MC5fXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDky'@;
put 'OF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUw'@;
put 'OTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MmZcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzZVx1MDkzMF9cdTA5MmNc'@;
put 'dTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDdcdTA5MjhcdTA5MzVcdTA5M2VcdTA5MzAi'@;
put 'LnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTJmXHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMy5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjQuX1x1MDkzOFx1'@;
put 'MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTQ3XHUwOTI4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2X1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N19cdTA5MzhcdTA5NDFfXHUwOTM2XHUwOTQ3'@;
put 'Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTFRTOiJBIGg6bW06c3MgW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLEw6IkRELU1N'@;
put 'LVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsbGxs'@;
put 'bDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkyZlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MmJcdTA5M2VcdTA5MzJcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDJd'@;
put 'IExUIixuZXh0V2VlazoiW1x1MDkyYlx1MDk0MVx1MDkyMVx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJiXHUwOTNlXHUwOTFmXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJl'@;
put 'bGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgXHUwOTA2XHUwOTI2XHUwOTQwXHUwOTAyIixzOngsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTA5MzVcdTA5NDdcdTA5MzAp'@;
put 'LyxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3JldHVybiJEIj09PU0/bGUrIlx1MDkzNVx1MDk0N1x1MDkzMCI6bGV9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDB8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyfFx1'@;
put 'MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMnxcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDcvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihsZSxNKXtyZXR1cm4gMTI9PT1sZSYmKGxlPTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiPT09TT9sZTw0P2xlOmxl'@;
put 'KzEyOiJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiPT09TT9sZToiXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIj09PU0/bGU+MTI/bGU6bGUrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT1NP2xlKzEyOnZvaWQgMH0s'@;
put 'bWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpsZTwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIjpsZTwxNj8iXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIjpsZTwy'@;
put 'MD8iXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oRigxNjY3NikpfSw2MjY5NjpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17czpbInRob2Rk'@;
put 'ZWEgc2Vrb25kYW1uaSIsInRob2RkZSBzZWtvbmQiXSxzczpbbGUrIiBzZWtvbmRhbW5pIixsZSsiIHNla29uZCJdLG06WyJla2EgbWludGFuIiwiZWsgbWludXQiXSxtbTpbbGUrIiBtaW50YW1uaSIsbGUrIiBtaW50YW0iXSxoOlsiZWthIHZvcmFuIiwiZWsgdm9yIl0saGg6W2xlKyIgdm9y'@;
put 'YW1uaSIsbGUrIiB2b3JhbSJdLGQ6WyJla2EgZGlzYW4iLCJlayBkaXMiXSxkZDpbbGUrIiBkaXNhbW5pIixsZSsiIGRpcyJdLE06WyJla2EgbWhvaW5lYW4iLCJlayBtaG9pbm8iXSxNTTpbbGUrIiBtaG9pbmVhbW5pIixsZSsiIG1ob2luZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3Mi'@;
put 'XSx5eTpbbGUrIiB2b3JzYW1uaSIsbGUrIiB2b3JzYW0iXX07cmV0dXJuIFI/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZ29tLWxhdG4iLHttb250aHM6e3N0YW5kYWxvbmU6IkphbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVi'@;
put 'cl9Ob3ZlbWJyX0RlemVtYnIiLnNwbGl0KCJfIiksZm9ybWF0OiJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1i'@;
put 'cmFjaGVhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IkFpdGFy'@;
put 'X1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmlyZXN0YXJfU3VrcmFyX1Nvbid2YXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWlfU21fTW9fQnVfQnJfU3VfU24iLnNwbGl0KCJf'@;
put 'Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFt2YXp0YV0iLExUUzoiQSBoOm1tOnNzIFt2YXp0YV0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXSIsTExMTDoiZGRkZCwgTU1N'@;
put 'TSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0ifSxjYWxlbmRhcjp7c2FtZURheToiW0Fpel0gTFQiLG5leHREYXk6IltGYWxlYW1dIExUIixuZXh0V2VlazoiW0Z1ZGRsb10gZGRkZFssXSBMVCIsbGFzdERheToiW0thbF0g'@;
put 'TFQiLGxhc3RXZWVrOiJbRmF0dGxvXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgYWRpbSIsczp4LHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDp4LGRkOngsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFy'@;
put 'c2U6L1xkezEsMn0oZXIpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3JldHVybiJEIj09PU0/bGUrImVyIjpsZX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihsZSxNKXtyZXR1cm4g'@;
put 'MTI9PT1sZSYmKGxlPTApLCJyYXRpIj09PU0/bGU8ND9sZTpsZSsxMjoic29rYWxsaW0iPT09TT9sZToiZG9ucGFyYW0iPT09TT9sZT4xMj9sZTpsZSsxMjoic2FuamUiPT09TT9sZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPDQ/InJhdGkiOmxlPDEy'@;
put 'PyJzb2thbGxpbSI6bGU8MTY/ImRvbnBhcmFtIjpsZTwyMD8ic2FuamUiOiJyYXRpIn19KX0oRigxNjY3NikpfSw2NjkyODpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwYWU3IiwyOiJcdTBhZTgiLDM6Ilx1MGFlOSIsNDoiXHUwYWVh'@;
put 'Iiw1OiJcdTBhZWIiLDY6Ilx1MGFlYyIsNzoiXHUwYWVkIiw4OiJcdTBhZWUiLDk6Ilx1MGFlZiIsMDoiXHUwYWU2In0sbT17Ilx1MGFlNyI6IjEiLCJcdTBhZTgiOiIyIiwiXHUwYWU5IjoiMyIsIlx1MGFlYSI6IjQiLCJcdTBhZWIiOiI1IiwiXHUwYWVjIjoiNiIsIlx1MGFlZCI6IjciLCJc'@;
put 'dTBhZWUiOiI4IiwiXHUwYWVmIjoiOSIsIlx1MGFlNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImd1Iix7bW9udGhzOiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxXHUwYTg2'@;
put 'XHUwYWIwXHUwYWMwX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmZcdTBhYjJfXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmVcdTBhODhfXHUwYTkxXHUwYTk3XHUwYWI4XHUw'@;
put 'YWNkXHUwYTlmX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWE4XHUwYWI1XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhMVx1MGFiZlx1'@;
put 'MGFiOFx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxLl9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzEuX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5'@;
put 'YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmYuX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlLl9cdTBhOTFcdTBhOTcuX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjNy5fXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUw'@;
put 'YWNkLl9cdTBhYThcdTBhYjVcdTBhYzcuX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjNy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwYWIwXHUwYWI1XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiOFx1MGFjYlx1MGFhZVx1MGFiNVx1MGFiZVx1MGFi'@;
put 'MF9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBcdTBh'@;
put 'YjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGFiMFx1MGFiNVx1MGFiZl9cdTBhYjhcdTBhY2JcdTBhYWVfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFj'@;
put 'ZF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYWIwX1x1MGFiOFx1MGFjYl9cdTBhYWVcdTBhODJfXHUwYWFjXHUwYWMxX1x1MGE5N1x1MGFjMV9cdTBh'@;
put 'YjZcdTBhYzFfXHUwYWI2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTFRTOiJBIGg6bW06c3MgXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMOiJERC9NTS9ZWVlZIixMTDoi'@;
put 'RCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3In0sY2FsZW5kYXI6e3NhbWVEYXk6'@;
put 'IltcdTBhODZcdTBhOWNdIExUIixuZXh0RGF5OiJbXHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYTk3XHUwYTg3XHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbGFzdFdlZWs6IltcdTBhYWFcdTBhYmVcdTBhOWJcdTBh'@;
put 'YjJcdTBhYmVdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBhYWVcdTBhYmUiLHBhc3Q6IiVzIFx1MGFhYVx1MGFiOVx1MGFjN1x1MGFiMlx1MGFiZSIsczoiXHUwYTg1XHUwYWFlXHUwYWMxXHUwYTk1IFx1MGFhYVx1MGFiM1x1MGFjYiIsc3M6'@;
put 'IiVkIFx1MGFiOFx1MGFjN1x1MGE5NVx1MGE4Mlx1MGFhMSIsbToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsbW06IiVkIFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsaDoiXHUwYThmXHUwYTk1IFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIs'@;
put 'aGg6IiVkIFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsZDoiXHUwYThmXHUwYTk1IFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsZGQ6IiVkIFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsTToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIsTU06IiVkIFx1'@;
put 'MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIseToiXHUwYThmXHUwYTk1IFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyIseXk6IiVkIFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTBhZTdcdTBhZThcdTBhZTlc'@;
put 'dTBhZWFcdTBhZWJcdTBhZWNcdTBhZWRcdTBhZWVcdTBhZWZcdTBhZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGFi'@;
put 'MFx1MGFiZVx1MGFhNHxcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjB8XHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwfFx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MGFiMFx1MGFiZVx1MGFhNCI9PT1PP008'@;
put 'ND9NOk0rMTI6Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI9PT1PP006Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI9PT1PP00+PTEwP006TSsxMjoiXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIj09PU8/TSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0'@;
put 'PyJcdTBhYjBcdTBhYmVcdTBhYTQiOk08MTA/Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI6TTwxNz8iXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIjpNPDIwPyJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiOiJcdTBhYjBcdTBhYmVcdTBhYTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigx'@;
put 'NjY3NikpfSwyNDgwNDpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImhlIix7bW9udGhzOiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVkZVx1'@;
put 'MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZDlcdTA1ZGNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWQ1XHUwNWUxXHUwNWQ4X1x1MDVlMVx1MDVlNFx1MDVk'@;
put 'OFx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZDhcdTA1ZDVcdTA1ZDFcdTA1ZThfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVkMVx1MDVlOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNWQ5XHUw'@;
put 'NWUwXHUwNWQ1XHUwNWYzX1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVk'@;
put 'NVx1MDVkMlx1MDVmM19cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1ZjNfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWYzX1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVmM19cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDVlOFx1MDVkMFx1MDVlOVx1MDVkNVx1MDVk'@;
put 'Zl9cdTA1ZTlcdTA1ZTBcdTA1ZDlfXHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOFx1MDVkMVx1MDVkOVx1MDVlMlx1MDVkOV9cdTA1ZDdcdTA1ZGVcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkMVx1MDVlYSIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1ZDBcdTA1ZjNfXHUwNWQxXHUwNWYzX1x1MDVkMlx1MDVmM19cdTA1ZDNcdTA1ZjNfXHUwNWQ0XHUwNWYzX1x1MDVkNVx1MDVmM19cdTA1ZTlcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDVkMF9cdTA1ZDFfXHUwNWQyX1x1MDVkM19c'@;
put 'dTA1ZDRfXHUwNWQ1X1x1MDVlOSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSIsTExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtcdTA1'@;
put 'ZDFdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1ZDRcdTA1ZDlcdTA1ZDVcdTA1ZGQgXHUwNWQxXHUwNWJlXUxUIixu'@;
put 'ZXh0RGF5OiJbXHUwNWRlXHUwNWQ3XHUwNWU4IFx1MDVkMVx1MDViZV1MVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLGxhc3REYXk6IltcdTA1ZDBcdTA1ZWFcdTA1ZGVcdTA1ZDVcdTA1ZGMgXHUwNWQxXHUwNWJlXUxUIixsYXN0V2VlazoiW1x1MDVk'@;
put 'MVx1MDVkOVx1MDVkNVx1MDVkZF0gZGRkZCBbXHUwNWQ0XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ1XHUwNWRmIFx1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDVkMVx1MDVlMlx1MDVkNVx1MDVkMyAlcyIscGFzdDoi'@;
put 'XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5ICVzIixzOiJcdTA1ZGVcdTA1ZTFcdTA1ZTRcdTA1ZTggXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixzczoiJWQgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixtOiJcdTA1ZDNcdTA1ZTdcdTA1ZDQiLG1tOiIlZCBcdTA1ZDNc'@;
put 'dTA1ZTdcdTA1ZDVcdTA1ZWEiLGg6Ilx1MDVlOVx1MDVlMlx1MDVkNCIsaGg6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZTlcdTA1ZTJcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0rIiBcdTA1ZTlcdTA1ZTJcdTA1ZDVcdTA1ZWEifSxkOiJcdTA1ZDlcdTA1ZDVcdTA1ZGQiLGRk'@;
put 'OmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWQ5XHUwNWQ1XHUwNWRlXHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWQ5XHUwNWRlXHUwNWQ5XHUwNWRkIn0sTToiXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5IixNTTpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVkN1x1MDVk'@;
put 'NVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkOVx1MDVkZCI6bSsiIFx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkZCJ9LHk6Ilx1MDVlOVx1MDVlMFx1MDVkNCIseXk6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZTlcdTA1ZTBcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQi'@;
put 'Om0lMTA9PTAmJjEwIT09bT9tKyIgXHUwNWU5XHUwNWUwXHUwNWQ0IjptKyIgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWRkIn19LG1lcmlkaWVtUGFyc2U6L1x1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThc'@;
put 'dTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVl'@;
put 'N1x1MDVlOHxcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXihcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1'@;
put 'ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxKSQvLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08NT8iXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6bTwxMD8iXHUwNWQx'@;
put 'XHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjptPDEyP00/J1x1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTYnOiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjptPDE4P00/J1x1MDVkMFx1MDVkN1x1MDVkNCJc'@;
put 'dTA1ZTYnOiJcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjoiXHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxIn19KX0oRigxNjY3NikpfSwyMzAxNTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgeD17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbT17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIs'@;
put 'Ilx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifSxsZT1bL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMHxcdTA5MmJcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1'@;
put 'MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMnxcdTA5'@;
put 'MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1fFx1MDkyOFx1MDkzNVx1MDkwMi9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyfFx1MDkyNlx1MDkzZlx1MDkzOC9pXTthZS5kZWZpbmVMb2NhbGUoImhpIix7bW9udGhz'@;
put 'Ontmb3JtYXQ6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFj'@;
put 'XHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5'@;
put 'MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUw'@;
put 'OTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4'@;
put 'XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9y'@;
put 'dDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5M2NcdTA5MzAuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDguX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MDVcdTA5MTcu'@;
put 'X1x1MDkzOFx1MDkzZlx1MDkyNC5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyLl9cdTA5MjhcdTA5MzUuX1x1MDkyNlx1MDkzZlx1MDkzOC4iLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVc'@;
put 'dTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRk'@;
put 'XHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMl9cdTA5MmNcdTA5NDFc'@;
put 'dTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFf'@;
put 'XHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQSBoOm1tOnNzIFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBB'@;
put 'IGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyJ9LG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOlsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUw'@;
put 'OTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5Mzhc'@;
put 'dTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1L2ksL15cdTA5MjZcdTA5M2ZcdTA5MzgvaV0sbW9udGhzUmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2Nc'@;
put 'dTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRc'@;
put 'dTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5'@;
put 'MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1'@;
put 'MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUw'@;
put 'OTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1'@;
put 'MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1'@;
put 'MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMw'@;
put 'fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5'@;
put 'MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1'@;
put 'MDkzMFx1MDk0MD98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzI/fFx1MDkyZVx1MDkwOD98'@;
put 'XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDg/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyND98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxc'@;
put 'dTA5MzhcdTA5M2ZcdTA5MjQ/XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkz'@;
put 'MD98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMD8pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1'@;
put 'MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRc'@;
put 'dTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MTVcdTA5MzJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5MzJd'@;
put 'IExUIixsYXN0V2VlazoiW1x1MDkyYVx1MDkzZlx1MDkxYlx1MDkzMlx1MDk0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDkyZVx1MDk0N1x1MDkwMiIscGFzdDoiJXMgXHUwOTJhXHUwOTM5XHUwOTMyXHUwOTQ3IixzOiJcdTA5MTVcdTA5'@;
put 'NDFcdTA5MWIgXHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsaDoi'@;
put 'XHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkwMlx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkwMlx1MDkxZlx1MDk0NyIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1'@;
put 'MDk0MFx1MDkyOFx1MDk0NyIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIseToiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKFIpe3JldHVybiBSLnJl'@;
put 'cGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oeil7cmV0dXJuIG1bel19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKHope3JldHVybiB4'@;
put 'W3pdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNHxcdTA5MzhcdTA5NDFcdTA5MmNcdTA5Mzl8XHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwfFx1MDkzNlx1MDkzZVx1MDkyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKFIseil7cmV0dXJuIDEyPT09UiYmKFI9MCks'@;
put 'Ilx1MDkzMFx1MDkzZVx1MDkyNCI9PT16P1I8ND9SOlIrMTI6Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI9PT16P1I6Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI9PT16P1I+PTEwP1I6UisxMjoiXHUwOTM2XHUwOTNlXHUwOTJlIj09PXo/UisxMjp2b2lkIDB9LG1lcmlkaWVt'@;
put 'OmZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUjw0PyJcdTA5MzBcdTA5M2VcdTA5MjQiOlI8MTA/Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI6UjwxNz8iXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIjpSPDIwPyJcdTA5MzZcdTA5M2VcdTA5MmUiOiJcdTA5MzBcdTA5M2VcdTA5MjQi'@;
put 'fSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwxNzEzNDpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyl7dmFyIFI9bGUrIiAiO3N3aXRjaChPKXtjYXNlInNzIjpyZXR1cm4gUisoMT09PWxlPyJzZWt1bmRhIjoy'@;
put 'PT09bGV8fDM9PT1sZXx8ND09PWxlPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIE0/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2FzZSJtbSI6cmV0dXJuIFIrKDE9PT1sZT8ibWludXRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJtaW51dGUiOiJtaW51dGEi'@;
put 'KTtjYXNlImgiOnJldHVybiBNPyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIFIrKDE9PT1sZT8ic2F0IjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBSKygxPT09bGU/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpy'@;
put 'ZXR1cm4gUisoMT09PWxlPyJtamVzZWMiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIFIrKDE9PT1sZT8iZ29kaW5hIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJnb2RpbmUiOiJnb2RpbmEiKX19YWUuZGVmaW5lTG9jYWxlKCJo'@;
put 'ciIse21vbnRoczp7Zm9ybWF0OiJzaWplXHUwMTBkbmphX3ZlbGphXHUwMTBkZV9vXHUwMTdldWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNpamVcdTAx'@;
put 'MGRhbmpfdmVsamFcdTAxMGRhX29cdTAxN2V1amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tvbG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9wcm9zaW5hYyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6InNpai5fdmVsai5fb1x1MDE3ZXUuX3RyYS5fc3ZpLl9saXAuX3Ny'@;
put 'cC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5f'@;
put 'cG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRE'@;
put 'Lk1NLllZWVkiLExMOiJEbyBNTU1NIFlZWVkiLExMTDoiRG8gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRj'@;
put 'aCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRk'@;
put 'IFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJvXHUwMTYxbHVdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gW3NyaWplZHVdIFt1'@;
put 'XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJw'@;
put 'cmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDoiZGFuIixkZDp4LE06Im1qZXNlYyIsTU06eCx5OiJnb2RpbnUiLHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0o'@;
put 'RigxNjY3NikpfSw1MDY3MDpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0idmFzXHhlMXJuYXAgaFx4ZTl0Zlx1MDE1MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxp'@;
put 'dCgiICIpO2Z1bmN0aW9uIG0oTyxSLHosSyl7dmFyIEw9Tztzd2l0Y2goeil7Y2FzZSJzIjpyZXR1cm4gS3x8Uj8iblx4ZTloXHhlMW55IG1ceGUxc29kcGVyYyI6Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gTCsoS3x8Uik/IiBtXHhlMXNvZHBlcmMiOiIg'@;
put 'bVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5IisoS3x8Uj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4gTCsoS3x8Uj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyhLfHxSPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0'@;
put 'dXJuIEwrKEt8fFI/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyhLfHxSPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJkZCI6cmV0dXJuIEwrKEt8fFI/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyhLfHxSPyIgaFx4ZjNuYXAiOiIgaFx4'@;
put 'ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBMKyhLfHxSPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UieSI6cmV0dXJuImVneSIrKEt8fFI/IiBceGU5diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gTCsoS3x8Uj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0'@;
put 'aW9uIGxlKE8pe3JldHVybihPPyIiOiJbbVx4ZmFsdF0gIikrIlsiK3hbdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifWFlLmRlZmluZUxvY2FsZSgiaHUiLHttb250aHM6ImphbnVceGUxcl9mZWJydVx4ZTFyX21ceGUxcmNpdXNfXHhlMXByaWxpc19tXHhlMWp1c19qXHhmYW5pdXNfalx4ZmFs'@;
put 'aXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdFx4ZjNiZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tXHhlMXJjLl9ceGUxcHIuX21ceGUxai5falx4ZmFuLl9qXHhmYWwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgi'@;
put 'XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InZhc1x4ZTFybmFwX2hceGU5dGZcdTAxNTFfa2VkZF9zemVyZGFfY3NceGZjdFx4ZjZydFx4ZjZrX3BceGU5bnRla19zem9tYmF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InZhc19oXHhlOXRfa2VkZF9zemVfY3NceGZjdF9w'@;
put 'XHhlOW5fc3pvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ2X2hfa19zemVfY3NfcF9zem8iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWS4gTU1NTSBELiIsTExMOiJZWVlZLiBNTU1NIEQuIEg6bW0i'@;
put 'LExMTEw6IllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L2RlfGR1L2ksaXNQTTpmdW5jdGlvbihPKXtyZXR1cm4idSI9PT1PLmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihPLFIseil7cmV0dXJuIE88MTI/ITA9PT16PyJkZSI6IkRF'@;
put 'IjohMD09PXo/ImR1IjoiRFUifSxjYWxlbmRhcjp7c2FtZURheToiW21hXSBMVFsta29yXSIsbmV4dERheToiW2hvbG5hcF0gTFRbLWtvcl0iLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIGxlLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2Vlazpm'@;
put 'dW5jdGlvbigpe3JldHVybiBsZS5jYWxsKHRoaXMsITEpfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMiLHM6bSxzczptLG0sbW06bSxoOm0saGg6bSxkOm0sZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQ'@;
put 'YXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQ1MjM6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21vbnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1'@;
put 'NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zlx1MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUw'@;
put 'NTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1'@;
put 'MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUw'@;
put 'NTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUw'@;
put 'NTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNc'@;
put 'dTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBf'@;
put 'XHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1'@;
put 'ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUwNTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1'@;
put 'NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBcdTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTZmXHUwNTc4XHUwNTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2'@;
put 'NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTcwXHUwNTZiXHUwNTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4'@;
put 'Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3'@;
put 'MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcw'@;
put 'XHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZ'@;
put 'WVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVcdTA1N2RcdTA1ODVcdTA1ODBdIExUIixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUwNTcyXHUwNTY4XSBMVCIsbGFzdERheToi'@;
put 'W1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2'@;
put 'MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA1NzBcdTA1NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIs'@;
put 'czoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNzOiIlZCBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1'@;
put 'MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0IixoaDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0IixkOiJcdTA1ODVcdTA1ODAiLGRkOiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06'@;
put 'IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToiXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0sbWVyaWRpZW1QYXJzZTovXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1'@;
put 'MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9eKFx1MDU4MVx1MDU2'@;
put 'NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYpJC8udGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSl7cmV0dXJuIG08ND8iXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUw'@;
put 'NTYxIjptPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOm08MTc/Ilx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MSI6Ilx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRh'@;
put 'eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOmNhc2UiREREbyI6cmV0dXJuIDE9PT1tP20rIi1cdTA1NmJcdTA1'@;
put 'NzYiOm0rIi1cdTA1ODBcdTA1NjQiO2RlZmF1bHQ6cmV0dXJuIG19fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw5OTIzMzpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImlkIix7bW9udGhzOiJKYW51YXJpX0Zl'@;
put 'YnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0FndF9TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXM6Ik1pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SYWJfS2FtX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxv'@;
put 'bmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXxz'@;
put 'aWFuZ3xzb3JlfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksInBhZ2kiPT09bGU/bToic2lhbmciPT09bGU/bT49MTE/bTptKzEyOiJzb3JlIj09PWxlfHwibWFsYW0iPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0s'@;
put 'bGUsTSl7cmV0dXJuIG08MTE/InBhZ2kiOm08MTU/InNpYW5nIjptPDE5PyJzb3JlIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Jlc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tl'@;
put 'bWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGFsdSBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxhbHUiLHM6ImJlYmVyYXBhIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNlbWVuaXQiLG1tOiIl'@;
put 'ZCBtZW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sOTQ2OTM6ZnVuY3Rpb24oYXQsTGUsRil7'@;
put 'IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChNKXtyZXR1cm4gTSUxMDA9PTExfHxNJTEwIT0xfWZ1bmN0aW9uIG0oTSxPLFIseil7dmFyIEs9TSsiICI7c3dpdGNoKFIpe2Nhc2UicyI6cmV0dXJuIE98fHo/Im5va2tyYXIgc2VrXHhmYW5kdXIiOiJub2trcnVtIHNla1x4'@;
put 'ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4geChNKT9LKyhPfHx6PyJzZWtceGZhbmR1ciI6InNla1x4ZmFuZHVtIik6Sysic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1cm4gTz8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1IjtjYXNlIm1tIjpyZXR1cm4geChNKT9LKyhPfHx6PyJtXHhlZG5c'@;
put 'eGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOk8/SysibVx4ZWRuXHhmYXRhIjpLKyJtXHhlZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiB4KE0pP0srKE98fHo/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6Sysia2x1a2t1c3R1bmQiO2Nhc2UiZCI6cmV0dXJuIE8/ImRhZ3VyIjp6'@;
put 'PyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4geChNKT9PP0srImRhZ2FyIjpLKyh6PyJkYWdhIjoiZFx4ZjZndW0iKTpPP0srImRhZ3VyIjpLKyh6PyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gTz8ibVx4ZTFudVx4ZjB1ciI6ej8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGki'@;
put 'O2Nhc2UiTU0iOnJldHVybiB4KE0pP08/SysibVx4ZTFudVx4ZjBpciI6Sysoej8ibVx4ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOk8/SysibVx4ZTFudVx4ZjB1ciI6Sysoej8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiKTtjYXNlInkiOnJldHVybiBPfHx6PyJceGUxciI6Ilx4'@;
put 'ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIHgoTSk/SysoT3x8ej8iXHhlMXIiOiJceGUxcnVtIik6SysoT3x8ej8iXHhlMXIiOiJceGUxcmkiKX19YWUuZGVmaW5lTG9jYWxlKCJpcyIse21vbnRoczoiamFuXHhmYWFyX2ZlYnJceGZhYXJfbWFyc19hcHJceGVkbF9tYVx4ZWRfalx4ZmFuXHhlZF9q'@;
put 'XHhmYWxceGVkX1x4ZTFnXHhmYXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25ceGYzdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFceGVkX2pceGZhbl9qXHhmYWxfXHhlMWdceGZhX3NlcF9va3Rfblx4ZjN2X2RlcyIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW51ZGFndXJfXHhmZXJpXHhmMGp1ZGFndXJfbWlceGYwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2ZceGY2c3R1ZGFndXJfbGF1Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl9ceGZlcmlfbWlceGYwX2ZpbV9m'@;
put 'XHhmNnNfbGF1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9NXHhlMV9ceGRlcl9NaV9GaV9GXHhmNl9MYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZ'@;
put 'WVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4ZWQgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGUxIG1vcmd1biBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4ZWQgZ1x4'@;
put 'ZTZyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwYXN0YV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZWZ0aXIgJXMiLHBhc3Q6ImZ5cmlyICVzIHNceGVkXHhmMGFuIixzOm0sc3M6bSxtLG1tOm0saDoia2x1a2t1c3R1bmQiLGhoOm0s'@;
put 'ZDptLGRkOm0sTTptLE1NOm0seTptLHl5Om19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw3ODExODpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5k'@;
put 'ZWZpbmVMb2NhbGUoIml0LWNoIix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9t'@;
put 'YWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9t'@;
put 'ZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBI'@;
put 'SDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT2dnaSBhbGxlXSBMVCIsbmV4dERheToiW0RvbWFuaSBhbGxlXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FsbGVdIExUIixsYXN0RGF5OiJbSWVyaSBhbGxlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExUIjoiW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3JldHVybigvXlswLTldLiskLy50ZXN0KG0pPyJ0cmEi'@;
put 'OiJpbiIpKyIgIittfSxwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIixNOiJ1biBtZXNlIixNTToiJWQgbWVz'@;
put 'aSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2MzkzNjpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0'@;
put 'IjthZS5kZWZpbmVMb2NhbGUoIml0Iix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fw'@;
put 'cl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21h'@;
put 'cl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ'@;
put 'WSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltPZ2dpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIltEb21hbmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQi'@;
put 'fSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltJZXJpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW0xhIHNjb3JzYV0gZGRkZCBbYSIrKHRoaXMu'@;
put 'aG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCI6IltMbyBzY29yc29dIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl'@;
put 'OiJ0cmEgJXMiLHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLHc6InVuYSBzZXR0aW1hbmEiLHd3OiIlZCBz'@;
put 'ZXR0aW1hbmUiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg2ODcxOmZ1bmN0aW9uKGF0'@;
put 'LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiamEiLHtlcmFzOlt7c2luY2U6IjIwMTktMDUtMDEiLG9mZnNldDoxLG5hbWU6Ilx1NGVlNFx1NTQ4YyIsbmFycm93OiJcdTMyZmYiLGFiYnI6IlIifSx7c2luY2U6IjE5ODktMDEtMDgiLHVudGlsOiIy'@;
put 'MDE5LTA0LTMwIixvZmZzZXQ6MSxuYW1lOiJcdTVlNzNcdTYyMTAiLG5hcnJvdzoiXHUzMzdiIixhYmJyOiJIIn0se3NpbmNlOiIxOTI2LTEyLTI1Iix1bnRpbDoiMTk4OS0wMS0wNyIsb2Zmc2V0OjEsbmFtZToiXHU2NjJkXHU1NDhjIixuYXJyb3c6Ilx1MzM3YyIsYWJicjoiUyJ9LHtzaW5j'@;
put 'ZToiMTkxMi0wNy0zMCIsdW50aWw6IjE5MjYtMTItMjQiLG9mZnNldDoxLG5hbWU6Ilx1NTkyN1x1NmI2MyIsbmFycm93OiJcdTMzN2QiLGFiYnI6IlQifSx7c2luY2U6IjE4NzMtMDEtMDEiLHVudGlsOiIxOTEyLTA3LTI5IixvZmZzZXQ6NixuYW1lOiJcdTY2MGVcdTZjYmIiLG5hcnJvdzoi'@;
put 'XHUzMzdlIixhYmJyOiJNIn0se3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoiMTg3My0xMi0zMSIsb2Zmc2V0OjEsbmFtZToiXHU4OTdmXHU2NmE2IixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJcdTdkMDBcdTUx'@;
put 'NDNcdTUyNGQiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyhcdTUxNDN8XGQrKVx1NWU3NC8sZXJhWWVhck9yZGluYWxQYXJzZTpmdW5jdGlvbihtLGxlKXtyZXR1cm4iXHU1MTQzIj09PWxlWzFdPzE6cGFyc2VJbnQobGVbMV18fG0sMTApfSxtb250aHM6'@;
put 'IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhf'@;
put 'Nlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NWU1XHU2NmRjXHU2NWU1X1x1NjcwOFx1NjZkY1x1NjVlNV9cdTcwNmJcdTY2ZGNcdTY1ZTVfXHU2YzM0XHU2NmRjXHU2NWU1X1x1NjcyOFx1'@;
put 'NjZkY1x1NjVlNV9cdTkxZDFcdTY2ZGNcdTY1ZTVfXHU1NzFmXHU2NmRjXHU2NWU1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NjcwOF9c'@;
put 'dTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhI'@;
put 'Om1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNShkZGQp'@;
put 'IEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MzQ4XHU1MjRkfFx1NTM0OFx1NWY4Yy9pLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuIlx1NTM0OFx1NWY4YyI9PT1tfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDEyPyJcdTUzNDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxj'@;
put 'YWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4gbS53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2'@;
put 'MjhcdTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1tLndlZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5j'@;
put 'dGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UieSI6cmV0dXJuIDE9PT1tPyJcdTUxNDNcdTVlNzQiOm0rIlx1NWU3NCI7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHU2NWU1IjtkZWZhdWx0OnJldHVybiBtfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixw'@;
put 'YXN0OiIlc1x1NTI0ZCIsczoiXHU2NTcwXHU3OWQyIixzczoiJWRcdTc5ZDIiLG06IjFcdTUyMDYiLG1tOiIlZFx1NTIwNiIsaDoiMVx1NjY0Mlx1OTU5MyIsaGg6IiVkXHU2NjQyXHU5NTkzIixkOiIxXHU2NWU1IixkZDoiJWRcdTY1ZTUiLE06IjFcdTMwZjZcdTY3MDgiLE1NOiIlZFx1MzBm'@;
put 'Nlx1NjcwOCIseToiMVx1NWU3NCIseXk6IiVkXHU1ZTc0In19KX0oRigxNjY3NikpfSw2ODcxMDpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImp2Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9K'@;
put 'dW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5lbl9TZWxv'@;
put 'c29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU3AiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5t'@;
put 'bSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8s'@;
put 'bWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJlbmppbmciPT09bGU/bToic2l5YW5nIj09PWxlP20+PTExP206bSsxMjoic29udGVuIj09PWxlfHwibmRhbHUiPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJu'@;
put 'IG08MTE/ImVuamluZyI6bTwxNT8ic2l5YW5nIjptPDE5PyJzb250ZW4iOiJuZGFsdSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGludGVuIHB1bmlrbyBwdWt1bF0gTFQiLG5leHREYXk6IltNYmVuamFuZyBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltL'@;
put 'YWxhIHdpbmdpIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IndvbnRlbiBpbmcgJXMiLHBhc3Q6IiVzIGluZ2thbmcga2VwZW5na2VyIixzOiJzYXdldGF3aXMgZGV0aWsiLHNzOiIlZCBk'@;
put 'ZXRpayIsbToic2V0dW5nZ2FsIG1lbml0IixtbToiJWQgbWVuaXQiLGg6InNldHVuZ2dhbCBqYW0iLGhoOiIlZCBqYW0iLGQ6InNlZGludGVuIixkZDoiJWQgZGludGVuIixNOiJzZXd1bGFuIixNTToiJWQgd3VsYW4iLHk6InNldGF1biIseXk6IiVkIHRhdW4ifSx3ZWVrOntkb3c6MSxkb3k6'@;
put 'N319KX0oRigxNjY3NikpfSwxNzEyNTpmdW5jdGlvbihhdCxMZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImthIix7bW9udGhzOiJcdTEwZDhcdTEwZDBcdTEwZGNcdTEwZDVcdTEwZDBcdTEwZTBcdTEwZDhfXHUxMGQ3XHUxMGQ0XHUxMGQxXHUxMGQ0'@;
put 'XHUxMGUwXHUxMGQ1XHUxMGQwXHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBlMFx1MTBlMlx1MTBkOF9cdTEwZDBcdTEwZGVcdTEwZTBcdTEwZDhcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY1x1MTBkOFx1MTBlMVx1MTBk'@;
put 'OF9cdTEwZDhcdTEwZDVcdTEwZGFcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQwXHUxMGQyXHUxMGQ1XHUxMGQ4XHUxMGUxXHUxMGUyXHUxMGRkX1x1MTBlMVx1MTBkNFx1MTBlNVx1MTBlMlx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGRcdTEwZTVcdTEwZTJcdTEw'@;
put 'ZGRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRjXHUxMGRkXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkM1x1MTBkNFx1MTBkOVx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUx'@;
put 'MGQ4XHUxMGQwXHUxMGRjX1x1MTBkN1x1MTBkNFx1MTBkMV9cdTEwZGJcdTEwZDBcdTEwZTBfXHUxMGQwXHUxMGRlXHUxMGUwX1x1MTBkYlx1MTBkMFx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNfXHUxMGQ4XHUxMGQ1XHUxMGRhX1x1MTBkMFx1MTBkMlx1MTBkNV9cdTEwZTFcdTEwZDRcdTEw'@;
put 'ZTVfXHUxMGRkXHUxMGU1XHUxMGUyX1x1MTBkY1x1MTBkZFx1MTBkNF9cdTEwZDNcdTEwZDRcdTEwZDkiLnNwbGl0KCJfIiksd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMF9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEw'@;
put 'ZDdcdTEwZDhfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEw'@;
put 'ZDdcdTEwZDhfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGQ4X1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMFx1MTBlMV9cdTEwZGRc'@;
put 'dTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZWVcdTEwZTNc'@;
put 'dTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGUxX1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovKFx1MTBlY1x1'@;
put 'MTBkOFx1MTBkY1x1MTBkMHxcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDIpL30sd2Vla2RheXNTaG9ydDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4X1x1MTBkZFx1MTBlMFx1MTBlOF9cdTEwZTFcdTEwZDBcdTEwZGJfXHUxMGRkXHUxMGQ3XHUxMGVlX1x1MTBlZVx1MTBlM1x1MTBk'@;
put 'N19cdTEwZGVcdTEwZDBcdTEwZTBfXHUxMGU4XHUxMGQwXHUxMGQxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwZDlcdTEwZDVfXHUxMGRkXHUxMGUwX1x1MTBlMVx1MTBkMF9cdTEwZGRcdTEwZDdfXHUxMGVlXHUxMGUzX1x1MTBkZVx1MTBkMF9cdTEwZThcdTEwZDAiLnNwbGl0KCJf'@;
put 'IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMGQzXHUxMGU2'@;
put 'XHUxMGQ0XHUxMGUxXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dERheToiW1x1MTBlZVx1MTBkNVx1MTBkMFx1MTBkYV0gTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3REYXk6IltcdTEwZDJcdTEwZTNcdTEwZThcdTEwZDhcdTEwZGNdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0V2VlazoiW1x1MTBl'@;
put 'OFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMl0gZGRkZCBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdFdlZWs6IltcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDBdIGRkZGQgTFQtXHUxMGQ2XHUxMGQ0IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3Jl'@;
put 'dHVybiBtLnJlcGxhY2UoLyhcdTEwZWNcdTEwZDBcdTEwZGJ8XHUxMGVjXHUxMGUzXHUxMGQ3fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN3xcdTEwZWNcdTEwZDRcdTEwZGF8XHUxMGQzXHUxMGU2fFx1MTBkN1x1MTBkNSkoXHUxMGQ4fFx1MTBkNCkvLGZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJu'@;
put 'Ilx1MTBkOCI9PT1PP00rIlx1MTBlOFx1MTBkOCI6TStPKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24obSl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNc'@;
put 'dTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChtKT9tLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChtKT9tLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1'@;
put 'MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6bX0sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBk'@;
put 'MFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBl'@;
put 'Nlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5h'@;
put 'bFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3JldHVybiAwPT09bT9tOjE9PT1tP20rIi1cdTEwZGFcdTEwZDgiOm08MjB8fG08PTEwMCYmbSUyMD09MHx8bSUxMDA9PTA/Ilx1MTBkYlx1MTBk'@;
put 'NC0iK206bSsiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDgyNDYxOmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXswOiItXHUwNDQ4XHUwNDU2IiwxOiItXHUwNDQ4XHUwNDU2IiwyOiItXHUwNDQ4XHUwNDU2Iiwz'@;
put 'OiItXHUwNDQ4XHUwNDU2Iiw0OiItXHUwNDQ4XHUwNDU2Iiw1OiItXHUwNDQ4XHUwNDU2Iiw2OiItXHUwNDQ4XHUwNDRiIiw3OiItXHUwNDQ4XHUwNDU2Iiw4OiItXHUwNDQ4XHUwNDU2Iiw5OiItXHUwNDQ4XHUwNDRiIiwxMDoiLVx1MDQ0OFx1MDQ0YiIsMjA6Ii1cdTA0NDhcdTA0NGIiLDMw'@;
put 'OiItXHUwNDQ4XHUwNDRiIiw0MDoiLVx1MDQ0OFx1MDQ0YiIsNTA6Ii1cdTA0NDhcdTA0NTYiLDYwOiItXHUwNDQ4XHUwNDRiIiw3MDoiLVx1MDQ0OFx1MDQ1NiIsODA6Ii1cdTA0NDhcdTA0NTYiLDkwOiItXHUwNDQ4XHUwNDRiIiwxMDA6Ii1cdTA0NDhcdTA0NTYifTthZS5kZWZpbmVMb2Nh'@;
put 'bGUoImtrIix7bW9udGhzOiJcdTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMw'@;
put 'XHUwNDNjXHUwNDRiXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQz'@;
put 'YV9cdTA0OWJcdTA0MzBcdTA0MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUw'@;
put 'NGEzX1x1MDQzMFx1MDQ5Ylx1MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUw'@;
put 'NDMwXHUwNDM3X1x1MDQ5Ylx1MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0'@;
put 'NTZfXHUwNDQxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUw'@;
put 'NDNjXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1'@;
put 'MDQzNlx1MDRiMVx1MDQzY19cdTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0'@;
put 'MzNcdTA0NTZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUw'@;
put 'NDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJc'@;
put 'dTA0YTNdIGRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNk'@;
put 'IixzOiJcdTA0MzFcdTA0NTZcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4'@;
put 'XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0'@;
put 'NTZcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUw'@;
put 'NDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rpb24obGUpe3JldHVybiBsZSsoeFtsZV18fHhbbGUlMTBdfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95'@;
put 'Ojd9fSl9KEYoMTY2NzYpKX0sNzczOTk6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MTdlMSIsMjoiXHUxN2UyIiwzOiJcdTE3ZTMiLDQ6Ilx1MTdlNCIsNToiXHUxN2U1Iiw2OiJcdTE3ZTYiLDc6Ilx1MTdlNyIsODoiXHUxN2U4Iiw5'@;
put 'OiJcdTE3ZTkiLDA6Ilx1MTdlMCJ9LG09eyJcdTE3ZTEiOiIxIiwiXHUxN2UyIjoiMiIsIlx1MTdlMyI6IjMiLCJcdTE3ZTQiOiI0IiwiXHUxN2U1IjoiNSIsIlx1MTdlNiI6IjYiLCJcdTE3ZTciOiI3IiwiXHUxN2U4IjoiOCIsIlx1MTdlOSI6IjkiLCJcdTE3ZTAiOiIwIn07YWUuZGVmaW5l'@;
put 'TG9jYWxlKCJrbSIse21vbnRoczoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThc'@;
put 'dTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4'@;
put 'NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTc5OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUx'@;
put 'N2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5'@;
put 'XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTE3YTJcdTE3YjZcdTE3OTFcdTE3Yjdc'@;
put 'dTE3OGZcdTE3ZDJcdTE3OTlfXHUxNzg1XHUxN2QwXHUxNzkzXHUxN2QyXHUxNzkxX1x1MTdhMlx1MTc4NFx1MTdkMlx1MTc4Mlx1MTdiNlx1MTc5YV9cdTE3OTZcdTE3YmJcdTE3OTJfXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2EwXHUxNzlmXHUxN2QyXHUxNzk0XHUxNzhmXHUxN2I3XHUxN2Nk'@;
put 'X1x1MTc5Zlx1MTdiYlx1MTc4MFx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YzVcdTE3OWFcdTE3Y2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxN2EyXHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzTWluOiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi'@;
put 'LEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODB8XHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1'@;
put 'Lyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUiPT09TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDEyPyJcdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODAiOiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUi'@;
put 'fSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTc5MFx1MTdkMlx1MTc4NFx1MTdjM1x1MTc5M1x1MTdjMVx1MTdjNyBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0RGF5OiJbXHUxNzlmXHUxN2QyXHUxN2EyXHUxN2MyXHUxNzgwIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQi'@;
put 'LG5leHRXZWVrOiJkZGRkIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0RGF5OiJbXHUxNzk4XHUxN2QyXHUxNzlmXHUxN2I3XHUxNzliXHUxNzk4XHUxN2I3XHUxNzg5IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTE3OWZcdTE3OTRc'@;
put 'dTE3ZDJcdTE3OGZcdTE3YjZcdTE3YTBcdTE3Y2RcdTE3OThcdTE3YmJcdTE3OTNdIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MTc5MVx1MTdjMFx1MTc4ZiIscGFzdDoiJXNcdTE3OThcdTE3YmJcdTE3OTMi'@;
put 'LHM6Ilx1MTc5NFx1MTdjOVx1MTdiYlx1MTc5M1x1MTdkMlx1MTc5OFx1MTdiNlx1MTc5M1x1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsc3M6IiVkIFx1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkzXHUx'@;
put 'N2I2XHUxNzkxXHUxN2I4IixtbToiJWQgXHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixoOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGhoOiIlZCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGQ6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5MFx1MTdkMlx1'@;
put 'MTc4NFx1MTdjMyIsZGQ6IiVkIFx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsTToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzgxXHUxN2MyIixNTToiJWQgXHUxNzgxXHUxN2MyIix5OiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYiLHl5OiIlZCBcdTE3'@;
put 'ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTE3OTFcdTE3YjhcZHsxLDJ9LyxvcmRpbmFsOiJcdTE3OTFcdTE3YjglZCIscHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MTdlMVx1MTdlMlx1MTdlM1x1MTdlNFx1'@;
put 'MTdlNVx1MTdlNlx1MTdlN1x1MTdlOFx1MTdlOVx1MTdlMF0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2'@;
put 'NzYpKX0sMzg3MjA6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGNlNyIsMjoiXHUwY2U4IiwzOiJcdTBjZTkiLDQ6Ilx1MGNlYSIsNToiXHUwY2ViIiw2OiJcdTBjZWMiLDc6Ilx1MGNlZCIsODoiXHUwY2VlIiw5OiJcdTBjZWYiLDA6'@;
put 'Ilx1MGNlNiJ9LG09eyJcdTBjZTciOiIxIiwiXHUwY2U4IjoiMiIsIlx1MGNlOSI6IjMiLCJcdTBjZWEiOiI0IiwiXHUwY2ViIjoiNSIsIlx1MGNlYyI6IjYiLCJcdTBjZWQiOiI3IiwiXHUwY2VlIjoiOCIsIlx1MGNlZiI6IjkiLCJcdTBjZTYiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJrbiIs'@;
put 'e21vbnRoczoiXHUwYzljXHUwY2E4XHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUw'@;
put 'Y2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJcdTBjYWNc'@;
put 'dTBjYjBcdTBjY2RfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2Qi'@;
put 'LnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGM5Y1x1MGNhOF9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBj'@;
put 'ZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1'@;
put 'MGNjNlx1MGNjMlx1MGNkNV9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjhc'@;
put 'dTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhY1x1MGNjMVx1MGNhN1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBf'@;
put 'XHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZlx1MGNiNVx1MGNiZVx1MGNiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUw'@;
put 'Y2FlX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM19cdTBjYWNcdTBjYzFcdTBjYTdfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGNhZFx1MGNiZV9cdTBj'@;
put 'YjhcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2FlXHUwYzgyX1x1MGNhY1x1MGNjMV9cdTBjOTdcdTBjYzFfXHUwY2I2XHUwY2MxX1x1MGNiNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZ'@;
put 'WSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjODdcdTBjODJcdTBjYTZcdTBjYzFdIExUIixuZXh0RGF5OiJbXHUwY2E4XHUwY2JlXHUwY2IzXHUwY2M2XSBMVCIsbmV4dFdlZWs6ImRk'@;
put 'ZGQsIExUIixsYXN0RGF5OiJbXHUwY2E4XHUwY2JmXHUwY2E4XHUwY2NkXHUwY2E4XHUwY2M2XSBMVCIsbGFzdFdlZWs6IltcdTBjOTVcdTBjYzZcdTBjYzJcdTBjYThcdTBjYzZcdTBjYWZdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjYThc'@;
put 'dTBjODJcdTBjYTRcdTBjYjAiLHBhc3Q6IiVzIFx1MGNiOVx1MGNiZlx1MGM4Mlx1MGNhNlx1MGNjNiIsczoiXHUwYzk1XHUwY2M2XHUwY2IyXHUwY2I1XHUwY2MxIFx1MGM5NVx1MGNjZFx1MGNiN1x1MGNhM1x1MGM5N1x1MGNiM1x1MGNjMSIsc3M6IiVkIFx1MGNiOFx1MGNjNlx1MGM5NVx1'@;
put 'MGNjNlx1MGM4Mlx1MGNhMVx1MGNjMVx1MGM5N1x1MGNiM1x1MGNjMSIsbToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsbW06IiVkIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsaDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUw'@;
put 'Y2MxIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsaGg6IiVkIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsZDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhNlx1MGNiZlx1MGNhOCIsZGQ6IiVkIFx1MGNhNlx1MGNiZlx1MGNhOCIsTToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2Mx'@;
put 'IFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIsTU06IiVkIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIseToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyIseXk6IiVkIFx1MGNiNVx1MGNiMFx1MGNjZFx1'@;
put 'MGNiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTBjZTdcdTBjZThcdTBjZTlcdTBjZWFcdTBjZWJcdTBjZWNcdTBjZWRcdTBjZWVcdTBjZWZcdTBjZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1'@;
put 'cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZnxcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzZ8XHUwY2FlXHUwY2E3XHUwY2Nk'@;
put 'XHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4fFx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI9PT1PP008ND9NOk0rMTI6Ilx1MGNh'@;
put 'Y1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI9PT1PP006Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI9PT1PP00+PTEwP006TSsxMjoiXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2Ij09PU8/TSsxMjp2b2lkIDB9LG1l'@;
put 'cmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiOk08MTA/Ilx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI6TTwxNz8iXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2Jl'@;
put 'XHUwY2I5XHUwY2NkXHUwY2E4IjpNPDIwPyJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiOiJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MGNhOFx1MGNjNlx1MGNkNSkvLG9yZGluYWw6ZnVuY3Rpb24oTSl7'@;
put 'cmV0dXJuIE0rIlx1MGNhOFx1MGNjNlx1MGNkNSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDg1MzA2OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgia28iLHttb250aHM6IjFcdWM2ZDRfMlx1YzZkNF8zXHVj'@;
put 'NmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2'@;
put 'ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHVjNzdjXHVjNjk0XHVjNzdjX1x1YzZkNFx1YzY5NFx1Yzc3Y19cdWQ2NTRcdWM2OTRcdWM3N2NfXHVjMjE4XHVjNjk0XHVjNzdjX1x1YmFhOVx1YzY5NFx1Yzc3Y19cdWFlMDhcdWM2'@;
put 'OTRcdWM3N2NfXHVkMWEwXHVjNjk0XHVjNzdjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9c'@;
put 'dWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLExMTEw6IllZWVlcdWIx'@;
put 'NDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIixsOiJZWVlZLk1NLkRELiIsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIEEgaDptbSIsbGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0ifSxjYWxlbmRhcjp7'@;
put 'c2FtZURheToiXHVjNjI0XHViMjk4IExUIixuZXh0RGF5OiJcdWIwYjRcdWM3N2MgTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJcdWM1YjRcdWM4MWMgTFQiLGxhc3RXZWVrOiJcdWM5YzBcdWIwOWNcdWM4ZmMgZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1'@;
put 'dHVyZToiJXMgXHVkNmM0IixwYXN0OiIlcyBcdWM4MDQiLHM6Ilx1YmE4NyBcdWNkMDgiLHNzOiIlZFx1Y2QwOCIsbToiMVx1YmQ4NCIsbW06IiVkXHViZDg0IixoOiJcdWQ1NWMgXHVjMmRjXHVhYzA0IixoaDoiJWRcdWMyZGNcdWFjMDQiLGQ6Ilx1ZDU1OFx1YjhlOCIsZGQ6IiVkXHVjNzdj'@;
put 'IixNOiJcdWQ1NWMgXHViMmVjIixNTToiJWRcdWIyZWMiLHk6Ilx1Yzc3YyBcdWIxNDQiLHl5OiIlZFx1YjE0NCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHVjNzdjfFx1YzZkNHxcdWM4ZmMpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJkIjpj'@;
put 'YXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHVjNzdjIjtjYXNlIk0iOnJldHVybiBtKyJcdWM2ZDQiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiXHVjOGZjIjtkZWZhdWx0OnJldHVybiBtfX0sbWVyaWRpZW1QYXJzZTovXHVjNjI0XHVjODA0fFx1YzYyNFx1ZDZjNC8saXNQTTpmdW5j'@;
put 'dGlvbihtKXtyZXR1cm4iXHVjNjI0XHVkNmM0Ij09PW19LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/Ilx1YzYyNFx1YzgwNCI6Ilx1YzYyNFx1ZDZjNCJ9fSl9KEYoMTY2NzYpKX0sODI5OTU6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmlj'@;
put 'dCI7dmFyIHg9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJc'@;
put 'dTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sbGU9WyJcdTA2YTlcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1Iiwi'@;
put 'XHUwNjM0XHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjJhIiwiXHUwNjI2XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjQ2XHUwNmNjXHUwNjMzXHUwNjI3XHUwNjQ2IiwiXHUwNjI2XHUwNjI3XHUwNmNjXHUwNjI3XHUwNjMxIiwiXHUwNjJkXHUwNjQ4XHUwNjMyXHUwNmQ1XHUwNmNjXHUw'@;
put 'NjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjJhXHUwNmQ1XHUwNjQ1XHUwNjQ1XHUwNjQ4XHUwNjMyIiwiXHUwNjI2XHUwNjI3XHUwNjI4IiwiXHUwNjI2XHUwNmQ1XHUwNmNjXHUwNjQ0XHUwNjQ4XHUwNjQ4XHUwNjQ0IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDZj'@;
put 'Y1x1MDZkNVx1MDY0M1x1MDZkNVx1MDY0NSIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNmE5XHUwNmQ1XHUwNjQ1'@;
put 'Il07YWUuZGVmaW5lTG9jYWxlKCJrdSIse21vbnRoczpsZSxtb250aHNTaG9ydDpsZSx3ZWVrZGF5czoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1'@;
put 'MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1'@;
put 'MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0'@;
put 'N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0'@;
put 'NV9cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1'@;
put 'MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkg'@;
put 'SEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjfFx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihPKXtyZXR1cm4v'@;
put 'XHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KE8pfSxtZXJpZGllbTpmdW5jdGlvbihPLFIseil7cmV0dXJuIE88MTI/Ilx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYz'@;
put 'MVx1MDY0N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMxXHUwNmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2'@;
put 'NDZcdTA2Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUw'@;
put 'NjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAl'@;
put 'cyIscGFzdDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1'@;
put 'MDY0MyBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIl'@;
put 'ZCBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgiLGRkOiIlZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2'@;
put 'NDZcdTA2YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9bXHUwNjYx'@;
put 'XHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFIpe3JldHVybiBtW1JdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFIp'@;
put 'e3JldHVybiB4W1JdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDg3Nzk6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezA6Ii1cdTA0NDdcdTA0YWYiLDE6Ii1cdTA0NDdcdTA0Mzgi'@;
put 'LDI6Ii1cdTA0NDdcdTA0MzgiLDM6Ii1cdTA0NDdcdTA0YWYiLDQ6Ii1cdTA0NDdcdTA0YWYiLDU6Ii1cdTA0NDdcdTA0MzgiLDY6Ii1cdTA0NDdcdTA0NGIiLDc6Ii1cdTA0NDdcdTA0MzgiLDg6Ii1cdTA0NDdcdTA0MzgiLDk6Ii1cdTA0NDdcdTA0NDMiLDEwOiItXHUwNDQ3XHUwNDQzIiwy'@;
put 'MDoiLVx1MDQ0N1x1MDQ0YiIsMzA6Ii1cdTA0NDdcdTA0NDMiLDQwOiItXHUwNDQ3XHUwNDRiIiw1MDoiLVx1MDQ0N1x1MDRhZiIsNjA6Ii1cdTA0NDdcdTA0NGIiLDcwOiItXHUwNDQ3XHUwNDM4Iiw4MDoiLVx1MDQ0N1x1MDQzOCIsOTA6Ii1cdTA0NDdcdTA0NDMiLDEwMDoiLVx1MDQ0N1x1'@;
put 'MDRhZiJ9O2FlLmRlZmluZUxvY2FsZSgia3kiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQz'@;
put 'NVx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUw'@;
put 'NDRjX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2Rc'@;
put 'dTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1'@;
put 'MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDE2XHUwNDM1XHUwNDNhXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNFx1MDRhZlx1MDQzOVx1MDQ0OFx1'@;
put 'MDRlOVx1MDQzY1x1MDQzMVx1MDRhZl9cdTA0MjhcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDI4XHUwNDMwXHUwNDQwXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxMVx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1'@;
put 'MDQzOF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDE4XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxNlx1MDQzNVx1MDQzYV9cdTA0MTRcdTA0YWZcdTA0MzlfXHUwNDI4XHUwNDM1XHUwNDM5X1x1MDQyOFx1MDQzMFx1'@;
put 'MDQ0MF9cdTA0MTFcdTA0MzVcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQxOFx1MDQ0OFx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDE2XHUwNDNhX1x1MDQxNFx1MDQzOV9cdTA0MjhcdTA0MzlfXHUwNDI4XHUwNDQwX1x1MDQxMVx1MDQzOV9cdTA0MTZcdTA0M2Nf'@;
put 'XHUwNDE4XHUwNDQ4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7'@;
put 'c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDRhZlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFc'@;
put 'dTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDRkXHUwNDRkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNGU5XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQz'@;
put 'ZFx1MDQ0Ylx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNGFmXHUwNDNkXHUwNGFmXSBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBc'@;
put 'dTA0M2NcdTA0NDNcdTA0NDBcdTA0NDNcdTA0M2QiLHM6Ilx1MDQzMVx1MDQzOFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1'@;
put 'MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0'@;
put 'NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzZcdTA0NGJc'@;
put 'dTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDdcdTA0Mzh8XHUwNDQ3XHUwNDRifFx1MDQ0N1x1MDRhZnxcdTA0NDdcdTA0NDMpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUrKHhbbGVdfHx4W2xl'@;
put 'JTEwXXx8eFtsZT49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDYyMDU3OmZ1bmN0aW9uKGF0LExlLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgoUix6LEssTCl7dmFyIGs9e206WyJlbmcgTWludXR0IiwiZW5nZXIgTWlu'@;
put 'dXR0Il0saDpbImVuZyBTdG9ubiIsImVuZ2VyIFN0b25uIl0sZDpbImVlbiBEYWciLCJlbmdlbSBEYWciXSxNOlsiZWUgTW91bnQiLCJlbmdlbSBNb3VudCJdLHk6WyJlZSBKb2VyIiwiZW5nZW0gSm9lciJdfTtyZXR1cm4gej9rW0tdWzBdOmtbS11bMV19ZnVuY3Rpb24gTShSKXtpZihSPXBh'@;
put 'cnNlSW50KFIsMTApLGlzTmFOKFIpKXJldHVybiExO2lmKFI8MClyZXR1cm4hMDtpZihSPDEwKXJldHVybiA0PD1SJiZSPD03O2lmKFI8MTAwKXt2YXIgej1SJTEwO3JldHVybiBNKDA9PT16P1IvMTA6eil9aWYoUjwxZTQpe2Zvcig7Uj49MTA7KVIvPTEwO3JldHVybiBNKFIpfXJldHVybiBN'@;
put 'KFIvPTFlMyl9YWUuZGVmaW5lTG9jYWxlKCJsYiIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRlcnpfQWJyXHhlYmxsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIu'@;
put 'X01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubmRlZ19NXHhlOWluZGVnX0RceGVibnNjaGRlZ19NXHhlYnR0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRl'@;
put 'ZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTVx4ZTkuX0RceGViLl9NXHhlYi5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01ceGU5X0RceGViX01ceGViX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZv'@;
put 'cm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6'@;
put 'IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFzdERheToiW0dceGVic2NodGVyIHVtXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4i'@;
put 'W0xlc2NodGVuXSBkZGRkIFt1bV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltMZXNjaHRlXSBkZGRkIFt1bV0gTFQifX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIG0oUil7cmV0dXJuIE0oUi5zdWJzdHIoMCxSLmluZGV4T2YoIiAiKSkpPyJhICIrUjoiYW4gIitSfSxwYXN0OmZ1bmN0'@;
put 'aW9uIGxlKFIpe3JldHVybiBNKFIuc3Vic3RyKDAsUi5pbmRleE9mKCIgIikpKT8idmlydSAiK1I6InZpcnVuICIrUn0sczoiZSBwdWVyIFNla29ubmVuIixzczoiJWQgU2Vrb25uZW4iLG06eCxtbToiJWQgTWludXR0ZW4iLGg6eCxoaDoiJWQgU3Rvbm5lbiIsZDp4LGRkOiIlZCBEZWVnIixN'@;
put 'OngsTU06IiVkIE1ceGU5aW50Iix5OngseXk6IiVkIEpvZXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTcxOTI6ZnVuY3Rpb24oYXQsTGUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0'@;
put 'cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJsbyIse21vbnRoczoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGVi'@;
put 'Nlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBl'@;
put 'OGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFc'@;
put 'dTBlYjhcdTBlYTFcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVj'@;
pu